Name: series-workflow5sl5q Phase: Succeeded StartedAt: 2026-08-29 00:00:52 +0000 UTC FinishedAt: 2026-08-29 03:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[0] Phase: Succeeded StartedAt: 2026-08-29 00:00:52 +0000 UTC FinishedAt: 2026-08-29 00:05:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 00:00:52 +0000 UTC FinishedAt: 2026-08-29 00:05:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "73e3f0710014fe6d4ed98cfc02292f6121db7558", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "73e3f0710014fe6d4ed98cfc02292f6121db7558", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "e6657522-64f9-4e1e-abf6-ed2d6b86a23e" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_mmu_page_fault", "x86_emulate_instruction", "kvm_emulate_instruction" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfcGFnZV9mYXVsdCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIHRvIHRyYWNrIHBlcm1pdHRlZCBhY2Nlc3MgdHlwZXMgKHJlYWQgdnMgd3JpdGUpIGZvciBjYWNoZWQgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzc2VzIChHUEEpIGR1cmluZyBwYWdlIGZhdWx0IGVtdWxhdGlvbiAocmVwbGFjaW5nIGBib29sIGdwYV9hdmFpbGFibGVgIHdpdGggYHU2NCBncGFfYWNjZXNzYCBpbiBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgKS5cblxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcGF0aHMuIGBjdHh0LVx1MDAzZWdwYV9hY2Nlc3NgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBpbiBgaW5pdF9lbXVsYXRlX2N0eHQoKWAgYW5kIHByb3Blcmx5IHNldCBpbiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKWAuIFRoZXJlIGFyZSBubyBuZXcgb3IgbW9kaWZpZWQga2VybmVsLXRvLXVzZXIgY29waWVzLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgYnVmZmVycy5cbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IFRoZSBtb2RpZmljYXRpb25zIHNvbGVseSBhZmZlY3QgaW50ZXJuYWwgcGVybWlzc2lvbiBjaGVja2luZyBhbmQgY29udHJvbCBmbG93IHdpdGhpbiBLVk0gTU1JTy9wYWdlIGZhdWx0IGVtdWxhdGlvbi4gU3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGtlcm5lbHMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBpZiBhbnkgYXJpc2UuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNlY3VyaXR5L3Blcm1pc3Npb24gY2hlY2tpbmcgaXNzdWUgaW4gS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gYnkgdHJhY2tpbmcgcGVybWl0dGVkIGVtdWxhdGVkIGFjY2Vzc2VzIChyZWFkIHZzIHdyaXRlKSBmb3IgY2FjaGVkIEdQQXMgcmF0aGVyIHRoYW4gcmV1c2luZyB0aGUgR1BBIHVuY29uZGl0aW9uYWxseS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGNvcmUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBvbiB4ODYsIHdoaWNoIGlzIGZ1bGx5IHRlc3RhYmxlIGFuZCBmdXp6YWJsZSB2aWEgS1ZNIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIzYTQ0Njk2NTBlMWEzODAyYzRlNTA1YmE2YWM2YTUxMTNjYTNmZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMDowNDoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaCBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5pbmRleCAzZTM3NWFmMTVjMDM1Li4xMDg4NmJlYTgyYzkxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5AQCAtMzU0LDggJiM0MzszNTQsOCBAQCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCB7XG4gXHRib29sIGhhdmVfZXhjZXB0aW9uO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZXhjZXB0aW9uO1xuIFxuLVx0LyogR1BBIGF2YWlsYWJsZSAqL1xuLVx0Ym9vbCBncGFfYXZhaWxhYmxlO1xuJiM0MztcdC8qIFNhdmVkIEdQQSBhbmQgcGVybWl0dGVkIGVtdWxhdGVkIGFjY2Vzc2VzLiAqL1xuJiM0MztcdHU2NCBncGFfYWNjZXNzO1xuIFx0Z3BhX3QgZ3BhX3ZhbDtcbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjk1YjllYWM5OTYyYTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNjYzMiw2ICYjNDM7NjYzMiw5IEBAIGludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyXG4gXHRcdHJldHVybiByO1xuIFxuIGVtdWxhdGU6XG4mIzQzO1x0aWYgKGRpcmVjdCBcdTAwMjZcdTAwMjYgKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1dSSVRFX01BU0spKVxuJiM0MztcdFx0ZW11bGF0aW9uX3R5cGUgfD0gRU1VTFRZUEVfUEZfV1JJVEU7XG4mIzQzO1xuIFx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIGNyMl9vcl9ncGEsIGVtdWxhdGlvbl90eXBlLCBpbnNuLFxuIFx0XHRcdFx0ICAgICAgIGluc25fbGVuKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCA3OTQ2OGRkZmU0NzM2Li5hYTVkZWI3YzczYWEyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC01MDg4LDggJiM0Mzs1MDg4LDEzIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxuIFx0ICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmdcbiBcdCAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRlxuIFx0ICogb2NjdXJyZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZ3Vlc3QgbWF5IGhhdmUgY2hhbmdlZCB0aGUgaW5zdHJ1Y3Rpb24gc2luY2UgdGhlIGZhdWx0LiAgUmV1c2VcbiYjNDM7XHQgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIHdyaXRlIGFjY2VzcztcbiYjNDM7XHQgKiBvdGhlcndpc2UsIHJlY2hlY2sgcGVybWlzc2lvbnMgZm9yIHRoZSBkZWNvZGVkIGFjY2Vzcy5cbiBcdCAqL1xuLVx0aWYgKGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSBcdTAwMjZcdTAwMjYgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKChjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgXHUwMDI2ICh3cml0ZSA/IEFDQ19XUklURV9NQVNLIDogQUNDX1JFQURfTUFTSykpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoYWRkciBcdTAwMjYgflBBR0VfTUFTSykgPT0gKGN0eHQtXHUwMDNlZ3BhX3ZhbCBcdTAwMjYgflBBR0VfTUFTSykpIHtcbiBcdFx0Z3BhID0gY3R4dC1cdTAwM2VncGFfdmFsO1xuIFx0XHRyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpO1xuQEAgLTU5MzgsNyAmIzQzOzU5NDMsNyBAQCBzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgXHUwMDI2Y3NfZGIsIFx1MDAyNmNzX2wpO1xuIFxuLVx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gZmFsc2U7XG4mIzQzO1x0Y3R4dC1cdTAwM2VncGFfYWNjZXNzID0gMDtcbiBcdGN0eHQtXHUwMDNlZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7XG4gXHRjdHh0LVx1MDAzZXRmID0gKGN0eHQtXHUwMDNlZWZsYWdzIFx1MDAyNiBYODZfRUZMQUdTX1RGKSAhPSAwO1xuIFxuQEAgLTY0NTQsNyAmIzQzOzY0NTksMTAgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbiBcbiBcdFx0LyogV2l0aCBzaGFkb3cgcGFnZSB0YWJsZXMsIGNyMiBjb250YWlucyBhIEdWQSBvciBuR1BBLiAqL1xuIFx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLm1tdS1cdTAwM2Vyb290X3JvbGUuZGlyZWN0KSB7XG4tXHRcdFx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gdHJ1ZTtcbiYjNDM7XHRcdFx0LyogQSB3cml0ZSBmYXVsdCBjYW4gcmVxdWlyZSBhIHJlYWQgZm9yIFJNVyBlbXVsYXRpb24uICovXG4mIzQzO1x0XHRcdGN0eHQtXHUwMDNlZ3BhX2FjY2VzcyA9IEFDQ19SRUFEX01BU0s7XG4mIzQzO1x0XHRcdGlmIChlbXVsYXRpb25fdHlwZSBcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEUpXG4mIzQzO1x0XHRcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzIHw9IEFDQ19XUklURV9NQVNLO1xuIFx0XHRcdGN0eHQtXHUwMDNlZ3BhX3ZhbCA9IGNyMl9vcl9ncGE7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5pbmRleCAwZjU5MTliMDkyZTQ3Li42Njc0NjU2ODBjY2RmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmhcbkBAIC00MDcsNiAmIzQzOzQwNyw4IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4gICogRU1VTFRZUEVfUEYgLSBTZXQgd2hlbiBhbiBpbnRlcmNlcHRlZCAjUEYgdHJpZ2dlcnMgdGhlIGVtdWxhdGlvbiwgaW4gd2hpY2ggY2FzZVxuICAqXHRcdCB0aGUgQ1IyL0dQQSB2YWx1ZSBwYXNzIG9uIHRoZSBzdGFjayBpcyB2YWxpZC5cbiAgKlxuJiM0MzsgKiBFTVVMVFlQRV9QRl9XUklURSAtIFNldCB3aXRoIEVNVUxUWVBFX1BGIHdoZW4gaGFyZHdhcmUgcmVwb3J0cyBhIHdyaXRlIGFjY2Vzcy5cbiYjNDM7ICpcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XG4gICpcdFx0XHRcdCBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmdcbiAgKlx0XHRcdFx0IGFuIGluc3RydWN0aW9uIChhZnRlciBjb21wbGV0aW5nIHVzZXJzcGFjZSBJL08pLlxuQEAgLTQ0NSw2ICYjNDM7NDQ3LDcgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbiAjZGVmaW5lIEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCAoMSBcdTAwM2NcdTAwM2MgNylcbiAjZGVmaW5lIEVNVUxUWVBFX1dSSVRFX1BGX1RPX1NQXHQgICAgKDEgXHUwMDNjXHUwMDNjIDgpXG4gI2RlZmluZSBFTVVMVFlQRV9TS0lQX1NPRlRfSU5UXHQgICAgKDEgXHUwMDNjXHUwMDNjIDkpXG4mIzQzOyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEVcdCAgICAoMSBcdTAwM2NcdTAwM2MgMTApXG4gXG4gI2RlZmluZSBFTVVMVFlQRV9TRVRfU09GVF9JTlRfVkVDVE9SKHYpXHQoKHUzMikoKHYpIFx1MDAyNiAweGZmKSBcdTAwM2NcdTAwM2MgMTYpXG4gI2RlZmluZSBFTVVMVFlQRV9HRVRfU09GVF9JTlRfVkVDVE9SKGUpXHQoKChlKSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfcGFnZV9mYXVsdCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNlY3VyaXR5L3Blcm1pc3Npb24gY2hlY2tpbmcgaXNzdWUgaW4gS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gYnkgdHJhY2tpbmcgcGVybWl0dGVkIGVtdWxhdGVkIGFjY2Vzc2VzIChyZWFkIHZzIHdyaXRlKSBmb3IgY2FjaGVkIEdQQXMgcmF0aGVyIHRoYW4gcmV1c2luZyB0aGUgR1BBIHVuY29uZGl0aW9uYWxseS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGNvcmUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBvbiB4ODYsIHdoaWNoIGlzIGZ1bGx5IHRlc3RhYmxlIGFuZCBmdXp6YWJsZSB2aWEgS1ZNIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIzYTQ0Njk2NTBlMWEzODAyYzRlNTA1YmE2YWM2YTUxMTNjYTNmZTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAwMDowNDoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgKaW5kZXggM2UzNzVhZjE1YzAzNS4uMTA4ODZiZWE4MmM5MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgKQEAgLTM1NCw4ICYjNDM7MzU0LDggQEAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgewogCWJvb2wgaGF2ZV9leGNlcHRpb247CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZXhjZXB0aW9uOwogCi0JLyogR1BBIGF2YWlsYWJsZSAqLwotCWJvb2wgZ3BhX2F2YWlsYWJsZTsKJiM0MzsJLyogU2F2ZWQgR1BBIGFuZCBwZXJtaXR0ZWQgZW11bGF0ZWQgYWNjZXNzZXMuICovCiYjNDM7CXU2NCBncGFfYWNjZXNzOwogCWdwYV90IGdwYV92YWw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggMDY0ZWNjMzNiOTI2Ny4uOTViOWVhYzk5NjJhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC02NjMyLDYgJiM0Mzs2NjMyLDkgQEAgaW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnIKIAkJcmV0dXJuIHI7CiAKIGVtdWxhdGU6CiYjNDM7CWlmIChkaXJlY3QgJmFtcDsmYW1wOyAoZXJyb3JfY29kZSAmYW1wOyBQRkVSUl9XUklURV9NQVNLKSkKJiM0MzsJCWVtdWxhdGlvbl90eXBlIHw9IEVNVUxUWVBFX1BGX1dSSVRFOwomIzQzOwogCXJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbiwKIAkJCQkgICAgICAgaW5zbl9sZW4pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDc5NDY4ZGRmZTQ3MzYuLmFhNWRlYjdjNzNhYTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTUwODgsOCAmIzQzOzUwODgsMTMgQEAgc3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsCiAJICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmcKIAkgKiBvcGVyYXRpb24gdXNpbmcgcmVwIHdpbGwgb25seSBoYXZlIHRoZSBpbml0aWFsIEdQQSBmcm9tIHRoZSBOUEYKIAkgKiBvY2N1cnJlZC4KJiM0MzsJICoKJiM0MzsJICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlCiYjNDM7CSAqIHRoZSBHUEEgZm9yIHdyaXRlcyBvbmx5IGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgd3JpdGUgYWNjZXNzOwomIzQzOwkgKiBvdGhlcndpc2UsIHJlY2hlY2sgcGVybWlzc2lvbnMgZm9yIHRoZSBkZWNvZGVkIGFjY2Vzcy4KIAkgKi8KLQlpZiAoY3R4dC0mZ3Q7Z3BhX2F2YWlsYWJsZSAmYW1wOyZhbXA7IGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpICZhbXA7JmFtcDsKJiM0MzsJaWYgKChjdHh0LSZndDtncGFfYWNjZXNzICZhbXA7ICh3cml0ZSA/IEFDQ19XUklURV9NQVNLIDogQUNDX1JFQURfTUFTSykpICZhbXA7JmFtcDsKJiM0MzsJICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpICZhbXA7JmFtcDsKIAkgICAgKGFkZHIgJmFtcDsgflBBR0VfTUFTSykgPT0gKGN0eHQtJmd0O2dwYV92YWwgJmFtcDsgflBBR0VfTUFTSykpIHsKIAkJZ3BhID0gY3R4dC0mZ3Q7Z3BhX3ZhbDsKIAkJcmV0ID0gdmNwdV9pc19tbWlvX2dwYSh2Y3B1LCBhZGRyLCBncGEsIHdyaXRlKTsKQEAgLTU5MzgsNyAmIzQzOzU5NDMsNyBAQCBzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgJmFtcDtjc19kYiwgJmFtcDtjc19sKTsKIAotCWN0eHQtJmd0O2dwYV9hdmFpbGFibGUgPSBmYWxzZTsKJiM0MzsJY3R4dC0mZ3Q7Z3BhX2FjY2VzcyA9IDA7CiAJY3R4dC0mZ3Q7ZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7CiAJY3R4dC0mZ3Q7dGYgPSAoY3R4dC0mZ3Q7ZWZsYWdzICZhbXA7IFg4Nl9FRkxBR1NfVEYpICE9IDA7CiAKQEAgLTY0NTQsNyAmIzQzOzY0NTksMTAgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwKIAogCQkvKiBXaXRoIHNoYWRvdyBwYWdlIHRhYmxlcywgY3IyIGNvbnRhaW5zIGEgR1ZBIG9yIG5HUEEuICovCiAJCWlmICh2Y3B1LSZndDthcmNoLm1tdS0mZ3Q7cm9vdF9yb2xlLmRpcmVjdCkgewotCQkJY3R4dC0mZ3Q7Z3BhX2F2YWlsYWJsZSA9IHRydWU7CiYjNDM7CQkJLyogQSB3cml0ZSBmYXVsdCBjYW4gcmVxdWlyZSBhIHJlYWQgZm9yIFJNVyBlbXVsYXRpb24uICovCiYjNDM7CQkJY3R4dC0mZ3Q7Z3BhX2FjY2VzcyA9IEFDQ19SRUFEX01BU0s7CiYjNDM7CQkJaWYgKGVtdWxhdGlvbl90eXBlICZhbXA7IEVNVUxUWVBFX1BGX1dSSVRFKQomIzQzOwkJCQljdHh0LSZndDtncGFfYWNjZXNzIHw9IEFDQ19XUklURV9NQVNLOwogCQkJY3R4dC0mZ3Q7Z3BhX3ZhbCA9IGNyMl9vcl9ncGE7CiAJCX0KIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oCmluZGV4IDBmNTkxOWIwOTJlNDcuLjY2NzQ2NTY4MGNjZGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmgKQEAgLTQwNyw2ICYjNDM7NDA3LDggQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwKICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2UKICAqCQkgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuCiAgKgomIzQzOyAqIEVNVUxUWVBFX1BGX1dSSVRFIC0gU2V0IHdpdGggRU1VTFRZUEVfUEYgd2hlbiBoYXJkd2FyZSByZXBvcnRzIGEgd3JpdGUgYWNjZXNzLgomIzQzOyAqCiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5CiAgKgkJCQkgc3RhdGUgYW5kIGluamVjdCBzaW5nbGUtc3RlcCAjREJzIGFmdGVyIHNraXBwaW5nCiAgKgkJCQkgYW4gaW5zdHJ1Y3Rpb24gKGFmdGVyIGNvbXBsZXRpbmcgdXNlcnNwYWNlIEkvTykuCkBAIC00NDUsNiAmIzQzOzQ0Nyw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsCiAjZGVmaW5lIEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCAoMSAmbHQ7Jmx0OyA3KQogI2RlZmluZSBFTVVMVFlQRV9XUklURV9QRl9UT19TUAkgICAgKDEgJmx0OyZsdDsgOCkKICNkZWZpbmUgRU1VTFRZUEVfU0tJUF9TT0ZUX0lOVAkgICAgKDEgJmx0OyZsdDsgOSkKJiM0MzsjZGVmaW5lIEVNVUxUWVBFX1BGX1dSSVRFCSAgICAoMSAmbHQ7Jmx0OyAxMCkKIAogI2RlZmluZSBFTVVMVFlQRV9TRVRfU09GVF9JTlRfVkVDVE9SKHYpCSgodTMyKSgodikgJmFtcDsgMHhmZikgJmx0OyZsdDsgMTYpCiAjZGVmaW5lIEVNVUxUWVBFX0dFVF9TT0ZUX0lOVF9WRUNUT1IoZSkJKCgoZSkgJmd0OyZndDsgMTYpICZhbXA7IDB4ZmYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0geDg2IFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdG91Y2hpbmcgS1ZNJiMzOTtzIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gYW5kIHRoZSBNTVUgY29kZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGZhaXJseSBmb2N1c2VkLCBidXQgd2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcy4KClRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGBncGFfYXZhaWxhYmxlYCBmbGFnIGluIHRoZSBgeDg2X2VtdWxhdGVfY3R4dGAgc3RydWN0dXJlLiBJdCYjMzk7cyBiZWVuIHJlcGxhY2VkIHdpdGggYGdwYV9hY2Nlc3NgLCB3aGljaCBpcyBub3cgYSBgdTY0YC4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgdGhhdCB0aGUgYWNjZXNzIGNvbnRyb2wgaXMgYmVjb21pbmcgbW9yZSBncmFudWxhci4gTXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmaWVsZCB0ZWxscyBtZSB0aGF0IGl0IGlzIGxpa2VseSB0byBiZSBhIGNvbWJpbmF0aW9uIG9mIHJlYWQgYW5kIHdyaXRlIGJpdHMuIAoKVGhlIGNoYW5nZXMgaW4gYGt2bV9tbXVfcGFnZV9mYXVsdCgpYCBzZXR0aW5nIGBFTVVMVFlQRV9QRl9XUklURWAgYmFzZWQgb24gdGhlIGZhdWx0IHR5cGUgKGBQRkVSUl9XUklURV9NQVNLYCkgbG9vayBleHBlY3RlZC4gVGhhdCBzdWdnZXN0cyBhbiBhdHRlbXB0IHRvIHRyYWNrIHdyaXRlIGFjY2VzcyBkdXJpbmcgZW11bGF0aW9uLgoKYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSgpYCBub3cgdXNlcyB0aGUgbmV3IGBncGFfYWNjZXNzYCBmaWVsZCBhbmQgY2hlY2tzIGZvciBgQUNDX1dSSVRFX01BU0tgIGFuZCBgQUNDX1JFQURfTUFTS2AuIFRoYXQgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBgZ3BhX2FjY2Vzc2AgZmllbGQsIEkgYXNzdW1lIHRoZSBiaXRtYXNrIG9wZXJhdGlvbnMgYXJlIHRoZSBrZXkgaGVyZS4gVGhlIGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGUgb2YgYGdwYV9hY2Nlc3NgIGluIHRoZSBvdGhlciBmdW5jdGlvbnMsIHN1Y2ggYXMgYGluaXRfZW11bGF0ZV9jdHh0KClgIGFuZCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKWAsIHNob3cgaG93IHRoZSBhY2Nlc3MgZmxhZ3MgYXJlIGJlaW5nIG1hbmFnZWQgZHVyaW5nIHRoZSBlbXVsYXRpb24gcHJvY2Vzcy4KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciwgdGhvdWdoLiBUaGUgZGVmaW5pdGlvbnMgYW5kIHVzYWdlIG9mIGBBQ0NfUkVBRF9NQVNLYCBhbmQgYEFDQ19XUklURV9NQVNLYCBhcmUgdGhlIGtleSBoZXJlLiBBbHNvLCB3aGF0IGV4YWN0bHkgaXMgYEVNVUxUWVBFX1BGX1dSSVRFYD8gV2hhdCBhcmUgYWxsIHRoZSBwb3RlbnRpYWwgdmFsdWVzIG9mIGBlbXVsYXRpb25fdHlwZWA/IEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBvcGVyYXRpb25zIGhhdmUgd3JpdGUgYWNjZXNzIGFuZCB3aGljaCBoYXZlIHJlYWQgYWNjZXNzIHRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGdyZXBwZXIgdGhpcyBhbmQgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYXMgdXN1YWwsIHRvIHNlZSBob3cgdGhlc2UgbmV3IGFjY2VzcyBmbGFncyBhcmUgYmVpbmcgdXNlZCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBlbXVsYXRpb24gc3RyYXRlZ3kuIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlncy9mb2N1cyBzeW1ib2xzLiBJIGJldCB0aGVyZSBpcyBtb3JlIHRoYW4ganVzdCB0aGlzIHNtYWxsIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X3BhZ2VfZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oPTE0Nj12b2lkIGt2bV9pbml0X3NoYWRvd19lcHRfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBleGVjb25seSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQ5LVxuYXJjaC94ODYva3ZtL21tdS5oOjE1MDppbnQga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTUxLVx0XHQgICAgICAgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ4OTA9aW50IGt2bV9oYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlcnJvcl9jb2RlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDkxOC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDkxOTpcdFx0ciA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBmYXVsdF9hZGRyZXNzLCBlcnJvcl9jb2RlLCBpbnNuLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTIwLVx0XHRcdFx0aW5zbl9sZW4pO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjQ3ND1zdGF0aWMgaW50IGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTY2LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NTY3OmludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU2OC1cdFx0ICAgICAgIHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2NDAtfVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjQxOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fbW11X3BhZ2VfZmF1bHQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjQyLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk3ND1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAyNC1cdHRyYWNlX2t2bV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIwMjU6XHRyYyA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjYtXHRcdFx0XHRjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0RFQ09ERUFTU0lTVFMpID9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTgzPXN0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTE1LVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDoxMTY6XHRyZXR1cm4ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgTlVMTCwgMCk7XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTExNy19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MDA1PXN0YXRpYyBpbnQgaGFuZGxlX2VwdF9taXNjb25maWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjAyMi1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjAyMzpcdHJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBQRkVSUl9SU1ZEX01BU0ssIE5VTEwsIDApO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDI0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDgzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIEVtdWxhdGlvbiBFbmdpbmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBlbXVsYXRpb24gZW5naW5lIGlzIHdvcmtpbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCDigJMgdGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBleGVjdXRpb24gcHJvY2VzcywgdGhlIG1haW4gZGlzcGF0Y2ggcG9pbnQuIEkgd2FudCB0byBzZWUgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGluc3RydWN0aW9uIHR5cGVzLCBvcGVyYW5kIGZldGNoaW5nLCBhbmQgdWx0aW1hdGVseSwgdGhlIGVtdWxhdGlvbiBpdHNlbGYuCgpUaGVuLCBzaW5jZSB0aGlzIGlzIGFuIGVtdWxhdG9yLCBJIGhhdmUgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkuIFRoYXQgbGVhZHMgbWUgZGlyZWN0bHkgdG8gYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZWAuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGNydWNpYWwgYXNwZWN0IG9mIHRyYW5zbGF0aW5nIHRoZSBlbXVsYXRlZCBlbnZpcm9ubWVudCYjMzk7cyBtZW1vcnkgYWNjZXNzZXMgdG8gdGhlIGhvc3QgbWFjaGluZSwgbWFraW5nIHN1cmUgcmVhZHMgYW5kIHdyaXRlcyBhcmUgY29ycmVjdGx5IGhhbmRsZWQuIFVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBpcyBtYW5hZ2VkIGluIHRoaXMgY29udGV4dCBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZW11bGF0b3ImIzM5O3MgbGltaXRhdGlvbnMuIEkgd2lsbCBhbmFseXplIGhvdyBhZGRyZXNzZXMgYXJlIHRyYW5zbGF0ZWQgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHBhZ2UgYm91bmRhcmllcywgYW5kIHZpcnR1YWwtdG8tcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbi4gVGhvc2UgYXJlIG15IGluaXRpYWwgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY1Njc9aW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJvcl9jb2RlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjYzNy1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjYzODpcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjYzOS1cdFx0XHRcdCAgICAgICBpbnNuX2xlbik7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTUxNTM9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01MjI2LVx0ICogYWZ0ZXIgY29tcGxldGluZyBlbXVsYXRpb24gKHNlZSB0aGUgY2hlY2sgb24gdmNwdS1cdTAwM2VtbWlvX25lZWRlZCBpblxuYXJjaC94ODYva3ZtL3g4Ni5jOjUyMjc6XHQgKiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbigpKS5cbmFyY2gveDg2L2t2bS94ODYuYy01MjI4LVx0ICovXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTYzMzM9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKHg4Nl9kZWNvZGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTYzMzQtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjMzNTppbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTYzMzYtXHRcdFx0ICAgIGludCBlbXVsYXRpb25fdHlwZSwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02NTU4PWludCBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsYXRpb25fdHlwZSlcbmFyY2gveDg2L2t2bS94ODYuYy02NTU5LXtcbmFyY2gveDg2L2t2bS94ODYuYzo2NTYwOlx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIGVtdWxhdGlvbl90eXBlLCBOVUxMLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYy02NTYxLX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjU2ND1pbnQga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25fZnJvbV9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NTY2LXtcbmFyY2gveDg2L2t2bS94ODYuYzo2NTY3Olx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIDAsIGluc24sIGluc25fbGVuKTtcbmFyY2gveDg2L2t2bS94ODYuYy02NTY4LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzcxPWludCB4ODZfZGVjb2RlX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxhdGlvbl90eXBlLFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM3Mi1cdFx0XHRcdCAgICB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pO1xuYXJjaC94ODYva3ZtL3g4Ni5oOjM3MzppbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM3NC1cdFx0XHQgICAgaW50IGVtdWxhdGlvbl90eXBlLCB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBLY29uZmlnIERlcGVuZGVuY2llcyBmb3IgS1ZNIHg4NioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzIEtWTSB4ODYgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIG9wdGlvbnMgYXJlIHByZXNlbnQgYW5kIHByb3Blcmx5IHNldCBmb3IgdGhlIGludGVuZGVkIHNldHVwLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGVuYWJsaW5nIEtWTTsgaXQmIzM5O3MgYWJvdXQgdGhlIGVudGlyZSBkZXBlbmRlbmN5IGNoYWluIHRoYXQgc3VwcG9ydHMgaXRzIGZ1bmN0aW9uYWxpdHkgb24geDg2IGFyY2hpdGVjdHVyZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4gU28sIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSB4ODYtc3BlY2lmaWMgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIHJlc2lkZS4gSSYjMzk7bGwgbmVlZCB0byBwb3JlIG92ZXIgdGhhdCBmaWxlIG1ldGljdWxvdXNseS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBLVk0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRzb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuICAgNzpcdFxuICAgODpcdG1lbnVjb25maWcgVklSVFVBTElaQVRJT05cbiAgIDk6XHRcdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbiAgMTA6XHRcdGRlZmF1bHQgeVxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1biBvdGhlclxuICAxMzpcdFx0ICBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cbiAgMTQ6XHRcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cbiAgMTc6XHRcbiAgMTg6XHRpZiBWSVJUVUFMSVpBVElPTlxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBLVk1fWDg2XG4gIDIxOlx0XHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4gIDIyOlx0XHRzZWxlY3QgS1ZNX0NPTU1PTlxuICAyMzpcdFx0c2VsZWN0IEtWTV9FTElERV9UTEJfRkxVU0hfSUZfWU9VTkdcbiAgMjQ6XHRcdHNlbGVjdCBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXG4gIDI1Olx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxuICAyNjpcdFx0c2VsZWN0IEhBVkVfS1ZNX1BGTkNBQ0hFXG4gIDI3Olx0XHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19UU09cbiAgMjg6XHRcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX0FDUV9SRUxcbiAgMjk6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXG4gIDMwOlx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRX1JPVVRJTkdcbiAgMzE6XHRcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiAgMzI6XHRcdHNlbGVjdCBWSE9TVF9UQVNLXG4gIDMzOlx0XHRzZWxlY3QgS1ZNX0FTWU5DX1BGXG4gIDM0Olx0XHRzZWxlY3QgVVNFUl9SRVRVUk5fTk9USUZJRVJcbiAgMzU6XHRcdHNlbGVjdCBLVk1fTU1JT1xuICAzNjpcdFx0c2VsZWN0IFNDSEVEX0lORk9cbiAgMzc6XHRcdHNlbGVjdCBQRVJGX0VWRU5UU1xuICAzODpcdFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTXG4gIDM5Olx0XHRzZWxlY3QgUEVSRl9HVUVTVF9NRURJQVRFRF9QTVVcbiAgNDA6XHRcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiAgNDE6XHRcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4gIDQyOlx0XHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxuICA0MzpcdFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gIDQ0Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gIDQ1Olx0XHRzZWxlY3QgS1ZNX1ZGSU9cbiAgNDY6XHRcdHNlbGVjdCBIQVZFX0tWTV9QTV9OT1RJRklFUiBpZiBQTVxuICA0NzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4gIDQ4Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuICA0OTpcdFx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG4gIDUwOlx0XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuICA1MTpcdFxuICA1MjpcdGNvbmZpZyBLVk1cbiAgNTM6XHRcdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuICA1NDpcdFx0ZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQ1xuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBTdXBwb3J0IGhvc3RpbmcgZnVsbHkgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgaGFyZHdhcmVcbiAgNTc6XHRcdCAgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gIFlvdSB3aWxsIG5lZWQgYSBmYWlybHkgcmVjZW50XG4gIDU4Olx0XHQgIHByb2Nlc3NvciBlcXVpcHBlZCB3aXRoIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuIFlvdSB3aWxsIGFsc29cbiAgNTk6XHRcdCAgbmVlZCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb2YgdGhlIHByb2Nlc3NvciBtb2R1bGVzIGJlbG93LlxuICA2MDpcdFxuICA2MTpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXG4gIDYyOlx0XHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxuICA2MzpcdFxuICA2NDpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNjU6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLlxuICA2NjpcdFxuICA2NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBLVk1fV0VSUk9SXG4gIDcwOlx0XHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuICA3MTpcdFx0IyBEaXNhbGxvdyBLVk0mIzM5O3MgLVdlcnJvciBpZiBLQVNBTiBpcyBlbmFibGVkLCBlLmcuIHRvIGd1YXJkIGFnYWluc3RcbiAgNzI6XHRcdCMgcmFuZG9taXplZCBjb25maWdzIGZyb20gc2VsZWN0aW5nIEtWTV9XRVJST1I9eSwgd2hpY2ggZG9lc24mIzM5O3QgcGxheVxuICA3MzpcdFx0IyBuaWNlIHdpdGggS0FTQU4uICBLQVNBTiBidWlsZHMgZ2VuZXJhdGVzIHdhcm5pbmdzIGZvciB0aGUgZGVmYXVsdFxuICA3NDpcdFx0IyBGUkFNRV9XQVJOLCBpLmUuIEtWTV9XRVJST1I9eSB3aXRoIEtBU0FOPXkgcmVxdWlyZXMgc3BlY2lhbCB0dW5pbmcuXG4gIDc1Olx0XHQjIEJ1aWxkaW5nIEtWTSB3aXRoIC1XZXJyb3IgYW5kIEtBU0FOIGlzIHN0aWxsIGRvYWJsZSB2aWEgZW5hYmxpbmdcbiAgNzY6XHRcdCMgdGhlIGtlcm5lbC13aWRlIFdFUlJPUj15LlxuICA3NzpcdFx0ZGVwZW5kcyBvbiBLVk1fWDg2IFx1MDAyNlx1MDAyNiAoKEVYUEVSVCBcdTAwMjZcdTAwMjYgIUtBU0FOKSB8fCBXRVJST1IpXG4gIDc4Olx0XHRoZWxwXG4gIDc5Olx0XHQgIEFkZCAtV2Vycm9yIHRvIHRoZSBidWlsZCBmbGFncyBmb3IgS1ZNLlxuICA4MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGZyb20gYGFyY2gveDg2L2t2bS9LY29uZmlnYDoKCioqUmV2aWV3aW5nIEtjb25maWc6IExpbmVzIDgwLTEyMCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRob3NlIGxpbmVzIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSA4MCB0aHJvdWdoIDEyMC4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aCwgSSBleHBlY3Qgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8geDg2IGFyY2hpdGVjdHVyZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhpcyBmb3IgZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQsIG9mIGNvdXJzZSwgYW55IG5ldyBmZWF0dXJlcyBvciBjYXBhYmlsaXRpZXMgYmVpbmcgaW50cm9kdWNlZC4KClJpZ2h0IG9mZiB0aGUgYmF0LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBtYWluIEtWTSBmZWF0dXJlIGVuYWJsZSBvcHRpb25zLCB0aGUgY29yZSBgQ09ORklHX0tWTWAgYW5kIHdoYXQgaXQgZGVwZW5kcyBvbi4gQW55dGhpbmcgc3BlY2lmaWMgdG8gdGhlIHg4NiBhcmNoaXRlY3R1cmUgc2hvdWxkIGJlIGRlZmluZWQgbmVhciBpdCwgb3IgZGVwZW5kZW50IG9uIGl0LiBUaGUgc3RydWN0dXJlIGlzIHVzdWFsbHkgcHJldHR5IGNsZWFyOiBib29sIG9wdGlvbnMgZm9yIGNvcmUgZnVuY3Rpb25hbGl0eSwgdHJpc3RhdGUgb3B0aW9ucyBmb3IgcG90ZW50aWFsbHkgbW9kdWxhciBjb21wb25lbnRzLCBhbmQgaGVscCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHdoYXQgZWFjaCBvcHRpb24gYWN0dWFsbHkgKmRvZXMqLiBJIGV4cGVjdCBzb21lIG5lc3RlZCAmIzM5O2lmJiMzOTsgc3RhdGVtZW50cyB0byBkZWZpbmUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKGxpa2UgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucykuIEkmIzM5O2xsIGJlIGNoZWNraW5nIHRvIHNlZSB3aGF0IHRoZXkgYXJlLgoKSSBhbHNvIGFudGljaXBhdGUgbG9va2luZyBmb3IgYW55dGhpbmcgYXJvdW5kIHNwZWNpZmljIGhhcmR3YXJlIGV4dGVuc2lvbnMsIGxpa2UgSW50ZWwmIzM5O3MgVlQteCBvciBBTUQtVi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgaGVyZSwgb3IgbWF5YmUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgcGFnZSB0YWJsZXMgKEVQVCk/IEFyZSB0aGVyZSBhbnkgbmV3IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgZGVmaW5lZD8gU2VjdXJpdHkgaW1wbGljYXRpb25zIHdpbGwgYmUgbmVhciB0aGUgdG9wIG9mIG15IGxpc3QsIGVzcGVjaWFsbHkgYW55dGhpbmcgcmVsYXRlZCB0byBtaXRpZ2F0aW9ucyBmb3IgdnVsbmVyYWJpbGl0aWVzIGxpa2UgU3BlY3RyZSBvciBNZWx0ZG93biwgaW4gdGhlIEtWTSBjb250ZXh0LiBUaGUgcmVjZW50IHdvcmsgb24gaGFyZHdhcmUgbWl0aWdhdGlvbnMgcHJvYmFibHkgaGFzIGEgaGFuZCBpbiB0aGlzIGFyZWEuCgpBcyBJIHJlYWQsIEkmIzM5O2xsIGJlIGFzc2Vzc2luZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGVzZSBvcHRpb25zIG9uIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIGNvbXBhdGliaWxpdHkuIEkmIzM5O2xsIGJlIG5vdGluZyBhbnkgY2hhbmdlcyB0aGF0IG1pZ2h0IHJlcXVpcmUgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGR1cmluZyBhIGtlcm5lbCB1cGdyYWRlIG9yIHdoZW4gY29uZmlndXJpbmcgYSBuZXcgS1ZNIGVudmlyb25tZW50LiBXaGF0IEkmIzM5O20gaG9waW5nIHRvIHNlZSBpcyBjbGFyaXR5OiB3ZWxsLWRvY3VtZW50ZWQgb3B0aW9ucyB3aXRoIGNsZWFyIGRlcGVuZGVuY2llcyBhbmQgYSBsb2dpY2FsIHN0cnVjdHVyZS4gQSBjbGVhbiBgS2NvbmZpZ2AgbWFrZXMgZm9yIGVhc2llciBtYWludGVuYW5jZSBhbmQgbW9yZSByb2J1c3QgY29uZmlndXJhdGlvbnMgZG93biB0aGUgbGluZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgxOlx0XHQgIElmIGluIGRvdWJ0LCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAgODI6XHRcbiAgODM6XHRjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuICA4NDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbiAgODU6XHRcdGRlcGVuZHMgb24gRVhQRVJUXG4gIDg2Olx0XHRkZXBlbmRzIG9uIEtWTV9YODYgXHUwMDI2XHUwMDI2IFg4Nl82NFxuICA4NzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gIDg4Olx0XHRoZWxwXG4gIDg5Olx0XHQgIEVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNcy4gIEN1cnJlbnRseSwgc29mdHdhcmUtXG4gIDkwOlx0XHQgIHByb3RlY3RlZCBWTXMgYXJlIHB1cmVseSBhIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHZlaGljbGUgZm9yXG4gIDkxOlx0XHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFwmIzM0O3JlYWxcJiMzNDsgVk0gd29ya2xvYWQgYXMgYVxuICA5MjpcdFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cbiAgOTM6XHRcbiAgOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAgOTU6XHRcbiAgOTY6XHRjb25maWcgS1ZNX0lOVEVMXG4gIDk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gIDk4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgSUEzMl9GRUFUX0NUTFxuICA5OTpcdFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxuIDEwMDpcdFx0aGVscFxuIDEwMTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJiMzOTtzIFZUXG4gMTAyOlx0XHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cbiAxMDM6XHRcbiAxMDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTA1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cbiAxMDY6XHRcbiAxMDc6XHRjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG4gMTA4Olx0ICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4gMTA5Olx0ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcdTAwMjZcdTAwMjYgRVhQRVJUXG4gMTEwOlx0ICAgICAgICBoZWxwXG4gMTExOlx0ICAgICAgICAgIENoZWNrcyB0aGF0IEtWTSYjMzk7cyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgY29kZSB3aWxsIG5vdCBpbmNvcnJlY3RseVxuIDExMjpcdCAgICAgICAgICBsZXQgZ3Vlc3RzIHJlY2VpdmUgYSB2aXJ0dWFsaXphdGlvbiBleGNlcHRpb24uICBWaXJ0dWFsaXphdGlvblxuIDExMzpcdCAgICAgICAgICBleGNlcHRpb25zIHdpbGwgYmUgdHJhcHBlZCBieSB0aGUgaHlwZXJ2aXNvciByYXRoZXIgdGhhbiBpbmplY3RlZFxuIDExNDpcdCAgICAgICAgICBpbiB0aGUgZ3Vlc3QuXG4gMTE1Olx0XG4gMTE2Olx0ICAgICAgICAgIE5vdGU6IHNvbWUgQ1BVcyBhcHBlYXIgdG8gZ2VuZXJhdGUgc3B1cmlvdXMgRVBUIFZpb2xhdGlvbnMgI1ZFc1xuIDExNzpcdCAgICAgICAgICB0aGF0IHRyaWdnZXIgS1ZNJiMzOTtzIFdBUk4sIGluIHBhcnRpY3VsYXIgd2l0aCBlcHRhZD0wIGFuZC9vciBuZXN0ZWRcbiAxMTg6XHQgICAgICAgICAgdmlydHVhbGl6YXRpb24uXG4gMTE5Olx0XG4gMTIwOlx0ICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTIxOlx0XG4gMTIyOlx0Y29uZmlnIFg4Nl9TR1hfS1ZNXG4gMTIzOlx0XHRib29sIFwmIzM0O1NvZnR3YXJlIEd1YXJkIGVYdGVuc2lvbnMgKFNHWCkgVmlydHVhbGl6YXRpb25cJiMzNDtcbiAxMjQ6XHRcdGRlcGVuZHMgb24gWDg2X1NHWCBcdTAwMjZcdTAwMjYgS1ZNX0lOVEVMXG4gMTI1Olx0XHRoZWxwXG4gMTI2Olx0XG4gMTI3Olx0XHQgIEVuYWJsZXMgS1ZNIGd1ZXN0cyB0byBjcmVhdGUgU0dYIGVuY2xhdmVzLlxuIDEyODpcdFxuIDEyOTpcdFx0ICBUaGlzIGluY2x1ZGVzIHN1cHBvcnQgdG8gZXhwb3NlIFwmIzM0O3Jhd1wmIzM0OyB1bnJlY2xhaW1hYmxlIGVuY2xhdmUgbWVtb3J5IHRvXG4gMTMwOlx0XHQgIGd1ZXN0cyB2aWEgYSBkZXZpY2Ugbm9kZSwgZS5nLiAvZGV2L3NneF92ZXBjLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDQxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBtbXUuY2AgYW5kIGB4ODYuY2AgYXJlIGNvbXBpbGVkIHdpdGhpbiB0aGUgS1ZNIHg4NiBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gY2hlY2sgdGhlIG9idmlvdXMgcGxhY2U6IGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQgbWFnaWMgZm9yIHRoYXQgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGxpdmVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZXBlbmRlbmN5IGNoYWluIGFuZCBidWlsZCBydWxlcyB0aGF0IGRlZmluZSBob3cgdGhvc2UgdHdvIHNvdXJjZSBmaWxlcyBnZXQgdHVybmVkIGludG8gb2JqZWN0IGZpbGVzIGFuZCB0aGVuIGxpbmtlZCBpbnRvIHRoZSBmaW5hbCBLVk0ga2VybmVsIG1vZHVsZXMuIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCBmbGFncyBhcmUgYmVpbmcgdXNlZCwgYW55IHNwZWNpYWwgbGlicmFyaWVzIHRoYXQgYXJlIGxpbmtlZCwgYW5kIHRoZSBvdmVyYWxsIGNvbXBpbGF0aW9uIGZsb3cuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvd2VyIGxldmVscyBvZiB0aGUgYXJjaGl0ZWN0dXJlIGdldCBidWlsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0Y2NmbGFncy15ICYjNDM7PSAtSSAkKHNyY3RyZWUpL2FyY2gveDg2L2t2bVxuICAgNDpcdGNjZmxhZ3MtJChDT05GSUdfS1ZNX1dFUlJPUikgJiM0Mzs9IC1XZXJyb3JcbiAgIDU6XHRcbiAgIDY6XHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXG4gICA3Olx0XG4gICA4Olx0a3ZtLXlcdFx0XHQmIzQzOz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXG4gICA5Olx0XHRcdFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXG4gIDEwOlx0XG4gIDExOlx0a3ZtLSQoQ09ORklHX1g4Nl82NCkgJiM0Mzs9IG1tdS90ZHBfaXRlci5vIG1tdS90ZHBfbW11Lm9cbiAgMTI6XHRrdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgJiM0Mzs9IGk4MjU5Lm8gaTgyNTQubyBpb2FwaWMub1xuICAxMzpcdGt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSAmIzQzOz0gaHlwZXJ2Lm9cbiAgMTQ6XHRrdm0tJChDT05GSUdfS1ZNX1hFTilcdCYjNDM7PSB4ZW4ub1xuICAxNTpcdGt2bS0kKENPTkZJR19LVk1fU01NKVx0JiM0Mzs9IHNtbS5vXG4gIDE2Olx0XG4gIDE3Olx0a3ZtLWludGVsLXlcdFx0JiM0Mzs9IHZteC92bXgubyB2bXgvdm1lbnRlci5vIHZteC9wbXVfaW50ZWwubyB2bXgvdm1jczEyLm8gXFxcbiAgMTg6XHRcdFx0XHQgICB2bXgvbmVzdGVkLm8gdm14L3Bvc3RlZF9pbnRyLm8gdm14L21haW4ub1xuICAxOTpcdFxuICAyMDpcdGt2bS1pbnRlbC0kKENPTkZJR19YODZfU0dYX0tWTSlcdCYjNDM7PSB2bXgvc2d4Lm9cbiAgMjE6XHRrdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcdCYjNDM7PSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXG4gIDIyOlx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXHQmIzQzOz0gdm14L3RkeC5vXG4gIDIzOlx0XG4gIDI0Olx0a3ZtLWFtZC15XHRcdCYjNDM7PSBzdm0vc3ZtLm8gc3ZtL3ZtZW50ZXIubyBzdm0vcG11Lm8gc3ZtL25lc3RlZC5vIHN2bS9hdmljLm9cbiAgMjU6XHRcbiAgMjY6XHRrdm0tYW1kLSQoQ09ORklHX0tWTV9BTURfU0VWKVx0JiM0Mzs9IHN2bS9zZXYub1xuICAyNzpcdGt2bS1hbWQtJChDT05GSUdfS1ZNX0hZUEVSVilcdCYjNDM7PSBzdm0vaHlwZXJ2Lm9cbiAgMjg6XHRcbiAgMjk6XHRpZmRlZiBDT05GSUdfSFlQRVJWXG4gIDMwOlx0a3ZtLXlcdFx0XHQmIzQzOz0ga3ZtX29uaHlwZXJ2Lm9cbiAgMzE6XHRrdm0taW50ZWwteVx0XHQmIzQzOz0gdm14L3ZteF9vbmh5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuICAzMjpcdGt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bV9vbmh5cGVydi5vXG4gIDMzOlx0ZW5kaWZcbiAgMzQ6XHRcbiAgMzU6XHRvYmotJChDT05GSUdfS1ZNX1g4NilcdCYjNDM7PSBrdm0ub1xuICAzNjpcdG9iai0kKENPTkZJR19LVk1fSU5URUwpXHQmIzQzOz0ga3ZtLWludGVsLm9cbiAgMzc6XHRvYmotJChDT05GSUdfS1ZNX0FNRClcdCYjNDM7PSBrdm0tYW1kLm9cbiAgMzg6XHRcbiAgMzk6XHRBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxuICA0MDpcdCQob2JqKS9zdm0vdm1lbnRlci5vOiAkKG9iaikva3ZtLWFzbS1vZmZzZXRzLmhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzAKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogMTI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0geDg2IEluc3RydWN0aW9uIEVtdWxhdGlvbiBhbmQgUGFnZSBGYXVsdCBIYW5kbGluZzogQSBGdXp6aW5nIE9wcG9ydHVuaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgY2hhbmdlIGluIEtWTSYjMzk7cyB4ODYgTU1VIGFuZCBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMuIFRoZSBjb3JlIG9mIGl0IGJvaWxzIGRvd24gdG8gaG93IEdQQSBjYWNoaW5nIGFuZCBwZXJtaXNzaW9uIGNoZWNrcyB3b3JrIGR1cmluZyBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBkaXJlY3QgTU1VIG1vZGVzIGxpa2UgVERQLCBOUFQsIG9yIEVQVCBhcmUgaW4gcGxheS4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGFuIGFzc3VtcHRpb24gdGhhdCBhIGZhdWx0ZWQgR1BBIGNvdWxkIGJlIHJlLXVzZWQsIHdpdGhvdXQgZGlmZmVyZW50aWF0aW5nIHdoZXRoZXIgdGhlIHBhZ2UgZmF1bHQgd2FzIGEgcmVhZCBvciBhIHdyaXRlLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBtb3JlIHJvYnVzdCBtZWNoYW5pc20gdG8gY29ycmVjdGx5IGhhbmRsZSByZWFkL3dyaXRlIHBlcm1pc3Npb25zLgoKRXNzZW50aWFsbHksIGBrdm1fbW11X3BhZ2VfZmF1bHRgIG5vdyBzZXRzIGBFTVVMVFlQRV9QRl9XUklURWAgaWYgaXQmIzM5O3MgYSB3cml0ZSBmYXVsdC4gVGhlbiwgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCB0cmFja3MgYWNjZXNzIHR5cGUgKHJlYWQgb3Igd3JpdGUpLiBGaW5hbGx5LCBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCBjaGVja3MgdGhlc2UgYWNjZXNzIHR5cGVzIHRvIGRldGVybWluZSBpZiBhIEdQQSBpcyBzdGlsbCB2YWxpZCBmb3IgcmV1c2UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHBlcm1pc3Npb24gYnlwYXNzZXMgaWYgZ3Vlc3QgY29kZSBtb2RpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gYmV0d2VlbiB0aGUgZmF1bHQgYW5kIGVtdWxhdGlvbiBvciBpZiBhbiBpbnN0cnVjdGlvbiByZWFkcyBmcm9tIGFuIGFkZHJlc3MgdGhhdCBjYXVzZWQgYSB3cml0ZSBmYXVsdC4KClRoaXMgY2hhbmdlIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgdG91Y2hlcyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBLVk0mIzM5O3MgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCB3aGljaCBpcyBoZWF2aWx5IHVzZWQgZm9yIE1NSU8gZW11bGF0aW9uLCBoYW5kbGluZyB3cml0ZS1wcm90ZWN0ZWQgcGFnZXMsIGV0Yy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEtWTSBpcyBzdGFuZGFyZCBvbiB4ODYsIGFuZCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyIHVzaW5nIGAvZGV2L2t2bWAsIGBLVk1fUlVOYCwgYW5kIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTmAgaXMgYSBzdHJhaWdodGZvcndhcmQgd2F5IHRvIHRhcmdldCB0aGlzLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOiBga3ZtX21tdV9wYWdlX2ZhdWx0YCwgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCwgYW5kIGBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbmAuIFdlIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EYC4gV2UmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBkZXBlbmRlbmNpZXMgaW4gYEtjb25maWdgLCBhbmQgZXZlcnl0aGluZyBsb29rcyBzb2xpZC4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gY292ZXIgYSB2YXJpZXR5IG9mIGNvbmZpZ3VyYXRpb25zLgoKVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIGNoYW5nZSB3aXRoIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IHByb3RlY3Rpb24sIG1ha2luZyBpdCBhIGhpZ2gtdmFsdWUgZnV6emluZyB0YXJnZXQuIFdlIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBmdW5jdGlvbnMsIGNvbmZpZ3MsIGFuZCB0aGUgbWVjaGFuaXNtLiBMZXQmIzM5O3MgbW92ZSBmb3J3YXJkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX21tdV9wYWdlX2ZhdWx0JiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2VjdXJpdHkvcGVybWlzc2lvbiBjaGVja2luZyBpc3N1ZSBpbiBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBieSB0cmFja2luZyBwZXJtaXR0ZWQgZW11bGF0ZWQgYWNjZXNzZXMgKHJlYWQgdnMgd3JpdGUpIGZvciBjYWNoZWQgR1BBcyByYXRoZXIgdGhhbiByZXVzaW5nIHRoZSBHUEEgdW5jb25kaXRpb25hbGx5LiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIG9uIHg4Niwgd2hpY2ggaXMgZnVsbHkgdGVzdGFibGUgYW5kIGZ1enphYmxlIHZpYSBLVk0gaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fbW11X3BhZ2VfZmF1bHQmIzM0OywKICAgICYjMzQ7eDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OywKICAgICYjMzQ7a3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzZWN1cml0eS9wZXJtaXNzaW9uIGNoZWNraW5nIGlzc3VlIGluIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGJ5IHRyYWNraW5nIHBlcm1pdHRlZCBlbXVsYXRlZCBhY2Nlc3NlcyAocmVhZCB2cyB3cml0ZSkgZm9yIGNhY2hlZCBHUEFzIHJhdGhlciB0aGFuIHJldXNpbmcgdGhlIEdQQSB1bmNvbmRpdGlvbmFsbHkuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBjb3JlIEtWTSBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMgb24geDg2LCB3aGljaCBpcyBmdWxseSB0ZXN0YWJsZSBhbmQgZnV6emFibGUgdmlhIEtWTSBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgeDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyB0byB0cmFjayBwZXJtaXR0ZWQgYWNjZXNzIHR5cGVzIChyZWFkIHZzIHdyaXRlKSBmb3IgY2FjaGVkIEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3NlcyAoR1BBKSBkdXJpbmcgcGFnZSBmYXVsdCBlbXVsYXRpb24gKHJlcGxhY2luZyBgYm9vbCBncGFfYXZhaWxhYmxlYCB3aXRoIGB1NjQgZ3BhX2FjY2Vzc2AgaW4gYHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0YCkuXG5cbi0gS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBgY3R4dC1cdTAwM2VncGFfYWNjZXNzYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgaW4gYGluaXRfZW11bGF0ZV9jdHh0KClgIGFuZCBwcm9wZXJseSBzZXQgaW4gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKClgLiBUaGVyZSBhcmUgbm8gbmV3IG9yIG1vZGlmaWVkIGtlcm5lbC10by11c2VyIGNvcGllcywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhIGJ1ZmZlcnMuXG4tIEtBU0FOIC8gU3RhbmRhcmQgRGV0ZWN0b3JzOiBUaGUgbW9kaWZpY2F0aW9ucyBzb2xlbHkgYWZmZWN0IGludGVybmFsIHBlcm1pc3Npb24gY2hlY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gS1ZNIE1NSU8vcGFnZSBmYXVsdCBlbXVsYXRpb24uIFN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBrZXJuZWxzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgaWYgYW55IGFyaXNlLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNhNDQ2OTY1MGUxYTM4MDJjNGU1MDViYTZhYzZhNTExM2NhM2ZlNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDAwOjA0OjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAppbmRleCAzZTM3NWFmMTVjMDM1Li4xMDg4NmJlYTgyYzkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaApAQCAtMzU0LDggJiM0MzszNTQsOCBAQCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCB7CiAJYm9vbCBoYXZlX2V4Y2VwdGlvbjsKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247CiAKLQkvKiBHUEEgYXZhaWxhYmxlICovCi0JYm9vbCBncGFfYXZhaWxhYmxlOwomIzQzOwkvKiBTYXZlZCBHUEEgYW5kIHBlcm1pdHRlZCBlbXVsYXRlZCBhY2Nlc3Nlcy4gKi8KJiM0MzsJdTY0IGdwYV9hY2Nlc3M7CiAJZ3BhX3QgZ3BhX3ZhbDsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCAwNjRlY2MzM2I5MjY3Li45NWI5ZWFjOTk2MmE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTY2MzIsNiAmIzQzOzY2MzIsOSBAQCBpbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycgogCQlyZXR1cm4gcjsKIAogZW11bGF0ZToKJiM0MzsJaWYgKGRpcmVjdCAmYW1wOyZhbXA7IChlcnJvcl9jb2RlICZhbXA7IFBGRVJSX1dSSVRFX01BU0spKQomIzQzOwkJZW11bGF0aW9uX3R5cGUgfD0gRU1VTFRZUEVfUEZfV1JJVEU7CiYjNDM7CiAJcmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIGNyMl9vcl9ncGEsIGVtdWxhdGlvbl90eXBlLCBpbnNuLAogCQkJCSAgICAgICBpbnNuX2xlbik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggNzk0NjhkZGZlNDczNi4uYWE1ZGViN2M3M2FhMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtNTA4OCw4ICYjNDM7NTA4OCwxMyBAQCBzdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKnZhbCwKIAkgKiBOb3RlLCB0aGlzIGNhbm5vdCBiZSB1c2VkIG9uIHN0cmluZyBvcGVyYXRpb25zIHNpbmNlIHN0cmluZwogCSAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRgogCSAqIG9jY3VycmVkLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZ3Vlc3QgbWF5IGhhdmUgY2hhbmdlZCB0aGUgaW5zdHJ1Y3Rpb24gc2luY2UgdGhlIGZhdWx0LiAgUmV1c2UKJiM0MzsJICogdGhlIEdQQSBmb3Igd3JpdGVzIG9ubHkgaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSB3cml0ZSBhY2Nlc3M7CiYjNDM7CSAqIG90aGVyd2lzZSwgcmVjaGVjayBwZXJtaXNzaW9ucyBmb3IgdGhlIGRlY29kZWQgYWNjZXNzLgogCSAqLwotCWlmIChjdHh0LSZndDtncGFfYXZhaWxhYmxlICZhbXA7JmFtcDsgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgJmFtcDsmYW1wOwomIzQzOwlpZiAoKGN0eHQtJmd0O2dwYV9hY2Nlc3MgJmFtcDsgKHdyaXRlID8gQUNDX1dSSVRFX01BU0sgOiBBQ0NfUkVBRF9NQVNLKSkgJmFtcDsmYW1wOwomIzQzOwkgICAgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgJmFtcDsmYW1wOwogCSAgICAoYWRkciAmYW1wOyB+UEFHRV9NQVNLKSA9PSAoY3R4dC0mZ3Q7Z3BhX3ZhbCAmYW1wOyB+UEFHRV9NQVNLKSkgewogCQlncGEgPSBjdHh0LSZndDtncGFfdmFsOwogCQlyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpOwpAQCAtNTkzOCw3ICYjNDM7NTk0Myw3IEBAIHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCWt2bV94ODZfY2FsbChnZXRfY3NfZGJfbF9iaXRzKSh2Y3B1LCAmYW1wO2NzX2RiLCAmYW1wO2NzX2wpOwogCi0JY3R4dC0mZ3Q7Z3BhX2F2YWlsYWJsZSA9IGZhbHNlOwomIzQzOwljdHh0LSZndDtncGFfYWNjZXNzID0gMDsKIAljdHh0LSZndDtlZmxhZ3MgPSBrdm1fZ2V0X3JmbGFncyh2Y3B1KTsKIAljdHh0LSZndDt0ZiA9IChjdHh0LSZndDtlZmxhZ3MgJmFtcDsgWDg2X0VGTEFHU19URikgIT0gMDsKIApAQCAtNjQ1NCw3ICYjNDM7NjQ1OSwxMCBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLAogCiAJCS8qIFdpdGggc2hhZG93IHBhZ2UgdGFibGVzLCBjcjIgY29udGFpbnMgYSBHVkEgb3IgbkdQQS4gKi8KIAkJaWYgKHZjcHUtJmd0O2FyY2gubW11LSZndDtyb290X3JvbGUuZGlyZWN0KSB7Ci0JCQljdHh0LSZndDtncGFfYXZhaWxhYmxlID0gdHJ1ZTsKJiM0MzsJCQkvKiBBIHdyaXRlIGZhdWx0IGNhbiByZXF1aXJlIGEgcmVhZCBmb3IgUk1XIGVtdWxhdGlvbi4gKi8KJiM0MzsJCQljdHh0LSZndDtncGFfYWNjZXNzID0gQUNDX1JFQURfTUFTSzsKJiM0MzsJCQlpZiAoZW11bGF0aW9uX3R5cGUgJmFtcDsgRU1VTFRZUEVfUEZfV1JJVEUpCiYjNDM7CQkJCWN0eHQtJmd0O2dwYV9hY2Nlc3MgfD0gQUNDX1dSSVRFX01BU0s7CiAJCQljdHh0LSZndDtncGFfdmFsID0gY3IyX29yX2dwYTsKIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKaW5kZXggMGY1OTE5YjA5MmU0Ny4uNjY3NDY1NjgwY2NkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtNDA3LDYgJiM0Mzs0MDcsOCBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLAogICogRU1VTFRZUEVfUEYgLSBTZXQgd2hlbiBhbiBpbnRlcmNlcHRlZCAjUEYgdHJpZ2dlcnMgdGhlIGVtdWxhdGlvbiwgaW4gd2hpY2ggY2FzZQogICoJCSB0aGUgQ1IyL0dQQSB2YWx1ZSBwYXNzIG9uIHRoZSBzdGFjayBpcyB2YWxpZC4KICAqCiYjNDM7ICogRU1VTFRZUEVfUEZfV1JJVEUgLSBTZXQgd2l0aCBFTVVMVFlQRV9QRiB3aGVuIGhhcmR3YXJlIHJlcG9ydHMgYSB3cml0ZSBhY2Nlc3MuCiYjNDM7ICoKICAqIEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCAtIFNldCB3aGVuIHRoZSBlbXVsYXRvciBzaG91bGQgdXBkYXRlIGludGVycnVwdGliaWxpdHkKICAqCQkJCSBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmcKICAqCQkJCSBhbiBpbnN0cnVjdGlvbiAoYWZ0ZXIgY29tcGxldGluZyB1c2Vyc3BhY2UgSS9PKS4KQEAgLTQ0NSw2ICYjNDM7NDQ3LDcgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwKICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxICZsdDsmbHQ7IDcpCiAjZGVmaW5lIEVNVUxUWVBFX1dSSVRFX1BGX1RPX1NQCSAgICAoMSAmbHQ7Jmx0OyA4KQogI2RlZmluZSBFTVVMVFlQRV9TS0lQX1NPRlRfSU5UCSAgICAoMSAmbHQ7Jmx0OyA5KQomIzQzOyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEUJICAgICgxICZsdDsmbHQ7IDEwKQogCiAjZGVmaW5lIEVNVUxUWVBFX1NFVF9TT0ZUX0lOVF9WRUNUT1IodikJKCh1MzIpKCh2KSAmYW1wOyAweGZmKSAmbHQ7Jmx0OyAxNikKICNkZWZpbmUgRU1VTFRZUEVfR0VUX1NPRlRfSU5UX1ZFQ1RPUihlKQkoKChlKSAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHhmZikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBicmluZyBpbiBLTVNBTiB0byBwcm90ZWN0IGFnYWluc3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIE15IGZpcnN0IHN0ZXAgaXMgdG8gYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHBpZWNlIGJ5IHBpZWNlLgoKKiAgIFN0YXJ0aW5nIHdpdGggYGFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oYCwgdGhleSYjMzk7dmUgc3dhcHBlZCBgZ3BhX2F2YWlsYWJsZWAgKGEgYm9vbGVhbikgZm9yIGBncGFfYWNjZXNzYCAoYSBgdTY0YCkgd2l0aGluIHRoZSBgeDg2X2VtdWxhdGVfY3R4dGAgc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgdHlwZSBjaGFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGdwYV9hY2Nlc3NgIHJlcHJlc2VudHMgbm93LiBJcyB0aGlzIGEgYnJvYWRlciBhY2Nlc3MgY29udHJvbCBmaWVsZD8KCiogICBOZXh0LCBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgaW50cm9kdWNlcyBgRU1VTFRZUEVfUEZfV1JJVEVgIGZsYWcgaW4gdGhlIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGZ1bmN0aW9uLCBpZiBpdCYjMzk7cyBhIGRpcmVjdCBNTVUgYWNjZXNzLiBUaGlzIHN1Z2dlc3RzIGEgY2hhbmdlIGluIGhvdyB3cml0ZSBmYXVsdHMgYXJlIGhhbmRsZWQuCgoqICAgTm93LCBgYXJjaC94ODYva3ZtL3g4Ni5jYCBjb250YWlucyB0aGUgbW9yZSBpbnRlcmVzdGluZyBtb2RpZmljYXRpb25zLiBUaGUgY2hlY2sgYGN0eHQtJmd0O2dwYV9hdmFpbGFibGVgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYGN0eHQtJmd0O2dwYV9hY2Nlc3NgIHVzaW5nIGBBQ0NfV1JJVEVfTUFTS2AgYW5kIGBBQ0NfUkVBRF9NQVNLYC4gSXQgc2VlbXMgbGlrZSBgZ3BhX2FjY2Vzc2AgaXMgbm93IGFjdGluZyBhcyBhIGJpdG1hc2sgaW5kaWNhdGluZyBhY2Nlc3MgcGVybWlzc2lvbnMuIFRoZSBpbml0aWFsaXphdGlvbiBpcyBhbHNvIGNoYW5nZWQsIHNldHRpbmcgYGN0eHQtJmd0O2dwYV9hY2Nlc3MgPSAwYCBhbmQgdGhlbiBzdWJzZXF1ZW50bHkgc2V0dGluZyBgQUNDX1JFQURfTUFTS2AgYW5kL29yIGBBQ0NfV1JJVEVfTUFTS2AgYmFzZWQgb24gdGhlIGVtdWxhdGlvbiB0eXBlLiBUaGlzIGlzIGNydWNpYWw7IGlmIHRoZXNlIGJpdG1hc2tzIGFyZW4mIzM5O3QgY29ycmVjdGx5IGluaXRpYWxpemVkICpiZWZvcmUqIHVzYWdlLCB3ZSBoYXZlIGEgcHJvYmxlbS4gU3BlY2lmaWNhbGx5LCB0aGUgc2V0dGluZyBvZiBgY3R4dC0mZ3Q7Z3BhX2FjY2Vzc2Agd2l0aGluIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgbG9va3MgbGlrZSBhIGtleSBwb2ludCB0byByZXZpZXcuIElzIGl0IGFsd2F5cyBzZXQgY29ycmVjdGx5PwoKKiAgIEZpbmFsbHksIHRoZSBhZGRpdGlvbiBvZiBgI2RlZmluZSBFTVVMVFlQRV9QRl9XUklURWAgaW4gYGFyY2gveDg2L2t2bS94ODYuaGAgaXMgc3RyYWlnaHRmb3J3YXJkLCBhIG5ldyBmbGFnIGJlaW5nIGRlZmluZWQuCgpNeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIGNvbmZpcm1pbmcgdGhhdCBgZ3BhX2FjY2Vzc2AgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgdG8gYSBkZWZpbmVkIHZhbHVlIGJlZm9yZSBpdCYjMzk7cyByZWFkIGFuZCB0aGF0IGV2ZXJ5IHBvc3NpYmxlIGNvZGUgcGF0aCBjb3JyZWN0bHkgc2V0cyB0aGUgYXBwcm9wcmlhdGUgYml0cyB3aXRoaW4gdGhhdCBtYXNrLiBUaGUgbW92ZSBmcm9tIGEgc2ltcGxlIGJvb2xlYW4gdG8gYSBiaXRtYXNrICppbmNyZWFzZXMqIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBlcnJvcnMuCgpJJiMzOTttIGdvaW5nIHRvIGNvbmR1Y3QgYSBzZWFyY2ggZm9yIHVzZXMgb2YgYHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0YC4gTXkgZ29hbCBpcyB0byBleGhhdXN0aXZlbHkgY2hlY2sgZm9yOgoKMS4gIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHBvaW50cy4KMi4gIEFueSByZWFkcyBvciB3cml0ZXMgb2YgYGdwYV9hY2Nlc3NgICpiZWZvcmUqIGl0JiMzOTtzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuCjMuICBBbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgcGFydGljdWxhcmx5IGluIGNhc2VzIHdoZXJlIGBncGFfYWNjZXNzYCBjb3VsZCBiZSByZWFkIHdpdGhvdXQgdGhlIGFwcHJvcHJpYXRlIGZsYWdzIGJlaW5nIHNldC4KCldpdGggbXkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLCBJIGFtIGFibGUgdG8gbG9jYXRlIHRoZXNlIHBvdGVudGlhbCBzcG90cyBvZiBjb25jZXJuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtncGFfYWNjZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oPTMzOD1zdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCB7XG4tLVxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgtMzU3LVx0LyogU2F2ZWQgR1BBIGFuZCBwZXJtaXR0ZWQgZW11bGF0ZWQgYWNjZXNzZXMuICovXG5hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaDozNTg6XHR1NjQgZ3BhX2FjY2VzcztcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oLTM1OS1cdGdwYV90IGdwYV92YWw7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTUwNzM9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTUwOTUtXHQgKi9cbmFyY2gveDg2L2t2bS94ODYuYzo1MDk2Olx0aWYgKChjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgXHUwMDI2ICh3cml0ZSA/IEFDQ19XUklURV9NQVNLIDogQUNDX1JFQURfTUFTSykpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5jLTUwOTctXHQgICAgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgXHUwMDI2XHUwMDI2XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTU5Mzk9c3RhdGljIHZvaWQgaW5pdF9lbXVsYXRlX2N0eHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01OTQ1LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjU5NDY6XHRjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgPSAwO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTU5NDctXHRjdHh0LVx1MDAzZWVmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02MzM1PWludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY0NjItXHRcdFx0LyogQSB3cml0ZSBmYXVsdCBjYW4gcmVxdWlyZSBhIHJlYWQgZm9yIFJNVyBlbXVsYXRpb24uICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjQ2MzpcdFx0XHRjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgPSBBQ0NfUkVBRF9NQVNLO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTY0NjQtXHRcdFx0aWYgKGVtdWxhdGlvbl90eXBlIFx1MDAyNiBFTVVMVFlQRV9QRl9XUklURSlcbmFyY2gveDg2L2t2bS94ODYuYzo2NDY1Olx0XHRcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzIHw9IEFDQ19XUklURV9NQVNLO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTY0NjYtXHRcdFx0Y3R4dC1cdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oPTI5Mz1pbnQgaHZfY2FsbF9jbGVhcl92aXJ0dWFsX2ludGVycnVwdCh1NjQgcGFydGl0aW9uX2lkKTtcbmRyaXZlcnMvaHYvbXNodl9yb290Lmg6Mjk0OmludCBodl9jYWxsX2dldF9ncGFfYWNjZXNzX3N0YXRlcyh1NjQgcGFydGl0aW9uX2lkLCB1MzIgY291bnQsIHU2NCBncGFfYmFzZV9wZm4sXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oLTI5NS1cdFx0XHRcdCAgdW5pb24gaHZfZ3BhX3BhZ2VfYWNjZXNzX3N0YXRlX2ZsYWdzIHN0YXRlX2ZsYWdzLFxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYz0yOTg9aW50IGh2X2NhbGxfdW5tYXBfZ3BhX3BhZ2VzKHU2NCBwYXJ0aXRpb25faWQsIHU2NCBnZm4sIHU2NCBwYWdlX2NvdW50XzRrLFxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYy0zNDItXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmM6MzQzOmludCBodl9jYWxsX2dldF9ncGFfYWNjZXNzX3N0YXRlcyh1NjQgcGFydGl0aW9uX2lkLCB1MzIgY291bnQsIHU2NCBncGFfYmFzZV9wZm4sXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtMzQ0LVx0XHRcdFx0ICB1bmlvbiBodl9ncGFfcGFnZV9hY2Nlc3Nfc3RhdGVfZmxhZ3Mgc3RhdGVfZmxhZ3MsXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTE1MTA9bXNodl9wYXJ0aXRpb25faW9jdGxfZ2V0X2dwYXBfYWNjZXNzX2JpdG1hcChzdHJ1Y3QgbXNodl9wYXJ0aXRpb24gKnBhcnRpdGlvbixcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTU2Ni1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxNTY3Olx0cmV0ID0gaHZfY2FsbF9nZXRfZ3BhX2FjY2Vzc19zdGF0ZXMocGFydGl0aW9uLVx1MDAzZXB0X2lkLCBhcmdzLnBhZ2VfY291bnQsXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTU2OC1cdFx0XHRcdFx0ICAgIGFyZ3MuZ3BhcF9iYXNlLCBodl9mbGFncywgXHUwMDI2d3JpdHRlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHg4NiBFbXVsYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgZW11bGF0aW9uIGxvZ2ljIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSYjMzk7bSBmb2N1c2luZyBvbiBgaW5pdF9lbXVsYXRlX2N0eHRgIGFuZCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIOKAkyB0aGVzZSBhcmUgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzLiBJIGtub3cgdGhleSYjMzk7cmUgcHJvYmFibHkgbG9jYXRlZCB3aXRoaW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgc3RhcnQuIEl0JiMzOTtzIGJlc3QgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgbGluZXMgb2YgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHByb2Nlc3Nlcy4gU2VlaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmbG93LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIgdG8gYWNoaWV2ZSBhY2N1cmF0ZSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTkzNTpcdFxuNTkzNjpcdFx0cmV0dXJuIGN0eHQ7XG41OTM3Olx0fVxuNTkzODpcdFxuNTkzOTpcdHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjU5NDA6XHR7XG41OTQxOlx0XHRzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCA9IHZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQ7XG41OTQyOlx0XHRpbnQgY3NfZGIsIGNzX2w7XG41OTQzOlx0XG41OTQ0Olx0XHRrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgXHUwMDI2Y3NfZGIsIFx1MDAyNmNzX2wpO1xuNTk0NTpcdFxuNTk0NjpcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzID0gMDtcbjU5NDc6XHRcdGN0eHQtXHUwMDNlZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7XG41OTQ4Olx0XHRjdHh0LVx1MDAzZXRmID0gKGN0eHQtXHUwMDNlZWZsYWdzIFx1MDAyNiBYODZfRUZMQUdTX1RGKSAhPSAwO1xuNTk0OTpcdFxuNTk1MDpcdFx0Y3R4dC1cdTAwM2VlaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7XG41OTUxOlx0XHRjdHh0LVx1MDAzZW1vZGUgPSAoIWlzX3Byb3Rtb2RlKHZjcHUpKVx0XHQ/IFg4NkVNVUxfTU9ERV9SRUFMIDpcbjU5NTI6XHRcdFx0ICAgICAoY3R4dC1cdTAwM2VlZmxhZ3MgXHUwMDI2IFg4Nl9FRkxBR1NfVk0pXHQ/IFg4NkVNVUxfTU9ERV9WTTg2IDpcbjU5NTM6XHRcdFx0ICAgICAoY3NfbCBcdTAwMjZcdTAwMjYgaXNfbG9uZ19tb2RlKHZjcHUpKVx0PyBYODZFTVVMX01PREVfUFJPVDY0IDpcbjU5NTQ6XHRcdFx0ICAgICBjc19kYlx0XHRcdFx0PyBYODZFTVVMX01PREVfUFJPVDMyIDpcbjU5NTU6XHRcdFx0XHRcdFx0XHRcdCAgWDg2RU1VTF9NT0RFX1BST1QxNjtcbjU5NTY6XHRcdGN0eHQtXHUwMDNlaW50ZXJydXB0aWJpbGl0eSA9IDA7XG41OTU3Olx0XHRjdHh0LVx1MDAzZWhhdmVfZXhjZXB0aW9uID0gZmFsc2U7XG41OTU4Olx0XHRjdHh0LVx1MDAzZWV4Y2VwdGlvbi52ZWN0b3IgPSAtMTtcbjU5NTk6XHRcdGN0eHQtXHUwMDNlZXhjZXB0aW9uLnBheWxvYWQgPSAwO1xuNTk2MDpcdFx0Y3R4dC1cdTAwM2VwZXJtX29rID0gZmFsc2U7XG41OTYxOlx0XG41OTYyOlx0XHRpbml0X2RlY29kZV9jYWNoZShjdHh0KTtcbjU5NjM6XHRcdHZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdSA9IGZhbHNlO1xuNTk2NDpcdH1cbjU5NjU6XHRcbjU5NjY6XHR2b2lkIGt2bV9pbmplY3RfcmVhbG1vZGVfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGlycSwgaW50IGluY19laXApXG41OTY3Olx0e1xuNTk2ODpcdFx0c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQgPSB2Y3B1LVx1MDAzZWFyY2guZW11bGF0ZV9jdHh0O1xuNTk2OTpcdFx0aW50IHJldDtcbjU5NzA6XHRcbjU5NzE6XHRcdGluaXRfZW11bGF0ZV9jdHh0KHZjcHUpO1xuNTk3MjpcdFxuNTk3MzpcdFx0Y3R4dC1cdTAwM2VvcF9ieXRlcyA9IDI7XG41OTc0Olx0XHRjdHh0LVx1MDAzZWFkX2J5dGVzID0gMjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc0MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAsIGFuZCBteSBndXQgdGVsbHMgbWUgdGhlIHN3ZWV0IHNwb3QgaXMgc29tZXdoZXJlIGFyb3VuZCBsaW5lcyA2NDQwIHRvIDY0ODAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoYXQgYXJlYS4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBvciBhIGdyb3VwIG9mIHJlbGF0ZWQgaW5zdHJ1Y3Rpb25zIHRoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFuYWx5emluZy4gVGhpcyByYW5nZSBwcm92aWRlcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgd2hhdGV2ZXIgSSBoYXZlIGluIG1pbmQuIEkgaG9wZSB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjQ0MDpcdFx0ICogYW5kIHJldHJ5IHRoZSBpbnN0cnVjdGlvbiwgYXMgdGhlIHZDUFUgaXMgbGlrZWx5IG5vIGxvbmdlciB1c2luZyB0aGVcbjY0NDE6XHRcdCAqIGdmbiBhcyBhIHBhZ2UgdGFibGUuXG42NDQyOlx0XHQgKi9cbjY0NDM6XHRcdGlmICgoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX0FMTE9XX1JFVFJZX1BGKSBcdTAwMjZcdTAwMjZcbjY0NDQ6XHRcdCAgICAheDg2X3BhZ2VfdGFibGVfd3JpdGluZ19pbnNuKGN0eHQpIFx1MDAyNlx1MDAyNlxuNjQ0NTpcdFx0ICAgIGt2bV9tbXVfdW5wcm90ZWN0X2dmbl9hbmRfcmV0cnkodmNwdSwgY3IyX29yX2dwYSkpXG42NDQ2Olx0XHRcdHJldHVybiAxO1xuNjQ0NzpcdFxuNjQ0ODpcdFx0LyogdGhpcyBpcyBuZWVkZWQgZm9yIHZtd2FyZSBiYWNrZG9vciBpbnRlcmZhY2UgdG8gd29yayBzaW5jZSBpdFxuNjQ0OTpcdFx0ICAgY2hhbmdlcyByZWdpc3RlcnMgdmFsdWVzICBkdXJpbmcgSU8gb3BlcmF0aW9uICovXG42NDUwOlx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfZnJvbV92Y3B1KSB7XG42NDUxOlx0XHRcdHZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdSA9IGZhbHNlO1xuNjQ1MjpcdFx0XHRlbXVsYXRvcl9pbnZhbGlkYXRlX3JlZ2lzdGVyX2NhY2hlKGN0eHQpO1xuNjQ1MzpcdFx0fVxuNjQ1NDpcdFxuNjQ1NTpcdHJlc3RhcnQ6XG42NDU2Olx0XHRpZiAoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX1BGKSB7XG42NDU3Olx0XHRcdC8qIFNhdmUgdGhlIGZhdWx0aW5nIEdQQSAoY3IyKSBpbiB0aGUgYWRkcmVzcyBmaWVsZCAqL1xuNjQ1ODpcdFx0XHRjdHh0LVx1MDAzZWV4Y2VwdGlvbi5hZGRyZXNzID0gY3IyX29yX2dwYTtcbjY0NTk6XHRcbjY0NjA6XHRcdFx0LyogV2l0aCBzaGFkb3cgcGFnZSB0YWJsZXMsIGNyMiBjb250YWlucyBhIEdWQSBvciBuR1BBLiAqL1xuNjQ2MTpcdFx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLm1tdS1cdTAwM2Vyb290X3JvbGUuZGlyZWN0KSB7XG42NDYyOlx0XHRcdFx0LyogQSB3cml0ZSBmYXVsdCBjYW4gcmVxdWlyZSBhIHJlYWQgZm9yIFJNVyBlbXVsYXRpb24uICovXG42NDYzOlx0XHRcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzID0gQUNDX1JFQURfTUFTSztcbjY0NjQ6XHRcdFx0XHRpZiAoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX1BGX1dSSVRFKVxuNjQ2NTpcdFx0XHRcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzIHw9IEFDQ19XUklURV9NQVNLO1xuNjQ2NjpcdFx0XHRcdGN0eHQtXHUwMDNlZ3BhX3ZhbCA9IGNyMl9vcl9ncGE7XG42NDY3Olx0XHRcdH1cbjY0Njg6XHRcdH0gZWxzZSB7XG42NDY5Olx0XHRcdC8qIFNhbml0aXplIHRoZSBhZGRyZXNzIG91dCBvZiBhbiBhYnVuZGFuY2Ugb2YgcGFyYW5vaWEuICovXG42NDcwOlx0XHRcdGN0eHQtXHUwMDNlZXhjZXB0aW9uLmFkZHJlc3MgPSAwO1xuNjQ3MTpcdFx0fVxuNjQ3MjpcdFxuNjQ3MzpcdFx0LypcbjY0NzQ6XHRcdCAqIENoZWNrIEwxJiMzOTtzIGluc3RydWN0aW9uIGludGVyY2VwdHMgd2hlbiBlbXVsYXRpbmcgaW5zdHJ1Y3Rpb25zIGZvclxuNjQ3NTpcdFx0ICogTDIsIHVubGVzcyBLVk0gaXMgcmUtZW11bGF0aW5nIGEgcHJldmlvdXNseSBkZWNvZGVkIGluc3RydWN0aW9uLFxuNjQ3NjpcdFx0ICogZS5nLiB0byBjb21wbGV0ZSB1c2Vyc3BhY2UgSS9PLCBpbiB3aGljaCBjYXNlIEtWTSBoYXMgYWxyZWFkeVxuNjQ3NzpcdFx0ICogY2hlY2tlZCB0aGUgaW50ZXJjZXB0cy5cbjY0Nzg6XHRcdCAqL1xuNjQ3OTpcdFx0ciA9IHg4Nl9lbXVsYXRlX2luc24oY3R4dCwgaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBFbXVsYXRvciBNZW1vcnkgQWNjZXNzIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGVtdWxhdG9yJiMzOTtzIG1lbW9yeSBhY2Nlc3MgbWVjaGFuaXNtcy4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhlIGVtdWxhdG9yIGhhbmRsZXMgdGhlIGJhc2ljIG9wZXJhdGlvbnMgb2YgcmVhZGluZyBhbmQgd3JpdGluZyBhIHNpbmdsZSBwYWdlIG9mIG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgbG9naWMsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzeXN0ZW0sIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBpdCBtaWdodCBoYXZlLgoKRnVydGhlcm1vcmUsIGl0JiMzOTtzIGNydWNpYWwgdGhhdCBJIGZpZ3VyZSBvdXQgd2hlbiBhbmQgaG93IHRoZSBlbXVsYXRvciBkZXRlcm1pbmVzIGlmIGl0JiMzOTtzICphbGxvd2VkKiB0byB1c2UgYSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIChHUEEpLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBjaGVjayBvdXQgYGVtdWxhdG9yX2Nhbl91c2VfZ3BhYC4gVGhlIGludGVycGxheSBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9uIGlzIGtleSB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgdHJhbnNsYXRpb24gYW5kIHByb3RlY3Rpb24gc3RyYXRlZ3kuIEkgbmVlZCB0byBrbm93IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBlbXVsYXRvciBkZWVtcyBhIEdQQSB2YWxpZCBmb3IgZGlyZWN0IGFjY2Vzcy4gQXJlIHRoZXJlIGNoZWNrcyBmb3IgcGVybWlzc2lvbnMsIGFkZHJlc3MgcmFuZ2UgdmFsaWRhdGlvbiwgb3Igb3RoZXIgc2VjdXJpdHkgbWVhc3VyZXMgaW4gcGxhY2U/IFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgdGhlIGVtdWxhdG9yJiMzOTtzIHJvYnVzdG5lc3MgYW5kIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGFsc28gcmVsYXRlcyB0byBob3cgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgaXMgdWx0aW1hdGVseSB0cmFuc2xhdGVkIHRvIGEgaG9zdCBwaHlzaWNhbCBhZGRyZXNzLCBvciB3aGV0aGVyIHZpcnR1YWxpemF0aW9uIG9yIGVtdWxhdGlvbiBpcyByZXF1aXJlZCBhdCBhbGwuIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRob3NlIGtleSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MDcwOlx0XHRyZXR1cm4gMTtcbjUwNzE6XHR9XG41MDcyOlx0XG41MDczOlx0c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXG41MDc0Olx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzLFxuNTA3NTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24sXG41MDc2Olx0XHRcdFx0XHQgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuNTA3NzpcdFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCByZWFkX3dyaXRlX2VtdWxhdG9yX29wcyAqb3BzKVxuNTA3ODpcdHtcbjUwNzk6XHRcdGdwYV90IGdwYTtcbjUwODA6XHRcdGludCBoYW5kbGVkLCByZXQ7XG41MDgxOlx0XHRib29sIHdyaXRlID0gb3BzLVx1MDAzZXdyaXRlO1xuNTA4MjpcdFx0c3RydWN0IGt2bV9tbWlvX2ZyYWdtZW50ICpmcmFnO1xuNTA4MzpcdFx0c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQgPSB2Y3B1LVx1MDAzZWFyY2guZW11bGF0ZV9jdHh0O1xuNTA4NDpcdFxuNTA4NTpcdFx0LypcbjUwODY6XHRcdCAqIElmIHRoZSBleGl0IHdhcyBkdWUgdG8gYSBOUEYgd2UgbWF5IGFscmVhZHkgaGF2ZSBhIEdQQS5cbjUwODc6XHRcdCAqIElmIHRoZSBHUEEgaXMgcHJlc2VudCwgdXNlIGl0IHRvIGF2b2lkIHRoZSBHVkEgdG8gR1BBIHRhYmxlIHdhbGsuXG41MDg4Olx0XHQgKiBOb3RlLCB0aGlzIGNhbm5vdCBiZSB1c2VkIG9uIHN0cmluZyBvcGVyYXRpb25zIHNpbmNlIHN0cmluZ1xuNTA4OTpcdFx0ICogb3BlcmF0aW9uIHVzaW5nIHJlcCB3aWxsIG9ubHkgaGF2ZSB0aGUgaW5pdGlhbCBHUEEgZnJvbSB0aGUgTlBGXG41MDkwOlx0XHQgKiBvY2N1cnJlZC5cbjUwOTE6XHRcdCAqXG41MDkyOlx0XHQgKiBUaGUgZ3Vlc3QgbWF5IGhhdmUgY2hhbmdlZCB0aGUgaW5zdHJ1Y3Rpb24gc2luY2UgdGhlIGZhdWx0LiAgUmV1c2VcbjUwOTM6XHRcdCAqIHRoZSBHUEEgZm9yIHdyaXRlcyBvbmx5IGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgd3JpdGUgYWNjZXNzO1xuNTA5NDpcdFx0ICogb3RoZXJ3aXNlLCByZWNoZWNrIHBlcm1pc3Npb25zIGZvciB0aGUgZGVjb2RlZCBhY2Nlc3MuXG41MDk1Olx0XHQgKi9cbjUwOTY6XHRcdGlmICgoY3R4dC1cdTAwM2VncGFfYWNjZXNzIFx1MDAyNiAod3JpdGUgPyBBQ0NfV1JJVEVfTUFTSyA6IEFDQ19SRUFEX01BU0spKSBcdTAwMjZcdTAwMjZcbjUwOTc6XHRcdCAgICBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbjUwOTg6XHRcdCAgICAoYWRkciBcdTAwMjYgflBBR0VfTUFTSykgPT0gKGN0eHQtXHUwMDNlZ3BhX3ZhbCBcdTAwMjYgflBBR0VfTUFTSykpIHtcbjUwOTk6XHRcdFx0Z3BhID0gY3R4dC1cdTAwM2VncGFfdmFsO1xuNTEwMDpcdFx0XHRyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpO1xuNTEwMTpcdFx0fSBlbHNlIHtcbjUxMDI6XHRcdFx0cmV0ID0gdmNwdV9tbWlvX2d2YV90b19ncGEodmNwdSwgYWRkciwgXHUwMDI2Z3BhLCBleGNlcHRpb24sIHdyaXRlKTtcbjUxMDM6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjUxMDQ6XHRcdFx0XHRyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7XG41MTA1Olx0XHR9XG41MTA2Olx0XG41MTA3Olx0XHQvKlxuNTEwODpcdFx0ICogSWYgdGhlIG1lbW9yeSBpcyBub3QgX2tub3duXyB0byBiZSBlbXVsYXRlZCBNTUlPLCBhdHRlbXB0IHRvIGFjY2Vzc1xuNTEwOTpcdFx0ICogZ3Vlc3QgbWVtb3J5LiAgSWYgYWNjZXNzaW5nIGd1ZXN0IG1lbW9yeSBmYWlscywgZS5nLiBiZWNhdXNlIHRoZXJlJiMzOTtzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MTQKCQkJCQkJCW91dHB1dDogMjUzCgkJCQkJCQl0aG91Z2h0czogNDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBYODYgRW11bGF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBhIHNwZWNpZmljIGNvcm5lciBjYXNlIHdpdGhpbiBLVk0mIzM5O3MgeDg2IGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5lc3RlZCBwYWdlIGZhdWx0cyBhbmQgdGhlIGRpcmVjdCBNTVUgcm9sZS4gVGhlIGNvcmUgaXNzdWUgaXMgdGhpczogdGhlIGhhcmR3YXJlIG1pZ2h0IHJlcG9ydCBhIHJlYWQgZmF1bHQsIGJ1dCB0aGUgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24gbWlnaHQgYWN0dWFsbHkgYmUgYSB3cml0ZSAob3IgdmljZSB2ZXJzYSkuIFNpbXBseSByZXVzaW5nIHRoZSBHbG9iYWwgUGh5c2ljYWwgQWRkcmVzcyAoR1BBKSByZXBvcnRlZCBieSB0aGUgaGFyZHdhcmUgd2l0aG91dCBhIHBlcm1pc3Npb24gY2hlY2sgaW4gdGhlc2Ugc2NlbmFyaW9zIGNvdWxkIGxlYWQgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIHdyaXRpbmcgdG8gYSByZWFkLW9ubHkgcGFnZSBvciBieXBhc3NpbmcgYWNjZXNzIGNvbnRyb2xzLgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIHJlcGxhY2VzIGBncGFfYXZhaWxhYmxlYCAocHJlc3VtYWJseSBhIGJvb2xlYW4gaW5kaWNhdGluZyBHUEEgdmFsaWRpdHkpIHdpdGggYGdwYV9hY2Nlc3NgLCBhIGZpZWxkIHRoYXQgdHJhY2tzIHdoZXRoZXIgcmVhZCAqb3IqIHdyaXRlIGFjY2VzcyBpcyBhbGxvd2VkIGZvciB0aGF0IGNhY2hlZCBHUEEuIFRoaXMgaW50cm9kdWNlcyBhIHN0cmljdGVyIGFjY2VzcyBjb250cm9sLgoKTm93LCBteSBjb25jZXJucyBhcyBhIHNlY3VyaXR5LW1pbmRlZCBleHBlcnQgaW1tZWRpYXRlbHkgZ28gdG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyByaXNrcyBpbiB0aGF0IGFyZWEuIFNvLCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsLXRvLVVzZXIgQ29weT8qKiBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB0b3VjaCBhbnkgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIHNvY2tldCBvcHRpb25zLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIG9yIGFueSBvZiB0aG9zZSBhcmVhcyB0aGF0IGFyZSBvZnRlbiBhIHNvdXJjZSBvZiB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MuIFRoaXMgaXMgc3RyaWN0bHkgaW50ZXJuYWwgS1ZNIGVtdWxhdGlvbiBsb2dpYy4KCjIuICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgQnJhbmNoaW5nPyoqIE5vLiBUaGUgYGN0eHQtJmd0O2dwYV9hY2Nlc3NgIGZpZWxkIGlzICppbml0aWFsaXplZCogdG8gemVybyB3aXRoaW4gYGluaXRfZW11bGF0ZV9jdHh0YCwgd2hpY2ggaXMgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGVtdWxhdGlvbiBwcm9jZXNzLiBUaGUgZmllbGQmIzM5O3MgdmFsdWUgaXMgYWxzbyBzZXQgY29ycmVjdGx5IGR1cmluZyBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLgoKMy4gICoqVW5pbml0aWFsaXplZCBDb21wbGV4IERhdGEgU3RydWN0dXJlcz8qKiBObywgdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXhpc3RpbmcgZGF0YSBzdHJ1Y3R1cmUgcmVwbGFjaW5nIG9uZSBmaWVsZCB3aXRoIGEgbmV3IGZpZWxkLiBgZ3BhX2FjY2Vzc2AgaXMganVzdCBhIGB1NjRgIHJlcGxhY2luZyBhIGBib29sYCBpbiBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgLiBTaW1wbGUsIGluaXRpYWxpemVkLCBubyB3b3JyaWVzLgoKNC4gICoqQm91bmRzIENoZWNrcz8qKiBOb3BlLiBObyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIGxlbmd0aHMgdGhhdCBjb3VsZCBhbGxvdyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuCgpHaXZlbiBhbGwgb2YgdGhhdCwgaXQmIzM5O3MgY2xlYXI6ICoqTmVlZHNLTVNBTiA9IGZhbHNlLioqIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFRoaXMgaXMgcHVyZWx5IGludGVybmFsIGNvbnRyb2wgZmxvdyBmb3IgS1ZNJiMzOTtzIGluc3RydWN0aW9uIGVtdWxhdGlvbiwgZGVhbGluZyB3aXRoIHBlcm1pc3Npb25zIGFuZCB0aGUgY29ycmVjdCByZXVzZSBvZiBjYWNoZWQgR1BBcy4gQW55IGJ1Z3MgaGVyZSB3b3VsZCBiZSBsb2dpY2FsIGVycm9ycyByZWxhdGVkIHRvIHZpcnR1YWxpemF0aW9uIGNvcnJlY3RuZXNzIG9yIHBlcm1pc3Npb24gZW5mb3JjZW1lbnQsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIEtNU0FOIGlzIGlycmVsZXZhbnQgaGVyZS4gU3RhbmRhcmQgZnV6emluZyBhbmQgS0FTQU4gd291bGQgYmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyB0aGUgbG9naWNhbCBjb3JyZWN0bmVzcyBhbmQgbWVtb3J5IHNhZmV0eSBvZiB0aGlzIHBhdGNoLiBUaW1lIHRvIG1vdmUgb24gYW5kIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIHRvIHRyYWNrIHBlcm1pdHRlZCBhY2Nlc3MgdHlwZXMgKHJlYWQgdnMgd3JpdGUpIGZvciBjYWNoZWQgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzc2VzIChHUEEpIGR1cmluZyBwYWdlIGZhdWx0IGVtdWxhdGlvbiAocmVwbGFjaW5nIGBib29sIGdwYV9hdmFpbGFibGVgIHdpdGggYHU2NCBncGFfYWNjZXNzYCBpbiBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgKS5cblxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcGF0aHMuIGBjdHh0LVx1MDAzZWdwYV9hY2Nlc3NgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBpbiBgaW5pdF9lbXVsYXRlX2N0eHQoKWAgYW5kIHByb3Blcmx5IHNldCBpbiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKWAuIFRoZXJlIGFyZSBubyBuZXcgb3IgbW9kaWZpZWQga2VybmVsLXRvLXVzZXIgY29waWVzLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgYnVmZmVycy5cbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IFRoZSBtb2RpZmljYXRpb25zIHNvbGVseSBhZmZlY3QgaW50ZXJuYWwgcGVybWlzc2lvbiBjaGVja2luZyBhbmQgY29udHJvbCBmbG93IHdpdGhpbiBLVk0gTU1JTy9wYWdlIGZhdWx0IGVtdWxhdGlvbi4gU3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGtlcm5lbHMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBpZiBhbnkgYXJpc2UuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMgdG8gdHJhY2sgcGVybWl0dGVkIGFjY2VzcyB0eXBlcyAocmVhZCB2cyB3cml0ZSkgZm9yIGNhY2hlZCBHdWVzdCBQaHlzaWNhbCBBZGRyZXNzZXMgKEdQQSkgZHVyaW5nIHBhZ2UgZmF1bHQgZW11bGF0aW9uIChyZXBsYWNpbmcgYGJvb2wgZ3BhX2F2YWlsYWJsZWAgd2l0aCBgdTY0IGdwYV9hY2Nlc3NgIGluIGBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dGApLlxuXG4tIEtNU0FOIEFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocy4gYGN0eHQtXHUwMDNlZ3BhX2FjY2Vzc2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgcHJvcGVybHkgc2V0IGluIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbigpYC4gVGhlcmUgYXJlIG5vIG5ldyBvciBtb2RpZmllZCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLlxuLSBLQVNBTiAvIFN0YW5kYXJkIERldGVjdG9yczogVGhlIG1vZGlmaWNhdGlvbnMgc29sZWx5IGFmZmVjdCBpbnRlcm5hbCBwZXJtaXNzaW9uIGNoZWNraW5nIGFuZCBjb250cm9sIGZsb3cgd2l0aGluIEtWTSBNTUlPL3BhZ2UgZmF1bHQgZW11bGF0aW9uLiBTdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcga2VybmVscyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGlmIGFueSBhcmlzZS5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjEyLjI5NTY3MzkxM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjM4ODg3NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9wYWdlX2ZhdWx0XCIsXG4gICAgXCJ4ODZfZW11bGF0ZV9pbnN0cnVjdGlvblwiLFxuICAgIFwia3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSdzIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMgdG8gdHJhY2sgcGVybWl0dGVkIGFjY2VzcyB0eXBlcyAocmVhZCB2cyB3cml0ZSkgZm9yIGNhY2hlZCBHdWVzdCBQaHlzaWNhbCBBZGRyZXNzZXMgKEdQQSkgZHVyaW5nIHBhZ2UgZmF1bHQgZW11bGF0aW9uIChyZXBsYWNpbmcgYGJvb2wgZ3BhX2F2YWlsYWJsZWAgd2l0aCBgdTY0IGdwYV9hY2Nlc3NgIGluIGBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dGApLlxcblxcbi0gS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBgY3R4dC1cXHUwMDNlZ3BhX2FjY2Vzc2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgcHJvcGVybHkgc2V0IGluIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbigpYC4gVGhlcmUgYXJlIG5vIG5ldyBvciBtb2RpZmllZCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLlxcbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IFRoZSBtb2RpZmljYXRpb25zIHNvbGVseSBhZmZlY3QgaW50ZXJuYWwgcGVybWlzc2lvbiBjaGVja2luZyBhbmQgY29udHJvbCBmbG93IHdpdGhpbiBLVk0gTU1JTy9wYWdlIGZhdWx0IGVtdWxhdGlvbi4gU3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGtlcm5lbHMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBpZiBhbnkgYXJpc2UuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzZWN1cml0eS9wZXJtaXNzaW9uIGNoZWNraW5nIGlzc3VlIGluIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGJ5IHRyYWNraW5nIHBlcm1pdHRlZCBlbXVsYXRlZCBhY2Nlc3NlcyAocmVhZCB2cyB3cml0ZSkgZm9yIGNhY2hlZCBHUEFzIHJhdGhlciB0aGFuIHJldXNpbmcgdGhlIEdQQSB1bmNvbmRpdGlvbmFsbHkuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBjb3JlIEtWTSBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMgb24geDg2LCB3aGljaCBpcyBmdWxseSB0ZXN0YWJsZSBhbmQgZnV6emFibGUgdmlhIEtWTSBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjEyLjI5NTY3ODc5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MDk1NzE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIzYTQ0Njk2NTBlMWEzODAyYzRlNTA1YmE2YWM2YTUxMTNjYTNmZTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDA6MDQ6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbmluZGV4IDNlMzc1YWYxNWMwMzUuLjEwODg2YmVhODJjOTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbkBAIC0zNTQsOCArMzU0LDggQEAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQge1xcbiBcXHRib29sIGhhdmVfZXhjZXB0aW9uO1xcbiBcXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247XFxuIFxcbi1cXHQvKiBHUEEgYXZhaWxhYmxlICovXFxuLVxcdGJvb2wgZ3BhX2F2YWlsYWJsZTtcXG4rXFx0LyogU2F2ZWQgR1BBIGFuZCBwZXJtaXR0ZWQgZW11bGF0ZWQgYWNjZXNzZXMuICovXFxuK1xcdHU2NCBncGFfYWNjZXNzO1xcbiBcXHRncGFfdCBncGFfdmFsO1xcbiBcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5pbmRleCAwNjRlY2MzM2I5MjY3Li45NWI5ZWFjOTk2MmE4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuQEAgLTY2MzIsNiArNjYzMiw5IEBAIGludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyXFxuIFxcdFxcdHJldHVybiByO1xcbiBcXG4gZW11bGF0ZTpcXG4rXFx0aWYgKGRpcmVjdCBcXHUwMDI2XFx1MDAyNiAoZXJyb3JfY29kZSBcXHUwMDI2IFBGRVJSX1dSSVRFX01BU0spKVxcbitcXHRcXHRlbXVsYXRpb25fdHlwZSB8PSBFTVVMVFlQRV9QRl9XUklURTtcXG4rXFxuIFxcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGluc25fbGVuKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5pbmRleCA3OTQ2OGRkZmU0NzM2Li5hYTVkZWI3YzczYWEyIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbkBAIC01MDg4LDggKzUwODgsMTMgQEAgc3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXFxuIFxcdCAqIE5vdGUsIHRoaXMgY2Fubm90IGJlIHVzZWQgb24gc3RyaW5nIG9wZXJhdGlvbnMgc2luY2Ugc3RyaW5nXFxuIFxcdCAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRlxcbiBcXHQgKiBvY2N1cnJlZC5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlXFxuK1xcdCAqIHRoZSBHUEEgZm9yIHdyaXRlcyBvbmx5IGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgd3JpdGUgYWNjZXNzO1xcbitcXHQgKiBvdGhlcndpc2UsIHJlY2hlY2sgcGVybWlzc2lvbnMgZm9yIHRoZSBkZWNvZGVkIGFjY2Vzcy5cXG4gXFx0ICovXFxuLVxcdGlmIChjdHh0LVxcdTAwM2VncGFfYXZhaWxhYmxlIFxcdTAwMjZcXHUwMDI2IGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmICgoY3R4dC1cXHUwMDNlZ3BhX2FjY2VzcyBcXHUwMDI2ICh3cml0ZSA/IEFDQ19XUklURV9NQVNLIDogQUNDX1JFQURfTUFTSykpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgKGFkZHIgXFx1MDAyNiB+UEFHRV9NQVNLKSA9PSAoY3R4dC1cXHUwMDNlZ3BhX3ZhbCBcXHUwMDI2IH5QQUdFX01BU0spKSB7XFxuIFxcdFxcdGdwYSA9IGN0eHQtXFx1MDAzZWdwYV92YWw7XFxuIFxcdFxcdHJldCA9IHZjcHVfaXNfbW1pb19ncGEodmNwdSwgYWRkciwgZ3BhLCB3cml0ZSk7XFxuQEAgLTU5MzgsNyArNTk0Myw3IEBAIHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdGt2bV94ODZfY2FsbChnZXRfY3NfZGJfbF9iaXRzKSh2Y3B1LCBcXHUwMDI2Y3NfZGIsIFxcdTAwMjZjc19sKTtcXG4gXFxuLVxcdGN0eHQtXFx1MDAzZWdwYV9hdmFpbGFibGUgPSBmYWxzZTtcXG4rXFx0Y3R4dC1cXHUwMDNlZ3BhX2FjY2VzcyA9IDA7XFxuIFxcdGN0eHQtXFx1MDAzZWVmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpO1xcbiBcXHRjdHh0LVxcdTAwM2V0ZiA9IChjdHh0LVxcdTAwM2VlZmxhZ3MgXFx1MDAyNiBYODZfRUZMQUdTX1RGKSAhPSAwO1xcbiBcXG5AQCAtNjQ1NCw3ICs2NDU5LDEwIEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuIFxcbiBcXHRcXHQvKiBXaXRoIHNoYWRvdyBwYWdlIHRhYmxlcywgY3IyIGNvbnRhaW5zIGEgR1ZBIG9yIG5HUEEuICovXFxuIFxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLm1tdS1cXHUwMDNlcm9vdF9yb2xlLmRpcmVjdCkge1xcbi1cXHRcXHRcXHRjdHh0LVxcdTAwM2VncGFfYXZhaWxhYmxlID0gdHJ1ZTtcXG4rXFx0XFx0XFx0LyogQSB3cml0ZSBmYXVsdCBjYW4gcmVxdWlyZSBhIHJlYWQgZm9yIFJNVyBlbXVsYXRpb24uICovXFxuK1xcdFxcdFxcdGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3MgPSBBQ0NfUkVBRF9NQVNLO1xcbitcXHRcXHRcXHRpZiAoZW11bGF0aW9uX3R5cGUgXFx1MDAyNiBFTVVMVFlQRV9QRl9XUklURSlcXG4rXFx0XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZ3BhX2FjY2VzcyB8PSBBQ0NfV1JJVEVfTUFTSztcXG4gXFx0XFx0XFx0Y3R4dC1cXHUwMDNlZ3BhX3ZhbCA9IGNyMl9vcl9ncGE7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oXFxuaW5kZXggMGY1OTE5YjA5MmU0Ny4uNjY3NDY1NjgwY2NkZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmhcXG5AQCAtNDA3LDYgKzQwNyw4IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2VcXG4gICpcXHRcXHQgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuXFxuICAqXFxuKyAqIEVNVUxUWVBFX1BGX1dSSVRFIC0gU2V0IHdpdGggRU1VTFRZUEVfUEYgd2hlbiBoYXJkd2FyZSByZXBvcnRzIGEgd3JpdGUgYWNjZXNzLlxcbisgKlxcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XFxuICAqXFx0XFx0XFx0XFx0IHN0YXRlIGFuZCBpbmplY3Qgc2luZ2xlLXN0ZXAgI0RCcyBhZnRlciBza2lwcGluZ1xcbiAgKlxcdFxcdFxcdFxcdCBhbiBpbnN0cnVjdGlvbiAoYWZ0ZXIgY29tcGxldGluZyB1c2Vyc3BhY2UgSS9PKS5cXG5AQCAtNDQ1LDYgKzQ0Nyw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxIFxcdTAwM2NcXHUwMDNjIDcpXFxuICNkZWZpbmUgRU1VTFRZUEVfV1JJVEVfUEZfVE9fU1BcXHQgICAgKDEgXFx1MDAzY1xcdTAwM2MgOClcXG4gI2RlZmluZSBFTVVMVFlQRV9TS0lQX1NPRlRfSU5UXFx0ICAgICgxIFxcdTAwM2NcXHUwMDNjIDkpXFxuKyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEVcXHQgICAgKDEgXFx1MDAzY1xcdTAwM2MgMTApXFxuIFxcbiAjZGVmaW5lIEVNVUxUWVBFX1NFVF9TT0ZUX0lOVF9WRUNUT1IodilcXHQoKHUzMikoKHYpIFxcdTAwMjYgMHhmZikgXFx1MDAzY1xcdTAwM2MgMTYpXFxuICNkZWZpbmUgRU1VTFRZUEVfR0VUX1NPRlRfSU5UX1ZFQ1RPUihlKVxcdCgoKGUpIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4ZmYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjEzLjg2NzI3MjA1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzU2NzkyMDU2NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fbW11X3BhZ2VfZmF1bHRcIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCIsXG4gICAgXCJrdm1fZW11bGF0ZV9pbnN0cnVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2VjdXJpdHkvcGVybWlzc2lvbiBjaGVja2luZyBpc3N1ZSBpbiBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBieSB0cmFja2luZyBwZXJtaXR0ZWQgZW11bGF0ZWQgYWNjZXNzZXMgKHJlYWQgdnMgd3JpdGUpIGZvciBjYWNoZWQgR1BBcyByYXRoZXIgdGhhbiByZXVzaW5nIHRoZSBHUEEgdW5jb25kaXRpb25hbGx5LiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIG9uIHg4Niwgd2hpY2ggaXMgZnVsbHkgdGVzdGFibGUgYW5kIGZ1enphYmxlIHZpYSBLVk0gaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiM2E0NDY5NjUwZTFhMzgwMmM0ZTUwNWJhNmFjNmE1MTEzY2EzZmU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDA6MDQ6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaCBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5pbmRleCAzZTM3NWFmMTVjMDM1Li4xMDg4NmJlYTgyYzkxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbisrKyBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5AQCAtMzU0LDggKzM1NCw4IEBAIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IHtcbiBcdGJvb2wgaGF2ZV9leGNlcHRpb247XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247XG4gXG4tXHQvKiBHUEEgYXZhaWxhYmxlICovXG4tXHRib29sIGdwYV9hdmFpbGFibGU7XG4rXHQvKiBTYXZlZCBHUEEgYW5kIHBlcm1pdHRlZCBlbXVsYXRlZCBhY2Nlc3Nlcy4gKi9cbitcdHU2NCBncGFfYWNjZXNzO1xuIFx0Z3BhX3QgZ3BhX3ZhbDtcbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjk1YjllYWM5OTYyYTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNjYzMiw2ICs2NjMyLDkgQEAgaW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJcbiBcdFx0cmV0dXJuIHI7XG4gXG4gZW11bGF0ZTpcbitcdGlmIChkaXJlY3QgXHUwMDI2XHUwMDI2IChlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9XUklURV9NQVNLKSlcbitcdFx0ZW11bGF0aW9uX3R5cGUgfD0gRU1VTFRZUEVfUEZfV1JJVEU7XG4rXG4gXHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgY3IyX29yX2dwYSwgZW11bGF0aW9uX3R5cGUsIGluc24sXG4gXHRcdFx0XHQgICAgICAgaW5zbl9sZW4pO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDc5NDY4ZGRmZTQ3MzYuLmFhNWRlYjdjNzNhYTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTUwODgsOCArNTA4OCwxMyBAQCBzdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKnZhbCxcbiBcdCAqIE5vdGUsIHRoaXMgY2Fubm90IGJlIHVzZWQgb24gc3RyaW5nIG9wZXJhdGlvbnMgc2luY2Ugc3RyaW5nXG4gXHQgKiBvcGVyYXRpb24gdXNpbmcgcmVwIHdpbGwgb25seSBoYXZlIHRoZSBpbml0aWFsIEdQQSBmcm9tIHRoZSBOUEZcbiBcdCAqIG9jY3VycmVkLlxuK1x0ICpcbitcdCAqIFRoZSBndWVzdCBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBpbnN0cnVjdGlvbiBzaW5jZSB0aGUgZmF1bHQuICBSZXVzZVxuK1x0ICogdGhlIEdQQSBmb3Igd3JpdGVzIG9ubHkgaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSB3cml0ZSBhY2Nlc3M7XG4rXHQgKiBvdGhlcndpc2UsIHJlY2hlY2sgcGVybWlzc2lvbnMgZm9yIHRoZSBkZWNvZGVkIGFjY2Vzcy5cbiBcdCAqL1xuLVx0aWYgKGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSBcdTAwMjZcdTAwMjYgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAoKGN0eHQtXHUwMDNlZ3BhX2FjY2VzcyBcdTAwMjYgKHdyaXRlID8gQUNDX1dSSVRFX01BU0sgOiBBQ0NfUkVBRF9NQVNLKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgKGFkZHIgXHUwMDI2IH5QQUdFX01BU0spID09IChjdHh0LVx1MDAzZWdwYV92YWwgXHUwMDI2IH5QQUdFX01BU0spKSB7XG4gXHRcdGdwYSA9IGN0eHQtXHUwMDNlZ3BhX3ZhbDtcbiBcdFx0cmV0ID0gdmNwdV9pc19tbWlvX2dwYSh2Y3B1LCBhZGRyLCBncGEsIHdyaXRlKTtcbkBAIC01OTM4LDcgKzU5NDMsNyBAQCBzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgXHUwMDI2Y3NfZGIsIFx1MDAyNmNzX2wpO1xuIFxuLVx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gZmFsc2U7XG4rXHRjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgPSAwO1xuIFx0Y3R4dC1cdTAwM2VlZmxhZ3MgPSBrdm1fZ2V0X3JmbGFncyh2Y3B1KTtcbiBcdGN0eHQtXHUwMDNldGYgPSAoY3R4dC1cdTAwM2VlZmxhZ3MgXHUwMDI2IFg4Nl9FRkxBR1NfVEYpICE9IDA7XG4gXG5AQCAtNjQ1NCw3ICs2NDU5LDEwIEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4gXG4gXHRcdC8qIFdpdGggc2hhZG93IHBhZ2UgdGFibGVzLCBjcjIgY29udGFpbnMgYSBHVkEgb3IgbkdQQS4gKi9cbiBcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5tbXUtXHUwMDNlcm9vdF9yb2xlLmRpcmVjdCkge1xuLVx0XHRcdGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSA9IHRydWU7XG4rXHRcdFx0LyogQSB3cml0ZSBmYXVsdCBjYW4gcmVxdWlyZSBhIHJlYWQgZm9yIFJNVyBlbXVsYXRpb24uICovXG4rXHRcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzID0gQUNDX1JFQURfTUFTSztcbitcdFx0XHRpZiAoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX1BGX1dSSVRFKVxuK1x0XHRcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzIHw9IEFDQ19XUklURV9NQVNLO1xuIFx0XHRcdGN0eHQtXHUwMDNlZ3BhX3ZhbCA9IGNyMl9vcl9ncGE7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5pbmRleCAwZjU5MTliMDkyZTQ3Li42Njc0NjU2ODBjY2RmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmhcbkBAIC00MDcsNiArNDA3LDggQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbiAgKiBFTVVMVFlQRV9QRiAtIFNldCB3aGVuIGFuIGludGVyY2VwdGVkICNQRiB0cmlnZ2VycyB0aGUgZW11bGF0aW9uLCBpbiB3aGljaCBjYXNlXG4gICpcdFx0IHRoZSBDUjIvR1BBIHZhbHVlIHBhc3Mgb24gdGhlIHN0YWNrIGlzIHZhbGlkLlxuICAqXG4rICogRU1VTFRZUEVfUEZfV1JJVEUgLSBTZXQgd2l0aCBFTVVMVFlQRV9QRiB3aGVuIGhhcmR3YXJlIHJlcG9ydHMgYSB3cml0ZSBhY2Nlc3MuXG4rICpcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XG4gICpcdFx0XHRcdCBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmdcbiAgKlx0XHRcdFx0IGFuIGluc3RydWN0aW9uIChhZnRlciBjb21wbGV0aW5nIHVzZXJzcGFjZSBJL08pLlxuQEAgLTQ0NSw2ICs0NDcsNyBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxIFx1MDAzY1x1MDAzYyA3KVxuICNkZWZpbmUgRU1VTFRZUEVfV1JJVEVfUEZfVE9fU1BcdCAgICAoMSBcdTAwM2NcdTAwM2MgOClcbiAjZGVmaW5lIEVNVUxUWVBFX1NLSVBfU09GVF9JTlRcdCAgICAoMSBcdTAwM2NcdTAwM2MgOSlcbisjZGVmaW5lIEVNVUxUWVBFX1BGX1dSSVRFXHQgICAgKDEgXHUwMDNjXHUwMDNjIDEwKVxuIFxuICNkZWZpbmUgRU1VTFRZUEVfU0VUX1NPRlRfSU5UX1ZFQ1RPUih2KVx0KCh1MzIpKCh2KSBcdTAwMjYgMHhmZikgXHUwMDNjXHUwMDNjIDE2KVxuICNkZWZpbmUgRU1VTFRZUEVfR0VUX1NPRlRfSU5UX1ZFQ1RPUihlKVx0KCgoZSkgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhmZilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjEzLjg2NzI3MzIwOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk2MTg0MDY5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0geDg2IFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UncmUgdG91Y2hpbmcgS1ZNJ3MgeDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBhbmQgdGhlIE1NVSBjb2RlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgZmFpcmx5IGZvY3VzZWQsIGJ1dCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvcnJlY3RuZXNzLlxuXG5UaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoZSBgZ3BhX2F2YWlsYWJsZWAgZmxhZyBpbiB0aGUgYHg4Nl9lbXVsYXRlX2N0eHRgIHN0cnVjdHVyZS4gSXQncyBiZWVuIHJlcGxhY2VkIHdpdGggYGdwYV9hY2Nlc3NgLCB3aGljaCBpcyBub3cgYSBgdTY0YC4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgdGhhdCB0aGUgYWNjZXNzIGNvbnRyb2wgaXMgYmVjb21pbmcgbW9yZSBncmFudWxhci4gTXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmaWVsZCB0ZWxscyBtZSB0aGF0IGl0IGlzIGxpa2VseSB0byBiZSBhIGNvbWJpbmF0aW9uIG9mIHJlYWQgYW5kIHdyaXRlIGJpdHMuIFxuXG5UaGUgY2hhbmdlcyBpbiBga3ZtX21tdV9wYWdlX2ZhdWx0KClgIHNldHRpbmcgYEVNVUxUWVBFX1BGX1dSSVRFYCBiYXNlZCBvbiB0aGUgZmF1bHQgdHlwZSAoYFBGRVJSX1dSSVRFX01BU0tgKSBsb29rIGV4cGVjdGVkLiBUaGF0IHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gdHJhY2sgd3JpdGUgYWNjZXNzIGR1cmluZyBlbXVsYXRpb24uXG5cbmBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UoKWAgbm93IHVzZXMgdGhlIG5ldyBgZ3BhX2FjY2Vzc2AgZmllbGQgYW5kIGNoZWNrcyBmb3IgYEFDQ19XUklURV9NQVNLYCBhbmQgYEFDQ19SRUFEX01BU0tgLiBUaGF0IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgYGdwYV9hY2Nlc3NgIGZpZWxkLCBJIGFzc3VtZSB0aGUgYml0bWFzayBvcGVyYXRpb25zIGFyZSB0aGUga2V5IGhlcmUuIFRoZSBpbml0aWFsaXphdGlvbiBhbmQgdXBkYXRlIG9mIGBncGFfYWNjZXNzYCBpbiB0aGUgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKClgLCBzaG93IGhvdyB0aGUgYWNjZXNzIGZsYWdzIGFyZSBiZWluZyBtYW5hZ2VkIGR1cmluZyB0aGUgZW11bGF0aW9uIHByb2Nlc3MuXG5cbkknbGwgbmVlZCB0byBkaWcgZGVlcGVyLCB0aG91Z2guIFRoZSBkZWZpbml0aW9ucyBhbmQgdXNhZ2Ugb2YgYEFDQ19SRUFEX01BU0tgIGFuZCBgQUNDX1dSSVRFX01BU0tgIGFyZSB0aGUga2V5IGhlcmUuIEFsc28sIHdoYXQgZXhhY3RseSBpcyBgRU1VTFRZUEVfUEZfV1JJVEVgPyBXaGF0IGFyZSBhbGwgdGhlIHBvdGVudGlhbCB2YWx1ZXMgb2YgYGVtdWxhdGlvbl90eXBlYD8gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggb3BlcmF0aW9ucyBoYXZlIHdyaXRlIGFjY2VzcyBhbmQgd2hpY2ggaGF2ZSByZWFkIGFjY2VzcyB0byBwcm9wZXJseSBhc3Nlc3MgdGhpcy4gSSdsbCBuZWVkIHRvIGdyZXBwZXIgdGhpcyBhbmQgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYXMgdXN1YWwsIHRvIHNlZSBob3cgdGhlc2UgbmV3IGFjY2VzcyBmbGFncyBhcmUgYmVpbmcgdXNlZCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBlbXVsYXRpb24gc3RyYXRlZ3kuIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlncy9mb2N1cyBzeW1ib2xzLiBJIGJldCB0aGVyZSBpcyBtb3JlIHRoYW4ganVzdCB0aGlzIHNtYWxsIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUzMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjIzLjQ4NTY4Mjg3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTExOTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X3BhZ2VfZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUuaD0xNDY9dm9pZCBrdm1faW5pdF9zaGFkb3dfZXB0X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZXhlY29ubHksXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQ5LVxcbmFyY2gveDg2L2t2bS9tbXUuaDoxNTA6aW50IGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJvcl9jb2RlLFxcbmFyY2gveDg2L2t2bS9tbXUuaC0xNTEtXFx0XFx0ICAgICAgIHZvaWQgKmluc24sIGludCBpbnNuX2xlbik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ4OTA9aW50IGt2bV9oYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlcnJvcl9jb2RlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTE4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDkxOTpcXHRcXHRyID0ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGZhdWx0X2FkZHJlc3MsIGVycm9yX2NvZGUsIGluc24sXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTIwLVxcdFxcdFxcdFxcdGluc25fbGVuKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjQ3ND1zdGF0aWMgaW50IGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NjYtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NTY3OmludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NjgtXFx0XFx0ICAgICAgIHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjY0MC19XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjQxOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fbW11X3BhZ2VfZmF1bHQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjY0Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk3ND1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDI0LVxcdHRyYWNlX2t2bV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMDI1OlxcdHJjID0ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjYtXFx0XFx0XFx0XFx0Y3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9ERUNPREVBU1NJU1RTKSA/XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTgzPXN0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC0xMTUtXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDoxMTY6XFx0cmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIE5VTEwsIDApO1xcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTE3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjAwNT1zdGF0aWMgaW50IGhhbmRsZV9lcHRfbWlzY29uZmlnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjAyMi1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjYwMjM6XFx0cmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEsIFBGRVJSX1JTVkRfTUFTSywgTlVMTCwgMCk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDI0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDQ6MjMuNTQwODA2NDg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAyNzUzNDI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIEVtdWxhdGlvbiBFbmdpbmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGVtdWxhdGlvbiBlbmdpbmUgaXMgd29ya2luZyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW50byB0aGUgY29yZSBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIOKAkyB0aGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgZXhlY3V0aW9uIHByb2Nlc3MsIHRoZSBtYWluIGRpc3BhdGNoIHBvaW50LiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBpbnN0cnVjdGlvbiB0eXBlcywgb3BlcmFuZCBmZXRjaGluZywgYW5kIHVsdGltYXRlbHksIHRoZSBlbXVsYXRpb24gaXRzZWxmLlxuXG5UaGVuLCBzaW5jZSB0aGlzIGlzIGFuIGVtdWxhdG9yLCBJIGhhdmUgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkuIFRoYXQgbGVhZHMgbWUgZGlyZWN0bHkgdG8gYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZWAuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGNydWNpYWwgYXNwZWN0IG9mIHRyYW5zbGF0aW5nIHRoZSBlbXVsYXRlZCBlbnZpcm9ubWVudCdzIG1lbW9yeSBhY2Nlc3NlcyB0byB0aGUgaG9zdCBtYWNoaW5lLCBtYWtpbmcgc3VyZSByZWFkcyBhbmQgd3JpdGVzIGFyZSBjb3JyZWN0bHkgaGFuZGxlZC4gVW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGlzIG1hbmFnZWQgaW4gdGhpcyBjb250ZXh0IGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBlbXVsYXRvcidzIGxpbWl0YXRpb25zLiBJIHdpbGwgYW5hbHl6ZSBob3cgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBwYWdlIGJvdW5kYXJpZXMsIGFuZCB2aXJ0dWFsLXRvLXBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24uIFRob3NlIGFyZSBteSBpbml0aWFsIHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNDoyOC41NjgzNDM4MDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNjE4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjU2Nz1pbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2MzctXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjM4OlxcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2MzktXFx0XFx0XFx0XFx0ICAgICAgIGluc25fbGVuKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01MTUzPXN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01MjI2LVxcdCAqIGFmdGVyIGNvbXBsZXRpbmcgZW11bGF0aW9uIChzZWUgdGhlIGNoZWNrIG9uIHZjcHUtXFx1MDAzZW1taW9fbmVlZGVkIGluXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjUyMjc6XFx0ICogeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKSkuXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjgtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjMzMz1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoeDg2X2RlY29kZV9lbXVsYXRlZF9pbnN0cnVjdGlvbik7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTYzMzQtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjYzMzU6aW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjMzNi1cXHRcXHRcXHQgICAgaW50IGVtdWxhdGlvbl90eXBlLCB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjU1OD1pbnQga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bGF0aW9uX3R5cGUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NTkte1xcbmFyY2gveDg2L2t2bS94ODYuYzo2NTYwOlxcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCBlbXVsYXRpb25fdHlwZSwgTlVMTCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NjEtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTY1NjQ9aW50IGt2bV9lbXVsYXRlX2luc3RydWN0aW9uX2Zyb21fYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02NTY2LXtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU2NzpcXHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgMCwgaW5zbiwgaW5zbl9sZW4pO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NTY4LX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaD0zNzE9aW50IHg4Nl9kZWNvZGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bGF0aW9uX3R5cGUsXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM3Mi1cXHRcXHRcXHRcXHQgICAgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKTtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzczOmludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM3NC1cXHRcXHRcXHQgICAgaW50IGVtdWxhdGlvbl90eXBlLCB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNDoyOC42MTU0MDkwNDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzQ0NjY4MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBLY29uZmlnIERlcGVuZGVuY2llcyBmb3IgS1ZNIHg4NioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMgS1ZNIHg4NiBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyBhcmUgcHJlc2VudCBhbmQgcHJvcGVybHkgc2V0IGZvciB0aGUgaW50ZW5kZWQgc2V0dXAuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBlbmFibGluZyBLVk07IGl0J3MgYWJvdXQgdGhlIGVudGlyZSBkZXBlbmRlbmN5IGNoYWluIHRoYXQgc3VwcG9ydHMgaXRzIGZ1bmN0aW9uYWxpdHkgb24geDg2IGFyY2hpdGVjdHVyZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4gU28sIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIHg4Ni1zcGVjaWZpYyBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgcmVzaWRlLiBJJ2xsIG5lZWQgdG8gcG9yZSBvdmVyIHRoYXQgZmlsZSBtZXRpY3Vsb3VzbHkuIExldCdzIHNlZSB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcwMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjMzLjM2MDA3OTA5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgS1ZNIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbiAgIDc6XFx0XFxuICAgODpcXHRtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuICAgOTpcXHRcXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG4gIDEwOlxcdFxcdGRlZmF1bHQgeVxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1biBvdGhlclxcbiAgMTM6XFx0XFx0ICBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cXG4gIDE0OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBWSVJUVUFMSVpBVElPTlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgS1ZNX1g4NlxcbiAgMjE6XFx0XFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbiAgMjI6XFx0XFx0c2VsZWN0IEtWTV9DT01NT05cXG4gIDIzOlxcdFxcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXFxuICAyNDpcXHRcXHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbiAgMjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcXG4gIDI2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxcbiAgMjc6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXFxuICAyODpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuICAyOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xcbiAgMzA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXFxuICAzMTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAzMjpcXHRcXHRzZWxlY3QgVkhPU1RfVEFTS1xcbiAgMzM6XFx0XFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXFxuICAzNTpcXHRcXHRzZWxlY3QgS1ZNX01NSU9cXG4gIDM2OlxcdFxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuICAzNzpcXHRcXHRzZWxlY3QgUEVSRl9FVkVOVFNcXG4gIDM4OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xcbiAgMzk6XFx0XFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXFxuICA0MDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuICA0MTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiAgNDI6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG4gIDQzOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgNDQ6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiAgNDU6XFx0XFx0c2VsZWN0IEtWTV9WRklPXFxuICA0NjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cXG4gIDQ3OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbiAgNDg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG4gIDQ5OlxcdFxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcbiAgNTA6XFx0XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcXG4gIDUxOlxcdFxcbiAgNTI6XFx0Y29uZmlnIEtWTVxcbiAgNTM6XFx0XFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlXFxuICA1NzpcXHRcXHQgIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuICBZb3Ugd2lsbCBuZWVkIGEgZmFpcmx5IHJlY2VudFxcbiAgNTg6XFx0XFx0ICBwcm9jZXNzb3IgZXF1aXBwZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBZb3Ugd2lsbCBhbHNvXFxuICA1OTpcXHRcXHQgIG5lZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm9jZXNzb3IgbW9kdWxlcyBiZWxvdy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXFxuICA2MjpcXHRcXHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNjU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIEtWTV9XRVJST1JcXG4gIDcwOlxcdFxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4gIDcxOlxcdFxcdCMgRGlzYWxsb3cgS1ZNJ3MgLVdlcnJvciBpZiBLQVNBTiBpcyBlbmFibGVkLCBlLmcuIHRvIGd1YXJkIGFnYWluc3RcXG4gIDcyOlxcdFxcdCMgcmFuZG9taXplZCBjb25maWdzIGZyb20gc2VsZWN0aW5nIEtWTV9XRVJST1I9eSwgd2hpY2ggZG9lc24ndCBwbGF5XFxuICA3MzpcXHRcXHQjIG5pY2Ugd2l0aCBLQVNBTi4gIEtBU0FOIGJ1aWxkcyBnZW5lcmF0ZXMgd2FybmluZ3MgZm9yIHRoZSBkZWZhdWx0XFxuICA3NDpcXHRcXHQjIEZSQU1FX1dBUk4sIGkuZS4gS1ZNX1dFUlJPUj15IHdpdGggS0FTQU49eSByZXF1aXJlcyBzcGVjaWFsIHR1bmluZy5cXG4gIDc1OlxcdFxcdCMgQnVpbGRpbmcgS1ZNIHdpdGggLVdlcnJvciBhbmQgS0FTQU4gaXMgc3RpbGwgZG9hYmxlIHZpYSBlbmFibGluZ1xcbiAgNzY6XFx0XFx0IyB0aGUga2VybmVsLXdpZGUgV0VSUk9SPXkuXFxuICA3NzpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODYgXFx1MDAyNlxcdTAwMjYgKChFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIUtBU0FOKSB8fCBXRVJST1IpXFxuICA3ODpcXHRcXHRoZWxwXFxuICA3OTpcXHRcXHQgIEFkZCAtV2Vycm9yIHRvIHRoZSBidWlsZCBmbGFncyBmb3IgS1ZNLlxcbiAgODA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjMzLjM2MDE4MzIzOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNjIxMDQ3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGZyb20gYGFyY2gveDg2L2t2bS9LY29uZmlnYDpcblxuKipSZXZpZXdpbmcgS2NvbmZpZzogTGluZXMgODAtMTIwKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRob3NlIGxpbmVzIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSA4MCB0aHJvdWdoIDEyMC4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aCwgSSBleHBlY3Qgd2UncmUgZGVhbGluZyB3aXRoIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB4ODYgYXJjaGl0ZWN0dXJlLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBtZW50YWxseSBwYXJzaW5nIHRoaXMgZm9yIGRlcGVuZGVuY2llcywgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kLCBvZiBjb3Vyc2UsIGFueSBuZXcgZmVhdHVyZXMgb3IgY2FwYWJpbGl0aWVzIGJlaW5nIGludHJvZHVjZWQuXG5cblJpZ2h0IG9mZiB0aGUgYmF0LCBJJ20gbG9va2luZyBmb3IgdGhlIG1haW4gS1ZNIGZlYXR1cmUgZW5hYmxlIG9wdGlvbnMsIHRoZSBjb3JlIGBDT05GSUdfS1ZNYCBhbmQgd2hhdCBpdCBkZXBlbmRzIG9uLiBBbnl0aGluZyBzcGVjaWZpYyB0byB0aGUgeDg2IGFyY2hpdGVjdHVyZSBzaG91bGQgYmUgZGVmaW5lZCBuZWFyIGl0LCBvciBkZXBlbmRlbnQgb24gaXQuIFRoZSBzdHJ1Y3R1cmUgaXMgdXN1YWxseSBwcmV0dHkgY2xlYXI6IGJvb2wgb3B0aW9ucyBmb3IgY29yZSBmdW5jdGlvbmFsaXR5LCB0cmlzdGF0ZSBvcHRpb25zIGZvciBwb3RlbnRpYWxseSBtb2R1bGFyIGNvbXBvbmVudHMsIGFuZCBoZWxwIHRleHQgdGhhdCBkZXNjcmliZXMgd2hhdCBlYWNoIG9wdGlvbiBhY3R1YWxseSAqZG9lcyouIEkgZXhwZWN0IHNvbWUgbmVzdGVkICdpZicgc3RhdGVtZW50cyB0byBkZWZpbmUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKGxpa2UgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucykuIEknbGwgYmUgY2hlY2tpbmcgdG8gc2VlIHdoYXQgdGhleSBhcmUuXG5cbkkgYWxzbyBhbnRpY2lwYXRlIGxvb2tpbmcgZm9yIGFueXRoaW5nIGFyb3VuZCBzcGVjaWZpYyBoYXJkd2FyZSBleHRlbnNpb25zLCBsaWtlIEludGVsJ3MgVlQteCBvciBBTUQtVi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgaGVyZSwgb3IgbWF5YmUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgcGFnZSB0YWJsZXMgKEVQVCk/IEFyZSB0aGVyZSBhbnkgbmV3IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgZGVmaW5lZD8gU2VjdXJpdHkgaW1wbGljYXRpb25zIHdpbGwgYmUgbmVhciB0aGUgdG9wIG9mIG15IGxpc3QsIGVzcGVjaWFsbHkgYW55dGhpbmcgcmVsYXRlZCB0byBtaXRpZ2F0aW9ucyBmb3IgdnVsbmVyYWJpbGl0aWVzIGxpa2UgU3BlY3RyZSBvciBNZWx0ZG93biwgaW4gdGhlIEtWTSBjb250ZXh0LiBUaGUgcmVjZW50IHdvcmsgb24gaGFyZHdhcmUgbWl0aWdhdGlvbnMgcHJvYmFibHkgaGFzIGEgaGFuZCBpbiB0aGlzIGFyZWEuXG5cbkFzIEkgcmVhZCwgSSdsbCBiZSBhc3Nlc3NpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlc2Ugb3B0aW9ucyBvbiBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBjb21wYXRpYmlsaXR5LiBJJ2xsIGJlIG5vdGluZyBhbnkgY2hhbmdlcyB0aGF0IG1pZ2h0IHJlcXVpcmUgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGR1cmluZyBhIGtlcm5lbCB1cGdyYWRlIG9yIHdoZW4gY29uZmlndXJpbmcgYSBuZXcgS1ZNIGVudmlyb25tZW50LiBXaGF0IEknbSBob3BpbmcgdG8gc2VlIGlzIGNsYXJpdHk6IHdlbGwtZG9jdW1lbnRlZCBvcHRpb25zIHdpdGggY2xlYXIgZGVwZW5kZW5jaWVzIGFuZCBhIGxvZ2ljYWwgc3RydWN0dXJlLiBBIGNsZWFuIGBLY29uZmlnYCBtYWtlcyBmb3IgZWFzaWVyIG1haW50ZW5hbmNlIGFuZCBtb3JlIHJvYnVzdCBjb25maWd1cmF0aW9ucyBkb3duIHRoZSBsaW5lLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjM2LjcyMjI4OTk1NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MTpcXHRcXHQgIElmIGluIGRvdWJ0LCBzYXkgXFxcIk5cXFwiLlxcbiAgODI6XFx0XFxuICA4MzpcXHRjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbiAgODQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbiAgODU6XFx0XFx0ZGVwZW5kcyBvbiBFWFBFUlRcXG4gIDg2OlxcdFxcdGRlcGVuZHMgb24gS1ZNX1g4NiBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG4gIDg3OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAgODg6XFx0XFx0aGVscFxcbiAgODk6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMuICBDdXJyZW50bHksIHNvZnR3YXJlLVxcbiAgOTA6XFx0XFx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxcbiAgOTE6XFx0XFx0ICBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELiAgQXR0ZW1wdGluZyB0byBydW4gYSBcXFwicmVhbFxcXCIgVk0gd29ya2xvYWQgYXMgYVxcbiAgOTI6XFx0XFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiTlxcXCIuXFxuICA5NTpcXHRcXG4gIDk2OlxcdGNvbmZpZyBLVk1fSU5URUxcXG4gIDk3OlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAgOTg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgSUEzMl9GRUFUX0NUTFxcbiAgOTk6XFx0XFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxcbiAxMDA6XFx0XFx0aGVscFxcbiAxMDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJ3MgVlRcXG4gMTAyOlxcdFxcdCAgZXh0ZW5zaW9ucywgYS5rLmEuIFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zIChWTVgpLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAxMDU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0taW50ZWwuXFxuIDEwNjpcXHRcXG4gMTA3OlxcdGNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG4gMTA4OlxcdCAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuIDEwOTpcXHQgICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFxcdTAwMjZcXHUwMDI2IEVYUEVSVFxcbiAxMTA6XFx0ICAgICAgICBoZWxwXFxuIDExMTpcXHQgICAgICAgICAgQ2hlY2tzIHRoYXQgS1ZNJ3MgcGFnZSB0YWJsZSBtYW5hZ2VtZW50IGNvZGUgd2lsbCBub3QgaW5jb3JyZWN0bHlcXG4gMTEyOlxcdCAgICAgICAgICBsZXQgZ3Vlc3RzIHJlY2VpdmUgYSB2aXJ0dWFsaXphdGlvbiBleGNlcHRpb24uICBWaXJ0dWFsaXphdGlvblxcbiAxMTM6XFx0ICAgICAgICAgIGV4Y2VwdGlvbnMgd2lsbCBiZSB0cmFwcGVkIGJ5IHRoZSBoeXBlcnZpc29yIHJhdGhlciB0aGFuIGluamVjdGVkXFxuIDExNDpcXHQgICAgICAgICAgaW4gdGhlIGd1ZXN0LlxcbiAxMTU6XFx0XFxuIDExNjpcXHQgICAgICAgICAgTm90ZTogc29tZSBDUFVzIGFwcGVhciB0byBnZW5lcmF0ZSBzcHVyaW91cyBFUFQgVmlvbGF0aW9ucyAjVkVzXFxuIDExNzpcXHQgICAgICAgICAgdGhhdCB0cmlnZ2VyIEtWTSdzIFdBUk4sIGluIHBhcnRpY3VsYXIgd2l0aCBlcHRhZD0wIGFuZC9vciBuZXN0ZWRcXG4gMTE4OlxcdCAgICAgICAgICB2aXJ0dWFsaXphdGlvbi5cXG4gMTE5OlxcdFxcbiAxMjA6XFx0ICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEyMTpcXHRcXG4gMTIyOlxcdGNvbmZpZyBYODZfU0dYX0tWTVxcbiAxMjM6XFx0XFx0Ym9vbCBcXFwiU29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblxcXCJcXG4gMTI0OlxcdFxcdGRlcGVuZHMgb24gWDg2X1NHWCBcXHUwMDI2XFx1MDAyNiBLVk1fSU5URUxcXG4gMTI1OlxcdFxcdGhlbHBcXG4gMTI2OlxcdFxcbiAxMjc6XFx0XFx0ICBFbmFibGVzIEtWTSBndWVzdHMgdG8gY3JlYXRlIFNHWCBlbmNsYXZlcy5cXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0ICBUaGlzIGluY2x1ZGVzIHN1cHBvcnQgdG8gZXhwb3NlIFxcXCJyYXdcXFwiIHVucmVjbGFpbWFibGUgZW5jbGF2ZSBtZW1vcnkgdG9cXG4gMTMwOlxcdFxcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjM2LjcyMjM1OTE0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODUyMTY2NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbW11LmNgIGFuZCBgeDg2LmNgIGFyZSBjb21waWxlZCB3aXRoaW4gdGhlIEtWTSB4ODYgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGNoZWNrIHRoZSBvYnZpb3VzIHBsYWNlOiBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQgbWFnaWMgZm9yIHRoYXQgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGxpdmVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlcGVuZGVuY3kgY2hhaW4gYW5kIGJ1aWxkIHJ1bGVzIHRoYXQgZGVmaW5lIGhvdyB0aG9zZSB0d28gc291cmNlIGZpbGVzIGdldCB0dXJuZWQgaW50byBvYmplY3QgZmlsZXMgYW5kIHRoZW4gbGlua2VkIGludG8gdGhlIGZpbmFsIEtWTSBrZXJuZWwgbW9kdWxlcy4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IGZsYWdzIGFyZSBiZWluZyB1c2VkLCBhbnkgc3BlY2lhbCBsaWJyYXJpZXMgdGhhdCBhcmUgbGlua2VkLCBhbmQgdGhlIG92ZXJhbGwgY29tcGlsYXRpb24gZmxvdy4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG93ZXIgbGV2ZWxzIG9mIHRoZSBhcmNoaXRlY3R1cmUgZ2V0IGJ1aWx0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNDozOS41NzQ1Mjk0MzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRjY2ZsYWdzLXkgKz0gLUkgJChzcmN0cmVlKS9hcmNoL3g4Ni9rdm1cXG4gICA0OlxcdGNjZmxhZ3MtJChDT05GSUdfS1ZNX1dFUlJPUikgKz0gLVdlcnJvclxcbiAgIDU6XFx0XFxuICAgNjpcXHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXFxuICAgNzpcXHRcXG4gICA4OlxcdGt2bS15XFx0XFx0XFx0Kz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRrdm0tJChDT05GSUdfWDg2XzY0KSArPSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXFxuICAxMjpcXHRrdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuICAxMzpcXHRrdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgKz0gaHlwZXJ2Lm9cXG4gIDE0OlxcdGt2bS0kKENPTkZJR19LVk1fWEVOKVxcdCs9IHhlbi5vXFxuICAxNTpcXHRrdm0tJChDT05GSUdfS1ZNX1NNTSlcXHQrPSBzbW0ub1xcbiAgMTY6XFx0XFxuICAxNzpcXHRrdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXgubyB2bXgvdm1lbnRlci5vIHZteC9wbXVfaW50ZWwubyB2bXgvdm1jczEyLm8gXFxcXFxcbiAgMTg6XFx0XFx0XFx0XFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cXG4gIDE5OlxcdFxcbiAgMjA6XFx0a3ZtLWludGVsLSQoQ09ORklHX1g4Nl9TR1hfS1ZNKVxcdCs9IHZteC9zZ3gub1xcbiAgMjE6XFx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXFx0Kz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xcbiAgMjI6XFx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuICAyMzpcXHRcXG4gIDI0OlxcdGt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xcbiAgMjU6XFx0XFxuICAyNjpcXHRrdm0tYW1kLSQoQ09ORklHX0tWTV9BTURfU0VWKVxcdCs9IHN2bS9zZXYub1xcbiAgMjc6XFx0a3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHN2bS9oeXBlcnYub1xcbiAgMjg6XFx0XFxuICAyOTpcXHRpZmRlZiBDT05GSUdfSFlQRVJWXFxuICAzMDpcXHRrdm0teVxcdFxcdFxcdCs9IGt2bV9vbmh5cGVydi5vXFxuICAzMTpcXHRrdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG4gIDMyOlxcdGt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm1fb25oeXBlcnYub1xcbiAgMzM6XFx0ZW5kaWZcXG4gIDM0OlxcdFxcbiAgMzU6XFx0b2JqLSQoQ09ORklHX0tWTV9YODYpXFx0Kz0ga3ZtLm9cXG4gIDM2OlxcdG9iai0kKENPTkZJR19LVk1fSU5URUwpXFx0Kz0ga3ZtLWludGVsLm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19LVk1fQU1EKVxcdCs9IGt2bS1hbWQub1xcbiAgMzg6XFx0XFxuICAzOTpcXHRBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxcbiAgNDA6XFx0JChvYmopL3N2bS92bWVudGVyLm86ICQob2JqKS9rdm0tYXNtLW9mZnNldHMuaFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNDozOS41NzQ1OTQ0MTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTg3NzgzODc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0geDg2IEluc3RydWN0aW9uIEVtdWxhdGlvbiBhbmQgUGFnZSBGYXVsdCBIYW5kbGluZzogQSBGdXp6aW5nIE9wcG9ydHVuaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgY2hhbmdlIGluIEtWTSdzIHg4NiBNTVUgYW5kIGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYy4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byBob3cgR1BBIGNhY2hpbmcgYW5kIHBlcm1pc3Npb24gY2hlY2tzIHdvcmsgZHVyaW5nIGluc3RydWN0aW9uIGVtdWxhdGlvbiwgZXNwZWNpYWxseSB3aGVuIGRpcmVjdCBNTVUgbW9kZXMgbGlrZSBURFAsIE5QVCwgb3IgRVBUIGFyZSBpbiBwbGF5LiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYW4gYXNzdW1wdGlvbiB0aGF0IGEgZmF1bHRlZCBHUEEgY291bGQgYmUgcmUtdXNlZCwgd2l0aG91dCBkaWZmZXJlbnRpYXRpbmcgd2hldGhlciB0aGUgcGFnZSBmYXVsdCB3YXMgYSByZWFkIG9yIGEgd3JpdGUuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG1vcmUgcm9idXN0IG1lY2hhbmlzbSB0byBjb3JyZWN0bHkgaGFuZGxlIHJlYWQvd3JpdGUgcGVybWlzc2lvbnMuXG5cbkVzc2VudGlhbGx5LCBga3ZtX21tdV9wYWdlX2ZhdWx0YCBub3cgc2V0cyBgRU1VTFRZUEVfUEZfV1JJVEVgIGlmIGl0J3MgYSB3cml0ZSBmYXVsdC4gVGhlbiwgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCB0cmFja3MgYWNjZXNzIHR5cGUgKHJlYWQgb3Igd3JpdGUpLiBGaW5hbGx5LCBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCBjaGVja3MgdGhlc2UgYWNjZXNzIHR5cGVzIHRvIGRldGVybWluZSBpZiBhIEdQQSBpcyBzdGlsbCB2YWxpZCBmb3IgcmV1c2UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHBlcm1pc3Npb24gYnlwYXNzZXMgaWYgZ3Vlc3QgY29kZSBtb2RpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gYmV0d2VlbiB0aGUgZmF1bHQgYW5kIGVtdWxhdGlvbiBvciBpZiBhbiBpbnN0cnVjdGlvbiByZWFkcyBmcm9tIGFuIGFkZHJlc3MgdGhhdCBjYXVzZWQgYSB3cml0ZSBmYXVsdC5cblxuVGhpcyBjaGFuZ2UgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCB0b3VjaGVzIGEgZnVuZGFtZW50YWwgYXNwZWN0IG9mIEtWTSdzIGluc3RydWN0aW9uIGVtdWxhdGlvbiwgd2hpY2ggaXMgaGVhdmlseSB1c2VkIGZvciBNTUlPIGVtdWxhdGlvbiwgaGFuZGxpbmcgd3JpdGUtcHJvdGVjdGVkIHBhZ2VzLCBldGMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBLVk0gaXMgc3RhbmRhcmQgb24geDg2LCBhbmQgZnV6emluZyB3aXRoIHN5emthbGxlciB1c2luZyBgL2Rldi9rdm1gLCBgS1ZNX1JVTmAsIGFuZCBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT05gIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byB0YXJnZXQgdGhpcy5cblxuVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOiBga3ZtX21tdV9wYWdlX2ZhdWx0YCwgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCwgYW5kIGBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbmAuIFdlIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EYC4gV2UndmUgZG91YmxlLWNoZWNrZWQgdGhlIGRlcGVuZGVuY2llcyBpbiBgS2NvbmZpZ2AsIGFuZCBldmVyeXRoaW5nIGxvb2tzIHNvbGlkLiBXZSBzaG91bGQgYmUgYWJsZSB0byBjb3ZlciBhIHZhcmlldHkgb2YgY29uZmlndXJhdGlvbnMuXG5cblRoZSBib3R0b20gbGluZSBpcyB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBjaGFuZ2Ugd2l0aCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBwcm90ZWN0aW9uLCBtYWtpbmcgaXQgYSBoaWdoLXZhbHVlIGZ1enppbmcgdGFyZ2V0LiBXZSBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLCBjb25maWdzLCBhbmQgdGhlIG1lY2hhbmlzbS4gTGV0J3MgbW92ZSBmb3J3YXJkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3MCwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDQ6NDkuNDUyNDM2OTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDAzNzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fbW11X3BhZ2VfZmF1bHRcIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCIsXG4gICAgXCJrdm1fZW11bGF0ZV9pbnN0cnVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2VjdXJpdHkvcGVybWlzc2lvbiBjaGVja2luZyBpc3N1ZSBpbiBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBieSB0cmFja2luZyBwZXJtaXR0ZWQgZW11bGF0ZWQgYWNjZXNzZXMgKHJlYWQgdnMgd3JpdGUpIGZvciBjYWNoZWQgR1BBcyByYXRoZXIgdGhhbiByZXVzaW5nIHRoZSBHUEEgdW5jb25kaXRpb25hbGx5LiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIG9uIHg4Niwgd2hpY2ggaXMgZnVsbHkgdGVzdGFibGUgYW5kIGZ1enphYmxlIHZpYSBLVk0gaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9wYWdlX2ZhdWx0XCIsXG4gICAgXCJ4ODZfZW11bGF0ZV9pbnN0cnVjdGlvblwiLFxuICAgIFwia3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNlY3VyaXR5L3Blcm1pc3Npb24gY2hlY2tpbmcgaXNzdWUgaW4gS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gYnkgdHJhY2tpbmcgcGVybWl0dGVkIGVtdWxhdGVkIGFjY2Vzc2VzIChyZWFkIHZzIHdyaXRlKSBmb3IgY2FjaGVkIEdQQXMgcmF0aGVyIHRoYW4gcmV1c2luZyB0aGUgR1BBIHVuY29uZGl0aW9uYWxseS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGNvcmUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBvbiB4ODYsIHdoaWNoIGlzIGZ1bGx5IHRlc3RhYmxlIGFuZCBmdXp6YWJsZSB2aWEgS1ZNIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDQ6NDkuNTQ2NDgxNTU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk4ODA3MTAzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjQ5LjU0NjkxNjIzOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0OTg3NjMyNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIHRvIHRyYWNrIHBlcm1pdHRlZCBhY2Nlc3MgdHlwZXMgKHJlYWQgdnMgd3JpdGUpIGZvciBjYWNoZWQgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzc2VzIChHUEEpIGR1cmluZyBwYWdlIGZhdWx0IGVtdWxhdGlvbiAocmVwbGFjaW5nIGBib29sIGdwYV9hdmFpbGFibGVgIHdpdGggYHU2NCBncGFfYWNjZXNzYCBpbiBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgKS5cXG5cXG4tIEtNU0FOIEFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocy4gYGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3NgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBpbiBgaW5pdF9lbXVsYXRlX2N0eHQoKWAgYW5kIHByb3Blcmx5IHNldCBpbiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKWAuIFRoZXJlIGFyZSBubyBuZXcgb3IgbW9kaWZpZWQga2VybmVsLXRvLXVzZXIgY29waWVzLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgYnVmZmVycy5cXG4tIEtBU0FOIC8gU3RhbmRhcmQgRGV0ZWN0b3JzOiBUaGUgbW9kaWZpY2F0aW9ucyBzb2xlbHkgYWZmZWN0IGludGVybmFsIHBlcm1pc3Npb24gY2hlY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gS1ZNIE1NSU8vcGFnZSBmYXVsdCBlbXVsYXRpb24uIFN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBrZXJuZWxzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgaWYgYW55IGFyaXNlLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzYTQ0Njk2NTBlMWEzODAyYzRlNTA1YmE2YWM2YTUxMTNjYTNmZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMDowNDoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbmluZGV4IDNlMzc1YWYxNWMwMzUuLjEwODg2YmVhODJjOTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuKysrIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbkBAIC0zNTQsOCArMzU0LDggQEAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQge1xuIFx0Ym9vbCBoYXZlX2V4Y2VwdGlvbjtcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGV4Y2VwdGlvbjtcbiBcbi1cdC8qIEdQQSBhdmFpbGFibGUgKi9cbi1cdGJvb2wgZ3BhX2F2YWlsYWJsZTtcbitcdC8qIFNhdmVkIEdQQSBhbmQgcGVybWl0dGVkIGVtdWxhdGVkIGFjY2Vzc2VzLiAqL1xuK1x0dTY0IGdwYV9hY2Nlc3M7XG4gXHRncGFfdCBncGFfdmFsO1xuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uOTViOWVhYzk5NjJhOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC02NjMyLDYgKzY2MzIsOSBAQCBpbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVyclxuIFx0XHRyZXR1cm4gcjtcbiBcbiBlbXVsYXRlOlxuK1x0aWYgKGRpcmVjdCBcdTAwMjZcdTAwMjYgKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1dSSVRFX01BU0spKVxuK1x0XHRlbXVsYXRpb25fdHlwZSB8PSBFTVVMVFlQRV9QRl9XUklURTtcbitcbiBcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcbiBcdFx0XHRcdCAgICAgICBpbnNuX2xlbik7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uYWE1ZGViN2M3M2FhMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNTA4OCw4ICs1MDg4LDEzIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxuIFx0ICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmdcbiBcdCAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRlxuIFx0ICogb2NjdXJyZWQuXG4rXHQgKlxuK1x0ICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlXG4rXHQgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIHdyaXRlIGFjY2VzcztcbitcdCAqIG90aGVyd2lzZSwgcmVjaGVjayBwZXJtaXNzaW9ucyBmb3IgdGhlIGRlY29kZWQgYWNjZXNzLlxuIFx0ICovXG4tXHRpZiAoY3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlIFx1MDAyNlx1MDAyNiBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbitcdGlmICgoY3R4dC1cdTAwM2VncGFfYWNjZXNzIFx1MDAyNiAod3JpdGUgPyBBQ0NfV1JJVEVfTUFTSyA6IEFDQ19SRUFEX01BU0spKSBcdTAwMjZcdTAwMjZcbitcdCAgICBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoYWRkciBcdTAwMjYgflBBR0VfTUFTSykgPT0gKGN0eHQtXHUwMDNlZ3BhX3ZhbCBcdTAwMjYgflBBR0VfTUFTSykpIHtcbiBcdFx0Z3BhID0gY3R4dC1cdTAwM2VncGFfdmFsO1xuIFx0XHRyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpO1xuQEAgLTU5MzgsNyArNTk0Myw3IEBAIHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdGt2bV94ODZfY2FsbChnZXRfY3NfZGJfbF9iaXRzKSh2Y3B1LCBcdTAwMjZjc19kYiwgXHUwMDI2Y3NfbCk7XG4gXG4tXHRjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgPSBmYWxzZTtcbitcdGN0eHQtXHUwMDNlZ3BhX2FjY2VzcyA9IDA7XG4gXHRjdHh0LVx1MDAzZWVmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpO1xuIFx0Y3R4dC1cdTAwM2V0ZiA9IChjdHh0LVx1MDAzZWVmbGFncyBcdTAwMjYgWDg2X0VGTEFHU19URikgIT0gMDtcbiBcbkBAIC02NDU0LDcgKzY0NTksMTAgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbiBcbiBcdFx0LyogV2l0aCBzaGFkb3cgcGFnZSB0YWJsZXMsIGNyMiBjb250YWlucyBhIEdWQSBvciBuR1BBLiAqL1xuIFx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLm1tdS1cdTAwM2Vyb290X3JvbGUuZGlyZWN0KSB7XG4tXHRcdFx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gdHJ1ZTtcbitcdFx0XHQvKiBBIHdyaXRlIGZhdWx0IGNhbiByZXF1aXJlIGEgcmVhZCBmb3IgUk1XIGVtdWxhdGlvbi4gKi9cbitcdFx0XHRjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgPSBBQ0NfUkVBRF9NQVNLO1xuK1x0XHRcdGlmIChlbXVsYXRpb25fdHlwZSBcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEUpXG4rXHRcdFx0XHRjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgfD0gQUNDX1dSSVRFX01BU0s7XG4gXHRcdFx0Y3R4dC1cdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcbmluZGV4IDBmNTkxOWIwOTJlNDcuLjY2NzQ2NTY4MGNjZGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmhcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuaFxuQEAgLTQwNyw2ICs0MDcsOCBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2VcbiAgKlx0XHQgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuXG4gICpcbisgKiBFTVVMVFlQRV9QRl9XUklURSAtIFNldCB3aXRoIEVNVUxUWVBFX1BGIHdoZW4gaGFyZHdhcmUgcmVwb3J0cyBhIHdyaXRlIGFjY2Vzcy5cbisgKlxuICAqIEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCAtIFNldCB3aGVuIHRoZSBlbXVsYXRvciBzaG91bGQgdXBkYXRlIGludGVycnVwdGliaWxpdHlcbiAgKlx0XHRcdFx0IHN0YXRlIGFuZCBpbmplY3Qgc2luZ2xlLXN0ZXAgI0RCcyBhZnRlciBza2lwcGluZ1xuICAqXHRcdFx0XHQgYW4gaW5zdHJ1Y3Rpb24gKGFmdGVyIGNvbXBsZXRpbmcgdXNlcnNwYWNlIEkvTykuXG5AQCAtNDQ1LDYgKzQ0Nyw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4gI2RlZmluZSBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgKDEgXHUwMDNjXHUwMDNjIDcpXG4gI2RlZmluZSBFTVVMVFlQRV9XUklURV9QRl9UT19TUFx0ICAgICgxIFx1MDAzY1x1MDAzYyA4KVxuICNkZWZpbmUgRU1VTFRZUEVfU0tJUF9TT0ZUX0lOVFx0ICAgICgxIFx1MDAzY1x1MDAzYyA5KVxuKyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEVcdCAgICAoMSBcdTAwM2NcdTAwM2MgMTApXG4gXG4gI2RlZmluZSBFTVVMVFlQRV9TRVRfU09GVF9JTlRfVkVDVE9SKHYpXHQoKHUzMikoKHYpIFx1MDAyNiAweGZmKSBcdTAwM2NcdTAwM2MgMTYpXG4gI2RlZmluZSBFTVVMVFlQRV9HRVRfU09GVF9JTlRfVkVDVE9SKGUpXHQoKChlKSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDQ6NDkuNTQ2OTE3MTg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5Njc3NjE2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gYnJpbmcgaW4gS01TQU4gdG8gcHJvdGVjdCBhZ2FpbnN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyBwaWVjZSBieSBwaWVjZS5cblxuKiAgIFN0YXJ0aW5nIHdpdGggYGFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oYCwgdGhleSd2ZSBzd2FwcGVkIGBncGFfYXZhaWxhYmxlYCAoYSBib29sZWFuKSBmb3IgYGdwYV9hY2Nlc3NgIChhIGB1NjRgKSB3aXRoaW4gdGhlIGB4ODZfZW11bGF0ZV9jdHh0YCBzdHJ1Y3R1cmUuIFRoYXQncyBhIHNpZ25pZmljYW50IHR5cGUgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBncGFfYWNjZXNzYCByZXByZXNlbnRzIG5vdy4gSXMgdGhpcyBhIGJyb2FkZXIgYWNjZXNzIGNvbnRyb2wgZmllbGQ/XG5cbiogICBOZXh0LCBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgaW50cm9kdWNlcyBgRU1VTFRZUEVfUEZfV1JJVEVgIGZsYWcgaW4gdGhlIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGZ1bmN0aW9uLCBpZiBpdCdzIGEgZGlyZWN0IE1NVSBhY2Nlc3MuIFRoaXMgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IHdyaXRlIGZhdWx0cyBhcmUgaGFuZGxlZC5cblxuKiAgIE5vdywgYGFyY2gveDg2L2t2bS94ODYuY2AgY29udGFpbnMgdGhlIG1vcmUgaW50ZXJlc3RpbmcgbW9kaWZpY2F0aW9ucy4gVGhlIGNoZWNrIGBjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGVgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYGN0eHQtXHUwMDNlZ3BhX2FjY2Vzc2AgdXNpbmcgYEFDQ19XUklURV9NQVNLYCBhbmQgYEFDQ19SRUFEX01BU0tgLiBJdCBzZWVtcyBsaWtlIGBncGFfYWNjZXNzYCBpcyBub3cgYWN0aW5nIGFzIGEgYml0bWFzayBpbmRpY2F0aW5nIGFjY2VzcyBwZXJtaXNzaW9ucy4gVGhlIGluaXRpYWxpemF0aW9uIGlzIGFsc28gY2hhbmdlZCwgc2V0dGluZyBgY3R4dC1cdTAwM2VncGFfYWNjZXNzID0gMGAgYW5kIHRoZW4gc3Vic2VxdWVudGx5IHNldHRpbmcgYEFDQ19SRUFEX01BU0tgIGFuZC9vciBgQUNDX1dSSVRFX01BU0tgIGJhc2VkIG9uIHRoZSBlbXVsYXRpb24gdHlwZS4gVGhpcyBpcyBjcnVjaWFsOyBpZiB0aGVzZSBiaXRtYXNrcyBhcmVuJ3QgY29ycmVjdGx5IGluaXRpYWxpemVkICpiZWZvcmUqIHVzYWdlLCB3ZSBoYXZlIGEgcHJvYmxlbS4gU3BlY2lmaWNhbGx5LCB0aGUgc2V0dGluZyBvZiBgY3R4dC1cdTAwM2VncGFfYWNjZXNzYCB3aXRoaW4gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBsb29rcyBsaWtlIGEga2V5IHBvaW50IHRvIHJldmlldy4gSXMgaXQgYWx3YXlzIHNldCBjb3JyZWN0bHk/XG5cbiogICBGaW5hbGx5LCB0aGUgYWRkaXRpb24gb2YgYCNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEVgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmhgIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYSBuZXcgZmxhZyBiZWluZyBkZWZpbmVkLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIGNvbmZpcm1pbmcgdGhhdCBgZ3BhX2FjY2Vzc2AgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgdG8gYSBkZWZpbmVkIHZhbHVlIGJlZm9yZSBpdCdzIHJlYWQgYW5kIHRoYXQgZXZlcnkgcG9zc2libGUgY29kZSBwYXRoIGNvcnJlY3RseSBzZXRzIHRoZSBhcHByb3ByaWF0ZSBiaXRzIHdpdGhpbiB0aGF0IG1hc2suIFRoZSBtb3ZlIGZyb20gYSBzaW1wbGUgYm9vbGVhbiB0byBhIGJpdG1hc2sgKmluY3JlYXNlcyogdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGVycm9ycy5cblxuSSdtIGdvaW5nIHRvIGNvbmR1Y3QgYSBzZWFyY2ggZm9yIHVzZXMgb2YgYHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0YC4gTXkgZ29hbCBpcyB0byBleGhhdXN0aXZlbHkgY2hlY2sgZm9yOlxuXG4xLiAgQWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gcG9pbnRzLlxuMi4gIEFueSByZWFkcyBvciB3cml0ZXMgb2YgYGdwYV9hY2Nlc3NgICpiZWZvcmUqIGl0J3MgZXhwbGljaXRseSBpbml0aWFsaXplZC5cbjMuICBBbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgcGFydGljdWxhcmx5IGluIGNhc2VzIHdoZXJlIGBncGFfYWNjZXNzYCBjb3VsZCBiZSByZWFkIHdpdGhvdXQgdGhlIGFwcHJvcHJpYXRlIGZsYWdzIGJlaW5nIHNldC5cblxuV2l0aCBteSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIEtWTSBhcmNoaXRlY3R1cmUsIEkgYW0gYWJsZSB0byBsb2NhdGUgdGhlc2UgcG90ZW50aWFsIHNwb3RzIG9mIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNDo1Ny41MTQ2ODE3MTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDY3ODIzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3BhX2FjY2Vzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaD0zMzg9c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQge1xcbi0tXFxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgtMzU3LVxcdC8qIFNhdmVkIEdQQSBhbmQgcGVybWl0dGVkIGVtdWxhdGVkIGFjY2Vzc2VzLiAqL1xcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oOjM1ODpcXHR1NjQgZ3BhX2FjY2VzcztcXG5hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaC0zNTktXFx0Z3BhX3QgZ3BhX3ZhbDtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01MDczPXN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUwOTUtXFx0ICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjUwOTY6XFx0aWYgKChjdHh0LVxcdTAwM2VncGFfYWNjZXNzIFxcdTAwMjYgKHdyaXRlID8gQUNDX1dSSVRFX01BU0sgOiBBQ0NfUkVBRF9NQVNLKSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTA5Ny1cXHQgICAgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01OTM5PXN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01OTQ1LVxcbmFyY2gveDg2L2t2bS94ODYuYzo1OTQ2OlxcdGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3MgPSAwO1xcbmFyY2gveDg2L2t2bS94ODYuYy01OTQ3LVxcdGN0eHQtXFx1MDAzZWVmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTYzMzU9aW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02NDYyLVxcdFxcdFxcdC8qIEEgd3JpdGUgZmF1bHQgY2FuIHJlcXVpcmUgYSByZWFkIGZvciBSTVcgZW11bGF0aW9uLiAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzo2NDYzOlxcdFxcdFxcdGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3MgPSBBQ0NfUkVBRF9NQVNLO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NDY0LVxcdFxcdFxcdGlmIChlbXVsYXRpb25fdHlwZSBcXHUwMDI2IEVNVUxUWVBFX1BGX1dSSVRFKVxcbmFyY2gveDg2L2t2bS94ODYuYzo2NDY1OlxcdFxcdFxcdFxcdGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3MgfD0gQUNDX1dSSVRFX01BU0s7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY0NjYtXFx0XFx0XFx0Y3R4dC1cXHUwMDNlZ3BhX3ZhbCA9IGNyMl9vcl9ncGE7XFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oPTI5Mz1pbnQgaHZfY2FsbF9jbGVhcl92aXJ0dWFsX2ludGVycnVwdCh1NjQgcGFydGl0aW9uX2lkKTtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oOjI5NDppbnQgaHZfY2FsbF9nZXRfZ3BhX2FjY2Vzc19zdGF0ZXModTY0IHBhcnRpdGlvbl9pZCwgdTMyIGNvdW50LCB1NjQgZ3BhX2Jhc2VfcGZuLFxcbmRyaXZlcnMvaHYvbXNodl9yb290LmgtMjk1LVxcdFxcdFxcdFxcdCAgdW5pb24gaHZfZ3BhX3BhZ2VfYWNjZXNzX3N0YXRlX2ZsYWdzIHN0YXRlX2ZsYWdzLFxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfaHZfY2FsbC5jPTI5OD1pbnQgaHZfY2FsbF91bm1hcF9ncGFfcGFnZXModTY0IHBhcnRpdGlvbl9pZCwgdTY0IGdmbiwgdTY0IHBhZ2VfY291bnRfNGssXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtMzQyLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYzozNDM6aW50IGh2X2NhbGxfZ2V0X2dwYV9hY2Nlc3Nfc3RhdGVzKHU2NCBwYXJ0aXRpb25faWQsIHUzMiBjb3VudCwgdTY0IGdwYV9iYXNlX3BmbixcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtMzQ0LVxcdFxcdFxcdFxcdCAgdW5pb24gaHZfZ3BhX3BhZ2VfYWNjZXNzX3N0YXRlX2ZsYWdzIHN0YXRlX2ZsYWdzLFxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTE1MTA9bXNodl9wYXJ0aXRpb25faW9jdGxfZ2V0X2dwYXBfYWNjZXNzX2JpdG1hcChzdHJ1Y3QgbXNodl9wYXJ0aXRpb24gKnBhcnRpdGlvbixcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xNTY2LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxNTY3OlxcdHJldCA9IGh2X2NhbGxfZ2V0X2dwYV9hY2Nlc3Nfc3RhdGVzKHBhcnRpdGlvbi1cXHUwMDNlcHRfaWQsIGFyZ3MucGFnZV9jb3VudCxcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTU2OC1cXHRcXHRcXHRcXHRcXHQgICAgYXJncy5ncGFwX2Jhc2UsIGh2X2ZsYWdzLCBcXHUwMDI2d3JpdHRlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDQ6NTkuMDYxNDY4MzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU0MTQ5MzU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB4ODYgRW11bGF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29yZSBlbXVsYXRpb24gbG9naWMgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJJ20gZm9jdXNpbmcgb24gYGluaXRfZW11bGF0ZV9jdHh0YCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCDigJMgdGhlc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50cy4gSSBrbm93IHRoZXkncmUgcHJvYmFibHkgbG9jYXRlZCB3aXRoaW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0LiBJdCdzIGJlc3QgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgbGluZXMgb2YgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHByb2Nlc3Nlcy4gU2VlaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmbG93LiBMZXQncyBzZWUgaG93IHRoZXkgd29yayB0b2dldGhlciB0byBhY2hpZXZlIGFjY3VyYXRlIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNTowMi42MDI5NjQ2MjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1OTM1OlxcdFxcbjU5MzY6XFx0XFx0cmV0dXJuIGN0eHQ7XFxuNTkzNzpcXHR9XFxuNTkzODpcXHRcXG41OTM5OlxcdHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG41OTQwOlxcdHtcXG41OTQxOlxcdFxcdHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0ID0gdmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQ7XFxuNTk0MjpcXHRcXHRpbnQgY3NfZGIsIGNzX2w7XFxuNTk0MzpcXHRcXG41OTQ0OlxcdFxcdGt2bV94ODZfY2FsbChnZXRfY3NfZGJfbF9iaXRzKSh2Y3B1LCBcXHUwMDI2Y3NfZGIsIFxcdTAwMjZjc19sKTtcXG41OTQ1OlxcdFxcbjU5NDY6XFx0XFx0Y3R4dC1cXHUwMDNlZ3BhX2FjY2VzcyA9IDA7XFxuNTk0NzpcXHRcXHRjdHh0LVxcdTAwM2VlZmxhZ3MgPSBrdm1fZ2V0X3JmbGFncyh2Y3B1KTtcXG41OTQ4OlxcdFxcdGN0eHQtXFx1MDAzZXRmID0gKGN0eHQtXFx1MDAzZWVmbGFncyBcXHUwMDI2IFg4Nl9FRkxBR1NfVEYpICE9IDA7XFxuNTk0OTpcXHRcXG41OTUwOlxcdFxcdGN0eHQtXFx1MDAzZWVpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTtcXG41OTUxOlxcdFxcdGN0eHQtXFx1MDAzZW1vZGUgPSAoIWlzX3Byb3Rtb2RlKHZjcHUpKVxcdFxcdD8gWDg2RU1VTF9NT0RFX1JFQUwgOlxcbjU5NTI6XFx0XFx0XFx0ICAgICAoY3R4dC1cXHUwMDNlZWZsYWdzIFxcdTAwMjYgWDg2X0VGTEFHU19WTSlcXHQ/IFg4NkVNVUxfTU9ERV9WTTg2IDpcXG41OTUzOlxcdFxcdFxcdCAgICAgKGNzX2wgXFx1MDAyNlxcdTAwMjYgaXNfbG9uZ19tb2RlKHZjcHUpKVxcdD8gWDg2RU1VTF9NT0RFX1BST1Q2NCA6XFxuNTk1NDpcXHRcXHRcXHQgICAgIGNzX2RiXFx0XFx0XFx0XFx0PyBYODZFTVVMX01PREVfUFJPVDMyIDpcXG41OTU1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgWDg2RU1VTF9NT0RFX1BST1QxNjtcXG41OTU2OlxcdFxcdGN0eHQtXFx1MDAzZWludGVycnVwdGliaWxpdHkgPSAwO1xcbjU5NTc6XFx0XFx0Y3R4dC1cXHUwMDNlaGF2ZV9leGNlcHRpb24gPSBmYWxzZTtcXG41OTU4OlxcdFxcdGN0eHQtXFx1MDAzZWV4Y2VwdGlvbi52ZWN0b3IgPSAtMTtcXG41OTU5OlxcdFxcdGN0eHQtXFx1MDAzZWV4Y2VwdGlvbi5wYXlsb2FkID0gMDtcXG41OTYwOlxcdFxcdGN0eHQtXFx1MDAzZXBlcm1fb2sgPSBmYWxzZTtcXG41OTYxOlxcdFxcbjU5NjI6XFx0XFx0aW5pdF9kZWNvZGVfY2FjaGUoY3R4dCk7XFxuNTk2MzpcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfZnJvbV92Y3B1ID0gZmFsc2U7XFxuNTk2NDpcXHR9XFxuNTk2NTpcXHRcXG41OTY2OlxcdHZvaWQga3ZtX2luamVjdF9yZWFsbW9kZV9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgaXJxLCBpbnQgaW5jX2VpcClcXG41OTY3OlxcdHtcXG41OTY4OlxcdFxcdHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0ID0gdmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQ7XFxuNTk2OTpcXHRcXHRpbnQgcmV0O1xcbjU5NzA6XFx0XFxuNTk3MTpcXHRcXHRpbml0X2VtdWxhdGVfY3R4dCh2Y3B1KTtcXG41OTcyOlxcdFxcbjU5NzM6XFx0XFx0Y3R4dC1cXHUwMDNlb3BfYnl0ZXMgPSAyO1xcbjU5NzQ6XFx0XFx0Y3R4dC1cXHUwMDNlYWRfYnl0ZXMgPSAyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNTowMi42MDM1MTk3MzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY1MjI4NTI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIG9uIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAsIGFuZCBteSBndXQgdGVsbHMgbWUgdGhlIHN3ZWV0IHNwb3QgaXMgc29tZXdoZXJlIGFyb3VuZCBsaW5lcyA2NDQwIHRvIDY0ODAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhhdCBhcmVhLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gb3IgYSBncm91cCBvZiByZWxhdGVkIGluc3RydWN0aW9ucyB0aGF0IEknbSBpbnRlcmVzdGVkIGluIGFuYWx5emluZy4gVGhpcyByYW5nZSBwcm92aWRlcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgd2hhdGV2ZXIgSSBoYXZlIGluIG1pbmQuIEkgaG9wZSB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzQyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNTowNC4yNTU4MDgxNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY0NDA6XFx0XFx0ICogYW5kIHJldHJ5IHRoZSBpbnN0cnVjdGlvbiwgYXMgdGhlIHZDUFUgaXMgbGlrZWx5IG5vIGxvbmdlciB1c2luZyB0aGVcXG42NDQxOlxcdFxcdCAqIGdmbiBhcyBhIHBhZ2UgdGFibGUuXFxuNjQ0MjpcXHRcXHQgKi9cXG42NDQzOlxcdFxcdGlmICgoZW11bGF0aW9uX3R5cGUgXFx1MDAyNiBFTVVMVFlQRV9BTExPV19SRVRSWV9QRikgXFx1MDAyNlxcdTAwMjZcXG42NDQ0OlxcdFxcdCAgICAheDg2X3BhZ2VfdGFibGVfd3JpdGluZ19pbnNuKGN0eHQpIFxcdTAwMjZcXHUwMDI2XFxuNjQ0NTpcXHRcXHQgICAga3ZtX21tdV91bnByb3RlY3RfZ2ZuX2FuZF9yZXRyeSh2Y3B1LCBjcjJfb3JfZ3BhKSlcXG42NDQ2OlxcdFxcdFxcdHJldHVybiAxO1xcbjY0NDc6XFx0XFxuNjQ0ODpcXHRcXHQvKiB0aGlzIGlzIG5lZWRlZCBmb3Igdm13YXJlIGJhY2tkb29yIGludGVyZmFjZSB0byB3b3JrIHNpbmNlIGl0XFxuNjQ0OTpcXHRcXHQgICBjaGFuZ2VzIHJlZ2lzdGVycyB2YWx1ZXMgIGR1cmluZyBJTyBvcGVyYXRpb24gKi9cXG42NDUwOlxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfZnJvbV92Y3B1KSB7XFxuNjQ1MTpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfZnJvbV92Y3B1ID0gZmFsc2U7XFxuNjQ1MjpcXHRcXHRcXHRlbXVsYXRvcl9pbnZhbGlkYXRlX3JlZ2lzdGVyX2NhY2hlKGN0eHQpO1xcbjY0NTM6XFx0XFx0fVxcbjY0NTQ6XFx0XFxuNjQ1NTpcXHRyZXN0YXJ0OlxcbjY0NTY6XFx0XFx0aWYgKGVtdWxhdGlvbl90eXBlIFxcdTAwMjYgRU1VTFRZUEVfUEYpIHtcXG42NDU3OlxcdFxcdFxcdC8qIFNhdmUgdGhlIGZhdWx0aW5nIEdQQSAoY3IyKSBpbiB0aGUgYWRkcmVzcyBmaWVsZCAqL1xcbjY0NTg6XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZXhjZXB0aW9uLmFkZHJlc3MgPSBjcjJfb3JfZ3BhO1xcbjY0NTk6XFx0XFxuNjQ2MDpcXHRcXHRcXHQvKiBXaXRoIHNoYWRvdyBwYWdlIHRhYmxlcywgY3IyIGNvbnRhaW5zIGEgR1ZBIG9yIG5HUEEuICovXFxuNjQ2MTpcXHRcXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5tbXUtXFx1MDAzZXJvb3Rfcm9sZS5kaXJlY3QpIHtcXG42NDYyOlxcdFxcdFxcdFxcdC8qIEEgd3JpdGUgZmF1bHQgY2FuIHJlcXVpcmUgYSByZWFkIGZvciBSTVcgZW11bGF0aW9uLiAqL1xcbjY0NjM6XFx0XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZ3BhX2FjY2VzcyA9IEFDQ19SRUFEX01BU0s7XFxuNjQ2NDpcXHRcXHRcXHRcXHRpZiAoZW11bGF0aW9uX3R5cGUgXFx1MDAyNiBFTVVMVFlQRV9QRl9XUklURSlcXG42NDY1OlxcdFxcdFxcdFxcdFxcdGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3MgfD0gQUNDX1dSSVRFX01BU0s7XFxuNjQ2NjpcXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcXG42NDY3OlxcdFxcdFxcdH1cXG42NDY4OlxcdFxcdH0gZWxzZSB7XFxuNjQ2OTpcXHRcXHRcXHQvKiBTYW5pdGl6ZSB0aGUgYWRkcmVzcyBvdXQgb2YgYW4gYWJ1bmRhbmNlIG9mIHBhcmFub2lhLiAqL1xcbjY0NzA6XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZXhjZXB0aW9uLmFkZHJlc3MgPSAwO1xcbjY0NzE6XFx0XFx0fVxcbjY0NzI6XFx0XFxuNjQ3MzpcXHRcXHQvKlxcbjY0NzQ6XFx0XFx0ICogQ2hlY2sgTDEncyBpbnN0cnVjdGlvbiBpbnRlcmNlcHRzIHdoZW4gZW11bGF0aW5nIGluc3RydWN0aW9ucyBmb3JcXG42NDc1OlxcdFxcdCAqIEwyLCB1bmxlc3MgS1ZNIGlzIHJlLWVtdWxhdGluZyBhIHByZXZpb3VzbHkgZGVjb2RlZCBpbnN0cnVjdGlvbixcXG42NDc2OlxcdFxcdCAqIGUuZy4gdG8gY29tcGxldGUgdXNlcnNwYWNlIEkvTywgaW4gd2hpY2ggY2FzZSBLVk0gaGFzIGFscmVhZHlcXG42NDc3OlxcdFxcdCAqIGNoZWNrZWQgdGhlIGludGVyY2VwdHMuXFxuNjQ3ODpcXHRcXHQgKi9cXG42NDc5OlxcdFxcdHIgPSB4ODZfZW11bGF0ZV9pbnNuKGN0eHQsIGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDU6MDQuMjU2Mzc2NjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI1MjczMjA0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEVtdWxhdG9yIE1lbW9yeSBBY2Nlc3MgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBlbXVsYXRvcidzIG1lbW9yeSBhY2Nlc3MgbWVjaGFuaXNtcy4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhlIGVtdWxhdG9yIGhhbmRsZXMgdGhlIGJhc2ljIG9wZXJhdGlvbnMgb2YgcmVhZGluZyBhbmQgd3JpdGluZyBhIHNpbmdsZSBwYWdlIG9mIG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGZ1bmN0aW9uIGBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBsb2dpYywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSwgYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgaW1wbGljYXRpb25zIGl0IG1pZ2h0IGhhdmUuXG5cbkZ1cnRoZXJtb3JlLCBpdCdzIGNydWNpYWwgdGhhdCBJIGZpZ3VyZSBvdXQgd2hlbiBhbmQgaG93IHRoZSBlbXVsYXRvciBkZXRlcm1pbmVzIGlmIGl0J3MgKmFsbG93ZWQqIHRvIHVzZSBhIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgKEdQQSkuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gY2hlY2sgb3V0IGBlbXVsYXRvcl9jYW5fdXNlX2dwYWAuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbiBpcyBrZXkgdG8gdGhlIG92ZXJhbGwgbWVtb3J5IHRyYW5zbGF0aW9uIGFuZCBwcm90ZWN0aW9uIHN0cmF0ZWd5LiBJIG5lZWQgdG8ga25vdyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgZW11bGF0b3IgZGVlbXMgYSBHUEEgdmFsaWQgZm9yIGRpcmVjdCBhY2Nlc3MuIEFyZSB0aGVyZSBjaGVja3MgZm9yIHBlcm1pc3Npb25zLCBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24sIG9yIG90aGVyIHNlY3VyaXR5IG1lYXN1cmVzIGluIHBsYWNlPyBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZSBlbXVsYXRvcidzIHJvYnVzdG5lc3MgYW5kIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGFsc28gcmVsYXRlcyB0byBob3cgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgaXMgdWx0aW1hdGVseSB0cmFuc2xhdGVkIHRvIGEgaG9zdCBwaHlzaWNhbCBhZGRyZXNzLCBvciB3aGV0aGVyIHZpcnR1YWxpemF0aW9uIG9yIGVtdWxhdGlvbiBpcyByZXF1aXJlZCBhdCBhbGwuIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRob3NlIGtleSBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA1OjA3LjUwOTExMTM5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzMxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUwNzA6XFx0XFx0cmV0dXJuIDE7XFxuNTA3MTpcXHR9XFxuNTA3MjpcXHRcXG41MDczOlxcdHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxcbjUwNzQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBieXRlcyxcXG41MDc1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uLFxcbjUwNzY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG41MDc3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcmVhZF93cml0ZV9lbXVsYXRvcl9vcHMgKm9wcylcXG41MDc4OlxcdHtcXG41MDc5OlxcdFxcdGdwYV90IGdwYTtcXG41MDgwOlxcdFxcdGludCBoYW5kbGVkLCByZXQ7XFxuNTA4MTpcXHRcXHRib29sIHdyaXRlID0gb3BzLVxcdTAwM2V3cml0ZTtcXG41MDgyOlxcdFxcdHN0cnVjdCBrdm1fbW1pb19mcmFnbWVudCAqZnJhZztcXG41MDgzOlxcdFxcdHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0ID0gdmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQ7XFxuNTA4NDpcXHRcXG41MDg1OlxcdFxcdC8qXFxuNTA4NjpcXHRcXHQgKiBJZiB0aGUgZXhpdCB3YXMgZHVlIHRvIGEgTlBGIHdlIG1heSBhbHJlYWR5IGhhdmUgYSBHUEEuXFxuNTA4NzpcXHRcXHQgKiBJZiB0aGUgR1BBIGlzIHByZXNlbnQsIHVzZSBpdCB0byBhdm9pZCB0aGUgR1ZBIHRvIEdQQSB0YWJsZSB3YWxrLlxcbjUwODg6XFx0XFx0ICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmdcXG41MDg5OlxcdFxcdCAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRlxcbjUwOTA6XFx0XFx0ICogb2NjdXJyZWQuXFxuNTA5MTpcXHRcXHQgKlxcbjUwOTI6XFx0XFx0ICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlXFxuNTA5MzpcXHRcXHQgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIHdyaXRlIGFjY2VzcztcXG41MDk0OlxcdFxcdCAqIG90aGVyd2lzZSwgcmVjaGVjayBwZXJtaXNzaW9ucyBmb3IgdGhlIGRlY29kZWQgYWNjZXNzLlxcbjUwOTU6XFx0XFx0ICovXFxuNTA5NjpcXHRcXHRpZiAoKGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3MgXFx1MDAyNiAod3JpdGUgPyBBQ0NfV1JJVEVfTUFTSyA6IEFDQ19SRUFEX01BU0spKSBcXHUwMDI2XFx1MDAyNlxcbjUwOTc6XFx0XFx0ICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFxcdTAwMjZcXHUwMDI2XFxuNTA5ODpcXHRcXHQgICAgKGFkZHIgXFx1MDAyNiB+UEFHRV9NQVNLKSA9PSAoY3R4dC1cXHUwMDNlZ3BhX3ZhbCBcXHUwMDI2IH5QQUdFX01BU0spKSB7XFxuNTA5OTpcXHRcXHRcXHRncGEgPSBjdHh0LVxcdTAwM2VncGFfdmFsO1xcbjUxMDA6XFx0XFx0XFx0cmV0ID0gdmNwdV9pc19tbWlvX2dwYSh2Y3B1LCBhZGRyLCBncGEsIHdyaXRlKTtcXG41MTAxOlxcdFxcdH0gZWxzZSB7XFxuNTEwMjpcXHRcXHRcXHRyZXQgPSB2Y3B1X21taW9fZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyLCBcXHUwMDI2Z3BhLCBleGNlcHRpb24sIHdyaXRlKTtcXG41MTAzOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjUxMDQ6XFx0XFx0XFx0XFx0cmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUO1xcbjUxMDU6XFx0XFx0fVxcbjUxMDY6XFx0XFxuNTEwNzpcXHRcXHQvKlxcbjUxMDg6XFx0XFx0ICogSWYgdGhlIG1lbW9yeSBpcyBub3QgX2tub3duXyB0byBiZSBlbXVsYXRlZCBNTUlPLCBhdHRlbXB0IHRvIGFjY2Vzc1xcbjUxMDk6XFx0XFx0ICogZ3Vlc3QgbWVtb3J5LiAgSWYgYWNjZXNzaW5nIGd1ZXN0IG1lbW9yeSBmYWlscywgZS5nLiBiZWNhdXNlIHRoZXJlJ3NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDU6MDcuNTA5NjQ2NjQzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwMjQ4ODMyNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFg4NiBFbXVsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBhIHNwZWNpZmljIGNvcm5lciBjYXNlIHdpdGhpbiBLVk0ncyB4ODYgZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHBhZ2UgZmF1bHRzIGFuZCB0aGUgZGlyZWN0IE1NVSByb2xlLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGlzOiB0aGUgaGFyZHdhcmUgbWlnaHQgcmVwb3J0IGEgcmVhZCBmYXVsdCwgYnV0IHRoZSBlbXVsYXRlZCBpbnN0cnVjdGlvbiBtaWdodCBhY3R1YWxseSBiZSBhIHdyaXRlIChvciB2aWNlIHZlcnNhKS4gU2ltcGx5IHJldXNpbmcgdGhlIEdsb2JhbCBQaHlzaWNhbCBBZGRyZXNzIChHUEEpIHJlcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSB3aXRob3V0IGEgcGVybWlzc2lvbiBjaGVjayBpbiB0aGVzZSBzY2VuYXJpb3MgY291bGQgbGVhZCB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGxpa2Ugd3JpdGluZyB0byBhIHJlYWQtb25seSBwYWdlIG9yIGJ5cGFzc2luZyBhY2Nlc3MgY29udHJvbHMuXG5cblRoZSBwYXRjaCdzIHNvbHV0aW9uIHJlcGxhY2VzIGBncGFfYXZhaWxhYmxlYCAocHJlc3VtYWJseSBhIGJvb2xlYW4gaW5kaWNhdGluZyBHUEEgdmFsaWRpdHkpIHdpdGggYGdwYV9hY2Nlc3NgLCBhIGZpZWxkIHRoYXQgdHJhY2tzIHdoZXRoZXIgcmVhZCAqb3IqIHdyaXRlIGFjY2VzcyBpcyBhbGxvd2VkIGZvciB0aGF0IGNhY2hlZCBHUEEuIFRoaXMgaW50cm9kdWNlcyBhIHN0cmljdGVyIGFjY2VzcyBjb250cm9sLlxuXG5Ob3csIG15IGNvbmNlcm5zIGFzIGEgc2VjdXJpdHktbWluZGVkIGV4cGVydCBpbW1lZGlhdGVseSBnbyB0byBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgbmV3IHJpc2tzIGluIHRoYXQgYXJlYS4gU28sIGxldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsLXRvLVVzZXIgQ29weT8qKiBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBwYXRjaCBkb2Vzbid0IHRvdWNoIGFueSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgc29ja2V0IG9wdGlvbnMsIG5ldGxpbmsgYXR0cmlidXRlcywgb3IgYW55IG9mIHRob3NlIGFyZWFzIHRoYXQgYXJlIG9mdGVuIGEgc291cmNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcy4gVGhpcyBpcyBzdHJpY3RseSBpbnRlcm5hbCBLVk0gZW11bGF0aW9uIGxvZ2ljLlxuXG4yLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlIEJyYW5jaGluZz8qKiBOby4gVGhlIGBjdHh0LVx1MDAzZWdwYV9hY2Nlc3NgIGZpZWxkIGlzICppbml0aWFsaXplZCogdG8gemVybyB3aXRoaW4gYGluaXRfZW11bGF0ZV9jdHh0YCwgd2hpY2ggaXMgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGVtdWxhdGlvbiBwcm9jZXNzLiBUaGUgZmllbGQncyB2YWx1ZSBpcyBhbHNvIHNldCBjb3JyZWN0bHkgZHVyaW5nIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAuXG5cbjMuICAqKlVuaW5pdGlhbGl6ZWQgQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM/KiogTm8sIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlIHJlcGxhY2luZyBvbmUgZmllbGQgd2l0aCBhIG5ldyBmaWVsZC4gYGdwYV9hY2Nlc3NgIGlzIGp1c3QgYSBgdTY0YCByZXBsYWNpbmcgYSBgYm9vbGAgaW4gYHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0YC4gU2ltcGxlLCBpbml0aWFsaXplZCwgbm8gd29ycmllcy5cblxuNC4gICoqQm91bmRzIENoZWNrcz8qKiBOb3BlLiBObyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIGxlbmd0aHMgdGhhdCBjb3VsZCBhbGxvdyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cbkdpdmVuIGFsbCBvZiB0aGF0LCBpdCdzIGNsZWFyOiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFRoaXMgaXMgcHVyZWx5IGludGVybmFsIGNvbnRyb2wgZmxvdyBmb3IgS1ZNJ3MgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBkZWFsaW5nIHdpdGggcGVybWlzc2lvbnMgYW5kIHRoZSBjb3JyZWN0IHJldXNlIG9mIGNhY2hlZCBHUEFzLiBBbnkgYnVncyBoZXJlIHdvdWxkIGJlIGxvZ2ljYWwgZXJyb3JzIHJlbGF0ZWQgdG8gdmlydHVhbGl6YXRpb24gY29ycmVjdG5lc3Mgb3IgcGVybWlzc2lvbiBlbmZvcmNlbWVudCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gS01TQU4gaXMgaXJyZWxldmFudCBoZXJlLiBTdGFuZGFyZCBmdXp6aW5nIGFuZCBLQVNBTiB3b3VsZCBiZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZSBsb2dpY2FsIGNvcnJlY3RuZXNzIGFuZCBtZW1vcnkgc2FmZXR5IG9mIHRoaXMgcGF0Y2guIFRpbWUgdG8gbW92ZSBvbiBhbmQgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxNCwiT3V0cHV0VG9rZW5zIjoyNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNToxNC41MzQ1MzIxMzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSdzIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMgdG8gdHJhY2sgcGVybWl0dGVkIGFjY2VzcyB0eXBlcyAocmVhZCB2cyB3cml0ZSkgZm9yIGNhY2hlZCBHdWVzdCBQaHlzaWNhbCBBZGRyZXNzZXMgKEdQQSkgZHVyaW5nIHBhZ2UgZmF1bHQgZW11bGF0aW9uIChyZXBsYWNpbmcgYGJvb2wgZ3BhX2F2YWlsYWJsZWAgd2l0aCBgdTY0IGdwYV9hY2Nlc3NgIGluIGBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dGApLlxcblxcbi0gS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBgY3R4dC1cXHUwMDNlZ3BhX2FjY2Vzc2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgcHJvcGVybHkgc2V0IGluIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbigpYC4gVGhlcmUgYXJlIG5vIG5ldyBvciBtb2RpZmllZCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLlxcbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IFRoZSBtb2RpZmljYXRpb25zIHNvbGVseSBhZmZlY3QgaW50ZXJuYWwgcGVybWlzc2lvbiBjaGVja2luZyBhbmQgY29udHJvbCBmbG93IHdpdGhpbiBLVk0gTU1JTy9wYWdlIGZhdWx0IGVtdWxhdGlvbi4gU3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGtlcm5lbHMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBpZiBhbnkgYXJpc2UuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgeDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyB0byB0cmFjayBwZXJtaXR0ZWQgYWNjZXNzIHR5cGVzIChyZWFkIHZzIHdyaXRlKSBmb3IgY2FjaGVkIEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3NlcyAoR1BBKSBkdXJpbmcgcGFnZSBmYXVsdCBlbXVsYXRpb24gKHJlcGxhY2luZyBgYm9vbCBncGFfYXZhaWxhYmxlYCB3aXRoIGB1NjQgZ3BhX2FjY2Vzc2AgaW4gYHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0YCkuXFxuXFxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcGF0aHMuIGBjdHh0LVxcdTAwM2VncGFfYWNjZXNzYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgaW4gYGluaXRfZW11bGF0ZV9jdHh0KClgIGFuZCBwcm9wZXJseSBzZXQgaW4gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKClgLiBUaGVyZSBhcmUgbm8gbmV3IG9yIG1vZGlmaWVkIGtlcm5lbC10by11c2VyIGNvcGllcywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhIGJ1ZmZlcnMuXFxuLSBLQVNBTiAvIFN0YW5kYXJkIERldGVjdG9yczogVGhlIG1vZGlmaWNhdGlvbnMgc29sZWx5IGFmZmVjdCBpbnRlcm5hbCBwZXJtaXNzaW9uIGNoZWNraW5nIGFuZCBjb250cm9sIGZsb3cgd2l0aGluIEtWTSBNTUlPL3BhZ2UgZmF1bHQgZW11bGF0aW9uLiBTdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcga2VybmVscyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGlmIGFueSBhcmlzZS5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sl5q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 00:00:52 +0000 UTC FinishedAt: 2026-08-29 00:05:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "73e3f0710014fe6d4ed98cfc02292f6121db7558", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "73e3f0710014fe6d4ed98cfc02292f6121db7558", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "e6657522-64f9-4e1e-abf6-ed2d6b86a23e" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_mmu_page_fault", "x86_emulate_instruction", "kvm_emulate_instruction" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfcGFnZV9mYXVsdCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIHRvIHRyYWNrIHBlcm1pdHRlZCBhY2Nlc3MgdHlwZXMgKHJlYWQgdnMgd3JpdGUpIGZvciBjYWNoZWQgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzc2VzIChHUEEpIGR1cmluZyBwYWdlIGZhdWx0IGVtdWxhdGlvbiAocmVwbGFjaW5nIGBib29sIGdwYV9hdmFpbGFibGVgIHdpdGggYHU2NCBncGFfYWNjZXNzYCBpbiBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgKS5cblxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcGF0aHMuIGBjdHh0LVx1MDAzZWdwYV9hY2Nlc3NgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBpbiBgaW5pdF9lbXVsYXRlX2N0eHQoKWAgYW5kIHByb3Blcmx5IHNldCBpbiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKWAuIFRoZXJlIGFyZSBubyBuZXcgb3IgbW9kaWZpZWQga2VybmVsLXRvLXVzZXIgY29waWVzLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgYnVmZmVycy5cbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IFRoZSBtb2RpZmljYXRpb25zIHNvbGVseSBhZmZlY3QgaW50ZXJuYWwgcGVybWlzc2lvbiBjaGVja2luZyBhbmQgY29udHJvbCBmbG93IHdpdGhpbiBLVk0gTU1JTy9wYWdlIGZhdWx0IGVtdWxhdGlvbi4gU3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGtlcm5lbHMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBpZiBhbnkgYXJpc2UuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNlY3VyaXR5L3Blcm1pc3Npb24gY2hlY2tpbmcgaXNzdWUgaW4gS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gYnkgdHJhY2tpbmcgcGVybWl0dGVkIGVtdWxhdGVkIGFjY2Vzc2VzIChyZWFkIHZzIHdyaXRlKSBmb3IgY2FjaGVkIEdQQXMgcmF0aGVyIHRoYW4gcmV1c2luZyB0aGUgR1BBIHVuY29uZGl0aW9uYWxseS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGNvcmUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBvbiB4ODYsIHdoaWNoIGlzIGZ1bGx5IHRlc3RhYmxlIGFuZCBmdXp6YWJsZSB2aWEgS1ZNIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIzYTQ0Njk2NTBlMWEzODAyYzRlNTA1YmE2YWM2YTUxMTNjYTNmZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMDowNDoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaCBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5pbmRleCAzZTM3NWFmMTVjMDM1Li4xMDg4NmJlYTgyYzkxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5AQCAtMzU0LDggJiM0MzszNTQsOCBAQCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCB7XG4gXHRib29sIGhhdmVfZXhjZXB0aW9uO1xuIFx0c3RydWN0IHg4Nl9leGNlcHRpb24gZXhjZXB0aW9uO1xuIFxuLVx0LyogR1BBIGF2YWlsYWJsZSAqL1xuLVx0Ym9vbCBncGFfYXZhaWxhYmxlO1xuJiM0MztcdC8qIFNhdmVkIEdQQSBhbmQgcGVybWl0dGVkIGVtdWxhdGVkIGFjY2Vzc2VzLiAqL1xuJiM0MztcdHU2NCBncGFfYWNjZXNzO1xuIFx0Z3BhX3QgZ3BhX3ZhbDtcbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjk1YjllYWM5OTYyYTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNjYzMiw2ICYjNDM7NjYzMiw5IEBAIGludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyXG4gXHRcdHJldHVybiByO1xuIFxuIGVtdWxhdGU6XG4mIzQzO1x0aWYgKGRpcmVjdCBcdTAwMjZcdTAwMjYgKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1dSSVRFX01BU0spKVxuJiM0MztcdFx0ZW11bGF0aW9uX3R5cGUgfD0gRU1VTFRZUEVfUEZfV1JJVEU7XG4mIzQzO1xuIFx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIGNyMl9vcl9ncGEsIGVtdWxhdGlvbl90eXBlLCBpbnNuLFxuIFx0XHRcdFx0ICAgICAgIGluc25fbGVuKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCA3OTQ2OGRkZmU0NzM2Li5hYTVkZWI3YzczYWEyIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC01MDg4LDggJiM0Mzs1MDg4LDEzIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxuIFx0ICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmdcbiBcdCAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRlxuIFx0ICogb2NjdXJyZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZ3Vlc3QgbWF5IGhhdmUgY2hhbmdlZCB0aGUgaW5zdHJ1Y3Rpb24gc2luY2UgdGhlIGZhdWx0LiAgUmV1c2VcbiYjNDM7XHQgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIHdyaXRlIGFjY2VzcztcbiYjNDM7XHQgKiBvdGhlcndpc2UsIHJlY2hlY2sgcGVybWlzc2lvbnMgZm9yIHRoZSBkZWNvZGVkIGFjY2Vzcy5cbiBcdCAqL1xuLVx0aWYgKGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSBcdTAwMjZcdTAwMjYgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKChjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgXHUwMDI2ICh3cml0ZSA/IEFDQ19XUklURV9NQVNLIDogQUNDX1JFQURfTUFTSykpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoYWRkciBcdTAwMjYgflBBR0VfTUFTSykgPT0gKGN0eHQtXHUwMDNlZ3BhX3ZhbCBcdTAwMjYgflBBR0VfTUFTSykpIHtcbiBcdFx0Z3BhID0gY3R4dC1cdTAwM2VncGFfdmFsO1xuIFx0XHRyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpO1xuQEAgLTU5MzgsNyAmIzQzOzU5NDMsNyBAQCBzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgXHUwMDI2Y3NfZGIsIFx1MDAyNmNzX2wpO1xuIFxuLVx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gZmFsc2U7XG4mIzQzO1x0Y3R4dC1cdTAwM2VncGFfYWNjZXNzID0gMDtcbiBcdGN0eHQtXHUwMDNlZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7XG4gXHRjdHh0LVx1MDAzZXRmID0gKGN0eHQtXHUwMDNlZWZsYWdzIFx1MDAyNiBYODZfRUZMQUdTX1RGKSAhPSAwO1xuIFxuQEAgLTY0NTQsNyAmIzQzOzY0NTksMTAgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbiBcbiBcdFx0LyogV2l0aCBzaGFkb3cgcGFnZSB0YWJsZXMsIGNyMiBjb250YWlucyBhIEdWQSBvciBuR1BBLiAqL1xuIFx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLm1tdS1cdTAwM2Vyb290X3JvbGUuZGlyZWN0KSB7XG4tXHRcdFx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gdHJ1ZTtcbiYjNDM7XHRcdFx0LyogQSB3cml0ZSBmYXVsdCBjYW4gcmVxdWlyZSBhIHJlYWQgZm9yIFJNVyBlbXVsYXRpb24uICovXG4mIzQzO1x0XHRcdGN0eHQtXHUwMDNlZ3BhX2FjY2VzcyA9IEFDQ19SRUFEX01BU0s7XG4mIzQzO1x0XHRcdGlmIChlbXVsYXRpb25fdHlwZSBcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEUpXG4mIzQzO1x0XHRcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzIHw9IEFDQ19XUklURV9NQVNLO1xuIFx0XHRcdGN0eHQtXHUwMDNlZ3BhX3ZhbCA9IGNyMl9vcl9ncGE7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5pbmRleCAwZjU5MTliMDkyZTQ3Li42Njc0NjU2ODBjY2RmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmhcbkBAIC00MDcsNiAmIzQzOzQwNyw4IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4gICogRU1VTFRZUEVfUEYgLSBTZXQgd2hlbiBhbiBpbnRlcmNlcHRlZCAjUEYgdHJpZ2dlcnMgdGhlIGVtdWxhdGlvbiwgaW4gd2hpY2ggY2FzZVxuICAqXHRcdCB0aGUgQ1IyL0dQQSB2YWx1ZSBwYXNzIG9uIHRoZSBzdGFjayBpcyB2YWxpZC5cbiAgKlxuJiM0MzsgKiBFTVVMVFlQRV9QRl9XUklURSAtIFNldCB3aXRoIEVNVUxUWVBFX1BGIHdoZW4gaGFyZHdhcmUgcmVwb3J0cyBhIHdyaXRlIGFjY2Vzcy5cbiYjNDM7ICpcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XG4gICpcdFx0XHRcdCBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmdcbiAgKlx0XHRcdFx0IGFuIGluc3RydWN0aW9uIChhZnRlciBjb21wbGV0aW5nIHVzZXJzcGFjZSBJL08pLlxuQEAgLTQ0NSw2ICYjNDM7NDQ3LDcgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbiAjZGVmaW5lIEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCAoMSBcdTAwM2NcdTAwM2MgNylcbiAjZGVmaW5lIEVNVUxUWVBFX1dSSVRFX1BGX1RPX1NQXHQgICAgKDEgXHUwMDNjXHUwMDNjIDgpXG4gI2RlZmluZSBFTVVMVFlQRV9TS0lQX1NPRlRfSU5UXHQgICAgKDEgXHUwMDNjXHUwMDNjIDkpXG4mIzQzOyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEVcdCAgICAoMSBcdTAwM2NcdTAwM2MgMTApXG4gXG4gI2RlZmluZSBFTVVMVFlQRV9TRVRfU09GVF9JTlRfVkVDVE9SKHYpXHQoKHUzMikoKHYpIFx1MDAyNiAweGZmKSBcdTAwM2NcdTAwM2MgMTYpXG4gI2RlZmluZSBFTVVMVFlQRV9HRVRfU09GVF9JTlRfVkVDVE9SKGUpXHQoKChlKSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9tbXVfcGFnZV9mYXVsdCYjMzQ7LAogICAgJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7LAogICAgJiMzNDtrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNlY3VyaXR5L3Blcm1pc3Npb24gY2hlY2tpbmcgaXNzdWUgaW4gS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gYnkgdHJhY2tpbmcgcGVybWl0dGVkIGVtdWxhdGVkIGFjY2Vzc2VzIChyZWFkIHZzIHdyaXRlKSBmb3IgY2FjaGVkIEdQQXMgcmF0aGVyIHRoYW4gcmV1c2luZyB0aGUgR1BBIHVuY29uZGl0aW9uYWxseS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGNvcmUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBvbiB4ODYsIHdoaWNoIGlzIGZ1bGx5IHRlc3RhYmxlIGFuZCBmdXp6YWJsZSB2aWEgS1ZNIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIzYTQ0Njk2NTBlMWEzODAyYzRlNTA1YmE2YWM2YTUxMTNjYTNmZTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAwMDowNDoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgKaW5kZXggM2UzNzVhZjE1YzAzNS4uMTA4ODZiZWE4MmM5MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgKQEAgLTM1NCw4ICYjNDM7MzU0LDggQEAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgewogCWJvb2wgaGF2ZV9leGNlcHRpb247CiAJc3RydWN0IHg4Nl9leGNlcHRpb24gZXhjZXB0aW9uOwogCi0JLyogR1BBIGF2YWlsYWJsZSAqLwotCWJvb2wgZ3BhX2F2YWlsYWJsZTsKJiM0MzsJLyogU2F2ZWQgR1BBIGFuZCBwZXJtaXR0ZWQgZW11bGF0ZWQgYWNjZXNzZXMuICovCiYjNDM7CXU2NCBncGFfYWNjZXNzOwogCWdwYV90IGdwYV92YWw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKaW5kZXggMDY0ZWNjMzNiOTI2Ny4uOTViOWVhYzk5NjJhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCkBAIC02NjMyLDYgJiM0Mzs2NjMyLDkgQEAgaW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnIKIAkJcmV0dXJuIHI7CiAKIGVtdWxhdGU6CiYjNDM7CWlmIChkaXJlY3QgJmFtcDsmYW1wOyAoZXJyb3JfY29kZSAmYW1wOyBQRkVSUl9XUklURV9NQVNLKSkKJiM0MzsJCWVtdWxhdGlvbl90eXBlIHw9IEVNVUxUWVBFX1BGX1dSSVRFOwomIzQzOwogCXJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbiwKIAkJCQkgICAgICAgaW5zbl9sZW4pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDc5NDY4ZGRmZTQ3MzYuLmFhNWRlYjdjNzNhYTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTUwODgsOCAmIzQzOzUwODgsMTMgQEAgc3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsCiAJICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmcKIAkgKiBvcGVyYXRpb24gdXNpbmcgcmVwIHdpbGwgb25seSBoYXZlIHRoZSBpbml0aWFsIEdQQSBmcm9tIHRoZSBOUEYKIAkgKiBvY2N1cnJlZC4KJiM0MzsJICoKJiM0MzsJICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlCiYjNDM7CSAqIHRoZSBHUEEgZm9yIHdyaXRlcyBvbmx5IGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgd3JpdGUgYWNjZXNzOwomIzQzOwkgKiBvdGhlcndpc2UsIHJlY2hlY2sgcGVybWlzc2lvbnMgZm9yIHRoZSBkZWNvZGVkIGFjY2Vzcy4KIAkgKi8KLQlpZiAoY3R4dC0mZ3Q7Z3BhX2F2YWlsYWJsZSAmYW1wOyZhbXA7IGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpICZhbXA7JmFtcDsKJiM0MzsJaWYgKChjdHh0LSZndDtncGFfYWNjZXNzICZhbXA7ICh3cml0ZSA/IEFDQ19XUklURV9NQVNLIDogQUNDX1JFQURfTUFTSykpICZhbXA7JmFtcDsKJiM0MzsJICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpICZhbXA7JmFtcDsKIAkgICAgKGFkZHIgJmFtcDsgflBBR0VfTUFTSykgPT0gKGN0eHQtJmd0O2dwYV92YWwgJmFtcDsgflBBR0VfTUFTSykpIHsKIAkJZ3BhID0gY3R4dC0mZ3Q7Z3BhX3ZhbDsKIAkJcmV0ID0gdmNwdV9pc19tbWlvX2dwYSh2Y3B1LCBhZGRyLCBncGEsIHdyaXRlKTsKQEAgLTU5MzgsNyAmIzQzOzU5NDMsNyBAQCBzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIAlrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgJmFtcDtjc19kYiwgJmFtcDtjc19sKTsKIAotCWN0eHQtJmd0O2dwYV9hdmFpbGFibGUgPSBmYWxzZTsKJiM0MzsJY3R4dC0mZ3Q7Z3BhX2FjY2VzcyA9IDA7CiAJY3R4dC0mZ3Q7ZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7CiAJY3R4dC0mZ3Q7dGYgPSAoY3R4dC0mZ3Q7ZWZsYWdzICZhbXA7IFg4Nl9FRkxBR1NfVEYpICE9IDA7CiAKQEAgLTY0NTQsNyAmIzQzOzY0NTksMTAgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwKIAogCQkvKiBXaXRoIHNoYWRvdyBwYWdlIHRhYmxlcywgY3IyIGNvbnRhaW5zIGEgR1ZBIG9yIG5HUEEuICovCiAJCWlmICh2Y3B1LSZndDthcmNoLm1tdS0mZ3Q7cm9vdF9yb2xlLmRpcmVjdCkgewotCQkJY3R4dC0mZ3Q7Z3BhX2F2YWlsYWJsZSA9IHRydWU7CiYjNDM7CQkJLyogQSB3cml0ZSBmYXVsdCBjYW4gcmVxdWlyZSBhIHJlYWQgZm9yIFJNVyBlbXVsYXRpb24uICovCiYjNDM7CQkJY3R4dC0mZ3Q7Z3BhX2FjY2VzcyA9IEFDQ19SRUFEX01BU0s7CiYjNDM7CQkJaWYgKGVtdWxhdGlvbl90eXBlICZhbXA7IEVNVUxUWVBFX1BGX1dSSVRFKQomIzQzOwkJCQljdHh0LSZndDtncGFfYWNjZXNzIHw9IEFDQ19XUklURV9NQVNLOwogCQkJY3R4dC0mZ3Q7Z3BhX3ZhbCA9IGNyMl9vcl9ncGE7CiAJCX0KIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oCmluZGV4IDBmNTkxOWIwOTJlNDcuLjY2NzQ2NTY4MGNjZGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmgKQEAgLTQwNyw2ICYjNDM7NDA3LDggQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwKICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2UKICAqCQkgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuCiAgKgomIzQzOyAqIEVNVUxUWVBFX1BGX1dSSVRFIC0gU2V0IHdpdGggRU1VTFRZUEVfUEYgd2hlbiBoYXJkd2FyZSByZXBvcnRzIGEgd3JpdGUgYWNjZXNzLgomIzQzOyAqCiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5CiAgKgkJCQkgc3RhdGUgYW5kIGluamVjdCBzaW5nbGUtc3RlcCAjREJzIGFmdGVyIHNraXBwaW5nCiAgKgkJCQkgYW4gaW5zdHJ1Y3Rpb24gKGFmdGVyIGNvbXBsZXRpbmcgdXNlcnNwYWNlIEkvTykuCkBAIC00NDUsNiAmIzQzOzQ0Nyw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsCiAjZGVmaW5lIEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCAoMSAmbHQ7Jmx0OyA3KQogI2RlZmluZSBFTVVMVFlQRV9XUklURV9QRl9UT19TUAkgICAgKDEgJmx0OyZsdDsgOCkKICNkZWZpbmUgRU1VTFRZUEVfU0tJUF9TT0ZUX0lOVAkgICAgKDEgJmx0OyZsdDsgOSkKJiM0MzsjZGVmaW5lIEVNVUxUWVBFX1BGX1dSSVRFCSAgICAoMSAmbHQ7Jmx0OyAxMCkKIAogI2RlZmluZSBFTVVMVFlQRV9TRVRfU09GVF9JTlRfVkVDVE9SKHYpCSgodTMyKSgodikgJmFtcDsgMHhmZikgJmx0OyZsdDsgMTYpCiAjZGVmaW5lIEVNVUxUWVBFX0dFVF9TT0ZUX0lOVF9WRUNUT1IoZSkJKCgoZSkgJmd0OyZndDsgMTYpICZhbXA7IDB4ZmYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0geDg2IFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdG91Y2hpbmcgS1ZNJiMzOTtzIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gYW5kIHRoZSBNTVUgY29kZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGZhaXJseSBmb2N1c2VkLCBidXQgd2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcy4KClRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIGBncGFfYXZhaWxhYmxlYCBmbGFnIGluIHRoZSBgeDg2X2VtdWxhdGVfY3R4dGAgc3RydWN0dXJlLiBJdCYjMzk7cyBiZWVuIHJlcGxhY2VkIHdpdGggYGdwYV9hY2Nlc3NgLCB3aGljaCBpcyBub3cgYSBgdTY0YC4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgdGhhdCB0aGUgYWNjZXNzIGNvbnRyb2wgaXMgYmVjb21pbmcgbW9yZSBncmFudWxhci4gTXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmaWVsZCB0ZWxscyBtZSB0aGF0IGl0IGlzIGxpa2VseSB0byBiZSBhIGNvbWJpbmF0aW9uIG9mIHJlYWQgYW5kIHdyaXRlIGJpdHMuIAoKVGhlIGNoYW5nZXMgaW4gYGt2bV9tbXVfcGFnZV9mYXVsdCgpYCBzZXR0aW5nIGBFTVVMVFlQRV9QRl9XUklURWAgYmFzZWQgb24gdGhlIGZhdWx0IHR5cGUgKGBQRkVSUl9XUklURV9NQVNLYCkgbG9vayBleHBlY3RlZC4gVGhhdCBzdWdnZXN0cyBhbiBhdHRlbXB0IHRvIHRyYWNrIHdyaXRlIGFjY2VzcyBkdXJpbmcgZW11bGF0aW9uLgoKYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSgpYCBub3cgdXNlcyB0aGUgbmV3IGBncGFfYWNjZXNzYCBmaWVsZCBhbmQgY2hlY2tzIGZvciBgQUNDX1dSSVRFX01BU0tgIGFuZCBgQUNDX1JFQURfTUFTS2AuIFRoYXQgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBgZ3BhX2FjY2Vzc2AgZmllbGQsIEkgYXNzdW1lIHRoZSBiaXRtYXNrIG9wZXJhdGlvbnMgYXJlIHRoZSBrZXkgaGVyZS4gVGhlIGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGUgb2YgYGdwYV9hY2Nlc3NgIGluIHRoZSBvdGhlciBmdW5jdGlvbnMsIHN1Y2ggYXMgYGluaXRfZW11bGF0ZV9jdHh0KClgIGFuZCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKWAsIHNob3cgaG93IHRoZSBhY2Nlc3MgZmxhZ3MgYXJlIGJlaW5nIG1hbmFnZWQgZHVyaW5nIHRoZSBlbXVsYXRpb24gcHJvY2Vzcy4KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciwgdGhvdWdoLiBUaGUgZGVmaW5pdGlvbnMgYW5kIHVzYWdlIG9mIGBBQ0NfUkVBRF9NQVNLYCBhbmQgYEFDQ19XUklURV9NQVNLYCBhcmUgdGhlIGtleSBoZXJlLiBBbHNvLCB3aGF0IGV4YWN0bHkgaXMgYEVNVUxUWVBFX1BGX1dSSVRFYD8gV2hhdCBhcmUgYWxsIHRoZSBwb3RlbnRpYWwgdmFsdWVzIG9mIGBlbXVsYXRpb25fdHlwZWA/IEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBvcGVyYXRpb25zIGhhdmUgd3JpdGUgYWNjZXNzIGFuZCB3aGljaCBoYXZlIHJlYWQgYWNjZXNzIHRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGdyZXBwZXIgdGhpcyBhbmQgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYXMgdXN1YWwsIHRvIHNlZSBob3cgdGhlc2UgbmV3IGFjY2VzcyBmbGFncyBhcmUgYmVpbmcgdXNlZCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBlbXVsYXRpb24gc3RyYXRlZ3kuIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlncy9mb2N1cyBzeW1ib2xzLiBJIGJldCB0aGVyZSBpcyBtb3JlIHRoYW4ganVzdCB0aGlzIHNtYWxsIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbW11X3BhZ2VfZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21tdS5oPTE0Nj12b2lkIGt2bV9pbml0X3NoYWRvd19lcHRfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBleGVjb25seSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQ5LVxuYXJjaC94ODYva3ZtL21tdS5oOjE1MDppbnQga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTUxLVx0XHQgICAgICAgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKTtcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ4OTA9aW50IGt2bV9oYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlcnJvcl9jb2RlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNDkxOC1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDkxOTpcdFx0ciA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBmYXVsdF9hZGRyZXNzLCBlcnJvcl9jb2RlLCBpbnNuLFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTIwLVx0XHRcdFx0aW5zbl9sZW4pO1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjQ3ND1zdGF0aWMgaW50IGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTY2LVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NTY3OmludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU2OC1cdFx0ICAgICAgIHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2NDAtfVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjQxOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fbW11X3BhZ2VfZmF1bHQpO1xuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NjQyLVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk3ND1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjAyNC1cdHRyYWNlX2t2bV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIwMjU6XHRyYyA9IGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjYtXHRcdFx0XHRjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0RFQ09ERUFTU0lTVFMpID9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTgzPXN0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTE1LVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDoxMTY6XHRyZXR1cm4ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSwgTlVMTCwgMCk7XG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTExNy19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYz02MDA1PXN0YXRpYyBpbnQgaGFuZGxlX2VwdF9taXNjb25maWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjAyMi1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6NjAyMzpcdHJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgZ3BhLCBQRkVSUl9SU1ZEX01BU0ssIE5VTEwsIDApO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDI0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDgzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIEVtdWxhdGlvbiBFbmdpbmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBlbXVsYXRpb24gZW5naW5lIGlzIHdvcmtpbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvcmUgZnVuY3Rpb25zLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCDigJMgdGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBleGVjdXRpb24gcHJvY2VzcywgdGhlIG1haW4gZGlzcGF0Y2ggcG9pbnQuIEkgd2FudCB0byBzZWUgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGluc3RydWN0aW9uIHR5cGVzLCBvcGVyYW5kIGZldGNoaW5nLCBhbmQgdWx0aW1hdGVseSwgdGhlIGVtdWxhdGlvbiBpdHNlbGYuCgpUaGVuLCBzaW5jZSB0aGlzIGlzIGFuIGVtdWxhdG9yLCBJIGhhdmUgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkuIFRoYXQgbGVhZHMgbWUgZGlyZWN0bHkgdG8gYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZWAuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGNydWNpYWwgYXNwZWN0IG9mIHRyYW5zbGF0aW5nIHRoZSBlbXVsYXRlZCBlbnZpcm9ubWVudCYjMzk7cyBtZW1vcnkgYWNjZXNzZXMgdG8gdGhlIGhvc3QgbWFjaGluZSwgbWFraW5nIHN1cmUgcmVhZHMgYW5kIHdyaXRlcyBhcmUgY29ycmVjdGx5IGhhbmRsZWQuIFVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBpcyBtYW5hZ2VkIGluIHRoaXMgY29udGV4dCBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZW11bGF0b3ImIzM5O3MgbGltaXRhdGlvbnMuIEkgd2lsbCBhbmFseXplIGhvdyBhZGRyZXNzZXMgYXJlIHRyYW5zbGF0ZWQgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHBhZ2UgYm91bmRhcmllcywgYW5kIHZpcnR1YWwtdG8tcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbi4gVGhvc2UgYXJlIG15IGluaXRpYWwgdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbW11L21tdS5jPTY1Njc9aW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJvcl9jb2RlLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjYzNy1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NjYzODpcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjYzOS1cdFx0XHRcdCAgICAgICBpbnNuX2xlbik7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTUxNTM9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01MjI2LVx0ICogYWZ0ZXIgY29tcGxldGluZyBlbXVsYXRpb24gKHNlZSB0aGUgY2hlY2sgb24gdmNwdS1cdTAwM2VtbWlvX25lZWRlZCBpblxuYXJjaC94ODYva3ZtL3g4Ni5jOjUyMjc6XHQgKiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbigpKS5cbmFyY2gveDg2L2t2bS94ODYuYy01MjI4LVx0ICovXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTYzMzM9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKHg4Nl9kZWNvZGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTYzMzQtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjMzNTppbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTYzMzYtXHRcdFx0ICAgIGludCBlbXVsYXRpb25fdHlwZSwgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02NTU4PWludCBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBlbXVsYXRpb25fdHlwZSlcbmFyY2gveDg2L2t2bS94ODYuYy02NTU5LXtcbmFyY2gveDg2L2t2bS94ODYuYzo2NTYwOlx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIGVtdWxhdGlvbl90eXBlLCBOVUxMLCAwKTtcbmFyY2gveDg2L2t2bS94ODYuYy02NTYxLX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjU2ND1pbnQga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25fZnJvbV9idWZmZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NTY2LXtcbmFyY2gveDg2L2t2bS94ODYuYzo2NTY3Olx0cmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIDAsIDAsIGluc24sIGluc25fbGVuKTtcbmFyY2gveDg2L2t2bS94ODYuYy02NTY4LX1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzcxPWludCB4ODZfZGVjb2RlX2VtdWxhdGVkX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGVtdWxhdGlvbl90eXBlLFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM3Mi1cdFx0XHRcdCAgICB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pO1xuYXJjaC94ODYva3ZtL3g4Ni5oOjM3MzppbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM3NC1cdFx0XHQgICAgaW50IGVtdWxhdGlvbl90eXBlLCB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBLY29uZmlnIERlcGVuZGVuY2llcyBmb3IgS1ZNIHg4NioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzIEtWTSB4ODYgY29uZmlndXJhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIG9wdGlvbnMgYXJlIHByZXNlbnQgYW5kIHByb3Blcmx5IHNldCBmb3IgdGhlIGludGVuZGVkIHNldHVwLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGVuYWJsaW5nIEtWTTsgaXQmIzM5O3MgYWJvdXQgdGhlIGVudGlyZSBkZXBlbmRlbmN5IGNoYWluIHRoYXQgc3VwcG9ydHMgaXRzIGZ1bmN0aW9uYWxpdHkgb24geDg2IGFyY2hpdGVjdHVyZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4gU28sIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSB4ODYtc3BlY2lmaWMgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIHJlc2lkZS4gSSYjMzk7bGwgbmVlZCB0byBwb3JlIG92ZXIgdGhhdCBmaWxlIG1ldGljdWxvdXNseS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBLVk0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRzb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuICAgNzpcdFxuICAgODpcdG1lbnVjb25maWcgVklSVFVBTElaQVRJT05cbiAgIDk6XHRcdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbiAgMTA6XHRcdGRlZmF1bHQgeVxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1biBvdGhlclxuICAxMzpcdFx0ICBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cbiAgMTQ6XHRcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cbiAgMTc6XHRcbiAgMTg6XHRpZiBWSVJUVUFMSVpBVElPTlxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBLVk1fWDg2XG4gIDIxOlx0XHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4gIDIyOlx0XHRzZWxlY3QgS1ZNX0NPTU1PTlxuICAyMzpcdFx0c2VsZWN0IEtWTV9FTElERV9UTEJfRkxVU0hfSUZfWU9VTkdcbiAgMjQ6XHRcdHNlbGVjdCBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXG4gIDI1Olx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxuICAyNjpcdFx0c2VsZWN0IEhBVkVfS1ZNX1BGTkNBQ0hFXG4gIDI3Olx0XHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19UU09cbiAgMjg6XHRcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX0FDUV9SRUxcbiAgMjk6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXG4gIDMwOlx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRX1JPVVRJTkdcbiAgMzE6XHRcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiAgMzI6XHRcdHNlbGVjdCBWSE9TVF9UQVNLXG4gIDMzOlx0XHRzZWxlY3QgS1ZNX0FTWU5DX1BGXG4gIDM0Olx0XHRzZWxlY3QgVVNFUl9SRVRVUk5fTk9USUZJRVJcbiAgMzU6XHRcdHNlbGVjdCBLVk1fTU1JT1xuICAzNjpcdFx0c2VsZWN0IFNDSEVEX0lORk9cbiAgMzc6XHRcdHNlbGVjdCBQRVJGX0VWRU5UU1xuICAzODpcdFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTXG4gIDM5Olx0XHRzZWxlY3QgUEVSRl9HVUVTVF9NRURJQVRFRF9QTVVcbiAgNDA6XHRcdHNlbGVjdCBIQVZFX0tWTV9NU0lcbiAgNDE6XHRcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXG4gIDQyOlx0XHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxuICA0MzpcdFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gIDQ0Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gIDQ1Olx0XHRzZWxlY3QgS1ZNX1ZGSU9cbiAgNDY6XHRcdHNlbGVjdCBIQVZFX0tWTV9QTV9OT1RJRklFUiBpZiBQTVxuICA0NzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4gIDQ4Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuICA0OTpcdFx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG4gIDUwOlx0XHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxuICA1MTpcdFxuICA1MjpcdGNvbmZpZyBLVk1cbiAgNTM6XHRcdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuICA1NDpcdFx0ZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQ1xuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBTdXBwb3J0IGhvc3RpbmcgZnVsbHkgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMgdXNpbmcgaGFyZHdhcmVcbiAgNTc6XHRcdCAgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gIFlvdSB3aWxsIG5lZWQgYSBmYWlybHkgcmVjZW50XG4gIDU4Olx0XHQgIHByb2Nlc3NvciBlcXVpcHBlZCB3aXRoIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuIFlvdSB3aWxsIGFsc29cbiAgNTk6XHRcdCAgbmVlZCB0byBzZWxlY3Qgb25lIG9yIG1vcmUgb2YgdGhlIHByb2Nlc3NvciBtb2R1bGVzIGJlbG93LlxuICA2MDpcdFxuICA2MTpcdFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXG4gIDYyOlx0XHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxuICA2MzpcdFxuICA2NDpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNjU6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLlxuICA2NjpcdFxuICA2NzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2ODpcdFxuICA2OTpcdGNvbmZpZyBLVk1fV0VSUk9SXG4gIDcwOlx0XHRib29sIFwmIzM0O0NvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclwmIzM0O1xuICA3MTpcdFx0IyBEaXNhbGxvdyBLVk0mIzM5O3MgLVdlcnJvciBpZiBLQVNBTiBpcyBlbmFibGVkLCBlLmcuIHRvIGd1YXJkIGFnYWluc3RcbiAgNzI6XHRcdCMgcmFuZG9taXplZCBjb25maWdzIGZyb20gc2VsZWN0aW5nIEtWTV9XRVJST1I9eSwgd2hpY2ggZG9lc24mIzM5O3QgcGxheVxuICA3MzpcdFx0IyBuaWNlIHdpdGggS0FTQU4uICBLQVNBTiBidWlsZHMgZ2VuZXJhdGVzIHdhcm5pbmdzIGZvciB0aGUgZGVmYXVsdFxuICA3NDpcdFx0IyBGUkFNRV9XQVJOLCBpLmUuIEtWTV9XRVJST1I9eSB3aXRoIEtBU0FOPXkgcmVxdWlyZXMgc3BlY2lhbCB0dW5pbmcuXG4gIDc1Olx0XHQjIEJ1aWxkaW5nIEtWTSB3aXRoIC1XZXJyb3IgYW5kIEtBU0FOIGlzIHN0aWxsIGRvYWJsZSB2aWEgZW5hYmxpbmdcbiAgNzY6XHRcdCMgdGhlIGtlcm5lbC13aWRlIFdFUlJPUj15LlxuICA3NzpcdFx0ZGVwZW5kcyBvbiBLVk1fWDg2IFx1MDAyNlx1MDAyNiAoKEVYUEVSVCBcdTAwMjZcdTAwMjYgIUtBU0FOKSB8fCBXRVJST1IpXG4gIDc4Olx0XHRoZWxwXG4gIDc5Olx0XHQgIEFkZCAtV2Vycm9yIHRvIHRoZSBidWlsZCBmbGFncyBmb3IgS1ZNLlxuICA4MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGZyb20gYGFyY2gveDg2L2t2bS9LY29uZmlnYDoKCioqUmV2aWV3aW5nIEtjb25maWc6IExpbmVzIDgwLTEyMCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRob3NlIGxpbmVzIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSA4MCB0aHJvdWdoIDEyMC4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aCwgSSBleHBlY3Qgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8geDg2IGFyY2hpdGVjdHVyZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhpcyBmb3IgZGVwZW5kZW5jaWVzLCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQsIG9mIGNvdXJzZSwgYW55IG5ldyBmZWF0dXJlcyBvciBjYXBhYmlsaXRpZXMgYmVpbmcgaW50cm9kdWNlZC4KClJpZ2h0IG9mZiB0aGUgYmF0LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBtYWluIEtWTSBmZWF0dXJlIGVuYWJsZSBvcHRpb25zLCB0aGUgY29yZSBgQ09ORklHX0tWTWAgYW5kIHdoYXQgaXQgZGVwZW5kcyBvbi4gQW55dGhpbmcgc3BlY2lmaWMgdG8gdGhlIHg4NiBhcmNoaXRlY3R1cmUgc2hvdWxkIGJlIGRlZmluZWQgbmVhciBpdCwgb3IgZGVwZW5kZW50IG9uIGl0LiBUaGUgc3RydWN0dXJlIGlzIHVzdWFsbHkgcHJldHR5IGNsZWFyOiBib29sIG9wdGlvbnMgZm9yIGNvcmUgZnVuY3Rpb25hbGl0eSwgdHJpc3RhdGUgb3B0aW9ucyBmb3IgcG90ZW50aWFsbHkgbW9kdWxhciBjb21wb25lbnRzLCBhbmQgaGVscCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHdoYXQgZWFjaCBvcHRpb24gYWN0dWFsbHkgKmRvZXMqLiBJIGV4cGVjdCBzb21lIG5lc3RlZCAmIzM5O2lmJiMzOTsgc3RhdGVtZW50cyB0byBkZWZpbmUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKGxpa2UgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucykuIEkmIzM5O2xsIGJlIGNoZWNraW5nIHRvIHNlZSB3aGF0IHRoZXkgYXJlLgoKSSBhbHNvIGFudGljaXBhdGUgbG9va2luZyBmb3IgYW55dGhpbmcgYXJvdW5kIHNwZWNpZmljIGhhcmR3YXJlIGV4dGVuc2lvbnMsIGxpa2UgSW50ZWwmIzM5O3MgVlQteCBvciBBTUQtVi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgaGVyZSwgb3IgbWF5YmUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgcGFnZSB0YWJsZXMgKEVQVCk/IEFyZSB0aGVyZSBhbnkgbmV3IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgZGVmaW5lZD8gU2VjdXJpdHkgaW1wbGljYXRpb25zIHdpbGwgYmUgbmVhciB0aGUgdG9wIG9mIG15IGxpc3QsIGVzcGVjaWFsbHkgYW55dGhpbmcgcmVsYXRlZCB0byBtaXRpZ2F0aW9ucyBmb3IgdnVsbmVyYWJpbGl0aWVzIGxpa2UgU3BlY3RyZSBvciBNZWx0ZG93biwgaW4gdGhlIEtWTSBjb250ZXh0LiBUaGUgcmVjZW50IHdvcmsgb24gaGFyZHdhcmUgbWl0aWdhdGlvbnMgcHJvYmFibHkgaGFzIGEgaGFuZCBpbiB0aGlzIGFyZWEuCgpBcyBJIHJlYWQsIEkmIzM5O2xsIGJlIGFzc2Vzc2luZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGVzZSBvcHRpb25zIG9uIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIGNvbXBhdGliaWxpdHkuIEkmIzM5O2xsIGJlIG5vdGluZyBhbnkgY2hhbmdlcyB0aGF0IG1pZ2h0IHJlcXVpcmUgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGR1cmluZyBhIGtlcm5lbCB1cGdyYWRlIG9yIHdoZW4gY29uZmlndXJpbmcgYSBuZXcgS1ZNIGVudmlyb25tZW50LiBXaGF0IEkmIzM5O20gaG9waW5nIHRvIHNlZSBpcyBjbGFyaXR5OiB3ZWxsLWRvY3VtZW50ZWQgb3B0aW9ucyB3aXRoIGNsZWFyIGRlcGVuZGVuY2llcyBhbmQgYSBsb2dpY2FsIHN0cnVjdHVyZS4gQSBjbGVhbiBgS2NvbmZpZ2AgbWFrZXMgZm9yIGVhc2llciBtYWludGVuYW5jZSBhbmQgbW9yZSByb2J1c3QgY29uZmlndXJhdGlvbnMgZG93biB0aGUgbGluZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgxOlx0XHQgIElmIGluIGRvdWJ0LCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAgODI6XHRcbiAgODM6XHRjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuICA4NDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcJiMzNDtcbiAgODU6XHRcdGRlcGVuZHMgb24gRVhQRVJUXG4gIDg2Olx0XHRkZXBlbmRzIG9uIEtWTV9YODYgXHUwMDI2XHUwMDI2IFg4Nl82NFxuICA4NzpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4gIDg4Olx0XHRoZWxwXG4gIDg5Olx0XHQgIEVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNcy4gIEN1cnJlbnRseSwgc29mdHdhcmUtXG4gIDkwOlx0XHQgIHByb3RlY3RlZCBWTXMgYXJlIHB1cmVseSBhIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHZlaGljbGUgZm9yXG4gIDkxOlx0XHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFwmIzM0O3JlYWxcJiMzNDsgVk0gd29ya2xvYWQgYXMgYVxuICA5MjpcdFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cbiAgOTM6XHRcbiAgOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7TlwmIzM0Oy5cbiAgOTU6XHRcbiAgOTY6XHRjb25maWcgS1ZNX0lOVEVMXG4gIDk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gIDk4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgSUEzMl9GRUFUX0NUTFxuICA5OTpcdFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxuIDEwMDpcdFx0aGVscFxuIDEwMTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJiMzOTtzIFZUXG4gMTAyOlx0XHQgIGV4dGVuc2lvbnMsIGEuay5hLiBWaXJ0dWFsIE1hY2hpbmUgRXh0ZW5zaW9ucyAoVk1YKS5cbiAxMDM6XHRcbiAxMDQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTA1Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cbiAxMDY6XHRcbiAxMDc6XHRjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXG4gMTA4Olx0ICAgICAgICBib29sIFwmIzM0O0NoZWNrIHRoYXQgZ3Vlc3RzIGRvIG5vdCByZWNlaXZlICNWRSBleGNlcHRpb25zXCYjMzQ7XG4gMTA5Olx0ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcdTAwMjZcdTAwMjYgRVhQRVJUXG4gMTEwOlx0ICAgICAgICBoZWxwXG4gMTExOlx0ICAgICAgICAgIENoZWNrcyB0aGF0IEtWTSYjMzk7cyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgY29kZSB3aWxsIG5vdCBpbmNvcnJlY3RseVxuIDExMjpcdCAgICAgICAgICBsZXQgZ3Vlc3RzIHJlY2VpdmUgYSB2aXJ0dWFsaXphdGlvbiBleGNlcHRpb24uICBWaXJ0dWFsaXphdGlvblxuIDExMzpcdCAgICAgICAgICBleGNlcHRpb25zIHdpbGwgYmUgdHJhcHBlZCBieSB0aGUgaHlwZXJ2aXNvciByYXRoZXIgdGhhbiBpbmplY3RlZFxuIDExNDpcdCAgICAgICAgICBpbiB0aGUgZ3Vlc3QuXG4gMTE1Olx0XG4gMTE2Olx0ICAgICAgICAgIE5vdGU6IHNvbWUgQ1BVcyBhcHBlYXIgdG8gZ2VuZXJhdGUgc3B1cmlvdXMgRVBUIFZpb2xhdGlvbnMgI1ZFc1xuIDExNzpcdCAgICAgICAgICB0aGF0IHRyaWdnZXIgS1ZNJiMzOTtzIFdBUk4sIGluIHBhcnRpY3VsYXIgd2l0aCBlcHRhZD0wIGFuZC9vciBuZXN0ZWRcbiAxMTg6XHQgICAgICAgICAgdmlydHVhbGl6YXRpb24uXG4gMTE5Olx0XG4gMTIwOlx0ICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTIxOlx0XG4gMTIyOlx0Y29uZmlnIFg4Nl9TR1hfS1ZNXG4gMTIzOlx0XHRib29sIFwmIzM0O1NvZnR3YXJlIEd1YXJkIGVYdGVuc2lvbnMgKFNHWCkgVmlydHVhbGl6YXRpb25cJiMzNDtcbiAxMjQ6XHRcdGRlcGVuZHMgb24gWDg2X1NHWCBcdTAwMjZcdTAwMjYgS1ZNX0lOVEVMXG4gMTI1Olx0XHRoZWxwXG4gMTI2Olx0XG4gMTI3Olx0XHQgIEVuYWJsZXMgS1ZNIGd1ZXN0cyB0byBjcmVhdGUgU0dYIGVuY2xhdmVzLlxuIDEyODpcdFxuIDEyOTpcdFx0ICBUaGlzIGluY2x1ZGVzIHN1cHBvcnQgdG8gZXhwb3NlIFwmIzM0O3Jhd1wmIzM0OyB1bnJlY2xhaW1hYmxlIGVuY2xhdmUgbWVtb3J5IHRvXG4gMTMwOlx0XHQgIGd1ZXN0cyB2aWEgYSBkZXZpY2Ugbm9kZSwgZS5nLiAvZGV2L3NneF92ZXBjLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDQxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS1ZNIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBtbXUuY2AgYW5kIGB4ODYuY2AgYXJlIGNvbXBpbGVkIHdpdGhpbiB0aGUgS1ZNIHg4NiBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gY2hlY2sgdGhlIG9idmlvdXMgcGxhY2U6IGBhcmNoL3g4Ni9rdm0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQgbWFnaWMgZm9yIHRoYXQgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGxpdmVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZXBlbmRlbmN5IGNoYWluIGFuZCBidWlsZCBydWxlcyB0aGF0IGRlZmluZSBob3cgdGhvc2UgdHdvIHNvdXJjZSBmaWxlcyBnZXQgdHVybmVkIGludG8gb2JqZWN0IGZpbGVzIGFuZCB0aGVuIGxpbmtlZCBpbnRvIHRoZSBmaW5hbCBLVk0ga2VybmVsIG1vZHVsZXMuIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCBmbGFncyBhcmUgYmVpbmcgdXNlZCwgYW55IHNwZWNpYWwgbGlicmFyaWVzIHRoYXQgYXJlIGxpbmtlZCwgYW5kIHRoZSBvdmVyYWxsIGNvbXBpbGF0aW9uIGZsb3cuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGxvd2VyIGxldmVscyBvZiB0aGUgYXJjaGl0ZWN0dXJlIGdldCBidWlsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0Y2NmbGFncy15ICYjNDM7PSAtSSAkKHNyY3RyZWUpL2FyY2gveDg2L2t2bVxuICAgNDpcdGNjZmxhZ3MtJChDT05GSUdfS1ZNX1dFUlJPUikgJiM0Mzs9IC1XZXJyb3JcbiAgIDU6XHRcbiAgIDY6XHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXG4gICA3Olx0XG4gICA4Olx0a3ZtLXlcdFx0XHQmIzQzOz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXG4gICA5Olx0XHRcdFx0ICAgbXRyci5vIGRlYnVnZnMubyBtbXUvbW11Lm8gbW11L3BhZ2VfdHJhY2subyBtbXUvc3B0ZS5vXG4gIDEwOlx0XG4gIDExOlx0a3ZtLSQoQ09ORklHX1g4Nl82NCkgJiM0Mzs9IG1tdS90ZHBfaXRlci5vIG1tdS90ZHBfbW11Lm9cbiAgMTI6XHRrdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgJiM0Mzs9IGk4MjU5Lm8gaTgyNTQubyBpb2FwaWMub1xuICAxMzpcdGt2bS0kKENPTkZJR19LVk1fSFlQRVJWKSAmIzQzOz0gaHlwZXJ2Lm9cbiAgMTQ6XHRrdm0tJChDT05GSUdfS1ZNX1hFTilcdCYjNDM7PSB4ZW4ub1xuICAxNTpcdGt2bS0kKENPTkZJR19LVk1fU01NKVx0JiM0Mzs9IHNtbS5vXG4gIDE2Olx0XG4gIDE3Olx0a3ZtLWludGVsLXlcdFx0JiM0Mzs9IHZteC92bXgubyB2bXgvdm1lbnRlci5vIHZteC9wbXVfaW50ZWwubyB2bXgvdm1jczEyLm8gXFxcbiAgMTg6XHRcdFx0XHQgICB2bXgvbmVzdGVkLm8gdm14L3Bvc3RlZF9pbnRyLm8gdm14L21haW4ub1xuICAxOTpcdFxuICAyMDpcdGt2bS1pbnRlbC0kKENPTkZJR19YODZfU0dYX0tWTSlcdCYjNDM7PSB2bXgvc2d4Lm9cbiAgMjE6XHRrdm0taW50ZWwtJChDT05GSUdfS1ZNX0hZUEVSVilcdCYjNDM7PSB2bXgvaHlwZXJ2Lm8gdm14L2h5cGVydl9ldm1jcy5vXG4gIDIyOlx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXHQmIzQzOz0gdm14L3RkeC5vXG4gIDIzOlx0XG4gIDI0Olx0a3ZtLWFtZC15XHRcdCYjNDM7PSBzdm0vc3ZtLm8gc3ZtL3ZtZW50ZXIubyBzdm0vcG11Lm8gc3ZtL25lc3RlZC5vIHN2bS9hdmljLm9cbiAgMjU6XHRcbiAgMjY6XHRrdm0tYW1kLSQoQ09ORklHX0tWTV9BTURfU0VWKVx0JiM0Mzs9IHN2bS9zZXYub1xuICAyNzpcdGt2bS1hbWQtJChDT05GSUdfS1ZNX0hZUEVSVilcdCYjNDM7PSBzdm0vaHlwZXJ2Lm9cbiAgMjg6XHRcbiAgMjk6XHRpZmRlZiBDT05GSUdfSFlQRVJWXG4gIDMwOlx0a3ZtLXlcdFx0XHQmIzQzOz0ga3ZtX29uaHlwZXJ2Lm9cbiAgMzE6XHRrdm0taW50ZWwteVx0XHQmIzQzOz0gdm14L3ZteF9vbmh5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuICAzMjpcdGt2bS1hbWQteVx0XHQmIzQzOz0gc3ZtL3N2bV9vbmh5cGVydi5vXG4gIDMzOlx0ZW5kaWZcbiAgMzQ6XHRcbiAgMzU6XHRvYmotJChDT05GSUdfS1ZNX1g4NilcdCYjNDM7PSBrdm0ub1xuICAzNjpcdG9iai0kKENPTkZJR19LVk1fSU5URUwpXHQmIzQzOz0ga3ZtLWludGVsLm9cbiAgMzc6XHRvYmotJChDT05GSUdfS1ZNX0FNRClcdCYjNDM7PSBrdm0tYW1kLm9cbiAgMzg6XHRcbiAgMzk6XHRBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxuICA0MDpcdCQob2JqKS9zdm0vdm1lbnRlci5vOiAkKG9iaikva3ZtLWFzbS1vZmZzZXRzLmhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzAKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogMTI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLVk0geDg2IEluc3RydWN0aW9uIEVtdWxhdGlvbiBhbmQgUGFnZSBGYXVsdCBIYW5kbGluZzogQSBGdXp6aW5nIE9wcG9ydHVuaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgY2hhbmdlIGluIEtWTSYjMzk7cyB4ODYgTU1VIGFuZCBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMuIFRoZSBjb3JlIG9mIGl0IGJvaWxzIGRvd24gdG8gaG93IEdQQSBjYWNoaW5nIGFuZCBwZXJtaXNzaW9uIGNoZWNrcyB3b3JrIGR1cmluZyBpbnN0cnVjdGlvbiBlbXVsYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBkaXJlY3QgTU1VIG1vZGVzIGxpa2UgVERQLCBOUFQsIG9yIEVQVCBhcmUgaW4gcGxheS4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGFuIGFzc3VtcHRpb24gdGhhdCBhIGZhdWx0ZWQgR1BBIGNvdWxkIGJlIHJlLXVzZWQsIHdpdGhvdXQgZGlmZmVyZW50aWF0aW5nIHdoZXRoZXIgdGhlIHBhZ2UgZmF1bHQgd2FzIGEgcmVhZCBvciBhIHdyaXRlLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBtb3JlIHJvYnVzdCBtZWNoYW5pc20gdG8gY29ycmVjdGx5IGhhbmRsZSByZWFkL3dyaXRlIHBlcm1pc3Npb25zLgoKRXNzZW50aWFsbHksIGBrdm1fbW11X3BhZ2VfZmF1bHRgIG5vdyBzZXRzIGBFTVVMVFlQRV9QRl9XUklURWAgaWYgaXQmIzM5O3MgYSB3cml0ZSBmYXVsdC4gVGhlbiwgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCB0cmFja3MgYWNjZXNzIHR5cGUgKHJlYWQgb3Igd3JpdGUpLiBGaW5hbGx5LCBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCBjaGVja3MgdGhlc2UgYWNjZXNzIHR5cGVzIHRvIGRldGVybWluZSBpZiBhIEdQQSBpcyBzdGlsbCB2YWxpZCBmb3IgcmV1c2UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHBlcm1pc3Npb24gYnlwYXNzZXMgaWYgZ3Vlc3QgY29kZSBtb2RpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gYmV0d2VlbiB0aGUgZmF1bHQgYW5kIGVtdWxhdGlvbiBvciBpZiBhbiBpbnN0cnVjdGlvbiByZWFkcyBmcm9tIGFuIGFkZHJlc3MgdGhhdCBjYXVzZWQgYSB3cml0ZSBmYXVsdC4KClRoaXMgY2hhbmdlIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgdG91Y2hlcyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBLVk0mIzM5O3MgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCB3aGljaCBpcyBoZWF2aWx5IHVzZWQgZm9yIE1NSU8gZW11bGF0aW9uLCBoYW5kbGluZyB3cml0ZS1wcm90ZWN0ZWQgcGFnZXMsIGV0Yy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEtWTSBpcyBzdGFuZGFyZCBvbiB4ODYsIGFuZCBmdXp6aW5nIHdpdGggc3l6a2FsbGVyIHVzaW5nIGAvZGV2L2t2bWAsIGBLVk1fUlVOYCwgYW5kIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTmAgaXMgYSBzdHJhaWdodGZvcndhcmQgd2F5IHRvIHRhcmdldCB0aGlzLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOiBga3ZtX21tdV9wYWdlX2ZhdWx0YCwgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCwgYW5kIGBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbmAuIFdlIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EYC4gV2UmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoZSBkZXBlbmRlbmNpZXMgaW4gYEtjb25maWdgLCBhbmQgZXZlcnl0aGluZyBsb29rcyBzb2xpZC4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gY292ZXIgYSB2YXJpZXR5IG9mIGNvbmZpZ3VyYXRpb25zLgoKVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIGNoYW5nZSB3aXRoIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IHByb3RlY3Rpb24sIG1ha2luZyBpdCBhIGhpZ2gtdmFsdWUgZnV6emluZyB0YXJnZXQuIFdlIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBmdW5jdGlvbnMsIGNvbmZpZ3MsIGFuZCB0aGUgbWVjaGFuaXNtLiBMZXQmIzM5O3MgbW92ZSBmb3J3YXJkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX21tdV9wYWdlX2ZhdWx0JiMzNDssCiAgICAmIzM0O3g4Nl9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDssCiAgICAmIzM0O2t2bV9lbXVsYXRlX2luc3RydWN0aW9uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2VjdXJpdHkvcGVybWlzc2lvbiBjaGVja2luZyBpc3N1ZSBpbiBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBieSB0cmFja2luZyBwZXJtaXR0ZWQgZW11bGF0ZWQgYWNjZXNzZXMgKHJlYWQgdnMgd3JpdGUpIGZvciBjYWNoZWQgR1BBcyByYXRoZXIgdGhhbiByZXVzaW5nIHRoZSBHUEEgdW5jb25kaXRpb25hbGx5LiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIG9uIHg4Niwgd2hpY2ggaXMgZnVsbHkgdGVzdGFibGUgYW5kIGZ1enphYmxlIHZpYSBLVk0gaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fbW11X3BhZ2VfZmF1bHQmIzM0OywKICAgICYjMzQ7eDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OywKICAgICYjMzQ7a3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzZWN1cml0eS9wZXJtaXNzaW9uIGNoZWNraW5nIGlzc3VlIGluIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGJ5IHRyYWNraW5nIHBlcm1pdHRlZCBlbXVsYXRlZCBhY2Nlc3NlcyAocmVhZCB2cyB3cml0ZSkgZm9yIGNhY2hlZCBHUEFzIHJhdGhlciB0aGFuIHJldXNpbmcgdGhlIEdQQSB1bmNvbmRpdGlvbmFsbHkuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBjb3JlIEtWTSBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMgb24geDg2LCB3aGljaCBpcyBmdWxseSB0ZXN0YWJsZSBhbmQgZnV6emFibGUgdmlhIEtWTSBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0mIzM5O3MgeDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyB0byB0cmFjayBwZXJtaXR0ZWQgYWNjZXNzIHR5cGVzIChyZWFkIHZzIHdyaXRlKSBmb3IgY2FjaGVkIEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3NlcyAoR1BBKSBkdXJpbmcgcGFnZSBmYXVsdCBlbXVsYXRpb24gKHJlcGxhY2luZyBgYm9vbCBncGFfYXZhaWxhYmxlYCB3aXRoIGB1NjQgZ3BhX2FjY2Vzc2AgaW4gYHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0YCkuXG5cbi0gS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBgY3R4dC1cdTAwM2VncGFfYWNjZXNzYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgaW4gYGluaXRfZW11bGF0ZV9jdHh0KClgIGFuZCBwcm9wZXJseSBzZXQgaW4gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKClgLiBUaGVyZSBhcmUgbm8gbmV3IG9yIG1vZGlmaWVkIGtlcm5lbC10by11c2VyIGNvcGllcywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhIGJ1ZmZlcnMuXG4tIEtBU0FOIC8gU3RhbmRhcmQgRGV0ZWN0b3JzOiBUaGUgbW9kaWZpY2F0aW9ucyBzb2xlbHkgYWZmZWN0IGludGVybmFsIHBlcm1pc3Npb24gY2hlY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gS1ZNIE1NSU8vcGFnZSBmYXVsdCBlbXVsYXRpb24uIFN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBrZXJuZWxzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgaWYgYW55IGFyaXNlLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNhNDQ2OTY1MGUxYTM4MDJjNGU1MDViYTZhYzZhNTExM2NhM2ZlNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDAwOjA0OjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAppbmRleCAzZTM3NWFmMTVjMDM1Li4xMDg4NmJlYTgyYzkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaApAQCAtMzU0LDggJiM0MzszNTQsOCBAQCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCB7CiAJYm9vbCBoYXZlX2V4Y2VwdGlvbjsKIAlzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247CiAKLQkvKiBHUEEgYXZhaWxhYmxlICovCi0JYm9vbCBncGFfYXZhaWxhYmxlOwomIzQzOwkvKiBTYXZlZCBHUEEgYW5kIHBlcm1pdHRlZCBlbXVsYXRlZCBhY2Nlc3Nlcy4gKi8KJiM0MzsJdTY0IGdwYV9hY2Nlc3M7CiAJZ3BhX3QgZ3BhX3ZhbDsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwppbmRleCAwNjRlY2MzM2I5MjY3Li45NWI5ZWFjOTk2MmE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKQEAgLTY2MzIsNiAmIzQzOzY2MzIsOSBAQCBpbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycgogCQlyZXR1cm4gcjsKIAogZW11bGF0ZToKJiM0MzsJaWYgKGRpcmVjdCAmYW1wOyZhbXA7IChlcnJvcl9jb2RlICZhbXA7IFBGRVJSX1dSSVRFX01BU0spKQomIzQzOwkJZW11bGF0aW9uX3R5cGUgfD0gRU1VTFRZUEVfUEZfV1JJVEU7CiYjNDM7CiAJcmV0dXJuIHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHZjcHUsIGNyMl9vcl9ncGEsIGVtdWxhdGlvbl90eXBlLCBpbnNuLAogCQkJCSAgICAgICBpbnNuX2xlbik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggNzk0NjhkZGZlNDczNi4uYWE1ZGViN2M3M2FhMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtNTA4OCw4ICYjNDM7NTA4OCwxMyBAQCBzdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKnZhbCwKIAkgKiBOb3RlLCB0aGlzIGNhbm5vdCBiZSB1c2VkIG9uIHN0cmluZyBvcGVyYXRpb25zIHNpbmNlIHN0cmluZwogCSAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRgogCSAqIG9jY3VycmVkLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZ3Vlc3QgbWF5IGhhdmUgY2hhbmdlZCB0aGUgaW5zdHJ1Y3Rpb24gc2luY2UgdGhlIGZhdWx0LiAgUmV1c2UKJiM0MzsJICogdGhlIEdQQSBmb3Igd3JpdGVzIG9ubHkgaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSB3cml0ZSBhY2Nlc3M7CiYjNDM7CSAqIG90aGVyd2lzZSwgcmVjaGVjayBwZXJtaXNzaW9ucyBmb3IgdGhlIGRlY29kZWQgYWNjZXNzLgogCSAqLwotCWlmIChjdHh0LSZndDtncGFfYXZhaWxhYmxlICZhbXA7JmFtcDsgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgJmFtcDsmYW1wOwomIzQzOwlpZiAoKGN0eHQtJmd0O2dwYV9hY2Nlc3MgJmFtcDsgKHdyaXRlID8gQUNDX1dSSVRFX01BU0sgOiBBQ0NfUkVBRF9NQVNLKSkgJmFtcDsmYW1wOwomIzQzOwkgICAgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgJmFtcDsmYW1wOwogCSAgICAoYWRkciAmYW1wOyB+UEFHRV9NQVNLKSA9PSAoY3R4dC0mZ3Q7Z3BhX3ZhbCAmYW1wOyB+UEFHRV9NQVNLKSkgewogCQlncGEgPSBjdHh0LSZndDtncGFfdmFsOwogCQlyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpOwpAQCAtNTkzOCw3ICYjNDM7NTk0Myw3IEBAIHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCWt2bV94ODZfY2FsbChnZXRfY3NfZGJfbF9iaXRzKSh2Y3B1LCAmYW1wO2NzX2RiLCAmYW1wO2NzX2wpOwogCi0JY3R4dC0mZ3Q7Z3BhX2F2YWlsYWJsZSA9IGZhbHNlOwomIzQzOwljdHh0LSZndDtncGFfYWNjZXNzID0gMDsKIAljdHh0LSZndDtlZmxhZ3MgPSBrdm1fZ2V0X3JmbGFncyh2Y3B1KTsKIAljdHh0LSZndDt0ZiA9IChjdHh0LSZndDtlZmxhZ3MgJmFtcDsgWDg2X0VGTEFHU19URikgIT0gMDsKIApAQCAtNjQ1NCw3ICYjNDM7NjQ1OSwxMCBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLAogCiAJCS8qIFdpdGggc2hhZG93IHBhZ2UgdGFibGVzLCBjcjIgY29udGFpbnMgYSBHVkEgb3IgbkdQQS4gKi8KIAkJaWYgKHZjcHUtJmd0O2FyY2gubW11LSZndDtyb290X3JvbGUuZGlyZWN0KSB7Ci0JCQljdHh0LSZndDtncGFfYXZhaWxhYmxlID0gdHJ1ZTsKJiM0MzsJCQkvKiBBIHdyaXRlIGZhdWx0IGNhbiByZXF1aXJlIGEgcmVhZCBmb3IgUk1XIGVtdWxhdGlvbi4gKi8KJiM0MzsJCQljdHh0LSZndDtncGFfYWNjZXNzID0gQUNDX1JFQURfTUFTSzsKJiM0MzsJCQlpZiAoZW11bGF0aW9uX3R5cGUgJmFtcDsgRU1VTFRZUEVfUEZfV1JJVEUpCiYjNDM7CQkJCWN0eHQtJmd0O2dwYV9hY2Nlc3MgfD0gQUNDX1dSSVRFX01BU0s7CiAJCQljdHh0LSZndDtncGFfdmFsID0gY3IyX29yX2dwYTsKIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmgKaW5kZXggMGY1OTE5YjA5MmU0Ny4uNjY3NDY1NjgwY2NkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtNDA3LDYgJiM0Mzs0MDcsOCBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLAogICogRU1VTFRZUEVfUEYgLSBTZXQgd2hlbiBhbiBpbnRlcmNlcHRlZCAjUEYgdHJpZ2dlcnMgdGhlIGVtdWxhdGlvbiwgaW4gd2hpY2ggY2FzZQogICoJCSB0aGUgQ1IyL0dQQSB2YWx1ZSBwYXNzIG9uIHRoZSBzdGFjayBpcyB2YWxpZC4KICAqCiYjNDM7ICogRU1VTFRZUEVfUEZfV1JJVEUgLSBTZXQgd2l0aCBFTVVMVFlQRV9QRiB3aGVuIGhhcmR3YXJlIHJlcG9ydHMgYSB3cml0ZSBhY2Nlc3MuCiYjNDM7ICoKICAqIEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCAtIFNldCB3aGVuIHRoZSBlbXVsYXRvciBzaG91bGQgdXBkYXRlIGludGVycnVwdGliaWxpdHkKICAqCQkJCSBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmcKICAqCQkJCSBhbiBpbnN0cnVjdGlvbiAoYWZ0ZXIgY29tcGxldGluZyB1c2Vyc3BhY2UgSS9PKS4KQEAgLTQ0NSw2ICYjNDM7NDQ3LDcgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwKICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxICZsdDsmbHQ7IDcpCiAjZGVmaW5lIEVNVUxUWVBFX1dSSVRFX1BGX1RPX1NQCSAgICAoMSAmbHQ7Jmx0OyA4KQogI2RlZmluZSBFTVVMVFlQRV9TS0lQX1NPRlRfSU5UCSAgICAoMSAmbHQ7Jmx0OyA5KQomIzQzOyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEUJICAgICgxICZsdDsmbHQ7IDEwKQogCiAjZGVmaW5lIEVNVUxUWVBFX1NFVF9TT0ZUX0lOVF9WRUNUT1IodikJKCh1MzIpKCh2KSAmYW1wOyAweGZmKSAmbHQ7Jmx0OyAxNikKICNkZWZpbmUgRU1VTFRZUEVfR0VUX1NPRlRfSU5UX1ZFQ1RPUihlKQkoKChlKSAmZ3Q7Jmd0OyAxNikgJmFtcDsgMHhmZikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MzAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBicmluZyBpbiBLTVNBTiB0byBwcm90ZWN0IGFnYWluc3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIE15IGZpcnN0IHN0ZXAgaXMgdG8gYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHBpZWNlIGJ5IHBpZWNlLgoKKiAgIFN0YXJ0aW5nIHdpdGggYGFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oYCwgdGhleSYjMzk7dmUgc3dhcHBlZCBgZ3BhX2F2YWlsYWJsZWAgKGEgYm9vbGVhbikgZm9yIGBncGFfYWNjZXNzYCAoYSBgdTY0YCkgd2l0aGluIHRoZSBgeDg2X2VtdWxhdGVfY3R4dGAgc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgdHlwZSBjaGFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGdwYV9hY2Nlc3NgIHJlcHJlc2VudHMgbm93LiBJcyB0aGlzIGEgYnJvYWRlciBhY2Nlc3MgY29udHJvbCBmaWVsZD8KCiogICBOZXh0LCBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgaW50cm9kdWNlcyBgRU1VTFRZUEVfUEZfV1JJVEVgIGZsYWcgaW4gdGhlIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGZ1bmN0aW9uLCBpZiBpdCYjMzk7cyBhIGRpcmVjdCBNTVUgYWNjZXNzLiBUaGlzIHN1Z2dlc3RzIGEgY2hhbmdlIGluIGhvdyB3cml0ZSBmYXVsdHMgYXJlIGhhbmRsZWQuCgoqICAgTm93LCBgYXJjaC94ODYva3ZtL3g4Ni5jYCBjb250YWlucyB0aGUgbW9yZSBpbnRlcmVzdGluZyBtb2RpZmljYXRpb25zLiBUaGUgY2hlY2sgYGN0eHQtJmd0O2dwYV9hdmFpbGFibGVgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYGN0eHQtJmd0O2dwYV9hY2Nlc3NgIHVzaW5nIGBBQ0NfV1JJVEVfTUFTS2AgYW5kIGBBQ0NfUkVBRF9NQVNLYC4gSXQgc2VlbXMgbGlrZSBgZ3BhX2FjY2Vzc2AgaXMgbm93IGFjdGluZyBhcyBhIGJpdG1hc2sgaW5kaWNhdGluZyBhY2Nlc3MgcGVybWlzc2lvbnMuIFRoZSBpbml0aWFsaXphdGlvbiBpcyBhbHNvIGNoYW5nZWQsIHNldHRpbmcgYGN0eHQtJmd0O2dwYV9hY2Nlc3MgPSAwYCBhbmQgdGhlbiBzdWJzZXF1ZW50bHkgc2V0dGluZyBgQUNDX1JFQURfTUFTS2AgYW5kL29yIGBBQ0NfV1JJVEVfTUFTS2AgYmFzZWQgb24gdGhlIGVtdWxhdGlvbiB0eXBlLiBUaGlzIGlzIGNydWNpYWw7IGlmIHRoZXNlIGJpdG1hc2tzIGFyZW4mIzM5O3QgY29ycmVjdGx5IGluaXRpYWxpemVkICpiZWZvcmUqIHVzYWdlLCB3ZSBoYXZlIGEgcHJvYmxlbS4gU3BlY2lmaWNhbGx5LCB0aGUgc2V0dGluZyBvZiBgY3R4dC0mZ3Q7Z3BhX2FjY2Vzc2Agd2l0aGluIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAgbG9va3MgbGlrZSBhIGtleSBwb2ludCB0byByZXZpZXcuIElzIGl0IGFsd2F5cyBzZXQgY29ycmVjdGx5PwoKKiAgIEZpbmFsbHksIHRoZSBhZGRpdGlvbiBvZiBgI2RlZmluZSBFTVVMVFlQRV9QRl9XUklURWAgaW4gYGFyY2gveDg2L2t2bS94ODYuaGAgaXMgc3RyYWlnaHRmb3J3YXJkLCBhIG5ldyBmbGFnIGJlaW5nIGRlZmluZWQuCgpNeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIGNvbmZpcm1pbmcgdGhhdCBgZ3BhX2FjY2Vzc2AgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgdG8gYSBkZWZpbmVkIHZhbHVlIGJlZm9yZSBpdCYjMzk7cyByZWFkIGFuZCB0aGF0IGV2ZXJ5IHBvc3NpYmxlIGNvZGUgcGF0aCBjb3JyZWN0bHkgc2V0cyB0aGUgYXBwcm9wcmlhdGUgYml0cyB3aXRoaW4gdGhhdCBtYXNrLiBUaGUgbW92ZSBmcm9tIGEgc2ltcGxlIGJvb2xlYW4gdG8gYSBiaXRtYXNrICppbmNyZWFzZXMqIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBlcnJvcnMuCgpJJiMzOTttIGdvaW5nIHRvIGNvbmR1Y3QgYSBzZWFyY2ggZm9yIHVzZXMgb2YgYHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0YC4gTXkgZ29hbCBpcyB0byBleGhhdXN0aXZlbHkgY2hlY2sgZm9yOgoKMS4gIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHBvaW50cy4KMi4gIEFueSByZWFkcyBvciB3cml0ZXMgb2YgYGdwYV9hY2Nlc3NgICpiZWZvcmUqIGl0JiMzOTtzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuCjMuICBBbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgcGFydGljdWxhcmx5IGluIGNhc2VzIHdoZXJlIGBncGFfYWNjZXNzYCBjb3VsZCBiZSByZWFkIHdpdGhvdXQgdGhlIGFwcHJvcHJpYXRlIGZsYWdzIGJlaW5nIHNldC4KCldpdGggbXkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBLVk0gYXJjaGl0ZWN0dXJlLCBJIGFtIGFibGUgdG8gbG9jYXRlIHRoZXNlIHBvdGVudGlhbCBzcG90cyBvZiBjb25jZXJuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtncGFfYWNjZXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oPTMzOD1zdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCB7XG4tLVxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgtMzU3LVx0LyogU2F2ZWQgR1BBIGFuZCBwZXJtaXR0ZWQgZW11bGF0ZWQgYWNjZXNzZXMuICovXG5hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaDozNTg6XHR1NjQgZ3BhX2FjY2VzcztcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oLTM1OS1cdGdwYV90IGdwYV92YWw7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTUwNzM9c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTUwOTUtXHQgKi9cbmFyY2gveDg2L2t2bS94ODYuYzo1MDk2Olx0aWYgKChjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgXHUwMDI2ICh3cml0ZSA/IEFDQ19XUklURV9NQVNLIDogQUNDX1JFQURfTUFTSykpIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL3g4Ni5jLTUwOTctXHQgICAgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgXHUwMDI2XHUwMDI2XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTU5Mzk9c3RhdGljIHZvaWQgaW5pdF9lbXVsYXRlX2N0eHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy01OTQ1LVxuYXJjaC94ODYva3ZtL3g4Ni5jOjU5NDY6XHRjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgPSAwO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTU5NDctXHRjdHh0LVx1MDAzZWVmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02MzM1PWludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTY0NjItXHRcdFx0LyogQSB3cml0ZSBmYXVsdCBjYW4gcmVxdWlyZSBhIHJlYWQgZm9yIFJNVyBlbXVsYXRpb24uICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjQ2MzpcdFx0XHRjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgPSBBQ0NfUkVBRF9NQVNLO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTY0NjQtXHRcdFx0aWYgKGVtdWxhdGlvbl90eXBlIFx1MDAyNiBFTVVMVFlQRV9QRl9XUklURSlcbmFyY2gveDg2L2t2bS94ODYuYzo2NDY1Olx0XHRcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzIHw9IEFDQ19XUklURV9NQVNLO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTY0NjYtXHRcdFx0Y3R4dC1cdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oPTI5Mz1pbnQgaHZfY2FsbF9jbGVhcl92aXJ0dWFsX2ludGVycnVwdCh1NjQgcGFydGl0aW9uX2lkKTtcbmRyaXZlcnMvaHYvbXNodl9yb290Lmg6Mjk0OmludCBodl9jYWxsX2dldF9ncGFfYWNjZXNzX3N0YXRlcyh1NjQgcGFydGl0aW9uX2lkLCB1MzIgY291bnQsIHU2NCBncGFfYmFzZV9wZm4sXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oLTI5NS1cdFx0XHRcdCAgdW5pb24gaHZfZ3BhX3BhZ2VfYWNjZXNzX3N0YXRlX2ZsYWdzIHN0YXRlX2ZsYWdzLFxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYz0yOTg9aW50IGh2X2NhbGxfdW5tYXBfZ3BhX3BhZ2VzKHU2NCBwYXJ0aXRpb25faWQsIHU2NCBnZm4sIHU2NCBwYWdlX2NvdW50XzRrLFxuLS1cbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYy0zNDItXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmM6MzQzOmludCBodl9jYWxsX2dldF9ncGFfYWNjZXNzX3N0YXRlcyh1NjQgcGFydGl0aW9uX2lkLCB1MzIgY291bnQsIHU2NCBncGFfYmFzZV9wZm4sXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtMzQ0LVx0XHRcdFx0ICB1bmlvbiBodl9ncGFfcGFnZV9hY2Nlc3Nfc3RhdGVfZmxhZ3Mgc3RhdGVfZmxhZ3MsXG4tLVxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTE1MTA9bXNodl9wYXJ0aXRpb25faW9jdGxfZ2V0X2dwYXBfYWNjZXNzX2JpdG1hcChzdHJ1Y3QgbXNodl9wYXJ0aXRpb24gKnBhcnRpdGlvbixcbi0tXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTU2Ni1cbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxNTY3Olx0cmV0ID0gaHZfY2FsbF9nZXRfZ3BhX2FjY2Vzc19zdGF0ZXMocGFydGl0aW9uLVx1MDAzZXB0X2lkLCBhcmdzLnBhZ2VfY291bnQsXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTU2OC1cdFx0XHRcdFx0ICAgIGFyZ3MuZ3BhcF9iYXNlLCBodl9mbGFncywgXHUwMDI2d3JpdHRlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIHg4NiBFbXVsYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvcmUgZW11bGF0aW9uIGxvZ2ljIHdpdGhpbiB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSYjMzk7bSBmb2N1c2luZyBvbiBgaW5pdF9lbXVsYXRlX2N0eHRgIGFuZCBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIOKAkyB0aGVzZSBhcmUgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzLiBJIGtub3cgdGhleSYjMzk7cmUgcHJvYmFibHkgbG9jYXRlZCB3aXRoaW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgc3RhcnQuIEl0JiMzOTtzIGJlc3QgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgbGluZXMgb2YgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHByb2Nlc3Nlcy4gU2VlaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmbG93LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIgdG8gYWNoaWV2ZSBhY2N1cmF0ZSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTkzNTpcdFxuNTkzNjpcdFx0cmV0dXJuIGN0eHQ7XG41OTM3Olx0fVxuNTkzODpcdFxuNTkzOTpcdHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjU5NDA6XHR7XG41OTQxOlx0XHRzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCA9IHZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQ7XG41OTQyOlx0XHRpbnQgY3NfZGIsIGNzX2w7XG41OTQzOlx0XG41OTQ0Olx0XHRrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgXHUwMDI2Y3NfZGIsIFx1MDAyNmNzX2wpO1xuNTk0NTpcdFxuNTk0NjpcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzID0gMDtcbjU5NDc6XHRcdGN0eHQtXHUwMDNlZWZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7XG41OTQ4Olx0XHRjdHh0LVx1MDAzZXRmID0gKGN0eHQtXHUwMDNlZWZsYWdzIFx1MDAyNiBYODZfRUZMQUdTX1RGKSAhPSAwO1xuNTk0OTpcdFxuNTk1MDpcdFx0Y3R4dC1cdTAwM2VlaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7XG41OTUxOlx0XHRjdHh0LVx1MDAzZW1vZGUgPSAoIWlzX3Byb3Rtb2RlKHZjcHUpKVx0XHQ/IFg4NkVNVUxfTU9ERV9SRUFMIDpcbjU5NTI6XHRcdFx0ICAgICAoY3R4dC1cdTAwM2VlZmxhZ3MgXHUwMDI2IFg4Nl9FRkxBR1NfVk0pXHQ/IFg4NkVNVUxfTU9ERV9WTTg2IDpcbjU5NTM6XHRcdFx0ICAgICAoY3NfbCBcdTAwMjZcdTAwMjYgaXNfbG9uZ19tb2RlKHZjcHUpKVx0PyBYODZFTVVMX01PREVfUFJPVDY0IDpcbjU5NTQ6XHRcdFx0ICAgICBjc19kYlx0XHRcdFx0PyBYODZFTVVMX01PREVfUFJPVDMyIDpcbjU5NTU6XHRcdFx0XHRcdFx0XHRcdCAgWDg2RU1VTF9NT0RFX1BST1QxNjtcbjU5NTY6XHRcdGN0eHQtXHUwMDNlaW50ZXJydXB0aWJpbGl0eSA9IDA7XG41OTU3Olx0XHRjdHh0LVx1MDAzZWhhdmVfZXhjZXB0aW9uID0gZmFsc2U7XG41OTU4Olx0XHRjdHh0LVx1MDAzZWV4Y2VwdGlvbi52ZWN0b3IgPSAtMTtcbjU5NTk6XHRcdGN0eHQtXHUwMDNlZXhjZXB0aW9uLnBheWxvYWQgPSAwO1xuNTk2MDpcdFx0Y3R4dC1cdTAwM2VwZXJtX29rID0gZmFsc2U7XG41OTYxOlx0XG41OTYyOlx0XHRpbml0X2RlY29kZV9jYWNoZShjdHh0KTtcbjU5NjM6XHRcdHZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdSA9IGZhbHNlO1xuNTk2NDpcdH1cbjU5NjU6XHRcbjU5NjY6XHR2b2lkIGt2bV9pbmplY3RfcmVhbG1vZGVfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGlycSwgaW50IGluY19laXApXG41OTY3Olx0e1xuNTk2ODpcdFx0c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQgPSB2Y3B1LVx1MDAzZWFyY2guZW11bGF0ZV9jdHh0O1xuNTk2OTpcdFx0aW50IHJldDtcbjU5NzA6XHRcbjU5NzE6XHRcdGluaXRfZW11bGF0ZV9jdHh0KHZjcHUpO1xuNTk3MjpcdFxuNTk3MzpcdFx0Y3R4dC1cdTAwM2VvcF9ieXRlcyA9IDI7XG41OTc0Olx0XHRjdHh0LVx1MDAzZWFkX2J5dGVzID0gMjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc0MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAsIGFuZCBteSBndXQgdGVsbHMgbWUgdGhlIHN3ZWV0IHNwb3QgaXMgc29tZXdoZXJlIGFyb3VuZCBsaW5lcyA2NDQwIHRvIDY0ODAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoYXQgYXJlYS4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBvciBhIGdyb3VwIG9mIHJlbGF0ZWQgaW5zdHJ1Y3Rpb25zIHRoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFuYWx5emluZy4gVGhpcyByYW5nZSBwcm92aWRlcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgd2hhdGV2ZXIgSSBoYXZlIGluIG1pbmQuIEkgaG9wZSB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjQ0MDpcdFx0ICogYW5kIHJldHJ5IHRoZSBpbnN0cnVjdGlvbiwgYXMgdGhlIHZDUFUgaXMgbGlrZWx5IG5vIGxvbmdlciB1c2luZyB0aGVcbjY0NDE6XHRcdCAqIGdmbiBhcyBhIHBhZ2UgdGFibGUuXG42NDQyOlx0XHQgKi9cbjY0NDM6XHRcdGlmICgoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX0FMTE9XX1JFVFJZX1BGKSBcdTAwMjZcdTAwMjZcbjY0NDQ6XHRcdCAgICAheDg2X3BhZ2VfdGFibGVfd3JpdGluZ19pbnNuKGN0eHQpIFx1MDAyNlx1MDAyNlxuNjQ0NTpcdFx0ICAgIGt2bV9tbXVfdW5wcm90ZWN0X2dmbl9hbmRfcmV0cnkodmNwdSwgY3IyX29yX2dwYSkpXG42NDQ2Olx0XHRcdHJldHVybiAxO1xuNjQ0NzpcdFxuNjQ0ODpcdFx0LyogdGhpcyBpcyBuZWVkZWQgZm9yIHZtd2FyZSBiYWNrZG9vciBpbnRlcmZhY2UgdG8gd29yayBzaW5jZSBpdFxuNjQ0OTpcdFx0ICAgY2hhbmdlcyByZWdpc3RlcnMgdmFsdWVzICBkdXJpbmcgSU8gb3BlcmF0aW9uICovXG42NDUwOlx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfZnJvbV92Y3B1KSB7XG42NDUxOlx0XHRcdHZjcHUtXHUwMDNlYXJjaC5lbXVsYXRlX3JlZ3NfbmVlZF9zeW5jX2Zyb21fdmNwdSA9IGZhbHNlO1xuNjQ1MjpcdFx0XHRlbXVsYXRvcl9pbnZhbGlkYXRlX3JlZ2lzdGVyX2NhY2hlKGN0eHQpO1xuNjQ1MzpcdFx0fVxuNjQ1NDpcdFxuNjQ1NTpcdHJlc3RhcnQ6XG42NDU2Olx0XHRpZiAoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX1BGKSB7XG42NDU3Olx0XHRcdC8qIFNhdmUgdGhlIGZhdWx0aW5nIEdQQSAoY3IyKSBpbiB0aGUgYWRkcmVzcyBmaWVsZCAqL1xuNjQ1ODpcdFx0XHRjdHh0LVx1MDAzZWV4Y2VwdGlvbi5hZGRyZXNzID0gY3IyX29yX2dwYTtcbjY0NTk6XHRcbjY0NjA6XHRcdFx0LyogV2l0aCBzaGFkb3cgcGFnZSB0YWJsZXMsIGNyMiBjb250YWlucyBhIEdWQSBvciBuR1BBLiAqL1xuNjQ2MTpcdFx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLm1tdS1cdTAwM2Vyb290X3JvbGUuZGlyZWN0KSB7XG42NDYyOlx0XHRcdFx0LyogQSB3cml0ZSBmYXVsdCBjYW4gcmVxdWlyZSBhIHJlYWQgZm9yIFJNVyBlbXVsYXRpb24uICovXG42NDYzOlx0XHRcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzID0gQUNDX1JFQURfTUFTSztcbjY0NjQ6XHRcdFx0XHRpZiAoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX1BGX1dSSVRFKVxuNjQ2NTpcdFx0XHRcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzIHw9IEFDQ19XUklURV9NQVNLO1xuNjQ2NjpcdFx0XHRcdGN0eHQtXHUwMDNlZ3BhX3ZhbCA9IGNyMl9vcl9ncGE7XG42NDY3Olx0XHRcdH1cbjY0Njg6XHRcdH0gZWxzZSB7XG42NDY5Olx0XHRcdC8qIFNhbml0aXplIHRoZSBhZGRyZXNzIG91dCBvZiBhbiBhYnVuZGFuY2Ugb2YgcGFyYW5vaWEuICovXG42NDcwOlx0XHRcdGN0eHQtXHUwMDNlZXhjZXB0aW9uLmFkZHJlc3MgPSAwO1xuNjQ3MTpcdFx0fVxuNjQ3MjpcdFxuNjQ3MzpcdFx0LypcbjY0NzQ6XHRcdCAqIENoZWNrIEwxJiMzOTtzIGluc3RydWN0aW9uIGludGVyY2VwdHMgd2hlbiBlbXVsYXRpbmcgaW5zdHJ1Y3Rpb25zIGZvclxuNjQ3NTpcdFx0ICogTDIsIHVubGVzcyBLVk0gaXMgcmUtZW11bGF0aW5nIGEgcHJldmlvdXNseSBkZWNvZGVkIGluc3RydWN0aW9uLFxuNjQ3NjpcdFx0ICogZS5nLiB0byBjb21wbGV0ZSB1c2Vyc3BhY2UgSS9PLCBpbiB3aGljaCBjYXNlIEtWTSBoYXMgYWxyZWFkeVxuNjQ3NzpcdFx0ICogY2hlY2tlZCB0aGUgaW50ZXJjZXB0cy5cbjY0Nzg6XHRcdCAqL1xuNjQ3OTpcdFx0ciA9IHg4Nl9lbXVsYXRlX2luc24oY3R4dCwgaXNfZ3Vlc3RfbW9kZSh2Y3B1KSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBFbXVsYXRvciBNZW1vcnkgQWNjZXNzIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGVtdWxhdG9yJiMzOTtzIG1lbW9yeSBhY2Nlc3MgbWVjaGFuaXNtcy4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhlIGVtdWxhdG9yIGhhbmRsZXMgdGhlIGJhc2ljIG9wZXJhdGlvbnMgb2YgcmVhZGluZyBhbmQgd3JpdGluZyBhIHNpbmdsZSBwYWdlIG9mIG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgbG9naWMsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzeXN0ZW0sIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBpdCBtaWdodCBoYXZlLgoKRnVydGhlcm1vcmUsIGl0JiMzOTtzIGNydWNpYWwgdGhhdCBJIGZpZ3VyZSBvdXQgd2hlbiBhbmQgaG93IHRoZSBlbXVsYXRvciBkZXRlcm1pbmVzIGlmIGl0JiMzOTtzICphbGxvd2VkKiB0byB1c2UgYSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIChHUEEpLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBjaGVjayBvdXQgYGVtdWxhdG9yX2Nhbl91c2VfZ3BhYC4gVGhlIGludGVycGxheSBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9uIGlzIGtleSB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgdHJhbnNsYXRpb24gYW5kIHByb3RlY3Rpb24gc3RyYXRlZ3kuIEkgbmVlZCB0byBrbm93IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBlbXVsYXRvciBkZWVtcyBhIEdQQSB2YWxpZCBmb3IgZGlyZWN0IGFjY2Vzcy4gQXJlIHRoZXJlIGNoZWNrcyBmb3IgcGVybWlzc2lvbnMsIGFkZHJlc3MgcmFuZ2UgdmFsaWRhdGlvbiwgb3Igb3RoZXIgc2VjdXJpdHkgbWVhc3VyZXMgaW4gcGxhY2U/IFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgdGhlIGVtdWxhdG9yJiMzOTtzIHJvYnVzdG5lc3MgYW5kIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGFsc28gcmVsYXRlcyB0byBob3cgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgaXMgdWx0aW1hdGVseSB0cmFuc2xhdGVkIHRvIGEgaG9zdCBwaHlzaWNhbCBhZGRyZXNzLCBvciB3aGV0aGVyIHZpcnR1YWxpemF0aW9uIG9yIGVtdWxhdGlvbiBpcyByZXF1aXJlZCBhdCBhbGwuIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRob3NlIGtleSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MDcwOlx0XHRyZXR1cm4gMTtcbjUwNzE6XHR9XG41MDcyOlx0XG41MDczOlx0c3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXG41MDc0Olx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzLFxuNTA3NTpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCB4ODZfZXhjZXB0aW9uICpleGNlcHRpb24sXG41MDc2Olx0XHRcdFx0XHQgICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuNTA3NzpcdFx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCByZWFkX3dyaXRlX2VtdWxhdG9yX29wcyAqb3BzKVxuNTA3ODpcdHtcbjUwNzk6XHRcdGdwYV90IGdwYTtcbjUwODA6XHRcdGludCBoYW5kbGVkLCByZXQ7XG41MDgxOlx0XHRib29sIHdyaXRlID0gb3BzLVx1MDAzZXdyaXRlO1xuNTA4MjpcdFx0c3RydWN0IGt2bV9tbWlvX2ZyYWdtZW50ICpmcmFnO1xuNTA4MzpcdFx0c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQgPSB2Y3B1LVx1MDAzZWFyY2guZW11bGF0ZV9jdHh0O1xuNTA4NDpcdFxuNTA4NTpcdFx0LypcbjUwODY6XHRcdCAqIElmIHRoZSBleGl0IHdhcyBkdWUgdG8gYSBOUEYgd2UgbWF5IGFscmVhZHkgaGF2ZSBhIEdQQS5cbjUwODc6XHRcdCAqIElmIHRoZSBHUEEgaXMgcHJlc2VudCwgdXNlIGl0IHRvIGF2b2lkIHRoZSBHVkEgdG8gR1BBIHRhYmxlIHdhbGsuXG41MDg4Olx0XHQgKiBOb3RlLCB0aGlzIGNhbm5vdCBiZSB1c2VkIG9uIHN0cmluZyBvcGVyYXRpb25zIHNpbmNlIHN0cmluZ1xuNTA4OTpcdFx0ICogb3BlcmF0aW9uIHVzaW5nIHJlcCB3aWxsIG9ubHkgaGF2ZSB0aGUgaW5pdGlhbCBHUEEgZnJvbSB0aGUgTlBGXG41MDkwOlx0XHQgKiBvY2N1cnJlZC5cbjUwOTE6XHRcdCAqXG41MDkyOlx0XHQgKiBUaGUgZ3Vlc3QgbWF5IGhhdmUgY2hhbmdlZCB0aGUgaW5zdHJ1Y3Rpb24gc2luY2UgdGhlIGZhdWx0LiAgUmV1c2VcbjUwOTM6XHRcdCAqIHRoZSBHUEEgZm9yIHdyaXRlcyBvbmx5IGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgd3JpdGUgYWNjZXNzO1xuNTA5NDpcdFx0ICogb3RoZXJ3aXNlLCByZWNoZWNrIHBlcm1pc3Npb25zIGZvciB0aGUgZGVjb2RlZCBhY2Nlc3MuXG41MDk1Olx0XHQgKi9cbjUwOTY6XHRcdGlmICgoY3R4dC1cdTAwM2VncGFfYWNjZXNzIFx1MDAyNiAod3JpdGUgPyBBQ0NfV1JJVEVfTUFTSyA6IEFDQ19SRUFEX01BU0spKSBcdTAwMjZcdTAwMjZcbjUwOTc6XHRcdCAgICBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbjUwOTg6XHRcdCAgICAoYWRkciBcdTAwMjYgflBBR0VfTUFTSykgPT0gKGN0eHQtXHUwMDNlZ3BhX3ZhbCBcdTAwMjYgflBBR0VfTUFTSykpIHtcbjUwOTk6XHRcdFx0Z3BhID0gY3R4dC1cdTAwM2VncGFfdmFsO1xuNTEwMDpcdFx0XHRyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpO1xuNTEwMTpcdFx0fSBlbHNlIHtcbjUxMDI6XHRcdFx0cmV0ID0gdmNwdV9tbWlvX2d2YV90b19ncGEodmNwdSwgYWRkciwgXHUwMDI2Z3BhLCBleGNlcHRpb24sIHdyaXRlKTtcbjUxMDM6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjUxMDQ6XHRcdFx0XHRyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7XG41MTA1Olx0XHR9XG41MTA2Olx0XG41MTA3Olx0XHQvKlxuNTEwODpcdFx0ICogSWYgdGhlIG1lbW9yeSBpcyBub3QgX2tub3duXyB0byBiZSBlbXVsYXRlZCBNTUlPLCBhdHRlbXB0IHRvIGFjY2Vzc1xuNTEwOTpcdFx0ICogZ3Vlc3QgbWVtb3J5LiAgSWYgYWNjZXNzaW5nIGd1ZXN0IG1lbW9yeSBmYWlscywgZS5nLiBiZWNhdXNlIHRoZXJlJiMzOTtzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MTQKCQkJCQkJCW91dHB1dDogMjUzCgkJCQkJCQl0aG91Z2h0czogNDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBYODYgRW11bGF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBhIHNwZWNpZmljIGNvcm5lciBjYXNlIHdpdGhpbiBLVk0mIzM5O3MgeDg2IGVtdWxhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5lc3RlZCBwYWdlIGZhdWx0cyBhbmQgdGhlIGRpcmVjdCBNTVUgcm9sZS4gVGhlIGNvcmUgaXNzdWUgaXMgdGhpczogdGhlIGhhcmR3YXJlIG1pZ2h0IHJlcG9ydCBhIHJlYWQgZmF1bHQsIGJ1dCB0aGUgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24gbWlnaHQgYWN0dWFsbHkgYmUgYSB3cml0ZSAob3IgdmljZSB2ZXJzYSkuIFNpbXBseSByZXVzaW5nIHRoZSBHbG9iYWwgUGh5c2ljYWwgQWRkcmVzcyAoR1BBKSByZXBvcnRlZCBieSB0aGUgaGFyZHdhcmUgd2l0aG91dCBhIHBlcm1pc3Npb24gY2hlY2sgaW4gdGhlc2Ugc2NlbmFyaW9zIGNvdWxkIGxlYWQgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCBsaWtlIHdyaXRpbmcgdG8gYSByZWFkLW9ubHkgcGFnZSBvciBieXBhc3NpbmcgYWNjZXNzIGNvbnRyb2xzLgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIHJlcGxhY2VzIGBncGFfYXZhaWxhYmxlYCAocHJlc3VtYWJseSBhIGJvb2xlYW4gaW5kaWNhdGluZyBHUEEgdmFsaWRpdHkpIHdpdGggYGdwYV9hY2Nlc3NgLCBhIGZpZWxkIHRoYXQgdHJhY2tzIHdoZXRoZXIgcmVhZCAqb3IqIHdyaXRlIGFjY2VzcyBpcyBhbGxvd2VkIGZvciB0aGF0IGNhY2hlZCBHUEEuIFRoaXMgaW50cm9kdWNlcyBhIHN0cmljdGVyIGFjY2VzcyBjb250cm9sLgoKTm93LCBteSBjb25jZXJucyBhcyBhIHNlY3VyaXR5LW1pbmRlZCBleHBlcnQgaW1tZWRpYXRlbHkgZ28gdG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBJIG5lZWQgdG8ga25vdyBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyByaXNrcyBpbiB0aGF0IGFyZWEuIFNvLCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsLXRvLVVzZXIgQ29weT8qKiBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB0b3VjaCBhbnkgYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIHNvY2tldCBvcHRpb25zLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIG9yIGFueSBvZiB0aG9zZSBhcmVhcyB0aGF0IGFyZSBvZnRlbiBhIHNvdXJjZSBvZiB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MuIFRoaXMgaXMgc3RyaWN0bHkgaW50ZXJuYWwgS1ZNIGVtdWxhdGlvbiBsb2dpYy4KCjIuICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgQnJhbmNoaW5nPyoqIE5vLiBUaGUgYGN0eHQtJmd0O2dwYV9hY2Nlc3NgIGZpZWxkIGlzICppbml0aWFsaXplZCogdG8gemVybyB3aXRoaW4gYGluaXRfZW11bGF0ZV9jdHh0YCwgd2hpY2ggaXMgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGVtdWxhdGlvbiBwcm9jZXNzLiBUaGUgZmllbGQmIzM5O3MgdmFsdWUgaXMgYWxzbyBzZXQgY29ycmVjdGx5IGR1cmluZyBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gLgoKMy4gICoqVW5pbml0aWFsaXplZCBDb21wbGV4IERhdGEgU3RydWN0dXJlcz8qKiBObywgdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXhpc3RpbmcgZGF0YSBzdHJ1Y3R1cmUgcmVwbGFjaW5nIG9uZSBmaWVsZCB3aXRoIGEgbmV3IGZpZWxkLiBgZ3BhX2FjY2Vzc2AgaXMganVzdCBhIGB1NjRgIHJlcGxhY2luZyBhIGBib29sYCBpbiBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgLiBTaW1wbGUsIGluaXRpYWxpemVkLCBubyB3b3JyaWVzLgoKNC4gICoqQm91bmRzIENoZWNrcz8qKiBOb3BlLiBObyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIGxlbmd0aHMgdGhhdCBjb3VsZCBhbGxvdyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuCgpHaXZlbiBhbGwgb2YgdGhhdCwgaXQmIzM5O3MgY2xlYXI6ICoqTmVlZHNLTVNBTiA9IGZhbHNlLioqIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFRoaXMgaXMgcHVyZWx5IGludGVybmFsIGNvbnRyb2wgZmxvdyBmb3IgS1ZNJiMzOTtzIGluc3RydWN0aW9uIGVtdWxhdGlvbiwgZGVhbGluZyB3aXRoIHBlcm1pc3Npb25zIGFuZCB0aGUgY29ycmVjdCByZXVzZSBvZiBjYWNoZWQgR1BBcy4gQW55IGJ1Z3MgaGVyZSB3b3VsZCBiZSBsb2dpY2FsIGVycm9ycyByZWxhdGVkIHRvIHZpcnR1YWxpemF0aW9uIGNvcnJlY3RuZXNzIG9yIHBlcm1pc3Npb24gZW5mb3JjZW1lbnQsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIEtNU0FOIGlzIGlycmVsZXZhbnQgaGVyZS4gU3RhbmRhcmQgZnV6emluZyBhbmQgS0FTQU4gd291bGQgYmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyB0aGUgbG9naWNhbCBjb3JyZWN0bmVzcyBhbmQgbWVtb3J5IHNhZmV0eSBvZiB0aGlzIHBhdGNoLiBUaW1lIHRvIG1vdmUgb24gYW5kIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSYjMzk7cyB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIHRvIHRyYWNrIHBlcm1pdHRlZCBhY2Nlc3MgdHlwZXMgKHJlYWQgdnMgd3JpdGUpIGZvciBjYWNoZWQgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzc2VzIChHUEEpIGR1cmluZyBwYWdlIGZhdWx0IGVtdWxhdGlvbiAocmVwbGFjaW5nIGBib29sIGdwYV9hdmFpbGFibGVgIHdpdGggYHU2NCBncGFfYWNjZXNzYCBpbiBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgKS5cblxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcGF0aHMuIGBjdHh0LVx1MDAzZWdwYV9hY2Nlc3NgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBpbiBgaW5pdF9lbXVsYXRlX2N0eHQoKWAgYW5kIHByb3Blcmx5IHNldCBpbiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKWAuIFRoZXJlIGFyZSBubyBuZXcgb3IgbW9kaWZpZWQga2VybmVsLXRvLXVzZXIgY29waWVzLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgYnVmZmVycy5cbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IFRoZSBtb2RpZmljYXRpb25zIHNvbGVseSBhZmZlY3QgaW50ZXJuYWwgcGVybWlzc2lvbiBjaGVja2luZyBhbmQgY29udHJvbCBmbG93IHdpdGhpbiBLVk0gTU1JTy9wYWdlIGZhdWx0IGVtdWxhdGlvbi4gU3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGtlcm5lbHMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBpZiBhbnkgYXJpc2UuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJiMzOTtzIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMgdG8gdHJhY2sgcGVybWl0dGVkIGFjY2VzcyB0eXBlcyAocmVhZCB2cyB3cml0ZSkgZm9yIGNhY2hlZCBHdWVzdCBQaHlzaWNhbCBBZGRyZXNzZXMgKEdQQSkgZHVyaW5nIHBhZ2UgZmF1bHQgZW11bGF0aW9uIChyZXBsYWNpbmcgYGJvb2wgZ3BhX2F2YWlsYWJsZWAgd2l0aCBgdTY0IGdwYV9hY2Nlc3NgIGluIGBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dGApLlxuXG4tIEtNU0FOIEFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocy4gYGN0eHQtXHUwMDNlZ3BhX2FjY2Vzc2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgcHJvcGVybHkgc2V0IGluIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbigpYC4gVGhlcmUgYXJlIG5vIG5ldyBvciBtb2RpZmllZCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLlxuLSBLQVNBTiAvIFN0YW5kYXJkIERldGVjdG9yczogVGhlIG1vZGlmaWNhdGlvbnMgc29sZWx5IGFmZmVjdCBpbnRlcm5hbCBwZXJtaXNzaW9uIGNoZWNraW5nIGFuZCBjb250cm9sIGZsb3cgd2l0aGluIEtWTSBNTUlPL3BhZ2UgZmF1bHQgZW11bGF0aW9uLiBTdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcga2VybmVscyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGlmIGFueSBhcmlzZS5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjEyLjI5NTY3MzkxM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjM4ODg3NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9wYWdlX2ZhdWx0XCIsXG4gICAgXCJ4ODZfZW11bGF0ZV9pbnN0cnVjdGlvblwiLFxuICAgIFwia3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSdzIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMgdG8gdHJhY2sgcGVybWl0dGVkIGFjY2VzcyB0eXBlcyAocmVhZCB2cyB3cml0ZSkgZm9yIGNhY2hlZCBHdWVzdCBQaHlzaWNhbCBBZGRyZXNzZXMgKEdQQSkgZHVyaW5nIHBhZ2UgZmF1bHQgZW11bGF0aW9uIChyZXBsYWNpbmcgYGJvb2wgZ3BhX2F2YWlsYWJsZWAgd2l0aCBgdTY0IGdwYV9hY2Nlc3NgIGluIGBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dGApLlxcblxcbi0gS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBgY3R4dC1cXHUwMDNlZ3BhX2FjY2Vzc2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgcHJvcGVybHkgc2V0IGluIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbigpYC4gVGhlcmUgYXJlIG5vIG5ldyBvciBtb2RpZmllZCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLlxcbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IFRoZSBtb2RpZmljYXRpb25zIHNvbGVseSBhZmZlY3QgaW50ZXJuYWwgcGVybWlzc2lvbiBjaGVja2luZyBhbmQgY29udHJvbCBmbG93IHdpdGhpbiBLVk0gTU1JTy9wYWdlIGZhdWx0IGVtdWxhdGlvbi4gU3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGtlcm5lbHMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBpZiBhbnkgYXJpc2UuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzZWN1cml0eS9wZXJtaXNzaW9uIGNoZWNraW5nIGlzc3VlIGluIEtWTSB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGJ5IHRyYWNraW5nIHBlcm1pdHRlZCBlbXVsYXRlZCBhY2Nlc3NlcyAocmVhZCB2cyB3cml0ZSkgZm9yIGNhY2hlZCBHUEFzIHJhdGhlciB0aGFuIHJldXNpbmcgdGhlIEdQQSB1bmNvbmRpdGlvbmFsbHkuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBjb3JlIEtWTSBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMgb24geDg2LCB3aGljaCBpcyBmdWxseSB0ZXN0YWJsZSBhbmQgZnV6emFibGUgdmlhIEtWTSBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjEyLjI5NTY3ODc5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MDk1NzE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIzYTQ0Njk2NTBlMWEzODAyYzRlNTA1YmE2YWM2YTUxMTNjYTNmZTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDA6MDQ6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmggYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbmluZGV4IDNlMzc1YWYxNWMwMzUuLjEwODg2YmVhODJjOTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxcbkBAIC0zNTQsOCArMzU0LDggQEAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQge1xcbiBcXHRib29sIGhhdmVfZXhjZXB0aW9uO1xcbiBcXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247XFxuIFxcbi1cXHQvKiBHUEEgYXZhaWxhYmxlICovXFxuLVxcdGJvb2wgZ3BhX2F2YWlsYWJsZTtcXG4rXFx0LyogU2F2ZWQgR1BBIGFuZCBwZXJtaXR0ZWQgZW11bGF0ZWQgYWNjZXNzZXMuICovXFxuK1xcdHU2NCBncGFfYWNjZXNzO1xcbiBcXHRncGFfdCBncGFfdmFsO1xcbiBcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5pbmRleCAwNjRlY2MzM2I5MjY3Li45NWI5ZWFjOTk2MmE4IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuQEAgLTY2MzIsNiArNjYzMiw5IEBAIGludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyXFxuIFxcdFxcdHJldHVybiByO1xcbiBcXG4gZW11bGF0ZTpcXG4rXFx0aWYgKGRpcmVjdCBcXHUwMDI2XFx1MDAyNiAoZXJyb3JfY29kZSBcXHUwMDI2IFBGRVJSX1dSSVRFX01BU0spKVxcbitcXHRcXHRlbXVsYXRpb25fdHlwZSB8PSBFTVVMVFlQRV9QRl9XUklURTtcXG4rXFxuIFxcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGluc25fbGVuKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5pbmRleCA3OTQ2OGRkZmU0NzM2Li5hYTVkZWI3YzczYWEyIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbkBAIC01MDg4LDggKzUwODgsMTMgQEAgc3RhdGljIGludCBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICp2YWwsXFxuIFxcdCAqIE5vdGUsIHRoaXMgY2Fubm90IGJlIHVzZWQgb24gc3RyaW5nIG9wZXJhdGlvbnMgc2luY2Ugc3RyaW5nXFxuIFxcdCAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRlxcbiBcXHQgKiBvY2N1cnJlZC5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlXFxuK1xcdCAqIHRoZSBHUEEgZm9yIHdyaXRlcyBvbmx5IGlmIGhhcmR3YXJlIHJlcG9ydGVkIGEgd3JpdGUgYWNjZXNzO1xcbitcXHQgKiBvdGhlcndpc2UsIHJlY2hlY2sgcGVybWlzc2lvbnMgZm9yIHRoZSBkZWNvZGVkIGFjY2Vzcy5cXG4gXFx0ICovXFxuLVxcdGlmIChjdHh0LVxcdTAwM2VncGFfYXZhaWxhYmxlIFxcdTAwMjZcXHUwMDI2IGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmICgoY3R4dC1cXHUwMDNlZ3BhX2FjY2VzcyBcXHUwMDI2ICh3cml0ZSA/IEFDQ19XUklURV9NQVNLIDogQUNDX1JFQURfTUFTSykpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgKGFkZHIgXFx1MDAyNiB+UEFHRV9NQVNLKSA9PSAoY3R4dC1cXHUwMDNlZ3BhX3ZhbCBcXHUwMDI2IH5QQUdFX01BU0spKSB7XFxuIFxcdFxcdGdwYSA9IGN0eHQtXFx1MDAzZWdwYV92YWw7XFxuIFxcdFxcdHJldCA9IHZjcHVfaXNfbW1pb19ncGEodmNwdSwgYWRkciwgZ3BhLCB3cml0ZSk7XFxuQEAgLTU5MzgsNyArNTk0Myw3IEBAIHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcdGt2bV94ODZfY2FsbChnZXRfY3NfZGJfbF9iaXRzKSh2Y3B1LCBcXHUwMDI2Y3NfZGIsIFxcdTAwMjZjc19sKTtcXG4gXFxuLVxcdGN0eHQtXFx1MDAzZWdwYV9hdmFpbGFibGUgPSBmYWxzZTtcXG4rXFx0Y3R4dC1cXHUwMDNlZ3BhX2FjY2VzcyA9IDA7XFxuIFxcdGN0eHQtXFx1MDAzZWVmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpO1xcbiBcXHRjdHh0LVxcdTAwM2V0ZiA9IChjdHh0LVxcdTAwM2VlZmxhZ3MgXFx1MDAyNiBYODZfRUZMQUdTX1RGKSAhPSAwO1xcbiBcXG5AQCAtNjQ1NCw3ICs2NDU5LDEwIEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuIFxcbiBcXHRcXHQvKiBXaXRoIHNoYWRvdyBwYWdlIHRhYmxlcywgY3IyIGNvbnRhaW5zIGEgR1ZBIG9yIG5HUEEuICovXFxuIFxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLm1tdS1cXHUwMDNlcm9vdF9yb2xlLmRpcmVjdCkge1xcbi1cXHRcXHRcXHRjdHh0LVxcdTAwM2VncGFfYXZhaWxhYmxlID0gdHJ1ZTtcXG4rXFx0XFx0XFx0LyogQSB3cml0ZSBmYXVsdCBjYW4gcmVxdWlyZSBhIHJlYWQgZm9yIFJNVyBlbXVsYXRpb24uICovXFxuK1xcdFxcdFxcdGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3MgPSBBQ0NfUkVBRF9NQVNLO1xcbitcXHRcXHRcXHRpZiAoZW11bGF0aW9uX3R5cGUgXFx1MDAyNiBFTVVMVFlQRV9QRl9XUklURSlcXG4rXFx0XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZ3BhX2FjY2VzcyB8PSBBQ0NfV1JJVEVfTUFTSztcXG4gXFx0XFx0XFx0Y3R4dC1cXHUwMDNlZ3BhX3ZhbCA9IGNyMl9vcl9ncGE7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oXFxuaW5kZXggMGY1OTE5YjA5MmU0Ny4uNjY3NDY1NjgwY2NkZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmhcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmhcXG5AQCAtNDA3LDYgKzQwNyw4IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2VcXG4gICpcXHRcXHQgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuXFxuICAqXFxuKyAqIEVNVUxUWVBFX1BGX1dSSVRFIC0gU2V0IHdpdGggRU1VTFRZUEVfUEYgd2hlbiBoYXJkd2FyZSByZXBvcnRzIGEgd3JpdGUgYWNjZXNzLlxcbisgKlxcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XFxuICAqXFx0XFx0XFx0XFx0IHN0YXRlIGFuZCBpbmplY3Qgc2luZ2xlLXN0ZXAgI0RCcyBhZnRlciBza2lwcGluZ1xcbiAgKlxcdFxcdFxcdFxcdCBhbiBpbnN0cnVjdGlvbiAoYWZ0ZXIgY29tcGxldGluZyB1c2Vyc3BhY2UgSS9PKS5cXG5AQCAtNDQ1LDYgKzQ0Nyw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxIFxcdTAwM2NcXHUwMDNjIDcpXFxuICNkZWZpbmUgRU1VTFRZUEVfV1JJVEVfUEZfVE9fU1BcXHQgICAgKDEgXFx1MDAzY1xcdTAwM2MgOClcXG4gI2RlZmluZSBFTVVMVFlQRV9TS0lQX1NPRlRfSU5UXFx0ICAgICgxIFxcdTAwM2NcXHUwMDNjIDkpXFxuKyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEVcXHQgICAgKDEgXFx1MDAzY1xcdTAwM2MgMTApXFxuIFxcbiAjZGVmaW5lIEVNVUxUWVBFX1NFVF9TT0ZUX0lOVF9WRUNUT1IodilcXHQoKHUzMikoKHYpIFxcdTAwMjYgMHhmZikgXFx1MDAzY1xcdTAwM2MgMTYpXFxuICNkZWZpbmUgRU1VTFRZUEVfR0VUX1NPRlRfSU5UX1ZFQ1RPUihlKVxcdCgoKGUpIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4ZmYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjEzLjg2NzI3MjA1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzU2NzkyMDU2NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fbW11X3BhZ2VfZmF1bHRcIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCIsXG4gICAgXCJrdm1fZW11bGF0ZV9pbnN0cnVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2VjdXJpdHkvcGVybWlzc2lvbiBjaGVja2luZyBpc3N1ZSBpbiBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBieSB0cmFja2luZyBwZXJtaXR0ZWQgZW11bGF0ZWQgYWNjZXNzZXMgKHJlYWQgdnMgd3JpdGUpIGZvciBjYWNoZWQgR1BBcyByYXRoZXIgdGhhbiByZXVzaW5nIHRoZSBHUEEgdW5jb25kaXRpb25hbGx5LiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIG9uIHg4Niwgd2hpY2ggaXMgZnVsbHkgdGVzdGFibGUgYW5kIGZ1enphYmxlIHZpYSBLVk0gaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiM2E0NDY5NjUwZTFhMzgwMmM0ZTUwNWJhNmFjNmE1MTEzY2EzZmU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDA6MDQ6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaCBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5pbmRleCAzZTM3NWFmMTVjMDM1Li4xMDg4NmJlYTgyYzkxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbisrKyBiL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oXG5AQCAtMzU0LDggKzM1NCw4IEBAIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IHtcbiBcdGJvb2wgaGF2ZV9leGNlcHRpb247XG4gXHRzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiBleGNlcHRpb247XG4gXG4tXHQvKiBHUEEgYXZhaWxhYmxlICovXG4tXHRib29sIGdwYV9hdmFpbGFibGU7XG4rXHQvKiBTYXZlZCBHUEEgYW5kIHBlcm1pdHRlZCBlbXVsYXRlZCBhY2Nlc3Nlcy4gKi9cbitcdHU2NCBncGFfYWNjZXNzO1xuIFx0Z3BhX3QgZ3BhX3ZhbDtcbiBcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDA2NGVjYzMzYjkyNjcuLjk1YjllYWM5OTYyYTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNjYzMiw2ICs2NjMyLDkgQEAgaW50IG5vaW5saW5lIGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJcbiBcdFx0cmV0dXJuIHI7XG4gXG4gZW11bGF0ZTpcbitcdGlmIChkaXJlY3QgXHUwMDI2XHUwMDI2IChlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9XUklURV9NQVNLKSlcbitcdFx0ZW11bGF0aW9uX3R5cGUgfD0gRU1VTFRZUEVfUEZfV1JJVEU7XG4rXG4gXHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgY3IyX29yX2dwYSwgZW11bGF0aW9uX3R5cGUsIGluc24sXG4gXHRcdFx0XHQgICAgICAgaW5zbl9sZW4pO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IDc5NDY4ZGRmZTQ3MzYuLmFhNWRlYjdjNzNhYTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTUwODgsOCArNTA4OCwxMyBAQCBzdGF0aWMgaW50IGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKnZhbCxcbiBcdCAqIE5vdGUsIHRoaXMgY2Fubm90IGJlIHVzZWQgb24gc3RyaW5nIG9wZXJhdGlvbnMgc2luY2Ugc3RyaW5nXG4gXHQgKiBvcGVyYXRpb24gdXNpbmcgcmVwIHdpbGwgb25seSBoYXZlIHRoZSBpbml0aWFsIEdQQSBmcm9tIHRoZSBOUEZcbiBcdCAqIG9jY3VycmVkLlxuK1x0ICpcbitcdCAqIFRoZSBndWVzdCBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBpbnN0cnVjdGlvbiBzaW5jZSB0aGUgZmF1bHQuICBSZXVzZVxuK1x0ICogdGhlIEdQQSBmb3Igd3JpdGVzIG9ubHkgaWYgaGFyZHdhcmUgcmVwb3J0ZWQgYSB3cml0ZSBhY2Nlc3M7XG4rXHQgKiBvdGhlcndpc2UsIHJlY2hlY2sgcGVybWlzc2lvbnMgZm9yIHRoZSBkZWNvZGVkIGFjY2Vzcy5cbiBcdCAqL1xuLVx0aWYgKGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSBcdTAwMjZcdTAwMjYgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAoKGN0eHQtXHUwMDNlZ3BhX2FjY2VzcyBcdTAwMjYgKHdyaXRlID8gQUNDX1dSSVRFX01BU0sgOiBBQ0NfUkVBRF9NQVNLKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgKGFkZHIgXHUwMDI2IH5QQUdFX01BU0spID09IChjdHh0LVx1MDAzZWdwYV92YWwgXHUwMDI2IH5QQUdFX01BU0spKSB7XG4gXHRcdGdwYSA9IGN0eHQtXHUwMDNlZ3BhX3ZhbDtcbiBcdFx0cmV0ID0gdmNwdV9pc19tbWlvX2dwYSh2Y3B1LCBhZGRyLCBncGEsIHdyaXRlKTtcbkBAIC01OTM4LDcgKzU5NDMsNyBAQCBzdGF0aWMgdm9pZCBpbml0X2VtdWxhdGVfY3R4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXHRrdm1feDg2X2NhbGwoZ2V0X2NzX2RiX2xfYml0cykodmNwdSwgXHUwMDI2Y3NfZGIsIFx1MDAyNmNzX2wpO1xuIFxuLVx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gZmFsc2U7XG4rXHRjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgPSAwO1xuIFx0Y3R4dC1cdTAwM2VlZmxhZ3MgPSBrdm1fZ2V0X3JmbGFncyh2Y3B1KTtcbiBcdGN0eHQtXHUwMDNldGYgPSAoY3R4dC1cdTAwM2VlZmxhZ3MgXHUwMDI2IFg4Nl9FRkxBR1NfVEYpICE9IDA7XG4gXG5AQCAtNjQ1NCw3ICs2NDU5LDEwIEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4gXG4gXHRcdC8qIFdpdGggc2hhZG93IHBhZ2UgdGFibGVzLCBjcjIgY29udGFpbnMgYSBHVkEgb3IgbkdQQS4gKi9cbiBcdFx0aWYgKHZjcHUtXHUwMDNlYXJjaC5tbXUtXHUwMDNlcm9vdF9yb2xlLmRpcmVjdCkge1xuLVx0XHRcdGN0eHQtXHUwMDNlZ3BhX2F2YWlsYWJsZSA9IHRydWU7XG4rXHRcdFx0LyogQSB3cml0ZSBmYXVsdCBjYW4gcmVxdWlyZSBhIHJlYWQgZm9yIFJNVyBlbXVsYXRpb24uICovXG4rXHRcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzID0gQUNDX1JFQURfTUFTSztcbitcdFx0XHRpZiAoZW11bGF0aW9uX3R5cGUgXHUwMDI2IEVNVUxUWVBFX1BGX1dSSVRFKVxuK1x0XHRcdFx0Y3R4dC1cdTAwM2VncGFfYWNjZXNzIHw9IEFDQ19XUklURV9NQVNLO1xuIFx0XHRcdGN0eHQtXHUwMDNlZ3BhX3ZhbCA9IGNyMl9vcl9ncGE7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5pbmRleCAwZjU5MTliMDkyZTQ3Li42Njc0NjU2ODBjY2RmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmhcbkBAIC00MDcsNiArNDA3LDggQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbiAgKiBFTVVMVFlQRV9QRiAtIFNldCB3aGVuIGFuIGludGVyY2VwdGVkICNQRiB0cmlnZ2VycyB0aGUgZW11bGF0aW9uLCBpbiB3aGljaCBjYXNlXG4gICpcdFx0IHRoZSBDUjIvR1BBIHZhbHVlIHBhc3Mgb24gdGhlIHN0YWNrIGlzIHZhbGlkLlxuICAqXG4rICogRU1VTFRZUEVfUEZfV1JJVEUgLSBTZXQgd2l0aCBFTVVMVFlQRV9QRiB3aGVuIGhhcmR3YXJlIHJlcG9ydHMgYSB3cml0ZSBhY2Nlc3MuXG4rICpcbiAgKiBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgLSBTZXQgd2hlbiB0aGUgZW11bGF0b3Igc2hvdWxkIHVwZGF0ZSBpbnRlcnJ1cHRpYmlsaXR5XG4gICpcdFx0XHRcdCBzdGF0ZSBhbmQgaW5qZWN0IHNpbmdsZS1zdGVwICNEQnMgYWZ0ZXIgc2tpcHBpbmdcbiAgKlx0XHRcdFx0IGFuIGluc3RydWN0aW9uIChhZnRlciBjb21wbGV0aW5nIHVzZXJzcGFjZSBJL08pLlxuQEAgLTQ0NSw2ICs0NDcsNyBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICNkZWZpbmUgRU1VTFRZUEVfQ09NUExFVEVfVVNFUl9FWElUICgxIFx1MDAzY1x1MDAzYyA3KVxuICNkZWZpbmUgRU1VTFRZUEVfV1JJVEVfUEZfVE9fU1BcdCAgICAoMSBcdTAwM2NcdTAwM2MgOClcbiAjZGVmaW5lIEVNVUxUWVBFX1NLSVBfU09GVF9JTlRcdCAgICAoMSBcdTAwM2NcdTAwM2MgOSlcbisjZGVmaW5lIEVNVUxUWVBFX1BGX1dSSVRFXHQgICAgKDEgXHUwMDNjXHUwMDNjIDEwKVxuIFxuICNkZWZpbmUgRU1VTFRZUEVfU0VUX1NPRlRfSU5UX1ZFQ1RPUih2KVx0KCh1MzIpKCh2KSBcdTAwMjYgMHhmZikgXHUwMDNjXHUwMDNjIDE2KVxuICNkZWZpbmUgRU1VTFRZUEVfR0VUX1NPRlRfSU5UX1ZFQ1RPUihlKVx0KCgoZSkgXHUwMDNlXHUwMDNlIDE2KSBcdTAwMjYgMHhmZilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjEzLjg2NzI3MzIwOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk2MTg0MDY5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0geDg2IFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UncmUgdG91Y2hpbmcgS1ZNJ3MgeDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBhbmQgdGhlIE1NVSBjb2RlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgZmFpcmx5IGZvY3VzZWQsIGJ1dCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvcnJlY3RuZXNzLlxuXG5UaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHRoZSBgZ3BhX2F2YWlsYWJsZWAgZmxhZyBpbiB0aGUgYHg4Nl9lbXVsYXRlX2N0eHRgIHN0cnVjdHVyZS4gSXQncyBiZWVuIHJlcGxhY2VkIHdpdGggYGdwYV9hY2Nlc3NgLCB3aGljaCBpcyBub3cgYSBgdTY0YC4gVGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGltcGxpZXMgdGhhdCB0aGUgYWNjZXNzIGNvbnRyb2wgaXMgYmVjb21pbmcgbW9yZSBncmFudWxhci4gTXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmaWVsZCB0ZWxscyBtZSB0aGF0IGl0IGlzIGxpa2VseSB0byBiZSBhIGNvbWJpbmF0aW9uIG9mIHJlYWQgYW5kIHdyaXRlIGJpdHMuIFxuXG5UaGUgY2hhbmdlcyBpbiBga3ZtX21tdV9wYWdlX2ZhdWx0KClgIHNldHRpbmcgYEVNVUxUWVBFX1BGX1dSSVRFYCBiYXNlZCBvbiB0aGUgZmF1bHQgdHlwZSAoYFBGRVJSX1dSSVRFX01BU0tgKSBsb29rIGV4cGVjdGVkLiBUaGF0IHN1Z2dlc3RzIGFuIGF0dGVtcHQgdG8gdHJhY2sgd3JpdGUgYWNjZXNzIGR1cmluZyBlbXVsYXRpb24uXG5cbmBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2UoKWAgbm93IHVzZXMgdGhlIG5ldyBgZ3BhX2FjY2Vzc2AgZmllbGQgYW5kIGNoZWNrcyBmb3IgYEFDQ19XUklURV9NQVNLYCBhbmQgYEFDQ19SRUFEX01BU0tgLiBUaGF0IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgYGdwYV9hY2Nlc3NgIGZpZWxkLCBJIGFzc3VtZSB0aGUgYml0bWFzayBvcGVyYXRpb25zIGFyZSB0aGUga2V5IGhlcmUuIFRoZSBpbml0aWFsaXphdGlvbiBhbmQgdXBkYXRlIG9mIGBncGFfYWNjZXNzYCBpbiB0aGUgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKClgLCBzaG93IGhvdyB0aGUgYWNjZXNzIGZsYWdzIGFyZSBiZWluZyBtYW5hZ2VkIGR1cmluZyB0aGUgZW11bGF0aW9uIHByb2Nlc3MuXG5cbkknbGwgbmVlZCB0byBkaWcgZGVlcGVyLCB0aG91Z2guIFRoZSBkZWZpbml0aW9ucyBhbmQgdXNhZ2Ugb2YgYEFDQ19SRUFEX01BU0tgIGFuZCBgQUNDX1dSSVRFX01BU0tgIGFyZSB0aGUga2V5IGhlcmUuIEFsc28sIHdoYXQgZXhhY3RseSBpcyBgRU1VTFRZUEVfUEZfV1JJVEVgPyBXaGF0IGFyZSBhbGwgdGhlIHBvdGVudGlhbCB2YWx1ZXMgb2YgYGVtdWxhdGlvbl90eXBlYD8gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggb3BlcmF0aW9ucyBoYXZlIHdyaXRlIGFjY2VzcyBhbmQgd2hpY2ggaGF2ZSByZWFkIGFjY2VzcyB0byBwcm9wZXJseSBhc3Nlc3MgdGhpcy4gSSdsbCBuZWVkIHRvIGdyZXBwZXIgdGhpcyBhbmQgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYXMgdXN1YWwsIHRvIHNlZSBob3cgdGhlc2UgbmV3IGFjY2VzcyBmbGFncyBhcmUgYmVpbmcgdXNlZCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSBhbmQgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBlbXVsYXRpb24gc3RyYXRlZ3kuIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlncy9mb2N1cyBzeW1ib2xzLiBJIGJldCB0aGVyZSBpcyBtb3JlIHRoYW4ganVzdCB0aGlzIHNtYWxsIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUzMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjIzLjQ4NTY4Mjg3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTExOTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fbW11X3BhZ2VfZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUuaD0xNDY9dm9pZCBrdm1faW5pdF9zaGFkb3dfZXB0X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgZXhlY29ubHksXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11LmgtMTQ5LVxcbmFyY2gveDg2L2t2bS9tbXUuaDoxNTA6aW50IGt2bV9tbXVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsIHU2NCBlcnJvcl9jb2RlLFxcbmFyY2gveDg2L2t2bS9tbXUuaC0xNTEtXFx0XFx0ICAgICAgIHZvaWQgKmluc24sIGludCBpbnNuX2xlbik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ4OTA9aW50IGt2bV9oYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlcnJvcl9jb2RlLFxcbi0tXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTE4LVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NDkxOTpcXHRcXHRyID0ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGZhdWx0X2FkZHJlc3MsIGVycm9yX2NvZGUsIGluc24sXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy00OTIwLVxcdFxcdFxcdFxcdGluc25fbGVuKTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjQ3ND1zdGF0aWMgaW50IGt2bV9tbXVfd3JpdGVfcHJvdGVjdF9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NjYtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NTY3OmludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1NjgtXFx0XFx0ICAgICAgIHZvaWQgKmluc24sIGludCBpbnNuX2xlbilcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjY0MC19XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjQxOkVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fbW11X3BhZ2VfZmF1bHQpO1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjY0Mi1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MTk3ND1zdGF0aWMgaW50IG5wZl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMDI0LVxcdHRyYWNlX2t2bV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMDI1OlxcdHJjID0ga3ZtX21tdV9wYWdlX2ZhdWx0KHZjcHUsIGdwYSwgZXJyb3JfY29kZSxcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIwMjYtXFx0XFx0XFx0XFx0Y3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9ERUNPREVBU1NJU1RTKSA/XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oPTgzPXN0YXRpYyBpbmxpbmUgaW50IF9fdm14X2hhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC0xMTUtXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaDoxMTY6XFx0cmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEsIGVycm9yX2NvZGUsIE5VTEwsIDApO1xcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmgtMTE3LX1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjAwNT1zdGF0aWMgaW50IGhhbmRsZV9lcHRfbWlzY29uZmlnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjAyMi1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjYwMjM6XFx0cmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEsIFBGRVJSX1JTVkRfTUFTSywgTlVMTCwgMCk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy02MDI0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDQ6MjMuNTQwODA2NDg0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAyNzUzNDI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIEVtdWxhdGlvbiBFbmdpbmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGVtdWxhdGlvbiBlbmdpbmUgaXMgd29ya2luZyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW50byB0aGUgY29yZSBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25gIOKAkyB0aGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgZXhlY3V0aW9uIHByb2Nlc3MsIHRoZSBtYWluIGRpc3BhdGNoIHBvaW50LiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBpbnN0cnVjdGlvbiB0eXBlcywgb3BlcmFuZCBmZXRjaGluZywgYW5kIHVsdGltYXRlbHksIHRoZSBlbXVsYXRpb24gaXRzZWxmLlxuXG5UaGVuLCBzaW5jZSB0aGlzIGlzIGFuIGVtdWxhdG9yLCBJIGhhdmUgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBtZW1vcnkuIFRoYXQgbGVhZHMgbWUgZGlyZWN0bHkgdG8gYGVtdWxhdG9yX3JlYWRfd3JpdGVfb25lcGFnZWAuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIGNydWNpYWwgYXNwZWN0IG9mIHRyYW5zbGF0aW5nIHRoZSBlbXVsYXRlZCBlbnZpcm9ubWVudCdzIG1lbW9yeSBhY2Nlc3NlcyB0byB0aGUgaG9zdCBtYWNoaW5lLCBtYWtpbmcgc3VyZSByZWFkcyBhbmQgd3JpdGVzIGFyZSBjb3JyZWN0bHkgaGFuZGxlZC4gVW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGlzIG1hbmFnZWQgaW4gdGhpcyBjb250ZXh0IGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBlbXVsYXRvcidzIGxpbWl0YXRpb25zLiBJIHdpbGwgYW5hbHl6ZSBob3cgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBwYWdlIGJvdW5kYXJpZXMsIGFuZCB2aXJ0dWFsLXRvLXBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24uIFRob3NlIGFyZSBteSBpbml0aWFsIHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNDoyOC41NjgzNDM4MDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNjE4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjU2Nz1pbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2MzctXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NjM4OlxcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY2MzktXFx0XFx0XFx0XFx0ICAgICAgIGluc25fbGVuKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01MTUzPXN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01MjI2LVxcdCAqIGFmdGVyIGNvbXBsZXRpbmcgZW11bGF0aW9uIChzZWUgdGhlIGNoZWNrIG9uIHZjcHUtXFx1MDAzZW1taW9fbmVlZGVkIGluXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjUyMjc6XFx0ICogeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKSkuXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUyMjgtXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjMzMz1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoeDg2X2RlY29kZV9lbXVsYXRlZF9pbnN0cnVjdGlvbik7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTYzMzQtXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjYzMzU6aW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjMzNi1cXHRcXHRcXHQgICAgaW50IGVtdWxhdGlvbl90eXBlLCB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjU1OD1pbnQga3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bGF0aW9uX3R5cGUpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NTkte1xcbmFyY2gveDg2L2t2bS94ODYuYzo2NTYwOlxcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCAwLCBlbXVsYXRpb25fdHlwZSwgTlVMTCwgMCk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY1NjEtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTY1NjQ9aW50IGt2bV9lbXVsYXRlX2luc3RydWN0aW9uX2Zyb21fYnVmZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02NTY2LXtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjU2NzpcXHRyZXR1cm4geDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgMCwgMCwgaW5zbiwgaW5zbl9sZW4pO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NTY4LX1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaD0zNzE9aW50IHg4Nl9kZWNvZGVfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZW11bGF0aW9uX3R5cGUsXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM3Mi1cXHRcXHRcXHRcXHQgICAgdm9pZCAqaW5zbiwgaW50IGluc25fbGVuKTtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzczOmludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTM3NC1cXHRcXHRcXHQgICAgaW50IGVtdWxhdGlvbl90eXBlLCB2b2lkICppbnNuLCBpbnQgaW5zbl9sZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNDoyOC42MTU0MDkwNDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzQ0NjY4MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBLY29uZmlnIERlcGVuZGVuY2llcyBmb3IgS1ZNIHg4NioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMgS1ZNIHg4NiBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucyBhcmUgcHJlc2VudCBhbmQgcHJvcGVybHkgc2V0IGZvciB0aGUgaW50ZW5kZWQgc2V0dXAuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBlbmFibGluZyBLVk07IGl0J3MgYWJvdXQgdGhlIGVudGlyZSBkZXBlbmRlbmN5IGNoYWluIHRoYXQgc3VwcG9ydHMgaXRzIGZ1bmN0aW9uYWxpdHkgb24geDg2IGFyY2hpdGVjdHVyZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4gU28sIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIHg4Ni1zcGVjaWZpYyBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgcmVzaWRlLiBJJ2xsIG5lZWQgdG8gcG9yZSBvdmVyIHRoYXQgZmlsZSBtZXRpY3Vsb3VzbHkuIExldCdzIHNlZSB3aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcwMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjMzLjM2MDA3OTA5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgS1ZNIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbiAgIDc6XFx0XFxuICAgODpcXHRtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuICAgOTpcXHRcXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG4gIDEwOlxcdFxcdGRlZmF1bHQgeVxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1biBvdGhlclxcbiAgMTM6XFx0XFx0ICBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cXG4gIDE0OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBWSVJUVUFMSVpBVElPTlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgS1ZNX1g4NlxcbiAgMjE6XFx0XFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbiAgMjI6XFx0XFx0c2VsZWN0IEtWTV9DT01NT05cXG4gIDIzOlxcdFxcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXFxuICAyNDpcXHRcXHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbiAgMjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcXG4gIDI2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxcbiAgMjc6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXFxuICAyODpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuICAyOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xcbiAgMzA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXFxuICAzMTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAzMjpcXHRcXHRzZWxlY3QgVkhPU1RfVEFTS1xcbiAgMzM6XFx0XFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXFxuICAzNTpcXHRcXHRzZWxlY3QgS1ZNX01NSU9cXG4gIDM2OlxcdFxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuICAzNzpcXHRcXHRzZWxlY3QgUEVSRl9FVkVOVFNcXG4gIDM4OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xcbiAgMzk6XFx0XFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXFxuICA0MDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuICA0MTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiAgNDI6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG4gIDQzOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgNDQ6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiAgNDU6XFx0XFx0c2VsZWN0IEtWTV9WRklPXFxuICA0NjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cXG4gIDQ3OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbiAgNDg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG4gIDQ5OlxcdFxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcbiAgNTA6XFx0XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcXG4gIDUxOlxcdFxcbiAgNTI6XFx0Y29uZmlnIEtWTVxcbiAgNTM6XFx0XFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gWDg2X0xPQ0FMX0FQSUNcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlXFxuICA1NzpcXHRcXHQgIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMuICBZb3Ugd2lsbCBuZWVkIGEgZmFpcmx5IHJlY2VudFxcbiAgNTg6XFx0XFx0ICBwcm9jZXNzb3IgZXF1aXBwZWQgd2l0aCB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiBZb3Ugd2lsbCBhbHNvXFxuICA1OTpcXHRcXHQgIG5lZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm9jZXNzb3IgbW9kdWxlcyBiZWxvdy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJvdWdoXFxuICA2MjpcXHRcXHQgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLlxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNjU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0uXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIEtWTV9XRVJST1JcXG4gIDcwOlxcdFxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4gIDcxOlxcdFxcdCMgRGlzYWxsb3cgS1ZNJ3MgLVdlcnJvciBpZiBLQVNBTiBpcyBlbmFibGVkLCBlLmcuIHRvIGd1YXJkIGFnYWluc3RcXG4gIDcyOlxcdFxcdCMgcmFuZG9taXplZCBjb25maWdzIGZyb20gc2VsZWN0aW5nIEtWTV9XRVJST1I9eSwgd2hpY2ggZG9lc24ndCBwbGF5XFxuICA3MzpcXHRcXHQjIG5pY2Ugd2l0aCBLQVNBTi4gIEtBU0FOIGJ1aWxkcyBnZW5lcmF0ZXMgd2FybmluZ3MgZm9yIHRoZSBkZWZhdWx0XFxuICA3NDpcXHRcXHQjIEZSQU1FX1dBUk4sIGkuZS4gS1ZNX1dFUlJPUj15IHdpdGggS0FTQU49eSByZXF1aXJlcyBzcGVjaWFsIHR1bmluZy5cXG4gIDc1OlxcdFxcdCMgQnVpbGRpbmcgS1ZNIHdpdGggLVdlcnJvciBhbmQgS0FTQU4gaXMgc3RpbGwgZG9hYmxlIHZpYSBlbmFibGluZ1xcbiAgNzY6XFx0XFx0IyB0aGUga2VybmVsLXdpZGUgV0VSUk9SPXkuXFxuICA3NzpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODYgXFx1MDAyNlxcdTAwMjYgKChFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIUtBU0FOKSB8fCBXRVJST1IpXFxuICA3ODpcXHRcXHRoZWxwXFxuICA3OTpcXHRcXHQgIEFkZCAtV2Vycm9yIHRvIHRoZSBidWlsZCBmbGFncyBmb3IgS1ZNLlxcbiAgODA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjMzLjM2MDE4MzIzOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNjIxMDQ3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGZyb20gYGFyY2gveDg2L2t2bS9LY29uZmlnYDpcblxuKipSZXZpZXdpbmcgS2NvbmZpZzogTGluZXMgODAtMTIwKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRob3NlIGxpbmVzIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSA4MCB0aHJvdWdoIDEyMC4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aCwgSSBleHBlY3Qgd2UncmUgZGVhbGluZyB3aXRoIEtWTSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB4ODYgYXJjaGl0ZWN0dXJlLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBtZW50YWxseSBwYXJzaW5nIHRoaXMgZm9yIGRlcGVuZGVuY2llcywgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kLCBvZiBjb3Vyc2UsIGFueSBuZXcgZmVhdHVyZXMgb3IgY2FwYWJpbGl0aWVzIGJlaW5nIGludHJvZHVjZWQuXG5cblJpZ2h0IG9mZiB0aGUgYmF0LCBJJ20gbG9va2luZyBmb3IgdGhlIG1haW4gS1ZNIGZlYXR1cmUgZW5hYmxlIG9wdGlvbnMsIHRoZSBjb3JlIGBDT05GSUdfS1ZNYCBhbmQgd2hhdCBpdCBkZXBlbmRzIG9uLiBBbnl0aGluZyBzcGVjaWZpYyB0byB0aGUgeDg2IGFyY2hpdGVjdHVyZSBzaG91bGQgYmUgZGVmaW5lZCBuZWFyIGl0LCBvciBkZXBlbmRlbnQgb24gaXQuIFRoZSBzdHJ1Y3R1cmUgaXMgdXN1YWxseSBwcmV0dHkgY2xlYXI6IGJvb2wgb3B0aW9ucyBmb3IgY29yZSBmdW5jdGlvbmFsaXR5LCB0cmlzdGF0ZSBvcHRpb25zIGZvciBwb3RlbnRpYWxseSBtb2R1bGFyIGNvbXBvbmVudHMsIGFuZCBoZWxwIHRleHQgdGhhdCBkZXNjcmliZXMgd2hhdCBlYWNoIG9wdGlvbiBhY3R1YWxseSAqZG9lcyouIEkgZXhwZWN0IHNvbWUgbmVzdGVkICdpZicgc3RhdGVtZW50cyB0byBkZWZpbmUgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKGxpa2UgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucykuIEknbGwgYmUgY2hlY2tpbmcgdG8gc2VlIHdoYXQgdGhleSBhcmUuXG5cbkkgYWxzbyBhbnRpY2lwYXRlIGxvb2tpbmcgZm9yIGFueXRoaW5nIGFyb3VuZCBzcGVjaWZpYyBoYXJkd2FyZSBleHRlbnNpb25zLCBsaWtlIEludGVsJ3MgVlQteCBvciBBTUQtVi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgaGVyZSwgb3IgbWF5YmUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgcGFnZSB0YWJsZXMgKEVQVCk/IEFyZSB0aGVyZSBhbnkgbmV3IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgZGVmaW5lZD8gU2VjdXJpdHkgaW1wbGljYXRpb25zIHdpbGwgYmUgbmVhciB0aGUgdG9wIG9mIG15IGxpc3QsIGVzcGVjaWFsbHkgYW55dGhpbmcgcmVsYXRlZCB0byBtaXRpZ2F0aW9ucyBmb3IgdnVsbmVyYWJpbGl0aWVzIGxpa2UgU3BlY3RyZSBvciBNZWx0ZG93biwgaW4gdGhlIEtWTSBjb250ZXh0LiBUaGUgcmVjZW50IHdvcmsgb24gaGFyZHdhcmUgbWl0aWdhdGlvbnMgcHJvYmFibHkgaGFzIGEgaGFuZCBpbiB0aGlzIGFyZWEuXG5cbkFzIEkgcmVhZCwgSSdsbCBiZSBhc3Nlc3NpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlc2Ugb3B0aW9ucyBvbiBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBjb21wYXRpYmlsaXR5LiBJJ2xsIGJlIG5vdGluZyBhbnkgY2hhbmdlcyB0aGF0IG1pZ2h0IHJlcXVpcmUgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGR1cmluZyBhIGtlcm5lbCB1cGdyYWRlIG9yIHdoZW4gY29uZmlndXJpbmcgYSBuZXcgS1ZNIGVudmlyb25tZW50LiBXaGF0IEknbSBob3BpbmcgdG8gc2VlIGlzIGNsYXJpdHk6IHdlbGwtZG9jdW1lbnRlZCBvcHRpb25zIHdpdGggY2xlYXIgZGVwZW5kZW5jaWVzIGFuZCBhIGxvZ2ljYWwgc3RydWN0dXJlLiBBIGNsZWFuIGBLY29uZmlnYCBtYWtlcyBmb3IgZWFzaWVyIG1haW50ZW5hbmNlIGFuZCBtb3JlIHJvYnVzdCBjb25maWd1cmF0aW9ucyBkb3duIHRoZSBsaW5lLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjM2LjcyMjI4OTk1NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MTpcXHRcXHQgIElmIGluIGRvdWJ0LCBzYXkgXFxcIk5cXFwiLlxcbiAgODI6XFx0XFxuICA4MzpcXHRjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbiAgODQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbiAgODU6XFx0XFx0ZGVwZW5kcyBvbiBFWFBFUlRcXG4gIDg2OlxcdFxcdGRlcGVuZHMgb24gS1ZNX1g4NiBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG4gIDg3OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAgODg6XFx0XFx0aGVscFxcbiAgODk6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMuICBDdXJyZW50bHksIHNvZnR3YXJlLVxcbiAgOTA6XFx0XFx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxcbiAgOTE6XFx0XFx0ICBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELiAgQXR0ZW1wdGluZyB0byBydW4gYSBcXFwicmVhbFxcXCIgVk0gd29ya2xvYWQgYXMgYVxcbiAgOTI6XFx0XFx0ICBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk0gd2lsbCBmYWlsIG1pc2VyYWJseS5cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiTlxcXCIuXFxuICA5NTpcXHRcXG4gIDk2OlxcdGNvbmZpZyBLVk1fSU5URUxcXG4gIDk3OlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbiAgOTg6XFx0XFx0ZGVwZW5kcyBvbiBLVk0gXFx1MDAyNlxcdTAwMjYgSUEzMl9GRUFUX0NUTFxcbiAgOTk6XFx0XFx0c2VsZWN0IFg4Nl9GUkVEIGlmIFg4Nl82NFxcbiAxMDA6XFx0XFx0aGVscFxcbiAxMDE6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIEludGVsJ3MgVlRcXG4gMTAyOlxcdFxcdCAgZXh0ZW5zaW9ucywgYS5rLmEuIFZpcnR1YWwgTWFjaGluZSBFeHRlbnNpb25zIChWTVgpLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAxMDU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0taW50ZWwuXFxuIDEwNjpcXHRcXG4gMTA3OlxcdGNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG4gMTA4OlxcdCAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuIDEwOTpcXHQgICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFxcdTAwMjZcXHUwMDI2IEVYUEVSVFxcbiAxMTA6XFx0ICAgICAgICBoZWxwXFxuIDExMTpcXHQgICAgICAgICAgQ2hlY2tzIHRoYXQgS1ZNJ3MgcGFnZSB0YWJsZSBtYW5hZ2VtZW50IGNvZGUgd2lsbCBub3QgaW5jb3JyZWN0bHlcXG4gMTEyOlxcdCAgICAgICAgICBsZXQgZ3Vlc3RzIHJlY2VpdmUgYSB2aXJ0dWFsaXphdGlvbiBleGNlcHRpb24uICBWaXJ0dWFsaXphdGlvblxcbiAxMTM6XFx0ICAgICAgICAgIGV4Y2VwdGlvbnMgd2lsbCBiZSB0cmFwcGVkIGJ5IHRoZSBoeXBlcnZpc29yIHJhdGhlciB0aGFuIGluamVjdGVkXFxuIDExNDpcXHQgICAgICAgICAgaW4gdGhlIGd1ZXN0LlxcbiAxMTU6XFx0XFxuIDExNjpcXHQgICAgICAgICAgTm90ZTogc29tZSBDUFVzIGFwcGVhciB0byBnZW5lcmF0ZSBzcHVyaW91cyBFUFQgVmlvbGF0aW9ucyAjVkVzXFxuIDExNzpcXHQgICAgICAgICAgdGhhdCB0cmlnZ2VyIEtWTSdzIFdBUk4sIGluIHBhcnRpY3VsYXIgd2l0aCBlcHRhZD0wIGFuZC9vciBuZXN0ZWRcXG4gMTE4OlxcdCAgICAgICAgICB2aXJ0dWFsaXphdGlvbi5cXG4gMTE5OlxcdFxcbiAxMjA6XFx0ICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEyMTpcXHRcXG4gMTIyOlxcdGNvbmZpZyBYODZfU0dYX0tWTVxcbiAxMjM6XFx0XFx0Ym9vbCBcXFwiU29mdHdhcmUgR3VhcmQgZVh0ZW5zaW9ucyAoU0dYKSBWaXJ0dWFsaXphdGlvblxcXCJcXG4gMTI0OlxcdFxcdGRlcGVuZHMgb24gWDg2X1NHWCBcXHUwMDI2XFx1MDAyNiBLVk1fSU5URUxcXG4gMTI1OlxcdFxcdGhlbHBcXG4gMTI2OlxcdFxcbiAxMjc6XFx0XFx0ICBFbmFibGVzIEtWTSBndWVzdHMgdG8gY3JlYXRlIFNHWCBlbmNsYXZlcy5cXG4gMTI4OlxcdFxcbiAxMjk6XFx0XFx0ICBUaGlzIGluY2x1ZGVzIHN1cHBvcnQgdG8gZXhwb3NlIFxcXCJyYXdcXFwiIHVucmVjbGFpbWFibGUgZW5jbGF2ZSBtZW1vcnkgdG9cXG4gMTMwOlxcdFxcdCAgZ3Vlc3RzIHZpYSBhIGRldmljZSBub2RlLCBlLmcuIC9kZXYvc2d4X3ZlcGMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjM2LjcyMjM1OTE0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODUyMTY2NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLVk0gQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbW11LmNgIGFuZCBgeDg2LmNgIGFyZSBjb21waWxlZCB3aXRoaW4gdGhlIEtWTSB4ODYgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGNoZWNrIHRoZSBvYnZpb3VzIHBsYWNlOiBgYXJjaC94ODYva3ZtL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgYnVpbGQgbWFnaWMgZm9yIHRoYXQgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGxpdmVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlcGVuZGVuY3kgY2hhaW4gYW5kIGJ1aWxkIHJ1bGVzIHRoYXQgZGVmaW5lIGhvdyB0aG9zZSB0d28gc291cmNlIGZpbGVzIGdldCB0dXJuZWQgaW50byBvYmplY3QgZmlsZXMgYW5kIHRoZW4gbGlua2VkIGludG8gdGhlIGZpbmFsIEtWTSBrZXJuZWwgbW9kdWxlcy4gVGhpcyBzaG91bGQgdGVsbCBtZSB3aGF0IGZsYWdzIGFyZSBiZWluZyB1c2VkLCBhbnkgc3BlY2lhbCBsaWJyYXJpZXMgdGhhdCBhcmUgbGlua2VkLCBhbmQgdGhlIG92ZXJhbGwgY29tcGlsYXRpb24gZmxvdy4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbG93ZXIgbGV2ZWxzIG9mIHRoZSBhcmNoaXRlY3R1cmUgZ2V0IGJ1aWx0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNDozOS41NzQ1Mjk0MzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRjY2ZsYWdzLXkgKz0gLUkgJChzcmN0cmVlKS9hcmNoL3g4Ni9rdm1cXG4gICA0OlxcdGNjZmxhZ3MtJChDT05GSUdfS1ZNX1dFUlJPUikgKz0gLVdlcnJvclxcbiAgIDU6XFx0XFxuICAgNjpcXHRpbmNsdWRlICQoc3JjdHJlZSkvdmlydC9rdm0vTWFrZWZpbGUua3ZtXFxuICAgNzpcXHRcXG4gICA4OlxcdGt2bS15XFx0XFx0XFx0Kz0geDg2Lm8gZW11bGF0ZS5vIGlycS5vIGxhcGljLm8gY3B1aWQubyBtc3JzLm8gcG11Lm8gcmVncy5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdCAgIG10cnIubyBkZWJ1Z2ZzLm8gbW11L21tdS5vIG1tdS9wYWdlX3RyYWNrLm8gbW11L3NwdGUub1xcbiAgMTA6XFx0XFxuICAxMTpcXHRrdm0tJChDT05GSUdfWDg2XzY0KSArPSBtbXUvdGRwX2l0ZXIubyBtbXUvdGRwX21tdS5vXFxuICAxMjpcXHRrdm0tJChDT05GSUdfS1ZNX0lPQVBJQykgKz0gaTgyNTkubyBpODI1NC5vIGlvYXBpYy5vXFxuICAxMzpcXHRrdm0tJChDT05GSUdfS1ZNX0hZUEVSVikgKz0gaHlwZXJ2Lm9cXG4gIDE0OlxcdGt2bS0kKENPTkZJR19LVk1fWEVOKVxcdCs9IHhlbi5vXFxuICAxNTpcXHRrdm0tJChDT05GSUdfS1ZNX1NNTSlcXHQrPSBzbW0ub1xcbiAgMTY6XFx0XFxuICAxNzpcXHRrdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXgubyB2bXgvdm1lbnRlci5vIHZteC9wbXVfaW50ZWwubyB2bXgvdm1jczEyLm8gXFxcXFxcbiAgMTg6XFx0XFx0XFx0XFx0ICAgdm14L25lc3RlZC5vIHZteC9wb3N0ZWRfaW50ci5vIHZteC9tYWluLm9cXG4gIDE5OlxcdFxcbiAgMjA6XFx0a3ZtLWludGVsLSQoQ09ORklHX1g4Nl9TR1hfS1ZNKVxcdCs9IHZteC9zZ3gub1xcbiAgMjE6XFx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXFx0Kz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xcbiAgMjI6XFx0a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuICAyMzpcXHRcXG4gIDI0OlxcdGt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm0ubyBzdm0vdm1lbnRlci5vIHN2bS9wbXUubyBzdm0vbmVzdGVkLm8gc3ZtL2F2aWMub1xcbiAgMjU6XFx0XFxuICAyNjpcXHRrdm0tYW1kLSQoQ09ORklHX0tWTV9BTURfU0VWKVxcdCs9IHN2bS9zZXYub1xcbiAgMjc6XFx0a3ZtLWFtZC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHN2bS9oeXBlcnYub1xcbiAgMjg6XFx0XFxuICAyOTpcXHRpZmRlZiBDT05GSUdfSFlQRVJWXFxuICAzMDpcXHRrdm0teVxcdFxcdFxcdCs9IGt2bV9vbmh5cGVydi5vXFxuICAzMTpcXHRrdm0taW50ZWwteVxcdFxcdCs9IHZteC92bXhfb25oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG4gIDMyOlxcdGt2bS1hbWQteVxcdFxcdCs9IHN2bS9zdm1fb25oeXBlcnYub1xcbiAgMzM6XFx0ZW5kaWZcXG4gIDM0OlxcdFxcbiAgMzU6XFx0b2JqLSQoQ09ORklHX0tWTV9YODYpXFx0Kz0ga3ZtLm9cXG4gIDM2OlxcdG9iai0kKENPTkZJR19LVk1fSU5URUwpXFx0Kz0ga3ZtLWludGVsLm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19LVk1fQU1EKVxcdCs9IGt2bS1hbWQub1xcbiAgMzg6XFx0XFxuICAzOTpcXHRBRkxBR1Nfc3ZtL3ZtZW50ZXIubyAgICA6PSAtaXF1b3RlICQob2JqKVxcbiAgNDA6XFx0JChvYmopL3N2bS92bWVudGVyLm86ICQob2JqKS9rdm0tYXNtLW9mZnNldHMuaFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNDozOS41NzQ1OTQ0MTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTg3NzgzODc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0geDg2IEluc3RydWN0aW9uIEVtdWxhdGlvbiBhbmQgUGFnZSBGYXVsdCBIYW5kbGluZzogQSBGdXp6aW5nIE9wcG9ydHVuaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgY2hhbmdlIGluIEtWTSdzIHg4NiBNTVUgYW5kIGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYy4gVGhlIGNvcmUgb2YgaXQgYm9pbHMgZG93biB0byBob3cgR1BBIGNhY2hpbmcgYW5kIHBlcm1pc3Npb24gY2hlY2tzIHdvcmsgZHVyaW5nIGluc3RydWN0aW9uIGVtdWxhdGlvbiwgZXNwZWNpYWxseSB3aGVuIGRpcmVjdCBNTVUgbW9kZXMgbGlrZSBURFAsIE5QVCwgb3IgRVBUIGFyZSBpbiBwbGF5LiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYW4gYXNzdW1wdGlvbiB0aGF0IGEgZmF1bHRlZCBHUEEgY291bGQgYmUgcmUtdXNlZCwgd2l0aG91dCBkaWZmZXJlbnRpYXRpbmcgd2hldGhlciB0aGUgcGFnZSBmYXVsdCB3YXMgYSByZWFkIG9yIGEgd3JpdGUuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG1vcmUgcm9idXN0IG1lY2hhbmlzbSB0byBjb3JyZWN0bHkgaGFuZGxlIHJlYWQvd3JpdGUgcGVybWlzc2lvbnMuXG5cbkVzc2VudGlhbGx5LCBga3ZtX21tdV9wYWdlX2ZhdWx0YCBub3cgc2V0cyBgRU1VTFRZUEVfUEZfV1JJVEVgIGlmIGl0J3MgYSB3cml0ZSBmYXVsdC4gVGhlbiwgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCB0cmFja3MgYWNjZXNzIHR5cGUgKHJlYWQgb3Igd3JpdGUpLiBGaW5hbGx5LCBgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlYCBjaGVja3MgdGhlc2UgYWNjZXNzIHR5cGVzIHRvIGRldGVybWluZSBpZiBhIEdQQSBpcyBzdGlsbCB2YWxpZCBmb3IgcmV1c2UuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHBlcm1pc3Npb24gYnlwYXNzZXMgaWYgZ3Vlc3QgY29kZSBtb2RpZmllcyB0aGUgaW5zdHJ1Y3Rpb24gYmV0d2VlbiB0aGUgZmF1bHQgYW5kIGVtdWxhdGlvbiBvciBpZiBhbiBpbnN0cnVjdGlvbiByZWFkcyBmcm9tIGFuIGFkZHJlc3MgdGhhdCBjYXVzZWQgYSB3cml0ZSBmYXVsdC5cblxuVGhpcyBjaGFuZ2UgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCB0b3VjaGVzIGEgZnVuZGFtZW50YWwgYXNwZWN0IG9mIEtWTSdzIGluc3RydWN0aW9uIGVtdWxhdGlvbiwgd2hpY2ggaXMgaGVhdmlseSB1c2VkIGZvciBNTUlPIGVtdWxhdGlvbiwgaGFuZGxpbmcgd3JpdGUtcHJvdGVjdGVkIHBhZ2VzLCBldGMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBLVk0gaXMgc3RhbmRhcmQgb24geDg2LCBhbmQgZnV6emluZyB3aXRoIHN5emthbGxlciB1c2luZyBgL2Rldi9rdm1gLCBgS1ZNX1JVTmAsIGFuZCBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT05gIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byB0YXJnZXQgdGhpcy5cblxuVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOiBga3ZtX21tdV9wYWdlX2ZhdWx0YCwgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCwgYW5kIGBrdm1fZW11bGF0ZV9pbnN0cnVjdGlvbmAuIFdlIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBLVk1gLCBgS1ZNX0lOVEVMYCwgYW5kIGBLVk1fQU1EYC4gV2UndmUgZG91YmxlLWNoZWNrZWQgdGhlIGRlcGVuZGVuY2llcyBpbiBgS2NvbmZpZ2AsIGFuZCBldmVyeXRoaW5nIGxvb2tzIHNvbGlkLiBXZSBzaG91bGQgYmUgYWJsZSB0byBjb3ZlciBhIHZhcmlldHkgb2YgY29uZmlndXJhdGlvbnMuXG5cblRoZSBib3R0b20gbGluZSBpcyB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBjaGFuZ2Ugd2l0aCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBwcm90ZWN0aW9uLCBtYWtpbmcgaXQgYSBoaWdoLXZhbHVlIGZ1enppbmcgdGFyZ2V0LiBXZSBoYXZlIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLCBjb25maWdzLCBhbmQgdGhlIG1lY2hhbmlzbS4gTGV0J3MgbW92ZSBmb3J3YXJkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3MCwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDQ6NDkuNDUyNDM2OTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDAzNzk3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fbW11X3BhZ2VfZmF1bHRcIixcbiAgICBcIng4Nl9lbXVsYXRlX2luc3RydWN0aW9uXCIsXG4gICAgXCJrdm1fZW11bGF0ZV9pbnN0cnVjdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2VjdXJpdHkvcGVybWlzc2lvbiBjaGVja2luZyBpc3N1ZSBpbiBLVk0geDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBieSB0cmFja2luZyBwZXJtaXR0ZWQgZW11bGF0ZWQgYWNjZXNzZXMgKHJlYWQgdnMgd3JpdGUpIGZvciBjYWNoZWQgR1BBcyByYXRoZXIgdGhhbiByZXVzaW5nIHRoZSBHUEEgdW5jb25kaXRpb25hbGx5LiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgY29yZSBLVk0gcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIG9uIHg4Niwgd2hpY2ggaXMgZnVsbHkgdGVzdGFibGUgYW5kIGZ1enphYmxlIHZpYSBLVk0gaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX21tdV9wYWdlX2ZhdWx0XCIsXG4gICAgXCJ4ODZfZW11bGF0ZV9pbnN0cnVjdGlvblwiLFxuICAgIFwia3ZtX2VtdWxhdGVfaW5zdHJ1Y3Rpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNlY3VyaXR5L3Blcm1pc3Npb24gY2hlY2tpbmcgaXNzdWUgaW4gS1ZNIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gYnkgdHJhY2tpbmcgcGVybWl0dGVkIGVtdWxhdGVkIGFjY2Vzc2VzIChyZWFkIHZzIHdyaXRlKSBmb3IgY2FjaGVkIEdQQXMgcmF0aGVyIHRoYW4gcmV1c2luZyB0aGUgR1BBIHVuY29uZGl0aW9uYWxseS4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGNvcmUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyBvbiB4ODYsIHdoaWNoIGlzIGZ1bGx5IHRlc3RhYmxlIGFuZCBmdXp6YWJsZSB2aWEgS1ZNIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDQ6NDkuNTQ2NDgxNTU4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk4ODA3MTAzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA0OjQ5LjU0NjkxNjIzOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0OTg3NjMyNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0ncyB4ODYgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGxvZ2ljIHRvIHRyYWNrIHBlcm1pdHRlZCBhY2Nlc3MgdHlwZXMgKHJlYWQgdnMgd3JpdGUpIGZvciBjYWNoZWQgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzc2VzIChHUEEpIGR1cmluZyBwYWdlIGZhdWx0IGVtdWxhdGlvbiAocmVwbGFjaW5nIGBib29sIGdwYV9hdmFpbGFibGVgIHdpdGggYHU2NCBncGFfYWNjZXNzYCBpbiBgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHRgKS5cXG5cXG4tIEtNU0FOIEFwcGxpY2FiaWxpdHk6IFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBwYXRocy4gYGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3NgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gMCBpbiBgaW5pdF9lbXVsYXRlX2N0eHQoKWAgYW5kIHByb3Blcmx5IHNldCBpbiBgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oKWAuIFRoZXJlIGFyZSBubyBuZXcgb3IgbW9kaWZpZWQga2VybmVsLXRvLXVzZXIgY29waWVzLCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEgYnVmZmVycy5cXG4tIEtBU0FOIC8gU3RhbmRhcmQgRGV0ZWN0b3JzOiBUaGUgbW9kaWZpY2F0aW9ucyBzb2xlbHkgYWZmZWN0IGludGVybmFsIHBlcm1pc3Npb24gY2hlY2tpbmcgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gS1ZNIE1NSU8vcGFnZSBmYXVsdCBlbXVsYXRpb24uIFN0YW5kYXJkIEtBU0FOL2RlYnVnZ2luZyBrZXJuZWxzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIG1lbW9yeSBzYWZldHkgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgaWYgYW55IGFyaXNlLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzYTQ0Njk2NTBlMWEzODAyYzRlNTA1YmE2YWM2YTUxMTNjYTNmZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwMDowNDoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbmluZGV4IDNlMzc1YWYxNWMwMzUuLjEwODg2YmVhODJjOTEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaFxuKysrIGIvYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmhcbkBAIC0zNTQsOCArMzU0LDggQEAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQge1xuIFx0Ym9vbCBoYXZlX2V4Y2VwdGlvbjtcbiBcdHN0cnVjdCB4ODZfZXhjZXB0aW9uIGV4Y2VwdGlvbjtcbiBcbi1cdC8qIEdQQSBhdmFpbGFibGUgKi9cbi1cdGJvb2wgZ3BhX2F2YWlsYWJsZTtcbitcdC8qIFNhdmVkIEdQQSBhbmQgcGVybWl0dGVkIGVtdWxhdGVkIGFjY2Vzc2VzLiAqL1xuK1x0dTY0IGdwYV9hY2Nlc3M7XG4gXHRncGFfdCBncGFfdmFsO1xuIFxuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuaW5kZXggMDY0ZWNjMzNiOTI2Ny4uOTViOWVhYzk5NjJhOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbisrKyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbkBAIC02NjMyLDYgKzY2MzIsOSBAQCBpbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVyclxuIFx0XHRyZXR1cm4gcjtcbiBcbiBlbXVsYXRlOlxuK1x0aWYgKGRpcmVjdCBcdTAwMjZcdTAwMjYgKGVycm9yX2NvZGUgXHUwMDI2IFBGRVJSX1dSSVRFX01BU0spKVxuK1x0XHRlbXVsYXRpb25fdHlwZSB8PSBFTVVMVFlQRV9QRl9XUklURTtcbitcbiBcdHJldHVybiB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbih2Y3B1LCBjcjJfb3JfZ3BhLCBlbXVsYXRpb25fdHlwZSwgaW5zbixcbiBcdFx0XHRcdCAgICAgICBpbnNuX2xlbik7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggNzk0NjhkZGZlNDczNi4uYWE1ZGViN2M3M2FhMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNTA4OCw4ICs1MDg4LDEzIEBAIHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxuIFx0ICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmdcbiBcdCAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRlxuIFx0ICogb2NjdXJyZWQuXG4rXHQgKlxuK1x0ICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlXG4rXHQgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIHdyaXRlIGFjY2VzcztcbitcdCAqIG90aGVyd2lzZSwgcmVjaGVjayBwZXJtaXNzaW9ucyBmb3IgdGhlIGRlY29kZWQgYWNjZXNzLlxuIFx0ICovXG4tXHRpZiAoY3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlIFx1MDAyNlx1MDAyNiBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbitcdGlmICgoY3R4dC1cdTAwM2VncGFfYWNjZXNzIFx1MDAyNiAod3JpdGUgPyBBQ0NfV1JJVEVfTUFTSyA6IEFDQ19SRUFEX01BU0spKSBcdTAwMjZcdTAwMjZcbitcdCAgICBlbXVsYXRvcl9jYW5fdXNlX2dwYShjdHh0KSBcdTAwMjZcdTAwMjZcbiBcdCAgICAoYWRkciBcdTAwMjYgflBBR0VfTUFTSykgPT0gKGN0eHQtXHUwMDNlZ3BhX3ZhbCBcdTAwMjYgflBBR0VfTUFTSykpIHtcbiBcdFx0Z3BhID0gY3R4dC1cdTAwM2VncGFfdmFsO1xuIFx0XHRyZXQgPSB2Y3B1X2lzX21taW9fZ3BhKHZjcHUsIGFkZHIsIGdwYSwgd3JpdGUpO1xuQEAgLTU5MzgsNyArNTk0Myw3IEBAIHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcdGt2bV94ODZfY2FsbChnZXRfY3NfZGJfbF9iaXRzKSh2Y3B1LCBcdTAwMjZjc19kYiwgXHUwMDI2Y3NfbCk7XG4gXG4tXHRjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGUgPSBmYWxzZTtcbitcdGN0eHQtXHUwMDNlZ3BhX2FjY2VzcyA9IDA7XG4gXHRjdHh0LVx1MDAzZWVmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpO1xuIFx0Y3R4dC1cdTAwM2V0ZiA9IChjdHh0LVx1MDAzZWVmbGFncyBcdTAwMjYgWDg2X0VGTEFHU19URikgIT0gMDtcbiBcbkBAIC02NDU0LDcgKzY0NTksMTAgQEAgaW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcbiBcbiBcdFx0LyogV2l0aCBzaGFkb3cgcGFnZSB0YWJsZXMsIGNyMiBjb250YWlucyBhIEdWQSBvciBuR1BBLiAqL1xuIFx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLm1tdS1cdTAwM2Vyb290X3JvbGUuZGlyZWN0KSB7XG4tXHRcdFx0Y3R4dC1cdTAwM2VncGFfYXZhaWxhYmxlID0gdHJ1ZTtcbitcdFx0XHQvKiBBIHdyaXRlIGZhdWx0IGNhbiByZXF1aXJlIGEgcmVhZCBmb3IgUk1XIGVtdWxhdGlvbi4gKi9cbitcdFx0XHRjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgPSBBQ0NfUkVBRF9NQVNLO1xuK1x0XHRcdGlmIChlbXVsYXRpb25fdHlwZSBcdTAwMjYgRU1VTFRZUEVfUEZfV1JJVEUpXG4rXHRcdFx0XHRjdHh0LVx1MDAzZWdwYV9hY2Nlc3MgfD0gQUNDX1dSSVRFX01BU0s7XG4gXHRcdFx0Y3R4dC1cdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcbmluZGV4IDBmNTkxOWIwOTJlNDcuLjY2NzQ2NTY4MGNjZGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmhcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuaFxuQEAgLTQwNyw2ICs0MDcsOCBAQCBpbnQgeDg2X2VtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLFxuICAqIEVNVUxUWVBFX1BGIC0gU2V0IHdoZW4gYW4gaW50ZXJjZXB0ZWQgI1BGIHRyaWdnZXJzIHRoZSBlbXVsYXRpb24sIGluIHdoaWNoIGNhc2VcbiAgKlx0XHQgdGhlIENSMi9HUEEgdmFsdWUgcGFzcyBvbiB0aGUgc3RhY2sgaXMgdmFsaWQuXG4gICpcbisgKiBFTVVMVFlQRV9QRl9XUklURSAtIFNldCB3aXRoIEVNVUxUWVBFX1BGIHdoZW4gaGFyZHdhcmUgcmVwb3J0cyBhIHdyaXRlIGFjY2Vzcy5cbisgKlxuICAqIEVNVUxUWVBFX0NPTVBMRVRFX1VTRVJfRVhJVCAtIFNldCB3aGVuIHRoZSBlbXVsYXRvciBzaG91bGQgdXBkYXRlIGludGVycnVwdGliaWxpdHlcbiAgKlx0XHRcdFx0IHN0YXRlIGFuZCBpbmplY3Qgc2luZ2xlLXN0ZXAgI0RCcyBhZnRlciBza2lwcGluZ1xuICAqXHRcdFx0XHQgYW4gaW5zdHJ1Y3Rpb24gKGFmdGVyIGNvbXBsZXRpbmcgdXNlcnNwYWNlIEkvTykuXG5AQCAtNDQ1LDYgKzQ0Nyw3IEBAIGludCB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGNyMl9vcl9ncGEsXG4gI2RlZmluZSBFTVVMVFlQRV9DT01QTEVURV9VU0VSX0VYSVQgKDEgXHUwMDNjXHUwMDNjIDcpXG4gI2RlZmluZSBFTVVMVFlQRV9XUklURV9QRl9UT19TUFx0ICAgICgxIFx1MDAzY1x1MDAzYyA4KVxuICNkZWZpbmUgRU1VTFRZUEVfU0tJUF9TT0ZUX0lOVFx0ICAgICgxIFx1MDAzY1x1MDAzYyA5KVxuKyNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEVcdCAgICAoMSBcdTAwM2NcdTAwM2MgMTApXG4gXG4gI2RlZmluZSBFTVVMVFlQRV9TRVRfU09GVF9JTlRfVkVDVE9SKHYpXHQoKHUzMikoKHYpIFx1MDAyNiAweGZmKSBcdTAwM2NcdTAwM2MgMTYpXG4gI2RlZmluZSBFTVVMVFlQRV9HRVRfU09GVF9JTlRfVkVDVE9SKGUpXHQoKChlKSBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweGZmKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDQ6NDkuNTQ2OTE3MTg4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5Njc3NjE2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gYnJpbmcgaW4gS01TQU4gdG8gcHJvdGVjdCBhZ2FpbnN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyBwaWVjZSBieSBwaWVjZS5cblxuKiAgIFN0YXJ0aW5nIHdpdGggYGFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oYCwgdGhleSd2ZSBzd2FwcGVkIGBncGFfYXZhaWxhYmxlYCAoYSBib29sZWFuKSBmb3IgYGdwYV9hY2Nlc3NgIChhIGB1NjRgKSB3aXRoaW4gdGhlIGB4ODZfZW11bGF0ZV9jdHh0YCBzdHJ1Y3R1cmUuIFRoYXQncyBhIHNpZ25pZmljYW50IHR5cGUgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBncGFfYWNjZXNzYCByZXByZXNlbnRzIG5vdy4gSXMgdGhpcyBhIGJyb2FkZXIgYWNjZXNzIGNvbnRyb2wgZmllbGQ/XG5cbiogICBOZXh0LCBgYXJjaC94ODYva3ZtL21tdS9tbXUuY2AgaW50cm9kdWNlcyBgRU1VTFRZUEVfUEZfV1JJVEVgIGZsYWcgaW4gdGhlIGBrdm1fbW11X3BhZ2VfZmF1bHRgIGZ1bmN0aW9uLCBpZiBpdCdzIGEgZGlyZWN0IE1NVSBhY2Nlc3MuIFRoaXMgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IHdyaXRlIGZhdWx0cyBhcmUgaGFuZGxlZC5cblxuKiAgIE5vdywgYGFyY2gveDg2L2t2bS94ODYuY2AgY29udGFpbnMgdGhlIG1vcmUgaW50ZXJlc3RpbmcgbW9kaWZpY2F0aW9ucy4gVGhlIGNoZWNrIGBjdHh0LVx1MDAzZWdwYV9hdmFpbGFibGVgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYGN0eHQtXHUwMDNlZ3BhX2FjY2Vzc2AgdXNpbmcgYEFDQ19XUklURV9NQVNLYCBhbmQgYEFDQ19SRUFEX01BU0tgLiBJdCBzZWVtcyBsaWtlIGBncGFfYWNjZXNzYCBpcyBub3cgYWN0aW5nIGFzIGEgYml0bWFzayBpbmRpY2F0aW5nIGFjY2VzcyBwZXJtaXNzaW9ucy4gVGhlIGluaXRpYWxpemF0aW9uIGlzIGFsc28gY2hhbmdlZCwgc2V0dGluZyBgY3R4dC1cdTAwM2VncGFfYWNjZXNzID0gMGAgYW5kIHRoZW4gc3Vic2VxdWVudGx5IHNldHRpbmcgYEFDQ19SRUFEX01BU0tgIGFuZC9vciBgQUNDX1dSSVRFX01BU0tgIGJhc2VkIG9uIHRoZSBlbXVsYXRpb24gdHlwZS4gVGhpcyBpcyBjcnVjaWFsOyBpZiB0aGVzZSBiaXRtYXNrcyBhcmVuJ3QgY29ycmVjdGx5IGluaXRpYWxpemVkICpiZWZvcmUqIHVzYWdlLCB3ZSBoYXZlIGEgcHJvYmxlbS4gU3BlY2lmaWNhbGx5LCB0aGUgc2V0dGluZyBvZiBgY3R4dC1cdTAwM2VncGFfYWNjZXNzYCB3aXRoaW4gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCBsb29rcyBsaWtlIGEga2V5IHBvaW50IHRvIHJldmlldy4gSXMgaXQgYWx3YXlzIHNldCBjb3JyZWN0bHk/XG5cbiogICBGaW5hbGx5LCB0aGUgYWRkaXRpb24gb2YgYCNkZWZpbmUgRU1VTFRZUEVfUEZfV1JJVEVgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmhgIGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYSBuZXcgZmxhZyBiZWluZyBkZWZpbmVkLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIGNvbmZpcm1pbmcgdGhhdCBgZ3BhX2FjY2Vzc2AgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQgdG8gYSBkZWZpbmVkIHZhbHVlIGJlZm9yZSBpdCdzIHJlYWQgYW5kIHRoYXQgZXZlcnkgcG9zc2libGUgY29kZSBwYXRoIGNvcnJlY3RseSBzZXRzIHRoZSBhcHByb3ByaWF0ZSBiaXRzIHdpdGhpbiB0aGF0IG1hc2suIFRoZSBtb3ZlIGZyb20gYSBzaW1wbGUgYm9vbGVhbiB0byBhIGJpdG1hc2sgKmluY3JlYXNlcyogdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGVycm9ycy5cblxuSSdtIGdvaW5nIHRvIGNvbmR1Y3QgYSBzZWFyY2ggZm9yIHVzZXMgb2YgYHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0YC4gTXkgZ29hbCBpcyB0byBleGhhdXN0aXZlbHkgY2hlY2sgZm9yOlxuXG4xLiAgQWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gcG9pbnRzLlxuMi4gIEFueSByZWFkcyBvciB3cml0ZXMgb2YgYGdwYV9hY2Nlc3NgICpiZWZvcmUqIGl0J3MgZXhwbGljaXRseSBpbml0aWFsaXplZC5cbjMuICBBbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgcGFydGljdWxhcmx5IGluIGNhc2VzIHdoZXJlIGBncGFfYWNjZXNzYCBjb3VsZCBiZSByZWFkIHdpdGhvdXQgdGhlIGFwcHJvcHJpYXRlIGZsYWdzIGJlaW5nIHNldC5cblxuV2l0aCBteSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIEtWTSBhcmNoaXRlY3R1cmUsIEkgYW0gYWJsZSB0byBsb2NhdGUgdGhlc2UgcG90ZW50aWFsIHNwb3RzIG9mIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNDo1Ny41MTQ2ODE3MTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDY3ODIzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3BhX2FjY2Vzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaD0zMzg9c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQge1xcbi0tXFxuYXJjaC94ODYva3ZtL2t2bV9lbXVsYXRlLmgtMzU3LVxcdC8qIFNhdmVkIEdQQSBhbmQgcGVybWl0dGVkIGVtdWxhdGVkIGFjY2Vzc2VzLiAqL1xcbmFyY2gveDg2L2t2bS9rdm1fZW11bGF0ZS5oOjM1ODpcXHR1NjQgZ3BhX2FjY2VzcztcXG5hcmNoL3g4Ni9rdm0va3ZtX2VtdWxhdGUuaC0zNTktXFx0Z3BhX3QgZ3BhX3ZhbDtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01MDczPXN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTUwOTUtXFx0ICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjUwOTY6XFx0aWYgKChjdHh0LVxcdTAwM2VncGFfYWNjZXNzIFxcdTAwMjYgKHdyaXRlID8gQUNDX1dSSVRFX01BU0sgOiBBQ0NfUkVBRF9NQVNLKSkgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNTA5Ny1cXHQgICAgZW11bGF0b3JfY2FuX3VzZV9ncGEoY3R4dCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz01OTM5PXN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy01OTQ1LVxcbmFyY2gveDg2L2t2bS94ODYuYzo1OTQ2OlxcdGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3MgPSAwO1xcbmFyY2gveDg2L2t2bS94ODYuYy01OTQ3LVxcdGN0eHQtXFx1MDAzZWVmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTYzMzU9aW50IHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02NDYyLVxcdFxcdFxcdC8qIEEgd3JpdGUgZmF1bHQgY2FuIHJlcXVpcmUgYSByZWFkIGZvciBSTVcgZW11bGF0aW9uLiAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzo2NDYzOlxcdFxcdFxcdGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3MgPSBBQ0NfUkVBRF9NQVNLO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NDY0LVxcdFxcdFxcdGlmIChlbXVsYXRpb25fdHlwZSBcXHUwMDI2IEVNVUxUWVBFX1BGX1dSSVRFKVxcbmFyY2gveDg2L2t2bS94ODYuYzo2NDY1OlxcdFxcdFxcdFxcdGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3MgfD0gQUNDX1dSSVRFX01BU0s7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTY0NjYtXFx0XFx0XFx0Y3R4dC1cXHUwMDNlZ3BhX3ZhbCA9IGNyMl9vcl9ncGE7XFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oPTI5Mz1pbnQgaHZfY2FsbF9jbGVhcl92aXJ0dWFsX2ludGVycnVwdCh1NjQgcGFydGl0aW9uX2lkKTtcXG5kcml2ZXJzL2h2L21zaHZfcm9vdC5oOjI5NDppbnQgaHZfY2FsbF9nZXRfZ3BhX2FjY2Vzc19zdGF0ZXModTY0IHBhcnRpdGlvbl9pZCwgdTMyIGNvdW50LCB1NjQgZ3BhX2Jhc2VfcGZuLFxcbmRyaXZlcnMvaHYvbXNodl9yb290LmgtMjk1LVxcdFxcdFxcdFxcdCAgdW5pb24gaHZfZ3BhX3BhZ2VfYWNjZXNzX3N0YXRlX2ZsYWdzIHN0YXRlX2ZsYWdzLFxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfaHZfY2FsbC5jPTI5OD1pbnQgaHZfY2FsbF91bm1hcF9ncGFfcGFnZXModTY0IHBhcnRpdGlvbl9pZCwgdTY0IGdmbiwgdTY0IHBhZ2VfY291bnRfNGssXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtMzQyLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X2h2X2NhbGwuYzozNDM6aW50IGh2X2NhbGxfZ2V0X2dwYV9hY2Nlc3Nfc3RhdGVzKHU2NCBwYXJ0aXRpb25faWQsIHUzMiBjb3VudCwgdTY0IGdwYV9iYXNlX3BmbixcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9odl9jYWxsLmMtMzQ0LVxcdFxcdFxcdFxcdCAgdW5pb24gaHZfZ3BhX3BhZ2VfYWNjZXNzX3N0YXRlX2ZsYWdzIHN0YXRlX2ZsYWdzLFxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Jvb3RfbWFpbi5jPTE1MTA9bXNodl9wYXJ0aXRpb25faW9jdGxfZ2V0X2dwYXBfYWNjZXNzX2JpdG1hcChzdHJ1Y3QgbXNodl9wYXJ0aXRpb24gKnBhcnRpdGlvbixcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYy0xNTY2LVxcbmRyaXZlcnMvaHYvbXNodl9yb290X21haW4uYzoxNTY3OlxcdHJldCA9IGh2X2NhbGxfZ2V0X2dwYV9hY2Nlc3Nfc3RhdGVzKHBhcnRpdGlvbi1cXHUwMDNlcHRfaWQsIGFyZ3MucGFnZV9jb3VudCxcXG5kcml2ZXJzL2h2L21zaHZfcm9vdF9tYWluLmMtMTU2OC1cXHRcXHRcXHRcXHRcXHQgICAgYXJncy5ncGFwX2Jhc2UsIGh2X2ZsYWdzLCBcXHUwMDI2d3JpdHRlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDQ6NTkuMDYxNDY4MzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU0MTQ5MzU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB4ODYgRW11bGF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29yZSBlbXVsYXRpb24gbG9naWMgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJJ20gZm9jdXNpbmcgb24gYGluaXRfZW11bGF0ZV9jdHh0YCBhbmQgYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uYCDigJMgdGhlc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50cy4gSSBrbm93IHRoZXkncmUgcHJvYmFibHkgbG9jYXRlZCB3aXRoaW4gYGFyY2gveDg2L2t2bS94ODYuY2AsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0LiBJdCdzIGJlc3QgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgbGluZXMgb2YgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIHByb2Nlc3Nlcy4gU2VlaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmbG93LiBMZXQncyBzZWUgaG93IHRoZXkgd29yayB0b2dldGhlciB0byBhY2hpZXZlIGFjY3VyYXRlIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNTowMi42MDI5NjQ2MjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1OTM1OlxcdFxcbjU5MzY6XFx0XFx0cmV0dXJuIGN0eHQ7XFxuNTkzNzpcXHR9XFxuNTkzODpcXHRcXG41OTM5OlxcdHN0YXRpYyB2b2lkIGluaXRfZW11bGF0ZV9jdHh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG41OTQwOlxcdHtcXG41OTQxOlxcdFxcdHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0ID0gdmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQ7XFxuNTk0MjpcXHRcXHRpbnQgY3NfZGIsIGNzX2w7XFxuNTk0MzpcXHRcXG41OTQ0OlxcdFxcdGt2bV94ODZfY2FsbChnZXRfY3NfZGJfbF9iaXRzKSh2Y3B1LCBcXHUwMDI2Y3NfZGIsIFxcdTAwMjZjc19sKTtcXG41OTQ1OlxcdFxcbjU5NDY6XFx0XFx0Y3R4dC1cXHUwMDNlZ3BhX2FjY2VzcyA9IDA7XFxuNTk0NzpcXHRcXHRjdHh0LVxcdTAwM2VlZmxhZ3MgPSBrdm1fZ2V0X3JmbGFncyh2Y3B1KTtcXG41OTQ4OlxcdFxcdGN0eHQtXFx1MDAzZXRmID0gKGN0eHQtXFx1MDAzZWVmbGFncyBcXHUwMDI2IFg4Nl9FRkxBR1NfVEYpICE9IDA7XFxuNTk0OTpcXHRcXG41OTUwOlxcdFxcdGN0eHQtXFx1MDAzZWVpcCA9IGt2bV9yaXBfcmVhZCh2Y3B1KTtcXG41OTUxOlxcdFxcdGN0eHQtXFx1MDAzZW1vZGUgPSAoIWlzX3Byb3Rtb2RlKHZjcHUpKVxcdFxcdD8gWDg2RU1VTF9NT0RFX1JFQUwgOlxcbjU5NTI6XFx0XFx0XFx0ICAgICAoY3R4dC1cXHUwMDNlZWZsYWdzIFxcdTAwMjYgWDg2X0VGTEFHU19WTSlcXHQ/IFg4NkVNVUxfTU9ERV9WTTg2IDpcXG41OTUzOlxcdFxcdFxcdCAgICAgKGNzX2wgXFx1MDAyNlxcdTAwMjYgaXNfbG9uZ19tb2RlKHZjcHUpKVxcdD8gWDg2RU1VTF9NT0RFX1BST1Q2NCA6XFxuNTk1NDpcXHRcXHRcXHQgICAgIGNzX2RiXFx0XFx0XFx0XFx0PyBYODZFTVVMX01PREVfUFJPVDMyIDpcXG41OTU1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgWDg2RU1VTF9NT0RFX1BST1QxNjtcXG41OTU2OlxcdFxcdGN0eHQtXFx1MDAzZWludGVycnVwdGliaWxpdHkgPSAwO1xcbjU5NTc6XFx0XFx0Y3R4dC1cXHUwMDNlaGF2ZV9leGNlcHRpb24gPSBmYWxzZTtcXG41OTU4OlxcdFxcdGN0eHQtXFx1MDAzZWV4Y2VwdGlvbi52ZWN0b3IgPSAtMTtcXG41OTU5OlxcdFxcdGN0eHQtXFx1MDAzZWV4Y2VwdGlvbi5wYXlsb2FkID0gMDtcXG41OTYwOlxcdFxcdGN0eHQtXFx1MDAzZXBlcm1fb2sgPSBmYWxzZTtcXG41OTYxOlxcdFxcbjU5NjI6XFx0XFx0aW5pdF9kZWNvZGVfY2FjaGUoY3R4dCk7XFxuNTk2MzpcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfZnJvbV92Y3B1ID0gZmFsc2U7XFxuNTk2NDpcXHR9XFxuNTk2NTpcXHRcXG41OTY2OlxcdHZvaWQga3ZtX2luamVjdF9yZWFsbW9kZV9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgaXJxLCBpbnQgaW5jX2VpcClcXG41OTY3OlxcdHtcXG41OTY4OlxcdFxcdHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0ID0gdmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQ7XFxuNTk2OTpcXHRcXHRpbnQgcmV0O1xcbjU5NzA6XFx0XFxuNTk3MTpcXHRcXHRpbml0X2VtdWxhdGVfY3R4dCh2Y3B1KTtcXG41OTcyOlxcdFxcbjU5NzM6XFx0XFx0Y3R4dC1cXHUwMDNlb3BfYnl0ZXMgPSAyO1xcbjU5NzQ6XFx0XFx0Y3R4dC1cXHUwMDNlYWRfYnl0ZXMgPSAyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNTowMi42MDM1MTk3MzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTY1MjI4NTI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIG9uIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAsIGFuZCBteSBndXQgdGVsbHMgbWUgdGhlIHN3ZWV0IHNwb3QgaXMgc29tZXdoZXJlIGFyb3VuZCBsaW5lcyA2NDQwIHRvIDY0ODAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhhdCBhcmVhLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gb3IgYSBncm91cCBvZiByZWxhdGVkIGluc3RydWN0aW9ucyB0aGF0IEknbSBpbnRlcmVzdGVkIGluIGFuYWx5emluZy4gVGhpcyByYW5nZSBwcm92aWRlcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUgd2hhdGV2ZXIgSSBoYXZlIGluIG1pbmQuIEkgaG9wZSB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzQyLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNTowNC4yNTU4MDgxNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY0NDA6XFx0XFx0ICogYW5kIHJldHJ5IHRoZSBpbnN0cnVjdGlvbiwgYXMgdGhlIHZDUFUgaXMgbGlrZWx5IG5vIGxvbmdlciB1c2luZyB0aGVcXG42NDQxOlxcdFxcdCAqIGdmbiBhcyBhIHBhZ2UgdGFibGUuXFxuNjQ0MjpcXHRcXHQgKi9cXG42NDQzOlxcdFxcdGlmICgoZW11bGF0aW9uX3R5cGUgXFx1MDAyNiBFTVVMVFlQRV9BTExPV19SRVRSWV9QRikgXFx1MDAyNlxcdTAwMjZcXG42NDQ0OlxcdFxcdCAgICAheDg2X3BhZ2VfdGFibGVfd3JpdGluZ19pbnNuKGN0eHQpIFxcdTAwMjZcXHUwMDI2XFxuNjQ0NTpcXHRcXHQgICAga3ZtX21tdV91bnByb3RlY3RfZ2ZuX2FuZF9yZXRyeSh2Y3B1LCBjcjJfb3JfZ3BhKSlcXG42NDQ2OlxcdFxcdFxcdHJldHVybiAxO1xcbjY0NDc6XFx0XFxuNjQ0ODpcXHRcXHQvKiB0aGlzIGlzIG5lZWRlZCBmb3Igdm13YXJlIGJhY2tkb29yIGludGVyZmFjZSB0byB3b3JrIHNpbmNlIGl0XFxuNjQ0OTpcXHRcXHQgICBjaGFuZ2VzIHJlZ2lzdGVycyB2YWx1ZXMgIGR1cmluZyBJTyBvcGVyYXRpb24gKi9cXG42NDUwOlxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfZnJvbV92Y3B1KSB7XFxuNjQ1MTpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmVtdWxhdGVfcmVnc19uZWVkX3N5bmNfZnJvbV92Y3B1ID0gZmFsc2U7XFxuNjQ1MjpcXHRcXHRcXHRlbXVsYXRvcl9pbnZhbGlkYXRlX3JlZ2lzdGVyX2NhY2hlKGN0eHQpO1xcbjY0NTM6XFx0XFx0fVxcbjY0NTQ6XFx0XFxuNjQ1NTpcXHRyZXN0YXJ0OlxcbjY0NTY6XFx0XFx0aWYgKGVtdWxhdGlvbl90eXBlIFxcdTAwMjYgRU1VTFRZUEVfUEYpIHtcXG42NDU3OlxcdFxcdFxcdC8qIFNhdmUgdGhlIGZhdWx0aW5nIEdQQSAoY3IyKSBpbiB0aGUgYWRkcmVzcyBmaWVsZCAqL1xcbjY0NTg6XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZXhjZXB0aW9uLmFkZHJlc3MgPSBjcjJfb3JfZ3BhO1xcbjY0NTk6XFx0XFxuNjQ2MDpcXHRcXHRcXHQvKiBXaXRoIHNoYWRvdyBwYWdlIHRhYmxlcywgY3IyIGNvbnRhaW5zIGEgR1ZBIG9yIG5HUEEuICovXFxuNjQ2MTpcXHRcXHRcXHRpZiAodmNwdS1cXHUwMDNlYXJjaC5tbXUtXFx1MDAzZXJvb3Rfcm9sZS5kaXJlY3QpIHtcXG42NDYyOlxcdFxcdFxcdFxcdC8qIEEgd3JpdGUgZmF1bHQgY2FuIHJlcXVpcmUgYSByZWFkIGZvciBSTVcgZW11bGF0aW9uLiAqL1xcbjY0NjM6XFx0XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZ3BhX2FjY2VzcyA9IEFDQ19SRUFEX01BU0s7XFxuNjQ2NDpcXHRcXHRcXHRcXHRpZiAoZW11bGF0aW9uX3R5cGUgXFx1MDAyNiBFTVVMVFlQRV9QRl9XUklURSlcXG42NDY1OlxcdFxcdFxcdFxcdFxcdGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3MgfD0gQUNDX1dSSVRFX01BU0s7XFxuNjQ2NjpcXHRcXHRcXHRcXHRjdHh0LVxcdTAwM2VncGFfdmFsID0gY3IyX29yX2dwYTtcXG42NDY3OlxcdFxcdFxcdH1cXG42NDY4OlxcdFxcdH0gZWxzZSB7XFxuNjQ2OTpcXHRcXHRcXHQvKiBTYW5pdGl6ZSB0aGUgYWRkcmVzcyBvdXQgb2YgYW4gYWJ1bmRhbmNlIG9mIHBhcmFub2lhLiAqL1xcbjY0NzA6XFx0XFx0XFx0Y3R4dC1cXHUwMDNlZXhjZXB0aW9uLmFkZHJlc3MgPSAwO1xcbjY0NzE6XFx0XFx0fVxcbjY0NzI6XFx0XFxuNjQ3MzpcXHRcXHQvKlxcbjY0NzQ6XFx0XFx0ICogQ2hlY2sgTDEncyBpbnN0cnVjdGlvbiBpbnRlcmNlcHRzIHdoZW4gZW11bGF0aW5nIGluc3RydWN0aW9ucyBmb3JcXG42NDc1OlxcdFxcdCAqIEwyLCB1bmxlc3MgS1ZNIGlzIHJlLWVtdWxhdGluZyBhIHByZXZpb3VzbHkgZGVjb2RlZCBpbnN0cnVjdGlvbixcXG42NDc2OlxcdFxcdCAqIGUuZy4gdG8gY29tcGxldGUgdXNlcnNwYWNlIEkvTywgaW4gd2hpY2ggY2FzZSBLVk0gaGFzIGFscmVhZHlcXG42NDc3OlxcdFxcdCAqIGNoZWNrZWQgdGhlIGludGVyY2VwdHMuXFxuNjQ3ODpcXHRcXHQgKi9cXG42NDc5OlxcdFxcdHIgPSB4ODZfZW11bGF0ZV9pbnNuKGN0eHQsIGlzX2d1ZXN0X21vZGUodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDU6MDQuMjU2Mzc2NjhaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI1MjczMjA0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEVtdWxhdG9yIE1lbW9yeSBBY2Nlc3MgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBlbXVsYXRvcidzIG1lbW9yeSBhY2Nlc3MgbWVjaGFuaXNtcy4gTXkgcHJpbWFyeSBmb2N1cyByaWdodCBub3cgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgdGhlIGVtdWxhdG9yIGhhbmRsZXMgdGhlIGJhc2ljIG9wZXJhdGlvbnMgb2YgcmVhZGluZyBhbmQgd3JpdGluZyBhIHNpbmdsZSBwYWdlIG9mIG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGZ1bmN0aW9uIGBlbXVsYXRvcl9yZWFkX3dyaXRlX29uZXBhZ2VgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBsb2dpYywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSwgYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgaW1wbGljYXRpb25zIGl0IG1pZ2h0IGhhdmUuXG5cbkZ1cnRoZXJtb3JlLCBpdCdzIGNydWNpYWwgdGhhdCBJIGZpZ3VyZSBvdXQgd2hlbiBhbmQgaG93IHRoZSBlbXVsYXRvciBkZXRlcm1pbmVzIGlmIGl0J3MgKmFsbG93ZWQqIHRvIHVzZSBhIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgKEdQQSkuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gY2hlY2sgb3V0IGBlbXVsYXRvcl9jYW5fdXNlX2dwYWAuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbiBpcyBrZXkgdG8gdGhlIG92ZXJhbGwgbWVtb3J5IHRyYW5zbGF0aW9uIGFuZCBwcm90ZWN0aW9uIHN0cmF0ZWd5LiBJIG5lZWQgdG8ga25vdyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgZW11bGF0b3IgZGVlbXMgYSBHUEEgdmFsaWQgZm9yIGRpcmVjdCBhY2Nlc3MuIEFyZSB0aGVyZSBjaGVja3MgZm9yIHBlcm1pc3Npb25zLCBhZGRyZXNzIHJhbmdlIHZhbGlkYXRpb24sIG9yIG90aGVyIHNlY3VyaXR5IG1lYXN1cmVzIGluIHBsYWNlPyBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZSBlbXVsYXRvcidzIHJvYnVzdG5lc3MgYW5kIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGFsc28gcmVsYXRlcyB0byBob3cgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgaXMgdWx0aW1hdGVseSB0cmFuc2xhdGVkIHRvIGEgaG9zdCBwaHlzaWNhbCBhZGRyZXNzLCBvciB3aGV0aGVyIHZpcnR1YWxpemF0aW9uIG9yIGVtdWxhdGlvbiBpcyByZXF1aXJlZCBhdCBhbGwuIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRob3NlIGtleSBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDAwOjA1OjA3LjUwOTExMTM5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzMxNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3g4Ni5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUwNzA6XFx0XFx0cmV0dXJuIDE7XFxuNTA3MTpcXHR9XFxuNTA3MjpcXHRcXG41MDczOlxcdHN0YXRpYyBpbnQgZW11bGF0b3JfcmVhZF93cml0ZV9vbmVwYWdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLFxcbjUwNzQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBieXRlcyxcXG41MDc1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgeDg2X2V4Y2VwdGlvbiAqZXhjZXB0aW9uLFxcbjUwNzY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG41MDc3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgcmVhZF93cml0ZV9lbXVsYXRvcl9vcHMgKm9wcylcXG41MDc4OlxcdHtcXG41MDc5OlxcdFxcdGdwYV90IGdwYTtcXG41MDgwOlxcdFxcdGludCBoYW5kbGVkLCByZXQ7XFxuNTA4MTpcXHRcXHRib29sIHdyaXRlID0gb3BzLVxcdTAwM2V3cml0ZTtcXG41MDgyOlxcdFxcdHN0cnVjdCBrdm1fbW1pb19mcmFnbWVudCAqZnJhZztcXG41MDgzOlxcdFxcdHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0ID0gdmNwdS1cXHUwMDNlYXJjaC5lbXVsYXRlX2N0eHQ7XFxuNTA4NDpcXHRcXG41MDg1OlxcdFxcdC8qXFxuNTA4NjpcXHRcXHQgKiBJZiB0aGUgZXhpdCB3YXMgZHVlIHRvIGEgTlBGIHdlIG1heSBhbHJlYWR5IGhhdmUgYSBHUEEuXFxuNTA4NzpcXHRcXHQgKiBJZiB0aGUgR1BBIGlzIHByZXNlbnQsIHVzZSBpdCB0byBhdm9pZCB0aGUgR1ZBIHRvIEdQQSB0YWJsZSB3YWxrLlxcbjUwODg6XFx0XFx0ICogTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBvbiBzdHJpbmcgb3BlcmF0aW9ucyBzaW5jZSBzdHJpbmdcXG41MDg5OlxcdFxcdCAqIG9wZXJhdGlvbiB1c2luZyByZXAgd2lsbCBvbmx5IGhhdmUgdGhlIGluaXRpYWwgR1BBIGZyb20gdGhlIE5QRlxcbjUwOTA6XFx0XFx0ICogb2NjdXJyZWQuXFxuNTA5MTpcXHRcXHQgKlxcbjUwOTI6XFx0XFx0ICogVGhlIGd1ZXN0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGluc3RydWN0aW9uIHNpbmNlIHRoZSBmYXVsdC4gIFJldXNlXFxuNTA5MzpcXHRcXHQgKiB0aGUgR1BBIGZvciB3cml0ZXMgb25seSBpZiBoYXJkd2FyZSByZXBvcnRlZCBhIHdyaXRlIGFjY2VzcztcXG41MDk0OlxcdFxcdCAqIG90aGVyd2lzZSwgcmVjaGVjayBwZXJtaXNzaW9ucyBmb3IgdGhlIGRlY29kZWQgYWNjZXNzLlxcbjUwOTU6XFx0XFx0ICovXFxuNTA5NjpcXHRcXHRpZiAoKGN0eHQtXFx1MDAzZWdwYV9hY2Nlc3MgXFx1MDAyNiAod3JpdGUgPyBBQ0NfV1JJVEVfTUFTSyA6IEFDQ19SRUFEX01BU0spKSBcXHUwMDI2XFx1MDAyNlxcbjUwOTc6XFx0XFx0ICAgIGVtdWxhdG9yX2Nhbl91c2VfZ3BhKGN0eHQpIFxcdTAwMjZcXHUwMDI2XFxuNTA5ODpcXHRcXHQgICAgKGFkZHIgXFx1MDAyNiB+UEFHRV9NQVNLKSA9PSAoY3R4dC1cXHUwMDNlZ3BhX3ZhbCBcXHUwMDI2IH5QQUdFX01BU0spKSB7XFxuNTA5OTpcXHRcXHRcXHRncGEgPSBjdHh0LVxcdTAwM2VncGFfdmFsO1xcbjUxMDA6XFx0XFx0XFx0cmV0ID0gdmNwdV9pc19tbWlvX2dwYSh2Y3B1LCBhZGRyLCBncGEsIHdyaXRlKTtcXG41MTAxOlxcdFxcdH0gZWxzZSB7XFxuNTEwMjpcXHRcXHRcXHRyZXQgPSB2Y3B1X21taW9fZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyLCBcXHUwMDI2Z3BhLCBleGNlcHRpb24sIHdyaXRlKTtcXG41MTAzOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjUxMDQ6XFx0XFx0XFx0XFx0cmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUO1xcbjUxMDU6XFx0XFx0fVxcbjUxMDY6XFx0XFxuNTEwNzpcXHRcXHQvKlxcbjUxMDg6XFx0XFx0ICogSWYgdGhlIG1lbW9yeSBpcyBub3QgX2tub3duXyB0byBiZSBlbXVsYXRlZCBNTUlPLCBhdHRlbXB0IHRvIGFjY2Vzc1xcbjUxMDk6XFx0XFx0ICogZ3Vlc3QgbWVtb3J5LiAgSWYgYWNjZXNzaW5nIGd1ZXN0IG1lbW9yeSBmYWlscywgZS5nLiBiZWNhdXNlIHRoZXJlJ3NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDA6MDU6MDcuNTA5NjQ2NjQzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwMjQ4ODMyNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFg4NiBFbXVsYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBhIHNwZWNpZmljIGNvcm5lciBjYXNlIHdpdGhpbiBLVk0ncyB4ODYgZW11bGF0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggbmVzdGVkIHBhZ2UgZmF1bHRzIGFuZCB0aGUgZGlyZWN0IE1NVSByb2xlLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGlzOiB0aGUgaGFyZHdhcmUgbWlnaHQgcmVwb3J0IGEgcmVhZCBmYXVsdCwgYnV0IHRoZSBlbXVsYXRlZCBpbnN0cnVjdGlvbiBtaWdodCBhY3R1YWxseSBiZSBhIHdyaXRlIChvciB2aWNlIHZlcnNhKS4gU2ltcGx5IHJldXNpbmcgdGhlIEdsb2JhbCBQaHlzaWNhbCBBZGRyZXNzIChHUEEpIHJlcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSB3aXRob3V0IGEgcGVybWlzc2lvbiBjaGVjayBpbiB0aGVzZSBzY2VuYXJpb3MgY291bGQgbGVhZCB0byBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIGxpa2Ugd3JpdGluZyB0byBhIHJlYWQtb25seSBwYWdlIG9yIGJ5cGFzc2luZyBhY2Nlc3MgY29udHJvbHMuXG5cblRoZSBwYXRjaCdzIHNvbHV0aW9uIHJlcGxhY2VzIGBncGFfYXZhaWxhYmxlYCAocHJlc3VtYWJseSBhIGJvb2xlYW4gaW5kaWNhdGluZyBHUEEgdmFsaWRpdHkpIHdpdGggYGdwYV9hY2Nlc3NgLCBhIGZpZWxkIHRoYXQgdHJhY2tzIHdoZXRoZXIgcmVhZCAqb3IqIHdyaXRlIGFjY2VzcyBpcyBhbGxvd2VkIGZvciB0aGF0IGNhY2hlZCBHUEEuIFRoaXMgaW50cm9kdWNlcyBhIHN0cmljdGVyIGFjY2VzcyBjb250cm9sLlxuXG5Ob3csIG15IGNvbmNlcm5zIGFzIGEgc2VjdXJpdHktbWluZGVkIGV4cGVydCBpbW1lZGlhdGVseSBnbyB0byBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgbmV3IHJpc2tzIGluIHRoYXQgYXJlYS4gU28sIGxldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDpcblxuMS4gICoqS2VybmVsLXRvLVVzZXIgQ29weT8qKiBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBwYXRjaCBkb2Vzbid0IHRvdWNoIGFueSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgc29ja2V0IG9wdGlvbnMsIG5ldGxpbmsgYXR0cmlidXRlcywgb3IgYW55IG9mIHRob3NlIGFyZWFzIHRoYXQgYXJlIG9mdGVuIGEgc291cmNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcy4gVGhpcyBpcyBzdHJpY3RseSBpbnRlcm5hbCBLVk0gZW11bGF0aW9uIGxvZ2ljLlxuXG4yLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlIEJyYW5jaGluZz8qKiBOby4gVGhlIGBjdHh0LVx1MDAzZWdwYV9hY2Nlc3NgIGZpZWxkIGlzICppbml0aWFsaXplZCogdG8gemVybyB3aXRoaW4gYGluaXRfZW11bGF0ZV9jdHh0YCwgd2hpY2ggaXMgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGVtdWxhdGlvbiBwcm9jZXNzLiBUaGUgZmllbGQncyB2YWx1ZSBpcyBhbHNvIHNldCBjb3JyZWN0bHkgZHVyaW5nIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbmAuXG5cbjMuICAqKlVuaW5pdGlhbGl6ZWQgQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM/KiogTm8sIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlIHJlcGxhY2luZyBvbmUgZmllbGQgd2l0aCBhIG5ldyBmaWVsZC4gYGdwYV9hY2Nlc3NgIGlzIGp1c3QgYSBgdTY0YCByZXBsYWNpbmcgYSBgYm9vbGAgaW4gYHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0YC4gU2ltcGxlLCBpbml0aWFsaXplZCwgbm8gd29ycmllcy5cblxuNC4gICoqQm91bmRzIENoZWNrcz8qKiBOb3BlLiBObyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgYnVmZmVyIGxlbmd0aHMgdGhhdCBjb3VsZCBhbGxvdyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuXG5cbkdpdmVuIGFsbCBvZiB0aGF0LCBpdCdzIGNsZWFyOiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFRoaXMgaXMgcHVyZWx5IGludGVybmFsIGNvbnRyb2wgZmxvdyBmb3IgS1ZNJ3MgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLCBkZWFsaW5nIHdpdGggcGVybWlzc2lvbnMgYW5kIHRoZSBjb3JyZWN0IHJldXNlIG9mIGNhY2hlZCBHUEFzLiBBbnkgYnVncyBoZXJlIHdvdWxkIGJlIGxvZ2ljYWwgZXJyb3JzIHJlbGF0ZWQgdG8gdmlydHVhbGl6YXRpb24gY29ycmVjdG5lc3Mgb3IgcGVybWlzc2lvbiBlbmZvcmNlbWVudCwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gS01TQU4gaXMgaXJyZWxldmFudCBoZXJlLiBTdGFuZGFyZCBmdXp6aW5nIGFuZCBLQVNBTiB3b3VsZCBiZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZSBsb2dpY2FsIGNvcnJlY3RuZXNzIGFuZCBtZW1vcnkgc2FmZXR5IG9mIHRoaXMgcGF0Y2guIFRpbWUgdG8gbW92ZSBvbiBhbmQgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxNCwiT3V0cHV0VG9rZW5zIjoyNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwMDowNToxNC41MzQ1MzIxMzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSdzIHg4NiBpbnN0cnVjdGlvbiBlbXVsYXRpb24gbG9naWMgdG8gdHJhY2sgcGVybWl0dGVkIGFjY2VzcyB0eXBlcyAocmVhZCB2cyB3cml0ZSkgZm9yIGNhY2hlZCBHdWVzdCBQaHlzaWNhbCBBZGRyZXNzZXMgKEdQQSkgZHVyaW5nIHBhZ2UgZmF1bHQgZW11bGF0aW9uIChyZXBsYWNpbmcgYGJvb2wgZ3BhX2F2YWlsYWJsZWAgd2l0aCBgdTY0IGdwYV9hY2Nlc3NgIGluIGBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dGApLlxcblxcbi0gS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBhdGhzLiBgY3R4dC1cXHUwMDNlZ3BhX2FjY2Vzc2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byAwIGluIGBpbml0X2VtdWxhdGVfY3R4dCgpYCBhbmQgcHJvcGVybHkgc2V0IGluIGB4ODZfZW11bGF0ZV9pbnN0cnVjdGlvbigpYC4gVGhlcmUgYXJlIG5vIG5ldyBvciBtb2RpZmllZCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBidWZmZXJzLlxcbi0gS0FTQU4gLyBTdGFuZGFyZCBEZXRlY3RvcnM6IFRoZSBtb2RpZmljYXRpb25zIHNvbGVseSBhZmZlY3QgaW50ZXJuYWwgcGVybWlzc2lvbiBjaGVja2luZyBhbmQgY29udHJvbCBmbG93IHdpdGhpbiBLVk0gTU1JTy9wYWdlIGZhdWx0IGVtdWxhdGlvbi4gU3RhbmRhcmQgS0FTQU4vZGVidWdnaW5nIGtlcm5lbHMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBpZiBhbnkgYXJpc2UuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNJ3MgeDg2IGluc3RydWN0aW9uIGVtdWxhdGlvbiBsb2dpYyB0byB0cmFjayBwZXJtaXR0ZWQgYWNjZXNzIHR5cGVzIChyZWFkIHZzIHdyaXRlKSBmb3IgY2FjaGVkIEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3NlcyAoR1BBKSBkdXJpbmcgcGFnZSBmYXVsdCBlbXVsYXRpb24gKHJlcGxhY2luZyBgYm9vbCBncGFfYXZhaWxhYmxlYCB3aXRoIGB1NjQgZ3BhX2FjY2Vzc2AgaW4gYHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0YCkuXFxuXFxuLSBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcGF0aHMuIGBjdHh0LVxcdTAwM2VncGFfYWNjZXNzYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIDAgaW4gYGluaXRfZW11bGF0ZV9jdHh0KClgIGFuZCBwcm9wZXJseSBzZXQgaW4gYHg4Nl9lbXVsYXRlX2luc3RydWN0aW9uKClgLiBUaGVyZSBhcmUgbm8gbmV3IG9yIG1vZGlmaWVkIGtlcm5lbC10by11c2VyIGNvcGllcywgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgb3IgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhIGJ1ZmZlcnMuXFxuLSBLQVNBTiAvIFN0YW5kYXJkIERldGVjdG9yczogVGhlIG1vZGlmaWNhdGlvbnMgc29sZWx5IGFmZmVjdCBpbnRlcm5hbCBwZXJtaXNzaW9uIGNoZWNraW5nIGFuZCBjb250cm9sIGZsb3cgd2l0aGluIEtWTSBNTUlPL3BhZ2UgZmF1bHQgZW11bGF0aW9uLiBTdGFuZGFyZCBLQVNBTi9kZWJ1Z2dpbmcga2VybmVscyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGlmIGFueSBhcmlzZS5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sl5q[1] Phase: Succeeded StartedAt: 2026-08-29 00:05:26 +0000 UTC FinishedAt: 2026-08-29 00:05:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 00:05:26 +0000 UTC FinishedAt: 2026-08-29 00:05:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2] Phase: Succeeded StartedAt: 2026-08-29 00:05:26 +0000 UTC FinishedAt: 2026-08-29 03:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 00:05:26 +0000 UTC FinishedAt: 2026-08-29 03:43:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 00:05:26 +0000 UTC FinishedAt: 2026-08-29 00:05:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 00:05:26 +0000 UTC FinishedAt: 2026-08-29 00:05:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5sl5q/series-workflow5sl5q-convert-artifact-3908917991/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 00:05:36 +0000 UTC FinishedAt: 2026-08-29 00:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 00:05:36 +0000 UTC FinishedAt: 2026-08-29 00:21:24 +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:*3d96256b-1921-400b-993c-b5cf35d8f0e5,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-workflow5sl5q/series-workflow5sl5q-convert-artifact-3908917991/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": "d18451f4-e5c1-46a6-a162-7c3ea5e2a51c", "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-workflow5sl5q/series-workflow5sl5q-build-action-3887616381/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 00:05:36 +0000 UTC FinishedAt: 2026-08-29 00:21:14 +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:*3d96256b-1921-400b-993c-b5cf35d8f0e5,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-workflow5sl5q/series-workflow5sl5q-convert-artifact-3908917991/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": "d18451f4-e5c1-46a6-a162-7c3ea5e2a51c", "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-workflow5sl5q/series-workflow5sl5q-build-action-3887616381/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 00:21:24 +0000 UTC FinishedAt: 2026-08-29 00:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 00:21:24 +0000 UTC FinishedAt: 2026-08-29 00:21:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 00:21:24 +0000 UTC FinishedAt: 2026-08-29 00:21:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 00:21:24 +0000 UTC FinishedAt: 2026-08-29 00:21:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5sl5q/series-workflow5sl5q-convert-artifact-3633803670/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 00:21:34 +0000 UTC FinishedAt: 2026-08-29 00:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 00:21:34 +0000 UTC FinishedAt: 2026-08-29 00:23:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d18451f4-e5c1-46a6-a162-7c3ea5e2a51c,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-workflow5sl5q/series-workflow5sl5q-build-action-3887616381/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-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 00:23:34 +0000 UTC FinishedAt: 2026-08-29 00:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 00:23:34 +0000 UTC FinishedAt: 2026-08-29 00:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 00:23:34 +0000 UTC FinishedAt: 2026-08-29 00:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 00:23:34 +0000 UTC FinishedAt: 2026-08-29 00:40:36 +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:*3d96256b-1921-400b-993c-b5cf35d8f0e5,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-workflow5sl5q/series-workflow5sl5q-convert-artifact-3633803670/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": "3576905b-fa12-480d-a61b-acfac15377d7", "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-workflow5sl5q/series-workflow5sl5q-build-action-1118188186/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 00:23:34 +0000 UTC FinishedAt: 2026-08-29 00:40:26 +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:*3d96256b-1921-400b-993c-b5cf35d8f0e5,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-workflow5sl5q/series-workflow5sl5q-convert-artifact-3633803670/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": "3576905b-fa12-480d-a61b-acfac15377d7", "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-workflow5sl5q/series-workflow5sl5q-build-action-1118188186/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 00:40:36 +0000 UTC FinishedAt: 2026-08-29 00:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 00:40:36 +0000 UTC FinishedAt: 2026-08-29 00:40:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 00:40:36 +0000 UTC FinishedAt: 2026-08-29 00:42:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 00:40:36 +0000 UTC FinishedAt: 2026-08-29 00:42:12 +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:*3576905b-fa12-480d-a61b-acfac15377d7,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-workflow5sl5q/series-workflow5sl5q-build-action-1118188186/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-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 00:42:22 +0000 UTC FinishedAt: 2026-08-29 03:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 00:42:22 +0000 UTC FinishedAt: 2026-08-29 03:43:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"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:*d18451f4-e5c1-46a6-a162-7c3ea5e2a51c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3576905b-fa12-480d-a61b-acfac15377d7,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-workflow5sl5q/series-workflow5sl5q-build-action-3887616381/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-workflow5sl5q/series-workflow5sl5q-build-action-1118188186/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 00:42:22 +0000 UTC FinishedAt: 2026-08-29 00:42:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 00:42:22 +0000 UTC FinishedAt: 2026-08-29 00:42:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"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-workflow5sl5q/series-workflow5sl5q-convert-artifact-962116923/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 00:42:22 +0000 UTC FinishedAt: 2026-08-29 00:42:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 00:42:22 +0000 UTC FinishedAt: 2026-08-29 00:42:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 00:42:22 +0000 UTC FinishedAt: 2026-08-29 00:42:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 00:42:32 +0000 UTC FinishedAt: 2026-08-29 03:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5sl5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_mmu_page_fault","x86_emulate_instruction","kvm_emulate_instruction"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73e3f0710014fe6d4ed98cfc02292f6121db7558","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"e6657522-64f9-4e1e-abf6-ed2d6b86a23e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 00:42:32 +0000 UTC FinishedAt: 2026-08-29 03:43:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d18451f4-e5c1-46a6-a162-7c3ea5e2a51c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3576905b-fa12-480d-a61b-acfac15377d7,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-workflow5sl5q/series-workflow5sl5q-build-action-3887616381/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-workflow5sl5q/series-workflow5sl5q-build-action-1118188186/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-workflow5sl5q/series-workflow5sl5q-convert-artifact-962116923/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,}