Name: series-workflow258tm Phase: Succeeded StartedAt: 2026-09-06 10:03:49 +0000 UTC FinishedAt: 2026-09-06 14:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[0] Phase: Succeeded StartedAt: 2026-09-06 10:03:49 +0000 UTC FinishedAt: 2026-09-06 10:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 10:03:49 +0000 UTC FinishedAt: 2026-09-06 10:31:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NETFILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NETFILTER" ], "series_id": "5efd3dcc-ea6c-4012-b864-cd405e47812f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_payload_validate_inet_csum_offset", "nft_payload_csum_th_write_ok", "nft_payload_csum_write_ok", "nft_payload_set_init", "nft_payload_set_eval" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRpZ2h0ZW5zIHZhbGlkYXRpb24gZm9yIHRoZSBjaGVja3N1bSBvZmZzZXQgKGBjc3VtX29mZnNldGApIGluIG5mdGFibGVzIHBheWxvYWQgZXhwcmVzc2lvbnMgKGBuZnRfcGF5bG9hZC5jYCkuIEl0IGFkZHMgY29udHJvbC1wbGFuZSB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KClgIGFuZCBydW50aW1lIHBhY2tldCB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKClgIHRvIGVuc3VyZSBjaGVja3N1bSBtb2RpZmljYXRpb24gdGFyZ2V0cyBsZWdpdGltYXRlIHRyYW5zcG9ydCBsYXllciBoZWFkZXJzIChUQ1AsIFVEUCwgVURQTGl0ZSwgSUNNUCwgSUNNUHY2KS5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS4gVGhlIHZhcmlhYmxlcyByZWFkIChgcHJpdi1cdTAwM2Vjc3VtX29mZnNldGAsIGBwa3QtXHUwMDNlZmxhZ3NgLCBgcGt0LVx1MDAzZXRwcm90YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IG5mdGFibGVzIGV4cHJlc3Npb24gc2V0dXAgYW5kIHBhY2tldCBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2hlY2tzdW0gb2Zmc2V0IHZhbGlkYXRpb24gYW5kIHBhY2tldCBldmFsdWF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIHBheWxvYWQgZXhwcmVzc2lvbnMgaW4gbmZ0YWJsZXMgKG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYykuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5mbmV0bGluayBjb25maWd1cmF0aW9uIGFuZCBpbmNvbWluZyBwYWNrZXQgcHJvY2Vzc2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg4NmQwMjkxYTBhYmRjMGU5N2I0YWM1MGEzMzMwYTI5MmY3ZjU1YjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDEwOjI5OjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuaW5kZXggZTMxNWQzNWY3M2Q0YS4uNWI3NmFmNjhiNzA0OSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuQEAgLTEwMDgsMTEgJiM0MzsxMDA5LDE0IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwmIzM0O3JlLXVwZGF0ZVwmIzM0OyBvZiBMNCBjaGVja3N1bSAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJiMzOTt0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXG4tXHRcdCAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuXG4tXHRcdCAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLlxuLVx0XHQgKi9cbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHQvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqL1xuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4mIzQzO1x0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgfHxcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSkgfHxcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG5AQCAtMTA0Niw2ICYjNDM7MTA1MCwyNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4mIzQzO1x0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIShwa3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHBrdC1cdTAwM2V0cHJvdCkge1xuJiM0MztcdGNhc2UgSVBQUk9UT19UQ1A6XG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX1VEUDpcbiYjNDM7XHRjYXNlIElQUFJPVE9fVURQTElURTpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fSUNNUFY2OlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX0lDTVA6XG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuIHtcbkBAIC0xMDU1LDkgJiM0MzsxMDgwLDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuIFx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuJiM0MztcdFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuLVx0XHQvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmVcbi1cdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMyBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuJiM0MztcdFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcbiYjNDM7XHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbiBcdFx0ICovXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjaGVja3N1bSBvZmZzZXQgdmFsaWRhdGlvbiBhbmQgcGFja2V0IGV2YWx1YXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgcGF5bG9hZCBleHByZXNzaW9ucyBpbiBuZnRhYmxlcyAobmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgbmZuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIGluY29taW5nIHBhY2tldCBwcm9jZXNzaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODg2ZDAyOTFhMGFiZGMwZTk3YjRhYzUwYTMzMzBhMjkyZjdmNTViNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTA6Mjk6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKaW5kZXggZTMxNWQzNWY3M2Q0YS4uNWI3NmFmNjhiNzA0OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwpAQCAtMjAsNiAmIzQzOzIwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91ZHAuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZ3JlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ljbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pY21wdjYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwdjYuaCZndDsKQEAgLTEwMDgsMTEgJiM0MzsxMDA5LDE0IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJaWYgKHByaXYtJmd0O2NzdW1fZmxhZ3MpIC8qIG1ha2VzIG5vIHNlbnNlLCBhc2tzIGZvciAmIzM0O3JlLXVwZGF0ZSYjMzQ7IG9mIEw0IGNoZWNrc3VtICovCiAJCQlyZXR1cm4gZmFsc2U7CiAKLQkJLyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJiMzOTt0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzCi0JCSAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuCi0JCSAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLgotCQkgKi8KLQkJcmV0dXJuIHRydWU7CiYjNDM7CQkvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqLwomIzQzOwkJaWYgKHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSB8fAomIzQzOwkJICAgIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fAomIzQzOwkJICAgIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSkgfHwKJiM0MzsJCSAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAljYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjoKIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOgpAQCAtMTA0Niw2ICYjNDM7MTA1MCwyNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAomIzQzOwkJCQkJIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KQomIzQzO3sKJiM0MzsJaWYgKCEocGt0LSZndDtmbGFncyAmYW1wOyBORlRfUEtUSU5GT19MNFBST1RPKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJc3dpdGNoIChwa3QtJmd0O3Rwcm90KSB7CiYjNDM7CWNhc2UgSVBQUk9UT19UQ1A6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spOwomIzQzOwljYXNlIElQUFJPVE9fVURQOgomIzQzOwljYXNlIElQUFJPVE9fVURQTElURToKJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7CiYjNDM7CWNhc2UgSVBQUk9UT19JQ01QVjY6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7CiYjNDM7CWNhc2UgSVBQUk9UT19JQ01QOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdikKIHsKQEAgLTEwNTUsOSAmIzQzOzEwODAsMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAljYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOgogCQlyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpOwogCWNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjoKJiM0MzsJCXJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7CiAJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6Ci0JCS8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZQotCQkgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuCiYjNDM7CQkvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZQomIzQzOwkJICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLgogCQkgKi8KIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkZUIFBheWxvYWQgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlzc2VjdCB0aGUgbW9kaWZpY2F0aW9ucyBhbmQgdW5kZXJzdGFuZCB0aGVpciBpbXBsaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgYG5mdF9wYXlsb2FkLmNgIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIEkgc2VlIHNvbWUgY2hhbmdlcyBhbmQgYWRkaXRpb25zOiBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAsIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCwgYW5kIGEgbmV3IGZ1bmN0aW9uIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYC4KCk5vdywgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCwgZm9jdXNpbmcgYXJvdW5kIGxpbmUgMTAwMC4gVGhhdCYjMzk7cyB0aGUgdHlwaWNhbCBzcG90IHdoZXJlIEkgY2FuIGdldCBhIGdvb2QgZmVlbCBmb3IgdGhlIG92ZXJhbGwgY29udGV4dDogd2hvJiMzOTtzIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zLCB0aGUgc3RydWN0IGRlZmluaXRpb25zIHRoYXQgYXJlIGluIHBsYXksIGFuZCBhbnkgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBHZXR0aW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGFzc2Vzc21lbnQgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuIEdvdHRhIGdldCB0aGUgYmFzZWxpbmUgYmVmb3JlIG1ha2luZyBqdWRnZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTkwOlx0XG4gOTkxOlx0XHRyZXR1cm4gb2Zmc2V0IFx1MDAzYz0gc2tiX25ldHdvcmtfb2Zmc2V0KHBrdC1cdTAwM2Vza2IpO1xuIDk5MjpcdH1cbiA5OTM6XHRcbiA5OTQ6XHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gOTk1Olx0XHRcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuIDk5NjpcdHtcbiA5OTc6XHRcdHN3aXRjaCAocHJpdi1cdTAwM2ViYXNlKSB7XG4gOTk4Olx0XHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbiA5OTk6XHRcdFx0YnJlYWs7XG4xMDAwOlx0XHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuMTAwMTpcdFx0XHRpZiAoY3R4LVx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQpIHtcbjEwMDI6XHRcdFx0XHRpZiAob2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjaykgPT0gcHJpdi1cdTAwM2Vjc3VtX29mZnNldClcbjEwMDM6XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuMTAwNDpcdFxuMTAwNTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjEwMDY6XHRcdFx0fVxuMTAwNzpcdFx0XHRyZXR1cm4gdHJ1ZTsgLyogcnVuIHRpbWUgdmFsaWRhdGlvbiByZXF1aXJlZCAqL1xuMTAwODpcdFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuMTAwOTpcdFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXCYjMzQ7cmUtdXBkYXRlXCYjMzQ7IG9mIEw0IGNoZWNrc3VtICovXG4xMDEwOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTAxMTpcdFxuMTAxMjpcdFx0XHQvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqL1xuMTAxMzpcdFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHxcbjEwMTQ6XHRcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XG4xMDE1Olx0XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSkgfHxcbjEwMTY6XHRcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXG4xMDE3Olx0XHRcdFx0cmV0dXJuIHRydWU7XG4xMDE4Olx0XG4xMDE5Olx0XHRcdHJldHVybiBmYWxzZTtcbjEwMjA6XHRcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuMTAyMTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEwMjI6XHRcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbjEwMjM6XHRcdFx0YnJlYWs7XG4xMDI0Olx0XHR9XG4xMDI1Olx0XG4xMDI2Olx0XHRyZXR1cm4gZmFsc2U7XG4xMDI3Olx0fVxuMTAyODpcdFxuMTAyOTpcdC8qIGRvIG5vdCBhbGxvdyBhcmJpdHJhcnkgbmV0d29yayBoZWFkZXIgbWFuZ2xpbmcgdmlhIGJvZ3VzIGNzdW1fb2ZmLlxuMTAzMDpcdCAqIFdlIG9ubHkgc3VwcG9ydCBpcHY0LiAgT25seSBORlBST1RPX0lQVjQgY2FuIGJlIGNoZWNrZWQgZnJvbSBjb250cm9sXG4xMDMxOlx0ICogcGxhbmUuXG4xMDMyOlx0ICovXG4xMDMzOlx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuMTAzNDpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4xMDM1Olx0e1xuMTAzNjpcdFx0c3dpdGNoIChwa3QtXHUwMDNlc3RhdGUtXHUwMDNlcGYpIHtcbjEwMzc6XHRcdGNhc2UgTkZQUk9UT19JUFY0OlxuMTAzODpcdFx0XHQvKiBXYXJuaW5nOiBORlBST1RPX0lORVQgd2FzIG5vdCBjaGVja2VkOyB3ZSBjYW4mIzM5O3QgcmV0dXJuIHRydWUgaGVyZS4gKi9cbjEwMzk6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XG4xMDQwOlx0XHRjYXNlIE5GUFJPVE9fSVBWNjpcbjEwNDE6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA0MjpcdFx0Y2FzZSBORlBST1RPX0JSSURHRTpcbjEwNDM6XHRcdFx0cmV0dXJuIHBrdC1cdTAwM2VldGhlcnR5cGUgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuMTA0NDpcdFx0XHQgICAgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwNDU6XHRcdGNhc2UgTkZQUk9UT19ORVRERVY6XG4xMDQ2Olx0XHRcdHJldHVybiBwa3QtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSBcdTAwMjZcdTAwMjZcbjEwNDc6XHRcdFx0ICAgICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XG4xMDQ4Olx0XHR9XG4xMDQ5Olx0XG4xMDUwOlx0XHRyZXR1cm4gZmFsc2U7XG4xMDUxOlx0fVxuMTA1MjpcdFxuMTA1MzpcdHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbjEwNTQ6XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuMTA1NTpcdHtcbjEwNTY6XHRcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXG4xMDU3Olx0XHRcdHJldHVybiBmYWxzZTtcbjEwNTg6XHRcbjEwNTk6XHRcdHN3aXRjaCAocGt0LVx1MDAzZXRwcm90KSB7XG4xMDYwOlx0XHRjYXNlIElQUFJPVE9fVENQOlxuMTA2MTpcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4xMDYyOlx0XHRjYXNlIElQUFJPVE9fVURQOlxuMTA2MzpcdFx0Y2FzZSBJUFBST1RPX1VEUExJVEU6XG4xMDY0Olx0XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcbjEwNjU6XHRcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4xMDY2Olx0XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xuMTA2NzpcdFx0Y2FzZSBJUFBST1RPX0lDTVA6XG4xMDY4Olx0XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XG4xMDY5Olx0XHR9XG4xMDcwOlx0XG4xMDcxOlx0XHRyZXR1cm4gZmFsc2U7XG4xMDcyOlx0fVxuMTA3MzpcdFxuMTA3NDpcdHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4xMDc1Olx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuMTA3NjpcdHtcbjEwNzc6XHRcdHN3aXRjaCAocHJpdi1cdTAwM2ViYXNlKSB7XG4xMDc4Olx0XHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbjEwNzk6XHRcdFx0YnJlYWs7XG4xMDgwOlx0XHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuMTA4MTpcdFx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xuMTA4MjpcdFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuMTA4MzpcdFx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xuMTA4NDpcdFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4xMDg1Olx0XHRcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXG4xMDg2Olx0XHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbjEwODc6XHRcdFx0ICovXG4xMDg4Olx0XHRcdHJldHVybiB0cnVlO1xuMTA4OTpcdFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MDYKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBuZnRfcGF5bG9hZCBjaGVja3N1bSBmdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYG5mdF9wYXlsb2FkLmNgIGZpbGUgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlcmAgZGlyZWN0b3J5LiBNeSBhaW0gaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBjb250ZXh0IG9mIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBhbmQgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBpbnZva2VkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlaXIgcm9sZSBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgcGFydGljdWxhcmx5IHdpdGggcmVnYXJkIHRvIGNoZWNrc3VtIGhhbmRsaW5nIHdpdGhpbiBwYXlsb2FkIG1hbmlwdWxhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGNyaXRpY2FsIGluIGNvbmZpcm1pbmcgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgTmV0ZmlsdGVyIGhhbmRsZXMgY2hlY2tzdW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXR8bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05ODY9c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTk0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTUtXHRcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDUzPXN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDc0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3NS1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExMDc9c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcyLVx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzM6XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3NC1cdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTk5PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1Ny1cdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNTg6XHRcdGlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNTktXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBORlQgUGF5bG9hZCBJbml0aWFsaXphdGlvbiBhbmQgRXZhbHVhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBmdW5jdGlvbiB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBhbmQgdG8gZG8gdGhpcywgSSB3aWxsIHR1cm4gdG8gdGhlIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGZpbGUuIEdpdmVuIHRoZSBmdW5jdGlvbnMsIEkmIzM5O2xsIGZvY3VzIG15IGludmVzdGlnYXRpb24gd2l0aGluIHRoZSAxMTAwLTEyNzAgbGluZSByYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc2V0dXAgb2YgdGhlIHBheWxvYWQgc2V0cyBhbmQgaG93IHRoZXkmIzM5O3JlIGV2YWx1YXRlZCB3aXRoaW4gdGhlIG92ZXJhbGwgTmV0ZmlsdGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGhpZ2hsaWdodCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBmbGF3cyBpbiB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcbjExMDE6XHRcdGlmIChwa3QtXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXG4xMTAyOlx0XHRcdHJldHVybiB0cnVlO1xuMTEwMzpcdFxuMTEwNDpcdFx0cmV0dXJuIHByaXYtXHUwMDNlb2Zmc2V0IFx1MDAzZSBkb2ZmIHx8IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gZG9mZjtcbjExMDU6XHR9XG4xMTA2Olx0XG4xMTA3Olx0c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuMTEwODpcdFx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbjExMDk6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbjExMTA6XHR7XG4xMTExOlx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbjExMTI6XHRcdGNvbnN0IHUzMiAqc3JjID0gXHUwMDI2cmVncy1cdTAwM2VkYXRhW3ByaXYtXHUwMDNlc3JlZ107XG4xMTEzOlx0XHRpbnQgb2Zmc2V0LCBjc3VtX29mZnNldCwgdmxhbl9obGVuID0gMDtcbjExMTQ6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXHUwMDNlc2tiO1xuMTExNTpcdFx0X193c3VtIGZzdW0sIHRzdW07XG4xMTE2Olx0XG4xMTE3Olx0XHRzd2l0Y2ggKHByaXYtXHUwMDNlYmFzZSkge1xuMTExODpcdFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XG4xMTE5Olx0XHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuMTEyMDpcdFx0XHRcdGdvdG8gZXJyO1xuMTEyMTpcdFxuMTEyMjpcdFx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcdTAwMjZcdTAwMjZcbjExMjM6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cdTAwM2VvZmZzZXQsIHByaXYtXHUwMDNlbGVuKSkge1xuMTEyNDpcdFx0XHRcdGlmICghbmZ0X3BheWxvYWRfc2V0X3ZsYW4oc3JjLCBza2IsXG4xMTI1Olx0XHRcdFx0XHRcdFx0ICBwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4sXG4xMTI2Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZ2bGFuX2hsZW4pKVxuMTEyNzpcdFx0XHRcdFx0Z290byBlcnI7XG4xMTI4Olx0XG4xMTI5Olx0XHRcdFx0aWYgKCF2bGFuX2hsZW4pXG4xMTMwOlx0XHRcdFx0XHRyZXR1cm47XG4xMTMxOlx0XHRcdH1cbjExMzI6XHRcbjExMzM6XHRcdFx0b2Zmc2V0ID0gc2tiX21hY19oZWFkZXIoc2tiKSAtIHNrYi1cdTAwM2VkYXRhIC0gdmxhbl9obGVuO1xuMTEzNDpcdFx0XHRpZiAoIW5mdF9sbF93cml0ZV9vayhwa3QsIHByaXYtXHUwMDNlbGVuICYjNDM7IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IG9mZnNldCkpXG4xMTM1Olx0XHRcdFx0Z290byBlcnI7XG4xMTM2Olx0XHRcdGJyZWFrO1xuMTEzNzpcdFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbjExMzg6XHRcdFx0aWYgKCFuZnRfbmhfd3JpdGVfb2socGt0LCBwcml2LCBzcmMpKVxuMTEzOTpcdFx0XHRcdGdvdG8gZXJyO1xuMTE0MDpcdFx0XHRvZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcbjExNDE6XHRcdFx0YnJlYWs7XG4xMTQyOlx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMTQzOlx0XHRcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykgfHwgcGt0LVx1MDAzZWZyYWdvZmYpXG4xMTQ0Olx0XHRcdFx0Z290byBlcnI7XG4xMTQ1Olx0XHRcdGlmICghbmZ0X3RoX3dyaXRlX29rKHBrdCwgcHJpdikpXG4xMTQ2Olx0XHRcdFx0Z290byBlcnI7XG4xMTQ3Olx0XHRcdG9mZnNldCA9IG5mdF90aG9mZihwa3QpO1xuMTE0ODpcdFx0XHRicmVhaztcbjExNDk6XHRcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuMTE1MDpcdFx0XHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcbjExNTE6XHRcdFx0aWYgKG9mZnNldCBcdTAwM2MgMClcbjExNTI6XHRcdFx0XHRnb3RvIGVycjtcbjExNTM6XHRcdFx0YnJlYWs7XG4xMTU0Olx0XHRkZWZhdWx0OlxuMTE1NTpcdFx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKDEpO1xuMTE1NjpcdFx0XHRnb3RvIGVycjtcbjExNTc6XHRcdH1cbjExNTg6XHRcbjExNTk6XHRcdGNzdW1fb2Zmc2V0ID0gb2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlY3N1bV9vZmZzZXQ7XG4xMTYwOlx0XHRvZmZzZXQgJiM0Mzs9IHByaXYtXHUwMDNlb2Zmc2V0O1xuMTE2MTpcdFxuMTE2MjpcdFx0aWYgKChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgfHwgcHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbjExNjM6XHRcdCAgICAoKHByaXYtXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIFx1MDAyNlx1MDAyNlxuMTE2NDpcdFx0ICAgICAgcHJpdi1cdTAwM2ViYXNlICE9IE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUikgfHxcbjExNjU6XHRcdCAgICAgc2tiLVx1MDAzZWlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKSkge1xuMTE2NjpcdFx0XHRpZiAob2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuMTE2NzpcdFx0XHRcdGdvdG8gZXJyO1xuMTE2ODpcdFxuMTE2OTpcdFx0XHRmc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBwcml2LVx1MDAzZWxlbiwgMCk7XG4xMTcwOlx0XHRcdHRzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBwcml2LVx1MDAzZWxlbiwgMCk7XG4xMTcxOlx0XG4xMTcyOlx0XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG4xMTczOlx0XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXHUwMDI2XHUwMDI2XG4xMTc0Olx0XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcbjExNzU6XHRcdFx0XHRnb3RvIGVycjtcbjExNzY6XHRcbjExNzc6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncyBcdTAwMjZcdTAwMjZcbjExNzg6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX2w0Y3N1bV91cGRhdGUocGt0LCBza2IsIGZzdW0sIHRzdW0pIFx1MDAzYyAwKVxuMTE3OTpcdFx0XHRcdGdvdG8gZXJyO1xuMTE4MDpcdFx0fVxuMTE4MTpcdFxuMTE4MjpcdFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXgob2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuLCAwKSkgfHxcbjExODM6XHRcdCAgICBza2Jfc3RvcmVfYml0cyhza2IsIG9mZnNldCwgc3JjLCBwcml2LVx1MDAzZWxlbikgXHUwMDNjIDApXG4xMTg0Olx0XHRcdGdvdG8gZXJyO1xuMTE4NTpcdFxuMTE4NjpcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fU0NUUCBcdTAwMjZcdTAwMjZcbjExODc6XHRcdCAgICBwa3QtXHUwMDNldHByb3QgPT0gSVBQUk9UT19TQ1RQIFx1MDAyNlx1MDAyNlxuMTE4ODpcdFx0ICAgIHNrYi1cdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuMTE4OTpcdFx0XHRpZiAocGt0LVx1MDAzZWZyYWdvZmYgPT0gMCBcdTAwMjZcdTAwMjZcbjExOTA6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fc2N0cChza2IsIG5mdF90aG9mZihwa3QpKSlcbjExOTE6XHRcdFx0XHRnb3RvIGVycjtcbjExOTI6XHRcdH1cbjExOTM6XHRcbjExOTQ6XHRcdHJldHVybjtcbjExOTU6XHRlcnI6XG4xMTk2Olx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcbjExOTc6XHR9XG4xMTk4Olx0XG4xMTk5Olx0c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipLY29uZmlnIGFuZCBNYWtlZmlsZXM6IENoZWNraW5nIHRoZSBQcmVyZXF1aXNpdGVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGUgcHJlcmVxdWlzaXRlcyBmb3IgYG5mdF9wYXlsb2FkLmNgIGFyZSBhbGwgaW4gcGxhY2UuIEZpcnN0IHRoaW5ncyBmaXJzdCwgdGhhdCBLY29uZmlnIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBuYXZpZ2F0ZSBvdmVyIHRvIGBuZXQvbmV0ZmlsdGVyL2AgYW5kIHRha2UgYSBsb29rIGF0IGl0LiBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgSSBoYXZlbiYjMzk7dCBjb25zaWRlcmVkLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gVGhlbiBJJiMzOTtsbCBkaXZlIGludG8gdGhlIE1ha2VmaWxlIGluIHRoYXQgc2FtZSBkaXJlY3RvcnksIGBuZXQvbmV0ZmlsdGVyL2AuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyB0byBzZWUgaG93IGBuZnRfcGF5bG9hZC5jYCBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gTm8gc3VycHJpc2VzOyBqdXN0IG1ha2Ugc3VyZSB0aGUgYnVpbGQgcHJvY2VzcyBpcyBzZXQgdXAgY29ycmVjdGx5IGFuZCBub3RoaW5nJiMzOTtzIGJlZW4gb3Zlcmxvb2tlZC4gSSYjMzk7bGwgZm9jdXMgb24gYW55dGhpbmcgcmVsYXRpbmcgdG8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1vZHVsZXMuIEl0JiMzOTtzIGFsbCBhYm91dCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBrbm93cyB3aGF0IEkmIzM5O20gZXhwZWN0aW5nIGFuZCBldmVyeXRoaW5nIHdpbGwgd29yayBhcyBwbGFubmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcGF5bG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVx0XHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODk6XHRcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXHRcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MTM1PXN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfdHJhY2VfdmVyZGljdChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMTQzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjE0NDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9mYXN0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTE0NS1cdFx0XHRcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDcte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjE0ODpcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMTQ5LVx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTIwMz1zdGF0aWMgdm9pZCBleHByX2NhbGxfb3BzX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yMTctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MjE4Olx0WChlLCBuZnRfcGF5bG9hZF9ldmFsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yMTktXHRYKGUsIG5mdF9jbXBfZXZhbCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTI1MD1uZnRfZG9fY2hhaW4oc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIHZvaWQgKnByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTI4Mi1cdFx0XHRcdG5mdF9iaXR3aXNlX2Zhc3RfZXZhbChleHByLCBcdTAwMjZyZWdzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoyODM6XHRcdFx0ZWxzZSBpZiAoZXhwci1cdTAwM2VvcHMgIT0gXHUwMDI2bmZ0X3BheWxvYWRfZmFzdF9vcHMgfHxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoyODQ6XHRcdFx0XHQgIW5mdF9wYXlsb2FkX2Zhc3RfZXZhbChleHByLCBcdTAwMjZyZWdzLCBwa3QpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTI4NS1cdFx0XHRcdGV4cHJfY2FsbF9vcHNfZXZhbChleHByLCBcdTAwMjZyZWdzLCBwa3QpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYz0zNTI9c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlICpuZnRfYmFzaWNfdHlwZXNbXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMzU3LVx0XHUwMDI2bmZ0X2J5dGVvcmRlcl90eXBlLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjM1ODpcdFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMzU5LVx0XHUwMDI2bmZ0X2R5bnNldF90eXBlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTExND11bmlvbiBuZnRfY21wX29mZmxvYWRfZGF0YSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMTE5LVxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTIwOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX24yaCh1bmlvbiBuZnRfY21wX29mZmxvYWRfZGF0YSAqZGF0YSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTEyMS1cdFx0XHQgICAgY29uc3QgdTggKnZhbCwgdTMyIGxlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYz0xMzk9c3RhdGljIGludCBfX25mdF9jbXBfb2ZmbG9hZChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMTUyLVx0aWYgKHJlZy1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX09GRkxPQURfRl9ORVRXT1JLMkhPU1QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjE1MzpcdFx0bmZ0X3BheWxvYWRfbjJoKFx1MDAyNl9kYXRhLCAodTggKilcdTAwMjZwcml2LVx1MDAzZWRhdGEsIHJlZy1cdTAwM2VsZW4pO1xubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTU0Olx0XHRuZnRfcGF5bG9hZF9uMmgoXHUwMDI2X2RhdGFtYXNrLCAodTggKilcdTAwMjZyZWctXHUwMDNlbWFzaywgcmVnLVx1MDAzZWxlbik7XG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xNTUtXHRcdGRhdGEgPSAodTggKilcdTAwMjZfZGF0YTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jPTM2PXN0cnVjdCBfX25mdF9leHByIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTM4LVx0dW5pb24ge1xubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYzozOTpcdFx0c3RydWN0IG5mdF9wYXlsb2FkXHRwYXlsb2FkO1xubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy00MC1cdFx0c3RydWN0IG5mdF9tZXRhXHRcdG1ldGE7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYz0yOTA9c3RhdGljIHZvaWQgbmZ0X2lubmVyX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy0yOTUtXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jOjI5NjpcdGlmIChuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KSBcdTAwM2MgMClcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMjk3LVx0XHRnb3RvIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTMwNC1cdGNhc2UgTkZUX0lOTkVSX0VYUFJfUEFZTE9BRDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM6MzA1Olx0XHRuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKChzdHJ1Y3QgbmZ0X2V4cHIgKilcdTAwMjZwcml2LVx1MDAzZWV4cHIsIHJlZ3MsIHBrdCwgXHUwMDI2dHVuX2N0eCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTMwNi1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI4LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3JlYnVpbGRfdmxhbl9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG1hY19vZmYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAtXHRcdFx0XHRcdCBzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGgpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTQzPXN0YXRpYyBib29sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDQ6bmZ0X3BheWxvYWRfY29weV92bGFuKHUzMiAqZCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG9mZnNldCwgdTggbGVuKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ6XHRcdGlmICghbmZ0X3BheWxvYWRfcmVidWlsZF92bGFuX2hkcihza2IsIG1hY19vZmYsIFx1MDAyNnZldGgpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzU6c3RhdGljIGludCBfX25mdF9wYXlsb2FkX2lubmVyX29mZnNldChzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03Ni17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzOS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNDA6aW50IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDEte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0Mi1cdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fSU5ORVIpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE0MzpcdCAgICBfX25mdF9wYXlsb2FkX2lubmVyX29mZnNldCgoc3RydWN0IG5mdF9wa3RpbmZvICopcGt0KSBcdTAwM2MgMClcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDQtXHRcdHJldHVybiAtMTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTQ4LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE0OTpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHUzMiBvZmZzZXQsIHUzMiBsZW4pXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTUwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTU5LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE2MDp2b2lkIG5mdF9wYXlsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE2MS1cdFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNjMte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE2NDpcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTY1LVx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE3Ny1cdFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTc4Olx0XHQgICAgbmZ0X3BheWxvYWRfbmVlZF92bGFuX2FkanVzdChwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4pKSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTc5Olx0XHRcdGlmICghbmZ0X3BheWxvYWRfY29weV92bGFuKGRlc3QsIHNrYixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xODAtXHRcdFx0XHRcdFx0ICAgcHJpdi1cdTAwM2VvZmZzZXQsIHByaXYtXHUwMDNlbGVuKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTk0LVx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTk1Olx0XHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xOTYtXHRcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTI6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9wYXlsb2FkX3BvbGljeVtORlRBX1BBWUxPQURfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxMy1cdFtORlRBX1BBWUxPQURfU1JFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyMi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMjM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjI0LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyNi17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjI3Olx0c3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMjgtXHR1MzIgb2Zmc2V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNDMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjQ0OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0NS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLCBib29sIHJlc2V0KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0Ni17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjQ3Olx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNDgtXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI1OS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNjA6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNjEtXHRcdFx0XHQgICAgIHUzMiBwcml2X2xlbiwgdTMyIGZpZWxkX2xlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc3LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI3ODpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3OS1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjgwOlx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjgxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg1LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3NvdXJjZSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjg2Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBFVEhfQUxFTikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg3LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX2Rlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5MzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgRVRIX0FMRU4pKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5NC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5OS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9wcm90byk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzAwOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAxLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA3LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMwODpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwOS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMTY6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTctXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjMtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSkgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzI0Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzI1LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMyLVx0XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzMzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzM0LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ2LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM0NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0OC1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzQ5Olx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzUwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNTU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU2LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzYzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNjQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzY1LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzcyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNzM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzc0LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg2LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM4NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODgtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM4OTpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5MC17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5NC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIHNhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozOTU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzk2LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwMy1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIGRhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MDQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDA1LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxMi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQxMzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fdTgpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDI3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9uaChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI4LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mjk6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzQtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MzU6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzYtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNy1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM4Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzOS1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0Ni1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ4LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDQ5Olx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1MC17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1NC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NTU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTYtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjEtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ2MjpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2My1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3NC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzU6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc2LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDc3Olx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3OC17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4Mi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODktXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ5MDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ5MS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MDM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDQtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwNTpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwNi17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMC1cdGNhc2UgSVBQUk9UT19UQ1A6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTExOlx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMi1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEzLVx0Y2FzZSBJUFBST1RPX1VEUDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MTQ6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTE1LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUyMzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWQoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyNC1cdFx0XHQgICAgICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyNi17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTI3Olx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjgtXHRpbnQgZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzEtXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzI6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzMtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNC1cdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM1Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM2LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzctXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM4Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM5LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTQ2LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU0NzpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ4Olx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU0OTpcdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUwOlx0LmV2YWxcdFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MTpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTI6XHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUzOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTQtfTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU2OmNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfZmFzdF9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU3Olx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1ODpcdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU5Olx0LmV2YWxcdFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MDpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjE6XHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYyOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjMtfTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTY1OnZvaWQgbmZ0X3BheWxvYWRfaW5uZXJfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjYtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01Njgte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2OTpcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTcwLVx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYxNS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2MTY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9pbm5lcl9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjE3LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYxOS17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjIwOlx0c3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MjEtXHR1MzIgYmFzZSwgb2Zmc2V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTAtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjUxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2lubmVyX29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTI6XHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjUzOlx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTQ6XHQuaW5pdFx0XHQ9IG5mdF9wYXlsb2FkX2lubmVyX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjU1Olx0LmR1bXBcdFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1NjpcdC8qIGRpcmVjdCBjYWxsIHRvIG5mdF9wYXlsb2FkX2lubmVyX2V2YWwoKS4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTctfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NjU5PXN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfY3N1bV9yZXBsYWNlKF9fc3VtMTYgKnN1bSwgX193c3VtIGZzdW0sIF9fd3N1bSB0c3VtKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NjUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjY2OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3VkcF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjY3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjc2LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY3NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2w0Y3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjc4LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02ODgtXHRjYXNlIElQUFJPVE9fVURQOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY4OTpcdFx0aWYgKCFuZnRfcGF5bG9hZF91ZHBfY2hlY2tzdW0oc2tiLCBuZnRfdGhvZmYocGt0KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjkwLVx0XHRcdHJldHVybiAtMTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzA1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjcwNjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2NzdW1fc2N0cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcwNy17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcxOC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3MTk6c3RhdGljIGludCBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcyMC1cdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzI4LVx0ICovXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzI5Olx0aWYgKG5mdF9wYXlsb2FkX2w0Y3N1bV9vZmZzZXQocGt0LCBza2IsIFx1MDAyNmw0Y3N1bV9vZmZzZXQpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTczMC1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc1NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NTY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyICpzcmMsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzU3LVx0XHRcdFx0IF9fd3N1bSBmc3VtLCBfX3dzdW0gdHN1bSwgaW50IGNzdW1fb2Zmc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NzEtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzcyOnN0cnVjdCBuZnRfcGF5bG9hZF9zZXQge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc3MzpcdGVudW0gbmZ0X3BheWxvYWRfYmFzZXNcdGJhc2U6ODtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NzQtXHR1MTZcdFx0XHRvZmZzZXQ7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc4Mi0vKiBUaGlzIGlzIG5vdCBzdHJ1Y3Qgdmxhbl9oZHIuICovXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzgzOnN0cnVjdCBuZnRfcGF5bG9hZF92bGFuX2hkciB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzg0LVx0X19iZTE2XHRcdFx0aF92bGFuX3Byb3RvO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz03ODg9c3RhdGljIGJvb2xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3ODk6bmZ0X3BheWxvYWRfc2V0X3ZsYW4oY29uc3QgdTMyICpzcmMsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiBvZmZzZXQsIHU4IGxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03OTAtXHRcdCAgICAgaW50ICp2bGFuX2hsZW4pXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzkxLXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3OTI6XHRzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIgKnZsYW5oO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc5My1cdF9fYmUxNiB2bGFuX3Byb3RvO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy04MDYtXHRcdH0gZWxzZSBpZiAobGVuID09IDQpIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo4MDc6XHRcdFx0dmxhbmggPSAoc3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyICopc3JjO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgwOC1cdFx0XHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbmgtXHUwMDNlaF92bGFuX3Byb3RvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz04Mzc9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo4Mzg6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgzOS1cdFx0XHRcdGNvbnN0IHUzMiAqc3JjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz04ODM9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo4ODQ6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTg4NS1cdFx0XHRcdGNvbnN0IHUzMiAqc3JjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MDQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTA1OnN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19hcnAoY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MDYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05MjQ9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX25ldGRldihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5MjU6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkyNi1cdFx0XHRcdCAgIGNvbnN0IHUzMiAqc3JjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05NDU9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2JyaWRnZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5NDY6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk0Ny1cdFx0XHRcdCAgIGNvbnN0IHUzMiAqc3JjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05NjM9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk2NDpcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NjUtXHRcdFx0ICAgIGNvbnN0IHUzMiAqc3JjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05ODY9c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTk0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTU6XHRcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5Ni17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwMzItICovXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTAzMzpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTAzNC1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDUyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNTM6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNTQtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDc0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3NTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3Ni17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwODAtXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwODE6XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4Mi1cdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgzOlx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwODQtXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTA5Nj1zdGF0aWMgYm9vbCBuZnRfdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA5NzpcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDk4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEwNi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTA3OnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA4LVx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTExMC17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTExMTpcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMTItXHRjb25zdCB1MzIgKnNyYyA9IFx1MDAyNnJlZ3MtXHUwMDNlZGF0YVtwcml2LVx1MDAzZXNyZWddO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTIyLVx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTIzOlx0XHQgICAgbmZ0X3BheWxvYWRfbmVlZF92bGFuX2FkanVzdChwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4pKSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTEyNDpcdFx0XHRpZiAoIW5mdF9wYXlsb2FkX3NldF92bGFuKHNyYywgc2tiLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMjUtXHRcdFx0XHRcdFx0ICBwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNDktXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTUwOlx0XHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTUxLVx0XHRpZiAob2Zmc2V0IFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcyLVx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzM6XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3NDpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzUtXHRcdFx0Z290byBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzctXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fZmxhZ3MgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3ODpcdFx0ICAgIG5mdF9wYXlsb2FkX2w0Y3N1bV91cGRhdGUocGt0LCBza2IsIGZzdW0sIHRzdW0pIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzktXHRcdFx0Z290byBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExODktXHRcdGlmIChwa3QtXHUwMDNlZnJhZ29mZiA9PSAwIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExOTA6XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3NjdHAoc2tiLCBuZnRfdGhvZmYocGt0KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE5MS1cdFx0XHRnb3RvIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE5OC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTk5OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjAwLVx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjAzLVx0dTMyIGNzdW1fb2Zmc2V0LCBvZmZzZXQsIGNzdW1fdHlwZSA9IE5GVF9QQVlMT0FEX0NTVU1fTk9ORTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjA0Olx0c3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTIwNS1cdGludCBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNTctXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fSU5FVDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjU4Olx0XHRpZiAoIW5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY3R4LCBwcml2KSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU5LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc5LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyODA6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyODEtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI4Mi17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI4MzpcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyODQtXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyOTktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMDpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDE6XHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMjpcdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkX3NldCkpLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDM6XHQuZXZhbFx0XHQ9IG5mdF9wYXlsb2FkX3NldF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDQ6XHQuaW5pdFx0XHQ9IG5mdF9wYXlsb2FkX3NldF9pbml0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDU6XHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX3NldF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMDYtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyAqXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwOTpuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMxMC1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMTEte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMTI6XHRlbnVtIG5mdF9wYXlsb2FkX2Jhc2VzIGJhc2U7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMxMy1cdHVuc2lnbmVkIGludCBvZmZzZXQsIGxlbjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMzNC1cdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzM1Olx0XHRyZXR1cm4gXHUwMDI2bmZ0X3BheWxvYWRfc2V0X29wcztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzM2LVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzUwLVx0ICAgIGJhc2UgIT0gTkZUX1BBWUxPQURfTExfSEVBREVSIFx1MDAyNlx1MDAyNiBiYXNlICE9IE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzUxOlx0XHRyZXR1cm4gXHUwMDI2bmZ0X3BheWxvYWRfZmFzdF9vcHM7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1Mi1cdGVsc2Vcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzUzOlx0XHRyZXR1cm4gXHUwMDI2bmZ0X3BheWxvYWRfb3BzO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTQtfVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1NjpzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1Ny1cdC5uYW1lXHRcdD0gXCYjMzQ7cGF5bG9hZFwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU4Olx0LnNlbGVjdF9vcHNcdD0gbmZ0X3BheWxvYWRfc2VsZWN0X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU5Olx0LmlubmVyX29wc1x0PSBcdTAwMjZuZnRfcGF5bG9hZF9pbm5lcl9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM2MDpcdC5wb2xpY3lcdFx0PSBuZnRfcGF5bG9hZF9wb2xpY3ksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM2MS1cdC5tYXhhdHRyXHQ9IE5GVEFfUEFZTE9BRF9NQVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzMzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIG5mX3RhYmxlcyBhbmQgbmZ0X3BheWxvYWQgaW4gS2NvbmZpZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYG5mX3RhYmxlc2AgYW5kIHNwZWNpZmljYWxseSBgbmZ0X3BheWxvYWRgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMsIGFuZCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSBncmFzcCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucywgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHRvIHdhdGNoIG91dCBmb3IuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIG9uIHRoZSBLY29uZmlnIHRyZWUsIGJ1dCBJIGFudGljaXBhdGUgaGF2aW5nIHRvIHRyYWNlIHRocm91Z2ggYSBmZXcgaW5jbHVkZXMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGdvYWwgaXMgYSBxdWljayBhbmQgZGlydHkgY29uZmlndXJhdGlvbiBvdmVydmlldyBvZiB0aGVzZSBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNj1jb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOC1cdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzk6XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQwLVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcxOmlmIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXHRkZXBlbmRzIG9uIElQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzQ6XHRzZWxlY3QgTkZfVEFCTEVTX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzU6XHRzZWxlY3QgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzYtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbWl4ZWQgSVB2NC9JUHY2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTU1MD1jb25maWcgTkZUX05BVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NTItXHRzZWxlY3QgTkZfTkFUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTUzOlx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSVBWNCB8fCBORl9UQUJMRVNfSVBWNlxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1NC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmF0IG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01ODY9Y29uZmlnIE5GVF9SRUpFQ1RfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU4NzpcdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01ODgtXHRkZWZhdWx0IE5GVF9SRUpFQ1Rcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjA4PWNvbmZpZyBORlRfRklCX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MDk6XHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjEwLVx0ZGVwZW5kcyBvbiBORlRfRklCX0lQVjRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjI1PWNvbmZpZyBORlRfU09DS0VUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTYyNy1cdHNlbGVjdCBORl9TT0NLRVRfSVBWNFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyODpcdHNlbGVjdCBORl9TT0NLRVRfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxubmV0L25ldGZpbHRlci9LY29uZmlnLTYyOS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQwPWNvbmZpZyBORlRfVFBST1hZXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Mi1cdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0MzpcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0NC1cdHNlbGVjdCBORl9UUFJPWFlfSVBWNFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0NTpcdHNlbGVjdCBORl9UUFJPWFlfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Ni1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQ5PWNvbmZpZyBORlRfU1lOUFJPWFlcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjU5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjY2MDppZiBORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjYxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02ODk9Y29uZmlnIE5GVF9SRUpFQ1RfTkVUREVWXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY5OC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2OTk6ZW5kaWYgIyBORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMTplbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NzExPWNvbmZpZyBORl9GTE9XX1RBQkxFXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxNC1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzE1Olx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDQ0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3Mgb2YgYG5mdF9wYXlsb2FkLm9gKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgbmZ0X3BheWxvYWQub2AgZ2V0cyBjb21waWxlZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgbG9vayBpcyB0aGUga2VybmVsJiMzOTtzIGBuZXRmaWx0ZXJgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGF0IHRoZSBgTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgd2l0aGluIHRoaXMgcGFydGljdWxhciBzdWJzeXN0ZW0uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3Mgc3RydWN0dXJlZCBpbiBhIHN0YW5kYXJkIHdheSwgc28gdGhlIE1ha2VmaWxlIGluIHRoYXQgbG9jYXRpb24gc2hvdWxkIGhhdmUgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uLCBJJiMzOTtsbCBnbyBjaGVjayB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT04ND1vYmotJChDT05GSUdfTkZfRFVQX05FVERFVilcdCYjNDM7PSBuZl9kdXBfbmV0ZGV2Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODUtXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg2OiMgbmZfdGFibGVzXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg3Om5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4ODpcdFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg5LVx0XHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MS1cdFx0ICBuZnRfY291bnRlci5vIG5mdF9vYmpyZWYubyBuZnRfaW5uZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5MjpcdFx0ICBuZnRfY2hhaW5fcm91dGUubyBuZl90YWJsZXNfb2ZmbG9hZC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkzLVx0XHQgIG5mdF9zZXRfaGFzaC5vIG5mdF9zZXRfYml0bWFwLm8gbmZ0X3NldF9yYnRyZWUubyBcXFxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9OTc9aWZuZGVmIENPTkZJR19VTUxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6OTg6bmZfdGFibGVzLW9ianMgJiM0Mzs9IG5mdF9zZXRfcGlwYXBvX2F2eDIub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS05OS1lbmRpZlxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTAzPWlmZGVmIENPTkZJR19NSVRJR0FUSU9OX1JFVFBPTElORVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMDQ6bmZfdGFibGVzLW9ianMgJiM0Mzs9IG5mdF9jdF9mYXN0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTA1LWVuZGlmXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEwNj1lbmRpZlxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMDctXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEwODpvYmotJChDT05GSUdfTkZfVEFCTEVTKVx0XHQmIzQzOz0gbmZfdGFibGVzLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTA5LW9iai0kKENPTkZJR19ORlRfQ09NUEFUKVx0JiM0Mzs9IG5mdF9jb21wYXQub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTM1PW9iai0kKENPTkZJR19ORlRfTkFUKVx0XHQmIzQzOz0gbmZ0X2NoYWluX25hdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEzNi1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTM3OiMgbmZfdGFibGVzIG5ldGRldlxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMzgtb2JqLSQoQ09ORklHX05GVF9EVVBfTkVUREVWKVx0JiM0Mzs9IG5mdF9kdXBfbmV0ZGV2Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIG5ldGZpbHRlci9uZl90YWJsZXMgUGF5bG9hZCBDaGVja3N1bSBWYWxpZGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYmFzZWQgb24gdGhlIGBDT05GSUdfTkZfVEFCTEVTYCBidWlsZCBjaGFpbiwgaXQgbG9va3MgbGlrZSB0aGlzIGNlbnRlcnMgYXJvdW5kIGBuZnRfcGF5bG9hZC5vYCwgd2hpY2ggaXMgaW5jbHVkZWQgd2hlbiB3ZSBidWlsZCB3aXRoIGBORl9UQUJMRVNgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGBORl9UQUJMRVNgIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgaGVyZS4KClJpZ2h0LCBzbyBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGNoYW5nZXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgYGNzdW1fb2Zmc2V0YCB3aXRoaW4gYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoKWAuIFByZXZpb3VzbHksIHdoZW4gYHByaXYtJmd0O2Jhc2VgIHdhcyBgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUmAsIGl0IGp1c3QgY2hlY2tlZCBgcHJpdi0mZ3Q7Y3N1bV9mbGFnc2AuIE5vdywgd2UmIzM5O3JlIHNlZWluZyBzcGVjaWZpYyBjaGVja3M6IGl0JiMzOTtzIG1ha2luZyBzdXJlIGBjc3VtX29mZnNldGAgaXMgYSB2YWxpZCBjaGVja3N1bSBvZmZzZXQgZm9yIGVpdGhlciBUQ1AsIFVEUCwgSUNNUCwgb3IgSUNNUHY2IGhlYWRlcnMuCgpUaGVuLCB0aGVyZSYjMzk7cyBhIG5ldyBmdW5jdGlvbiwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soKWAsIHdoaWNoIGxvb2tzIHRvIGJlIHRoZSBrZXkuIFRoaXMgY2hlY2tzLCBhdCBwYWNrZXQgZXZhbHVhdGlvbiB0aW1lLCBpZiB0aGUgd3JpdGUgb3BlcmF0aW9uIGlzIG9rYXkuIEl0IGxvb2tzIGxpa2UgaXQgb25seSByZXR1cm5zIHRydWUgaWYgdGhlIHBhY2tldCBoYXMgYW4gTDQgcHJvdG9jb2wgYW5kIHRoZSBgY3N1bV9vZmZzZXRgIG1hdGNoZXMgdGhlIGFwcHJvcHJpYXRlIGNoZWNrc3VtIGZpZWxkIGZvciBUQ1AsIFVEUCwgSUNNUHY2LCBvciBJQ01QLiBUaGUgb2xkZXIgY29kZSB1c2VkIHRvIGZhbGwgdGhyb3VnaCB0byBhIGRpZmZlcmVudCBwYXRoLgoKVGhpcyBpcyByZWFjaGFibGUgY29kZSwgbm8gZG91YnQuIFRoZSBgbmZ0X3BheWxvYWRgIGZ1bmN0aW9uYWxpdHkgaXMgcGFydCBvZiBuZXRmaWx0ZXImIzM5O3MgbmZfdGFibGVzLCB3aGljaCBpcyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIChuZm5ldGxpbmspLiBBbmQsIGltcG9ydGFudGx5LCB0aGlzIGlzIGFjY2Vzc2libGUgZnJvbSB1bnByaXZpbGVnZWQgdXNlciBuYW1lc3BhY2VzLiBUaGlzIG1lYW5zIHdlIGFyZSBkZWFsaW5nIHdpdGggY29udHJvbCBwbGFuZSB2YWxpZGF0aW9uIGFuZCBkYXRhIHBsYW5lIHBhY2tldCBldmFsdWF0aW9uLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGEgY2xlYXIgeWVzLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBib3RoIGNvbnRyb2wgcGxhbmUgdmFsaWRhdGlvbiBhbmQgZGF0YSBwbGFuZSBwYWNrZXQgZXZhbHVhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHNwZWNpZmljIHN5bWJvbHMuIFdlIGhhdmUgYG5mdF9wYXlsb2FkX3NldF9pbml0YCAod2hpY2ggY2FsbHMgdGhlIHN0YXRpYyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGApLCBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgaXRzZWxmIChzdGF0aWMsIGNhbGxlZCBieSBpbml0KSwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgIChhbm90aGVyIHN0YXRpYyBmdW5jdGlvbiksIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCAoYWxzbyBzdGF0aWMsIGNhbGxlZCBkdXJpbmcgZXZhbHVhdGlvbiksIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIHdoaWNoIGlzIGEgbm9uLXN0YXRpYyBldmFsdWF0aW9uIGNhbGxiYWNrIHRoYXQgY2FsbHMgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IHN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGtlcm5lbCAqZG8qIGhhdmUgc3ltYm9scyBpbiBgdm1saW51eGAsIGVzcGVjaWFsbHkgd2l0aCBtb2Rlcm4ga2VybmVsIGJ1aWxkcyBhbmQgc3RhbmRhcmQgY29tcGlsZXIgZmxhZ3MsIHNvIGxvbmcgYXMgdGhleSBhcmVuJiMzOTt0IGlubGluZWQuIFRoaXMgbWVhbnMgdGhlc2UgYXJlIGFsbCB2aWFibGUgc3ltYm9scyB0byBjb25zaWRlci4KCkZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zLCBsZXQmIzM5O3Mga2VlcCB0aGUgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW1wbGVtZW50IG9yIGFsdGVyIHRoZSBuZXcgbG9naWM6IGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgLCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AsIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAsIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLiBUaGVzZSBhcmUgYWxsIHZlcnkgc3BlY2lmaWMgdG8gbmZfdGFibGVzIHBheWxvYWQgZXhwcmVzc2lvbnMsIG5vdCB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycy4KCkZpbmFsbHksIHdlIG5lZWQgdG8gY2hlY2sgY29uZmlnIGRlcGVuZGVuY2llcy4gYENPTkZJR19ORl9UQUJMRVNgICh3aGljaCB3ZSBjYW4gc3RyaXAgdG8gc2ltcGx5IGBORl9UQUJMRVNgKSBpcyBjbGVhcmx5IHRoZSBtYWluIG9uZSwgYnV0IG5mX3RhYmxlcyBpbiB0dXJuIGRlcGVuZHMgb24gYENPTkZJR19ORVRGSUxURVJgIGFuZCB0aGVyZWZvcmUgYE5FVGAuIExldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhpcyBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9UQUJMRVNcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5NTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgTkZfVEFCTEVTIERlcGVuZGVuY3kgVHJlZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIG9mIGBORl9UQUJMRVNgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIGVhc2llc3QgYW5kIG1vc3QgZGlyZWN0IHdheSB0byBkbyB0aGlzLCBpbiBteSBleHBlcmllbmNlLCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZS4gTGV0JiMzOTtzIHNlZS4uLiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBzb3VuZHMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgYE5GX1RBQkxFU2AgaXMgb2J2aW91c2x5IHJlbGF0ZWQgdG8gTmV0ZmlsdGVyLiBOb3csIEkgdmFndWVseSByZWNhbGwgdGhhdCB0aGlzIGlzIHVzdWFsbHkgaGFuZGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgS2NvbmZpZyBzdHJ1Y3R1cmUsIGFuZCB0aGF0IHBhcmVudCBkZXBlbmRlbmNpZXMgYXJlIGNsZWFybHkgbGFpZCBvdXQgaW4gdGhlIGZpbGUuIFNpbmNlIEkgaGF2ZSBhIHByZXR0eSBnb29kIGlkZWEgb2YgdGhlIGdlbmVyYWwgb3JnYW5pemF0aW9uIG9mIHRoaXMsIEkmIzM5O2xsIGhvbmUgaW4gYXJvdW5kIGxpbmUgNDUwLCBhcyB0aGF0IG9mdGVuIHNlZW1zIHRvIGJlIHRoZSByaWdodCBzZWN0aW9uIGZvciBOZXRmaWx0ZXIgY29yZSBjb21wb25lbnRzLiBIb3BlZnVsbHksIHRoZSBmaWxlIGlzIHdlbGwtY29tbWVudGVkLCBhbmQgSSBjYW4gcXVpY2tseSBnZXQgYSBoYW5kbGUgb24gd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIG9yIGNvbmZpZ3VyZWQgYmVmb3JlIEkgY2FuIGV2ZW4gZW5hYmxlIGBORl9UQUJMRVNgIGl0c2VsZi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0NTpcdFx0Ym9vbFxuIDQ0NjpcdFxuIDQ0NzpcdGNvbmZpZyBORl9OQVRfT1ZTXG4gNDQ4Olx0XHRib29sXG4gNDQ5Olx0XG4gNDUwOlx0Y29uZmlnIE5FVEZJTFRFUl9TWU5QUk9YWVxuIDQ1MTpcdFx0dHJpc3RhdGVcbiA0NTI6XHRcbiA0NTM6XHRlbmRpZiAjIE5GX0NPTk5UUkFDS1xuIDQ1NDpcdFxuIDQ1NTpcdGNvbmZpZyBORl9UQUJMRVNcbiA0NTY6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuIDQ1NzpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiA0NTg6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuIDQ1OTpcdFx0aGVscFxuIDQ2MDpcdFx0ICBuZnRhYmxlcyBpcyB0aGUgbmV3IHBhY2tldCBjbGFzc2lmaWNhdGlvbiBmcmFtZXdvcmsgdGhhdCBpbnRlbmRzIHRvXG4gNDYxOlx0XHQgIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHtpcCxpcDYsYXJwLGVifV90YWJsZXMgaW5mcmFzdHJ1Y3R1cmUuIEl0XG4gNDYyOlx0XHQgIHByb3ZpZGVzIGEgcHNldWRvLXN0YXRlIG1hY2hpbmUgd2l0aCBhbiBleHRlbnNpYmxlIGluc3RydWN0aW9uLXNldFxuIDQ2MzpcdFx0ICAoYWxzbyBrbm93biBhcyBleHByZXNzaW9ucykgdGhhdCB0aGUgdXNlcnNwYWNlICYjMzk7bmZ0JiMzOTsgdXRpbGl0eVxuIDQ2NDpcdFx0ICAoaHR0cHM6Ly93d3cubmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9uZnRhYmxlcykgdXNlcyB0byBidWlsZCB0aGVcbiA0NjU6XHRcdCAgcnVsZS1zZXQuIEl0IGFsc28gY29tZXMgd2l0aCB0aGUgZ2VuZXJpYyBzZXQgaW5mcmFzdHJ1Y3R1cmUgdGhhdFxuIDQ2NjpcdFx0ICBhbGxvd3MgeW91IHRvIGNvbnN0cnVjdCBtYXBwaW5ncyBiZXR3ZWVuIG1hdGNoaW5ncyBhbmQgYWN0aW9uc1xuIDQ2NzpcdFx0ICBmb3IgcGVyZm9ybWFuY2UgbG9va3Vwcy5cbiA0Njg6XHRcbiA0Njk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MTcKCQkJCQkJCW91dHB1dDogMTQ3CgkJCQkJCQl0aG91Z2h0czogMzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgTkZfVEFCTEVTYCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCBob3cgd2UmIzM5O3JlIGdvaW5nIHRvIGFwcHJvYWNoIGZ1enppbmcuIEZpcnN0LCBgTkZfVEFCTEVTYCByZWxpZXMgb24gYE5FVGAgYW5kIGBORVRGSUxURVJgLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgTkZfVEFCTEVTX0lORVRgLCBgTkZfVEFCTEVTX0lQVjRgLCBvciBgTkZfVEFCTEVTX0lQVjZgIGFyZSBwb3NzaWJseSByZWxldmFudCwgYnV0IGBORl9UQUJMRVNgIGl0c2VsZiBkZWZpbml0ZWx5IGluY2x1ZGVzIGBuZnRfcGF5bG9hZC5vYC4KCk5vdywgZm9yIGBzZXQtcmVzdWx0c2AsIGxldCYjMzk7cyBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4gSXQmIzM5O3MgbWFya2VkIGFzIGBXb3J0aEZ1enppbmdgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoaXMgcGF0Y2ggdG91Y2hlcyBgbmZ0X3BheWxvYWQuY2AgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIEl0JiMzOTtzIGFkZGluZyB2YWxpZGF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldHMgaW4gYm90aCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHJ1bnRpbWUgY29kZSwgc3BlY2lmaWNhbGx5IGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgLCBhbmQgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLiBUaGlzIGxvZ2ljIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggbmV0bGluayBhbmQgcGFja2V0IHByb2Nlc3NpbmcuIFRoYXQgbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSBhIHZpYWJsZSB0YXJnZXQuCgpUaGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBpcyBzcG90IG9uLCBpbmNsdWRpbmcgdGhvc2UgdmFsaWRhdGlvbiBmdW5jdGlvbnMsIGFsb25nIHdpdGggYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gVGhpcyBjb3ZlcnMgdGhlIGtleSBlbnRyeSBwb2ludHMuIEZpbmFsbHksIHdlJiMzOTtyZSBlbmFibGluZyBgTkZfVEFCTEVTYCBhbmQgYE5FVEZJTFRFUmAsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgYmFzZWQgb24gdGhlIGRlcGVuZGVuY2llcy4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjaGVja3N1bSBvZmZzZXQgdmFsaWRhdGlvbiBhbmQgcGFja2V0IGV2YWx1YXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgcGF5bG9hZCBleHByZXNzaW9ucyBpbiBuZnRhYmxlcyAobmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgbmZuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIGluY29taW5nIHBhY2tldCBwcm9jZXNzaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2V2YWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2hlY2tzdW0gb2Zmc2V0IHZhbGlkYXRpb24gYW5kIHBhY2tldCBldmFsdWF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIHBheWxvYWQgZXhwcmVzc2lvbnMgaW4gbmZ0YWJsZXMgKG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYykuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5mbmV0bGluayBjb25maWd1cmF0aW9uIGFuZCBpbmNvbWluZyBwYWNrZXQgcHJvY2Vzc2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRpZ2h0ZW5zIHZhbGlkYXRpb24gZm9yIHRoZSBjaGVja3N1bSBvZmZzZXQgKGBjc3VtX29mZnNldGApIGluIG5mdGFibGVzIHBheWxvYWQgZXhwcmVzc2lvbnMgKGBuZnRfcGF5bG9hZC5jYCkuIEl0IGFkZHMgY29udHJvbC1wbGFuZSB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KClgIGFuZCBydW50aW1lIHBhY2tldCB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKClgIHRvIGVuc3VyZSBjaGVja3N1bSBtb2RpZmljYXRpb24gdGFyZ2V0cyBsZWdpdGltYXRlIHRyYW5zcG9ydCBsYXllciBoZWFkZXJzIChUQ1AsIFVEUCwgVURQTGl0ZSwgSUNNUCwgSUNNUHY2KS5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS4gVGhlIHZhcmlhYmxlcyByZWFkIChgcHJpdi1cdTAwM2Vjc3VtX29mZnNldGAsIGBwa3QtXHUwMDNlZmxhZ3NgLCBgcGt0LVx1MDAzZXRwcm90YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IG5mdGFibGVzIGV4cHJlc3Npb24gc2V0dXAgYW5kIHBhY2tldCBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4NmQwMjkxYTBhYmRjMGU5N2I0YWM1MGEzMzMwYTI5MmY3ZjU1YjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDEwOjI5OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCmluZGV4IGUzMTVkMzVmNzNkNGEuLjViNzZhZjY4YjcwNDkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWRwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2dyZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pY21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWNtcHY2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcHY2LmgmZ3Q7CkBAIC0xMDA4LDExICYjNDM7MTAwOSwxNCBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCWlmIChwcml2LSZndDtjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgJiMzNDtyZS11cGRhdGUmIzM0OyBvZiBMNCBjaGVja3N1bSAqLwogCQkJcmV0dXJuIGZhbHNlOwogCi0JCS8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbiYjMzk7dCBiZSBuZWdhdGl2ZSBzbyBib2d1cwotCQkgKiBvZmZzZXRzIGNhbiBjb3JydXB0IEw0IG9yIHBheWxvYWQgYnV0IG5vdCBsMyBoZWFkZXJzLgotCQkgKiBXZSBhbHJlYWR5IGFsbG93IGFyYml0cmFyeSBsNC9pbm5lciBwYXlsb2FkIHdyaXRlcy4KLQkJICovCi0JCXJldHVybiB0cnVlOwomIzQzOwkJLyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi8KJiM0MzsJCWlmIChwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHwKJiM0MzsJCSAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgfHwKJiM0MzsJCSAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6CiAJCXJldHVybiB0cnVlOwogCWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKQEAgLTEwNDYsNiAmIzQzOzEwNTAsMjcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiwKJiM0MzsJCQkJCSBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCkKJiM0Mzt7CiYjNDM7CWlmICghKHBrdC0mZ3Q7ZmxhZ3MgJmFtcDsgTkZUX1BLVElORk9fTDRQUk9UTykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGt0LSZndDt0cHJvdCkgewomIzQzOwljYXNlIElQUFJPVE9fVENQOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKJiM0MzsJY2FzZSBJUFBST1RPX1VEUDoKJiM0MzsJY2FzZSBJUFBST1RPX1VEUExJVEU6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUFY2OgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUDoKJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpCiB7CkBAIC0xMDU1LDkgJiM0MzsxMDgwLDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJY2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjoKIAkJcmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTsKIAljYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6CiYjNDM7CQlyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpOwogCWNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOgotCQkvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmUKLQkJICogbmVnYXRpdmUgc28gcmVhbCBsMyBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLgomIzQzOwkJLyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmUKJiM0MzsJCSAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC4KIAkJICovCiAJCXJldHVybiB0cnVlOwogCWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwIGludG8gbmZ0X3BheWxvYWQuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgZGlmZi4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgaGFzIGNoYW5nZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcgc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUsIGFzIHRoZXNlIGxpa2VseSBob2xkIGtleSBpbmZvcm1hdGlvbiBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzOiBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAsIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCwgb2YgY291cnNlLCB0byB6b29tIGluIG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucyBzbyB0aGF0IEkgY2FuIHNlZSBob3cgdGhleSB3b3JrLiBUaGlzIGlzIHRoZSBiZXN0IHdheSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBvciBkZXNpZ24gYWx0ZXJhdGlvbnMuIEkgd2FudCB0byBiZSBhYmxlIHRvIGZ1bGx5IGdyYXNwIGFueSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBjaGVja3N1bSBoYW5kbGluZyBhbmQgZXZhbHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRcdH1cbiA5ODE6XHRcbiA5ODI6XHRcdHJldHVybiBmYWxzZTtcbiA5ODM6XHR9XG4gOTg0Olx0XG4gOTg1Olx0LyogY2hlY2sgbGlua2xheWVyIG1vZGlmaWNhdGlvbnMgZG9uJiMzOTt0IHNwaWxsIGludG8gbmV0d29yayBoZWFkZXIuICovXG4gOTg2Olx0c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxuIDk4NzpcdHtcbiA5ODg6XHRcdGlmIChuZnRfaW5faW5ncmVzcyhwa3QtXHUwMDNlc3RhdGUpKVxuIDk4OTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA5OTA6XHRcbiA5OTE6XHRcdHJldHVybiBvZmZzZXQgXHUwMDNjPSBza2JfbmV0d29ya19vZmZzZXQocGt0LVx1MDAzZXNrYik7XG4gOTkyOlx0fVxuIDk5MzpcdFxuIDk5NDpcdHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiA5OTU6XHRcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4gOTk2Olx0e1xuIDk5NzpcdFx0c3dpdGNoIChwcml2LVx1MDAzZWJhc2UpIHtcbiA5OTg6XHRcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxuIDk5OTpcdFx0XHRicmVhaztcbjEwMDA6XHRcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4xMDAxOlx0XHRcdGlmIChjdHgtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xuMTAwMjpcdFx0XHRcdGlmIChvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKSA9PSBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0KVxuMTAwMzpcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4xMDA0Olx0XG4xMDA1Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTAwNjpcdFx0XHR9XG4xMDA3Olx0XHRcdHJldHVybiB0cnVlOyAvKiBydW4gdGltZSB2YWxpZGF0aW9uIHJlcXVpcmVkICovXG4xMDA4Olx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMDA5Olx0XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fZmxhZ3MpIC8qIG1ha2VzIG5vIHNlbnNlLCBhc2tzIGZvciBcJiMzNDtyZS11cGRhdGVcJiMzNDsgb2YgTDQgY2hlY2tzdW0gKi9cbjEwMTA6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDExOlx0XG4xMDEyOlx0XHRcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXG4xMDEzOlx0XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSB8fFxuMTAxNDpcdFx0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgfHxcbjEwMTU6XHRcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKSB8fFxuMTAxNjpcdFx0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcbjEwMTc6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEwMTg6XHRcbjEwMTk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTAyMDpcdFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4xMDIxOlx0XHRcdHJldHVybiB0cnVlO1xuMTAyMjpcdFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuMTAyMzpcdFx0XHRicmVhaztcbjEwMjQ6XHRcdH1cbjEwMjU6XHRcbjEwMjY6XHRcdHJldHVybiBmYWxzZTtcbjEwMjc6XHR9XG4xMDI4Olx0XG4xMDI5Olx0LyogZG8gbm90IGFsbG93IGFyYml0cmFyeSBuZXR3b3JrIGhlYWRlciBtYW5nbGluZyB2aWEgYm9ndXMgY3N1bV9vZmYuXG4xMDMwOlx0ICogV2Ugb25seSBzdXBwb3J0IGlwdjQuICBPbmx5IE5GUFJPVE9fSVBWNCBjYW4gYmUgY2hlY2tlZCBmcm9tIGNvbnRyb2xcbjEwMzE6XHQgKiBwbGFuZS5cbjEwMzI6XHQgKi9cbjEwMzM6XHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4xMDM0Olx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbjEwMzU6XHR7XG4xMDM2Olx0XHRzd2l0Y2ggKHBrdC1cdTAwM2VzdGF0ZS1cdTAwM2VwZikge1xuMTAzNzpcdFx0Y2FzZSBORlBST1RPX0lQVjQ6XG4xMDM4Olx0XHRcdC8qIFdhcm5pbmc6IE5GUFJPVE9fSU5FVCB3YXMgbm90IGNoZWNrZWQ7IHdlIGNhbiYjMzk7dCByZXR1cm4gdHJ1ZSBoZXJlLiAqL1xuMTAzOTpcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwNDA6XHRcdGNhc2UgTkZQUk9UT19JUFY2OlxuMTA0MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDQyOlx0XHRjYXNlIE5GUFJPVE9fQlJJREdFOlxuMTA0MzpcdFx0XHRyZXR1cm4gcGt0LVx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2XG4xMDQ0Olx0XHRcdCAgICAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xuMTA0NTpcdFx0Y2FzZSBORlBST1RPX05FVERFVjpcbjEwNDY6XHRcdFx0cmV0dXJuIHBrdC1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuMTA0NzpcdFx0XHQgICAgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwNDg6XHRcdH1cbjEwNDk6XHRcbjEwNTA6XHRcdHJldHVybiBmYWxzZTtcbjEwNTE6XHR9XG4xMDUyOlx0XG4xMDUzOlx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuMTA1NDpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4xMDU1Olx0e1xuMTA1NjpcdFx0aWYgKCEocGt0LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSlcbjEwNTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA1ODpcdFxuMTA1OTpcdFx0c3dpdGNoIChwa3QtXHUwMDNldHByb3QpIHtcbjEwNjA6XHRcdGNhc2UgSVBQUk9UT19UQ1A6XG4xMDYxOlx0XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcbjEwNjI6XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4xMDYzOlx0XHRjYXNlIElQUFJPVE9fVURQTElURTpcbjEwNjQ6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xuMTA2NTpcdFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcbjEwNjY6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4xMDY3Olx0XHRjYXNlIElQUFJPVE9fSUNNUDpcbjEwNjg6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKTtcbjEwNjk6XHRcdH1cbjEwNzA6XHRcbjEwNzE6XHRcdHJldHVybiBmYWxzZTtcbjEwNzI6XHR9XG4xMDczOlx0XG4xMDc0Olx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbjEwNzU6XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4xMDc2Olx0e1xuMTA3NzpcdFx0c3dpdGNoIChwcml2LVx1MDAzZWJhc2UpIHtcbjEwNzg6XHRcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxuMTA3OTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG5mdF9wYXlsb2FkLmNgIGZvciBDb250ZXh0KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgbmZ0X3BheWxvYWQuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY29kZSBhcm91bmQgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLiBNeSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSAqaG93KiBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgaXMgdXNlZCDigJMgaXMgaXQgYSBwcmVjb25kaXRpb24sIGEgdmFsaWRhdGlvbiBjaGVjaywgb3IgcGVyaGFwcyBhIGhlbHBlcj8gTW9yZSBpbXBvcnRhbnRseSwgd2hlcmUgZG9lcyBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGZpdCBpbnRvIHRoZSBlcXVhdGlvbj8gSXMgaXQgc2V0dGluZyB1cCBzb21ldGhpbmcgZm9yIHRoZSBjaGVja3N1bSB3cml0ZSwgb3IgaXMgaXQgd29ya2luZyBpbiBwYXJhbGxlbCB0byBwcmVwYXJlIHRoZSBwYXlsb2FkPyBEb2VzIGl0IG5lZWQgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgIHRvIGJlIHBvc2l0aXZlIHRvIHJ1biBjb3JyZWN0bHk/IE9yIGRvZXMgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBzb21laG93IGFmZmVjdCB0aGUgY2lyY3Vtc3RhbmNlcyB3aGVuIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCBpcyB0cnVlIG9yIGZhbHNlPwoKSSYjMzk7bSBhc3N1bWluZyB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCBjaGVja3N1bSBtYW5pcHVsYXRpb24gb3IgZXZhbHVhdGlvbiwgYnV0IEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGJlIHN1cmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBwYXlsb2FkIGRhdGEgaXMgcmVhZCwgd3JpdHRlbiwgYW5kIG1hbmlwdWxhdGVkIHdpdGggcmVzcGVjdCB0byBjaGVja3N1bXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHBhY2tldCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBoYW5kbGVkLCBob3cgZGF0YSBpcyBhY2Nlc3NlZCBpbiBtZW1vcnksIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsgYXMgYSB3aG9sZS4gSSBzaG91bGQgY2hlY2sgaG93IHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIGFyZSBoYW5kbGVkLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBsb2dpY2FsIHJlbGF0aW9uc2hpcCwgb3IgZGVwZW5kZW5jaWVzLCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgd2l0aGluIHRoZSBncmVhdGVyIGNvbnRleHQgb2YgdGhlIGBuZnRfcGF5bG9hZGAgc3Vic3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0byBwcm9jZWVkIHdpdGggdGhlIHdvcmsgYXQgaGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzU6XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4xMDc2Olx0e1xuMTA3NzpcdFx0c3dpdGNoIChwcml2LVx1MDAzZWJhc2UpIHtcbjEwNzg6XHRcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxuMTA3OTpcdFx0XHRicmVhaztcbjEwODA6XHRcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4xMDgxOlx0XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4xMDgyOlx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMDgzOlx0XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XG4xMDg0Olx0XHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbjEwODU6XHRcdFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcbjEwODY6XHRcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuMTA4NzpcdFx0XHQgKi9cbjEwODg6XHRcdFx0cmV0dXJuIHRydWU7XG4xMDg5Olx0XHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4xMDkwOlx0XHRcdGJyZWFrO1xuMTA5MTpcdFx0fVxuMTA5MjpcdFxuMTA5MzpcdFx0cmV0dXJuIGZhbHNlO1xuMTA5NDpcdH1cbjEwOTU6XHRcbjEwOTY6XHRzdGF0aWMgYm9vbCBuZnRfdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4xMDk3Olx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4xMDk4Olx0e1xuMTA5OTpcdFx0dW5zaWduZWQgaW50IGRvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBhY2tfc2VxKSAmIzQzOyBzaXplb2YoX19iZTMyKTtcbjExMDA6XHRcbjExMDE6XHRcdGlmIChwa3QtXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXG4xMTAyOlx0XHRcdHJldHVybiB0cnVlO1xuMTEwMzpcdFxuMTEwNDpcdFx0cmV0dXJuIHByaXYtXHUwMDNlb2Zmc2V0IFx1MDAzZSBkb2ZmIHx8IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gZG9mZjtcbjExMDU6XHR9XG4xMTA2Olx0XG4xMTA3Olx0c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuMTEwODpcdFx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbjExMDk6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbjExMTA6XHR7XG4xMTExOlx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbjExMTI6XHRcdGNvbnN0IHUzMiAqc3JjID0gXHUwMDI2cmVncy1cdTAwM2VkYXRhW3ByaXYtXHUwMDNlc3JlZ107XG4xMTEzOlx0XHRpbnQgb2Zmc2V0LCBjc3VtX29mZnNldCwgdmxhbl9obGVuID0gMDtcbjExMTQ6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXHUwMDNlc2tiO1xuMTExNTpcdFx0X193c3VtIGZzdW0sIHRzdW07XG4xMTE2Olx0XG4xMTE3Olx0XHRzd2l0Y2ggKHByaXYtXHUwMDNlYmFzZSkge1xuMTExODpcdFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XG4xMTE5Olx0XHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuMTEyMDpcdFx0XHRcdGdvdG8gZXJyO1xuMTEyMTpcdFxuMTEyMjpcdFx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcdTAwMjZcdTAwMjZcbjExMjM6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cdTAwM2VvZmZzZXQsIHByaXYtXHUwMDNlbGVuKSkge1xuMTEyNDpcdFx0XHRcdGlmICghbmZ0X3BheWxvYWRfc2V0X3ZsYW4oc3JjLCBza2IsXG4xMTI1Olx0XHRcdFx0XHRcdFx0ICBwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4sXG4xMTI2Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZ2bGFuX2hsZW4pKVxuMTEyNzpcdFx0XHRcdFx0Z290byBlcnI7XG4xMTI4Olx0XG4xMTI5Olx0XHRcdFx0aWYgKCF2bGFuX2hsZW4pXG4xMTMwOlx0XHRcdFx0XHRyZXR1cm47XG4xMTMxOlx0XHRcdH1cbjExMzI6XHRcbjExMzM6XHRcdFx0b2Zmc2V0ID0gc2tiX21hY19oZWFkZXIoc2tiKSAtIHNrYi1cdTAwM2VkYXRhIC0gdmxhbl9obGVuO1xuMTEzNDpcdFx0XHRpZiAoIW5mdF9sbF93cml0ZV9vayhwa3QsIHByaXYtXHUwMDNlbGVuICYjNDM7IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IG9mZnNldCkpXG4xMTM1Olx0XHRcdFx0Z290byBlcnI7XG4xMTM2Olx0XHRcdGJyZWFrO1xuMTEzNzpcdFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbjExMzg6XHRcdFx0aWYgKCFuZnRfbmhfd3JpdGVfb2socGt0LCBwcml2LCBzcmMpKVxuMTEzOTpcdFx0XHRcdGdvdG8gZXJyO1xuMTE0MDpcdFx0XHRvZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcbjExNDE6XHRcdFx0YnJlYWs7XG4xMTQyOlx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMTQzOlx0XHRcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykgfHwgcGt0LVx1MDAzZWZyYWdvZmYpXG4xMTQ0Olx0XHRcdFx0Z290byBlcnI7XG4xMTQ1Olx0XHRcdGlmICghbmZ0X3RoX3dyaXRlX29rKHBrdCwgcHJpdikpXG4xMTQ2Olx0XHRcdFx0Z290byBlcnI7XG4xMTQ3Olx0XHRcdG9mZnNldCA9IG5mdF90aG9mZihwa3QpO1xuMTE0ODpcdFx0XHRicmVhaztcbjExNDk6XHRcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuMTE1MDpcdFx0XHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcbjExNTE6XHRcdFx0aWYgKG9mZnNldCBcdTAwM2MgMClcbjExNTI6XHRcdFx0XHRnb3RvIGVycjtcbjExNTM6XHRcdFx0YnJlYWs7XG4xMTU0Olx0XHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDAyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBEZWVwZXIgaW50byBuZnRcX3BheWxvYWRcX3NldFxfZXZhbCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIG9idmlvdXNseSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIE5ldGZpbHRlciYjMzk7cyBORlRhYmxlcyBmcmFtZXdvcmsuICYjMzQ7TGV0JiMzOTtzIHNlZSB0aGUgcmVzdCBvZiBpdCYjMzQ7IGltcGxpZXMgSSYjMzk7dmUgYWxyZWFkeSBnb3Qgc29tZSBpbml0aWFsIGNvbnRleHQsIGxpa2VseSBmcm9tIGxvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgb3IgZG9jdW1lbnRhdGlvbi4gSSYjMzk7bSBwcm9iYWJseSB0cnlpbmcgdG8gcGllY2UgdG9nZXRoZXIgaG93IHRoaXMgZXZhbHVhdGlvbiBtZWNoYW5pc20gd29ya3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHBheWxvYWQgc2V0dGluZyBjb250ZXh0LiBBbSBJIHRyeWluZyB0byBkZWJ1ZyBhIHNwZWNpZmljIGlzc3VlLCBvciBqdXN0IGRlZXBlbiBteSBvdmVyYWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIGZsb3cgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBOZXRmaWx0ZXIgY29tcG9uZW50cz8gSSYjMzk7bSBwcm9iYWJseSBtZW50YWxseSBtYXBwaW5nIHRoZSBleGVjdXRpb24gcGF0aDogdGhlIGFyZ3VtZW50cyBpdCB0YWtlcywgdGhlIGNvbmRpdGlvbnMgaXQgY2hlY2tzLCB0aGUgc3RhdGUgaXQgdXBkYXRlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbnNpZ2h0cyBpbnRvIHRoaW5ncyBsaWtlIHRoZSBoYW5kbGluZyBvZiBkaWZmZXJlbnQgcGF5bG9hZCB0eXBlcywgdGhlIHVzZSBvZiBoZWxwZXIgZnVuY3Rpb25zLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBldmFsdWF0aW9uIG9uIHRoZSBvdmVyYWxsIHJ1bGUgbWF0Y2hpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkIGFuZCB3aGF0IGRhdGEgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgZHVyaW5nIHRoaXMgZXZhbHVhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGV2ZXJ5dGhpbmcgZnJvbSBwZXJmb3JtYW5jZSB0dW5pbmcgdG8gc2VjdXJpdHkgaGFyZGVuaW5nIGFuZCBkZWJ1Z2dpbmcuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyB0byBpdHMgcGxhY2UgaW4gdGhlIHdob2xlIHBpY3R1cmUuIEkgYW0gZ29pbmcgdG8ga2VlcCBnb2luZyBhbmQgc2VlIHdoYXQgZWxzZSBjYW4gYmUgZ2xlYW5lZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTU6XHRcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSgxKTtcbjExNTY6XHRcdFx0Z290byBlcnI7XG4xMTU3Olx0XHR9XG4xMTU4Olx0XG4xMTU5Olx0XHRjc3VtX29mZnNldCA9IG9mZnNldCAmIzQzOyBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0O1xuMTE2MDpcdFx0b2Zmc2V0ICYjNDM7PSBwcml2LVx1MDAzZW9mZnNldDtcbjExNjE6XHRcbjExNjI6XHRcdGlmICgocHJpdi1cdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIHx8IHByaXYtXHUwMDNlY3N1bV9mbGFncykgXHUwMDI2XHUwMDI2XG4xMTYzOlx0XHQgICAgKChwcml2LVx1MDAzZWJhc2UgIT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUiBcdTAwMjZcdTAwMjZcbjExNjQ6XHRcdCAgICAgIHByaXYtXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVIpIHx8XG4xMTY1Olx0XHQgICAgIHNrYi1cdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHtcbjExNjY6XHRcdFx0aWYgKG9mZnNldCAmIzQzOyBwcml2LVx1MDAzZWxlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbjExNjc6XHRcdFx0XHRnb3RvIGVycjtcbjExNjg6XHRcbjExNjk6XHRcdFx0ZnN1bSA9IHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgcHJpdi1cdTAwM2VsZW4sIDApO1xuMTE3MDpcdFx0XHR0c3VtID0gY3N1bV9wYXJ0aWFsKHNyYywgcHJpdi1cdTAwM2VsZW4sIDApO1xuMTE3MTpcdFxuMTE3MjpcdFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFx1MDAyNlx1MDAyNlxuMTE3MzpcdFx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFx1MDAyNlx1MDAyNlxuMTE3NDpcdFx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXG4xMTc1Olx0XHRcdFx0Z290byBlcnI7XG4xMTc2Olx0XG4xMTc3Olx0XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fZmxhZ3MgXHUwMDI2XHUwMDI2XG4xMTc4Olx0XHRcdCAgICBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKHBrdCwgc2tiLCBmc3VtLCB0c3VtKSBcdTAwM2MgMClcbjExNzk6XHRcdFx0XHRnb3RvIGVycjtcbjExODA6XHRcdH1cbjExODE6XHRcbjExODI6XHRcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWF4KG9mZnNldCAmIzQzOyBwcml2LVx1MDAzZWxlbiwgMCkpIHx8XG4xMTgzOlx0XHQgICAgc2tiX3N0b3JlX2JpdHMoc2tiLCBvZmZzZXQsIHNyYywgcHJpdi1cdTAwM2VsZW4pIFx1MDAzYyAwKVxuMTE4NDpcdFx0XHRnb3RvIGVycjtcbjExODU6XHRcbjExODY6XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX1NDVFAgXHUwMDI2XHUwMDI2XG4xMTg3Olx0XHQgICAgcGt0LVx1MDAzZXRwcm90ID09IElQUFJPVE9fU0NUUCBcdTAwMjZcdTAwMjZcbjExODg6XHRcdCAgICBza2ItXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpIHtcbjExODk6XHRcdFx0aWYgKHBrdC1cdTAwM2VmcmFnb2ZmID09IDAgXHUwMDI2XHUwMDI2XG4xMTkwOlx0XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3NjdHAoc2tiLCBuZnRfdGhvZmYocGt0KSkpXG4xMTkxOlx0XHRcdFx0Z290byBlcnI7XG4xMTkyOlx0XHR9XG4xMTkzOlx0XG4xMTk0Olx0XHRyZXR1cm47XG4xMTk1Olx0ZXJyOlxuMTE5NjpcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XG4xMTk3Olx0fVxuMTE5ODpcdFxuMTE5OTpcdHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbjEyMDA6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbjEyMDE6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdKVxuMTIwMjpcdHtcbjEyMDM6XHRcdHUzMiBjc3VtX29mZnNldCwgb2Zmc2V0LCBjc3VtX3R5cGUgPSBORlRfUEFZTE9BRF9DU1VNX05PTkU7XG4xMjA0Olx0XHRzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbjEyMDU6XHRcdGludCBlcnI7XG4xMjA2Olx0XG4xMjA3Olx0XHRpZiAoY3R4LVx1MDAzZW5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucylcbjEyMDg6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjEyMDk6XHRcbjEyMTA6XHRcdHByaXYtXHUwMDNlYmFzZSAgICAgICAgPSBudG9obChubGFfZ2V0X2JlMzIodGJbTkZUQV9QQVlMT0FEX0JBU0VdKSk7XG4xMjExOlx0XHRwcml2LVx1MDAzZWxlbiAgICAgICAgID0gbnRvaGwobmxhX2dldF9iZTMyKHRiW05GVEFfUEFZTE9BRF9MRU5dKSk7XG4xMjEyOlx0XG4xMjEzOlx0XHRlcnIgPSBuZnRfcGFyc2VfdTMyX2NoZWNrKHRiW05GVEFfUEFZTE9BRF9PRkZTRVRdLCBVMTZfTUFYLCBcdTAwMjZvZmZzZXQpO1xuMTIxNDpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgxMwoJCQkJCQkJb3V0cHV0OiAyMjIKCQkJCQkJCXRob3VnaHRzOiAxMDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXRmaWx0ZXIgUGF5bG9hZCBNYW5nbGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gaGFyZGVuaW5nIHRoZSBgbmZ0YWJsZXNgIHBheWxvYWQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3Vtcy4gSW5pdGlhbGx5LCB0aGUgY29kZSBoYWQgYSB2dWxuZXJhYmlsaXR5IHdoZXJlIGFuIGFyYml0cmFyeSBgY3N1bV9vZmZzZXRgIGNvdWxkIGJlIHByb3ZpZGVkLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBjb3JydXB0aW9uIG9mIGhlYWRlcnMgb3IgdGhlIHdyaXRpbmcvdXBkYXRpbmcgb2YgY2hlY2tzdW1zIGF0IGFyYml0cmFyeSBvZmZzZXRzIHdpdGhpbiBhIHBhY2tldCwgd2hpY2ggaXMgYmFkIG5ld3MuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzOiAmIzM0O0RvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBzZWN1cml0eSBob2xlcywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3M/JiMzNDsgTGV0JiMzOTtzIHNlZS4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyB0d28gdmFsaWRhdGlvbiBmdW5jdGlvbnM6IGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBhbmQgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgLiBUaGUgZm9ybWVyIG5vdyAqZXhwbGljaXRseSogY2hlY2tzIGlmIHRoZSBwcm92aWRlZCBgY3N1bV9vZmZzZXRgIGlzIGEgKnZhbGlkKiBvZmZzZXQgZm9yIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zIChUQ1AsIFVEUCwgSUNNUCwgSUNNUHY2KS4gVGhlIGxhdHRlciBmdXJ0aGVyIHZhbGlkYXRlcyB0aGF0IGlmIHRoZSBwYWNrZXQgYWN0dWFsbHkgKmlzKiBvbmUgb2YgdGhlc2UgdHJhbnNwb3J0IHByb3RvY29scywgdGhhdCB0aGUgb2Zmc2V0IG1hdGNoZXMgd2hhdCYjMzk7cyBleHBlY3RlZCBmb3IgdGhhdCBwcm90b2NvbC4KCk5vdywgbGV0JiMzOTtzIGV2YWx1YXRlIHRoaXMgaW4gdGhlIGNvbnRleHQgb2YgS01TQU4gdnMuIEtBU0FOLiBLTVNBTiBpcyBteSBwcmltYXJ5IHRhcmdldCBmb3IgdGhpcyBraW5kIG9mIHJldmlldyBhcyBJIGFtIGxvb2tpbmcgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuCgoxLiAgKipLZXJuZWwgU3RydWN0dXJlcyB0byBVc2Vyc3BhY2U/KiogTm9wZS4gTm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGFyZSBleGlzdGluZyBvbmVzIG1vZGlmaWVkIGluIGEgd2F5IHRoYXQgd291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGJlaW5nIGV4cG9zZWQuCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljL0JyYW5jaGluZyBvbiBVbmluaXRpYWxpemVkIFZhcmlhYmxlcz8qKiBUaGUgY29kZSBjaGVja3MgYHByaXYtJmd0O2NzdW1fb2Zmc2V0YCwgYHBrdC0mZ3Q7ZmxhZ3NgLCBhbmQgYHBrdC0mZ3Q7dHByb3RgLiBgcHJpdmAgaXMgcG9wdWxhdGVkIGR1cmluZyBleHByZXNzaW9uIGluaXRpYWxpemF0aW9uIHRocm91Z2ggbmV0bGluayBhdHRyaWJ1dGVzIChhbmQgdmFsaWRhdGVkKS4gYHBrdGAgaXMgYSBgbmZ0X3BrdGluZm9gIHN0cnVjdHVyZSBwb3B1bGF0ZWQgYnkgbmV0ZmlsdGVyIHBlci1wYWNrZXQuIE5vbmUgb2YgdGhlc2Ugc291cmNlcyBhcmUgdW5pbml0aWFsaXplZCBtZW1vcnkuCjMuICAqKkNvbXBsZXggRGF0YSBTdHJ1Y3R1cmVzIHdpdGggVW5pbml0aWFsaXplZCBGaWVsZHM/KiogTm8gbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhZCB0byBzdWJzZXF1ZW50IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Lgo0LiAgKipCb3VuZHMgQ2hlY2tzL1VuaW5pdGlhbGl6ZWQgQnl0ZXMgQWNjZXNzPyoqIFRoaXMgaXMgYWJvdXQgc3RyaWN0ZXIgKnZhbGlkYXRpb24qLCBub3QgbmV3IHdheXMgdG8gYWNjZXNzIG1lbW9yeS4gVGhlIHBhdGNoICpyZXN0cmljdHMqIHdoYXQgY2FuIGJlIHdyaXR0ZW4vdXBkYXRlZCBieSBlbnN1cmluZyBjaGVja3N1bSBvZmZzZXRzIGFyZSB2YWxpZC4gSXQmIzM5O3MgdGlnaHRlbmluZyB0aGUgZXhpc3RpbmcgY29kZSwgbm90IGxvb3NlbmluZyBpdC4KClRoZXJlZm9yZSwgdGhpcyBpcyBhIGNsZWFyIGhhcmRlbmluZyBwYXRjaCBieSByZXN0cmljdGluZyBhY2Nlc3MuIEdpdmVuIHRoYXQsIHRoZSBzdGFuZGFyZCBLQVNBTi9zeXprYWxsZXIgZnV6emluZyBpcyBhZGVxdWF0ZSB0byB0ZXN0IHRoZSBwYXRjaC4gS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IGhlcmUuIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRpZ2h0ZW5zIHZhbGlkYXRpb24gZm9yIHRoZSBjaGVja3N1bSBvZmZzZXQgKGBjc3VtX29mZnNldGApIGluIG5mdGFibGVzIHBheWxvYWQgZXhwcmVzc2lvbnMgKGBuZnRfcGF5bG9hZC5jYCkuIEl0IGFkZHMgY29udHJvbC1wbGFuZSB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KClgIGFuZCBydW50aW1lIHBhY2tldCB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKClgIHRvIGVuc3VyZSBjaGVja3N1bSBtb2RpZmljYXRpb24gdGFyZ2V0cyBsZWdpdGltYXRlIHRyYW5zcG9ydCBsYXllciBoZWFkZXJzIChUQ1AsIFVEUCwgVURQTGl0ZSwgSUNNUCwgSUNNUHY2KS5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS4gVGhlIHZhcmlhYmxlcyByZWFkIChgcHJpdi1cdTAwM2Vjc3VtX29mZnNldGAsIGBwa3QtXHUwMDNlZmxhZ3NgLCBgcGt0LVx1MDAzZXRwcm90YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IG5mdGFibGVzIGV4cHJlc3Npb24gc2V0dXAgYW5kIHBhY2tldCBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRpZ2h0ZW5zIHZhbGlkYXRpb24gZm9yIHRoZSBjaGVja3N1bSBvZmZzZXQgKGBjc3VtX29mZnNldGApIGluIG5mdGFibGVzIHBheWxvYWQgZXhwcmVzc2lvbnMgKGBuZnRfcGF5bG9hZC5jYCkuIEl0IGFkZHMgY29udHJvbC1wbGFuZSB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KClgIGFuZCBydW50aW1lIHBhY2tldCB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKClgIHRvIGVuc3VyZSBjaGVja3N1bSBtb2RpZmljYXRpb24gdGFyZ2V0cyBsZWdpdGltYXRlIHRyYW5zcG9ydCBsYXllciBoZWFkZXJzIChUQ1AsIFVEUCwgVURQTGl0ZSwgSUNNUCwgSUNNUHY2KS5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS4gVGhlIHZhcmlhYmxlcyByZWFkIChgcHJpdi1cdTAwM2Vjc3VtX29mZnNldGAsIGBwa3QtXHUwMDNlZmxhZ3NgLCBgcGt0LVx1MDAzZXRwcm90YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IG5mdGFibGVzIGV4cHJlc3Npb24gc2V0dXAgYW5kIHBhY2tldCBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6Mjk6NTUuMDY5MTY4MTE0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2OTA0MTI1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfaW5pdFwiLFxuICAgIFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRpZ2h0ZW5zIHZhbGlkYXRpb24gZm9yIHRoZSBjaGVja3N1bSBvZmZzZXQgKGBjc3VtX29mZnNldGApIGluIG5mdGFibGVzIHBheWxvYWQgZXhwcmVzc2lvbnMgKGBuZnRfcGF5bG9hZC5jYCkuIEl0IGFkZHMgY29udHJvbC1wbGFuZSB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KClgIGFuZCBydW50aW1lIHBhY2tldCB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKClgIHRvIGVuc3VyZSBjaGVja3N1bSBtb2RpZmljYXRpb24gdGFyZ2V0cyBsZWdpdGltYXRlIHRyYW5zcG9ydCBsYXllciBoZWFkZXJzIChUQ1AsIFVEUCwgVURQTGl0ZSwgSUNNUCwgSUNNUHY2KS5cXG5cXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IHN0cnVjdCBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LiBUaGUgdmFyaWFibGVzIHJlYWQgKGBwcml2LVxcdTAwM2Vjc3VtX29mZnNldGAsIGBwa3QtXFx1MDAzZWZsYWdzYCwgYHBrdC1cXHUwMDNldHByb3RgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgbmZ0YWJsZXMgZXhwcmVzc2lvbiBzZXR1cCBhbmQgcGFja2V0IHBhcnNpbmcgbG9naWMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIGV4cHJlc3Npb25zIGluIG5mdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBuZm5ldGxpbmsgY29uZmlndXJhdGlvbiBhbmQgaW5jb21pbmcgcGFja2V0IHByb2Nlc3NpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjI5OjU1LjA2OTE3NTY4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAyMzUxOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODg2ZDAyOTFhMGFiZGMwZTk3YjRhYzUwYTMzMzBhMjkyZjdmNTViNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDEwOjI5OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xcbmluZGV4IGUzMTVkMzVmNzNkNGEuLjViNzZhZjY4YjcwNDkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuQEAgLTIwLDYgKzIwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RjcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWRwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZ3JlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pY21wLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pY21wdjYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcHY2LmhcXHUwMDNlXFxuQEAgLTEwMDgsMTEgKzEwMDksMTQgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFxcXCJyZS11cGRhdGVcXFwiIG9mIEw0IGNoZWNrc3VtICovXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdFxcdC8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbid0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXFxuLVxcdFxcdCAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuXFxuLVxcdFxcdCAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHxcXG4rXFx0XFx0ICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKSB8fFxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcXG5AQCAtMTA0Niw2ICsxMDUwLDI3IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4re1xcbitcXHRpZiAoIShwa3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHN3aXRjaCAocGt0LVxcdTAwM2V0cHJvdCkge1xcbitcXHRjYXNlIElQUFJPVE9fVENQOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xcbitcXHRjYXNlIElQUFJPVE9fVURQOlxcbitcXHRjYXNlIElQUFJPVE9fVURQTElURTpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcXG4rXFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xcbitcXHRjYXNlIElQUFJPVE9fSUNNUDpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4ge1xcbkBAIC0xMDU1LDkgKzEwODAsMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4gXFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG4gXFx0XFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTtcXG4gXFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxcbitcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4tXFx0XFx0LyogbmVpdGhlciBvZmZzZXRzIGFyZSB2YWxpZGF0ZWQsIG9mZnNldHMgY2Fubm90IGJlXFxuLVxcdFxcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cXG4rXFx0XFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcXG4rXFx0XFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6Mjk6NTUuNzcyNDQ0Nzc0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozODA2NjIyNjYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRcIixcbiAgICBcIm5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tcIixcbiAgICBcIm5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIGV4cHJlc3Npb25zIGluIG5mdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBuZm5ldGxpbmsgY29uZmlndXJhdGlvbiBhbmQgaW5jb21pbmcgcGFja2V0IHByb2Nlc3NpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODg2ZDAyOTFhMGFiZGMwZTk3YjRhYzUwYTMzMzBhMjkyZjdmNTViNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTA6Mjk6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbmluZGV4IGUzMTVkMzVmNzNkNGEuLjViNzZhZjY4YjcwNDkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG5AQCAtMTAwOCwxMSArMTAwOSwxNCBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fZmxhZ3MpIC8qIG1ha2VzIG5vIHNlbnNlLCBhc2tzIGZvciBcInJlLXVwZGF0ZVwiIG9mIEw0IGNoZWNrc3VtICovXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHQvKiBubyBmdXJ0aGVyIGNoZWNrIGhlcmU7IG9mZnNldCBjYW4ndCBiZSBuZWdhdGl2ZSBzbyBib2d1c1xuLVx0XHQgKiBvZmZzZXRzIGNhbiBjb3JydXB0IEw0IG9yIHBheWxvYWQgYnV0IG5vdCBsMyBoZWFkZXJzLlxuLVx0XHQgKiBXZSBhbHJlYWR5IGFsbG93IGFyYml0cmFyeSBsNC9pbm5lciBwYXlsb2FkIHdyaXRlcy5cbi1cdFx0ICovXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHQvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqL1xuK1x0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHxcbitcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XG4rXHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSkgfHxcbitcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbkBAIC0xMDQ2LDYgKzEwNTAsMjcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4rXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbit7XG4rXHRpZiAoIShwa3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKHBrdC1cdTAwM2V0cHJvdCkge1xuK1x0Y2FzZSBJUFBST1RPX1RDUDpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xuK1x0Y2FzZSBJUFBST1RPX1VEUDpcbitcdGNhc2UgSVBQUk9UT19VRFBMSVRFOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7XG4rXHRjYXNlIElQUFJPVE9fSUNNUFY2OlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcbitcdGNhc2UgSVBQUk9UT19JQ01QOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbiB7XG5AQCAtMTA1NSw5ICsxMDgwLDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuIFx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuK1x0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4tXHRcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxuLVx0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4rXHRcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXG4rXHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbiBcdFx0ICovXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6Mjk6NTUuNzcyNDQ3MzY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODgzODkzMTcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GVCBQYXlsb2FkIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IHRoZSBtb2RpZmljYXRpb25zIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGltcGxpY2F0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGBuZnRfcGF5bG9hZC5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLiBJIHNlZSBzb21lIGNoYW5nZXMgYW5kIGFkZGl0aW9uczogYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgLCBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AsIGFuZCBhIG5ldyBmdW5jdGlvbiBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuXG5cbk5vdywgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEknbSBnb2luZyB0byBwdWxsIHVwIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgLCBmb2N1c2luZyBhcm91bmQgbGluZSAxMDAwLiBUaGF0J3MgdGhlIHR5cGljYWwgc3BvdCB3aGVyZSBJIGNhbiBnZXQgYSBnb29kIGZlZWwgZm9yIHRoZSBvdmVyYWxsIGNvbnRleHQ6IHdobydzIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zLCB0aGUgc3RydWN0IGRlZmluaXRpb25zIHRoYXQgYXJlIGluIHBsYXksIGFuZCBhbnkgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBHZXR0aW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGFzc2Vzc21lbnQgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuIEdvdHRhIGdldCB0aGUgYmFzZWxpbmUgYmVmb3JlIG1ha2luZyBqdWRnZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6MDQuNjExMzgzMzA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTkwOlxcdFxcbiA5OTE6XFx0XFx0cmV0dXJuIG9mZnNldCBcXHUwMDNjPSBza2JfbmV0d29ya19vZmZzZXQocGt0LVxcdTAwM2Vza2IpO1xcbiA5OTI6XFx0fVxcbiA5OTM6XFx0XFxuIDk5NDpcXHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIDk5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuIDk5NjpcXHR7XFxuIDk5NzpcXHRcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZWJhc2UpIHtcXG4gOTk4OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxcbiA5OTk6XFx0XFx0XFx0YnJlYWs7XFxuMTAwMDpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbjEwMDE6XFx0XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xcbjEwMDI6XFx0XFx0XFx0XFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0KVxcbjEwMDM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDA2OlxcdFxcdFxcdH1cXG4xMDA3OlxcdFxcdFxcdHJldHVybiB0cnVlOyAvKiBydW4gdGltZSB2YWxpZGF0aW9uIHJlcXVpcmVkICovXFxuMTAwODpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuMTAwOTpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFxcXCJyZS11cGRhdGVcXFwiIG9mIEw0IGNoZWNrc3VtICovXFxuMTAxMDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAxMTpcXHRcXG4xMDEyOlxcdFxcdFxcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXFxuMTAxMzpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XFxuMTAxNDpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XFxuMTAxNTpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKSB8fFxcbjEwMTY6XFx0XFx0XFx0ICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pKVxcbjEwMTc6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTAxODpcXHRcXG4xMDE5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDIwOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbjEwMjE6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTAyMjpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XFxuMTAyMzpcXHRcXHRcXHRicmVhaztcXG4xMDI0OlxcdFxcdH1cXG4xMDI1OlxcdFxcbjEwMjY6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwMjc6XFx0fVxcbjEwMjg6XFx0XFxuMTAyOTpcXHQvKiBkbyBub3QgYWxsb3cgYXJiaXRyYXJ5IG5ldHdvcmsgaGVhZGVyIG1hbmdsaW5nIHZpYSBib2d1cyBjc3VtX29mZi5cXG4xMDMwOlxcdCAqIFdlIG9ubHkgc3VwcG9ydCBpcHY0LiAgT25seSBORlBST1RPX0lQVjQgY2FuIGJlIGNoZWNrZWQgZnJvbSBjb250cm9sXFxuMTAzMTpcXHQgKiBwbGFuZS5cXG4xMDMyOlxcdCAqL1xcbjEwMzM6XFx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbjEwMzQ6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbjEwMzU6XFx0e1xcbjEwMzY6XFx0XFx0c3dpdGNoIChwa3QtXFx1MDAzZXN0YXRlLVxcdTAwM2VwZikge1xcbjEwMzc6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuMTAzODpcXHRcXHRcXHQvKiBXYXJuaW5nOiBORlBST1RPX0lORVQgd2FzIG5vdCBjaGVja2VkOyB3ZSBjYW4ndCByZXR1cm4gdHJ1ZSBoZXJlLiAqL1xcbjEwMzk6XFx0XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xcbjEwNDA6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuMTA0MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA0MjpcXHRcXHRjYXNlIE5GUFJPVE9fQlJJREdFOlxcbjEwNDM6XFx0XFx0XFx0cmV0dXJuIHBrdC1cXHUwMDNlZXRoZXJ0eXBlID09IGh0b25zKEVUSF9QX0lQKSBcXHUwMDI2XFx1MDAyNlxcbjEwNDQ6XFx0XFx0XFx0ICAgICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xcbjEwNDU6XFx0XFx0Y2FzZSBORlBST1RPX05FVERFVjpcXG4xMDQ2OlxcdFxcdFxcdHJldHVybiBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFxcdTAwMjZcXHUwMDI2XFxuMTA0NzpcXHRcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XFxuMTA0ODpcXHRcXHR9XFxuMTA0OTpcXHRcXG4xMDUwOlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDUxOlxcdH1cXG4xMDUyOlxcdFxcbjEwNTM6XFx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbjEwNTQ6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbjEwNTU6XFx0e1xcbjEwNTY6XFx0XFx0aWYgKCEocGt0LVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pKVxcbjEwNTc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwNTg6XFx0XFxuMTA1OTpcXHRcXHRzd2l0Y2ggKHBrdC1cXHUwMDNldHByb3QpIHtcXG4xMDYwOlxcdFxcdGNhc2UgSVBQUk9UT19UQ1A6XFxuMTA2MTpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xcbjEwNjI6XFx0XFx0Y2FzZSBJUFBST1RPX1VEUDpcXG4xMDYzOlxcdFxcdGNhc2UgSVBQUk9UT19VRFBMSVRFOlxcbjEwNjQ6XFx0XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcXG4xMDY1OlxcdFxcdGNhc2UgSVBQUk9UT19JQ01QVjY6XFxuMTA2NjpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XFxuMTA2NzpcXHRcXHRjYXNlIElQUFJPVE9fSUNNUDpcXG4xMDY4OlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pO1xcbjEwNjk6XFx0XFx0fVxcbjEwNzA6XFx0XFxuMTA3MTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA3MjpcXHR9XFxuMTA3MzpcXHRcXG4xMDc0OlxcdHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuMTA3NTpcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbjEwNzY6XFx0e1xcbjEwNzc6XFx0XFx0c3dpdGNoIChwcml2LVxcdTAwM2ViYXNlKSB7XFxuMTA3ODpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcXG4xMDc5OlxcdFxcdFxcdGJyZWFrO1xcbjEwODA6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG4xMDgxOlxcdFxcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XFxuMTA4MjpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuMTA4MzpcXHRcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xcbjEwODQ6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuMTA4NTpcXHRcXHRcXHQvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZVxcbjEwODY6XFx0XFx0XFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxcbjEwODc6XFx0XFx0XFx0ICovXFxuMTA4ODpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDg5OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6MDQuNjExNTYyNjQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwMDE2MTAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBuZnRfcGF5bG9hZCBjaGVja3N1bSBmdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZnRfcGF5bG9hZC5jYCBmaWxlIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXJgIGRpcmVjdG9yeS4gTXkgYWltIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UgY29udGV4dCBvZiBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYC4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgaW52b2tlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZWlyIHJvbGUgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHBhcnRpY3VsYXJseSB3aXRoIHJlZ2FyZCB0byBjaGVja3N1bSBoYW5kbGluZyB3aXRoaW4gcGF5bG9hZCBtYW5pcHVsYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBjcml0aWNhbCBpbiBjb25maXJtaW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IE5ldGZpbHRlciBoYW5kbGVzIGNoZWNrc3Vtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYwNiwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6MDYuMzExNzI1NjczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTE3MTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0fG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk4Nj1zdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTUtXFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwNTM9c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzMtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNzQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3NS1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExMDc9c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzItXFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3MzpcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzQtXFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExOTk9c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNTctXFx0Y2FzZSBORlRfUEFZTE9BRF9DU1VNX0lORVQ6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNTg6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGN0eCwgcHJpdikpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNTktXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjA3LjAyNjkwMjU4M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1ODU1Nzk5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5GVCBQYXlsb2FkIEluaXRpYWxpemF0aW9uIGFuZCBFdmFsdWF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBmdW5jdGlvbiB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBhbmQgdG8gZG8gdGhpcywgSSB3aWxsIHR1cm4gdG8gdGhlIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGZpbGUuIEdpdmVuIHRoZSBmdW5jdGlvbnMsIEknbGwgZm9jdXMgbXkgaW52ZXN0aWdhdGlvbiB3aXRoaW4gdGhlIDExMDAtMTI3MCBsaW5lIHJhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbCBzZXR1cCBvZiB0aGUgcGF5bG9hZCBzZXRzIGFuZCBob3cgdGhleSdyZSBldmFsdWF0ZWQgd2l0aGluIHRoZSBvdmVyYWxsIE5ldGZpbHRlciBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBoaWdobGlnaHQgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgZmxhd3MgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjA5LjYxMjQ4NTg2NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0XFxuMTEwMTpcXHRcXHRpZiAocGt0LVxcdTAwM2V0cHJvdCAhPSBJUFBST1RPX1RDUClcXG4xMTAyOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjExMDM6XFx0XFxuMTEwNDpcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlb2Zmc2V0IFxcdTAwM2UgZG9mZiB8fCBwcml2LVxcdTAwM2VvZmZzZXQgKyBwcml2LVxcdTAwM2VsZW4gXFx1MDAzYz0gZG9mZjtcXG4xMTA1OlxcdH1cXG4xMTA2OlxcdFxcbjExMDc6XFx0c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbjExMDg6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4xMTA5OlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4xMTEwOlxcdHtcXG4xMTExOlxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbjExMTI6XFx0XFx0Y29uc3QgdTMyICpzcmMgPSBcXHUwMDI2cmVncy1cXHUwMDNlZGF0YVtwcml2LVxcdTAwM2VzcmVnXTtcXG4xMTEzOlxcdFxcdGludCBvZmZzZXQsIGNzdW1fb2Zmc2V0LCB2bGFuX2hsZW4gPSAwO1xcbjExMTQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbjExMTU6XFx0XFx0X193c3VtIGZzdW0sIHRzdW07XFxuMTExNjpcXHRcXG4xMTE3OlxcdFxcdHN3aXRjaCAocHJpdi1cXHUwMDNlYmFzZSkge1xcbjExMTg6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxuMTExOTpcXHRcXHRcXHRpZiAoIXNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcXG4xMTIwOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExMjE6XFx0XFxuMTEyMjpcXHRcXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbjExMjM6XFx0XFx0XFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4pKSB7XFxuMTEyNDpcXHRcXHRcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3NldF92bGFuKHNyYywgc2tiLFxcbjExMjU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwcml2LVxcdTAwM2VvZmZzZXQsIHByaXYtXFx1MDAzZWxlbixcXG4xMTI2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnZsYW5faGxlbikpXFxuMTEyNzpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTI4OlxcdFxcbjExMjk6XFx0XFx0XFx0XFx0aWYgKCF2bGFuX2hsZW4pXFxuMTEzMDpcXHRcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTEzMTpcXHRcXHRcXHR9XFxuMTEzMjpcXHRcXG4xMTMzOlxcdFxcdFxcdG9mZnNldCA9IHNrYl9tYWNfaGVhZGVyKHNrYikgLSBza2ItXFx1MDAzZWRhdGEgLSB2bGFuX2hsZW47XFxuMTEzNDpcXHRcXHRcXHRpZiAoIW5mdF9sbF93cml0ZV9vayhwa3QsIHByaXYtXFx1MDAzZWxlbiArIHByaXYtXFx1MDAzZW9mZnNldCArIG9mZnNldCkpXFxuMTEzNTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTM2OlxcdFxcdFxcdGJyZWFrO1xcbjExMzc6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG4xMTM4OlxcdFxcdFxcdGlmICghbmZ0X25oX3dyaXRlX29rKHBrdCwgcHJpdiwgc3JjKSlcXG4xMTM5OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExNDA6XFx0XFx0XFx0b2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XFxuMTE0MTpcXHRcXHRcXHRicmVhaztcXG4xMTQyOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4xMTQzOlxcdFxcdFxcdGlmICghKHBrdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSB8fCBwa3QtXFx1MDAzZWZyYWdvZmYpXFxuMTE0NDpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTQ1OlxcdFxcdFxcdGlmICghbmZ0X3RoX3dyaXRlX29rKHBrdCwgcHJpdikpXFxuMTE0NjpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTQ3OlxcdFxcdFxcdG9mZnNldCA9IG5mdF90aG9mZihwa3QpO1xcbjExNDg6XFx0XFx0XFx0YnJlYWs7XFxuMTE0OTpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4xMTUwOlxcdFxcdFxcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xcbjExNTE6XFx0XFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuMTE1MjpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTUzOlxcdFxcdFxcdGJyZWFrO1xcbjExNTQ6XFx0XFx0ZGVmYXVsdDpcXG4xMTU1OlxcdFxcdFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoMSk7XFxuMTE1NjpcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTU3OlxcdFxcdH1cXG4xMTU4OlxcdFxcbjExNTk6XFx0XFx0Y3N1bV9vZmZzZXQgPSBvZmZzZXQgKyBwcml2LVxcdTAwM2Vjc3VtX29mZnNldDtcXG4xMTYwOlxcdFxcdG9mZnNldCArPSBwcml2LVxcdTAwM2VvZmZzZXQ7XFxuMTE2MTpcXHRcXG4xMTYyOlxcdFxcdGlmICgocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCB8fCBwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbjExNjM6XFx0XFx0ICAgICgocHJpdi1cXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIFxcdTAwMjZcXHUwMDI2XFxuMTE2NDpcXHRcXHQgICAgICBwcml2LVxcdTAwM2ViYXNlICE9IE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUikgfHxcXG4xMTY1OlxcdFxcdCAgICAgc2tiLVxcdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHtcXG4xMTY2OlxcdFxcdFxcdGlmIChvZmZzZXQgKyBwcml2LVxcdTAwM2VsZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG4xMTY3OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExNjg6XFx0XFxuMTE2OTpcXHRcXHRcXHRmc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4sIDApO1xcbjExNzA6XFx0XFx0XFx0dHN1bSA9IGNzdW1fcGFydGlhbChzcmMsIHByaXYtXFx1MDAzZWxlbiwgMCk7XFxuMTE3MTpcXHRcXG4xMTcyOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxuMTE3MzpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFxcdTAwMjZcXHUwMDI2XFxuMTE3NDpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXFxuMTE3NTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTc2OlxcdFxcbjExNzc6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fZmxhZ3MgXFx1MDAyNlxcdTAwMjZcXG4xMTc4OlxcdFxcdFxcdCAgICBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKHBrdCwgc2tiLCBmc3VtLCB0c3VtKSBcXHUwMDNjIDApXFxuMTE3OTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTgwOlxcdFxcdH1cXG4xMTgxOlxcdFxcbjExODI6XFx0XFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXgob2Zmc2V0ICsgcHJpdi1cXHUwMDNlbGVuLCAwKSkgfHxcXG4xMTgzOlxcdFxcdCAgICBza2Jfc3RvcmVfYml0cyhza2IsIG9mZnNldCwgc3JjLCBwcml2LVxcdTAwM2VsZW4pIFxcdTAwM2MgMClcXG4xMTg0OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjExODU6XFx0XFxuMTE4NjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fU0NUUCBcXHUwMDI2XFx1MDAyNlxcbjExODc6XFx0XFx0ICAgIHBrdC1cXHUwMDNldHByb3QgPT0gSVBQUk9UT19TQ1RQIFxcdTAwMjZcXHUwMDI2XFxuMTE4ODpcXHRcXHQgICAgc2tiLVxcdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbjExODk6XFx0XFx0XFx0aWYgKHBrdC1cXHUwMDNlZnJhZ29mZiA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuMTE5MDpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHNrYiwgbmZ0X3Rob2ZmKHBrdCkpKVxcbjExOTE6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE5MjpcXHRcXHR9XFxuMTE5MzpcXHRcXG4xMTk0OlxcdFxcdHJldHVybjtcXG4xMTk1OlxcdGVycjpcXG4xMTk2OlxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcXG4xMTk3OlxcdH1cXG4xMTk4OlxcdFxcbjExOTk6XFx0c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDowOS42MTI2MjAzNjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTkxNDkwODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipLY29uZmlnIGFuZCBNYWtlZmlsZXM6IENoZWNraW5nIHRoZSBQcmVyZXF1aXNpdGVzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIGBuZnRfcGF5bG9hZC5jYCBhcmUgYWxsIGluIHBsYWNlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIHRoYXQgS2NvbmZpZyBmaWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBuYXZpZ2F0ZSBvdmVyIHRvIGBuZXQvbmV0ZmlsdGVyL2AgYW5kIHRha2UgYSBsb29rIGF0IGl0LiBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgSSBoYXZlbid0IGNvbnNpZGVyZWQuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGZlYXR1cmVzIGFyZSBlbmFibGVkLiBUaGVuIEknbGwgZGl2ZSBpbnRvIHRoZSBNYWtlZmlsZSBpbiB0aGF0IHNhbWUgZGlyZWN0b3J5LCBgbmV0L25ldGZpbHRlci9gLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyB0byBzZWUgaG93IGBuZnRfcGF5bG9hZC5jYCBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gTm8gc3VycHJpc2VzOyBqdXN0IG1ha2Ugc3VyZSB0aGUgYnVpbGQgcHJvY2VzcyBpcyBzZXQgdXAgY29ycmVjdGx5IGFuZCBub3RoaW5nJ3MgYmVlbiBvdmVybG9va2VkLiBJJ2xsIGZvY3VzIG9uIGFueXRoaW5nIHJlbGF0aW5nIHRvIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBtb2R1bGVzLiBJdCdzIGFsbCBhYm91dCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBrbm93cyB3aGF0IEknbSBleHBlY3RpbmcgYW5kIGV2ZXJ5dGhpbmcgd2lsbCB3b3JrIGFzIHBsYW5uZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjExLjgwNDExNTM0NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMjc0Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVxcdFxcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4OTpcXHRcXHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkwLVxcdFxcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcXFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTEzNT1zdGF0aWMgaW5saW5lIHZvaWQgbmZ0X3RyYWNlX3ZlcmRpY3QoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMTQzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoxNDQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfZmFzdF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMTQ1LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTE0Ny17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjE0ODpcXHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDktXFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTIwMz1zdGF0aWMgdm9pZCBleHByX2NhbGxfb3BzX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIxNy1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MjE4OlxcdFgoZSwgbmZ0X3BheWxvYWRfZXZhbCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIxOS1cXHRYKGUsIG5mdF9jbXBfZXZhbCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjUwPW5mdF9kb19jaGFpbihzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgdm9pZCAqcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yODItXFx0XFx0XFx0XFx0bmZ0X2JpdHdpc2VfZmFzdF9ldmFsKGV4cHIsIFxcdTAwMjZyZWdzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MjgzOlxcdFxcdFxcdGVsc2UgaWYgKGV4cHItXFx1MDAzZW9wcyAhPSBcXHUwMDI2bmZ0X3BheWxvYWRfZmFzdF9vcHMgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6Mjg0OlxcdFxcdFxcdFxcdCAhbmZ0X3BheWxvYWRfZmFzdF9ldmFsKGV4cHIsIFxcdTAwMjZyZWdzLCBwa3QpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yODUtXFx0XFx0XFx0XFx0ZXhwcl9jYWxsX29wc19ldmFsKGV4cHIsIFxcdTAwMjZyZWdzLCBwa3QpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTM1Mj1zdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgKm5mdF9iYXNpY190eXBlc1tdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTM1Ny1cXHRcXHUwMDI2bmZ0X2J5dGVvcmRlcl90eXBlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzozNTg6XFx0XFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTM1OS1cXHRcXHUwMDI2bmZ0X2R5bnNldF90eXBlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9MTE0PXVuaW9uIG5mdF9jbXBfb2ZmbG9hZF9kYXRhIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTExOS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYzoxMjA6c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfbjJoKHVuaW9uIG5mdF9jbXBfb2ZmbG9hZF9kYXRhICpkYXRhLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTEyMS1cXHRcXHRcXHQgICAgY29uc3QgdTggKnZhbCwgdTMyIGxlbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTEzOT1zdGF0aWMgaW50IF9fbmZ0X2NtcF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTE1Mi1cXHRpZiAocmVnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9PRkZMT0FEX0ZfTkVUV09SSzJIT1NUKSB7XFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTUzOlxcdFxcdG5mdF9wYXlsb2FkX24yaChcXHUwMDI2X2RhdGEsICh1OCAqKVxcdTAwMjZwcml2LVxcdTAwM2VkYXRhLCByZWctXFx1MDAzZWxlbik7XFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTU0OlxcdFxcdG5mdF9wYXlsb2FkX24yaChcXHUwMDI2X2RhdGFtYXNrLCAodTggKilcXHUwMDI2cmVnLVxcdTAwM2VtYXNrLCByZWctXFx1MDAzZWxlbik7XFxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMTU1LVxcdFxcdGRhdGEgPSAodTggKilcXHUwMDI2X2RhdGE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jPTM2PXN0cnVjdCBfX25mdF9leHByIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzgtXFx0dW5pb24ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM6Mzk6XFx0XFx0c3RydWN0IG5mdF9wYXlsb2FkXFx0cGF5bG9hZDtcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTQwLVxcdFxcdHN0cnVjdCBuZnRfbWV0YVxcdFxcdG1ldGE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jPTI5MD1zdGF0aWMgdm9pZCBuZnRfaW5uZXJfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMjk1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM6Mjk2OlxcdGlmIChuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy0yOTctXFx0XFx0Z290byBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTMwNC1cXHRjYXNlIE5GVF9JTk5FUl9FWFBSX1BBWUxPQUQ6XFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYzozMDU6XFx0XFx0bmZ0X3BheWxvYWRfaW5uZXJfZXZhbCgoc3RydWN0IG5mdF9leHByICopXFx1MDAyNnByaXYtXFx1MDAzZWV4cHIsIHJlZ3MsIHBrdCwgXFx1MDAyNnR1bl9jdHgpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzA2LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI4LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9yZWJ1aWxkX3ZsYW5faGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBtYWNfb2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTQzPXN0YXRpYyBib29sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ0Om5mdF9wYXlsb2FkX2NvcHlfdmxhbih1MzIgKmQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHUxNiBvZmZzZXQsIHU4IGxlbilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3JlYnVpbGRfdmxhbl9oZHIoc2tiLCBtYWNfb2ZmLCBcXHUwMDI2dmV0aCkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzU6c3RhdGljIGludCBfX25mdF9wYXlsb2FkX2lubmVyX29mZnNldChzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzOS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTQwOmludCBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0MS17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0Mi1cXHRpZiAoIShwa3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1BLVElORk9fSU5ORVIpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE0MzpcXHQgICAgX19uZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQoKHN0cnVjdCBuZnRfcGt0aW5mbyAqKXBrdCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDQtXFx0XFx0cmV0dXJuIC0xO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0OC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTQ5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QodTMyIG9mZnNldCwgdTMyIGxlbilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTUwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNTktXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE2MDp2b2lkIG5mdF9wYXlsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNjEtXFx0XFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE2My17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE2NDpcXHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNjUtXFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE3Ny1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNzg6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4pKSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE3OTpcXHRcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX2NvcHlfdmxhbihkZXN0LCBza2IsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE4MC1cXHRcXHRcXHRcXHRcXHRcXHQgICBwcml2LVxcdTAwM2VvZmZzZXQsIHByaXYtXFx1MDAzZWxlbikpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTk0LVxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxOTU6XFx0XFx0b2Zmc2V0ID0gbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE5Ni1cXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMTEtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxMjpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3BheWxvYWRfcG9saWN5W05GVEFfUEFZTE9BRF9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjEzLVxcdFtORlRBX1BBWUxPQURfU1JFR11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMjItXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIyMzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjI0LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjI2LXtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjI3OlxcdHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyOC1cXHR1MzIgb2Zmc2V0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjQ0OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNDUtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgYm9vbCByZXNldClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjQ2LXtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjQ3OlxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0OC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNTktXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI2MDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNjEtXFx0XFx0XFx0XFx0ICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc3LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNzg6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc5LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI4MDpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjgxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODUtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3NvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI4NjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgRVRIX0FMRU4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODctXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfZGVzdCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5MzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgRVRIX0FMRU4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5OS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfcHJvdG8pOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMDA6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAxLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDctXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMDg6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA5LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTUtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8pOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMTY6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE3LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpICsgc2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMyNDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjUtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMzMi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzMzOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMzNC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNDc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ4LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM0OTpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzUwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTQtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzU1OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzYzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBkYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM2NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzY1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNzM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3NC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozODc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4OC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozODk6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzk0LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIHNhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzk1OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwMy1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBkYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQwNDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDA1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQxMzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fdTgpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDE0LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQyNzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbmgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDI5OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNC1cXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM1OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM2LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzctXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM4OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzOS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NDYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ0NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDk6XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1NC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIHNvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ1NTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTYtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2MS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NjI6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDYzLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NzQtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ3NTpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Nzc6XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00Nzgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIHNvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4MzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4OS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0OTA6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDkxLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDItXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwMzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDQtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTA1OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMC1cXHRjYXNlIElQUFJPVE9fVENQOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MTE6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3AoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEyLVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTMtXFx0Y2FzZSBJUFBST1RPX1VEUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTE0OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxNS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjItXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUyMzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWQoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyNi17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUyNzpcXHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjgtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzEtXFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzMjpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMy1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM0LVxcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzNTpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNi1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM3LVxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM4OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM5LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU0Ni1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ4OlxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ5OlxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUwOlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTE6XFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MjpcXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUzOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTQtfTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTU1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTY6Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9mYXN0X29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU3OlxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU4OlxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU5OlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjA6XFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MTpcXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYyOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjMtfTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTY0LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjU6dm9pZCBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjYtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2OC17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2OTpcXHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NzAtXFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYxNS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjE2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfaW5uZXJfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MTctXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjE5LXtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjIwOlxcdHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYyMS1cXHR1MzIgYmFzZSwgb2Zmc2V0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY1MC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjUxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2lubmVyX29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjUyOlxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjUzOlxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjU0OlxcdC5pbml0XFx0XFx0PSBuZnRfcGF5bG9hZF9pbm5lcl9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTU6XFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1NjpcXHQvKiBkaXJlY3QgY2FsbCB0byBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKCkuICovXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY1Ny19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTY1OT1zdGF0aWMgaW5saW5lIHZvaWQgbmZ0X2NzdW1fcmVwbGFjZShfX3N1bTE2ICpzdW0sIF9fd3N1bSBmc3VtLCBfX3dzdW0gdHN1bSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NjUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY2NjpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF91ZHBfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02Njcte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY3Ni1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Njc3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfbDRjc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjc4LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02ODgtXFx0Y2FzZSBJUFBST1RPX1VEUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Njg5OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfdWRwX2NoZWNrc3VtKHNrYiwgbmZ0X3Rob2ZmKHBrdCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02OTAtXFx0XFx0XFx0cmV0dXJuIC0xO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcwNS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzA2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcwNy17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzE4LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3MTk6c3RhdGljIGludCBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MjAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcyOC1cXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzI5OlxcdGlmIChuZnRfcGF5bG9hZF9sNGNzdW1fb2Zmc2V0KHBrdCwgc2tiLCBcXHUwMDI2bDRjc3VtX29mZnNldCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MzAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzU1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NTY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyICpzcmMsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc1Ny1cXHRcXHRcXHRcXHQgX193c3VtIGZzdW0sIF9fd3N1bSB0c3VtLCBpbnQgY3N1bV9vZmZzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzcxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NzI6c3RydWN0IG5mdF9wYXlsb2FkX3NldCB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc3MzpcXHRlbnVtIG5mdF9wYXlsb2FkX2Jhc2VzXFx0YmFzZTo4O1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NzQtXFx0dTE2XFx0XFx0XFx0b2Zmc2V0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc4Mi0vKiBUaGlzIGlzIG5vdCBzdHJ1Y3Qgdmxhbl9oZHIuICovXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc4MzpzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03ODQtXFx0X19iZTE2XFx0XFx0XFx0aF92bGFuX3Byb3RvO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTc4OD1zdGF0aWMgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3ODk6bmZ0X3BheWxvYWRfc2V0X3ZsYW4oY29uc3QgdTMyICpzcmMsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiBvZmZzZXQsIHU4IGxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzkwLVxcdFxcdCAgICAgaW50ICp2bGFuX2hsZW4pXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc5MS17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc5MjpcXHRzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIgKnZsYW5oO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03OTMtXFx0X19iZTE2IHZsYW5fcHJvdG87XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODA2LVxcdFxcdH0gZWxzZSBpZiAobGVuID09IDQpIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODA3OlxcdFxcdFxcdHZsYW5oID0gKHN0cnVjdCBuZnRfcGF5bG9hZF92bGFuX2hkciAqKXNyYztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODA4LVxcdFxcdFxcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuaC1cXHUwMDNlaF92bGFuX3Byb3RvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTgzNz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfaXA0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo4Mzg6XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODM5LVxcdFxcdFxcdFxcdGNvbnN0IHUzMiAqc3JjKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTg4Mz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfaXA2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo4ODQ6XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODg1LVxcdFxcdFxcdFxcdGNvbnN0IHUzMiAqc3JjKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkwNC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTA1OnN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19hcnAoY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTA2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05MjQ9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX25ldGRldihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTI1OlxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkyNi1cXHRcXHRcXHRcXHQgICBjb25zdCB1MzIgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05NDU9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2JyaWRnZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTQ2OlxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk0Ny1cXHRcXHRcXHRcXHQgICBjb25zdCB1MzIgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05NjM9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5NjQ6XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk2NS1cXHRcXHRcXHQgICAgY29uc3QgdTMyICpzcmMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTg2PXN0YXRpYyBib29sIG5mdF9sbF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgaW50IG9mZnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTMtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk5NDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk5NTpcXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5Ni17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTAzMi0gKi9cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTAzMzpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwMzQtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNTItXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNTM6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDU0LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDczLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDc0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNzU6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3Ni17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4MC1cXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgxOlxcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwODItXFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgzOlxcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwODQtXFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTA5Nj1zdGF0aWMgYm9vbCBuZnRfdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwOTc6XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwOTgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMDYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMDc6c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTExMC17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMTE6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMTItXFx0Y29uc3QgdTMyICpzcmMgPSBcXHUwMDI2cmVncy1cXHUwMDNlZGF0YVtwcml2LVxcdTAwM2VzcmVnXTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTIyLVxcdFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMjM6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4pKSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMjQ6XFx0XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9zZXRfdmxhbihzcmMsIHNrYixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEyNS1cXHRcXHRcXHRcXHRcXHRcXHQgIHByaXYtXFx1MDAzZW9mZnNldCwgcHJpdi1cXHUwMDNlbGVuLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNDktXFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNTA6XFx0XFx0b2Zmc2V0ID0gbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNTEtXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3Mi1cXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTczOlxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3NDpcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzUtXFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3Ny1cXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncyBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTc4OlxcdFxcdCAgICBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKHBrdCwgc2tiLCBmc3VtLCB0c3VtKSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzktXFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE4OS1cXHRcXHRpZiAocGt0LVxcdTAwM2VmcmFnb2ZmID09IDAgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE5MDpcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHNrYiwgbmZ0X3Rob2ZmKHBrdCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTkxLVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTgtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExOTk6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjAwLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjAzLVxcdHUzMiBjc3VtX29mZnNldCwgb2Zmc2V0LCBjc3VtX3R5cGUgPSBORlRfUEFZTE9BRF9DU1VNX05PTkU7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyMDQ6XFx0c3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyMDUtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU3LVxcdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjU4OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU5LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzktXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyODA6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjgxLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgYm9vbCByZXNldClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI4Mi17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyODM6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyODQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI5OS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMDpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzAxOlxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMjpcXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkX3NldCkpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzAzOlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwNDpcXHQuaW5pdFxcdFxcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDU6XFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzA2LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyAqXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDk6bmZ0X3BheWxvYWRfc2VsZWN0X29wcyhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzEwLVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMxMS17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMTI6XFx0ZW51bSBuZnRfcGF5bG9hZF9iYXNlcyBiYXNlO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzEzLVxcdHVuc2lnbmVkIGludCBvZmZzZXQsIGxlbjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzM0LVxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzM1OlxcdFxcdHJldHVybiBcXHUwMDI2bmZ0X3BheWxvYWRfc2V0X29wcztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMzNi1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1MC1cXHQgICAgYmFzZSAhPSBORlRfUEFZTE9BRF9MTF9IRUFERVIgXFx1MDAyNlxcdTAwMjYgYmFzZSAhPSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVIpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTE6XFx0XFx0cmV0dXJuIFxcdTAwMjZuZnRfcGF5bG9hZF9mYXN0X29wcztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1Mi1cXHRlbHNlXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTM6XFx0XFx0cmV0dXJuIFxcdTAwMjZuZnRfcGF5bG9hZF9vcHM7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTQtfVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzU1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU2OnN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9wYXlsb2FkX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1Ny1cXHQubmFtZVxcdFxcdD0gXFxcInBheWxvYWRcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU4OlxcdC5zZWxlY3Rfb3BzXFx0PSBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU5OlxcdC5pbm5lcl9vcHNcXHQ9IFxcdTAwMjZuZnRfcGF5bG9hZF9pbm5lcl9vcHMsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNjA6XFx0LnBvbGljeVxcdFxcdD0gbmZ0X3BheWxvYWRfcG9saWN5LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzYxLVxcdC5tYXhhdHRyXFx0PSBORlRBX1BBWUxPQURfTUFYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDoxMS45MjUzOTY0NzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzEzODE3NDAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIG5mX3RhYmxlcyBhbmQgbmZ0X3BheWxvYWQgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgbmZfdGFibGVzYCBhbmQgc3BlY2lmaWNhbGx5IGBuZnRfcGF5bG9hZGAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcywgYW5kIHdoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IGdyYXNwIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuIEknbSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB0byB3YXRjaCBvdXQgZm9yLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIG9uIHRoZSBLY29uZmlnIHRyZWUsIGJ1dCBJIGFudGljaXBhdGUgaGF2aW5nIHRvIHRyYWNlIHRocm91Z2ggYSBmZXcgaW5jbHVkZXMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGdvYWwgaXMgYSBxdWljayBhbmQgZGlydHkgY29uZmlndXJhdGlvbiBvdmVydmlldyBvZiB0aGVzZSBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MzMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDoxNS4wNjM1NzU4NzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzYyNDA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9UQUJMRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNj1jb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4LVxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM5OlxcdGRlcGVuZHMgb24gTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwLVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3MTppZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3NDpcXHRzZWxlY3QgTkZfVEFCTEVTX0lQVjRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDc1OlxcdHNlbGVjdCBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzYtXFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBtaXhlZCBJUHY0L0lQdjYgdGFibGVzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTU1MD1jb25maWcgTkZUX05BVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1Mi1cXHRzZWxlY3QgTkZfTkFUXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU1MzpcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JUFY0IHx8IE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1NC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBuYXQgbW9kdWxlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTU4Nj1jb25maWcgTkZUX1JFSkVDVF9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU4NzpcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU4OC1cXHRkZWZhdWx0IE5GVF9SRUpFQ1RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MDg9Y29uZmlnIE5GVF9GSUJfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MDk6XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MTAtXFx0ZGVwZW5kcyBvbiBORlRfRklCX0lQVjRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MjU9Y29uZmlnIE5GVF9TT0NLRVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjctXFx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyODpcXHRzZWxlY3QgTkZfU09DS0VUX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDA9Y29uZmlnIE5GVF9UUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDItXFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0MzpcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ0LVxcdHNlbGVjdCBORl9UUFJPWFlfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDU6XFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Ni1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQ5PWNvbmZpZyBORlRfU1lOUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY2MDppZiBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2MS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02ODk9Y29uZmlnIE5GVF9SRUpFQ1RfTkVUREVWXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjk4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2OTk6ZW5kaWYgIyBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAxOmVuZGlmICMgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MTE9Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTQtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzE1OlxcdGRlcGVuZHMgb24gTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxNi1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjE1LjE4NzIxMDEyN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjcwMTc0ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgbmZ0X3BheWxvYWQub2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYG5mdF9wYXlsb2FkLm9gIGdldHMgY29tcGlsZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCBwbGFjZSBJJ2QgbG9vayBpcyB0aGUga2VybmVsJ3MgYG5ldGZpbHRlcmAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYXQgdGhlIGBNYWtlZmlsZWAuIFRoYXQncyB0aGUgdHlwaWNhbCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgc3Vic3lzdGVtLiBJJ20gYXNzdW1pbmcgaXQncyBzdHJ1Y3R1cmVkIGluIGEgc3RhbmRhcmQgd2F5LCBzbyB0aGUgTWFrZWZpbGUgaW4gdGhhdCBsb2NhdGlvbiBzaG91bGQgaGF2ZSB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24sIEknbGwgZ28gY2hlY2sgdGhhdCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA0NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjE3LjQ1NzM5MDI1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMjc0Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX3RhYmxlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODQ9b2JqLSQoQ09ORklHX05GX0RVUF9ORVRERVYpXFx0Kz0gbmZfZHVwX25ldGRldi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04NS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg2OiMgbmZfdGFibGVzXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4NzpuZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODg6XFx0XFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg5LVxcdFxcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcXFxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MS1cXHRcXHQgIG5mdF9jb3VudGVyLm8gbmZ0X29ianJlZi5vIG5mdF9pbm5lci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjkyOlxcdFxcdCAgbmZ0X2NoYWluX3JvdXRlLm8gbmZfdGFibGVzX29mZmxvYWQubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05My1cXHRcXHQgIG5mdF9zZXRfaGFzaC5vIG5mdF9zZXRfYml0bWFwLm8gbmZ0X3NldF9yYnRyZWUubyBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTk3PWlmbmRlZiBDT05GSUdfVU1MXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5ODpuZl90YWJsZXMtb2JqcyArPSBuZnRfc2V0X3BpcGFwb19hdngyLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTk5LWVuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEwMz1pZmRlZiBDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkVcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEwNDpuZl90YWJsZXMtb2JqcyArPSBuZnRfY3RfZmFzdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMDUtZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEwNj1lbmRpZlxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTA3LVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTA4Om9iai0kKENPTkZJR19ORl9UQUJMRVMpXFx0XFx0Kz0gbmZfdGFibGVzLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEwOS1vYmotJChDT05GSUdfTkZUX0NPTVBBVClcXHQrPSBuZnRfY29tcGF0Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTM1PW9iai0kKENPTkZJR19ORlRfTkFUKVxcdFxcdCs9IG5mdF9jaGFpbl9uYXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTM2LVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTM3OiMgbmZfdGFibGVzIG5ldGRldlxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTM4LW9iai0kKENPTkZJR19ORlRfRFVQX05FVERFVilcXHQrPSBuZnRfZHVwX25ldGRldi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjE3LjY0MDY3NTQyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDcwNDA0NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIG5ldGZpbHRlci9uZl90YWJsZXMgUGF5bG9hZCBDaGVja3N1bSBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIHRoZSBgQ09ORklHX05GX1RBQkxFU2AgYnVpbGQgY2hhaW4sIGl0IGxvb2tzIGxpa2UgdGhpcyBjZW50ZXJzIGFyb3VuZCBgbmZ0X3BheWxvYWQub2AsIHdoaWNoIGlzIGluY2x1ZGVkIHdoZW4gd2UgYnVpbGQgd2l0aCBgTkZfVEFCTEVTYC4gTGV0J3MgY29uZmlybSB0aGF0IGBORl9UQUJMRVNgIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgaGVyZS5cblxuUmlnaHQsIHNvIGxldCdzIGRpZyBpbnRvIHRoZSBjaGFuZ2VzIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGBjc3VtX29mZnNldGAgd2l0aGluIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KClgLiBQcmV2aW91c2x5LCB3aGVuIGBwcml2LVx1MDAzZWJhc2VgIHdhcyBgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUmAsIGl0IGp1c3QgY2hlY2tlZCBgcHJpdi1cdTAwM2Vjc3VtX2ZsYWdzYC4gTm93LCB3ZSdyZSBzZWVpbmcgc3BlY2lmaWMgY2hlY2tzOiBpdCdzIG1ha2luZyBzdXJlIGBjc3VtX29mZnNldGAgaXMgYSB2YWxpZCBjaGVja3N1bSBvZmZzZXQgZm9yIGVpdGhlciBUQ1AsIFVEUCwgSUNNUCwgb3IgSUNNUHY2IGhlYWRlcnMuXG5cblRoZW4sIHRoZXJlJ3MgYSBuZXcgZnVuY3Rpb24sIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKClgLCB3aGljaCBsb29rcyB0byBiZSB0aGUga2V5LiBUaGlzIGNoZWNrcywgYXQgcGFja2V0IGV2YWx1YXRpb24gdGltZSwgaWYgdGhlIHdyaXRlIG9wZXJhdGlvbiBpcyBva2F5LiBJdCBsb29rcyBsaWtlIGl0IG9ubHkgcmV0dXJucyB0cnVlIGlmIHRoZSBwYWNrZXQgaGFzIGFuIEw0IHByb3RvY29sIGFuZCB0aGUgYGNzdW1fb2Zmc2V0YCBtYXRjaGVzIHRoZSBhcHByb3ByaWF0ZSBjaGVja3N1bSBmaWVsZCBmb3IgVENQLCBVRFAsIElDTVB2Niwgb3IgSUNNUC4gVGhlIG9sZGVyIGNvZGUgdXNlZCB0byBmYWxsIHRocm91Z2ggdG8gYSBkaWZmZXJlbnQgcGF0aC5cblxuVGhpcyBpcyByZWFjaGFibGUgY29kZSwgbm8gZG91YnQuIFRoZSBgbmZ0X3BheWxvYWRgIGZ1bmN0aW9uYWxpdHkgaXMgcGFydCBvZiBuZXRmaWx0ZXIncyBuZl90YWJsZXMsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgKG5mbmV0bGluaykuIEFuZCwgaW1wb3J0YW50bHksIHRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHVucHJpdmlsZWdlZCB1c2VyIG5hbWVzcGFjZXMuIFRoaXMgbWVhbnMgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb250cm9sIHBsYW5lIHZhbGlkYXRpb24gYW5kIGRhdGEgcGxhbmUgcGFja2V0IGV2YWx1YXRpb24uIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaXMgYSBjbGVhciB5ZXMuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGJvdGggY29udHJvbCBwbGFuZSB2YWxpZGF0aW9uIGFuZCBkYXRhIHBsYW5lIHBhY2tldCBldmFsdWF0aW9uLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHNwZWNpZmljIHN5bWJvbHMuIFdlIGhhdmUgYG5mdF9wYXlsb2FkX3NldF9pbml0YCAod2hpY2ggY2FsbHMgdGhlIHN0YXRpYyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGApLCBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgaXRzZWxmIChzdGF0aWMsIGNhbGxlZCBieSBpbml0KSwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgIChhbm90aGVyIHN0YXRpYyBmdW5jdGlvbiksIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCAoYWxzbyBzdGF0aWMsIGNhbGxlZCBkdXJpbmcgZXZhbHVhdGlvbiksIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIHdoaWNoIGlzIGEgbm9uLXN0YXRpYyBldmFsdWF0aW9uIGNhbGxiYWNrIHRoYXQgY2FsbHMgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUga2VybmVsICpkbyogaGF2ZSBzeW1ib2xzIGluIGB2bWxpbnV4YCwgZXNwZWNpYWxseSB3aXRoIG1vZGVybiBrZXJuZWwgYnVpbGRzIGFuZCBzdGFuZGFyZCBjb21waWxlciBmbGFncywgc28gbG9uZyBhcyB0aGV5IGFyZW4ndCBpbmxpbmVkLiBUaGlzIG1lYW5zIHRoZXNlIGFyZSBhbGwgdmlhYmxlIHN5bWJvbHMgdG8gY29uc2lkZXIuXG5cbkZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zLCBsZXQncyBrZWVwIHRoZSBmb2N1cyBvbiBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBpbXBsZW1lbnQgb3IgYWx0ZXIgdGhlIG5ldyBsb2dpYzogYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgLCBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AsIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYG5mdF9wYXlsb2FkX3NldF9pbml0YCwgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIFRoZXNlIGFyZSBhbGwgdmVyeSBzcGVjaWZpYyB0byBuZl90YWJsZXMgcGF5bG9hZCBleHByZXNzaW9ucywgbm90IHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzLlxuXG5GaW5hbGx5LCB3ZSBuZWVkIHRvIGNoZWNrIGNvbmZpZyBkZXBlbmRlbmNpZXMuIGBDT05GSUdfTkZfVEFCTEVTYCAod2hpY2ggd2UgY2FuIHN0cmlwIHRvIHNpbXBseSBgTkZfVEFCTEVTYCkgaXMgY2xlYXJseSB0aGUgbWFpbiBvbmUsIGJ1dCBuZl90YWJsZXMgaW4gdHVybiBkZXBlbmRzIG9uIGBDT05GSUdfTkVURklMVEVSYCBhbmQgdGhlcmVmb3JlIGBORVRgLiBMZXQncyBkb3VibGUtY2hlY2sgdGhpcyBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODAyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDoyNi43MTEwODU0NjNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDIyNjE1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDoyNi45MTUzMTcwNjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUwMjU5ODYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE5GX1RBQkxFUyBEZXBlbmRlbmN5IFRyZWUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIG9mIGBORl9UQUJMRVNgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIGVhc2llc3QgYW5kIG1vc3QgZGlyZWN0IHdheSB0byBkbyB0aGlzLCBpbiBteSBleHBlcmllbmNlLCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZS4gTGV0J3Mgc2VlLi4uIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHNvdW5kcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhhdCBgTkZfVEFCTEVTYCBpcyBvYnZpb3VzbHkgcmVsYXRlZCB0byBOZXRmaWx0ZXIuIE5vdywgSSB2YWd1ZWx5IHJlY2FsbCB0aGF0IHRoaXMgaXMgdXN1YWxseSBoYW5kbGVkIHdpdGhpbiB0aGUgYnJvYWRlciBLY29uZmlnIHN0cnVjdHVyZSwgYW5kIHRoYXQgcGFyZW50IGRlcGVuZGVuY2llcyBhcmUgY2xlYXJseSBsYWlkIG91dCBpbiB0aGUgZmlsZS4gU2luY2UgSSBoYXZlIGEgcHJldHR5IGdvb2QgaWRlYSBvZiB0aGUgZ2VuZXJhbCBvcmdhbml6YXRpb24gb2YgdGhpcywgSSdsbCBob25lIGluIGFyb3VuZCBsaW5lIDQ1MCwgYXMgdGhhdCBvZnRlbiBzZWVtcyB0byBiZSB0aGUgcmlnaHQgc2VjdGlvbiBmb3IgTmV0ZmlsdGVyIGNvcmUgY29tcG9uZW50cy4gSG9wZWZ1bGx5LCB0aGUgZmlsZSBpcyB3ZWxsLWNvbW1lbnRlZCwgYW5kIEkgY2FuIHF1aWNrbHkgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGJlZm9yZSBJIGNhbiBldmVuIGVuYWJsZSBgTkZfVEFCTEVTYCBpdHNlbGYuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDoyOS40MTc5MTg5ODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDU6XFx0XFx0Ym9vbFxcbiA0NDY6XFx0XFxuIDQ0NzpcXHRjb25maWcgTkZfTkFUX09WU1xcbiA0NDg6XFx0XFx0Ym9vbFxcbiA0NDk6XFx0XFxuIDQ1MDpcXHRjb25maWcgTkVURklMVEVSX1NZTlBST1hZXFxuIDQ1MTpcXHRcXHR0cmlzdGF0ZVxcbiA0NTI6XFx0XFxuIDQ1MzpcXHRlbmRpZiAjIE5GX0NPTk5UUkFDS1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRjb25maWcgTkZfVEFCTEVTXFxuIDQ1NjpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gNDU3OlxcdFxcdHNlbGVjdCBORVRfQ1JDMzJDXFxuIDQ1ODpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbiA0NTk6XFx0XFx0aGVscFxcbiA0NjA6XFx0XFx0ICBuZnRhYmxlcyBpcyB0aGUgbmV3IHBhY2tldCBjbGFzc2lmaWNhdGlvbiBmcmFtZXdvcmsgdGhhdCBpbnRlbmRzIHRvXFxuIDQ2MTpcXHRcXHQgIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHtpcCxpcDYsYXJwLGVifV90YWJsZXMgaW5mcmFzdHJ1Y3R1cmUuIEl0XFxuIDQ2MjpcXHRcXHQgIHByb3ZpZGVzIGEgcHNldWRvLXN0YXRlIG1hY2hpbmUgd2l0aCBhbiBleHRlbnNpYmxlIGluc3RydWN0aW9uLXNldFxcbiA0NjM6XFx0XFx0ICAoYWxzbyBrbm93biBhcyBleHByZXNzaW9ucykgdGhhdCB0aGUgdXNlcnNwYWNlICduZnQnIHV0aWxpdHlcXG4gNDY0OlxcdFxcdCAgKGh0dHBzOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvbmZ0YWJsZXMpIHVzZXMgdG8gYnVpbGQgdGhlXFxuIDQ2NTpcXHRcXHQgIHJ1bGUtc2V0LiBJdCBhbHNvIGNvbWVzIHdpdGggdGhlIGdlbmVyaWMgc2V0IGluZnJhc3RydWN0dXJlIHRoYXRcXG4gNDY2OlxcdFxcdCAgYWxsb3dzIHlvdSB0byBjb25zdHJ1Y3QgbWFwcGluZ3MgYmV0d2VlbiBtYXRjaGluZ3MgYW5kIGFjdGlvbnNcXG4gNDY3OlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlIGxvb2t1cHMuXFxuIDQ2ODpcXHRcXG4gNDY5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6MjkuNDE4MDgzMjg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNDM4MjMxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBORl9UQUJMRVNgIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCBob3cgd2UncmUgZ29pbmcgdG8gYXBwcm9hY2ggZnV6emluZy4gRmlyc3QsIGBORl9UQUJMRVNgIHJlbGllcyBvbiBgTkVUYCBhbmQgYE5FVEZJTFRFUmAsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYE5GX1RBQkxFU19JTkVUYCwgYE5GX1RBQkxFU19JUFY0YCwgb3IgYE5GX1RBQkxFU19JUFY2YCBhcmUgcG9zc2libHkgcmVsZXZhbnQsIGJ1dCBgTkZfVEFCTEVTYCBpdHNlbGYgZGVmaW5pdGVseSBpbmNsdWRlcyBgbmZ0X3BheWxvYWQub2AuXG5cbk5vdywgZm9yIGBzZXQtcmVzdWx0c2AsIGxldCdzIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwLiBJdCdzIG1hcmtlZCBhcyBgV29ydGhGdXp6aW5nYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aGlzIHBhdGNoIHRvdWNoZXMgYG5mdF9wYXlsb2FkLmNgIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLiBJdCdzIGFkZGluZyB2YWxpZGF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldHMgaW4gYm90aCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHJ1bnRpbWUgY29kZSwgc3BlY2lmaWNhbGx5IGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgLCBhbmQgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLiBUaGlzIGxvZ2ljIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggbmV0bGluayBhbmQgcGFja2V0IHByb2Nlc3NpbmcuIFRoYXQgbWVhbnMgaXQncyBkZWZpbml0ZWx5IGEgdmlhYmxlIHRhcmdldC5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaXMgc3BvdCBvbiwgaW5jbHVkaW5nIHRob3NlIHZhbGlkYXRpb24gZnVuY3Rpb25zLCBhbG9uZyB3aXRoIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIFRoaXMgY292ZXJzIHRoZSBrZXkgZW50cnkgcG9pbnRzLiBGaW5hbGx5LCB3ZSdyZSBlbmFibGluZyBgTkZfVEFCTEVTYCBhbmQgYE5FVEZJTFRFUmAsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgYmFzZWQgb24gdGhlIGRlcGVuZGVuY2llcy5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYxNywiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDozMy42NjE5MDkzOTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY3NTcyNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldFwiLFxuICAgIFwibmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va1wiLFxuICAgIFwibmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va1wiLFxuICAgIFwibmZ0X3BheWxvYWRfc2V0X2luaXRcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2hlY2tzdW0gb2Zmc2V0IHZhbGlkYXRpb24gYW5kIHBhY2tldCBldmFsdWF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIHBheWxvYWQgZXhwcmVzc2lvbnMgaW4gbmZ0YWJsZXMgKG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYykuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5mbmV0bGluayBjb25maWd1cmF0aW9uIGFuZCBpbmNvbWluZyBwYWNrZXQgcHJvY2Vzc2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRcIixcbiAgICBcIm5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tcIixcbiAgICBcIm5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIGV4cHJlc3Npb25zIGluIG5mdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBuZm5ldGxpbmsgY29uZmlndXJhdGlvbiBhbmQgaW5jb21pbmcgcGFja2V0IHByb2Nlc3NpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjMzLjgzODY3NjIwMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MjA4ODYxMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDozMy44MzkzMzAyMDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzkyMDIyNDQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdGlnaHRlbnMgdmFsaWRhdGlvbiBmb3IgdGhlIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gbmZ0YWJsZXMgcGF5bG9hZCBleHByZXNzaW9ucyAoYG5mdF9wYXlsb2FkLmNgKS4gSXQgYWRkcyBjb250cm9sLXBsYW5lIHZhbGlkYXRpb24gaW4gYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoKWAgYW5kIHJ1bnRpbWUgcGFja2V0IHZhbGlkYXRpb24gaW4gYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soKWAgdG8gZW5zdXJlIGNoZWNrc3VtIG1vZGlmaWNhdGlvbiB0YXJnZXRzIGxlZ2l0aW1hdGUgdHJhbnNwb3J0IGxheWVyIGhlYWRlcnMgKFRDUCwgVURQLCBVRFBMaXRlLCBJQ01QLCBJQ01QdjYpLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZSB2YXJpYWJsZXMgcmVhZCAoYHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0YCwgYHBrdC1cXHUwMDNlZmxhZ3NgLCBgcGt0LVxcdTAwM2V0cHJvdGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBuZnRhYmxlcyBleHByZXNzaW9uIHNldHVwIGFuZCBwYWNrZXQgcGFyc2luZyBsb2dpYy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODg2ZDAyOTFhMGFiZGMwZTk3YjRhYzUwYTMzMzBhMjkyZjdmNTViNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTA6Mjk6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbmluZGV4IGUzMTVkMzVmNzNkNGEuLjViNzZhZjY4YjcwNDkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG5AQCAtMTAwOCwxMSArMTAwOSwxNCBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fZmxhZ3MpIC8qIG1ha2VzIG5vIHNlbnNlLCBhc2tzIGZvciBcInJlLXVwZGF0ZVwiIG9mIEw0IGNoZWNrc3VtICovXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHQvKiBubyBmdXJ0aGVyIGNoZWNrIGhlcmU7IG9mZnNldCBjYW4ndCBiZSBuZWdhdGl2ZSBzbyBib2d1c1xuLVx0XHQgKiBvZmZzZXRzIGNhbiBjb3JydXB0IEw0IG9yIHBheWxvYWQgYnV0IG5vdCBsMyBoZWFkZXJzLlxuLVx0XHQgKiBXZSBhbHJlYWR5IGFsbG93IGFyYml0cmFyeSBsNC9pbm5lciBwYXlsb2FkIHdyaXRlcy5cbi1cdFx0ICovXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHQvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqL1xuK1x0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHxcbitcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XG4rXHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSkgfHxcbitcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbkBAIC0xMDQ2LDYgKzEwNTAsMjcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4rXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbit7XG4rXHRpZiAoIShwa3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKHBrdC1cdTAwM2V0cHJvdCkge1xuK1x0Y2FzZSBJUFBST1RPX1RDUDpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xuK1x0Y2FzZSBJUFBST1RPX1VEUDpcbitcdGNhc2UgSVBQUk9UT19VRFBMSVRFOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7XG4rXHRjYXNlIElQUFJPVE9fSUNNUFY2OlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcbitcdGNhc2UgSVBQUk9UT19JQ01QOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbiB7XG5AQCAtMTA1NSw5ICsxMDgwLDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuIFx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuK1x0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4tXHRcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxuLVx0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4rXHRcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXG4rXHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbiBcdFx0ICovXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6MzMuODM5MzMxMzgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTUzNDY1NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJ20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIERlZXAgaW50byBuZnRfcGF5bG9hZC5jKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCwgc28gSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGRpZmYuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBmaWxlIGhhcyBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIFxuXG5JJ20gemVyb2luZyBpbiBvbiBhIGZldyBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZSwgYXMgdGhlc2UgbGlrZWx5IGhvbGQga2V5IGluZm9ybWF0aW9uIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXM6IGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCwgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLCBhbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAsIG9mIGNvdXJzZSwgdG8gem9vbSBpbiBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMgc28gdGhhdCBJIGNhbiBzZWUgaG93IHRoZXkgd29yay4gVGhpcyBpcyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgb3IgZGVzaWduIGFsdGVyYXRpb25zLiBJIHdhbnQgdG8gYmUgYWJsZSB0byBmdWxseSBncmFzcCBhbnkgY2hhbmdlcywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgY2hlY2tzdW0gaGFuZGxpbmcgYW5kIGV2YWx1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjQ0Ljc5MjgwMDY0NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI5NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTgwOlxcdFxcdH1cXG4gOTgxOlxcdFxcbiA5ODI6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5ODM6XFx0fVxcbiA5ODQ6XFx0XFxuIDk4NTpcXHQvKiBjaGVjayBsaW5rbGF5ZXIgbW9kaWZpY2F0aW9ucyBkb24ndCBzcGlsbCBpbnRvIG5ldHdvcmsgaGVhZGVyLiAqL1xcbiA5ODY6XFx0c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxcbiA5ODc6XFx0e1xcbiA5ODg6XFx0XFx0aWYgKG5mdF9pbl9pbmdyZXNzKHBrdC1cXHUwMDNlc3RhdGUpKVxcbiA5ODk6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDk5MDpcXHRcXG4gOTkxOlxcdFxcdHJldHVybiBvZmZzZXQgXFx1MDAzYz0gc2tiX25ldHdvcmtfb2Zmc2V0KHBrdC1cXHUwMDNlc2tiKTtcXG4gOTkyOlxcdH1cXG4gOTkzOlxcdFxcbiA5OTQ6XFx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiA5OTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbiA5OTY6XFx0e1xcbiA5OTc6XFx0XFx0c3dpdGNoIChwcml2LVxcdTAwM2ViYXNlKSB7XFxuIDk5ODpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcXG4gOTk5OlxcdFxcdFxcdGJyZWFrO1xcbjEwMDA6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG4xMDAxOlxcdFxcdFxcdGlmIChjdHgtXFx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQpIHtcXG4xMDAyOlxcdFxcdFxcdFxcdGlmIChvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKSA9PSBwcml2LVxcdTAwM2Vjc3VtX29mZnNldClcXG4xMDAzOlxcdFxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAwNjpcXHRcXHRcXHR9XFxuMTAwNzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTsgLyogcnVuIHRpbWUgdmFsaWRhdGlvbiByZXF1aXJlZCAqL1xcbjEwMDg6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxcbjEwMDk6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fZmxhZ3MpIC8qIG1ha2VzIG5vIHNlbnNlLCBhc2tzIGZvciBcXFwicmUtdXBkYXRlXFxcIiBvZiBMNCBjaGVja3N1bSAqL1xcbjEwMTA6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwMTE6XFx0XFxuMTAxMjpcXHRcXHRcXHQvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqL1xcbjEwMTM6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSB8fFxcbjEwMTQ6XFx0XFx0XFx0ICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxcbjEwMTU6XFx0XFx0XFx0ICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSkgfHxcXG4xMDE2OlxcdFxcdFxcdCAgICBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcXG4xMDE3OlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEwMTg6XFx0XFxuMTAxOTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAyMDpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4xMDIxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEwMjI6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxcbjEwMjM6XFx0XFx0XFx0YnJlYWs7XFxuMTAyNDpcXHRcXHR9XFxuMTAyNTpcXHRcXG4xMDI2OlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDI3OlxcdH1cXG4xMDI4OlxcdFxcbjEwMjk6XFx0LyogZG8gbm90IGFsbG93IGFyYml0cmFyeSBuZXR3b3JrIGhlYWRlciBtYW5nbGluZyB2aWEgYm9ndXMgY3N1bV9vZmYuXFxuMTAzMDpcXHQgKiBXZSBvbmx5IHN1cHBvcnQgaXB2NC4gIE9ubHkgTkZQUk9UT19JUFY0IGNhbiBiZSBjaGVja2VkIGZyb20gY29udHJvbFxcbjEwMzE6XFx0ICogcGxhbmUuXFxuMTAzMjpcXHQgKi9cXG4xMDMzOlxcdHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4xMDM0OlxcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4xMDM1OlxcdHtcXG4xMDM2OlxcdFxcdHN3aXRjaCAocGt0LVxcdTAwM2VzdGF0ZS1cXHUwMDNlcGYpIHtcXG4xMDM3OlxcdFxcdGNhc2UgTkZQUk9UT19JUFY0OlxcbjEwMzg6XFx0XFx0XFx0LyogV2FybmluZzogTkZQUk9UT19JTkVUIHdhcyBub3QgY2hlY2tlZDsgd2UgY2FuJ3QgcmV0dXJuIHRydWUgaGVyZS4gKi9cXG4xMDM5OlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcXG4xMDQwOlxcdFxcdGNhc2UgTkZQUk9UT19JUFY2OlxcbjEwNDE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwNDI6XFx0XFx0Y2FzZSBORlBST1RPX0JSSURHRTpcXG4xMDQzOlxcdFxcdFxcdHJldHVybiBwa3QtXFx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9JUCkgXFx1MDAyNlxcdTAwMjZcXG4xMDQ0OlxcdFxcdFxcdCAgICAgICBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcXG4xMDQ1OlxcdFxcdGNhc2UgTkZQUk9UT19ORVRERVY6XFxuMTA0NjpcXHRcXHRcXHRyZXR1cm4gcGt0LVxcdTAwM2Vza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSBcXHUwMDI2XFx1MDAyNlxcbjEwNDc6XFx0XFx0XFx0ICAgICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xcbjEwNDg6XFx0XFx0fVxcbjEwNDk6XFx0XFxuMTA1MDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA1MTpcXHR9XFxuMTA1MjpcXHRcXG4xMDUzOlxcdHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4xMDU0OlxcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4xMDU1OlxcdHtcXG4xMDU2OlxcdFxcdGlmICghKHBrdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSlcXG4xMDU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDU4OlxcdFxcbjEwNTk6XFx0XFx0c3dpdGNoIChwa3QtXFx1MDAzZXRwcm90KSB7XFxuMTA2MDpcXHRcXHRjYXNlIElQUFJPVE9fVENQOlxcbjEwNjE6XFx0XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcXG4xMDYyOlxcdFxcdGNhc2UgSVBQUk9UT19VRFA6XFxuMTA2MzpcXHRcXHRjYXNlIElQUFJPVE9fVURQTElURTpcXG4xMDY0OlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7XFxuMTA2NTpcXHRcXHRjYXNlIElQUFJPVE9fSUNNUFY2OlxcbjEwNjY6XFx0XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xcbjEwNjc6XFx0XFx0Y2FzZSBJUFBST1RPX0lDTVA6XFxuMTA2ODpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKTtcXG4xMDY5OlxcdFxcdH1cXG4xMDcwOlxcdFxcbjEwNzE6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwNzI6XFx0fVxcbjEwNzM6XFx0XFxuMTA3NDpcXHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbjEwNzU6XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4xMDc2OlxcdHtcXG4xMDc3OlxcdFxcdHN3aXRjaCAocHJpdi1cXHUwMDNlYmFzZSkge1xcbjEwNzg6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxuMTA3OTpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6NDQuNzk1MzQzMDA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MjA0MTIwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBuZnRfcGF5bG9hZC5jYCBmb3IgQ29udGV4dCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBuZnRfcGF5bG9hZC5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjb2RlIGFyb3VuZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIE15IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlICpob3cqIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCBpcyB1c2VkIOKAkyBpcyBpdCBhIHByZWNvbmRpdGlvbiwgYSB2YWxpZGF0aW9uIGNoZWNrLCBvciBwZXJoYXBzIGEgaGVscGVyPyBNb3JlIGltcG9ydGFudGx5LCB3aGVyZSBkb2VzIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgZml0IGludG8gdGhlIGVxdWF0aW9uPyBJcyBpdCBzZXR0aW5nIHVwIHNvbWV0aGluZyBmb3IgdGhlIGNoZWNrc3VtIHdyaXRlLCBvciBpcyBpdCB3b3JraW5nIGluIHBhcmFsbGVsIHRvIHByZXBhcmUgdGhlIHBheWxvYWQ/IERvZXMgaXQgbmVlZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgdG8gYmUgcG9zaXRpdmUgdG8gcnVuIGNvcnJlY3RseT8gT3IgZG9lcyBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIHNvbWVob3cgYWZmZWN0IHRoZSBjaXJjdW1zdGFuY2VzIHdoZW4gYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgIGlzIHRydWUgb3IgZmFsc2U/XG5cbkknbSBhc3N1bWluZyB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCBjaGVja3N1bSBtYW5pcHVsYXRpb24gb3IgZXZhbHVhdGlvbiwgYnV0IEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGJlIHN1cmUuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHBheWxvYWQgZGF0YSBpcyByZWFkLCB3cml0dGVuLCBhbmQgbWFuaXB1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIGNoZWNrc3Vtcy4gSSdsbCBuZWVkIHRvIGNoZWNrIGhvdyBwYWNrZXQgc3RydWN0dXJlcyBhcmUgYmVpbmcgaGFuZGxlZCwgaG93IGRhdGEgaXMgYWNjZXNzZWQgaW4gbWVtb3J5LCBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrIGFzIGEgd2hvbGUuIEkgc2hvdWxkIGNoZWNrIGhvdyBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZC4gVWx0aW1hdGVseSwgSSdtIGxvb2tpbmcgZm9yIHRoZSBsb2dpY2FsIHJlbGF0aW9uc2hpcCwgb3IgZGVwZW5kZW5jaWVzLCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgd2l0aGluIHRoZSBncmVhdGVyIGNvbnRleHQgb2YgdGhlIGBuZnRfcGF5bG9hZGAgc3Vic3lzdGVtLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIHByb2NlZWQgd2l0aCB0aGUgd29yayBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzMwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDo0Ny40MTU3NTg5NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzczMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzU6XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4xMDc2OlxcdHtcXG4xMDc3OlxcdFxcdHN3aXRjaCAocHJpdi1cXHUwMDNlYmFzZSkge1xcbjEwNzg6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxuMTA3OTpcXHRcXHRcXHRicmVhaztcXG4xMDgwOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxuMTA4MTpcXHRcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xcbjEwODI6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxcbjEwODM6XFx0XFx0XFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KTtcXG4xMDg0OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbjEwODU6XFx0XFx0XFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcXG4xMDg2OlxcdFxcdFxcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cXG4xMDg3OlxcdFxcdFxcdCAqL1xcbjEwODg6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTA4OTpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XFxuMTA5MDpcXHRcXHRcXHRicmVhaztcXG4xMDkxOlxcdFxcdH1cXG4xMDkyOlxcdFxcbjEwOTM6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwOTQ6XFx0fVxcbjEwOTU6XFx0XFxuMTA5NjpcXHRzdGF0aWMgYm9vbCBuZnRfdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuMTA5NzpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4xMDk4OlxcdHtcXG4xMDk5OlxcdFxcdHVuc2lnbmVkIGludCBkb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgYWNrX3NlcSkgKyBzaXplb2YoX19iZTMyKTtcXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0aWYgKHBrdC1cXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXFxuMTEwMjpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMTAzOlxcdFxcbjExMDQ6XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZW9mZnNldCBcXHUwMDNlIGRvZmYgfHwgcHJpdi1cXHUwMDNlb2Zmc2V0ICsgcHJpdi1cXHUwMDNlbGVuIFxcdTAwM2M9IGRvZmY7XFxuMTEwNTpcXHR9XFxuMTEwNjpcXHRcXG4xMTA3OlxcdHN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4xMTA4OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuMTEwOTpcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuMTExMDpcXHR7XFxuMTExMTpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG4xMTEyOlxcdFxcdGNvbnN0IHUzMiAqc3JjID0gXFx1MDAyNnJlZ3MtXFx1MDAzZWRhdGFbcHJpdi1cXHUwMDNlc3JlZ107XFxuMTExMzpcXHRcXHRpbnQgb2Zmc2V0LCBjc3VtX29mZnNldCwgdmxhbl9obGVuID0gMDtcXG4xMTE0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXFx1MDAzZXNrYjtcXG4xMTE1OlxcdFxcdF9fd3N1bSBmc3VtLCB0c3VtO1xcbjExMTY6XFx0XFxuMTExNzpcXHRcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZWJhc2UpIHtcXG4xMTE4OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxcbjExMTk6XFx0XFx0XFx0aWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXFxuMTEyMDpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTIxOlxcdFxcbjExMjI6XFx0XFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgXFx1MDAyNlxcdTAwMjZcXG4xMTIzOlxcdFxcdFxcdCAgICBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHByaXYtXFx1MDAzZW9mZnNldCwgcHJpdi1cXHUwMDNlbGVuKSkge1xcbjExMjQ6XFx0XFx0XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9zZXRfdmxhbihzcmMsIHNrYixcXG4xMTI1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4sXFxuMTEyNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ2bGFuX2hsZW4pKVxcbjExMjc6XFx0XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTEyODpcXHRcXG4xMTI5OlxcdFxcdFxcdFxcdGlmICghdmxhbl9obGVuKVxcbjExMzA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjExMzE6XFx0XFx0XFx0fVxcbjExMzI6XFx0XFxuMTEzMzpcXHRcXHRcXHRvZmZzZXQgPSBza2JfbWFjX2hlYWRlcihza2IpIC0gc2tiLVxcdTAwM2VkYXRhIC0gdmxhbl9obGVuO1xcbjExMzQ6XFx0XFx0XFx0aWYgKCFuZnRfbGxfd3JpdGVfb2socGt0LCBwcml2LVxcdTAwM2VsZW4gKyBwcml2LVxcdTAwM2VvZmZzZXQgKyBvZmZzZXQpKVxcbjExMzU6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTEzNjpcXHRcXHRcXHRicmVhaztcXG4xMTM3OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxuMTEzODpcXHRcXHRcXHRpZiAoIW5mdF9uaF93cml0ZV9vayhwa3QsIHByaXYsIHNyYykpXFxuMTEzOTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTQwOlxcdFxcdFxcdG9mZnNldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpO1xcbjExNDE6XFx0XFx0XFx0YnJlYWs7XFxuMTE0MjpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuMTE0MzpcXHRcXHRcXHRpZiAoIShwa3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykgfHwgcGt0LVxcdTAwM2VmcmFnb2ZmKVxcbjExNDQ6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE0NTpcXHRcXHRcXHRpZiAoIW5mdF90aF93cml0ZV9vayhwa3QsIHByaXYpKVxcbjExNDY6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE0NzpcXHRcXHRcXHRvZmZzZXQgPSBuZnRfdGhvZmYocGt0KTtcXG4xMTQ4OlxcdFxcdFxcdGJyZWFrO1xcbjExNDk6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuMTE1MDpcXHRcXHRcXHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcXG4xMTUxOlxcdFxcdFxcdGlmIChvZmZzZXQgXFx1MDAzYyAwKVxcbjExNTI6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE1MzpcXHRcXHRcXHRicmVhaztcXG4xMTU0OlxcdFxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjQ3LjQxNTg5ODY0OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODU1NDgzMTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIG5mdFxcX3BheWxvYWRcXF9zZXRcXF9ldmFsKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSXQncyBhIGtleSBmdW5jdGlvbiwgb2J2aW91c2x5LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgTmV0ZmlsdGVyJ3MgTkZUYWJsZXMgZnJhbWV3b3JrLiBcIkxldCdzIHNlZSB0aGUgcmVzdCBvZiBpdFwiIGltcGxpZXMgSSd2ZSBhbHJlYWR5IGdvdCBzb21lIGluaXRpYWwgY29udGV4dCwgbGlrZWx5IGZyb20gbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBvciBkb2N1bWVudGF0aW9uLiBJJ20gcHJvYmFibHkgdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIGhvdyB0aGlzIGV2YWx1YXRpb24gbWVjaGFuaXNtIHdvcmtzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBwYXlsb2FkIHNldHRpbmcgY29udGV4dC4gQW0gSSB0cnlpbmcgdG8gZGVidWcgYSBzcGVjaWZpYyBpc3N1ZSwgb3IganVzdCBkZWVwZW4gbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5jdGlvbidzIGludGVybmFsIGZsb3cgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBOZXRmaWx0ZXIgY29tcG9uZW50cz8gSSdtIHByb2JhYmx5IG1lbnRhbGx5IG1hcHBpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoOiB0aGUgYXJndW1lbnRzIGl0IHRha2VzLCB0aGUgY29uZGl0aW9ucyBpdCBjaGVja3MsIHRoZSBzdGF0ZSBpdCB1cGRhdGVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaW5zaWdodHMgaW50byB0aGluZ3MgbGlrZSB0aGUgaGFuZGxpbmcgb2YgZGlmZmVyZW50IHBheWxvYWQgdHlwZXMsIHRoZSB1c2Ugb2YgaGVscGVyIGZ1bmN0aW9ucywgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgZXZhbHVhdGlvbiBvbiB0aGUgb3ZlcmFsbCBydWxlIG1hdGNoaW5nIHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZCBhbmQgd2hhdCBkYXRhIGlzIGJlaW5nIG1hbmlwdWxhdGVkIGR1cmluZyB0aGlzIGV2YWx1YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBldmVyeXRoaW5nIGZyb20gcGVyZm9ybWFuY2UgdHVuaW5nIHRvIHNlY3VyaXR5IGhhcmRlbmluZyBhbmQgZGVidWdnaW5nLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyB0byBpdHMgcGxhY2UgaW4gdGhlIHdob2xlIHBpY3R1cmUuIEkgYW0gZ29pbmcgdG8ga2VlcCBnb2luZyBhbmQgc2VlIHdoYXQgZWxzZSBjYW4gYmUgZ2xlYW5lZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NjQwMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6NTAuMjcxMzg3NzQ5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE1NTpcXHRcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKDEpO1xcbjExNTY6XFx0XFx0XFx0Z290byBlcnI7XFxuMTE1NzpcXHRcXHR9XFxuMTE1ODpcXHRcXG4xMTU5OlxcdFxcdGNzdW1fb2Zmc2V0ID0gb2Zmc2V0ICsgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQ7XFxuMTE2MDpcXHRcXHRvZmZzZXQgKz0gcHJpdi1cXHUwMDNlb2Zmc2V0O1xcbjExNjE6XFx0XFxuMTE2MjpcXHRcXHRpZiAoKHByaXYtXFx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgfHwgcHJpdi1cXHUwMDNlY3N1bV9mbGFncykgXFx1MDAyNlxcdTAwMjZcXG4xMTYzOlxcdFxcdCAgICAoKHByaXYtXFx1MDAzZWJhc2UgIT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUiBcXHUwMDI2XFx1MDAyNlxcbjExNjQ6XFx0XFx0ICAgICAgcHJpdi1cXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVIpIHx8XFxuMTE2NTpcXHRcXHQgICAgIHNrYi1cXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpKSB7XFxuMTE2NjpcXHRcXHRcXHRpZiAob2Zmc2V0ICsgcHJpdi1cXHUwMDNlbGVuIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pXFxuMTE2NzpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTY4OlxcdFxcbjExNjk6XFx0XFx0XFx0ZnN1bSA9IHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgcHJpdi1cXHUwMDNlbGVuLCAwKTtcXG4xMTcwOlxcdFxcdFxcdHRzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBwcml2LVxcdTAwM2VsZW4sIDApO1xcbjExNzE6XFx0XFxuMTE3MjpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCBcXHUwMDI2XFx1MDAyNlxcbjExNzM6XFx0XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcXHUwMDI2XFx1MDAyNlxcbjExNzQ6XFx0XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxcbjExNzU6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE3NjpcXHRcXG4xMTc3OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzIFxcdTAwMjZcXHUwMDI2XFxuMTE3ODpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfbDRjc3VtX3VwZGF0ZShwa3QsIHNrYiwgZnN1bSwgdHN1bSkgXFx1MDAzYyAwKVxcbjExNzk6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE4MDpcXHRcXHR9XFxuMTE4MTpcXHRcXG4xMTgyOlxcdFxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWF4KG9mZnNldCArIHByaXYtXFx1MDAzZWxlbiwgMCkpIHx8XFxuMTE4MzpcXHRcXHQgICAgc2tiX3N0b3JlX2JpdHMoc2tiLCBvZmZzZXQsIHNyYywgcHJpdi1cXHUwMDNlbGVuKSBcXHUwMDNjIDApXFxuMTE4NDpcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTg1OlxcdFxcbjExODY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX1NDVFAgXFx1MDAyNlxcdTAwMjZcXG4xMTg3OlxcdFxcdCAgICBwa3QtXFx1MDAzZXRwcm90ID09IElQUFJPVE9fU0NUUCBcXHUwMDI2XFx1MDAyNlxcbjExODg6XFx0XFx0ICAgIHNrYi1cXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpIHtcXG4xMTg5OlxcdFxcdFxcdGlmIChwa3QtXFx1MDAzZWZyYWdvZmYgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbjExOTA6XFx0XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fc2N0cChza2IsIG5mdF90aG9mZihwa3QpKSlcXG4xMTkxOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExOTI6XFx0XFx0fVxcbjExOTM6XFx0XFxuMTE5NDpcXHRcXHRyZXR1cm47XFxuMTE5NTpcXHRlcnI6XFxuMTE5NjpcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XFxuMTE5NzpcXHR9XFxuMTE5ODpcXHRcXG4xMTk5OlxcdHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4xMjAwOlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4xMjAxOlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdKVxcbjEyMDI6XFx0e1xcbjEyMDM6XFx0XFx0dTMyIGNzdW1fb2Zmc2V0LCBvZmZzZXQsIGNzdW1fdHlwZSA9IE5GVF9QQVlMT0FEX0NTVU1fTk9ORTtcXG4xMjA0OlxcdFxcdHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbjEyMDU6XFx0XFx0aW50IGVycjtcXG4xMjA2OlxcdFxcbjEyMDc6XFx0XFx0aWYgKGN0eC1cXHUwMDNlbmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpXFxuMTIwODpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjEyMDk6XFx0XFxuMTIxMDpcXHRcXHRwcml2LVxcdTAwM2ViYXNlICAgICAgICA9IG50b2hsKG5sYV9nZXRfYmUzMih0YltORlRBX1BBWUxPQURfQkFTRV0pKTtcXG4xMjExOlxcdFxcdHByaXYtXFx1MDAzZWxlbiAgICAgICAgID0gbnRvaGwobmxhX2dldF9iZTMyKHRiW05GVEFfUEFZTE9BRF9MRU5dKSk7XFxuMTIxMjpcXHRcXG4xMjEzOlxcdFxcdGVyciA9IG5mdF9wYXJzZV91MzJfY2hlY2sodGJbTkZUQV9QQVlMT0FEX09GRlNFVF0sIFUxNl9NQVgsIFxcdTAwMjZvZmZzZXQpO1xcbjEyMTQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjUwLjI3MTgxMjA2OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDg3Njk4OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXRmaWx0ZXIgUGF5bG9hZCBNYW5nbGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGhhcmRlbmluZyB0aGUgYG5mdGFibGVzYCBwYXlsb2FkIG1hbmlwdWxhdGlvbiBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMuIEluaXRpYWxseSwgdGhlIGNvZGUgaGFkIGEgdnVsbmVyYWJpbGl0eSB3aGVyZSBhbiBhcmJpdHJhcnkgYGNzdW1fb2Zmc2V0YCBjb3VsZCBiZSBwcm92aWRlZCwgbGVhZGluZyB0byBwb3RlbnRpYWwgY29ycnVwdGlvbiBvZiBoZWFkZXJzIG9yIHRoZSB3cml0aW5nL3VwZGF0aW5nIG9mIGNoZWNrc3VtcyBhdCBhcmJpdHJhcnkgb2Zmc2V0cyB3aXRoaW4gYSBwYWNrZXQsIHdoaWNoIGlzIGJhZCBuZXdzLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzOiBcIkRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBzZWN1cml0eSBob2xlcywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3M/XCIgTGV0J3Mgc2VlLlxuXG5Fc3NlbnRpYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIHZhbGlkYXRpb24gZnVuY3Rpb25zOiBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYC4gVGhlIGZvcm1lciBub3cgKmV4cGxpY2l0bHkqIGNoZWNrcyBpZiB0aGUgcHJvdmlkZWQgYGNzdW1fb2Zmc2V0YCBpcyBhICp2YWxpZCogb2Zmc2V0IGZvciB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAoVENQLCBVRFAsIElDTVAsIElDTVB2NikuIFRoZSBsYXR0ZXIgZnVydGhlciB2YWxpZGF0ZXMgdGhhdCBpZiB0aGUgcGFja2V0IGFjdHVhbGx5ICppcyogb25lIG9mIHRoZXNlIHRyYW5zcG9ydCBwcm90b2NvbHMsIHRoYXQgdGhlIG9mZnNldCBtYXRjaGVzIHdoYXQncyBleHBlY3RlZCBmb3IgdGhhdCBwcm90b2NvbC5cblxuTm93LCBsZXQncyBldmFsdWF0ZSB0aGlzIGluIHRoZSBjb250ZXh0IG9mIEtNU0FOIHZzLiBLQVNBTi4gS01TQU4gaXMgbXkgcHJpbWFyeSB0YXJnZXQgZm9yIHRoaXMga2luZCBvZiByZXZpZXcgYXMgSSBhbSBsb29raW5nIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLlxuXG4xLiAgKipLZXJuZWwgU3RydWN0dXJlcyB0byBVc2Vyc3BhY2U/KiogTm9wZS4gTm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGFyZSBleGlzdGluZyBvbmVzIG1vZGlmaWVkIGluIGEgd2F5IHRoYXQgd291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGJlaW5nIGV4cG9zZWQuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYy9CcmFuY2hpbmcgb24gVW5pbml0aWFsaXplZCBWYXJpYWJsZXM/KiogVGhlIGNvZGUgY2hlY2tzIGBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0YCwgYHBrdC1cdTAwM2VmbGFnc2AsIGFuZCBgcGt0LVx1MDAzZXRwcm90YC4gYHByaXZgIGlzIHBvcHVsYXRlZCBkdXJpbmcgZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiB0aHJvdWdoIG5ldGxpbmsgYXR0cmlidXRlcyAoYW5kIHZhbGlkYXRlZCkuIGBwa3RgIGlzIGEgYG5mdF9wa3RpbmZvYCBzdHJ1Y3R1cmUgcG9wdWxhdGVkIGJ5IG5ldGZpbHRlciBwZXItcGFja2V0LiBOb25lIG9mIHRoZXNlIHNvdXJjZXMgYXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXMgd2l0aCBVbmluaXRpYWxpemVkIEZpZWxkcz8qKiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHN1YnNlcXVlbnQgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG40LiAgKipCb3VuZHMgQ2hlY2tzL1VuaW5pdGlhbGl6ZWQgQnl0ZXMgQWNjZXNzPyoqIFRoaXMgaXMgYWJvdXQgc3RyaWN0ZXIgKnZhbGlkYXRpb24qLCBub3QgbmV3IHdheXMgdG8gYWNjZXNzIG1lbW9yeS4gVGhlIHBhdGNoICpyZXN0cmljdHMqIHdoYXQgY2FuIGJlIHdyaXR0ZW4vdXBkYXRlZCBieSBlbnN1cmluZyBjaGVja3N1bSBvZmZzZXRzIGFyZSB2YWxpZC4gSXQncyB0aWdodGVuaW5nIHRoZSBleGlzdGluZyBjb2RlLCBub3QgbG9vc2VuaW5nIGl0LlxuXG5UaGVyZWZvcmUsIHRoaXMgaXMgYSBjbGVhciBoYXJkZW5pbmcgcGF0Y2ggYnkgcmVzdHJpY3RpbmcgYWNjZXNzLiBHaXZlbiB0aGF0LCB0aGUgc3RhbmRhcmQgS0FTQU4vc3l6a2FsbGVyIGZ1enppbmcgaXMgYWRlcXVhdGUgdG8gdGVzdCB0aGUgcGF0Y2guIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTMsIk91dHB1dFRva2VucyI6MjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjU3Ljc1OTUxNjYzM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdGlnaHRlbnMgdmFsaWRhdGlvbiBmb3IgdGhlIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gbmZ0YWJsZXMgcGF5bG9hZCBleHByZXNzaW9ucyAoYG5mdF9wYXlsb2FkLmNgKS4gSXQgYWRkcyBjb250cm9sLXBsYW5lIHZhbGlkYXRpb24gaW4gYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoKWAgYW5kIHJ1bnRpbWUgcGFja2V0IHZhbGlkYXRpb24gaW4gYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soKWAgdG8gZW5zdXJlIGNoZWNrc3VtIG1vZGlmaWNhdGlvbiB0YXJnZXRzIGxlZ2l0aW1hdGUgdHJhbnNwb3J0IGxheWVyIGhlYWRlcnMgKFRDUCwgVURQLCBVRFBMaXRlLCBJQ01QLCBJQ01QdjYpLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZSB2YXJpYWJsZXMgcmVhZCAoYHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0YCwgYHBrdC1cXHUwMDNlZmxhZ3NgLCBgcGt0LVxcdTAwM2V0cHJvdGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBuZnRhYmxlcyBleHByZXNzaW9uIHNldHVwIGFuZCBwYWNrZXQgcGFyc2luZyBsb2dpYy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdGlnaHRlbnMgdmFsaWRhdGlvbiBmb3IgdGhlIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gbmZ0YWJsZXMgcGF5bG9hZCBleHByZXNzaW9ucyAoYG5mdF9wYXlsb2FkLmNgKS4gSXQgYWRkcyBjb250cm9sLXBsYW5lIHZhbGlkYXRpb24gaW4gYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoKWAgYW5kIHJ1bnRpbWUgcGFja2V0IHZhbGlkYXRpb24gaW4gYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soKWAgdG8gZW5zdXJlIGNoZWNrc3VtIG1vZGlmaWNhdGlvbiB0YXJnZXRzIGxlZ2l0aW1hdGUgdHJhbnNwb3J0IGxheWVyIGhlYWRlcnMgKFRDUCwgVURQLCBVRFBMaXRlLCBJQ01QLCBJQ01QdjYpLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZSB2YXJpYWJsZXMgcmVhZCAoYHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0YCwgYHBrdC1cXHUwMDNlZmxhZ3NgLCBgcGt0LVxcdTAwM2V0cHJvdGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBuZnRhYmxlcyBleHByZXNzaW9uIHNldHVwIGFuZCBwYWNrZXQgcGFyc2luZyBsb2dpYy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow258tm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 10:03:49 +0000 UTC FinishedAt: 2026-09-06 10:30:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NETFILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NETFILTER" ], "series_id": "5efd3dcc-ea6c-4012-b864-cd405e47812f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_payload_validate_inet_csum_offset", "nft_payload_csum_th_write_ok", "nft_payload_csum_write_ok", "nft_payload_set_init", "nft_payload_set_eval" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRpZ2h0ZW5zIHZhbGlkYXRpb24gZm9yIHRoZSBjaGVja3N1bSBvZmZzZXQgKGBjc3VtX29mZnNldGApIGluIG5mdGFibGVzIHBheWxvYWQgZXhwcmVzc2lvbnMgKGBuZnRfcGF5bG9hZC5jYCkuIEl0IGFkZHMgY29udHJvbC1wbGFuZSB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KClgIGFuZCBydW50aW1lIHBhY2tldCB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKClgIHRvIGVuc3VyZSBjaGVja3N1bSBtb2RpZmljYXRpb24gdGFyZ2V0cyBsZWdpdGltYXRlIHRyYW5zcG9ydCBsYXllciBoZWFkZXJzIChUQ1AsIFVEUCwgVURQTGl0ZSwgSUNNUCwgSUNNUHY2KS5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS4gVGhlIHZhcmlhYmxlcyByZWFkIChgcHJpdi1cdTAwM2Vjc3VtX29mZnNldGAsIGBwa3QtXHUwMDNlZmxhZ3NgLCBgcGt0LVx1MDAzZXRwcm90YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IG5mdGFibGVzIGV4cHJlc3Npb24gc2V0dXAgYW5kIHBhY2tldCBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2hlY2tzdW0gb2Zmc2V0IHZhbGlkYXRpb24gYW5kIHBhY2tldCBldmFsdWF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIHBheWxvYWQgZXhwcmVzc2lvbnMgaW4gbmZ0YWJsZXMgKG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYykuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5mbmV0bGluayBjb25maWd1cmF0aW9uIGFuZCBpbmNvbWluZyBwYWNrZXQgcHJvY2Vzc2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg4NmQwMjkxYTBhYmRjMGU5N2I0YWM1MGEzMzMwYTI5MmY3ZjU1YjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDEwOjI5OjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuaW5kZXggZTMxNWQzNWY3M2Q0YS4uNWI3NmFmNjhiNzA0OSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5AQCAtMjAsNiAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuQEAgLTEwMDgsMTEgJiM0MzsxMDA5LDE0IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwmIzM0O3JlLXVwZGF0ZVwmIzM0OyBvZiBMNCBjaGVja3N1bSAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJiMzOTt0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXG4tXHRcdCAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuXG4tXHRcdCAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLlxuLVx0XHQgKi9cbi1cdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHQvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqL1xuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4mIzQzO1x0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgfHxcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSkgfHxcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG5AQCAtMTA0Niw2ICYjNDM7MTA1MCwyNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4mIzQzO1x0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIShwa3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHBrdC1cdTAwM2V0cHJvdCkge1xuJiM0MztcdGNhc2UgSVBQUk9UT19UQ1A6XG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX1VEUDpcbiYjNDM7XHRjYXNlIElQUFJPVE9fVURQTElURTpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fSUNNUFY2OlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX0lDTVA6XG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuIHtcbkBAIC0xMDU1LDkgJiM0MzsxMDgwLDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuIFx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuJiM0MztcdFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuLVx0XHQvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmVcbi1cdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMyBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuJiM0MztcdFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcbiYjNDM7XHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbiBcdFx0ICovXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjaGVja3N1bSBvZmZzZXQgdmFsaWRhdGlvbiBhbmQgcGFja2V0IGV2YWx1YXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgcGF5bG9hZCBleHByZXNzaW9ucyBpbiBuZnRhYmxlcyAobmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgbmZuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIGluY29taW5nIHBhY2tldCBwcm9jZXNzaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODg2ZDAyOTFhMGFiZGMwZTk3YjRhYzUwYTMzMzBhMjkyZjdmNTViNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTA6Mjk6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKaW5kZXggZTMxNWQzNWY3M2Q0YS4uNWI3NmFmNjhiNzA0OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwpAQCAtMjAsNiAmIzQzOzIwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91ZHAuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZ3JlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ljbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pY21wdjYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwdjYuaCZndDsKQEAgLTEwMDgsMTEgJiM0MzsxMDA5LDE0IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJaWYgKHByaXYtJmd0O2NzdW1fZmxhZ3MpIC8qIG1ha2VzIG5vIHNlbnNlLCBhc2tzIGZvciAmIzM0O3JlLXVwZGF0ZSYjMzQ7IG9mIEw0IGNoZWNrc3VtICovCiAJCQlyZXR1cm4gZmFsc2U7CiAKLQkJLyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJiMzOTt0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzCi0JCSAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuCi0JCSAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLgotCQkgKi8KLQkJcmV0dXJuIHRydWU7CiYjNDM7CQkvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqLwomIzQzOwkJaWYgKHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSB8fAomIzQzOwkJICAgIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fAomIzQzOwkJICAgIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSkgfHwKJiM0MzsJCSAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAljYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjoKIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOgpAQCAtMTA0Niw2ICYjNDM7MTA1MCwyNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAomIzQzOwkJCQkJIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KQomIzQzO3sKJiM0MzsJaWYgKCEocGt0LSZndDtmbGFncyAmYW1wOyBORlRfUEtUSU5GT19MNFBST1RPKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJc3dpdGNoIChwa3QtJmd0O3Rwcm90KSB7CiYjNDM7CWNhc2UgSVBQUk9UT19UQ1A6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spOwomIzQzOwljYXNlIElQUFJPVE9fVURQOgomIzQzOwljYXNlIElQUFJPVE9fVURQTElURToKJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7CiYjNDM7CWNhc2UgSVBQUk9UT19JQ01QVjY6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7CiYjNDM7CWNhc2UgSVBQUk9UT19JQ01QOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdikKIHsKQEAgLTEwNTUsOSAmIzQzOzEwODAsMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAljYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOgogCQlyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpOwogCWNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjoKJiM0MzsJCXJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7CiAJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6Ci0JCS8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZQotCQkgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuCiYjNDM7CQkvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZQomIzQzOwkJICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLgogCQkgKi8KIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkZUIFBheWxvYWQgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGlzc2VjdCB0aGUgbW9kaWZpY2F0aW9ucyBhbmQgdW5kZXJzdGFuZCB0aGVpciBpbXBsaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgYG5mdF9wYXlsb2FkLmNgIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIEkgc2VlIHNvbWUgY2hhbmdlcyBhbmQgYWRkaXRpb25zOiBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAsIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCwgYW5kIGEgbmV3IGZ1bmN0aW9uIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYC4KCk5vdywgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCwgZm9jdXNpbmcgYXJvdW5kIGxpbmUgMTAwMC4gVGhhdCYjMzk7cyB0aGUgdHlwaWNhbCBzcG90IHdoZXJlIEkgY2FuIGdldCBhIGdvb2QgZmVlbCBmb3IgdGhlIG92ZXJhbGwgY29udGV4dDogd2hvJiMzOTtzIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zLCB0aGUgc3RydWN0IGRlZmluaXRpb25zIHRoYXQgYXJlIGluIHBsYXksIGFuZCBhbnkgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBHZXR0aW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGFzc2Vzc21lbnQgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuIEdvdHRhIGdldCB0aGUgYmFzZWxpbmUgYmVmb3JlIG1ha2luZyBqdWRnZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTkwOlx0XG4gOTkxOlx0XHRyZXR1cm4gb2Zmc2V0IFx1MDAzYz0gc2tiX25ldHdvcmtfb2Zmc2V0KHBrdC1cdTAwM2Vza2IpO1xuIDk5MjpcdH1cbiA5OTM6XHRcbiA5OTQ6XHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gOTk1Olx0XHRcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuIDk5NjpcdHtcbiA5OTc6XHRcdHN3aXRjaCAocHJpdi1cdTAwM2ViYXNlKSB7XG4gOTk4Olx0XHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbiA5OTk6XHRcdFx0YnJlYWs7XG4xMDAwOlx0XHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuMTAwMTpcdFx0XHRpZiAoY3R4LVx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQpIHtcbjEwMDI6XHRcdFx0XHRpZiAob2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjaykgPT0gcHJpdi1cdTAwM2Vjc3VtX29mZnNldClcbjEwMDM6XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuMTAwNDpcdFxuMTAwNTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjEwMDY6XHRcdFx0fVxuMTAwNzpcdFx0XHRyZXR1cm4gdHJ1ZTsgLyogcnVuIHRpbWUgdmFsaWRhdGlvbiByZXF1aXJlZCAqL1xuMTAwODpcdFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuMTAwOTpcdFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXCYjMzQ7cmUtdXBkYXRlXCYjMzQ7IG9mIEw0IGNoZWNrc3VtICovXG4xMDEwOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTAxMTpcdFxuMTAxMjpcdFx0XHQvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqL1xuMTAxMzpcdFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHxcbjEwMTQ6XHRcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XG4xMDE1Olx0XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSkgfHxcbjEwMTY6XHRcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXG4xMDE3Olx0XHRcdFx0cmV0dXJuIHRydWU7XG4xMDE4Olx0XG4xMDE5Olx0XHRcdHJldHVybiBmYWxzZTtcbjEwMjA6XHRcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuMTAyMTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEwMjI6XHRcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbjEwMjM6XHRcdFx0YnJlYWs7XG4xMDI0Olx0XHR9XG4xMDI1Olx0XG4xMDI2Olx0XHRyZXR1cm4gZmFsc2U7XG4xMDI3Olx0fVxuMTAyODpcdFxuMTAyOTpcdC8qIGRvIG5vdCBhbGxvdyBhcmJpdHJhcnkgbmV0d29yayBoZWFkZXIgbWFuZ2xpbmcgdmlhIGJvZ3VzIGNzdW1fb2ZmLlxuMTAzMDpcdCAqIFdlIG9ubHkgc3VwcG9ydCBpcHY0LiAgT25seSBORlBST1RPX0lQVjQgY2FuIGJlIGNoZWNrZWQgZnJvbSBjb250cm9sXG4xMDMxOlx0ICogcGxhbmUuXG4xMDMyOlx0ICovXG4xMDMzOlx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuMTAzNDpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4xMDM1Olx0e1xuMTAzNjpcdFx0c3dpdGNoIChwa3QtXHUwMDNlc3RhdGUtXHUwMDNlcGYpIHtcbjEwMzc6XHRcdGNhc2UgTkZQUk9UT19JUFY0OlxuMTAzODpcdFx0XHQvKiBXYXJuaW5nOiBORlBST1RPX0lORVQgd2FzIG5vdCBjaGVja2VkOyB3ZSBjYW4mIzM5O3QgcmV0dXJuIHRydWUgaGVyZS4gKi9cbjEwMzk6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XG4xMDQwOlx0XHRjYXNlIE5GUFJPVE9fSVBWNjpcbjEwNDE6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA0MjpcdFx0Y2FzZSBORlBST1RPX0JSSURHRTpcbjEwNDM6XHRcdFx0cmV0dXJuIHBrdC1cdTAwM2VldGhlcnR5cGUgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuMTA0NDpcdFx0XHQgICAgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwNDU6XHRcdGNhc2UgTkZQUk9UT19ORVRERVY6XG4xMDQ2Olx0XHRcdHJldHVybiBwa3QtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSBcdTAwMjZcdTAwMjZcbjEwNDc6XHRcdFx0ICAgICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XG4xMDQ4Olx0XHR9XG4xMDQ5Olx0XG4xMDUwOlx0XHRyZXR1cm4gZmFsc2U7XG4xMDUxOlx0fVxuMTA1MjpcdFxuMTA1MzpcdHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbjEwNTQ6XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuMTA1NTpcdHtcbjEwNTY6XHRcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXG4xMDU3Olx0XHRcdHJldHVybiBmYWxzZTtcbjEwNTg6XHRcbjEwNTk6XHRcdHN3aXRjaCAocGt0LVx1MDAzZXRwcm90KSB7XG4xMDYwOlx0XHRjYXNlIElQUFJPVE9fVENQOlxuMTA2MTpcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4xMDYyOlx0XHRjYXNlIElQUFJPVE9fVURQOlxuMTA2MzpcdFx0Y2FzZSBJUFBST1RPX1VEUExJVEU6XG4xMDY0Olx0XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcbjEwNjU6XHRcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4xMDY2Olx0XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xuMTA2NzpcdFx0Y2FzZSBJUFBST1RPX0lDTVA6XG4xMDY4Olx0XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XG4xMDY5Olx0XHR9XG4xMDcwOlx0XG4xMDcxOlx0XHRyZXR1cm4gZmFsc2U7XG4xMDcyOlx0fVxuMTA3MzpcdFxuMTA3NDpcdHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4xMDc1Olx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuMTA3NjpcdHtcbjEwNzc6XHRcdHN3aXRjaCAocHJpdi1cdTAwM2ViYXNlKSB7XG4xMDc4Olx0XHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbjEwNzk6XHRcdFx0YnJlYWs7XG4xMDgwOlx0XHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuMTA4MTpcdFx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xuMTA4MjpcdFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuMTA4MzpcdFx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xuMTA4NDpcdFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4xMDg1Olx0XHRcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXG4xMDg2Olx0XHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbjEwODc6XHRcdFx0ICovXG4xMDg4Olx0XHRcdHJldHVybiB0cnVlO1xuMTA4OTpcdFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MDYKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBuZnRfcGF5bG9hZCBjaGVja3N1bSBmdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYG5mdF9wYXlsb2FkLmNgIGZpbGUgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlcmAgZGlyZWN0b3J5LiBNeSBhaW0gaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBjb250ZXh0IG9mIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBhbmQgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBpbnZva2VkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlaXIgcm9sZSBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgcGFydGljdWxhcmx5IHdpdGggcmVnYXJkIHRvIGNoZWNrc3VtIGhhbmRsaW5nIHdpdGhpbiBwYXlsb2FkIG1hbmlwdWxhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGNyaXRpY2FsIGluIGNvbmZpcm1pbmcgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgTmV0ZmlsdGVyIGhhbmRsZXMgY2hlY2tzdW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXR8bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05ODY9c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTk0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTUtXHRcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDUzPXN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDc0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3NS1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExMDc9c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcyLVx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzM6XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3NC1cdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTk5PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1Ny1cdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNTg6XHRcdGlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNTktXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBORlQgUGF5bG9hZCBJbml0aWFsaXphdGlvbiBhbmQgRXZhbHVhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBmdW5jdGlvbiB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBhbmQgdG8gZG8gdGhpcywgSSB3aWxsIHR1cm4gdG8gdGhlIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGZpbGUuIEdpdmVuIHRoZSBmdW5jdGlvbnMsIEkmIzM5O2xsIGZvY3VzIG15IGludmVzdGlnYXRpb24gd2l0aGluIHRoZSAxMTAwLTEyNzAgbGluZSByYW5nZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWwgc2V0dXAgb2YgdGhlIHBheWxvYWQgc2V0cyBhbmQgaG93IHRoZXkmIzM5O3JlIGV2YWx1YXRlZCB3aXRoaW4gdGhlIG92ZXJhbGwgTmV0ZmlsdGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGhpZ2hsaWdodCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSBmbGF3cyBpbiB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcbjExMDE6XHRcdGlmIChwa3QtXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXG4xMTAyOlx0XHRcdHJldHVybiB0cnVlO1xuMTEwMzpcdFxuMTEwNDpcdFx0cmV0dXJuIHByaXYtXHUwMDNlb2Zmc2V0IFx1MDAzZSBkb2ZmIHx8IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gZG9mZjtcbjExMDU6XHR9XG4xMTA2Olx0XG4xMTA3Olx0c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuMTEwODpcdFx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbjExMDk6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbjExMTA6XHR7XG4xMTExOlx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbjExMTI6XHRcdGNvbnN0IHUzMiAqc3JjID0gXHUwMDI2cmVncy1cdTAwM2VkYXRhW3ByaXYtXHUwMDNlc3JlZ107XG4xMTEzOlx0XHRpbnQgb2Zmc2V0LCBjc3VtX29mZnNldCwgdmxhbl9obGVuID0gMDtcbjExMTQ6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXHUwMDNlc2tiO1xuMTExNTpcdFx0X193c3VtIGZzdW0sIHRzdW07XG4xMTE2Olx0XG4xMTE3Olx0XHRzd2l0Y2ggKHByaXYtXHUwMDNlYmFzZSkge1xuMTExODpcdFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XG4xMTE5Olx0XHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuMTEyMDpcdFx0XHRcdGdvdG8gZXJyO1xuMTEyMTpcdFxuMTEyMjpcdFx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcdTAwMjZcdTAwMjZcbjExMjM6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cdTAwM2VvZmZzZXQsIHByaXYtXHUwMDNlbGVuKSkge1xuMTEyNDpcdFx0XHRcdGlmICghbmZ0X3BheWxvYWRfc2V0X3ZsYW4oc3JjLCBza2IsXG4xMTI1Olx0XHRcdFx0XHRcdFx0ICBwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4sXG4xMTI2Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZ2bGFuX2hsZW4pKVxuMTEyNzpcdFx0XHRcdFx0Z290byBlcnI7XG4xMTI4Olx0XG4xMTI5Olx0XHRcdFx0aWYgKCF2bGFuX2hsZW4pXG4xMTMwOlx0XHRcdFx0XHRyZXR1cm47XG4xMTMxOlx0XHRcdH1cbjExMzI6XHRcbjExMzM6XHRcdFx0b2Zmc2V0ID0gc2tiX21hY19oZWFkZXIoc2tiKSAtIHNrYi1cdTAwM2VkYXRhIC0gdmxhbl9obGVuO1xuMTEzNDpcdFx0XHRpZiAoIW5mdF9sbF93cml0ZV9vayhwa3QsIHByaXYtXHUwMDNlbGVuICYjNDM7IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IG9mZnNldCkpXG4xMTM1Olx0XHRcdFx0Z290byBlcnI7XG4xMTM2Olx0XHRcdGJyZWFrO1xuMTEzNzpcdFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbjExMzg6XHRcdFx0aWYgKCFuZnRfbmhfd3JpdGVfb2socGt0LCBwcml2LCBzcmMpKVxuMTEzOTpcdFx0XHRcdGdvdG8gZXJyO1xuMTE0MDpcdFx0XHRvZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcbjExNDE6XHRcdFx0YnJlYWs7XG4xMTQyOlx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMTQzOlx0XHRcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykgfHwgcGt0LVx1MDAzZWZyYWdvZmYpXG4xMTQ0Olx0XHRcdFx0Z290byBlcnI7XG4xMTQ1Olx0XHRcdGlmICghbmZ0X3RoX3dyaXRlX29rKHBrdCwgcHJpdikpXG4xMTQ2Olx0XHRcdFx0Z290byBlcnI7XG4xMTQ3Olx0XHRcdG9mZnNldCA9IG5mdF90aG9mZihwa3QpO1xuMTE0ODpcdFx0XHRicmVhaztcbjExNDk6XHRcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuMTE1MDpcdFx0XHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcbjExNTE6XHRcdFx0aWYgKG9mZnNldCBcdTAwM2MgMClcbjExNTI6XHRcdFx0XHRnb3RvIGVycjtcbjExNTM6XHRcdFx0YnJlYWs7XG4xMTU0Olx0XHRkZWZhdWx0OlxuMTE1NTpcdFx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKDEpO1xuMTE1NjpcdFx0XHRnb3RvIGVycjtcbjExNTc6XHRcdH1cbjExNTg6XHRcbjExNTk6XHRcdGNzdW1fb2Zmc2V0ID0gb2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlY3N1bV9vZmZzZXQ7XG4xMTYwOlx0XHRvZmZzZXQgJiM0Mzs9IHByaXYtXHUwMDNlb2Zmc2V0O1xuMTE2MTpcdFxuMTE2MjpcdFx0aWYgKChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgfHwgcHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbjExNjM6XHRcdCAgICAoKHByaXYtXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIFx1MDAyNlx1MDAyNlxuMTE2NDpcdFx0ICAgICAgcHJpdi1cdTAwM2ViYXNlICE9IE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUikgfHxcbjExNjU6XHRcdCAgICAgc2tiLVx1MDAzZWlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKSkge1xuMTE2NjpcdFx0XHRpZiAob2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuMTE2NzpcdFx0XHRcdGdvdG8gZXJyO1xuMTE2ODpcdFxuMTE2OTpcdFx0XHRmc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBwcml2LVx1MDAzZWxlbiwgMCk7XG4xMTcwOlx0XHRcdHRzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBwcml2LVx1MDAzZWxlbiwgMCk7XG4xMTcxOlx0XG4xMTcyOlx0XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG4xMTczOlx0XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXHUwMDI2XHUwMDI2XG4xMTc0Olx0XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcbjExNzU6XHRcdFx0XHRnb3RvIGVycjtcbjExNzY6XHRcbjExNzc6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncyBcdTAwMjZcdTAwMjZcbjExNzg6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX2w0Y3N1bV91cGRhdGUocGt0LCBza2IsIGZzdW0sIHRzdW0pIFx1MDAzYyAwKVxuMTE3OTpcdFx0XHRcdGdvdG8gZXJyO1xuMTE4MDpcdFx0fVxuMTE4MTpcdFxuMTE4MjpcdFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXgob2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuLCAwKSkgfHxcbjExODM6XHRcdCAgICBza2Jfc3RvcmVfYml0cyhza2IsIG9mZnNldCwgc3JjLCBwcml2LVx1MDAzZWxlbikgXHUwMDNjIDApXG4xMTg0Olx0XHRcdGdvdG8gZXJyO1xuMTE4NTpcdFxuMTE4NjpcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fU0NUUCBcdTAwMjZcdTAwMjZcbjExODc6XHRcdCAgICBwa3QtXHUwMDNldHByb3QgPT0gSVBQUk9UT19TQ1RQIFx1MDAyNlx1MDAyNlxuMTE4ODpcdFx0ICAgIHNrYi1cdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuMTE4OTpcdFx0XHRpZiAocGt0LVx1MDAzZWZyYWdvZmYgPT0gMCBcdTAwMjZcdTAwMjZcbjExOTA6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fc2N0cChza2IsIG5mdF90aG9mZihwa3QpKSlcbjExOTE6XHRcdFx0XHRnb3RvIGVycjtcbjExOTI6XHRcdH1cbjExOTM6XHRcbjExOTQ6XHRcdHJldHVybjtcbjExOTU6XHRlcnI6XG4xMTk2Olx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcbjExOTc6XHR9XG4xMTk4Olx0XG4xMTk5Olx0c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipLY29uZmlnIGFuZCBNYWtlZmlsZXM6IENoZWNraW5nIHRoZSBQcmVyZXF1aXNpdGVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGUgcHJlcmVxdWlzaXRlcyBmb3IgYG5mdF9wYXlsb2FkLmNgIGFyZSBhbGwgaW4gcGxhY2UuIEZpcnN0IHRoaW5ncyBmaXJzdCwgdGhhdCBLY29uZmlnIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBuYXZpZ2F0ZSBvdmVyIHRvIGBuZXQvbmV0ZmlsdGVyL2AgYW5kIHRha2UgYSBsb29rIGF0IGl0LiBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgSSBoYXZlbiYjMzk7dCBjb25zaWRlcmVkLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gVGhlbiBJJiMzOTtsbCBkaXZlIGludG8gdGhlIE1ha2VmaWxlIGluIHRoYXQgc2FtZSBkaXJlY3RvcnksIGBuZXQvbmV0ZmlsdGVyL2AuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyB0byBzZWUgaG93IGBuZnRfcGF5bG9hZC5jYCBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gTm8gc3VycHJpc2VzOyBqdXN0IG1ha2Ugc3VyZSB0aGUgYnVpbGQgcHJvY2VzcyBpcyBzZXQgdXAgY29ycmVjdGx5IGFuZCBub3RoaW5nJiMzOTtzIGJlZW4gb3Zlcmxvb2tlZC4gSSYjMzk7bGwgZm9jdXMgb24gYW55dGhpbmcgcmVsYXRpbmcgdG8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1vZHVsZXMuIEl0JiMzOTtzIGFsbCBhYm91dCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBrbm93cyB3aGF0IEkmIzM5O20gZXhwZWN0aW5nIGFuZCBldmVyeXRoaW5nIHdpbGwgd29yayBhcyBwbGFubmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcGF5bG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVx0XHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODk6XHRcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXHRcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MTM1PXN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfdHJhY2VfdmVyZGljdChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMTQzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjE0NDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9mYXN0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTE0NS1cdFx0XHRcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDcte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjE0ODpcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMTQ5LVx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTIwMz1zdGF0aWMgdm9pZCBleHByX2NhbGxfb3BzX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yMTctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MjE4Olx0WChlLCBuZnRfcGF5bG9hZF9ldmFsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yMTktXHRYKGUsIG5mdF9jbXBfZXZhbCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTI1MD1uZnRfZG9fY2hhaW4oc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIHZvaWQgKnByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTI4Mi1cdFx0XHRcdG5mdF9iaXR3aXNlX2Zhc3RfZXZhbChleHByLCBcdTAwMjZyZWdzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoyODM6XHRcdFx0ZWxzZSBpZiAoZXhwci1cdTAwM2VvcHMgIT0gXHUwMDI2bmZ0X3BheWxvYWRfZmFzdF9vcHMgfHxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoyODQ6XHRcdFx0XHQgIW5mdF9wYXlsb2FkX2Zhc3RfZXZhbChleHByLCBcdTAwMjZyZWdzLCBwa3QpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTI4NS1cdFx0XHRcdGV4cHJfY2FsbF9vcHNfZXZhbChleHByLCBcdTAwMjZyZWdzLCBwa3QpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYz0zNTI9c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlICpuZnRfYmFzaWNfdHlwZXNbXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMzU3LVx0XHUwMDI2bmZ0X2J5dGVvcmRlcl90eXBlLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjM1ODpcdFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMzU5LVx0XHUwMDI2bmZ0X2R5bnNldF90eXBlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTExND11bmlvbiBuZnRfY21wX29mZmxvYWRfZGF0YSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMTE5LVxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTIwOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX24yaCh1bmlvbiBuZnRfY21wX29mZmxvYWRfZGF0YSAqZGF0YSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTEyMS1cdFx0XHQgICAgY29uc3QgdTggKnZhbCwgdTMyIGxlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYz0xMzk9c3RhdGljIGludCBfX25mdF9jbXBfb2ZmbG9hZChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMTUyLVx0aWYgKHJlZy1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX09GRkxPQURfRl9ORVRXT1JLMkhPU1QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjE1MzpcdFx0bmZ0X3BheWxvYWRfbjJoKFx1MDAyNl9kYXRhLCAodTggKilcdTAwMjZwcml2LVx1MDAzZWRhdGEsIHJlZy1cdTAwM2VsZW4pO1xubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTU0Olx0XHRuZnRfcGF5bG9hZF9uMmgoXHUwMDI2X2RhdGFtYXNrLCAodTggKilcdTAwMjZyZWctXHUwMDNlbWFzaywgcmVnLVx1MDAzZWxlbik7XG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xNTUtXHRcdGRhdGEgPSAodTggKilcdTAwMjZfZGF0YTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jPTM2PXN0cnVjdCBfX25mdF9leHByIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTM4LVx0dW5pb24ge1xubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYzozOTpcdFx0c3RydWN0IG5mdF9wYXlsb2FkXHRwYXlsb2FkO1xubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy00MC1cdFx0c3RydWN0IG5mdF9tZXRhXHRcdG1ldGE7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYz0yOTA9c3RhdGljIHZvaWQgbmZ0X2lubmVyX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy0yOTUtXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jOjI5NjpcdGlmIChuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KSBcdTAwM2MgMClcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMjk3LVx0XHRnb3RvIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTMwNC1cdGNhc2UgTkZUX0lOTkVSX0VYUFJfUEFZTE9BRDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM6MzA1Olx0XHRuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKChzdHJ1Y3QgbmZ0X2V4cHIgKilcdTAwMjZwcml2LVx1MDAzZWV4cHIsIHJlZ3MsIHBrdCwgXHUwMDI2dHVuX2N0eCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTMwNi1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI4LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3JlYnVpbGRfdmxhbl9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG1hY19vZmYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAtXHRcdFx0XHRcdCBzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGgpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTQzPXN0YXRpYyBib29sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDQ6bmZ0X3BheWxvYWRfY29weV92bGFuKHUzMiAqZCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG9mZnNldCwgdTggbGVuKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ6XHRcdGlmICghbmZ0X3BheWxvYWRfcmVidWlsZF92bGFuX2hkcihza2IsIG1hY19vZmYsIFx1MDAyNnZldGgpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzU6c3RhdGljIGludCBfX25mdF9wYXlsb2FkX2lubmVyX29mZnNldChzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03Ni17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzOS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNDA6aW50IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDEte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0Mi1cdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fSU5ORVIpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE0MzpcdCAgICBfX25mdF9wYXlsb2FkX2lubmVyX29mZnNldCgoc3RydWN0IG5mdF9wa3RpbmZvICopcGt0KSBcdTAwM2MgMClcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDQtXHRcdHJldHVybiAtMTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTQ4LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE0OTpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHUzMiBvZmZzZXQsIHUzMiBsZW4pXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTUwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTU5LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE2MDp2b2lkIG5mdF9wYXlsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE2MS1cdFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNjMte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE2NDpcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTY1LVx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE3Ny1cdFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTc4Olx0XHQgICAgbmZ0X3BheWxvYWRfbmVlZF92bGFuX2FkanVzdChwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4pKSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTc5Olx0XHRcdGlmICghbmZ0X3BheWxvYWRfY29weV92bGFuKGRlc3QsIHNrYixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xODAtXHRcdFx0XHRcdFx0ICAgcHJpdi1cdTAwM2VvZmZzZXQsIHByaXYtXHUwMDNlbGVuKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTk0LVx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTk1Olx0XHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xOTYtXHRcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTI6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9wYXlsb2FkX3BvbGljeVtORlRBX1BBWUxPQURfTUFYICYjNDM7IDFdID0ge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxMy1cdFtORlRBX1BBWUxPQURfU1JFR11cdFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyMi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMjM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjI0LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyNi17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjI3Olx0c3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMjgtXHR1MzIgb2Zmc2V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNDMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjQ0OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0NS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLCBib29sIHJlc2V0KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0Ni17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjQ3Olx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNDgtXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI1OS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNjA6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNjEtXHRcdFx0XHQgICAgIHUzMiBwcml2X2xlbiwgdTMyIGZpZWxkX2xlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc3LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI3ODpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3OS1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjgwOlx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjgxLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg1LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3NvdXJjZSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjg2Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBFVEhfQUxFTikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg3LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX2Rlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5MzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgRVRIX0FMRU4pKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5NC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5OS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9wcm90byk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzAwOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAxLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA3LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMwODpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwOS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMTY6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTctXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjMtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSkgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzI0Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzI1LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMyLVx0XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzMzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzM0LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ2LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM0NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0OC1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzQ5Olx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzUwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNTU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU2LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzYzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNjQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzY1LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzcyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNzM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzc0LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg2LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM4NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODgtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM4OTpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5MC17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5NC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIHNhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozOTU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzk2LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwMy1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIGRhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MDQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDA1LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxMi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQxMzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fdTgpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDI3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9uaChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI4LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mjk6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzQtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MzU6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzYtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNy1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM4Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzOS1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0Ni1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ4LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDQ5Olx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1MC17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1NC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NTU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTYtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjEtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ2MjpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2My1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3NC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzU6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc2LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDc3Olx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3OC17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4Mi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODktXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ5MDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ5MS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MDM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDQtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwNTpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwNi17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMC1cdGNhc2UgSVBQUk9UT19UQ1A6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTExOlx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMi1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEzLVx0Y2FzZSBJUFBST1RPX1VEUDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MTQ6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTE1LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUyMzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWQoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyNC1cdFx0XHQgICAgICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyNi17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTI3Olx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjgtXHRpbnQgZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzEtXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzI6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzMtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNC1cdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM1Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM2LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzctXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM4Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM5LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTQ2LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU0NzpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ4Olx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU0OTpcdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUwOlx0LmV2YWxcdFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MTpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTI6XHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUzOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTQtfTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU2OmNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfZmFzdF9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU3Olx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1ODpcdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU5Olx0LmV2YWxcdFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MDpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjE6XHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYyOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjMtfTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTY1OnZvaWQgbmZ0X3BheWxvYWRfaW5uZXJfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjYtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01Njgte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2OTpcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTcwLVx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cdTAwM2Vza2I7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYxNS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2MTY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9pbm5lcl9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjE3LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYxOS17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjIwOlx0c3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MjEtXHR1MzIgYmFzZSwgb2Zmc2V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTAtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjUxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2lubmVyX29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTI6XHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjUzOlx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTQ6XHQuaW5pdFx0XHQ9IG5mdF9wYXlsb2FkX2lubmVyX2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjU1Olx0LmR1bXBcdFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1NjpcdC8qIGRpcmVjdCBjYWxsIHRvIG5mdF9wYXlsb2FkX2lubmVyX2V2YWwoKS4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTctfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NjU5PXN0YXRpYyBpbmxpbmUgdm9pZCBuZnRfY3N1bV9yZXBsYWNlKF9fc3VtMTYgKnN1bSwgX193c3VtIGZzdW0sIF9fd3N1bSB0c3VtKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NjUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjY2OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3VkcF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjY3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjc2LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY3NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2w0Y3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjc4LVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02ODgtXHRjYXNlIElQUFJPVE9fVURQOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY4OTpcdFx0aWYgKCFuZnRfcGF5bG9hZF91ZHBfY2hlY2tzdW0oc2tiLCBuZnRfdGhvZmYocGt0KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjkwLVx0XHRcdHJldHVybiAtMTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzA1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjcwNjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2NzdW1fc2N0cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcwNy17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcxOC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3MTk6c3RhdGljIGludCBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcyMC1cdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzI4LVx0ICovXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzI5Olx0aWYgKG5mdF9wYXlsb2FkX2w0Y3N1bV9vZmZzZXQocGt0LCBza2IsIFx1MDAyNmw0Y3N1bV9vZmZzZXQpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTczMC1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc1NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NTY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyICpzcmMsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzU3LVx0XHRcdFx0IF9fd3N1bSBmc3VtLCBfX3dzdW0gdHN1bSwgaW50IGNzdW1fb2Zmc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NzEtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzcyOnN0cnVjdCBuZnRfcGF5bG9hZF9zZXQge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc3MzpcdGVudW0gbmZ0X3BheWxvYWRfYmFzZXNcdGJhc2U6ODtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NzQtXHR1MTZcdFx0XHRvZmZzZXQ7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc4Mi0vKiBUaGlzIGlzIG5vdCBzdHJ1Y3Qgdmxhbl9oZHIuICovXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzgzOnN0cnVjdCBuZnRfcGF5bG9hZF92bGFuX2hkciB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzg0LVx0X19iZTE2XHRcdFx0aF92bGFuX3Byb3RvO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz03ODg9c3RhdGljIGJvb2xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3ODk6bmZ0X3BheWxvYWRfc2V0X3ZsYW4oY29uc3QgdTMyICpzcmMsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiBvZmZzZXQsIHU4IGxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03OTAtXHRcdCAgICAgaW50ICp2bGFuX2hsZW4pXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzkxLXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3OTI6XHRzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIgKnZsYW5oO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc5My1cdF9fYmUxNiB2bGFuX3Byb3RvO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy04MDYtXHRcdH0gZWxzZSBpZiAobGVuID09IDQpIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo4MDc6XHRcdFx0dmxhbmggPSAoc3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyICopc3JjO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgwOC1cdFx0XHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbmgtXHUwMDNlaF92bGFuX3Byb3RvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz04Mzc9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo4Mzg6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgzOS1cdFx0XHRcdGNvbnN0IHUzMiAqc3JjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz04ODM9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo4ODQ6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTg4NS1cdFx0XHRcdGNvbnN0IHUzMiAqc3JjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MDQtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTA1OnN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19hcnAoY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MDYte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05MjQ9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX25ldGRldihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5MjU6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkyNi1cdFx0XHRcdCAgIGNvbnN0IHUzMiAqc3JjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05NDU9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2JyaWRnZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5NDY6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk0Ny1cdFx0XHRcdCAgIGNvbnN0IHUzMiAqc3JjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05NjM9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk2NDpcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NjUtXHRcdFx0ICAgIGNvbnN0IHUzMiAqc3JjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05ODY9c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTk0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTU6XHRcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5Ni17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwMzItICovXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTAzMzpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTAzNC1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDUyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNTM6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNTQtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDc0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3NTpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3Ni17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwODAtXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwODE6XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4Mi1cdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgzOlx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwODQtXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTA5Nj1zdGF0aWMgYm9vbCBuZnRfdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA5NzpcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDk4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEwNi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTA3OnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA4LVx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTExMC17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTExMTpcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMTItXHRjb25zdCB1MzIgKnNyYyA9IFx1MDAyNnJlZ3MtXHUwMDNlZGF0YVtwcml2LVx1MDAzZXNyZWddO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTIyLVx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTIzOlx0XHQgICAgbmZ0X3BheWxvYWRfbmVlZF92bGFuX2FkanVzdChwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4pKSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTEyNDpcdFx0XHRpZiAoIW5mdF9wYXlsb2FkX3NldF92bGFuKHNyYywgc2tiLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMjUtXHRcdFx0XHRcdFx0ICBwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNDktXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTUwOlx0XHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTUxLVx0XHRpZiAob2Zmc2V0IFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcyLVx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzM6XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3NDpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzUtXHRcdFx0Z290byBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzctXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fZmxhZ3MgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3ODpcdFx0ICAgIG5mdF9wYXlsb2FkX2w0Y3N1bV91cGRhdGUocGt0LCBza2IsIGZzdW0sIHRzdW0pIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzktXHRcdFx0Z290byBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExODktXHRcdGlmIChwa3QtXHUwMDNlZnJhZ29mZiA9PSAwIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExOTA6XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3NjdHAoc2tiLCBuZnRfdGhvZmYocGt0KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE5MS1cdFx0XHRnb3RvIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE5OC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTk5OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjAwLVx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjAzLVx0dTMyIGNzdW1fb2Zmc2V0LCBvZmZzZXQsIGNzdW1fdHlwZSA9IE5GVF9QQVlMT0FEX0NTVU1fTk9ORTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjA0Olx0c3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTIwNS1cdGludCBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNTctXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fSU5FVDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjU4Olx0XHRpZiAoIW5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY3R4LCBwcml2KSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU5LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc5LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyODA6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyODEtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI4Mi17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI4MzpcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyODQtXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyOTktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMDpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDE6XHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMjpcdC5zaXplXHRcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkX3NldCkpLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDM6XHQuZXZhbFx0XHQ9IG5mdF9wYXlsb2FkX3NldF9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDQ6XHQuaW5pdFx0XHQ9IG5mdF9wYXlsb2FkX3NldF9pbml0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDU6XHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX3NldF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMDYtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyAqXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwOTpuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMxMC1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMTEte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMTI6XHRlbnVtIG5mdF9wYXlsb2FkX2Jhc2VzIGJhc2U7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMxMy1cdHVuc2lnbmVkIGludCBvZmZzZXQsIGxlbjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMzNC1cdFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzM1Olx0XHRyZXR1cm4gXHUwMDI2bmZ0X3BheWxvYWRfc2V0X29wcztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzM2LVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzUwLVx0ICAgIGJhc2UgIT0gTkZUX1BBWUxPQURfTExfSEVBREVSIFx1MDAyNlx1MDAyNiBiYXNlICE9IE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzUxOlx0XHRyZXR1cm4gXHUwMDI2bmZ0X3BheWxvYWRfZmFzdF9vcHM7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1Mi1cdGVsc2Vcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzUzOlx0XHRyZXR1cm4gXHUwMDI2bmZ0X3BheWxvYWRfb3BzO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTQtfVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1NjpzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1Ny1cdC5uYW1lXHRcdD0gXCYjMzQ7cGF5bG9hZFwmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU4Olx0LnNlbGVjdF9vcHNcdD0gbmZ0X3BheWxvYWRfc2VsZWN0X29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU5Olx0LmlubmVyX29wc1x0PSBcdTAwMjZuZnRfcGF5bG9hZF9pbm5lcl9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM2MDpcdC5wb2xpY3lcdFx0PSBuZnRfcGF5bG9hZF9wb2xpY3ksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM2MS1cdC5tYXhhdHRyXHQ9IE5GVEFfUEFZTE9BRF9NQVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzMzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIG5mX3RhYmxlcyBhbmQgbmZ0X3BheWxvYWQgaW4gS2NvbmZpZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYG5mX3RhYmxlc2AgYW5kIHNwZWNpZmljYWxseSBgbmZ0X3BheWxvYWRgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMsIGFuZCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZS4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSBncmFzcCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucywgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHRvIHdhdGNoIG91dCBmb3IuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIG9uIHRoZSBLY29uZmlnIHRyZWUsIGJ1dCBJIGFudGljaXBhdGUgaGF2aW5nIHRvIHRyYWNlIHRocm91Z2ggYSBmZXcgaW5jbHVkZXMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGdvYWwgaXMgYSBxdWljayBhbmQgZGlydHkgY29uZmlndXJhdGlvbiBvdmVydmlldyBvZiB0aGVzZSBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNj1jb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOC1cdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzk6XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQwLVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcxOmlmIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXHRkZXBlbmRzIG9uIElQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzQ6XHRzZWxlY3QgTkZfVEFCTEVTX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzU6XHRzZWxlY3QgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzYtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbWl4ZWQgSVB2NC9JUHY2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTU1MD1jb25maWcgTkZUX05BVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NTItXHRzZWxlY3QgTkZfTkFUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTUzOlx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSVBWNCB8fCBORl9UQUJMRVNfSVBWNlxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1NC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmF0IG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01ODY9Y29uZmlnIE5GVF9SRUpFQ1RfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU4NzpcdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01ODgtXHRkZWZhdWx0IE5GVF9SRUpFQ1Rcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjA4PWNvbmZpZyBORlRfRklCX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MDk6XHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjEwLVx0ZGVwZW5kcyBvbiBORlRfRklCX0lQVjRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjI1PWNvbmZpZyBORlRfU09DS0VUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTYyNy1cdHNlbGVjdCBORl9TT0NLRVRfSVBWNFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyODpcdHNlbGVjdCBORl9TT0NLRVRfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxubmV0L25ldGZpbHRlci9LY29uZmlnLTYyOS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQwPWNvbmZpZyBORlRfVFBST1hZXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Mi1cdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0MzpcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0NC1cdHNlbGVjdCBORl9UUFJPWFlfSVBWNFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0NTpcdHNlbGVjdCBORl9UUFJPWFlfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Ni1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQ5PWNvbmZpZyBORlRfU1lOUFJPWFlcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjU5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjY2MDppZiBORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjYxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02ODk9Y29uZmlnIE5GVF9SRUpFQ1RfTkVUREVWXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY5OC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2OTk6ZW5kaWYgIyBORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMTplbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NzExPWNvbmZpZyBORl9GTE9XX1RBQkxFXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxNC1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzE1Olx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDQ0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3Mgb2YgYG5mdF9wYXlsb2FkLm9gKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgbmZ0X3BheWxvYWQub2AgZ2V0cyBjb21waWxlZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgbG9vayBpcyB0aGUga2VybmVsJiMzOTtzIGBuZXRmaWx0ZXJgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IGF0IHRoZSBgTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHRoZSB0eXBpY2FsIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIG9iamVjdCBmaWxlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMgd2l0aGluIHRoaXMgcGFydGljdWxhciBzdWJzeXN0ZW0uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3Mgc3RydWN0dXJlZCBpbiBhIHN0YW5kYXJkIHdheSwgc28gdGhlIE1ha2VmaWxlIGluIHRoYXQgbG9jYXRpb24gc2hvdWxkIGhhdmUgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uLCBJJiMzOTtsbCBnbyBjaGVjayB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT04ND1vYmotJChDT05GSUdfTkZfRFVQX05FVERFVilcdCYjNDM7PSBuZl9kdXBfbmV0ZGV2Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODUtXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg2OiMgbmZfdGFibGVzXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg3Om5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4ODpcdFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg5LVx0XHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MS1cdFx0ICBuZnRfY291bnRlci5vIG5mdF9vYmpyZWYubyBuZnRfaW5uZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5MjpcdFx0ICBuZnRfY2hhaW5fcm91dGUubyBuZl90YWJsZXNfb2ZmbG9hZC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkzLVx0XHQgIG5mdF9zZXRfaGFzaC5vIG5mdF9zZXRfYml0bWFwLm8gbmZ0X3NldF9yYnRyZWUubyBcXFxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9OTc9aWZuZGVmIENPTkZJR19VTUxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6OTg6bmZfdGFibGVzLW9ianMgJiM0Mzs9IG5mdF9zZXRfcGlwYXBvX2F2eDIub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS05OS1lbmRpZlxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTAzPWlmZGVmIENPTkZJR19NSVRJR0FUSU9OX1JFVFBPTElORVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMDQ6bmZfdGFibGVzLW9ianMgJiM0Mzs9IG5mdF9jdF9mYXN0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTA1LWVuZGlmXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEwNj1lbmRpZlxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMDctXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEwODpvYmotJChDT05GSUdfTkZfVEFCTEVTKVx0XHQmIzQzOz0gbmZfdGFibGVzLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTA5LW9iai0kKENPTkZJR19ORlRfQ09NUEFUKVx0JiM0Mzs9IG5mdF9jb21wYXQub1xuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTM1PW9iai0kKENPTkZJR19ORlRfTkFUKVx0XHQmIzQzOz0gbmZ0X2NoYWluX25hdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEzNi1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTM3OiMgbmZfdGFibGVzIG5ldGRldlxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMzgtb2JqLSQoQ09ORklHX05GVF9EVVBfTkVUREVWKVx0JiM0Mzs9IG5mdF9kdXBfbmV0ZGV2Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIG5ldGZpbHRlci9uZl90YWJsZXMgUGF5bG9hZCBDaGVja3N1bSBWYWxpZGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYmFzZWQgb24gdGhlIGBDT05GSUdfTkZfVEFCTEVTYCBidWlsZCBjaGFpbiwgaXQgbG9va3MgbGlrZSB0aGlzIGNlbnRlcnMgYXJvdW5kIGBuZnRfcGF5bG9hZC5vYCwgd2hpY2ggaXMgaW5jbHVkZWQgd2hlbiB3ZSBidWlsZCB3aXRoIGBORl9UQUJMRVNgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGBORl9UQUJMRVNgIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgaGVyZS4KClJpZ2h0LCBzbyBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGNoYW5nZXMgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgYGNzdW1fb2Zmc2V0YCB3aXRoaW4gYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoKWAuIFByZXZpb3VzbHksIHdoZW4gYHByaXYtJmd0O2Jhc2VgIHdhcyBgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUmAsIGl0IGp1c3QgY2hlY2tlZCBgcHJpdi0mZ3Q7Y3N1bV9mbGFnc2AuIE5vdywgd2UmIzM5O3JlIHNlZWluZyBzcGVjaWZpYyBjaGVja3M6IGl0JiMzOTtzIG1ha2luZyBzdXJlIGBjc3VtX29mZnNldGAgaXMgYSB2YWxpZCBjaGVja3N1bSBvZmZzZXQgZm9yIGVpdGhlciBUQ1AsIFVEUCwgSUNNUCwgb3IgSUNNUHY2IGhlYWRlcnMuCgpUaGVuLCB0aGVyZSYjMzk7cyBhIG5ldyBmdW5jdGlvbiwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soKWAsIHdoaWNoIGxvb2tzIHRvIGJlIHRoZSBrZXkuIFRoaXMgY2hlY2tzLCBhdCBwYWNrZXQgZXZhbHVhdGlvbiB0aW1lLCBpZiB0aGUgd3JpdGUgb3BlcmF0aW9uIGlzIG9rYXkuIEl0IGxvb2tzIGxpa2UgaXQgb25seSByZXR1cm5zIHRydWUgaWYgdGhlIHBhY2tldCBoYXMgYW4gTDQgcHJvdG9jb2wgYW5kIHRoZSBgY3N1bV9vZmZzZXRgIG1hdGNoZXMgdGhlIGFwcHJvcHJpYXRlIGNoZWNrc3VtIGZpZWxkIGZvciBUQ1AsIFVEUCwgSUNNUHY2LCBvciBJQ01QLiBUaGUgb2xkZXIgY29kZSB1c2VkIHRvIGZhbGwgdGhyb3VnaCB0byBhIGRpZmZlcmVudCBwYXRoLgoKVGhpcyBpcyByZWFjaGFibGUgY29kZSwgbm8gZG91YnQuIFRoZSBgbmZ0X3BheWxvYWRgIGZ1bmN0aW9uYWxpdHkgaXMgcGFydCBvZiBuZXRmaWx0ZXImIzM5O3MgbmZfdGFibGVzLCB3aGljaCBpcyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIChuZm5ldGxpbmspLiBBbmQsIGltcG9ydGFudGx5LCB0aGlzIGlzIGFjY2Vzc2libGUgZnJvbSB1bnByaXZpbGVnZWQgdXNlciBuYW1lc3BhY2VzLiBUaGlzIG1lYW5zIHdlIGFyZSBkZWFsaW5nIHdpdGggY29udHJvbCBwbGFuZSB2YWxpZGF0aW9uIGFuZCBkYXRhIHBsYW5lIHBhY2tldCBldmFsdWF0aW9uLiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIGEgY2xlYXIgeWVzLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBib3RoIGNvbnRyb2wgcGxhbmUgdmFsaWRhdGlvbiBhbmQgZGF0YSBwbGFuZSBwYWNrZXQgZXZhbHVhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHNwZWNpZmljIHN5bWJvbHMuIFdlIGhhdmUgYG5mdF9wYXlsb2FkX3NldF9pbml0YCAod2hpY2ggY2FsbHMgdGhlIHN0YXRpYyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGApLCBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgaXRzZWxmIChzdGF0aWMsIGNhbGxlZCBieSBpbml0KSwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgIChhbm90aGVyIHN0YXRpYyBmdW5jdGlvbiksIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCAoYWxzbyBzdGF0aWMsIGNhbGxlZCBkdXJpbmcgZXZhbHVhdGlvbiksIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIHdoaWNoIGlzIGEgbm9uLXN0YXRpYyBldmFsdWF0aW9uIGNhbGxiYWNrIHRoYXQgY2FsbHMgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IHN0YXRpYyBmdW5jdGlvbnMgaW4gdGhlIGtlcm5lbCAqZG8qIGhhdmUgc3ltYm9scyBpbiBgdm1saW51eGAsIGVzcGVjaWFsbHkgd2l0aCBtb2Rlcm4ga2VybmVsIGJ1aWxkcyBhbmQgc3RhbmRhcmQgY29tcGlsZXIgZmxhZ3MsIHNvIGxvbmcgYXMgdGhleSBhcmVuJiMzOTt0IGlubGluZWQuIFRoaXMgbWVhbnMgdGhlc2UgYXJlIGFsbCB2aWFibGUgc3ltYm9scyB0byBjb25zaWRlci4KCkZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zLCBsZXQmIzM5O3Mga2VlcCB0aGUgZm9jdXMgb24gZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW1wbGVtZW50IG9yIGFsdGVyIHRoZSBuZXcgbG9naWM6IGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgLCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AsIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAsIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLiBUaGVzZSBhcmUgYWxsIHZlcnkgc3BlY2lmaWMgdG8gbmZfdGFibGVzIHBheWxvYWQgZXhwcmVzc2lvbnMsIG5vdCB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycy4KCkZpbmFsbHksIHdlIG5lZWQgdG8gY2hlY2sgY29uZmlnIGRlcGVuZGVuY2llcy4gYENPTkZJR19ORl9UQUJMRVNgICh3aGljaCB3ZSBjYW4gc3RyaXAgdG8gc2ltcGx5IGBORl9UQUJMRVNgKSBpcyBjbGVhcmx5IHRoZSBtYWluIG9uZSwgYnV0IG5mX3RhYmxlcyBpbiB0dXJuIGRlcGVuZHMgb24gYENPTkZJR19ORVRGSUxURVJgIGFuZCB0aGVyZWZvcmUgYE5FVGAuIExldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhpcyBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9UQUJMRVNcXGImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5NTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgTkZfVEFCTEVTIERlcGVuZGVuY3kgVHJlZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIG9mIGBORl9UQUJMRVNgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIGVhc2llc3QgYW5kIG1vc3QgZGlyZWN0IHdheSB0byBkbyB0aGlzLCBpbiBteSBleHBlcmllbmNlLCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZS4gTGV0JiMzOTtzIHNlZS4uLiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBzb3VuZHMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgYE5GX1RBQkxFU2AgaXMgb2J2aW91c2x5IHJlbGF0ZWQgdG8gTmV0ZmlsdGVyLiBOb3csIEkgdmFndWVseSByZWNhbGwgdGhhdCB0aGlzIGlzIHVzdWFsbHkgaGFuZGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgS2NvbmZpZyBzdHJ1Y3R1cmUsIGFuZCB0aGF0IHBhcmVudCBkZXBlbmRlbmNpZXMgYXJlIGNsZWFybHkgbGFpZCBvdXQgaW4gdGhlIGZpbGUuIFNpbmNlIEkgaGF2ZSBhIHByZXR0eSBnb29kIGlkZWEgb2YgdGhlIGdlbmVyYWwgb3JnYW5pemF0aW9uIG9mIHRoaXMsIEkmIzM5O2xsIGhvbmUgaW4gYXJvdW5kIGxpbmUgNDUwLCBhcyB0aGF0IG9mdGVuIHNlZW1zIHRvIGJlIHRoZSByaWdodCBzZWN0aW9uIGZvciBOZXRmaWx0ZXIgY29yZSBjb21wb25lbnRzLiBIb3BlZnVsbHksIHRoZSBmaWxlIGlzIHdlbGwtY29tbWVudGVkLCBhbmQgSSBjYW4gcXVpY2tseSBnZXQgYSBoYW5kbGUgb24gd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIG9yIGNvbmZpZ3VyZWQgYmVmb3JlIEkgY2FuIGV2ZW4gZW5hYmxlIGBORl9UQUJMRVNgIGl0c2VsZi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ0NTpcdFx0Ym9vbFxuIDQ0NjpcdFxuIDQ0NzpcdGNvbmZpZyBORl9OQVRfT1ZTXG4gNDQ4Olx0XHRib29sXG4gNDQ5Olx0XG4gNDUwOlx0Y29uZmlnIE5FVEZJTFRFUl9TWU5QUk9YWVxuIDQ1MTpcdFx0dHJpc3RhdGVcbiA0NTI6XHRcbiA0NTM6XHRlbmRpZiAjIE5GX0NPTk5UUkFDS1xuIDQ1NDpcdFxuIDQ1NTpcdGNvbmZpZyBORl9UQUJMRVNcbiA0NTY6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuIDQ1NzpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiA0NTg6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuIDQ1OTpcdFx0aGVscFxuIDQ2MDpcdFx0ICBuZnRhYmxlcyBpcyB0aGUgbmV3IHBhY2tldCBjbGFzc2lmaWNhdGlvbiBmcmFtZXdvcmsgdGhhdCBpbnRlbmRzIHRvXG4gNDYxOlx0XHQgIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHtpcCxpcDYsYXJwLGVifV90YWJsZXMgaW5mcmFzdHJ1Y3R1cmUuIEl0XG4gNDYyOlx0XHQgIHByb3ZpZGVzIGEgcHNldWRvLXN0YXRlIG1hY2hpbmUgd2l0aCBhbiBleHRlbnNpYmxlIGluc3RydWN0aW9uLXNldFxuIDQ2MzpcdFx0ICAoYWxzbyBrbm93biBhcyBleHByZXNzaW9ucykgdGhhdCB0aGUgdXNlcnNwYWNlICYjMzk7bmZ0JiMzOTsgdXRpbGl0eVxuIDQ2NDpcdFx0ICAoaHR0cHM6Ly93d3cubmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9uZnRhYmxlcykgdXNlcyB0byBidWlsZCB0aGVcbiA0NjU6XHRcdCAgcnVsZS1zZXQuIEl0IGFsc28gY29tZXMgd2l0aCB0aGUgZ2VuZXJpYyBzZXQgaW5mcmFzdHJ1Y3R1cmUgdGhhdFxuIDQ2NjpcdFx0ICBhbGxvd3MgeW91IHRvIGNvbnN0cnVjdCBtYXBwaW5ncyBiZXR3ZWVuIG1hdGNoaW5ncyBhbmQgYWN0aW9uc1xuIDQ2NzpcdFx0ICBmb3IgcGVyZm9ybWFuY2UgbG9va3Vwcy5cbiA0Njg6XHRcbiA0Njk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MTcKCQkJCQkJCW91dHB1dDogMTQ3CgkJCQkJCQl0aG91Z2h0czogMzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgTkZfVEFCTEVTYCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCBob3cgd2UmIzM5O3JlIGdvaW5nIHRvIGFwcHJvYWNoIGZ1enppbmcuIEZpcnN0LCBgTkZfVEFCTEVTYCByZWxpZXMgb24gYE5FVGAgYW5kIGBORVRGSUxURVJgLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgTkZfVEFCTEVTX0lORVRgLCBgTkZfVEFCTEVTX0lQVjRgLCBvciBgTkZfVEFCTEVTX0lQVjZgIGFyZSBwb3NzaWJseSByZWxldmFudCwgYnV0IGBORl9UQUJMRVNgIGl0c2VsZiBkZWZpbml0ZWx5IGluY2x1ZGVzIGBuZnRfcGF5bG9hZC5vYC4KCk5vdywgZm9yIGBzZXQtcmVzdWx0c2AsIGxldCYjMzk7cyBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4gSXQmIzM5O3MgbWFya2VkIGFzIGBXb3J0aEZ1enppbmdgLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoaXMgcGF0Y2ggdG91Y2hlcyBgbmZ0X3BheWxvYWQuY2AgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0uIEl0JiMzOTtzIGFkZGluZyB2YWxpZGF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldHMgaW4gYm90aCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHJ1bnRpbWUgY29kZSwgc3BlY2lmaWNhbGx5IGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgLCBhbmQgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLiBUaGlzIGxvZ2ljIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggbmV0bGluayBhbmQgcGFja2V0IHByb2Nlc3NpbmcuIFRoYXQgbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSBhIHZpYWJsZSB0YXJnZXQuCgpUaGUgYEZvY3VzU3ltYm9sc2AgbGlzdCBpcyBzcG90IG9uLCBpbmNsdWRpbmcgdGhvc2UgdmFsaWRhdGlvbiBmdW5jdGlvbnMsIGFsb25nIHdpdGggYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gVGhpcyBjb3ZlcnMgdGhlIGtleSBlbnRyeSBwb2ludHMuIEZpbmFsbHksIHdlJiMzOTtyZSBlbmFibGluZyBgTkZfVEFCTEVTYCBhbmQgYE5FVEZJTFRFUmAsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgYmFzZWQgb24gdGhlIGRlcGVuZGVuY2llcy4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjaGVja3N1bSBvZmZzZXQgdmFsaWRhdGlvbiBhbmQgcGFja2V0IGV2YWx1YXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgcGF5bG9hZCBleHByZXNzaW9ucyBpbiBuZnRhYmxlcyAobmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgbmZuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIGluY29taW5nIHBhY2tldCBwcm9jZXNzaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2V2YWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2hlY2tzdW0gb2Zmc2V0IHZhbGlkYXRpb24gYW5kIHBhY2tldCBldmFsdWF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIHBheWxvYWQgZXhwcmVzc2lvbnMgaW4gbmZ0YWJsZXMgKG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYykuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5mbmV0bGluayBjb25maWd1cmF0aW9uIGFuZCBpbmNvbWluZyBwYWNrZXQgcHJvY2Vzc2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRpZ2h0ZW5zIHZhbGlkYXRpb24gZm9yIHRoZSBjaGVja3N1bSBvZmZzZXQgKGBjc3VtX29mZnNldGApIGluIG5mdGFibGVzIHBheWxvYWQgZXhwcmVzc2lvbnMgKGBuZnRfcGF5bG9hZC5jYCkuIEl0IGFkZHMgY29udHJvbC1wbGFuZSB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KClgIGFuZCBydW50aW1lIHBhY2tldCB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKClgIHRvIGVuc3VyZSBjaGVja3N1bSBtb2RpZmljYXRpb24gdGFyZ2V0cyBsZWdpdGltYXRlIHRyYW5zcG9ydCBsYXllciBoZWFkZXJzIChUQ1AsIFVEUCwgVURQTGl0ZSwgSUNNUCwgSUNNUHY2KS5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS4gVGhlIHZhcmlhYmxlcyByZWFkIChgcHJpdi1cdTAwM2Vjc3VtX29mZnNldGAsIGBwa3QtXHUwMDNlZmxhZ3NgLCBgcGt0LVx1MDAzZXRwcm90YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IG5mdGFibGVzIGV4cHJlc3Npb24gc2V0dXAgYW5kIHBhY2tldCBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4NmQwMjkxYTBhYmRjMGU5N2I0YWM1MGEzMzMwYTI5MmY3ZjU1YjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIFNlcCA2IDEwOjI5OjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCmluZGV4IGUzMTVkMzVmNzNkNGEuLjViNzZhZjY4YjcwNDkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWRwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2dyZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pY21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWNtcHY2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcHY2LmgmZ3Q7CkBAIC0xMDA4LDExICYjNDM7MTAwOSwxNCBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCWlmIChwcml2LSZndDtjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgJiMzNDtyZS11cGRhdGUmIzM0OyBvZiBMNCBjaGVja3N1bSAqLwogCQkJcmV0dXJuIGZhbHNlOwogCi0JCS8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbiYjMzk7dCBiZSBuZWdhdGl2ZSBzbyBib2d1cwotCQkgKiBvZmZzZXRzIGNhbiBjb3JydXB0IEw0IG9yIHBheWxvYWQgYnV0IG5vdCBsMyBoZWFkZXJzLgotCQkgKiBXZSBhbHJlYWR5IGFsbG93IGFyYml0cmFyeSBsNC9pbm5lciBwYXlsb2FkIHdyaXRlcy4KLQkJICovCi0JCXJldHVybiB0cnVlOwomIzQzOwkJLyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi8KJiM0MzsJCWlmIChwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHwKJiM0MzsJCSAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgfHwKJiM0MzsJCSAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6CiAJCXJldHVybiB0cnVlOwogCWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKQEAgLTEwNDYsNiAmIzQzOzEwNTAsMjcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiwKJiM0MzsJCQkJCSBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCkKJiM0Mzt7CiYjNDM7CWlmICghKHBrdC0mZ3Q7ZmxhZ3MgJmFtcDsgTkZUX1BLVElORk9fTDRQUk9UTykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGt0LSZndDt0cHJvdCkgewomIzQzOwljYXNlIElQUFJPVE9fVENQOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKJiM0MzsJY2FzZSBJUFBST1RPX1VEUDoKJiM0MzsJY2FzZSBJUFBST1RPX1VEUExJVEU6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUFY2OgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUDoKJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpCiB7CkBAIC0xMDU1LDkgJiM0MzsxMDgwLDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJY2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjoKIAkJcmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTsKIAljYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6CiYjNDM7CQlyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpOwogCWNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOgotCQkvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmUKLQkJICogbmVnYXRpdmUgc28gcmVhbCBsMyBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLgomIzQzOwkJLyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmUKJiM0MzsJCSAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC4KIAkJICovCiAJCXJldHVybiB0cnVlOwogCWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBEZWVwIGludG8gbmZ0X3BheWxvYWQuYyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgZGlmZi4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgaGFzIGNoYW5nZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcgc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUsIGFzIHRoZXNlIGxpa2VseSBob2xkIGtleSBpbmZvcm1hdGlvbiBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzOiBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAsIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCwgb2YgY291cnNlLCB0byB6b29tIGluIG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucyBzbyB0aGF0IEkgY2FuIHNlZSBob3cgdGhleSB3b3JrLiBUaGlzIGlzIHRoZSBiZXN0IHdheSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBvciBkZXNpZ24gYWx0ZXJhdGlvbnMuIEkgd2FudCB0byBiZSBhYmxlIHRvIGZ1bGx5IGdyYXNwIGFueSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBjaGVja3N1bSBoYW5kbGluZyBhbmQgZXZhbHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRcdH1cbiA5ODE6XHRcbiA5ODI6XHRcdHJldHVybiBmYWxzZTtcbiA5ODM6XHR9XG4gOTg0Olx0XG4gOTg1Olx0LyogY2hlY2sgbGlua2xheWVyIG1vZGlmaWNhdGlvbnMgZG9uJiMzOTt0IHNwaWxsIGludG8gbmV0d29yayBoZWFkZXIuICovXG4gOTg2Olx0c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxuIDk4NzpcdHtcbiA5ODg6XHRcdGlmIChuZnRfaW5faW5ncmVzcyhwa3QtXHUwMDNlc3RhdGUpKVxuIDk4OTpcdFx0XHRyZXR1cm4gdHJ1ZTtcbiA5OTA6XHRcbiA5OTE6XHRcdHJldHVybiBvZmZzZXQgXHUwMDNjPSBza2JfbmV0d29ya19vZmZzZXQocGt0LVx1MDAzZXNrYik7XG4gOTkyOlx0fVxuIDk5MzpcdFxuIDk5NDpcdHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiA5OTU6XHRcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4gOTk2Olx0e1xuIDk5NzpcdFx0c3dpdGNoIChwcml2LVx1MDAzZWJhc2UpIHtcbiA5OTg6XHRcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxuIDk5OTpcdFx0XHRicmVhaztcbjEwMDA6XHRcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4xMDAxOlx0XHRcdGlmIChjdHgtXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xuMTAwMjpcdFx0XHRcdGlmIChvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKSA9PSBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0KVxuMTAwMzpcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4xMDA0Olx0XG4xMDA1Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTAwNjpcdFx0XHR9XG4xMDA3Olx0XHRcdHJldHVybiB0cnVlOyAvKiBydW4gdGltZSB2YWxpZGF0aW9uIHJlcXVpcmVkICovXG4xMDA4Olx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMDA5Olx0XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fZmxhZ3MpIC8qIG1ha2VzIG5vIHNlbnNlLCBhc2tzIGZvciBcJiMzNDtyZS11cGRhdGVcJiMzNDsgb2YgTDQgY2hlY2tzdW0gKi9cbjEwMTA6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDExOlx0XG4xMDEyOlx0XHRcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXG4xMDEzOlx0XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSB8fFxuMTAxNDpcdFx0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgfHxcbjEwMTU6XHRcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKSB8fFxuMTAxNjpcdFx0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcbjEwMTc6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEwMTg6XHRcbjEwMTk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTAyMDpcdFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4xMDIxOlx0XHRcdHJldHVybiB0cnVlO1xuMTAyMjpcdFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuMTAyMzpcdFx0XHRicmVhaztcbjEwMjQ6XHRcdH1cbjEwMjU6XHRcbjEwMjY6XHRcdHJldHVybiBmYWxzZTtcbjEwMjc6XHR9XG4xMDI4Olx0XG4xMDI5Olx0LyogZG8gbm90IGFsbG93IGFyYml0cmFyeSBuZXR3b3JrIGhlYWRlciBtYW5nbGluZyB2aWEgYm9ndXMgY3N1bV9vZmYuXG4xMDMwOlx0ICogV2Ugb25seSBzdXBwb3J0IGlwdjQuICBPbmx5IE5GUFJPVE9fSVBWNCBjYW4gYmUgY2hlY2tlZCBmcm9tIGNvbnRyb2xcbjEwMzE6XHQgKiBwbGFuZS5cbjEwMzI6XHQgKi9cbjEwMzM6XHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4xMDM0Olx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbjEwMzU6XHR7XG4xMDM2Olx0XHRzd2l0Y2ggKHBrdC1cdTAwM2VzdGF0ZS1cdTAwM2VwZikge1xuMTAzNzpcdFx0Y2FzZSBORlBST1RPX0lQVjQ6XG4xMDM4Olx0XHRcdC8qIFdhcm5pbmc6IE5GUFJPVE9fSU5FVCB3YXMgbm90IGNoZWNrZWQ7IHdlIGNhbiYjMzk7dCByZXR1cm4gdHJ1ZSBoZXJlLiAqL1xuMTAzOTpcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwNDA6XHRcdGNhc2UgTkZQUk9UT19JUFY2OlxuMTA0MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDQyOlx0XHRjYXNlIE5GUFJPVE9fQlJJREdFOlxuMTA0MzpcdFx0XHRyZXR1cm4gcGt0LVx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2XG4xMDQ0Olx0XHRcdCAgICAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xuMTA0NTpcdFx0Y2FzZSBORlBST1RPX05FVERFVjpcbjEwNDY6XHRcdFx0cmV0dXJuIHBrdC1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuMTA0NzpcdFx0XHQgICAgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwNDg6XHRcdH1cbjEwNDk6XHRcbjEwNTA6XHRcdHJldHVybiBmYWxzZTtcbjEwNTE6XHR9XG4xMDUyOlx0XG4xMDUzOlx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuMTA1NDpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4xMDU1Olx0e1xuMTA1NjpcdFx0aWYgKCEocGt0LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSlcbjEwNTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA1ODpcdFxuMTA1OTpcdFx0c3dpdGNoIChwa3QtXHUwMDNldHByb3QpIHtcbjEwNjA6XHRcdGNhc2UgSVBQUk9UT19UQ1A6XG4xMDYxOlx0XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcbjEwNjI6XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4xMDYzOlx0XHRjYXNlIElQUFJPVE9fVURQTElURTpcbjEwNjQ6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xuMTA2NTpcdFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcbjEwNjY6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4xMDY3Olx0XHRjYXNlIElQUFJPVE9fSUNNUDpcbjEwNjg6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKTtcbjEwNjk6XHRcdH1cbjEwNzA6XHRcbjEwNzE6XHRcdHJldHVybiBmYWxzZTtcbjEwNzI6XHR9XG4xMDczOlx0XG4xMDc0Olx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbjEwNzU6XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4xMDc2Olx0e1xuMTA3NzpcdFx0c3dpdGNoIChwcml2LVx1MDAzZWJhc2UpIHtcbjEwNzg6XHRcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxuMTA3OTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDczMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG5mdF9wYXlsb2FkLmNgIGZvciBDb250ZXh0KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgbmZ0X3BheWxvYWQuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY29kZSBhcm91bmQgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgLiBNeSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucy4gSSB3YW50IHRvIHNlZSAqaG93KiBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgaXMgdXNlZCDigJMgaXMgaXQgYSBwcmVjb25kaXRpb24sIGEgdmFsaWRhdGlvbiBjaGVjaywgb3IgcGVyaGFwcyBhIGhlbHBlcj8gTW9yZSBpbXBvcnRhbnRseSwgd2hlcmUgZG9lcyBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIGZpdCBpbnRvIHRoZSBlcXVhdGlvbj8gSXMgaXQgc2V0dGluZyB1cCBzb21ldGhpbmcgZm9yIHRoZSBjaGVja3N1bSB3cml0ZSwgb3IgaXMgaXQgd29ya2luZyBpbiBwYXJhbGxlbCB0byBwcmVwYXJlIHRoZSBwYXlsb2FkPyBEb2VzIGl0IG5lZWQgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgIHRvIGJlIHBvc2l0aXZlIHRvIHJ1biBjb3JyZWN0bHk/IE9yIGRvZXMgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBzb21laG93IGFmZmVjdCB0aGUgY2lyY3Vtc3RhbmNlcyB3aGVuIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCBpcyB0cnVlIG9yIGZhbHNlPwoKSSYjMzk7bSBhc3N1bWluZyB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCBjaGVja3N1bSBtYW5pcHVsYXRpb24gb3IgZXZhbHVhdGlvbiwgYnV0IEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGJlIHN1cmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBwYXlsb2FkIGRhdGEgaXMgcmVhZCwgd3JpdHRlbiwgYW5kIG1hbmlwdWxhdGVkIHdpdGggcmVzcGVjdCB0byBjaGVja3N1bXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHBhY2tldCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBoYW5kbGVkLCBob3cgZGF0YSBpcyBhY2Nlc3NlZCBpbiBtZW1vcnksIGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsgYXMgYSB3aG9sZS4gSSBzaG91bGQgY2hlY2sgaG93IHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIGFyZSBoYW5kbGVkLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBsb2dpY2FsIHJlbGF0aW9uc2hpcCwgb3IgZGVwZW5kZW5jaWVzLCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgd2l0aGluIHRoZSBncmVhdGVyIGNvbnRleHQgb2YgdGhlIGBuZnRfcGF5bG9hZGAgc3Vic3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyB0byBwcm9jZWVkIHdpdGggdGhlIHdvcmsgYXQgaGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzU6XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4xMDc2Olx0e1xuMTA3NzpcdFx0c3dpdGNoIChwcml2LVx1MDAzZWJhc2UpIHtcbjEwNzg6XHRcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxuMTA3OTpcdFx0XHRicmVhaztcbjEwODA6XHRcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4xMDgxOlx0XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4xMDgyOlx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMDgzOlx0XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XG4xMDg0Olx0XHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbjEwODU6XHRcdFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcbjEwODY6XHRcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuMTA4NzpcdFx0XHQgKi9cbjEwODg6XHRcdFx0cmV0dXJuIHRydWU7XG4xMDg5Olx0XHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4xMDkwOlx0XHRcdGJyZWFrO1xuMTA5MTpcdFx0fVxuMTA5MjpcdFxuMTA5MzpcdFx0cmV0dXJuIGZhbHNlO1xuMTA5NDpcdH1cbjEwOTU6XHRcbjEwOTY6XHRzdGF0aWMgYm9vbCBuZnRfdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4xMDk3Olx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4xMDk4Olx0e1xuMTA5OTpcdFx0dW5zaWduZWQgaW50IGRvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBhY2tfc2VxKSAmIzQzOyBzaXplb2YoX19iZTMyKTtcbjExMDA6XHRcbjExMDE6XHRcdGlmIChwa3QtXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXG4xMTAyOlx0XHRcdHJldHVybiB0cnVlO1xuMTEwMzpcdFxuMTEwNDpcdFx0cmV0dXJuIHByaXYtXHUwMDNlb2Zmc2V0IFx1MDAzZSBkb2ZmIHx8IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gZG9mZjtcbjExMDU6XHR9XG4xMTA2Olx0XG4xMTA3Olx0c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuMTEwODpcdFx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbjExMDk6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbjExMTA6XHR7XG4xMTExOlx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbjExMTI6XHRcdGNvbnN0IHUzMiAqc3JjID0gXHUwMDI2cmVncy1cdTAwM2VkYXRhW3ByaXYtXHUwMDNlc3JlZ107XG4xMTEzOlx0XHRpbnQgb2Zmc2V0LCBjc3VtX29mZnNldCwgdmxhbl9obGVuID0gMDtcbjExMTQ6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXHUwMDNlc2tiO1xuMTExNTpcdFx0X193c3VtIGZzdW0sIHRzdW07XG4xMTE2Olx0XG4xMTE3Olx0XHRzd2l0Y2ggKHByaXYtXHUwMDNlYmFzZSkge1xuMTExODpcdFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XG4xMTE5Olx0XHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuMTEyMDpcdFx0XHRcdGdvdG8gZXJyO1xuMTEyMTpcdFxuMTEyMjpcdFx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcdTAwMjZcdTAwMjZcbjExMjM6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cdTAwM2VvZmZzZXQsIHByaXYtXHUwMDNlbGVuKSkge1xuMTEyNDpcdFx0XHRcdGlmICghbmZ0X3BheWxvYWRfc2V0X3ZsYW4oc3JjLCBza2IsXG4xMTI1Olx0XHRcdFx0XHRcdFx0ICBwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4sXG4xMTI2Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZ2bGFuX2hsZW4pKVxuMTEyNzpcdFx0XHRcdFx0Z290byBlcnI7XG4xMTI4Olx0XG4xMTI5Olx0XHRcdFx0aWYgKCF2bGFuX2hsZW4pXG4xMTMwOlx0XHRcdFx0XHRyZXR1cm47XG4xMTMxOlx0XHRcdH1cbjExMzI6XHRcbjExMzM6XHRcdFx0b2Zmc2V0ID0gc2tiX21hY19oZWFkZXIoc2tiKSAtIHNrYi1cdTAwM2VkYXRhIC0gdmxhbl9obGVuO1xuMTEzNDpcdFx0XHRpZiAoIW5mdF9sbF93cml0ZV9vayhwa3QsIHByaXYtXHUwMDNlbGVuICYjNDM7IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IG9mZnNldCkpXG4xMTM1Olx0XHRcdFx0Z290byBlcnI7XG4xMTM2Olx0XHRcdGJyZWFrO1xuMTEzNzpcdFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbjExMzg6XHRcdFx0aWYgKCFuZnRfbmhfd3JpdGVfb2socGt0LCBwcml2LCBzcmMpKVxuMTEzOTpcdFx0XHRcdGdvdG8gZXJyO1xuMTE0MDpcdFx0XHRvZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcbjExNDE6XHRcdFx0YnJlYWs7XG4xMTQyOlx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMTQzOlx0XHRcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykgfHwgcGt0LVx1MDAzZWZyYWdvZmYpXG4xMTQ0Olx0XHRcdFx0Z290byBlcnI7XG4xMTQ1Olx0XHRcdGlmICghbmZ0X3RoX3dyaXRlX29rKHBrdCwgcHJpdikpXG4xMTQ2Olx0XHRcdFx0Z290byBlcnI7XG4xMTQ3Olx0XHRcdG9mZnNldCA9IG5mdF90aG9mZihwa3QpO1xuMTE0ODpcdFx0XHRicmVhaztcbjExNDk6XHRcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuMTE1MDpcdFx0XHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcbjExNTE6XHRcdFx0aWYgKG9mZnNldCBcdTAwM2MgMClcbjExNTI6XHRcdFx0XHRnb3RvIGVycjtcbjExNTM6XHRcdFx0YnJlYWs7XG4xMTU0Olx0XHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxMDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDAyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBEZWVwZXIgaW50byBuZnRcX3BheWxvYWRcX3NldFxfZXZhbCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIG9idmlvdXNseSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIE5ldGZpbHRlciYjMzk7cyBORlRhYmxlcyBmcmFtZXdvcmsuICYjMzQ7TGV0JiMzOTtzIHNlZSB0aGUgcmVzdCBvZiBpdCYjMzQ7IGltcGxpZXMgSSYjMzk7dmUgYWxyZWFkeSBnb3Qgc29tZSBpbml0aWFsIGNvbnRleHQsIGxpa2VseSBmcm9tIGxvb2tpbmcgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgb3IgZG9jdW1lbnRhdGlvbi4gSSYjMzk7bSBwcm9iYWJseSB0cnlpbmcgdG8gcGllY2UgdG9nZXRoZXIgaG93IHRoaXMgZXZhbHVhdGlvbiBtZWNoYW5pc20gd29ya3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHBheWxvYWQgc2V0dGluZyBjb250ZXh0LiBBbSBJIHRyeWluZyB0byBkZWJ1ZyBhIHNwZWNpZmljIGlzc3VlLCBvciBqdXN0IGRlZXBlbiBteSBvdmVyYWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIGZsb3cgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBOZXRmaWx0ZXIgY29tcG9uZW50cz8gSSYjMzk7bSBwcm9iYWJseSBtZW50YWxseSBtYXBwaW5nIHRoZSBleGVjdXRpb24gcGF0aDogdGhlIGFyZ3VtZW50cyBpdCB0YWtlcywgdGhlIGNvbmRpdGlvbnMgaXQgY2hlY2tzLCB0aGUgc3RhdGUgaXQgdXBkYXRlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbnNpZ2h0cyBpbnRvIHRoaW5ncyBsaWtlIHRoZSBoYW5kbGluZyBvZiBkaWZmZXJlbnQgcGF5bG9hZCB0eXBlcywgdGhlIHVzZSBvZiBoZWxwZXIgZnVuY3Rpb25zLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBldmFsdWF0aW9uIG9uIHRoZSBvdmVyYWxsIHJ1bGUgbWF0Y2hpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkIGFuZCB3aGF0IGRhdGEgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgZHVyaW5nIHRoaXMgZXZhbHVhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGV2ZXJ5dGhpbmcgZnJvbSBwZXJmb3JtYW5jZSB0dW5pbmcgdG8gc2VjdXJpdHkgaGFyZGVuaW5nIGFuZCBkZWJ1Z2dpbmcuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyB0byBpdHMgcGxhY2UgaW4gdGhlIHdob2xlIHBpY3R1cmUuIEkgYW0gZ29pbmcgdG8ga2VlcCBnb2luZyBhbmQgc2VlIHdoYXQgZWxzZSBjYW4gYmUgZ2xlYW5lZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNTU6XHRcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSgxKTtcbjExNTY6XHRcdFx0Z290byBlcnI7XG4xMTU3Olx0XHR9XG4xMTU4Olx0XG4xMTU5Olx0XHRjc3VtX29mZnNldCA9IG9mZnNldCAmIzQzOyBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0O1xuMTE2MDpcdFx0b2Zmc2V0ICYjNDM7PSBwcml2LVx1MDAzZW9mZnNldDtcbjExNjE6XHRcbjExNjI6XHRcdGlmICgocHJpdi1cdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIHx8IHByaXYtXHUwMDNlY3N1bV9mbGFncykgXHUwMDI2XHUwMDI2XG4xMTYzOlx0XHQgICAgKChwcml2LVx1MDAzZWJhc2UgIT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUiBcdTAwMjZcdTAwMjZcbjExNjQ6XHRcdCAgICAgIHByaXYtXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVIpIHx8XG4xMTY1Olx0XHQgICAgIHNrYi1cdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHtcbjExNjY6XHRcdFx0aWYgKG9mZnNldCAmIzQzOyBwcml2LVx1MDAzZWxlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbilcbjExNjc6XHRcdFx0XHRnb3RvIGVycjtcbjExNjg6XHRcbjExNjk6XHRcdFx0ZnN1bSA9IHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgcHJpdi1cdTAwM2VsZW4sIDApO1xuMTE3MDpcdFx0XHR0c3VtID0gY3N1bV9wYXJ0aWFsKHNyYywgcHJpdi1cdTAwM2VsZW4sIDApO1xuMTE3MTpcdFxuMTE3MjpcdFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFx1MDAyNlx1MDAyNlxuMTE3MzpcdFx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFx1MDAyNlx1MDAyNlxuMTE3NDpcdFx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXG4xMTc1Olx0XHRcdFx0Z290byBlcnI7XG4xMTc2Olx0XG4xMTc3Olx0XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fZmxhZ3MgXHUwMDI2XHUwMDI2XG4xMTc4Olx0XHRcdCAgICBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKHBrdCwgc2tiLCBmc3VtLCB0c3VtKSBcdTAwM2MgMClcbjExNzk6XHRcdFx0XHRnb3RvIGVycjtcbjExODA6XHRcdH1cbjExODE6XHRcbjExODI6XHRcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWF4KG9mZnNldCAmIzQzOyBwcml2LVx1MDAzZWxlbiwgMCkpIHx8XG4xMTgzOlx0XHQgICAgc2tiX3N0b3JlX2JpdHMoc2tiLCBvZmZzZXQsIHNyYywgcHJpdi1cdTAwM2VsZW4pIFx1MDAzYyAwKVxuMTE4NDpcdFx0XHRnb3RvIGVycjtcbjExODU6XHRcbjExODY6XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX1NDVFAgXHUwMDI2XHUwMDI2XG4xMTg3Olx0XHQgICAgcGt0LVx1MDAzZXRwcm90ID09IElQUFJPVE9fU0NUUCBcdTAwMjZcdTAwMjZcbjExODg6XHRcdCAgICBza2ItXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpIHtcbjExODk6XHRcdFx0aWYgKHBrdC1cdTAwM2VmcmFnb2ZmID09IDAgXHUwMDI2XHUwMDI2XG4xMTkwOlx0XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3NjdHAoc2tiLCBuZnRfdGhvZmYocGt0KSkpXG4xMTkxOlx0XHRcdFx0Z290byBlcnI7XG4xMTkyOlx0XHR9XG4xMTkzOlx0XG4xMTk0Olx0XHRyZXR1cm47XG4xMTk1Olx0ZXJyOlxuMTE5NjpcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XG4xMTk3Olx0fVxuMTE5ODpcdFxuMTE5OTpcdHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbjEyMDA6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbjEyMDE6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdKVxuMTIwMjpcdHtcbjEyMDM6XHRcdHUzMiBjc3VtX29mZnNldCwgb2Zmc2V0LCBjc3VtX3R5cGUgPSBORlRfUEFZTE9BRF9DU1VNX05PTkU7XG4xMjA0Olx0XHRzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbjEyMDU6XHRcdGludCBlcnI7XG4xMjA2Olx0XG4xMjA3Olx0XHRpZiAoY3R4LVx1MDAzZW5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucylcbjEyMDg6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjEyMDk6XHRcbjEyMTA6XHRcdHByaXYtXHUwMDNlYmFzZSAgICAgICAgPSBudG9obChubGFfZ2V0X2JlMzIodGJbTkZUQV9QQVlMT0FEX0JBU0VdKSk7XG4xMjExOlx0XHRwcml2LVx1MDAzZWxlbiAgICAgICAgID0gbnRvaGwobmxhX2dldF9iZTMyKHRiW05GVEFfUEFZTE9BRF9MRU5dKSk7XG4xMjEyOlx0XG4xMjEzOlx0XHRlcnIgPSBuZnRfcGFyc2VfdTMyX2NoZWNrKHRiW05GVEFfUEFZTE9BRF9PRkZTRVRdLCBVMTZfTUFYLCBcdTAwMjZvZmZzZXQpO1xuMTIxNDpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgxMwoJCQkJCQkJb3V0cHV0OiAyMjIKCQkJCQkJCXRob3VnaHRzOiAxMDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXRmaWx0ZXIgUGF5bG9hZCBNYW5nbGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gaGFyZGVuaW5nIHRoZSBgbmZ0YWJsZXNgIHBheWxvYWQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3Vtcy4gSW5pdGlhbGx5LCB0aGUgY29kZSBoYWQgYSB2dWxuZXJhYmlsaXR5IHdoZXJlIGFuIGFyYml0cmFyeSBgY3N1bV9vZmZzZXRgIGNvdWxkIGJlIHByb3ZpZGVkLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBjb3JydXB0aW9uIG9mIGhlYWRlcnMgb3IgdGhlIHdyaXRpbmcvdXBkYXRpbmcgb2YgY2hlY2tzdW1zIGF0IGFyYml0cmFyeSBvZmZzZXRzIHdpdGhpbiBhIHBhY2tldCwgd2hpY2ggaXMgYmFkIG5ld3MuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzOiAmIzM0O0RvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBzZWN1cml0eSBob2xlcywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3M/JiMzNDsgTGV0JiMzOTtzIHNlZS4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyB0d28gdmFsaWRhdGlvbiBmdW5jdGlvbnM6IGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBhbmQgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgLiBUaGUgZm9ybWVyIG5vdyAqZXhwbGljaXRseSogY2hlY2tzIGlmIHRoZSBwcm92aWRlZCBgY3N1bV9vZmZzZXRgIGlzIGEgKnZhbGlkKiBvZmZzZXQgZm9yIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zIChUQ1AsIFVEUCwgSUNNUCwgSUNNUHY2KS4gVGhlIGxhdHRlciBmdXJ0aGVyIHZhbGlkYXRlcyB0aGF0IGlmIHRoZSBwYWNrZXQgYWN0dWFsbHkgKmlzKiBvbmUgb2YgdGhlc2UgdHJhbnNwb3J0IHByb3RvY29scywgdGhhdCB0aGUgb2Zmc2V0IG1hdGNoZXMgd2hhdCYjMzk7cyBleHBlY3RlZCBmb3IgdGhhdCBwcm90b2NvbC4KCk5vdywgbGV0JiMzOTtzIGV2YWx1YXRlIHRoaXMgaW4gdGhlIGNvbnRleHQgb2YgS01TQU4gdnMuIEtBU0FOLiBLTVNBTiBpcyBteSBwcmltYXJ5IHRhcmdldCBmb3IgdGhpcyBraW5kIG9mIHJldmlldyBhcyBJIGFtIGxvb2tpbmcgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuCgoxLiAgKipLZXJuZWwgU3RydWN0dXJlcyB0byBVc2Vyc3BhY2U/KiogTm9wZS4gTm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGFyZSBleGlzdGluZyBvbmVzIG1vZGlmaWVkIGluIGEgd2F5IHRoYXQgd291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGJlaW5nIGV4cG9zZWQuCjIuICAqKkNvbmRpdGlvbmFsIExvZ2ljL0JyYW5jaGluZyBvbiBVbmluaXRpYWxpemVkIFZhcmlhYmxlcz8qKiBUaGUgY29kZSBjaGVja3MgYHByaXYtJmd0O2NzdW1fb2Zmc2V0YCwgYHBrdC0mZ3Q7ZmxhZ3NgLCBhbmQgYHBrdC0mZ3Q7dHByb3RgLiBgcHJpdmAgaXMgcG9wdWxhdGVkIGR1cmluZyBleHByZXNzaW9uIGluaXRpYWxpemF0aW9uIHRocm91Z2ggbmV0bGluayBhdHRyaWJ1dGVzIChhbmQgdmFsaWRhdGVkKS4gYHBrdGAgaXMgYSBgbmZ0X3BrdGluZm9gIHN0cnVjdHVyZSBwb3B1bGF0ZWQgYnkgbmV0ZmlsdGVyIHBlci1wYWNrZXQuIE5vbmUgb2YgdGhlc2Ugc291cmNlcyBhcmUgdW5pbml0aWFsaXplZCBtZW1vcnkuCjMuICAqKkNvbXBsZXggRGF0YSBTdHJ1Y3R1cmVzIHdpdGggVW5pbml0aWFsaXplZCBGaWVsZHM/KiogTm8gbmV3IGFsbG9jYXRpb25zIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhZCB0byBzdWJzZXF1ZW50IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Lgo0LiAgKipCb3VuZHMgQ2hlY2tzL1VuaW5pdGlhbGl6ZWQgQnl0ZXMgQWNjZXNzPyoqIFRoaXMgaXMgYWJvdXQgc3RyaWN0ZXIgKnZhbGlkYXRpb24qLCBub3QgbmV3IHdheXMgdG8gYWNjZXNzIG1lbW9yeS4gVGhlIHBhdGNoICpyZXN0cmljdHMqIHdoYXQgY2FuIGJlIHdyaXR0ZW4vdXBkYXRlZCBieSBlbnN1cmluZyBjaGVja3N1bSBvZmZzZXRzIGFyZSB2YWxpZC4gSXQmIzM5O3MgdGlnaHRlbmluZyB0aGUgZXhpc3RpbmcgY29kZSwgbm90IGxvb3NlbmluZyBpdC4KClRoZXJlZm9yZSwgdGhpcyBpcyBhIGNsZWFyIGhhcmRlbmluZyBwYXRjaCBieSByZXN0cmljdGluZyBhY2Nlc3MuIEdpdmVuIHRoYXQsIHRoZSBzdGFuZGFyZCBLQVNBTi9zeXprYWxsZXIgZnV6emluZyBpcyBhZGVxdWF0ZSB0byB0ZXN0IHRoZSBwYXRjaC4gS01TQU4gaXNuJiMzOTt0IHJlbGV2YW50IGhlcmUuIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDEwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRpZ2h0ZW5zIHZhbGlkYXRpb24gZm9yIHRoZSBjaGVja3N1bSBvZmZzZXQgKGBjc3VtX29mZnNldGApIGluIG5mdGFibGVzIHBheWxvYWQgZXhwcmVzc2lvbnMgKGBuZnRfcGF5bG9hZC5jYCkuIEl0IGFkZHMgY29udHJvbC1wbGFuZSB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KClgIGFuZCBydW50aW1lIHBhY2tldCB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKClgIHRvIGVuc3VyZSBjaGVja3N1bSBtb2RpZmljYXRpb24gdGFyZ2V0cyBsZWdpdGltYXRlIHRyYW5zcG9ydCBsYXllciBoZWFkZXJzIChUQ1AsIFVEUCwgVURQTGl0ZSwgSUNNUCwgSUNNUHY2KS5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS4gVGhlIHZhcmlhYmxlcyByZWFkIChgcHJpdi1cdTAwM2Vjc3VtX29mZnNldGAsIGBwa3QtXHUwMDNlZmxhZ3NgLCBgcGt0LVx1MDAzZXRwcm90YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IG5mdGFibGVzIGV4cHJlc3Npb24gc2V0dXAgYW5kIHBhY2tldCBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRpZ2h0ZW5zIHZhbGlkYXRpb24gZm9yIHRoZSBjaGVja3N1bSBvZmZzZXQgKGBjc3VtX29mZnNldGApIGluIG5mdGFibGVzIHBheWxvYWQgZXhwcmVzc2lvbnMgKGBuZnRfcGF5bG9hZC5jYCkuIEl0IGFkZHMgY29udHJvbC1wbGFuZSB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KClgIGFuZCBydW50aW1lIHBhY2tldCB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKClgIHRvIGVuc3VyZSBjaGVja3N1bSBtb2RpZmljYXRpb24gdGFyZ2V0cyBsZWdpdGltYXRlIHRyYW5zcG9ydCBsYXllciBoZWFkZXJzIChUQ1AsIFVEUCwgVURQTGl0ZSwgSUNNUCwgSUNNUHY2KS5cblxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS4gVGhlIHZhcmlhYmxlcyByZWFkIChgcHJpdi1cdTAwM2Vjc3VtX29mZnNldGAsIGBwa3QtXHUwMDNlZmxhZ3NgLCBgcGt0LVx1MDAzZXRwcm90YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IG5mdGFibGVzIGV4cHJlc3Npb24gc2V0dXAgYW5kIHBhY2tldCBwYXJzaW5nIGxvZ2ljLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6Mjk6NTUuMDY5MTY4MTE0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2OTA0MTI1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfaW5pdFwiLFxuICAgIFwibmZ0X3BheWxvYWRfc2V0X2V2YWxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRpZ2h0ZW5zIHZhbGlkYXRpb24gZm9yIHRoZSBjaGVja3N1bSBvZmZzZXQgKGBjc3VtX29mZnNldGApIGluIG5mdGFibGVzIHBheWxvYWQgZXhwcmVzc2lvbnMgKGBuZnRfcGF5bG9hZC5jYCkuIEl0IGFkZHMgY29udHJvbC1wbGFuZSB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KClgIGFuZCBydW50aW1lIHBhY2tldCB2YWxpZGF0aW9uIGluIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKClgIHRvIGVuc3VyZSBjaGVja3N1bSBtb2RpZmljYXRpb24gdGFyZ2V0cyBsZWdpdGltYXRlIHRyYW5zcG9ydCBsYXllciBoZWFkZXJzIChUQ1AsIFVEUCwgVURQTGl0ZSwgSUNNUCwgSUNNUHY2KS5cXG5cXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IHN0cnVjdCBpbml0aWFsaXphdGlvbiwgYWx0ZXIgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LiBUaGUgdmFyaWFibGVzIHJlYWQgKGBwcml2LVxcdTAwM2Vjc3VtX29mZnNldGAsIGBwa3QtXFx1MDAzZWZsYWdzYCwgYHBrdC1cXHUwMDNldHByb3RgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgbmZ0YWJsZXMgZXhwcmVzc2lvbiBzZXR1cCBhbmQgcGFja2V0IHBhcnNpbmcgbG9naWMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIGV4cHJlc3Npb25zIGluIG5mdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBuZm5ldGxpbmsgY29uZmlndXJhdGlvbiBhbmQgaW5jb21pbmcgcGFja2V0IHByb2Nlc3NpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjI5OjU1LjA2OTE3NTY4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAyMzUxOTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODg2ZDAyOTFhMGFiZGMwZTk3YjRhYzUwYTMzMzBhMjkyZjdmNTViNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDEwOjI5OjU0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xcbmluZGV4IGUzMTVkMzVmNzNkNGEuLjViNzZhZjY4YjcwNDkgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuQEAgLTIwLDYgKzIwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RjcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWRwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZ3JlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pY21wLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pY21wdjYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcHY2LmhcXHUwMDNlXFxuQEAgLTEwMDgsMTEgKzEwMDksMTQgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFxcXCJyZS11cGRhdGVcXFwiIG9mIEw0IGNoZWNrc3VtICovXFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdFxcdC8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbid0IGJlIG5lZ2F0aXZlIHNvIGJvZ3VzXFxuLVxcdFxcdCAqIG9mZnNldHMgY2FuIGNvcnJ1cHQgTDQgb3IgcGF5bG9hZCBidXQgbm90IGwzIGhlYWRlcnMuXFxuLVxcdFxcdCAqIFdlIGFscmVhZHkgYWxsb3cgYXJiaXRyYXJ5IGw0L2lubmVyIHBheWxvYWQgd3JpdGVzLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHxcXG4rXFx0XFx0ICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKSB8fFxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcXG5AQCAtMTA0Niw2ICsxMDUwLDI3IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4re1xcbitcXHRpZiAoIShwa3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHN3aXRjaCAocGt0LVxcdTAwM2V0cHJvdCkge1xcbitcXHRjYXNlIElQUFJPVE9fVENQOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xcbitcXHRjYXNlIElQUFJPVE9fVURQOlxcbitcXHRjYXNlIElQUFJPVE9fVURQTElURTpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcXG4rXFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xcbitcXHRjYXNlIElQUFJPVE9fSUNNUDpcXG4rXFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4ge1xcbkBAIC0xMDU1LDkgKzEwODAsMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4gXFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG4gXFx0XFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTtcXG4gXFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxcbitcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4tXFx0XFx0LyogbmVpdGhlciBvZmZzZXRzIGFyZSB2YWxpZGF0ZWQsIG9mZnNldHMgY2Fubm90IGJlXFxuLVxcdFxcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cXG4rXFx0XFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcXG4rXFx0XFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6Mjk6NTUuNzcyNDQ0Nzc0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozODA2NjIyNjYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRcIixcbiAgICBcIm5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tcIixcbiAgICBcIm5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIGV4cHJlc3Npb25zIGluIG5mdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBuZm5ldGxpbmsgY29uZmlndXJhdGlvbiBhbmQgaW5jb21pbmcgcGFja2V0IHByb2Nlc3NpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODg2ZDAyOTFhMGFiZGMwZTk3YjRhYzUwYTMzMzBhMjkyZjdmNTViNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTA6Mjk6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbmluZGV4IGUzMTVkMzVmNzNkNGEuLjViNzZhZjY4YjcwNDkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG5AQCAtMTAwOCwxMSArMTAwOSwxNCBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fZmxhZ3MpIC8qIG1ha2VzIG5vIHNlbnNlLCBhc2tzIGZvciBcInJlLXVwZGF0ZVwiIG9mIEw0IGNoZWNrc3VtICovXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHQvKiBubyBmdXJ0aGVyIGNoZWNrIGhlcmU7IG9mZnNldCBjYW4ndCBiZSBuZWdhdGl2ZSBzbyBib2d1c1xuLVx0XHQgKiBvZmZzZXRzIGNhbiBjb3JydXB0IEw0IG9yIHBheWxvYWQgYnV0IG5vdCBsMyBoZWFkZXJzLlxuLVx0XHQgKiBXZSBhbHJlYWR5IGFsbG93IGFyYml0cmFyeSBsNC9pbm5lciBwYXlsb2FkIHdyaXRlcy5cbi1cdFx0ICovXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHQvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqL1xuK1x0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHxcbitcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XG4rXHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSkgfHxcbitcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbkBAIC0xMDQ2LDYgKzEwNTAsMjcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4rXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbit7XG4rXHRpZiAoIShwa3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKHBrdC1cdTAwM2V0cHJvdCkge1xuK1x0Y2FzZSBJUFBST1RPX1RDUDpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xuK1x0Y2FzZSBJUFBST1RPX1VEUDpcbitcdGNhc2UgSVBQUk9UT19VRFBMSVRFOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7XG4rXHRjYXNlIElQUFJPVE9fSUNNUFY2OlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcbitcdGNhc2UgSVBQUk9UT19JQ01QOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbiB7XG5AQCAtMTA1NSw5ICsxMDgwLDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuIFx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuK1x0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4tXHRcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxuLVx0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4rXHRcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXG4rXHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbiBcdFx0ICovXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6Mjk6NTUuNzcyNDQ3MzY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODgzODkzMTcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GVCBQYXlsb2FkIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IHRoZSBtb2RpZmljYXRpb25zIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGltcGxpY2F0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGBuZnRfcGF5bG9hZC5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLiBJIHNlZSBzb21lIGNoYW5nZXMgYW5kIGFkZGl0aW9uczogYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgLCBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AsIGFuZCBhIG5ldyBmdW5jdGlvbiBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuXG5cbk5vdywgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEknbSBnb2luZyB0byBwdWxsIHVwIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgLCBmb2N1c2luZyBhcm91bmQgbGluZSAxMDAwLiBUaGF0J3MgdGhlIHR5cGljYWwgc3BvdCB3aGVyZSBJIGNhbiBnZXQgYSBnb29kIGZlZWwgZm9yIHRoZSBvdmVyYWxsIGNvbnRleHQ6IHdobydzIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zLCB0aGUgc3RydWN0IGRlZmluaXRpb25zIHRoYXQgYXJlIGluIHBsYXksIGFuZCBhbnkgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBHZXR0aW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1lIGEgcHJvcGVyIGFzc2Vzc21lbnQgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMuIEdvdHRhIGdldCB0aGUgYmFzZWxpbmUgYmVmb3JlIG1ha2luZyBqdWRnZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6MDQuNjExMzgzMzA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTkwOlxcdFxcbiA5OTE6XFx0XFx0cmV0dXJuIG9mZnNldCBcXHUwMDNjPSBza2JfbmV0d29ya19vZmZzZXQocGt0LVxcdTAwM2Vza2IpO1xcbiA5OTI6XFx0fVxcbiA5OTM6XFx0XFxuIDk5NDpcXHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIDk5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuIDk5NjpcXHR7XFxuIDk5NzpcXHRcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZWJhc2UpIHtcXG4gOTk4OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxcbiA5OTk6XFx0XFx0XFx0YnJlYWs7XFxuMTAwMDpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbjEwMDE6XFx0XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xcbjEwMDI6XFx0XFx0XFx0XFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0KVxcbjEwMDM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDA2OlxcdFxcdFxcdH1cXG4xMDA3OlxcdFxcdFxcdHJldHVybiB0cnVlOyAvKiBydW4gdGltZSB2YWxpZGF0aW9uIHJlcXVpcmVkICovXFxuMTAwODpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuMTAwOTpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFxcXCJyZS11cGRhdGVcXFwiIG9mIEw0IGNoZWNrc3VtICovXFxuMTAxMDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAxMTpcXHRcXG4xMDEyOlxcdFxcdFxcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXFxuMTAxMzpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XFxuMTAxNDpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XFxuMTAxNTpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKSB8fFxcbjEwMTY6XFx0XFx0XFx0ICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pKVxcbjEwMTc6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTAxODpcXHRcXG4xMDE5OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDIwOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbjEwMjE6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTAyMjpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XFxuMTAyMzpcXHRcXHRcXHRicmVhaztcXG4xMDI0OlxcdFxcdH1cXG4xMDI1OlxcdFxcbjEwMjY6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwMjc6XFx0fVxcbjEwMjg6XFx0XFxuMTAyOTpcXHQvKiBkbyBub3QgYWxsb3cgYXJiaXRyYXJ5IG5ldHdvcmsgaGVhZGVyIG1hbmdsaW5nIHZpYSBib2d1cyBjc3VtX29mZi5cXG4xMDMwOlxcdCAqIFdlIG9ubHkgc3VwcG9ydCBpcHY0LiAgT25seSBORlBST1RPX0lQVjQgY2FuIGJlIGNoZWNrZWQgZnJvbSBjb250cm9sXFxuMTAzMTpcXHQgKiBwbGFuZS5cXG4xMDMyOlxcdCAqL1xcbjEwMzM6XFx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbjEwMzQ6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbjEwMzU6XFx0e1xcbjEwMzY6XFx0XFx0c3dpdGNoIChwa3QtXFx1MDAzZXN0YXRlLVxcdTAwM2VwZikge1xcbjEwMzc6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuMTAzODpcXHRcXHRcXHQvKiBXYXJuaW5nOiBORlBST1RPX0lORVQgd2FzIG5vdCBjaGVja2VkOyB3ZSBjYW4ndCByZXR1cm4gdHJ1ZSBoZXJlLiAqL1xcbjEwMzk6XFx0XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xcbjEwNDA6XFx0XFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuMTA0MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA0MjpcXHRcXHRjYXNlIE5GUFJPVE9fQlJJREdFOlxcbjEwNDM6XFx0XFx0XFx0cmV0dXJuIHBrdC1cXHUwMDNlZXRoZXJ0eXBlID09IGh0b25zKEVUSF9QX0lQKSBcXHUwMDI2XFx1MDAyNlxcbjEwNDQ6XFx0XFx0XFx0ICAgICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xcbjEwNDU6XFx0XFx0Y2FzZSBORlBST1RPX05FVERFVjpcXG4xMDQ2OlxcdFxcdFxcdHJldHVybiBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFxcdTAwMjZcXHUwMDI2XFxuMTA0NzpcXHRcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XFxuMTA0ODpcXHRcXHR9XFxuMTA0OTpcXHRcXG4xMDUwOlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDUxOlxcdH1cXG4xMDUyOlxcdFxcbjEwNTM6XFx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbjEwNTQ6XFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbjEwNTU6XFx0e1xcbjEwNTY6XFx0XFx0aWYgKCEocGt0LVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pKVxcbjEwNTc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwNTg6XFx0XFxuMTA1OTpcXHRcXHRzd2l0Y2ggKHBrdC1cXHUwMDNldHByb3QpIHtcXG4xMDYwOlxcdFxcdGNhc2UgSVBQUk9UT19UQ1A6XFxuMTA2MTpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xcbjEwNjI6XFx0XFx0Y2FzZSBJUFBST1RPX1VEUDpcXG4xMDYzOlxcdFxcdGNhc2UgSVBQUk9UT19VRFBMSVRFOlxcbjEwNjQ6XFx0XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcXG4xMDY1OlxcdFxcdGNhc2UgSVBQUk9UT19JQ01QVjY6XFxuMTA2NjpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XFxuMTA2NzpcXHRcXHRjYXNlIElQUFJPVE9fSUNNUDpcXG4xMDY4OlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pO1xcbjEwNjk6XFx0XFx0fVxcbjEwNzA6XFx0XFxuMTA3MTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA3MjpcXHR9XFxuMTA3MzpcXHRcXG4xMDc0OlxcdHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuMTA3NTpcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbjEwNzY6XFx0e1xcbjEwNzc6XFx0XFx0c3dpdGNoIChwcml2LVxcdTAwM2ViYXNlKSB7XFxuMTA3ODpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcXG4xMDc5OlxcdFxcdFxcdGJyZWFrO1xcbjEwODA6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG4xMDgxOlxcdFxcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XFxuMTA4MjpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuMTA4MzpcXHRcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xcbjEwODQ6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuMTA4NTpcXHRcXHRcXHQvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZVxcbjEwODY6XFx0XFx0XFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxcbjEwODc6XFx0XFx0XFx0ICovXFxuMTA4ODpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDg5OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6MDQuNjExNTYyNjQ4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwMDE2MTAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBuZnRfcGF5bG9hZCBjaGVja3N1bSBmdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBuZnRfcGF5bG9hZC5jYCBmaWxlIHdpdGhpbiB0aGUgYG5ldC9uZXRmaWx0ZXJgIGRpcmVjdG9yeS4gTXkgYWltIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2UgY29udGV4dCBvZiBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYC4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgaW52b2tlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZWlyIHJvbGUgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHBhcnRpY3VsYXJseSB3aXRoIHJlZ2FyZCB0byBjaGVja3N1bSBoYW5kbGluZyB3aXRoaW4gcGF5bG9hZCBtYW5pcHVsYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBjcml0aWNhbCBpbiBjb25maXJtaW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IE5ldGZpbHRlciBoYW5kbGVzIGNoZWNrc3Vtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYwNiwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6MDYuMzExNzI1NjczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTE3MTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0fG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk4Nj1zdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTUtXFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwNTM9c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzMtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNzQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3NS1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExMDc9c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzItXFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3MzpcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzQtXFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExOTk9c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNTctXFx0Y2FzZSBORlRfUEFZTE9BRF9DU1VNX0lORVQ6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNTg6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGN0eCwgcHJpdikpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNTktXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjA3LjAyNjkwMjU4M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1ODU1Nzk5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5GVCBQYXlsb2FkIEluaXRpYWxpemF0aW9uIGFuZCBFdmFsdWF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYG5mdF9wYXlsb2FkX3NldF9pbml0YCBhbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBmdW5jdGlvbiB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBhbmQgdG8gZG8gdGhpcywgSSB3aWxsIHR1cm4gdG8gdGhlIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGZpbGUuIEdpdmVuIHRoZSBmdW5jdGlvbnMsIEknbGwgZm9jdXMgbXkgaW52ZXN0aWdhdGlvbiB3aXRoaW4gdGhlIDExMDAtMTI3MCBsaW5lIHJhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbCBzZXR1cCBvZiB0aGUgcGF5bG9hZCBzZXRzIGFuZCBob3cgdGhleSdyZSBldmFsdWF0ZWQgd2l0aGluIHRoZSBvdmVyYWxsIE5ldGZpbHRlciBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBoaWdobGlnaHQgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgZmxhd3MgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjA5LjYxMjQ4NTg2NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0XFxuMTEwMTpcXHRcXHRpZiAocGt0LVxcdTAwM2V0cHJvdCAhPSBJUFBST1RPX1RDUClcXG4xMTAyOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjExMDM6XFx0XFxuMTEwNDpcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlb2Zmc2V0IFxcdTAwM2UgZG9mZiB8fCBwcml2LVxcdTAwM2VvZmZzZXQgKyBwcml2LVxcdTAwM2VsZW4gXFx1MDAzYz0gZG9mZjtcXG4xMTA1OlxcdH1cXG4xMTA2OlxcdFxcbjExMDc6XFx0c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbjExMDg6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4xMTA5OlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4xMTEwOlxcdHtcXG4xMTExOlxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbjExMTI6XFx0XFx0Y29uc3QgdTMyICpzcmMgPSBcXHUwMDI2cmVncy1cXHUwMDNlZGF0YVtwcml2LVxcdTAwM2VzcmVnXTtcXG4xMTEzOlxcdFxcdGludCBvZmZzZXQsIGNzdW1fb2Zmc2V0LCB2bGFuX2hsZW4gPSAwO1xcbjExMTQ6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbjExMTU6XFx0XFx0X193c3VtIGZzdW0sIHRzdW07XFxuMTExNjpcXHRcXG4xMTE3OlxcdFxcdHN3aXRjaCAocHJpdi1cXHUwMDNlYmFzZSkge1xcbjExMTg6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxuMTExOTpcXHRcXHRcXHRpZiAoIXNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcXG4xMTIwOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExMjE6XFx0XFxuMTEyMjpcXHRcXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbjExMjM6XFx0XFx0XFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4pKSB7XFxuMTEyNDpcXHRcXHRcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3NldF92bGFuKHNyYywgc2tiLFxcbjExMjU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwcml2LVxcdTAwM2VvZmZzZXQsIHByaXYtXFx1MDAzZWxlbixcXG4xMTI2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnZsYW5faGxlbikpXFxuMTEyNzpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTI4OlxcdFxcbjExMjk6XFx0XFx0XFx0XFx0aWYgKCF2bGFuX2hsZW4pXFxuMTEzMDpcXHRcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTEzMTpcXHRcXHRcXHR9XFxuMTEzMjpcXHRcXG4xMTMzOlxcdFxcdFxcdG9mZnNldCA9IHNrYl9tYWNfaGVhZGVyKHNrYikgLSBza2ItXFx1MDAzZWRhdGEgLSB2bGFuX2hsZW47XFxuMTEzNDpcXHRcXHRcXHRpZiAoIW5mdF9sbF93cml0ZV9vayhwa3QsIHByaXYtXFx1MDAzZWxlbiArIHByaXYtXFx1MDAzZW9mZnNldCArIG9mZnNldCkpXFxuMTEzNTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTM2OlxcdFxcdFxcdGJyZWFrO1xcbjExMzc6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG4xMTM4OlxcdFxcdFxcdGlmICghbmZ0X25oX3dyaXRlX29rKHBrdCwgcHJpdiwgc3JjKSlcXG4xMTM5OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExNDA6XFx0XFx0XFx0b2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XFxuMTE0MTpcXHRcXHRcXHRicmVhaztcXG4xMTQyOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4xMTQzOlxcdFxcdFxcdGlmICghKHBrdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSB8fCBwa3QtXFx1MDAzZWZyYWdvZmYpXFxuMTE0NDpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTQ1OlxcdFxcdFxcdGlmICghbmZ0X3RoX3dyaXRlX29rKHBrdCwgcHJpdikpXFxuMTE0NjpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTQ3OlxcdFxcdFxcdG9mZnNldCA9IG5mdF90aG9mZihwa3QpO1xcbjExNDg6XFx0XFx0XFx0YnJlYWs7XFxuMTE0OTpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4xMTUwOlxcdFxcdFxcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xcbjExNTE6XFx0XFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuMTE1MjpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTUzOlxcdFxcdFxcdGJyZWFrO1xcbjExNTQ6XFx0XFx0ZGVmYXVsdDpcXG4xMTU1OlxcdFxcdFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoMSk7XFxuMTE1NjpcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTU3OlxcdFxcdH1cXG4xMTU4OlxcdFxcbjExNTk6XFx0XFx0Y3N1bV9vZmZzZXQgPSBvZmZzZXQgKyBwcml2LVxcdTAwM2Vjc3VtX29mZnNldDtcXG4xMTYwOlxcdFxcdG9mZnNldCArPSBwcml2LVxcdTAwM2VvZmZzZXQ7XFxuMTE2MTpcXHRcXG4xMTYyOlxcdFxcdGlmICgocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCB8fCBwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbjExNjM6XFx0XFx0ICAgICgocHJpdi1cXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIFxcdTAwMjZcXHUwMDI2XFxuMTE2NDpcXHRcXHQgICAgICBwcml2LVxcdTAwM2ViYXNlICE9IE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUikgfHxcXG4xMTY1OlxcdFxcdCAgICAgc2tiLVxcdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHtcXG4xMTY2OlxcdFxcdFxcdGlmIChvZmZzZXQgKyBwcml2LVxcdTAwM2VsZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG4xMTY3OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExNjg6XFx0XFxuMTE2OTpcXHRcXHRcXHRmc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4sIDApO1xcbjExNzA6XFx0XFx0XFx0dHN1bSA9IGNzdW1fcGFydGlhbChzcmMsIHByaXYtXFx1MDAzZWxlbiwgMCk7XFxuMTE3MTpcXHRcXG4xMTcyOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxuMTE3MzpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFxcdTAwMjZcXHUwMDI2XFxuMTE3NDpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXFxuMTE3NTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTc2OlxcdFxcbjExNzc6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fZmxhZ3MgXFx1MDAyNlxcdTAwMjZcXG4xMTc4OlxcdFxcdFxcdCAgICBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKHBrdCwgc2tiLCBmc3VtLCB0c3VtKSBcXHUwMDNjIDApXFxuMTE3OTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTgwOlxcdFxcdH1cXG4xMTgxOlxcdFxcbjExODI6XFx0XFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXgob2Zmc2V0ICsgcHJpdi1cXHUwMDNlbGVuLCAwKSkgfHxcXG4xMTgzOlxcdFxcdCAgICBza2Jfc3RvcmVfYml0cyhza2IsIG9mZnNldCwgc3JjLCBwcml2LVxcdTAwM2VsZW4pIFxcdTAwM2MgMClcXG4xMTg0OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjExODU6XFx0XFxuMTE4NjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fU0NUUCBcXHUwMDI2XFx1MDAyNlxcbjExODc6XFx0XFx0ICAgIHBrdC1cXHUwMDNldHByb3QgPT0gSVBQUk9UT19TQ1RQIFxcdTAwMjZcXHUwMDI2XFxuMTE4ODpcXHRcXHQgICAgc2tiLVxcdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbjExODk6XFx0XFx0XFx0aWYgKHBrdC1cXHUwMDNlZnJhZ29mZiA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuMTE5MDpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHNrYiwgbmZ0X3Rob2ZmKHBrdCkpKVxcbjExOTE6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE5MjpcXHRcXHR9XFxuMTE5MzpcXHRcXG4xMTk0OlxcdFxcdHJldHVybjtcXG4xMTk1OlxcdGVycjpcXG4xMTk2OlxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcXG4xMTk3OlxcdH1cXG4xMTk4OlxcdFxcbjExOTk6XFx0c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDowOS42MTI2MjAzNjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTkxNDkwODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipLY29uZmlnIGFuZCBNYWtlZmlsZXM6IENoZWNraW5nIHRoZSBQcmVyZXF1aXNpdGVzKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIGBuZnRfcGF5bG9hZC5jYCBhcmUgYWxsIGluIHBsYWNlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIHRoYXQgS2NvbmZpZyBmaWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBuYXZpZ2F0ZSBvdmVyIHRvIGBuZXQvbmV0ZmlsdGVyL2AgYW5kIHRha2UgYSBsb29rIGF0IGl0LiBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgSSBoYXZlbid0IGNvbnNpZGVyZWQuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGZlYXR1cmVzIGFyZSBlbmFibGVkLiBUaGVuIEknbGwgZGl2ZSBpbnRvIHRoZSBNYWtlZmlsZSBpbiB0aGF0IHNhbWUgZGlyZWN0b3J5LCBgbmV0L25ldGZpbHRlci9gLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyB0byBzZWUgaG93IGBuZnRfcGF5bG9hZC5jYCBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbC4gTm8gc3VycHJpc2VzOyBqdXN0IG1ha2Ugc3VyZSB0aGUgYnVpbGQgcHJvY2VzcyBpcyBzZXQgdXAgY29ycmVjdGx5IGFuZCBub3RoaW5nJ3MgYmVlbiBvdmVybG9va2VkLiBJJ2xsIGZvY3VzIG9uIGFueXRoaW5nIHJlbGF0aW5nIHRvIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIHBvdGVudGlhbCBjb25mbGljdHMgd2l0aCBvdGhlciBtb2R1bGVzLiBJdCdzIGFsbCBhYm91dCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBrbm93cyB3aGF0IEknbSBleHBlY3RpbmcgYW5kIGV2ZXJ5dGhpbmcgd2lsbCB3b3JrIGFzIHBsYW5uZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjExLjgwNDExNTM0NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMjc0Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVxcdFxcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4OTpcXHRcXHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkwLVxcdFxcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcXFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTEzNT1zdGF0aWMgaW5saW5lIHZvaWQgbmZ0X3RyYWNlX3ZlcmRpY3QoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMTQzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoxNDQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfZmFzdF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMTQ1LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTE0Ny17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjE0ODpcXHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDktXFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTIwMz1zdGF0aWMgdm9pZCBleHByX2NhbGxfb3BzX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIxNy1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MjE4OlxcdFgoZSwgbmZ0X3BheWxvYWRfZXZhbCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIxOS1cXHRYKGUsIG5mdF9jbXBfZXZhbCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjUwPW5mdF9kb19jaGFpbihzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgdm9pZCAqcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yODItXFx0XFx0XFx0XFx0bmZ0X2JpdHdpc2VfZmFzdF9ldmFsKGV4cHIsIFxcdTAwMjZyZWdzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MjgzOlxcdFxcdFxcdGVsc2UgaWYgKGV4cHItXFx1MDAzZW9wcyAhPSBcXHUwMDI2bmZ0X3BheWxvYWRfZmFzdF9vcHMgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6Mjg0OlxcdFxcdFxcdFxcdCAhbmZ0X3BheWxvYWRfZmFzdF9ldmFsKGV4cHIsIFxcdTAwMjZyZWdzLCBwa3QpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yODUtXFx0XFx0XFx0XFx0ZXhwcl9jYWxsX29wc19ldmFsKGV4cHIsIFxcdTAwMjZyZWdzLCBwa3QpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTM1Mj1zdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgKm5mdF9iYXNpY190eXBlc1tdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTM1Ny1cXHRcXHUwMDI2bmZ0X2J5dGVvcmRlcl90eXBlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzozNTg6XFx0XFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTM1OS1cXHRcXHUwMDI2bmZ0X2R5bnNldF90eXBlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9MTE0PXVuaW9uIG5mdF9jbXBfb2ZmbG9hZF9kYXRhIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTExOS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYzoxMjA6c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfbjJoKHVuaW9uIG5mdF9jbXBfb2ZmbG9hZF9kYXRhICpkYXRhLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTEyMS1cXHRcXHRcXHQgICAgY29uc3QgdTggKnZhbCwgdTMyIGxlbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTEzOT1zdGF0aWMgaW50IF9fbmZ0X2NtcF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTE1Mi1cXHRpZiAocmVnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9PRkZMT0FEX0ZfTkVUV09SSzJIT1NUKSB7XFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTUzOlxcdFxcdG5mdF9wYXlsb2FkX24yaChcXHUwMDI2X2RhdGEsICh1OCAqKVxcdTAwMjZwcml2LVxcdTAwM2VkYXRhLCByZWctXFx1MDAzZWxlbik7XFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTU0OlxcdFxcdG5mdF9wYXlsb2FkX24yaChcXHUwMDI2X2RhdGFtYXNrLCAodTggKilcXHUwMDI2cmVnLVxcdTAwM2VtYXNrLCByZWctXFx1MDAzZWxlbik7XFxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMTU1LVxcdFxcdGRhdGEgPSAodTggKilcXHUwMDI2X2RhdGE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jPTM2PXN0cnVjdCBfX25mdF9leHByIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzgtXFx0dW5pb24ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM6Mzk6XFx0XFx0c3RydWN0IG5mdF9wYXlsb2FkXFx0cGF5bG9hZDtcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTQwLVxcdFxcdHN0cnVjdCBuZnRfbWV0YVxcdFxcdG1ldGE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jPTI5MD1zdGF0aWMgdm9pZCBuZnRfaW5uZXJfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMjk1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM6Mjk2OlxcdGlmIChuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy0yOTctXFx0XFx0Z290byBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTMwNC1cXHRjYXNlIE5GVF9JTk5FUl9FWFBSX1BBWUxPQUQ6XFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYzozMDU6XFx0XFx0bmZ0X3BheWxvYWRfaW5uZXJfZXZhbCgoc3RydWN0IG5mdF9leHByICopXFx1MDAyNnByaXYtXFx1MDAzZWV4cHIsIHJlZ3MsIHBrdCwgXFx1MDAyNnR1bl9jdHgpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzA2LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI4LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9yZWJ1aWxkX3ZsYW5faGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBtYWNfb2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMC1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTQzPXN0YXRpYyBib29sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ0Om5mdF9wYXlsb2FkX2NvcHlfdmxhbih1MzIgKmQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHUxNiBvZmZzZXQsIHU4IGxlbilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3JlYnVpbGRfdmxhbl9oZHIoc2tiLCBtYWNfb2ZmLCBcXHUwMDI2dmV0aCkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzU6c3RhdGljIGludCBfX25mdF9wYXlsb2FkX2lubmVyX29mZnNldChzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzOS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTQwOmludCBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0MS17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0Mi1cXHRpZiAoIShwa3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1BLVElORk9fSU5ORVIpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE0MzpcXHQgICAgX19uZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQoKHN0cnVjdCBuZnRfcGt0aW5mbyAqKXBrdCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDQtXFx0XFx0cmV0dXJuIC0xO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0OC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTQ5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QodTMyIG9mZnNldCwgdTMyIGxlbilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTUwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNTktXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE2MDp2b2lkIG5mdF9wYXlsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNjEtXFx0XFx0ICAgICAgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE2My17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE2NDpcXHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNjUtXFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE3Ny1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNzg6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4pKSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE3OTpcXHRcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX2NvcHlfdmxhbihkZXN0LCBza2IsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE4MC1cXHRcXHRcXHRcXHRcXHRcXHQgICBwcml2LVxcdTAwM2VvZmZzZXQsIHByaXYtXFx1MDAzZWxlbikpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTk0LVxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxOTU6XFx0XFx0b2Zmc2V0ID0gbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE5Ni1cXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMTEtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxMjpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3BheWxvYWRfcG9saWN5W05GVEFfUEFZTE9BRF9NQVggKyAxXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjEzLVxcdFtORlRBX1BBWUxPQURfU1JFR11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMjItXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIyMzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjI0LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjI2LXtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjI3OlxcdHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyOC1cXHR1MzIgb2Zmc2V0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjQ0OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNDUtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgYm9vbCByZXNldClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjQ2LXtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjQ3OlxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0OC1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNTktXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI2MDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNjEtXFx0XFx0XFx0XFx0ICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc3LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNzg6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc5LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI4MDpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjgxLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODUtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3NvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI4NjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgRVRIX0FMRU4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODctXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfZGVzdCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5MzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgRVRIX0FMRU4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5OS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfcHJvdG8pOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMDA6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAxLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDctXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMDg6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA5LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTUtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8pOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMTY6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE3LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpICsgc2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMyNDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjUtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMzMi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzMzOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMzNC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNDc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ4LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM0OTpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzUwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTQtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzU1OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzYzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBkYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM2NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzY1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNzM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3NC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozODc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4OC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozODk6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzk0LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIHNhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzk1OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwMy1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBkYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQwNDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDA1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQxMzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fdTgpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDE0LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQyNzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbmgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDI5OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNC1cXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM1OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM2LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzctXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM4OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzOS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NDYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ0NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDk6XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1NC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIHNvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ1NTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTYtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2MS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NjI6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDYzLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NzQtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ3NTpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Nzc6XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00Nzgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIHNvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4MzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4OS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0OTA6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDkxLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDItXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwMzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDQtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTA1OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMC1cXHRjYXNlIElQUFJPVE9fVENQOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MTE6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3AoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEyLVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTMtXFx0Y2FzZSBJUFBST1RPX1VEUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTE0OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxNS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjItXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUyMzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWQoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyNi17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUyNzpcXHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjgtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzEtXFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzMjpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMy1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM0LVxcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzNTpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNi1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM3LVxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM4OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM5LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU0Ni1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ4OlxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ5OlxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUwOlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTE6XFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MjpcXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUzOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTQtfTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTU1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTY6Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9mYXN0X29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU3OlxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU4OlxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU5OlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjA6XFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MTpcXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYyOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjMtfTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTY0LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjU6dm9pZCBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjYtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2OC17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2OTpcXHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NzAtXFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYxNS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjE2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfaW5uZXJfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MTctXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjE5LXtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjIwOlxcdHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYyMS1cXHR1MzIgYmFzZSwgb2Zmc2V0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY1MC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjUxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2lubmVyX29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjUyOlxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjUzOlxcdC5zaXplXFx0XFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjU0OlxcdC5pbml0XFx0XFx0PSBuZnRfcGF5bG9hZF9pbm5lcl9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTU6XFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1NjpcXHQvKiBkaXJlY3QgY2FsbCB0byBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKCkuICovXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY1Ny19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTY1OT1zdGF0aWMgaW5saW5lIHZvaWQgbmZ0X2NzdW1fcmVwbGFjZShfX3N1bTE2ICpzdW0sIF9fd3N1bSBmc3VtLCBfX3dzdW0gdHN1bSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NjUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY2NjpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF91ZHBfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHRob2ZmKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02Njcte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY3Ni1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Njc3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfbDRjc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjc4LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02ODgtXFx0Y2FzZSBJUFBST1RPX1VEUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Njg5OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfdWRwX2NoZWNrc3VtKHNrYiwgbmZ0X3Rob2ZmKHBrdCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02OTAtXFx0XFx0XFx0cmV0dXJuIC0xO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcwNS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzA2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcwNy17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzE4LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3MTk6c3RhdGljIGludCBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MjAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcyOC1cXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzI5OlxcdGlmIChuZnRfcGF5bG9hZF9sNGNzdW1fb2Zmc2V0KHBrdCwgc2tiLCBcXHUwMDI2bDRjc3VtX29mZnNldCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MzAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzU1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NTY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTMyICpzcmMsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc1Ny1cXHRcXHRcXHRcXHQgX193c3VtIGZzdW0sIF9fd3N1bSB0c3VtLCBpbnQgY3N1bV9vZmZzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzcxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NzI6c3RydWN0IG5mdF9wYXlsb2FkX3NldCB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc3MzpcXHRlbnVtIG5mdF9wYXlsb2FkX2Jhc2VzXFx0YmFzZTo4O1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NzQtXFx0dTE2XFx0XFx0XFx0b2Zmc2V0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc4Mi0vKiBUaGlzIGlzIG5vdCBzdHJ1Y3Qgdmxhbl9oZHIuICovXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc4MzpzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03ODQtXFx0X19iZTE2XFx0XFx0XFx0aF92bGFuX3Byb3RvO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTc4OD1zdGF0aWMgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3ODk6bmZ0X3BheWxvYWRfc2V0X3ZsYW4oY29uc3QgdTMyICpzcmMsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiBvZmZzZXQsIHU4IGxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzkwLVxcdFxcdCAgICAgaW50ICp2bGFuX2hsZW4pXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc5MS17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc5MjpcXHRzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIgKnZsYW5oO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03OTMtXFx0X19iZTE2IHZsYW5fcHJvdG87XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODA2LVxcdFxcdH0gZWxzZSBpZiAobGVuID09IDQpIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODA3OlxcdFxcdFxcdHZsYW5oID0gKHN0cnVjdCBuZnRfcGF5bG9hZF92bGFuX2hkciAqKXNyYztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODA4LVxcdFxcdFxcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuaC1cXHUwMDNlaF92bGFuX3Byb3RvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTgzNz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfaXA0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo4Mzg6XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODM5LVxcdFxcdFxcdFxcdGNvbnN0IHUzMiAqc3JjKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTg4Mz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfaXA2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo4ODQ6XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODg1LVxcdFxcdFxcdFxcdGNvbnN0IHUzMiAqc3JjKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkwNC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTA1OnN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19hcnAoY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTA2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05MjQ9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX25ldGRldihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTI1OlxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkyNi1cXHRcXHRcXHRcXHQgICBjb25zdCB1MzIgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05NDU9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2JyaWRnZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTQ2OlxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk0Ny1cXHRcXHRcXHRcXHQgICBjb25zdCB1MzIgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05NjM9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5NjQ6XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk2NS1cXHRcXHRcXHQgICAgY29uc3QgdTMyICpzcmMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTg2PXN0YXRpYyBib29sIG5mdF9sbF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgaW50IG9mZnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTMtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk5NDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk5NTpcXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5Ni17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTAzMi0gKi9cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTAzMzpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwMzQtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNTItXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNTM6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDU0LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDczLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDc0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNzU6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3Ni17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4MC1cXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgxOlxcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwODItXFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDgzOlxcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwODQtXFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTA5Nj1zdGF0aWMgYm9vbCBuZnRfdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwOTc6XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwOTgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMDYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMDc6c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTExMC17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMTE6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMTItXFx0Y29uc3QgdTMyICpzcmMgPSBcXHUwMDI2cmVncy1cXHUwMDNlZGF0YVtwcml2LVxcdTAwM2VzcmVnXTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTIyLVxcdFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMjM6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4pKSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMjQ6XFx0XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9zZXRfdmxhbihzcmMsIHNrYixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEyNS1cXHRcXHRcXHRcXHRcXHRcXHQgIHByaXYtXFx1MDAzZW9mZnNldCwgcHJpdi1cXHUwMDNlbGVuLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNDktXFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNTA6XFx0XFx0b2Zmc2V0ID0gbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KHBrdCk7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNTEtXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3Mi1cXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTczOlxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3NDpcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzUtXFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3Ny1cXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncyBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTc4OlxcdFxcdCAgICBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKHBrdCwgc2tiLCBmc3VtLCB0c3VtKSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzktXFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE4OS1cXHRcXHRpZiAocGt0LVxcdTAwM2VmcmFnb2ZmID09IDAgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE5MDpcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHNrYiwgbmZ0X3Rob2ZmKHBrdCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTkxLVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTgtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExOTk6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjAwLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjAzLVxcdHUzMiBjc3VtX29mZnNldCwgb2Zmc2V0LCBjc3VtX3R5cGUgPSBORlRfUEFZTE9BRF9DU1VNX05PTkU7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyMDQ6XFx0c3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyMDUtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU3LVxcdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjU4OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU5LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzktXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyODA6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjgxLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgYm9vbCByZXNldClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI4Mi17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyODM6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyODQtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI5OS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMDpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9zZXRfb3BzID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzAxOlxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMjpcXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkX3NldCkpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzAzOlxcdC5ldmFsXFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwNDpcXHQuaW5pdFxcdFxcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDU6XFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzA2LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTMwOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyAqXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDk6bmZ0X3BheWxvYWRfc2VsZWN0X29wcyhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzEwLVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMxMS17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMTI6XFx0ZW51bSBuZnRfcGF5bG9hZF9iYXNlcyBiYXNlO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzEzLVxcdHVuc2lnbmVkIGludCBvZmZzZXQsIGxlbjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzM0LVxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzM1OlxcdFxcdHJldHVybiBcXHUwMDI2bmZ0X3BheWxvYWRfc2V0X29wcztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMzNi1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1MC1cXHQgICAgYmFzZSAhPSBORlRfUEFZTE9BRF9MTF9IRUFERVIgXFx1MDAyNlxcdTAwMjYgYmFzZSAhPSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVIpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTE6XFx0XFx0cmV0dXJuIFxcdTAwMjZuZnRfcGF5bG9hZF9mYXN0X29wcztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1Mi1cXHRlbHNlXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTM6XFx0XFx0cmV0dXJuIFxcdTAwMjZuZnRfcGF5bG9hZF9vcHM7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTQtfVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzU1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU2OnN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9wYXlsb2FkX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1Ny1cXHQubmFtZVxcdFxcdD0gXFxcInBheWxvYWRcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU4OlxcdC5zZWxlY3Rfb3BzXFx0PSBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU5OlxcdC5pbm5lcl9vcHNcXHQ9IFxcdTAwMjZuZnRfcGF5bG9hZF9pbm5lcl9vcHMsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNjA6XFx0LnBvbGljeVxcdFxcdD0gbmZ0X3BheWxvYWRfcG9saWN5LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzYxLVxcdC5tYXhhdHRyXFx0PSBORlRBX1BBWUxPQURfTUFYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDoxMS45MjUzOTY0NzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzEzODE3NDAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIG5mX3RhYmxlcyBhbmQgbmZ0X3BheWxvYWQgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgbmZfdGFibGVzYCBhbmQgc3BlY2lmaWNhbGx5IGBuZnRfcGF5bG9hZGAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcywgYW5kIHdoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IGdyYXNwIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuIEknbSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB0byB3YXRjaCBvdXQgZm9yLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIG9uIHRoZSBLY29uZmlnIHRyZWUsIGJ1dCBJIGFudGljaXBhdGUgaGF2aW5nIHRvIHRyYWNlIHRocm91Z2ggYSBmZXcgaW5jbHVkZXMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGdvYWwgaXMgYSBxdWljayBhbmQgZGlydHkgY29uZmlndXJhdGlvbiBvdmVydmlldyBvZiB0aGVzZSBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MzMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDoxNS4wNjM1NzU4NzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzYyNDA2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9UQUJMRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zNj1jb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4LVxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM5OlxcdGRlcGVuZHMgb24gTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQwLVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3MTppZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3NDpcXHRzZWxlY3QgTkZfVEFCTEVTX0lQVjRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDc1OlxcdHNlbGVjdCBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzYtXFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBtaXhlZCBJUHY0L0lQdjYgdGFibGVzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTU1MD1jb25maWcgTkZUX05BVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1Mi1cXHRzZWxlY3QgTkZfTkFUXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU1MzpcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JUFY0IHx8IE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1NC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBuYXQgbW9kdWxlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTU4Nj1jb25maWcgTkZUX1JFSkVDVF9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU4NzpcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU4OC1cXHRkZWZhdWx0IE5GVF9SRUpFQ1RcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MDg9Y29uZmlnIE5GVF9GSUJfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2MDk6XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MTAtXFx0ZGVwZW5kcyBvbiBORlRfRklCX0lQVjRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MjU9Y29uZmlnIE5GVF9TT0NLRVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjctXFx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYyODpcXHRzZWxlY3QgTkZfU09DS0VUX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI5LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDA9Y29uZmlnIE5GVF9UUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDItXFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0MzpcXHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ0LVxcdHNlbGVjdCBORl9UUFJPWFlfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDU6XFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Ni1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQ5PWNvbmZpZyBORlRfU1lOUFJPWFlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY2MDppZiBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2MS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02ODk9Y29uZmlnIE5GVF9SRUpFQ1RfTkVUREVWXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjk4LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2OTk6ZW5kaWYgIyBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAxOmVuZGlmICMgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MTE9Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTQtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzE1OlxcdGRlcGVuZHMgb24gTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxNi1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjE1LjE4NzIxMDEyN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjcwMTc0ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgbmZ0X3BheWxvYWQub2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYG5mdF9wYXlsb2FkLm9gIGdldHMgY29tcGlsZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCBwbGFjZSBJJ2QgbG9vayBpcyB0aGUga2VybmVsJ3MgYG5ldGZpbHRlcmAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYXQgdGhlIGBNYWtlZmlsZWAuIFRoYXQncyB0aGUgdHlwaWNhbCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgc3Vic3lzdGVtLiBJJ20gYXNzdW1pbmcgaXQncyBzdHJ1Y3R1cmVkIGluIGEgc3RhbmRhcmQgd2F5LCBzbyB0aGUgTWFrZWZpbGUgaW4gdGhhdCBsb2NhdGlvbiBzaG91bGQgaGF2ZSB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24sIEknbGwgZ28gY2hlY2sgdGhhdCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA0NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjE3LjQ1NzM5MDI1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMjc0Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX3RhYmxlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODQ9b2JqLSQoQ09ORklHX05GX0RVUF9ORVRERVYpXFx0Kz0gbmZfZHVwX25ldGRldi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04NS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg2OiMgbmZfdGFibGVzXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4NzpuZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODg6XFx0XFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg5LVxcdFxcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcXFxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MS1cXHRcXHQgIG5mdF9jb3VudGVyLm8gbmZ0X29ianJlZi5vIG5mdF9pbm5lci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjkyOlxcdFxcdCAgbmZ0X2NoYWluX3JvdXRlLm8gbmZfdGFibGVzX29mZmxvYWQubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05My1cXHRcXHQgIG5mdF9zZXRfaGFzaC5vIG5mdF9zZXRfYml0bWFwLm8gbmZ0X3NldF9yYnRyZWUubyBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTk3PWlmbmRlZiBDT05GSUdfVU1MXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5ODpuZl90YWJsZXMtb2JqcyArPSBuZnRfc2V0X3BpcGFwb19hdngyLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTk5LWVuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEwMz1pZmRlZiBDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkVcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEwNDpuZl90YWJsZXMtb2JqcyArPSBuZnRfY3RfZmFzdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMDUtZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEwNj1lbmRpZlxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTA3LVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTA4Om9iai0kKENPTkZJR19ORl9UQUJMRVMpXFx0XFx0Kz0gbmZfdGFibGVzLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEwOS1vYmotJChDT05GSUdfTkZUX0NPTVBBVClcXHQrPSBuZnRfY29tcGF0Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTM1PW9iai0kKENPTkZJR19ORlRfTkFUKVxcdFxcdCs9IG5mdF9jaGFpbl9uYXQub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTM2LVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTM3OiMgbmZfdGFibGVzIG5ldGRldlxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTM4LW9iai0kKENPTkZJR19ORlRfRFVQX05FVERFVilcXHQrPSBuZnRfZHVwX25ldGRldi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjE3LjY0MDY3NTQyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDcwNDA0NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIG5ldGZpbHRlci9uZl90YWJsZXMgUGF5bG9hZCBDaGVja3N1bSBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIHRoZSBgQ09ORklHX05GX1RBQkxFU2AgYnVpbGQgY2hhaW4sIGl0IGxvb2tzIGxpa2UgdGhpcyBjZW50ZXJzIGFyb3VuZCBgbmZ0X3BheWxvYWQub2AsIHdoaWNoIGlzIGluY2x1ZGVkIHdoZW4gd2UgYnVpbGQgd2l0aCBgTkZfVEFCTEVTYC4gTGV0J3MgY29uZmlybSB0aGF0IGBORl9UQUJMRVNgIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgaGVyZS5cblxuUmlnaHQsIHNvIGxldCdzIGRpZyBpbnRvIHRoZSBjaGFuZ2VzIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGBjc3VtX29mZnNldGAgd2l0aGluIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KClgLiBQcmV2aW91c2x5LCB3aGVuIGBwcml2LVx1MDAzZWJhc2VgIHdhcyBgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUmAsIGl0IGp1c3QgY2hlY2tlZCBgcHJpdi1cdTAwM2Vjc3VtX2ZsYWdzYC4gTm93LCB3ZSdyZSBzZWVpbmcgc3BlY2lmaWMgY2hlY2tzOiBpdCdzIG1ha2luZyBzdXJlIGBjc3VtX29mZnNldGAgaXMgYSB2YWxpZCBjaGVja3N1bSBvZmZzZXQgZm9yIGVpdGhlciBUQ1AsIFVEUCwgSUNNUCwgb3IgSUNNUHY2IGhlYWRlcnMuXG5cblRoZW4sIHRoZXJlJ3MgYSBuZXcgZnVuY3Rpb24sIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKClgLCB3aGljaCBsb29rcyB0byBiZSB0aGUga2V5LiBUaGlzIGNoZWNrcywgYXQgcGFja2V0IGV2YWx1YXRpb24gdGltZSwgaWYgdGhlIHdyaXRlIG9wZXJhdGlvbiBpcyBva2F5LiBJdCBsb29rcyBsaWtlIGl0IG9ubHkgcmV0dXJucyB0cnVlIGlmIHRoZSBwYWNrZXQgaGFzIGFuIEw0IHByb3RvY29sIGFuZCB0aGUgYGNzdW1fb2Zmc2V0YCBtYXRjaGVzIHRoZSBhcHByb3ByaWF0ZSBjaGVja3N1bSBmaWVsZCBmb3IgVENQLCBVRFAsIElDTVB2Niwgb3IgSUNNUC4gVGhlIG9sZGVyIGNvZGUgdXNlZCB0byBmYWxsIHRocm91Z2ggdG8gYSBkaWZmZXJlbnQgcGF0aC5cblxuVGhpcyBpcyByZWFjaGFibGUgY29kZSwgbm8gZG91YnQuIFRoZSBgbmZ0X3BheWxvYWRgIGZ1bmN0aW9uYWxpdHkgaXMgcGFydCBvZiBuZXRmaWx0ZXIncyBuZl90YWJsZXMsIHdoaWNoIGlzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgKG5mbmV0bGluaykuIEFuZCwgaW1wb3J0YW50bHksIHRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHVucHJpdmlsZWdlZCB1c2VyIG5hbWVzcGFjZXMuIFRoaXMgbWVhbnMgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb250cm9sIHBsYW5lIHZhbGlkYXRpb24gYW5kIGRhdGEgcGxhbmUgcGFja2V0IGV2YWx1YXRpb24uIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2AgaXMgYSBjbGVhciB5ZXMuIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGJvdGggY29udHJvbCBwbGFuZSB2YWxpZGF0aW9uIGFuZCBkYXRhIHBsYW5lIHBhY2tldCBldmFsdWF0aW9uLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHNwZWNpZmljIHN5bWJvbHMuIFdlIGhhdmUgYG5mdF9wYXlsb2FkX3NldF9pbml0YCAod2hpY2ggY2FsbHMgdGhlIHN0YXRpYyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGApLCBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgaXRzZWxmIChzdGF0aWMsIGNhbGxlZCBieSBpbml0KSwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgIChhbm90aGVyIHN0YXRpYyBmdW5jdGlvbiksIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCAoYWxzbyBzdGF0aWMsIGNhbGxlZCBkdXJpbmcgZXZhbHVhdGlvbiksIGFuZCBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIHdoaWNoIGlzIGEgbm9uLXN0YXRpYyBldmFsdWF0aW9uIGNhbGxiYWNrIHRoYXQgY2FsbHMgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGUga2VybmVsICpkbyogaGF2ZSBzeW1ib2xzIGluIGB2bWxpbnV4YCwgZXNwZWNpYWxseSB3aXRoIG1vZGVybiBrZXJuZWwgYnVpbGRzIGFuZCBzdGFuZGFyZCBjb21waWxlciBmbGFncywgc28gbG9uZyBhcyB0aGV5IGFyZW4ndCBpbmxpbmVkLiBUaGlzIG1lYW5zIHRoZXNlIGFyZSBhbGwgdmlhYmxlIHN5bWJvbHMgdG8gY29uc2lkZXIuXG5cbkZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zLCBsZXQncyBrZWVwIHRoZSBmb2N1cyBvbiBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBpbXBsZW1lbnQgb3IgYWx0ZXIgdGhlIG5ldyBsb2dpYzogYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgLCBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AsIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYG5mdF9wYXlsb2FkX3NldF9pbml0YCwgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIFRoZXNlIGFyZSBhbGwgdmVyeSBzcGVjaWZpYyB0byBuZl90YWJsZXMgcGF5bG9hZCBleHByZXNzaW9ucywgbm90IHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzLlxuXG5GaW5hbGx5LCB3ZSBuZWVkIHRvIGNoZWNrIGNvbmZpZyBkZXBlbmRlbmNpZXMuIGBDT05GSUdfTkZfVEFCTEVTYCAod2hpY2ggd2UgY2FuIHN0cmlwIHRvIHNpbXBseSBgTkZfVEFCTEVTYCkgaXMgY2xlYXJseSB0aGUgbWFpbiBvbmUsIGJ1dCBuZl90YWJsZXMgaW4gdHVybiBkZXBlbmRzIG9uIGBDT05GSUdfTkVURklMVEVSYCBhbmQgdGhlcmVmb3JlIGBORVRgLiBMZXQncyBkb3VibGUtY2hlY2sgdGhpcyBpbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODAyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDoyNi43MTEwODU0NjNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDIyNjE1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDoyNi45MTUzMTcwNjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUwMjU5ODYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE5GX1RBQkxFUyBEZXBlbmRlbmN5IFRyZWUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgdXBzdHJlYW0gZGVwZW5kZW5jaWVzIG9mIGBORl9UQUJMRVNgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIGVhc2llc3QgYW5kIG1vc3QgZGlyZWN0IHdheSB0byBkbyB0aGlzLCBpbiBteSBleHBlcmllbmNlLCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZS4gTGV0J3Mgc2VlLi4uIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHNvdW5kcyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhhdCBgTkZfVEFCTEVTYCBpcyBvYnZpb3VzbHkgcmVsYXRlZCB0byBOZXRmaWx0ZXIuIE5vdywgSSB2YWd1ZWx5IHJlY2FsbCB0aGF0IHRoaXMgaXMgdXN1YWxseSBoYW5kbGVkIHdpdGhpbiB0aGUgYnJvYWRlciBLY29uZmlnIHN0cnVjdHVyZSwgYW5kIHRoYXQgcGFyZW50IGRlcGVuZGVuY2llcyBhcmUgY2xlYXJseSBsYWlkIG91dCBpbiB0aGUgZmlsZS4gU2luY2UgSSBoYXZlIGEgcHJldHR5IGdvb2QgaWRlYSBvZiB0aGUgZ2VuZXJhbCBvcmdhbml6YXRpb24gb2YgdGhpcywgSSdsbCBob25lIGluIGFyb3VuZCBsaW5lIDQ1MCwgYXMgdGhhdCBvZnRlbiBzZWVtcyB0byBiZSB0aGUgcmlnaHQgc2VjdGlvbiBmb3IgTmV0ZmlsdGVyIGNvcmUgY29tcG9uZW50cy4gSG9wZWZ1bGx5LCB0aGUgZmlsZSBpcyB3ZWxsLWNvbW1lbnRlZCwgYW5kIEkgY2FuIHF1aWNrbHkgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBjb25maWd1cmVkIGJlZm9yZSBJIGNhbiBldmVuIGVuYWJsZSBgTkZfVEFCTEVTYCBpdHNlbGYuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIEtjb25maWcgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDoyOS40MTc5MTg5ODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDU6XFx0XFx0Ym9vbFxcbiA0NDY6XFx0XFxuIDQ0NzpcXHRjb25maWcgTkZfTkFUX09WU1xcbiA0NDg6XFx0XFx0Ym9vbFxcbiA0NDk6XFx0XFxuIDQ1MDpcXHRjb25maWcgTkVURklMVEVSX1NZTlBST1hZXFxuIDQ1MTpcXHRcXHR0cmlzdGF0ZVxcbiA0NTI6XFx0XFxuIDQ1MzpcXHRlbmRpZiAjIE5GX0NPTk5UUkFDS1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRjb25maWcgTkZfVEFCTEVTXFxuIDQ1NjpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gNDU3OlxcdFxcdHNlbGVjdCBORVRfQ1JDMzJDXFxuIDQ1ODpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbiA0NTk6XFx0XFx0aGVscFxcbiA0NjA6XFx0XFx0ICBuZnRhYmxlcyBpcyB0aGUgbmV3IHBhY2tldCBjbGFzc2lmaWNhdGlvbiBmcmFtZXdvcmsgdGhhdCBpbnRlbmRzIHRvXFxuIDQ2MTpcXHRcXHQgIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHtpcCxpcDYsYXJwLGVifV90YWJsZXMgaW5mcmFzdHJ1Y3R1cmUuIEl0XFxuIDQ2MjpcXHRcXHQgIHByb3ZpZGVzIGEgcHNldWRvLXN0YXRlIG1hY2hpbmUgd2l0aCBhbiBleHRlbnNpYmxlIGluc3RydWN0aW9uLXNldFxcbiA0NjM6XFx0XFx0ICAoYWxzbyBrbm93biBhcyBleHByZXNzaW9ucykgdGhhdCB0aGUgdXNlcnNwYWNlICduZnQnIHV0aWxpdHlcXG4gNDY0OlxcdFxcdCAgKGh0dHBzOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvbmZ0YWJsZXMpIHVzZXMgdG8gYnVpbGQgdGhlXFxuIDQ2NTpcXHRcXHQgIHJ1bGUtc2V0LiBJdCBhbHNvIGNvbWVzIHdpdGggdGhlIGdlbmVyaWMgc2V0IGluZnJhc3RydWN0dXJlIHRoYXRcXG4gNDY2OlxcdFxcdCAgYWxsb3dzIHlvdSB0byBjb25zdHJ1Y3QgbWFwcGluZ3MgYmV0d2VlbiBtYXRjaGluZ3MgYW5kIGFjdGlvbnNcXG4gNDY3OlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlIGxvb2t1cHMuXFxuIDQ2ODpcXHRcXG4gNDY5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6MjkuNDE4MDgzMjg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNDM4MjMxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBORl9UQUJMRVNgIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCBob3cgd2UncmUgZ29pbmcgdG8gYXBwcm9hY2ggZnV6emluZy4gRmlyc3QsIGBORl9UQUJMRVNgIHJlbGllcyBvbiBgTkVUYCBhbmQgYE5FVEZJTFRFUmAsIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYE5GX1RBQkxFU19JTkVUYCwgYE5GX1RBQkxFU19JUFY0YCwgb3IgYE5GX1RBQkxFU19JUFY2YCBhcmUgcG9zc2libHkgcmVsZXZhbnQsIGJ1dCBgTkZfVEFCTEVTYCBpdHNlbGYgZGVmaW5pdGVseSBpbmNsdWRlcyBgbmZ0X3BheWxvYWQub2AuXG5cbk5vdywgZm9yIGBzZXQtcmVzdWx0c2AsIGxldCdzIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwLiBJdCdzIG1hcmtlZCBhcyBgV29ydGhGdXp6aW5nYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aGlzIHBhdGNoIHRvdWNoZXMgYG5mdF9wYXlsb2FkLmNgIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLiBJdCdzIGFkZGluZyB2YWxpZGF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldHMgaW4gYm90aCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHJ1bnRpbWUgY29kZSwgc3BlY2lmaWNhbGx5IGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgLCBhbmQgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLiBUaGlzIGxvZ2ljIGNhbiBiZSByZWFjaGVkIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggbmV0bGluayBhbmQgcGFja2V0IHByb2Nlc3NpbmcuIFRoYXQgbWVhbnMgaXQncyBkZWZpbml0ZWx5IGEgdmlhYmxlIHRhcmdldC5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaXMgc3BvdCBvbiwgaW5jbHVkaW5nIHRob3NlIHZhbGlkYXRpb24gZnVuY3Rpb25zLCBhbG9uZyB3aXRoIGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIFRoaXMgY292ZXJzIHRoZSBrZXkgZW50cnkgcG9pbnRzLiBGaW5hbGx5LCB3ZSdyZSBlbmFibGluZyBgTkZfVEFCTEVTYCBhbmQgYE5FVEZJTFRFUmAsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgYmFzZWQgb24gdGhlIGRlcGVuZGVuY2llcy5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYxNywiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDozMy42NjE5MDkzOTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY3NTcyNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldFwiLFxuICAgIFwibmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va1wiLFxuICAgIFwibmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va1wiLFxuICAgIFwibmZ0X3BheWxvYWRfc2V0X2luaXRcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2hlY2tzdW0gb2Zmc2V0IHZhbGlkYXRpb24gYW5kIHBhY2tldCBldmFsdWF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIHBheWxvYWQgZXhwcmVzc2lvbnMgaW4gbmZ0YWJsZXMgKG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYykuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIG5mbmV0bGluayBjb25maWd1cmF0aW9uIGFuZCBpbmNvbWluZyBwYWNrZXQgcHJvY2Vzc2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRcIixcbiAgICBcIm5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tcIixcbiAgICBcIm5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIGV4cHJlc3Npb25zIGluIG5mdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBuZm5ldGxpbmsgY29uZmlndXJhdGlvbiBhbmQgaW5jb21pbmcgcGFja2V0IHByb2Nlc3NpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjMzLjgzODY3NjIwMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5MjA4ODYxMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDozMy44MzkzMzAyMDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzkyMDIyNDQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdGlnaHRlbnMgdmFsaWRhdGlvbiBmb3IgdGhlIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gbmZ0YWJsZXMgcGF5bG9hZCBleHByZXNzaW9ucyAoYG5mdF9wYXlsb2FkLmNgKS4gSXQgYWRkcyBjb250cm9sLXBsYW5lIHZhbGlkYXRpb24gaW4gYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoKWAgYW5kIHJ1bnRpbWUgcGFja2V0IHZhbGlkYXRpb24gaW4gYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soKWAgdG8gZW5zdXJlIGNoZWNrc3VtIG1vZGlmaWNhdGlvbiB0YXJnZXRzIGxlZ2l0aW1hdGUgdHJhbnNwb3J0IGxheWVyIGhlYWRlcnMgKFRDUCwgVURQLCBVRFBMaXRlLCBJQ01QLCBJQ01QdjYpLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZSB2YXJpYWJsZXMgcmVhZCAoYHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0YCwgYHBrdC1cXHUwMDNlZmxhZ3NgLCBgcGt0LVxcdTAwM2V0cHJvdGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBuZnRhYmxlcyBleHByZXNzaW9uIHNldHVwIGFuZCBwYWNrZXQgcGFyc2luZyBsb2dpYy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODg2ZDAyOTFhMGFiZGMwZTk3YjRhYzUwYTMzMzBhMjkyZjdmNTViNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTA6Mjk6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbmluZGV4IGUzMTVkMzVmNzNkNGEuLjViNzZhZjY4YjcwNDkgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dyZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG5AQCAtMTAwOCwxMSArMTAwOSwxNCBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fZmxhZ3MpIC8qIG1ha2VzIG5vIHNlbnNlLCBhc2tzIGZvciBcInJlLXVwZGF0ZVwiIG9mIEw0IGNoZWNrc3VtICovXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHQvKiBubyBmdXJ0aGVyIGNoZWNrIGhlcmU7IG9mZnNldCBjYW4ndCBiZSBuZWdhdGl2ZSBzbyBib2d1c1xuLVx0XHQgKiBvZmZzZXRzIGNhbiBjb3JydXB0IEw0IG9yIHBheWxvYWQgYnV0IG5vdCBsMyBoZWFkZXJzLlxuLVx0XHQgKiBXZSBhbHJlYWR5IGFsbG93IGFyYml0cmFyeSBsNC9pbm5lciBwYXlsb2FkIHdyaXRlcy5cbi1cdFx0ICovXG4tXHRcdHJldHVybiB0cnVlO1xuK1x0XHQvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqL1xuK1x0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHxcbitcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XG4rXHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSkgfHxcbitcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbkBAIC0xMDQ2LDYgKzEwNTAsMjcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4rXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbit7XG4rXHRpZiAoIShwa3QtXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9QS1RJTkZPX0w0UFJPVE8pKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKHBrdC1cdTAwM2V0cHJvdCkge1xuK1x0Y2FzZSBJUFBST1RPX1RDUDpcbitcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xuK1x0Y2FzZSBJUFBST1RPX1VEUDpcbitcdGNhc2UgSVBQUk9UT19VRFBMSVRFOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7XG4rXHRjYXNlIElQUFJPVE9fSUNNUFY2OlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcbitcdGNhc2UgSVBQUk9UT19JQ01QOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbiB7XG5AQCAtMTA1NSw5ICsxMDgwLDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxuIFx0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxuK1x0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4tXHRcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxuLVx0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4rXHRcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXG4rXHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbiBcdFx0ICovXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6MzMuODM5MzMxMzgyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTUzNDY1NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJ20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIERlZXAgaW50byBuZnRfcGF5bG9hZC5jKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCwgc28gSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGRpZmYuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBmaWxlIGhhcyBjaGFuZ2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIFxuXG5JJ20gemVyb2luZyBpbiBvbiBhIGZldyBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZSwgYXMgdGhlc2UgbGlrZWx5IGhvbGQga2V5IGluZm9ybWF0aW9uIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXM6IGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCwgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLCBhbmQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAsIG9mIGNvdXJzZSwgdG8gem9vbSBpbiBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMgc28gdGhhdCBJIGNhbiBzZWUgaG93IHRoZXkgd29yay4gVGhpcyBpcyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgb3IgZGVzaWduIGFsdGVyYXRpb25zLiBJIHdhbnQgdG8gYmUgYWJsZSB0byBmdWxseSBncmFzcCBhbnkgY2hhbmdlcywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgY2hlY2tzdW0gaGFuZGxpbmcgYW5kIGV2YWx1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjQ0Ljc5MjgwMDY0NloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTI5NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTgwOlxcdFxcdH1cXG4gOTgxOlxcdFxcbiA5ODI6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA5ODM6XFx0fVxcbiA5ODQ6XFx0XFxuIDk4NTpcXHQvKiBjaGVjayBsaW5rbGF5ZXIgbW9kaWZpY2F0aW9ucyBkb24ndCBzcGlsbCBpbnRvIG5ldHdvcmsgaGVhZGVyLiAqL1xcbiA5ODY6XFx0c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxcbiA5ODc6XFx0e1xcbiA5ODg6XFx0XFx0aWYgKG5mdF9pbl9pbmdyZXNzKHBrdC1cXHUwMDNlc3RhdGUpKVxcbiA5ODk6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDk5MDpcXHRcXG4gOTkxOlxcdFxcdHJldHVybiBvZmZzZXQgXFx1MDAzYz0gc2tiX25ldHdvcmtfb2Zmc2V0KHBrdC1cXHUwMDNlc2tiKTtcXG4gOTkyOlxcdH1cXG4gOTkzOlxcdFxcbiA5OTQ6XFx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiA5OTU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbiA5OTY6XFx0e1xcbiA5OTc6XFx0XFx0c3dpdGNoIChwcml2LVxcdTAwM2ViYXNlKSB7XFxuIDk5ODpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcXG4gOTk5OlxcdFxcdFxcdGJyZWFrO1xcbjEwMDA6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG4xMDAxOlxcdFxcdFxcdGlmIChjdHgtXFx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjQpIHtcXG4xMDAyOlxcdFxcdFxcdFxcdGlmIChvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKSA9PSBwcml2LVxcdTAwM2Vjc3VtX29mZnNldClcXG4xMDAzOlxcdFxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAwNjpcXHRcXHRcXHR9XFxuMTAwNzpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTsgLyogcnVuIHRpbWUgdmFsaWRhdGlvbiByZXF1aXJlZCAqL1xcbjEwMDg6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxcbjEwMDk6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fZmxhZ3MpIC8qIG1ha2VzIG5vIHNlbnNlLCBhc2tzIGZvciBcXFwicmUtdXBkYXRlXFxcIiBvZiBMNCBjaGVja3N1bSAqL1xcbjEwMTA6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwMTE6XFx0XFxuMTAxMjpcXHRcXHRcXHQvKiBWYWxpZGF0ZSBjc3VtX29mZnNldCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAqL1xcbjEwMTM6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSB8fFxcbjEwMTQ6XFx0XFx0XFx0ICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxcbjEwMTU6XFx0XFx0XFx0ICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSkgfHxcXG4xMDE2OlxcdFxcdFxcdCAgICBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcXG4xMDE3OlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEwMTg6XFx0XFxuMTAxOTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAyMDpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4xMDIxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEwMjI6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxcbjEwMjM6XFx0XFx0XFx0YnJlYWs7XFxuMTAyNDpcXHRcXHR9XFxuMTAyNTpcXHRcXG4xMDI2OlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDI3OlxcdH1cXG4xMDI4OlxcdFxcbjEwMjk6XFx0LyogZG8gbm90IGFsbG93IGFyYml0cmFyeSBuZXR3b3JrIGhlYWRlciBtYW5nbGluZyB2aWEgYm9ndXMgY3N1bV9vZmYuXFxuMTAzMDpcXHQgKiBXZSBvbmx5IHN1cHBvcnQgaXB2NC4gIE9ubHkgTkZQUk9UT19JUFY0IGNhbiBiZSBjaGVja2VkIGZyb20gY29udHJvbFxcbjEwMzE6XFx0ICogcGxhbmUuXFxuMTAzMjpcXHQgKi9cXG4xMDMzOlxcdHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4xMDM0OlxcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4xMDM1OlxcdHtcXG4xMDM2OlxcdFxcdHN3aXRjaCAocGt0LVxcdTAwM2VzdGF0ZS1cXHUwMDNlcGYpIHtcXG4xMDM3OlxcdFxcdGNhc2UgTkZQUk9UT19JUFY0OlxcbjEwMzg6XFx0XFx0XFx0LyogV2FybmluZzogTkZQUk9UT19JTkVUIHdhcyBub3QgY2hlY2tlZDsgd2UgY2FuJ3QgcmV0dXJuIHRydWUgaGVyZS4gKi9cXG4xMDM5OlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcXG4xMDQwOlxcdFxcdGNhc2UgTkZQUk9UT19JUFY2OlxcbjEwNDE6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwNDI6XFx0XFx0Y2FzZSBORlBST1RPX0JSSURHRTpcXG4xMDQzOlxcdFxcdFxcdHJldHVybiBwa3QtXFx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9JUCkgXFx1MDAyNlxcdTAwMjZcXG4xMDQ0OlxcdFxcdFxcdCAgICAgICBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcXG4xMDQ1OlxcdFxcdGNhc2UgTkZQUk9UT19ORVRERVY6XFxuMTA0NjpcXHRcXHRcXHRyZXR1cm4gcGt0LVxcdTAwM2Vza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSBcXHUwMDI2XFx1MDAyNlxcbjEwNDc6XFx0XFx0XFx0ICAgICAgIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xcbjEwNDg6XFx0XFx0fVxcbjEwNDk6XFx0XFxuMTA1MDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA1MTpcXHR9XFxuMTA1MjpcXHRcXG4xMDUzOlxcdHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4xMDU0OlxcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4xMDU1OlxcdHtcXG4xMDU2OlxcdFxcdGlmICghKHBrdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSlcXG4xMDU3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDU4OlxcdFxcbjEwNTk6XFx0XFx0c3dpdGNoIChwa3QtXFx1MDAzZXRwcm90KSB7XFxuMTA2MDpcXHRcXHRjYXNlIElQUFJPVE9fVENQOlxcbjEwNjE6XFx0XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcXG4xMDYyOlxcdFxcdGNhc2UgSVBQUk9UT19VRFA6XFxuMTA2MzpcXHRcXHRjYXNlIElQUFJPVE9fVURQTElURTpcXG4xMDY0OlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7XFxuMTA2NTpcXHRcXHRjYXNlIElQUFJPVE9fSUNNUFY2OlxcbjEwNjY6XFx0XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xcbjEwNjc6XFx0XFx0Y2FzZSBJUFBST1RPX0lDTVA6XFxuMTA2ODpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKTtcXG4xMDY5OlxcdFxcdH1cXG4xMDcwOlxcdFxcbjEwNzE6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwNzI6XFx0fVxcbjEwNzM6XFx0XFxuMTA3NDpcXHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbjEwNzU6XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4xMDc2OlxcdHtcXG4xMDc3OlxcdFxcdHN3aXRjaCAocHJpdi1cXHUwMDNlYmFzZSkge1xcbjEwNzg6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxuMTA3OTpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6NDQuNzk1MzQzMDA2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MjA0MTIwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBuZnRfcGF5bG9hZC5jYCBmb3IgQ29udGV4dCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGBuZnRfcGF5bG9hZC5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjb2RlIGFyb3VuZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgYW5kIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAuIE15IGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlICpob3cqIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCBpcyB1c2VkIOKAkyBpcyBpdCBhIHByZWNvbmRpdGlvbiwgYSB2YWxpZGF0aW9uIGNoZWNrLCBvciBwZXJoYXBzIGEgaGVscGVyPyBNb3JlIGltcG9ydGFudGx5LCB3aGVyZSBkb2VzIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgZml0IGludG8gdGhlIGVxdWF0aW9uPyBJcyBpdCBzZXR0aW5nIHVwIHNvbWV0aGluZyBmb3IgdGhlIGNoZWNrc3VtIHdyaXRlLCBvciBpcyBpdCB3b3JraW5nIGluIHBhcmFsbGVsIHRvIHByZXBhcmUgdGhlIHBheWxvYWQ/IERvZXMgaXQgbmVlZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgdG8gYmUgcG9zaXRpdmUgdG8gcnVuIGNvcnJlY3RseT8gT3IgZG9lcyBgbmZ0X3BheWxvYWRfc2V0X2V2YWxgIHNvbWVob3cgYWZmZWN0IHRoZSBjaXJjdW1zdGFuY2VzIHdoZW4gYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgIGlzIHRydWUgb3IgZmFsc2U/XG5cbkknbSBhc3N1bWluZyB0aGlzIHNlY3Rpb24gZGVhbHMgd2l0aCBjaGVja3N1bSBtYW5pcHVsYXRpb24gb3IgZXZhbHVhdGlvbiwgYnV0IEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlIHRvIGJlIHN1cmUuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHBheWxvYWQgZGF0YSBpcyByZWFkLCB3cml0dGVuLCBhbmQgbWFuaXB1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIGNoZWNrc3Vtcy4gSSdsbCBuZWVkIHRvIGNoZWNrIGhvdyBwYWNrZXQgc3RydWN0dXJlcyBhcmUgYmVpbmcgaGFuZGxlZCwgaG93IGRhdGEgaXMgYWNjZXNzZWQgaW4gbWVtb3J5LCBhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrIGFzIGEgd2hvbGUuIEkgc2hvdWxkIGNoZWNrIGhvdyBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBhcmUgaGFuZGxlZC4gVWx0aW1hdGVseSwgSSdtIGxvb2tpbmcgZm9yIHRoZSBsb2dpY2FsIHJlbGF0aW9uc2hpcCwgb3IgZGVwZW5kZW5jaWVzLCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgd2l0aGluIHRoZSBncmVhdGVyIGNvbnRleHQgb2YgdGhlIGBuZnRfcGF5bG9hZGAgc3Vic3lzdGVtLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIHByb2NlZWQgd2l0aCB0aGUgd29yayBhdCBoYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzMwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxMDozMDo0Ny40MTU3NTg5NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzczMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzU6XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4xMDc2OlxcdHtcXG4xMDc3OlxcdFxcdHN3aXRjaCAocHJpdi1cXHUwMDNlYmFzZSkge1xcbjEwNzg6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxuMTA3OTpcXHRcXHRcXHRicmVhaztcXG4xMDgwOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxuMTA4MTpcXHRcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xcbjEwODI6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxcbjEwODM6XFx0XFx0XFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KTtcXG4xMDg0OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbjEwODU6XFx0XFx0XFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcXG4xMDg2OlxcdFxcdFxcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cXG4xMDg3OlxcdFxcdFxcdCAqL1xcbjEwODg6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTA4OTpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XFxuMTA5MDpcXHRcXHRcXHRicmVhaztcXG4xMDkxOlxcdFxcdH1cXG4xMDkyOlxcdFxcbjEwOTM6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwOTQ6XFx0fVxcbjEwOTU6XFx0XFxuMTA5NjpcXHRzdGF0aWMgYm9vbCBuZnRfdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuMTA5NzpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4xMDk4OlxcdHtcXG4xMDk5OlxcdFxcdHVuc2lnbmVkIGludCBkb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgYWNrX3NlcSkgKyBzaXplb2YoX19iZTMyKTtcXG4xMTAwOlxcdFxcbjExMDE6XFx0XFx0aWYgKHBrdC1cXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXFxuMTEwMjpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMTAzOlxcdFxcbjExMDQ6XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZW9mZnNldCBcXHUwMDNlIGRvZmYgfHwgcHJpdi1cXHUwMDNlb2Zmc2V0ICsgcHJpdi1cXHUwMDNlbGVuIFxcdTAwM2M9IGRvZmY7XFxuMTEwNTpcXHR9XFxuMTEwNjpcXHRcXG4xMTA3OlxcdHN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4xMTA4OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuMTEwOTpcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuMTExMDpcXHR7XFxuMTExMTpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG4xMTEyOlxcdFxcdGNvbnN0IHUzMiAqc3JjID0gXFx1MDAyNnJlZ3MtXFx1MDAzZWRhdGFbcHJpdi1cXHUwMDNlc3JlZ107XFxuMTExMzpcXHRcXHRpbnQgb2Zmc2V0LCBjc3VtX29mZnNldCwgdmxhbl9obGVuID0gMDtcXG4xMTE0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXFx1MDAzZXNrYjtcXG4xMTE1OlxcdFxcdF9fd3N1bSBmc3VtLCB0c3VtO1xcbjExMTY6XFx0XFxuMTExNzpcXHRcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZWJhc2UpIHtcXG4xMTE4OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxcbjExMTk6XFx0XFx0XFx0aWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXFxuMTEyMDpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTIxOlxcdFxcbjExMjI6XFx0XFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgXFx1MDAyNlxcdTAwMjZcXG4xMTIzOlxcdFxcdFxcdCAgICBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHByaXYtXFx1MDAzZW9mZnNldCwgcHJpdi1cXHUwMDNlbGVuKSkge1xcbjExMjQ6XFx0XFx0XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9zZXRfdmxhbihzcmMsIHNrYixcXG4xMTI1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4sXFxuMTEyNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ2bGFuX2hsZW4pKVxcbjExMjc6XFx0XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTEyODpcXHRcXG4xMTI5OlxcdFxcdFxcdFxcdGlmICghdmxhbl9obGVuKVxcbjExMzA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjExMzE6XFx0XFx0XFx0fVxcbjExMzI6XFx0XFxuMTEzMzpcXHRcXHRcXHRvZmZzZXQgPSBza2JfbWFjX2hlYWRlcihza2IpIC0gc2tiLVxcdTAwM2VkYXRhIC0gdmxhbl9obGVuO1xcbjExMzQ6XFx0XFx0XFx0aWYgKCFuZnRfbGxfd3JpdGVfb2socGt0LCBwcml2LVxcdTAwM2VsZW4gKyBwcml2LVxcdTAwM2VvZmZzZXQgKyBvZmZzZXQpKVxcbjExMzU6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTEzNjpcXHRcXHRcXHRicmVhaztcXG4xMTM3OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxuMTEzODpcXHRcXHRcXHRpZiAoIW5mdF9uaF93cml0ZV9vayhwa3QsIHByaXYsIHNyYykpXFxuMTEzOTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTQwOlxcdFxcdFxcdG9mZnNldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpO1xcbjExNDE6XFx0XFx0XFx0YnJlYWs7XFxuMTE0MjpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuMTE0MzpcXHRcXHRcXHRpZiAoIShwa3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykgfHwgcGt0LVxcdTAwM2VmcmFnb2ZmKVxcbjExNDQ6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE0NTpcXHRcXHRcXHRpZiAoIW5mdF90aF93cml0ZV9vayhwa3QsIHByaXYpKVxcbjExNDY6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE0NzpcXHRcXHRcXHRvZmZzZXQgPSBuZnRfdGhvZmYocGt0KTtcXG4xMTQ4OlxcdFxcdFxcdGJyZWFrO1xcbjExNDk6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuMTE1MDpcXHRcXHRcXHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcXG4xMTUxOlxcdFxcdFxcdGlmIChvZmZzZXQgXFx1MDAzYyAwKVxcbjExNTI6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE1MzpcXHRcXHRcXHRicmVhaztcXG4xMTU0OlxcdFxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjQ3LjQxNTg5ODY0OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODU1NDgzMTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIG5mdFxcX3BheWxvYWRcXF9zZXRcXF9ldmFsKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYG5mdF9wYXlsb2FkX3NldF9ldmFsYC4gSXQncyBhIGtleSBmdW5jdGlvbiwgb2J2aW91c2x5LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgTmV0ZmlsdGVyJ3MgTkZUYWJsZXMgZnJhbWV3b3JrLiBcIkxldCdzIHNlZSB0aGUgcmVzdCBvZiBpdFwiIGltcGxpZXMgSSd2ZSBhbHJlYWR5IGdvdCBzb21lIGluaXRpYWwgY29udGV4dCwgbGlrZWx5IGZyb20gbG9va2luZyBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBvciBkb2N1bWVudGF0aW9uLiBJJ20gcHJvYmFibHkgdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIGhvdyB0aGlzIGV2YWx1YXRpb24gbWVjaGFuaXNtIHdvcmtzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBwYXlsb2FkIHNldHRpbmcgY29udGV4dC4gQW0gSSB0cnlpbmcgdG8gZGVidWcgYSBzcGVjaWZpYyBpc3N1ZSwgb3IganVzdCBkZWVwZW4gbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5jdGlvbidzIGludGVybmFsIGZsb3cgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBOZXRmaWx0ZXIgY29tcG9uZW50cz8gSSdtIHByb2JhYmx5IG1lbnRhbGx5IG1hcHBpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoOiB0aGUgYXJndW1lbnRzIGl0IHRha2VzLCB0aGUgY29uZGl0aW9ucyBpdCBjaGVja3MsIHRoZSBzdGF0ZSBpdCB1cGRhdGVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgaW5zaWdodHMgaW50byB0aGluZ3MgbGlrZSB0aGUgaGFuZGxpbmcgb2YgZGlmZmVyZW50IHBheWxvYWQgdHlwZXMsIHRoZSB1c2Ugb2YgaGVscGVyIGZ1bmN0aW9ucywgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgZXZhbHVhdGlvbiBvbiB0aGUgb3ZlcmFsbCBydWxlIG1hdGNoaW5nIHByb2Nlc3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZCBhbmQgd2hhdCBkYXRhIGlzIGJlaW5nIG1hbmlwdWxhdGVkIGR1cmluZyB0aGlzIGV2YWx1YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBldmVyeXRoaW5nIGZyb20gcGVyZm9ybWFuY2UgdHVuaW5nIHRvIHNlY3VyaXR5IGhhcmRlbmluZyBhbmQgZGVidWdnaW5nLiBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyB0byBpdHMgcGxhY2UgaW4gdGhlIHdob2xlIHBpY3R1cmUuIEkgYW0gZ29pbmcgdG8ga2VlcCBnb2luZyBhbmQgc2VlIHdoYXQgZWxzZSBjYW4gYmUgZ2xlYW5lZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NjQwMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTA6MzA6NTAuMjcxMzg3NzQ5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE1NTpcXHRcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKDEpO1xcbjExNTY6XFx0XFx0XFx0Z290byBlcnI7XFxuMTE1NzpcXHRcXHR9XFxuMTE1ODpcXHRcXG4xMTU5OlxcdFxcdGNzdW1fb2Zmc2V0ID0gb2Zmc2V0ICsgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQ7XFxuMTE2MDpcXHRcXHRvZmZzZXQgKz0gcHJpdi1cXHUwMDNlb2Zmc2V0O1xcbjExNjE6XFx0XFxuMTE2MjpcXHRcXHRpZiAoKHByaXYtXFx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgfHwgcHJpdi1cXHUwMDNlY3N1bV9mbGFncykgXFx1MDAyNlxcdTAwMjZcXG4xMTYzOlxcdFxcdCAgICAoKHByaXYtXFx1MDAzZWJhc2UgIT0gTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUiBcXHUwMDI2XFx1MDAyNlxcbjExNjQ6XFx0XFx0ICAgICAgcHJpdi1cXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVIpIHx8XFxuMTE2NTpcXHRcXHQgICAgIHNrYi1cXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpKSB7XFxuMTE2NjpcXHRcXHRcXHRpZiAob2Zmc2V0ICsgcHJpdi1cXHUwMDNlbGVuIFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4pXFxuMTE2NzpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTY4OlxcdFxcbjExNjk6XFx0XFx0XFx0ZnN1bSA9IHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgcHJpdi1cXHUwMDNlbGVuLCAwKTtcXG4xMTcwOlxcdFxcdFxcdHRzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBwcml2LVxcdTAwM2VsZW4sIDApO1xcbjExNzE6XFx0XFxuMTE3MjpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCBcXHUwMDI2XFx1MDAyNlxcbjExNzM6XFx0XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcXHUwMDI2XFx1MDAyNlxcbjExNzQ6XFx0XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxcbjExNzU6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE3NjpcXHRcXG4xMTc3OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzIFxcdTAwMjZcXHUwMDI2XFxuMTE3ODpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfbDRjc3VtX3VwZGF0ZShwa3QsIHNrYiwgZnN1bSwgdHN1bSkgXFx1MDAzYyAwKVxcbjExNzk6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuMTE4MDpcXHRcXHR9XFxuMTE4MTpcXHRcXG4xMTgyOlxcdFxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgbWF4KG9mZnNldCArIHByaXYtXFx1MDAzZWxlbiwgMCkpIHx8XFxuMTE4MzpcXHRcXHQgICAgc2tiX3N0b3JlX2JpdHMoc2tiLCBvZmZzZXQsIHNyYywgcHJpdi1cXHUwMDNlbGVuKSBcXHUwMDNjIDApXFxuMTE4NDpcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTg1OlxcdFxcbjExODY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX1NDVFAgXFx1MDAyNlxcdTAwMjZcXG4xMTg3OlxcdFxcdCAgICBwa3QtXFx1MDAzZXRwcm90ID09IElQUFJPVE9fU0NUUCBcXHUwMDI2XFx1MDAyNlxcbjExODg6XFx0XFx0ICAgIHNrYi1cXHUwMDNlaXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpIHtcXG4xMTg5OlxcdFxcdFxcdGlmIChwa3QtXFx1MDAzZWZyYWdvZmYgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbjExOTA6XFx0XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fc2N0cChza2IsIG5mdF90aG9mZihwa3QpKSlcXG4xMTkxOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExOTI6XFx0XFx0fVxcbjExOTM6XFx0XFxuMTE5NDpcXHRcXHRyZXR1cm47XFxuMTE5NTpcXHRlcnI6XFxuMTE5NjpcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XFxuMTE5NzpcXHR9XFxuMTE5ODpcXHRcXG4xMTk5OlxcdHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4xMjAwOlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4xMjAxOlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdKVxcbjEyMDI6XFx0e1xcbjEyMDM6XFx0XFx0dTMyIGNzdW1fb2Zmc2V0LCBvZmZzZXQsIGNzdW1fdHlwZSA9IE5GVF9QQVlMT0FEX0NTVU1fTk9ORTtcXG4xMjA0OlxcdFxcdHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbjEyMDU6XFx0XFx0aW50IGVycjtcXG4xMjA2OlxcdFxcbjEyMDc6XFx0XFx0aWYgKGN0eC1cXHUwMDNlbmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpXFxuMTIwODpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjEyMDk6XFx0XFxuMTIxMDpcXHRcXHRwcml2LVxcdTAwM2ViYXNlICAgICAgICA9IG50b2hsKG5sYV9nZXRfYmUzMih0YltORlRBX1BBWUxPQURfQkFTRV0pKTtcXG4xMjExOlxcdFxcdHByaXYtXFx1MDAzZWxlbiAgICAgICAgID0gbnRvaGwobmxhX2dldF9iZTMyKHRiW05GVEFfUEFZTE9BRF9MRU5dKSk7XFxuMTIxMjpcXHRcXG4xMjEzOlxcdFxcdGVyciA9IG5mdF9wYXJzZV91MzJfY2hlY2sodGJbTkZUQV9QQVlMT0FEX09GRlNFVF0sIFUxNl9NQVgsIFxcdTAwMjZvZmZzZXQpO1xcbjEyMTQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjUwLjI3MTgxMjA2OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDg3Njk4OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXRmaWx0ZXIgUGF5bG9hZCBNYW5nbGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGhhcmRlbmluZyB0aGUgYG5mdGFibGVzYCBwYXlsb2FkIG1hbmlwdWxhdGlvbiBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMuIEluaXRpYWxseSwgdGhlIGNvZGUgaGFkIGEgdnVsbmVyYWJpbGl0eSB3aGVyZSBhbiBhcmJpdHJhcnkgYGNzdW1fb2Zmc2V0YCBjb3VsZCBiZSBwcm92aWRlZCwgbGVhZGluZyB0byBwb3RlbnRpYWwgY29ycnVwdGlvbiBvZiBoZWFkZXJzIG9yIHRoZSB3cml0aW5nL3VwZGF0aW5nIG9mIGNoZWNrc3VtcyBhdCBhcmJpdHJhcnkgb2Zmc2V0cyB3aXRoaW4gYSBwYWNrZXQsIHdoaWNoIGlzIGJhZCBuZXdzLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzOiBcIkRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG5ldyBzZWN1cml0eSBob2xlcywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVha3M/XCIgTGV0J3Mgc2VlLlxuXG5Fc3NlbnRpYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgdHdvIHZhbGlkYXRpb24gZnVuY3Rpb25zOiBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYC4gVGhlIGZvcm1lciBub3cgKmV4cGxpY2l0bHkqIGNoZWNrcyBpZiB0aGUgcHJvdmlkZWQgYGNzdW1fb2Zmc2V0YCBpcyBhICp2YWxpZCogb2Zmc2V0IGZvciB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtcyAoVENQLCBVRFAsIElDTVAsIElDTVB2NikuIFRoZSBsYXR0ZXIgZnVydGhlciB2YWxpZGF0ZXMgdGhhdCBpZiB0aGUgcGFja2V0IGFjdHVhbGx5ICppcyogb25lIG9mIHRoZXNlIHRyYW5zcG9ydCBwcm90b2NvbHMsIHRoYXQgdGhlIG9mZnNldCBtYXRjaGVzIHdoYXQncyBleHBlY3RlZCBmb3IgdGhhdCBwcm90b2NvbC5cblxuTm93LCBsZXQncyBldmFsdWF0ZSB0aGlzIGluIHRoZSBjb250ZXh0IG9mIEtNU0FOIHZzLiBLQVNBTi4gS01TQU4gaXMgbXkgcHJpbWFyeSB0YXJnZXQgZm9yIHRoaXMga2luZCBvZiByZXZpZXcgYXMgSSBhbSBsb29raW5nIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLlxuXG4xLiAgKipLZXJuZWwgU3RydWN0dXJlcyB0byBVc2Vyc3BhY2U/KiogTm9wZS4gTm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGFyZSBleGlzdGluZyBvbmVzIG1vZGlmaWVkIGluIGEgd2F5IHRoYXQgd291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGJlaW5nIGV4cG9zZWQuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYy9CcmFuY2hpbmcgb24gVW5pbml0aWFsaXplZCBWYXJpYWJsZXM/KiogVGhlIGNvZGUgY2hlY2tzIGBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0YCwgYHBrdC1cdTAwM2VmbGFnc2AsIGFuZCBgcGt0LVx1MDAzZXRwcm90YC4gYHByaXZgIGlzIHBvcHVsYXRlZCBkdXJpbmcgZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiB0aHJvdWdoIG5ldGxpbmsgYXR0cmlidXRlcyAoYW5kIHZhbGlkYXRlZCkuIGBwa3RgIGlzIGEgYG5mdF9wa3RpbmZvYCBzdHJ1Y3R1cmUgcG9wdWxhdGVkIGJ5IG5ldGZpbHRlciBwZXItcGFja2V0LiBOb25lIG9mIHRoZXNlIHNvdXJjZXMgYXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXMgd2l0aCBVbmluaXRpYWxpemVkIEZpZWxkcz8qKiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHN1YnNlcXVlbnQgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG40LiAgKipCb3VuZHMgQ2hlY2tzL1VuaW5pdGlhbGl6ZWQgQnl0ZXMgQWNjZXNzPyoqIFRoaXMgaXMgYWJvdXQgc3RyaWN0ZXIgKnZhbGlkYXRpb24qLCBub3QgbmV3IHdheXMgdG8gYWNjZXNzIG1lbW9yeS4gVGhlIHBhdGNoICpyZXN0cmljdHMqIHdoYXQgY2FuIGJlIHdyaXR0ZW4vdXBkYXRlZCBieSBlbnN1cmluZyBjaGVja3N1bSBvZmZzZXRzIGFyZSB2YWxpZC4gSXQncyB0aWdodGVuaW5nIHRoZSBleGlzdGluZyBjb2RlLCBub3QgbG9vc2VuaW5nIGl0LlxuXG5UaGVyZWZvcmUsIHRoaXMgaXMgYSBjbGVhciBoYXJkZW5pbmcgcGF0Y2ggYnkgcmVzdHJpY3RpbmcgYWNjZXNzLiBHaXZlbiB0aGF0LCB0aGUgc3RhbmRhcmQgS0FTQU4vc3l6a2FsbGVyIGZ1enppbmcgaXMgYWRlcXVhdGUgdG8gdGVzdCB0aGUgcGF0Y2guIEtNU0FOIGlzbid0IHJlbGV2YW50IGhlcmUuIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTMsIk91dHB1dFRva2VucyI6MjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDEwOjMwOjU3Ljc1OTUxNjYzM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdGlnaHRlbnMgdmFsaWRhdGlvbiBmb3IgdGhlIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gbmZ0YWJsZXMgcGF5bG9hZCBleHByZXNzaW9ucyAoYG5mdF9wYXlsb2FkLmNgKS4gSXQgYWRkcyBjb250cm9sLXBsYW5lIHZhbGlkYXRpb24gaW4gYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoKWAgYW5kIHJ1bnRpbWUgcGFja2V0IHZhbGlkYXRpb24gaW4gYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soKWAgdG8gZW5zdXJlIGNoZWNrc3VtIG1vZGlmaWNhdGlvbiB0YXJnZXRzIGxlZ2l0aW1hdGUgdHJhbnNwb3J0IGxheWVyIGhlYWRlcnMgKFRDUCwgVURQLCBVRFBMaXRlLCBJQ01QLCBJQ01QdjYpLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZSB2YXJpYWJsZXMgcmVhZCAoYHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0YCwgYHBrdC1cXHUwMDNlZmxhZ3NgLCBgcGt0LVxcdTAwM2V0cHJvdGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBuZnRhYmxlcyBleHByZXNzaW9uIHNldHVwIGFuZCBwYWNrZXQgcGFyc2luZyBsb2dpYy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdGlnaHRlbnMgdmFsaWRhdGlvbiBmb3IgdGhlIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gbmZ0YWJsZXMgcGF5bG9hZCBleHByZXNzaW9ucyAoYG5mdF9wYXlsb2FkLmNgKS4gSXQgYWRkcyBjb250cm9sLXBsYW5lIHZhbGlkYXRpb24gaW4gYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoKWAgYW5kIHJ1bnRpbWUgcGFja2V0IHZhbGlkYXRpb24gaW4gYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soKWAgdG8gZW5zdXJlIGNoZWNrc3VtIG1vZGlmaWNhdGlvbiB0YXJnZXRzIGxlZ2l0aW1hdGUgdHJhbnNwb3J0IGxheWVyIGhlYWRlcnMgKFRDUCwgVURQLCBVRFBMaXRlLCBJQ01QLCBJQ01QdjYpLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgc3RydWN0IGluaXRpYWxpemF0aW9uLCBhbHRlciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuIFRoZSB2YXJpYWJsZXMgcmVhZCAoYHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0YCwgYHBrdC1cXHUwMDNlZmxhZ3NgLCBgcGt0LVxcdTAwM2V0cHJvdGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBieSBuZnRhYmxlcyBleHByZXNzaW9uIHNldHVwIGFuZCBwYWNrZXQgcGFyc2luZyBsb2dpYy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow258tm[1] Phase: Succeeded StartedAt: 2026-09-06 10:31:09 +0000 UTC FinishedAt: 2026-09-06 10:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 10:31:09 +0000 UTC FinishedAt: 2026-09-06 10:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2] Phase: Succeeded StartedAt: 2026-09-06 10:31:09 +0000 UTC FinishedAt: 2026-09-06 14:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 10:31:09 +0000 UTC FinishedAt: 2026-09-06 14:19:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 10:31:09 +0000 UTC FinishedAt: 2026-09-06 10:31:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 10:31:09 +0000 UTC FinishedAt: 2026-09-06 10:31:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow258tm/series-workflow258tm-convert-artifact-1705636104/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 10:31:19 +0000 UTC FinishedAt: 2026-09-06 10:56:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 10:31:19 +0000 UTC FinishedAt: 2026-09-06 10:56:35 +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:*0f6d9a80-1fb4-42dd-8d8a-0208cb37e5d6,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-workflow258tm/series-workflow258tm-convert-artifact-1705636104/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": "e26a16aa-51e4-4040-b42c-e1f770fa30c5", "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-workflow258tm/series-workflow258tm-build-action-169069438/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 10:31:19 +0000 UTC FinishedAt: 2026-09-06 10:56:25 +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:*0f6d9a80-1fb4-42dd-8d8a-0208cb37e5d6,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-workflow258tm/series-workflow258tm-convert-artifact-1705636104/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": "e26a16aa-51e4-4040-b42c-e1f770fa30c5", "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-workflow258tm/series-workflow258tm-build-action-169069438/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 10:56:35 +0000 UTC FinishedAt: 2026-09-06 10:56:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 10:56:35 +0000 UTC FinishedAt: 2026-09-06 10:56:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 10:56:35 +0000 UTC FinishedAt: 2026-09-06 10:56:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 10:56:35 +0000 UTC FinishedAt: 2026-09-06 10:56:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow258tm/series-workflow258tm-convert-artifact-4257206255/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 10:56:46 +0000 UTC FinishedAt: 2026-09-06 10:58:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 10:56:46 +0000 UTC FinishedAt: 2026-09-06 10:58:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e26a16aa-51e4-4040-b42c-e1f770fa30c5,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-workflow258tm/series-workflow258tm-build-action-169069438/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-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 10:58:41 +0000 UTC FinishedAt: 2026-09-06 10:58:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 10:58:41 +0000 UTC FinishedAt: 2026-09-06 10:58:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 10:58:41 +0000 UTC FinishedAt: 2026-09-06 11:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 10:58:41 +0000 UTC FinishedAt: 2026-09-06 11:14: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:*0f6d9a80-1fb4-42dd-8d8a-0208cb37e5d6,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-workflow258tm/series-workflow258tm-convert-artifact-4257206255/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": "488f6c59-77f0-4157-a7ce-676ffd9571f0", "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-workflow258tm/series-workflow258tm-build-action-1256145795/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 10:58:41 +0000 UTC FinishedAt: 2026-09-06 11:14:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0f6d9a80-1fb4-42dd-8d8a-0208cb37e5d6,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-workflow258tm/series-workflow258tm-convert-artifact-4257206255/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": "488f6c59-77f0-4157-a7ce-676ffd9571f0", "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-workflow258tm/series-workflow258tm-build-action-1256145795/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 11:14:43 +0000 UTC FinishedAt: 2026-09-06 11:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 11:14:43 +0000 UTC FinishedAt: 2026-09-06 11:14:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 11:14:43 +0000 UTC FinishedAt: 2026-09-06 11:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 11:14:43 +0000 UTC FinishedAt: 2026-09-06 11:16:28 +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:*488f6c59-77f0-4157-a7ce-676ffd9571f0,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-workflow258tm/series-workflow258tm-build-action-1256145795/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-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 11:16:37 +0000 UTC FinishedAt: 2026-09-06 14:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 11:16:37 +0000 UTC FinishedAt: 2026-09-06 14:19:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"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:*e26a16aa-51e4-4040-b42c-e1f770fa30c5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*488f6c59-77f0-4157-a7ce-676ffd9571f0,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-workflow258tm/series-workflow258tm-build-action-169069438/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-workflow258tm/series-workflow258tm-build-action-1256145795/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 11:16:37 +0000 UTC FinishedAt: 2026-09-06 11:16:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 11:16:37 +0000 UTC FinishedAt: 2026-09-06 11:16:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"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-workflow258tm/series-workflow258tm-convert-artifact-4018912168/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 11:16:37 +0000 UTC FinishedAt: 2026-09-06 11:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 11:16:37 +0000 UTC FinishedAt: 2026-09-06 11:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 11:16:37 +0000 UTC FinishedAt: 2026-09-06 11:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 11:16:47 +0000 UTC FinishedAt: 2026-09-06 14:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow258tm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_validate_inet_csum_offset","nft_payload_csum_th_write_ok","nft_payload_csum_write_ok","nft_payload_set_init","nft_payload_set_eval"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"5efd3dcc-ea6c-4012-b864-cd405e47812f","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 11:16:47 +0000 UTC FinishedAt: 2026-09-06 14:19:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e26a16aa-51e4-4040-b42c-e1f770fa30c5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*488f6c59-77f0-4157-a7ce-676ffd9571f0,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-workflow258tm/series-workflow258tm-build-action-169069438/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-workflow258tm/series-workflow258tm-build-action-1256145795/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-workflow258tm/series-workflow258tm-convert-artifact-4018912168/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,}