Name: series-workflowmwh22 Phase: Succeeded StartedAt: 2026-06-30 05:56:58 +0000 UTC FinishedAt: 2026-06-30 10:19:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[0] Phase: Succeeded StartedAt: 2026-06-30 05:56:58 +0000 UTC FinishedAt: 2026-06-30 06:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 05:56:58 +0000 UTC FinishedAt: 2026-06-30 06:09:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CONNTRACK_SIP", "NF_CT_NETLINK", "NF_CT_NETLINK_HELPER", "NETFILTER_NETLINK_QUEUE", "NF_TABLES", "NF_TABLES_INET", "NF_TABLES_NETDEV", "NFT_FIB_IPV4", "NFT_FIB_IPV6", "NFT_FIB_NETDEV", "IP_SET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CONNTRACK_SIP", "NF_CT_NETLINK", "NF_CT_NETLINK_HELPER", "NETFILTER_NETLINK_QUEUE", "NF_TABLES", "NF_TABLES_INET", "NF_TABLES_NETDEV", "NFT_FIB_IPV4", "NFT_FIB_IPV6", "NFT_FIB_NETDEV", "IP_SET" ], "series_id": "a9040ae6-6a1e-4d82-b90c-bf8de413398b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_set_dump_do", "ip_set_dump_done", "ctnetlink_alloc_expect", "set_expected_rtp_rtcp", "nfnl_cthelper_expect_policy", "nfqnl_mangle", "nft_fib_validate", "nft_fib_netdev_validate", "nft_payload_set_init", "nft_payload_set_eval", "nft_pipapo_insert" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU0lQJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOS19IRUxQRVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfUVVFVUUmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JTkVUJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0OywKICAgICYjMzQ7TkZUX0ZJQl9JUFY0JiMzNDssCiAgICAmIzM0O05GVF9GSUJfSVBWNiYjMzQ7LAogICAgJiMzNDtORlRfRklCX05FVERFViYjMzQ7LAogICAgJiMzNDtJUF9TRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9zZXRfZHVtcF9kbyYjMzQ7LAogICAgJiMzNDtpcF9zZXRfZHVtcF9kb25lJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19hbGxvY19leHBlY3QmIzM0OywKICAgICYjMzQ7c2V0X2V4cGVjdGVkX3J0cF9ydGNwJiMzNDssCiAgICAmIzM0O25mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeSYjMzQ7LAogICAgJiMzNDtuZnFubF9tYW5nbGUmIzM0OywKICAgICYjMzQ7bmZ0X2ZpYl92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfZmliX25ldGRldl92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfcGlwYXBvX2luc2VydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIEl0IGFkZHMgdmFsaWRhdGlvbiBmb3IgcGF5bG9hZCB3cml0ZXMgYW5kIElQL0lQdjYgaGVhZGVycyBiZWZvcmUgbWFuZ2xpbmcsIGZpeGVzIGEgYnVnIGluIFNJUCBjb25udHJhY2sgZXhwZWN0YXRpb24sIGFkZHMgc3RhdGUgdHJhY2tpbmcgZm9yIHBpcGFwbyBzZXQgY2xvbmVzIHRvIHByb3Blcmx5IGhhbmRsZSBhYm9ydHMsIGFuZCBtb2RpZmllcyBjb25udHJhY2sgZXhwZWN0YXRpb24gYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLCBuZXRsaW5rIHF1ZXVlLCBuZnRhYmxlcyBwYXlsb2FkIG1hbmdsaW5nLCBhbmQgcGlwYXBvIHNldHMsIHdoaWNoIGFyZSBhbGwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU4NTgyYWY4MDg1MmMzMWE2OTZiOWFkYTJhOWI3MTQxYmJkNjBkOGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwNjowNjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcbmluZGV4IGE1MzFiNjU0YjhkOTY0Li42Y2ZhZDE1MmQ3ZDFiYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG5AQCAtMTQ4MCw3ICYjNDM7MTQ4MCwxMSBAQCBpcF9zZXRfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0c3RydWN0IGlwX3NldF9uZXQgKmluc3QgPVxuIFx0XHRcdChzdHJ1Y3QgaXBfc2V0X25ldCAqKWNiLVx1MDAzZWFyZ3NbSVBTRVRfQ0JfTkVUXTtcbiBcdFx0aXBfc2V0X2lkX3QgaW5kZXggPSAoaXBfc2V0X2lkX3QpY2ItXHUwMDNlYXJnc1tJUFNFVF9DQl9JTkRFWF07XG4tXHRcdHN0cnVjdCBpcF9zZXQgKnNldCA9IGlwX3NldF9yZWZfbmV0bGluayhpbnN0LCBpbmRleCk7XG4mIzQzO1x0XHRzdHJ1Y3QgaXBfc2V0ICpzZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0c2V0ID0gaXBfc2V0X3JlZl9uZXRsaW5rKGluc3QsIGluZGV4KTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0XHRpZiAoc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNldXJlZilcbiBcdFx0XHRzZXQtXHUwMDNldmFyaWFudC1cdTAwM2V1cmVmKHNldCwgY2IsIGZhbHNlKTtcbkBAIC0xNjg2LDcgJiM0MzsxNjkwLDkgQEAgaXBfc2V0X2R1bXBfZG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIHJlbGVhc2VfcmVmY291bnQ6XG4gXHQvKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igb3Igc2V0IGlzIGRvbmUsIHJlbGVhc2Ugc2V0ICovXG4gXHRpZiAocmV0IHx8ICFjYi1cdTAwM2VhcmdzW0lQU0VUX0NCX0FSRzBdKSB7XG4mIzQzO1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdHNldCA9IGlwX3NldF9yZWZfbmV0bGluayhpbnN0LCBpbmRleCk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0aWYgKHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZXVyZWYpXG4gXHRcdFx0c2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNldXJlZihzZXQsIGNiLCBmYWxzZSk7XG4gXHRcdHByX2RlYnVnKFwmIzM0O3JlbGVhc2Ugc2V0ICVzXFxuXCYjMzQ7LCBzZXQtXHUwMDNlbmFtZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xuaW5kZXggMzg2MzBjNWUwMDZmMDguLjdhZTY4ZDYwNTg2YTIzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXG5AQCAtMzA2LDcgJiM0MzszMDYsNyBAQCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqbmZfY3RfZXhwZWN0X2FsbG9jKHN0cnVjdCBuZl9jb25uICptZSlcbiB7XG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqbmV3O1xuIFxuLVx0bmV3ID0ga21lbV9jYWNoZV9hbGxvYyhuZl9jdF9leHBlY3RfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRuZXcgPSBrbWVtX2NhY2hlX3phbGxvYyhuZl9jdF9leHBlY3RfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghbmV3KVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbkBAIC0zOTEsNiAmIzQzOzM5MSw3IEBAIHZvaWQgbmZfY3RfZXhwZWN0X2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdW5zaWduZWQgaW50IGNsYXNzLFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXG4gXHRtZW1zZXQoXHUwMDI2ZXhwLVx1MDAzZXNhdmVkX2FkZHIsIDAsIHNpemVvZihleHAtXHUwMDNlc2F2ZWRfYWRkcikpO1xuIFx0bWVtc2V0KFx1MDAyNmV4cC1cdTAwM2VzYXZlZF9wcm90bywgMCwgc2l6ZW9mKGV4cC1cdTAwM2VzYXZlZF9wcm90bykpO1xuJiM0MztcdGV4cC1cdTAwM2VkaXIgPSAwO1xuICNlbmRpZlxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5pbmRleCA0MjE3NzE1ZDQyZGMyNC4uMzFjYmIxYjU1YjllNmMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuQEAgLTM1NDksOCAmIzQzOzM1NDksNiBAQCBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0aWYgKGNkYVtDVEFfRVhQRUNUX0ZMQUdTXSkge1xuIFx0XHRleHAtXHUwMDNlZmxhZ3MgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9FWFBFQ1RfRkxBR1NdKSk7XG4gXHRcdGV4cC1cdTAwM2VmbGFncyBcdTAwMjY9IH5ORl9DVF9FWFBFQ1RfVVNFUlNQQUNFO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZXhwLVx1MDAzZWZsYWdzID0gMDtcbiBcdH1cbiBcdGlmIChjZGFbQ1RBX0VYUEVDVF9GTl0pIHtcbiBcdFx0Y29uc3QgY2hhciAqbmFtZSA9IG5sYV9kYXRhKGNkYVtDVEFfRVhQRUNUX0ZOXSk7XG5AQCAtMzU2Miw4ICYjNDM7MzU2MCw3IEBAIGN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0Z290byBlcnJfb3V0O1xuIFx0XHR9XG4gXHRcdGV4cC1cdTAwM2VleHBlY3RmbiA9IGV4cGZuLVx1MDAzZWV4cGVjdGZuO1xuLVx0fSBlbHNlXG4tXHRcdGV4cC1cdTAwM2VleHBlY3RmbiA9IE5VTEw7XG4mIzQzO1x0fVxuIFxuIFx0ZXhwLVx1MDAzZWNsYXNzID0gY2xhc3M7XG4gXHRleHAtXHUwMDNlbWFzdGVyID0gY3Q7XG5AQCAtMzU4MywxMiAmIzQzOzM1ODAsNiBAQCBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRcdFx0XHRcdCBleHAsIG5mX2N0X2wzbnVtKGN0KSk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0Z290byBlcnJfb3V0O1xuLSNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXG4tXHR9IGVsc2Uge1xuLVx0XHRtZW1zZXQoXHUwMDI2ZXhwLVx1MDAzZXNhdmVkX2FkZHIsIDAsIHNpemVvZihleHAtXHUwMDNlc2F2ZWRfYWRkcikpO1xuLVx0XHRtZW1zZXQoXHUwMDI2ZXhwLVx1MDAzZXNhdmVkX3Byb3RvLCAwLCBzaXplb2YoZXhwLVx1MDAzZXNhdmVkX3Byb3RvKSk7XG4tXHRcdGV4cC1cdTAwM2VkaXIgPSAwO1xuLSNlbmRpZlxuIFx0fVxuIFx0cmV0dXJuIGV4cDtcbiBlcnJfb3V0OlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbmluZGV4IDVlYzNhNGE0YmJkNzA3Li5mM2Y5MGE4NjYzMzg5NCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuQEAgLTk1Niw3ICYjNDM7OTU2LDYgQEAgc3RhdGljIGludCBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdFx0c2FkZHIgPSBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzO1xuIFx0fSBlbHNlIGlmIChzaXBfZXh0ZXJuYWxfbWVkaWEpIHtcbi1cdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYl9kc3Qoc2tiKS1cdTAwM2VkZXY7XG4gXHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7XG4gXHRcdHN0cnVjdCBmbG93aSBmbDtcbiBcbkBAIC05NzgsNyAmIzQzOzk3NywxMSBAQCBzdGF0aWMgaW50IHNldF9leHBlY3RlZF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiBcdFx0ICogdGhyb3VnaCB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgdGhlIHNpZ25hbGxpbmcgcGVlci5cbiBcdFx0ICovXG4gXHRcdGlmIChkc3QpIHtcbi1cdFx0XHRib29sIGV4dGVybmFsX21lZGlhID0gKGRzdC1cdTAwM2VkZXYgPT0gZGV2KTtcbiYjNDM7XHRcdFx0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqdGhpc19kc3QgPSBza2JfZHN0KHNrYik7XG4mIzQzO1x0XHRcdGJvb2wgZXh0ZXJuYWxfbWVkaWEgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh0aGlzX2RzdCBcdTAwMjZcdTAwMjYgZHN0LVx1MDAzZWRldiA9PSB0aGlzX2RzdC1cdTAwM2VkZXYpXG4mIzQzO1x0XHRcdFx0ZXh0ZXJuYWxfbWVkaWEgPSB0cnVlO1xuIFxuIFx0XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4gXHRcdFx0aWYgKGV4dGVybmFsX21lZGlhKVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG5pbmRleCBmMTQ2MGI2ODNkN2FmNy4uMmNiY2NhOTExMGRiZjUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG5AQCAtMTYzLDYgJiM0MzsxNjMsOCBAQCBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3koc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpleHBlY3RfcG9saWN5LFxuIFx0XHQgICAgdGJbTkZDVEhfUE9MSUNZX05BTUVdLCBORl9DVF9IRUxQRVJfTkFNRV9MRU4pO1xuIFx0ZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgPVxuIFx0XHRudG9obChubGFfZ2V0X2JlMzIodGJbTkZDVEhfUE9MSUNZX0VYUEVDVF9NQVhdKSk7XG4mIzQzO1x0aWYgKCFleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZClcbiYjNDM7XHRcdGV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQ7XG4gXHRpZiAoZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgXHUwMDNlIE5GX0NUX0VYUEVDVF9NQVhfQ05UKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuaW5kZXggODBjYTA3N2I4MWJkNWEuLjM1ZDRjNmM2MjhmZmMxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuQEAgLTExODQsNiAmIzQzOzExODQsMTczIEBAIG5mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGludCBxdWV1ZW51bSlcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcG9wdHMoY29uc3Qgc3RydWN0IGlwaGRyICppcGhfbmV3LFxuJiM0MztcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwaGRyICppcGhfb3JpZyA9IGlwX2hkcihlLVx1MDAzZXNrYik7XG4mIzQzO1x0dW5zaWduZWQgaW50IGlobCA9IGlwaF9uZXctXHUwMDNlaWhsICogNDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlwaF9uZXctXHUwMDNlaWhsICE9IGlwaF9vcmlnLVx1MDAzZWlobClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoaWhsID09IHNpemVvZigqaXBoX29yaWcpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZW1jbXAoaXBoX25ldyAmIzQzOyAxLCBpcF9oZHIoZS1cdTAwM2Vza2IpICYjNDM7IDEsIGlobCAtIHNpemVvZigqaXBoX29yaWcpKSA9PSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSlcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBpaGw7XG4mIzQzO1xuJiM0MztcdGlmIChkYXRhX2xlbiBcdTAwM2Mgc2l6ZW9mKCppcGgpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpaGwgPSBpcGgtXHUwMDNlaWhsICogNHU7XG4mIzQzO1x0aWYgKGlobCBcdTAwM2Mgc2l6ZW9mKCppcGgpIHx8IGRhdGFfbGVuIFx1MDAzYyBpaGwpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChpcGgtXHUwMDNldmVyc2lvbiAhPSA0IHx8XG4mIzQzO1x0ICAgICgoaXBoLVx1MDAzZWZyYWdfb2ZmIF4gaXBfaGRyKGUtXHUwMDNlc2tiKS1cdTAwM2VmcmFnX29mZikgXHUwMDI2IH5odG9ucyhJUF9ERikpICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIEJJRyBUQ1Agd29uJiMzOTt0IHdvcms7IG5ldGxpbmsgYXR0ciBsZW4gaXMgdTE2ICovXG4mIzQzO1x0aWYgKG50b2hzKGlwaC1cdTAwM2V0b3RfbGVuKSAhPSBkYXRhX2xlbilcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Lyogc3VwcG9ydCBmb3IgaXBvcHRzIG1hbmdsaW5nIHdvdWxkIHJlcXVpcmVcbiYjNDM7XHQgKiByZWNvbXBpbGUgJiM0Mzsgc2tiIHRyYW5zcG9ydCBoZWFkZXIgdXBkYXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBuZnFubF92YWxpZGF0ZV9pcG9wdHMoaXBoLCBlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihjb25zdCB1OCAqZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLFxuJiM0MztcdFx0XHRcdCAgICAgIGludCBzdGFydCwgaW50IGhkcmxlbilcbiYjNDM7e1xuJiM0MztcdHUxNiBvY3RldHM7XG4mIzQzO1xuJiM0MztcdGlmIChkYXRhX2xlbiBcdTAwM2MgaGRybGVuIHx8IGhkcmxlbiBcdTAwM2MgMilcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGhkcmxlbiBcdTAwM2UgMCkge1xuJiM0MztcdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2Yob2N0ZXRzKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0ZGF0YV9sZW4gLT0gc2l6ZW9mKG9jdGV0cyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNrYl9jb3B5X2JpdHMoZS1cdTAwM2Vza2IsIHN0YXJ0LCBcdTAwMjZvY3RldHMsIHNpemVvZihvY3RldHMpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChoZHJsZW4gXHUwMDNjIHNpemVvZihvY3RldHMpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0aGRybGVuIC09IHNpemVvZihvY3RldHMpO1xuJiM0MztcdFx0aWYgKG1lbWNtcChkYXRhLCBcdTAwMjZvY3RldHMsIHNpemVvZihvY3RldHMpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdHN0YXJ0ICYjNDM7PSBzaXplb2Yob2N0ZXRzKTtcbiYjNDM7XHRcdGRhdGEgJiM0Mzs9IHNpemVvZihvY3RldHMpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2V4dGhkcihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2X25ldyxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfb3JpZyA9IGlwdjZfaGRyKGUtXHUwMDNlc2tiKTtcbiYjNDM7XHRpbnQgZXh0aGRyX2NudCA9IDAsIHN0YXJ0ID0gc2l6ZW9mKCppcDZfb3JpZyk7XG4mIzQzO1x0Y29uc3QgdTggKmRhdGEgPSAoY29uc3QgdTggKilpcDZfbmV3O1xuJiM0MztcdHU4IG9yaWdfbmV4dGhkciA9IGlwNl9vcmlnLVx1MDAzZW5leHRoZHI7XG4mIzQzO1x0dTggbmV3X25leHRoZHIgPSBpcDZfbmV3LVx1MDAzZW5leHRoZHI7XG4mIzQzO1xuJiM0MztcdGlmIChuZXdfbmV4dGhkciAhPSBvcmlnX25leHRoZHIpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGRhdGEgJiM0Mzs9IHNpemVvZigqaXA2X25ldyk7XG4mIzQzO1x0ZGF0YV9sZW4gLT0gc2l6ZW9mKCppcDZfbmV3KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGlwdjZfZXh0X2hkcihvcmlnX25leHRoZHIpKSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaXB2Nl9vcHRfaGRyICpocDtcbiYjNDM7XHRcdHN0cnVjdCBpcHY2X29wdF9oZHIgX2hkcjtcbiYjNDM7XHRcdGludCBoZHJsZW47XG4mIzQzO1xuJiM0MztcdFx0aWYgKG9yaWdfbmV4dGhkciA9PSBORVhUSERSX05PTkUpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICh1bmxpa2VseShleHRoZHJfY250JiM0MzsmIzQzOyBcdTAwM2U9IElQNl9NQVhfRVhUX0hEUlNfQ05UKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGhwID0gc2tiX2hlYWRlcl9wb2ludGVyKGUtXHUwMDNlc2tiLCBzdGFydCwgc2l6ZW9mKF9oZHIpLCBcdTAwMjZfaGRyKTtcbiYjNDM7XHRcdGlmICghaHApXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRzd2l0Y2ggKG9yaWdfbmV4dGhkcikge1xuJiM0MztcdFx0Y2FzZSBORVhUSERSX0ZSQUdNRU5UOlxuJiM0MztcdFx0XHRoZHJsZW4gPSBzaXplb2Yoc3RydWN0IGZyYWdfaGRyKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIE5FWFRIRFJfQVVUSDpcbiYjNDM7XHRcdFx0aGRybGVuID0gaXB2Nl9hdXRobGVuKGhwKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRoZHJsZW4gPSBpcHY2X29wdGxlbihocCk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihkYXRhLCBkYXRhX2xlbiwgZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdGFydCwgaGRybGVuKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdG9yaWdfbmV4dGhkciA9IGhwLVx1MDAzZW5leHRoZHI7XG4mIzQzO1x0XHRocCA9IChjb25zdCB2b2lkICopZGF0YTtcbiYjNDM7XHRcdG5ld19uZXh0aGRyID0gaHAtXHUwMDNlbmV4dGhkcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmV3X25leHRoZHIgIT0gb3JpZ19uZXh0aGRyKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0ZGF0YV9sZW4gLT0gaGRybGVuO1xuJiM0MztcdFx0c3RhcnQgJiM0Mzs9IGhkcmxlbjtcbiYjNDM7XHRcdGRhdGEgJiM0Mzs9IGhkcmxlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDYoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNiwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2YoKmlwNikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIEJJRyBUQ1AvanVtYm9ncmFtcyB3b24mIzM5O3Qgd29yazsgbmV0bGluayBhdHRyIGxlbiBpcyB1MTYgKi9cbiYjNDM7XHRpZiAobnRvaHMoaXA2LVx1MDAzZXBheWxvYWRfbGVuKSAhPSBkYXRhX2xlbiAtIHNpemVvZigqaXA2KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlwNi1cdTAwM2V2ZXJzaW9uICE9IDYpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuZnFubF92YWxpZGF0ZV9leHRoZHIoaXA2LCBkYXRhX2xlbiwgZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX3dyaXRlKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChlLVx1MDAzZXN0YXRlLnBmKSB7XG4mIzQzO1x0Y2FzZSBORlBST1RPX0lQVjQ6XG4mIzQzO1x0XHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfaXA0KGRhdGEsIGRhdGFfbGVuLCBlKTtcbiYjNDM7XHRjYXNlIE5GUFJPVE9fSVBWNjpcbiYjNDM7XHRcdHJldHVybiBuZnFubF92YWxpZGF0ZV9pcDYoZGF0YSwgZGF0YV9sZW4sIGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICAgICEoSVA2Q0IoZS1cdTAwM2Vza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZTS0JfSlVNQk9HUkFNKTtcbiYjNDM7XHRjYXNlIE5GUFJPVE9fQlJJREdFOlxuJiM0MztcdFx0LyogTm8gd3JpdGUgc3VwcG9ydC4gQnJpZGdlIGlzIGR1YmlvdXM6IHVzZXJzcGFjZSBkb2VzbiYjMzk7dCBldmVuIHNlZSBMMiBoZWFkZXIgKi9cbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50XG4gbmZxbmxfbWFuZ2xlKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCBpbnQgZGlmZilcbiB7XG5AQCAtMTE5Miw2ICYjNDM7MTM1OSw5IEBAIG5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpXG4gXHRpZiAoZS1cdTAwM2VzdGF0ZS5uZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4mIzQzO1x0aWYgKCFuZnFubF92YWxpZGF0ZV93cml0ZShkYXRhLCBkYXRhX2xlbiwgZSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAoZGlmZiBcdTAwM2MgMCkge1xuIFx0XHR1bnNpZ25lZCBpbnQgbWluX2xlbiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KGUtXHUwMDNlc2tiKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9maWIuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jXG5pbmRleCBlMDQ4ZjA1Njk0Y2RkZC4uODk1NTUzODBmMWM1YTAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9maWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfZmliLmNcbkBAIC0zMSw2ICYjNDM7MzEsMTUgQEAgaW50IG5mdF9maWJfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxuIFx0Y29uc3Qgc3RydWN0IG5mdF9maWIgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIFx0dW5zaWduZWQgaW50IGhvb2tzO1xuIFxuJiM0MztcdHN3aXRjaCAoY3R4LVx1MDAzZWZhbWlseSkge1xuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY0OlxuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY2OlxuJiM0MztcdGNhc2UgTkZQUk9UT19JTkVUOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoIChwcml2LVx1MDAzZXJlc3VsdCkge1xuIFx0Y2FzZSBORlRfRklCX1JFU1VMVF9PSUY6XG4gXHRjYXNlIE5GVF9GSUJfUkVTVUxUX09JRk5BTUU6XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jXG5pbmRleCAzZjM0NzhhYmQ4NDU0Ni4uNTc3NGE3NTQ0MDI3ODAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuY1xuQEAgLTUwLDYgJiM0Mzs1MCwzMyBAQCBzdGF0aWMgdm9pZCBuZnRfZmliX25ldGRldl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBuZnRfZmliX25ldGRldl92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZnRfZmliICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaG9va3M7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocHJpdi1cdTAwM2VyZXN1bHQpIHtcbiYjNDM7XHRjYXNlIE5GVF9GSUJfUkVTVUxUX09JRjpcbiYjNDM7XHRjYXNlIE5GVF9GSUJfUkVTVUxUX09JRk5BTUU6XG4mIzQzO1x0XHRob29rcyA9ICgxIFx1MDAzY1x1MDAzYyBORl9ORVRERVZfSU5HUkVTUyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GVF9GSUJfUkVTVUxUX0FERFJUWVBFOlxuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVEFfRklCX0ZfSUlGKVxuJiM0MztcdFx0XHRob29rcyA9ICgxIFx1MDAzY1x1MDAzYyBORl9ORVRERVZfSU5HUkVTUyk7XG4mIzQzO1x0XHRlbHNlIGlmIChwcml2LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRBX0ZJQl9GX09JRilcbiYjNDM7XHRcdFx0aG9va3MgPSAoMSBcdTAwM2NcdTAwM2MgTkZfTkVUREVWX0VHUkVTUyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGhvb2tzID0gKDEgXHUwMDNjXHUwMDNjIE5GX05FVERFVl9JTkdSRVNTKSB8XG4mIzQzO1x0XHRcdFx0KDEgXHUwMDNjXHUwMDNjIE5GX05FVERFVl9FR1JFU1MpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjdHgtXHUwMDNlY2hhaW4sIGhvb2tzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2ZpYl9uZXRkZXZfdHlwZTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfZmliX25ldGRldl9vcHMgPSB7XG4gXHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9maWJfbmV0ZGV2X3R5cGUsXG5AQCAtNTcsNyAmIzQzOzg0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2ZpYl9uZXRkZXZfb3BzID0ge1xuIFx0LmV2YWxcdFx0PSBuZnRfZmliX25ldGRldl9ldmFsLFxuIFx0LmluaXRcdFx0PSBuZnRfZmliX2luaXQsXG4gXHQuZHVtcFx0XHQ9IG5mdF9maWJfZHVtcCxcbi1cdC52YWxpZGF0ZVx0PSBuZnRfZmliX3ZhbGlkYXRlLFxuJiM0MztcdC52YWxpZGF0ZVx0PSBuZnRfZmliX25ldGRldl92YWxpZGF0ZSxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmliX25ldGRldl90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCAzNDVlZmYxNDBkNTZmOC4uMzkxNTM5YTFjZWFhNzcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTgzNCw2ICYjNDM7ODM0LDI0OSBAQCBuZnRfcGF5bG9hZF9zZXRfdmxhbihjb25zdCB1MzIgKnNyYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG9mZnNldCwgdTggbGVuLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MzsvKiBJbmdyZXNzIGlzIHZlcnkgZWFybHksIGJlZm9yZSBsMyBwcm90b2NvbCBoYW5kbGVycy5cbiYjNDM7ICogVGhlcmUgc2hvdWxkIGJlIG5vIGluLXRyZWUgY29kZSB0aGF0IHRydXN0cyBsMy9sNCBoZWFkZXJzXG4mIzQzOyAqIGJldHdlZW4gaW5ncmVzcyBhbmQgTkZfSU5FVF9QUkVfUk9VVElORyBob29rcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG5mdF9pbl9pbmdyZXNzKGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHMtXHUwMDNlcGYgPT0gTkZQUk9UT19ORVRERVYgXHUwMDI2XHUwMDI2IHMtXHUwMDNlaG9vayA9PSBORl9ORVRERVZfSU5HUkVTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuJiM0MztcdFx0XHRcdGNvbnN0IHUzMiAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9mZnNldCA9IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IHNrYl9uZXR3b3JrX29mZnNldChwa3QtXHUwMDNlc2tiKTtcbiYjNDM7XHRjb25zdCB1OCAqbmV3X29jdGV0cyA9IChjb25zdCB1OCAqKXNyYztcbiYjNDM7XHR1OCBvbGRfb2N0ZXQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocHJpdi1cdTAwM2VvZmZzZXQpIHtcbiYjNDM7XHRjYXNlIDA6IC8qIGNzdW0gZml4dXBzIGRvZXMgZXhwYW5kIGRzY3AvdG9zIHN0b3JlIHRvIDIgYnl0ZXMuXG4mIzQzO1x0XHQgKiBtYWtlIHN1cmUgaWhsL3ZlcnNpb24gcmVtYWluIHVuY2hhbmdlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHNrYl9jb3B5X2JpdHMocGt0LVx1MDAzZXNrYiwgb2Zmc2V0LCBcdTAwMjZvbGRfb2N0ZXQsIHNpemVvZihvbGRfb2N0ZXQpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiA9PSAyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICAgICpuZXdfb2N0ZXRzID09IG9sZF9vY3RldDtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgdG9zKTpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiA9PSAxO1xuJiM0MztcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBpZCk6XG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VsZW4gPT0gMjtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgdHRsKTpcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWxlbiA9PSAxKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJpdi1cdTAwM2VsZW4gIT0gMilcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHNhbWUsIGNzdW0gZml4dXAgZG9lcyBleHBhbmQgdHRsIHN0b3JlIHRvIHR3byBieXRlcy5cbiYjNDM7XHRcdCAqIGNoZWNrIHByb3RvY29sIGlzIG5vdCBhbHRlcmVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc2tiX2NvcHlfYml0cyhwa3QtXHUwMDNlc2tiLCBvZmZzZXQgJiM0MzsgMSwgXHUwMDI2b2xkX29jdGV0LCBzaXplb2Yob2xkX29jdGV0KSkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gbmV3X29jdGV0c1sxXSA9PSBvbGRfb2N0ZXQ7XG4mIzQzO1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiBcdTAwM2M9IDIgJiM0MzsgNCAmIzQzOyA0O1xuJiM0MztcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6XG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VsZW4gXHUwMDNjPSA0ICYjNDM7IDQ7XG4mIzQzO1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKTpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiBcdTAwM2M9IDQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19pcDYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbiYjNDM7XHRcdFx0XHRjb25zdCB1MzIgKnNyYylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppaCA9IChjb25zdCB2b2lkICopc3JjO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHByaXYtXHUwMDNlb2Zmc2V0KSB7XG4mIzQzO1x0Y2FzZSAwOiAvKiBzdG9yZSB0byBkc2NwIG11c3Qgbm90IGFsdGVyIGlwNiB2ZXJzaW9uICovXG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VsZW4gXHUwMDNjPSA0IFx1MDAyNlx1MDAyNiBpaC1cdTAwM2V2ZXJzaW9uID09IDY7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gMjtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBob3BfbGltaXQpOlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuID09IDE7XG4mIzQzO1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gMTYgJiM0MzsgMTY7XG4mIzQzO1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gMTY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19hcnAoY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdC8qIFZhcmlhYmxlIHNpemUgZm9yIHN0YW5kYXJkIGV0aGVybmV0IGFycCAqL1xuJiM0MztcdGNvbnN0IHVuc2lnbmVkIGludCBldGhfaXAgPSAyICogKEVUSF9BTEVOICYjNDM7IDQpO1xuJiM0MztcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBwcml2LVx1MDAzZW9mZnNldDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChvZmZzZXQpIHtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBhcnBoZHIsIGFyX29wKTpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiA9PSAyO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHBlcm1pdCB3cml0ZXMgcG9zdCBmaXhlZCBhcnAgaGVhZGVyIHNpemUuIG9mZnNldCAmIzQzOyBsZW4gYXJlXG4mIzQzO1x0ICogY2hlY2tlZCB2cyBza2Igc2l6ZSB2aWEgc2tiX2Vuc3VyZV93cml0YWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gb2Zmc2V0IFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBhcnBoZHIpIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWxlbiBcdTAwM2M9IGV0aF9pcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX25ldGRldihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHUzMiAqc3JjKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfTkZfVEFCTEVTX05FVERFVlxuJiM0MztcdHN3aXRjaCAocGt0LVx1MDAzZXNrYi1cdTAwM2Vwcm90b2NvbCkge1xuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfQVJQKTpcbiYjNDM7XHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfYXJwKHByaXYpO1xuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuJiM0MztcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDQocGt0LCBwcml2LCBzcmMpO1xuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4mIzQzO1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNihwa3QsIHByaXYsIHNyYyk7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XHQvKiBkZWZhdWx0IHRvIGZhbHNlIGZvciBub3csIHJlbGF4IGxhdGVyIGluIGNhc2Ugd2UgaGF2ZVxuJiM0MztcdCAqIHVzZS1jYXNlcyB0aGF0IG5lZWQgaW5uZXIgaGVhZGVyIG1hbmlwdWxhdGlvbiBmb3JcbiYjNDM7XHQgKiBlbmNhcHN1bGF0ZWQgdHJhZmZpYyBsaWtlIHZsYW4gb3IgUFBQb0UuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYnJpZGdlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3QgdTMyICpzcmMpXG4mIzQzO3tcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX1RBQkxFU19CUklER0UpXG4mIzQzO1x0c3dpdGNoIChwa3QtXHUwMDNlZXRoZXJ0eXBlKSB7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9BUlApOlxuJiM0MztcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19hcnAocHJpdik7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4mIzQzO1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNChwa3QsIHByaXYsIHNyYyk7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbiYjNDM7XHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA2KHBrdCwgcHJpdiwgc3JjKTtcbiYjNDM7XHR9XG4mIzQzOyNlbmRpZlxuJiM0MztcdC8qIHNlZSBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2OiBkZWZhdWx0IHRvIGZhbHNlICovXG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuJiM0MztcdFx0XHQgICAgY29uc3QgdTMyICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHBrdC1cdTAwM2VzdGF0ZS1cdTAwM2VwZikge1xuJiM0MztcdGNhc2UgTkZQUk9UT19BUlA6XG4mIzQzO1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2FycChwcml2KTtcbiYjNDM7XHRjYXNlIE5GUFJPVE9fQlJJREdFOlxuJiM0MztcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19icmlkZ2UocGt0LCBwcml2LCBzcmMpO1xuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY0OlxuJiM0MztcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDQocGt0LCBwcml2LCBzcmMpO1xuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY2OlxuJiM0MztcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDYocGt0LCBwcml2LCBzcmMpO1xuJiM0MztcdGNhc2UgTkZQUk9UT19ORVRERVY6XG4mIzQzO1x0XHRpZiAocGt0LVx1MDAzZXN0YXRlLVx1MDAzZWhvb2sgPT0gTkZfTkVUREVWX0lOR1JFU1MpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19uZXRkZXYocGt0LCBwcml2LCBzcmMpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBjaGVjayBsaW5rbGF5ZXIgbW9kaWZpY2F0aW9ucyBkb24mIzM5O3Qgc3BpbGwgaW50byBuZXR3b3JrIGhlYWRlci4gKi9cbiYjNDM7c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKG5mdF9pbl9pbmdyZXNzKHBrdC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG9mZnNldCBcdTAwM2M9IHNrYl9uZXR3b3JrX29mZnNldChwa3QtXHUwMDNlc2tiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHByaXYtXHUwMDNlYmFzZSkge1xuJiM0MztcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbiYjNDM7XHRcdGlmIChjdHgtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xuJiM0MztcdFx0XHRpZiAob2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjaykgPT0gcHJpdi1cdTAwM2Vjc3VtX29mZnNldClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiB0cnVlOyAvKiBydW4gdGltZSB2YWxpZGF0aW9uIHJlcXVpcmVkICovXG4mIzQzO1x0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwmIzM0O3JlLXVwZGF0ZVwmIzM0OyBvZiBMNCBjaGVja3N1bSAqL1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJiMzOTt0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXG4mIzQzO1x0XHQgKiBvZmZzZXRzIGNhbiBjb3JydXB0IEw0IG9yIHBheWxvYWQgYnV0IG5vdCBsMyBoZWFkZXJzLlxuJiM0MztcdFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGRvIG5vdCBhbGxvdyBhcmJpdHJhcnkgbmV0d29yayBoZWFkZXIgbWFuZ2xpbmcgdmlhIGJvZ3VzIGNzdW1fb2ZmLlxuJiM0MzsgKiBXZSBvbmx5IHN1cHBvcnQgaXB2NC4gIE9ubHkgTkZQUk9UT19JUFY0IGNhbiBiZSBjaGVja2VkIGZyb20gY29udHJvbFxuJiM0MzsgKiBwbGFuZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAocGt0LVx1MDAzZXN0YXRlLVx1MDAzZXBmKSB7XG4mIzQzO1x0Y2FzZSBORlBST1RPX0lQVjQ6XG4mIzQzO1x0XHQvKiBXYXJuaW5nOiBORlBST1RPX0lORVQgd2FzIG5vdCBjaGVja2VkOyB3ZSBjYW4mIzM5O3QgcmV0dXJuIHRydWUgaGVyZS4gKi9cbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY2OlxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGNhc2UgTkZQUk9UT19CUklER0U6XG4mIzQzO1x0XHRyZXR1cm4gcGt0LVx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbiYjNDM7XHRjYXNlIE5GUFJPVE9fTkVUREVWOlxuJiM0MztcdFx0cmV0dXJuIHBrdC1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAocHJpdi1cdTAwM2ViYXNlKSB7XG4mIzQzO1x0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuJiM0MztcdFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTtcbiYjNDM7XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4mIzQzO1x0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4mIzQzO1x0XHQvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmVcbiYjNDM7XHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbkBAIC04NjEsOCAmIzQzOzExMDQsMTIgQEAgc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0XHR9XG4gXG4gXHRcdG9mZnNldCA9IHNrYl9tYWNfaGVhZGVyKHNrYikgLSBza2ItXHUwMDNlZGF0YSAtIHZsYW5faGxlbjtcbiYjNDM7XHRcdGlmICghbmZ0X2xsX3dyaXRlX29rKHBrdCwgcHJpdi1cdTAwM2VsZW4gJiM0MzsgcHJpdi1cdTAwM2VvZmZzZXQgJiM0Mzsgb2Zmc2V0KSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbiYjNDM7XHRcdGlmICghbmZ0X25oX3dyaXRlX29rKHBrdCwgcHJpdiwgc3JjKSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXHRcdG9mZnNldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbkBAIC04OTQsNiAmIzQzOzExNDEsNyBAQCBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdHRzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBwcml2LVx1MDAzZWxlbiwgMCk7XG4gXG4gXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXG4gXHRcdFx0Z290byBlcnI7XG4gXG5AQCAtOTYwLDcgJiM0MzsxMjA4LDI2IEBAIHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBcdHN3aXRjaCAoY3N1bV90eXBlKSB7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fTk9ORTpcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fb2Zmc2V0KSAvKiBub25zZW5zaWNhbCAqL1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzID09IDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIFVzZXJzcGFjZSByZXF1ZXN0cyBMNCBjaGVja3N1bSB1cGRhdGUsIGUuZy46XG4mIzQzO1x0XHQgKiAtIElQdjYgc3RhdGVsZXNzIE5BVCAobm8gbDMgY3N1bSlcbiYjNDM7XHRcdCAqIC0gdHJhbnNwb3J0IGhlYWRlciBtYW5nbGluZ1xuJiM0MztcdFx0ICogLSBpbm5lciBkYXRhIG1hbmdsaW5nXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWJhc2UgPT0gTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVIgfHxcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWJhc2UgPT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUiB8fFxuJiM0MztcdFx0ICAgIHByaXYtXHUwMDNlYmFzZSA9PSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVIpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9DU1VNX0lORVQ6XG4mIzQzO1x0XHRpZiAoIW5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY3R4LCBwcml2KSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9DU1VNX1NDVFA6XG4gXHRcdGlmIChwcml2LVx1MDAzZWJhc2UgIT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUilcbkBAIC05NjgsNiAmIzQzOzEyMzUsOSBAQCBzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXG4gXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ICE9IG9mZnNldG9mKHN0cnVjdCBzY3RwaGRyLCBjaGVja3N1bSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uY1xuaW5kZXggNzA2Yzc4ODUzZjI0NWIuLjk3OGJiMGMwMTEwNjgyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcbkBAIC0zNDIsNiAmIzQzOzM0Miw4IEBAXG4gI2luY2x1ZGUgXCYjMzQ7bmZ0X3NldF9waXBhcG9fYXZ4Mi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bmZ0X3NldF9waXBhcG8uaFwmIzM0O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBuZnRfcGlwYXBvX2Fib3J0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpO1xuJiM0MztcbiAvKipcbiAgKiBwaXBhcG9fcmVmaWxsKCkgLSBGb3IgZWFjaCBzZXQgYml0LCBzZXQgYml0cyBmcm9tIHNlbGVjdGVkIG1hcHBpbmcgdGFibGUgaXRlbVxuICAqIEBtYXA6XHRCaXRtYXAgdG8gYmUgc2Nhbm5lZCBmb3Igc2V0IGJpdHNcbkBAIC0xMjk2LDcgJiM0MzsxMjk4LDcgQEAgc3RhdGljIGludCBuZnRfcGlwYXBvX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRjb25zdCB1OCAqc3RhcnRfcCwgKmVuZF9wO1xuIFx0aW50IGksIGJzaXplX21heCwgZXJyID0gMDtcbiBcbi1cdGlmICghbSlcbiYjNDM7XHRpZiAoIW0gfHwgbS1cdTAwM2VzdGF0ZSA9PSBORlRfUElQQVBPX0NMT05FX0VSUilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfS0VZX0VORCkpXG5AQCAtMTM2Nyw4ICYjNDM7MTM2OSwxMCBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBcdFx0ZWxzZVxuIFx0XHRcdHJldCA9IHBpcGFwb19leHBhbmQoZiwgc3RhcnQsIGVuZCwgZi1cdTAwM2Vncm91cHMgKiBmLVx1MDAzZWJiKTtcbiBcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRlcnIgPSByZXQ7XG4mIzQzO1x0XHRcdGdvdG8gYWJvcnQ7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGlmIChmLVx1MDAzZWJzaXplIFx1MDAzZSBic2l6ZV9tYXgpXG4gXHRcdFx0YnNpemVfbWF4ID0gZi1cdTAwM2Vic2l6ZTtcbkBAIC0xMzg0LDcgJiM0MzsxMzg4LDcgQEAgc3RhdGljIGludCBuZnRfcGlwYXBvX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXG4gXHRcdGVyciA9IHBpcGFwb19yZWFsbG9jX3NjcmF0Y2gobSwgYnNpemVfbWF4KTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRnb3RvIGFib3J0O1xuIFxuIFx0XHRtLVx1MDAzZWJzaXplX21heCA9IGJzaXplX21heDtcbiBcdH0gZWxzZSB7XG5AQCAtMTM5Niw3ICYjNDM7MTQwMCwyNiBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBcbiBcdHBpcGFwb19tYXAobSwgcnVsZW1hcCwgZSk7XG4gXG4mIzQzO1x0bS1cdTAwM2VzdGF0ZSA9IE5GVF9QSVBBUE9fQ0xPTkVfTU9EO1xuIFx0cmV0dXJuIDA7XG4mIzQzO2Fib3J0OlxuJiM0MztcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobS1cdTAwM2VzdGF0ZSA9PSBORlRfUElQQVBPX0NMT05FX0VSUik7XG4mIzQzO1xuJiM0MztcdC8qIFR3byByb2xsYmFjayBjYXNlczpcbiYjNDM7XHQgKiAxKSBubyBwcmV2aW91cyBjaGFuZ2VzLiAgbmZ0X3BpcGFwb19hYm9ydCBpcyBub3RcbiYjNDM7XHQgKiBndWFyYW50ZWVkIHRvIGJlIGludm9rZWQgKHRoZXJlIG1pZ2h0IGJlIG5vIGZ1cnRoZXJcbiYjNDM7XHQgKiBhZGQvZGVsZXRlIHJlcXVlc3RzIGNvbWluZyBhZnRlciB0aGlzKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIDIpIHdlIGhhZCBwcmV2aW91cyBjaGFuZ2VzOiB0aGVyZSBhcmUgdHJhbnNhY3Rpb25cbiYjNDM7XHQgKiByZWNvcmRzIHBvaW50aW5nIHRvIHRoaXMgc2V0LiAgTGVhdmUgdGhlIHJvbGxiYWNrIHRvXG4mIzQzO1x0ICogdGhlIHRyYW5zYWN0aW9uIGhhbmRsaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChtLVx1MDAzZXN0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfTkVXKVxuJiM0MztcdFx0bmZ0X3BpcGFwb19hYm9ydChzZXQpOyAvKiByZWxlYXNlcyBtICovXG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bS1cdTAwM2VzdGF0ZSA9IE5GVF9QSVBBUE9fQ0xPTkVfRVJSO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiAvKipcbkBAIC0xNDczLDYgJiM0MzsxNDk2LDcgQEAgc3RhdGljIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICpwaXBhcG9fY2xvbmUoc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm9sZClcbiBcdFx0ZHN0JiM0MzsmIzQzOztcbiBcdH1cbiBcbiYjNDM7XHRuZXctXHUwMDNlc3RhdGUgPSBORlRfUElQQVBPX0NMT05FX05FVztcbiBcdHJldHVybiBuZXc7XG4gXG4gb3V0X210OlxuQEAgLTE4OTYsNyAmIzQzOzE5MjAsNyBAQCBuZnRfcGlwYXBvX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0LyogcmVtb3ZhbCBtdXN0IG9jY3VyIG9uIHByaXYtXHUwMDNlY2xvbmUsIGlmIHdlIGFyZSBsb3cgb24gbWVtb3J5XG4gXHQgKiB3ZSBoYXZlIG5vIGNob2ljZSBhbmQgbXVzdCBmYWlsIHRoZSByZW1vdmFsIHJlcXVlc3QuXG4gXHQgKi9cbi1cdGlmICghbSlcbiYjNDM7XHRpZiAoIW0gfHwgbS1cdTAwM2VzdGF0ZSA9PSBORlRfUElQQVBPX0NMT05FX0VSUilcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRlID0gcGlwYXBvX2dldChtLCAoY29uc3QgdTggKillbGVtLVx1MDAzZWtleS52YWwuZGF0YSxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmggYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmhcbmluZGV4IGI4MmFiYjAzNTc2ZWRkLi5hMTllOTgwZDA2ZWY0MiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oXG5AQCAtMTMxLDkgJiM0MzsxMzEsMTYgQEAgc3RydWN0IG5mdF9waXBhcG9fc2NyYXRjaCB7XG4gXHR1bnNpZ25lZCBsb25nIF9fbWFwW107XG4gfTtcbiBcbiYjNDM7ZW51bSBuZnRfcGlwYXBvX2Nsb25lX3N0YXRlIHtcbiYjNDM7XHRORlRfUElQQVBPX0NMT05FX05FVyxcbiYjNDM7XHRORlRfUElQQVBPX0NMT05FX01PRCxcbiYjNDM7XHRORlRfUElQQVBPX0NMT05FX0VSUixcbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggLSBEYXRhIHVzZWQgZm9yIGxvb2t1cCBhbmQgbWF0Y2hpbmdcbiAgKiBAZmllbGRfY291bnQ6XHRBbW91bnQgb2YgZmllbGRzIGluIHNldFxuJiM0MzsgKiBAc3RhdGU6XHRcdGFkZC9kZWxldGUgc3RhdGU7IHVzZWQgZnJvbSBjb250cm9sIHBsYW5lXG4gICogQGJzaXplX21heDpcdFx0TWF4aW11bSBsb29rdXAgdGFibGUgYnVja2V0IHNpemUgb2YgYWxsIGZpZWxkcywgaW4gbG9uZ3NcbiAgKiBAc2NyYXRjaDpcdFx0UHJlYWxsb2NhdGVkIHBlci1DUFUgbWFwcyBmb3IgcGFydGlhbCBtYXRjaGluZyByZXN1bHRzXG4gICogQHJjdTpcdFx0TWF0Y2hpbmcgZGF0YSBpcyBzd2FwcGVkIG9uIGNvbW1pdHNcbkBAIC0xNDEsNiAmIzQzOzE0OCw3IEBAIHN0cnVjdCBuZnRfcGlwYXBvX3NjcmF0Y2gge1xuICAqL1xuIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoIHtcbiBcdHU4IGZpZWxkX2NvdW50O1xuJiM0MztcdGVudW0gbmZ0X3BpcGFwb19jbG9uZV9zdGF0ZSBzdGF0ZTo4O1xuIFx0dW5zaWduZWQgaW50IGJzaXplX21heDtcbiBcdHN0cnVjdCBuZnRfcGlwYXBvX3NjcmF0Y2ggKiBfX3BlcmNwdSAqc2NyYXRjaDtcbiBcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LX0hFTFBFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lORVQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7LAogICAgJiMzNDtORlRfRklCX0lQVjQmIzM0OywKICAgICYjMzQ7TkZUX0ZJQl9JUFY2JiMzNDssCiAgICAmIzM0O05GVF9GSUJfTkVUREVWJiMzNDssCiAgICAmIzM0O0lQX1NFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3NldF9kdW1wX2RvJiMzNDssCiAgICAmIzM0O2lwX3NldF9kdW1wX2RvbmUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2FsbG9jX2V4cGVjdCYjMzQ7LAogICAgJiMzNDtzZXRfZXhwZWN0ZWRfcnRwX3J0Y3AmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5JiMzNDssCiAgICAmIzM0O25mcW5sX21hbmdsZSYjMzQ7LAogICAgJiMzNDtuZnRfZmliX3ZhbGlkYXRlJiMzNDssCiAgICAmIzM0O25mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9waXBhcG9faW5zZXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gSXQgYWRkcyB2YWxpZGF0aW9uIGZvciBwYXlsb2FkIHdyaXRlcyBhbmQgSVAvSVB2NiBoZWFkZXJzIGJlZm9yZSBtYW5nbGluZywgZml4ZXMgYSBidWcgaW4gU0lQIGNvbm50cmFjayBleHBlY3RhdGlvbiwgYWRkcyBzdGF0ZSB0cmFja2luZyBmb3IgcGlwYXBvIHNldCBjbG9uZXMgdG8gcHJvcGVybHkgaGFuZGxlIGFib3J0cywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBleHBlY3RhdGlvbiBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXRmaWx0ZXIgbG9naWMsIG5ldGxpbmsgcXVldWUsIG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcsIGFuZCBwaXBhcG8gc2V0cywgd2hpY2ggYXJlIGFsbCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ODU4MmFmODA4NTJjMzFhNjk2YjlhZGEyYTliNzE0MWJiZDYwZDhkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMDY6MDY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKaW5kZXggYTUzMWI2NTRiOGQ5NjQuLjZjZmFkMTUyZDdkMWJhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCkBAIC0xNDgwLDcgJiM0MzsxNDgwLDExIEBAIGlwX3NldF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQlzdHJ1Y3QgaXBfc2V0X25ldCAqaW5zdCA9CiAJCQkoc3RydWN0IGlwX3NldF9uZXQgKiljYi0mZ3Q7YXJnc1tJUFNFVF9DQl9ORVRdOwogCQlpcF9zZXRfaWRfdCBpbmRleCA9IChpcF9zZXRfaWRfdCljYi0mZ3Q7YXJnc1tJUFNFVF9DQl9JTkRFWF07Ci0JCXN0cnVjdCBpcF9zZXQgKnNldCA9IGlwX3NldF9yZWZfbmV0bGluayhpbnN0LCBpbmRleCk7CiYjNDM7CQlzdHJ1Y3QgaXBfc2V0ICpzZXQ7CiYjNDM7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQlzZXQgPSBpcF9zZXRfcmVmX25ldGxpbmsoaW5zdCwgaW5kZXgpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJaWYgKHNldC0mZ3Q7dmFyaWFudC0mZ3Q7dXJlZikKIAkJCXNldC0mZ3Q7dmFyaWFudC0mZ3Q7dXJlZihzZXQsIGNiLCBmYWxzZSk7CkBAIC0xNjg2LDcgJiM0MzsxNjkwLDkgQEAgaXBfc2V0X2R1bXBfZG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogcmVsZWFzZV9yZWZjb3VudDoKIAkvKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igb3Igc2V0IGlzIGRvbmUsIHJlbGVhc2Ugc2V0ICovCiAJaWYgKHJldCB8fCAhY2ItJmd0O2FyZ3NbSVBTRVRfQ0JfQVJHMF0pIHsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKIAkJc2V0ID0gaXBfc2V0X3JlZl9uZXRsaW5rKGluc3QsIGluZGV4KTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwogCQlpZiAoc2V0LSZndDt2YXJpYW50LSZndDt1cmVmKQogCQkJc2V0LSZndDt2YXJpYW50LSZndDt1cmVmKHNldCwgY2IsIGZhbHNlKTsKIAkJcHJfZGVidWcoJiMzNDtyZWxlYXNlIHNldCAlc1xuJiMzNDssIHNldC0mZ3Q7bmFtZSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCmluZGV4IDM4NjMwYzVlMDA2ZjA4Li43YWU2OGQ2MDU4NmEyMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKQEAgLTMwNiw3ICYjNDM7MzA2LDcgQEAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKm5mX2N0X2V4cGVjdF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqbWUpCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKm5ldzsKIAotCW5ldyA9IGttZW1fY2FjaGVfYWxsb2MobmZfY3RfZXhwZWN0X2NhY2hlcCwgR0ZQX0FUT01JQyk7CiYjNDM7CW5ldyA9IGttZW1fY2FjaGVfemFsbG9jKG5mX2N0X2V4cGVjdF9jYWNoZXAsIEdGUF9BVE9NSUMpOwogCWlmICghbmV3KQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMzkxLDYgJiM0MzszOTEsNyBAQCB2b2lkIG5mX2N0X2V4cGVjdF9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHVuc2lnbmVkIGludCBjbGFzcywKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpCiAJbWVtc2V0KCZhbXA7ZXhwLSZndDtzYXZlZF9hZGRyLCAwLCBzaXplb2YoZXhwLSZndDtzYXZlZF9hZGRyKSk7CiAJbWVtc2V0KCZhbXA7ZXhwLSZndDtzYXZlZF9wcm90bywgMCwgc2l6ZW9mKGV4cC0mZ3Q7c2F2ZWRfcHJvdG8pKTsKJiM0MzsJZXhwLSZndDtkaXIgPSAwOwogI2VuZGlmCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggNDIxNzcxNWQ0MmRjMjQuLjMxY2JiMWI1NWI5ZTZjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0zNTQ5LDggJiM0MzszNTQ5LDYgQEAgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCwKIAlpZiAoY2RhW0NUQV9FWFBFQ1RfRkxBR1NdKSB7CiAJCWV4cC0mZ3Q7ZmxhZ3MgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9FWFBFQ1RfRkxBR1NdKSk7CiAJCWV4cC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5ORl9DVF9FWFBFQ1RfVVNFUlNQQUNFOwotCX0gZWxzZSB7Ci0JCWV4cC0mZ3Q7ZmxhZ3MgPSAwOwogCX0KIAlpZiAoY2RhW0NUQV9FWFBFQ1RfRk5dKSB7CiAJCWNvbnN0IGNoYXIgKm5hbWUgPSBubGFfZGF0YShjZGFbQ1RBX0VYUEVDVF9GTl0pOwpAQCAtMzU2Miw4ICYjNDM7MzU2MCw3IEBAIGN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAkJZXhwLSZndDtleHBlY3RmbiA9IGV4cGZuLSZndDtleHBlY3RmbjsKLQl9IGVsc2UKLQkJZXhwLSZndDtleHBlY3RmbiA9IE5VTEw7CiYjNDM7CX0KIAogCWV4cC0mZ3Q7Y2xhc3MgPSBjbGFzczsKIAlleHAtJmd0O21hc3RlciA9IGN0OwpAQCAtMzU4MywxMiAmIzQzOzM1ODAsNiBAQCBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LAogCQkJCQkJIGV4cCwgbmZfY3RfbDNudW0oY3QpKTsKIAkJaWYgKGVyciAmbHQ7IDApCiAJCQlnb3RvIGVycl9vdXQ7Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKQotCX0gZWxzZSB7Ci0JCW1lbXNldCgmYW1wO2V4cC0mZ3Q7c2F2ZWRfYWRkciwgMCwgc2l6ZW9mKGV4cC0mZ3Q7c2F2ZWRfYWRkcikpOwotCQltZW1zZXQoJmFtcDtleHAtJmd0O3NhdmVkX3Byb3RvLCAwLCBzaXplb2YoZXhwLSZndDtzYXZlZF9wcm90bykpOwotCQlleHAtJmd0O2RpciA9IDA7Ci0jZW5kaWYKIAl9CiAJcmV0dXJuIGV4cDsKIGVycl9vdXQ6CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jCmluZGV4IDVlYzNhNGE0YmJkNzA3Li5mM2Y5MGE4NjYzMzg5NCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKQEAgLTk1Niw3ICYjNDM7OTU2LDYgQEAgc3RhdGljIGludCBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCiAJCQlyZXR1cm4gTkZfQUNDRVBUOwogCQlzYWRkciA9ICZhbXA7Y3QtJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTM7CiAJfSBlbHNlIGlmIChzaXBfZXh0ZXJuYWxfbWVkaWEpIHsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYl9kc3Qoc2tiKS0mZ3Q7ZGV2OwogCQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMOwogCQlzdHJ1Y3QgZmxvd2kgZmw7CiAKQEAgLTk3OCw3ICYjNDM7OTc3LDExIEBAIHN0YXRpYyBpbnQgc2V0X2V4cGVjdGVkX3J0cF9ydGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAogCQkgKiB0aHJvdWdoIHRoZSBzYW1lIGludGVyZmFjZSBhcyB0aGUgc2lnbmFsbGluZyBwZWVyLgogCQkgKi8KIAkJaWYgKGRzdCkgewotCQkJYm9vbCBleHRlcm5hbF9tZWRpYSA9IChkc3QtJmd0O2RldiA9PSBkZXYpOwomIzQzOwkJCWNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKnRoaXNfZHN0ID0gc2tiX2RzdChza2IpOwomIzQzOwkJCWJvb2wgZXh0ZXJuYWxfbWVkaWEgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCQlpZiAodGhpc19kc3QgJmFtcDsmYW1wOyBkc3QtJmd0O2RldiA9PSB0aGlzX2RzdC0mZ3Q7ZGV2KQomIzQzOwkJCQlleHRlcm5hbF9tZWRpYSA9IHRydWU7CiAKIAkJCWRzdF9yZWxlYXNlKGRzdCk7CiAJCQlpZiAoZXh0ZXJuYWxfbWVkaWEpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYwppbmRleCBmMTQ2MGI2ODNkN2FmNy4uMmNiY2NhOTExMGRiZjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYwpAQCAtMTYzLDYgJiM0MzsxNjMsOCBAQCBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3koc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpleHBlY3RfcG9saWN5LAogCQkgICAgdGJbTkZDVEhfUE9MSUNZX05BTUVdLCBORl9DVF9IRUxQRVJfTkFNRV9MRU4pOwogCWV4cGVjdF9wb2xpY3ktJmd0O21heF9leHBlY3RlZCA9CiAJCW50b2hsKG5sYV9nZXRfYmUzMih0YltORkNUSF9QT0xJQ1lfRVhQRUNUX01BWF0pKTsKJiM0MzsJaWYgKCFleHBlY3RfcG9saWN5LSZndDttYXhfZXhwZWN0ZWQpCiYjNDM7CQlleHBlY3RfcG9saWN5LSZndDttYXhfZXhwZWN0ZWQgPSBORl9DVF9FWFBFQ1RfTUFYX0NOVDsKIAlpZiAoZXhwZWN0X3BvbGljeS0mZ3Q7bWF4X2V4cGVjdGVkICZndDsgTkZfQ1RfRVhQRUNUX01BWF9DTlQpCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwppbmRleCA4MGNhMDc3YjgxYmQ1YS4uMzVkNGM2YzYyOGZmYzEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwpAQCAtMTE4NCw2ICYjNDM7MTE4NCwxNzMgQEAgbmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSwgdW5zaWduZWQgaW50IHF1ZXVlbnVtKQogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcG9wdHMoY29uc3Qgc3RydWN0IGlwaGRyICppcGhfbmV3LAomIzQzOwkJCQkgIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX29yaWcgPSBpcF9oZHIoZS0mZ3Q7c2tiKTsKJiM0MzsJdW5zaWduZWQgaW50IGlobCA9IGlwaF9uZXctJmd0O2lobCAqIDQ7CiYjNDM7CiYjNDM7CWlmIChpcGhfbmV3LSZndDtpaGwgIT0gaXBoX29yaWctJmd0O2lobCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGlobCA9PSBzaXplb2YoKmlwaF9vcmlnKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gbWVtY21wKGlwaF9uZXcgJiM0MzsgMSwgaXBfaGRyKGUtJmd0O3NrYikgJiM0MzsgMSwgaWhsIC0gc2l6ZW9mKCppcGhfb3JpZykpID09IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IGRhdGFfbGVuLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaWhsOwomIzQzOwomIzQzOwlpZiAoZGF0YV9sZW4gJmx0OyBzaXplb2YoKmlwaCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlobCA9IGlwaC0mZ3Q7aWhsICogNHU7CiYjNDM7CWlmIChpaGwgJmx0OyBzaXplb2YoKmlwaCkgfHwgZGF0YV9sZW4gJmx0OyBpaGwpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChpcGgtJmd0O3ZlcnNpb24gIT0gNCB8fAomIzQzOwkgICAgKChpcGgtJmd0O2ZyYWdfb2ZmIF4gaXBfaGRyKGUtJmd0O3NrYiktJmd0O2ZyYWdfb2ZmKSAmYW1wOyB+aHRvbnMoSVBfREYpKSAhPSAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBCSUcgVENQIHdvbiYjMzk7dCB3b3JrOyBuZXRsaW5rIGF0dHIgbGVuIGlzIHUxNiAqLwomIzQzOwlpZiAobnRvaHMoaXBoLSZndDt0b3RfbGVuKSAhPSBkYXRhX2xlbikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogc3VwcG9ydCBmb3IgaXBvcHRzIG1hbmdsaW5nIHdvdWxkIHJlcXVpcmUKJiM0MzsJICogcmVjb21waWxlICYjNDM7IHNrYiB0cmFuc3BvcnQgaGVhZGVyIHVwZGF0ZS4KJiM0MzsJICovCiYjNDM7CXJldHVybiBuZnFubF92YWxpZGF0ZV9pcG9wdHMoaXBoLCBlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihjb25zdCB1OCAqZGF0YSwKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFfbGVuLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsCiYjNDM7CQkJCSAgICAgIGludCBzdGFydCwgaW50IGhkcmxlbikKJiM0Mzt7CiYjNDM7CXUxNiBvY3RldHM7CiYjNDM7CiYjNDM7CWlmIChkYXRhX2xlbiAmbHQ7IGhkcmxlbiB8fCBoZHJsZW4gJmx0OyAyKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwl3aGlsZSAoaGRybGVuICZndDsgMCkgewomIzQzOwkJaWYgKGRhdGFfbGVuICZsdDsgc2l6ZW9mKG9jdGV0cykpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJZGF0YV9sZW4gLT0gc2l6ZW9mKG9jdGV0cyk7CiYjNDM7CiYjNDM7CQlpZiAoc2tiX2NvcHlfYml0cyhlLSZndDtza2IsIHN0YXJ0LCAmYW1wO29jdGV0cywgc2l6ZW9mKG9jdGV0cykpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCWlmIChoZHJsZW4gJmx0OyBzaXplb2Yob2N0ZXRzKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQloZHJsZW4gLT0gc2l6ZW9mKG9jdGV0cyk7CiYjNDM7CQlpZiAobWVtY21wKGRhdGEsICZhbXA7b2N0ZXRzLCBzaXplb2Yob2N0ZXRzKSkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJc3RhcnQgJiM0Mzs9IHNpemVvZihvY3RldHMpOwomIzQzOwkJZGF0YSAmIzQzOz0gc2l6ZW9mKG9jdGV0cyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2V4dGhkcihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2X25ldywKJiM0MzsJCQkJICB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNl9vcmlnID0gaXB2Nl9oZHIoZS0mZ3Q7c2tiKTsKJiM0MzsJaW50IGV4dGhkcl9jbnQgPSAwLCBzdGFydCA9IHNpemVvZigqaXA2X29yaWcpOwomIzQzOwljb25zdCB1OCAqZGF0YSA9IChjb25zdCB1OCAqKWlwNl9uZXc7CiYjNDM7CXU4IG9yaWdfbmV4dGhkciA9IGlwNl9vcmlnLSZndDtuZXh0aGRyOwomIzQzOwl1OCBuZXdfbmV4dGhkciA9IGlwNl9uZXctJmd0O25leHRoZHI7CiYjNDM7CiYjNDM7CWlmIChuZXdfbmV4dGhkciAhPSBvcmlnX25leHRoZHIpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWRhdGEgJiM0Mzs9IHNpemVvZigqaXA2X25ldyk7CiYjNDM7CWRhdGFfbGVuIC09IHNpemVvZigqaXA2X25ldyk7CiYjNDM7CiYjNDM7CXdoaWxlIChpcHY2X2V4dF9oZHIob3JpZ19uZXh0aGRyKSkgewomIzQzOwkJY29uc3Qgc3RydWN0IGlwdjZfb3B0X2hkciAqaHA7CiYjNDM7CQlzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHI7CiYjNDM7CQlpbnQgaGRybGVuOwomIzQzOwomIzQzOwkJaWYgKG9yaWdfbmV4dGhkciA9PSBORVhUSERSX05PTkUpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQlpZiAodW5saWtlbHkoZXh0aGRyX2NudCYjNDM7JiM0MzsgJmd0Oz0gSVA2X01BWF9FWFRfSERSU19DTlQpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCWhwID0gc2tiX2hlYWRlcl9wb2ludGVyKGUtJmd0O3NrYiwgc3RhcnQsIHNpemVvZihfaGRyKSwgJmFtcDtfaGRyKTsKJiM0MzsJCWlmICghaHApCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJc3dpdGNoIChvcmlnX25leHRoZHIpIHsKJiM0MzsJCWNhc2UgTkVYVEhEUl9GUkFHTUVOVDoKJiM0MzsJCQloZHJsZW4gPSBzaXplb2Yoc3RydWN0IGZyYWdfaGRyKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgTkVYVEhEUl9BVVRIOgomIzQzOwkJCWhkcmxlbiA9IGlwdjZfYXV0aGxlbihocCk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWhkcmxlbiA9IGlwdjZfb3B0bGVuKGhwKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihkYXRhLCBkYXRhX2xlbiwgZSwKJiM0MzsJCQkJCSAgICAgICBzdGFydCwgaGRybGVuKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlvcmlnX25leHRoZHIgPSBocC0mZ3Q7bmV4dGhkcjsKJiM0MzsJCWhwID0gKGNvbnN0IHZvaWQgKilkYXRhOwomIzQzOwkJbmV3X25leHRoZHIgPSBocC0mZ3Q7bmV4dGhkcjsKJiM0MzsKJiM0MzsJCWlmIChuZXdfbmV4dGhkciAhPSBvcmlnX25leHRoZHIpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJZGF0YV9sZW4gLT0gaGRybGVuOwomIzQzOwkJc3RhcnQgJiM0Mzs9IGhkcmxlbjsKJiM0MzsJCWRhdGEgJiM0Mzs9IGhkcmxlbjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfaXA2KGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDYsIHVuc2lnbmVkIGludCBkYXRhX2xlbiwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKQomIzQzO3sKJiM0MzsJaWYgKGRhdGFfbGVuICZsdDsgc2l6ZW9mKCppcDYpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBCSUcgVENQL2p1bWJvZ3JhbXMgd29uJiMzOTt0IHdvcms7IG5ldGxpbmsgYXR0ciBsZW4gaXMgdTE2ICovCiYjNDM7CWlmIChudG9ocyhpcDYtJmd0O3BheWxvYWRfbGVuKSAhPSBkYXRhX2xlbiAtIHNpemVvZigqaXA2KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGlwNi0mZ3Q7dmVyc2lvbiAhPSA2KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGlwNiwgZGF0YV9sZW4sIGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV93cml0ZShjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGUtJmd0O3N0YXRlLnBmKSB7CiYjNDM7CWNhc2UgTkZQUk9UT19JUFY0OgomIzQzOwkJcmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwNChkYXRhLCBkYXRhX2xlbiwgZSk7CiYjNDM7CWNhc2UgTkZQUk9UT19JUFY2OgomIzQzOwkJcmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwNihkYXRhLCBkYXRhX2xlbiwgZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICAgICEoSVA2Q0IoZS0mZ3Q7c2tiKS0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2U0tCX0pVTUJPR1JBTSk7CiYjNDM7CWNhc2UgTkZQUk9UT19CUklER0U6CiYjNDM7CQkvKiBObyB3cml0ZSBzdXBwb3J0LiBCcmlkZ2UgaXMgZHViaW91czogdXNlcnNwYWNlIGRvZXNuJiMzOTt0IGV2ZW4gc2VlIEwyIGhlYWRlciAqLwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiBuZnFubF9tYW5nbGUodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIGludCBkaWZmKQogewpAQCAtMTE5Miw2ICYjNDM7MTM1OSw5IEBAIG5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpCiAJaWYgKGUtJmd0O3N0YXRlLm5ldC0mZ3Q7dXNlcl9ucyAhPSAmYW1wO2luaXRfdXNlcl9ucykKIAkJcmV0dXJuIC1FUEVSTTsKIAomIzQzOwlpZiAoIW5mcW5sX3ZhbGlkYXRlX3dyaXRlKGRhdGEsIGRhdGFfbGVuLCBlKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWlmIChkaWZmICZsdDsgMCkgewogCQl1bnNpZ25lZCBpbnQgbWluX2xlbiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KGUtJmd0O3NrYik7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmliLmMKaW5kZXggZTA0OGYwNTY5NGNkZGQuLjg5NTU1MzgwZjFjNWEwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9maWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9maWIuYwpAQCAtMzEsNiAmIzQzOzMxLDE1IEBAIGludCBuZnRfZmliX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcikKIAljb25zdCBzdHJ1Y3QgbmZ0X2ZpYiAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7CiAJdW5zaWduZWQgaW50IGhvb2tzOwogCiYjNDM7CXN3aXRjaCAoY3R4LSZndDtmYW1pbHkpIHsKJiM0MzsJY2FzZSBORlBST1RPX0lQVjQ6CiYjNDM7CWNhc2UgTkZQUk9UT19JUFY2OgomIzQzOwljYXNlIE5GUFJPVE9fSU5FVDoKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJc3dpdGNoIChwcml2LSZndDtyZXN1bHQpIHsKIAljYXNlIE5GVF9GSUJfUkVTVUxUX09JRjoKIAljYXNlIE5GVF9GSUJfUkVTVUxUX09JRk5BTUU6CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMKaW5kZXggM2YzNDc4YWJkODQ1NDYuLjU3NzRhNzU0NDAyNzgwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jCkBAIC01MCw2ICYjNDM7NTAsMzMgQEAgc3RhdGljIHZvaWQgbmZ0X2ZpYl9uZXRkZXZfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiAJcmVncy0mZ3Q7dmVyZGljdC5jb2RlID0gTkZUX0JSRUFLOwogfQogCiYjNDM7c3RhdGljIGludCBuZnRfZmliX25ldGRldl92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgbmZ0X2ZpYiAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7CiYjNDM7CXVuc2lnbmVkIGludCBob29rczsKJiM0MzsKJiM0MzsJc3dpdGNoIChwcml2LSZndDtyZXN1bHQpIHsKJiM0MzsJY2FzZSBORlRfRklCX1JFU1VMVF9PSUY6CiYjNDM7CWNhc2UgTkZUX0ZJQl9SRVNVTFRfT0lGTkFNRToKJiM0MzsJCWhvb2tzID0gKDEgJmx0OyZsdDsgTkZfTkVUREVWX0lOR1JFU1MpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZUX0ZJQl9SRVNVTFRfQUREUlRZUEU6CiYjNDM7CQlpZiAocHJpdi0mZ3Q7ZmxhZ3MgJmFtcDsgTkZUQV9GSUJfRl9JSUYpCiYjNDM7CQkJaG9va3MgPSAoMSAmbHQ7Jmx0OyBORl9ORVRERVZfSU5HUkVTUyk7CiYjNDM7CQllbHNlIGlmIChwcml2LSZndDtmbGFncyAmYW1wOyBORlRBX0ZJQl9GX09JRikKJiM0MzsJCQlob29rcyA9ICgxICZsdDsmbHQ7IE5GX05FVERFVl9FR1JFU1MpOwomIzQzOwkJZWxzZQomIzQzOwkJCWhvb2tzID0gKDEgJmx0OyZsdDsgTkZfTkVUREVWX0lOR1JFU1MpIHwKJiM0MzsJCQkJKDEgJmx0OyZsdDsgTkZfTkVUREVWX0VHUkVTUyk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBuZnRfY2hhaW5fdmFsaWRhdGVfaG9va3MoY3R4LSZndDtjaGFpbiwgaG9va3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmliX25ldGRldl90eXBlOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2ZpYl9uZXRkZXZfb3BzID0gewogCS50eXBlCQk9ICZhbXA7bmZ0X2ZpYl9uZXRkZXZfdHlwZSwKQEAgLTU3LDcgJiM0Mzs4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHsKIAkuZXZhbAkJPSBuZnRfZmliX25ldGRldl9ldmFsLAogCS5pbml0CQk9IG5mdF9maWJfaW5pdCwKIAkuZHVtcAkJPSBuZnRfZmliX2R1bXAsCi0JLnZhbGlkYXRlCT0gbmZ0X2ZpYl92YWxpZGF0ZSwKJiM0MzsJLnZhbGlkYXRlCT0gbmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2ZpYl9uZXRkZXZfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCmluZGV4IDM0NWVmZjE0MGQ1NmY4Li4zOTE1MzlhMWNlYWE3NyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwpAQCAtODM0LDYgJiM0Mzs4MzQsMjQ5IEBAIG5mdF9wYXlsb2FkX3NldF92bGFuKGNvbnN0IHUzMiAqc3JjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgb2Zmc2V0LCB1OCBsZW4sCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MzsvKiBJbmdyZXNzIGlzIHZlcnkgZWFybHksIGJlZm9yZSBsMyBwcm90b2NvbCBoYW5kbGVycy4KJiM0MzsgKiBUaGVyZSBzaG91bGQgYmUgbm8gaW4tdHJlZSBjb2RlIHRoYXQgdHJ1c3RzIGwzL2w0IGhlYWRlcnMKJiM0MzsgKiBiZXR3ZWVuIGluZ3Jlc3MgYW5kIE5GX0lORVRfUFJFX1JPVVRJTkcgaG9va3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgbmZ0X2luX2luZ3Jlc3MoY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnMpCiYjNDM7ewomIzQzOwlyZXR1cm4gcy0mZ3Q7cGYgPT0gTkZQUk9UT19ORVRERVYgJmFtcDsmYW1wOyBzLSZndDtob29rID09IE5GX05FVERFVl9JTkdSRVNTOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfaXA0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAomIzQzOwkJCQljb25zdCB1MzIgKnNyYykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQgPSBwcml2LSZndDtvZmZzZXQgJiM0Mzsgc2tiX25ldHdvcmtfb2Zmc2V0KHBrdC0mZ3Q7c2tiKTsKJiM0MzsJY29uc3QgdTggKm5ld19vY3RldHMgPSAoY29uc3QgdTggKilzcmM7CiYjNDM7CXU4IG9sZF9vY3RldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChwcml2LSZndDtvZmZzZXQpIHsKJiM0MzsJY2FzZSAwOiAvKiBjc3VtIGZpeHVwcyBkb2VzIGV4cGFuZCBkc2NwL3RvcyBzdG9yZSB0byAyIGJ5dGVzLgomIzQzOwkJICogbWFrZSBzdXJlIGlobC92ZXJzaW9uIHJlbWFpbiB1bmNoYW5nZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChza2JfY29weV9iaXRzKHBrdC0mZ3Q7c2tiLCBvZmZzZXQsICZhbXA7b2xkX29jdGV0LCBzaXplb2Yob2xkX29jdGV0KSkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2xlbiA9PSAyICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgICAqbmV3X29jdGV0cyA9PSBvbGRfb2N0ZXQ7CiYjNDM7CWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCB0b3MpOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2xlbiA9PSAxOwomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgaWQpOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2xlbiA9PSAyOwomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgdHRsKToKJiM0MzsJCWlmIChwcml2LSZndDtsZW4gPT0gMSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJCWlmIChwcml2LSZndDtsZW4gIT0gMikKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQkvKiBzYW1lLCBjc3VtIGZpeHVwIGRvZXMgZXhwYW5kIHR0bCBzdG9yZSB0byB0d28gYnl0ZXMuCiYjNDM7CQkgKiBjaGVjayBwcm90b2NvbCBpcyBub3QgYWx0ZXJlZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHNrYl9jb3B5X2JpdHMocGt0LSZndDtza2IsIG9mZnNldCAmIzQzOyAxLCAmYW1wO29sZF9vY3RldCwgc2l6ZW9mKG9sZF9vY3RldCkpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCXJldHVybiBuZXdfb2N0ZXRzWzFdID09IG9sZF9vY3RldDsKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKToKJiM0MzsJCXJldHVybiBwcml2LSZndDtsZW4gJmx0Oz0gMiAmIzQzOyA0ICYjNDM7IDQ7CiYjNDM7CWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7bGVuICZsdDs9IDQgJiM0MzsgNDsKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKToKJiM0MzsJCXJldHVybiBwcml2LSZndDtsZW4gJmx0Oz0gNDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19pcDYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsCiYjNDM7CQkJCWNvbnN0IHUzMiAqc3JjKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmloID0gKGNvbnN0IHZvaWQgKilzcmM7CiYjNDM7CiYjNDM7CXN3aXRjaCAocHJpdi0mZ3Q7b2Zmc2V0KSB7CiYjNDM7CWNhc2UgMDogLyogc3RvcmUgdG8gZHNjcCBtdXN0IG5vdCBhbHRlciBpcDYgdmVyc2lvbiAqLwomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2xlbiAmbHQ7PSA0ICZhbXA7JmFtcDsgaWgtJmd0O3ZlcnNpb24gPT0gNjsKJiM0MzsJY2FzZSAyOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2xlbiAmbHQ7PSAyOwomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBob3BfbGltaXQpOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2xlbiA9PSAxOwomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBzYWRkcik6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7bGVuICZsdDs9IDE2ICYjNDM7IDE2OwomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBkYWRkcik6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7bGVuICZsdDs9IDE2OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2FycChjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KQomIzQzO3sKJiM0MzsJLyogVmFyaWFibGUgc2l6ZSBmb3Igc3RhbmRhcmQgZXRoZXJuZXQgYXJwICovCiYjNDM7CWNvbnN0IHVuc2lnbmVkIGludCBldGhfaXAgPSAyICogKEVUSF9BTEVOICYjNDM7IDQpOwomIzQzOwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcHJpdi0mZ3Q7b2Zmc2V0OwomIzQzOwomIzQzOwlzd2l0Y2ggKG9mZnNldCkgewomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBhcnBoZHIsIGFyX29wKToKJiM0MzsJCXJldHVybiBwcml2LSZndDtsZW4gPT0gMjsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHBlcm1pdCB3cml0ZXMgcG9zdCBmaXhlZCBhcnAgaGVhZGVyIHNpemUuIG9mZnNldCAmIzQzOyBsZW4gYXJlCiYjNDM7CSAqIGNoZWNrZWQgdnMgc2tiIHNpemUgdmlhIHNrYl9lbnN1cmVfd3JpdGFibGUuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gb2Zmc2V0ICZndDs9IHNpemVvZihzdHJ1Y3QgYXJwaGRyKSAmYW1wOyZhbXA7IHByaXYtJmd0O2xlbiAmbHQ7PSBldGhfaXA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19uZXRkZXYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJCSAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsCiYjNDM7CQkJCSAgIGNvbnN0IHUzMiAqc3JjKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVYKJiM0MzsJc3dpdGNoIChwa3QtJmd0O3NrYi0mZ3Q7cHJvdG9jb2wpIHsKJiM0MzsJY2FzZSBodG9ucyhFVEhfUF9BUlApOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19hcnAocHJpdik7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDQocGt0LCBwcml2LCBzcmMpOwomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDYocGt0LCBwcml2LCBzcmMpOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CS8qIGRlZmF1bHQgdG8gZmFsc2UgZm9yIG5vdywgcmVsYXggbGF0ZXIgaW4gY2FzZSB3ZSBoYXZlCiYjNDM7CSAqIHVzZS1jYXNlcyB0aGF0IG5lZWQgaW5uZXIgaGVhZGVyIG1hbmlwdWxhdGlvbiBmb3IKJiM0MzsJICogZW5jYXBzdWxhdGVkIHRyYWZmaWMgbGlrZSB2bGFuIG9yIFBQUG9FLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYnJpZGdlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAomIzQzOwkJCQkgICBjb25zdCB1MzIgKnNyYykKJiM0Mzt7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX1RBQkxFU19CUklER0UpCiYjNDM7CXN3aXRjaCAocGt0LSZndDtldGhlcnR5cGUpIHsKJiM0MzsJY2FzZSBodG9ucyhFVEhfUF9BUlApOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19hcnAocHJpdik7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDQocGt0LCBwcml2LCBzcmMpOwomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDYocGt0LCBwcml2LCBzcmMpOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CS8qIHNlZSBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2OiBkZWZhdWx0IHRvIGZhbHNlICovCiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAomIzQzOwkJCSAgICBjb25zdCB1MzIgKnNyYykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAocGt0LSZndDtzdGF0ZS0mZ3Q7cGYpIHsKJiM0MzsJY2FzZSBORlBST1RPX0FSUDoKJiM0MzsJCXJldHVybiBuZnRfbmhfd3JpdGVfb2tfYXJwKHByaXYpOwomIzQzOwljYXNlIE5GUFJPVE9fQlJJREdFOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19icmlkZ2UocGt0LCBwcml2LCBzcmMpOwomIzQzOwljYXNlIE5GUFJPVE9fSVBWNDoKJiM0MzsJCXJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA0KHBrdCwgcHJpdiwgc3JjKTsKJiM0MzsJY2FzZSBORlBST1RPX0lQVjY6CiYjNDM7CQlyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNihwa3QsIHByaXYsIHNyYyk7CiYjNDM7CWNhc2UgTkZQUk9UT19ORVRERVY6CiYjNDM7CQlpZiAocGt0LSZndDtzdGF0ZS0mZ3Q7aG9vayA9PSBORl9ORVRERVZfSU5HUkVTUykKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2KHBrdCwgcHJpdiwgc3JjKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOy8qIGNoZWNrIGxpbmtsYXllciBtb2RpZmljYXRpb25zIGRvbiYjMzk7dCBzcGlsbCBpbnRvIG5ldHdvcmsgaGVhZGVyLiAqLwomIzQzO3N0YXRpYyBib29sIG5mdF9sbF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgaW50IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWlmIChuZnRfaW5faW5ncmVzcyhwa3QtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gb2Zmc2V0ICZsdDs9IHNrYl9uZXR3b3JrX29mZnNldChwa3QtJmd0O3NrYik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKJiM0MzsJCQkJCQkgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHByaXYtJmd0O2Jhc2UpIHsKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjoKJiM0MzsJCWlmIChjdHgtJmd0O2ZhbWlseSA9PSBORlBST1RPX0lQVjQpIHsKJiM0MzsJCQlpZiAob2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjaykgPT0gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQpCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybiB0cnVlOyAvKiBydW4gdGltZSB2YWxpZGF0aW9uIHJlcXVpcmVkICovCiYjNDM7CWNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjoKJiM0MzsJCWlmIChwcml2LSZndDtjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgJiMzNDtyZS11cGRhdGUmIzM0OyBvZiBMNCBjaGVja3N1bSAqLwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCS8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbiYjMzk7dCBiZSBuZWdhdGl2ZSBzbyBib2d1cwomIzQzOwkJICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy4KJiM0MzsJCSAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MzsvKiBkbyBub3QgYWxsb3cgYXJiaXRyYXJ5IG5ldHdvcmsgaGVhZGVyIG1hbmdsaW5nIHZpYSBib2d1cyBjc3VtX29mZi4KJiM0MzsgKiBXZSBvbmx5IHN1cHBvcnQgaXB2NC4gIE9ubHkgTkZQUk9UT19JUFY0IGNhbiBiZSBjaGVja2VkIGZyb20gY29udHJvbAomIzQzOyAqIHBsYW5lLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiwKJiM0MzsJCQkJCSBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAocGt0LSZndDtzdGF0ZS0mZ3Q7cGYpIHsKJiM0MzsJY2FzZSBORlBST1RPX0lQVjQ6CiYjNDM7CQkvKiBXYXJuaW5nOiBORlBST1RPX0lORVQgd2FzIG5vdCBjaGVja2VkOyB3ZSBjYW4mIzM5O3QgcmV0dXJuIHRydWUgaGVyZS4gKi8KJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTsKJiM0MzsJY2FzZSBORlBST1RPX0lQVjY6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWNhc2UgTkZQUk9UT19CUklER0U6CiYjNDM7CQlyZXR1cm4gcGt0LSZndDtldGhlcnR5cGUgPT0gaHRvbnMoRVRIX1BfSVApICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTsKJiM0MzsJY2FzZSBORlBST1RPX05FVERFVjoKJiM0MzsJCXJldHVybiBwa3QtJmd0O3NrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHByaXYtJmd0O2Jhc2UpIHsKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjoKJiM0MzsJCXJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7CiYjNDM7CWNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjoKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6CiYjNDM7CQkvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmUKJiM0MzsJCSAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC4KJiM0MzsJCSAqLwomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiAJCQkJIHN0cnVjdCBuZnRfcmVncyAqcmVncywKIAkJCQkgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpCkBAIC04NjEsOCAmIzQzOzExMDQsMTIgQEAgc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCQl9CiAKIAkJb2Zmc2V0ID0gc2tiX21hY19oZWFkZXIoc2tiKSAtIHNrYi0mZ3Q7ZGF0YSAtIHZsYW5faGxlbjsKJiM0MzsJCWlmICghbmZ0X2xsX3dyaXRlX29rKHBrdCwgcHJpdi0mZ3Q7bGVuICYjNDM7IHByaXYtJmd0O29mZnNldCAmIzQzOyBvZmZzZXQpKQomIzQzOwkJCWdvdG8gZXJyOwogCQlicmVhazsKIAljYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOgomIzQzOwkJaWYgKCFuZnRfbmhfd3JpdGVfb2socGt0LCBwcml2LCBzcmMpKQomIzQzOwkJCWdvdG8gZXJyOwogCQlvZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTsKIAkJYnJlYWs7CiAJY2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOgpAQCAtODk0LDYgJiM0MzsxMTQxLDcgQEAgc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCQl0c3VtID0gY3N1bV9wYXJ0aWFsKHNyYywgcHJpdi0mZ3Q7bGVuLCAwKTsKIAogCQlpZiAocHJpdi0mZ3Q7Y3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpICZhbXA7JmFtcDsKIAkJICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKQogCQkJZ290byBlcnI7CiAKQEAgLTk2MCw3ICYjNDM7MTIwOCwyNiBAQCBzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAKIAlzd2l0Y2ggKGNzdW1fdHlwZSkgewogCWNhc2UgTkZUX1BBWUxPQURfQ1NVTV9OT05FOgomIzQzOwkJaWYgKHByaXYtJmd0O2NzdW1fb2Zmc2V0KSAvKiBub25zZW5zaWNhbCAqLwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKHByaXYtJmd0O2NzdW1fZmxhZ3MgPT0gMCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIFVzZXJzcGFjZSByZXF1ZXN0cyBMNCBjaGVja3N1bSB1cGRhdGUsIGUuZy46CiYjNDM7CQkgKiAtIElQdjYgc3RhdGVsZXNzIE5BVCAobm8gbDMgY3N1bSkKJiM0MzsJCSAqIC0gdHJhbnNwb3J0IGhlYWRlciBtYW5nbGluZwomIzQzOwkJICogLSBpbm5lciBkYXRhIG1hbmdsaW5nCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChwcml2LSZndDtiYXNlID09IE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7YmFzZSA9PSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7YmFzZSA9PSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVIpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAljYXNlIE5GVF9QQVlMT0FEX0NTVU1fSU5FVDoKJiM0MzsJCWlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAljYXNlIE5GVF9QQVlMT0FEX0NTVU1fU0NUUDoKIAkJaWYgKHByaXYtJmd0O2Jhc2UgIT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUikKQEAgLTk2OCw2ICYjNDM7MTIzNSw5IEBAIHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAogCQlpZiAocHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgIT0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKSkKIAkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKHByaXYtJmd0O2NzdW1fZmxhZ3MpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYwppbmRleCA3MDZjNzg4NTNmMjQ1Yi4uOTc4YmIwYzAxMTA2ODIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMKQEAgLTM0Miw2ICYjNDM7MzQyLDggQEAKICNpbmNsdWRlICYjMzQ7bmZ0X3NldF9waXBhcG9fYXZ4Mi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bmZ0X3NldF9waXBhcG8uaCYjMzQ7CiAKJiM0MztzdGF0aWMgdm9pZCBuZnRfcGlwYXBvX2Fib3J0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpOwomIzQzOwogLyoqCiAgKiBwaXBhcG9fcmVmaWxsKCkgLSBGb3IgZWFjaCBzZXQgYml0LCBzZXQgYml0cyBmcm9tIHNlbGVjdGVkIG1hcHBpbmcgdGFibGUgaXRlbQogICogQG1hcDoJQml0bWFwIHRvIGJlIHNjYW5uZWQgZm9yIHNldCBiaXRzCkBAIC0xMjk2LDcgJiM0MzsxMjk4LDcgQEAgc3RhdGljIGludCBuZnRfcGlwYXBvX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsCiAJY29uc3QgdTggKnN0YXJ0X3AsICplbmRfcDsKIAlpbnQgaSwgYnNpemVfbWF4LCBlcnIgPSAwOwogCi0JaWYgKCFtKQomIzQzOwlpZiAoIW0gfHwgbS0mZ3Q7c3RhdGUgPT0gTkZUX1BJUEFQT19DTE9ORV9FUlIpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0tFWV9FTkQpKQpAQCAtMTM2Nyw4ICYjNDM7MTM2OSwxMCBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKIAkJZWxzZQogCQkJcmV0ID0gcGlwYXBvX2V4cGFuZChmLCBzdGFydCwgZW5kLCBmLSZndDtncm91cHMgKiBmLSZndDtiYik7CiAKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQllcnIgPSByZXQ7CiYjNDM7CQkJZ290byBhYm9ydDsKJiM0MzsJCX0KIAogCQlpZiAoZi0mZ3Q7YnNpemUgJmd0OyBic2l6ZV9tYXgpCiAJCQlic2l6ZV9tYXggPSBmLSZndDtic2l6ZTsKQEAgLTEzODQsNyAmIzQzOzEzODgsNyBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKIAogCQllcnIgPSBwaXBhcG9fcmVhbGxvY19zY3JhdGNoKG0sIGJzaXplX21heCk7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwomIzQzOwkJCWdvdG8gYWJvcnQ7CiAKIAkJbS0mZ3Q7YnNpemVfbWF4ID0gYnNpemVfbWF4OwogCX0gZWxzZSB7CkBAIC0xMzk2LDcgJiM0MzsxNDAwLDI2IEBAIHN0YXRpYyBpbnQgbmZ0X3BpcGFwb19pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAogCiAJcGlwYXBvX21hcChtLCBydWxlbWFwLCBlKTsKIAomIzQzOwltLSZndDtzdGF0ZSA9IE5GVF9QSVBBUE9fQ0xPTkVfTU9EOwogCXJldHVybiAwOwomIzQzO2Fib3J0OgomIzQzOwlERUJVR19ORVRfV0FSTl9PTl9PTkNFKG0tJmd0O3N0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfRVJSKTsKJiM0MzsKJiM0MzsJLyogVHdvIHJvbGxiYWNrIGNhc2VzOgomIzQzOwkgKiAxKSBubyBwcmV2aW91cyBjaGFuZ2VzLiAgbmZ0X3BpcGFwb19hYm9ydCBpcyBub3QKJiM0MzsJICogZ3VhcmFudGVlZCB0byBiZSBpbnZva2VkICh0aGVyZSBtaWdodCBiZSBubyBmdXJ0aGVyCiYjNDM7CSAqIGFkZC9kZWxldGUgcmVxdWVzdHMgY29taW5nIGFmdGVyIHRoaXMpLgomIzQzOwkgKgomIzQzOwkgKiAyKSB3ZSBoYWQgcHJldmlvdXMgY2hhbmdlczogdGhlcmUgYXJlIHRyYW5zYWN0aW9uCiYjNDM7CSAqIHJlY29yZHMgcG9pbnRpbmcgdG8gdGhpcyBzZXQuICBMZWF2ZSB0aGUgcm9sbGJhY2sgdG8KJiM0MzsJICogdGhlIHRyYW5zYWN0aW9uIGhhbmRsaW5nLgomIzQzOwkgKi8KJiM0MzsJaWYgKG0tJmd0O3N0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfTkVXKQomIzQzOwkJbmZ0X3BpcGFwb19hYm9ydChzZXQpOyAvKiByZWxlYXNlcyBtICovCiYjNDM7CWVsc2UKJiM0MzsJCW0tJmd0O3N0YXRlID0gTkZUX1BJUEFQT19DTE9ORV9FUlI7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIC8qKgpAQCAtMTQ3Myw2ICYjNDM7MTQ5Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqcGlwYXBvX2Nsb25lKHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICpvbGQpCiAJCWRzdCYjNDM7JiM0Mzs7CiAJfQogCiYjNDM7CW5ldy0mZ3Q7c3RhdGUgPSBORlRfUElQQVBPX0NMT05FX05FVzsKIAlyZXR1cm4gbmV3OwogCiBvdXRfbXQ6CkBAIC0xODk2LDcgJiM0MzsxOTIwLDcgQEAgbmZ0X3BpcGFwb19kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKIAkvKiByZW1vdmFsIG11c3Qgb2NjdXIgb24gcHJpdi0mZ3Q7Y2xvbmUsIGlmIHdlIGFyZSBsb3cgb24gbWVtb3J5CiAJICogd2UgaGF2ZSBubyBjaG9pY2UgYW5kIG11c3QgZmFpbCB0aGUgcmVtb3ZhbCByZXF1ZXN0LgogCSAqLwotCWlmICghbSkKJiM0MzsJaWYgKCFtIHx8IG0tJmd0O3N0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfRVJSKQogCQlyZXR1cm4gTlVMTDsKIAogCWUgPSBwaXBhcG9fZ2V0KG0sIChjb25zdCB1OCAqKWVsZW0tJmd0O2tleS52YWwuZGF0YSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaCBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaAppbmRleCBiODJhYmIwMzU3NmVkZC4uYTE5ZTk4MGQwNmVmNDIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmgKQEAgLTEzMSw5ICYjNDM7MTMxLDE2IEBAIHN0cnVjdCBuZnRfcGlwYXBvX3NjcmF0Y2ggewogCXVuc2lnbmVkIGxvbmcgX19tYXBbXTsKIH07CiAKJiM0MztlbnVtIG5mdF9waXBhcG9fY2xvbmVfc3RhdGUgewomIzQzOwlORlRfUElQQVBPX0NMT05FX05FVywKJiM0MzsJTkZUX1BJUEFQT19DTE9ORV9NT0QsCiYjNDM7CU5GVF9QSVBBUE9fQ0xPTkVfRVJSLAomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoIC0gRGF0YSB1c2VkIGZvciBsb29rdXAgYW5kIG1hdGNoaW5nCiAgKiBAZmllbGRfY291bnQ6CUFtb3VudCBvZiBmaWVsZHMgaW4gc2V0CiYjNDM7ICogQHN0YXRlOgkJYWRkL2RlbGV0ZSBzdGF0ZTsgdXNlZCBmcm9tIGNvbnRyb2wgcGxhbmUKICAqIEBic2l6ZV9tYXg6CQlNYXhpbXVtIGxvb2t1cCB0YWJsZSBidWNrZXQgc2l6ZSBvZiBhbGwgZmllbGRzLCBpbiBsb25ncwogICogQHNjcmF0Y2g6CQlQcmVhbGxvY2F0ZWQgcGVyLUNQVSBtYXBzIGZvciBwYXJ0aWFsIG1hdGNoaW5nIHJlc3VsdHMKICAqIEByY3U6CQlNYXRjaGluZyBkYXRhIGlzIHN3YXBwZWQgb24gY29tbWl0cwpAQCAtMTQxLDYgJiM0MzsxNDgsNyBAQCBzdHJ1Y3QgbmZ0X3BpcGFwb19zY3JhdGNoIHsKICAqLwogc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggewogCXU4IGZpZWxkX2NvdW50OwomIzQzOwllbnVtIG5mdF9waXBhcG9fY2xvbmVfc3RhdGUgc3RhdGU6ODsKIAl1bnNpZ25lZCBpbnQgYnNpemVfbWF4OwogCXN0cnVjdCBuZnRfcGlwYXBvX3NjcmF0Y2ggKiBfX3BlcmNwdSAqc2NyYXRjaDsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBTZXJpZXMgRXZhbHVhdGlvbjogQSBGdXp6aW5nIE9wcG9ydHVuaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICp5ZXMsIHRoaXMgZGVzZXJ2ZXMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiogSXQmIzM5O3MgdG91Y2hpbmcgcXVpdGUgYSBmZXcgY3JpdGljYWwgYXJlYXMgb2YgdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbTogc3BlY2lmaWNhbGx5LCBhIGRpdmUgaW50byBuZXRsaW5rIHF1ZXVlLCBzb21lIGNoYW5nZXMgdG8gbmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZywgdGhlIGhhbmRsaW5nIG9mIHBpcGFwbyBzZXRzLCBhbmQgY29ubnRyYWNrIGV4cGVjdGF0aW9ucy4gR2l2ZW4gdGhlIHNjb3BlIGFuZCB0aGUgdHlwZXMgb2YgbW9kaWZpY2F0aW9ucywgZnJvbSBsb2NraW5nIGNoYW5nZXMgaW4gYGlwX3NldF9jb3JlLmNgICh0aGF0IGByY3VfcmVhZF9sb2NrYC9gdW5sb2NrYCBpcyBpbnRlcmVzdGluZykgdG8gdmFyaW91cyBpbml0aWFsaXphdGlvbiBhbmQgdmFsaWRhdGlvbiBhZGp1c3RtZW50cyBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMsIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzIGlzIGRlZmluaXRlbHkgdGhlcmUuCgpJdCYjMzk7cyBjbGVhciB0aGF0IHRoaXMgdG91Y2hlcyBvbiB2YXJpb3VzIGNvcmUgbmV0d29yayBmaWx0ZXJpbmcgY29tcG9uZW50cy4gSW4gYG5mX2Nvbm50cmFja19leHBlY3QuY2AgdGhlIGNoYW5nZSB0byBgemFsbG9jYCB3aXRoIGFkZGVkIGluaXRpYWxpemF0aW9uIHJhaXNlcyBpbW1lZGlhdGUgY29uY2VybnMuIFRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIFNJUCBoZWxwZXIgKGBuZl9jb25udHJhY2tfc2lwLmNgKSBzb3VuZCBpbXBvcnRhbnQsIGFzIGRvIHRoZSB2YWxpZGF0aW9ucyBhZGRlZCBpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgIGFuZCBgbmZ0XypgIGZpbGVzLiBUaGUgc3RhdGUgdHJhY2tpbmcgYWRkZWQgdG8gYG5mdF9zZXRfcGlwYXBvLmNgIGxvb2tzIGxpa2UgYW4gYXJlYSB3aGVyZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgc3RhdGUgdHJhbnNpdGlvbnMgY291bGQgYXJpc2UuCgpOb3csIGJlZm9yZSB3ZSBqdW1wIGludG8gdGhlIGZ1enppbmcsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGVkLiBMZXQmIzM5O3Mgc2VlLi4uIHdlJiMzOTtsbCBkZWZpbml0ZWx5IG5lZWQgYENPTkZJR19ORVRGSUxURVJgLCBuYXR1cmFsbHkuIEJleW9uZCB0aGF0LCBJJiMzOTttIHRoaW5raW5nIGBDT05GSUdfTkZfQ09OTlRSQUNLYCwgYENPTkZJR19ORl9DT05OVFJBQ0tfU0lQYCwgYENPTkZJR19ORl9DVF9ORVRMSU5LYCwgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBDT05GSUdfTkZfVEFCTEVTYCwgYW5kIHRoZSBgQ09ORklHX05GVF8qYCBvcHRpb25zLCBzbyBgQ09ORklHX05GVF9GSUJgLCBgQ09ORklHX05GVF9GSUJfTkVUREVWYCwgYENPTkZJR19ORlRfUEFZTE9BRGAsIGFuZCBJIGFsc28gc2F3IHNvbWUgYElQX1NFVGAgcmVmZXJlbmNlcywgc28gd2UgbmVlZCBgQ09ORklHX0lQX1NFVGAuIFdlIG11c3QgZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkIHNvIHRoZSBmdXp6ZXIgY2FuIHByb3Blcmx5IHRlc3QgdGhlc2UgY2hhbmdlcy4KCkkmIzM5O2xsIHF1aWNrbHkgZG8gc29tZSBjb2RlIHNlYXJjaGluZyB0byB2ZXJpZnkgdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCB0aGVuIGdldCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBzZXR1cC4gVGhpcyBsb29rcyBsaWtlIGl0JiMzOTtsbCBiZSBhIGZydWl0ZnVsIGZ1enppbmcgY2FtcGFpZ24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS19TSVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTMzMD1jb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgbmV0d29ya2luZywgbWF5YmUgZGVidWdnaW5nIGEgcGVyZm9ybWFuY2UgaXNzdWUgb3Igc2V0dGluZyB1cCBzb21lIGFkdmFuY2VkIGZpcmV3YWxsIHJ1bGVzOgoKKipOZXRmaWx0ZXIgYW5kIE5ldGxpbmsgUXVldWUgQ2hlY2sqKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgcGFja2V0IGZpbHRlcmluZyBtZXNzLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGJhc2ljcyBhcmUgaW4gcGxhY2UuIFRoZSB3aG9sZSBOZXRmaWx0ZXIgc2V0dXAgcmVsaWVzIGhlYXZpbHkgb24gdGhlIG5ldGxpbmsgcXVldWVpbmcgbWVjaGFuaXNtIGZvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBTbywgYmVmb3JlIEkgc3RhcnQgcHVsbGluZyBteSBoYWlyIG91dCB0cnlpbmcgdG8gZGVidWcgc29tZSB3ZWlyZCB0cmFmZmljIGJlaGF2aW91ciBvciBtaXNzaW5nIHBhY2tldHMsIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRWAgaXMgZW5hYmxlZC4gSXQmIzM5O3Mgc3VjaCBhIGZ1bmRhbWVudGFsIGNvbXBvbmVudCwgYW5kIEkmIzM5O3ZlIGJlZW4gYml0dGVuIGJ5IGZvcmdldHRpbmcgdG8gY2hlY2sgdGhpcyBiZWZvcmUg4oCTIHdhc3RpbmcgaG91cnMgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2h5IG15IGN1c3RvbSBydWxlcyBhcmVuJiMzOTt0IGJlaW5nIGhpdC4gVGhpcyBpcyBteSBmb3VuZGF0aW9uOyBJIG5lZWQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIHNvbGlkIGJlZm9yZSBidWlsZGluZyBhbnl0aGluZyBvbiB0b3Agb2YgaXQuIE9uZSBtaXNzaW5nIGNvbmZpZyBvcHRpb24gY2FuIGRlcmFpbCB0aGUgd2hvbGUgb3BlcmF0aW9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgbmV0bGluayBxdWV1ZSBpcyBlbmFibGVkLCBhbmQgdGhlbiBJIGNhbiBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1Rcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBgQ09ORklHX05GVF9GSUJgIGZvciBOZXRmaWx0ZXIgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGBDT05GSUdfTkZUX0ZJQmAgb3B0aW9uIGlzIGVuYWJsZWQuIEkga25vdyB0aGlzIGlzIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZSBGSUIgKEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSkgc3VwcG9ydCB3aXRoaW4gTmV0ZmlsdGVyJiMzOTtzIG5mdGFibGVzIGZyYW1ld29yay4gV2l0aG91dCB0aGlzLCBJIHdvbiYjMzk7dCBoYXZlIHRoZSBuZWNlc3NhcnkgZm91bmRhdGlvbiBmb3IgYWR2YW5jZWQgcm91dGluZyBhbmQgcGFja2V0IGZpbHRlcmluZyBjYXBhYmlsaXRpZXMgdGhhdCBJJiMzOTttIGxpa2VseSB0cnlpbmcgdG8gaW1wbGVtZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZCB0byBwcm9jZWVkIHdpdGggd2hhdGV2ZXIgdGFzayBpcyBhdCBoYW5kLiBUaGlzIGlzIGEgZm91bmRhdGlvbmFsIHN0ZXAsIGFuZCBuZWdsZWN0aW5nIGl0IGNvdWxkIGxlYWQgdG8gaG91cnMgb2Ygd2FzdGVkIGVmZm9ydCBjaGFzaW5nIHBoYW50b20gcHJvYmxlbXMuIFRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZUX0ZJQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NTk5PWNvbmZpZyBORlRfSEFTSFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjA1OmNvbmZpZyBORlRfRklCXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjA2LVx0dHJpc3RhdGVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjA4OmNvbmZpZyBORlRfRklCX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDktXHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JTkVUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY3ND1jb25maWcgTkZUX0ZXRF9ORVRERVZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjY4MDpjb25maWcgTkZUX0ZJQl9ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02ODEtXHRkZXBlbmRzIG9uIE5GVF9GSUJfSVBWNFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRXZhbHVhdGluZyBgQ09ORklHX05GVF9QQVlMT0FEYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIHRvcCBvZiBgQ09ORklHX05GVF9QQVlMT0FEYC4gSXQmIzM5O3MgYSBrZXkgZWxlbWVudCwgb2J2aW91c2x5LiBJdCBkaWN0YXRlcyBob3cgd2UmIzM5O3JlIGdvaW5nIHRvIGludGVyYWN0IHdpdGggdGhlIHBheWxvYWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIG5mdGFibGVzLCBhbmQgdGhhdCYjMzk7cyBjcml0aWNhbCBmb3Igb3VyIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IHByb2ZpbGUuIElzIHRoaXMgZW5hYmxlZD8gSXMgaXQgY29ycmVjdGx5IGNvbmZpZ3VyZWQ/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBjb25zaWRlcj8gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBjdXJyZW50IHN0YXR1cyBhbmQgbWFrZSBzdXJlIGl0IGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIHJlcXVpcmVtZW50cyBvZiB0aGUgc3lzdGVtJiMzOTtzIGludGVuZGVkIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgY29uc2lkZXJpbmcgdGhlIG5ldHdvcmsgdHJhZmZpYyBhbmFseXNpcyBhbmQgbWFuaXB1bGF0aW9uIHRoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzZXR0aW5nLCBzbyBJIHdhbnQgdG8gZW5zdXJlIGl0JiMzOTtzIHNldCB1cCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9QQVlMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MTMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbmZ0X3BheWxvYWQuY2AgZmlsZSBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBiZWluZyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgY29uZGl0aW9uYWxseSwgc3BlY2lmaWNhbGx5IGRlcGVuZGluZyBvbiB0aGUgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uIE15IGludHVpdGlvbiBzYXlzIGBDT05GSUdfTkZfVEFCTEVTYCBpcyBsaWtlbHkgdGhlIGtleSB0cmlnZ2VyLCBidXQgaXQgY291bGQgYmUgc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIEkmIzM5O3ZlIGdvdCB0byBjb25maXJtIHRoaXMuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyB3b3VsZCBiZSB0aGUgTmV0ZmlsdGVyIGBNYWtlZmlsZWAsIGluIGBuZXQvbmV0ZmlsdGVyL2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBidWlsZCBydWxlcyBmb3IgdGhpcyBzdHVmZiB3b3VsZCBiZSBkZWZpbmVkLCBzbyBsZXQmIzM5O3MganVtcCBpbiB0aGVyZSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgYWN0dWFsbHkgZG9pbmcgd2l0aCBgbmZ0X3BheWxvYWQuY2AuIEhvcGVmdWxseSwgaXQmIzM5O2xsIGJlIGNsZWFyIHByZXR0eSBxdWlja2x5IHdoZXRoZXIgaXQmIzM5O3MgdW5jb25kaXRpb25hbGx5IGJ1aWx0IHdpdGggYSBzcGVjaWZpYyBjb25maWcgb3IgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyBhdCBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcGF5bG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT04Nz1uZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXHRcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4OTpcdFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MC1cdFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqQXNzZXNzaW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIGBuZnRfcGF5bG9hZC5vYCBpcyBkZWZpbml0ZWx5IGEgY29tcG9uZW50IHdpdGhpbiBgbmZfdGFibGVzLW9ianNgLiBUaGF0IGNvbmZpcm1zIHRoYXQgaGF2aW5nIGBDT05GSUdfTkZfVEFCTEVTYCBlbmFibGVkIGNvdmVycyB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGF0IHBhcnRpY3VsYXIgb2JqZWN0IGZpbGUuIE5vIG5lZWQgdG8gZGlnIGFueSBkZWVwZXIgdGhlcmUuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgSSBzaG91bGQgY2hlY2sgb24gYG5mdF9zZXRfcGlwYXBvYC4gSSBuZWVkIHRvIGFzc2VzcyB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgd2hldGhlciBvciBub3QgZW5hYmxpbmcgYENPTkZJR19ORl9UQUJMRVNgIHN1ZmZpY2llbnRseSBhZGRyZXNzZXMgdGhvc2UgdG9vLiBJJiMzOTttIHNlZWluZyBpdCBmb3IgdGhlIGZpcnN0IHRpbWUsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHRha2UgY2FyZSBvZiBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBiYXNlIGBuZl90YWJsZXNgIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldF9waXBhcG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05My1cdFx0ICBuZnRfc2V0X2hhc2gubyBuZnRfc2V0X2JpdG1hcC5vIG5mdF9zZXRfcmJ0cmVlLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6OTQ6XHRcdCAgbmZ0X3NldF9waXBhcG8ub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS05NS1cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTk3PWlmbmRlZiBDT05GSUdfVU1MXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjk4Om5mX3RhYmxlcy1vYmpzICYjNDM7PSBuZnRfc2V0X3BpcGFwb19hdngyLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTktZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipDb25zaWRlcmluZyBEZXBlbmRlbmNpZXMgYW5kIFJlbGF0ZWQgTW9kdWxlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmZfdGFibGVzLW9ianNgIHRoaW5nLiBSaWdodCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEga2V5IGNvbXBvbmVudC4gQnV0LCBJIG5lZWQgdG8gem9vbSBvdXQgYSBiaXQuIFdoYXQgZWxzZSBpcyBpbiBwbGF5IGhlcmU/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgYG5mbmV0bGlua19jdGhlbHBlcmAuIElzIGl0IGRpcmVjdGx5IHJlbGF0ZWQ/IElzIGl0IGEgZGVwZW5kZW5jeT8gT3IgaXMgaXQgc29tZXRoaW5nIHRoYXQgaW50ZXJhY3RzIHdpdGggYG5mX3RhYmxlcy1vYmpzYCBpbiBzb21lIG90aGVyIHNpZ25pZmljYW50IHdheT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgcGljdHVyZSwgaWYgYW55LiBEaWdnaW5nIGludG8gdGhlIHJlbGF0aW9uc2hpcHMgaGVyZSB3aWxsIHBhaW50IGEgYmV0dGVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mbmV0bGlua19jdGhlbHBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0zOD1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19USU1FT1VUKSAmIzQzOz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM5Om9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUikgJiM0Mzs9IG5mbmV0bGlua19jdGhlbHBlci5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk1MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYWJ5cmludGgqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCByZXF1aXJlcyBgQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZCB0byBnZXQgcm9sbGluZy4gTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBtb21lbnQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyB0aGF0IG9mdGVuIGludGVyc2VjdHMgd2l0aCB0aGlzIGFyZWEg4oCTIHNwZWNpZmljYWxseSwgYENPTkZJR19JUF9TRVRgLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgb2Z0ZW4gYSBwcmVyZXF1aXNpdGUgb3IgYXQgbGVhc3QgYSByZWxhdGVkIGZlYXR1cmUuIExldCYjMzk7cyBtYWtlIHN1cmUgaXTigJlzIGVuYWJsZWQgb3IgYXQgbGVhc3QgdW5kZXJzdG9vZCBpbiB0aGlzIGNvbnRleHQgYmVmb3JlIEkgcHJvY2VlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgbmV0bGluayBoZWxwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MjptZW51Y29uZmlnIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJUCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xND1pZiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjpjb25maWcgSVBfU0VUX01BWFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE3LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIElQIHNldHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mjg6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zNi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzozNzpjb25maWcgSVBfU0VUX0JJVE1BUF9JUE1BQ1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOmlwLG1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00NS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo0Njpjb25maWcgSVBfU0VUX0JJVE1BUF9QT1JUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6cG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01Ni1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NjU6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFSS1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxtYXJrIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTczLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjc0OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04Mi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo5Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLHBvcnQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwMi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMDM6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxtYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTExLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDptYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEyMTpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMi1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LHBvcnQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyOS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzA6Y29uZmlnIElQX1NFVF9IQVNIX05FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0MC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTQ4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTU4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjg6Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2OS1cdHRyaXN0YXRlIFwmIzM0O2xpc3Q6c2V0IHNldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDAxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWcgY29uc2lkZXJhdGlvbnMsIGRpc3RpbGxlZCBpbnRvIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxvb2tzIGxpa2UgYENPTkZJR19JUF9TRVRgIGlzIGEgaGFyZCByZXF1aXJlbWVudC4gR290IGl0LiBOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZywgc3BlY2lmaWNhbGx5IGV4cGVjdGF0aW9ucy4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0aGF0IGBDT05GSUdfTkZfQ09OTlRSQUNLX0VYUEVDVGAgbWlnaHQgYmUgaW52b2x2ZWQuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBzdXJlLiBJIGJlbGlldmUgdGhhdCBleHBlY3RhdGlvbnMgYXJlIGEgY29yZSBwYXJ0IG9mIHRoZSBiYXNlIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBtb2R1bGUuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhIGRpc3RpbmN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRpZWQgZGlyZWN0bHkgdG8gdGhlIGBuZl9jb25udHJhY2tfZXhwZWN0LmNgIG1vZHVsZSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2U/IEkgbmVlZCB0byB2ZXJpZnkgaXRzIGV4YWN0IGNvbmZpZ3VyYXRpb24gcGF0aC4gSXQgbWlnaHQgYmUgcGFydCBvZiBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3IgaXQgY291bGQgYmUgYSBzZXBhcmF0ZSBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2V4cGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0zPW5ldGZpbHRlci0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOSykgJiM0Mzs9IG5mbmV0bGluay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQtXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU6bmZfY29ubnRyYWNrLXlcdDo9IG5mX2Nvbm50cmFja19jb3JlLm8gbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUubyBuZl9jb25udHJhY2tfZXhwZWN0Lm8gbmZfY29ubnRyYWNrX2hlbHBlci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTYtXHRcdCAgIG5mX2Nvbm50cmFja19wcm90by5vIG5mX2Nvbm50cmFja19wcm90b19nZW5lcmljLm8gbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5vIG5mX2Nvbm50cmFja19wcm90b191ZHAubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg0MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkNvbm5lY3RpbmcgdGhlIERvdHMgaW4gTmV0ZmlsdGVyIENvbm50cmFjayoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjbHVlIHBvaW50cyBkaXJlY3RseSB0byBgbmZfY29ubnRyYWNrLXlgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIGNvbmZpZ3VyYXRpb24gb2YgYENPTkZJR19ORl9DVF9ORVRMSU5LYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbiB3aXRoIHVzZXJzcGFjZSBoYXBwZW5zIGZvciBgbmZfY29ubnRyYWNrYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBuZWNlc3NhcnkgbmV0bGluayBpbnRlcmZhY2UgaXMgZW5hYmxlZC4gSWYgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpc24mIzM5O3Qgc2V0LCB0aGVuIHRoZSBhYmlsaXR5IHRvIGludGVyYWN0IHdpdGggdGhlIGNvbm50cmFjayB0YWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3b24mIzM5O3QgYmUgYXZhaWxhYmxlLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBjZXJ0YWluIGJlaGF2aW9ycywgc3BlY2lmaWNhbGx5IGluIGNlcnRhaW4gbmV0d29yayBtYW5hZ2VtZW50IHRvb2xzLCB0byBmYWlsIGFzIGV4cGVjdGVkLiBUaGlzIGFsc28gaGVscHMgdG8gZW5zdXJlIHRoZSBleHBlY3RlZCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuIEkgc3VzcGVjdCB0aGlzIGlzIHRoZSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NUX05FVExJTksmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTM1NT1jb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzY1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2Njpjb25maWcgTkZfQ1RfTkVUTElOS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTM2Ny1cdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3Mi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNzM6Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3NC1cdHRyaXN0YXRlICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCB0dW5pbmcgdmlhIE5ldGxpbmsmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg1OmNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4Ni1cdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMxNwoJCQkJCQkJb3V0cHV0OiAxMTIKCQkJCQkJCXRob3VnaHRzOiA4MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGb2N1cyBSZWZpbmVtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdGFraW5nIGEgbG9vayBhdCBhIGZldyBhcmVhcyB3aXRoaW4gdGhlIE5ldGZpbHRlci9pcHRhYmxlcyBjb2RlLCB0cnlpbmcgdG8gcGlucG9pbnQgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBnb3QgYSBmYWlybHkgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIG1vZHVsZXMgdG8gY29uc2lkZXI6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DVF9ORVRMSU5LYCwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCwgYE5GX1RBQkxFU2AsIGBORlRfRklCYCwgYE5GVF9GSUJfTkVUREVWYCwgYW5kIGBJUF9TRVRgLiBBIHdpZGUgdmFyaWV0eS4KCk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgbmV0bGluayBpbnRlcmFjdGlvbnMsIHBhY2tldCBwcm9jZXNzaW5nLCBhbmQgdGhvc2UgdGhhdCBkZWFsIHdpdGggc3RhdGVmdWwgY29ubmVjdGlvbnMsIHRob3NlIGFyZWFzIGFyZSByaXBlIHdpdGggY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSBzdGFydGVkIGJ5IGxvb2tpbmcgYXQgYGlwX3NldF9jb3JlLmNgIGFuZCBmb3VuZCBgaXBfc2V0X2R1bXBfZG9gLCBzaW5jZSBpdHMgbmV0bGluayBkdW1wIGNhbGxiYWNrLCBzbyB0aGF0JiMzOTtzIGEgZGVjZW50IHN0YXJ0LiBUaGVuIEkgbG9va2VkIGF0IGBuZl9jb25udHJhY2tfZXhwZWN0LmNgIGFuZCBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AsIHdoaWNoIG9mZmVyZWQgYGN0bmV0bGlua19hbGxvY19leHBlY3RgIGFuZCBmb3VuZCBzb21lIGZ1bmN0aW9ucyBpbiBgbmZfY29ubnRyYWNrX3NpcC5jYCBsaWtlIGBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3BgLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwuCgpgbmZuZXRsaW5rX2N0aGVscGVyLmNgIGFuZCBgbmZuZXRsaW5rX3F1ZXVlLmNgIGFyZSBhbHNvIGludGVyZXN0aW5nLiBJIHNhdyBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgYW5kIGBuZnFubF9tYW5nbGVgIGluIGBuZm5ldGxpbmtfcXVldWUuY2AgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIEl0JiMzOTtzIGhhbmRsaW5nIHBhY2tldCBtYW5pcHVsYXRpb24sIHdoaWNoIGlzIG9mdGVuIGEgc291cmNlIG9mIGJ1Z3MuIFRoZSBgbmZxbmxfbWFuZ2xlYCBzeW1ib2wgaXMgZXNwZWNpYWxseSBwcm9taXNpbmcgZ2l2ZW4gaXRzIHJvbGUgaW4gYWx0ZXJpbmcgcGFja2V0cy4KClRoZSBgbmZ0X2ZpYi5jYCBhbmQgYG5mdF9maWJfbmV0ZGV2LmNgIGNvZGUgb2ZmZXJzIGBuZnRfZmliX3ZhbGlkYXRlYCBhbmQgYG5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlYCwgYW5kIHRoZXkgYXJlIGFsc28gbG9va2luZyBsaWtlIHBvdGVudGlhbCB0YXJnZXRzLiBJbiBgbmZ0X3BheWxvYWQuY2AsIEkgc2F3IHNvbWUgaW5pdGlhbGl6YXRpb25zIGFuZCBldmFsdWF0aW9uczsgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBzZWVtIGxpa2UgdGhleSBzaG91bGQgYmUgaW52ZXN0aWdhdGVkLiBJJiMzOTttIGFsc28gbG9va2luZyBpbnRvIGBuZnRfc2V0X3BpcGFwby5jYCBhbmQgZm91bmQgYG5mdF9waXBhcG9faW5zZXJ0YCBhbmQgYHBpcGFwb19jbG9uZWAgYXMgY2FuZGlkYXRlcyB0b28uCgpTbywgbGV0JiMzOTtzIHJlZmluZSB0aGlzIGxpc3QsIGZvY3VzaW5nIG9uIHRoZSBtb3N0IHByb21pc2luZyBvbmVzOiBgaXBfc2V0X2R1bXBfZG9gLCBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAsIGBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3BgLCBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgYG5mcW5sX21hbmdsZWAsIGBuZnRfZmliX3ZhbGlkYXRlYCwgYG5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlYCwgYG5mdF9wYXlsb2FkX3NldF9pbml0YCwgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCwgYG5mdF9waXBhcG9faW5zZXJ0YCwgYW5kIGBwaXBhcG9fY2xvbmVgLiBOb3cgaXQmIzM5O3MgdGltZSB0byBjaGVjayBpZiB0aGVzZSBhcmUgZXhwb3J0ZWQgc3ltYm9scyBhbmQgaWYgdGhleSBhcmUgZXZlbiBzdWl0YWJsZSBmb3IgZnV6emluZyBpbiBwcmFjdGljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KGlwX3NldF9kdW1wX2RvfGN0bmV0bGlua19hbGxvY19leHBlY3R8c2V0X2V4cGVjdGVkX3J0cF9ydGNwfG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeXxuZnFubF9tYW5nbGV8bmZ0X2ZpYl92YWxpZGF0ZXxuZnRfZmliX25ldGRldl92YWxpZGF0ZXxuZnRfcGF5bG9hZF9zZXRfaW5pdHxuZnRfcGF5bG9hZF9zZXRfZXZhbHxuZnRfcGlwYXBvX2luc2VydHxwaXBhcG9fY2xvbmUpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE0NzY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE0Nzc6aXBfc2V0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTQ3OC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE1NzA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE1NzE6aXBfc2V0X2R1bXBfZG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE1NzIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xNzEyPXN0YXRpYyBpbnQgaXBfc2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTcyMC1cdFx0XHQuc3RhcnQgPSBpcF9zZXRfZHVtcF9zdGFydCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxNzIxOlx0XHRcdC5kdW1wID0gaXBfc2V0X2R1bXBfZG8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTcyMjpcdFx0XHQuZG9uZSA9IGlwX3NldF9kdW1wX2RvbmUsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTcyMy1cdFx0fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjYzMD1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjI2MzE6Y3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI2MzItXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqYXNzaWduX2hlbHBlcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9Mjg1Nj1jdG5ldGxpbmtfZ2x1ZV9hdHRhY2hfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjg4Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyODg4Olx0ZXhwID0gY3RuZXRsaW5rX2FsbG9jX2V4cGVjdCgoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICopY2RhLCBjdCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yODg5LVx0XHRcdFx0ICAgICBhc3NpZ25faGVscGVyLCBcdTAwMjZ0dXBsZSwgXHUwMDI2bWFzayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM1MTk9c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNTIwOmN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzUyMS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICphc3NpZ25faGVscGVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNTkxPWN0bmV0bGlua19jcmVhdGVfZXhwZWN0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYyMi1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNjIzOlx0ZXhwID0gY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjZGEsIGN0LCBOVUxMLCBcdTAwMjZ0dXBsZSwgXHUwMDI2bWFzayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYyNC1cdGlmIChJU19FUlIoZXhwKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jPTkwOT1zdGF0aWMgdm9pZCBmbHVzaF9leHBlY3RhdGlvbnMoc3RydWN0IG5mX2Nvbm4gKmN0LCBib29sIG1lZGlhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTkyOC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jOjkyOTpzdGF0aWMgaW50IHNldF9leHBlY3RlZF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTkzMC1cdFx0XHRcdCB1bnNpZ25lZCBpbnQgZGF0YW9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYz0xMTE2PXN0YXRpYyBpbnQgcHJvY2Vzc19zZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTE5OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jOjExOTk6XHRcdHJldCA9IHNldF9leHBlY3RlZF9ydHBfcnRjcChza2IsIHByb3RvZmYsIGRhdGFvZmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xMjAwLVx0XHRcdFx0XHQgICAgZHB0ciwgZGF0YWxlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTE0NT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjE0NjpuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3koc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpleHBlY3RfcG9saWN5LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNDctXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xNzc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjE3ODpuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lfc2V0W05GQ1RIX1BPTElDWV9TRVRfTUFYJiM0MzsxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTc5LVx0W05GQ1RIX1BPTElDWV9TRVRfTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTgzPW5mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTkwLVx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBORkNUSF9QT0xJQ1lfU0VUX01BWCwgYXR0cixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTkxOlx0XHRcdFx0XHQgIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXQsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE5Mi1cdFx0XHRcdFx0ICBOVUxMKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTIwOC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MjA5Olx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3koXHUwMDI2aGVscGVyLVx1MDAzZWV4cGVjdF9wb2xpY3lbaV0sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTIxMC1cdFx0XHRcdFx0XHQgIHRiW05GQ1RIX1BPTElDWV9TRVQmIzQzO2ldKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTM2OD1zdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzc1LVx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBORkNUSF9QT0xJQ1lfU0VUX01BWCwgYXR0cixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzc2Olx0XHRcdFx0XHQgIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXQsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3Ny1cdFx0XHRcdFx0ICBOVUxMKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTEzNTQ9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMzU1Om5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpZmYpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEzNTYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTcxMT1zdGF0aWMgaW50IG5mcW5sX3JlY3ZfdmVyZGljdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTc2MC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTc2MTpcdFx0aWYgKG5mcW5sX21hbmdsZShubGFfZGF0YShuZnFhW05GUUFfUEFZTE9BRF0pLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNzYyLVx0XHRcdFx0IHBheWxvYWRfbGVuLCBlbnRyeSwgZGlmZikgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmliLmM9Mjc9RVhQT1JUX1NZTUJPTChuZnRfZmliX3BvbGljeSk7XG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYy0yOC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jOjI5OmludCBuZnRfZmliX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTMwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYy03Mi19XG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYzo3MzpFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmliX3ZhbGlkYXRlKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTc0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9pbmV0LmM9NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2ZpYl9pbmV0X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfaW5ldC5jLTUwLVx0LmR1bXBcdFx0PSBuZnRfZmliX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfaW5ldC5jOjUxOlx0LnZhbGlkYXRlXHQ9IG5mdF9maWJfdmFsaWRhdGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfaW5ldC5jLTUyLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jPTIxPXN0YXRpYyB2b2lkIG5mdF9maWJfbmV0ZGV2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYy01Mi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYzo1MzpzdGF0aWMgaW50IG5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMtNTQtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jPTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMtODYtXHQuZHVtcFx0XHQ9IG5mdF9maWJfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYzo4NzpcdC52YWxpZGF0ZVx0PSBuZnRfZmliX25ldGRldl92YWxpZGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYy04OC19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDU5PXN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA4MDpzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4MS1cdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNjktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3MDpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3MS1cdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTI3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjczLVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0KSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3NDpcdC5ldmFsXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3NTpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI3Ni1cdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2R1bXAsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTEyNDM9c3RhdGljIGJvb2wgbmZ0X3BpcGFwb190cmFuc2FjdGlvbl9tdXRleF9oZWxkKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyNTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI1NDpzdGF0aWMgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKnBpcGFwb19jbG9uZShzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqb2xkKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xMjU1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xMjYyPXN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqcGlwYXBvX21heWJlX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyNzEtXHRcdFx0XHQgICAgICBuZnRfcGlwYXBvX3RyYW5zYWN0aW9uX211dGV4X2hlbGQoc2V0KSk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI3MjpcdHByaXYtXHUwMDNlY2xvbmUgPSBwaXBhcG9fY2xvbmUobSk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI3My1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI3Ny0vKipcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxMjc4OiAqIG5mdF9waXBhcG9faW5zZXJ0KCkgLSBWYWxpZGF0ZSBhbmQgaW5zZXJ0IHJhbmdlZCBlbGVtZW50c1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyNzktICogQG5ldDpcdE5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyODUtICovXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI4NjpzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xMjg3LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTQyNS0vKipcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxNDI2OiAqIHBpcGFwb19jbG9uZSgpIC0gQ2xvbmUgbWF0Y2hpbmcgZGF0YSB0byBjcmVhdGUgbmV3IHdvcmtpbmcgY29weVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE0MjctICogQG9sZDpcdEV4aXN0aW5nIG1hdGNoaW5nIGRhdGFcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTQzMC0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxNDMxOnN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqcGlwYXBvX2Nsb25lKHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICpvbGQpXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTQzMi17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTE4NzU9c3RhdGljIHZvaWQgbmZ0X3BpcGFwb19hYm9ydChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xODkyLSAqIGluIHVzZSBmb3IgbG9va3VwcywgYW5kIG5vdCBkaXJlY3RseSBpbnNlcnRlZCBpbnRvIGN1cnJlbnQgbG9va3VwIGRhdGEuIEJvdGhcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxODkzOiAqIG5mdF9waXBhcG9faW5zZXJ0KCkgYW5kIG5mdF9waXBhcG9fYWN0aXZhdGUoKSBhcmUgY2FsbGVkIG9uY2UgZm9yIGVhY2hcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xODk0LSAqIGVsZW1lbnQsIGhlbmNlIHdlIGNhbiYjMzk7dCBwdXJwb3NlIGVpdGhlciBvbmUgYXMgYSByZWFsIGNvbW1pdCBvcGVyYXRpb24uXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTI0MTg9Y29uc3Qgc3RydWN0IG5mdF9zZXRfdHlwZSBuZnRfc2V0X3BpcGFwb190eXBlID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0yNDIyLVx0XHQubG9va3VwXHRcdD0gbmZ0X3BpcGFwb19sb29rdXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MjQyMzpcdFx0Lmluc2VydFx0XHQ9IG5mdF9waXBhcG9faW5zZXJ0LFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTI0MjQtXHRcdC5hY3RpdmF0ZVx0PSBuZnRfcGlwYXBvX2FjdGl2YXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0yNDQzPWNvbnN0IHN0cnVjdCBuZnRfc2V0X3R5cGUgbmZ0X3NldF9waXBhcG9fYXZ4Ml90eXBlID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0yNDQ3LVx0XHQubG9va3VwXHRcdD0gbmZ0X3BpcGFwb19hdngyX2xvb2t1cCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoyNDQ4Olx0XHQuaW5zZXJ0XHRcdD0gbmZ0X3BpcGFwb19pbnNlcnQsXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMjQ0OS1cdFx0LmFjdGl2YXRlXHQ9IG5mdF9waXBhcG9fYWN0aXZhdGUsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oPTEyOD1zdHJ1Y3QgbmZ0X3BpcGFwb19zY3JhdGNoIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmgtMTMzLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oOjEzNDplbnVtIG5mdF9waXBhcG9fY2xvbmVfc3RhdGUge1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oLTEzNS1cdE5GVF9QSVBBUE9fQ0xPTkVfTkVXLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaD0xNDk9c3RydWN0IG5mdF9waXBhcG9fbWF0Y2gge1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oLTE1MC1cdHU4IGZpZWxkX2NvdW50O1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oOjE1MTpcdGVudW0gbmZ0X3BpcGFwb19jbG9uZV9zdGF0ZSBzdGF0ZTo4O1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oLTE1Mi1cdHVuc2lnbmVkIGludCBic2l6ZV9tYXg7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDg1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBSZWxldmFudCBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9uIHN5bWJvbHMgaW1wYWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy4gSSBzdGFydGVkIHdpdGggYSBicm9hZGVyIGxpc3Q6IGBpcF9zZXRfZHVtcF9kb2AsIGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YCwgYHNldF9leHBlY3RlZF9ydHBfcnRjcGAsIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLCBgbmZxbmxfbWFuZ2xlYCwgYG5mdF9maWJfdmFsaWRhdGVgLCBgbmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGVgLCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgLCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLCBgbmZ0X3BpcGFwb19pbnNlcnRgLCBhbmQgYHBpcGFwb19jbG9uZWAuCgpUaGVuLCBJIHN0YXJ0ZWQgcmVmaW5pbmcgdGhpcyBsaXN0LiBJIHJlYWxpemVkIHRoYXQgc2V2ZXJhbCBvZiB0aG9zZSBhcmUgc3RhdGljIGFuZCB1c2VkIHdpdGhpbiBvdGhlciBzdGF0aWMgZnVuY3Rpb25zLiBTbywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBvbmVzIHdpdGggYnJvYWRlciBpbXBsaWNhdGlvbnMgb3IgdGhhdCByZXByZXNlbnQgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFRoYXQgbGVkIG1lIHRvIGNvbnNpZGVyIGEgc2Vjb25kIHNldDogYGlwX3NldF9kdW1wX2RvbmVgLCBgbmZfY3RfZXhwZWN0X2FsbG9jYCwgYG5mX2N0X2V4cGVjdF9pbml0YCwgYG5mcW5sX3ZhbGlkYXRlX3dyaXRlYCwgYW5kIGV4cGFuZGVkIGl0IGFnYWluLiBJIGtub3cgSSBoYXZlIHRvIGNvdmVyIHRoZSBjb3JlIGNoYW5nZXMuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgb2YgYSBjb25jaXNlLCByZXByZXNlbnRhdGl2ZSBsaXN0IHRoYXQgYXZvaWRzIHRoZSBtb3N0IGhvdC1wYXRoIGZ1bmN0aW9ucywgYnV0IGNhcHR1cmVzIHRoZSBlc3NlbmNlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgZmluYWwgbGlzdCBpbmNsdWRlczogYGlwX3NldF9kdW1wX2RvbmVgLCBgaXBfc2V0X2R1bXBfZG9gLCBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAsIGBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3BgLCBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgYG5mcW5sX21hbmdsZWAsIGBuZnRfZmliX3ZhbGlkYXRlYCwgYG5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlYCwgYG5mdF9wYXlsb2FkX3NldF9pbml0YCwgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCwgYW5kIGBuZnRfcGlwYXBvX2luc2VydGAuCgpOZXh0LCBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBpbml0aWFsIGxpc3QgSSBoYWQgd2FzOiBgTkZfQ09OTlRSQUNLYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfQ1RfTkVUTElOS2AsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBORl9UQUJMRVNgLCBgTkZUX0ZJQmAsIGBORlRfRklCX05FVERFVmAsIGFuZCBgSVBfU0VUYC4KCkkgaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcy4gSSBjaGVja2VkIGBORl9DT05OVFJBQ0tfRVhQRUNUYCBhbmQgdGhlIHNvdXJjZSBmaWxlcyBpbmNsdWRlZC4gVGhhdCBtYWRlIG1lIGNvbnNpZGVyIGhvdyBgTkZUX0ZJQl9ORVRERVZgIHJlbGF0ZWQgdG8gYE5GX1RBQkxFU2AuIEFuZCBJIGNoZWNrZWQgYE5GVF9QSVBBUE9gIHRvby4gSSBhbSBzYXRpc2ZpZWQgdGhlIGNvbmZpZ3VyYXRpb25zIGxpc3RlZCBhcmUgdGhlIHJpZ2h0IHNldCBvZiByZWxldmFudCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVx0Ym9vbCBcJiMzNDtTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVx0Ym9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O0FtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVx0dHJpc3RhdGVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXHR0cmlzdGF0ZSBcJiMzNDtTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXHR0cmlzdGF0ZSBcJiMzNDtTQU5FIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVx0dHJpc3RhdGUgXCYjMzQ7VEZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBEZWVwIERpdmUqKgoKQWxyaWdodCwgaW5pdGlhbCBpbXByZXNzaW9uOiB0aGluZ3Mgc2VlbSB0byBiZSBpbiBvcmRlci4gVGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBkZXNpZ24gYXJlIHByZXNlbnRpbmcgd2VsbC4gQmVmb3JlIGdldHRpbmcgdG9vIGZhciBhaGVhZCwgSSYjMzk7bSB0aGlua2luZyBsZXQmIzM5O3MgcGl2b3QgdG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgZm9jdXMgb3VyIGF0dGVudGlvbiBzcGVjaWZpY2FsbHkgb24gdGhlIGBORl9UQUJMRVNgIGltcGxlbWVudGF0aW9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBzeXN0ZW0sIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgbGl2ZXMuIFdlJiMzOTtsbCBleGFtaW5lIHRoZSB0YWJsZSBjb25maWd1cmF0aW9ucywgY2hhaW4gZGVmaW5pdGlvbnMsIHJ1bGVzZXRzLCBhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgY29ubmVjdGVkLiBUaGF0IGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgY2F0Y2hpbmcgcG90ZW50aWFsIHN1YnRsZSBpc3N1ZXMsIG9wdGltaXphdGlvbnMsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIE5vIGFzc3VtcHRpb25zOyBpdCYjMzk7cyB0aW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGZvciBOZXR3b3JrIEZpbHRlcmluZyBGZWF0dXJlcyoqCgpPa2F5LCBJIG5lZWQgdG8gbWFrZSBhIHF1aWNrIGFkZGl0aW9uIHRvIGVuc3VyZSBicm9hZCBjb21wYXRpYmlsaXR5LiBJIHNob3VsZCBwcm9hY3RpdmVseSBpbmNsdWRlIGBORl9UQUJMRVNfTkVUREVWYCBhbmQgYE5GX1RBQkxFU19JTkVUYCBpbiBteSBjb25maWd1cmF0aW9uIGp1c3QgdG8gYmUgc2FmZS4gSXQmIzM5O3MgcG9zc2libGUgdGhhdCBgbmZ0X2ZpYl9uZXRkZXYuY2AgYW5kIGBuZnRfZmliX2luZXQuY2AgbWlnaHQgaGF2ZSBkZXBlbmRlbmNpZXMgb24gdGhlbSwgYW5kIEkgZG9uJiMzOTt0IHdhbnQgdG8gcnVuIGludG8gYW55IHVuZXhwZWN0ZWQgaXNzdWVzIGxhdGVyLiBOb3csIGhvbGQgb24sIEkgcmVjYWxsIHRoYXQgYG5mdF9maWJfbmV0ZGV2LmNgIHNwZWNpZmljYWxseSByZWxpZXMgb24gYE5GVF9GSUJfTkVUREVWYC4gQWxyaWdodCwgc28gdGhhdCYjMzk7cyB0aGUga2V5LiBMZXQgbWUgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5GVF9GSUJfTkVUREVWYCB0byBjb25maXJtIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIgYW5kIHRoYXQgSSYjMzk7bSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIHNldCB1cCBjb3JyZWN0bHkgYmVmb3JlIEkgY29udGludWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRklCX05FVERFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9Njc0PWNvbmZpZyBORlRfRldEX05FVERFVlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NzktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjgwOmNvbmZpZyBORlRfRklCX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY4MS1cdGRlcGVuZHMgb24gTkZUX0ZJQl9JUFY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NzI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5lZWQgZm9yIGBORlRfRklCX0lQVjRgKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBORlRfRklCX0lQVjRgLiBUaGF0JiMzOTtzIGEga2V5IGVsZW1lbnQgaW4gdGhlIGBuZnRhYmxlc2AgZnJhbWV3b3JrIHJlbGF0ZWQgdG8gSVBWNCBmb3J3YXJkaW5nIGluZm9ybWF0aW9uIGJhc2UgKEZJQikgbG9va3Vwcy4gRXNzZW50aWFsbHksIGl0IGRlYWxzIHdpdGggcm91dGluZyBkZWNpc2lvbnMuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXZlbiBjb21pbmcgdXAgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSB0cmFkaXRpb25hbCByb3V0aW5nIHRhYmxlcyBhcmUgZWl0aGVyIGluYWRlcXVhdGUgb3Igd2UmIzM5O3JlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJiMzOTtyZSBlaXRoZXIgYnVpbGRpbmcgc29tZSBraW5kIG9mIGN1c3RvbSByb3V0aW5nIGxvZ2ljLCBpbXBsZW1lbnRpbmcgcG9saWN5LWJhc2VkIHJvdXRpbmcsIG9yIHBlcmhhcHMgdHJ5aW5nIHRvIG9wdGltaXplIHBlcmZvcm1hbmNlIGluIGEgaGlnaGx5IHNwZWNpZmljIG5ldHdvcmsgc2NlbmFyaW8uIFRoZSBpbmNsdXNpb24gb2YgdGhlICYjMzQ7RklCJiMzNDsgaXMgYSByZWQgZmxhZyBpbiB0aGUgYmVzdCB3YXksIGFuZCBzdWdnZXN0cyB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIHNvbWV0aGluZyByZWxhdGl2ZWx5IGxvdy1sZXZlbC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgc3BlY2lmaWMgbW9kdWxlIGlzIHJlcXVpcmVkLCBidXQgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBORlRfRklCX0lQVjRgIHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IGZ1bmN0aW9uYWxpdHkgaXQgcHJvdmlkZXMgYW5kIHdoYXQgZGVzaWduIGRlY2lzaW9ucyB3ZXJlIG1hZGUsIHNvIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uIGluIHRoZSB3aWRlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZUX0ZJQl9JUFY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NDc9Y29uZmlnIE5GVF9EVVBfSVBWNFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTUzLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5GVF9GSUJfSVBWNFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNTUtXHRzZWxlY3QgTkZUX0ZJQlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzE0MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgTkZUX0ZJQl9JUFY2YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgY2hlY2sgYE5GVF9GSUJfSVBWNmAuJiMzNDsgR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBhbmFseXppbmcsIG9yIHBlcmhhcHMgb3B0aW1pemluZyBhIG5ldHdvcmsgc2V0dXAgdGhhdCBpbnZvbHZlcyBJUHY2IHJvdXRpbmcgYW5kIGZvcndhcmRpbmcgdGFibGVzLiBUaGUgc3BlY2lmaWMgbmFtaW5nIGNvbnZlbnRpb24gaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxpa2VseSB1c2luZyBgbmZ0YWJsZXNgIChvciB0aGUgb2xkZXIgYGlwdGFibGVzYCB3aXRoIHNvbWUgY29tcGF0aWJpbGl0eSBsYXllcnMpLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYSBtaXNjb25maWd1cmVkIHJ1bGUsIG9yIG1heWJlIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgY29tcGxleCBmaXJld2FsbC9yb3V0aW5nIHNldHVwLiBUaGUgZmFjdCB0aGF0IEkmIzM5O20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgSVB2NiBGSUIgaW5kaWNhdGVzIGEgY2xlYXIgZm9jdXMgb24gdGhlIElQdjYgcG9ydGlvbiBvZiB0aGUgbmV0d29yayBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRklCX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgTkZUX0RVUF9JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDktXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpjb25maWcgTkZUX0ZJQl9JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy01MS1cdHRyaXN0YXRlIFwmIzM0O25mX3RhYmxlcyBmaWIgLyBpcHY2IHJvdXRlIGxvb2t1cCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDg5CgkJCQkJCQlvdXRwdXQ6IDM1OAoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOZXRmaWx0ZXIgUGF0Y2ggUmV2aWV3KioKCk9rYXksIHNvIHdlJiMzOTtyZSBhZGRpbmcgYE5GVF9GSUJfSVBWNGAgYW5kIGBORlRfRklCX0lQVjZgLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQmIzM5O3Mgc3VtbWFyaXplIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIHJlcXVpcmVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgaW4gb3JkZXI6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DVF9ORVRMSU5LYCwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCwgYE5GX1RBQkxFU2AsIGBORlRfRklCX0lQVjRgLCBgTkZUX0ZJQl9JUFY2YCwgYE5GVF9GSUJfTkVUREVWYCwgYW5kIGBJUF9TRVRgLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBORl9UQUJMRVNfTkVUREVWYCBhbmQgYE5GX1RBQkxFU19JTkVUYCBzaW5jZSB0aGV5IGNhbiBzb21ldGltZXMgYmUgdHJpY2t5LiBBaCwgcmlnaHQsIGBORlRfRklCX05FVERFVmAgZGVwZW5kcyBvbiBgTkZUX0ZJQl9JUFY0YCwgYW5kIGBORlRfRklCX0lORVRgIGRlcGVuZHMgb24gYE5GX1RBQkxFU19JTkVUYC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIGluY2x1ZGUgYm90aCBgTkZfVEFCTEVTX05FVERFVmAgYW5kIGBORl9UQUJMRVNfSU5FVGAuIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2UgY29yZSBjb21wb25lbnRzLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGEgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIFdlIGhhdmUgYGlwX3NldF9kdW1wX2RvYCwgYGlwX3NldF9kdW1wX2RvbmVgLCBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAsIGBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3BgLCBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgYG5mcW5sX21hbmdsZWAsIGBuZnRfZmliX3ZhbGlkYXRlYCwgYG5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlYCwgYG5mdF9wYXlsb2FkX3NldF9pbml0YCwgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCwgYW5kIGBuZnRfcGlwYXBvX2luc2VydGAuIExvb2tzIGxpa2UgdGhpcyBpcyBhIHNvbGlkIGxpc3QgY292ZXJpbmcgdGhlIGFyZWFzIHdoZXJlIGNoYW5nZXMgd2VyZSBkaXJlY3RseSBpbXBsZW1lbnRlZCBvciB3aGVyZSB0aGUgbG9naWMgaGFzIGJlZW4gdXBkYXRlZCwgcmlnaHQgd2hlcmUgaXQgbWF0dGVycy4KCkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc29tZSBpbXBvcnRhbnQsIHF1aXRlIGRlZXAgY2hhbmdlcyB0byBOZXRmaWx0ZXIuIFdlIGhhdmUgbmV3IHZhbGlkYXRpb24gc3RlcHMgZm9yIHBheWxvYWQgd3JpdGVzIGFuZCBJUC9JUHY2IGhlYWRlcnMgYmVmb3JlIG1hbmdsaW5nLCB0aGF0JiMzOTtzIGNydWNpYWwgZm9yIHNlY3VyaXR5LiBUaGVuIHRoZXJlJiMzOTtzIHRoZSBmaXggZm9yIHRoZSBTSVAgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGJ1ZywgYSBzdGF0ZSB0cmFja2luZyBhZGRpdGlvbiBmb3IgcGlwYXBvIHNldCBjbG9uZXMgdGhhdCBzaG91bGQgaGVscCBoYW5kbGUgYWJvcnRzIG1vcmUgcm9idXN0bHksIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBjb25udHJhY2sgZXhwZWN0YXRpb24gYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIEFsbCBvZiB0aGVzZSBhZmZlY3QgY29yZSBOZXRmaWx0ZXIgbG9naWMuIFdlJiMzOTtyZSB0YWxraW5nIE5ldGxpbmsgcXVldWUsIG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcsIGFuZCBwaXBhcG8gc2V0cywgYW5kIHRoYXQmIzM5O3MgYWxsIHN0dWZmIHRoYXQgdXNlcnNwYWNlIGhhcyBkaXJlY3QgYWNjZXNzIHRvLCBzbyB0aGlzIG5lZWRzIHRvIGJlIHJpZ29yb3VzbHkgdGVzdGVkLiBXZSBhYnNvbHV0ZWx5IG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGhlcmUuIFdlIGhhdmUgdG8gZnV6eiBpdCBoZWF2aWx5LgoKUmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gcnVuIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93IHRvIHNlZSBob3cgdGhlIGNoYW5nZSBpbXBhY3RzIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1NJUCYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSU5FVCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfTkVUREVWJiMzNDssCiAgICAmIzM0O05GVF9GSUJfSVBWNCYjMzQ7LAogICAgJiMzNDtORlRfRklCX0lQVjYmIzM0OywKICAgICYjMzQ7TkZUX0ZJQl9ORVRERVYmIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfc2V0X2R1bXBfZG8mIzM0OywKICAgICYjMzQ7aXBfc2V0X2R1bXBfZG9uZSYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfYWxsb2NfZXhwZWN0JiMzNDssCiAgICAmIzM0O3NldF9leHBlY3RlZF9ydHBfcnRjcCYjMzQ7LAogICAgJiMzNDtuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3kmIzM0OywKICAgICYjMzQ7bmZxbmxfbWFuZ2xlJiMzNDssCiAgICAmIzM0O25mdF9maWJfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2V2YWwmIzM0OywKICAgICYjMzQ7bmZ0X3BpcGFwb19pbnNlcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLiBJdCBhZGRzIHZhbGlkYXRpb24gZm9yIHBheWxvYWQgd3JpdGVzIGFuZCBJUC9JUHY2IGhlYWRlcnMgYmVmb3JlIG1hbmdsaW5nLCBmaXhlcyBhIGJ1ZyBpbiBTSVAgY29ubnRyYWNrIGV4cGVjdGF0aW9uLCBhZGRzIHN0YXRlIHRyYWNraW5nIGZvciBwaXBhcG8gc2V0IGNsb25lcyB0byBwcm9wZXJseSBoYW5kbGUgYWJvcnRzLCBhbmQgbW9kaWZpZXMgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBsb2dpYywgbmV0bGluayBxdWV1ZSwgbmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZywgYW5kIHBpcGFwbyBzZXRzLCB3aGljaCBhcmUgYWxsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU0lQJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOS19IRUxQRVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfUVVFVUUmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JTkVUJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0OywKICAgICYjMzQ7TkZUX0ZJQl9JUFY0JiMzNDssCiAgICAmIzM0O05GVF9GSUJfSVBWNiYjMzQ7LAogICAgJiMzNDtORlRfRklCX05FVERFViYjMzQ7LAogICAgJiMzNDtJUF9TRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9zZXRfZHVtcF9kbyYjMzQ7LAogICAgJiMzNDtpcF9zZXRfZHVtcF9kb25lJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19hbGxvY19leHBlY3QmIzM0OywKICAgICYjMzQ7c2V0X2V4cGVjdGVkX3J0cF9ydGNwJiMzNDssCiAgICAmIzM0O25mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeSYjMzQ7LAogICAgJiMzNDtuZnFubF9tYW5nbGUmIzM0OywKICAgICYjMzQ7bmZ0X2ZpYl92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfZmliX25ldGRldl92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfcGlwYXBvX2luc2VydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIEl0IGFkZHMgdmFsaWRhdGlvbiBmb3IgcGF5bG9hZCB3cml0ZXMgYW5kIElQL0lQdjYgaGVhZGVycyBiZWZvcmUgbWFuZ2xpbmcsIGZpeGVzIGEgYnVnIGluIFNJUCBjb25udHJhY2sgZXhwZWN0YXRpb24sIGFkZHMgc3RhdGUgdHJhY2tpbmcgZm9yIHBpcGFwbyBzZXQgY2xvbmVzIHRvIHByb3Blcmx5IGhhbmRsZSBhYm9ydHMsIGFuZCBtb2RpZmllcyBjb25udHJhY2sgZXhwZWN0YXRpb24gYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLCBuZXRsaW5rIHF1ZXVlLCBuZnRhYmxlcyBwYXlsb2FkIG1hbmdsaW5nLCBhbmQgcGlwYXBvIHNldHMsIHdoaWNoIGFyZSBhbGwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjAyLjY5MTI2MTY4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTE1NDkwMzc5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TSVBcIixcbiAgICBcIk5GX0NUX05FVExJTktcIixcbiAgICBcIk5GX0NUX05FVExJTktfSEVMUEVSXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiLFxuICAgIFwiTkZUX0ZJQl9JUFY0XCIsXG4gICAgXCJORlRfRklCX0lQVjZcIixcbiAgICBcIk5GVF9GSUJfTkVUREVWXCIsXG4gICAgXCJJUF9TRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9zZXRfZHVtcF9kb1wiLFxuICAgIFwiaXBfc2V0X2R1bXBfZG9uZVwiLFxuICAgIFwiY3RuZXRsaW5rX2FsbG9jX2V4cGVjdFwiLFxuICAgIFwic2V0X2V4cGVjdGVkX3J0cF9ydGNwXCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lcIixcbiAgICBcIm5mcW5sX21hbmdsZVwiLFxuICAgIFwibmZ0X2ZpYl92YWxpZGF0ZVwiLFxuICAgIFwibmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGVcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiLFxuICAgIFwibmZ0X3BpcGFwb19pbnNlcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIEl0IGFkZHMgdmFsaWRhdGlvbiBmb3IgcGF5bG9hZCB3cml0ZXMgYW5kIElQL0lQdjYgaGVhZGVycyBiZWZvcmUgbWFuZ2xpbmcsIGZpeGVzIGEgYnVnIGluIFNJUCBjb25udHJhY2sgZXhwZWN0YXRpb24sIGFkZHMgc3RhdGUgdHJhY2tpbmcgZm9yIHBpcGFwbyBzZXQgY2xvbmVzIHRvIHByb3Blcmx5IGhhbmRsZSBhYm9ydHMsIGFuZCBtb2RpZmllcyBjb25udHJhY2sgZXhwZWN0YXRpb24gYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLCBuZXRsaW5rIHF1ZXVlLCBuZnRhYmxlcyBwYXlsb2FkIG1hbmdsaW5nLCBhbmQgcGlwYXBvIHNldHMsIHdoaWNoIGFyZSBhbGwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6MDIuNjkxMjcxNzc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTEwMzc3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ODU4MmFmODA4NTJjMzFhNjk2YjlhZGEyYTliNzE0MWJiZDYwZDhkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDA2OjA2OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xcbmluZGV4IGE1MzFiNjU0YjhkOTY0Li42Y2ZhZDE1MmQ3ZDFiYSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcXG5AQCAtMTQ4MCw3ICsxNDgwLDExIEBAIGlwX3NldF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiBcXHRcXHRzdHJ1Y3QgaXBfc2V0X25ldCAqaW5zdCA9XFxuIFxcdFxcdFxcdChzdHJ1Y3QgaXBfc2V0X25ldCAqKWNiLVxcdTAwM2VhcmdzW0lQU0VUX0NCX05FVF07XFxuIFxcdFxcdGlwX3NldF9pZF90IGluZGV4ID0gKGlwX3NldF9pZF90KWNiLVxcdTAwM2VhcmdzW0lQU0VUX0NCX0lOREVYXTtcXG4tXFx0XFx0c3RydWN0IGlwX3NldCAqc2V0ID0gaXBfc2V0X3JlZl9uZXRsaW5rKGluc3QsIGluZGV4KTtcXG4rXFx0XFx0c3RydWN0IGlwX3NldCAqc2V0O1xcbitcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRzZXQgPSBpcF9zZXRfcmVmX25ldGxpbmsoaW5zdCwgaW5kZXgpO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdFxcdGlmIChzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZXVyZWYpXFxuIFxcdFxcdFxcdHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNldXJlZihzZXQsIGNiLCBmYWxzZSk7XFxuQEAgLTE2ODYsNyArMTY5MCw5IEBAIGlwX3NldF9kdW1wX2RvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gcmVsZWFzZV9yZWZjb3VudDpcXG4gXFx0LyogSWYgdGhlcmUgd2FzIGFuIGVycm9yIG9yIHNldCBpcyBkb25lLCByZWxlYXNlIHNldCAqL1xcbiBcXHRpZiAocmV0IHx8ICFjYi1cXHUwMDNlYXJnc1tJUFNFVF9DQl9BUkcwXSkge1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdHNldCA9IGlwX3NldF9yZWZfbmV0bGluayhpbnN0LCBpbmRleCk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRpZiAoc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2V1cmVmKVxcbiBcXHRcXHRcXHRzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZXVyZWYoc2V0LCBjYiwgZmFsc2UpO1xcbiBcXHRcXHRwcl9kZWJ1ZyhcXFwicmVsZWFzZSBzZXQgJXNcXFxcblxcXCIsIHNldC1cXHUwMDNlbmFtZSk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcXG5pbmRleCAzODYzMGM1ZTAwNmYwOC4uN2FlNjhkNjA1ODZhMjMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xcbkBAIC0zMDYsNyArMzA2LDcgQEAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKm5mX2N0X2V4cGVjdF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqbWUpXFxuIHtcXG4gXFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKm5ldztcXG4gXFxuLVxcdG5ldyA9IGttZW1fY2FjaGVfYWxsb2MobmZfY3RfZXhwZWN0X2NhY2hlcCwgR0ZQX0FUT01JQyk7XFxuK1xcdG5ldyA9IGttZW1fY2FjaGVfemFsbG9jKG5mX2N0X2V4cGVjdF9jYWNoZXAsIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAoIW5ldylcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbkBAIC0zOTEsNiArMzkxLDcgQEAgdm9pZCBuZl9jdF9leHBlY3RfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB1bnNpZ25lZCBpbnQgY2xhc3MsXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXFxuIFxcdG1lbXNldChcXHUwMDI2ZXhwLVxcdTAwM2VzYXZlZF9hZGRyLCAwLCBzaXplb2YoZXhwLVxcdTAwM2VzYXZlZF9hZGRyKSk7XFxuIFxcdG1lbXNldChcXHUwMDI2ZXhwLVxcdTAwM2VzYXZlZF9wcm90bywgMCwgc2l6ZW9mKGV4cC1cXHUwMDNlc2F2ZWRfcHJvdG8pKTtcXG4rXFx0ZXhwLVxcdTAwM2VkaXIgPSAwO1xcbiAjZW5kaWZcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaW5pdCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xcbmluZGV4IDQyMTc3MTVkNDJkYzI0Li4zMWNiYjFiNTViOWU2YyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcXG5AQCAtMzU0OSw4ICszNTQ5LDYgQEAgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0aWYgKGNkYVtDVEFfRVhQRUNUX0ZMQUdTXSkge1xcbiBcXHRcXHRleHAtXFx1MDAzZWZsYWdzID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfRVhQRUNUX0ZMQUdTXSkpO1xcbiBcXHRcXHRleHAtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5ORl9DVF9FWFBFQ1RfVVNFUlNQQUNFO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRleHAtXFx1MDAzZWZsYWdzID0gMDtcXG4gXFx0fVxcbiBcXHRpZiAoY2RhW0NUQV9FWFBFQ1RfRk5dKSB7XFxuIFxcdFxcdGNvbnN0IGNoYXIgKm5hbWUgPSBubGFfZGF0YShjZGFbQ1RBX0VYUEVDVF9GTl0pO1xcbkBAIC0zNTYyLDggKzM1NjAsNyBAQCBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcdFxcdH1cXG4gXFx0XFx0ZXhwLVxcdTAwM2VleHBlY3RmbiA9IGV4cGZuLVxcdTAwM2VleHBlY3RmbjtcXG4tXFx0fSBlbHNlXFxuLVxcdFxcdGV4cC1cXHUwMDNlZXhwZWN0Zm4gPSBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRleHAtXFx1MDAzZWNsYXNzID0gY2xhc3M7XFxuIFxcdGV4cC1cXHUwMDNlbWFzdGVyID0gY3Q7XFxuQEAgLTM1ODMsMTIgKzM1ODAsNiBAQCBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgZXhwLCBuZl9jdF9sM251bShjdCkpO1xcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRtZW1zZXQoXFx1MDAyNmV4cC1cXHUwMDNlc2F2ZWRfYWRkciwgMCwgc2l6ZW9mKGV4cC1cXHUwMDNlc2F2ZWRfYWRkcikpO1xcbi1cXHRcXHRtZW1zZXQoXFx1MDAyNmV4cC1cXHUwMDNlc2F2ZWRfcHJvdG8sIDAsIHNpemVvZihleHAtXFx1MDAzZXNhdmVkX3Byb3RvKSk7XFxuLVxcdFxcdGV4cC1cXHUwMDNlZGlyID0gMDtcXG4tI2VuZGlmXFxuIFxcdH1cXG4gXFx0cmV0dXJuIGV4cDtcXG4gZXJyX291dDpcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xcbmluZGV4IDVlYzNhNGE0YmJkNzA3Li5mM2Y5MGE4NjYzMzg5NCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXFxuQEAgLTk1Niw3ICs5NTYsNiBAQCBzdGF0aWMgaW50IHNldF9leHBlY3RlZF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0XFx0c2FkZHIgPSBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTM7XFxuIFxcdH0gZWxzZSBpZiAoc2lwX2V4dGVybmFsX21lZGlhKSB7XFxuLVxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2JfZHN0KHNrYiktXFx1MDAzZWRldjtcXG4gXFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gTlVMTDtcXG4gXFx0XFx0c3RydWN0IGZsb3dpIGZsO1xcbiBcXG5AQCAtOTc4LDcgKzk3NywxMSBAQCBzdGF0aWMgaW50IHNldF9leHBlY3RlZF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4gXFx0XFx0ICogdGhyb3VnaCB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgdGhlIHNpZ25hbGxpbmcgcGVlci5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChkc3QpIHtcXG4tXFx0XFx0XFx0Ym9vbCBleHRlcm5hbF9tZWRpYSA9IChkc3QtXFx1MDAzZWRldiA9PSBkZXYpO1xcbitcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICp0aGlzX2RzdCA9IHNrYl9kc3Qoc2tiKTtcXG4rXFx0XFx0XFx0Ym9vbCBleHRlcm5hbF9tZWRpYSA9IGZhbHNlO1xcbitcXG4rXFx0XFx0XFx0aWYgKHRoaXNfZHN0IFxcdTAwMjZcXHUwMDI2IGRzdC1cXHUwMDNlZGV2ID09IHRoaXNfZHN0LVxcdTAwM2VkZXYpXFxuK1xcdFxcdFxcdFxcdGV4dGVybmFsX21lZGlhID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuIFxcdFxcdFxcdGlmIChleHRlcm5hbF9tZWRpYSlcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5pbmRleCBmMTQ2MGI2ODNkN2FmNy4uMmNiY2NhOTExMGRiZjUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5AQCAtMTYzLDYgKzE2Myw4IEBAIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cGVjdF9wb2xpY3ksXFxuIFxcdFxcdCAgICB0YltORkNUSF9QT0xJQ1lfTkFNRV0sIE5GX0NUX0hFTFBFUl9OQU1FX0xFTik7XFxuIFxcdGV4cGVjdF9wb2xpY3ktXFx1MDAzZW1heF9leHBlY3RlZCA9XFxuIFxcdFxcdG50b2hsKG5sYV9nZXRfYmUzMih0YltORkNUSF9QT0xJQ1lfRVhQRUNUX01BWF0pKTtcXG4rXFx0aWYgKCFleHBlY3RfcG9saWN5LVxcdTAwM2VtYXhfZXhwZWN0ZWQpXFxuK1xcdFxcdGV4cGVjdF9wb2xpY3ktXFx1MDAzZW1heF9leHBlY3RlZCA9IE5GX0NUX0VYUEVDVF9NQVhfQ05UO1xcbiBcXHRpZiAoZXhwZWN0X3BvbGljeS1cXHUwMDNlbWF4X2V4cGVjdGVkIFxcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcXG5pbmRleCA4MGNhMDc3YjgxYmQ1YS4uMzVkNGM2YzYyOGZmYzEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcXG5AQCAtMTE4NCw2ICsxMTg0LDE3MyBAQCBuZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBpbnQgcXVldWVudW0pXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwb3B0cyhjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaF9uZXcsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX29yaWcgPSBpcF9oZHIoZS1cXHUwMDNlc2tiKTtcXG4rXFx0dW5zaWduZWQgaW50IGlobCA9IGlwaF9uZXctXFx1MDAzZWlobCAqIDQ7XFxuK1xcbitcXHRpZiAoaXBoX25ldy1cXHUwMDNlaWhsICE9IGlwaF9vcmlnLVxcdTAwM2VpaGwpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGlobCA9PSBzaXplb2YoKmlwaF9vcmlnKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gbWVtY21wKGlwaF9uZXcgKyAxLCBpcF9oZHIoZS1cXHUwMDNlc2tiKSArIDEsIGlobCAtIHNpemVvZigqaXBoX29yaWcpKSA9PSAwO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSlcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaWhsO1xcbitcXG4rXFx0aWYgKGRhdGFfbGVuIFxcdTAwM2Mgc2l6ZW9mKCppcGgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpaGwgPSBpcGgtXFx1MDAzZWlobCAqIDR1O1xcbitcXHRpZiAoaWhsIFxcdTAwM2Mgc2l6ZW9mKCppcGgpIHx8IGRhdGFfbGVuIFxcdTAwM2MgaWhsKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoaXBoLVxcdTAwM2V2ZXJzaW9uICE9IDQgfHxcXG4rXFx0ICAgICgoaXBoLVxcdTAwM2VmcmFnX29mZiBeIGlwX2hkcihlLVxcdTAwM2Vza2IpLVxcdTAwM2VmcmFnX29mZikgXFx1MDAyNiB+aHRvbnMoSVBfREYpKSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBCSUcgVENQIHdvbid0IHdvcms7IG5ldGxpbmsgYXR0ciBsZW4gaXMgdTE2ICovXFxuK1xcdGlmIChudG9ocyhpcGgtXFx1MDAzZXRvdF9sZW4pICE9IGRhdGFfbGVuKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBzdXBwb3J0IGZvciBpcG9wdHMgbWFuZ2xpbmcgd291bGQgcmVxdWlyZVxcbitcXHQgKiByZWNvbXBpbGUgKyBza2IgdHJhbnNwb3J0IGhlYWRlciB1cGRhdGUuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGlwaCwgZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX29uZV9leHRoZHIoY29uc3QgdTggKmRhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLFxcbitcXHRcXHRcXHRcXHQgICAgICBpbnQgc3RhcnQsIGludCBoZHJsZW4pXFxuK3tcXG4rXFx0dTE2IG9jdGV0cztcXG4rXFxuK1xcdGlmIChkYXRhX2xlbiBcXHUwMDNjIGhkcmxlbiB8fCBoZHJsZW4gXFx1MDAzYyAyKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHR3aGlsZSAoaGRybGVuIFxcdTAwM2UgMCkge1xcbitcXHRcXHRpZiAoZGF0YV9sZW4gXFx1MDAzYyBzaXplb2Yob2N0ZXRzKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRkYXRhX2xlbiAtPSBzaXplb2Yob2N0ZXRzKTtcXG4rXFxuK1xcdFxcdGlmIChza2JfY29weV9iaXRzKGUtXFx1MDAzZXNrYiwgc3RhcnQsIFxcdTAwMjZvY3RldHMsIHNpemVvZihvY3RldHMpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0aWYgKGhkcmxlbiBcXHUwMDNjIHNpemVvZihvY3RldHMpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRoZHJsZW4gLT0gc2l6ZW9mKG9jdGV0cyk7XFxuK1xcdFxcdGlmIChtZW1jbXAoZGF0YSwgXFx1MDAyNm9jdGV0cywgc2l6ZW9mKG9jdGV0cykpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRzdGFydCArPSBzaXplb2Yob2N0ZXRzKTtcXG4rXFx0XFx0ZGF0YSArPSBzaXplb2Yob2N0ZXRzKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2V4dGhkcihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2X25ldyxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfb3JpZyA9IGlwdjZfaGRyKGUtXFx1MDAzZXNrYik7XFxuK1xcdGludCBleHRoZHJfY250ID0gMCwgc3RhcnQgPSBzaXplb2YoKmlwNl9vcmlnKTtcXG4rXFx0Y29uc3QgdTggKmRhdGEgPSAoY29uc3QgdTggKilpcDZfbmV3O1xcbitcXHR1OCBvcmlnX25leHRoZHIgPSBpcDZfb3JpZy1cXHUwMDNlbmV4dGhkcjtcXG4rXFx0dTggbmV3X25leHRoZHIgPSBpcDZfbmV3LVxcdTAwM2VuZXh0aGRyO1xcbitcXG4rXFx0aWYgKG5ld19uZXh0aGRyICE9IG9yaWdfbmV4dGhkcilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0ZGF0YSArPSBzaXplb2YoKmlwNl9uZXcpO1xcbitcXHRkYXRhX2xlbiAtPSBzaXplb2YoKmlwNl9uZXcpO1xcbitcXG4rXFx0d2hpbGUgKGlwdjZfZXh0X2hkcihvcmlnX25leHRoZHIpKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpcHY2X29wdF9oZHIgKmhwO1xcbitcXHRcXHRzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHI7XFxuK1xcdFxcdGludCBoZHJsZW47XFxuK1xcbitcXHRcXHRpZiAob3JpZ19uZXh0aGRyID09IE5FWFRIRFJfTk9ORSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHRpZiAodW5saWtlbHkoZXh0aGRyX2NudCsrIFxcdTAwM2U9IElQNl9NQVhfRVhUX0hEUlNfQ05UKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0aHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoZS1cXHUwMDNlc2tiLCBzdGFydCwgc2l6ZW9mKF9oZHIpLCBcXHUwMDI2X2hkcik7XFxuK1xcdFxcdGlmICghaHApXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdHN3aXRjaCAob3JpZ19uZXh0aGRyKSB7XFxuK1xcdFxcdGNhc2UgTkVYVEhEUl9GUkFHTUVOVDpcXG4rXFx0XFx0XFx0aGRybGVuID0gc2l6ZW9mKHN0cnVjdCBmcmFnX2hkcik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIE5FWFRIRFJfQVVUSDpcXG4rXFx0XFx0XFx0aGRybGVuID0gaXB2Nl9hdXRobGVuKGhwKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKGhwKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihkYXRhLCBkYXRhX2xlbiwgZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0YXJ0LCBoZHJsZW4pKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRvcmlnX25leHRoZHIgPSBocC1cXHUwMDNlbmV4dGhkcjtcXG4rXFx0XFx0aHAgPSAoY29uc3Qgdm9pZCAqKWRhdGE7XFxuK1xcdFxcdG5ld19uZXh0aGRyID0gaHAtXFx1MDAzZW5leHRoZHI7XFxuK1xcbitcXHRcXHRpZiAobmV3X25leHRoZHIgIT0gb3JpZ19uZXh0aGRyKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRkYXRhX2xlbiAtPSBoZHJsZW47XFxuK1xcdFxcdHN0YXJ0ICs9IGhkcmxlbjtcXG4rXFx0XFx0ZGF0YSArPSBoZHJsZW47XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDYoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNiwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxcbit7XFxuK1xcdGlmIChkYXRhX2xlbiBcXHUwMDNjIHNpemVvZigqaXA2KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogQklHIFRDUC9qdW1ib2dyYW1zIHdvbid0IHdvcms7IG5ldGxpbmsgYXR0ciBsZW4gaXMgdTE2ICovXFxuK1xcdGlmIChudG9ocyhpcDYtXFx1MDAzZXBheWxvYWRfbGVuKSAhPSBkYXRhX2xlbiAtIHNpemVvZigqaXA2KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKGlwNi1cXHUwMDNldmVyc2lvbiAhPSA2KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGlwNiwgZGF0YV9sZW4sIGUpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV93cml0ZShjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUpXFxuK3tcXG4rXFx0c3dpdGNoIChlLVxcdTAwM2VzdGF0ZS5wZikge1xcbitcXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG4rXFx0XFx0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwNChkYXRhLCBkYXRhX2xlbiwgZSk7XFxuK1xcdGNhc2UgTkZQUk9UT19JUFY2OlxcbitcXHRcXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfaXA2KGRhdGEsIGRhdGFfbGVuLCBlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgICAgIShJUDZDQihlLVxcdTAwM2Vza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQNlNLQl9KVU1CT0dSQU0pO1xcbitcXHRjYXNlIE5GUFJPVE9fQlJJREdFOlxcbitcXHRcXHQvKiBObyB3cml0ZSBzdXBwb3J0LiBCcmlkZ2UgaXMgZHViaW91czogdXNlcnNwYWNlIGRvZXNuJ3QgZXZlbiBzZWUgTDIgaGVhZGVyICovXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50XFxuIG5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpZmYpXFxuIHtcXG5AQCAtMTE5Miw2ICsxMzU5LDkgQEAgbmZxbmxfbWFuZ2xlKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCBpbnQgZGlcXG4gXFx0aWYgKGUtXFx1MDAzZXN0YXRlLm5ldC1cXHUwMDNldXNlcl9ucyAhPSBcXHUwMDI2aW5pdF91c2VyX25zKVxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXG4rXFx0aWYgKCFuZnFubF92YWxpZGF0ZV93cml0ZShkYXRhLCBkYXRhX2xlbiwgZSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKGRpZmYgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGludCBtaW5fbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoZS1cXHUwMDNlc2tiKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmliLmNcXG5pbmRleCBlMDQ4ZjA1Njk0Y2RkZC4uODk1NTUzODBmMWM1YTAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmliLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9maWIuY1xcbkBAIC0zMSw2ICszMSwxNSBAQCBpbnQgbmZ0X2ZpYl92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuIFxcdGNvbnN0IHN0cnVjdCBuZnRfZmliICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG4gXFx0dW5zaWduZWQgaW50IGhvb2tzO1xcbiBcXG4rXFx0c3dpdGNoIChjdHgtXFx1MDAzZWZhbWlseSkge1xcbitcXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuK1xcdGNhc2UgTkZQUk9UT19JTkVUOlxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZXJlc3VsdCkge1xcbiBcXHRjYXNlIE5GVF9GSUJfUkVTVUxUX09JRjpcXG4gXFx0Y2FzZSBORlRfRklCX1JFU1VMVF9PSUZOQU1FOlxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmNcXG5pbmRleCAzZjM0NzhhYmQ4NDU0Ni4uNTc3NGE3NTQ0MDI3ODAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jXFxuQEAgLTUwLDYgKzUwLDMzIEBAIHN0YXRpYyB2b2lkIG5mdF9maWJfbmV0ZGV2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiBcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBuZnRfZmliICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG4rXFx0dW5zaWduZWQgaW50IGhvb2tzO1xcbitcXG4rXFx0c3dpdGNoIChwcml2LVxcdTAwM2VyZXN1bHQpIHtcXG4rXFx0Y2FzZSBORlRfRklCX1JFU1VMVF9PSUY6XFxuK1xcdGNhc2UgTkZUX0ZJQl9SRVNVTFRfT0lGTkFNRTpcXG4rXFx0XFx0aG9va3MgPSAoMSBcXHUwMDNjXFx1MDAzYyBORl9ORVRERVZfSU5HUkVTUyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GVF9GSUJfUkVTVUxUX0FERFJUWVBFOlxcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRBX0ZJQl9GX0lJRilcXG4rXFx0XFx0XFx0aG9va3MgPSAoMSBcXHUwMDNjXFx1MDAzYyBORl9ORVRERVZfSU5HUkVTUyk7XFxuK1xcdFxcdGVsc2UgaWYgKHByaXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUQV9GSUJfRl9PSUYpXFxuK1xcdFxcdFxcdGhvb2tzID0gKDEgXFx1MDAzY1xcdTAwM2MgTkZfTkVUREVWX0VHUkVTUyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aG9va3MgPSAoMSBcXHUwMDNjXFx1MDAzYyBORl9ORVRERVZfSU5HUkVTUykgfFxcbitcXHRcXHRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBORl9ORVRERVZfRUdSRVNTKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbmZ0X2NoYWluX3ZhbGlkYXRlX2hvb2tzKGN0eC1cXHUwMDNlY2hhaW4sIGhvb2tzKTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9maWJfbmV0ZGV2X3R5cGU7XFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHtcXG4gXFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfZmliX25ldGRldl90eXBlLFxcbkBAIC01Nyw3ICs4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHtcXG4gXFx0LmV2YWxcXHRcXHQ9IG5mdF9maWJfbmV0ZGV2X2V2YWwsXFxuIFxcdC5pbml0XFx0XFx0PSBuZnRfZmliX2luaXQsXFxuIFxcdC5kdW1wXFx0XFx0PSBuZnRfZmliX2R1bXAsXFxuLVxcdC52YWxpZGF0ZVxcdD0gbmZ0X2ZpYl92YWxpZGF0ZSxcXG4rXFx0LnZhbGlkYXRlXFx0PSBuZnRfZmliX25ldGRldl92YWxpZGF0ZSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmliX25ldGRldl90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xcbmluZGV4IDM0NWVmZjE0MGQ1NmY4Li4zOTE1MzlhMWNlYWE3NyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcXG5AQCAtODM0LDYgKzgzNCwyNDkgQEAgbmZ0X3BheWxvYWRfc2V0X3ZsYW4oY29uc3QgdTMyICpzcmMsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiBvZmZzZXQsIHU4IGxlbixcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuKy8qIEluZ3Jlc3MgaXMgdmVyeSBlYXJseSwgYmVmb3JlIGwzIHByb3RvY29sIGhhbmRsZXJzLlxcbisgKiBUaGVyZSBzaG91bGQgYmUgbm8gaW4tdHJlZSBjb2RlIHRoYXQgdHJ1c3RzIGwzL2w0IGhlYWRlcnNcXG4rICogYmV0d2VlbiBpbmdyZXNzIGFuZCBORl9JTkVUX1BSRV9ST1VUSU5HIGhvb2tzLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgbmZ0X2luX2luZ3Jlc3MoY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnMpXFxuK3tcXG4rXFx0cmV0dXJuIHMtXFx1MDAzZXBmID09IE5GUFJPVE9fTkVUREVWIFxcdTAwMjZcXHUwMDI2IHMtXFx1MDAzZWhvb2sgPT0gTkZfTkVUREVWX0lOR1JFU1M7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19pcDQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHUzMiAqc3JjKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBwcml2LVxcdTAwM2VvZmZzZXQgKyBza2JfbmV0d29ya19vZmZzZXQocGt0LVxcdTAwM2Vza2IpO1xcbitcXHRjb25zdCB1OCAqbmV3X29jdGV0cyA9IChjb25zdCB1OCAqKXNyYztcXG4rXFx0dTggb2xkX29jdGV0O1xcbitcXG4rXFx0c3dpdGNoIChwcml2LVxcdTAwM2VvZmZzZXQpIHtcXG4rXFx0Y2FzZSAwOiAvKiBjc3VtIGZpeHVwcyBkb2VzIGV4cGFuZCBkc2NwL3RvcyBzdG9yZSB0byAyIGJ5dGVzLlxcbitcXHRcXHQgKiBtYWtlIHN1cmUgaWhsL3ZlcnNpb24gcmVtYWluIHVuY2hhbmdlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChza2JfY29weV9iaXRzKHBrdC1cXHUwMDNlc2tiLCBvZmZzZXQsIFxcdTAwMjZvbGRfb2N0ZXQsIHNpemVvZihvbGRfb2N0ZXQpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWxlbiA9PSAyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgICAqbmV3X29jdGV0cyA9PSBvbGRfb2N0ZXQ7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCB0b3MpOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlbGVuID09IDE7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBpZCk6XFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2VsZW4gPT0gMjtcXG4rXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHR0bCk6XFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VsZW4gPT0gMSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlbGVuICE9IDIpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdC8qIHNhbWUsIGNzdW0gZml4dXAgZG9lcyBleHBhbmQgdHRsIHN0b3JlIHRvIHR3byBieXRlcy5cXG4rXFx0XFx0ICogY2hlY2sgcHJvdG9jb2wgaXMgbm90IGFsdGVyZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2tiX2NvcHlfYml0cyhwa3QtXFx1MDAzZXNrYiwgb2Zmc2V0ICsgMSwgXFx1MDAyNm9sZF9vY3RldCwgc2l6ZW9mKG9sZF9vY3RldCkpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRyZXR1cm4gbmV3X29jdGV0c1sxXSA9PSBvbGRfb2N0ZXQ7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk6XFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2VsZW4gXFx1MDAzYz0gMiArIDQgKyA0O1xcbitcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgc2FkZHIpOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlbGVuIFxcdTAwM2M9IDQgKyA0O1xcbitcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlbGVuIFxcdTAwM2M9IDQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4rXFx0XFx0XFx0XFx0Y29uc3QgdTMyICpzcmMpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmloID0gKGNvbnN0IHZvaWQgKilzcmM7XFxuK1xcbitcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZW9mZnNldCkge1xcbitcXHRjYXNlIDA6IC8qIHN0b3JlIHRvIGRzY3AgbXVzdCBub3QgYWx0ZXIgaXA2IHZlcnNpb24gKi9cXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWxlbiBcXHUwMDNjPSA0IFxcdTAwMjZcXHUwMDI2IGloLVxcdTAwM2V2ZXJzaW9uID09IDY7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWxlbiBcXHUwMDNjPSAyO1xcbitcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBob3BfbGltaXQpOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlbGVuID09IDE7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIHNhZGRyKTpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWxlbiBcXHUwMDNjPSAxNiArIDE2O1xcbitcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBkYWRkcik6XFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2VsZW4gXFx1MDAzYz0gMTY7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2FycChjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbit7XFxuK1xcdC8qIFZhcmlhYmxlIHNpemUgZm9yIHN0YW5kYXJkIGV0aGVybmV0IGFycCAqL1xcbitcXHRjb25zdCB1bnNpZ25lZCBpbnQgZXRoX2lwID0gMiAqIChFVEhfQUxFTiArIDQpO1xcbitcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcHJpdi1cXHUwMDNlb2Zmc2V0O1xcbitcXG4rXFx0c3dpdGNoIChvZmZzZXQpIHtcXG4rXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYXJwaGRyLCBhcl9vcCk6XFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2VsZW4gPT0gMjtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHBlcm1pdCB3cml0ZXMgcG9zdCBmaXhlZCBhcnAgaGVhZGVyIHNpemUuIG9mZnNldCArIGxlbiBhcmVcXG4rXFx0ICogY2hlY2tlZCB2cyBza2Igc2l6ZSB2aWEgc2tiX2Vuc3VyZV93cml0YWJsZS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBvZmZzZXQgXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBhcnBoZHIpIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZWxlbiBcXHUwMDNjPSBldGhfaXA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19uZXRkZXYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHUzMiAqc3JjKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfTkZfVEFCTEVTX05FVERFVlxcbitcXHRzd2l0Y2ggKHBrdC1cXHUwMDNlc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0FSUCk6XFxuK1xcdFxcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfYXJwKHByaXYpO1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4rXFx0XFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDQocGt0LCBwcml2LCBzcmMpO1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbitcXHRcXHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNihwa3QsIHByaXYsIHNyYyk7XFxuK1xcdH1cXG4rI2VuZGlmXFxuK1xcdC8qIGRlZmF1bHQgdG8gZmFsc2UgZm9yIG5vdywgcmVsYXggbGF0ZXIgaW4gY2FzZSB3ZSBoYXZlXFxuK1xcdCAqIHVzZS1jYXNlcyB0aGF0IG5lZWQgaW5uZXIgaGVhZGVyIG1hbmlwdWxhdGlvbiBmb3JcXG4rXFx0ICogZW5jYXBzdWxhdGVkIHRyYWZmaWMgbGlrZSB2bGFuIG9yIFBQUG9FLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYnJpZGdlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCB1MzIgKnNyYylcXG4re1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfVEFCTEVTX0JSSURHRSlcXG4rXFx0c3dpdGNoIChwa3QtXFx1MDAzZWV0aGVydHlwZSkge1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0FSUCk6XFxuK1xcdFxcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfYXJwKHByaXYpO1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4rXFx0XFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDQocGt0LCBwcml2LCBzcmMpO1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbitcXHRcXHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNihwa3QsIHByaXYsIHNyYyk7XFxuK1xcdH1cXG4rI2VuZGlmXFxuK1xcdC8qIHNlZSBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2OiBkZWZhdWx0IHRvIGZhbHNlICovXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqc3JjKVxcbit7XFxuK1xcdHN3aXRjaCAocGt0LVxcdTAwM2VzdGF0ZS1cXHUwMDNlcGYpIHtcXG4rXFx0Y2FzZSBORlBST1RPX0FSUDpcXG4rXFx0XFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19hcnAocHJpdik7XFxuK1xcdGNhc2UgTkZQUk9UT19CUklER0U6XFxuK1xcdFxcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfYnJpZGdlKHBrdCwgcHJpdiwgc3JjKTtcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuK1xcdFxcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA0KHBrdCwgcHJpdiwgc3JjKTtcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuK1xcdFxcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA2KHBrdCwgcHJpdiwgc3JjKTtcXG4rXFx0Y2FzZSBORlBST1RPX05FVERFVjpcXG4rXFx0XFx0aWYgKHBrdC1cXHUwMDNlc3RhdGUtXFx1MDAzZWhvb2sgPT0gTkZfTkVUREVWX0lOR1JFU1MpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX25ldGRldihwa3QsIHByaXYsIHNyYyk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rLyogY2hlY2sgbGlua2xheWVyIG1vZGlmaWNhdGlvbnMgZG9uJ3Qgc3BpbGwgaW50byBuZXR3b3JrIGhlYWRlci4gKi9cXG4rc3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxcbit7XFxuK1xcdGlmIChuZnRfaW5faW5ncmVzcyhwa3QtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gb2Zmc2V0IFxcdTAwM2M9IHNrYl9uZXR3b3JrX29mZnNldChwa3QtXFx1MDAzZXNrYik7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbit7XFxuK1xcdHN3aXRjaCAocHJpdi1cXHUwMDNlYmFzZSkge1xcbitcXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxuK1xcdFxcdGlmIChjdHgtXFx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQpIHtcXG4rXFx0XFx0XFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTsgLyogcnVuIHRpbWUgdmFsaWRhdGlvbiByZXF1aXJlZCAqL1xcbitcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXFxcInJlLXVwZGF0ZVxcXCIgb2YgTDQgY2hlY2tzdW0gKi9cXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJ3QgYmUgbmVnYXRpdmUgc28gYm9ndXNcXG4rXFx0XFx0ICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy5cXG4rXFx0XFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuKy8qIGRvIG5vdCBhbGxvdyBhcmJpdHJhcnkgbmV0d29yayBoZWFkZXIgbWFuZ2xpbmcgdmlhIGJvZ3VzIGNzdW1fb2ZmLlxcbisgKiBXZSBvbmx5IHN1cHBvcnQgaXB2NC4gIE9ubHkgTkZQUk9UT19JUFY0IGNhbiBiZSBjaGVja2VkIGZyb20gY29udHJvbFxcbisgKiBwbGFuZS5cXG4rICovXFxuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbit7XFxuK1xcdHN3aXRjaCAocGt0LVxcdTAwM2VzdGF0ZS1cXHUwMDNlcGYpIHtcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuK1xcdFxcdC8qIFdhcm5pbmc6IE5GUFJPVE9fSU5FVCB3YXMgbm90IGNoZWNrZWQ7IHdlIGNhbid0IHJldHVybiB0cnVlIGhlcmUuICovXFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0Y2FzZSBORlBST1RPX0JSSURHRTpcXG4rXFx0XFx0cmV0dXJuIHBrdC1cXHUwMDNlZXRoZXJ0eXBlID09IGh0b25zKEVUSF9QX0lQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XFxuK1xcdGNhc2UgTkZQUk9UT19ORVRERVY6XFxuK1xcdFxcdHJldHVybiBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgICBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbit7XFxuK1xcdHN3aXRjaCAocHJpdi1cXHUwMDNlYmFzZSkge1xcbitcXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxuK1xcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XFxuK1xcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4rXFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuK1xcdFxcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxcbitcXHRcXHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuIFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG5AQCAtODYxLDggKzExMDQsMTIgQEAgc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRvZmZzZXQgPSBza2JfbWFjX2hlYWRlcihza2IpIC0gc2tiLVxcdTAwM2VkYXRhIC0gdmxhbl9obGVuO1xcbitcXHRcXHRpZiAoIW5mdF9sbF93cml0ZV9vayhwa3QsIHByaXYtXFx1MDAzZWxlbiArIHByaXYtXFx1MDAzZW9mZnNldCArIG9mZnNldCkpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG4rXFx0XFx0aWYgKCFuZnRfbmhfd3JpdGVfb2socGt0LCBwcml2LCBzcmMpKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFx0XFx0b2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuQEAgLTg5NCw2ICsxMTQxLDcgQEAgc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiBcXHRcXHR0c3VtID0gY3N1bV9wYXJ0aWFsKHNyYywgcHJpdi1cXHUwMDNlbGVuLCAwKTtcXG4gXFxuIFxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxcbiBcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFxuQEAgLTk2MCw3ICsxMjA4LDI2IEBAIHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFxuIFxcdHN3aXRjaCAoY3N1bV90eXBlKSB7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9OT05FOlxcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQpIC8qIG5vbnNlbnNpY2FsICovXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fZmxhZ3MgPT0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHQvKiBVc2Vyc3BhY2UgcmVxdWVzdHMgTDQgY2hlY2tzdW0gdXBkYXRlLCBlLmcuOlxcbitcXHRcXHQgKiAtIElQdjYgc3RhdGVsZXNzIE5BVCAobm8gbDMgY3N1bSlcXG4rXFx0XFx0ICogLSB0cmFuc3BvcnQgaGVhZGVyIG1hbmdsaW5nXFxuK1xcdFxcdCAqIC0gaW5uZXIgZGF0YSBtYW5nbGluZ1xcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZWJhc2UgPT0gTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVIgfHxcXG4rXFx0XFx0ICAgIHByaXYtXFx1MDAzZWJhc2UgPT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUiB8fFxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlYmFzZSA9PSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVIpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxcbitcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY3R4LCBwcml2KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fU0NUUDpcXG4gXFx0XFx0aWYgKHByaXYtXFx1MDAzZWJhc2UgIT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUilcXG5AQCAtOTY4LDYgKzEyMzUsOSBAQCBzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcbiBcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgIT0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uY1xcbmluZGV4IDcwNmM3ODg1M2YyNDViLi45NzhiYjBjMDExMDY4MiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcXG5AQCAtMzQyLDYgKzM0Miw4IEBAXFxuICNpbmNsdWRlIFxcXCJuZnRfc2V0X3BpcGFwb19hdngyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJuZnRfc2V0X3BpcGFwby5oXFxcIlxcbiBcXG4rc3RhdGljIHZvaWQgbmZ0X3BpcGFwb19hYm9ydChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KTtcXG4rXFxuIC8qKlxcbiAgKiBwaXBhcG9fcmVmaWxsKCkgLSBGb3IgZWFjaCBzZXQgYml0LCBzZXQgYml0cyBmcm9tIHNlbGVjdGVkIG1hcHBpbmcgdGFibGUgaXRlbVxcbiAgKiBAbWFwOlxcdEJpdG1hcCB0byBiZSBzY2FubmVkIGZvciBzZXQgYml0c1xcbkBAIC0xMjk2LDcgKzEyOTgsNyBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4gXFx0Y29uc3QgdTggKnN0YXJ0X3AsICplbmRfcDtcXG4gXFx0aW50IGksIGJzaXplX21heCwgZXJyID0gMDtcXG4gXFxuLVxcdGlmICghbSlcXG4rXFx0aWYgKCFtIHx8IG0tXFx1MDAzZXN0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfRVJSKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9LRVlfRU5EKSlcXG5AQCAtMTM2Nyw4ICsxMzY5LDEwIEBAIHN0YXRpYyBpbnQgbmZ0X3BpcGFwb19pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldCA9IHBpcGFwb19leHBhbmQoZiwgc3RhcnQsIGVuZCwgZi1cXHUwMDNlZ3JvdXBzICogZi1cXHUwMDNlYmIpO1xcbiBcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGVyciA9IHJldDtcXG4rXFx0XFx0XFx0Z290byBhYm9ydDtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGYtXFx1MDAzZWJzaXplIFxcdTAwM2UgYnNpemVfbWF4KVxcbiBcXHRcXHRcXHRic2l6ZV9tYXggPSBmLVxcdTAwM2Vic2l6ZTtcXG5AQCAtMTM4NCw3ICsxMzg4LDcgQEAgc3RhdGljIGludCBuZnRfcGlwYXBvX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuIFxcbiBcXHRcXHRlcnIgPSBwaXBhcG9fcmVhbGxvY19zY3JhdGNoKG0sIGJzaXplX21heCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdFxcdGdvdG8gYWJvcnQ7XFxuIFxcbiBcXHRcXHRtLVxcdTAwM2Vic2l6ZV9tYXggPSBic2l6ZV9tYXg7XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTEzOTYsNyArMTQwMCwyNiBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4gXFxuIFxcdHBpcGFwb19tYXAobSwgcnVsZW1hcCwgZSk7XFxuIFxcbitcXHRtLVxcdTAwM2VzdGF0ZSA9IE5GVF9QSVBBUE9fQ0xPTkVfTU9EO1xcbiBcXHRyZXR1cm4gMDtcXG4rYWJvcnQ6XFxuK1xcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobS1cXHUwMDNlc3RhdGUgPT0gTkZUX1BJUEFQT19DTE9ORV9FUlIpO1xcbitcXG4rXFx0LyogVHdvIHJvbGxiYWNrIGNhc2VzOlxcbitcXHQgKiAxKSBubyBwcmV2aW91cyBjaGFuZ2VzLiAgbmZ0X3BpcGFwb19hYm9ydCBpcyBub3RcXG4rXFx0ICogZ3VhcmFudGVlZCB0byBiZSBpbnZva2VkICh0aGVyZSBtaWdodCBiZSBubyBmdXJ0aGVyXFxuK1xcdCAqIGFkZC9kZWxldGUgcmVxdWVzdHMgY29taW5nIGFmdGVyIHRoaXMpLlxcbitcXHQgKlxcbitcXHQgKiAyKSB3ZSBoYWQgcHJldmlvdXMgY2hhbmdlczogdGhlcmUgYXJlIHRyYW5zYWN0aW9uXFxuK1xcdCAqIHJlY29yZHMgcG9pbnRpbmcgdG8gdGhpcyBzZXQuICBMZWF2ZSB0aGUgcm9sbGJhY2sgdG9cXG4rXFx0ICogdGhlIHRyYW5zYWN0aW9uIGhhbmRsaW5nLlxcbitcXHQgKi9cXG4rXFx0aWYgKG0tXFx1MDAzZXN0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfTkVXKVxcbitcXHRcXHRuZnRfcGlwYXBvX2Fib3J0KHNldCk7IC8qIHJlbGVhc2VzIG0gKi9cXG4rXFx0ZWxzZVxcbitcXHRcXHRtLVxcdTAwM2VzdGF0ZSA9IE5GVF9QSVBBUE9fQ0xPTkVfRVJSO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE0NzMsNiArMTQ5Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqcGlwYXBvX2Nsb25lKHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICpvbGQpXFxuIFxcdFxcdGRzdCsrO1xcbiBcXHR9XFxuIFxcbitcXHRuZXctXFx1MDAzZXN0YXRlID0gTkZUX1BJUEFQT19DTE9ORV9ORVc7XFxuIFxcdHJldHVybiBuZXc7XFxuIFxcbiBvdXRfbXQ6XFxuQEAgLTE4OTYsNyArMTkyMCw3IEBAIG5mdF9waXBhcG9fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuIFxcdC8qIHJlbW92YWwgbXVzdCBvY2N1ciBvbiBwcml2LVxcdTAwM2VjbG9uZSwgaWYgd2UgYXJlIGxvdyBvbiBtZW1vcnlcXG4gXFx0ICogd2UgaGF2ZSBubyBjaG9pY2UgYW5kIG11c3QgZmFpbCB0aGUgcmVtb3ZhbCByZXF1ZXN0LlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFtKVxcbitcXHRpZiAoIW0gfHwgbS1cXHUwMDNlc3RhdGUgPT0gTkZUX1BJUEFQT19DTE9ORV9FUlIpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0ZSA9IHBpcGFwb19nZXQobSwgKGNvbnN0IHU4ICopZWxlbS1cXHUwMDNla2V5LnZhbC5kYXRhLFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmggYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmhcXG5pbmRleCBiODJhYmIwMzU3NmVkZC4uYTE5ZTk4MGQwNmVmNDIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oXFxuQEAgLTEzMSw5ICsxMzEsMTYgQEAgc3RydWN0IG5mdF9waXBhcG9fc2NyYXRjaCB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgX19tYXBbXTtcXG4gfTtcXG4gXFxuK2VudW0gbmZ0X3BpcGFwb19jbG9uZV9zdGF0ZSB7XFxuK1xcdE5GVF9QSVBBUE9fQ0xPTkVfTkVXLFxcbitcXHRORlRfUElQQVBPX0NMT05FX01PRCxcXG4rXFx0TkZUX1BJUEFQT19DTE9ORV9FUlIsXFxuK307XFxuK1xcbiAvKipcXG4gICogc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggLSBEYXRhIHVzZWQgZm9yIGxvb2t1cCBhbmQgbWF0Y2hpbmdcXG4gICogQGZpZWxkX2NvdW50OlxcdEFtb3VudCBvZiBmaWVsZHMgaW4gc2V0XFxuKyAqIEBzdGF0ZTpcXHRcXHRhZGQvZGVsZXRlIHN0YXRlOyB1c2VkIGZyb20gY29udHJvbCBwbGFuZVxcbiAgKiBAYnNpemVfbWF4OlxcdFxcdE1heGltdW0gbG9va3VwIHRhYmxlIGJ1Y2tldCBzaXplIG9mIGFsbCBmaWVsZHMsIGluIGxvbmdzXFxuICAqIEBzY3JhdGNoOlxcdFxcdFByZWFsbG9jYXRlZCBwZXItQ1BVIG1hcHMgZm9yIHBhcnRpYWwgbWF0Y2hpbmcgcmVzdWx0c1xcbiAgKiBAcmN1OlxcdFxcdE1hdGNoaW5nIGRhdGEgaXMgc3dhcHBlZCBvbiBjb21taXRzXFxuQEAgLTE0MSw2ICsxNDgsNyBAQCBzdHJ1Y3QgbmZ0X3BpcGFwb19zY3JhdGNoIHtcXG4gICovXFxuIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoIHtcXG4gXFx0dTggZmllbGRfY291bnQ7XFxuK1xcdGVudW0gbmZ0X3BpcGFwb19jbG9uZV9zdGF0ZSBzdGF0ZTo4O1xcbiBcXHR1bnNpZ25lZCBpbnQgYnNpemVfbWF4O1xcbiBcXHRzdHJ1Y3QgbmZ0X3BpcGFwb19zY3JhdGNoICogX19wZXJjcHUgKnNjcmF0Y2g7XFxuIFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjAzLjI4MzMwNzI4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNTYyODQzNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NJUFwiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS19IRUxQRVJcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX1RBQkxFU19JTkVUXCIsXG4gICAgXCJORl9UQUJMRVNfTkVUREVWXCIsXG4gICAgXCJORlRfRklCX0lQVjRcIixcbiAgICBcIk5GVF9GSUJfSVBWNlwiLFxuICAgIFwiTkZUX0ZJQl9ORVRERVZcIixcbiAgICBcIklQX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3NldF9kdW1wX2RvXCIsXG4gICAgXCJpcF9zZXRfZHVtcF9kb25lXCIsXG4gICAgXCJjdG5ldGxpbmtfYWxsb2NfZXhwZWN0XCIsXG4gICAgXCJzZXRfZXhwZWN0ZWRfcnRwX3J0Y3BcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeVwiLFxuICAgIFwibmZxbmxfbWFuZ2xlXCIsXG4gICAgXCJuZnRfZmliX3ZhbGlkYXRlXCIsXG4gICAgXCJuZnRfZmliX25ldGRldl92YWxpZGF0ZVwiLFxuICAgIFwibmZ0X3BheWxvYWRfc2V0X2luaXRcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCIsXG4gICAgXCJuZnRfcGlwYXBvX2luc2VydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gSXQgYWRkcyB2YWxpZGF0aW9uIGZvciBwYXlsb2FkIHdyaXRlcyBhbmQgSVAvSVB2NiBoZWFkZXJzIGJlZm9yZSBtYW5nbGluZywgZml4ZXMgYSBidWcgaW4gU0lQIGNvbm50cmFjayBleHBlY3RhdGlvbiwgYWRkcyBzdGF0ZSB0cmFja2luZyBmb3IgcGlwYXBvIHNldCBjbG9uZXMgdG8gcHJvcGVybHkgaGFuZGxlIGFib3J0cywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBleHBlY3RhdGlvbiBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXRmaWx0ZXIgbG9naWMsIG5ldGxpbmsgcXVldWUsIG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcsIGFuZCBwaXBhcG8gc2V0cywgd2hpY2ggYXJlIGFsbCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4NTgyYWY4MDg1MmMzMWE2OTZiOWFkYTJhOWI3MTQxYmJkNjBkOGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwNjowNjowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xuaW5kZXggYTUzMWI2NTRiOGQ5NjQuLjZjZmFkMTUyZDdkMWJhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcbkBAIC0xNDgwLDcgKzE0ODAsMTEgQEAgaXBfc2V0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHN0cnVjdCBpcF9zZXRfbmV0ICppbnN0ID1cbiBcdFx0XHQoc3RydWN0IGlwX3NldF9uZXQgKiljYi1cdTAwM2VhcmdzW0lQU0VUX0NCX05FVF07XG4gXHRcdGlwX3NldF9pZF90IGluZGV4ID0gKGlwX3NldF9pZF90KWNiLVx1MDAzZWFyZ3NbSVBTRVRfQ0JfSU5ERVhdO1xuLVx0XHRzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBpcF9zZXRfcmVmX25ldGxpbmsoaW5zdCwgaW5kZXgpO1xuK1x0XHRzdHJ1Y3QgaXBfc2V0ICpzZXQ7XG4rXG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0c2V0ID0gaXBfc2V0X3JlZl9uZXRsaW5rKGluc3QsIGluZGV4KTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRcdGlmIChzZXQtXHUwMDNldmFyaWFudC1cdTAwM2V1cmVmKVxuIFx0XHRcdHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZXVyZWYoc2V0LCBjYiwgZmFsc2UpO1xuQEAgLTE2ODYsNyArMTY5MCw5IEBAIGlwX3NldF9kdW1wX2RvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiByZWxlYXNlX3JlZmNvdW50OlxuIFx0LyogSWYgdGhlcmUgd2FzIGFuIGVycm9yIG9yIHNldCBpcyBkb25lLCByZWxlYXNlIHNldCAqL1xuIFx0aWYgKHJldCB8fCAhY2ItXHUwMDNlYXJnc1tJUFNFVF9DQl9BUkcwXSkge1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdHNldCA9IGlwX3NldF9yZWZfbmV0bGluayhpbnN0LCBpbmRleCk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRpZiAoc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNldXJlZilcbiBcdFx0XHRzZXQtXHUwMDNldmFyaWFudC1cdTAwM2V1cmVmKHNldCwgY2IsIGZhbHNlKTtcbiBcdFx0cHJfZGVidWcoXCJyZWxlYXNlIHNldCAlc1xcblwiLCBzZXQtXHUwMDNlbmFtZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xuaW5kZXggMzg2MzBjNWUwMDZmMDguLjdhZTY4ZDYwNTg2YTIzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXG5AQCAtMzA2LDcgKzMwNiw3IEBAIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpuZl9jdF9leHBlY3RfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKm1lKVxuIHtcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpuZXc7XG4gXG4tXHRuZXcgPSBrbWVtX2NhY2hlX2FsbG9jKG5mX2N0X2V4cGVjdF9jYWNoZXAsIEdGUF9BVE9NSUMpO1xuK1x0bmV3ID0ga21lbV9jYWNoZV96YWxsb2MobmZfY3RfZXhwZWN0X2NhY2hlcCwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIW5ldylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG5AQCAtMzkxLDYgKzM5MSw3IEBAIHZvaWQgbmZfY3RfZXhwZWN0X2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdW5zaWduZWQgaW50IGNsYXNzLFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXG4gXHRtZW1zZXQoXHUwMDI2ZXhwLVx1MDAzZXNhdmVkX2FkZHIsIDAsIHNpemVvZihleHAtXHUwMDNlc2F2ZWRfYWRkcikpO1xuIFx0bWVtc2V0KFx1MDAyNmV4cC1cdTAwM2VzYXZlZF9wcm90bywgMCwgc2l6ZW9mKGV4cC1cdTAwM2VzYXZlZF9wcm90bykpO1xuK1x0ZXhwLVx1MDAzZWRpciA9IDA7XG4gI2VuZGlmXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pbml0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbmluZGV4IDQyMTc3MTVkNDJkYzI0Li4zMWNiYjFiNTViOWU2YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMzU0OSw4ICszNTQ5LDYgQEAgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdGlmIChjZGFbQ1RBX0VYUEVDVF9GTEFHU10pIHtcbiBcdFx0ZXhwLVx1MDAzZWZsYWdzID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfRVhQRUNUX0ZMQUdTXSkpO1xuIFx0XHRleHAtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+TkZfQ1RfRVhQRUNUX1VTRVJTUEFDRTtcbi1cdH0gZWxzZSB7XG4tXHRcdGV4cC1cdTAwM2VmbGFncyA9IDA7XG4gXHR9XG4gXHRpZiAoY2RhW0NUQV9FWFBFQ1RfRk5dKSB7XG4gXHRcdGNvbnN0IGNoYXIgKm5hbWUgPSBubGFfZGF0YShjZGFbQ1RBX0VYUEVDVF9GTl0pO1xuQEAgLTM1NjIsOCArMzU2MCw3IEBAIGN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0Z290byBlcnJfb3V0O1xuIFx0XHR9XG4gXHRcdGV4cC1cdTAwM2VleHBlY3RmbiA9IGV4cGZuLVx1MDAzZWV4cGVjdGZuO1xuLVx0fSBlbHNlXG4tXHRcdGV4cC1cdTAwM2VleHBlY3RmbiA9IE5VTEw7XG4rXHR9XG4gXG4gXHRleHAtXHUwMDNlY2xhc3MgPSBjbGFzcztcbiBcdGV4cC1cdTAwM2VtYXN0ZXIgPSBjdDtcbkBAIC0zNTgzLDEyICszNTgwLDYgQEAgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0XHRcdFx0XHQgZXhwLCBuZl9jdF9sM251bShjdCkpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gZXJyX291dDtcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxuLVx0fSBlbHNlIHtcbi1cdFx0bWVtc2V0KFx1MDAyNmV4cC1cdTAwM2VzYXZlZF9hZGRyLCAwLCBzaXplb2YoZXhwLVx1MDAzZXNhdmVkX2FkZHIpKTtcbi1cdFx0bWVtc2V0KFx1MDAyNmV4cC1cdTAwM2VzYXZlZF9wcm90bywgMCwgc2l6ZW9mKGV4cC1cdTAwM2VzYXZlZF9wcm90bykpO1xuLVx0XHRleHAtXHUwMDNlZGlyID0gMDtcbi0jZW5kaWZcbiBcdH1cbiBcdHJldHVybiBleHA7XG4gZXJyX291dDpcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG5pbmRleCA1ZWMzYTRhNGJiZDcwNy4uZjNmOTBhODY2MzM4OTQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbkBAIC05NTYsNyArOTU2LDYgQEAgc3RhdGljIGludCBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdFx0c2FkZHIgPSBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzO1xuIFx0fSBlbHNlIGlmIChzaXBfZXh0ZXJuYWxfbWVkaWEpIHtcbi1cdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYl9kc3Qoc2tiKS1cdTAwM2VkZXY7XG4gXHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7XG4gXHRcdHN0cnVjdCBmbG93aSBmbDtcbiBcbkBAIC05NzgsNyArOTc3LDExIEBAIHN0YXRpYyBpbnQgc2V0X2V4cGVjdGVkX3J0cF9ydGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0XHQgKiB0aHJvdWdoIHRoZSBzYW1lIGludGVyZmFjZSBhcyB0aGUgc2lnbmFsbGluZyBwZWVyLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGRzdCkge1xuLVx0XHRcdGJvb2wgZXh0ZXJuYWxfbWVkaWEgPSAoZHN0LVx1MDAzZWRldiA9PSBkZXYpO1xuK1x0XHRcdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKnRoaXNfZHN0ID0gc2tiX2RzdChza2IpO1xuK1x0XHRcdGJvb2wgZXh0ZXJuYWxfbWVkaWEgPSBmYWxzZTtcbitcbitcdFx0XHRpZiAodGhpc19kc3QgXHUwMDI2XHUwMDI2IGRzdC1cdTAwM2VkZXYgPT0gdGhpc19kc3QtXHUwMDNlZGV2KVxuK1x0XHRcdFx0ZXh0ZXJuYWxfbWVkaWEgPSB0cnVlO1xuIFxuIFx0XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4gXHRcdFx0aWYgKGV4dGVybmFsX21lZGlhKVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG5pbmRleCBmMTQ2MGI2ODNkN2FmNy4uMmNiY2NhOTExMGRiZjUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG5AQCAtMTYzLDYgKzE2Myw4IEBAIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cGVjdF9wb2xpY3ksXG4gXHRcdCAgICB0YltORkNUSF9QT0xJQ1lfTkFNRV0sIE5GX0NUX0hFTFBFUl9OQU1FX0xFTik7XG4gXHRleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZCA9XG4gXHRcdG50b2hsKG5sYV9nZXRfYmUzMih0YltORkNUSF9QT0xJQ1lfRVhQRUNUX01BWF0pKTtcbitcdGlmICghZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQpXG4rXHRcdGV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQ7XG4gXHRpZiAoZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgXHUwMDNlIE5GX0NUX0VYUEVDVF9NQVhfQ05UKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuaW5kZXggODBjYTA3N2I4MWJkNWEuLjM1ZDRjNmM2MjhmZmMxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuQEAgLTExODQsNiArMTE4NCwxNzMgQEAgbmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSwgdW5zaWduZWQgaW50IHF1ZXVlbnVtKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX25ldyxcbitcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX29yaWcgPSBpcF9oZHIoZS1cdTAwM2Vza2IpO1xuK1x0dW5zaWduZWQgaW50IGlobCA9IGlwaF9uZXctXHUwMDNlaWhsICogNDtcbitcbitcdGlmIChpcGhfbmV3LVx1MDAzZWlobCAhPSBpcGhfb3JpZy1cdTAwM2VpaGwpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChpaGwgPT0gc2l6ZW9mKCppcGhfb3JpZykpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIG1lbWNtcChpcGhfbmV3ICsgMSwgaXBfaGRyKGUtXHUwMDNlc2tiKSArIDEsIGlobCAtIHNpemVvZigqaXBoX29yaWcpKSA9PSAwO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuK3tcbitcdHVuc2lnbmVkIGludCBpaGw7XG4rXG4rXHRpZiAoZGF0YV9sZW4gXHUwMDNjIHNpemVvZigqaXBoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWhsID0gaXBoLVx1MDAzZWlobCAqIDR1O1xuK1x0aWYgKGlobCBcdTAwM2Mgc2l6ZW9mKCppcGgpIHx8IGRhdGFfbGVuIFx1MDAzYyBpaGwpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChpcGgtXHUwMDNldmVyc2lvbiAhPSA0IHx8XG4rXHQgICAgKChpcGgtXHUwMDNlZnJhZ19vZmYgXiBpcF9oZHIoZS1cdTAwM2Vza2IpLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfmh0b25zKElQX0RGKSkgIT0gMClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogQklHIFRDUCB3b24ndCB3b3JrOyBuZXRsaW5rIGF0dHIgbGVuIGlzIHUxNiAqL1xuK1x0aWYgKG50b2hzKGlwaC1cdTAwM2V0b3RfbGVuKSAhPSBkYXRhX2xlbilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Lyogc3VwcG9ydCBmb3IgaXBvcHRzIG1hbmdsaW5nIHdvdWxkIHJlcXVpcmVcbitcdCAqIHJlY29tcGlsZSArIHNrYiB0cmFuc3BvcnQgaGVhZGVyIHVwZGF0ZS5cbitcdCAqL1xuK1x0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwb3B0cyhpcGgsIGUpO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9vbmVfZXh0aGRyKGNvbnN0IHU4ICpkYXRhLFxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLFxuK1x0XHRcdFx0ICAgICAgaW50IHN0YXJ0LCBpbnQgaGRybGVuKVxuK3tcbitcdHUxNiBvY3RldHM7XG4rXG4rXHRpZiAoZGF0YV9sZW4gXHUwMDNjIGhkcmxlbiB8fCBoZHJsZW4gXHUwMDNjIDIpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHdoaWxlIChoZHJsZW4gXHUwMDNlIDApIHtcbitcdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2Yob2N0ZXRzKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGRhdGFfbGVuIC09IHNpemVvZihvY3RldHMpO1xuK1xuK1x0XHRpZiAoc2tiX2NvcHlfYml0cyhlLVx1MDAzZXNrYiwgc3RhcnQsIFx1MDAyNm9jdGV0cywgc2l6ZW9mKG9jdGV0cykpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0aWYgKGhkcmxlbiBcdTAwM2Mgc2l6ZW9mKG9jdGV0cykpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRoZHJsZW4gLT0gc2l6ZW9mKG9jdGV0cyk7XG4rXHRcdGlmIChtZW1jbXAoZGF0YSwgXHUwMDI2b2N0ZXRzLCBzaXplb2Yob2N0ZXRzKSkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRzdGFydCArPSBzaXplb2Yob2N0ZXRzKTtcbitcdFx0ZGF0YSArPSBzaXplb2Yob2N0ZXRzKTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9leHRoZHIoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNl9uZXcsXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbitcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfb3JpZyA9IGlwdjZfaGRyKGUtXHUwMDNlc2tiKTtcbitcdGludCBleHRoZHJfY250ID0gMCwgc3RhcnQgPSBzaXplb2YoKmlwNl9vcmlnKTtcbitcdGNvbnN0IHU4ICpkYXRhID0gKGNvbnN0IHU4ICopaXA2X25ldztcbitcdHU4IG9yaWdfbmV4dGhkciA9IGlwNl9vcmlnLVx1MDAzZW5leHRoZHI7XG4rXHR1OCBuZXdfbmV4dGhkciA9IGlwNl9uZXctXHUwMDNlbmV4dGhkcjtcbitcbitcdGlmIChuZXdfbmV4dGhkciAhPSBvcmlnX25leHRoZHIpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGRhdGEgKz0gc2l6ZW9mKCppcDZfbmV3KTtcbitcdGRhdGFfbGVuIC09IHNpemVvZigqaXA2X25ldyk7XG4rXG4rXHR3aGlsZSAoaXB2Nl9leHRfaGRyKG9yaWdfbmV4dGhkcikpIHtcbitcdFx0Y29uc3Qgc3RydWN0IGlwdjZfb3B0X2hkciAqaHA7XG4rXHRcdHN0cnVjdCBpcHY2X29wdF9oZHIgX2hkcjtcbitcdFx0aW50IGhkcmxlbjtcbitcbitcdFx0aWYgKG9yaWdfbmV4dGhkciA9PSBORVhUSERSX05PTkUpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdGlmICh1bmxpa2VseShleHRoZHJfY250KysgXHUwMDNlPSBJUDZfTUFYX0VYVF9IRFJTX0NOVCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihlLVx1MDAzZXNrYiwgc3RhcnQsIHNpemVvZihfaGRyKSwgXHUwMDI2X2hkcik7XG4rXHRcdGlmICghaHApXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRzd2l0Y2ggKG9yaWdfbmV4dGhkcikge1xuK1x0XHRjYXNlIE5FWFRIRFJfRlJBR01FTlQ6XG4rXHRcdFx0aGRybGVuID0gc2l6ZW9mKHN0cnVjdCBmcmFnX2hkcik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgTkVYVEhEUl9BVVRIOlxuK1x0XHRcdGhkcmxlbiA9IGlwdjZfYXV0aGxlbihocCk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0aGRybGVuID0gaXB2Nl9vcHRsZW4oaHApO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihkYXRhLCBkYXRhX2xlbiwgZSxcbitcdFx0XHRcdFx0ICAgICAgIHN0YXJ0LCBoZHJsZW4pKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0b3JpZ19uZXh0aGRyID0gaHAtXHUwMDNlbmV4dGhkcjtcbitcdFx0aHAgPSAoY29uc3Qgdm9pZCAqKWRhdGE7XG4rXHRcdG5ld19uZXh0aGRyID0gaHAtXHUwMDNlbmV4dGhkcjtcbitcbitcdFx0aWYgKG5ld19uZXh0aGRyICE9IG9yaWdfbmV4dGhkcilcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdGRhdGFfbGVuIC09IGhkcmxlbjtcbitcdFx0c3RhcnQgKz0gaGRybGVuO1xuK1x0XHRkYXRhICs9IGhkcmxlbjtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDYoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNiwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUpXG4re1xuK1x0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2YoKmlwNikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIEJJRyBUQ1AvanVtYm9ncmFtcyB3b24ndCB3b3JrOyBuZXRsaW5rIGF0dHIgbGVuIGlzIHUxNiAqL1xuK1x0aWYgKG50b2hzKGlwNi1cdTAwM2VwYXlsb2FkX2xlbikgIT0gZGF0YV9sZW4gLSBzaXplb2YoKmlwNikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChpcDYtXHUwMDNldmVyc2lvbiAhPSA2KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGlwNiwgZGF0YV9sZW4sIGUpO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV93cml0ZShjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuK3tcbitcdHN3aXRjaCAoZS1cdTAwM2VzdGF0ZS5wZikge1xuK1x0Y2FzZSBORlBST1RPX0lQVjQ6XG4rXHRcdHJldHVybiBuZnFubF92YWxpZGF0ZV9pcDQoZGF0YSwgZGF0YV9sZW4sIGUpO1xuK1x0Y2FzZSBORlBST1RPX0lQVjY6XG4rXHRcdHJldHVybiBuZnFubF92YWxpZGF0ZV9pcDYoZGF0YSwgZGF0YV9sZW4sIGUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICAgIShJUDZDQihlLVx1MDAzZXNrYiktXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlNLQl9KVU1CT0dSQU0pO1xuK1x0Y2FzZSBORlBST1RPX0JSSURHRTpcbitcdFx0LyogTm8gd3JpdGUgc3VwcG9ydC4gQnJpZGdlIGlzIGR1YmlvdXM6IHVzZXJzcGFjZSBkb2Vzbid0IGV2ZW4gc2VlIEwyIGhlYWRlciAqL1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbnRcbiBuZnFubF9tYW5nbGUodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIGludCBkaWZmKVxuIHtcbkBAIC0xMTkyLDYgKzEzNTksOSBAQCBuZnFubF9tYW5nbGUodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIGludCBkaVxuIFx0aWYgKGUtXHUwMDNlc3RhdGUubmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuK1x0aWYgKCFuZnFubF92YWxpZGF0ZV93cml0ZShkYXRhLCBkYXRhX2xlbiwgZSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKGRpZmYgXHUwMDNjIDApIHtcbiBcdFx0dW5zaWduZWQgaW50IG1pbl9sZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChlLVx1MDAzZXNrYik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmliLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9maWIuY1xuaW5kZXggZTA0OGYwNTY5NGNkZGQuLjg5NTU1MzgwZjFjNWEwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmliLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jXG5AQCAtMzEsNiArMzEsMTUgQEAgaW50IG5mdF9maWJfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxuIFx0Y29uc3Qgc3RydWN0IG5mdF9maWIgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIFx0dW5zaWduZWQgaW50IGhvb2tzO1xuIFxuK1x0c3dpdGNoIChjdHgtXHUwMDNlZmFtaWx5KSB7XG4rXHRjYXNlIE5GUFJPVE9fSVBWNDpcbitcdGNhc2UgTkZQUk9UT19JUFY2OlxuK1x0Y2FzZSBORlBST1RPX0lORVQ6XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0c3dpdGNoIChwcml2LVx1MDAzZXJlc3VsdCkge1xuIFx0Y2FzZSBORlRfRklCX1JFU1VMVF9PSUY6XG4gXHRjYXNlIE5GVF9GSUJfUkVTVUxUX09JRk5BTUU6XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jXG5pbmRleCAzZjM0NzhhYmQ4NDU0Ni4uNTc3NGE3NTQ0MDI3ODAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuY1xuQEAgLTUwLDYgKzUwLDMzIEBAIHN0YXRpYyB2b2lkIG5mdF9maWJfbmV0ZGV2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgbmZ0X2ZpYiAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG4rXHR1bnNpZ25lZCBpbnQgaG9va3M7XG4rXG4rXHRzd2l0Y2ggKHByaXYtXHUwMDNlcmVzdWx0KSB7XG4rXHRjYXNlIE5GVF9GSUJfUkVTVUxUX09JRjpcbitcdGNhc2UgTkZUX0ZJQl9SRVNVTFRfT0lGTkFNRTpcbitcdFx0aG9va3MgPSAoMSBcdTAwM2NcdTAwM2MgTkZfTkVUREVWX0lOR1JFU1MpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTkZUX0ZJQl9SRVNVTFRfQUREUlRZUEU6XG4rXHRcdGlmIChwcml2LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRBX0ZJQl9GX0lJRilcbitcdFx0XHRob29rcyA9ICgxIFx1MDAzY1x1MDAzYyBORl9ORVRERVZfSU5HUkVTUyk7XG4rXHRcdGVsc2UgaWYgKHByaXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVEFfRklCX0ZfT0lGKVxuK1x0XHRcdGhvb2tzID0gKDEgXHUwMDNjXHUwMDNjIE5GX05FVERFVl9FR1JFU1MpO1xuK1x0XHRlbHNlXG4rXHRcdFx0aG9va3MgPSAoMSBcdTAwM2NcdTAwM2MgTkZfTkVUREVWX0lOR1JFU1MpIHxcbitcdFx0XHRcdCgxIFx1MDAzY1x1MDAzYyBORl9ORVRERVZfRUdSRVNTKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiBuZnRfY2hhaW5fdmFsaWRhdGVfaG9va3MoY3R4LVx1MDAzZWNoYWluLCBob29rcyk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmliX25ldGRldl90eXBlO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHtcbiBcdC50eXBlXHRcdD0gXHUwMDI2bmZ0X2ZpYl9uZXRkZXZfdHlwZSxcbkBAIC01Nyw3ICs4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHtcbiBcdC5ldmFsXHRcdD0gbmZ0X2ZpYl9uZXRkZXZfZXZhbCxcbiBcdC5pbml0XHRcdD0gbmZ0X2ZpYl9pbml0LFxuIFx0LmR1bXBcdFx0PSBuZnRfZmliX2R1bXAsXG4tXHQudmFsaWRhdGVcdD0gbmZ0X2ZpYl92YWxpZGF0ZSxcbitcdC52YWxpZGF0ZVx0PSBuZnRfZmliX25ldGRldl92YWxpZGF0ZSxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmliX25ldGRldl90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCAzNDVlZmYxNDBkNTZmOC4uMzkxNTM5YTFjZWFhNzcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTgzNCw2ICs4MzQsMjQ5IEBAIG5mdF9wYXlsb2FkX3NldF92bGFuKGNvbnN0IHUzMiAqc3JjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgb2Zmc2V0LCB1OCBsZW4sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rLyogSW5ncmVzcyBpcyB2ZXJ5IGVhcmx5LCBiZWZvcmUgbDMgcHJvdG9jb2wgaGFuZGxlcnMuXG4rICogVGhlcmUgc2hvdWxkIGJlIG5vIGluLXRyZWUgY29kZSB0aGF0IHRydXN0cyBsMy9sNCBoZWFkZXJzXG4rICogYmV0d2VlbiBpbmdyZXNzIGFuZCBORl9JTkVUX1BSRV9ST1VUSU5HIGhvb2tzLlxuKyAqL1xuK3N0YXRpYyBib29sIG5mdF9pbl9pbmdyZXNzKGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzKVxuK3tcbitcdHJldHVybiBzLVx1MDAzZXBmID09IE5GUFJPVE9fTkVUREVWIFx1MDAyNlx1MDAyNiBzLVx1MDAzZWhvb2sgPT0gTkZfTkVUREVWX0lOR1JFU1M7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19pcDQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4rXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuK1x0XHRcdFx0Y29uc3QgdTMyICpzcmMpXG4re1xuK1x0dW5zaWduZWQgaW50IG9mZnNldCA9IHByaXYtXHUwMDNlb2Zmc2V0ICsgc2tiX25ldHdvcmtfb2Zmc2V0KHBrdC1cdTAwM2Vza2IpO1xuK1x0Y29uc3QgdTggKm5ld19vY3RldHMgPSAoY29uc3QgdTggKilzcmM7XG4rXHR1OCBvbGRfb2N0ZXQ7XG4rXG4rXHRzd2l0Y2ggKHByaXYtXHUwMDNlb2Zmc2V0KSB7XG4rXHRjYXNlIDA6IC8qIGNzdW0gZml4dXBzIGRvZXMgZXhwYW5kIGRzY3AvdG9zIHN0b3JlIHRvIDIgYnl0ZXMuXG4rXHRcdCAqIG1ha2Ugc3VyZSBpaGwvdmVyc2lvbiByZW1haW4gdW5jaGFuZ2VkLlxuK1x0XHQgKi9cbitcdFx0aWYgKHNrYl9jb3B5X2JpdHMocGt0LVx1MDAzZXNrYiwgb2Zmc2V0LCBcdTAwMjZvbGRfb2N0ZXQsIHNpemVvZihvbGRfb2N0ZXQpKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiA9PSAyIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICAgKm5ld19vY3RldHMgPT0gb2xkX29jdGV0O1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHRvcyk6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiA9PSAxO1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGlkKTpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuID09IDI7XG4rXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgdHRsKTpcbitcdFx0aWYgKHByaXYtXHUwMDNlbGVuID09IDEpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdGlmIChwcml2LVx1MDAzZWxlbiAhPSAyKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0Lyogc2FtZSwgY3N1bSBmaXh1cCBkb2VzIGV4cGFuZCB0dGwgc3RvcmUgdG8gdHdvIGJ5dGVzLlxuK1x0XHQgKiBjaGVjayBwcm90b2NvbCBpcyBub3QgYWx0ZXJlZC5cbitcdFx0ICovXG4rXHRcdGlmIChza2JfY29weV9iaXRzKHBrdC1cdTAwM2Vza2IsIG9mZnNldCArIDEsIFx1MDAyNm9sZF9vY3RldCwgc2l6ZW9mKG9sZF9vY3RldCkpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0cmV0dXJuIG5ld19vY3RldHNbMV0gPT0gb2xkX29jdGV0O1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gMiArIDQgKyA0O1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKTpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gNCArIDQ7XG4rXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VsZW4gXHUwMDNjPSA0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfaXA2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHRcdGNvbnN0IHUzMiAqc3JjKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppaCA9IChjb25zdCB2b2lkICopc3JjO1xuK1xuK1x0c3dpdGNoIChwcml2LVx1MDAzZW9mZnNldCkge1xuK1x0Y2FzZSAwOiAvKiBzdG9yZSB0byBkc2NwIG11c3Qgbm90IGFsdGVyIGlwNiB2ZXJzaW9uICovXG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiBcdTAwM2M9IDQgXHUwMDI2XHUwMDI2IGloLVx1MDAzZXZlcnNpb24gPT0gNjtcbitcdGNhc2UgMjpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gMjtcbitcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIGhvcF9saW1pdCk6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiA9PSAxO1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VsZW4gXHUwMDNjPSAxNiArIDE2O1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VsZW4gXHUwMDNjPSAxNjtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2FycChjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuK3tcbitcdC8qIFZhcmlhYmxlIHNpemUgZm9yIHN0YW5kYXJkIGV0aGVybmV0IGFycCAqL1xuK1x0Y29uc3QgdW5zaWduZWQgaW50IGV0aF9pcCA9IDIgKiAoRVRIX0FMRU4gKyA0KTtcbitcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBwcml2LVx1MDAzZW9mZnNldDtcbitcbitcdHN3aXRjaCAob2Zmc2V0KSB7XG4rXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBhcnBoZHIsIGFyX29wKTpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuID09IDI7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcbitcdC8qIHBlcm1pdCB3cml0ZXMgcG9zdCBmaXhlZCBhcnAgaGVhZGVyIHNpemUuIG9mZnNldCArIGxlbiBhcmVcbitcdCAqIGNoZWNrZWQgdnMgc2tiIHNpemUgdmlhIHNrYl9lbnN1cmVfd3JpdGFibGUuXG4rXHQgKi9cbitcdHJldHVybiBvZmZzZXQgXHUwMDNlPSBzaXplb2Yoc3RydWN0IGFycGhkcikgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gZXRoX2lwO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHRcdCAgIGNvbnN0IHUzMiAqc3JjKVxuK3tcbisjaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVZcbitcdHN3aXRjaCAocGt0LVx1MDAzZXNrYi1cdTAwM2Vwcm90b2NvbCkge1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9BUlApOlxuK1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2FycChwcml2KTtcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuK1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNChwa3QsIHByaXYsIHNyYyk7XG4rXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuK1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNihwa3QsIHByaXYsIHNyYyk7XG4rXHR9XG4rI2VuZGlmXG4rXHQvKiBkZWZhdWx0IHRvIGZhbHNlIGZvciBub3csIHJlbGF4IGxhdGVyIGluIGNhc2Ugd2UgaGF2ZVxuK1x0ICogdXNlLWNhc2VzIHRoYXQgbmVlZCBpbm5lciBoZWFkZXIgbWFuaXB1bGF0aW9uIGZvclxuK1x0ICogZW5jYXBzdWxhdGVkIHRyYWZmaWMgbGlrZSB2bGFuIG9yIFBQUG9FLlxuK1x0ICovXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19icmlkZ2UoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4rXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuK1x0XHRcdFx0ICAgY29uc3QgdTMyICpzcmMpXG4re1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfQlJJREdFKVxuK1x0c3dpdGNoIChwa3QtXHUwMDNlZXRoZXJ0eXBlKSB7XG4rXHRjYXNlIGh0b25zKEVUSF9QX0FSUCk6XG4rXHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfYXJwKHByaXYpO1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4rXHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA0KHBrdCwgcHJpdiwgc3JjKTtcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4rXHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA2KHBrdCwgcHJpdiwgc3JjKTtcbitcdH1cbisjZW5kaWZcbitcdC8qIHNlZSBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2OiBkZWZhdWx0IHRvIGZhbHNlICovXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHQgICAgY29uc3QgdTMyICpzcmMpXG4re1xuK1x0c3dpdGNoIChwa3QtXHUwMDNlc3RhdGUtXHUwMDNlcGYpIHtcbitcdGNhc2UgTkZQUk9UT19BUlA6XG4rXHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfYXJwKHByaXYpO1xuK1x0Y2FzZSBORlBST1RPX0JSSURHRTpcbitcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19icmlkZ2UocGt0LCBwcml2LCBzcmMpO1xuK1x0Y2FzZSBORlBST1RPX0lQVjQ6XG4rXHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA0KHBrdCwgcHJpdiwgc3JjKTtcbitcdGNhc2UgTkZQUk9UT19JUFY2OlxuK1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNihwa3QsIHByaXYsIHNyYyk7XG4rXHRjYXNlIE5GUFJPVE9fTkVUREVWOlxuK1x0XHRpZiAocGt0LVx1MDAzZXN0YXRlLVx1MDAzZWhvb2sgPT0gTkZfTkVUREVWX0lOR1JFU1MpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2KHBrdCwgcHJpdiwgc3JjKTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rLyogY2hlY2sgbGlua2xheWVyIG1vZGlmaWNhdGlvbnMgZG9uJ3Qgc3BpbGwgaW50byBuZXR3b3JrIGhlYWRlci4gKi9cbitzdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXG4re1xuK1x0aWYgKG5mdF9pbl9pbmdyZXNzKHBrdC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIG9mZnNldCBcdTAwM2M9IHNrYl9uZXR3b3JrX29mZnNldChwa3QtXHUwMDNlc2tiKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuK1x0XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbit7XG4rXHRzd2l0Y2ggKHByaXYtXHUwMDNlYmFzZSkge1xuK1x0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbitcdFx0aWYgKGN0eC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY0KSB7XG4rXHRcdFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXHUwMDNlY3N1bV9vZmZzZXQpXG4rXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbitcdFx0cmV0dXJuIHRydWU7IC8qIHJ1biB0aW1lIHZhbGlkYXRpb24gcmVxdWlyZWQgKi9cbitcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbitcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwicmUtdXBkYXRlXCIgb2YgTDQgY2hlY2tzdW0gKi9cbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdC8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbid0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXG4rXHRcdCAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuXG4rXHRcdCAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIHRydWU7XG4rXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbisvKiBkbyBub3QgYWxsb3cgYXJiaXRyYXJ5IG5ldHdvcmsgaGVhZGVyIG1hbmdsaW5nIHZpYSBib2d1cyBjc3VtX29mZi5cbisgKiBXZSBvbmx5IHN1cHBvcnQgaXB2NC4gIE9ubHkgTkZQUk9UT19JUFY0IGNhbiBiZSBjaGVja2VkIGZyb20gY29udHJvbFxuKyAqIHBsYW5lLlxuKyAqL1xuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuK3tcbitcdHN3aXRjaCAocGt0LVx1MDAzZXN0YXRlLVx1MDAzZXBmKSB7XG4rXHRjYXNlIE5GUFJPVE9fSVBWNDpcbitcdFx0LyogV2FybmluZzogTkZQUk9UT19JTkVUIHdhcyBub3QgY2hlY2tlZDsgd2UgY2FuJ3QgcmV0dXJuIHRydWUgaGVyZS4gKi9cbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XG4rXHRjYXNlIE5GUFJPVE9fSVBWNjpcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0Y2FzZSBORlBST1RPX0JSSURHRTpcbitcdFx0cmV0dXJuIHBrdC1cdTAwM2VldGhlcnR5cGUgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbitcdGNhc2UgTkZQUk9UT19ORVRERVY6XG4rXHRcdHJldHVybiBwa3QtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuK3tcbitcdHN3aXRjaCAocHJpdi1cdTAwM2ViYXNlKSB7XG4rXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuK1x0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xuK1x0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuK1x0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4rXHRcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxuK1x0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG5AQCAtODYxLDggKzExMDQsMTIgQEAgc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0XHR9XG4gXG4gXHRcdG9mZnNldCA9IHNrYl9tYWNfaGVhZGVyKHNrYikgLSBza2ItXHUwMDNlZGF0YSAtIHZsYW5faGxlbjtcbitcdFx0aWYgKCFuZnRfbGxfd3JpdGVfb2socGt0LCBwcml2LVx1MDAzZWxlbiArIHByaXYtXHUwMDNlb2Zmc2V0ICsgb2Zmc2V0KSlcbitcdFx0XHRnb3RvIGVycjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuK1x0XHRpZiAoIW5mdF9uaF93cml0ZV9vayhwa3QsIHByaXYsIHNyYykpXG4rXHRcdFx0Z290byBlcnI7XG4gXHRcdG9mZnNldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbkBAIC04OTQsNiArMTE0MSw3IEBAIHN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdFx0dHN1bSA9IGNzdW1fcGFydGlhbChzcmMsIHByaXYtXHUwMDNlbGVuLCAwKTtcbiBcbiBcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxuIFx0XHRcdGdvdG8gZXJyO1xuIFxuQEAgLTk2MCw3ICsxMjA4LDI2IEBAIHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBcdHN3aXRjaCAoY3N1bV90eXBlKSB7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fTk9ORTpcbitcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQpIC8qIG5vbnNlbnNpY2FsICovXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fZmxhZ3MgPT0gMClcbitcdFx0XHRicmVhaztcbitcbitcdFx0LyogVXNlcnNwYWNlIHJlcXVlc3RzIEw0IGNoZWNrc3VtIHVwZGF0ZSwgZS5nLjpcbitcdFx0ICogLSBJUHY2IHN0YXRlbGVzcyBOQVQgKG5vIGwzIGNzdW0pXG4rXHRcdCAqIC0gdHJhbnNwb3J0IGhlYWRlciBtYW5nbGluZ1xuK1x0XHQgKiAtIGlubmVyIGRhdGEgbWFuZ2xpbmdcbitcdFx0ICovXG4rXHRcdGlmIChwcml2LVx1MDAzZWJhc2UgPT0gTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVIgfHxcbitcdFx0ICAgIHByaXYtXHUwMDNlYmFzZSA9PSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIHx8XG4rXHRcdCAgICBwcml2LVx1MDAzZWJhc2UgPT0gTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxuK1x0XHRpZiAoIW5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY3R4LCBwcml2KSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fU0NUUDpcbiBcdFx0aWYgKHByaXYtXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSKVxuQEAgLTk2OCw2ICsxMjM1LDkgQEAgc3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFxuIFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX29mZnNldCAhPSBvZmZzZXRvZihzdHJ1Y3Qgc2N0cGhkciwgY2hlY2tzdW0pKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcbmluZGV4IDcwNmM3ODg1M2YyNDViLi45NzhiYjBjMDExMDY4MiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXG5AQCAtMzQyLDYgKzM0Miw4IEBAXG4gI2luY2x1ZGUgXCJuZnRfc2V0X3BpcGFwb19hdngyLmhcIlxuICNpbmNsdWRlIFwibmZ0X3NldF9waXBhcG8uaFwiXG4gXG4rc3RhdGljIHZvaWQgbmZ0X3BpcGFwb19hYm9ydChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KTtcbitcbiAvKipcbiAgKiBwaXBhcG9fcmVmaWxsKCkgLSBGb3IgZWFjaCBzZXQgYml0LCBzZXQgYml0cyBmcm9tIHNlbGVjdGVkIG1hcHBpbmcgdGFibGUgaXRlbVxuICAqIEBtYXA6XHRCaXRtYXAgdG8gYmUgc2Nhbm5lZCBmb3Igc2V0IGJpdHNcbkBAIC0xMjk2LDcgKzEyOTgsNyBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBcdGNvbnN0IHU4ICpzdGFydF9wLCAqZW5kX3A7XG4gXHRpbnQgaSwgYnNpemVfbWF4LCBlcnIgPSAwO1xuIFxuLVx0aWYgKCFtKVxuK1x0aWYgKCFtIHx8IG0tXHUwMDNlc3RhdGUgPT0gTkZUX1BJUEFQT19DTE9ORV9FUlIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0tFWV9FTkQpKVxuQEAgLTEzNjcsOCArMTM2OSwxMCBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBcdFx0ZWxzZVxuIFx0XHRcdHJldCA9IHBpcGFwb19leHBhbmQoZiwgc3RhcnQsIGVuZCwgZi1cdTAwM2Vncm91cHMgKiBmLVx1MDAzZWJiKTtcbiBcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0ZXJyID0gcmV0O1xuK1x0XHRcdGdvdG8gYWJvcnQ7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKGYtXHUwMDNlYnNpemUgXHUwMDNlIGJzaXplX21heClcbiBcdFx0XHRic2l6ZV9tYXggPSBmLVx1MDAzZWJzaXplO1xuQEAgLTEzODQsNyArMTM4OCw3IEBAIHN0YXRpYyBpbnQgbmZ0X3BpcGFwb19pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFxuIFx0XHRlcnIgPSBwaXBhcG9fcmVhbGxvY19zY3JhdGNoKG0sIGJzaXplX21heCk7XG4gXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0XHRnb3RvIGFib3J0O1xuIFxuIFx0XHRtLVx1MDAzZWJzaXplX21heCA9IGJzaXplX21heDtcbiBcdH0gZWxzZSB7XG5AQCAtMTM5Niw3ICsxNDAwLDI2IEBAIHN0YXRpYyBpbnQgbmZ0X3BpcGFwb19pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFxuIFx0cGlwYXBvX21hcChtLCBydWxlbWFwLCBlKTtcbiBcbitcdG0tXHUwMDNlc3RhdGUgPSBORlRfUElQQVBPX0NMT05FX01PRDtcbiBcdHJldHVybiAwO1xuK2Fib3J0OlxuK1x0REVCVUdfTkVUX1dBUk5fT05fT05DRShtLVx1MDAzZXN0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfRVJSKTtcbitcbitcdC8qIFR3byByb2xsYmFjayBjYXNlczpcbitcdCAqIDEpIG5vIHByZXZpb3VzIGNoYW5nZXMuICBuZnRfcGlwYXBvX2Fib3J0IGlzIG5vdFxuK1x0ICogZ3VhcmFudGVlZCB0byBiZSBpbnZva2VkICh0aGVyZSBtaWdodCBiZSBubyBmdXJ0aGVyXG4rXHQgKiBhZGQvZGVsZXRlIHJlcXVlc3RzIGNvbWluZyBhZnRlciB0aGlzKS5cbitcdCAqXG4rXHQgKiAyKSB3ZSBoYWQgcHJldmlvdXMgY2hhbmdlczogdGhlcmUgYXJlIHRyYW5zYWN0aW9uXG4rXHQgKiByZWNvcmRzIHBvaW50aW5nIHRvIHRoaXMgc2V0LiAgTGVhdmUgdGhlIHJvbGxiYWNrIHRvXG4rXHQgKiB0aGUgdHJhbnNhY3Rpb24gaGFuZGxpbmcuXG4rXHQgKi9cbitcdGlmIChtLVx1MDAzZXN0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfTkVXKVxuK1x0XHRuZnRfcGlwYXBvX2Fib3J0KHNldCk7IC8qIHJlbGVhc2VzIG0gKi9cbitcdGVsc2VcbitcdFx0bS1cdTAwM2VzdGF0ZSA9IE5GVF9QSVBBUE9fQ0xPTkVfRVJSO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gLyoqXG5AQCAtMTQ3Myw2ICsxNDk2LDcgQEAgc3RhdGljIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICpwaXBhcG9fY2xvbmUoc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm9sZClcbiBcdFx0ZHN0Kys7XG4gXHR9XG4gXG4rXHRuZXctXHUwMDNlc3RhdGUgPSBORlRfUElQQVBPX0NMT05FX05FVztcbiBcdHJldHVybiBuZXc7XG4gXG4gb3V0X210OlxuQEAgLTE4OTYsNyArMTkyMCw3IEBAIG5mdF9waXBhcG9fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHQvKiByZW1vdmFsIG11c3Qgb2NjdXIgb24gcHJpdi1cdTAwM2VjbG9uZSwgaWYgd2UgYXJlIGxvdyBvbiBtZW1vcnlcbiBcdCAqIHdlIGhhdmUgbm8gY2hvaWNlIGFuZCBtdXN0IGZhaWwgdGhlIHJlbW92YWwgcmVxdWVzdC5cbiBcdCAqL1xuLVx0aWYgKCFtKVxuK1x0aWYgKCFtIHx8IG0tXHUwMDNlc3RhdGUgPT0gTkZUX1BJUEFQT19DTE9ORV9FUlIpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0ZSA9IHBpcGFwb19nZXQobSwgKGNvbnN0IHU4ICopZWxlbS1cdTAwM2VrZXkudmFsLmRhdGEsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oXG5pbmRleCBiODJhYmIwMzU3NmVkZC4uYTE5ZTk4MGQwNmVmNDIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmhcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaFxuQEAgLTEzMSw5ICsxMzEsMTYgQEAgc3RydWN0IG5mdF9waXBhcG9fc2NyYXRjaCB7XG4gXHR1bnNpZ25lZCBsb25nIF9fbWFwW107XG4gfTtcbiBcbitlbnVtIG5mdF9waXBhcG9fY2xvbmVfc3RhdGUge1xuK1x0TkZUX1BJUEFQT19DTE9ORV9ORVcsXG4rXHRORlRfUElQQVBPX0NMT05FX01PRCxcbitcdE5GVF9QSVBBUE9fQ0xPTkVfRVJSLFxuK307XG4rXG4gLyoqXG4gICogc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggLSBEYXRhIHVzZWQgZm9yIGxvb2t1cCBhbmQgbWF0Y2hpbmdcbiAgKiBAZmllbGRfY291bnQ6XHRBbW91bnQgb2YgZmllbGRzIGluIHNldFxuKyAqIEBzdGF0ZTpcdFx0YWRkL2RlbGV0ZSBzdGF0ZTsgdXNlZCBmcm9tIGNvbnRyb2wgcGxhbmVcbiAgKiBAYnNpemVfbWF4Olx0XHRNYXhpbXVtIGxvb2t1cCB0YWJsZSBidWNrZXQgc2l6ZSBvZiBhbGwgZmllbGRzLCBpbiBsb25nc1xuICAqIEBzY3JhdGNoOlx0XHRQcmVhbGxvY2F0ZWQgcGVyLUNQVSBtYXBzIGZvciBwYXJ0aWFsIG1hdGNoaW5nIHJlc3VsdHNcbiAgKiBAcmN1Olx0XHRNYXRjaGluZyBkYXRhIGlzIHN3YXBwZWQgb24gY29tbWl0c1xuQEAgLTE0MSw2ICsxNDgsNyBAQCBzdHJ1Y3QgbmZ0X3BpcGFwb19zY3JhdGNoIHtcbiAgKi9cbiBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCB7XG4gXHR1OCBmaWVsZF9jb3VudDtcbitcdGVudW0gbmZ0X3BpcGFwb19jbG9uZV9zdGF0ZSBzdGF0ZTo4O1xuIFx0dW5zaWduZWQgaW50IGJzaXplX21heDtcbiBcdHN0cnVjdCBuZnRfcGlwYXBvX3NjcmF0Y2ggKiBfX3BlcmNwdSAqc2NyYXRjaDtcbiBcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjowMy4yODMzMDk4MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mzg4MTMxODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIFNlcmllcyBFdmFsdWF0aW9uOiBBIEZ1enppbmcgT3Bwb3J0dW5pdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICp5ZXMsIHRoaXMgZGVzZXJ2ZXMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiogSXQncyB0b3VjaGluZyBxdWl0ZSBhIGZldyBjcml0aWNhbCBhcmVhcyBvZiB0aGUgYG5ldGZpbHRlcmAgc3Vic3lzdGVtOiBzcGVjaWZpY2FsbHksIGEgZGl2ZSBpbnRvIG5ldGxpbmsgcXVldWUsIHNvbWUgY2hhbmdlcyB0byBuZnRhYmxlcyBwYXlsb2FkIG1hbmdsaW5nLCB0aGUgaGFuZGxpbmcgb2YgcGlwYXBvIHNldHMsIGFuZCBjb25udHJhY2sgZXhwZWN0YXRpb25zLiBHaXZlbiB0aGUgc2NvcGUgYW5kIHRoZSB0eXBlcyBvZiBtb2RpZmljYXRpb25zLCBmcm9tIGxvY2tpbmcgY2hhbmdlcyBpbiBgaXBfc2V0X2NvcmUuY2AgKHRoYXQgYHJjdV9yZWFkX2xvY2tgL2B1bmxvY2tgIGlzIGludGVyZXN0aW5nKSB0byB2YXJpb3VzIGluaXRpYWxpemF0aW9uIGFuZCB2YWxpZGF0aW9uIGFkanVzdG1lbnRzIGFjcm9zcyBtdWx0aXBsZSBmaWxlcywgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MgaXMgZGVmaW5pdGVseSB0aGVyZS5cblxuSXQncyBjbGVhciB0aGF0IHRoaXMgdG91Y2hlcyBvbiB2YXJpb3VzIGNvcmUgbmV0d29yayBmaWx0ZXJpbmcgY29tcG9uZW50cy4gSW4gYG5mX2Nvbm50cmFja19leHBlY3QuY2AgdGhlIGNoYW5nZSB0byBgemFsbG9jYCB3aXRoIGFkZGVkIGluaXRpYWxpemF0aW9uIHJhaXNlcyBpbW1lZGlhdGUgY29uY2VybnMuIFRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIFNJUCBoZWxwZXIgKGBuZl9jb25udHJhY2tfc2lwLmNgKSBzb3VuZCBpbXBvcnRhbnQsIGFzIGRvIHRoZSB2YWxpZGF0aW9ucyBhZGRlZCBpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgIGFuZCBgbmZ0XypgIGZpbGVzLiBUaGUgc3RhdGUgdHJhY2tpbmcgYWRkZWQgdG8gYG5mdF9zZXRfcGlwYXBvLmNgIGxvb2tzIGxpa2UgYW4gYXJlYSB3aGVyZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgc3RhdGUgdHJhbnNpdGlvbnMgY291bGQgYXJpc2UuXG5cbk5vdywgYmVmb3JlIHdlIGp1bXAgaW50byB0aGUgZnV6emluZywgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gTGV0J3Mgc2VlLi4uIHdlJ2xsIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX05FVEZJTFRFUmAsIG5hdHVyYWxseS4gQmV5b25kIHRoYXQsIEknbSB0aGlua2luZyBgQ09ORklHX05GX0NPTk5UUkFDS2AsIGBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUGAsIGBDT05GSUdfTkZfQ1RfTkVUTElOS2AsIGBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUVgLCBgQ09ORklHX05GX1RBQkxFU2AsIGFuZCB0aGUgYENPTkZJR19ORlRfKmAgb3B0aW9ucywgc28gYENPTkZJR19ORlRfRklCYCwgYENPTkZJR19ORlRfRklCX05FVERFVmAsIGBDT05GSUdfTkZUX1BBWUxPQURgLCBhbmQgSSBhbHNvIHNhdyBzb21lIGBJUF9TRVRgIHJlZmVyZW5jZXMsIHNvIHdlIG5lZWQgYENPTkZJR19JUF9TRVRgLiBXZSBtdXN0IGVuc3VyZSB0aGVzZSBhcmUgZW5hYmxlZCBzbyB0aGUgZnV6emVyIGNhbiBwcm9wZXJseSB0ZXN0IHRoZXNlIGNoYW5nZXMuXG5cbkknbGwgcXVpY2tseSBkbyBzb21lIGNvZGUgc2VhcmNoaW5nIHRvIHZlcmlmeSB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIHRoZW4gZ2V0IHRoZSBmdXp6aW5nIGVudmlyb25tZW50IHNldHVwLiBUaGlzIGxvb2tzIGxpa2UgaXQnbGwgYmUgYSBmcnVpdGZ1bCBmdXp6aW5nIGNhbXBhaWduIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjEyLjY3MTQ0NTY1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyNzg3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS19TSVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zMzA9Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVxcdHRyaXN0YXRlIFxcXCJTSVAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6MTIuODMxNzM1MzgxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNjQ0MzI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIG5ldHdvcmtpbmcsIG1heWJlIGRlYnVnZ2luZyBhIHBlcmZvcm1hbmNlIGlzc3VlIG9yIHNldHRpbmcgdXAgc29tZSBhZHZhbmNlZCBmaXJld2FsbCBydWxlczpcblxuKipOZXRmaWx0ZXIgYW5kIE5ldGxpbmsgUXVldWUgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBwYWNrZXQgZmlsdGVyaW5nIG1lc3MsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGUgYmFzaWNzIGFyZSBpbiBwbGFjZS4gVGhlIHdob2xlIE5ldGZpbHRlciBzZXR1cCByZWxpZXMgaGVhdmlseSBvbiB0aGUgbmV0bGluayBxdWV1ZWluZyBtZWNoYW5pc20gZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIFNvLCBiZWZvcmUgSSBzdGFydCBwdWxsaW5nIG15IGhhaXIgb3V0IHRyeWluZyB0byBkZWJ1ZyBzb21lIHdlaXJkIHRyYWZmaWMgYmVoYXZpb3VyIG9yIG1pc3NpbmcgcGFja2V0cywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjazogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUVgIGlzIGVuYWJsZWQuIEl0J3Mgc3VjaCBhIGZ1bmRhbWVudGFsIGNvbXBvbmVudCwgYW5kIEkndmUgYmVlbiBiaXR0ZW4gYnkgZm9yZ2V0dGluZyB0byBjaGVjayB0aGlzIGJlZm9yZSDigJMgd2FzdGluZyBob3VycyB0cnlpbmcgdG8gZmlndXJlIG91dCB3aHkgbXkgY3VzdG9tIHJ1bGVzIGFyZW4ndCBiZWluZyBoaXQuIFRoaXMgaXMgbXkgZm91bmRhdGlvbjsgSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIHNvbGlkIGJlZm9yZSBidWlsZGluZyBhbnl0aGluZyBvbiB0b3Agb2YgaXQuIE9uZSBtaXNzaW5nIGNvbmZpZyBvcHRpb24gY2FuIGRlcmFpbCB0aGUgd2hvbGUgb3BlcmF0aW9uLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBuZXRsaW5rIHF1ZXVlIGlzIGVuYWJsZWQsIGFuZCB0aGVuIEkgY2FuIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODA1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6MTcuNjM4MTgzNDc0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNDM5NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ2PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIE5GUVVFVUUgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjoxNy43MzE2MzA2ODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ5OTk1NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgYENPTkZJR19ORlRfRklCYCBmb3IgTmV0ZmlsdGVyIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGBDT05GSUdfTkZUX0ZJQmAgb3B0aW9uIGlzIGVuYWJsZWQuIEkga25vdyB0aGlzIGlzIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZSBGSUIgKEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSkgc3VwcG9ydCB3aXRoaW4gTmV0ZmlsdGVyJ3MgbmZ0YWJsZXMgZnJhbWV3b3JrLiBXaXRob3V0IHRoaXMsIEkgd29uJ3QgaGF2ZSB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24gZm9yIGFkdmFuY2VkIHJvdXRpbmcgYW5kIHBhY2tldCBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzIHRoYXQgSSdtIGxpa2VseSB0cnlpbmcgdG8gaW1wbGVtZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZCB0byBwcm9jZWVkIHdpdGggd2hhdGV2ZXIgdGFzayBpcyBhdCBoYW5kLiBUaGlzIGlzIGEgZm91bmRhdGlvbmFsIHN0ZXAsIGFuZCBuZWdsZWN0aW5nIGl0IGNvdWxkIGxlYWQgdG8gaG91cnMgb2Ygd2FzdGVkIGVmZm9ydCBjaGFzaW5nIHBoYW50b20gcHJvYmxlbXMuIFRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjoyMS4wODE2MzA1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAxODIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0ZJQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTU5OT1jb25maWcgTkZUX0hBU0hcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYwNTpjb25maWcgTkZUX0ZJQlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDYtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjA3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MDg6Y29uZmlnIE5GVF9GSUJfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDktXFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY3ND1jb25maWcgTkZUX0ZXRF9ORVRERVZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NzktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY4MDpjb25maWcgTkZUX0ZJQl9ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjgxLVxcdGRlcGVuZHMgb24gTkZUX0ZJQl9JUFY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjIxLjE1NzY1NTQyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjU2MTE3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkV2YWx1YXRpbmcgYENPTkZJR19ORlRfUEFZTE9BRGAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGp1c3QgbWFrZSBzdXJlIHdlJ3JlIG9uIHRvcCBvZiBgQ09ORklHX05GVF9QQVlMT0FEYC4gSXQncyBhIGtleSBlbGVtZW50LCBvYnZpb3VzbHkuIEl0IGRpY3RhdGVzIGhvdyB3ZSdyZSBnb2luZyB0byBpbnRlcmFjdCB3aXRoIHRoZSBwYXlsb2FkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBuZnRhYmxlcywgYW5kIHRoYXQncyBjcml0aWNhbCBmb3Igb3VyIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IHByb2ZpbGUuIElzIHRoaXMgZW5hYmxlZD8gSXMgaXQgY29ycmVjdGx5IGNvbmZpZ3VyZWQ/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBjb25zaWRlcj8gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBjdXJyZW50IHN0YXR1cyBhbmQgbWFrZSBzdXJlIGl0IGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIHJlcXVpcmVtZW50cyBvZiB0aGUgc3lzdGVtJ3MgaW50ZW5kZWQgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSBjb25zaWRlcmluZyB0aGUgbmV0d29yayB0cmFmZmljIGFuYWx5c2lzIGFuZCBtYW5pcHVsYXRpb24gdGhhdCdzIGdvaW5nIG9uIGhlcmUuIEl0J3MgYSBmdW5kYW1lbnRhbCBzZXR0aW5nLCBzbyBJIHdhbnQgdG8gZW5zdXJlIGl0J3Mgc2V0IHVwIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1ODYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjoyNC41ODMyNzIwNzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjk0MTYxMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9QQVlMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6MjQuNzkwMjMxNzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4MjQ2MTQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBuZnRfcGF5bG9hZC5jYCBmaWxlIGFuZCBJJ20gcHJldHR5IHN1cmUgaXQncyBiZWluZyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgY29uZGl0aW9uYWxseSwgc3BlY2lmaWNhbGx5IGRlcGVuZGluZyBvbiB0aGUgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uIE15IGludHVpdGlvbiBzYXlzIGBDT05GSUdfTkZfVEFCTEVTYCBpcyBsaWtlbHkgdGhlIGtleSB0cmlnZ2VyLCBidXQgaXQgY291bGQgYmUgc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIEkndmUgZ290IHRvIGNvbmZpcm0gdGhpcy4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdvdWxkIGJlIHRoZSBOZXRmaWx0ZXIgYE1ha2VmaWxlYCwgaW4gYG5ldC9uZXRmaWx0ZXIvYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQgcnVsZXMgZm9yIHRoaXMgc3R1ZmYgd291bGQgYmUgZGVmaW5lZCwgc28gbGV0J3MganVtcCBpbiB0aGVyZSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgYWN0dWFsbHkgZG9pbmcgd2l0aCBgbmZ0X3BheWxvYWQuY2AuIEhvcGVmdWxseSwgaXQnbGwgYmUgY2xlYXIgcHJldHR5IHF1aWNrbHkgd2hldGhlciBpdCdzIHVuY29uZGl0aW9uYWxseSBidWlsdCB3aXRoIGEgc3BlY2lmaWMgY29uZmlnIG9yIGlmIHRoZXJlIGFyZSBvdGhlciBkZXBlbmRlbmNpZXMgYXQgcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjoyOC40NzI2OTc1MjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNzQzNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT04Nz1uZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXFx0XFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg5OlxcdFxcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXFx0XFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjI4LjU2NDQ2MTQ1NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTczNjA3Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkFzc2Vzc2luZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIGBuZnRfcGF5bG9hZC5vYCBpcyBkZWZpbml0ZWx5IGEgY29tcG9uZW50IHdpdGhpbiBgbmZfdGFibGVzLW9ianNgLiBUaGF0IGNvbmZpcm1zIHRoYXQgaGF2aW5nIGBDT05GSUdfTkZfVEFCTEVTYCBlbmFibGVkIGNvdmVycyB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGF0IHBhcnRpY3VsYXIgb2JqZWN0IGZpbGUuIE5vIG5lZWQgdG8gZGlnIGFueSBkZWVwZXIgdGhlcmUuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgSSBzaG91bGQgY2hlY2sgb24gYG5mdF9zZXRfcGlwYXBvYC4gSSBuZWVkIHRvIGFzc2VzcyB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgd2hldGhlciBvciBub3QgZW5hYmxpbmcgYENPTkZJR19ORl9UQUJMRVNgIHN1ZmZpY2llbnRseSBhZGRyZXNzZXMgdGhvc2UgdG9vLiBJJ20gc2VlaW5nIGl0IGZvciB0aGUgZmlyc3QgdGltZSwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gdGFrZSBjYXJlIG9mIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGJhc2UgYG5mX3RhYmxlc2AgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI0MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjMzLjUzODA3NDQyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM4NDcyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3NldF9waXBhcG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkzLVxcdFxcdCAgbmZ0X3NldF9oYXNoLm8gbmZ0X3NldF9iaXRtYXAubyBuZnRfc2V0X3JidHJlZS5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjk0OlxcdFxcdCAgbmZ0X3NldF9waXBhcG8ub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTk3PWlmbmRlZiBDT05GSUdfVU1MXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5ODpuZl90YWJsZXMtb2JqcyArPSBuZnRfc2V0X3BpcGFwb19hdngyLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTk5LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjMzLjYzMTkzNDMxMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYxNTA2MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkNvbnNpZGVyaW5nIERlcGVuZGVuY2llcyBhbmQgUmVsYXRlZCBNb2R1bGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmZfdGFibGVzLW9ianNgIHRoaW5nLiBSaWdodCwgdGhhdCdzIGRlZmluaXRlbHkgYSBrZXkgY29tcG9uZW50LiBCdXQsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gV2hhdCBlbHNlIGlzIGluIHBsYXkgaGVyZT8gU3BlY2lmaWNhbGx5LCBJJ20gd29uZGVyaW5nIGFib3V0IGBuZm5ldGxpbmtfY3RoZWxwZXJgLiBJcyBpdCBkaXJlY3RseSByZWxhdGVkPyBJcyBpdCBhIGRlcGVuZGVuY3k/IE9yIGlzIGl0IHNvbWV0aGluZyB0aGF0IGludGVyYWN0cyB3aXRoIGBuZl90YWJsZXMtb2Jqc2AgaW4gc29tZSBvdGhlciBzaWduaWZpY2FudCB3YXk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIHBpY3R1cmUsIGlmIGFueS4gRGlnZ2luZyBpbnRvIHRoZSByZWxhdGlvbnNoaXBzIGhlcmUgd2lsbCBwYWludCBhIGJldHRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjM2Ljc5MzQ0ODI5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1Mzg2NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mbmV0bGlua19jdGhlbHBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mzg9b2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfVElNRU9VVCkgKz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozOTpvYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19IRUxQRVIpICs9IG5mbmV0bGlua19jdGhlbHBlci5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6MzYuOTM4ODQzMTIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NzY5MTU0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhYnlyaW50aCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgcmVxdWlyZXMgYENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUmAuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZCB0byBnZXQgcm9sbGluZy4gTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBJJ20gZ29pbmcgdG8gdGFrZSBhIG1vbWVudCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nIHRoYXQgb2Z0ZW4gaW50ZXJzZWN0cyB3aXRoIHRoaXMgYXJlYSDigJMgc3BlY2lmaWNhbGx5LCBgQ09ORklHX0lQX1NFVGAuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIG9mdGVuIGEgcHJlcmVxdWlzaXRlIG9yIGF0IGxlYXN0IGEgcmVsYXRlZCBmZWF0dXJlLiBMZXQncyBtYWtlIHN1cmUgaXTigJlzIGVuYWJsZWQgb3IgYXQgbGVhc3QgdW5kZXJzdG9vZCBpbiB0aGlzIGNvbnRleHQgYmVmb3JlIEkgcHJvY2VlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgbmV0bGluayBoZWxwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTUwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6NDIuOTE1NzYzODQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTgwNjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MjptZW51Y29uZmlnIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xND1pZiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE3LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mjg6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zNi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mzc6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcImJpdG1hcDpwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6OTM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiaGFzaDptYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjE6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjktXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjg6Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjktXFx0dHJpc3RhdGUgXFxcImxpc3Q6c2V0IHNldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjo0My4wMTE1ODE0NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMDA5NjczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uZmlnIGNvbnNpZGVyYXRpb25zLCBkaXN0aWxsZWQgaW50byBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbG9va3MgbGlrZSBgQ09ORklHX0lQX1NFVGAgaXMgYSBoYXJkIHJlcXVpcmVtZW50LiBHb3QgaXQuIE5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgZXhwZWN0YXRpb25zLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRoYXQgYENPTkZJR19ORl9DT05OVFJBQ0tfRVhQRUNUYCBtaWdodCBiZSBpbnZvbHZlZC4gSG93ZXZlciwgSSBuZWVkIHRvIGJlIHN1cmUuIEkgYmVsaWV2ZSB0aGF0IGV4cGVjdGF0aW9ucyBhcmUgYSBjb3JlIHBhcnQgb2YgdGhlIGJhc2UgYENPTkZJR19ORl9DT05OVFJBQ0tgIG1vZHVsZS4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGEgZGlzdGluY3QgY29uZmlndXJhdGlvbiBvcHRpb24gdGllZCBkaXJlY3RseSB0byB0aGUgYG5mX2Nvbm50cmFja19leHBlY3QuY2AgbW9kdWxlIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZT8gSSBuZWVkIHRvIHZlcmlmeSBpdHMgZXhhY3QgY29uZmlndXJhdGlvbiBwYXRoLiBJdCBtaWdodCBiZSBwYXJ0IG9mIGFub3RoZXIgY29uZmlndXJhdGlvbiBvciBpdCBjb3VsZCBiZSBhIHNlcGFyYXRlIG9wdGlvbi4gSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDAxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6NDYuNjQxNjgyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0Njk1MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19leHBlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM9bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSArPSBuZm5ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU6bmZfY29ubnRyYWNrLXlcXHQ6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS02LVxcdFxcdCAgIG5mX2Nvbm50cmFja19wcm90by5vIG5mX2Nvbm50cmFja19wcm90b19nZW5lcmljLm8gbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5vIG5mX2Nvbm50cmFja19wcm90b191ZHAubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjQ2Ljc1NjM4NjcwOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzcyNDE0MDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIE5ldGZpbHRlciBDb25udHJhY2sqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjbHVlIHBvaW50cyBkaXJlY3RseSB0byBgbmZfY29ubnRyYWNrLXlgLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBhbmQgY29uZmlndXJhdGlvbiBvZiBgQ09ORklHX05GX0NUX05FVExJTktgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGludGVyYWN0aW9uIHdpdGggdXNlcnNwYWNlIGhhcHBlbnMgZm9yIGBuZl9jb25udHJhY2tgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBuZXRsaW5rIGludGVyZmFjZSBpcyBlbmFibGVkLiBJZiB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzbid0IHNldCwgdGhlbiB0aGUgYWJpbGl0eSB0byBpbnRlcmFjdCB3aXRoIHRoZSBjb25udHJhY2sgdGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgd29uJ3QgYmUgYXZhaWxhYmxlLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBjZXJ0YWluIGJlaGF2aW9ycywgc3BlY2lmaWNhbGx5IGluIGNlcnRhaW4gbmV0d29yayBtYW5hZ2VtZW50IHRvb2xzLCB0byBmYWlsIGFzIGV4cGVjdGVkLiBUaGlzIGFsc28gaGVscHMgdG8gZW5zdXJlIHRoZSBleHBlY3RlZCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuIEkgc3VzcGVjdCB0aGlzIGlzIHRoZSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjo1MS4xMjg4MDYxMzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDU4NTg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ1RfTkVUTElOS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTM1NT1jb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2Njpjb25maWcgTkZfQ1RfTkVUTElOS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjctXFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzcyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNzM6Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNzQtXFx0dHJpc3RhdGUgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgdHVuaW5nIHZpYSBOZXRsaW5rJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg1OmNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODYtXFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBpbiB1c2VyLXNwYWNlIHZpYSBOZXRsaW5rJ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjo1MS4yNDk0MDA0MDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3NzcwNDEwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1cyBSZWZpbmVtZW50KipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRha2luZyBhIGxvb2sgYXQgYSBmZXcgYXJlYXMgd2l0aGluIHRoZSBOZXRmaWx0ZXIvaXB0YWJsZXMgY29kZSwgdHJ5aW5nIHRvIHBpbnBvaW50IGdvb2QgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4gSSd2ZSBnb3QgYSBmYWlybHkgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIG1vZHVsZXMgdG8gY29uc2lkZXI6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DVF9ORVRMSU5LYCwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCwgYE5GX1RBQkxFU2AsIGBORlRfRklCYCwgYE5GVF9GSUJfTkVUREVWYCwgYW5kIGBJUF9TRVRgLiBBIHdpZGUgdmFyaWV0eS5cblxuTm93LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBuZXRsaW5rIGludGVyYWN0aW9ucywgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCB0aG9zZSB0aGF0IGRlYWwgd2l0aCBzdGF0ZWZ1bCBjb25uZWN0aW9ucywgdGhvc2UgYXJlYXMgYXJlIHJpcGUgd2l0aCBjb21wbGV4aXR5IGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIHN0YXJ0ZWQgYnkgbG9va2luZyBhdCBgaXBfc2V0X2NvcmUuY2AgYW5kIGZvdW5kIGBpcF9zZXRfZHVtcF9kb2AsIHNpbmNlIGl0cyBuZXRsaW5rIGR1bXAgY2FsbGJhY2ssIHNvIHRoYXQncyBhIGRlY2VudCBzdGFydC4gVGhlbiBJIGxvb2tlZCBhdCBgbmZfY29ubnRyYWNrX2V4cGVjdC5jYCBhbmQgYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLCB3aGljaCBvZmZlcmVkIGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YCBhbmQgZm91bmQgc29tZSBmdW5jdGlvbnMgaW4gYG5mX2Nvbm50cmFja19zaXAuY2AgbGlrZSBgc2V0X2V4cGVjdGVkX3J0cF9ydGNwYCwgd2hpY2ggY291bGQgYmUgdXNlZnVsLlxuXG5gbmZuZXRsaW5rX2N0aGVscGVyLmNgIGFuZCBgbmZuZXRsaW5rX3F1ZXVlLmNgIGFyZSBhbHNvIGludGVyZXN0aW5nLiBJIHNhdyBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgYW5kIGBuZnFubF9tYW5nbGVgIGluIGBuZm5ldGxpbmtfcXVldWUuY2AgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIEl0J3MgaGFuZGxpbmcgcGFja2V0IG1hbmlwdWxhdGlvbiwgd2hpY2ggaXMgb2Z0ZW4gYSBzb3VyY2Ugb2YgYnVncy4gVGhlIGBuZnFubF9tYW5nbGVgIHN5bWJvbCBpcyBlc3BlY2lhbGx5IHByb21pc2luZyBnaXZlbiBpdHMgcm9sZSBpbiBhbHRlcmluZyBwYWNrZXRzLlxuXG5UaGUgYG5mdF9maWIuY2AgYW5kIGBuZnRfZmliX25ldGRldi5jYCBjb2RlIG9mZmVycyBgbmZ0X2ZpYl92YWxpZGF0ZWAgYW5kIGBuZnRfZmliX25ldGRldl92YWxpZGF0ZWAsIGFuZCB0aGV5IGFyZSBhbHNvIGxvb2tpbmcgbGlrZSBwb3RlbnRpYWwgdGFyZ2V0cy4gSW4gYG5mdF9wYXlsb2FkLmNgLCBJIHNhdyBzb21lIGluaXRpYWxpemF0aW9ucyBhbmQgZXZhbHVhdGlvbnM7IGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgc2VlbSBsaWtlIHRoZXkgc2hvdWxkIGJlIGludmVzdGlnYXRlZC4gSSdtIGFsc28gbG9va2luZyBpbnRvIGBuZnRfc2V0X3BpcGFwby5jYCBhbmQgZm91bmQgYG5mdF9waXBhcG9faW5zZXJ0YCBhbmQgYHBpcGFwb19jbG9uZWAgYXMgY2FuZGlkYXRlcyB0b28uXG5cblNvLCBsZXQncyByZWZpbmUgdGhpcyBsaXN0LCBmb2N1c2luZyBvbiB0aGUgbW9zdCBwcm9taXNpbmcgb25lczogYGlwX3NldF9kdW1wX2RvYCwgYGN0bmV0bGlua19hbGxvY19leHBlY3RgLCBgc2V0X2V4cGVjdGVkX3J0cF9ydGNwYCwgYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAsIGBuZnFubF9tYW5nbGVgLCBgbmZ0X2ZpYl92YWxpZGF0ZWAsIGBuZnRfZmliX25ldGRldl92YWxpZGF0ZWAsIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAsIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAsIGBuZnRfcGlwYXBvX2luc2VydGAsIGFuZCBgcGlwYXBvX2Nsb25lYC4gTm93IGl0J3MgdGltZSB0byBjaGVjayBpZiB0aGVzZSBhcmUgZXhwb3J0ZWQgc3ltYm9scyBhbmQgaWYgdGhleSBhcmUgZXZlbiBzdWl0YWJsZSBmb3IgZnV6emluZyBpbiBwcmFjdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMTcsIk91dHB1dFRva2VucyI6MTEyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA3OjAyLjAyNjQ0NjU0N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3MTUyOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihpcF9zZXRfZHVtcF9kb3xjdG5ldGxpbmtfYWxsb2NfZXhwZWN0fHNldF9leHBlY3RlZF9ydHBfcnRjcHxuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3l8bmZxbmxfbWFuZ2xlfG5mdF9maWJfdmFsaWRhdGV8bmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGV8bmZ0X3BheWxvYWRfc2V0X2luaXR8bmZ0X3BheWxvYWRfc2V0X2V2YWx8bmZ0X3BpcGFwb19pbnNlcnR8cGlwYXBvX2Nsb25lKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTQ3Nj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE0Nzc6aXBfc2V0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE0Nzgte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE1NzA9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxNTcxOmlwX3NldF9kdW1wX2RvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTU3Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTcxMj1zdGF0aWMgaW50IGlwX3NldF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTcyMC1cXHRcXHRcXHQuc3RhcnQgPSBpcF9zZXRfZHVtcF9zdGFydCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTcyMTpcXHRcXHRcXHQuZHVtcCA9IGlwX3NldF9kdW1wX2RvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxNzIyOlxcdFxcdFxcdC5kb25lID0gaXBfc2V0X2R1bXBfZG9uZSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTcyMy1cXHRcXHR9O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTI2MzA9c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MjYzMTpjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI2MzItXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICphc3NpZ25faGVscGVyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTI4NTY9Y3RuZXRsaW5rX2dsdWVfYXR0YWNoX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjg4Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6Mjg4ODpcXHRleHAgPSBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgKiljZGEsIGN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yODg5LVxcdFxcdFxcdFxcdCAgICAgYXNzaWduX2hlbHBlciwgXFx1MDAyNnR1cGxlLCBcXHUwMDI2bWFzayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzUxOT1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNTIwOmN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM1MjEtXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICphc3NpZ25faGVscGVyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM1OTE9Y3RuZXRsaW5rX2NyZWF0ZV9leHBlY3Qoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM2MjItXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNjIzOlxcdGV4cCA9IGN0bmV0bGlua19hbGxvY19leHBlY3QoY2RhLCBjdCwgTlVMTCwgXFx1MDAyNnR1cGxlLCBcXHUwMDI2bWFzayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM2MjQtXFx0aWYgKElTX0VSUihleHApKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYz05MDk9c3RhdGljIHZvaWQgZmx1c2hfZXhwZWN0YXRpb25zKHN0cnVjdCBuZl9jb25uICpjdCwgYm9vbCBtZWRpYSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTkyOC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYzo5Mjk6c3RhdGljIGludCBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtOTMwLVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZGF0YW9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jPTExMTY9c3RhdGljIGludCBwcm9jZXNzX3NkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTExOTgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM6MTE5OTpcXHRcXHRyZXQgPSBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3Aoc2tiLCBwcm90b2ZmLCBkYXRhb2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTEyMDAtXFx0XFx0XFx0XFx0XFx0ICAgIGRwdHIsIGRhdGFsZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTE0NT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxNDY6bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwZWN0X3BvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE0Ny1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTc4Om5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXRbTkZDVEhfUE9MSUNZX1NFVF9NQVgrMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNzktXFx0W05GQ1RIX1BPTElDWV9TRVRfTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xODM9bmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE5MC1cXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTkxOlxcdFxcdFxcdFxcdFxcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE5Mi1cXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yMDgtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyMDk6XFx0XFx0cmV0ID0gbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KFxcdTAwMjZoZWxwZXItXFx1MDAzZWV4cGVjdF9wb2xpY3lbaV0sXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yMTAtXFx0XFx0XFx0XFx0XFx0XFx0ICB0YltORkNUSF9QT0xJQ1lfU0VUK2ldKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzY4PXN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3NS1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzc2OlxcdFxcdFxcdFxcdFxcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3Ny1cXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMzU0PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEzNTU6bmZxbmxfbWFuZ2xlKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCBpbnQgZGlmZilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEzNTYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNzExPXN0YXRpYyBpbnQgbmZxbmxfcmVjdl92ZXJkaWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE3NjAtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNzYxOlxcdFxcdGlmIChuZnFubF9tYW5nbGUobmxhX2RhdGEobmZxYVtORlFBX1BBWUxPQURdKSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE3NjItXFx0XFx0XFx0XFx0IHBheWxvYWRfbGVuLCBlbnRyeSwgZGlmZikgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmliLmM9Mjc9RVhQT1JUX1NZTUJPTChuZnRfZmliX3BvbGljeSk7XFxubmV0L25ldGZpbHRlci9uZnRfZmliLmMtMjgtXFxubmV0L25ldGZpbHRlci9uZnRfZmliLmM6Mjk6aW50IG5mdF9maWJfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTMwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTcyLX1cXG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYzo3MzpFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmliX3ZhbGlkYXRlKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYy03NC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9pbmV0LmM9NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2ZpYl9pbmV0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9pbmV0LmMtNTAtXFx0LmR1bXBcXHRcXHQ9IG5mdF9maWJfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfaW5ldC5jOjUxOlxcdC52YWxpZGF0ZVxcdD0gbmZ0X2ZpYl92YWxpZGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfaW5ldC5jLTUyLX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmM9MjE9c3RhdGljIHZvaWQgbmZ0X2ZpYl9uZXRkZXZfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMtNTItXFxubmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jOjUzOnN0YXRpYyBpbnQgbmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMtNTQtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jPTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYy04Ni1cXHQuZHVtcFxcdFxcdD0gbmZ0X2ZpYl9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYzo4NzpcXHQudmFsaWRhdGVcXHQ9IG5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYy04OC19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwNTk9c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDc5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgwOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4MS1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNjktXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzA6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcxLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMjcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX3NldF9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI3My1cXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkX3NldCkpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjc0OlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3NTpcXHQuaW5pdFxcdFxcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzYtXFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9kdW1wLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTEyNDM9c3RhdGljIGJvb2wgbmZ0X3BpcGFwb190cmFuc2FjdGlvbl9tdXRleF9oZWxkKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI1My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI1NDpzdGF0aWMgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKnBpcGFwb19jbG9uZShzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqb2xkKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI1NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xMjYyPXN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqcGlwYXBvX21heWJlX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI3MS1cXHRcXHRcXHRcXHQgICAgICBuZnRfcGlwYXBvX3RyYW5zYWN0aW9uX211dGV4X2hlbGQoc2V0KSk7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjEyNzI6XFx0cHJpdi1cXHUwMDNlY2xvbmUgPSBwaXBhcG9fY2xvbmUobSk7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyNzMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI3Ny0vKipcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI3ODogKiBuZnRfcGlwYXBvX2luc2VydCgpIC0gVmFsaWRhdGUgYW5kIGluc2VydCByYW5nZWQgZWxlbWVudHNcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI3OS0gKiBAbmV0OlxcdE5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI4NS0gKi9cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI4NjpzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI4Ny1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTQyNS0vKipcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTQyNjogKiBwaXBhcG9fY2xvbmUoKSAtIENsb25lIG1hdGNoaW5nIGRhdGEgdG8gY3JlYXRlIG5ldyB3b3JraW5nIGNvcHlcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTQyNy0gKiBAb2xkOlxcdEV4aXN0aW5nIG1hdGNoaW5nIGRhdGFcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNDMwLSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxNDMxOnN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqcGlwYXBvX2Nsb25lKHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICpvbGQpXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE0MzIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTE4NzU9c3RhdGljIHZvaWQgbmZ0X3BpcGFwb19hYm9ydChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE4OTItICogaW4gdXNlIGZvciBsb29rdXBzLCBhbmQgbm90IGRpcmVjdGx5IGluc2VydGVkIGludG8gY3VycmVudCBsb29rdXAgZGF0YS4gQm90aFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxODkzOiAqIG5mdF9waXBhcG9faW5zZXJ0KCkgYW5kIG5mdF9waXBhcG9fYWN0aXZhdGUoKSBhcmUgY2FsbGVkIG9uY2UgZm9yIGVhY2hcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTg5NC0gKiBlbGVtZW50LCBoZW5jZSB3ZSBjYW4ndCBwdXJwb3NlIGVpdGhlciBvbmUgYXMgYSByZWFsIGNvbW1pdCBvcGVyYXRpb24uXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MjQxOD1jb25zdCBzdHJ1Y3QgbmZ0X3NldF90eXBlIG5mdF9zZXRfcGlwYXBvX3R5cGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMjQyMi1cXHRcXHQubG9va3VwXFx0XFx0PSBuZnRfcGlwYXBvX2xvb2t1cCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MjQyMzpcXHRcXHQuaW5zZXJ0XFx0XFx0PSBuZnRfcGlwYXBvX2luc2VydCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMjQyNC1cXHRcXHQuYWN0aXZhdGVcXHQ9IG5mdF9waXBhcG9fYWN0aXZhdGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MjQ0Mz1jb25zdCBzdHJ1Y3QgbmZ0X3NldF90eXBlIG5mdF9zZXRfcGlwYXBvX2F2eDJfdHlwZSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0yNDQ3LVxcdFxcdC5sb29rdXBcXHRcXHQ9IG5mdF9waXBhcG9fYXZ4Ml9sb29rdXAsXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjI0NDg6XFx0XFx0Lmluc2VydFxcdFxcdD0gbmZ0X3BpcGFwb19pbnNlcnQsXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTI0NDktXFx0XFx0LmFjdGl2YXRlXFx0PSBuZnRfcGlwYXBvX2FjdGl2YXRlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oPTEyOD1zdHJ1Y3QgbmZ0X3BpcGFwb19zY3JhdGNoIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaC0xMzMtXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oOjEzNDplbnVtIG5mdF9waXBhcG9fY2xvbmVfc3RhdGUge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaC0xMzUtXFx0TkZUX1BJUEFQT19DTE9ORV9ORVcsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmg9MTQ5PXN0cnVjdCBuZnRfcGlwYXBvX21hdGNoIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmgtMTUwLVxcdHU4IGZpZWxkX2NvdW50O1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaDoxNTE6XFx0ZW51bSBuZnRfcGlwYXBvX2Nsb25lX3N0YXRlIHN0YXRlOjg7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oLTE1Mi1cXHR1bnNpZ25lZCBpbnQgYnNpemVfbWF4O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNzowMi4zMDM2MDk0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTUzODcyOTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgUmVsZXZhbnQgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb24gc3ltYm9scyBpbXBhY3RlZCBieSB0aGVzZSBjaGFuZ2VzLiBJIHN0YXJ0ZWQgd2l0aCBhIGJyb2FkZXIgbGlzdDogYGlwX3NldF9kdW1wX2RvYCwgYGN0bmV0bGlua19hbGxvY19leHBlY3RgLCBgc2V0X2V4cGVjdGVkX3J0cF9ydGNwYCwgYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAsIGBuZnFubF9tYW5nbGVgLCBgbmZ0X2ZpYl92YWxpZGF0ZWAsIGBuZnRfZmliX25ldGRldl92YWxpZGF0ZWAsIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAsIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAsIGBuZnRfcGlwYXBvX2luc2VydGAsIGFuZCBgcGlwYXBvX2Nsb25lYC5cblxuVGhlbiwgSSBzdGFydGVkIHJlZmluaW5nIHRoaXMgbGlzdC4gSSByZWFsaXplZCB0aGF0IHNldmVyYWwgb2YgdGhvc2UgYXJlIHN0YXRpYyBhbmQgdXNlZCB3aXRoaW4gb3RoZXIgc3RhdGljIGZ1bmN0aW9ucy4gU28sIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgb25lcyB3aXRoIGJyb2FkZXIgaW1wbGljYXRpb25zIG9yIHRoYXQgcmVwcmVzZW50IHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBUaGF0IGxlZCBtZSB0byBjb25zaWRlciBhIHNlY29uZCBzZXQ6IGBpcF9zZXRfZHVtcF9kb25lYCwgYG5mX2N0X2V4cGVjdF9hbGxvY2AsIGBuZl9jdF9leHBlY3RfaW5pdGAsIGBuZnFubF92YWxpZGF0ZV93cml0ZWAsIGFuZCBleHBhbmRlZCBpdCBhZ2Fpbi4gSSBrbm93IEkgaGF2ZSB0byBjb3ZlciB0aGUgY29yZSBjaGFuZ2VzLlxuXG5Ob3csIEknbSB0aGlua2luZyBvZiBhIGNvbmNpc2UsIHJlcHJlc2VudGF0aXZlIGxpc3QgdGhhdCBhdm9pZHMgdGhlIG1vc3QgaG90LXBhdGggZnVuY3Rpb25zLCBidXQgY2FwdHVyZXMgdGhlIGVzc2VuY2Ugb2YgdGhlIGNoYW5nZXMuIFRoZSBmaW5hbCBsaXN0IGluY2x1ZGVzOiBgaXBfc2V0X2R1bXBfZG9uZWAsIGBpcF9zZXRfZHVtcF9kb2AsIGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YCwgYHNldF9leHBlY3RlZF9ydHBfcnRjcGAsIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLCBgbmZxbmxfbWFuZ2xlYCwgYG5mdF9maWJfdmFsaWRhdGVgLCBgbmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGVgLCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgLCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLCBhbmQgYG5mdF9waXBhcG9faW5zZXJ0YC5cblxuTmV4dCwgSSBuZWVkIHRvIGFuYWx5emUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5pdGlhbCBsaXN0IEkgaGFkIHdhczogYE5GX0NPTk5UUkFDS2AsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NUX05FVExJTktgLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLCBgTkZfVEFCTEVTYCwgYE5GVF9GSUJgLCBgTkZUX0ZJQl9ORVRERVZgLCBhbmQgYElQX1NFVGAuXG5cbkkgaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcy4gSSBjaGVja2VkIGBORl9DT05OVFJBQ0tfRVhQRUNUYCBhbmQgdGhlIHNvdXJjZSBmaWxlcyBpbmNsdWRlZC4gVGhhdCBtYWRlIG1lIGNvbnNpZGVyIGhvdyBgTkZUX0ZJQl9ORVRERVZgIHJlbGF0ZWQgdG8gYE5GX1RBQkxFU2AuIEFuZCBJIGNoZWNrZWQgYE5GVF9QSVBBUE9gIHRvby4gSSBhbSBzYXRpc2ZpZWQgdGhlIGNvbmZpZ3VyYXRpb25zIGxpc3RlZCBhcmUgdGhlIHJpZ2h0IHNldCBvZiByZWxldmFudCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwODUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDc6MTMuODQyMzQ0MjVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mzk5NTM3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ09OTlRSQUNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cXHRib29sIFxcXCJTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVxcdGJvb2wgXFxcIkNvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cXHRib29sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVxcdHRyaXN0YXRlIFxcXCJBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVxcdHRyaXN0YXRlIFxcXCJGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVxcdHRyaXN0YXRlIFxcXCJILjMyMyBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cXHR0cmlzdGF0ZSBcXFwiSVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVxcdHRyaXN0YXRlXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXFx0dHJpc3RhdGUgXFxcIk5ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cXHR0cmlzdGF0ZSBcXFwiU05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cXHR0cmlzdGF0ZSBcXFwiUFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVxcdHRyaXN0YXRlIFxcXCJTQU5FIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVxcdHRyaXN0YXRlIFxcXCJTSVAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVxcdHRyaXN0YXRlIFxcXCJURlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA3OjE0LjAyNjM0ODM2MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA0MTMyODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGluaXRpYWwgaW1wcmVzc2lvbjogdGhpbmdzIHNlZW0gdG8gYmUgaW4gb3JkZXIuIFRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgZGVzaWduIGFyZSBwcmVzZW50aW5nIHdlbGwuIEJlZm9yZSBnZXR0aW5nIHRvbyBmYXIgYWhlYWQsIEknbSB0aGlua2luZyBsZXQncyBwaXZvdCB0byB0aGUgbml0dHktZ3JpdHR5IGFuZCBmb2N1cyBvdXIgYXR0ZW50aW9uIHNwZWNpZmljYWxseSBvbiB0aGUgYE5GX1RBQkxFU2AgaW1wbGVtZW50YXRpb24uIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgc3lzdGVtLCB0aGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgbGl2ZXMuIFdlJ2xsIGV4YW1pbmUgdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25zLCBjaGFpbiBkZWZpbml0aW9ucywgcnVsZXNldHMsIGFuZCBob3cgZXZlcnl0aGluZyBpcyBjb25uZWN0ZWQuIFRoYXQgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciBjYXRjaGluZyBwb3RlbnRpYWwgc3VidGxlIGlzc3Vlcywgb3B0aW1pemF0aW9ucywgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gTm8gYXNzdW1wdGlvbnM7IGl0J3MgdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDc6MTcuNDMwNDg1OTYyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzY0Nzc2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNzoxNy41MjQxNDMzNDNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU4MjcwNjk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIE5ldHdvcmsgRmlsdGVyaW5nIEZlYXR1cmVzKipcblxuT2theSwgSSBuZWVkIHRvIG1ha2UgYSBxdWljayBhZGRpdGlvbiB0byBlbnN1cmUgYnJvYWQgY29tcGF0aWJpbGl0eS4gSSBzaG91bGQgcHJvYWN0aXZlbHkgaW5jbHVkZSBgTkZfVEFCTEVTX05FVERFVmAgYW5kIGBORl9UQUJMRVNfSU5FVGAgaW4gbXkgY29uZmlndXJhdGlvbiBqdXN0IHRvIGJlIHNhZmUuIEl0J3MgcG9zc2libGUgdGhhdCBgbmZ0X2ZpYl9uZXRkZXYuY2AgYW5kIGBuZnRfZmliX2luZXQuY2AgbWlnaHQgaGF2ZSBkZXBlbmRlbmNpZXMgb24gdGhlbSwgYW5kIEkgZG9uJ3Qgd2FudCB0byBydW4gaW50byBhbnkgdW5leHBlY3RlZCBpc3N1ZXMgbGF0ZXIuIE5vdywgaG9sZCBvbiwgSSByZWNhbGwgdGhhdCBgbmZ0X2ZpYl9uZXRkZXYuY2Agc3BlY2lmaWNhbGx5IHJlbGllcyBvbiBgTkZUX0ZJQl9ORVRERVZgLiBBbHJpZ2h0LCBzbyB0aGF0J3MgdGhlIGtleS4gTGV0IG1lIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORlRfRklCX05FVERFVmAgdG8gY29uZmlybSBldmVyeXRoaW5nIGlzIGluIG9yZGVyIGFuZCB0aGF0IEknbSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIHNldCB1cCBjb3JyZWN0bHkgYmVmb3JlIEkgY29udGludWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzIzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDc6MjMuMTA2ODUzNzgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzY5NDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0ZJQl9ORVRERVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NzQ9Y29uZmlnIE5GVF9GV0RfTkVUREVWXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2ODA6Y29uZmlnIE5GVF9GSUJfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY4MS1cXHRkZXBlbmRzIG9uIE5GVF9GSUJfSVBWNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNzoyMy4yMDA1NjYwMTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1MDU2NjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTmVlZCBmb3IgYE5GVF9GSUJfSVBWNGAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBORlRfRklCX0lQVjRgLiBUaGF0J3MgYSBrZXkgZWxlbWVudCBpbiB0aGUgYG5mdGFibGVzYCBmcmFtZXdvcmsgcmVsYXRlZCB0byBJUFY0IGZvcndhcmRpbmcgaW5mb3JtYXRpb24gYmFzZSAoRklCKSBsb29rdXBzLiBFc3NlbnRpYWxseSwgaXQgZGVhbHMgd2l0aCByb3V0aW5nIGRlY2lzaW9ucy4gVGhlIGZhY3QgdGhhdCBpdCdzIGV2ZW4gY29taW5nIHVwIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSB0cmFkaXRpb25hbCByb3V0aW5nIHRhYmxlcyBhcmUgZWl0aGVyIGluYWRlcXVhdGUgb3Igd2UncmUgbG9va2luZyBmb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UncmUgZWl0aGVyIGJ1aWxkaW5nIHNvbWUga2luZCBvZiBjdXN0b20gcm91dGluZyBsb2dpYywgaW1wbGVtZW50aW5nIHBvbGljeS1iYXNlZCByb3V0aW5nLCBvciBwZXJoYXBzIHRyeWluZyB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBpbiBhIGhpZ2hseSBzcGVjaWZpYyBuZXR3b3JrIHNjZW5hcmlvLiBUaGUgaW5jbHVzaW9uIG9mIHRoZSBcIkZJQlwiIGlzIGEgcmVkIGZsYWcgaW4gdGhlIGJlc3Qgd2F5LCBhbmQgc3VnZ2VzdHMgd2UncmUgd29ya2luZyB3aXRoIHNvbWV0aGluZyByZWxhdGl2ZWx5IGxvdy1sZXZlbC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBzcGVjaWZpYyBtb2R1bGUgaXMgcmVxdWlyZWQsIGJ1dCBmaXJzdCwgSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgTkZUX0ZJQl9JUFY0YCB0byBjb25maXJtIGV4YWN0bHkgd2hhdCBmdW5jdGlvbmFsaXR5IGl0IHByb3ZpZGVzIGFuZCB3aGF0IGRlc2lnbiBkZWNpc2lvbnMgd2VyZSBtYWRlLCBzbyBJIGNhbiBzdGFydCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbiBpbiB0aGUgd2lkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNzoyNi44NTExMzYxNzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTAyOTM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0ZJQl9JUFY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQ3PWNvbmZpZyBORlRfRFVQX0lQVjRcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTUzLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjU0OmNvbmZpZyBORlRfRklCX0lQVjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy01NS1cXHRzZWxlY3QgTkZUX0ZJQlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNzoyNy4wMTIxNzUzNjJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExODM4MzI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYE5GVF9GSUJfSVBWNmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJMZXQncyBjaGVjayBgTkZUX0ZJQl9JUFY2YC5cIiBHaXZlbiB0aGUgY29udGV4dCwgdGhpcyBsaWtlbHkgbWVhbnMgSSdtIHRyb3VibGVzaG9vdGluZywgYW5hbHl6aW5nLCBvciBwZXJoYXBzIG9wdGltaXppbmcgYSBuZXR3b3JrIHNldHVwIHRoYXQgaW52b2x2ZXMgSVB2NiByb3V0aW5nIGFuZCBmb3J3YXJkaW5nIHRhYmxlcy4gVGhlIHNwZWNpZmljIG5hbWluZyBjb252ZW50aW9uIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxpa2VseSB1c2luZyBgbmZ0YWJsZXNgIChvciB0aGUgb2xkZXIgYGlwdGFibGVzYCB3aXRoIHNvbWUgY29tcGF0aWJpbGl0eSBsYXllcnMpLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBhIG1pc2NvbmZpZ3VyZWQgcnVsZSwgb3IgbWF5YmUgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBjb21wbGV4IGZpcmV3YWxsL3JvdXRpbmcgc2V0dXAuIFRoZSBmYWN0IHRoYXQgSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIElQdjYgRklCIGluZGljYXRlcyBhIGNsZWFyIGZvY3VzIG9uIHRoZSBJUHY2IHBvcnRpb24gb2YgdGhlIG5ldHdvcmsgYXJjaGl0ZWN0dXJlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTQyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDc6MzIuMTMwNTYyOTM1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ3MTc5MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9GSUJfSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgTkZUX0RVUF9JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00OS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpjb25maWcgTkZUX0ZJQl9JUFY2XFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIm5mX3RhYmxlcyBmaWIgLyBpcHY2IHJvdXRlIGxvb2t1cCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNzozMi4yNjUzMDE1OTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0MTY1NjAwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTmV0ZmlsdGVyIFBhdGNoIFJldmlldyoqXG5cbk9rYXksIHNvIHdlJ3JlIGFkZGluZyBgTkZUX0ZJQl9JUFY0YCBhbmQgYE5GVF9GSUJfSVBWNmAuIE1ha2VzIHNlbnNlLiBOb3csIGxldCdzIHN1bW1hcml6ZSB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyByZXF1aXJlZCB0byBtYWtlIHN1cmUgd2UndmUgZ290IGV2ZXJ5dGhpbmcgaW4gb3JkZXI6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DVF9ORVRMSU5LYCwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCwgYE5GX1RBQkxFU2AsIGBORlRfRklCX0lQVjRgLCBgTkZUX0ZJQl9JUFY2YCwgYE5GVF9GSUJfTkVUREVWYCwgYW5kIGBJUF9TRVRgLlxuXG5MZXQncyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiBgTkZfVEFCTEVTX05FVERFVmAgYW5kIGBORl9UQUJMRVNfSU5FVGAgc2luY2UgdGhleSBjYW4gc29tZXRpbWVzIGJlIHRyaWNreS4gQWgsIHJpZ2h0LCBgTkZUX0ZJQl9ORVRERVZgIGRlcGVuZHMgb24gYE5GVF9GSUJfSVBWNGAsIGFuZCBgTkZUX0ZJQl9JTkVUYCBkZXBlbmRzIG9uIGBORl9UQUJMRVNfSU5FVGAuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGdvaW5nIHRvIGluY2x1ZGUgYm90aCBgTkZfVEFCTEVTX05FVERFVmAgYW5kIGBORl9UQUJMRVNfSU5FVGAuIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2UgY29yZSBjb21wb25lbnRzLlxuXG5Ob3csIGxldCdzIGdldCBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBXZSBoYXZlIGBpcF9zZXRfZHVtcF9kb2AsIGBpcF9zZXRfZHVtcF9kb25lYCwgYGN0bmV0bGlua19hbGxvY19leHBlY3RgLCBgc2V0X2V4cGVjdGVkX3J0cF9ydGNwYCwgYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAsIGBuZnFubF9tYW5nbGVgLCBgbmZ0X2ZpYl92YWxpZGF0ZWAsIGBuZnRfZmliX25ldGRldl92YWxpZGF0ZWAsIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAsIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAsIGFuZCBgbmZ0X3BpcGFwb19pbnNlcnRgLiBMb29rcyBsaWtlIHRoaXMgaXMgYSBzb2xpZCBsaXN0IGNvdmVyaW5nIHRoZSBhcmVhcyB3aGVyZSBjaGFuZ2VzIHdlcmUgZGlyZWN0bHkgaW1wbGVtZW50ZWQgb3Igd2hlcmUgdGhlIGxvZ2ljIGhhcyBiZWVuIHVwZGF0ZWQsIHJpZ2h0IHdoZXJlIGl0IG1hdHRlcnMuXG5cbkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc29tZSBpbXBvcnRhbnQsIHF1aXRlIGRlZXAgY2hhbmdlcyB0byBOZXRmaWx0ZXIuIFdlIGhhdmUgbmV3IHZhbGlkYXRpb24gc3RlcHMgZm9yIHBheWxvYWQgd3JpdGVzIGFuZCBJUC9JUHY2IGhlYWRlcnMgYmVmb3JlIG1hbmdsaW5nLCB0aGF0J3MgY3J1Y2lhbCBmb3Igc2VjdXJpdHkuIFRoZW4gdGhlcmUncyB0aGUgZml4IGZvciB0aGUgU0lQIGNvbm50cmFjayBleHBlY3RhdGlvbiBidWcsIGEgc3RhdGUgdHJhY2tpbmcgYWRkaXRpb24gZm9yIHBpcGFwbyBzZXQgY2xvbmVzIHRoYXQgc2hvdWxkIGhlbHAgaGFuZGxlIGFib3J0cyBtb3JlIHJvYnVzdGx5LCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gY29ubnRyYWNrIGV4cGVjdGF0aW9uIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBBbGwgb2YgdGhlc2UgYWZmZWN0IGNvcmUgTmV0ZmlsdGVyIGxvZ2ljLiBXZSdyZSB0YWxraW5nIE5ldGxpbmsgcXVldWUsIG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcsIGFuZCBwaXBhcG8gc2V0cywgYW5kIHRoYXQncyBhbGwgc3R1ZmYgdGhhdCB1c2Vyc3BhY2UgaGFzIGRpcmVjdCBhY2Nlc3MgdG8sIHNvIHRoaXMgbmVlZHMgdG8gYmUgcmlnb3JvdXNseSB0ZXN0ZWQuIFdlIGFic29sdXRlbHkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgbm90IGludHJvZHVjaW5nIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBoZXJlLiBXZSBoYXZlIHRvIGZ1enogaXQgaGVhdmlseS5cblxuUmlnaHQsIEknbSBnb2luZyB0byBydW4gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cgdG8gc2VlIGhvdyB0aGUgY2hhbmdlIGltcGFjdHMgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0ODksIk91dHB1dFRva2VucyI6MzU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA3OjQzLjY4MTg2NTY0NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDI3NzU5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LX0hFTFBFUlwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfUVVFVUVcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX0lORVRcIixcbiAgICBcIk5GX1RBQkxFU19ORVRERVZcIixcbiAgICBcIk5GVF9GSUJfSVBWNFwiLFxuICAgIFwiTkZUX0ZJQl9JUFY2XCIsXG4gICAgXCJORlRfRklCX05FVERFVlwiLFxuICAgIFwiSVBfU0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfc2V0X2R1bXBfZG9cIixcbiAgICBcImlwX3NldF9kdW1wX2RvbmVcIixcbiAgICBcImN0bmV0bGlua19hbGxvY19leHBlY3RcIixcbiAgICBcInNldF9leHBlY3RlZF9ydHBfcnRjcFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5XCIsXG4gICAgXCJuZnFubF9tYW5nbGVcIixcbiAgICBcIm5mdF9maWJfdmFsaWRhdGVcIixcbiAgICBcIm5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfaW5pdFwiLFxuICAgIFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIixcbiAgICBcIm5mdF9waXBhcG9faW5zZXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLiBJdCBhZGRzIHZhbGlkYXRpb24gZm9yIHBheWxvYWQgd3JpdGVzIGFuZCBJUC9JUHY2IGhlYWRlcnMgYmVmb3JlIG1hbmdsaW5nLCBmaXhlcyBhIGJ1ZyBpbiBTSVAgY29ubnRyYWNrIGV4cGVjdGF0aW9uLCBhZGRzIHN0YXRlIHRyYWNraW5nIGZvciBwaXBhcG8gc2V0IGNsb25lcyB0byBwcm9wZXJseSBoYW5kbGUgYWJvcnRzLCBhbmQgbW9kaWZpZXMgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBsb2dpYywgbmV0bGluayBxdWV1ZSwgbmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZywgYW5kIHBpcGFwbyBzZXRzLCB3aGljaCBhcmUgYWxsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LX0hFTFBFUlwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfUVVFVUVcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX0lORVRcIixcbiAgICBcIk5GX1RBQkxFU19ORVRERVZcIixcbiAgICBcIk5GVF9GSUJfSVBWNFwiLFxuICAgIFwiTkZUX0ZJQl9JUFY2XCIsXG4gICAgXCJORlRfRklCX05FVERFVlwiLFxuICAgIFwiSVBfU0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfc2V0X2R1bXBfZG9cIixcbiAgICBcImlwX3NldF9kdW1wX2RvbmVcIixcbiAgICBcImN0bmV0bGlua19hbGxvY19leHBlY3RcIixcbiAgICBcInNldF9leHBlY3RlZF9ydHBfcnRjcFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5XCIsXG4gICAgXCJuZnFubF9tYW5nbGVcIixcbiAgICBcIm5mdF9maWJfdmFsaWRhdGVcIixcbiAgICBcIm5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfaW5pdFwiLFxuICAgIFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIixcbiAgICBcIm5mdF9waXBhcG9faW5zZXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLiBJdCBhZGRzIHZhbGlkYXRpb24gZm9yIHBheWxvYWQgd3JpdGVzIGFuZCBJUC9JUHY2IGhlYWRlcnMgYmVmb3JlIG1hbmdsaW5nLCBmaXhlcyBhIGJ1ZyBpbiBTSVAgY29ubnRyYWNrIGV4cGVjdGF0aW9uLCBhZGRzIHN0YXRlIHRyYWNraW5nIGZvciBwaXBhcG8gc2V0IGNsb25lcyB0byBwcm9wZXJseSBoYW5kbGUgYWJvcnRzLCBhbmQgbW9kaWZpZXMgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBsb2dpYywgbmV0bGluayBxdWV1ZSwgbmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZywgYW5kIHBpcGFwbyBzZXRzLCB3aGljaCBhcmUgYWxsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwh22[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 05:56:58 +0000 UTC FinishedAt: 2026-06-30 06:07:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CONNTRACK_SIP", "NF_CT_NETLINK", "NF_CT_NETLINK_HELPER", "NETFILTER_NETLINK_QUEUE", "NF_TABLES", "NF_TABLES_INET", "NF_TABLES_NETDEV", "NFT_FIB_IPV4", "NFT_FIB_IPV6", "NFT_FIB_NETDEV", "IP_SET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NF_CONNTRACK_SIP", "NF_CT_NETLINK", "NF_CT_NETLINK_HELPER", "NETFILTER_NETLINK_QUEUE", "NF_TABLES", "NF_TABLES_INET", "NF_TABLES_NETDEV", "NFT_FIB_IPV4", "NFT_FIB_IPV6", "NFT_FIB_NETDEV", "IP_SET" ], "series_id": "a9040ae6-6a1e-4d82-b90c-bf8de413398b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_set_dump_do", "ip_set_dump_done", "ctnetlink_alloc_expect", "set_expected_rtp_rtcp", "nfnl_cthelper_expect_policy", "nfqnl_mangle", "nft_fib_validate", "nft_fib_netdev_validate", "nft_payload_set_init", "nft_payload_set_eval", "nft_pipapo_insert" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU0lQJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOS19IRUxQRVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfUVVFVUUmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JTkVUJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0OywKICAgICYjMzQ7TkZUX0ZJQl9JUFY0JiMzNDssCiAgICAmIzM0O05GVF9GSUJfSVBWNiYjMzQ7LAogICAgJiMzNDtORlRfRklCX05FVERFViYjMzQ7LAogICAgJiMzNDtJUF9TRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9zZXRfZHVtcF9kbyYjMzQ7LAogICAgJiMzNDtpcF9zZXRfZHVtcF9kb25lJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19hbGxvY19leHBlY3QmIzM0OywKICAgICYjMzQ7c2V0X2V4cGVjdGVkX3J0cF9ydGNwJiMzNDssCiAgICAmIzM0O25mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeSYjMzQ7LAogICAgJiMzNDtuZnFubF9tYW5nbGUmIzM0OywKICAgICYjMzQ7bmZ0X2ZpYl92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfZmliX25ldGRldl92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfcGlwYXBvX2luc2VydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIEl0IGFkZHMgdmFsaWRhdGlvbiBmb3IgcGF5bG9hZCB3cml0ZXMgYW5kIElQL0lQdjYgaGVhZGVycyBiZWZvcmUgbWFuZ2xpbmcsIGZpeGVzIGEgYnVnIGluIFNJUCBjb25udHJhY2sgZXhwZWN0YXRpb24sIGFkZHMgc3RhdGUgdHJhY2tpbmcgZm9yIHBpcGFwbyBzZXQgY2xvbmVzIHRvIHByb3Blcmx5IGhhbmRsZSBhYm9ydHMsIGFuZCBtb2RpZmllcyBjb25udHJhY2sgZXhwZWN0YXRpb24gYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLCBuZXRsaW5rIHF1ZXVlLCBuZnRhYmxlcyBwYXlsb2FkIG1hbmdsaW5nLCBhbmQgcGlwYXBvIHNldHMsIHdoaWNoIGFyZSBhbGwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU4NTgyYWY4MDg1MmMzMWE2OTZiOWFkYTJhOWI3MTQxYmJkNjBkOGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwNjowNjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcbmluZGV4IGE1MzFiNjU0YjhkOTY0Li42Y2ZhZDE1MmQ3ZDFiYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG5AQCAtMTQ4MCw3ICYjNDM7MTQ4MCwxMSBAQCBpcF9zZXRfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdFx0c3RydWN0IGlwX3NldF9uZXQgKmluc3QgPVxuIFx0XHRcdChzdHJ1Y3QgaXBfc2V0X25ldCAqKWNiLVx1MDAzZWFyZ3NbSVBTRVRfQ0JfTkVUXTtcbiBcdFx0aXBfc2V0X2lkX3QgaW5kZXggPSAoaXBfc2V0X2lkX3QpY2ItXHUwMDNlYXJnc1tJUFNFVF9DQl9JTkRFWF07XG4tXHRcdHN0cnVjdCBpcF9zZXQgKnNldCA9IGlwX3NldF9yZWZfbmV0bGluayhpbnN0LCBpbmRleCk7XG4mIzQzO1x0XHRzdHJ1Y3QgaXBfc2V0ICpzZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0c2V0ID0gaXBfc2V0X3JlZl9uZXRsaW5rKGluc3QsIGluZGV4KTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0XHRpZiAoc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNldXJlZilcbiBcdFx0XHRzZXQtXHUwMDNldmFyaWFudC1cdTAwM2V1cmVmKHNldCwgY2IsIGZhbHNlKTtcbkBAIC0xNjg2LDcgJiM0MzsxNjkwLDkgQEAgaXBfc2V0X2R1bXBfZG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIHJlbGVhc2VfcmVmY291bnQ6XG4gXHQvKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igb3Igc2V0IGlzIGRvbmUsIHJlbGVhc2Ugc2V0ICovXG4gXHRpZiAocmV0IHx8ICFjYi1cdTAwM2VhcmdzW0lQU0VUX0NCX0FSRzBdKSB7XG4mIzQzO1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdHNldCA9IGlwX3NldF9yZWZfbmV0bGluayhpbnN0LCBpbmRleCk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0aWYgKHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZXVyZWYpXG4gXHRcdFx0c2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNldXJlZihzZXQsIGNiLCBmYWxzZSk7XG4gXHRcdHByX2RlYnVnKFwmIzM0O3JlbGVhc2Ugc2V0ICVzXFxuXCYjMzQ7LCBzZXQtXHUwMDNlbmFtZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xuaW5kZXggMzg2MzBjNWUwMDZmMDguLjdhZTY4ZDYwNTg2YTIzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXG5AQCAtMzA2LDcgJiM0MzszMDYsNyBAQCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqbmZfY3RfZXhwZWN0X2FsbG9jKHN0cnVjdCBuZl9jb25uICptZSlcbiB7XG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqbmV3O1xuIFxuLVx0bmV3ID0ga21lbV9jYWNoZV9hbGxvYyhuZl9jdF9leHBlY3RfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRuZXcgPSBrbWVtX2NhY2hlX3phbGxvYyhuZl9jdF9leHBlY3RfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghbmV3KVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbkBAIC0zOTEsNiAmIzQzOzM5MSw3IEBAIHZvaWQgbmZfY3RfZXhwZWN0X2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdW5zaWduZWQgaW50IGNsYXNzLFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXG4gXHRtZW1zZXQoXHUwMDI2ZXhwLVx1MDAzZXNhdmVkX2FkZHIsIDAsIHNpemVvZihleHAtXHUwMDNlc2F2ZWRfYWRkcikpO1xuIFx0bWVtc2V0KFx1MDAyNmV4cC1cdTAwM2VzYXZlZF9wcm90bywgMCwgc2l6ZW9mKGV4cC1cdTAwM2VzYXZlZF9wcm90bykpO1xuJiM0MztcdGV4cC1cdTAwM2VkaXIgPSAwO1xuICNlbmRpZlxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5pbmRleCA0MjE3NzE1ZDQyZGMyNC4uMzFjYmIxYjU1YjllNmMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuQEAgLTM1NDksOCAmIzQzOzM1NDksNiBAQCBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0aWYgKGNkYVtDVEFfRVhQRUNUX0ZMQUdTXSkge1xuIFx0XHRleHAtXHUwMDNlZmxhZ3MgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9FWFBFQ1RfRkxBR1NdKSk7XG4gXHRcdGV4cC1cdTAwM2VmbGFncyBcdTAwMjY9IH5ORl9DVF9FWFBFQ1RfVVNFUlNQQUNFO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZXhwLVx1MDAzZWZsYWdzID0gMDtcbiBcdH1cbiBcdGlmIChjZGFbQ1RBX0VYUEVDVF9GTl0pIHtcbiBcdFx0Y29uc3QgY2hhciAqbmFtZSA9IG5sYV9kYXRhKGNkYVtDVEFfRVhQRUNUX0ZOXSk7XG5AQCAtMzU2Miw4ICYjNDM7MzU2MCw3IEBAIGN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0Z290byBlcnJfb3V0O1xuIFx0XHR9XG4gXHRcdGV4cC1cdTAwM2VleHBlY3RmbiA9IGV4cGZuLVx1MDAzZWV4cGVjdGZuO1xuLVx0fSBlbHNlXG4tXHRcdGV4cC1cdTAwM2VleHBlY3RmbiA9IE5VTEw7XG4mIzQzO1x0fVxuIFxuIFx0ZXhwLVx1MDAzZWNsYXNzID0gY2xhc3M7XG4gXHRleHAtXHUwMDNlbWFzdGVyID0gY3Q7XG5AQCAtMzU4MywxMiAmIzQzOzM1ODAsNiBAQCBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRcdFx0XHRcdCBleHAsIG5mX2N0X2wzbnVtKGN0KSk7XG4gXHRcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdFx0Z290byBlcnJfb3V0O1xuLSNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXG4tXHR9IGVsc2Uge1xuLVx0XHRtZW1zZXQoXHUwMDI2ZXhwLVx1MDAzZXNhdmVkX2FkZHIsIDAsIHNpemVvZihleHAtXHUwMDNlc2F2ZWRfYWRkcikpO1xuLVx0XHRtZW1zZXQoXHUwMDI2ZXhwLVx1MDAzZXNhdmVkX3Byb3RvLCAwLCBzaXplb2YoZXhwLVx1MDAzZXNhdmVkX3Byb3RvKSk7XG4tXHRcdGV4cC1cdTAwM2VkaXIgPSAwO1xuLSNlbmRpZlxuIFx0fVxuIFx0cmV0dXJuIGV4cDtcbiBlcnJfb3V0OlxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbmluZGV4IDVlYzNhNGE0YmJkNzA3Li5mM2Y5MGE4NjYzMzg5NCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuQEAgLTk1Niw3ICYjNDM7OTU2LDYgQEAgc3RhdGljIGludCBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdFx0c2FkZHIgPSBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzO1xuIFx0fSBlbHNlIGlmIChzaXBfZXh0ZXJuYWxfbWVkaWEpIHtcbi1cdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYl9kc3Qoc2tiKS1cdTAwM2VkZXY7XG4gXHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7XG4gXHRcdHN0cnVjdCBmbG93aSBmbDtcbiBcbkBAIC05NzgsNyAmIzQzOzk3NywxMSBAQCBzdGF0aWMgaW50IHNldF9leHBlY3RlZF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiBcdFx0ICogdGhyb3VnaCB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgdGhlIHNpZ25hbGxpbmcgcGVlci5cbiBcdFx0ICovXG4gXHRcdGlmIChkc3QpIHtcbi1cdFx0XHRib29sIGV4dGVybmFsX21lZGlhID0gKGRzdC1cdTAwM2VkZXYgPT0gZGV2KTtcbiYjNDM7XHRcdFx0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqdGhpc19kc3QgPSBza2JfZHN0KHNrYik7XG4mIzQzO1x0XHRcdGJvb2wgZXh0ZXJuYWxfbWVkaWEgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh0aGlzX2RzdCBcdTAwMjZcdTAwMjYgZHN0LVx1MDAzZWRldiA9PSB0aGlzX2RzdC1cdTAwM2VkZXYpXG4mIzQzO1x0XHRcdFx0ZXh0ZXJuYWxfbWVkaWEgPSB0cnVlO1xuIFxuIFx0XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4gXHRcdFx0aWYgKGV4dGVybmFsX21lZGlhKVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG5pbmRleCBmMTQ2MGI2ODNkN2FmNy4uMmNiY2NhOTExMGRiZjUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG5AQCAtMTYzLDYgJiM0MzsxNjMsOCBAQCBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3koc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpleHBlY3RfcG9saWN5LFxuIFx0XHQgICAgdGJbTkZDVEhfUE9MSUNZX05BTUVdLCBORl9DVF9IRUxQRVJfTkFNRV9MRU4pO1xuIFx0ZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgPVxuIFx0XHRudG9obChubGFfZ2V0X2JlMzIodGJbTkZDVEhfUE9MSUNZX0VYUEVDVF9NQVhdKSk7XG4mIzQzO1x0aWYgKCFleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZClcbiYjNDM7XHRcdGV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQ7XG4gXHRpZiAoZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgXHUwMDNlIE5GX0NUX0VYUEVDVF9NQVhfQ05UKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuaW5kZXggODBjYTA3N2I4MWJkNWEuLjM1ZDRjNmM2MjhmZmMxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuQEAgLTExODQsNiAmIzQzOzExODQsMTczIEBAIG5mcW5sX2VucXVldWVfcGFja2V0KHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnksIHVuc2lnbmVkIGludCBxdWV1ZW51bSlcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcG9wdHMoY29uc3Qgc3RydWN0IGlwaGRyICppcGhfbmV3LFxuJiM0MztcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwaGRyICppcGhfb3JpZyA9IGlwX2hkcihlLVx1MDAzZXNrYik7XG4mIzQzO1x0dW5zaWduZWQgaW50IGlobCA9IGlwaF9uZXctXHUwMDNlaWhsICogNDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlwaF9uZXctXHUwMDNlaWhsICE9IGlwaF9vcmlnLVx1MDAzZWlobClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoaWhsID09IHNpemVvZigqaXBoX29yaWcpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZW1jbXAoaXBoX25ldyAmIzQzOyAxLCBpcF9oZHIoZS1cdTAwM2Vza2IpICYjNDM7IDEsIGlobCAtIHNpemVvZigqaXBoX29yaWcpKSA9PSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSlcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBpaGw7XG4mIzQzO1xuJiM0MztcdGlmIChkYXRhX2xlbiBcdTAwM2Mgc2l6ZW9mKCppcGgpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpaGwgPSBpcGgtXHUwMDNlaWhsICogNHU7XG4mIzQzO1x0aWYgKGlobCBcdTAwM2Mgc2l6ZW9mKCppcGgpIHx8IGRhdGFfbGVuIFx1MDAzYyBpaGwpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChpcGgtXHUwMDNldmVyc2lvbiAhPSA0IHx8XG4mIzQzO1x0ICAgICgoaXBoLVx1MDAzZWZyYWdfb2ZmIF4gaXBfaGRyKGUtXHUwMDNlc2tiKS1cdTAwM2VmcmFnX29mZikgXHUwMDI2IH5odG9ucyhJUF9ERikpICE9IDApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIEJJRyBUQ1Agd29uJiMzOTt0IHdvcms7IG5ldGxpbmsgYXR0ciBsZW4gaXMgdTE2ICovXG4mIzQzO1x0aWYgKG50b2hzKGlwaC1cdTAwM2V0b3RfbGVuKSAhPSBkYXRhX2xlbilcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Lyogc3VwcG9ydCBmb3IgaXBvcHRzIG1hbmdsaW5nIHdvdWxkIHJlcXVpcmVcbiYjNDM7XHQgKiByZWNvbXBpbGUgJiM0Mzsgc2tiIHRyYW5zcG9ydCBoZWFkZXIgdXBkYXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBuZnFubF92YWxpZGF0ZV9pcG9wdHMoaXBoLCBlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihjb25zdCB1OCAqZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLFxuJiM0MztcdFx0XHRcdCAgICAgIGludCBzdGFydCwgaW50IGhkcmxlbilcbiYjNDM7e1xuJiM0MztcdHUxNiBvY3RldHM7XG4mIzQzO1xuJiM0MztcdGlmIChkYXRhX2xlbiBcdTAwM2MgaGRybGVuIHx8IGhkcmxlbiBcdTAwM2MgMilcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGhkcmxlbiBcdTAwM2UgMCkge1xuJiM0MztcdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2Yob2N0ZXRzKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0ZGF0YV9sZW4gLT0gc2l6ZW9mKG9jdGV0cyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNrYl9jb3B5X2JpdHMoZS1cdTAwM2Vza2IsIHN0YXJ0LCBcdTAwMjZvY3RldHMsIHNpemVvZihvY3RldHMpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChoZHJsZW4gXHUwMDNjIHNpemVvZihvY3RldHMpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0aGRybGVuIC09IHNpemVvZihvY3RldHMpO1xuJiM0MztcdFx0aWYgKG1lbWNtcChkYXRhLCBcdTAwMjZvY3RldHMsIHNpemVvZihvY3RldHMpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdHN0YXJ0ICYjNDM7PSBzaXplb2Yob2N0ZXRzKTtcbiYjNDM7XHRcdGRhdGEgJiM0Mzs9IHNpemVvZihvY3RldHMpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2V4dGhkcihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2X25ldyxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfb3JpZyA9IGlwdjZfaGRyKGUtXHUwMDNlc2tiKTtcbiYjNDM7XHRpbnQgZXh0aGRyX2NudCA9IDAsIHN0YXJ0ID0gc2l6ZW9mKCppcDZfb3JpZyk7XG4mIzQzO1x0Y29uc3QgdTggKmRhdGEgPSAoY29uc3QgdTggKilpcDZfbmV3O1xuJiM0MztcdHU4IG9yaWdfbmV4dGhkciA9IGlwNl9vcmlnLVx1MDAzZW5leHRoZHI7XG4mIzQzO1x0dTggbmV3X25leHRoZHIgPSBpcDZfbmV3LVx1MDAzZW5leHRoZHI7XG4mIzQzO1xuJiM0MztcdGlmIChuZXdfbmV4dGhkciAhPSBvcmlnX25leHRoZHIpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGRhdGEgJiM0Mzs9IHNpemVvZigqaXA2X25ldyk7XG4mIzQzO1x0ZGF0YV9sZW4gLT0gc2l6ZW9mKCppcDZfbmV3KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGlwdjZfZXh0X2hkcihvcmlnX25leHRoZHIpKSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgaXB2Nl9vcHRfaGRyICpocDtcbiYjNDM7XHRcdHN0cnVjdCBpcHY2X29wdF9oZHIgX2hkcjtcbiYjNDM7XHRcdGludCBoZHJsZW47XG4mIzQzO1xuJiM0MztcdFx0aWYgKG9yaWdfbmV4dGhkciA9PSBORVhUSERSX05PTkUpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICh1bmxpa2VseShleHRoZHJfY250JiM0MzsmIzQzOyBcdTAwM2U9IElQNl9NQVhfRVhUX0hEUlNfQ05UKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGhwID0gc2tiX2hlYWRlcl9wb2ludGVyKGUtXHUwMDNlc2tiLCBzdGFydCwgc2l6ZW9mKF9oZHIpLCBcdTAwMjZfaGRyKTtcbiYjNDM7XHRcdGlmICghaHApXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRzd2l0Y2ggKG9yaWdfbmV4dGhkcikge1xuJiM0MztcdFx0Y2FzZSBORVhUSERSX0ZSQUdNRU5UOlxuJiM0MztcdFx0XHRoZHJsZW4gPSBzaXplb2Yoc3RydWN0IGZyYWdfaGRyKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIE5FWFRIRFJfQVVUSDpcbiYjNDM7XHRcdFx0aGRybGVuID0gaXB2Nl9hdXRobGVuKGhwKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRoZHJsZW4gPSBpcHY2X29wdGxlbihocCk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihkYXRhLCBkYXRhX2xlbiwgZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdGFydCwgaGRybGVuKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdG9yaWdfbmV4dGhkciA9IGhwLVx1MDAzZW5leHRoZHI7XG4mIzQzO1x0XHRocCA9IChjb25zdCB2b2lkICopZGF0YTtcbiYjNDM7XHRcdG5ld19uZXh0aGRyID0gaHAtXHUwMDNlbmV4dGhkcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobmV3X25leHRoZHIgIT0gb3JpZ19uZXh0aGRyKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0ZGF0YV9sZW4gLT0gaGRybGVuO1xuJiM0MztcdFx0c3RhcnQgJiM0Mzs9IGhkcmxlbjtcbiYjNDM7XHRcdGRhdGEgJiM0Mzs9IGhkcmxlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDYoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNiwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2YoKmlwNikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIEJJRyBUQ1AvanVtYm9ncmFtcyB3b24mIzM5O3Qgd29yazsgbmV0bGluayBhdHRyIGxlbiBpcyB1MTYgKi9cbiYjNDM7XHRpZiAobnRvaHMoaXA2LVx1MDAzZXBheWxvYWRfbGVuKSAhPSBkYXRhX2xlbiAtIHNpemVvZigqaXA2KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlwNi1cdTAwM2V2ZXJzaW9uICE9IDYpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuZnFubF92YWxpZGF0ZV9leHRoZHIoaXA2LCBkYXRhX2xlbiwgZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX3dyaXRlKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChlLVx1MDAzZXN0YXRlLnBmKSB7XG4mIzQzO1x0Y2FzZSBORlBST1RPX0lQVjQ6XG4mIzQzO1x0XHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfaXA0KGRhdGEsIGRhdGFfbGVuLCBlKTtcbiYjNDM7XHRjYXNlIE5GUFJPVE9fSVBWNjpcbiYjNDM7XHRcdHJldHVybiBuZnFubF92YWxpZGF0ZV9pcDYoZGF0YSwgZGF0YV9sZW4sIGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICAgICEoSVA2Q0IoZS1cdTAwM2Vza2IpLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZTS0JfSlVNQk9HUkFNKTtcbiYjNDM7XHRjYXNlIE5GUFJPVE9fQlJJREdFOlxuJiM0MztcdFx0LyogTm8gd3JpdGUgc3VwcG9ydC4gQnJpZGdlIGlzIGR1YmlvdXM6IHVzZXJzcGFjZSBkb2VzbiYjMzk7dCBldmVuIHNlZSBMMiBoZWFkZXIgKi9cbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50XG4gbmZxbmxfbWFuZ2xlKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCBpbnQgZGlmZilcbiB7XG5AQCAtMTE5Miw2ICYjNDM7MTM1OSw5IEBAIG5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpXG4gXHRpZiAoZS1cdTAwM2VzdGF0ZS5uZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4mIzQzO1x0aWYgKCFuZnFubF92YWxpZGF0ZV93cml0ZShkYXRhLCBkYXRhX2xlbiwgZSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAoZGlmZiBcdTAwM2MgMCkge1xuIFx0XHR1bnNpZ25lZCBpbnQgbWluX2xlbiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KGUtXHUwMDNlc2tiKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9maWIuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jXG5pbmRleCBlMDQ4ZjA1Njk0Y2RkZC4uODk1NTUzODBmMWM1YTAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9maWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfZmliLmNcbkBAIC0zMSw2ICYjNDM7MzEsMTUgQEAgaW50IG5mdF9maWJfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxuIFx0Y29uc3Qgc3RydWN0IG5mdF9maWIgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIFx0dW5zaWduZWQgaW50IGhvb2tzO1xuIFxuJiM0MztcdHN3aXRjaCAoY3R4LVx1MDAzZWZhbWlseSkge1xuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY0OlxuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY2OlxuJiM0MztcdGNhc2UgTkZQUk9UT19JTkVUOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoIChwcml2LVx1MDAzZXJlc3VsdCkge1xuIFx0Y2FzZSBORlRfRklCX1JFU1VMVF9PSUY6XG4gXHRjYXNlIE5GVF9GSUJfUkVTVUxUX09JRk5BTUU6XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jXG5pbmRleCAzZjM0NzhhYmQ4NDU0Ni4uNTc3NGE3NTQ0MDI3ODAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuY1xuQEAgLTUwLDYgJiM0Mzs1MCwzMyBAQCBzdGF0aWMgdm9pZCBuZnRfZmliX25ldGRldl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBuZnRfZmliX25ldGRldl92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZnRfZmliICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaG9va3M7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocHJpdi1cdTAwM2VyZXN1bHQpIHtcbiYjNDM7XHRjYXNlIE5GVF9GSUJfUkVTVUxUX09JRjpcbiYjNDM7XHRjYXNlIE5GVF9GSUJfUkVTVUxUX09JRk5BTUU6XG4mIzQzO1x0XHRob29rcyA9ICgxIFx1MDAzY1x1MDAzYyBORl9ORVRERVZfSU5HUkVTUyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GVF9GSUJfUkVTVUxUX0FERFJUWVBFOlxuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVEFfRklCX0ZfSUlGKVxuJiM0MztcdFx0XHRob29rcyA9ICgxIFx1MDAzY1x1MDAzYyBORl9ORVRERVZfSU5HUkVTUyk7XG4mIzQzO1x0XHRlbHNlIGlmIChwcml2LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRBX0ZJQl9GX09JRilcbiYjNDM7XHRcdFx0aG9va3MgPSAoMSBcdTAwM2NcdTAwM2MgTkZfTkVUREVWX0VHUkVTUyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGhvb2tzID0gKDEgXHUwMDNjXHUwMDNjIE5GX05FVERFVl9JTkdSRVNTKSB8XG4mIzQzO1x0XHRcdFx0KDEgXHUwMDNjXHUwMDNjIE5GX05FVERFVl9FR1JFU1MpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjdHgtXHUwMDNlY2hhaW4sIGhvb2tzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2ZpYl9uZXRkZXZfdHlwZTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfZmliX25ldGRldl9vcHMgPSB7XG4gXHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9maWJfbmV0ZGV2X3R5cGUsXG5AQCAtNTcsNyAmIzQzOzg0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2ZpYl9uZXRkZXZfb3BzID0ge1xuIFx0LmV2YWxcdFx0PSBuZnRfZmliX25ldGRldl9ldmFsLFxuIFx0LmluaXRcdFx0PSBuZnRfZmliX2luaXQsXG4gXHQuZHVtcFx0XHQ9IG5mdF9maWJfZHVtcCxcbi1cdC52YWxpZGF0ZVx0PSBuZnRfZmliX3ZhbGlkYXRlLFxuJiM0MztcdC52YWxpZGF0ZVx0PSBuZnRfZmliX25ldGRldl92YWxpZGF0ZSxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmliX25ldGRldl90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCAzNDVlZmYxNDBkNTZmOC4uMzkxNTM5YTFjZWFhNzcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTgzNCw2ICYjNDM7ODM0LDI0OSBAQCBuZnRfcGF5bG9hZF9zZXRfdmxhbihjb25zdCB1MzIgKnNyYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG9mZnNldCwgdTggbGVuLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MzsvKiBJbmdyZXNzIGlzIHZlcnkgZWFybHksIGJlZm9yZSBsMyBwcm90b2NvbCBoYW5kbGVycy5cbiYjNDM7ICogVGhlcmUgc2hvdWxkIGJlIG5vIGluLXRyZWUgY29kZSB0aGF0IHRydXN0cyBsMy9sNCBoZWFkZXJzXG4mIzQzOyAqIGJldHdlZW4gaW5ncmVzcyBhbmQgTkZfSU5FVF9QUkVfUk9VVElORyBob29rcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG5mdF9pbl9pbmdyZXNzKGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHMtXHUwMDNlcGYgPT0gTkZQUk9UT19ORVRERVYgXHUwMDI2XHUwMDI2IHMtXHUwMDNlaG9vayA9PSBORl9ORVRERVZfSU5HUkVTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuJiM0MztcdFx0XHRcdGNvbnN0IHUzMiAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9mZnNldCA9IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IHNrYl9uZXR3b3JrX29mZnNldChwa3QtXHUwMDNlc2tiKTtcbiYjNDM7XHRjb25zdCB1OCAqbmV3X29jdGV0cyA9IChjb25zdCB1OCAqKXNyYztcbiYjNDM7XHR1OCBvbGRfb2N0ZXQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocHJpdi1cdTAwM2VvZmZzZXQpIHtcbiYjNDM7XHRjYXNlIDA6IC8qIGNzdW0gZml4dXBzIGRvZXMgZXhwYW5kIGRzY3AvdG9zIHN0b3JlIHRvIDIgYnl0ZXMuXG4mIzQzO1x0XHQgKiBtYWtlIHN1cmUgaWhsL3ZlcnNpb24gcmVtYWluIHVuY2hhbmdlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHNrYl9jb3B5X2JpdHMocGt0LVx1MDAzZXNrYiwgb2Zmc2V0LCBcdTAwMjZvbGRfb2N0ZXQsIHNpemVvZihvbGRfb2N0ZXQpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiA9PSAyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICAgICpuZXdfb2N0ZXRzID09IG9sZF9vY3RldDtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgdG9zKTpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiA9PSAxO1xuJiM0MztcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBpZCk6XG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VsZW4gPT0gMjtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgdHRsKTpcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWxlbiA9PSAxKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJpdi1cdTAwM2VsZW4gIT0gMilcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHNhbWUsIGNzdW0gZml4dXAgZG9lcyBleHBhbmQgdHRsIHN0b3JlIHRvIHR3byBieXRlcy5cbiYjNDM7XHRcdCAqIGNoZWNrIHByb3RvY29sIGlzIG5vdCBhbHRlcmVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc2tiX2NvcHlfYml0cyhwa3QtXHUwMDNlc2tiLCBvZmZzZXQgJiM0MzsgMSwgXHUwMDI2b2xkX29jdGV0LCBzaXplb2Yob2xkX29jdGV0KSkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gbmV3X29jdGV0c1sxXSA9PSBvbGRfb2N0ZXQ7XG4mIzQzO1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiBcdTAwM2M9IDIgJiM0MzsgNCAmIzQzOyA0O1xuJiM0MztcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6XG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VsZW4gXHUwMDNjPSA0ICYjNDM7IDQ7XG4mIzQzO1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKTpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiBcdTAwM2M9IDQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19pcDYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbiYjNDM7XHRcdFx0XHRjb25zdCB1MzIgKnNyYylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppaCA9IChjb25zdCB2b2lkICopc3JjO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHByaXYtXHUwMDNlb2Zmc2V0KSB7XG4mIzQzO1x0Y2FzZSAwOiAvKiBzdG9yZSB0byBkc2NwIG11c3Qgbm90IGFsdGVyIGlwNiB2ZXJzaW9uICovXG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VsZW4gXHUwMDNjPSA0IFx1MDAyNlx1MDAyNiBpaC1cdTAwM2V2ZXJzaW9uID09IDY7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gMjtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBob3BfbGltaXQpOlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuID09IDE7XG4mIzQzO1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gMTYgJiM0MzsgMTY7XG4mIzQzO1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gMTY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19hcnAoY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdC8qIFZhcmlhYmxlIHNpemUgZm9yIHN0YW5kYXJkIGV0aGVybmV0IGFycCAqL1xuJiM0MztcdGNvbnN0IHVuc2lnbmVkIGludCBldGhfaXAgPSAyICogKEVUSF9BTEVOICYjNDM7IDQpO1xuJiM0MztcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBwcml2LVx1MDAzZW9mZnNldDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChvZmZzZXQpIHtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBhcnBoZHIsIGFyX29wKTpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiA9PSAyO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHBlcm1pdCB3cml0ZXMgcG9zdCBmaXhlZCBhcnAgaGVhZGVyIHNpemUuIG9mZnNldCAmIzQzOyBsZW4gYXJlXG4mIzQzO1x0ICogY2hlY2tlZCB2cyBza2Igc2l6ZSB2aWEgc2tiX2Vuc3VyZV93cml0YWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gb2Zmc2V0IFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBhcnBoZHIpIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWxlbiBcdTAwM2M9IGV0aF9pcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX25ldGRldihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHUzMiAqc3JjKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfTkZfVEFCTEVTX05FVERFVlxuJiM0MztcdHN3aXRjaCAocGt0LVx1MDAzZXNrYi1cdTAwM2Vwcm90b2NvbCkge1xuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfQVJQKTpcbiYjNDM7XHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfYXJwKHByaXYpO1xuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuJiM0MztcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDQocGt0LCBwcml2LCBzcmMpO1xuJiM0MztcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4mIzQzO1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNihwa3QsIHByaXYsIHNyYyk7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XHQvKiBkZWZhdWx0IHRvIGZhbHNlIGZvciBub3csIHJlbGF4IGxhdGVyIGluIGNhc2Ugd2UgaGF2ZVxuJiM0MztcdCAqIHVzZS1jYXNlcyB0aGF0IG5lZWQgaW5uZXIgaGVhZGVyIG1hbmlwdWxhdGlvbiBmb3JcbiYjNDM7XHQgKiBlbmNhcHN1bGF0ZWQgdHJhZmZpYyBsaWtlIHZsYW4gb3IgUFBQb0UuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYnJpZGdlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3QgdTMyICpzcmMpXG4mIzQzO3tcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX1RBQkxFU19CUklER0UpXG4mIzQzO1x0c3dpdGNoIChwa3QtXHUwMDNlZXRoZXJ0eXBlKSB7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9BUlApOlxuJiM0MztcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19hcnAocHJpdik7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4mIzQzO1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNChwa3QsIHByaXYsIHNyYyk7XG4mIzQzO1x0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbiYjNDM7XHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA2KHBrdCwgcHJpdiwgc3JjKTtcbiYjNDM7XHR9XG4mIzQzOyNlbmRpZlxuJiM0MztcdC8qIHNlZSBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2OiBkZWZhdWx0IHRvIGZhbHNlICovXG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuJiM0MztcdFx0XHQgICAgY29uc3QgdTMyICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHBrdC1cdTAwM2VzdGF0ZS1cdTAwM2VwZikge1xuJiM0MztcdGNhc2UgTkZQUk9UT19BUlA6XG4mIzQzO1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2FycChwcml2KTtcbiYjNDM7XHRjYXNlIE5GUFJPVE9fQlJJREdFOlxuJiM0MztcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19icmlkZ2UocGt0LCBwcml2LCBzcmMpO1xuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY0OlxuJiM0MztcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDQocGt0LCBwcml2LCBzcmMpO1xuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY2OlxuJiM0MztcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDYocGt0LCBwcml2LCBzcmMpO1xuJiM0MztcdGNhc2UgTkZQUk9UT19ORVRERVY6XG4mIzQzO1x0XHRpZiAocGt0LVx1MDAzZXN0YXRlLVx1MDAzZWhvb2sgPT0gTkZfTkVUREVWX0lOR1JFU1MpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19uZXRkZXYocGt0LCBwcml2LCBzcmMpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBjaGVjayBsaW5rbGF5ZXIgbW9kaWZpY2F0aW9ucyBkb24mIzM5O3Qgc3BpbGwgaW50byBuZXR3b3JrIGhlYWRlci4gKi9cbiYjNDM7c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKG5mdF9pbl9pbmdyZXNzKHBrdC1cdTAwM2VzdGF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG9mZnNldCBcdTAwM2M9IHNrYl9uZXR3b3JrX29mZnNldChwa3QtXHUwMDNlc2tiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHByaXYtXHUwMDNlYmFzZSkge1xuJiM0MztcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbiYjNDM7XHRcdGlmIChjdHgtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xuJiM0MztcdFx0XHRpZiAob2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjaykgPT0gcHJpdi1cdTAwM2Vjc3VtX29mZnNldClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiB0cnVlOyAvKiBydW4gdGltZSB2YWxpZGF0aW9uIHJlcXVpcmVkICovXG4mIzQzO1x0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwmIzM0O3JlLXVwZGF0ZVwmIzM0OyBvZiBMNCBjaGVja3N1bSAqL1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJiMzOTt0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXG4mIzQzO1x0XHQgKiBvZmZzZXRzIGNhbiBjb3JydXB0IEw0IG9yIHBheWxvYWQgYnV0IG5vdCBsMyBoZWFkZXJzLlxuJiM0MztcdFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGRvIG5vdCBhbGxvdyBhcmJpdHJhcnkgbmV0d29yayBoZWFkZXIgbWFuZ2xpbmcgdmlhIGJvZ3VzIGNzdW1fb2ZmLlxuJiM0MzsgKiBXZSBvbmx5IHN1cHBvcnQgaXB2NC4gIE9ubHkgTkZQUk9UT19JUFY0IGNhbiBiZSBjaGVja2VkIGZyb20gY29udHJvbFxuJiM0MzsgKiBwbGFuZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAocGt0LVx1MDAzZXN0YXRlLVx1MDAzZXBmKSB7XG4mIzQzO1x0Y2FzZSBORlBST1RPX0lQVjQ6XG4mIzQzO1x0XHQvKiBXYXJuaW5nOiBORlBST1RPX0lORVQgd2FzIG5vdCBjaGVja2VkOyB3ZSBjYW4mIzM5O3QgcmV0dXJuIHRydWUgaGVyZS4gKi9cbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY2OlxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGNhc2UgTkZQUk9UT19CUklER0U6XG4mIzQzO1x0XHRyZXR1cm4gcGt0LVx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbiYjNDM7XHRjYXNlIE5GUFJPVE9fTkVUREVWOlxuJiM0MztcdFx0cmV0dXJuIHBrdC1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAocHJpdi1cdTAwM2ViYXNlKSB7XG4mIzQzO1x0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuJiM0MztcdFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTtcbiYjNDM7XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4mIzQzO1x0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4mIzQzO1x0XHQvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmVcbiYjNDM7XHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbkBAIC04NjEsOCAmIzQzOzExMDQsMTIgQEAgc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0XHR9XG4gXG4gXHRcdG9mZnNldCA9IHNrYl9tYWNfaGVhZGVyKHNrYikgLSBza2ItXHUwMDNlZGF0YSAtIHZsYW5faGxlbjtcbiYjNDM7XHRcdGlmICghbmZ0X2xsX3dyaXRlX29rKHBrdCwgcHJpdi1cdTAwM2VsZW4gJiM0MzsgcHJpdi1cdTAwM2VvZmZzZXQgJiM0Mzsgb2Zmc2V0KSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbiYjNDM7XHRcdGlmICghbmZ0X25oX3dyaXRlX29rKHBrdCwgcHJpdiwgc3JjKSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXHRcdG9mZnNldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbkBAIC04OTQsNiAmIzQzOzExNDEsNyBAQCBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4gXHRcdHRzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBwcml2LVx1MDAzZWxlbiwgMCk7XG4gXG4gXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXG4gXHRcdFx0Z290byBlcnI7XG4gXG5AQCAtOTYwLDcgJiM0MzsxMjA4LDI2IEBAIHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBcdHN3aXRjaCAoY3N1bV90eXBlKSB7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fTk9ORTpcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fb2Zmc2V0KSAvKiBub25zZW5zaWNhbCAqL1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzID09IDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIFVzZXJzcGFjZSByZXF1ZXN0cyBMNCBjaGVja3N1bSB1cGRhdGUsIGUuZy46XG4mIzQzO1x0XHQgKiAtIElQdjYgc3RhdGVsZXNzIE5BVCAobm8gbDMgY3N1bSlcbiYjNDM7XHRcdCAqIC0gdHJhbnNwb3J0IGhlYWRlciBtYW5nbGluZ1xuJiM0MztcdFx0ICogLSBpbm5lciBkYXRhIG1hbmdsaW5nXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWJhc2UgPT0gTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVIgfHxcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWJhc2UgPT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUiB8fFxuJiM0MztcdFx0ICAgIHByaXYtXHUwMDNlYmFzZSA9PSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVIpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9DU1VNX0lORVQ6XG4mIzQzO1x0XHRpZiAoIW5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY3R4LCBwcml2KSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9DU1VNX1NDVFA6XG4gXHRcdGlmIChwcml2LVx1MDAzZWJhc2UgIT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUilcbkBAIC05NjgsNiAmIzQzOzEyMzUsOSBAQCBzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXG4gXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ICE9IG9mZnNldG9mKHN0cnVjdCBzY3RwaGRyLCBjaGVja3N1bSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uY1xuaW5kZXggNzA2Yzc4ODUzZjI0NWIuLjk3OGJiMGMwMTEwNjgyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcbkBAIC0zNDIsNiAmIzQzOzM0Miw4IEBAXG4gI2luY2x1ZGUgXCYjMzQ7bmZ0X3NldF9waXBhcG9fYXZ4Mi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bmZ0X3NldF9waXBhcG8uaFwmIzM0O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBuZnRfcGlwYXBvX2Fib3J0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpO1xuJiM0MztcbiAvKipcbiAgKiBwaXBhcG9fcmVmaWxsKCkgLSBGb3IgZWFjaCBzZXQgYml0LCBzZXQgYml0cyBmcm9tIHNlbGVjdGVkIG1hcHBpbmcgdGFibGUgaXRlbVxuICAqIEBtYXA6XHRCaXRtYXAgdG8gYmUgc2Nhbm5lZCBmb3Igc2V0IGJpdHNcbkBAIC0xMjk2LDcgJiM0MzsxMjk4LDcgQEAgc3RhdGljIGludCBuZnRfcGlwYXBvX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRjb25zdCB1OCAqc3RhcnRfcCwgKmVuZF9wO1xuIFx0aW50IGksIGJzaXplX21heCwgZXJyID0gMDtcbiBcbi1cdGlmICghbSlcbiYjNDM7XHRpZiAoIW0gfHwgbS1cdTAwM2VzdGF0ZSA9PSBORlRfUElQQVBPX0NMT05FX0VSUilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfS0VZX0VORCkpXG5AQCAtMTM2Nyw4ICYjNDM7MTM2OSwxMCBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBcdFx0ZWxzZVxuIFx0XHRcdHJldCA9IHBpcGFwb19leHBhbmQoZiwgc3RhcnQsIGVuZCwgZi1cdTAwM2Vncm91cHMgKiBmLVx1MDAzZWJiKTtcbiBcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRlcnIgPSByZXQ7XG4mIzQzO1x0XHRcdGdvdG8gYWJvcnQ7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGlmIChmLVx1MDAzZWJzaXplIFx1MDAzZSBic2l6ZV9tYXgpXG4gXHRcdFx0YnNpemVfbWF4ID0gZi1cdTAwM2Vic2l6ZTtcbkBAIC0xMzg0LDcgJiM0MzsxMzg4LDcgQEAgc3RhdGljIGludCBuZnRfcGlwYXBvX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXG4gXHRcdGVyciA9IHBpcGFwb19yZWFsbG9jX3NjcmF0Y2gobSwgYnNpemVfbWF4KTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRnb3RvIGFib3J0O1xuIFxuIFx0XHRtLVx1MDAzZWJzaXplX21heCA9IGJzaXplX21heDtcbiBcdH0gZWxzZSB7XG5AQCAtMTM5Niw3ICYjNDM7MTQwMCwyNiBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBcbiBcdHBpcGFwb19tYXAobSwgcnVsZW1hcCwgZSk7XG4gXG4mIzQzO1x0bS1cdTAwM2VzdGF0ZSA9IE5GVF9QSVBBUE9fQ0xPTkVfTU9EO1xuIFx0cmV0dXJuIDA7XG4mIzQzO2Fib3J0OlxuJiM0MztcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobS1cdTAwM2VzdGF0ZSA9PSBORlRfUElQQVBPX0NMT05FX0VSUik7XG4mIzQzO1xuJiM0MztcdC8qIFR3byByb2xsYmFjayBjYXNlczpcbiYjNDM7XHQgKiAxKSBubyBwcmV2aW91cyBjaGFuZ2VzLiAgbmZ0X3BpcGFwb19hYm9ydCBpcyBub3RcbiYjNDM7XHQgKiBndWFyYW50ZWVkIHRvIGJlIGludm9rZWQgKHRoZXJlIG1pZ2h0IGJlIG5vIGZ1cnRoZXJcbiYjNDM7XHQgKiBhZGQvZGVsZXRlIHJlcXVlc3RzIGNvbWluZyBhZnRlciB0aGlzKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIDIpIHdlIGhhZCBwcmV2aW91cyBjaGFuZ2VzOiB0aGVyZSBhcmUgdHJhbnNhY3Rpb25cbiYjNDM7XHQgKiByZWNvcmRzIHBvaW50aW5nIHRvIHRoaXMgc2V0LiAgTGVhdmUgdGhlIHJvbGxiYWNrIHRvXG4mIzQzO1x0ICogdGhlIHRyYW5zYWN0aW9uIGhhbmRsaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChtLVx1MDAzZXN0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfTkVXKVxuJiM0MztcdFx0bmZ0X3BpcGFwb19hYm9ydChzZXQpOyAvKiByZWxlYXNlcyBtICovXG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bS1cdTAwM2VzdGF0ZSA9IE5GVF9QSVBBUE9fQ0xPTkVfRVJSO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiAvKipcbkBAIC0xNDczLDYgJiM0MzsxNDk2LDcgQEAgc3RhdGljIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICpwaXBhcG9fY2xvbmUoc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm9sZClcbiBcdFx0ZHN0JiM0MzsmIzQzOztcbiBcdH1cbiBcbiYjNDM7XHRuZXctXHUwMDNlc3RhdGUgPSBORlRfUElQQVBPX0NMT05FX05FVztcbiBcdHJldHVybiBuZXc7XG4gXG4gb3V0X210OlxuQEAgLTE4OTYsNyAmIzQzOzE5MjAsNyBAQCBuZnRfcGlwYXBvX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0LyogcmVtb3ZhbCBtdXN0IG9jY3VyIG9uIHByaXYtXHUwMDNlY2xvbmUsIGlmIHdlIGFyZSBsb3cgb24gbWVtb3J5XG4gXHQgKiB3ZSBoYXZlIG5vIGNob2ljZSBhbmQgbXVzdCBmYWlsIHRoZSByZW1vdmFsIHJlcXVlc3QuXG4gXHQgKi9cbi1cdGlmICghbSlcbiYjNDM7XHRpZiAoIW0gfHwgbS1cdTAwM2VzdGF0ZSA9PSBORlRfUElQQVBPX0NMT05FX0VSUilcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRlID0gcGlwYXBvX2dldChtLCAoY29uc3QgdTggKillbGVtLVx1MDAzZWtleS52YWwuZGF0YSxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmggYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmhcbmluZGV4IGI4MmFiYjAzNTc2ZWRkLi5hMTllOTgwZDA2ZWY0MiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oXG5AQCAtMTMxLDkgJiM0MzsxMzEsMTYgQEAgc3RydWN0IG5mdF9waXBhcG9fc2NyYXRjaCB7XG4gXHR1bnNpZ25lZCBsb25nIF9fbWFwW107XG4gfTtcbiBcbiYjNDM7ZW51bSBuZnRfcGlwYXBvX2Nsb25lX3N0YXRlIHtcbiYjNDM7XHRORlRfUElQQVBPX0NMT05FX05FVyxcbiYjNDM7XHRORlRfUElQQVBPX0NMT05FX01PRCxcbiYjNDM7XHRORlRfUElQQVBPX0NMT05FX0VSUixcbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggLSBEYXRhIHVzZWQgZm9yIGxvb2t1cCBhbmQgbWF0Y2hpbmdcbiAgKiBAZmllbGRfY291bnQ6XHRBbW91bnQgb2YgZmllbGRzIGluIHNldFxuJiM0MzsgKiBAc3RhdGU6XHRcdGFkZC9kZWxldGUgc3RhdGU7IHVzZWQgZnJvbSBjb250cm9sIHBsYW5lXG4gICogQGJzaXplX21heDpcdFx0TWF4aW11bSBsb29rdXAgdGFibGUgYnVja2V0IHNpemUgb2YgYWxsIGZpZWxkcywgaW4gbG9uZ3NcbiAgKiBAc2NyYXRjaDpcdFx0UHJlYWxsb2NhdGVkIHBlci1DUFUgbWFwcyBmb3IgcGFydGlhbCBtYXRjaGluZyByZXN1bHRzXG4gICogQHJjdTpcdFx0TWF0Y2hpbmcgZGF0YSBpcyBzd2FwcGVkIG9uIGNvbW1pdHNcbkBAIC0xNDEsNiAmIzQzOzE0OCw3IEBAIHN0cnVjdCBuZnRfcGlwYXBvX3NjcmF0Y2gge1xuICAqL1xuIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoIHtcbiBcdHU4IGZpZWxkX2NvdW50O1xuJiM0MztcdGVudW0gbmZ0X3BpcGFwb19jbG9uZV9zdGF0ZSBzdGF0ZTo4O1xuIFx0dW5zaWduZWQgaW50IGJzaXplX21heDtcbiBcdHN0cnVjdCBuZnRfcGlwYXBvX3NjcmF0Y2ggKiBfX3BlcmNwdSAqc2NyYXRjaDtcbiBcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDS19TSVAmIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LX0hFTFBFUiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX0lORVQmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7LAogICAgJiMzNDtORlRfRklCX0lQVjQmIzM0OywKICAgICYjMzQ7TkZUX0ZJQl9JUFY2JiMzNDssCiAgICAmIzM0O05GVF9GSUJfTkVUREVWJiMzNDssCiAgICAmIzM0O0lQX1NFVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3NldF9kdW1wX2RvJiMzNDssCiAgICAmIzM0O2lwX3NldF9kdW1wX2RvbmUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2FsbG9jX2V4cGVjdCYjMzQ7LAogICAgJiMzNDtzZXRfZXhwZWN0ZWRfcnRwX3J0Y3AmIzM0OywKICAgICYjMzQ7bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5JiMzNDssCiAgICAmIzM0O25mcW5sX21hbmdsZSYjMzQ7LAogICAgJiMzNDtuZnRfZmliX3ZhbGlkYXRlJiMzNDssCiAgICAmIzM0O25mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9waXBhcG9faW5zZXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gSXQgYWRkcyB2YWxpZGF0aW9uIGZvciBwYXlsb2FkIHdyaXRlcyBhbmQgSVAvSVB2NiBoZWFkZXJzIGJlZm9yZSBtYW5nbGluZywgZml4ZXMgYSBidWcgaW4gU0lQIGNvbm50cmFjayBleHBlY3RhdGlvbiwgYWRkcyBzdGF0ZSB0cmFja2luZyBmb3IgcGlwYXBvIHNldCBjbG9uZXMgdG8gcHJvcGVybHkgaGFuZGxlIGFib3J0cywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBleHBlY3RhdGlvbiBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXRmaWx0ZXIgbG9naWMsIG5ldGxpbmsgcXVldWUsIG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcsIGFuZCBwaXBhcG8gc2V0cywgd2hpY2ggYXJlIGFsbCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ODU4MmFmODA4NTJjMzFhNjk2YjlhZGEyYTliNzE0MWJiZDYwZDhkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMDY6MDY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKaW5kZXggYTUzMWI2NTRiOGQ5NjQuLjZjZmFkMTUyZDdkMWJhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCkBAIC0xNDgwLDcgJiM0MzsxNDgwLDExIEBAIGlwX3NldF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogCQlzdHJ1Y3QgaXBfc2V0X25ldCAqaW5zdCA9CiAJCQkoc3RydWN0IGlwX3NldF9uZXQgKiljYi0mZ3Q7YXJnc1tJUFNFVF9DQl9ORVRdOwogCQlpcF9zZXRfaWRfdCBpbmRleCA9IChpcF9zZXRfaWRfdCljYi0mZ3Q7YXJnc1tJUFNFVF9DQl9JTkRFWF07Ci0JCXN0cnVjdCBpcF9zZXQgKnNldCA9IGlwX3NldF9yZWZfbmV0bGluayhpbnN0LCBpbmRleCk7CiYjNDM7CQlzdHJ1Y3QgaXBfc2V0ICpzZXQ7CiYjNDM7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQlzZXQgPSBpcF9zZXRfcmVmX25ldGxpbmsoaW5zdCwgaW5kZXgpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJaWYgKHNldC0mZ3Q7dmFyaWFudC0mZ3Q7dXJlZikKIAkJCXNldC0mZ3Q7dmFyaWFudC0mZ3Q7dXJlZihzZXQsIGNiLCBmYWxzZSk7CkBAIC0xNjg2LDcgJiM0MzsxNjkwLDkgQEAgaXBfc2V0X2R1bXBfZG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogcmVsZWFzZV9yZWZjb3VudDoKIAkvKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igb3Igc2V0IGlzIGRvbmUsIHJlbGVhc2Ugc2V0ICovCiAJaWYgKHJldCB8fCAhY2ItJmd0O2FyZ3NbSVBTRVRfQ0JfQVJHMF0pIHsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKIAkJc2V0ID0gaXBfc2V0X3JlZl9uZXRsaW5rKGluc3QsIGluZGV4KTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwogCQlpZiAoc2V0LSZndDt2YXJpYW50LSZndDt1cmVmKQogCQkJc2V0LSZndDt2YXJpYW50LSZndDt1cmVmKHNldCwgY2IsIGZhbHNlKTsKIAkJcHJfZGVidWcoJiMzNDtyZWxlYXNlIHNldCAlc1xuJiMzNDssIHNldC0mZ3Q7bmFtZSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCmluZGV4IDM4NjMwYzVlMDA2ZjA4Li43YWU2OGQ2MDU4NmEyMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKQEAgLTMwNiw3ICYjNDM7MzA2LDcgQEAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKm5mX2N0X2V4cGVjdF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqbWUpCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKm5ldzsKIAotCW5ldyA9IGttZW1fY2FjaGVfYWxsb2MobmZfY3RfZXhwZWN0X2NhY2hlcCwgR0ZQX0FUT01JQyk7CiYjNDM7CW5ldyA9IGttZW1fY2FjaGVfemFsbG9jKG5mX2N0X2V4cGVjdF9jYWNoZXAsIEdGUF9BVE9NSUMpOwogCWlmICghbmV3KQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMzkxLDYgJiM0MzszOTEsNyBAQCB2b2lkIG5mX2N0X2V4cGVjdF9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHVuc2lnbmVkIGludCBjbGFzcywKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpCiAJbWVtc2V0KCZhbXA7ZXhwLSZndDtzYXZlZF9hZGRyLCAwLCBzaXplb2YoZXhwLSZndDtzYXZlZF9hZGRyKSk7CiAJbWVtc2V0KCZhbXA7ZXhwLSZndDtzYXZlZF9wcm90bywgMCwgc2l6ZW9mKGV4cC0mZ3Q7c2F2ZWRfcHJvdG8pKTsKJiM0MzsJZXhwLSZndDtkaXIgPSAwOwogI2VuZGlmCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggNDIxNzcxNWQ0MmRjMjQuLjMxY2JiMWI1NWI5ZTZjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0zNTQ5LDggJiM0MzszNTQ5LDYgQEAgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCwKIAlpZiAoY2RhW0NUQV9FWFBFQ1RfRkxBR1NdKSB7CiAJCWV4cC0mZ3Q7ZmxhZ3MgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9FWFBFQ1RfRkxBR1NdKSk7CiAJCWV4cC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5ORl9DVF9FWFBFQ1RfVVNFUlNQQUNFOwotCX0gZWxzZSB7Ci0JCWV4cC0mZ3Q7ZmxhZ3MgPSAwOwogCX0KIAlpZiAoY2RhW0NUQV9FWFBFQ1RfRk5dKSB7CiAJCWNvbnN0IGNoYXIgKm5hbWUgPSBubGFfZGF0YShjZGFbQ1RBX0VYUEVDVF9GTl0pOwpAQCAtMzU2Miw4ICYjNDM7MzU2MCw3IEBAIGN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KIAkJZXhwLSZndDtleHBlY3RmbiA9IGV4cGZuLSZndDtleHBlY3RmbjsKLQl9IGVsc2UKLQkJZXhwLSZndDtleHBlY3RmbiA9IE5VTEw7CiYjNDM7CX0KIAogCWV4cC0mZ3Q7Y2xhc3MgPSBjbGFzczsKIAlleHAtJmd0O21hc3RlciA9IGN0OwpAQCAtMzU4MywxMiAmIzQzOzM1ODAsNiBAQCBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LAogCQkJCQkJIGV4cCwgbmZfY3RfbDNudW0oY3QpKTsKIAkJaWYgKGVyciAmbHQ7IDApCiAJCQlnb3RvIGVycl9vdXQ7Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKQotCX0gZWxzZSB7Ci0JCW1lbXNldCgmYW1wO2V4cC0mZ3Q7c2F2ZWRfYWRkciwgMCwgc2l6ZW9mKGV4cC0mZ3Q7c2F2ZWRfYWRkcikpOwotCQltZW1zZXQoJmFtcDtleHAtJmd0O3NhdmVkX3Byb3RvLCAwLCBzaXplb2YoZXhwLSZndDtzYXZlZF9wcm90bykpOwotCQlleHAtJmd0O2RpciA9IDA7Ci0jZW5kaWYKIAl9CiAJcmV0dXJuIGV4cDsKIGVycl9vdXQ6CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jCmluZGV4IDVlYzNhNGE0YmJkNzA3Li5mM2Y5MGE4NjYzMzg5NCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKQEAgLTk1Niw3ICYjNDM7OTU2LDYgQEAgc3RhdGljIGludCBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCiAJCQlyZXR1cm4gTkZfQUNDRVBUOwogCQlzYWRkciA9ICZhbXA7Y3QtJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTM7CiAJfSBlbHNlIGlmIChzaXBfZXh0ZXJuYWxfbWVkaWEpIHsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYl9kc3Qoc2tiKS0mZ3Q7ZGV2OwogCQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMOwogCQlzdHJ1Y3QgZmxvd2kgZmw7CiAKQEAgLTk3OCw3ICYjNDM7OTc3LDExIEBAIHN0YXRpYyBpbnQgc2V0X2V4cGVjdGVkX3J0cF9ydGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAogCQkgKiB0aHJvdWdoIHRoZSBzYW1lIGludGVyZmFjZSBhcyB0aGUgc2lnbmFsbGluZyBwZWVyLgogCQkgKi8KIAkJaWYgKGRzdCkgewotCQkJYm9vbCBleHRlcm5hbF9tZWRpYSA9IChkc3QtJmd0O2RldiA9PSBkZXYpOwomIzQzOwkJCWNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKnRoaXNfZHN0ID0gc2tiX2RzdChza2IpOwomIzQzOwkJCWJvb2wgZXh0ZXJuYWxfbWVkaWEgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCQlpZiAodGhpc19kc3QgJmFtcDsmYW1wOyBkc3QtJmd0O2RldiA9PSB0aGlzX2RzdC0mZ3Q7ZGV2KQomIzQzOwkJCQlleHRlcm5hbF9tZWRpYSA9IHRydWU7CiAKIAkJCWRzdF9yZWxlYXNlKGRzdCk7CiAJCQlpZiAoZXh0ZXJuYWxfbWVkaWEpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYwppbmRleCBmMTQ2MGI2ODNkN2FmNy4uMmNiY2NhOTExMGRiZjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYwpAQCAtMTYzLDYgJiM0MzsxNjMsOCBAQCBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3koc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpleHBlY3RfcG9saWN5LAogCQkgICAgdGJbTkZDVEhfUE9MSUNZX05BTUVdLCBORl9DVF9IRUxQRVJfTkFNRV9MRU4pOwogCWV4cGVjdF9wb2xpY3ktJmd0O21heF9leHBlY3RlZCA9CiAJCW50b2hsKG5sYV9nZXRfYmUzMih0YltORkNUSF9QT0xJQ1lfRVhQRUNUX01BWF0pKTsKJiM0MzsJaWYgKCFleHBlY3RfcG9saWN5LSZndDttYXhfZXhwZWN0ZWQpCiYjNDM7CQlleHBlY3RfcG9saWN5LSZndDttYXhfZXhwZWN0ZWQgPSBORl9DVF9FWFBFQ1RfTUFYX0NOVDsKIAlpZiAoZXhwZWN0X3BvbGljeS0mZ3Q7bWF4X2V4cGVjdGVkICZndDsgTkZfQ1RfRVhQRUNUX01BWF9DTlQpCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwppbmRleCA4MGNhMDc3YjgxYmQ1YS4uMzVkNGM2YzYyOGZmYzEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwpAQCAtMTE4NCw2ICYjNDM7MTE4NCwxNzMgQEAgbmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSwgdW5zaWduZWQgaW50IHF1ZXVlbnVtKQogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcG9wdHMoY29uc3Qgc3RydWN0IGlwaGRyICppcGhfbmV3LAomIzQzOwkJCQkgIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX29yaWcgPSBpcF9oZHIoZS0mZ3Q7c2tiKTsKJiM0MzsJdW5zaWduZWQgaW50IGlobCA9IGlwaF9uZXctJmd0O2lobCAqIDQ7CiYjNDM7CiYjNDM7CWlmIChpcGhfbmV3LSZndDtpaGwgIT0gaXBoX29yaWctJmd0O2lobCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGlobCA9PSBzaXplb2YoKmlwaF9vcmlnKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gbWVtY21wKGlwaF9uZXcgJiM0MzsgMSwgaXBfaGRyKGUtJmd0O3NrYikgJiM0MzsgMSwgaWhsIC0gc2l6ZW9mKCppcGhfb3JpZykpID09IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwNChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IGRhdGFfbGVuLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaWhsOwomIzQzOwomIzQzOwlpZiAoZGF0YV9sZW4gJmx0OyBzaXplb2YoKmlwaCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlobCA9IGlwaC0mZ3Q7aWhsICogNHU7CiYjNDM7CWlmIChpaGwgJmx0OyBzaXplb2YoKmlwaCkgfHwgZGF0YV9sZW4gJmx0OyBpaGwpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChpcGgtJmd0O3ZlcnNpb24gIT0gNCB8fAomIzQzOwkgICAgKChpcGgtJmd0O2ZyYWdfb2ZmIF4gaXBfaGRyKGUtJmd0O3NrYiktJmd0O2ZyYWdfb2ZmKSAmYW1wOyB+aHRvbnMoSVBfREYpKSAhPSAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBCSUcgVENQIHdvbiYjMzk7dCB3b3JrOyBuZXRsaW5rIGF0dHIgbGVuIGlzIHUxNiAqLwomIzQzOwlpZiAobnRvaHMoaXBoLSZndDt0b3RfbGVuKSAhPSBkYXRhX2xlbikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogc3VwcG9ydCBmb3IgaXBvcHRzIG1hbmdsaW5nIHdvdWxkIHJlcXVpcmUKJiM0MzsJICogcmVjb21waWxlICYjNDM7IHNrYiB0cmFuc3BvcnQgaGVhZGVyIHVwZGF0ZS4KJiM0MzsJICovCiYjNDM7CXJldHVybiBuZnFubF92YWxpZGF0ZV9pcG9wdHMoaXBoLCBlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihjb25zdCB1OCAqZGF0YSwKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFfbGVuLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsCiYjNDM7CQkJCSAgICAgIGludCBzdGFydCwgaW50IGhkcmxlbikKJiM0Mzt7CiYjNDM7CXUxNiBvY3RldHM7CiYjNDM7CiYjNDM7CWlmIChkYXRhX2xlbiAmbHQ7IGhkcmxlbiB8fCBoZHJsZW4gJmx0OyAyKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwl3aGlsZSAoaGRybGVuICZndDsgMCkgewomIzQzOwkJaWYgKGRhdGFfbGVuICZsdDsgc2l6ZW9mKG9jdGV0cykpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJZGF0YV9sZW4gLT0gc2l6ZW9mKG9jdGV0cyk7CiYjNDM7CiYjNDM7CQlpZiAoc2tiX2NvcHlfYml0cyhlLSZndDtza2IsIHN0YXJ0LCAmYW1wO29jdGV0cywgc2l6ZW9mKG9jdGV0cykpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCWlmIChoZHJsZW4gJmx0OyBzaXplb2Yob2N0ZXRzKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQloZHJsZW4gLT0gc2l6ZW9mKG9jdGV0cyk7CiYjNDM7CQlpZiAobWVtY21wKGRhdGEsICZhbXA7b2N0ZXRzLCBzaXplb2Yob2N0ZXRzKSkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJc3RhcnQgJiM0Mzs9IHNpemVvZihvY3RldHMpOwomIzQzOwkJZGF0YSAmIzQzOz0gc2l6ZW9mKG9jdGV0cyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2V4dGhkcihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2X25ldywKJiM0MzsJCQkJICB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNl9vcmlnID0gaXB2Nl9oZHIoZS0mZ3Q7c2tiKTsKJiM0MzsJaW50IGV4dGhkcl9jbnQgPSAwLCBzdGFydCA9IHNpemVvZigqaXA2X29yaWcpOwomIzQzOwljb25zdCB1OCAqZGF0YSA9IChjb25zdCB1OCAqKWlwNl9uZXc7CiYjNDM7CXU4IG9yaWdfbmV4dGhkciA9IGlwNl9vcmlnLSZndDtuZXh0aGRyOwomIzQzOwl1OCBuZXdfbmV4dGhkciA9IGlwNl9uZXctJmd0O25leHRoZHI7CiYjNDM7CiYjNDM7CWlmIChuZXdfbmV4dGhkciAhPSBvcmlnX25leHRoZHIpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWRhdGEgJiM0Mzs9IHNpemVvZigqaXA2X25ldyk7CiYjNDM7CWRhdGFfbGVuIC09IHNpemVvZigqaXA2X25ldyk7CiYjNDM7CiYjNDM7CXdoaWxlIChpcHY2X2V4dF9oZHIob3JpZ19uZXh0aGRyKSkgewomIzQzOwkJY29uc3Qgc3RydWN0IGlwdjZfb3B0X2hkciAqaHA7CiYjNDM7CQlzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHI7CiYjNDM7CQlpbnQgaGRybGVuOwomIzQzOwomIzQzOwkJaWYgKG9yaWdfbmV4dGhkciA9PSBORVhUSERSX05PTkUpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQlpZiAodW5saWtlbHkoZXh0aGRyX2NudCYjNDM7JiM0MzsgJmd0Oz0gSVA2X01BWF9FWFRfSERSU19DTlQpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCWhwID0gc2tiX2hlYWRlcl9wb2ludGVyKGUtJmd0O3NrYiwgc3RhcnQsIHNpemVvZihfaGRyKSwgJmFtcDtfaGRyKTsKJiM0MzsJCWlmICghaHApCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJc3dpdGNoIChvcmlnX25leHRoZHIpIHsKJiM0MzsJCWNhc2UgTkVYVEhEUl9GUkFHTUVOVDoKJiM0MzsJCQloZHJsZW4gPSBzaXplb2Yoc3RydWN0IGZyYWdfaGRyKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgTkVYVEhEUl9BVVRIOgomIzQzOwkJCWhkcmxlbiA9IGlwdjZfYXV0aGxlbihocCk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWhkcmxlbiA9IGlwdjZfb3B0bGVuKGhwKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihkYXRhLCBkYXRhX2xlbiwgZSwKJiM0MzsJCQkJCSAgICAgICBzdGFydCwgaGRybGVuKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlvcmlnX25leHRoZHIgPSBocC0mZ3Q7bmV4dGhkcjsKJiM0MzsJCWhwID0gKGNvbnN0IHZvaWQgKilkYXRhOwomIzQzOwkJbmV3X25leHRoZHIgPSBocC0mZ3Q7bmV4dGhkcjsKJiM0MzsKJiM0MzsJCWlmIChuZXdfbmV4dGhkciAhPSBvcmlnX25leHRoZHIpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJZGF0YV9sZW4gLT0gaGRybGVuOwomIzQzOwkJc3RhcnQgJiM0Mzs9IGhkcmxlbjsKJiM0MzsJCWRhdGEgJiM0Mzs9IGhkcmxlbjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfaXA2KGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDYsIHVuc2lnbmVkIGludCBkYXRhX2xlbiwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKQomIzQzO3sKJiM0MzsJaWYgKGRhdGFfbGVuICZsdDsgc2l6ZW9mKCppcDYpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBCSUcgVENQL2p1bWJvZ3JhbXMgd29uJiMzOTt0IHdvcms7IG5ldGxpbmsgYXR0ciBsZW4gaXMgdTE2ICovCiYjNDM7CWlmIChudG9ocyhpcDYtJmd0O3BheWxvYWRfbGVuKSAhPSBkYXRhX2xlbiAtIHNpemVvZigqaXA2KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKGlwNi0mZ3Q7dmVyc2lvbiAhPSA2KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGlwNiwgZGF0YV9sZW4sIGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV93cml0ZShjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGUtJmd0O3N0YXRlLnBmKSB7CiYjNDM7CWNhc2UgTkZQUk9UT19JUFY0OgomIzQzOwkJcmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwNChkYXRhLCBkYXRhX2xlbiwgZSk7CiYjNDM7CWNhc2UgTkZQUk9UT19JUFY2OgomIzQzOwkJcmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwNihkYXRhLCBkYXRhX2xlbiwgZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICAgICEoSVA2Q0IoZS0mZ3Q7c2tiKS0mZ3Q7ZmxhZ3MgJmFtcDsgSVA2U0tCX0pVTUJPR1JBTSk7CiYjNDM7CWNhc2UgTkZQUk9UT19CUklER0U6CiYjNDM7CQkvKiBObyB3cml0ZSBzdXBwb3J0LiBCcmlkZ2UgaXMgZHViaW91czogdXNlcnNwYWNlIGRvZXNuJiMzOTt0IGV2ZW4gc2VlIEwyIGhlYWRlciAqLwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50CiBuZnFubF9tYW5nbGUodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIGludCBkaWZmKQogewpAQCAtMTE5Miw2ICYjNDM7MTM1OSw5IEBAIG5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpCiAJaWYgKGUtJmd0O3N0YXRlLm5ldC0mZ3Q7dXNlcl9ucyAhPSAmYW1wO2luaXRfdXNlcl9ucykKIAkJcmV0dXJuIC1FUEVSTTsKIAomIzQzOwlpZiAoIW5mcW5sX3ZhbGlkYXRlX3dyaXRlKGRhdGEsIGRhdGFfbGVuLCBlKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCWlmIChkaWZmICZsdDsgMCkgewogCQl1bnNpZ25lZCBpbnQgbWluX2xlbiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KGUtJmd0O3NrYik7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmliLmMKaW5kZXggZTA0OGYwNTY5NGNkZGQuLjg5NTU1MzgwZjFjNWEwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9maWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9maWIuYwpAQCAtMzEsNiAmIzQzOzMxLDE1IEBAIGludCBuZnRfZmliX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcikKIAljb25zdCBzdHJ1Y3QgbmZ0X2ZpYiAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7CiAJdW5zaWduZWQgaW50IGhvb2tzOwogCiYjNDM7CXN3aXRjaCAoY3R4LSZndDtmYW1pbHkpIHsKJiM0MzsJY2FzZSBORlBST1RPX0lQVjQ6CiYjNDM7CWNhc2UgTkZQUk9UT19JUFY2OgomIzQzOwljYXNlIE5GUFJPVE9fSU5FVDoKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJc3dpdGNoIChwcml2LSZndDtyZXN1bHQpIHsKIAljYXNlIE5GVF9GSUJfUkVTVUxUX09JRjoKIAljYXNlIE5GVF9GSUJfUkVTVUxUX09JRk5BTUU6CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMKaW5kZXggM2YzNDc4YWJkODQ1NDYuLjU3NzRhNzU0NDAyNzgwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jCkBAIC01MCw2ICYjNDM7NTAsMzMgQEAgc3RhdGljIHZvaWQgbmZ0X2ZpYl9uZXRkZXZfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiAJcmVncy0mZ3Q7dmVyZGljdC5jb2RlID0gTkZUX0JSRUFLOwogfQogCiYjNDM7c3RhdGljIGludCBuZnRfZmliX25ldGRldl92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgbmZ0X2ZpYiAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7CiYjNDM7CXVuc2lnbmVkIGludCBob29rczsKJiM0MzsKJiM0MzsJc3dpdGNoIChwcml2LSZndDtyZXN1bHQpIHsKJiM0MzsJY2FzZSBORlRfRklCX1JFU1VMVF9PSUY6CiYjNDM7CWNhc2UgTkZUX0ZJQl9SRVNVTFRfT0lGTkFNRToKJiM0MzsJCWhvb2tzID0gKDEgJmx0OyZsdDsgTkZfTkVUREVWX0lOR1JFU1MpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZUX0ZJQl9SRVNVTFRfQUREUlRZUEU6CiYjNDM7CQlpZiAocHJpdi0mZ3Q7ZmxhZ3MgJmFtcDsgTkZUQV9GSUJfRl9JSUYpCiYjNDM7CQkJaG9va3MgPSAoMSAmbHQ7Jmx0OyBORl9ORVRERVZfSU5HUkVTUyk7CiYjNDM7CQllbHNlIGlmIChwcml2LSZndDtmbGFncyAmYW1wOyBORlRBX0ZJQl9GX09JRikKJiM0MzsJCQlob29rcyA9ICgxICZsdDsmbHQ7IE5GX05FVERFVl9FR1JFU1MpOwomIzQzOwkJZWxzZQomIzQzOwkJCWhvb2tzID0gKDEgJmx0OyZsdDsgTkZfTkVUREVWX0lOR1JFU1MpIHwKJiM0MzsJCQkJKDEgJmx0OyZsdDsgTkZfTkVUREVWX0VHUkVTUyk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBuZnRfY2hhaW5fdmFsaWRhdGVfaG9va3MoY3R4LSZndDtjaGFpbiwgaG9va3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmliX25ldGRldl90eXBlOwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2ZpYl9uZXRkZXZfb3BzID0gewogCS50eXBlCQk9ICZhbXA7bmZ0X2ZpYl9uZXRkZXZfdHlwZSwKQEAgLTU3LDcgJiM0Mzs4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHsKIAkuZXZhbAkJPSBuZnRfZmliX25ldGRldl9ldmFsLAogCS5pbml0CQk9IG5mdF9maWJfaW5pdCwKIAkuZHVtcAkJPSBuZnRfZmliX2R1bXAsCi0JLnZhbGlkYXRlCT0gbmZ0X2ZpYl92YWxpZGF0ZSwKJiM0MzsJLnZhbGlkYXRlCT0gbmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2ZpYl9uZXRkZXZfdHlwZSBfX3JlYWRfbW9zdGx5ID0gewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCmluZGV4IDM0NWVmZjE0MGQ1NmY4Li4zOTE1MzlhMWNlYWE3NyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwpAQCAtODM0LDYgJiM0Mzs4MzQsMjQ5IEBAIG5mdF9wYXlsb2FkX3NldF92bGFuKGNvbnN0IHUzMiAqc3JjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgb2Zmc2V0LCB1OCBsZW4sCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MzsvKiBJbmdyZXNzIGlzIHZlcnkgZWFybHksIGJlZm9yZSBsMyBwcm90b2NvbCBoYW5kbGVycy4KJiM0MzsgKiBUaGVyZSBzaG91bGQgYmUgbm8gaW4tdHJlZSBjb2RlIHRoYXQgdHJ1c3RzIGwzL2w0IGhlYWRlcnMKJiM0MzsgKiBiZXR3ZWVuIGluZ3Jlc3MgYW5kIE5GX0lORVRfUFJFX1JPVVRJTkcgaG9va3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgbmZ0X2luX2luZ3Jlc3MoY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnMpCiYjNDM7ewomIzQzOwlyZXR1cm4gcy0mZ3Q7cGYgPT0gTkZQUk9UT19ORVRERVYgJmFtcDsmYW1wOyBzLSZndDtob29rID09IE5GX05FVERFVl9JTkdSRVNTOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfaXA0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAomIzQzOwkJCQljb25zdCB1MzIgKnNyYykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBvZmZzZXQgPSBwcml2LSZndDtvZmZzZXQgJiM0Mzsgc2tiX25ldHdvcmtfb2Zmc2V0KHBrdC0mZ3Q7c2tiKTsKJiM0MzsJY29uc3QgdTggKm5ld19vY3RldHMgPSAoY29uc3QgdTggKilzcmM7CiYjNDM7CXU4IG9sZF9vY3RldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChwcml2LSZndDtvZmZzZXQpIHsKJiM0MzsJY2FzZSAwOiAvKiBjc3VtIGZpeHVwcyBkb2VzIGV4cGFuZCBkc2NwL3RvcyBzdG9yZSB0byAyIGJ5dGVzLgomIzQzOwkJICogbWFrZSBzdXJlIGlobC92ZXJzaW9uIHJlbWFpbiB1bmNoYW5nZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChza2JfY29weV9iaXRzKHBrdC0mZ3Q7c2tiLCBvZmZzZXQsICZhbXA7b2xkX29jdGV0LCBzaXplb2Yob2xkX29jdGV0KSkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2xlbiA9PSAyICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgICAqbmV3X29jdGV0cyA9PSBvbGRfb2N0ZXQ7CiYjNDM7CWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCB0b3MpOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2xlbiA9PSAxOwomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgaWQpOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2xlbiA9PSAyOwomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgdHRsKToKJiM0MzsJCWlmIChwcml2LSZndDtsZW4gPT0gMSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJCWlmIChwcml2LSZndDtsZW4gIT0gMikKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQkvKiBzYW1lLCBjc3VtIGZpeHVwIGRvZXMgZXhwYW5kIHR0bCBzdG9yZSB0byB0d28gYnl0ZXMuCiYjNDM7CQkgKiBjaGVjayBwcm90b2NvbCBpcyBub3QgYWx0ZXJlZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHNrYl9jb3B5X2JpdHMocGt0LSZndDtza2IsIG9mZnNldCAmIzQzOyAxLCAmYW1wO29sZF9vY3RldCwgc2l6ZW9mKG9sZF9vY3RldCkpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCXJldHVybiBuZXdfb2N0ZXRzWzFdID09IG9sZF9vY3RldDsKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKToKJiM0MzsJCXJldHVybiBwcml2LSZndDtsZW4gJmx0Oz0gMiAmIzQzOyA0ICYjNDM7IDQ7CiYjNDM7CWNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7bGVuICZsdDs9IDQgJiM0MzsgNDsKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKToKJiM0MzsJCXJldHVybiBwcml2LSZndDtsZW4gJmx0Oz0gNDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19pcDYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsCiYjNDM7CQkJCWNvbnN0IHUzMiAqc3JjKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmloID0gKGNvbnN0IHZvaWQgKilzcmM7CiYjNDM7CiYjNDM7CXN3aXRjaCAocHJpdi0mZ3Q7b2Zmc2V0KSB7CiYjNDM7CWNhc2UgMDogLyogc3RvcmUgdG8gZHNjcCBtdXN0IG5vdCBhbHRlciBpcDYgdmVyc2lvbiAqLwomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2xlbiAmbHQ7PSA0ICZhbXA7JmFtcDsgaWgtJmd0O3ZlcnNpb24gPT0gNjsKJiM0MzsJY2FzZSAyOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2xlbiAmbHQ7PSAyOwomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBob3BfbGltaXQpOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2xlbiA9PSAxOwomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBzYWRkcik6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7bGVuICZsdDs9IDE2ICYjNDM7IDE2OwomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBkYWRkcik6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7bGVuICZsdDs9IDE2OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2FycChjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KQomIzQzO3sKJiM0MzsJLyogVmFyaWFibGUgc2l6ZSBmb3Igc3RhbmRhcmQgZXRoZXJuZXQgYXJwICovCiYjNDM7CWNvbnN0IHVuc2lnbmVkIGludCBldGhfaXAgPSAyICogKEVUSF9BTEVOICYjNDM7IDQpOwomIzQzOwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcHJpdi0mZ3Q7b2Zmc2V0OwomIzQzOwomIzQzOwlzd2l0Y2ggKG9mZnNldCkgewomIzQzOwljYXNlIG9mZnNldG9mKHN0cnVjdCBhcnBoZHIsIGFyX29wKToKJiM0MzsJCXJldHVybiBwcml2LSZndDtsZW4gPT0gMjsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHBlcm1pdCB3cml0ZXMgcG9zdCBmaXhlZCBhcnAgaGVhZGVyIHNpemUuIG9mZnNldCAmIzQzOyBsZW4gYXJlCiYjNDM7CSAqIGNoZWNrZWQgdnMgc2tiIHNpemUgdmlhIHNrYl9lbnN1cmVfd3JpdGFibGUuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gb2Zmc2V0ICZndDs9IHNpemVvZihzdHJ1Y3QgYXJwaGRyKSAmYW1wOyZhbXA7IHByaXYtJmd0O2xlbiAmbHQ7PSBldGhfaXA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19uZXRkZXYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJCSAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsCiYjNDM7CQkJCSAgIGNvbnN0IHUzMiAqc3JjKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVYKJiM0MzsJc3dpdGNoIChwa3QtJmd0O3NrYi0mZ3Q7cHJvdG9jb2wpIHsKJiM0MzsJY2FzZSBodG9ucyhFVEhfUF9BUlApOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19hcnAocHJpdik7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDQocGt0LCBwcml2LCBzcmMpOwomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDYocGt0LCBwcml2LCBzcmMpOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CS8qIGRlZmF1bHQgdG8gZmFsc2UgZm9yIG5vdywgcmVsYXggbGF0ZXIgaW4gY2FzZSB3ZSBoYXZlCiYjNDM7CSAqIHVzZS1jYXNlcyB0aGF0IG5lZWQgaW5uZXIgaGVhZGVyIG1hbmlwdWxhdGlvbiBmb3IKJiM0MzsJICogZW5jYXBzdWxhdGVkIHRyYWZmaWMgbGlrZSB2bGFuIG9yIFBQUG9FLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYnJpZGdlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAomIzQzOwkJCQkgICBjb25zdCB1MzIgKnNyYykKJiM0Mzt7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX1RBQkxFU19CUklER0UpCiYjNDM7CXN3aXRjaCAocGt0LSZndDtldGhlcnR5cGUpIHsKJiM0MzsJY2FzZSBodG9ucyhFVEhfUF9BUlApOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19hcnAocHJpdik7CiYjNDM7CWNhc2UgaHRvbnMoRVRIX1BfSVApOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDQocGt0LCBwcml2LCBzcmMpOwomIzQzOwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDYocGt0LCBwcml2LCBzcmMpOwomIzQzOwl9CiYjNDM7I2VuZGlmCiYjNDM7CS8qIHNlZSBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2OiBkZWZhdWx0IHRvIGZhbHNlICovCiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAomIzQzOwkJCSAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAomIzQzOwkJCSAgICBjb25zdCB1MzIgKnNyYykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAocGt0LSZndDtzdGF0ZS0mZ3Q7cGYpIHsKJiM0MzsJY2FzZSBORlBST1RPX0FSUDoKJiM0MzsJCXJldHVybiBuZnRfbmhfd3JpdGVfb2tfYXJwKHByaXYpOwomIzQzOwljYXNlIE5GUFJPVE9fQlJJREdFOgomIzQzOwkJcmV0dXJuIG5mdF9uaF93cml0ZV9va19icmlkZ2UocGt0LCBwcml2LCBzcmMpOwomIzQzOwljYXNlIE5GUFJPVE9fSVBWNDoKJiM0MzsJCXJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA0KHBrdCwgcHJpdiwgc3JjKTsKJiM0MzsJY2FzZSBORlBST1RPX0lQVjY6CiYjNDM7CQlyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNihwa3QsIHByaXYsIHNyYyk7CiYjNDM7CWNhc2UgTkZQUk9UT19ORVRERVY6CiYjNDM7CQlpZiAocGt0LSZndDtzdGF0ZS0mZ3Q7aG9vayA9PSBORl9ORVRERVZfSU5HUkVTUykKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2KHBrdCwgcHJpdiwgc3JjKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOy8qIGNoZWNrIGxpbmtsYXllciBtb2RpZmljYXRpb25zIGRvbiYjMzk7dCBzcGlsbCBpbnRvIG5ldHdvcmsgaGVhZGVyLiAqLwomIzQzO3N0YXRpYyBib29sIG5mdF9sbF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgaW50IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWlmIChuZnRfaW5faW5ncmVzcyhwa3QtJmd0O3N0YXRlKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gb2Zmc2V0ICZsdDs9IHNrYl9uZXR3b3JrX29mZnNldChwa3QtJmd0O3NrYik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKJiM0MzsJCQkJCQkgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHByaXYtJmd0O2Jhc2UpIHsKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjoKJiM0MzsJCWlmIChjdHgtJmd0O2ZhbWlseSA9PSBORlBST1RPX0lQVjQpIHsKJiM0MzsJCQlpZiAob2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjaykgPT0gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQpCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybiB0cnVlOyAvKiBydW4gdGltZSB2YWxpZGF0aW9uIHJlcXVpcmVkICovCiYjNDM7CWNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjoKJiM0MzsJCWlmIChwcml2LSZndDtjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgJiMzNDtyZS11cGRhdGUmIzM0OyBvZiBMNCBjaGVja3N1bSAqLwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCS8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbiYjMzk7dCBiZSBuZWdhdGl2ZSBzbyBib2d1cwomIzQzOwkJICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy4KJiM0MzsJCSAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MzsvKiBkbyBub3QgYWxsb3cgYXJiaXRyYXJ5IG5ldHdvcmsgaGVhZGVyIG1hbmdsaW5nIHZpYSBib2d1cyBjc3VtX29mZi4KJiM0MzsgKiBXZSBvbmx5IHN1cHBvcnQgaXB2NC4gIE9ubHkgTkZQUk9UT19JUFY0IGNhbiBiZSBjaGVja2VkIGZyb20gY29udHJvbAomIzQzOyAqIHBsYW5lLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiwKJiM0MzsJCQkJCSBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAocGt0LSZndDtzdGF0ZS0mZ3Q7cGYpIHsKJiM0MzsJY2FzZSBORlBST1RPX0lQVjQ6CiYjNDM7CQkvKiBXYXJuaW5nOiBORlBST1RPX0lORVQgd2FzIG5vdCBjaGVja2VkOyB3ZSBjYW4mIzM5O3QgcmV0dXJuIHRydWUgaGVyZS4gKi8KJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTsKJiM0MzsJY2FzZSBORlBST1RPX0lQVjY6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWNhc2UgTkZQUk9UT19CUklER0U6CiYjNDM7CQlyZXR1cm4gcGt0LSZndDtldGhlcnR5cGUgPT0gaHRvbnMoRVRIX1BfSVApICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTsKJiM0MzsJY2FzZSBORlBST1RPX05FVERFVjoKJiM0MzsJCXJldHVybiBwa3QtJmd0O3NrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHByaXYtJmd0O2Jhc2UpIHsKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjoKJiM0MzsJCXJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7CiYjNDM7CWNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjoKJiM0MzsJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6CiYjNDM7CQkvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmUKJiM0MzsJCSAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC4KJiM0MzsJCSAqLwomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiAJCQkJIHN0cnVjdCBuZnRfcmVncyAqcmVncywKIAkJCQkgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpCkBAIC04NjEsOCAmIzQzOzExMDQsMTIgQEAgc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCQl9CiAKIAkJb2Zmc2V0ID0gc2tiX21hY19oZWFkZXIoc2tiKSAtIHNrYi0mZ3Q7ZGF0YSAtIHZsYW5faGxlbjsKJiM0MzsJCWlmICghbmZ0X2xsX3dyaXRlX29rKHBrdCwgcHJpdi0mZ3Q7bGVuICYjNDM7IHByaXYtJmd0O29mZnNldCAmIzQzOyBvZmZzZXQpKQomIzQzOwkJCWdvdG8gZXJyOwogCQlicmVhazsKIAljYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOgomIzQzOwkJaWYgKCFuZnRfbmhfd3JpdGVfb2socGt0LCBwcml2LCBzcmMpKQomIzQzOwkJCWdvdG8gZXJyOwogCQlvZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTsKIAkJYnJlYWs7CiAJY2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOgpAQCAtODk0LDYgJiM0MzsxMTQxLDcgQEAgc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCQl0c3VtID0gY3N1bV9wYXJ0aWFsKHNyYywgcHJpdi0mZ3Q7bGVuLCAwKTsKIAogCQlpZiAocHJpdi0mZ3Q7Y3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpICZhbXA7JmFtcDsKIAkJICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKQogCQkJZ290byBlcnI7CiAKQEAgLTk2MCw3ICYjNDM7MTIwOCwyNiBAQCBzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAKIAlzd2l0Y2ggKGNzdW1fdHlwZSkgewogCWNhc2UgTkZUX1BBWUxPQURfQ1NVTV9OT05FOgomIzQzOwkJaWYgKHByaXYtJmd0O2NzdW1fb2Zmc2V0KSAvKiBub25zZW5zaWNhbCAqLwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKHByaXYtJmd0O2NzdW1fZmxhZ3MgPT0gMCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIFVzZXJzcGFjZSByZXF1ZXN0cyBMNCBjaGVja3N1bSB1cGRhdGUsIGUuZy46CiYjNDM7CQkgKiAtIElQdjYgc3RhdGVsZXNzIE5BVCAobm8gbDMgY3N1bSkKJiM0MzsJCSAqIC0gdHJhbnNwb3J0IGhlYWRlciBtYW5nbGluZwomIzQzOwkJICogLSBpbm5lciBkYXRhIG1hbmdsaW5nCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChwcml2LSZndDtiYXNlID09IE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7YmFzZSA9PSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7YmFzZSA9PSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVIpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAljYXNlIE5GVF9QQVlMT0FEX0NTVU1fSU5FVDoKJiM0MzsJCWlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAljYXNlIE5GVF9QQVlMT0FEX0NTVU1fU0NUUDoKIAkJaWYgKHByaXYtJmd0O2Jhc2UgIT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUikKQEAgLTk2OCw2ICYjNDM7MTIzNSw5IEBAIHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAogCQlpZiAocHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgIT0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKSkKIAkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKHByaXYtJmd0O2NzdW1fZmxhZ3MpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYwppbmRleCA3MDZjNzg4NTNmMjQ1Yi4uOTc4YmIwYzAxMTA2ODIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMKQEAgLTM0Miw2ICYjNDM7MzQyLDggQEAKICNpbmNsdWRlICYjMzQ7bmZ0X3NldF9waXBhcG9fYXZ4Mi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bmZ0X3NldF9waXBhcG8uaCYjMzQ7CiAKJiM0MztzdGF0aWMgdm9pZCBuZnRfcGlwYXBvX2Fib3J0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpOwomIzQzOwogLyoqCiAgKiBwaXBhcG9fcmVmaWxsKCkgLSBGb3IgZWFjaCBzZXQgYml0LCBzZXQgYml0cyBmcm9tIHNlbGVjdGVkIG1hcHBpbmcgdGFibGUgaXRlbQogICogQG1hcDoJQml0bWFwIHRvIGJlIHNjYW5uZWQgZm9yIHNldCBiaXRzCkBAIC0xMjk2LDcgJiM0MzsxMjk4LDcgQEAgc3RhdGljIGludCBuZnRfcGlwYXBvX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsCiAJY29uc3QgdTggKnN0YXJ0X3AsICplbmRfcDsKIAlpbnQgaSwgYnNpemVfbWF4LCBlcnIgPSAwOwogCi0JaWYgKCFtKQomIzQzOwlpZiAoIW0gfHwgbS0mZ3Q7c3RhdGUgPT0gTkZUX1BJUEFQT19DTE9ORV9FUlIpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0tFWV9FTkQpKQpAQCAtMTM2Nyw4ICYjNDM7MTM2OSwxMCBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKIAkJZWxzZQogCQkJcmV0ID0gcGlwYXBvX2V4cGFuZChmLCBzdGFydCwgZW5kLCBmLSZndDtncm91cHMgKiBmLSZndDtiYik7CiAKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCQllcnIgPSByZXQ7CiYjNDM7CQkJZ290byBhYm9ydDsKJiM0MzsJCX0KIAogCQlpZiAoZi0mZ3Q7YnNpemUgJmd0OyBic2l6ZV9tYXgpCiAJCQlic2l6ZV9tYXggPSBmLSZndDtic2l6ZTsKQEAgLTEzODQsNyAmIzQzOzEzODgsNyBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKIAogCQllcnIgPSBwaXBhcG9fcmVhbGxvY19zY3JhdGNoKG0sIGJzaXplX21heCk7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwomIzQzOwkJCWdvdG8gYWJvcnQ7CiAKIAkJbS0mZ3Q7YnNpemVfbWF4ID0gYnNpemVfbWF4OwogCX0gZWxzZSB7CkBAIC0xMzk2LDcgJiM0MzsxNDAwLDI2IEBAIHN0YXRpYyBpbnQgbmZ0X3BpcGFwb19pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAogCiAJcGlwYXBvX21hcChtLCBydWxlbWFwLCBlKTsKIAomIzQzOwltLSZndDtzdGF0ZSA9IE5GVF9QSVBBUE9fQ0xPTkVfTU9EOwogCXJldHVybiAwOwomIzQzO2Fib3J0OgomIzQzOwlERUJVR19ORVRfV0FSTl9PTl9PTkNFKG0tJmd0O3N0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfRVJSKTsKJiM0MzsKJiM0MzsJLyogVHdvIHJvbGxiYWNrIGNhc2VzOgomIzQzOwkgKiAxKSBubyBwcmV2aW91cyBjaGFuZ2VzLiAgbmZ0X3BpcGFwb19hYm9ydCBpcyBub3QKJiM0MzsJICogZ3VhcmFudGVlZCB0byBiZSBpbnZva2VkICh0aGVyZSBtaWdodCBiZSBubyBmdXJ0aGVyCiYjNDM7CSAqIGFkZC9kZWxldGUgcmVxdWVzdHMgY29taW5nIGFmdGVyIHRoaXMpLgomIzQzOwkgKgomIzQzOwkgKiAyKSB3ZSBoYWQgcHJldmlvdXMgY2hhbmdlczogdGhlcmUgYXJlIHRyYW5zYWN0aW9uCiYjNDM7CSAqIHJlY29yZHMgcG9pbnRpbmcgdG8gdGhpcyBzZXQuICBMZWF2ZSB0aGUgcm9sbGJhY2sgdG8KJiM0MzsJICogdGhlIHRyYW5zYWN0aW9uIGhhbmRsaW5nLgomIzQzOwkgKi8KJiM0MzsJaWYgKG0tJmd0O3N0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfTkVXKQomIzQzOwkJbmZ0X3BpcGFwb19hYm9ydChzZXQpOyAvKiByZWxlYXNlcyBtICovCiYjNDM7CWVsc2UKJiM0MzsJCW0tJmd0O3N0YXRlID0gTkZUX1BJUEFQT19DTE9ORV9FUlI7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIC8qKgpAQCAtMTQ3Myw2ICYjNDM7MTQ5Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqcGlwYXBvX2Nsb25lKHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICpvbGQpCiAJCWRzdCYjNDM7JiM0Mzs7CiAJfQogCiYjNDM7CW5ldy0mZ3Q7c3RhdGUgPSBORlRfUElQQVBPX0NMT05FX05FVzsKIAlyZXR1cm4gbmV3OwogCiBvdXRfbXQ6CkBAIC0xODk2LDcgJiM0MzsxOTIwLDcgQEAgbmZ0X3BpcGFwb19kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKIAkvKiByZW1vdmFsIG11c3Qgb2NjdXIgb24gcHJpdi0mZ3Q7Y2xvbmUsIGlmIHdlIGFyZSBsb3cgb24gbWVtb3J5CiAJICogd2UgaGF2ZSBubyBjaG9pY2UgYW5kIG11c3QgZmFpbCB0aGUgcmVtb3ZhbCByZXF1ZXN0LgogCSAqLwotCWlmICghbSkKJiM0MzsJaWYgKCFtIHx8IG0tJmd0O3N0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfRVJSKQogCQlyZXR1cm4gTlVMTDsKIAogCWUgPSBwaXBhcG9fZ2V0KG0sIChjb25zdCB1OCAqKWVsZW0tJmd0O2tleS52YWwuZGF0YSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaCBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaAppbmRleCBiODJhYmIwMzU3NmVkZC4uYTE5ZTk4MGQwNmVmNDIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmgKQEAgLTEzMSw5ICYjNDM7MTMxLDE2IEBAIHN0cnVjdCBuZnRfcGlwYXBvX3NjcmF0Y2ggewogCXVuc2lnbmVkIGxvbmcgX19tYXBbXTsKIH07CiAKJiM0MztlbnVtIG5mdF9waXBhcG9fY2xvbmVfc3RhdGUgewomIzQzOwlORlRfUElQQVBPX0NMT05FX05FVywKJiM0MzsJTkZUX1BJUEFQT19DTE9ORV9NT0QsCiYjNDM7CU5GVF9QSVBBUE9fQ0xPTkVfRVJSLAomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoIC0gRGF0YSB1c2VkIGZvciBsb29rdXAgYW5kIG1hdGNoaW5nCiAgKiBAZmllbGRfY291bnQ6CUFtb3VudCBvZiBmaWVsZHMgaW4gc2V0CiYjNDM7ICogQHN0YXRlOgkJYWRkL2RlbGV0ZSBzdGF0ZTsgdXNlZCBmcm9tIGNvbnRyb2wgcGxhbmUKICAqIEBic2l6ZV9tYXg6CQlNYXhpbXVtIGxvb2t1cCB0YWJsZSBidWNrZXQgc2l6ZSBvZiBhbGwgZmllbGRzLCBpbiBsb25ncwogICogQHNjcmF0Y2g6CQlQcmVhbGxvY2F0ZWQgcGVyLUNQVSBtYXBzIGZvciBwYXJ0aWFsIG1hdGNoaW5nIHJlc3VsdHMKICAqIEByY3U6CQlNYXRjaGluZyBkYXRhIGlzIHN3YXBwZWQgb24gY29tbWl0cwpAQCAtMTQxLDYgJiM0MzsxNDgsNyBAQCBzdHJ1Y3QgbmZ0X3BpcGFwb19zY3JhdGNoIHsKICAqLwogc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggewogCXU4IGZpZWxkX2NvdW50OwomIzQzOwllbnVtIG5mdF9waXBhcG9fY2xvbmVfc3RhdGUgc3RhdGU6ODsKIAl1bnNpZ25lZCBpbnQgYnNpemVfbWF4OwogCXN0cnVjdCBuZnRfcGlwYXBvX3NjcmF0Y2ggKiBfX3BlcmNwdSAqc2NyYXRjaDsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBTZXJpZXMgRXZhbHVhdGlvbjogQSBGdXp6aW5nIE9wcG9ydHVuaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICp5ZXMsIHRoaXMgZGVzZXJ2ZXMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiogSXQmIzM5O3MgdG91Y2hpbmcgcXVpdGUgYSBmZXcgY3JpdGljYWwgYXJlYXMgb2YgdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbTogc3BlY2lmaWNhbGx5LCBhIGRpdmUgaW50byBuZXRsaW5rIHF1ZXVlLCBzb21lIGNoYW5nZXMgdG8gbmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZywgdGhlIGhhbmRsaW5nIG9mIHBpcGFwbyBzZXRzLCBhbmQgY29ubnRyYWNrIGV4cGVjdGF0aW9ucy4gR2l2ZW4gdGhlIHNjb3BlIGFuZCB0aGUgdHlwZXMgb2YgbW9kaWZpY2F0aW9ucywgZnJvbSBsb2NraW5nIGNoYW5nZXMgaW4gYGlwX3NldF9jb3JlLmNgICh0aGF0IGByY3VfcmVhZF9sb2NrYC9gdW5sb2NrYCBpcyBpbnRlcmVzdGluZykgdG8gdmFyaW91cyBpbml0aWFsaXphdGlvbiBhbmQgdmFsaWRhdGlvbiBhZGp1c3RtZW50cyBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMsIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzIGlzIGRlZmluaXRlbHkgdGhlcmUuCgpJdCYjMzk7cyBjbGVhciB0aGF0IHRoaXMgdG91Y2hlcyBvbiB2YXJpb3VzIGNvcmUgbmV0d29yayBmaWx0ZXJpbmcgY29tcG9uZW50cy4gSW4gYG5mX2Nvbm50cmFja19leHBlY3QuY2AgdGhlIGNoYW5nZSB0byBgemFsbG9jYCB3aXRoIGFkZGVkIGluaXRpYWxpemF0aW9uIHJhaXNlcyBpbW1lZGlhdGUgY29uY2VybnMuIFRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIFNJUCBoZWxwZXIgKGBuZl9jb25udHJhY2tfc2lwLmNgKSBzb3VuZCBpbXBvcnRhbnQsIGFzIGRvIHRoZSB2YWxpZGF0aW9ucyBhZGRlZCBpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgIGFuZCBgbmZ0XypgIGZpbGVzLiBUaGUgc3RhdGUgdHJhY2tpbmcgYWRkZWQgdG8gYG5mdF9zZXRfcGlwYXBvLmNgIGxvb2tzIGxpa2UgYW4gYXJlYSB3aGVyZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgc3RhdGUgdHJhbnNpdGlvbnMgY291bGQgYXJpc2UuCgpOb3csIGJlZm9yZSB3ZSBqdW1wIGludG8gdGhlIGZ1enppbmcsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGVkLiBMZXQmIzM5O3Mgc2VlLi4uIHdlJiMzOTtsbCBkZWZpbml0ZWx5IG5lZWQgYENPTkZJR19ORVRGSUxURVJgLCBuYXR1cmFsbHkuIEJleW9uZCB0aGF0LCBJJiMzOTttIHRoaW5raW5nIGBDT05GSUdfTkZfQ09OTlRSQUNLYCwgYENPTkZJR19ORl9DT05OVFJBQ0tfU0lQYCwgYENPTkZJR19ORl9DVF9ORVRMSU5LYCwgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBDT05GSUdfTkZfVEFCTEVTYCwgYW5kIHRoZSBgQ09ORklHX05GVF8qYCBvcHRpb25zLCBzbyBgQ09ORklHX05GVF9GSUJgLCBgQ09ORklHX05GVF9GSUJfTkVUREVWYCwgYENPTkZJR19ORlRfUEFZTE9BRGAsIGFuZCBJIGFsc28gc2F3IHNvbWUgYElQX1NFVGAgcmVmZXJlbmNlcywgc28gd2UgbmVlZCBgQ09ORklHX0lQX1NFVGAuIFdlIG11c3QgZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkIHNvIHRoZSBmdXp6ZXIgY2FuIHByb3Blcmx5IHRlc3QgdGhlc2UgY2hhbmdlcy4KCkkmIzM5O2xsIHF1aWNrbHkgZG8gc29tZSBjb2RlIHNlYXJjaGluZyB0byB2ZXJpZnkgdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCB0aGVuIGdldCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBzZXR1cC4gVGhpcyBsb29rcyBsaWtlIGl0JiMzOTtsbCBiZSBhIGZydWl0ZnVsIGZ1enppbmcgY2FtcGFpZ24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDS19TSVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTMzMD1jb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgbmV0d29ya2luZywgbWF5YmUgZGVidWdnaW5nIGEgcGVyZm9ybWFuY2UgaXNzdWUgb3Igc2V0dGluZyB1cCBzb21lIGFkdmFuY2VkIGZpcmV3YWxsIHJ1bGVzOgoKKipOZXRmaWx0ZXIgYW5kIE5ldGxpbmsgUXVldWUgQ2hlY2sqKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgcGFja2V0IGZpbHRlcmluZyBtZXNzLCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIGJhc2ljcyBhcmUgaW4gcGxhY2UuIFRoZSB3aG9sZSBOZXRmaWx0ZXIgc2V0dXAgcmVsaWVzIGhlYXZpbHkgb24gdGhlIG5ldGxpbmsgcXVldWVpbmcgbWVjaGFuaXNtIGZvciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBTbywgYmVmb3JlIEkgc3RhcnQgcHVsbGluZyBteSBoYWlyIG91dCB0cnlpbmcgdG8gZGVidWcgc29tZSB3ZWlyZCB0cmFmZmljIGJlaGF2aW91ciBvciBtaXNzaW5nIHBhY2tldHMsIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRWAgaXMgZW5hYmxlZC4gSXQmIzM5O3Mgc3VjaCBhIGZ1bmRhbWVudGFsIGNvbXBvbmVudCwgYW5kIEkmIzM5O3ZlIGJlZW4gYml0dGVuIGJ5IGZvcmdldHRpbmcgdG8gY2hlY2sgdGhpcyBiZWZvcmUg4oCTIHdhc3RpbmcgaG91cnMgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2h5IG15IGN1c3RvbSBydWxlcyBhcmVuJiMzOTt0IGJlaW5nIGhpdC4gVGhpcyBpcyBteSBmb3VuZGF0aW9uOyBJIG5lZWQgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIHNvbGlkIGJlZm9yZSBidWlsZGluZyBhbnl0aGluZyBvbiB0b3Agb2YgaXQuIE9uZSBtaXNzaW5nIGNvbmZpZyBvcHRpb24gY2FuIGRlcmFpbCB0aGUgd2hvbGUgb3BlcmF0aW9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgbmV0bGluayBxdWV1ZSBpcyBlbmFibGVkLCBhbmQgdGhlbiBJIGNhbiBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0FDQ1Rcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZRVUVVRSBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBgQ09ORklHX05GVF9GSUJgIGZvciBOZXRmaWx0ZXIgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGBDT05GSUdfTkZUX0ZJQmAgb3B0aW9uIGlzIGVuYWJsZWQuIEkga25vdyB0aGlzIGlzIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZSBGSUIgKEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSkgc3VwcG9ydCB3aXRoaW4gTmV0ZmlsdGVyJiMzOTtzIG5mdGFibGVzIGZyYW1ld29yay4gV2l0aG91dCB0aGlzLCBJIHdvbiYjMzk7dCBoYXZlIHRoZSBuZWNlc3NhcnkgZm91bmRhdGlvbiBmb3IgYWR2YW5jZWQgcm91dGluZyBhbmQgcGFja2V0IGZpbHRlcmluZyBjYXBhYmlsaXRpZXMgdGhhdCBJJiMzOTttIGxpa2VseSB0cnlpbmcgdG8gaW1wbGVtZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZCB0byBwcm9jZWVkIHdpdGggd2hhdGV2ZXIgdGFzayBpcyBhdCBoYW5kLiBUaGlzIGlzIGEgZm91bmRhdGlvbmFsIHN0ZXAsIGFuZCBuZWdsZWN0aW5nIGl0IGNvdWxkIGxlYWQgdG8gaG91cnMgb2Ygd2FzdGVkIGVmZm9ydCBjaGFzaW5nIHBoYW50b20gcHJvYmxlbXMuIFRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZUX0ZJQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NTk5PWNvbmZpZyBORlRfSEFTSFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjA1OmNvbmZpZyBORlRfRklCXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjA2LVx0dHJpc3RhdGVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjA4OmNvbmZpZyBORlRfRklCX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDktXHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JTkVUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY3ND1jb25maWcgTkZUX0ZXRF9ORVRERVZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjY4MDpjb25maWcgTkZUX0ZJQl9ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02ODEtXHRkZXBlbmRzIG9uIE5GVF9GSUJfSVBWNFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRXZhbHVhdGluZyBgQ09ORklHX05GVF9QQVlMT0FEYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UmIzM5O3JlIG9uIHRvcCBvZiBgQ09ORklHX05GVF9QQVlMT0FEYC4gSXQmIzM5O3MgYSBrZXkgZWxlbWVudCwgb2J2aW91c2x5LiBJdCBkaWN0YXRlcyBob3cgd2UmIzM5O3JlIGdvaW5nIHRvIGludGVyYWN0IHdpdGggdGhlIHBheWxvYWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIG5mdGFibGVzLCBhbmQgdGhhdCYjMzk7cyBjcml0aWNhbCBmb3Igb3VyIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IHByb2ZpbGUuIElzIHRoaXMgZW5hYmxlZD8gSXMgaXQgY29ycmVjdGx5IGNvbmZpZ3VyZWQ/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBjb25zaWRlcj8gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBjdXJyZW50IHN0YXR1cyBhbmQgbWFrZSBzdXJlIGl0IGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIHJlcXVpcmVtZW50cyBvZiB0aGUgc3lzdGVtJiMzOTtzIGludGVuZGVkIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgY29uc2lkZXJpbmcgdGhlIG5ldHdvcmsgdHJhZmZpYyBhbmFseXNpcyBhbmQgbWFuaXB1bGF0aW9uIHRoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzZXR0aW5nLCBzbyBJIHdhbnQgdG8gZW5zdXJlIGl0JiMzOTtzIHNldCB1cCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9QQVlMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MTMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbmZ0X3BheWxvYWQuY2AgZmlsZSBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBiZWluZyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgY29uZGl0aW9uYWxseSwgc3BlY2lmaWNhbGx5IGRlcGVuZGluZyBvbiB0aGUgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uIE15IGludHVpdGlvbiBzYXlzIGBDT05GSUdfTkZfVEFCTEVTYCBpcyBsaWtlbHkgdGhlIGtleSB0cmlnZ2VyLCBidXQgaXQgY291bGQgYmUgc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIEkmIzM5O3ZlIGdvdCB0byBjb25maXJtIHRoaXMuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyB3b3VsZCBiZSB0aGUgTmV0ZmlsdGVyIGBNYWtlZmlsZWAsIGluIGBuZXQvbmV0ZmlsdGVyL2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBidWlsZCBydWxlcyBmb3IgdGhpcyBzdHVmZiB3b3VsZCBiZSBkZWZpbmVkLCBzbyBsZXQmIzM5O3MganVtcCBpbiB0aGVyZSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgYWN0dWFsbHkgZG9pbmcgd2l0aCBgbmZ0X3BheWxvYWQuY2AuIEhvcGVmdWxseSwgaXQmIzM5O2xsIGJlIGNsZWFyIHByZXR0eSBxdWlja2x5IHdoZXRoZXIgaXQmIzM5O3MgdW5jb25kaXRpb25hbGx5IGJ1aWx0IHdpdGggYSBzcGVjaWZpYyBjb25maWcgb3IgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyBhdCBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcGF5bG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT04Nz1uZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXHRcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4OTpcdFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MC1cdFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqQXNzZXNzaW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIGBuZnRfcGF5bG9hZC5vYCBpcyBkZWZpbml0ZWx5IGEgY29tcG9uZW50IHdpdGhpbiBgbmZfdGFibGVzLW9ianNgLiBUaGF0IGNvbmZpcm1zIHRoYXQgaGF2aW5nIGBDT05GSUdfTkZfVEFCTEVTYCBlbmFibGVkIGNvdmVycyB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGF0IHBhcnRpY3VsYXIgb2JqZWN0IGZpbGUuIE5vIG5lZWQgdG8gZGlnIGFueSBkZWVwZXIgdGhlcmUuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgSSBzaG91bGQgY2hlY2sgb24gYG5mdF9zZXRfcGlwYXBvYC4gSSBuZWVkIHRvIGFzc2VzcyB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgd2hldGhlciBvciBub3QgZW5hYmxpbmcgYENPTkZJR19ORl9UQUJMRVNgIHN1ZmZpY2llbnRseSBhZGRyZXNzZXMgdGhvc2UgdG9vLiBJJiMzOTttIHNlZWluZyBpdCBmb3IgdGhlIGZpcnN0IHRpbWUsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHRha2UgY2FyZSBvZiBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBiYXNlIGBuZl90YWJsZXNgIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldF9waXBhcG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05My1cdFx0ICBuZnRfc2V0X2hhc2gubyBuZnRfc2V0X2JpdG1hcC5vIG5mdF9zZXRfcmJ0cmVlLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6OTQ6XHRcdCAgbmZ0X3NldF9waXBhcG8ub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS05NS1cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTk3PWlmbmRlZiBDT05GSUdfVU1MXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjk4Om5mX3RhYmxlcy1vYmpzICYjNDM7PSBuZnRfc2V0X3BpcGFwb19hdngyLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTktZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipDb25zaWRlcmluZyBEZXBlbmRlbmNpZXMgYW5kIFJlbGF0ZWQgTW9kdWxlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmZfdGFibGVzLW9ianNgIHRoaW5nLiBSaWdodCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEga2V5IGNvbXBvbmVudC4gQnV0LCBJIG5lZWQgdG8gem9vbSBvdXQgYSBiaXQuIFdoYXQgZWxzZSBpcyBpbiBwbGF5IGhlcmU/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgYG5mbmV0bGlua19jdGhlbHBlcmAuIElzIGl0IGRpcmVjdGx5IHJlbGF0ZWQ/IElzIGl0IGEgZGVwZW5kZW5jeT8gT3IgaXMgaXQgc29tZXRoaW5nIHRoYXQgaW50ZXJhY3RzIHdpdGggYG5mX3RhYmxlcy1vYmpzYCBpbiBzb21lIG90aGVyIHNpZ25pZmljYW50IHdheT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIG92ZXJhbGwgcGljdHVyZSwgaWYgYW55LiBEaWdnaW5nIGludG8gdGhlIHJlbGF0aW9uc2hpcHMgaGVyZSB3aWxsIHBhaW50IGEgYmV0dGVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mbmV0bGlua19jdGhlbHBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0zOD1vYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19USU1FT1VUKSAmIzQzOz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjM5Om9iai0kKENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUikgJiM0Mzs9IG5mbmV0bGlua19jdGhlbHBlci5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk1MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYWJ5cmludGgqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCByZXF1aXJlcyBgQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZCB0byBnZXQgcm9sbGluZy4gTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBtb21lbnQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyB0aGF0IG9mdGVuIGludGVyc2VjdHMgd2l0aCB0aGlzIGFyZWEg4oCTIHNwZWNpZmljYWxseSwgYENPTkZJR19JUF9TRVRgLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgb2Z0ZW4gYSBwcmVyZXF1aXNpdGUgb3IgYXQgbGVhc3QgYSByZWxhdGVkIGZlYXR1cmUuIExldCYjMzk7cyBtYWtlIHN1cmUgaXTigJlzIGVuYWJsZWQgb3IgYXQgbGVhc3QgdW5kZXJzdG9vZCBpbiB0aGlzIGNvbnRleHQgYmVmb3JlIEkgcHJvY2VlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgbmV0bGluayBoZWxwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MjptZW51Y29uZmlnIElQX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJUCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xND1pZiBJUF9TRVRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjpjb25maWcgSVBfU0VUX01BWFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE3LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIElQIHNldHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mjg6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O2JpdG1hcDppcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zNi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzozNzpjb25maWcgSVBfU0VUX0JJVE1BUF9JUE1BQ1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7Yml0bWFwOmlwLG1hYyBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy00NS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo0Njpjb25maWcgSVBfU0VUX0JJVE1BUF9QT1JUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtiaXRtYXA6cG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01NC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy01Ni1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NjU6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFSS1xubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTY2LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxtYXJrIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTczLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjc0OmNvbmZpZyBJUF9TRVRfSEFTSF9JUFBPUlRcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04Mi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy04NC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo5Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUTkVUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctOTQtXHR0cmlzdGF0ZSBcJiMzNDtoYXNoOmlwLHBvcnQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEwMi1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMDM6Y29uZmlnIElQX1NFVF9IQVNIX0lQTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDppcCxtYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTExLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTEzLVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDptYWMgc2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEyMTpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyMi1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LHBvcnQsbmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEyOS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzA6Y29uZmlnIElQX1NFVF9IQVNIX05FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0IHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzOC1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE0MC1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTQ4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRQT1JUXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTQ5LVx0dHJpc3RhdGUgXCYjMzQ7aGFzaDpuZXQscG9ydCBzZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNTctXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MTU4OmNvbmZpZyBJUF9TRVRfSEFTSF9ORVRJRkFDRVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cdHRyaXN0YXRlIFwmIzM0O2hhc2g6bmV0LGlmYWNlIHNldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2Ny1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjg6Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE2OS1cdHRyaXN0YXRlIFwmIzM0O2xpc3Q6c2V0IHNldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDAxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWcgY29uc2lkZXJhdGlvbnMsIGRpc3RpbGxlZCBpbnRvIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxvb2tzIGxpa2UgYENPTkZJR19JUF9TRVRgIGlzIGEgaGFyZCByZXF1aXJlbWVudC4gR290IGl0LiBOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZywgc3BlY2lmaWNhbGx5IGV4cGVjdGF0aW9ucy4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0aGF0IGBDT05GSUdfTkZfQ09OTlRSQUNLX0VYUEVDVGAgbWlnaHQgYmUgaW52b2x2ZWQuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBzdXJlLiBJIGJlbGlldmUgdGhhdCBleHBlY3RhdGlvbnMgYXJlIGEgY29yZSBwYXJ0IG9mIHRoZSBiYXNlIGBDT05GSUdfTkZfQ09OTlRSQUNLYCBtb2R1bGUuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhIGRpc3RpbmN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRpZWQgZGlyZWN0bHkgdG8gdGhlIGBuZl9jb25udHJhY2tfZXhwZWN0LmNgIG1vZHVsZSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2U/IEkgbmVlZCB0byB2ZXJpZnkgaXRzIGV4YWN0IGNvbmZpZ3VyYXRpb24gcGF0aC4gSXQgbWlnaHQgYmUgcGFydCBvZiBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3IgaXQgY291bGQgYmUgYSBzZXBhcmF0ZSBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2V4cGVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0zPW5ldGZpbHRlci0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOSykgJiM0Mzs9IG5mbmV0bGluay5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQtXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU6bmZfY29ubnRyYWNrLXlcdDo9IG5mX2Nvbm50cmFja19jb3JlLm8gbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUubyBuZl9jb25udHJhY2tfZXhwZWN0Lm8gbmZfY29ubnRyYWNrX2hlbHBlci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTYtXHRcdCAgIG5mX2Nvbm50cmFja19wcm90by5vIG5mX2Nvbm50cmFja19wcm90b19nZW5lcmljLm8gbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5vIG5mX2Nvbm50cmFja19wcm90b191ZHAubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg0MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkNvbm5lY3RpbmcgdGhlIERvdHMgaW4gTmV0ZmlsdGVyIENvbm50cmFjayoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjbHVlIHBvaW50cyBkaXJlY3RseSB0byBgbmZfY29ubnRyYWNrLXlgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIGNvbmZpZ3VyYXRpb24gb2YgYENPTkZJR19ORl9DVF9ORVRMSU5LYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbiB3aXRoIHVzZXJzcGFjZSBoYXBwZW5zIGZvciBgbmZfY29ubnRyYWNrYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBuZWNlc3NhcnkgbmV0bGluayBpbnRlcmZhY2UgaXMgZW5hYmxlZC4gSWYgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpc24mIzM5O3Qgc2V0LCB0aGVuIHRoZSBhYmlsaXR5IHRvIGludGVyYWN0IHdpdGggdGhlIGNvbm50cmFjayB0YWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3b24mIzM5O3QgYmUgYXZhaWxhYmxlLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBjZXJ0YWluIGJlaGF2aW9ycywgc3BlY2lmaWNhbGx5IGluIGNlcnRhaW4gbmV0d29yayBtYW5hZ2VtZW50IHRvb2xzLCB0byBmYWlsIGFzIGV4cGVjdGVkLiBUaGlzIGFsc28gaGVscHMgdG8gZW5zdXJlIHRoZSBleHBlY3RlZCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuIEkgc3VzcGVjdCB0aGlzIGlzIHRoZSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NUX05FVExJTksmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTM1NT1jb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzY1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2Njpjb25maWcgTkZfQ1RfTkVUTElOS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTM2Ny1cdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3Mi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNzM6Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM3NC1cdHRyaXN0YXRlICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCB0dW5pbmcgdmlhIE5ldGxpbmsmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg1OmNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4Ni1cdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMxNwoJCQkJCQkJb3V0cHV0OiAxMTIKCQkJCQkJCXRob3VnaHRzOiA4MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGb2N1cyBSZWZpbmVtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdGFraW5nIGEgbG9vayBhdCBhIGZldyBhcmVhcyB3aXRoaW4gdGhlIE5ldGZpbHRlci9pcHRhYmxlcyBjb2RlLCB0cnlpbmcgdG8gcGlucG9pbnQgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBnb3QgYSBmYWlybHkgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIG1vZHVsZXMgdG8gY29uc2lkZXI6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DVF9ORVRMSU5LYCwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCwgYE5GX1RBQkxFU2AsIGBORlRfRklCYCwgYE5GVF9GSUJfTkVUREVWYCwgYW5kIGBJUF9TRVRgLiBBIHdpZGUgdmFyaWV0eS4KCk5vdywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgbmV0bGluayBpbnRlcmFjdGlvbnMsIHBhY2tldCBwcm9jZXNzaW5nLCBhbmQgdGhvc2UgdGhhdCBkZWFsIHdpdGggc3RhdGVmdWwgY29ubmVjdGlvbnMsIHRob3NlIGFyZWFzIGFyZSByaXBlIHdpdGggY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSBzdGFydGVkIGJ5IGxvb2tpbmcgYXQgYGlwX3NldF9jb3JlLmNgIGFuZCBmb3VuZCBgaXBfc2V0X2R1bXBfZG9gLCBzaW5jZSBpdHMgbmV0bGluayBkdW1wIGNhbGxiYWNrLCBzbyB0aGF0JiMzOTtzIGEgZGVjZW50IHN0YXJ0LiBUaGVuIEkgbG9va2VkIGF0IGBuZl9jb25udHJhY2tfZXhwZWN0LmNgIGFuZCBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AsIHdoaWNoIG9mZmVyZWQgYGN0bmV0bGlua19hbGxvY19leHBlY3RgIGFuZCBmb3VuZCBzb21lIGZ1bmN0aW9ucyBpbiBgbmZfY29ubnRyYWNrX3NpcC5jYCBsaWtlIGBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3BgLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwuCgpgbmZuZXRsaW5rX2N0aGVscGVyLmNgIGFuZCBgbmZuZXRsaW5rX3F1ZXVlLmNgIGFyZSBhbHNvIGludGVyZXN0aW5nLiBJIHNhdyBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgYW5kIGBuZnFubF9tYW5nbGVgIGluIGBuZm5ldGxpbmtfcXVldWUuY2AgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIEl0JiMzOTtzIGhhbmRsaW5nIHBhY2tldCBtYW5pcHVsYXRpb24sIHdoaWNoIGlzIG9mdGVuIGEgc291cmNlIG9mIGJ1Z3MuIFRoZSBgbmZxbmxfbWFuZ2xlYCBzeW1ib2wgaXMgZXNwZWNpYWxseSBwcm9taXNpbmcgZ2l2ZW4gaXRzIHJvbGUgaW4gYWx0ZXJpbmcgcGFja2V0cy4KClRoZSBgbmZ0X2ZpYi5jYCBhbmQgYG5mdF9maWJfbmV0ZGV2LmNgIGNvZGUgb2ZmZXJzIGBuZnRfZmliX3ZhbGlkYXRlYCBhbmQgYG5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlYCwgYW5kIHRoZXkgYXJlIGFsc28gbG9va2luZyBsaWtlIHBvdGVudGlhbCB0YXJnZXRzLiBJbiBgbmZ0X3BheWxvYWQuY2AsIEkgc2F3IHNvbWUgaW5pdGlhbGl6YXRpb25zIGFuZCBldmFsdWF0aW9uczsgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBzZWVtIGxpa2UgdGhleSBzaG91bGQgYmUgaW52ZXN0aWdhdGVkLiBJJiMzOTttIGFsc28gbG9va2luZyBpbnRvIGBuZnRfc2V0X3BpcGFwby5jYCBhbmQgZm91bmQgYG5mdF9waXBhcG9faW5zZXJ0YCBhbmQgYHBpcGFwb19jbG9uZWAgYXMgY2FuZGlkYXRlcyB0b28uCgpTbywgbGV0JiMzOTtzIHJlZmluZSB0aGlzIGxpc3QsIGZvY3VzaW5nIG9uIHRoZSBtb3N0IHByb21pc2luZyBvbmVzOiBgaXBfc2V0X2R1bXBfZG9gLCBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAsIGBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3BgLCBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgYG5mcW5sX21hbmdsZWAsIGBuZnRfZmliX3ZhbGlkYXRlYCwgYG5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlYCwgYG5mdF9wYXlsb2FkX3NldF9pbml0YCwgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCwgYG5mdF9waXBhcG9faW5zZXJ0YCwgYW5kIGBwaXBhcG9fY2xvbmVgLiBOb3cgaXQmIzM5O3MgdGltZSB0byBjaGVjayBpZiB0aGVzZSBhcmUgZXhwb3J0ZWQgc3ltYm9scyBhbmQgaWYgdGhleSBhcmUgZXZlbiBzdWl0YWJsZSBmb3IgZnV6emluZyBpbiBwcmFjdGljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KGlwX3NldF9kdW1wX2RvfGN0bmV0bGlua19hbGxvY19leHBlY3R8c2V0X2V4cGVjdGVkX3J0cF9ydGNwfG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeXxuZnFubF9tYW5nbGV8bmZ0X2ZpYl92YWxpZGF0ZXxuZnRfZmliX25ldGRldl92YWxpZGF0ZXxuZnRfcGF5bG9hZF9zZXRfaW5pdHxuZnRfcGF5bG9hZF9zZXRfZXZhbHxuZnRfcGlwYXBvX2luc2VydHxwaXBhcG9fY2xvbmUpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE0NzY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE0Nzc6aXBfc2V0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTQ3OC17XG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE1NzA9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE1NzE6aXBfc2V0X2R1bXBfZG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE1NzIte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYz0xNzEyPXN0YXRpYyBpbnQgaXBfc2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTcyMC1cdFx0XHQuc3RhcnQgPSBpcF9zZXRfZHVtcF9zdGFydCxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxNzIxOlx0XHRcdC5kdW1wID0gaXBfc2V0X2R1bXBfZG8sXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTcyMjpcdFx0XHQuZG9uZSA9IGlwX3NldF9kdW1wX2RvbmUsXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTcyMy1cdFx0fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MjYzMD1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjI2MzE6Y3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI2MzItXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqYXNzaWduX2hlbHBlcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9Mjg1Nj1jdG5ldGxpbmtfZ2x1ZV9hdHRhY2hfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjg4Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzoyODg4Olx0ZXhwID0gY3RuZXRsaW5rX2FsbG9jX2V4cGVjdCgoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0ICopY2RhLCBjdCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yODg5LVx0XHRcdFx0ICAgICBhc3NpZ25faGVscGVyLCBcdTAwMjZ0dXBsZSwgXHUwMDI2bWFzayk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM1MTk9c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNTIwOmN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzUyMS1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICphc3NpZ25faGVscGVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNTkxPWN0bmV0bGlua19jcmVhdGVfZXhwZWN0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYyMi1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNjIzOlx0ZXhwID0gY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjZGEsIGN0LCBOVUxMLCBcdTAwMjZ0dXBsZSwgXHUwMDI2bWFzayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzYyNC1cdGlmIChJU19FUlIoZXhwKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jPTkwOT1zdGF0aWMgdm9pZCBmbHVzaF9leHBlY3RhdGlvbnMoc3RydWN0IG5mX2Nvbm4gKmN0LCBib29sIG1lZGlhKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTkyOC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jOjkyOTpzdGF0aWMgaW50IHNldF9leHBlY3RlZF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTkzMC1cdFx0XHRcdCB1bnNpZ25lZCBpbnQgZGF0YW9mZixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYz0xMTE2PXN0YXRpYyBpbnQgcHJvY2Vzc19zZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtMTE5OC1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jOjExOTk6XHRcdHJldCA9IHNldF9leHBlY3RlZF9ydHBfcnRjcChza2IsIHByb3RvZmYsIGRhdGFvZmYsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYy0xMjAwLVx0XHRcdFx0XHQgICAgZHB0ciwgZGF0YWxlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTE0NT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjE0NjpuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3koc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5ICpleHBlY3RfcG9saWN5LFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNDctXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xNzc9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jOjE3ODpuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lfc2V0W05GQ1RIX1BPTElDWV9TRVRfTUFYJiM0MzsxXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTc5LVx0W05GQ1RIX1BPTElDWV9TRVRfTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTgzPW5mbmxfY3RoZWxwZXJfcGFyc2VfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMTkwLVx0cmV0ID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBORkNUSF9QT0xJQ1lfU0VUX01BWCwgYXR0cixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTkxOlx0XHRcdFx0XHQgIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXQsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE5Mi1cdFx0XHRcdFx0ICBOVUxMKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTIwOC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MjA5Olx0XHRyZXQgPSBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3koXHUwMDI2aGVscGVyLVx1MDAzZWV4cGVjdF9wb2xpY3lbaV0sXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTIxMC1cdFx0XHRcdFx0XHQgIHRiW05GQ1RIX1BPTElDWV9TRVQmIzQzO2ldKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTM2OD1zdGF0aWMgaW50IG5mbmxfY3RoZWxwZXJfdXBkYXRlX3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMtMzc1LVx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZF9kZXByZWNhdGVkKHRiLCBORkNUSF9QT0xJQ1lfU0VUX01BWCwgYXR0cixcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzc2Olx0XHRcdFx0XHQgIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXQsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3Ny1cdFx0XHRcdFx0ICBOVUxMKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTEzNTQ9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxMzU1Om5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpZmYpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEzNTYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTcxMT1zdGF0aWMgaW50IG5mcW5sX3JlY3ZfdmVyZGljdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtMTc2MC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTc2MTpcdFx0aWYgKG5mcW5sX21hbmdsZShubGFfZGF0YShuZnFhW05GUUFfUEFZTE9BRF0pLFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNzYyLVx0XHRcdFx0IHBheWxvYWRfbGVuLCBlbnRyeSwgZGlmZikgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmliLmM9Mjc9RVhQT1JUX1NZTUJPTChuZnRfZmliX3BvbGljeSk7XG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYy0yOC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jOjI5OmludCBuZnRfZmliX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTMwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYy03Mi19XG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYzo3MzpFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmliX3ZhbGlkYXRlKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTc0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9pbmV0LmM9NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2ZpYl9pbmV0X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfaW5ldC5jLTUwLVx0LmR1bXBcdFx0PSBuZnRfZmliX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfaW5ldC5jOjUxOlx0LnZhbGlkYXRlXHQ9IG5mdF9maWJfdmFsaWRhdGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfaW5ldC5jLTUyLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jPTIxPXN0YXRpYyB2b2lkIG5mdF9maWJfbmV0ZGV2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYy01Mi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYzo1MzpzdGF0aWMgaW50IG5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMtNTQtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jPTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMtODYtXHQuZHVtcFx0XHQ9IG5mdF9maWJfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYzo4NzpcdC52YWxpZGF0ZVx0PSBuZnRfZmliX25ldGRldl92YWxpZGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYy04OC19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDU5PXN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA4MDpzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4MS1cdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNjktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3MDpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3MS1cdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTI3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjczLVx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0KSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3NDpcdC5ldmFsXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3NTpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI3Ni1cdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2R1bXAsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTEyNDM9c3RhdGljIGJvb2wgbmZ0X3BpcGFwb190cmFuc2FjdGlvbl9tdXRleF9oZWxkKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyNTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI1NDpzdGF0aWMgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKnBpcGFwb19jbG9uZShzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqb2xkKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xMjU1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xMjYyPXN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqcGlwYXBvX21heWJlX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyNzEtXHRcdFx0XHQgICAgICBuZnRfcGlwYXBvX3RyYW5zYWN0aW9uX211dGV4X2hlbGQoc2V0KSk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI3MjpcdHByaXYtXHUwMDNlY2xvbmUgPSBwaXBhcG9fY2xvbmUobSk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI3My1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI3Ny0vKipcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxMjc4OiAqIG5mdF9waXBhcG9faW5zZXJ0KCkgLSBWYWxpZGF0ZSBhbmQgaW5zZXJ0IHJhbmdlZCBlbGVtZW50c1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyNzktICogQG5ldDpcdE5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyODUtICovXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI4NjpzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xMjg3LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTQyNS0vKipcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxNDI2OiAqIHBpcGFwb19jbG9uZSgpIC0gQ2xvbmUgbWF0Y2hpbmcgZGF0YSB0byBjcmVhdGUgbmV3IHdvcmtpbmcgY29weVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE0MjctICogQG9sZDpcdEV4aXN0aW5nIG1hdGNoaW5nIGRhdGFcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTQzMC0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxNDMxOnN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqcGlwYXBvX2Nsb25lKHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICpvbGQpXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTQzMi17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTE4NzU9c3RhdGljIHZvaWQgbmZ0X3BpcGFwb19hYm9ydChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xODkyLSAqIGluIHVzZSBmb3IgbG9va3VwcywgYW5kIG5vdCBkaXJlY3RseSBpbnNlcnRlZCBpbnRvIGN1cnJlbnQgbG9va3VwIGRhdGEuIEJvdGhcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxODkzOiAqIG5mdF9waXBhcG9faW5zZXJ0KCkgYW5kIG5mdF9waXBhcG9fYWN0aXZhdGUoKSBhcmUgY2FsbGVkIG9uY2UgZm9yIGVhY2hcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xODk0LSAqIGVsZW1lbnQsIGhlbmNlIHdlIGNhbiYjMzk7dCBwdXJwb3NlIGVpdGhlciBvbmUgYXMgYSByZWFsIGNvbW1pdCBvcGVyYXRpb24uXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTI0MTg9Y29uc3Qgc3RydWN0IG5mdF9zZXRfdHlwZSBuZnRfc2V0X3BpcGFwb190eXBlID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0yNDIyLVx0XHQubG9va3VwXHRcdD0gbmZ0X3BpcGFwb19sb29rdXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MjQyMzpcdFx0Lmluc2VydFx0XHQ9IG5mdF9waXBhcG9faW5zZXJ0LFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTI0MjQtXHRcdC5hY3RpdmF0ZVx0PSBuZnRfcGlwYXBvX2FjdGl2YXRlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0yNDQzPWNvbnN0IHN0cnVjdCBuZnRfc2V0X3R5cGUgbmZ0X3NldF9waXBhcG9fYXZ4Ml90eXBlID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0yNDQ3LVx0XHQubG9va3VwXHRcdD0gbmZ0X3BpcGFwb19hdngyX2xvb2t1cCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoyNDQ4Olx0XHQuaW5zZXJ0XHRcdD0gbmZ0X3BpcGFwb19pbnNlcnQsXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMjQ0OS1cdFx0LmFjdGl2YXRlXHQ9IG5mdF9waXBhcG9fYWN0aXZhdGUsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oPTEyOD1zdHJ1Y3QgbmZ0X3BpcGFwb19zY3JhdGNoIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmgtMTMzLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oOjEzNDplbnVtIG5mdF9waXBhcG9fY2xvbmVfc3RhdGUge1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oLTEzNS1cdE5GVF9QSVBBUE9fQ0xPTkVfTkVXLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaD0xNDk9c3RydWN0IG5mdF9waXBhcG9fbWF0Y2gge1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oLTE1MC1cdHU4IGZpZWxkX2NvdW50O1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oOjE1MTpcdGVudW0gbmZ0X3BpcGFwb19jbG9uZV9zdGF0ZSBzdGF0ZTo4O1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oLTE1Mi1cdHVuc2lnbmVkIGludCBic2l6ZV9tYXg7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDg1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBSZWxldmFudCBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9uIHN5bWJvbHMgaW1wYWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy4gSSBzdGFydGVkIHdpdGggYSBicm9hZGVyIGxpc3Q6IGBpcF9zZXRfZHVtcF9kb2AsIGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YCwgYHNldF9leHBlY3RlZF9ydHBfcnRjcGAsIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLCBgbmZxbmxfbWFuZ2xlYCwgYG5mdF9maWJfdmFsaWRhdGVgLCBgbmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGVgLCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgLCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLCBgbmZ0X3BpcGFwb19pbnNlcnRgLCBhbmQgYHBpcGFwb19jbG9uZWAuCgpUaGVuLCBJIHN0YXJ0ZWQgcmVmaW5pbmcgdGhpcyBsaXN0LiBJIHJlYWxpemVkIHRoYXQgc2V2ZXJhbCBvZiB0aG9zZSBhcmUgc3RhdGljIGFuZCB1c2VkIHdpdGhpbiBvdGhlciBzdGF0aWMgZnVuY3Rpb25zLiBTbywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBvbmVzIHdpdGggYnJvYWRlciBpbXBsaWNhdGlvbnMgb3IgdGhhdCByZXByZXNlbnQgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIFRoYXQgbGVkIG1lIHRvIGNvbnNpZGVyIGEgc2Vjb25kIHNldDogYGlwX3NldF9kdW1wX2RvbmVgLCBgbmZfY3RfZXhwZWN0X2FsbG9jYCwgYG5mX2N0X2V4cGVjdF9pbml0YCwgYG5mcW5sX3ZhbGlkYXRlX3dyaXRlYCwgYW5kIGV4cGFuZGVkIGl0IGFnYWluLiBJIGtub3cgSSBoYXZlIHRvIGNvdmVyIHRoZSBjb3JlIGNoYW5nZXMuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgb2YgYSBjb25jaXNlLCByZXByZXNlbnRhdGl2ZSBsaXN0IHRoYXQgYXZvaWRzIHRoZSBtb3N0IGhvdC1wYXRoIGZ1bmN0aW9ucywgYnV0IGNhcHR1cmVzIHRoZSBlc3NlbmNlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgZmluYWwgbGlzdCBpbmNsdWRlczogYGlwX3NldF9kdW1wX2RvbmVgLCBgaXBfc2V0X2R1bXBfZG9gLCBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAsIGBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3BgLCBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgYG5mcW5sX21hbmdsZWAsIGBuZnRfZmliX3ZhbGlkYXRlYCwgYG5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlYCwgYG5mdF9wYXlsb2FkX3NldF9pbml0YCwgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCwgYW5kIGBuZnRfcGlwYXBvX2luc2VydGAuCgpOZXh0LCBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBpbml0aWFsIGxpc3QgSSBoYWQgd2FzOiBgTkZfQ09OTlRSQUNLYCwgYE5GX0NPTk5UUkFDS19TSVBgLCBgTkZfQ1RfTkVUTElOS2AsIGBORl9DVF9ORVRMSU5LX0hFTFBFUmAsIGBORVRGSUxURVJfTkVUTElOS19RVUVVRWAsIGBORl9UQUJMRVNgLCBgTkZUX0ZJQmAsIGBORlRfRklCX05FVERFVmAsIGFuZCBgSVBfU0VUYC4KCkkgaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcy4gSSBjaGVja2VkIGBORl9DT05OVFJBQ0tfRVhQRUNUYCBhbmQgdGhlIHNvdXJjZSBmaWxlcyBpbmNsdWRlZC4gVGhhdCBtYWRlIG1lIGNvbnNpZGVyIGhvdyBgTkZUX0ZJQl9ORVRERVZgIHJlbGF0ZWQgdG8gYE5GX1RBQkxFU2AuIEFuZCBJIGNoZWNrZWQgYE5GVF9QSVBBUE9gIHRvby4gSSBhbSBzYXRpc2ZpZWQgdGhlIGNvbmZpZ3VyYXRpb25zIGxpc3RlZCBhcmUgdGhlIHJpZ2h0IHNldCBvZiByZWxldmFudCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVx0Ym9vbCBcJiMzNDtTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU4LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTY3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRU9VVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE3Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVTVEFNUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTg4OmNvbmZpZyBORl9DT05OVFJBQ0tfTEFCRUxTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVx0Ym9vbCBcJiMzNDtDb25uZWN0aW9uIHRyYWNraW5nIGxhYmVsc1wmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVx0Ym9vbFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O0FtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjI3OmNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVx0dHJpc3RhdGUgXCYjMzQ7RlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjM4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXHR0cmlzdGF0ZSBcJiMzNDtILjMyMyBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTktXHR0cmlzdGF0ZSBcJiMzNDtJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc0OmNvbmZpZyBORl9DT05OVFJBQ0tfQlJPQURDQVNUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVx0dHJpc3RhdGVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O05ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTctXHR0cmlzdGF0ZSBcJiMzNDtTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzExOmNvbmZpZyBORl9DT05OVFJBQ0tfUFBUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cdHRyaXN0YXRlIFwmIzM0O1BQdFAgcHJvdG9jb2wgc3VwcG9ydCAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzI5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXHR0cmlzdGF0ZSBcJiMzNDtTQU5FIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0NC1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNTU6Y29uZmlnIE5GX0NPTk5UUkFDS19URlRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVx0dHJpc3RhdGUgXCYjMzQ7VEZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBEZWVwIERpdmUqKgoKQWxyaWdodCwgaW5pdGlhbCBpbXByZXNzaW9uOiB0aGluZ3Mgc2VlbSB0byBiZSBpbiBvcmRlci4gVGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBkZXNpZ24gYXJlIHByZXNlbnRpbmcgd2VsbC4gQmVmb3JlIGdldHRpbmcgdG9vIGZhciBhaGVhZCwgSSYjMzk7bSB0aGlua2luZyBsZXQmIzM5O3MgcGl2b3QgdG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgZm9jdXMgb3VyIGF0dGVudGlvbiBzcGVjaWZpY2FsbHkgb24gdGhlIGBORl9UQUJMRVNgIGltcGxlbWVudGF0aW9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBzeXN0ZW0sIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgbGl2ZXMuIFdlJiMzOTtsbCBleGFtaW5lIHRoZSB0YWJsZSBjb25maWd1cmF0aW9ucywgY2hhaW4gZGVmaW5pdGlvbnMsIHJ1bGVzZXRzLCBhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgY29ubmVjdGVkLiBUaGF0IGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgY2F0Y2hpbmcgcG90ZW50aWFsIHN1YnRsZSBpc3N1ZXMsIG9wdGltaXphdGlvbnMsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIE5vIGFzc3VtcHRpb25zOyBpdCYjMzk7cyB0aW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGZvciBOZXR3b3JrIEZpbHRlcmluZyBGZWF0dXJlcyoqCgpPa2F5LCBJIG5lZWQgdG8gbWFrZSBhIHF1aWNrIGFkZGl0aW9uIHRvIGVuc3VyZSBicm9hZCBjb21wYXRpYmlsaXR5LiBJIHNob3VsZCBwcm9hY3RpdmVseSBpbmNsdWRlIGBORl9UQUJMRVNfTkVUREVWYCBhbmQgYE5GX1RBQkxFU19JTkVUYCBpbiBteSBjb25maWd1cmF0aW9uIGp1c3QgdG8gYmUgc2FmZS4gSXQmIzM5O3MgcG9zc2libGUgdGhhdCBgbmZ0X2ZpYl9uZXRkZXYuY2AgYW5kIGBuZnRfZmliX2luZXQuY2AgbWlnaHQgaGF2ZSBkZXBlbmRlbmNpZXMgb24gdGhlbSwgYW5kIEkgZG9uJiMzOTt0IHdhbnQgdG8gcnVuIGludG8gYW55IHVuZXhwZWN0ZWQgaXNzdWVzIGxhdGVyLiBOb3csIGhvbGQgb24sIEkgcmVjYWxsIHRoYXQgYG5mdF9maWJfbmV0ZGV2LmNgIHNwZWNpZmljYWxseSByZWxpZXMgb24gYE5GVF9GSUJfTkVUREVWYC4gQWxyaWdodCwgc28gdGhhdCYjMzk7cyB0aGUga2V5LiBMZXQgbWUgaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYE5GVF9GSUJfTkVUREVWYCB0byBjb25maXJtIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIgYW5kIHRoYXQgSSYjMzk7bSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIHNldCB1cCBjb3JyZWN0bHkgYmVmb3JlIEkgY29udGludWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRklCX05FVERFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9Njc0PWNvbmZpZyBORlRfRldEX05FVERFVlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NzktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjgwOmNvbmZpZyBORlRfRklCX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY4MS1cdGRlcGVuZHMgb24gTkZUX0ZJQl9JUFY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NzI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5lZWQgZm9yIGBORlRfRklCX0lQVjRgKioKCk9rYXksIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBORlRfRklCX0lQVjRgLiBUaGF0JiMzOTtzIGEga2V5IGVsZW1lbnQgaW4gdGhlIGBuZnRhYmxlc2AgZnJhbWV3b3JrIHJlbGF0ZWQgdG8gSVBWNCBmb3J3YXJkaW5nIGluZm9ybWF0aW9uIGJhc2UgKEZJQikgbG9va3Vwcy4gRXNzZW50aWFsbHksIGl0IGRlYWxzIHdpdGggcm91dGluZyBkZWNpc2lvbnMuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXZlbiBjb21pbmcgdXAgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSB0cmFkaXRpb25hbCByb3V0aW5nIHRhYmxlcyBhcmUgZWl0aGVyIGluYWRlcXVhdGUgb3Igd2UmIzM5O3JlIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlJiMzOTtyZSBlaXRoZXIgYnVpbGRpbmcgc29tZSBraW5kIG9mIGN1c3RvbSByb3V0aW5nIGxvZ2ljLCBpbXBsZW1lbnRpbmcgcG9saWN5LWJhc2VkIHJvdXRpbmcsIG9yIHBlcmhhcHMgdHJ5aW5nIHRvIG9wdGltaXplIHBlcmZvcm1hbmNlIGluIGEgaGlnaGx5IHNwZWNpZmljIG5ldHdvcmsgc2NlbmFyaW8uIFRoZSBpbmNsdXNpb24gb2YgdGhlICYjMzQ7RklCJiMzNDsgaXMgYSByZWQgZmxhZyBpbiB0aGUgYmVzdCB3YXksIGFuZCBzdWdnZXN0cyB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIHNvbWV0aGluZyByZWxhdGl2ZWx5IGxvdy1sZXZlbC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgc3BlY2lmaWMgbW9kdWxlIGlzIHJlcXVpcmVkLCBidXQgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBORlRfRklCX0lQVjRgIHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IGZ1bmN0aW9uYWxpdHkgaXQgcHJvdmlkZXMgYW5kIHdoYXQgZGVzaWduIGRlY2lzaW9ucyB3ZXJlIG1hZGUsIHNvIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uIGluIHRoZSB3aWRlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZUX0ZJQl9JUFY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NDc9Y29uZmlnIE5GVF9EVVBfSVBWNFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTUzLVxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NTQ6Y29uZmlnIE5GVF9GSUJfSVBWNFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNTUtXHRzZWxlY3QgTkZUX0ZJQlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzE0MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgTkZUX0ZJQl9JUFY2YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgY2hlY2sgYE5GVF9GSUJfSVBWNmAuJiMzNDsgR2l2ZW4gdGhlIGNvbnRleHQsIHRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gdHJvdWJsZXNob290aW5nLCBhbmFseXppbmcsIG9yIHBlcmhhcHMgb3B0aW1pemluZyBhIG5ldHdvcmsgc2V0dXAgdGhhdCBpbnZvbHZlcyBJUHY2IHJvdXRpbmcgYW5kIGZvcndhcmRpbmcgdGFibGVzLiBUaGUgc3BlY2lmaWMgbmFtaW5nIGNvbnZlbnRpb24gaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxpa2VseSB1c2luZyBgbmZ0YWJsZXNgIChvciB0aGUgb2xkZXIgYGlwdGFibGVzYCB3aXRoIHNvbWUgY29tcGF0aWJpbGl0eSBsYXllcnMpLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYSBtaXNjb25maWd1cmVkIHJ1bGUsIG9yIG1heWJlIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgY29tcGxleCBmaXJld2FsbC9yb3V0aW5nIHNldHVwLiBUaGUgZmFjdCB0aGF0IEkmIzM5O20gc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgSVB2NiBGSUIgaW5kaWNhdGVzIGEgY2xlYXIgZm9jdXMgb24gdGhlIElQdjYgcG9ydGlvbiBvZiB0aGUgbmV0d29yayBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRklCX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgTkZUX0RVUF9JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDktXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpjb25maWcgTkZUX0ZJQl9JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy01MS1cdHRyaXN0YXRlIFwmIzM0O25mX3RhYmxlcyBmaWIgLyBpcHY2IHJvdXRlIGxvb2t1cCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDg5CgkJCQkJCQlvdXRwdXQ6IDM1OAoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOZXRmaWx0ZXIgUGF0Y2ggUmV2aWV3KioKCk9rYXksIHNvIHdlJiMzOTtyZSBhZGRpbmcgYE5GVF9GSUJfSVBWNGAgYW5kIGBORlRfRklCX0lQVjZgLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQmIzM5O3Mgc3VtbWFyaXplIHRoZSBjb25maWd1cmF0aW9uIGl0ZW1zIHJlcXVpcmVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgaW4gb3JkZXI6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DVF9ORVRMSU5LYCwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCwgYE5GX1RBQkxFU2AsIGBORlRfRklCX0lQVjRgLCBgTkZUX0ZJQl9JUFY2YCwgYE5GVF9GSUJfTkVUREVWYCwgYW5kIGBJUF9TRVRgLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBORl9UQUJMRVNfTkVUREVWYCBhbmQgYE5GX1RBQkxFU19JTkVUYCBzaW5jZSB0aGV5IGNhbiBzb21ldGltZXMgYmUgdHJpY2t5LiBBaCwgcmlnaHQsIGBORlRfRklCX05FVERFVmAgZGVwZW5kcyBvbiBgTkZUX0ZJQl9JUFY0YCwgYW5kIGBORlRfRklCX0lORVRgIGRlcGVuZHMgb24gYE5GX1RBQkxFU19JTkVUYC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIGluY2x1ZGUgYm90aCBgTkZfVEFCTEVTX05FVERFVmAgYW5kIGBORl9UQUJMRVNfSU5FVGAuIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2UgY29yZSBjb21wb25lbnRzLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGEgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIFdlIGhhdmUgYGlwX3NldF9kdW1wX2RvYCwgYGlwX3NldF9kdW1wX2RvbmVgLCBgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdGAsIGBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3BgLCBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgYG5mcW5sX21hbmdsZWAsIGBuZnRfZmliX3ZhbGlkYXRlYCwgYG5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlYCwgYG5mdF9wYXlsb2FkX3NldF9pbml0YCwgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCwgYW5kIGBuZnRfcGlwYXBvX2luc2VydGAuIExvb2tzIGxpa2UgdGhpcyBpcyBhIHNvbGlkIGxpc3QgY292ZXJpbmcgdGhlIGFyZWFzIHdoZXJlIGNoYW5nZXMgd2VyZSBkaXJlY3RseSBpbXBsZW1lbnRlZCBvciB3aGVyZSB0aGUgbG9naWMgaGFzIGJlZW4gdXBkYXRlZCwgcmlnaHQgd2hlcmUgaXQgbWF0dGVycy4KCkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc29tZSBpbXBvcnRhbnQsIHF1aXRlIGRlZXAgY2hhbmdlcyB0byBOZXRmaWx0ZXIuIFdlIGhhdmUgbmV3IHZhbGlkYXRpb24gc3RlcHMgZm9yIHBheWxvYWQgd3JpdGVzIGFuZCBJUC9JUHY2IGhlYWRlcnMgYmVmb3JlIG1hbmdsaW5nLCB0aGF0JiMzOTtzIGNydWNpYWwgZm9yIHNlY3VyaXR5LiBUaGVuIHRoZXJlJiMzOTtzIHRoZSBmaXggZm9yIHRoZSBTSVAgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGJ1ZywgYSBzdGF0ZSB0cmFja2luZyBhZGRpdGlvbiBmb3IgcGlwYXBvIHNldCBjbG9uZXMgdGhhdCBzaG91bGQgaGVscCBoYW5kbGUgYWJvcnRzIG1vcmUgcm9idXN0bHksIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBjb25udHJhY2sgZXhwZWN0YXRpb24gYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIEFsbCBvZiB0aGVzZSBhZmZlY3QgY29yZSBOZXRmaWx0ZXIgbG9naWMuIFdlJiMzOTtyZSB0YWxraW5nIE5ldGxpbmsgcXVldWUsIG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcsIGFuZCBwaXBhcG8gc2V0cywgYW5kIHRoYXQmIzM5O3MgYWxsIHN0dWZmIHRoYXQgdXNlcnNwYWNlIGhhcyBkaXJlY3QgYWNjZXNzIHRvLCBzbyB0aGlzIG5lZWRzIHRvIGJlIHJpZ29yb3VzbHkgdGVzdGVkLiBXZSBhYnNvbHV0ZWx5IG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGhlcmUuIFdlIGhhdmUgdG8gZnV6eiBpdCBoZWF2aWx5LgoKUmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gcnVuIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93IHRvIHNlZSBob3cgdGhlIGNoYW5nZSBpbXBhY3RzIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA2OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLX1NJUCYjMzQ7LAogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTktfSEVMUEVSJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfSU5FVCYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfTkVUREVWJiMzNDssCiAgICAmIzM0O05GVF9GSUJfSVBWNCYjMzQ7LAogICAgJiMzNDtORlRfRklCX0lQVjYmIzM0OywKICAgICYjMzQ7TkZUX0ZJQl9ORVRERVYmIzM0OywKICAgICYjMzQ7SVBfU0VUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfc2V0X2R1bXBfZG8mIzM0OywKICAgICYjMzQ7aXBfc2V0X2R1bXBfZG9uZSYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfYWxsb2NfZXhwZWN0JiMzNDssCiAgICAmIzM0O3NldF9leHBlY3RlZF9ydHBfcnRjcCYjMzQ7LAogICAgJiMzNDtuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3kmIzM0OywKICAgICYjMzQ7bmZxbmxfbWFuZ2xlJiMzNDssCiAgICAmIzM0O25mdF9maWJfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGUmIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2V2YWwmIzM0OywKICAgICYjMzQ7bmZ0X3BpcGFwb19pbnNlcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLiBJdCBhZGRzIHZhbGlkYXRpb24gZm9yIHBheWxvYWQgd3JpdGVzIGFuZCBJUC9JUHY2IGhlYWRlcnMgYmVmb3JlIG1hbmdsaW5nLCBmaXhlcyBhIGJ1ZyBpbiBTSVAgY29ubnRyYWNrIGV4cGVjdGF0aW9uLCBhZGRzIHN0YXRlIHRyYWNraW5nIGZvciBwaXBhcG8gc2V0IGNsb25lcyB0byBwcm9wZXJseSBoYW5kbGUgYWJvcnRzLCBhbmQgbW9kaWZpZXMgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBsb2dpYywgbmV0bGluayBxdWV1ZSwgbmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZywgYW5kIHBpcGFwbyBzZXRzLCB3aGljaCBhcmUgYWxsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0tfU0lQJiMzNDssCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7TkZfQ1RfTkVUTElOS19IRUxQRVImIzM0OywKICAgICYjMzQ7TkVURklMVEVSX05FVExJTktfUVVFVUUmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19JTkVUJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0OywKICAgICYjMzQ7TkZUX0ZJQl9JUFY0JiMzNDssCiAgICAmIzM0O05GVF9GSUJfSVBWNiYjMzQ7LAogICAgJiMzNDtORlRfRklCX05FVERFViYjMzQ7LAogICAgJiMzNDtJUF9TRVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9zZXRfZHVtcF9kbyYjMzQ7LAogICAgJiMzNDtpcF9zZXRfZHVtcF9kb25lJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19hbGxvY19leHBlY3QmIzM0OywKICAgICYjMzQ7c2V0X2V4cGVjdGVkX3J0cF9ydGNwJiMzNDssCiAgICAmIzM0O25mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeSYjMzQ7LAogICAgJiMzNDtuZnFubF9tYW5nbGUmIzM0OywKICAgICYjMzQ7bmZ0X2ZpYl92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfZmliX25ldGRldl92YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfcGlwYXBvX2luc2VydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIEl0IGFkZHMgdmFsaWRhdGlvbiBmb3IgcGF5bG9hZCB3cml0ZXMgYW5kIElQL0lQdjYgaGVhZGVycyBiZWZvcmUgbWFuZ2xpbmcsIGZpeGVzIGEgYnVnIGluIFNJUCBjb25udHJhY2sgZXhwZWN0YXRpb24sIGFkZHMgc3RhdGUgdHJhY2tpbmcgZm9yIHBpcGFwbyBzZXQgY2xvbmVzIHRvIHByb3Blcmx5IGhhbmRsZSBhYm9ydHMsIGFuZCBtb2RpZmllcyBjb25udHJhY2sgZXhwZWN0YXRpb24gYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLCBuZXRsaW5rIHF1ZXVlLCBuZnRhYmxlcyBwYXlsb2FkIG1hbmdsaW5nLCBhbmQgcGlwYXBvIHNldHMsIHdoaWNoIGFyZSBhbGwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjAyLjY5MTI2MTY4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTE1NDkwMzc5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX0NPTk5UUkFDS19TSVBcIixcbiAgICBcIk5GX0NUX05FVExJTktcIixcbiAgICBcIk5GX0NUX05FVExJTktfSEVMUEVSXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19RVUVVRVwiLFxuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9UQUJMRVNfSU5FVFwiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiLFxuICAgIFwiTkZUX0ZJQl9JUFY0XCIsXG4gICAgXCJORlRfRklCX0lQVjZcIixcbiAgICBcIk5GVF9GSUJfTkVUREVWXCIsXG4gICAgXCJJUF9TRVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9zZXRfZHVtcF9kb1wiLFxuICAgIFwiaXBfc2V0X2R1bXBfZG9uZVwiLFxuICAgIFwiY3RuZXRsaW5rX2FsbG9jX2V4cGVjdFwiLFxuICAgIFwic2V0X2V4cGVjdGVkX3J0cF9ydGNwXCIsXG4gICAgXCJuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lcIixcbiAgICBcIm5mcW5sX21hbmdsZVwiLFxuICAgIFwibmZ0X2ZpYl92YWxpZGF0ZVwiLFxuICAgIFwibmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGVcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiLFxuICAgIFwibmZ0X3BpcGFwb19pbnNlcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIEl0IGFkZHMgdmFsaWRhdGlvbiBmb3IgcGF5bG9hZCB3cml0ZXMgYW5kIElQL0lQdjYgaGVhZGVycyBiZWZvcmUgbWFuZ2xpbmcsIGZpeGVzIGEgYnVnIGluIFNJUCBjb25udHJhY2sgZXhwZWN0YXRpb24sIGFkZHMgc3RhdGUgdHJhY2tpbmcgZm9yIHBpcGFwbyBzZXQgY2xvbmVzIHRvIHByb3Blcmx5IGhhbmRsZSBhYm9ydHMsIGFuZCBtb2RpZmllcyBjb25udHJhY2sgZXhwZWN0YXRpb24gYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0ZmlsdGVyIGxvZ2ljLCBuZXRsaW5rIHF1ZXVlLCBuZnRhYmxlcyBwYXlsb2FkIG1hbmdsaW5nLCBhbmQgcGlwYXBvIHNldHMsIHdoaWNoIGFyZSBhbGwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6MDIuNjkxMjcxNzc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTEwMzc3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ODU4MmFmODA4NTJjMzFhNjk2YjlhZGEyYTliNzE0MWJiZDYwZDhkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDA2OjA2OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xcbmluZGV4IGE1MzFiNjU0YjhkOTY0Li42Y2ZhZDE1MmQ3ZDFiYSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcXG5AQCAtMTQ4MCw3ICsxNDgwLDExIEBAIGlwX3NldF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiBcXHRcXHRzdHJ1Y3QgaXBfc2V0X25ldCAqaW5zdCA9XFxuIFxcdFxcdFxcdChzdHJ1Y3QgaXBfc2V0X25ldCAqKWNiLVxcdTAwM2VhcmdzW0lQU0VUX0NCX05FVF07XFxuIFxcdFxcdGlwX3NldF9pZF90IGluZGV4ID0gKGlwX3NldF9pZF90KWNiLVxcdTAwM2VhcmdzW0lQU0VUX0NCX0lOREVYXTtcXG4tXFx0XFx0c3RydWN0IGlwX3NldCAqc2V0ID0gaXBfc2V0X3JlZl9uZXRsaW5rKGluc3QsIGluZGV4KTtcXG4rXFx0XFx0c3RydWN0IGlwX3NldCAqc2V0O1xcbitcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRzZXQgPSBpcF9zZXRfcmVmX25ldGxpbmsoaW5zdCwgaW5kZXgpO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdFxcdGlmIChzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZXVyZWYpXFxuIFxcdFxcdFxcdHNldC1cXHUwMDNldmFyaWFudC1cXHUwMDNldXJlZihzZXQsIGNiLCBmYWxzZSk7XFxuQEAgLTE2ODYsNyArMTY5MCw5IEBAIGlwX3NldF9kdW1wX2RvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gcmVsZWFzZV9yZWZjb3VudDpcXG4gXFx0LyogSWYgdGhlcmUgd2FzIGFuIGVycm9yIG9yIHNldCBpcyBkb25lLCByZWxlYXNlIHNldCAqL1xcbiBcXHRpZiAocmV0IHx8ICFjYi1cXHUwMDNlYXJnc1tJUFNFVF9DQl9BUkcwXSkge1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdHNldCA9IGlwX3NldF9yZWZfbmV0bGluayhpbnN0LCBpbmRleCk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRpZiAoc2V0LVxcdTAwM2V2YXJpYW50LVxcdTAwM2V1cmVmKVxcbiBcXHRcXHRcXHRzZXQtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZXVyZWYoc2V0LCBjYiwgZmFsc2UpO1xcbiBcXHRcXHRwcl9kZWJ1ZyhcXFwicmVsZWFzZSBzZXQgJXNcXFxcblxcXCIsIHNldC1cXHUwMDNlbmFtZSk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcXG5pbmRleCAzODYzMGM1ZTAwNmYwOC4uN2FlNjhkNjA1ODZhMjMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xcbkBAIC0zMDYsNyArMzA2LDcgQEAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKm5mX2N0X2V4cGVjdF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqbWUpXFxuIHtcXG4gXFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKm5ldztcXG4gXFxuLVxcdG5ldyA9IGttZW1fY2FjaGVfYWxsb2MobmZfY3RfZXhwZWN0X2NhY2hlcCwgR0ZQX0FUT01JQyk7XFxuK1xcdG5ldyA9IGttZW1fY2FjaGVfemFsbG9jKG5mX2N0X2V4cGVjdF9jYWNoZXAsIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAoIW5ldylcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbkBAIC0zOTEsNiArMzkxLDcgQEAgdm9pZCBuZl9jdF9leHBlY3RfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB1bnNpZ25lZCBpbnQgY2xhc3MsXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXFxuIFxcdG1lbXNldChcXHUwMDI2ZXhwLVxcdTAwM2VzYXZlZF9hZGRyLCAwLCBzaXplb2YoZXhwLVxcdTAwM2VzYXZlZF9hZGRyKSk7XFxuIFxcdG1lbXNldChcXHUwMDI2ZXhwLVxcdTAwM2VzYXZlZF9wcm90bywgMCwgc2l6ZW9mKGV4cC1cXHUwMDNlc2F2ZWRfcHJvdG8pKTtcXG4rXFx0ZXhwLVxcdTAwM2VkaXIgPSAwO1xcbiAjZW5kaWZcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaW5pdCk7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xcbmluZGV4IDQyMTc3MTVkNDJkYzI0Li4zMWNiYjFiNTViOWU2YyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcXG5AQCAtMzU0OSw4ICszNTQ5LDYgQEAgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0aWYgKGNkYVtDVEFfRVhQRUNUX0ZMQUdTXSkge1xcbiBcXHRcXHRleHAtXFx1MDAzZWZsYWdzID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfRVhQRUNUX0ZMQUdTXSkpO1xcbiBcXHRcXHRleHAtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5ORl9DVF9FWFBFQ1RfVVNFUlNQQUNFO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRleHAtXFx1MDAzZWZsYWdzID0gMDtcXG4gXFx0fVxcbiBcXHRpZiAoY2RhW0NUQV9FWFBFQ1RfRk5dKSB7XFxuIFxcdFxcdGNvbnN0IGNoYXIgKm5hbWUgPSBubGFfZGF0YShjZGFbQ1RBX0VYUEVDVF9GTl0pO1xcbkBAIC0zNTYyLDggKzM1NjAsNyBAQCBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcdFxcdH1cXG4gXFx0XFx0ZXhwLVxcdTAwM2VleHBlY3RmbiA9IGV4cGZuLVxcdTAwM2VleHBlY3RmbjtcXG4tXFx0fSBlbHNlXFxuLVxcdFxcdGV4cC1cXHUwMDNlZXhwZWN0Zm4gPSBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRleHAtXFx1MDAzZWNsYXNzID0gY2xhc3M7XFxuIFxcdGV4cC1cXHUwMDNlbWFzdGVyID0gY3Q7XFxuQEAgLTM1ODMsMTIgKzM1ODAsNiBAQCBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgZXhwLCBuZl9jdF9sM251bShjdCkpO1xcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRtZW1zZXQoXFx1MDAyNmV4cC1cXHUwMDNlc2F2ZWRfYWRkciwgMCwgc2l6ZW9mKGV4cC1cXHUwMDNlc2F2ZWRfYWRkcikpO1xcbi1cXHRcXHRtZW1zZXQoXFx1MDAyNmV4cC1cXHUwMDNlc2F2ZWRfcHJvdG8sIDAsIHNpemVvZihleHAtXFx1MDAzZXNhdmVkX3Byb3RvKSk7XFxuLVxcdFxcdGV4cC1cXHUwMDNlZGlyID0gMDtcXG4tI2VuZGlmXFxuIFxcdH1cXG4gXFx0cmV0dXJuIGV4cDtcXG4gZXJyX291dDpcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xcbmluZGV4IDVlYzNhNGE0YmJkNzA3Li5mM2Y5MGE4NjYzMzg5NCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXFxuQEAgLTk1Niw3ICs5NTYsNiBAQCBzdGF0aWMgaW50IHNldF9leHBlY3RlZF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0XFx0c2FkZHIgPSBcXHUwMDI2Y3QtXFx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTM7XFxuIFxcdH0gZWxzZSBpZiAoc2lwX2V4dGVybmFsX21lZGlhKSB7XFxuLVxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2JfZHN0KHNrYiktXFx1MDAzZWRldjtcXG4gXFx0XFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gTlVMTDtcXG4gXFx0XFx0c3RydWN0IGZsb3dpIGZsO1xcbiBcXG5AQCAtOTc4LDcgKzk3NywxMSBAQCBzdGF0aWMgaW50IHNldF9leHBlY3RlZF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4gXFx0XFx0ICogdGhyb3VnaCB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgdGhlIHNpZ25hbGxpbmcgcGVlci5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChkc3QpIHtcXG4tXFx0XFx0XFx0Ym9vbCBleHRlcm5hbF9tZWRpYSA9IChkc3QtXFx1MDAzZWRldiA9PSBkZXYpO1xcbitcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICp0aGlzX2RzdCA9IHNrYl9kc3Qoc2tiKTtcXG4rXFx0XFx0XFx0Ym9vbCBleHRlcm5hbF9tZWRpYSA9IGZhbHNlO1xcbitcXG4rXFx0XFx0XFx0aWYgKHRoaXNfZHN0IFxcdTAwMjZcXHUwMDI2IGRzdC1cXHUwMDNlZGV2ID09IHRoaXNfZHN0LVxcdTAwM2VkZXYpXFxuK1xcdFxcdFxcdFxcdGV4dGVybmFsX21lZGlhID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuIFxcdFxcdFxcdGlmIChleHRlcm5hbF9tZWRpYSlcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5pbmRleCBmMTQ2MGI2ODNkN2FmNy4uMmNiY2NhOTExMGRiZjUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmNcXG5AQCAtMTYzLDYgKzE2Myw4IEBAIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cGVjdF9wb2xpY3ksXFxuIFxcdFxcdCAgICB0YltORkNUSF9QT0xJQ1lfTkFNRV0sIE5GX0NUX0hFTFBFUl9OQU1FX0xFTik7XFxuIFxcdGV4cGVjdF9wb2xpY3ktXFx1MDAzZW1heF9leHBlY3RlZCA9XFxuIFxcdFxcdG50b2hsKG5sYV9nZXRfYmUzMih0YltORkNUSF9QT0xJQ1lfRVhQRUNUX01BWF0pKTtcXG4rXFx0aWYgKCFleHBlY3RfcG9saWN5LVxcdTAwM2VtYXhfZXhwZWN0ZWQpXFxuK1xcdFxcdGV4cGVjdF9wb2xpY3ktXFx1MDAzZW1heF9leHBlY3RlZCA9IE5GX0NUX0VYUEVDVF9NQVhfQ05UO1xcbiBcXHRpZiAoZXhwZWN0X3BvbGljeS1cXHUwMDNlbWF4X2V4cGVjdGVkIFxcdTAwM2UgTkZfQ1RfRVhQRUNUX01BWF9DTlQpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcXG5pbmRleCA4MGNhMDc3YjgxYmQ1YS4uMzVkNGM2YzYyOGZmYzEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmNcXG5AQCAtMTE4NCw2ICsxMTg0LDE3MyBAQCBuZnFubF9lbnF1ZXVlX3BhY2tldChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBpbnQgcXVldWVudW0pXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2lwb3B0cyhjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaF9uZXcsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX29yaWcgPSBpcF9oZHIoZS1cXHUwMDNlc2tiKTtcXG4rXFx0dW5zaWduZWQgaW50IGlobCA9IGlwaF9uZXctXFx1MDAzZWlobCAqIDQ7XFxuK1xcbitcXHRpZiAoaXBoX25ldy1cXHUwMDNlaWhsICE9IGlwaF9vcmlnLVxcdTAwM2VpaGwpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGlobCA9PSBzaXplb2YoKmlwaF9vcmlnKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gbWVtY21wKGlwaF9uZXcgKyAxLCBpcF9oZHIoZS1cXHUwMDNlc2tiKSArIDEsIGlobCAtIHNpemVvZigqaXBoX29yaWcpKSA9PSAwO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSlcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgaWhsO1xcbitcXG4rXFx0aWYgKGRhdGFfbGVuIFxcdTAwM2Mgc2l6ZW9mKCppcGgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpaGwgPSBpcGgtXFx1MDAzZWlobCAqIDR1O1xcbitcXHRpZiAoaWhsIFxcdTAwM2Mgc2l6ZW9mKCppcGgpIHx8IGRhdGFfbGVuIFxcdTAwM2MgaWhsKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoaXBoLVxcdTAwM2V2ZXJzaW9uICE9IDQgfHxcXG4rXFx0ICAgICgoaXBoLVxcdTAwM2VmcmFnX29mZiBeIGlwX2hkcihlLVxcdTAwM2Vza2IpLVxcdTAwM2VmcmFnX29mZikgXFx1MDAyNiB+aHRvbnMoSVBfREYpKSAhPSAwKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBCSUcgVENQIHdvbid0IHdvcms7IG5ldGxpbmsgYXR0ciBsZW4gaXMgdTE2ICovXFxuK1xcdGlmIChudG9ocyhpcGgtXFx1MDAzZXRvdF9sZW4pICE9IGRhdGFfbGVuKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBzdXBwb3J0IGZvciBpcG9wdHMgbWFuZ2xpbmcgd291bGQgcmVxdWlyZVxcbitcXHQgKiByZWNvbXBpbGUgKyBza2IgdHJhbnNwb3J0IGhlYWRlciB1cGRhdGUuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGlwaCwgZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX29uZV9leHRoZHIoY29uc3QgdTggKmRhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLFxcbitcXHRcXHRcXHRcXHQgICAgICBpbnQgc3RhcnQsIGludCBoZHJsZW4pXFxuK3tcXG4rXFx0dTE2IG9jdGV0cztcXG4rXFxuK1xcdGlmIChkYXRhX2xlbiBcXHUwMDNjIGhkcmxlbiB8fCBoZHJsZW4gXFx1MDAzYyAyKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHR3aGlsZSAoaGRybGVuIFxcdTAwM2UgMCkge1xcbitcXHRcXHRpZiAoZGF0YV9sZW4gXFx1MDAzYyBzaXplb2Yob2N0ZXRzKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRkYXRhX2xlbiAtPSBzaXplb2Yob2N0ZXRzKTtcXG4rXFxuK1xcdFxcdGlmIChza2JfY29weV9iaXRzKGUtXFx1MDAzZXNrYiwgc3RhcnQsIFxcdTAwMjZvY3RldHMsIHNpemVvZihvY3RldHMpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0aWYgKGhkcmxlbiBcXHUwMDNjIHNpemVvZihvY3RldHMpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRoZHJsZW4gLT0gc2l6ZW9mKG9jdGV0cyk7XFxuK1xcdFxcdGlmIChtZW1jbXAoZGF0YSwgXFx1MDAyNm9jdGV0cywgc2l6ZW9mKG9jdGV0cykpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRzdGFydCArPSBzaXplb2Yob2N0ZXRzKTtcXG4rXFx0XFx0ZGF0YSArPSBzaXplb2Yob2N0ZXRzKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5mcW5sX3ZhbGlkYXRlX2V4dGhkcihjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2X25ldyxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfb3JpZyA9IGlwdjZfaGRyKGUtXFx1MDAzZXNrYik7XFxuK1xcdGludCBleHRoZHJfY250ID0gMCwgc3RhcnQgPSBzaXplb2YoKmlwNl9vcmlnKTtcXG4rXFx0Y29uc3QgdTggKmRhdGEgPSAoY29uc3QgdTggKilpcDZfbmV3O1xcbitcXHR1OCBvcmlnX25leHRoZHIgPSBpcDZfb3JpZy1cXHUwMDNlbmV4dGhkcjtcXG4rXFx0dTggbmV3X25leHRoZHIgPSBpcDZfbmV3LVxcdTAwM2VuZXh0aGRyO1xcbitcXG4rXFx0aWYgKG5ld19uZXh0aGRyICE9IG9yaWdfbmV4dGhkcilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0ZGF0YSArPSBzaXplb2YoKmlwNl9uZXcpO1xcbitcXHRkYXRhX2xlbiAtPSBzaXplb2YoKmlwNl9uZXcpO1xcbitcXG4rXFx0d2hpbGUgKGlwdjZfZXh0X2hkcihvcmlnX25leHRoZHIpKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpcHY2X29wdF9oZHIgKmhwO1xcbitcXHRcXHRzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHI7XFxuK1xcdFxcdGludCBoZHJsZW47XFxuK1xcbitcXHRcXHRpZiAob3JpZ19uZXh0aGRyID09IE5FWFRIRFJfTk9ORSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHRpZiAodW5saWtlbHkoZXh0aGRyX2NudCsrIFxcdTAwM2U9IElQNl9NQVhfRVhUX0hEUlNfQ05UKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0aHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoZS1cXHUwMDNlc2tiLCBzdGFydCwgc2l6ZW9mKF9oZHIpLCBcXHUwMDI2X2hkcik7XFxuK1xcdFxcdGlmICghaHApXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdHN3aXRjaCAob3JpZ19uZXh0aGRyKSB7XFxuK1xcdFxcdGNhc2UgTkVYVEhEUl9GUkFHTUVOVDpcXG4rXFx0XFx0XFx0aGRybGVuID0gc2l6ZW9mKHN0cnVjdCBmcmFnX2hkcik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIE5FWFRIRFJfQVVUSDpcXG4rXFx0XFx0XFx0aGRybGVuID0gaXB2Nl9hdXRobGVuKGhwKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGhkcmxlbiA9IGlwdjZfb3B0bGVuKGhwKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihkYXRhLCBkYXRhX2xlbiwgZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0YXJ0LCBoZHJsZW4pKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRvcmlnX25leHRoZHIgPSBocC1cXHUwMDNlbmV4dGhkcjtcXG4rXFx0XFx0aHAgPSAoY29uc3Qgdm9pZCAqKWRhdGE7XFxuK1xcdFxcdG5ld19uZXh0aGRyID0gaHAtXFx1MDAzZW5leHRoZHI7XFxuK1xcbitcXHRcXHRpZiAobmV3X25leHRoZHIgIT0gb3JpZ19uZXh0aGRyKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRkYXRhX2xlbiAtPSBoZHJsZW47XFxuK1xcdFxcdHN0YXJ0ICs9IGhkcmxlbjtcXG4rXFx0XFx0ZGF0YSArPSBoZHJsZW47XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDYoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNiwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxcbit7XFxuK1xcdGlmIChkYXRhX2xlbiBcXHUwMDNjIHNpemVvZigqaXA2KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogQklHIFRDUC9qdW1ib2dyYW1zIHdvbid0IHdvcms7IG5ldGxpbmsgYXR0ciBsZW4gaXMgdTE2ICovXFxuK1xcdGlmIChudG9ocyhpcDYtXFx1MDAzZXBheWxvYWRfbGVuKSAhPSBkYXRhX2xlbiAtIHNpemVvZigqaXA2KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKGlwNi1cXHUwMDNldmVyc2lvbiAhPSA2KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGlwNiwgZGF0YV9sZW4sIGUpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV93cml0ZShjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUpXFxuK3tcXG4rXFx0c3dpdGNoIChlLVxcdTAwM2VzdGF0ZS5wZikge1xcbitcXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG4rXFx0XFx0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwNChkYXRhLCBkYXRhX2xlbiwgZSk7XFxuK1xcdGNhc2UgTkZQUk9UT19JUFY2OlxcbitcXHRcXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfaXA2KGRhdGEsIGRhdGFfbGVuLCBlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgICAgIShJUDZDQihlLVxcdTAwM2Vza2IpLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQNlNLQl9KVU1CT0dSQU0pO1xcbitcXHRjYXNlIE5GUFJPVE9fQlJJREdFOlxcbitcXHRcXHQvKiBObyB3cml0ZSBzdXBwb3J0LiBCcmlkZ2UgaXMgZHViaW91czogdXNlcnNwYWNlIGRvZXNuJ3QgZXZlbiBzZWUgTDIgaGVhZGVyICovXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50XFxuIG5mcW5sX21hbmdsZSh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSwgaW50IGRpZmYpXFxuIHtcXG5AQCAtMTE5Miw2ICsxMzU5LDkgQEAgbmZxbmxfbWFuZ2xlKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCBpbnQgZGlcXG4gXFx0aWYgKGUtXFx1MDAzZXN0YXRlLm5ldC1cXHUwMDNldXNlcl9ucyAhPSBcXHUwMDI2aW5pdF91c2VyX25zKVxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXG4rXFx0aWYgKCFuZnFubF92YWxpZGF0ZV93cml0ZShkYXRhLCBkYXRhX2xlbiwgZSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKGRpZmYgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdHVuc2lnbmVkIGludCBtaW5fbGVuID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoZS1cXHUwMDNlc2tiKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmliLmNcXG5pbmRleCBlMDQ4ZjA1Njk0Y2RkZC4uODk1NTUzODBmMWM1YTAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmliLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9maWIuY1xcbkBAIC0zMSw2ICszMSwxNSBAQCBpbnQgbmZ0X2ZpYl92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpXFxuIFxcdGNvbnN0IHN0cnVjdCBuZnRfZmliICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG4gXFx0dW5zaWduZWQgaW50IGhvb2tzO1xcbiBcXG4rXFx0c3dpdGNoIChjdHgtXFx1MDAzZWZhbWlseSkge1xcbitcXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuK1xcdGNhc2UgTkZQUk9UT19JTkVUOlxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZXJlc3VsdCkge1xcbiBcXHRjYXNlIE5GVF9GSUJfUkVTVUxUX09JRjpcXG4gXFx0Y2FzZSBORlRfRklCX1JFU1VMVF9PSUZOQU1FOlxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmNcXG5pbmRleCAzZjM0NzhhYmQ4NDU0Ni4uNTc3NGE3NTQ0MDI3ODAgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jXFxuQEAgLTUwLDYgKzUwLDMzIEBAIHN0YXRpYyB2b2lkIG5mdF9maWJfbmV0ZGV2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiBcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgbmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBuZnRfZmliICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG4rXFx0dW5zaWduZWQgaW50IGhvb2tzO1xcbitcXG4rXFx0c3dpdGNoIChwcml2LVxcdTAwM2VyZXN1bHQpIHtcXG4rXFx0Y2FzZSBORlRfRklCX1JFU1VMVF9PSUY6XFxuK1xcdGNhc2UgTkZUX0ZJQl9SRVNVTFRfT0lGTkFNRTpcXG4rXFx0XFx0aG9va3MgPSAoMSBcXHUwMDNjXFx1MDAzYyBORl9ORVRERVZfSU5HUkVTUyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GVF9GSUJfUkVTVUxUX0FERFJUWVBFOlxcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRBX0ZJQl9GX0lJRilcXG4rXFx0XFx0XFx0aG9va3MgPSAoMSBcXHUwMDNjXFx1MDAzYyBORl9ORVRERVZfSU5HUkVTUyk7XFxuK1xcdFxcdGVsc2UgaWYgKHByaXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUQV9GSUJfRl9PSUYpXFxuK1xcdFxcdFxcdGhvb2tzID0gKDEgXFx1MDAzY1xcdTAwM2MgTkZfTkVUREVWX0VHUkVTUyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aG9va3MgPSAoMSBcXHUwMDNjXFx1MDAzYyBORl9ORVRERVZfSU5HUkVTUykgfFxcbitcXHRcXHRcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyBORl9ORVRERVZfRUdSRVNTKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbmZ0X2NoYWluX3ZhbGlkYXRlX2hvb2tzKGN0eC1cXHUwMDNlY2hhaW4sIGhvb2tzKTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9maWJfbmV0ZGV2X3R5cGU7XFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHtcXG4gXFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfZmliX25ldGRldl90eXBlLFxcbkBAIC01Nyw3ICs4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHtcXG4gXFx0LmV2YWxcXHRcXHQ9IG5mdF9maWJfbmV0ZGV2X2V2YWwsXFxuIFxcdC5pbml0XFx0XFx0PSBuZnRfZmliX2luaXQsXFxuIFxcdC5kdW1wXFx0XFx0PSBuZnRfZmliX2R1bXAsXFxuLVxcdC52YWxpZGF0ZVxcdD0gbmZ0X2ZpYl92YWxpZGF0ZSxcXG4rXFx0LnZhbGlkYXRlXFx0PSBuZnRfZmliX25ldGRldl92YWxpZGF0ZSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmliX25ldGRldl90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xcbmluZGV4IDM0NWVmZjE0MGQ1NmY4Li4zOTE1MzlhMWNlYWE3NyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcXG5AQCAtODM0LDYgKzgzNCwyNDkgQEAgbmZ0X3BheWxvYWRfc2V0X3ZsYW4oY29uc3QgdTMyICpzcmMsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiBvZmZzZXQsIHU4IGxlbixcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuKy8qIEluZ3Jlc3MgaXMgdmVyeSBlYXJseSwgYmVmb3JlIGwzIHByb3RvY29sIGhhbmRsZXJzLlxcbisgKiBUaGVyZSBzaG91bGQgYmUgbm8gaW4tdHJlZSBjb2RlIHRoYXQgdHJ1c3RzIGwzL2w0IGhlYWRlcnNcXG4rICogYmV0d2VlbiBpbmdyZXNzIGFuZCBORl9JTkVUX1BSRV9ST1VUSU5HIGhvb2tzLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgbmZ0X2luX2luZ3Jlc3MoY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnMpXFxuK3tcXG4rXFx0cmV0dXJuIHMtXFx1MDAzZXBmID09IE5GUFJPVE9fTkVUREVWIFxcdTAwMjZcXHUwMDI2IHMtXFx1MDAzZWhvb2sgPT0gTkZfTkVUREVWX0lOR1JFU1M7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19pcDQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHUzMiAqc3JjKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBwcml2LVxcdTAwM2VvZmZzZXQgKyBza2JfbmV0d29ya19vZmZzZXQocGt0LVxcdTAwM2Vza2IpO1xcbitcXHRjb25zdCB1OCAqbmV3X29jdGV0cyA9IChjb25zdCB1OCAqKXNyYztcXG4rXFx0dTggb2xkX29jdGV0O1xcbitcXG4rXFx0c3dpdGNoIChwcml2LVxcdTAwM2VvZmZzZXQpIHtcXG4rXFx0Y2FzZSAwOiAvKiBjc3VtIGZpeHVwcyBkb2VzIGV4cGFuZCBkc2NwL3RvcyBzdG9yZSB0byAyIGJ5dGVzLlxcbitcXHRcXHQgKiBtYWtlIHN1cmUgaWhsL3ZlcnNpb24gcmVtYWluIHVuY2hhbmdlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChza2JfY29weV9iaXRzKHBrdC1cXHUwMDNlc2tiLCBvZmZzZXQsIFxcdTAwMjZvbGRfb2N0ZXQsIHNpemVvZihvbGRfb2N0ZXQpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWxlbiA9PSAyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgICAqbmV3X29jdGV0cyA9PSBvbGRfb2N0ZXQ7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCB0b3MpOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlbGVuID09IDE7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBpZCk6XFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2VsZW4gPT0gMjtcXG4rXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHR0bCk6XFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VsZW4gPT0gMSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlbGVuICE9IDIpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdC8qIHNhbWUsIGNzdW0gZml4dXAgZG9lcyBleHBhbmQgdHRsIHN0b3JlIHRvIHR3byBieXRlcy5cXG4rXFx0XFx0ICogY2hlY2sgcHJvdG9jb2wgaXMgbm90IGFsdGVyZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2tiX2NvcHlfYml0cyhwa3QtXFx1MDAzZXNrYiwgb2Zmc2V0ICsgMSwgXFx1MDAyNm9sZF9vY3RldCwgc2l6ZW9mKG9sZF9vY3RldCkpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRyZXR1cm4gbmV3X29jdGV0c1sxXSA9PSBvbGRfb2N0ZXQ7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk6XFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2VsZW4gXFx1MDAzYz0gMiArIDQgKyA0O1xcbitcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgc2FkZHIpOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlbGVuIFxcdTAwM2M9IDQgKyA0O1xcbitcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlbGVuIFxcdTAwM2M9IDQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4rXFx0XFx0XFx0XFx0Y29uc3QgdTMyICpzcmMpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmloID0gKGNvbnN0IHZvaWQgKilzcmM7XFxuK1xcbitcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZW9mZnNldCkge1xcbitcXHRjYXNlIDA6IC8qIHN0b3JlIHRvIGRzY3AgbXVzdCBub3QgYWx0ZXIgaXA2IHZlcnNpb24gKi9cXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWxlbiBcXHUwMDNjPSA0IFxcdTAwMjZcXHUwMDI2IGloLVxcdTAwM2V2ZXJzaW9uID09IDY7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWxlbiBcXHUwMDNjPSAyO1xcbitcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBob3BfbGltaXQpOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlbGVuID09IDE7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIHNhZGRyKTpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWxlbiBcXHUwMDNjPSAxNiArIDE2O1xcbitcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBkYWRkcik6XFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2VsZW4gXFx1MDAzYz0gMTY7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2FycChjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbit7XFxuK1xcdC8qIFZhcmlhYmxlIHNpemUgZm9yIHN0YW5kYXJkIGV0aGVybmV0IGFycCAqL1xcbitcXHRjb25zdCB1bnNpZ25lZCBpbnQgZXRoX2lwID0gMiAqIChFVEhfQUxFTiArIDQpO1xcbitcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcHJpdi1cXHUwMDNlb2Zmc2V0O1xcbitcXG4rXFx0c3dpdGNoIChvZmZzZXQpIHtcXG4rXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYXJwaGRyLCBhcl9vcCk6XFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2VsZW4gPT0gMjtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHBlcm1pdCB3cml0ZXMgcG9zdCBmaXhlZCBhcnAgaGVhZGVyIHNpemUuIG9mZnNldCArIGxlbiBhcmVcXG4rXFx0ICogY2hlY2tlZCB2cyBza2Igc2l6ZSB2aWEgc2tiX2Vuc3VyZV93cml0YWJsZS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBvZmZzZXQgXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBhcnBoZHIpIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZWxlbiBcXHUwMDNjPSBldGhfaXA7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19uZXRkZXYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHUzMiAqc3JjKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfTkZfVEFCTEVTX05FVERFVlxcbitcXHRzd2l0Y2ggKHBrdC1cXHUwMDNlc2tiLVxcdTAwM2Vwcm90b2NvbCkge1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0FSUCk6XFxuK1xcdFxcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfYXJwKHByaXYpO1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4rXFx0XFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDQocGt0LCBwcml2LCBzcmMpO1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbitcXHRcXHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNihwa3QsIHByaXYsIHNyYyk7XFxuK1xcdH1cXG4rI2VuZGlmXFxuK1xcdC8qIGRlZmF1bHQgdG8gZmFsc2UgZm9yIG5vdywgcmVsYXggbGF0ZXIgaW4gY2FzZSB3ZSBoYXZlXFxuK1xcdCAqIHVzZS1jYXNlcyB0aGF0IG5lZWQgaW5uZXIgaGVhZGVyIG1hbmlwdWxhdGlvbiBmb3JcXG4rXFx0ICogZW5jYXBzdWxhdGVkIHRyYWZmaWMgbGlrZSB2bGFuIG9yIFBQUG9FLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYnJpZGdlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCB1MzIgKnNyYylcXG4re1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfVEFCTEVTX0JSSURHRSlcXG4rXFx0c3dpdGNoIChwa3QtXFx1MDAzZWV0aGVydHlwZSkge1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0FSUCk6XFxuK1xcdFxcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfYXJwKHByaXYpO1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG4rXFx0XFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19pcDQocGt0LCBwcml2LCBzcmMpO1xcbitcXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxcbitcXHRcXHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNihwa3QsIHByaXYsIHNyYyk7XFxuK1xcdH1cXG4rI2VuZGlmXFxuK1xcdC8qIHNlZSBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2OiBkZWZhdWx0IHRvIGZhbHNlICovXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqc3JjKVxcbit7XFxuK1xcdHN3aXRjaCAocGt0LVxcdTAwM2VzdGF0ZS1cXHUwMDNlcGYpIHtcXG4rXFx0Y2FzZSBORlBST1RPX0FSUDpcXG4rXFx0XFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19hcnAocHJpdik7XFxuK1xcdGNhc2UgTkZQUk9UT19CUklER0U6XFxuK1xcdFxcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfYnJpZGdlKHBrdCwgcHJpdiwgc3JjKTtcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuK1xcdFxcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA0KHBrdCwgcHJpdiwgc3JjKTtcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuK1xcdFxcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA2KHBrdCwgcHJpdiwgc3JjKTtcXG4rXFx0Y2FzZSBORlBST1RPX05FVERFVjpcXG4rXFx0XFx0aWYgKHBrdC1cXHUwMDNlc3RhdGUtXFx1MDAzZWhvb2sgPT0gTkZfTkVUREVWX0lOR1JFU1MpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX25ldGRldihwa3QsIHByaXYsIHNyYyk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rLyogY2hlY2sgbGlua2xheWVyIG1vZGlmaWNhdGlvbnMgZG9uJ3Qgc3BpbGwgaW50byBuZXR3b3JrIGhlYWRlci4gKi9cXG4rc3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxcbit7XFxuK1xcdGlmIChuZnRfaW5faW5ncmVzcyhwa3QtXFx1MDAzZXN0YXRlKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gb2Zmc2V0IFxcdTAwM2M9IHNrYl9uZXR3b3JrX29mZnNldChwa3QtXFx1MDAzZXNrYik7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbit7XFxuK1xcdHN3aXRjaCAocHJpdi1cXHUwMDNlYmFzZSkge1xcbitcXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxuK1xcdFxcdGlmIChjdHgtXFx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQpIHtcXG4rXFx0XFx0XFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTsgLyogcnVuIHRpbWUgdmFsaWRhdGlvbiByZXF1aXJlZCAqL1xcbitcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXFxcInJlLXVwZGF0ZVxcXCIgb2YgTDQgY2hlY2tzdW0gKi9cXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJ3QgYmUgbmVnYXRpdmUgc28gYm9ndXNcXG4rXFx0XFx0ICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy5cXG4rXFx0XFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuKy8qIGRvIG5vdCBhbGxvdyBhcmJpdHJhcnkgbmV0d29yayBoZWFkZXIgbWFuZ2xpbmcgdmlhIGJvZ3VzIGNzdW1fb2ZmLlxcbisgKiBXZSBvbmx5IHN1cHBvcnQgaXB2NC4gIE9ubHkgTkZQUk9UT19JUFY0IGNhbiBiZSBjaGVja2VkIGZyb20gY29udHJvbFxcbisgKiBwbGFuZS5cXG4rICovXFxuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbit7XFxuK1xcdHN3aXRjaCAocGt0LVxcdTAwM2VzdGF0ZS1cXHUwMDNlcGYpIHtcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuK1xcdFxcdC8qIFdhcm5pbmc6IE5GUFJPVE9fSU5FVCB3YXMgbm90IGNoZWNrZWQ7IHdlIGNhbid0IHJldHVybiB0cnVlIGhlcmUuICovXFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0Y2FzZSBORlBST1RPX0JSSURHRTpcXG4rXFx0XFx0cmV0dXJuIHBrdC1cXHUwMDNlZXRoZXJ0eXBlID09IGh0b25zKEVUSF9QX0lQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XFxuK1xcdGNhc2UgTkZQUk9UT19ORVRERVY6XFxuK1xcdFxcdHJldHVybiBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgICBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbit7XFxuK1xcdHN3aXRjaCAocHJpdi1cXHUwMDNlYmFzZSkge1xcbitcXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxuK1xcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XFxuK1xcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4rXFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuK1xcdFxcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxcbitcXHRcXHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuIFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG5AQCAtODYxLDggKzExMDQsMTIgQEAgc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRvZmZzZXQgPSBza2JfbWFjX2hlYWRlcihza2IpIC0gc2tiLVxcdTAwM2VkYXRhIC0gdmxhbl9obGVuO1xcbitcXHRcXHRpZiAoIW5mdF9sbF93cml0ZV9vayhwa3QsIHByaXYtXFx1MDAzZWxlbiArIHByaXYtXFx1MDAzZW9mZnNldCArIG9mZnNldCkpXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG4rXFx0XFx0aWYgKCFuZnRfbmhfd3JpdGVfb2socGt0LCBwcml2LCBzcmMpKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFx0XFx0b2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuQEAgLTg5NCw2ICsxMTQxLDcgQEAgc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbiBcXHRcXHR0c3VtID0gY3N1bV9wYXJ0aWFsKHNyYywgcHJpdi1cXHUwMDNlbGVuLCAwKTtcXG4gXFxuIFxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxcbiBcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFxuQEAgLTk2MCw3ICsxMjA4LDI2IEBAIHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFxuIFxcdHN3aXRjaCAoY3N1bV90eXBlKSB7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9OT05FOlxcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQpIC8qIG5vbnNlbnNpY2FsICovXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fZmxhZ3MgPT0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHQvKiBVc2Vyc3BhY2UgcmVxdWVzdHMgTDQgY2hlY2tzdW0gdXBkYXRlLCBlLmcuOlxcbitcXHRcXHQgKiAtIElQdjYgc3RhdGVsZXNzIE5BVCAobm8gbDMgY3N1bSlcXG4rXFx0XFx0ICogLSB0cmFuc3BvcnQgaGVhZGVyIG1hbmdsaW5nXFxuK1xcdFxcdCAqIC0gaW5uZXIgZGF0YSBtYW5nbGluZ1xcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZWJhc2UgPT0gTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVIgfHxcXG4rXFx0XFx0ICAgIHByaXYtXFx1MDAzZWJhc2UgPT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUiB8fFxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlYmFzZSA9PSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVIpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxcbitcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY3R4LCBwcml2KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fU0NUUDpcXG4gXFx0XFx0aWYgKHByaXYtXFx1MDAzZWJhc2UgIT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUilcXG5AQCAtOTY4LDYgKzEyMzUsOSBAQCBzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcbiBcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgIT0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uY1xcbmluZGV4IDcwNmM3ODg1M2YyNDViLi45NzhiYjBjMDExMDY4MiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcXG5AQCAtMzQyLDYgKzM0Miw4IEBAXFxuICNpbmNsdWRlIFxcXCJuZnRfc2V0X3BpcGFwb19hdngyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJuZnRfc2V0X3BpcGFwby5oXFxcIlxcbiBcXG4rc3RhdGljIHZvaWQgbmZ0X3BpcGFwb19hYm9ydChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KTtcXG4rXFxuIC8qKlxcbiAgKiBwaXBhcG9fcmVmaWxsKCkgLSBGb3IgZWFjaCBzZXQgYml0LCBzZXQgYml0cyBmcm9tIHNlbGVjdGVkIG1hcHBpbmcgdGFibGUgaXRlbVxcbiAgKiBAbWFwOlxcdEJpdG1hcCB0byBiZSBzY2FubmVkIGZvciBzZXQgYml0c1xcbkBAIC0xMjk2LDcgKzEyOTgsNyBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4gXFx0Y29uc3QgdTggKnN0YXJ0X3AsICplbmRfcDtcXG4gXFx0aW50IGksIGJzaXplX21heCwgZXJyID0gMDtcXG4gXFxuLVxcdGlmICghbSlcXG4rXFx0aWYgKCFtIHx8IG0tXFx1MDAzZXN0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfRVJSKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9LRVlfRU5EKSlcXG5AQCAtMTM2Nyw4ICsxMzY5LDEwIEBAIHN0YXRpYyBpbnQgbmZ0X3BpcGFwb19pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldCA9IHBpcGFwb19leHBhbmQoZiwgc3RhcnQsIGVuZCwgZi1cXHUwMDNlZ3JvdXBzICogZi1cXHUwMDNlYmIpO1xcbiBcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGVyciA9IHJldDtcXG4rXFx0XFx0XFx0Z290byBhYm9ydDtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGYtXFx1MDAzZWJzaXplIFxcdTAwM2UgYnNpemVfbWF4KVxcbiBcXHRcXHRcXHRic2l6ZV9tYXggPSBmLVxcdTAwM2Vic2l6ZTtcXG5AQCAtMTM4NCw3ICsxMzg4LDcgQEAgc3RhdGljIGludCBuZnRfcGlwYXBvX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuIFxcbiBcXHRcXHRlcnIgPSBwaXBhcG9fcmVhbGxvY19zY3JhdGNoKG0sIGJzaXplX21heCk7XFxuIFxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdFxcdGdvdG8gYWJvcnQ7XFxuIFxcbiBcXHRcXHRtLVxcdTAwM2Vic2l6ZV9tYXggPSBic2l6ZV9tYXg7XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTEzOTYsNyArMTQwMCwyNiBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4gXFxuIFxcdHBpcGFwb19tYXAobSwgcnVsZW1hcCwgZSk7XFxuIFxcbitcXHRtLVxcdTAwM2VzdGF0ZSA9IE5GVF9QSVBBUE9fQ0xPTkVfTU9EO1xcbiBcXHRyZXR1cm4gMDtcXG4rYWJvcnQ6XFxuK1xcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobS1cXHUwMDNlc3RhdGUgPT0gTkZUX1BJUEFQT19DTE9ORV9FUlIpO1xcbitcXG4rXFx0LyogVHdvIHJvbGxiYWNrIGNhc2VzOlxcbitcXHQgKiAxKSBubyBwcmV2aW91cyBjaGFuZ2VzLiAgbmZ0X3BpcGFwb19hYm9ydCBpcyBub3RcXG4rXFx0ICogZ3VhcmFudGVlZCB0byBiZSBpbnZva2VkICh0aGVyZSBtaWdodCBiZSBubyBmdXJ0aGVyXFxuK1xcdCAqIGFkZC9kZWxldGUgcmVxdWVzdHMgY29taW5nIGFmdGVyIHRoaXMpLlxcbitcXHQgKlxcbitcXHQgKiAyKSB3ZSBoYWQgcHJldmlvdXMgY2hhbmdlczogdGhlcmUgYXJlIHRyYW5zYWN0aW9uXFxuK1xcdCAqIHJlY29yZHMgcG9pbnRpbmcgdG8gdGhpcyBzZXQuICBMZWF2ZSB0aGUgcm9sbGJhY2sgdG9cXG4rXFx0ICogdGhlIHRyYW5zYWN0aW9uIGhhbmRsaW5nLlxcbitcXHQgKi9cXG4rXFx0aWYgKG0tXFx1MDAzZXN0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfTkVXKVxcbitcXHRcXHRuZnRfcGlwYXBvX2Fib3J0KHNldCk7IC8qIHJlbGVhc2VzIG0gKi9cXG4rXFx0ZWxzZVxcbitcXHRcXHRtLVxcdTAwM2VzdGF0ZSA9IE5GVF9QSVBBUE9fQ0xPTkVfRVJSO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE0NzMsNiArMTQ5Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqcGlwYXBvX2Nsb25lKHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICpvbGQpXFxuIFxcdFxcdGRzdCsrO1xcbiBcXHR9XFxuIFxcbitcXHRuZXctXFx1MDAzZXN0YXRlID0gTkZUX1BJUEFQT19DTE9ORV9ORVc7XFxuIFxcdHJldHVybiBuZXc7XFxuIFxcbiBvdXRfbXQ6XFxuQEAgLTE4OTYsNyArMTkyMCw3IEBAIG5mdF9waXBhcG9fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuIFxcdC8qIHJlbW92YWwgbXVzdCBvY2N1ciBvbiBwcml2LVxcdTAwM2VjbG9uZSwgaWYgd2UgYXJlIGxvdyBvbiBtZW1vcnlcXG4gXFx0ICogd2UgaGF2ZSBubyBjaG9pY2UgYW5kIG11c3QgZmFpbCB0aGUgcmVtb3ZhbCByZXF1ZXN0LlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFtKVxcbitcXHRpZiAoIW0gfHwgbS1cXHUwMDNlc3RhdGUgPT0gTkZUX1BJUEFQT19DTE9ORV9FUlIpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0ZSA9IHBpcGFwb19nZXQobSwgKGNvbnN0IHU4ICopZWxlbS1cXHUwMDNla2V5LnZhbC5kYXRhLFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmggYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmhcXG5pbmRleCBiODJhYmIwMzU3NmVkZC4uYTE5ZTk4MGQwNmVmNDIgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oXFxuQEAgLTEzMSw5ICsxMzEsMTYgQEAgc3RydWN0IG5mdF9waXBhcG9fc2NyYXRjaCB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgX19tYXBbXTtcXG4gfTtcXG4gXFxuK2VudW0gbmZ0X3BpcGFwb19jbG9uZV9zdGF0ZSB7XFxuK1xcdE5GVF9QSVBBUE9fQ0xPTkVfTkVXLFxcbitcXHRORlRfUElQQVBPX0NMT05FX01PRCxcXG4rXFx0TkZUX1BJUEFQT19DTE9ORV9FUlIsXFxuK307XFxuK1xcbiAvKipcXG4gICogc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggLSBEYXRhIHVzZWQgZm9yIGxvb2t1cCBhbmQgbWF0Y2hpbmdcXG4gICogQGZpZWxkX2NvdW50OlxcdEFtb3VudCBvZiBmaWVsZHMgaW4gc2V0XFxuKyAqIEBzdGF0ZTpcXHRcXHRhZGQvZGVsZXRlIHN0YXRlOyB1c2VkIGZyb20gY29udHJvbCBwbGFuZVxcbiAgKiBAYnNpemVfbWF4OlxcdFxcdE1heGltdW0gbG9va3VwIHRhYmxlIGJ1Y2tldCBzaXplIG9mIGFsbCBmaWVsZHMsIGluIGxvbmdzXFxuICAqIEBzY3JhdGNoOlxcdFxcdFByZWFsbG9jYXRlZCBwZXItQ1BVIG1hcHMgZm9yIHBhcnRpYWwgbWF0Y2hpbmcgcmVzdWx0c1xcbiAgKiBAcmN1OlxcdFxcdE1hdGNoaW5nIGRhdGEgaXMgc3dhcHBlZCBvbiBjb21taXRzXFxuQEAgLTE0MSw2ICsxNDgsNyBAQCBzdHJ1Y3QgbmZ0X3BpcGFwb19zY3JhdGNoIHtcXG4gICovXFxuIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoIHtcXG4gXFx0dTggZmllbGRfY291bnQ7XFxuK1xcdGVudW0gbmZ0X3BpcGFwb19jbG9uZV9zdGF0ZSBzdGF0ZTo4O1xcbiBcXHR1bnNpZ25lZCBpbnQgYnNpemVfbWF4O1xcbiBcXHRzdHJ1Y3QgbmZ0X3BpcGFwb19zY3JhdGNoICogX19wZXJjcHUgKnNjcmF0Y2g7XFxuIFxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjAzLjI4MzMwNzI4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNTYyODQzNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfQ09OTlRSQUNLX1NJUFwiLFxuICAgIFwiTkZfQ1RfTkVUTElOS1wiLFxuICAgIFwiTkZfQ1RfTkVUTElOS19IRUxQRVJcIixcbiAgICBcIk5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX1RBQkxFU19JTkVUXCIsXG4gICAgXCJORl9UQUJMRVNfTkVUREVWXCIsXG4gICAgXCJORlRfRklCX0lQVjRcIixcbiAgICBcIk5GVF9GSUJfSVBWNlwiLFxuICAgIFwiTkZUX0ZJQl9ORVRERVZcIixcbiAgICBcIklQX1NFVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3NldF9kdW1wX2RvXCIsXG4gICAgXCJpcF9zZXRfZHVtcF9kb25lXCIsXG4gICAgXCJjdG5ldGxpbmtfYWxsb2NfZXhwZWN0XCIsXG4gICAgXCJzZXRfZXhwZWN0ZWRfcnRwX3J0Y3BcIixcbiAgICBcIm5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeVwiLFxuICAgIFwibmZxbmxfbWFuZ2xlXCIsXG4gICAgXCJuZnRfZmliX3ZhbGlkYXRlXCIsXG4gICAgXCJuZnRfZmliX25ldGRldl92YWxpZGF0ZVwiLFxuICAgIFwibmZ0X3BheWxvYWRfc2V0X2luaXRcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCIsXG4gICAgXCJuZnRfcGlwYXBvX2luc2VydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbS4gSXQgYWRkcyB2YWxpZGF0aW9uIGZvciBwYXlsb2FkIHdyaXRlcyBhbmQgSVAvSVB2NiBoZWFkZXJzIGJlZm9yZSBtYW5nbGluZywgZml4ZXMgYSBidWcgaW4gU0lQIGNvbm50cmFjayBleHBlY3RhdGlvbiwgYWRkcyBzdGF0ZSB0cmFja2luZyBmb3IgcGlwYXBvIHNldCBjbG9uZXMgdG8gcHJvcGVybHkgaGFuZGxlIGFib3J0cywgYW5kIG1vZGlmaWVzIGNvbm50cmFjayBleHBlY3RhdGlvbiBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXRmaWx0ZXIgbG9naWMsIG5ldGxpbmsgcXVldWUsIG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcsIGFuZCBwaXBhcG8gc2V0cywgd2hpY2ggYXJlIGFsbCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4NTgyYWY4MDg1MmMzMWE2OTZiOWFkYTJhOWI3MTQxYmJkNjBkOGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwNjowNjowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuY1xuaW5kZXggYTUzMWI2NTRiOGQ5NjQuLjZjZmFkMTUyZDdkMWJhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmNcbkBAIC0xNDgwLDcgKzE0ODAsMTEgQEAgaXBfc2V0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gXHRcdHN0cnVjdCBpcF9zZXRfbmV0ICppbnN0ID1cbiBcdFx0XHQoc3RydWN0IGlwX3NldF9uZXQgKiljYi1cdTAwM2VhcmdzW0lQU0VUX0NCX05FVF07XG4gXHRcdGlwX3NldF9pZF90IGluZGV4ID0gKGlwX3NldF9pZF90KWNiLVx1MDAzZWFyZ3NbSVBTRVRfQ0JfSU5ERVhdO1xuLVx0XHRzdHJ1Y3QgaXBfc2V0ICpzZXQgPSBpcF9zZXRfcmVmX25ldGxpbmsoaW5zdCwgaW5kZXgpO1xuK1x0XHRzdHJ1Y3QgaXBfc2V0ICpzZXQ7XG4rXG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0c2V0ID0gaXBfc2V0X3JlZl9uZXRsaW5rKGluc3QsIGluZGV4KTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRcdGlmIChzZXQtXHUwMDNldmFyaWFudC1cdTAwM2V1cmVmKVxuIFx0XHRcdHNldC1cdTAwM2V2YXJpYW50LVx1MDAzZXVyZWYoc2V0LCBjYiwgZmFsc2UpO1xuQEAgLTE2ODYsNyArMTY5MCw5IEBAIGlwX3NldF9kdW1wX2RvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiByZWxlYXNlX3JlZmNvdW50OlxuIFx0LyogSWYgdGhlcmUgd2FzIGFuIGVycm9yIG9yIHNldCBpcyBkb25lLCByZWxlYXNlIHNldCAqL1xuIFx0aWYgKHJldCB8fCAhY2ItXHUwMDNlYXJnc1tJUFNFVF9DQl9BUkcwXSkge1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdHNldCA9IGlwX3NldF9yZWZfbmV0bGluayhpbnN0LCBpbmRleCk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRpZiAoc2V0LVx1MDAzZXZhcmlhbnQtXHUwMDNldXJlZilcbiBcdFx0XHRzZXQtXHUwMDNldmFyaWFudC1cdTAwM2V1cmVmKHNldCwgY2IsIGZhbHNlKTtcbiBcdFx0cHJfZGVidWcoXCJyZWxlYXNlIHNldCAlc1xcblwiLCBzZXQtXHUwMDNlbmFtZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuY1xuaW5kZXggMzg2MzBjNWUwMDZmMDguLjdhZTY4ZDYwNTg2YTIzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXG5AQCAtMzA2LDcgKzMwNiw3IEBAIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpuZl9jdF9leHBlY3RfYWxsb2Moc3RydWN0IG5mX2Nvbm4gKm1lKVxuIHtcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpuZXc7XG4gXG4tXHRuZXcgPSBrbWVtX2NhY2hlX2FsbG9jKG5mX2N0X2V4cGVjdF9jYWNoZXAsIEdGUF9BVE9NSUMpO1xuK1x0bmV3ID0ga21lbV9jYWNoZV96YWxsb2MobmZfY3RfZXhwZWN0X2NhY2hlcCwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIW5ldylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG5AQCAtMzkxLDYgKzM5MSw3IEBAIHZvaWQgbmZfY3RfZXhwZWN0X2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdW5zaWduZWQgaW50IGNsYXNzLFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9OQVQpXG4gXHRtZW1zZXQoXHUwMDI2ZXhwLVx1MDAzZXNhdmVkX2FkZHIsIDAsIHNpemVvZihleHAtXHUwMDNlc2F2ZWRfYWRkcikpO1xuIFx0bWVtc2V0KFx1MDAyNmV4cC1cdTAwM2VzYXZlZF9wcm90bywgMCwgc2l6ZW9mKGV4cC1cdTAwM2VzYXZlZF9wcm90bykpO1xuK1x0ZXhwLVx1MDAzZWRpciA9IDA7XG4gI2VuZGlmXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pbml0KTtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbmluZGV4IDQyMTc3MTVkNDJkYzI0Li4zMWNiYjFiNTViOWU2YyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMzU0OSw4ICszNTQ5LDYgQEAgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdGlmIChjZGFbQ1RBX0VYUEVDVF9GTEFHU10pIHtcbiBcdFx0ZXhwLVx1MDAzZWZsYWdzID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfRVhQRUNUX0ZMQUdTXSkpO1xuIFx0XHRleHAtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+TkZfQ1RfRVhQRUNUX1VTRVJTUEFDRTtcbi1cdH0gZWxzZSB7XG4tXHRcdGV4cC1cdTAwM2VmbGFncyA9IDA7XG4gXHR9XG4gXHRpZiAoY2RhW0NUQV9FWFBFQ1RfRk5dKSB7XG4gXHRcdGNvbnN0IGNoYXIgKm5hbWUgPSBubGFfZGF0YShjZGFbQ1RBX0VYUEVDVF9GTl0pO1xuQEAgLTM1NjIsOCArMzU2MCw3IEBAIGN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0Z290byBlcnJfb3V0O1xuIFx0XHR9XG4gXHRcdGV4cC1cdTAwM2VleHBlY3RmbiA9IGV4cGZuLVx1MDAzZWV4cGVjdGZuO1xuLVx0fSBlbHNlXG4tXHRcdGV4cC1cdTAwM2VleHBlY3RmbiA9IE5VTEw7XG4rXHR9XG4gXG4gXHRleHAtXHUwMDNlY2xhc3MgPSBjbGFzcztcbiBcdGV4cC1cdTAwM2VtYXN0ZXIgPSBjdDtcbkBAIC0zNTgzLDEyICszNTgwLDYgQEAgY3RuZXRsaW5rX2FsbG9jX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sIHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0XHRcdFx0XHQgZXhwLCBuZl9jdF9sM251bShjdCkpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gZXJyX291dDtcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKVxuLVx0fSBlbHNlIHtcbi1cdFx0bWVtc2V0KFx1MDAyNmV4cC1cdTAwM2VzYXZlZF9hZGRyLCAwLCBzaXplb2YoZXhwLVx1MDAzZXNhdmVkX2FkZHIpKTtcbi1cdFx0bWVtc2V0KFx1MDAyNmV4cC1cdTAwM2VzYXZlZF9wcm90bywgMCwgc2l6ZW9mKGV4cC1cdTAwM2VzYXZlZF9wcm90bykpO1xuLVx0XHRleHAtXHUwMDNlZGlyID0gMDtcbi0jZW5kaWZcbiBcdH1cbiBcdHJldHVybiBleHA7XG4gZXJyX291dDpcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jXG5pbmRleCA1ZWMzYTRhNGJiZDcwNy4uZjNmOTBhODY2MzM4OTQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmNcbkBAIC05NTYsNyArOTU2LDYgQEAgc3RhdGljIGludCBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdFx0c2FkZHIgPSBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzO1xuIFx0fSBlbHNlIGlmIChzaXBfZXh0ZXJuYWxfbWVkaWEpIHtcbi1cdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYl9kc3Qoc2tiKS1cdTAwM2VkZXY7XG4gXHRcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7XG4gXHRcdHN0cnVjdCBmbG93aSBmbDtcbiBcbkBAIC05NzgsNyArOTc3LDExIEBAIHN0YXRpYyBpbnQgc2V0X2V4cGVjdGVkX3J0cF9ydGNwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuIFx0XHQgKiB0aHJvdWdoIHRoZSBzYW1lIGludGVyZmFjZSBhcyB0aGUgc2lnbmFsbGluZyBwZWVyLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGRzdCkge1xuLVx0XHRcdGJvb2wgZXh0ZXJuYWxfbWVkaWEgPSAoZHN0LVx1MDAzZWRldiA9PSBkZXYpO1xuK1x0XHRcdGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKnRoaXNfZHN0ID0gc2tiX2RzdChza2IpO1xuK1x0XHRcdGJvb2wgZXh0ZXJuYWxfbWVkaWEgPSBmYWxzZTtcbitcbitcdFx0XHRpZiAodGhpc19kc3QgXHUwMDI2XHUwMDI2IGRzdC1cdTAwM2VkZXYgPT0gdGhpc19kc3QtXHUwMDNlZGV2KVxuK1x0XHRcdFx0ZXh0ZXJuYWxfbWVkaWEgPSB0cnVlO1xuIFxuIFx0XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4gXHRcdFx0aWYgKGV4dGVybmFsX21lZGlhKVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG5pbmRleCBmMTQ2MGI2ODNkN2FmNy4uMmNiY2NhOTExMGRiZjUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jXG5AQCAtMTYzLDYgKzE2Myw4IEBAIG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgKmV4cGVjdF9wb2xpY3ksXG4gXHRcdCAgICB0YltORkNUSF9QT0xJQ1lfTkFNRV0sIE5GX0NUX0hFTFBFUl9OQU1FX0xFTik7XG4gXHRleHBlY3RfcG9saWN5LVx1MDAzZW1heF9leHBlY3RlZCA9XG4gXHRcdG50b2hsKG5sYV9nZXRfYmUzMih0YltORkNUSF9QT0xJQ1lfRVhQRUNUX01BWF0pKTtcbitcdGlmICghZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQpXG4rXHRcdGV4cGVjdF9wb2xpY3ktXHUwMDNlbWF4X2V4cGVjdGVkID0gTkZfQ1RfRVhQRUNUX01BWF9DTlQ7XG4gXHRpZiAoZXhwZWN0X3BvbGljeS1cdTAwM2VtYXhfZXhwZWN0ZWQgXHUwMDNlIE5GX0NUX0VYUEVDVF9NQVhfQ05UKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuaW5kZXggODBjYTA3N2I4MWJkNWEuLjM1ZDRjNmM2MjhmZmMxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuY1xuQEAgLTExODQsNiArMTE4NCwxNzMgQEAgbmZxbmxfZW5xdWV1ZV9wYWNrZXQoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSwgdW5zaWduZWQgaW50IHF1ZXVlbnVtKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4rc3RhdGljIGJvb2wgbmZxbmxfdmFsaWRhdGVfaXBvcHRzKGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX25ldyxcbitcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoX29yaWcgPSBpcF9oZHIoZS1cdTAwM2Vza2IpO1xuK1x0dW5zaWduZWQgaW50IGlobCA9IGlwaF9uZXctXHUwMDNlaWhsICogNDtcbitcbitcdGlmIChpcGhfbmV3LVx1MDAzZWlobCAhPSBpcGhfb3JpZy1cdTAwM2VpaGwpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChpaGwgPT0gc2l6ZW9mKCppcGhfb3JpZykpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIG1lbWNtcChpcGhfbmV3ICsgMSwgaXBfaGRyKGUtXHUwMDNlc2tiKSArIDEsIGlobCAtIHNpemVvZigqaXBoX29yaWcpKSA9PSAwO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuK3tcbitcdHVuc2lnbmVkIGludCBpaGw7XG4rXG4rXHRpZiAoZGF0YV9sZW4gXHUwMDNjIHNpemVvZigqaXBoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWhsID0gaXBoLVx1MDAzZWlobCAqIDR1O1xuK1x0aWYgKGlobCBcdTAwM2Mgc2l6ZW9mKCppcGgpIHx8IGRhdGFfbGVuIFx1MDAzYyBpaGwpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChpcGgtXHUwMDNldmVyc2lvbiAhPSA0IHx8XG4rXHQgICAgKChpcGgtXHUwMDNlZnJhZ19vZmYgXiBpcF9oZHIoZS1cdTAwM2Vza2IpLVx1MDAzZWZyYWdfb2ZmKSBcdTAwMjYgfmh0b25zKElQX0RGKSkgIT0gMClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogQklHIFRDUCB3b24ndCB3b3JrOyBuZXRsaW5rIGF0dHIgbGVuIGlzIHUxNiAqL1xuK1x0aWYgKG50b2hzKGlwaC1cdTAwM2V0b3RfbGVuKSAhPSBkYXRhX2xlbilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Lyogc3VwcG9ydCBmb3IgaXBvcHRzIG1hbmdsaW5nIHdvdWxkIHJlcXVpcmVcbitcdCAqIHJlY29tcGlsZSArIHNrYiB0cmFuc3BvcnQgaGVhZGVyIHVwZGF0ZS5cbitcdCAqL1xuK1x0cmV0dXJuIG5mcW5sX3ZhbGlkYXRlX2lwb3B0cyhpcGgsIGUpO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9vbmVfZXh0aGRyKGNvbnN0IHU4ICpkYXRhLFxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLFxuK1x0XHRcdFx0ICAgICAgaW50IHN0YXJ0LCBpbnQgaGRybGVuKVxuK3tcbitcdHUxNiBvY3RldHM7XG4rXG4rXHRpZiAoZGF0YV9sZW4gXHUwMDNjIGhkcmxlbiB8fCBoZHJsZW4gXHUwMDNjIDIpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHdoaWxlIChoZHJsZW4gXHUwMDNlIDApIHtcbitcdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2Yob2N0ZXRzKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGRhdGFfbGVuIC09IHNpemVvZihvY3RldHMpO1xuK1xuK1x0XHRpZiAoc2tiX2NvcHlfYml0cyhlLVx1MDAzZXNrYiwgc3RhcnQsIFx1MDAyNm9jdGV0cywgc2l6ZW9mKG9jdGV0cykpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0aWYgKGhkcmxlbiBcdTAwM2Mgc2l6ZW9mKG9jdGV0cykpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRoZHJsZW4gLT0gc2l6ZW9mKG9jdGV0cyk7XG4rXHRcdGlmIChtZW1jbXAoZGF0YSwgXHUwMDI2b2N0ZXRzLCBzaXplb2Yob2N0ZXRzKSkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRzdGFydCArPSBzaXplb2Yob2N0ZXRzKTtcbitcdFx0ZGF0YSArPSBzaXplb2Yob2N0ZXRzKTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9leHRoZHIoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNl9uZXcsXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGludCBkYXRhX2xlbixcbitcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZfb3JpZyA9IGlwdjZfaGRyKGUtXHUwMDNlc2tiKTtcbitcdGludCBleHRoZHJfY250ID0gMCwgc3RhcnQgPSBzaXplb2YoKmlwNl9vcmlnKTtcbitcdGNvbnN0IHU4ICpkYXRhID0gKGNvbnN0IHU4ICopaXA2X25ldztcbitcdHU4IG9yaWdfbmV4dGhkciA9IGlwNl9vcmlnLVx1MDAzZW5leHRoZHI7XG4rXHR1OCBuZXdfbmV4dGhkciA9IGlwNl9uZXctXHUwMDNlbmV4dGhkcjtcbitcbitcdGlmIChuZXdfbmV4dGhkciAhPSBvcmlnX25leHRoZHIpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGRhdGEgKz0gc2l6ZW9mKCppcDZfbmV3KTtcbitcdGRhdGFfbGVuIC09IHNpemVvZigqaXA2X25ldyk7XG4rXG4rXHR3aGlsZSAoaXB2Nl9leHRfaGRyKG9yaWdfbmV4dGhkcikpIHtcbitcdFx0Y29uc3Qgc3RydWN0IGlwdjZfb3B0X2hkciAqaHA7XG4rXHRcdHN0cnVjdCBpcHY2X29wdF9oZHIgX2hkcjtcbitcdFx0aW50IGhkcmxlbjtcbitcbitcdFx0aWYgKG9yaWdfbmV4dGhkciA9PSBORVhUSERSX05PTkUpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdGlmICh1bmxpa2VseShleHRoZHJfY250KysgXHUwMDNlPSBJUDZfTUFYX0VYVF9IRFJTX0NOVCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRocCA9IHNrYl9oZWFkZXJfcG9pbnRlcihlLVx1MDAzZXNrYiwgc3RhcnQsIHNpemVvZihfaGRyKSwgXHUwMDI2X2hkcik7XG4rXHRcdGlmICghaHApXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRzd2l0Y2ggKG9yaWdfbmV4dGhkcikge1xuK1x0XHRjYXNlIE5FWFRIRFJfRlJBR01FTlQ6XG4rXHRcdFx0aGRybGVuID0gc2l6ZW9mKHN0cnVjdCBmcmFnX2hkcik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgTkVYVEhEUl9BVVRIOlxuK1x0XHRcdGhkcmxlbiA9IGlwdjZfYXV0aGxlbihocCk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0aGRybGVuID0gaXB2Nl9vcHRsZW4oaHApO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghbmZxbmxfdmFsaWRhdGVfb25lX2V4dGhkcihkYXRhLCBkYXRhX2xlbiwgZSxcbitcdFx0XHRcdFx0ICAgICAgIHN0YXJ0LCBoZHJsZW4pKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0b3JpZ19uZXh0aGRyID0gaHAtXHUwMDNlbmV4dGhkcjtcbitcdFx0aHAgPSAoY29uc3Qgdm9pZCAqKWRhdGE7XG4rXHRcdG5ld19uZXh0aGRyID0gaHAtXHUwMDNlbmV4dGhkcjtcbitcbitcdFx0aWYgKG5ld19uZXh0aGRyICE9IG9yaWdfbmV4dGhkcilcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdGRhdGFfbGVuIC09IGhkcmxlbjtcbitcdFx0c3RhcnQgKz0gaGRybGVuO1xuK1x0XHRkYXRhICs9IGhkcmxlbjtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV9pcDYoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNiwgdW5zaWduZWQgaW50IGRhdGFfbGVuLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUpXG4re1xuK1x0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2YoKmlwNikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIEJJRyBUQ1AvanVtYm9ncmFtcyB3b24ndCB3b3JrOyBuZXRsaW5rIGF0dHIgbGVuIGlzIHUxNiAqL1xuK1x0aWYgKG50b2hzKGlwNi1cdTAwM2VwYXlsb2FkX2xlbikgIT0gZGF0YV9sZW4gLSBzaXplb2YoKmlwNikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChpcDYtXHUwMDNldmVyc2lvbiAhPSA2KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gbmZxbmxfdmFsaWRhdGVfZXh0aGRyKGlwNiwgZGF0YV9sZW4sIGUpO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnFubF92YWxpZGF0ZV93cml0ZShjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxuK3tcbitcdHN3aXRjaCAoZS1cdTAwM2VzdGF0ZS5wZikge1xuK1x0Y2FzZSBORlBST1RPX0lQVjQ6XG4rXHRcdHJldHVybiBuZnFubF92YWxpZGF0ZV9pcDQoZGF0YSwgZGF0YV9sZW4sIGUpO1xuK1x0Y2FzZSBORlBST1RPX0lQVjY6XG4rXHRcdHJldHVybiBuZnFubF92YWxpZGF0ZV9pcDYoZGF0YSwgZGF0YV9sZW4sIGUpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICAgIShJUDZDQihlLVx1MDAzZXNrYiktXHUwMDNlZmxhZ3MgXHUwMDI2IElQNlNLQl9KVU1CT0dSQU0pO1xuK1x0Y2FzZSBORlBST1RPX0JSSURHRTpcbitcdFx0LyogTm8gd3JpdGUgc3VwcG9ydC4gQnJpZGdlIGlzIGR1YmlvdXM6IHVzZXJzcGFjZSBkb2Vzbid0IGV2ZW4gc2VlIEwyIGhlYWRlciAqL1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbnRcbiBuZnFubF9tYW5nbGUodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIGludCBkaWZmKVxuIHtcbkBAIC0xMTkyLDYgKzEzNTksOSBAQCBuZnFubF9tYW5nbGUodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGRhdGFfbGVuLCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmUsIGludCBkaVxuIFx0aWYgKGUtXHUwMDNlc3RhdGUubmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuK1x0aWYgKCFuZnFubF92YWxpZGF0ZV93cml0ZShkYXRhLCBkYXRhX2xlbiwgZSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0aWYgKGRpZmYgXHUwMDNjIDApIHtcbiBcdFx0dW5zaWduZWQgaW50IG1pbl9sZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChlLVx1MDAzZXNrYik7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmliLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9maWIuY1xuaW5kZXggZTA0OGYwNTY5NGNkZGQuLjg5NTU1MzgwZjFjNWEwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmliLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jXG5AQCAtMzEsNiArMzEsMTUgQEAgaW50IG5mdF9maWJfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxuIFx0Y29uc3Qgc3RydWN0IG5mdF9maWIgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIFx0dW5zaWduZWQgaW50IGhvb2tzO1xuIFxuK1x0c3dpdGNoIChjdHgtXHUwMDNlZmFtaWx5KSB7XG4rXHRjYXNlIE5GUFJPVE9fSVBWNDpcbitcdGNhc2UgTkZQUk9UT19JUFY2OlxuK1x0Y2FzZSBORlBST1RPX0lORVQ6XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0c3dpdGNoIChwcml2LVx1MDAzZXJlc3VsdCkge1xuIFx0Y2FzZSBORlRfRklCX1JFU1VMVF9PSUY6XG4gXHRjYXNlIE5GVF9GSUJfUkVTVUxUX09JRk5BTUU6XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jIGIvbmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jXG5pbmRleCAzZjM0NzhhYmQ4NDU0Ni4uNTc3NGE3NTQ0MDI3ODAgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuY1xuQEAgLTUwLDYgKzUwLDMzIEBAIHN0YXRpYyB2b2lkIG5mdF9maWJfbmV0ZGV2X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XG4gfVxuIFxuK3N0YXRpYyBpbnQgbmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgbmZ0X2ZpYiAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG4rXHR1bnNpZ25lZCBpbnQgaG9va3M7XG4rXG4rXHRzd2l0Y2ggKHByaXYtXHUwMDNlcmVzdWx0KSB7XG4rXHRjYXNlIE5GVF9GSUJfUkVTVUxUX09JRjpcbitcdGNhc2UgTkZUX0ZJQl9SRVNVTFRfT0lGTkFNRTpcbitcdFx0aG9va3MgPSAoMSBcdTAwM2NcdTAwM2MgTkZfTkVUREVWX0lOR1JFU1MpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTkZUX0ZJQl9SRVNVTFRfQUREUlRZUEU6XG4rXHRcdGlmIChwcml2LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRBX0ZJQl9GX0lJRilcbitcdFx0XHRob29rcyA9ICgxIFx1MDAzY1x1MDAzYyBORl9ORVRERVZfSU5HUkVTUyk7XG4rXHRcdGVsc2UgaWYgKHByaXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVEFfRklCX0ZfT0lGKVxuK1x0XHRcdGhvb2tzID0gKDEgXHUwMDNjXHUwMDNjIE5GX05FVERFVl9FR1JFU1MpO1xuK1x0XHRlbHNlXG4rXHRcdFx0aG9va3MgPSAoMSBcdTAwM2NcdTAwM2MgTkZfTkVUREVWX0lOR1JFU1MpIHxcbitcdFx0XHRcdCgxIFx1MDAzY1x1MDAzYyBORl9ORVRERVZfRUdSRVNTKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiBuZnRfY2hhaW5fdmFsaWRhdGVfaG9va3MoY3R4LVx1MDAzZWNoYWluLCBob29rcyk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmliX25ldGRldl90eXBlO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHtcbiBcdC50eXBlXHRcdD0gXHUwMDI2bmZ0X2ZpYl9uZXRkZXZfdHlwZSxcbkBAIC01Nyw3ICs4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHtcbiBcdC5ldmFsXHRcdD0gbmZ0X2ZpYl9uZXRkZXZfZXZhbCxcbiBcdC5pbml0XHRcdD0gbmZ0X2ZpYl9pbml0LFxuIFx0LmR1bXBcdFx0PSBuZnRfZmliX2R1bXAsXG4tXHQudmFsaWRhdGVcdD0gbmZ0X2ZpYl92YWxpZGF0ZSxcbitcdC52YWxpZGF0ZVx0PSBuZnRfZmliX25ldGRldl92YWxpZGF0ZSxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmliX25ldGRldl90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCAzNDVlZmYxNDBkNTZmOC4uMzkxNTM5YTFjZWFhNzcgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTgzNCw2ICs4MzQsMjQ5IEBAIG5mdF9wYXlsb2FkX3NldF92bGFuKGNvbnN0IHUzMiAqc3JjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgb2Zmc2V0LCB1OCBsZW4sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rLyogSW5ncmVzcyBpcyB2ZXJ5IGVhcmx5LCBiZWZvcmUgbDMgcHJvdG9jb2wgaGFuZGxlcnMuXG4rICogVGhlcmUgc2hvdWxkIGJlIG5vIGluLXRyZWUgY29kZSB0aGF0IHRydXN0cyBsMy9sNCBoZWFkZXJzXG4rICogYmV0d2VlbiBpbmdyZXNzIGFuZCBORl9JTkVUX1BSRV9ST1VUSU5HIGhvb2tzLlxuKyAqL1xuK3N0YXRpYyBib29sIG5mdF9pbl9pbmdyZXNzKGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzKVxuK3tcbitcdHJldHVybiBzLVx1MDAzZXBmID09IE5GUFJPVE9fTkVUREVWIFx1MDAyNlx1MDAyNiBzLVx1MDAzZWhvb2sgPT0gTkZfTkVUREVWX0lOR1JFU1M7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19pcDQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4rXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuK1x0XHRcdFx0Y29uc3QgdTMyICpzcmMpXG4re1xuK1x0dW5zaWduZWQgaW50IG9mZnNldCA9IHByaXYtXHUwMDNlb2Zmc2V0ICsgc2tiX25ldHdvcmtfb2Zmc2V0KHBrdC1cdTAwM2Vza2IpO1xuK1x0Y29uc3QgdTggKm5ld19vY3RldHMgPSAoY29uc3QgdTggKilzcmM7XG4rXHR1OCBvbGRfb2N0ZXQ7XG4rXG4rXHRzd2l0Y2ggKHByaXYtXHUwMDNlb2Zmc2V0KSB7XG4rXHRjYXNlIDA6IC8qIGNzdW0gZml4dXBzIGRvZXMgZXhwYW5kIGRzY3AvdG9zIHN0b3JlIHRvIDIgYnl0ZXMuXG4rXHRcdCAqIG1ha2Ugc3VyZSBpaGwvdmVyc2lvbiByZW1haW4gdW5jaGFuZ2VkLlxuK1x0XHQgKi9cbitcdFx0aWYgKHNrYl9jb3B5X2JpdHMocGt0LVx1MDAzZXNrYiwgb2Zmc2V0LCBcdTAwMjZvbGRfb2N0ZXQsIHNpemVvZihvbGRfb2N0ZXQpKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiA9PSAyIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICAgKm5ld19vY3RldHMgPT0gb2xkX29jdGV0O1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHRvcyk6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiA9PSAxO1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGlkKTpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuID09IDI7XG4rXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgdHRsKTpcbitcdFx0aWYgKHByaXYtXHUwMDNlbGVuID09IDEpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdGlmIChwcml2LVx1MDAzZWxlbiAhPSAyKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0Lyogc2FtZSwgY3N1bSBmaXh1cCBkb2VzIGV4cGFuZCB0dGwgc3RvcmUgdG8gdHdvIGJ5dGVzLlxuK1x0XHQgKiBjaGVjayBwcm90b2NvbCBpcyBub3QgYWx0ZXJlZC5cbitcdFx0ICovXG4rXHRcdGlmIChza2JfY29weV9iaXRzKHBrdC1cdTAwM2Vza2IsIG9mZnNldCArIDEsIFx1MDAyNm9sZF9vY3RldCwgc2l6ZW9mKG9sZF9vY3RldCkpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0cmV0dXJuIG5ld19vY3RldHNbMV0gPT0gb2xkX29jdGV0O1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gMiArIDQgKyA0O1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKTpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gNCArIDQ7XG4rXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VsZW4gXHUwMDNjPSA0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfaXA2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHRcdGNvbnN0IHUzMiAqc3JjKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppaCA9IChjb25zdCB2b2lkICopc3JjO1xuK1xuK1x0c3dpdGNoIChwcml2LVx1MDAzZW9mZnNldCkge1xuK1x0Y2FzZSAwOiAvKiBzdG9yZSB0byBkc2NwIG11c3Qgbm90IGFsdGVyIGlwNiB2ZXJzaW9uICovXG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiBcdTAwM2M9IDQgXHUwMDI2XHUwMDI2IGloLVx1MDAzZXZlcnNpb24gPT0gNjtcbitcdGNhc2UgMjpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gMjtcbitcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIGhvcF9saW1pdCk6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWxlbiA9PSAxO1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VsZW4gXHUwMDNjPSAxNiArIDE2O1xuK1x0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2VsZW4gXHUwMDNjPSAxNjtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2FycChjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuK3tcbitcdC8qIFZhcmlhYmxlIHNpemUgZm9yIHN0YW5kYXJkIGV0aGVybmV0IGFycCAqL1xuK1x0Y29uc3QgdW5zaWduZWQgaW50IGV0aF9pcCA9IDIgKiAoRVRIX0FMRU4gKyA0KTtcbitcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBwcml2LVx1MDAzZW9mZnNldDtcbitcbitcdHN3aXRjaCAob2Zmc2V0KSB7XG4rXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBhcnBoZHIsIGFyX29wKTpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlbGVuID09IDI7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcbitcdC8qIHBlcm1pdCB3cml0ZXMgcG9zdCBmaXhlZCBhcnAgaGVhZGVyIHNpemUuIG9mZnNldCArIGxlbiBhcmVcbitcdCAqIGNoZWNrZWQgdnMgc2tiIHNpemUgdmlhIHNrYl9lbnN1cmVfd3JpdGFibGUuXG4rXHQgKi9cbitcdHJldHVybiBvZmZzZXQgXHUwMDNlPSBzaXplb2Yoc3RydWN0IGFycGhkcikgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gZXRoX2lwO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHRcdCAgIGNvbnN0IHUzMiAqc3JjKVxuK3tcbisjaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVZcbitcdHN3aXRjaCAocGt0LVx1MDAzZXNrYi1cdTAwM2Vwcm90b2NvbCkge1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9BUlApOlxuK1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2FycChwcml2KTtcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxuK1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNChwa3QsIHByaXYsIHNyYyk7XG4rXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuK1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNihwa3QsIHByaXYsIHNyYyk7XG4rXHR9XG4rI2VuZGlmXG4rXHQvKiBkZWZhdWx0IHRvIGZhbHNlIGZvciBub3csIHJlbGF4IGxhdGVyIGluIGNhc2Ugd2UgaGF2ZVxuK1x0ICogdXNlLWNhc2VzIHRoYXQgbmVlZCBpbm5lciBoZWFkZXIgbWFuaXB1bGF0aW9uIGZvclxuK1x0ICogZW5jYXBzdWxhdGVkIHRyYWZmaWMgbGlrZSB2bGFuIG9yIFBQUG9FLlxuK1x0ICovXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19icmlkZ2UoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4rXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuK1x0XHRcdFx0ICAgY29uc3QgdTMyICpzcmMpXG4re1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfQlJJREdFKVxuK1x0c3dpdGNoIChwa3QtXHUwMDNlZXRoZXJ0eXBlKSB7XG4rXHRjYXNlIGh0b25zKEVUSF9QX0FSUCk6XG4rXHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfYXJwKHByaXYpO1xuK1x0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XG4rXHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA0KHBrdCwgcHJpdiwgc3JjKTtcbitcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4rXHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA2KHBrdCwgcHJpdiwgc3JjKTtcbitcdH1cbisjZW5kaWZcbitcdC8qIHNlZSBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2OiBkZWZhdWx0IHRvIGZhbHNlICovXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5mdF9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHQgICAgY29uc3QgdTMyICpzcmMpXG4re1xuK1x0c3dpdGNoIChwa3QtXHUwMDNlc3RhdGUtXHUwMDNlcGYpIHtcbitcdGNhc2UgTkZQUk9UT19BUlA6XG4rXHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfYXJwKHByaXYpO1xuK1x0Y2FzZSBORlBST1RPX0JSSURHRTpcbitcdFx0cmV0dXJuIG5mdF9uaF93cml0ZV9va19icmlkZ2UocGt0LCBwcml2LCBzcmMpO1xuK1x0Y2FzZSBORlBST1RPX0lQVjQ6XG4rXHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfaXA0KHBrdCwgcHJpdiwgc3JjKTtcbitcdGNhc2UgTkZQUk9UT19JUFY2OlxuK1x0XHRyZXR1cm4gbmZ0X25oX3dyaXRlX29rX2lwNihwa3QsIHByaXYsIHNyYyk7XG4rXHRjYXNlIE5GUFJPVE9fTkVUREVWOlxuK1x0XHRpZiAocGt0LVx1MDAzZXN0YXRlLVx1MDAzZWhvb2sgPT0gTkZfTkVUREVWX0lOR1JFU1MpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2KHBrdCwgcHJpdiwgc3JjKTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rLyogY2hlY2sgbGlua2xheWVyIG1vZGlmaWNhdGlvbnMgZG9uJ3Qgc3BpbGwgaW50byBuZXR3b3JrIGhlYWRlci4gKi9cbitzdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXG4re1xuK1x0aWYgKG5mdF9pbl9pbmdyZXNzKHBrdC1cdTAwM2VzdGF0ZSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIG9mZnNldCBcdTAwM2M9IHNrYl9uZXR3b3JrX29mZnNldChwa3QtXHUwMDNlc2tiKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuK1x0XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbit7XG4rXHRzd2l0Y2ggKHByaXYtXHUwMDNlYmFzZSkge1xuK1x0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbitcdFx0aWYgKGN0eC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY0KSB7XG4rXHRcdFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXHUwMDNlY3N1bV9vZmZzZXQpXG4rXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbitcdFx0cmV0dXJuIHRydWU7IC8qIHJ1biB0aW1lIHZhbGlkYXRpb24gcmVxdWlyZWQgKi9cbitcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbitcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwicmUtdXBkYXRlXCIgb2YgTDQgY2hlY2tzdW0gKi9cbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdC8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbid0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXG4rXHRcdCAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuXG4rXHRcdCAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIHRydWU7XG4rXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbisvKiBkbyBub3QgYWxsb3cgYXJiaXRyYXJ5IG5ldHdvcmsgaGVhZGVyIG1hbmdsaW5nIHZpYSBib2d1cyBjc3VtX29mZi5cbisgKiBXZSBvbmx5IHN1cHBvcnQgaXB2NC4gIE9ubHkgTkZQUk9UT19JUFY0IGNhbiBiZSBjaGVja2VkIGZyb20gY29udHJvbFxuKyAqIHBsYW5lLlxuKyAqL1xuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuK3tcbitcdHN3aXRjaCAocGt0LVx1MDAzZXN0YXRlLVx1MDAzZXBmKSB7XG4rXHRjYXNlIE5GUFJPVE9fSVBWNDpcbitcdFx0LyogV2FybmluZzogTkZQUk9UT19JTkVUIHdhcyBub3QgY2hlY2tlZDsgd2UgY2FuJ3QgcmV0dXJuIHRydWUgaGVyZS4gKi9cbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XG4rXHRjYXNlIE5GUFJPVE9fSVBWNjpcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0Y2FzZSBORlBST1RPX0JSSURHRTpcbitcdFx0cmV0dXJuIHBrdC1cdTAwM2VldGhlcnR5cGUgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbitcdGNhc2UgTkZQUk9UT19ORVRERVY6XG4rXHRcdHJldHVybiBwa3QtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuK3tcbitcdHN3aXRjaCAocHJpdi1cdTAwM2ViYXNlKSB7XG4rXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuK1x0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xuK1x0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuK1x0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4rXHRcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxuK1x0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdFx0XHRcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG5AQCAtODYxLDggKzExMDQsMTIgQEAgc3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuIFx0XHR9XG4gXG4gXHRcdG9mZnNldCA9IHNrYl9tYWNfaGVhZGVyKHNrYikgLSBza2ItXHUwMDNlZGF0YSAtIHZsYW5faGxlbjtcbitcdFx0aWYgKCFuZnRfbGxfd3JpdGVfb2socGt0LCBwcml2LVx1MDAzZWxlbiArIHByaXYtXHUwMDNlb2Zmc2V0ICsgb2Zmc2V0KSlcbitcdFx0XHRnb3RvIGVycjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuK1x0XHRpZiAoIW5mdF9uaF93cml0ZV9vayhwa3QsIHByaXYsIHNyYykpXG4rXHRcdFx0Z290byBlcnI7XG4gXHRcdG9mZnNldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbkBAIC04OTQsNiArMTE0MSw3IEBAIHN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbiBcdFx0dHN1bSA9IGNzdW1fcGFydGlhbChzcmMsIHByaXYtXHUwMDNlbGVuLCAwKTtcbiBcbiBcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxuIFx0XHRcdGdvdG8gZXJyO1xuIFxuQEAgLTk2MCw3ICsxMjA4LDI2IEBAIHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBcdHN3aXRjaCAoY3N1bV90eXBlKSB7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fTk9ORTpcbitcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQpIC8qIG5vbnNlbnNpY2FsICovXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fZmxhZ3MgPT0gMClcbitcdFx0XHRicmVhaztcbitcbitcdFx0LyogVXNlcnNwYWNlIHJlcXVlc3RzIEw0IGNoZWNrc3VtIHVwZGF0ZSwgZS5nLjpcbitcdFx0ICogLSBJUHY2IHN0YXRlbGVzcyBOQVQgKG5vIGwzIGNzdW0pXG4rXHRcdCAqIC0gdHJhbnNwb3J0IGhlYWRlciBtYW5nbGluZ1xuK1x0XHQgKiAtIGlubmVyIGRhdGEgbWFuZ2xpbmdcbitcdFx0ICovXG4rXHRcdGlmIChwcml2LVx1MDAzZWJhc2UgPT0gTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVIgfHxcbitcdFx0ICAgIHByaXYtXHUwMDNlYmFzZSA9PSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIHx8XG4rXHRcdCAgICBwcml2LVx1MDAzZWJhc2UgPT0gTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxuK1x0XHRpZiAoIW5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY3R4LCBwcml2KSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fU0NUUDpcbiBcdFx0aWYgKHByaXYtXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSKVxuQEAgLTk2OCw2ICsxMjM1LDkgQEAgc3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFxuIFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX29mZnNldCAhPSBvZmZzZXRvZihzdHJ1Y3Qgc2N0cGhkciwgY2hlY2tzdW0pKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmNcbmluZGV4IDcwNmM3ODg1M2YyNDViLi45NzhiYjBjMDExMDY4MiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jXG5AQCAtMzQyLDYgKzM0Miw4IEBAXG4gI2luY2x1ZGUgXCJuZnRfc2V0X3BpcGFwb19hdngyLmhcIlxuICNpbmNsdWRlIFwibmZ0X3NldF9waXBhcG8uaFwiXG4gXG4rc3RhdGljIHZvaWQgbmZ0X3BpcGFwb19hYm9ydChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KTtcbitcbiAvKipcbiAgKiBwaXBhcG9fcmVmaWxsKCkgLSBGb3IgZWFjaCBzZXQgYml0LCBzZXQgYml0cyBmcm9tIHNlbGVjdGVkIG1hcHBpbmcgdGFibGUgaXRlbVxuICAqIEBtYXA6XHRCaXRtYXAgdG8gYmUgc2Nhbm5lZCBmb3Igc2V0IGJpdHNcbkBAIC0xMjk2LDcgKzEyOTgsNyBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBcdGNvbnN0IHU4ICpzdGFydF9wLCAqZW5kX3A7XG4gXHRpbnQgaSwgYnNpemVfbWF4LCBlcnIgPSAwO1xuIFxuLVx0aWYgKCFtKVxuK1x0aWYgKCFtIHx8IG0tXHUwMDNlc3RhdGUgPT0gTkZUX1BJUEFQT19DTE9ORV9FUlIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0tFWV9FTkQpKVxuQEAgLTEzNjcsOCArMTM2OSwxMCBAQCBzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBcdFx0ZWxzZVxuIFx0XHRcdHJldCA9IHBpcGFwb19leHBhbmQoZiwgc3RhcnQsIGVuZCwgZi1cdTAwM2Vncm91cHMgKiBmLVx1MDAzZWJiKTtcbiBcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0ZXJyID0gcmV0O1xuK1x0XHRcdGdvdG8gYWJvcnQ7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKGYtXHUwMDNlYnNpemUgXHUwMDNlIGJzaXplX21heClcbiBcdFx0XHRic2l6ZV9tYXggPSBmLVx1MDAzZWJzaXplO1xuQEAgLTEzODQsNyArMTM4OCw3IEBAIHN0YXRpYyBpbnQgbmZ0X3BpcGFwb19pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFxuIFx0XHRlcnIgPSBwaXBhcG9fcmVhbGxvY19zY3JhdGNoKG0sIGJzaXplX21heCk7XG4gXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0XHRnb3RvIGFib3J0O1xuIFxuIFx0XHRtLVx1MDAzZWJzaXplX21heCA9IGJzaXplX21heDtcbiBcdH0gZWxzZSB7XG5AQCAtMTM5Niw3ICsxNDAwLDI2IEBAIHN0YXRpYyBpbnQgbmZ0X3BpcGFwb19pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFxuIFx0cGlwYXBvX21hcChtLCBydWxlbWFwLCBlKTtcbiBcbitcdG0tXHUwMDNlc3RhdGUgPSBORlRfUElQQVBPX0NMT05FX01PRDtcbiBcdHJldHVybiAwO1xuK2Fib3J0OlxuK1x0REVCVUdfTkVUX1dBUk5fT05fT05DRShtLVx1MDAzZXN0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfRVJSKTtcbitcbitcdC8qIFR3byByb2xsYmFjayBjYXNlczpcbitcdCAqIDEpIG5vIHByZXZpb3VzIGNoYW5nZXMuICBuZnRfcGlwYXBvX2Fib3J0IGlzIG5vdFxuK1x0ICogZ3VhcmFudGVlZCB0byBiZSBpbnZva2VkICh0aGVyZSBtaWdodCBiZSBubyBmdXJ0aGVyXG4rXHQgKiBhZGQvZGVsZXRlIHJlcXVlc3RzIGNvbWluZyBhZnRlciB0aGlzKS5cbitcdCAqXG4rXHQgKiAyKSB3ZSBoYWQgcHJldmlvdXMgY2hhbmdlczogdGhlcmUgYXJlIHRyYW5zYWN0aW9uXG4rXHQgKiByZWNvcmRzIHBvaW50aW5nIHRvIHRoaXMgc2V0LiAgTGVhdmUgdGhlIHJvbGxiYWNrIHRvXG4rXHQgKiB0aGUgdHJhbnNhY3Rpb24gaGFuZGxpbmcuXG4rXHQgKi9cbitcdGlmIChtLVx1MDAzZXN0YXRlID09IE5GVF9QSVBBUE9fQ0xPTkVfTkVXKVxuK1x0XHRuZnRfcGlwYXBvX2Fib3J0KHNldCk7IC8qIHJlbGVhc2VzIG0gKi9cbitcdGVsc2VcbitcdFx0bS1cdTAwM2VzdGF0ZSA9IE5GVF9QSVBBUE9fQ0xPTkVfRVJSO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gLyoqXG5AQCAtMTQ3Myw2ICsxNDk2LDcgQEAgc3RhdGljIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICpwaXBhcG9fY2xvbmUoc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm9sZClcbiBcdFx0ZHN0Kys7XG4gXHR9XG4gXG4rXHRuZXctXHUwMDNlc3RhdGUgPSBORlRfUElQQVBPX0NMT05FX05FVztcbiBcdHJldHVybiBuZXc7XG4gXG4gb3V0X210OlxuQEAgLTE4OTYsNyArMTkyMCw3IEBAIG5mdF9waXBhcG9fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHQvKiByZW1vdmFsIG11c3Qgb2NjdXIgb24gcHJpdi1cdTAwM2VjbG9uZSwgaWYgd2UgYXJlIGxvdyBvbiBtZW1vcnlcbiBcdCAqIHdlIGhhdmUgbm8gY2hvaWNlIGFuZCBtdXN0IGZhaWwgdGhlIHJlbW92YWwgcmVxdWVzdC5cbiBcdCAqL1xuLVx0aWYgKCFtKVxuK1x0aWYgKCFtIHx8IG0tXHUwMDNlc3RhdGUgPT0gTkZUX1BJUEFQT19DTE9ORV9FUlIpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0ZSA9IHBpcGFwb19nZXQobSwgKGNvbnN0IHU4ICopZWxlbS1cdTAwM2VrZXkudmFsLmRhdGEsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oXG5pbmRleCBiODJhYmIwMzU3NmVkZC4uYTE5ZTk4MGQwNmVmNDIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmhcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaFxuQEAgLTEzMSw5ICsxMzEsMTYgQEAgc3RydWN0IG5mdF9waXBhcG9fc2NyYXRjaCB7XG4gXHR1bnNpZ25lZCBsb25nIF9fbWFwW107XG4gfTtcbiBcbitlbnVtIG5mdF9waXBhcG9fY2xvbmVfc3RhdGUge1xuK1x0TkZUX1BJUEFQT19DTE9ORV9ORVcsXG4rXHRORlRfUElQQVBPX0NMT05FX01PRCxcbitcdE5GVF9QSVBBUE9fQ0xPTkVfRVJSLFxuK307XG4rXG4gLyoqXG4gICogc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggLSBEYXRhIHVzZWQgZm9yIGxvb2t1cCBhbmQgbWF0Y2hpbmdcbiAgKiBAZmllbGRfY291bnQ6XHRBbW91bnQgb2YgZmllbGRzIGluIHNldFxuKyAqIEBzdGF0ZTpcdFx0YWRkL2RlbGV0ZSBzdGF0ZTsgdXNlZCBmcm9tIGNvbnRyb2wgcGxhbmVcbiAgKiBAYnNpemVfbWF4Olx0XHRNYXhpbXVtIGxvb2t1cCB0YWJsZSBidWNrZXQgc2l6ZSBvZiBhbGwgZmllbGRzLCBpbiBsb25nc1xuICAqIEBzY3JhdGNoOlx0XHRQcmVhbGxvY2F0ZWQgcGVyLUNQVSBtYXBzIGZvciBwYXJ0aWFsIG1hdGNoaW5nIHJlc3VsdHNcbiAgKiBAcmN1Olx0XHRNYXRjaGluZyBkYXRhIGlzIHN3YXBwZWQgb24gY29tbWl0c1xuQEAgLTE0MSw2ICsxNDgsNyBAQCBzdHJ1Y3QgbmZ0X3BpcGFwb19zY3JhdGNoIHtcbiAgKi9cbiBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCB7XG4gXHR1OCBmaWVsZF9jb3VudDtcbitcdGVudW0gbmZ0X3BpcGFwb19jbG9uZV9zdGF0ZSBzdGF0ZTo4O1xuIFx0dW5zaWduZWQgaW50IGJzaXplX21heDtcbiBcdHN0cnVjdCBuZnRfcGlwYXBvX3NjcmF0Y2ggKiBfX3BlcmNwdSAqc2NyYXRjaDtcbiBcdHN0cnVjdCByY3VfaGVhZCByY3U7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjowMy4yODMzMDk4MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mzg4MTMxODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIFNlcmllcyBFdmFsdWF0aW9uOiBBIEZ1enppbmcgT3Bwb3J0dW5pdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICp5ZXMsIHRoaXMgZGVzZXJ2ZXMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiogSXQncyB0b3VjaGluZyBxdWl0ZSBhIGZldyBjcml0aWNhbCBhcmVhcyBvZiB0aGUgYG5ldGZpbHRlcmAgc3Vic3lzdGVtOiBzcGVjaWZpY2FsbHksIGEgZGl2ZSBpbnRvIG5ldGxpbmsgcXVldWUsIHNvbWUgY2hhbmdlcyB0byBuZnRhYmxlcyBwYXlsb2FkIG1hbmdsaW5nLCB0aGUgaGFuZGxpbmcgb2YgcGlwYXBvIHNldHMsIGFuZCBjb25udHJhY2sgZXhwZWN0YXRpb25zLiBHaXZlbiB0aGUgc2NvcGUgYW5kIHRoZSB0eXBlcyBvZiBtb2RpZmljYXRpb25zLCBmcm9tIGxvY2tpbmcgY2hhbmdlcyBpbiBgaXBfc2V0X2NvcmUuY2AgKHRoYXQgYHJjdV9yZWFkX2xvY2tgL2B1bmxvY2tgIGlzIGludGVyZXN0aW5nKSB0byB2YXJpb3VzIGluaXRpYWxpemF0aW9uIGFuZCB2YWxpZGF0aW9uIGFkanVzdG1lbnRzIGFjcm9zcyBtdWx0aXBsZSBmaWxlcywgdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MgaXMgZGVmaW5pdGVseSB0aGVyZS5cblxuSXQncyBjbGVhciB0aGF0IHRoaXMgdG91Y2hlcyBvbiB2YXJpb3VzIGNvcmUgbmV0d29yayBmaWx0ZXJpbmcgY29tcG9uZW50cy4gSW4gYG5mX2Nvbm50cmFja19leHBlY3QuY2AgdGhlIGNoYW5nZSB0byBgemFsbG9jYCB3aXRoIGFkZGVkIGluaXRpYWxpemF0aW9uIHJhaXNlcyBpbW1lZGlhdGUgY29uY2VybnMuIFRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhlIFNJUCBoZWxwZXIgKGBuZl9jb25udHJhY2tfc2lwLmNgKSBzb3VuZCBpbXBvcnRhbnQsIGFzIGRvIHRoZSB2YWxpZGF0aW9ucyBhZGRlZCBpbiBgbmZuZXRsaW5rX3F1ZXVlLmNgIGFuZCBgbmZ0XypgIGZpbGVzLiBUaGUgc3RhdGUgdHJhY2tpbmcgYWRkZWQgdG8gYG5mdF9zZXRfcGlwYXBvLmNgIGxvb2tzIGxpa2UgYW4gYXJlYSB3aGVyZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgc3RhdGUgdHJhbnNpdGlvbnMgY291bGQgYXJpc2UuXG5cbk5vdywgYmVmb3JlIHdlIGp1bXAgaW50byB0aGUgZnV6emluZywgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gTGV0J3Mgc2VlLi4uIHdlJ2xsIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX05FVEZJTFRFUmAsIG5hdHVyYWxseS4gQmV5b25kIHRoYXQsIEknbSB0aGlua2luZyBgQ09ORklHX05GX0NPTk5UUkFDS2AsIGBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUGAsIGBDT05GSUdfTkZfQ1RfTkVUTElOS2AsIGBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUVgLCBgQ09ORklHX05GX1RBQkxFU2AsIGFuZCB0aGUgYENPTkZJR19ORlRfKmAgb3B0aW9ucywgc28gYENPTkZJR19ORlRfRklCYCwgYENPTkZJR19ORlRfRklCX05FVERFVmAsIGBDT05GSUdfTkZUX1BBWUxPQURgLCBhbmQgSSBhbHNvIHNhdyBzb21lIGBJUF9TRVRgIHJlZmVyZW5jZXMsIHNvIHdlIG5lZWQgYENPTkZJR19JUF9TRVRgLiBXZSBtdXN0IGVuc3VyZSB0aGVzZSBhcmUgZW5hYmxlZCBzbyB0aGUgZnV6emVyIGNhbiBwcm9wZXJseSB0ZXN0IHRoZXNlIGNoYW5nZXMuXG5cbkknbGwgcXVpY2tseSBkbyBzb21lIGNvZGUgc2VhcmNoaW5nIHRvIHZlcmlmeSB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIHRoZW4gZ2V0IHRoZSBmdXp6aW5nIGVudmlyb25tZW50IHNldHVwLiBUaGlzIGxvb2tzIGxpa2UgaXQnbGwgYmUgYSBmcnVpdGZ1bCBmdXp6aW5nIGNhbXBhaWduIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjEyLjY3MTQ0NTY1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyNzg3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0NPTk5UUkFDS19TSVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zMzA9Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVxcdHRyaXN0YXRlIFxcXCJTSVAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6MTIuODMxNzM1MzgxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgwNjQ0MzI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIG5ldHdvcmtpbmcsIG1heWJlIGRlYnVnZ2luZyBhIHBlcmZvcm1hbmNlIGlzc3VlIG9yIHNldHRpbmcgdXAgc29tZSBhZHZhbmNlZCBmaXJld2FsbCBydWxlczpcblxuKipOZXRmaWx0ZXIgYW5kIE5ldGxpbmsgUXVldWUgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBwYWNrZXQgZmlsdGVyaW5nIG1lc3MsIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGUgYmFzaWNzIGFyZSBpbiBwbGFjZS4gVGhlIHdob2xlIE5ldGZpbHRlciBzZXR1cCByZWxpZXMgaGVhdmlseSBvbiB0aGUgbmV0bGluayBxdWV1ZWluZyBtZWNoYW5pc20gZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIFNvLCBiZWZvcmUgSSBzdGFydCBwdWxsaW5nIG15IGhhaXIgb3V0IHRyeWluZyB0byBkZWJ1ZyBzb21lIHdlaXJkIHRyYWZmaWMgYmVoYXZpb3VyIG9yIG1pc3NpbmcgcGFja2V0cywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjazogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUVgIGlzIGVuYWJsZWQuIEl0J3Mgc3VjaCBhIGZ1bmRhbWVudGFsIGNvbXBvbmVudCwgYW5kIEkndmUgYmVlbiBiaXR0ZW4gYnkgZm9yZ2V0dGluZyB0byBjaGVjayB0aGlzIGJlZm9yZSDigJMgd2FzdGluZyBob3VycyB0cnlpbmcgdG8gZmlndXJlIG91dCB3aHkgbXkgY3VzdG9tIHJ1bGVzIGFyZW4ndCBiZWluZyBoaXQuIFRoaXMgaXMgbXkgZm91bmRhdGlvbjsgSSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCdzIHNvbGlkIGJlZm9yZSBidWlsZGluZyBhbnl0aGluZyBvbiB0b3Agb2YgaXQuIE9uZSBtaXNzaW5nIGNvbmZpZyBvcHRpb24gY2FuIGRlcmFpbCB0aGUgd2hvbGUgb3BlcmF0aW9uLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBuZXRsaW5rIHF1ZXVlIGlzIGVuYWJsZWQsIGFuZCB0aGVuIEkgY2FuIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODA1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6MTcuNjM4MTgzNDc0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNDM5NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ2PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIE5GUVVFVUUgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjoxNy43MzE2MzA2ODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ5OTk1NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgYENPTkZJR19ORlRfRklCYCBmb3IgTmV0ZmlsdGVyIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIGBDT05GSUdfTkZUX0ZJQmAgb3B0aW9uIGlzIGVuYWJsZWQuIEkga25vdyB0aGlzIGlzIGNydWNpYWwgZm9yIGVuYWJsaW5nIHRoZSBGSUIgKEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSkgc3VwcG9ydCB3aXRoaW4gTmV0ZmlsdGVyJ3MgbmZ0YWJsZXMgZnJhbWV3b3JrLiBXaXRob3V0IHRoaXMsIEkgd29uJ3QgaGF2ZSB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24gZm9yIGFkdmFuY2VkIHJvdXRpbmcgYW5kIHBhY2tldCBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzIHRoYXQgSSdtIGxpa2VseSB0cnlpbmcgdG8gaW1wbGVtZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgZW5hYmxlZCB0byBwcm9jZWVkIHdpdGggd2hhdGV2ZXIgdGFzayBpcyBhdCBoYW5kLiBUaGlzIGlzIGEgZm91bmRhdGlvbmFsIHN0ZXAsIGFuZCBuZWdsZWN0aW5nIGl0IGNvdWxkIGxlYWQgdG8gaG91cnMgb2Ygd2FzdGVkIGVmZm9ydCBjaGFzaW5nIHBoYW50b20gcHJvYmxlbXMuIFRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjoyMS4wODE2MzA1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAxODIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0ZJQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTU5OT1jb25maWcgTkZUX0hBU0hcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYwNTpjb25maWcgTkZUX0ZJQlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDYtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjA3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MDg6Y29uZmlnIE5GVF9GSUJfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MDktXFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY3ND1jb25maWcgTkZUX0ZXRF9ORVRERVZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NzktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY4MDpjb25maWcgTkZUX0ZJQl9ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjgxLVxcdGRlcGVuZHMgb24gTkZUX0ZJQl9JUFY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjIxLjE1NzY1NTQyM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjU2MTE3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkV2YWx1YXRpbmcgYENPTkZJR19ORlRfUEFZTE9BRGAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGp1c3QgbWFrZSBzdXJlIHdlJ3JlIG9uIHRvcCBvZiBgQ09ORklHX05GVF9QQVlMT0FEYC4gSXQncyBhIGtleSBlbGVtZW50LCBvYnZpb3VzbHkuIEl0IGRpY3RhdGVzIGhvdyB3ZSdyZSBnb2luZyB0byBpbnRlcmFjdCB3aXRoIHRoZSBwYXlsb2FkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBuZnRhYmxlcywgYW5kIHRoYXQncyBjcml0aWNhbCBmb3Igb3VyIG92ZXJhbGwgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IHByb2ZpbGUuIElzIHRoaXMgZW5hYmxlZD8gSXMgaXQgY29ycmVjdGx5IGNvbmZpZ3VyZWQ/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBjb25zaWRlcj8gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBjdXJyZW50IHN0YXR1cyBhbmQgbWFrZSBzdXJlIGl0IGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIHJlcXVpcmVtZW50cyBvZiB0aGUgc3lzdGVtJ3MgaW50ZW5kZWQgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSBjb25zaWRlcmluZyB0aGUgbmV0d29yayB0cmFmZmljIGFuYWx5c2lzIGFuZCBtYW5pcHVsYXRpb24gdGhhdCdzIGdvaW5nIG9uIGhlcmUuIEl0J3MgYSBmdW5kYW1lbnRhbCBzZXR0aW5nLCBzbyBJIHdhbnQgdG8gZW5zdXJlIGl0J3Mgc2V0IHVwIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1ODYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjoyNC41ODMyNzIwNzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjk0MTYxMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9QQVlMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6MjQuNzkwMjMxNzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4MjQ2MTQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBuZnRfcGF5bG9hZC5jYCBmaWxlIGFuZCBJJ20gcHJldHR5IHN1cmUgaXQncyBiZWluZyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgY29uZGl0aW9uYWxseSwgc3BlY2lmaWNhbGx5IGRlcGVuZGluZyBvbiB0aGUgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uIE15IGludHVpdGlvbiBzYXlzIGBDT05GSUdfTkZfVEFCTEVTYCBpcyBsaWtlbHkgdGhlIGtleSB0cmlnZ2VyLCBidXQgaXQgY291bGQgYmUgc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIEkndmUgZ290IHRvIGNvbmZpcm0gdGhpcy4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdvdWxkIGJlIHRoZSBOZXRmaWx0ZXIgYE1ha2VmaWxlYCwgaW4gYG5ldC9uZXRmaWx0ZXIvYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQgcnVsZXMgZm9yIHRoaXMgc3R1ZmYgd291bGQgYmUgZGVmaW5lZCwgc28gbGV0J3MganVtcCBpbiB0aGVyZSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHByb2Nlc3MgaXMgYWN0dWFsbHkgZG9pbmcgd2l0aCBgbmZ0X3BheWxvYWQuY2AuIEhvcGVmdWxseSwgaXQnbGwgYmUgY2xlYXIgcHJldHR5IHF1aWNrbHkgd2hldGhlciBpdCdzIHVuY29uZGl0aW9uYWxseSBidWlsdCB3aXRoIGEgc3BlY2lmaWMgY29uZmlnIG9yIGlmIHRoZXJlIGFyZSBvdGhlciBkZXBlbmRlbmNpZXMgYXQgcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjoyOC40NzI2OTc1MjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNzQzNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT04Nz1uZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXFx0XFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg5OlxcdFxcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXFx0XFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjI4LjU2NDQ2MTQ1NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTczNjA3Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkFzc2Vzc2luZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIGBuZnRfcGF5bG9hZC5vYCBpcyBkZWZpbml0ZWx5IGEgY29tcG9uZW50IHdpdGhpbiBgbmZfdGFibGVzLW9ianNgLiBUaGF0IGNvbmZpcm1zIHRoYXQgaGF2aW5nIGBDT05GSUdfTkZfVEFCTEVTYCBlbmFibGVkIGNvdmVycyB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGF0IHBhcnRpY3VsYXIgb2JqZWN0IGZpbGUuIE5vIG5lZWQgdG8gZGlnIGFueSBkZWVwZXIgdGhlcmUuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgSSBzaG91bGQgY2hlY2sgb24gYG5mdF9zZXRfcGlwYXBvYC4gSSBuZWVkIHRvIGFzc2VzcyB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgd2hldGhlciBvciBub3QgZW5hYmxpbmcgYENPTkZJR19ORl9UQUJMRVNgIHN1ZmZpY2llbnRseSBhZGRyZXNzZXMgdGhvc2UgdG9vLiBJJ20gc2VlaW5nIGl0IGZvciB0aGUgZmlyc3QgdGltZSwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gdGFrZSBjYXJlIG9mIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGJhc2UgYG5mX3RhYmxlc2AgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI0MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjMzLjUzODA3NDQyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM4NDcyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3NldF9waXBhcG9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkzLVxcdFxcdCAgbmZ0X3NldF9oYXNoLm8gbmZ0X3NldF9iaXRtYXAubyBuZnRfc2V0X3JidHJlZS5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjk0OlxcdFxcdCAgbmZ0X3NldF9waXBhcG8ub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTUtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTk3PWlmbmRlZiBDT05GSUdfVU1MXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5ODpuZl90YWJsZXMtb2JqcyArPSBuZnRfc2V0X3BpcGFwb19hdngyLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTk5LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjMzLjYzMTkzNDMxMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYxNTA2MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkNvbnNpZGVyaW5nIERlcGVuZGVuY2llcyBhbmQgUmVsYXRlZCBNb2R1bGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmZfdGFibGVzLW9ianNgIHRoaW5nLiBSaWdodCwgdGhhdCdzIGRlZmluaXRlbHkgYSBrZXkgY29tcG9uZW50LiBCdXQsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gV2hhdCBlbHNlIGlzIGluIHBsYXkgaGVyZT8gU3BlY2lmaWNhbGx5LCBJJ20gd29uZGVyaW5nIGFib3V0IGBuZm5ldGxpbmtfY3RoZWxwZXJgLiBJcyBpdCBkaXJlY3RseSByZWxhdGVkPyBJcyBpdCBhIGRlcGVuZGVuY3k/IE9yIGlzIGl0IHNvbWV0aGluZyB0aGF0IGludGVyYWN0cyB3aXRoIGBuZl90YWJsZXMtb2Jqc2AgaW4gc29tZSBvdGhlciBzaWduaWZpY2FudCB3YXk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIHBpY3R1cmUsIGlmIGFueS4gRGlnZ2luZyBpbnRvIHRoZSByZWxhdGlvbnNoaXBzIGhlcmUgd2lsbCBwYWludCBhIGJldHRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjM2Ljc5MzQ0ODI5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1Mzg2NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mbmV0bGlua19jdGhlbHBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9Mzg9b2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfVElNRU9VVCkgKz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozOTpvYmotJChDT05GSUdfTkZfQ1RfTkVUTElOS19IRUxQRVIpICs9IG5mbmV0bGlua19jdGhlbHBlci5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS00MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6MzYuOTM4ODQzMTIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NzY5MTU0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhYnlyaW50aCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgcmVxdWlyZXMgYENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUmAuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2UgbmVlZCB0byBnZXQgcm9sbGluZy4gTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBJJ20gZ29pbmcgdG8gdGFrZSBhIG1vbWVudCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nIHRoYXQgb2Z0ZW4gaW50ZXJzZWN0cyB3aXRoIHRoaXMgYXJlYSDigJMgc3BlY2lmaWNhbGx5LCBgQ09ORklHX0lQX1NFVGAuIEl0J3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIG9mdGVuIGEgcHJlcmVxdWlzaXRlIG9yIGF0IGxlYXN0IGEgcmVsYXRlZCBmZWF0dXJlLiBMZXQncyBtYWtlIHN1cmUgaXTigJlzIGVuYWJsZWQgb3IgYXQgbGVhc3QgdW5kZXJzdG9vZCBpbiB0aGlzIGNvbnRleHQgYmVmb3JlIEkgcHJvY2VlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgbmV0bGluayBoZWxwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTUwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6NDIuOTE1NzYzODQxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTgwNjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfU0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6MjptZW51Y29uZmlnIElQX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJUCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZz0xND1pZiBJUF9TRVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE2OmNvbmZpZyBJUF9TRVRfTUFYXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE3LVxcdGludCBcXFwiTWF4aW11bSBudW1iZXIgb2YgSVAgc2V0c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0yNy1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mjg6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0zNi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6Mzc6Y29uZmlnIElQX1NFVF9CSVRNQVBfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcImJpdG1hcDppcCxtYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDUtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjQ2OmNvbmZpZyBJUF9TRVRfQklUTUFQX1BPUlRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcImJpdG1hcDpwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTU0LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo1NTpjb25maWcgSVBfU0VUX0hBU0hfSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNTYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjQtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjY1OmNvbmZpZyBJUF9TRVRfSEFTSF9JUE1BUktcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctNjYtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAsbWFyayBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03My1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6NzQ6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0IHNldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTgyLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzo4Mzpjb25maWcgSVBfU0VUX0hBU0hfSVBQT1JUSVBcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctODQtXFx0dHJpc3RhdGUgXFxcImhhc2g6aXAscG9ydCxpcCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWc6OTM6Y29uZmlnIElQX1NFVF9IQVNIX0lQUE9SVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy05NC1cXHR0cmlzdGF0ZSBcXFwiaGFzaDppcCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMDItXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEwMzpjb25maWcgSVBfU0VUX0hBU0hfSVBNQUNcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJoYXNoOmlwLG1hYyBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMTEtXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjExMjpjb25maWcgSVBfU0VUX0hBU0hfTUFDXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiaGFzaDptYWMgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIwLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMjE6Y29uZmlnIElQX1NFVF9IQVNIX05FVFBPUlRORVRcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTIyLVxcdHRyaXN0YXRlIFxcXCJoYXNoOm5ldCxwb3J0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xMjktXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjEzMDpjb25maWcgSVBfU0VUX0hBU0hfTkVUXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTEzMS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTM4LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxMzk6Y29uZmlnIElQX1NFVF9IQVNIX05FVE5FVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDAtXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LG5ldCBzZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDctXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnOjE0ODpjb25maWcgSVBfU0VUX0hBU0hfTkVUUE9SVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNDktXFx0dHJpc3RhdGUgXFxcImhhc2g6bmV0LHBvcnQgc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTU3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNTg6Y29uZmlnIElQX1NFVF9IQVNIX05FVElGQUNFXFxubmV0L25ldGZpbHRlci9pcHNldC9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSBcXFwiaGFzaDpuZXQsaWZhY2Ugc2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L0tjb25maWctMTY3LVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZzoxNjg6Y29uZmlnIElQX1NFVF9MSVNUX1NFVFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvS2NvbmZpZy0xNjktXFx0dHJpc3RhdGUgXFxcImxpc3Q6c2V0IHNldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjo0My4wMTE1ODE0NTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMDA5NjczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29uZmlnIGNvbnNpZGVyYXRpb25zLCBkaXN0aWxsZWQgaW50byBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbG9va3MgbGlrZSBgQ09ORklHX0lQX1NFVGAgaXMgYSBoYXJkIHJlcXVpcmVtZW50LiBHb3QgaXQuIE5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byBjb25uZWN0aW9uIHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgZXhwZWN0YXRpb25zLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRoYXQgYENPTkZJR19ORl9DT05OVFJBQ0tfRVhQRUNUYCBtaWdodCBiZSBpbnZvbHZlZC4gSG93ZXZlciwgSSBuZWVkIHRvIGJlIHN1cmUuIEkgYmVsaWV2ZSB0aGF0IGV4cGVjdGF0aW9ucyBhcmUgYSBjb3JlIHBhcnQgb2YgdGhlIGJhc2UgYENPTkZJR19ORl9DT05OVFJBQ0tgIG1vZHVsZS4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGEgZGlzdGluY3QgY29uZmlndXJhdGlvbiBvcHRpb24gdGllZCBkaXJlY3RseSB0byB0aGUgYG5mX2Nvbm50cmFja19leHBlY3QuY2AgbW9kdWxlIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZT8gSSBuZWVkIHRvIHZlcmlmeSBpdHMgZXhhY3QgY29uZmlndXJhdGlvbiBwYXRoLiBJdCBtaWdodCBiZSBwYXJ0IG9mIGFub3RoZXIgY29uZmlndXJhdGlvbiBvciBpdCBjb3VsZCBiZSBhIHNlcGFyYXRlIG9wdGlvbi4gSSdsbCBuZWVkIHRvIGRyaWxsIGRvd24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDAxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDY6NDYuNjQxNjgyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0Njk1MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19leHBlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTM9bmV0ZmlsdGVyLSQoQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LKSArPSBuZm5ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNC1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjU6bmZfY29ubnRyYWNrLXlcXHQ6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS02LVxcdFxcdCAgIG5mX2Nvbm50cmFja19wcm90by5vIG5mX2Nvbm50cmFja19wcm90b19nZW5lcmljLm8gbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5vIG5mX2Nvbm50cmFja19wcm90b191ZHAubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA2OjQ2Ljc1NjM4NjcwOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzcyNDE0MDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIE5ldGZpbHRlciBDb25udHJhY2sqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjbHVlIHBvaW50cyBkaXJlY3RseSB0byBgbmZfY29ubnRyYWNrLXlgLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBhbmQgY29uZmlndXJhdGlvbiBvZiBgQ09ORklHX05GX0NUX05FVExJTktgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGludGVyYWN0aW9uIHdpdGggdXNlcnNwYWNlIGhhcHBlbnMgZm9yIGBuZl9jb25udHJhY2tgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBuZXRsaW5rIGludGVyZmFjZSBpcyBlbmFibGVkLiBJZiB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzbid0IHNldCwgdGhlbiB0aGUgYWJpbGl0eSB0byBpbnRlcmFjdCB3aXRoIHRoZSBjb25udHJhY2sgdGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgd29uJ3QgYmUgYXZhaWxhYmxlLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBjZXJ0YWluIGJlaGF2aW9ycywgc3BlY2lmaWNhbGx5IGluIGNlcnRhaW4gbmV0d29yayBtYW5hZ2VtZW50IHRvb2xzLCB0byBmYWlsIGFzIGV4cGVjdGVkLiBUaGlzIGFsc28gaGVscHMgdG8gZW5zdXJlIHRoZSBleHBlY3RlZCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuIEkgc3VzcGVjdCB0aGlzIGlzIHRoZSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjo1MS4xMjg4MDYxMzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDU4NTg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ1RfTkVUTElOS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTM1NT1jb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2Njpjb25maWcgTkZfQ1RfTkVUTElOS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjctXFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzcyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNzM6Y29uZmlnIE5GX0NUX05FVExJTktfVElNRU9VVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNzQtXFx0dHJpc3RhdGUgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgdHVuaW5nIHZpYSBOZXRsaW5rJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzg1OmNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zODYtXFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycyBpbiB1c2VyLXNwYWNlIHZpYSBOZXRsaW5rJ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNjo1MS4yNDk0MDA0MDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3NzcwNDEwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1cyBSZWZpbmVtZW50KipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRha2luZyBhIGxvb2sgYXQgYSBmZXcgYXJlYXMgd2l0aGluIHRoZSBOZXRmaWx0ZXIvaXB0YWJsZXMgY29kZSwgdHJ5aW5nIHRvIHBpbnBvaW50IGdvb2QgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4gSSd2ZSBnb3QgYSBmYWlybHkgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIG1vZHVsZXMgdG8gY29uc2lkZXI6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DVF9ORVRMSU5LYCwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCwgYE5GX1RBQkxFU2AsIGBORlRfRklCYCwgYE5GVF9GSUJfTkVUREVWYCwgYW5kIGBJUF9TRVRgLiBBIHdpZGUgdmFyaWV0eS5cblxuTm93LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBuZXRsaW5rIGludGVyYWN0aW9ucywgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCB0aG9zZSB0aGF0IGRlYWwgd2l0aCBzdGF0ZWZ1bCBjb25uZWN0aW9ucywgdGhvc2UgYXJlYXMgYXJlIHJpcGUgd2l0aCBjb21wbGV4aXR5IGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIHN0YXJ0ZWQgYnkgbG9va2luZyBhdCBgaXBfc2V0X2NvcmUuY2AgYW5kIGZvdW5kIGBpcF9zZXRfZHVtcF9kb2AsIHNpbmNlIGl0cyBuZXRsaW5rIGR1bXAgY2FsbGJhY2ssIHNvIHRoYXQncyBhIGRlY2VudCBzdGFydC4gVGhlbiBJIGxvb2tlZCBhdCBgbmZfY29ubnRyYWNrX2V4cGVjdC5jYCBhbmQgYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLCB3aGljaCBvZmZlcmVkIGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YCBhbmQgZm91bmQgc29tZSBmdW5jdGlvbnMgaW4gYG5mX2Nvbm50cmFja19zaXAuY2AgbGlrZSBgc2V0X2V4cGVjdGVkX3J0cF9ydGNwYCwgd2hpY2ggY291bGQgYmUgdXNlZnVsLlxuXG5gbmZuZXRsaW5rX2N0aGVscGVyLmNgIGFuZCBgbmZuZXRsaW5rX3F1ZXVlLmNgIGFyZSBhbHNvIGludGVyZXN0aW5nLiBJIHNhdyBgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5YCwgYW5kIGBuZnFubF9tYW5nbGVgIGluIGBuZm5ldGxpbmtfcXVldWUuY2AgdGhhdCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIEl0J3MgaGFuZGxpbmcgcGFja2V0IG1hbmlwdWxhdGlvbiwgd2hpY2ggaXMgb2Z0ZW4gYSBzb3VyY2Ugb2YgYnVncy4gVGhlIGBuZnFubF9tYW5nbGVgIHN5bWJvbCBpcyBlc3BlY2lhbGx5IHByb21pc2luZyBnaXZlbiBpdHMgcm9sZSBpbiBhbHRlcmluZyBwYWNrZXRzLlxuXG5UaGUgYG5mdF9maWIuY2AgYW5kIGBuZnRfZmliX25ldGRldi5jYCBjb2RlIG9mZmVycyBgbmZ0X2ZpYl92YWxpZGF0ZWAgYW5kIGBuZnRfZmliX25ldGRldl92YWxpZGF0ZWAsIGFuZCB0aGV5IGFyZSBhbHNvIGxvb2tpbmcgbGlrZSBwb3RlbnRpYWwgdGFyZ2V0cy4gSW4gYG5mdF9wYXlsb2FkLmNgLCBJIHNhdyBzb21lIGluaXRpYWxpemF0aW9ucyBhbmQgZXZhbHVhdGlvbnM7IGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgc2VlbSBsaWtlIHRoZXkgc2hvdWxkIGJlIGludmVzdGlnYXRlZC4gSSdtIGFsc28gbG9va2luZyBpbnRvIGBuZnRfc2V0X3BpcGFwby5jYCBhbmQgZm91bmQgYG5mdF9waXBhcG9faW5zZXJ0YCBhbmQgYHBpcGFwb19jbG9uZWAgYXMgY2FuZGlkYXRlcyB0b28uXG5cblNvLCBsZXQncyByZWZpbmUgdGhpcyBsaXN0LCBmb2N1c2luZyBvbiB0aGUgbW9zdCBwcm9taXNpbmcgb25lczogYGlwX3NldF9kdW1wX2RvYCwgYGN0bmV0bGlua19hbGxvY19leHBlY3RgLCBgc2V0X2V4cGVjdGVkX3J0cF9ydGNwYCwgYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAsIGBuZnFubF9tYW5nbGVgLCBgbmZ0X2ZpYl92YWxpZGF0ZWAsIGBuZnRfZmliX25ldGRldl92YWxpZGF0ZWAsIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAsIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAsIGBuZnRfcGlwYXBvX2luc2VydGAsIGFuZCBgcGlwYXBvX2Nsb25lYC4gTm93IGl0J3MgdGltZSB0byBjaGVjayBpZiB0aGVzZSBhcmUgZXhwb3J0ZWQgc3ltYm9scyBhbmQgaWYgdGhleSBhcmUgZXZlbiBzdWl0YWJsZSBmb3IgZnV6emluZyBpbiBwcmFjdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMTcsIk91dHB1dFRva2VucyI6MTEyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA3OjAyLjAyNjQ0NjU0N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3MTUyOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihpcF9zZXRfZHVtcF9kb3xjdG5ldGxpbmtfYWxsb2NfZXhwZWN0fHNldF9leHBlY3RlZF9ydHBfcnRjcHxuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3l8bmZxbmxfbWFuZ2xlfG5mdF9maWJfdmFsaWRhdGV8bmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGV8bmZ0X3BheWxvYWRfc2V0X2luaXR8bmZ0X3BheWxvYWRfc2V0X2V2YWx8bmZ0X3BpcGFwb19pbnNlcnR8cGlwYXBvX2Nsb25lKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTQ3Nj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jOjE0Nzc6aXBfc2V0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jLTE0Nzgte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jPTE1NzA9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxNTcxOmlwX3NldF9kdW1wX2RvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTU3Mi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM9MTcxMj1zdGF0aWMgaW50IGlwX3NldF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTcyMC1cXHRcXHRcXHQuc3RhcnQgPSBpcF9zZXRfZHVtcF9zdGFydCxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmM6MTcyMTpcXHRcXHRcXHQuZHVtcCA9IGlwX3NldF9kdW1wX2RvLFxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYzoxNzIyOlxcdFxcdFxcdC5kb25lID0gaXBfc2V0X2R1bXBfZG9uZSxcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMtMTcyMy1cXHRcXHR9O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTI2MzA9c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MjYzMTpjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTI2MzItXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICphc3NpZ25faGVscGVyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTI4NTY9Y3RuZXRsaW5rX2dsdWVfYXR0YWNoX2V4cGVjdChjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMjg4Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6Mjg4ODpcXHRleHAgPSBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0KChjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgKiljZGEsIGN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0yODg5LVxcdFxcdFxcdFxcdCAgICAgYXNzaWduX2hlbHBlciwgXFx1MDAyNnR1cGxlLCBcXHUwMDI2bWFzayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzUxOT1zdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNTIwOmN0bmV0bGlua19hbGxvY19leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM1MjEtXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICphc3NpZ25faGVscGVyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM1OTE9Y3RuZXRsaW5rX2NyZWF0ZV9leHBlY3Qoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM2MjItXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNjIzOlxcdGV4cCA9IGN0bmV0bGlua19hbGxvY19leHBlY3QoY2RhLCBjdCwgTlVMTCwgXFx1MDAyNnR1cGxlLCBcXHUwMDI2bWFzayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM2MjQtXFx0aWYgKElTX0VSUihleHApKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYz05MDk9c3RhdGljIHZvaWQgZmx1c2hfZXhwZWN0YXRpb25zKHN0cnVjdCBuZl9jb25uICpjdCwgYm9vbCBtZWRpYSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTkyOC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYzo5Mjk6c3RhdGljIGludCBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMtOTMwLVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZGF0YW9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jPTExMTY9c3RhdGljIGludCBwcm9jZXNzX3NkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTExOTgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmM6MTE5OTpcXHRcXHRyZXQgPSBzZXRfZXhwZWN0ZWRfcnRwX3J0Y3Aoc2tiLCBwcm90b2ZmLCBkYXRhb2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jLTEyMDAtXFx0XFx0XFx0XFx0XFx0ICAgIGRwdHIsIGRhdGFsZW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jPTE0NT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoxNDY6bmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSAqZXhwZWN0X3BvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE0Ny1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTc4Om5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeV9zZXRbTkZDVEhfUE9MSUNZX1NFVF9NQVgrMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0xNzktXFx0W05GQ1RIX1BPTElDWV9TRVRfTlVNXSA9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYz0xODM9bmZubF9jdGhlbHBlcl9wYXJzZV9leHBlY3RfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE5MC1cXHRyZXQgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6MTkxOlxcdFxcdFxcdFxcdFxcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTE5Mi1cXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yMDgtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYzoyMDk6XFx0XFx0cmV0ID0gbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5KFxcdTAwMjZoZWxwZXItXFx1MDAzZWV4cGVjdF9wb2xpY3lbaV0sXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYy0yMTAtXFx0XFx0XFx0XFx0XFx0XFx0ICB0YltORkNUSF9QT0xJQ1lfU0VUK2ldKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM9MzY4PXN0YXRpYyBpbnQgbmZubF9jdGhlbHBlcl91cGRhdGVfcG9saWN5KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3NS1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIE5GQ1RIX1BPTElDWV9TRVRfTUFYLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmM6Mzc2OlxcdFxcdFxcdFxcdFxcdCAgbmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5X3NldCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jLTM3Ny1cXHRcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xMzU0PXN0YXRpYyBpbnRcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEzNTU6bmZxbmxfbWFuZ2xlKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbiwgc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplLCBpbnQgZGlmZilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEzNTYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz0xNzExPXN0YXRpYyBpbnQgbmZxbmxfcmVjdl92ZXJkaWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE3NjAtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNzYxOlxcdFxcdGlmIChuZnFubF9tYW5nbGUobmxhX2RhdGEobmZxYVtORlFBX1BBWUxPQURdKSxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE3NjItXFx0XFx0XFx0XFx0IHBheWxvYWRfbGVuLCBlbnRyeSwgZGlmZikgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmliLmM9Mjc9RVhQT1JUX1NZTUJPTChuZnRfZmliX3BvbGljeSk7XFxubmV0L25ldGZpbHRlci9uZnRfZmliLmMtMjgtXFxubmV0L25ldGZpbHRlci9uZnRfZmliLmM6Mjk6aW50IG5mdF9maWJfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTMwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYi5jLTcyLX1cXG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYzo3MzpFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmliX3ZhbGlkYXRlKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9maWIuYy03NC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9pbmV0LmM9NDU9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2ZpYl9pbmV0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9pbmV0LmMtNTAtXFx0LmR1bXBcXHRcXHQ9IG5mdF9maWJfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfaW5ldC5jOjUxOlxcdC52YWxpZGF0ZVxcdD0gbmZ0X2ZpYl92YWxpZGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfaW5ldC5jLTUyLX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmM9MjE9c3RhdGljIHZvaWQgbmZ0X2ZpYl9uZXRkZXZfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMtNTItXFxubmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jOjUzOnN0YXRpYyBpbnQgbmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9maWJfbmV0ZGV2LmMtNTQtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmliX25ldGRldi5jPTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9maWJfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYy04Ni1cXHQuZHVtcFxcdFxcdD0gbmZ0X2ZpYl9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYzo4NzpcXHQudmFsaWRhdGVcXHQ9IG5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ZpYl9uZXRkZXYuYy04OC19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwNTk9c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDc5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgwOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4MS1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNjktXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzA6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcxLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMjcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX3NldF9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI3My1cXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkX3NldCkpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjc0OlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3NTpcXHQuaW5pdFxcdFxcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzYtXFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9kdW1wLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTEyNDM9c3RhdGljIGJvb2wgbmZ0X3BpcGFwb190cmFuc2FjdGlvbl9tdXRleF9oZWxkKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI1My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI1NDpzdGF0aWMgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKnBpcGFwb19jbG9uZShzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqb2xkKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI1NS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xMjYyPXN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqcGlwYXBvX21heWJlX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI3MS1cXHRcXHRcXHRcXHQgICAgICBuZnRfcGlwYXBvX3RyYW5zYWN0aW9uX211dGV4X2hlbGQoc2V0KSk7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjEyNzI6XFx0cHJpdi1cXHUwMDNlY2xvbmUgPSBwaXBhcG9fY2xvbmUobSk7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyNzMtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI3Ny0vKipcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI3ODogKiBuZnRfcGlwYXBvX2luc2VydCgpIC0gVmFsaWRhdGUgYW5kIGluc2VydCByYW5nZWQgZWxlbWVudHNcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI3OS0gKiBAbmV0OlxcdE5ldHdvcmsgbmFtZXNwYWNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI4NS0gKi9cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI4NjpzdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI4Ny1cXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTQyNS0vKipcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTQyNjogKiBwaXBhcG9fY2xvbmUoKSAtIENsb25lIG1hdGNoaW5nIGRhdGEgdG8gY3JlYXRlIG5ldyB3b3JraW5nIGNvcHlcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTQyNy0gKiBAb2xkOlxcdEV4aXN0aW5nIG1hdGNoaW5nIGRhdGFcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNDMwLSAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxNDMxOnN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqcGlwYXBvX2Nsb25lKHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICpvbGQpXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE0MzIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTE4NzU9c3RhdGljIHZvaWQgbmZ0X3BpcGFwb19hYm9ydChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE4OTItICogaW4gdXNlIGZvciBsb29rdXBzLCBhbmQgbm90IGRpcmVjdGx5IGluc2VydGVkIGludG8gY3VycmVudCBsb29rdXAgZGF0YS4gQm90aFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxODkzOiAqIG5mdF9waXBhcG9faW5zZXJ0KCkgYW5kIG5mdF9waXBhcG9fYWN0aXZhdGUoKSBhcmUgY2FsbGVkIG9uY2UgZm9yIGVhY2hcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTg5NC0gKiBlbGVtZW50LCBoZW5jZSB3ZSBjYW4ndCBwdXJwb3NlIGVpdGhlciBvbmUgYXMgYSByZWFsIGNvbW1pdCBvcGVyYXRpb24uXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MjQxOD1jb25zdCBzdHJ1Y3QgbmZ0X3NldF90eXBlIG5mdF9zZXRfcGlwYXBvX3R5cGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMjQyMi1cXHRcXHQubG9va3VwXFx0XFx0PSBuZnRfcGlwYXBvX2xvb2t1cCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MjQyMzpcXHRcXHQuaW5zZXJ0XFx0XFx0PSBuZnRfcGlwYXBvX2luc2VydCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMjQyNC1cXHRcXHQuYWN0aXZhdGVcXHQ9IG5mdF9waXBhcG9fYWN0aXZhdGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MjQ0Mz1jb25zdCBzdHJ1Y3QgbmZ0X3NldF90eXBlIG5mdF9zZXRfcGlwYXBvX2F2eDJfdHlwZSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0yNDQ3LVxcdFxcdC5sb29rdXBcXHRcXHQ9IG5mdF9waXBhcG9fYXZ4Ml9sb29rdXAsXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjI0NDg6XFx0XFx0Lmluc2VydFxcdFxcdD0gbmZ0X3BpcGFwb19pbnNlcnQsXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTI0NDktXFx0XFx0LmFjdGl2YXRlXFx0PSBuZnRfcGlwYXBvX2FjdGl2YXRlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oPTEyOD1zdHJ1Y3QgbmZ0X3BpcGFwb19zY3JhdGNoIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaC0xMzMtXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oOjEzNDplbnVtIG5mdF9waXBhcG9fY2xvbmVfc3RhdGUge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaC0xMzUtXFx0TkZUX1BJUEFQT19DTE9ORV9ORVcsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmg9MTQ5PXN0cnVjdCBuZnRfcGlwYXBvX21hdGNoIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmgtMTUwLVxcdHU4IGZpZWxkX2NvdW50O1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uaDoxNTE6XFx0ZW51bSBuZnRfcGlwYXBvX2Nsb25lX3N0YXRlIHN0YXRlOjg7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5oLTE1Mi1cXHR1bnNpZ25lZCBpbnQgYnNpemVfbWF4O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNzowMi4zMDM2MDk0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTUzODcyOTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgUmVsZXZhbnQgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb24gc3ltYm9scyBpbXBhY3RlZCBieSB0aGVzZSBjaGFuZ2VzLiBJIHN0YXJ0ZWQgd2l0aCBhIGJyb2FkZXIgbGlzdDogYGlwX3NldF9kdW1wX2RvYCwgYGN0bmV0bGlua19hbGxvY19leHBlY3RgLCBgc2V0X2V4cGVjdGVkX3J0cF9ydGNwYCwgYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAsIGBuZnFubF9tYW5nbGVgLCBgbmZ0X2ZpYl92YWxpZGF0ZWAsIGBuZnRfZmliX25ldGRldl92YWxpZGF0ZWAsIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAsIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAsIGBuZnRfcGlwYXBvX2luc2VydGAsIGFuZCBgcGlwYXBvX2Nsb25lYC5cblxuVGhlbiwgSSBzdGFydGVkIHJlZmluaW5nIHRoaXMgbGlzdC4gSSByZWFsaXplZCB0aGF0IHNldmVyYWwgb2YgdGhvc2UgYXJlIHN0YXRpYyBhbmQgdXNlZCB3aXRoaW4gb3RoZXIgc3RhdGljIGZ1bmN0aW9ucy4gU28sIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgb25lcyB3aXRoIGJyb2FkZXIgaW1wbGljYXRpb25zIG9yIHRoYXQgcmVwcmVzZW50IHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBUaGF0IGxlZCBtZSB0byBjb25zaWRlciBhIHNlY29uZCBzZXQ6IGBpcF9zZXRfZHVtcF9kb25lYCwgYG5mX2N0X2V4cGVjdF9hbGxvY2AsIGBuZl9jdF9leHBlY3RfaW5pdGAsIGBuZnFubF92YWxpZGF0ZV93cml0ZWAsIGFuZCBleHBhbmRlZCBpdCBhZ2Fpbi4gSSBrbm93IEkgaGF2ZSB0byBjb3ZlciB0aGUgY29yZSBjaGFuZ2VzLlxuXG5Ob3csIEknbSB0aGlua2luZyBvZiBhIGNvbmNpc2UsIHJlcHJlc2VudGF0aXZlIGxpc3QgdGhhdCBhdm9pZHMgdGhlIG1vc3QgaG90LXBhdGggZnVuY3Rpb25zLCBidXQgY2FwdHVyZXMgdGhlIGVzc2VuY2Ugb2YgdGhlIGNoYW5nZXMuIFRoZSBmaW5hbCBsaXN0IGluY2x1ZGVzOiBgaXBfc2V0X2R1bXBfZG9uZWAsIGBpcF9zZXRfZHVtcF9kb2AsIGBjdG5ldGxpbmtfYWxsb2NfZXhwZWN0YCwgYHNldF9leHBlY3RlZF9ydHBfcnRjcGAsIGBuZm5sX2N0aGVscGVyX2V4cGVjdF9wb2xpY3lgLCBgbmZxbmxfbWFuZ2xlYCwgYG5mdF9maWJfdmFsaWRhdGVgLCBgbmZ0X2ZpYl9uZXRkZXZfdmFsaWRhdGVgLCBgbmZ0X3BheWxvYWRfc2V0X2luaXRgLCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLCBhbmQgYG5mdF9waXBhcG9faW5zZXJ0YC5cblxuTmV4dCwgSSBuZWVkIHRvIGFuYWx5emUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5pdGlhbCBsaXN0IEkgaGFkIHdhczogYE5GX0NPTk5UUkFDS2AsIGBORl9DT05OVFJBQ0tfU0lQYCwgYE5GX0NUX05FVExJTktgLCBgTkZfQ1RfTkVUTElOS19IRUxQRVJgLCBgTkVURklMVEVSX05FVExJTktfUVVFVUVgLCBgTkZfVEFCTEVTYCwgYE5GVF9GSUJgLCBgTkZUX0ZJQl9ORVRERVZgLCBhbmQgYElQX1NFVGAuXG5cbkkgaGF2ZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcy4gSSBjaGVja2VkIGBORl9DT05OVFJBQ0tfRVhQRUNUYCBhbmQgdGhlIHNvdXJjZSBmaWxlcyBpbmNsdWRlZC4gVGhhdCBtYWRlIG1lIGNvbnNpZGVyIGhvdyBgTkZUX0ZJQl9ORVRERVZgIHJlbGF0ZWQgdG8gYE5GX1RBQkxFU2AuIEFuZCBJIGNoZWNrZWQgYE5GVF9QSVBBUE9gIHRvby4gSSBhbSBzYXRpc2ZpZWQgdGhlIGNvbmZpZ3VyYXRpb25zIGxpc3RlZCBhcmUgdGhlIHJpZ2h0IHNldCBvZiByZWxldmFudCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwODUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDc6MTMuODQyMzQ0MjVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mzk5NTM3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfQ09OTlRSQUNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzQ9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo4Mjpjb25maWcgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTExMT1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTE0OmNvbmZpZyBORl9DT05OVFJBQ0tfTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTIzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0VDTUFSS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTM2OmNvbmZpZyBORl9DT05OVFJBQ0tfWk9ORVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJ1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4OmNvbmZpZyBORl9DT05OVFJBQ0tfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cXHRib29sIFxcXCJTdXBwbHkgQ1QgbGlzdCBpbiBwcm9jZnMgKE9CU09MRVRFKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0J1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3OC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lc3RhbXBpbmcnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg5LVxcdGJvb2wgXFxcIkNvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTk1OmNvbmZpZyBORl9DT05OVFJBQ0tfT1ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cXHRib29sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVxcdHRyaXN0YXRlIFxcXCJBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI4LVxcdHRyaXN0YXRlIFxcXCJGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIzOTpjb25maWcgTkZfQ09OTlRSQUNLX0gzMjNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVxcdHRyaXN0YXRlIFxcXCJILjMyMyBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cXHR0cmlzdGF0ZSBcXFwiSVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc1LVxcdHRyaXN0YXRlXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjc3OmNvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXFx0dHJpc3RhdGUgXFxcIk5ldEJJT1MgbmFtZSBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cXHR0cmlzdGF0ZSBcXFwiU05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMi1cXHR0cmlzdGF0ZSBcXFwiUFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMzMDpjb25maWcgTkZfQ09OTlRSQUNLX1NBTkVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVxcdHRyaXN0YXRlIFxcXCJTQU5FIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVxcdHRyaXN0YXRlIFxcXCJTSVAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU2LVxcdHRyaXN0YXRlIFxcXCJURlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA3OjE0LjAyNjM0ODM2MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA0MTMyODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGluaXRpYWwgaW1wcmVzc2lvbjogdGhpbmdzIHNlZW0gdG8gYmUgaW4gb3JkZXIuIFRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgZGVzaWduIGFyZSBwcmVzZW50aW5nIHdlbGwuIEJlZm9yZSBnZXR0aW5nIHRvbyBmYXIgYWhlYWQsIEknbSB0aGlua2luZyBsZXQncyBwaXZvdCB0byB0aGUgbml0dHktZ3JpdHR5IGFuZCBmb2N1cyBvdXIgYXR0ZW50aW9uIHNwZWNpZmljYWxseSBvbiB0aGUgYE5GX1RBQkxFU2AgaW1wbGVtZW50YXRpb24uIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgc3lzdGVtLCB0aGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgbGl2ZXMuIFdlJ2xsIGV4YW1pbmUgdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25zLCBjaGFpbiBkZWZpbml0aW9ucywgcnVsZXNldHMsIGFuZCBob3cgZXZlcnl0aGluZyBpcyBjb25uZWN0ZWQuIFRoYXQgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciBjYXRjaGluZyBwb3RlbnRpYWwgc3VidGxlIGlzc3Vlcywgb3B0aW1pemF0aW9ucywgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gTm8gYXNzdW1wdGlvbnM7IGl0J3MgdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDc6MTcuNDMwNDg1OTYyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzY0Nzc2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNzoxNy41MjQxNDMzNDNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU4MjcwNjk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIE5ldHdvcmsgRmlsdGVyaW5nIEZlYXR1cmVzKipcblxuT2theSwgSSBuZWVkIHRvIG1ha2UgYSBxdWljayBhZGRpdGlvbiB0byBlbnN1cmUgYnJvYWQgY29tcGF0aWJpbGl0eS4gSSBzaG91bGQgcHJvYWN0aXZlbHkgaW5jbHVkZSBgTkZfVEFCTEVTX05FVERFVmAgYW5kIGBORl9UQUJMRVNfSU5FVGAgaW4gbXkgY29uZmlndXJhdGlvbiBqdXN0IHRvIGJlIHNhZmUuIEl0J3MgcG9zc2libGUgdGhhdCBgbmZ0X2ZpYl9uZXRkZXYuY2AgYW5kIGBuZnRfZmliX2luZXQuY2AgbWlnaHQgaGF2ZSBkZXBlbmRlbmNpZXMgb24gdGhlbSwgYW5kIEkgZG9uJ3Qgd2FudCB0byBydW4gaW50byBhbnkgdW5leHBlY3RlZCBpc3N1ZXMgbGF0ZXIuIE5vdywgaG9sZCBvbiwgSSByZWNhbGwgdGhhdCBgbmZ0X2ZpYl9uZXRkZXYuY2Agc3BlY2lmaWNhbGx5IHJlbGllcyBvbiBgTkZUX0ZJQl9ORVRERVZgLiBBbHJpZ2h0LCBzbyB0aGF0J3MgdGhlIGtleS4gTGV0IG1lIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORlRfRklCX05FVERFVmAgdG8gY29uZmlybSBldmVyeXRoaW5nIGlzIGluIG9yZGVyIGFuZCB0aGF0IEknbSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIHNldCB1cCBjb3JyZWN0bHkgYmVmb3JlIEkgY29udGludWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzIzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDc6MjMuMTA2ODUzNzgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzY5NDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0ZJQl9ORVRERVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NzQ9Y29uZmlnIE5GVF9GV0RfTkVUREVWXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2ODA6Y29uZmlnIE5GVF9GSUJfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY4MS1cXHRkZXBlbmRzIG9uIE5GVF9GSUJfSVBWNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNzoyMy4yMDA1NjYwMTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1MDU2NjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTmVlZCBmb3IgYE5GVF9GSUJfSVBWNGAqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBORlRfRklCX0lQVjRgLiBUaGF0J3MgYSBrZXkgZWxlbWVudCBpbiB0aGUgYG5mdGFibGVzYCBmcmFtZXdvcmsgcmVsYXRlZCB0byBJUFY0IGZvcndhcmRpbmcgaW5mb3JtYXRpb24gYmFzZSAoRklCKSBsb29rdXBzLiBFc3NlbnRpYWxseSwgaXQgZGVhbHMgd2l0aCByb3V0aW5nIGRlY2lzaW9ucy4gVGhlIGZhY3QgdGhhdCBpdCdzIGV2ZW4gY29taW5nIHVwIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNpdHVhdGlvbiB3aGVyZSB0cmFkaXRpb25hbCByb3V0aW5nIHRhYmxlcyBhcmUgZWl0aGVyIGluYWRlcXVhdGUgb3Igd2UncmUgbG9va2luZyBmb3Igc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UncmUgZWl0aGVyIGJ1aWxkaW5nIHNvbWUga2luZCBvZiBjdXN0b20gcm91dGluZyBsb2dpYywgaW1wbGVtZW50aW5nIHBvbGljeS1iYXNlZCByb3V0aW5nLCBvciBwZXJoYXBzIHRyeWluZyB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBpbiBhIGhpZ2hseSBzcGVjaWZpYyBuZXR3b3JrIHNjZW5hcmlvLiBUaGUgaW5jbHVzaW9uIG9mIHRoZSBcIkZJQlwiIGlzIGEgcmVkIGZsYWcgaW4gdGhlIGJlc3Qgd2F5LCBhbmQgc3VnZ2VzdHMgd2UncmUgd29ya2luZyB3aXRoIHNvbWV0aGluZyByZWxhdGl2ZWx5IGxvdy1sZXZlbC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBzcGVjaWZpYyBtb2R1bGUgaXMgcmVxdWlyZWQsIGJ1dCBmaXJzdCwgSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgTkZUX0ZJQl9JUFY0YCB0byBjb25maXJtIGV4YWN0bHkgd2hhdCBmdW5jdGlvbmFsaXR5IGl0IHByb3ZpZGVzIGFuZCB3aGF0IGRlc2lnbiBkZWNpc2lvbnMgd2VyZSBtYWRlLCBzbyBJIGNhbiBzdGFydCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbiBpbiB0aGUgd2lkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNzoyNi44NTExMzYxNzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTAyOTM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0ZJQl9JUFY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQ3PWNvbmZpZyBORlRfRFVQX0lQVjRcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTUzLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjU0OmNvbmZpZyBORlRfRklCX0lQVjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy01NS1cXHRzZWxlY3QgTkZUX0ZJQlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNzoyNy4wMTIxNzUzNjJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExODM4MzI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYE5GVF9GSUJfSVBWNmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJMZXQncyBjaGVjayBgTkZUX0ZJQl9JUFY2YC5cIiBHaXZlbiB0aGUgY29udGV4dCwgdGhpcyBsaWtlbHkgbWVhbnMgSSdtIHRyb3VibGVzaG9vdGluZywgYW5hbHl6aW5nLCBvciBwZXJoYXBzIG9wdGltaXppbmcgYSBuZXR3b3JrIHNldHVwIHRoYXQgaW52b2x2ZXMgSVB2NiByb3V0aW5nIGFuZCBmb3J3YXJkaW5nIHRhYmxlcy4gVGhlIHNwZWNpZmljIG5hbWluZyBjb252ZW50aW9uIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGxpa2VseSB1c2luZyBgbmZ0YWJsZXNgIChvciB0aGUgb2xkZXIgYGlwdGFibGVzYCB3aXRoIHNvbWUgY29tcGF0aWJpbGl0eSBsYXllcnMpLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBhIG1pc2NvbmZpZ3VyZWQgcnVsZSwgb3IgbWF5YmUgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBjb21wbGV4IGZpcmV3YWxsL3JvdXRpbmcgc2V0dXAuIFRoZSBmYWN0IHRoYXQgSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIElQdjYgRklCIGluZGljYXRlcyBhIGNsZWFyIGZvY3VzIG9uIHRoZSBJUHY2IHBvcnRpb24gb2YgdGhlIG5ldHdvcmsgYXJjaGl0ZWN0dXJlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTQyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDY6MDc6MzIuMTMwNTYyOTM1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ3MTc5MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9GSUJfSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgTkZUX0RVUF9JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00OS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpjb25maWcgTkZUX0ZJQl9JUFY2XFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNTEtXFx0dHJpc3RhdGUgXFxcIm5mX3RhYmxlcyBmaWIgLyBpcHY2IHJvdXRlIGxvb2t1cCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNjowNzozMi4yNjUzMDE1OTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0MTY1NjAwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTmV0ZmlsdGVyIFBhdGNoIFJldmlldyoqXG5cbk9rYXksIHNvIHdlJ3JlIGFkZGluZyBgTkZUX0ZJQl9JUFY0YCBhbmQgYE5GVF9GSUJfSVBWNmAuIE1ha2VzIHNlbnNlLiBOb3csIGxldCdzIHN1bW1hcml6ZSB0aGUgY29uZmlndXJhdGlvbiBpdGVtcyByZXF1aXJlZCB0byBtYWtlIHN1cmUgd2UndmUgZ290IGV2ZXJ5dGhpbmcgaW4gb3JkZXI6IGBORl9DT05OVFJBQ0tgLCBgTkZfQ09OTlRSQUNLX1NJUGAsIGBORl9DVF9ORVRMSU5LYCwgYE5GX0NUX05FVExJTktfSEVMUEVSYCwgYE5FVEZJTFRFUl9ORVRMSU5LX1FVRVVFYCwgYE5GX1RBQkxFU2AsIGBORlRfRklCX0lQVjRgLCBgTkZUX0ZJQl9JUFY2YCwgYE5GVF9GSUJfTkVUREVWYCwgYW5kIGBJUF9TRVRgLlxuXG5MZXQncyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayBvbiBgTkZfVEFCTEVTX05FVERFVmAgYW5kIGBORl9UQUJMRVNfSU5FVGAgc2luY2UgdGhleSBjYW4gc29tZXRpbWVzIGJlIHRyaWNreS4gQWgsIHJpZ2h0LCBgTkZUX0ZJQl9ORVRERVZgIGRlcGVuZHMgb24gYE5GVF9GSUJfSVBWNGAsIGFuZCBgTkZUX0ZJQl9JTkVUYCBkZXBlbmRzIG9uIGBORl9UQUJMRVNfSU5FVGAuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGdvaW5nIHRvIGluY2x1ZGUgYm90aCBgTkZfVEFCTEVTX05FVERFVmAgYW5kIGBORl9UQUJMRVNfSU5FVGAuIEJldHRlciBzYWZlIHRoYW4gc29ycnkgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2UgY29yZSBjb21wb25lbnRzLlxuXG5Ob3csIGxldCdzIGdldCBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBXZSBoYXZlIGBpcF9zZXRfZHVtcF9kb2AsIGBpcF9zZXRfZHVtcF9kb25lYCwgYGN0bmV0bGlua19hbGxvY19leHBlY3RgLCBgc2V0X2V4cGVjdGVkX3J0cF9ydGNwYCwgYG5mbmxfY3RoZWxwZXJfZXhwZWN0X3BvbGljeWAsIGBuZnFubF9tYW5nbGVgLCBgbmZ0X2ZpYl92YWxpZGF0ZWAsIGBuZnRfZmliX25ldGRldl92YWxpZGF0ZWAsIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAsIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAsIGFuZCBgbmZ0X3BpcGFwb19pbnNlcnRgLiBMb29rcyBsaWtlIHRoaXMgaXMgYSBzb2xpZCBsaXN0IGNvdmVyaW5nIHRoZSBhcmVhcyB3aGVyZSBjaGFuZ2VzIHdlcmUgZGlyZWN0bHkgaW1wbGVtZW50ZWQgb3Igd2hlcmUgdGhlIGxvZ2ljIGhhcyBiZWVuIHVwZGF0ZWQsIHJpZ2h0IHdoZXJlIGl0IG1hdHRlcnMuXG5cbkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc29tZSBpbXBvcnRhbnQsIHF1aXRlIGRlZXAgY2hhbmdlcyB0byBOZXRmaWx0ZXIuIFdlIGhhdmUgbmV3IHZhbGlkYXRpb24gc3RlcHMgZm9yIHBheWxvYWQgd3JpdGVzIGFuZCBJUC9JUHY2IGhlYWRlcnMgYmVmb3JlIG1hbmdsaW5nLCB0aGF0J3MgY3J1Y2lhbCBmb3Igc2VjdXJpdHkuIFRoZW4gdGhlcmUncyB0aGUgZml4IGZvciB0aGUgU0lQIGNvbm50cmFjayBleHBlY3RhdGlvbiBidWcsIGEgc3RhdGUgdHJhY2tpbmcgYWRkaXRpb24gZm9yIHBpcGFwbyBzZXQgY2xvbmVzIHRoYXQgc2hvdWxkIGhlbHAgaGFuZGxlIGFib3J0cyBtb3JlIHJvYnVzdGx5LCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gY29ubnRyYWNrIGV4cGVjdGF0aW9uIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBBbGwgb2YgdGhlc2UgYWZmZWN0IGNvcmUgTmV0ZmlsdGVyIGxvZ2ljLiBXZSdyZSB0YWxraW5nIE5ldGxpbmsgcXVldWUsIG5mdGFibGVzIHBheWxvYWQgbWFuZ2xpbmcsIGFuZCBwaXBhcG8gc2V0cywgYW5kIHRoYXQncyBhbGwgc3R1ZmYgdGhhdCB1c2Vyc3BhY2UgaGFzIGRpcmVjdCBhY2Nlc3MgdG8sIHNvIHRoaXMgbmVlZHMgdG8gYmUgcmlnb3JvdXNseSB0ZXN0ZWQuIFdlIGFic29sdXRlbHkgbmVlZCB0byBtYWtlIHN1cmUgd2UncmUgbm90IGludHJvZHVjaW5nIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcyBoZXJlLiBXZSBoYXZlIHRvIGZ1enogaXQgaGVhdmlseS5cblxuUmlnaHQsIEknbSBnb2luZyB0byBydW4gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cgdG8gc2VlIGhvdyB0aGUgY2hhbmdlIGltcGFjdHMgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0ODksIk91dHB1dFRva2VucyI6MzU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA2OjA3OjQzLjY4MTg2NTY0NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDI3NzU5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LX0hFTFBFUlwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfUVVFVUVcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX0lORVRcIixcbiAgICBcIk5GX1RBQkxFU19ORVRERVZcIixcbiAgICBcIk5GVF9GSUJfSVBWNFwiLFxuICAgIFwiTkZUX0ZJQl9JUFY2XCIsXG4gICAgXCJORlRfRklCX05FVERFVlwiLFxuICAgIFwiSVBfU0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfc2V0X2R1bXBfZG9cIixcbiAgICBcImlwX3NldF9kdW1wX2RvbmVcIixcbiAgICBcImN0bmV0bGlua19hbGxvY19leHBlY3RcIixcbiAgICBcInNldF9leHBlY3RlZF9ydHBfcnRjcFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5XCIsXG4gICAgXCJuZnFubF9tYW5nbGVcIixcbiAgICBcIm5mdF9maWJfdmFsaWRhdGVcIixcbiAgICBcIm5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfaW5pdFwiLFxuICAgIFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIixcbiAgICBcIm5mdF9waXBhcG9faW5zZXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLiBJdCBhZGRzIHZhbGlkYXRpb24gZm9yIHBheWxvYWQgd3JpdGVzIGFuZCBJUC9JUHY2IGhlYWRlcnMgYmVmb3JlIG1hbmdsaW5nLCBmaXhlcyBhIGJ1ZyBpbiBTSVAgY29ubnRyYWNrIGV4cGVjdGF0aW9uLCBhZGRzIHN0YXRlIHRyYWNraW5nIGZvciBwaXBhcG8gc2V0IGNsb25lcyB0byBwcm9wZXJseSBoYW5kbGUgYWJvcnRzLCBhbmQgbW9kaWZpZXMgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBsb2dpYywgbmV0bGluayBxdWV1ZSwgbmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZywgYW5kIHBpcGFwbyBzZXRzLCB3aGljaCBhcmUgYWxsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9DT05OVFJBQ0tfU0lQXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORl9DVF9ORVRMSU5LX0hFTFBFUlwiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfUVVFVUVcIixcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX0lORVRcIixcbiAgICBcIk5GX1RBQkxFU19ORVRERVZcIixcbiAgICBcIk5GVF9GSUJfSVBWNFwiLFxuICAgIFwiTkZUX0ZJQl9JUFY2XCIsXG4gICAgXCJORlRfRklCX05FVERFVlwiLFxuICAgIFwiSVBfU0VUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfc2V0X2R1bXBfZG9cIixcbiAgICBcImlwX3NldF9kdW1wX2RvbmVcIixcbiAgICBcImN0bmV0bGlua19hbGxvY19leHBlY3RcIixcbiAgICBcInNldF9leHBlY3RlZF9ydHBfcnRjcFwiLFxuICAgIFwibmZubF9jdGhlbHBlcl9leHBlY3RfcG9saWN5XCIsXG4gICAgXCJuZnFubF9tYW5nbGVcIixcbiAgICBcIm5mdF9maWJfdmFsaWRhdGVcIixcbiAgICBcIm5mdF9maWJfbmV0ZGV2X3ZhbGlkYXRlXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfaW5pdFwiLFxuICAgIFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIixcbiAgICBcIm5mdF9waXBhcG9faW5zZXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLiBJdCBhZGRzIHZhbGlkYXRpb24gZm9yIHBheWxvYWQgd3JpdGVzIGFuZCBJUC9JUHY2IGhlYWRlcnMgYmVmb3JlIG1hbmdsaW5nLCBmaXhlcyBhIGJ1ZyBpbiBTSVAgY29ubnRyYWNrIGV4cGVjdGF0aW9uLCBhZGRzIHN0YXRlIHRyYWNraW5nIGZvciBwaXBhcG8gc2V0IGNsb25lcyB0byBwcm9wZXJseSBoYW5kbGUgYWJvcnRzLCBhbmQgbW9kaWZpZXMgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldGZpbHRlciBsb2dpYywgbmV0bGluayBxdWV1ZSwgbmZ0YWJsZXMgcGF5bG9hZCBtYW5nbGluZywgYW5kIHBpcGFwbyBzZXRzLCB3aGljaCBhcmUgYWxsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwh22[1] Phase: Succeeded StartedAt: 2026-06-30 06:09:20 +0000 UTC FinishedAt: 2026-06-30 06:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-30 06:09:20 +0000 UTC FinishedAt: 2026-06-30 06:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2] Phase: Succeeded StartedAt: 2026-06-30 06:09:20 +0000 UTC FinishedAt: 2026-06-30 10:19:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-30 06:09:20 +0000 UTC FinishedAt: 2026-06-30 10:19:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-30 06:09:20 +0000 UTC FinishedAt: 2026-06-30 06:09:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-30 06:09:20 +0000 UTC FinishedAt: 2026-06-30 06:09:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowmwh22/series-workflowmwh22-convert-artifact-841036298/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-30 06:09:31 +0000 UTC FinishedAt: 2026-06-30 06:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-30 06:09:31 +0000 UTC FinishedAt: 2026-06-30 06:34:56 +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:*800a1e8a-849d-45ae-8102-7257cd8cefe9,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-workflowmwh22/series-workflowmwh22-convert-artifact-841036298/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": "479042ac-4b16-4c9f-84a6-3f72d85376db", "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-workflowmwh22/series-workflowmwh22-build-action-1542577400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-30 06:09:31 +0000 UTC FinishedAt: 2026-06-30 06:34:46 +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:*800a1e8a-849d-45ae-8102-7257cd8cefe9,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-workflowmwh22/series-workflowmwh22-convert-artifact-841036298/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": "479042ac-4b16-4c9f-84a6-3f72d85376db", "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-workflowmwh22/series-workflowmwh22-build-action-1542577400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-30 06:34:56 +0000 UTC FinishedAt: 2026-06-30 06:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-30 06:34:56 +0000 UTC FinishedAt: 2026-06-30 06:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-30 06:34:56 +0000 UTC FinishedAt: 2026-06-30 06:35:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-30 06:34:56 +0000 UTC FinishedAt: 2026-06-30 06:35:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowmwh22/series-workflowmwh22-convert-artifact-671284389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-30 06:35:23 +0000 UTC FinishedAt: 2026-06-30 06:37:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-30 06:35:23 +0000 UTC FinishedAt: 2026-06-30 06:37:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*479042ac-4b16-4c9f-84a6-3f72d85376db,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-workflowmwh22/series-workflowmwh22-build-action-1542577400/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-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-30 06:37:44 +0000 UTC FinishedAt: 2026-06-30 06:37:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-30 06:37:44 +0000 UTC FinishedAt: 2026-06-30 06:37:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-30 06:37:44 +0000 UTC FinishedAt: 2026-06-30 07:15:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-30 06:37:44 +0000 UTC FinishedAt: 2026-06-30 07:15:53 +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:*800a1e8a-849d-45ae-8102-7257cd8cefe9,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-workflowmwh22/series-workflowmwh22-convert-artifact-671284389/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": "17e0f435-9019-4421-bdfc-fe2746070421", "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-workflowmwh22/series-workflowmwh22-build-action-3208393969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-30 06:37:44 +0000 UTC FinishedAt: 2026-06-30 07:15:43 +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:*800a1e8a-849d-45ae-8102-7257cd8cefe9,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-workflowmwh22/series-workflowmwh22-convert-artifact-671284389/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": "17e0f435-9019-4421-bdfc-fe2746070421", "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-workflowmwh22/series-workflowmwh22-build-action-3208393969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-30 07:15:53 +0000 UTC FinishedAt: 2026-06-30 07:15:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-30 07:15:53 +0000 UTC FinishedAt: 2026-06-30 07:15:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-30 07:15:53 +0000 UTC FinishedAt: 2026-06-30 07:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-30 07:15:53 +0000 UTC FinishedAt: 2026-06-30 07:17:49 +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:*17e0f435-9019-4421-bdfc-fe2746070421,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-workflowmwh22/series-workflowmwh22-build-action-3208393969/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-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-30 07:17:59 +0000 UTC FinishedAt: 2026-06-30 10:19:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-30 07:17:59 +0000 UTC FinishedAt: 2026-06-30 10:19:22 +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":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"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:*479042ac-4b16-4c9f-84a6-3f72d85376db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*17e0f435-9019-4421-bdfc-fe2746070421,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-workflowmwh22/series-workflowmwh22-build-action-1542577400/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-workflowmwh22/series-workflowmwh22-build-action-3208393969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-30 07:17:59 +0000 UTC FinishedAt: 2026-06-30 07:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-30 07:17:59 +0000 UTC FinishedAt: 2026-06-30 07:18:07 +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":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"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-workflowmwh22/series-workflowmwh22-convert-artifact-4034327594/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-30 07:17:59 +0000 UTC FinishedAt: 2026-06-30 07:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-30 07:17:59 +0000 UTC FinishedAt: 2026-06-30 07:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-30 07:17:59 +0000 UTC FinishedAt: 2026-06-30 07:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-30 07:18:09 +0000 UTC FinishedAt: 2026-06-30 10:19:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwh22[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_set_dump_do","ip_set_dump_done","ctnetlink_alloc_expect","set_expected_rtp_rtcp","nfnl_cthelper_expect_policy","nfqnl_mangle","nft_fib_validate","nft_fib_netdev_validate","nft_payload_set_init","nft_payload_set_eval","nft_pipapo_insert"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NF_CONNTRACK_SIP","NF_CT_NETLINK","NF_CT_NETLINK_HELPER","NETFILTER_NETLINK_QUEUE","NF_TABLES","NF_TABLES_INET","NF_TABLES_NETDEV","NFT_FIB_IPV4","NFT_FIB_IPV6","NFT_FIB_NETDEV","IP_SET"],"series_id":"a9040ae6-6a1e-4d82-b90c-bf8de413398b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-30 07:18:09 +0000 UTC FinishedAt: 2026-06-30 10:19:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*479042ac-4b16-4c9f-84a6-3f72d85376db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*17e0f435-9019-4421-bdfc-fe2746070421,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-workflowmwh22/series-workflowmwh22-build-action-1542577400/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-workflowmwh22/series-workflowmwh22-build-action-3208393969/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-workflowmwh22/series-workflowmwh22-convert-artifact-4034327594/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,}