Name: series-workflow4tcmm Phase: Succeeded StartedAt: 2026-08-24 16:23:19 +0000 UTC FinishedAt: 2026-08-24 17:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[0] Phase: Succeeded StartedAt: 2026-08-24 16:23:19 +0000 UTC FinishedAt: 2026-08-24 16:32:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 16:23:19 +0000 UTC FinishedAt: 2026-08-24 16:32:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD" ], "series_id": "c3f5929e-b7f8-4dd0-9d0a-76c010b4da47" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "shutdown_interception" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2h1dGRvd25faW50ZXJjZXB0aW9uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gbG9naWMgaXNzdWUgd2hlcmUgdGhlIEFNRCBTVk0gYXJjaGl0ZWN0dXJlIGxlYXZlcyBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgVk1DQiAodGhlIHNhdmUgYXJlYSBhbmQgY2VydGFpbiBjb250cm9sIGZpZWxkcykgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiBQcmV2aW91c2x5LCBLVk0gY2xlYXJlZCB0aGUgZW50aXJlIFZNQ0IgcGFnZSwgd2hpY2ggbGlrZWx5IGRlc3Ryb3llZCBvdGhlciB2YWxpZCBjb250cm9sIGZpZWxkcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBvbmx5IGNsZWFyIHRoZSBhcmNoaXRlY3R1cmFsbHkgdW5kZWZpbmVkIGZpZWxkcy4gVGhpcyBcJiMzNDt1bmRlZmluZWRcJiMzNDsgc3RhdGUgcmVmZXJzIHRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBub3QgQy1sZXZlbCB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIFZNQ0IgcGFnZSBpdHNlbGYgaXMgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwmIzM5O3MgcGVyc3BlY3RpdmUpLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBrZXJuZWwgYWxsb2NhdGlvbnMgKHN0YWNrLCBoZWFwKSBhbmQgd291bGQgbm90IGRldGVjdCBoYXJkd2FyZS1sZXZlbCB1bmRlZmluZWQgc3RhdGUgaW4gYW4gYWxyZWFkeS1hbGxvY2F0ZWQgcGFnZS4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgbG9naWMgYnVnIGZpeCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgYnkgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgU0hVVERPV04gaW50ZXJjZXB0IGluIEtWTSBTVk0gYnkgYXZvaWRpbmcgY2xlYXJpbmcgdGhlIGVudGlyZSBWTUNCIHBhZ2UgYW5kIGluc3RlYWQgb25seSBjbGVhcmluZyB0aGUgc2F2ZSBhcmVhIGFuZCBzcGVjaWZpYyBjb250cm9sIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gaHlwZXJ2aXNvciB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZ3Vlc3QgYWN0aW9ucyAoZS5nLiwgYSB0cmlwbGUgZmF1bHQgY2F1c2luZyBhIHNodXRkb3duKSwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgxNWI5YTUxNzY1OGIwZTFlNzA2NTI3YjE2NjlkYjg1NDcyNDQwZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNjoyNDo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggOWQ2MDdiOThiZDA2Ny4uY2I1ZTA0ZmQ1MThmNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC0yMTY0LDE4ICYjNDM7MjE2NCwyMyBAQCBzdGF0aWMgaW50IHNodXRkb3duX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXG4gXHQvKlxuLVx0ICogVk1DQiBpcyB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQuICBJTklUIHRoZSB2Q1BVIHRvIHB1dFxuLVx0ICogdGhlIFZNQ0IgaW4gYSBrbm93biBnb29kIHN0YXRlLiAgVW5mb3J0dWF0ZWx5LCBLVk0gZG9lc24mIzM5O3QgaGF2ZVxuLVx0ICogS1ZNX01QX1NUQVRFX1NIVVRET1dOIGFuZCBjYW4mIzM5O3QgYWRkIGl0IHdpdGhvdXQgcG90ZW50aWFsbHkgYnJlYWtpbmdcbi1cdCAqIHVzZXJzcGFjZS4gIEF0IGEgcGxhdGZvcm0gdmlldywgSU5JVCBpcyBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzXG4tXHQgKiB0aGVyZSBleGlzdCBiYXJlIG1ldGFsIHBsYXRmb3JtcyB0aGF0IGF1dG9tYXRpY2FsbHkgSU5JVCB0aGUgQ1BVXG4tXHQgKiBpbiByZXNwb25zZSB0byBzaHV0ZG93bi5cbiYjNDM7XHQgKiBUaGUgVk1DQiBzYXZlIGFyZWEgaXMgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LCBhcyBhcmVcbiYjNDM7XHQgKiBjb250cm9sIGFyZWEgb2Zmc2V0cyA2MGgsIDYxaCwgYW5kIDY4aCAoaW50X2N0bFsxNTowXSBhbmQgaW50X3N0YXRlKS5cbiYjNDM7XHQgKiBJTklUIHRoZSB2Q1BVIHRvIHB1dCB0aGUgVk1DQiBpbiBhIGtub3duIGdvb2Qgc3RhdGUuICBVbmZvcnR1YXRlbHksXG4mIzQzO1x0ICogS1ZNIGRvZXNuJiMzOTt0IGhhdmUgS1ZNX01QX1NUQVRFX1NIVVRET1dOIGFuZCBjYW4mIzM5O3QgYWRkIGl0IHdpdGhvdXRcbiYjNDM7XHQgKiBwb3RlbnRpYWxseSBicmVha2luZyB1c2Vyc3BhY2UuICBBdCBhIHBsYXRmb3JtIHZpZXcsIElOSVQgaXNcbiYjNDM7XHQgKiBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXRcbiYjNDM7XHQgKiBhdXRvbWF0aWNhbGx5IElOSVQgdGhlIENQVSBpbiByZXNwb25zZSB0byBzaHV0ZG93bi5cbiBcdCAqXG4gXHQgKiBUaGUgVk0gc2F2ZSBhcmVhIGZvciBTRVYtRVMgZ3Vlc3RzIGhhcyBhbHJlYWR5IGJlZW4gZW5jcnlwdGVkIHNvIGl0XG4gXHQgKiBjYW5ub3QgYmUgcmVpbml0aWFsaXplZCwgaS5lLiBzeW50aGVzaXppbmcgSU5JVCBpcyBmdXRpbGUuXG4gXHQgKi9cbiBcdGlmICghaXNfc2V2X2VzX2d1ZXN0KHZjcHUpKSB7XG4tXHRcdGNsZWFyX3BhZ2Uoc3ZtLVx1MDAzZXZtY2IpO1xuJiM0MztcdFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbDtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQoXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZSwgMCwgc2l6ZW9mKHN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUpKTtcbiYjNDM7XHRcdGNvbnRyb2wtXHUwMDNlaW50X2N0bCBcdTAwMjY9IH5HRU5NQVNLKDE1LCAwKTtcbiYjNDM7XHRcdGNvbnRyb2wtXHUwMDNlaW50X3N0YXRlID0gMDtcbiAjaWZkZWYgQ09ORklHX0tWTV9TTU1cbiBcdFx0aWYgKGlzX3NtbSh2Y3B1KSlcbiBcdFx0XHRrdm1fc21tX2NoYW5nZWQodmNwdSwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NodXRkb3duX2ludGVyY2VwdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIFNIVVRET1dOIGludGVyY2VwdCBpbiBLVk0gU1ZNIGJ5IGF2b2lkaW5nIGNsZWFyaW5nIHRoZSBlbnRpcmUgVk1DQiBwYWdlIGFuZCBpbnN0ZWFkIG9ubHkgY2xlYXJpbmcgdGhlIHNhdmUgYXJlYSBhbmQgc3BlY2lmaWMgY29udHJvbCBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIGh5cGVydmlzb3IgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGd1ZXN0IGFjdGlvbnMgKGUuZy4sIGEgdHJpcGxlIGZhdWx0IGNhdXNpbmcgYSBzaHV0ZG93biksIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MTViOWE1MTc2NThiMGUxZTcwNjUyN2IxNjY5ZGI4NTQ3MjQ0MGQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTY6MjQ6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwppbmRleCA5ZDYwN2I5OGJkMDY3Li5jYjVlMDRmZDUxOGY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKQEAgLTIxNjQsMTggJiM0MzsyMTY0LDIzIEBAIHN0YXRpYyBpbnQgc2h1dGRvd25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCiAJLyoKLQkgKiBWTUNCIGlzIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdC4gIElOSVQgdGhlIHZDUFUgdG8gcHV0Ci0JICogdGhlIFZNQ0IgaW4gYSBrbm93biBnb29kIHN0YXRlLiAgVW5mb3J0dWF0ZWx5LCBLVk0gZG9lc24mIzM5O3QgaGF2ZQotCSAqIEtWTV9NUF9TVEFURV9TSFVURE9XTiBhbmQgY2FuJiMzOTt0IGFkZCBpdCB3aXRob3V0IHBvdGVudGlhbGx5IGJyZWFraW5nCi0JICogdXNlcnNwYWNlLiAgQXQgYSBwbGF0Zm9ybSB2aWV3LCBJTklUIGlzIGFjY2VwdGFibGUgYmVoYXZpb3IgYXMKLQkgKiB0aGVyZSBleGlzdCBiYXJlIG1ldGFsIHBsYXRmb3JtcyB0aGF0IGF1dG9tYXRpY2FsbHkgSU5JVCB0aGUgQ1BVCi0JICogaW4gcmVzcG9uc2UgdG8gc2h1dGRvd24uCiYjNDM7CSAqIFRoZSBWTUNCIHNhdmUgYXJlYSBpcyB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQsIGFzIGFyZQomIzQzOwkgKiBjb250cm9sIGFyZWEgb2Zmc2V0cyA2MGgsIDYxaCwgYW5kIDY4aCAoaW50X2N0bFsxNTowXSBhbmQgaW50X3N0YXRlKS4KJiM0MzsJICogSU5JVCB0aGUgdkNQVSB0byBwdXQgdGhlIFZNQ0IgaW4gYSBrbm93biBnb29kIHN0YXRlLiAgVW5mb3J0dWF0ZWx5LAomIzQzOwkgKiBLVk0gZG9lc24mIzM5O3QgaGF2ZSBLVk1fTVBfU1RBVEVfU0hVVERPV04gYW5kIGNhbiYjMzk7dCBhZGQgaXQgd2l0aG91dAomIzQzOwkgKiBwb3RlbnRpYWxseSBicmVha2luZyB1c2Vyc3BhY2UuICBBdCBhIHBsYXRmb3JtIHZpZXcsIElOSVQgaXMKJiM0MzsJICogYWNjZXB0YWJsZSBiZWhhdmlvciBhcyB0aGVyZSBleGlzdCBiYXJlIG1ldGFsIHBsYXRmb3JtcyB0aGF0CiYjNDM7CSAqIGF1dG9tYXRpY2FsbHkgSU5JVCB0aGUgQ1BVIGluIHJlc3BvbnNlIHRvIHNodXRkb3duLgogCSAqCiAJICogVGhlIFZNIHNhdmUgYXJlYSBmb3IgU0VWLUVTIGd1ZXN0cyBoYXMgYWxyZWFkeSBiZWVuIGVuY3J5cHRlZCBzbyBpdAogCSAqIGNhbm5vdCBiZSByZWluaXRpYWxpemVkLCBpLmUuIHN5bnRoZXNpemluZyBJTklUIGlzIGZ1dGlsZS4KIAkgKi8KIAlpZiAoIWlzX3Nldl9lc19ndWVzdCh2Y3B1KSkgewotCQljbGVhcl9wYWdlKHN2bS0mZ3Q7dm1jYik7CiYjNDM7CQlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSAmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbDsKJiM0MzsKJiM0MzsJCW1lbXNldCgmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZSwgMCwgc2l6ZW9mKHN2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZSkpOwomIzQzOwkJY29udHJvbC0mZ3Q7aW50X2N0bCAmYW1wOz0gfkdFTk1BU0soMTUsIDApOwomIzQzOwkJY29udHJvbC0mZ3Q7aW50X3N0YXRlID0gMDsKICNpZmRlZiBDT05GSUdfS1ZNX1NNTQogCQlpZiAoaXNfc21tKHZjcHUpKQogCQkJa3ZtX3NtbV9jaGFuZ2VkKHZjcHUsIGZhbHNlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBLVk0gU1ZNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gdGhlIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBgc3ZtLSZndDt2bWNiYCBpcyBoYW5kbGVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiBJdCBsb29rcyBsaWtlIGluc3RlYWQgb2YgY29tcGxldGVseSB3aXBpbmcgdGhlIGB2bWNiYCBwYWdlIHdpdGggYGNsZWFyX3BhZ2VgLCBpdCYjMzk7cyBub3cgc2VsZWN0aXZlbHkgemVyb2luZyBvdXQgdGhlIGB2bWNiLSZndDtzYXZlYCBhcmVhIGFuZCBzcGVjaWZpYyBjb250cm9sIGZpZWxkczogYGNvbnRyb2wtJmd0O2ludF9jdGxgIGFuZCBgY29udHJvbC0mZ3Q7aW50X3N0YXRlYC4gVGhpcyBpcyBhIGNsZWFyIG9wdGltaXphdGlvbiBzdHJhdGVneSwgcmF0aGVyIHRoYW4gYSBidWcgZml4LCB0byBhdm9pZCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBmcm9tIGNsZWFyaW5nIHRoZSBlbnRpcmUgcGFnZSwgYW5kIGxlYXZpbmcgdGhlIGFyZWFzIGZvciBjb250cm9sIGludGFjdC4KCk15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7U21hcnQgbW92ZS4mIzM0OyBDbGVhcmluZyB0aGUgd2hvbGUgcGFnZSBpcyBicnV0ZSBmb3JjZSBhbmQgcG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUsIGVzcGVjaWFsbHkgaWYgb3RoZXIgY3JpdGljYWwgZGF0YSByZXNpZGVzIHdpdGhpbiB0aGF0IGB2bWNiYCB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gcHJlc2VydmUuIFNlbGVjdGl2ZSBjbGVhcmluZyBpcyB0aGUgYmV0dGVyIGFwcHJvYWNoIGZyb20gYSBzdGFiaWxpdHkgcGVyc3BlY3RpdmUuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGlzIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgZnVydGhlci4gSXMgdGhpcyBjb2RlIHBhdGggZXZlbiByZWFjaGFibGU/IEFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXMgaXQgZnV6emFibGU/IEtWTSBTVk0sIEkmIzM5O20gcHJldHR5IHN1cmUgaXQgaXMuIFllcywgS1ZNIFNWTSBpcyBmdXp6YWJsZS4gV2Ugc2hvdWxkIGFsd2F5cyBjaGVjay4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSBpdC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBLVk1fQU1EYCBpcyB0aGUgb25lLiBZZXAsIGEgcXVpY2sgcGVlayBhdCBgYXJjaC94ODYva3ZtL0tjb25maWdgIGNvbmZpcm1zIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NodXRkb3duX2ludGVyY2VwdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yMTU1PXN0YXRpYyBpbnQgbWNfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIxNTktXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIxNjA6c3RhdGljIGludCBzaHV0ZG93bl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMTYxLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTMzNDc9c3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzk0LVx0W1NWTV9FWElUX1RBU0tfU1dJVENIXVx0XHRcdD0gdGFza19zd2l0Y2hfaW50ZXJjZXB0aW9uLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozMzk1Olx0W1NWTV9FWElUX1NIVVRET1dOXVx0XHRcdD0gc2h1dGRvd25faW50ZXJjZXB0aW9uLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzk2LVx0W1NWTV9FWElUX1ZNUlVOXVx0XHRcdD0gdm1ydW5faW50ZXJjZXB0aW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU2h1dGRvd24gSW50ZXJjZXB0aW9uIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgY2xlYXJseSBzZXQgdXAgYXMgYW4gZXhpdCBoYW5kbGVyIGZvciBgU1ZNX0VYSVRfU0hVVERPV05gLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBndWVzdCDigJMgeW91IGtub3csIHRoZSB2aXJ0dWFsIG1hY2hpbmUg4oCTIGluaXRpYXRlcyBhIHNodXRkb3duLiAgVGhpcyBpbmNsdWRlcyB0aG9zZSBsb3ZlbHksIGFuZCBvZnRlbiBicnV0YWwsIHRyaXBsZSBmYXVsdCBzY2VuYXJpb3MgdGhhdCBjYW4gaGFwcGVuIHdoZW4gdGhpbmdzIGdvIHNpZGV3YXlzIGluIHRoZSBndWVzdC4gIE15IHByaW1hcnkgY29uY2VybiBub3cgaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBpcyBjb25maWd1cmVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgaXQuICBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBmdWxseSBncmFzcCBpdHMgYmVoYXZpb3IuIExldCYjMzk7cyBnZXQgdG8gd29yayBvbiBmaW5kaW5nIHRob3NlIGNvbmZpZyBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIHNwZWNpZmllcyBgS1ZNX0FNRGAuIFJpZ2h0LCByaWdodC4gQ2xlYXJseSwgd2UgbmVlZCB0byBicmluZyBpbiBgS1ZNYCBpdHNlbGYgYXMgYSBmb3VuZGF0aW9uYWwgZWxlbWVudCwgdGhlIGJhc2UgY29uZmlnIHVwb24gd2hpY2ggYEtWTV9BTURgIGxpa2VseSBidWlsZHMuIEl0IHdvdWxkIGJlIGZvb2xpc2ggdG8gaWdub3JlIHRoYXQuCgpOb3csIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb2YgYEtWTV9BTURgLCBteSBuZXh0IHN0ZXAgaXMgb2J2aW91cy4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgeDg2IEtWTSBtb2R1bGUuIFRoYXQgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgdHJ1dGggbGllcy4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgdGhlIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIEtjb25maWcgZm9yIHg4NiBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEtWTSBpcyBjb25maWd1cmVkIGZvciB4ODYgc3lzdGVtcywgc3BlY2lmaWNhbGx5IGZyb20gYSBmZWF0dXJlIG9yIGludGVncmF0aW9uIHBlcnNwZWN0aXZlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gdGhpbmtpbmcgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSBpcyBhIGxpa2VseSBzdGFydGluZyBwb2ludC4gTGluZSAxNDYuLi4gaG1tLCBJJiMzOTtsbCBuZWVkIHRvIGp1bXAgdGhlcmUgYW5kIGdldCBteSBiZWFyaW5ncy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGxpbmUgd2lsbCB0b3VjaCBvbiB0aGUgcmVsZXZhbnQgb3B0aW9ucyBmb3IgS1ZNJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBhbmQgYXNzb2NpYXRlZCB2YXJpYWJsZXMgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGJldHRlciB1bmRlcnN0YW5kIGhvdyB0byBjb25maWd1cmUgdGhlIEtWTSBzZXR0aW5ncyBpbiB0aGF0IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0aGVscFxuIDE0MTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcbiAxNDI6XHRcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE1NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBLVk1fQU1EX1NFVlxuIDE1NzpcdFx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4gMTU4Olx0XHRkZWZhdWx0IHlcbiAxNTk6XHRcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFzc2Vzc2luZyB0aGUgSHlwZXJ2aXNvciBSZXF1aXJlbWVudHMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBmb3IgdGhpcyBzZXR1cC4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGggYSBLVk0gZW52aXJvbm1lbnQsIGFuZCBzaW5jZSB0aGUgbWVudGlvbiBvZiBBTUQgaXMgcHJvbWluZW50LCBgS1ZNYCwgYEtWTV9BTURgLCBhbmQgYENQVV9TVVBfQU1EYCBhcmUgZ29pbmcgdG8gYmUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBgQ1BVX1NVUF9BTURgIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIHN1cHBvcnQgZm9yIHRoZSBhcmNoaXRlY3R1cmUgaXMgaW4gcGxhY2UuIEl0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwb2ludCB0byB2ZXJpZnkgZWFybHkgYW5kIHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUFVfU1VQX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcuY3B1JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcuY3B1PTMxNj1jb25maWcgQ1BVX1NVUF9DWVJJWF8zMlxuLS1cbmFyY2gveDg2L0tjb25maWcuY3B1LTMyOS1cbmFyY2gveDg2L0tjb25maWcuY3B1OjMzMDpjb25maWcgQ1BVX1NVUF9BTURcbmFyY2gveDg2L0tjb25maWcuY3B1LTMzMS1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTY2CgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyB0aGUgZGVmYXVsdCBzZXR0aW5nIGhlcmUgaXMgY2xlYXJseSBgeWAsIHdoaWNoIGlzIGdvb2QgdG8ga25vdyByaWdodCBvZmYgdGhlIGJhdC4gVGhhdCBtZWFucyBqdXN0IHNwZWNpZnlpbmcgYEtWTWAgYW5kIGBLVk1fQU1EYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGludGVuZGVkIHB1cnBvc2UuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgZ29pbmcgdG8gYmUgdGhlIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIG9mIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgcmVzaWRlcywgYW5kIGl0IHNlZW1zIHRvIGFkZHJlc3MgYSBidWcgcmVsYXRlZCB0byBgY2xlYXJfcGFnZShzdm0tJmd0O3ZtY2IpYCBwb3RlbnRpYWxseSB3aXBpbmcgbW9yZSB0aGFuIGl0IHNob3VsZC4gVGhpcyB0eXBlIG9mIGZpeCBpcyAqZGVmaW5pdGVseSogd29ydGggcHV0dGluZyB0aHJvdWdoIHRoZSBmdXp6aW5nIHByb2Nlc3MgdG8gZW5zdXJlIGl0IGhvbGRzIHVwIHVuZGVyIHN0cmVzcyBhbmQgcmV2ZWFscyBhbnl0aGluZyB1bmV4cGVjdGVkLgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgc2h1dGRvd25faW50ZXJjZXB0aW9uYCBpcyB0aGUgKm9ubHkqIGZ1bmN0aW9uIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBZZWFoLCBqdXN0IHRoYXQgb25lLiBFeGNlbGxlbnQuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGRvY3VtZW50IHRoZXNlIGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaHV0ZG93bl9pbnRlcmNlcHRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBTSFVURE9XTiBpbnRlcmNlcHQgaW4gS1ZNIFNWTSBieSBhdm9pZGluZyBjbGVhcmluZyB0aGUgZW50aXJlIFZNQ0IgcGFnZSBhbmQgaW5zdGVhZCBvbmx5IGNsZWFyaW5nIHRoZSBzYXZlIGFyZWEgYW5kIHNwZWNpZmljIGNvbnRyb2wgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBoeXBlcnZpc29yIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBndWVzdCBhY3Rpb25zIChlLmcuLCBhIHRyaXBsZSBmYXVsdCBjYXVzaW5nIGEgc2h1dGRvd24pLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NodXRkb3duX2ludGVyY2VwdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIFNIVVRET1dOIGludGVyY2VwdCBpbiBLVk0gU1ZNIGJ5IGF2b2lkaW5nIGNsZWFyaW5nIHRoZSBlbnRpcmUgVk1DQiBwYWdlIGFuZCBpbnN0ZWFkIG9ubHkgY2xlYXJpbmcgdGhlIHNhdmUgYXJlYSBhbmQgc3BlY2lmaWMgY29udHJvbCBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIGh5cGVydmlzb3IgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGd1ZXN0IGFjdGlvbnMgKGUuZy4sIGEgdHJpcGxlIGZhdWx0IGNhdXNpbmcgYSBzaHV0ZG93biksIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gbG9naWMgaXNzdWUgd2hlcmUgdGhlIEFNRCBTVk0gYXJjaGl0ZWN0dXJlIGxlYXZlcyBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgVk1DQiAodGhlIHNhdmUgYXJlYSBhbmQgY2VydGFpbiBjb250cm9sIGZpZWxkcykgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiBQcmV2aW91c2x5LCBLVk0gY2xlYXJlZCB0aGUgZW50aXJlIFZNQ0IgcGFnZSwgd2hpY2ggbGlrZWx5IGRlc3Ryb3llZCBvdGhlciB2YWxpZCBjb250cm9sIGZpZWxkcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBvbmx5IGNsZWFyIHRoZSBhcmNoaXRlY3R1cmFsbHkgdW5kZWZpbmVkIGZpZWxkcy4gVGhpcyBcJiMzNDt1bmRlZmluZWRcJiMzNDsgc3RhdGUgcmVmZXJzIHRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBub3QgQy1sZXZlbCB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIFZNQ0IgcGFnZSBpdHNlbGYgaXMgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwmIzM5O3MgcGVyc3BlY3RpdmUpLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBrZXJuZWwgYWxsb2NhdGlvbnMgKHN0YWNrLCBoZWFwKSBhbmQgd291bGQgbm90IGRldGVjdCBoYXJkd2FyZS1sZXZlbCB1bmRlZmluZWQgc3RhdGUgaW4gYW4gYWxyZWFkeS1hbGxvY2F0ZWQgcGFnZS4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgbG9naWMgYnVnIGZpeCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgYnkgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgxNWI5YTUxNzY1OGIwZTFlNzA2NTI3YjE2NjlkYjg1NDcyNDQwZDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxNjoyNDo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IDlkNjA3Yjk4YmQwNjcuLmNiNWUwNGZkNTE4ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwpAQCAtMjE2NCwxOCAmIzQzOzIxNjQsMjMgQEAgc3RhdGljIGludCBzaHV0ZG93bl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAKIAkvKgotCSAqIFZNQ0IgaXMgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiAgSU5JVCB0aGUgdkNQVSB0byBwdXQKLQkgKiB0aGUgVk1DQiBpbiBhIGtub3duIGdvb2Qgc3RhdGUuICBVbmZvcnR1YXRlbHksIEtWTSBkb2VzbiYjMzk7dCBoYXZlCi0JICogS1ZNX01QX1NUQVRFX1NIVVRET1dOIGFuZCBjYW4mIzM5O3QgYWRkIGl0IHdpdGhvdXQgcG90ZW50aWFsbHkgYnJlYWtpbmcKLQkgKiB1c2Vyc3BhY2UuICBBdCBhIHBsYXRmb3JtIHZpZXcsIElOSVQgaXMgYWNjZXB0YWJsZSBiZWhhdmlvciBhcwotCSAqIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXQgYXV0b21hdGljYWxseSBJTklUIHRoZSBDUFUKLQkgKiBpbiByZXNwb25zZSB0byBzaHV0ZG93bi4KJiM0MzsJICogVGhlIFZNQ0Igc2F2ZSBhcmVhIGlzIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdCwgYXMgYXJlCiYjNDM7CSAqIGNvbnRyb2wgYXJlYSBvZmZzZXRzIDYwaCwgNjFoLCBhbmQgNjhoIChpbnRfY3RsWzE1OjBdIGFuZCBpbnRfc3RhdGUpLgomIzQzOwkgKiBJTklUIHRoZSB2Q1BVIHRvIHB1dCB0aGUgVk1DQiBpbiBhIGtub3duIGdvb2Qgc3RhdGUuICBVbmZvcnR1YXRlbHksCiYjNDM7CSAqIEtWTSBkb2VzbiYjMzk7dCBoYXZlIEtWTV9NUF9TVEFURV9TSFVURE9XTiBhbmQgY2FuJiMzOTt0IGFkZCBpdCB3aXRob3V0CiYjNDM7CSAqIHBvdGVudGlhbGx5IGJyZWFraW5nIHVzZXJzcGFjZS4gIEF0IGEgcGxhdGZvcm0gdmlldywgSU5JVCBpcwomIzQzOwkgKiBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXQKJiM0MzsJICogYXV0b21hdGljYWxseSBJTklUIHRoZSBDUFUgaW4gcmVzcG9uc2UgdG8gc2h1dGRvd24uCiAJICoKIAkgKiBUaGUgVk0gc2F2ZSBhcmVhIGZvciBTRVYtRVMgZ3Vlc3RzIGhhcyBhbHJlYWR5IGJlZW4gZW5jcnlwdGVkIHNvIGl0CiAJICogY2Fubm90IGJlIHJlaW5pdGlhbGl6ZWQsIGkuZS4gc3ludGhlc2l6aW5nIElOSVQgaXMgZnV0aWxlLgogCSAqLwogCWlmICghaXNfc2V2X2VzX2d1ZXN0KHZjcHUpKSB7Ci0JCWNsZWFyX3BhZ2Uoc3ZtLSZndDt2bWNiKTsKJiM0MzsJCXN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9ICZhbXA7c3ZtLSZndDt2bWNiLSZndDtjb250cm9sOwomIzQzOwomIzQzOwkJbWVtc2V0KCZhbXA7c3ZtLSZndDt2bWNiLSZndDtzYXZlLCAwLCBzaXplb2Yoc3ZtLSZndDt2bWNiLSZndDtzYXZlKSk7CiYjNDM7CQljb250cm9sLSZndDtpbnRfY3RsICZhbXA7PSB+R0VOTUFTSygxNSwgMCk7CiYjNDM7CQljb250cm9sLSZndDtpbnRfc3RhdGUgPSAwOwogI2lmZGVmIENPTkZJR19LVk1fU01NCiAJCWlmIChpc19zbW0odmNwdSkpCiAJCQlrdm1fc21tX2NoYW5nZWQodmNwdSwgZmFsc2UpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIFBhdGNoOiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgQ29uY2VybnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB0aGUgYHNodXRkb3duX2ludGVyY2VwdGlvbmAgZnVuY3Rpb24gd2l0aGluIHRoZSBBTUQgU1ZNIEtWTSBjb2RlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlcGxhY2luZyBhIGBjbGVhcl9wYWdlKHN2bS0mZ3Q7dm1jYilgIGNhbGwgd2l0aCBhIG1vcmUgdGFyZ2V0ZWQgY2xlYXJpbmcgb2Ygb25seSB0aGUgYHNhdmVgIGFyZWEgYW5kIHNvbWUgc3BlY2lmaWMgZmllbGRzIHdpdGhpbiB0aGUgYGNvbnRyb2xgIGFyZWEgb2YgdGhlIFZNQ0IuIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoaXMgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UmIzM5O3JlICpub3QqIHplcm9pbmcgdGhlIGVudGlyZSBWTUNCIGFueW1vcmU7IHdlJiMzOTtyZSBsZWF2aW5nIHNvbWUgb2YgaXQgdW50b3VjaGVkLgoKTXkgZmlyc3QgY29uY2VybiB3YXMgdGhhdCB0aGlzIGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB0aGUgZ3Vlc3Qgb3IgcG90ZW50aWFsbHkgdG8gdXNlcnNwYWNlIGlmIHNvbWV0aGluZyB3ZXJlIHRvIHJlYWQgaXQuIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGF0IHRoZSBoYXJkd2FyZSBsZWF2ZXMgdGhlIHNhdmUgYXJlYSBhbmQgY2VydGFpbiBjb250cm9sIGFyZWEgb2Zmc2V0cyB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQuIFRoYXQmIzM5O3MgdGhlIGtleS4gQnV0IHRoZW4gSSBxdWlja2x5IHJlYWxpemVkLCBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUsIHRoaXMgaXNuJiMzOTt0ICp0cnVseSogdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIEMgc2Vuc2UuIElmIHRoZSBtZW1vcnkgaGFkIGJlZW4gYWxsb2NhdGVkIGFuZCB1c2VkIGJlZm9yZSwgaXQgYWxyZWFkeSAqaGFkKiB2YWx1ZXMg4oCTIGl0IHdhcyBqdXN0IHJldGFpbmluZyAmIzM0O29sZCYjMzQ7IHZhbHVlcyBmcm9tIGEgcHJldmlvdXMgc3RhdGUuICBLTVNBTiB3b3VsZG4mIzM5O3QgdHJhY2sgdGhlIHZhbHVlcyB3cml0dGVuIGJ5IHRoZSBoYXJkd2FyZSBhcyB1bmluaXRpYWxpemVkLCB1bmxlc3MgaXQgaGFkIGEgc3BlY2lhbCBob29rIGZvciB0aGF0LgoKVGhlIGtleSBpcyB0aGF0IHRoZSBwcmlvciBgY2xlYXJfcGFnZWAgd2FzIGVmZmVjdGl2ZWx5IGluaXRpYWxpemluZyB0aGUgZW50aXJlIFZNQ0IsIGFuZCBub3cgd2UgYXJlIG9ubHkgaW5pdGlhbGl6aW5nIGEgc21hbGwgcGFydCBvZiBpdC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcG90ZW50aWFsIHJpc2sgbGllcy4KCkhvd2V2ZXIsIGFmdGVyIGEgYml0IG1vcmUgdGhvdWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIFZNQ0IgaXMgKmFjdHVhbGx5KiB1c2VkLiBJZiBgY2xlYXJfcGFnZWAgKndhcyogdXNlZCwgdGhlIGVudGlyZSBWTUNCIHdvdWxkIGhhdmUgYmVlbiB6ZXJvZWQuIFRoZW4sIGBrdm1fdmNwdV9yZXNldGAgd291bGQgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyLCByZS1pbml0aWFsaXppbmcgdGhlIHRoaW5ncyB0aGUgS1ZNIGNvcmUgbmVlZHMuIFRoaXMgY29udGV4dCBpcyBpbXBvcnRhbnQuCgpTbywgdGhlIHBhdGNoIGlzIGxpa2VseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgY2xlYXJpbmcgb2YgcGFydHMgb2YgdGhlIFZNQ0IgdGhhdCBLVk0gd2FudHMgdG8gcmV0YWluIHRocm91Z2ggYSBzaHV0ZG93biBpbnRlcmNlcHQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgbGVhdmluZyB0aGUgJiMzNDtvbGQmIzM0OyBkYXRhIGluIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgVk1DQiBpcyBzYWZlLiBJdCYjMzk7cyBwcm9iYWJseSBzYWZlIGJlY2F1c2UgdGhlIG1lbW9yeSBpcyBhbHJlYWR5ICppbml0aWFsaXplZCogd2l0aCB2YWx1ZXMsIGJ1dCB0aGUgc2VtYW50aWNzIGhhdmUgY2hhbmdlZC4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFdlIHNob3VsZCBsb29rIGRlZXBlciBhdCBob3cgdGhpcyBjaGFuZ2VzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGFuZCBga3ZtX3ZjcHVfcmVzZXRgLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBwaWVjZSBoZXJlOiBpcyB0aGVyZSBhIHJpc2sgb2Ygc3RhbGUgZGF0YSBiZWluZyBpbmNvcnJlY3RseSBpbnRlcnByZXRlZCBhZnRlciB0aGUgaW50ZXJjZXB0IGJlZm9yZSB0aGUgZnVsbCBWTUNCIHJlLWluaXRpYWxpemF0aW9uPyBUaGUgb3JpZ2luYWwgYGNsZWFyX3BhZ2VgIHdhcyBpbml0aWFsaXppbmcgdGhlIGNvbnRyb2wgYXJlYSwgd2hpY2ggaXMgd2hhdCBLVk0gbmVlZHMsIGFuZCB0aGlzIG1lYW5zIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBzYW1lIHRoaW5ncyBhcmUgc2V0IHRocm91Z2ggdGhpcyBuZXcgbWV0aG9kLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIGRlZXBlciBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUg4oCTIHBhcnRpY3VsYXJseSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIOKAkyBpcyByZXF1aXJlZCB0byBiZSBzdXJlIHdlIGFyZSBub3QgaW50cm9kdWNpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGZyb20gYSBzdGFsZS1kYXRhIHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHV0ZG93bl9pbnRlcmNlcHRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjE1NT1zdGF0aWMgaW50IG1jX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMTU5LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMTYwOnN0YXRpYyBpbnQgc2h1dGRvd25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjE2MS17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzQ3PXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzM5NC1cdFtTVk1fRVhJVF9UQVNLX1NXSVRDSF1cdFx0XHQ9IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzM5NTpcdFtTVk1fRVhJVF9TSFVURE9XTl1cdFx0XHQ9IHNodXRkb3duX2ludGVyY2VwdGlvbixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzM5Ni1cdFtTVk1fRVhJVF9WTVJVTl1cdFx0XHQ9IHZtcnVuX2ludGVyY2VwdGlvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4NgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNodXRkb3duX2ludGVyY2VwdGlvbmAgaW4gYHN2bS5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHg4Ni9LVk0vU1ZNIHN5c3RlbSBoYW5kbGVzIGd1ZXN0IHNodXRkb3ducy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRlZCBvdmVyIHRvIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCB0byBsb29rIGF0IHRoaXMgZnVuY3Rpb24uIEkga25vdyB0aGlzIGFyZWEgaW50aW1hdGVseSwgc28gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBsb3ctbGV2ZWwgQU1EIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgc3BlY2lmaWMgY29kZSB0aGF0IG1hbmFnZXMgdGhpcy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgd2lsbCBiZSBjaGVja3MgZm9yIHNwZWNpZmljIFZNIGV4aXQgcmVhc29ucyByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgaW5zdHJ1Y3Rpb25zIG9yIHBvc3NpYmx5IGV2ZW4gQUNQSSBldmVudHMgdGhhdCB0cmlnZ2VyIGEgc2h1dGRvd24uIEkmIzM5O20gYWxzbyBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBob3N0JiMzOTtzIHBvd2VyIG1hbmFnZW1lbnQgZmVhdHVyZXMgYW5kIGhvdyB0aGUgU1ZNIGVudmlyb25tZW50IG1hcHMgdGhlbS4gTGV04oCZcyBzZWUgaG93IHRoaXMgYWxsIGNvbWVzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNjA6XHRzdGF0aWMgaW50IHNodXRkb3duX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4yMTYxOlx0e1xuMjE2MjpcdFx0c3RydWN0IGt2bV9ydW4gKmt2bV9ydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbjIxNjM6XHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuMjE2NDpcdFxuMjE2NTpcdFxuMjE2NjpcdFx0LypcbjIxNjc6XHRcdCAqIFRoZSBWTUNCIHNhdmUgYXJlYSBpcyB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQsIGFzIGFyZVxuMjE2ODpcdFx0ICogY29udHJvbCBhcmVhIG9mZnNldHMgNjBoLCA2MWgsIGFuZCA2OGggKGludF9jdGxbMTU6MF0gYW5kIGludF9zdGF0ZSkuXG4yMTY5Olx0XHQgKiBJTklUIHRoZSB2Q1BVIHRvIHB1dCB0aGUgVk1DQiBpbiBhIGtub3duIGdvb2Qgc3RhdGUuICBVbmZvcnR1YXRlbHksXG4yMTcwOlx0XHQgKiBLVk0gZG9lc24mIzM5O3QgaGF2ZSBLVk1fTVBfU1RBVEVfU0hVVERPV04gYW5kIGNhbiYjMzk7dCBhZGQgaXQgd2l0aG91dFxuMjE3MTpcdFx0ICogcG90ZW50aWFsbHkgYnJlYWtpbmcgdXNlcnNwYWNlLiAgQXQgYSBwbGF0Zm9ybSB2aWV3LCBJTklUIGlzXG4yMTcyOlx0XHQgKiBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXRcbjIxNzM6XHRcdCAqIGF1dG9tYXRpY2FsbHkgSU5JVCB0aGUgQ1BVIGluIHJlc3BvbnNlIHRvIHNodXRkb3duLlxuMjE3NDpcdFx0ICpcbjIxNzU6XHRcdCAqIFRoZSBWTSBzYXZlIGFyZWEgZm9yIFNFVi1FUyBndWVzdHMgaGFzIGFscmVhZHkgYmVlbiBlbmNyeXB0ZWQgc28gaXRcbjIxNzY6XHRcdCAqIGNhbm5vdCBiZSByZWluaXRpYWxpemVkLCBpLmUuIHN5bnRoZXNpemluZyBJTklUIGlzIGZ1dGlsZS5cbjIxNzc6XHRcdCAqL1xuMjE3ODpcdFx0aWYgKCFpc19zZXZfZXNfZ3Vlc3QodmNwdSkpIHtcbjIxNzk6XHRcdFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbDtcbjIxODA6XHRcbjIxODE6XHRcdFx0bWVtc2V0KFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUsIDAsIHNpemVvZihzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlKSk7XG4yMTgyOlx0XHRcdGNvbnRyb2wtXHUwMDNlaW50X2N0bCBcdTAwMjY9IH5HRU5NQVNLKDE1LCAwKTtcbjIxODM6XHRcdFx0Y29udHJvbC1cdTAwM2VpbnRfc3RhdGUgPSAwO1xuMjE4NDpcdCNpZmRlZiBDT05GSUdfS1ZNX1NNTVxuMjE4NTpcdFx0XHRpZiAoaXNfc21tKHZjcHUpKVxuMjE4NjpcdFx0XHRcdGt2bV9zbW1fY2hhbmdlZCh2Y3B1LCBmYWxzZSk7XG4yMTg3Olx0I2VuZGlmXG4yMTg4Olx0XHRcdGt2bV92Y3B1X3Jlc2V0KHZjcHUsIHRydWUpO1xuMjE4OTpcdFx0fVxuMjE5MDpcdFxuMjE5MTpcdFx0a3ZtX3J1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1NIVVRET1dOO1xuMjE5MjpcdFx0cmV0dXJuIDA7XG4yMTkzOlx0fVxuMjE5NDpcdFxuMjE5NTpcdHN0YXRpYyBpbnQgaW9faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjIxOTY6XHR7XG4yMTk3Olx0XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbjIxOTg6XHRcdHUzMiBpb19pbmZvID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2luZm9fMTsgLyogYWRkcmVzcyBzaXplIGJ1Zz8gKi9cbjIxOTk6XHRcdGludCBzaXplLCBpbiwgc3RyaW5nO1xuMjIwMDpcdFx0dW5zaWduZWQgcG9ydDtcbjIyMDE6XHRcbjIyMDI6XHRcdCYjNDM7JiM0Mzt2Y3B1LVx1MDAzZXN0YXQuaW9fZXhpdHM7XG4yMjAzOlx0XHRzdHJpbmcgPSAoaW9faW5mbyBcdTAwMjYgU1ZNX0lPSU9fU1RSX01BU0spICE9IDA7XG4yMjA0Olx0XHRpbiA9IChpb19pbmZvIFx1MDAyNiBTVk1fSU9JT19UWVBFX01BU0spICE9IDA7XG4yMjA1Olx0XHRwb3J0ID0gaW9faW5mbyBcdTAwM2VcdTAwM2UgMTY7XG4yMjA2Olx0XHRzaXplID0gKGlvX2luZm8gXHUwMDI2IFNWTV9JT0lPX1NJWkVfTUFTSykgXHUwMDNlXHUwMDNlIFNWTV9JT0lPX1NJWkVfU0hJRlQ7XG4yMjA3Olx0XG4yMjA4Olx0XHRpZiAoc3RyaW5nKSB7XG4yMjA5Olx0XHRcdGlmIChpc19zZXZfZXNfZ3Vlc3QodmNwdSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNDIKCQkJCQkJCW91dHB1dDogMTg0CgkJCQkJCQl0aG91Z2h0czogNzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBWTUNCIENsZWFyaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbG9naWMgZml4IHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSB0aGUgVk1DQiBkdXJpbmcgYSBTSFVURE9XTiBpbnRlcmNlcHQgaW4gdGhlIEFNRCBTVk0gZW52aXJvbm1lbnQuIFByZXZpb3VzbHksIHdlIHdlcmUgdXNpbmcgYGNsZWFyX3BhZ2Uoc3ZtLSZndDt2bWNiKWAgdG8gd2lwZSB0aGUgZW50aXJlIFZNQ0IuIFRoYXQgd2FzLi4uIGluZWZmaWNpZW50LCBhbmQsIGFzIHRoaXMgcGF0Y2ggY2xhcmlmaWVzLCBwcm9iYWJseSBpbmNvcnJlY3QuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O1dhaXQsIGlzIHRoaXMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/JiMzNDsgWW91IGtub3csIHRoZSB1c3VhbCBLTVNBTiBjb25jZXJucy4gQnV0IGFmdGVyIGRpZ2dpbmcgaW4sIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXNuJiMzOTt0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGluIHRoZSBLTVNBTiBzZW5zZSBhdCBhbGwuIFRoZSBWTUNCIGlzICphbHJlYWR5KiBpbml0aWFsaXplZCB3aGVuIHRoZSB2Q1BVIGlzIGNyZWF0ZWQuIFRoZSAmIzM0O3VuZGVmaW5lZCYjMzQ7IHN0YXRlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZSBpc24mIzM5O3QgYWJvdXQgQy1sZXZlbCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBsaWtlIHlvdSYjMzk7ZCBzZWUgd2l0aCBga21hbGxvY2Agb3Igc3RhY2sgYWxsb2NhdGlvbnMgdGhhdCBLTVNBTiB0cmFja3MuCgpXaGF0IHRoZSBBTUQgZG9jdW1lbnRhdGlvbiBzcGVjaWZpZXMgaXMgdGhhdCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdCwgdGhlICpjb250ZW50cyogb2YgdGhlIHNhdmUgYXJlYSBhbmQgKnNvbWUqIGNvbnRyb2wgZmllbGRzIGluIHRoZSBWTUNCIGJlY29tZSBhcmNoaXRlY3R1cmFsbHkgdW5kZWZpbmVkLiBUaGUgcGF0Y2gmIzM5O3MgZ29hbCBpcyB0byBlbnN1cmUgdGhvc2UgKnNwZWNpZmljKiBhcmVhcyBhcmUgaW4gYSBrbm93biwgemVyb2VkIHN0YXRlLiBQcmV2aW91c2x5LCB3ZSB3ZXJlIG51a2luZyB0aGUgZW50aXJlIDRLQiBwYWdlLCB3aGljaCB3YXMgb3ZlcmtpbGwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBsaWtlbHkgZGVzdHJveWluZyBvdGhlciBjb250cm9sIGZpZWxkcyB0aGF0IEtWTSByZWxpZXMgb24gdG8gYmUgdmFsaWQgYWNyb3NzIGEgU0hVVERPV04gKHNpbmNlIEtWTSBzeW50aGVzaXplcyBhbiBJTklUKS4KClNvLCB0aGlzIHBhdGNoIGNoYW5nZXMgZnJvbSBgY2xlYXJfcGFnZWAgdG8gYSB0YXJnZXRlZCBgbWVtc2V0YCBmb3IganVzdCB0aGUgcHJvYmxlbWF0aWMgYXJlYXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZXNpZ25lZCB0byBiZXR0ZXIgYWxpZ24gd2l0aCB0aGUgQU1EIGhhcmR3YXJlIHNwZWNpZmljYXRpb24uIEl0JiMzOTtzIGEgbG9naWMgYnVnIGZpeCwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGluIHRoZSBLTVNBTiBzZW5zZS4gVGhlIFZNQ0IgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBsb25nIGJlZm9yZSB0aGlzIHBvaW50LCBhbmQgdGhpcyBmaXggaXMgc3BlY2lmaWNhbGx5IGFib3V0IHRoZSAqYXJjaGl0ZWN0dXJhbCogc3RhdGUgb2YgdGhlIFZNQ0IgYWZ0ZXIgdGhlIFNIVVRET1dOLCBub3QgQy1sZXZlbCB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gd291bGRuJiMzOTt0IGJlIGFibGUgdG8gZGV0ZWN0IGFueXRoaW5nIGhlcmUgYmVjYXVzZSBpdCYjMzk7cyBub3QgbG9va2luZyBhdCB0aGUgaGFyZHdhcmUgZGVmaW5lZCBzdGF0ZXMuIFRoaXMgcGF0Y2ggaXMganVzdCBjbGVhbmluZyB1cCBhbiBpc3N1ZSBvZiBjb250cm9sIHN0cnVjdHVyZXMgYmVpbmcgb3ZlcndyaXR0ZW4uCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCYjMzk7cyBhIGNsZWFuIGxvZ2ljIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gbG9naWMgaXNzdWUgd2hlcmUgdGhlIEFNRCBTVk0gYXJjaGl0ZWN0dXJlIGxlYXZlcyBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgVk1DQiAodGhlIHNhdmUgYXJlYSBhbmQgY2VydGFpbiBjb250cm9sIGZpZWxkcykgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiBQcmV2aW91c2x5LCBLVk0gY2xlYXJlZCB0aGUgZW50aXJlIFZNQ0IgcGFnZSwgd2hpY2ggbGlrZWx5IGRlc3Ryb3llZCBvdGhlciB2YWxpZCBjb250cm9sIGZpZWxkcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBvbmx5IGNsZWFyIHRoZSBhcmNoaXRlY3R1cmFsbHkgdW5kZWZpbmVkIGZpZWxkcy4gVGhpcyBcJiMzNDt1bmRlZmluZWRcJiMzNDsgc3RhdGUgcmVmZXJzIHRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBub3QgQy1sZXZlbCB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIFZNQ0IgcGFnZSBpdHNlbGYgaXMgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwmIzM5O3MgcGVyc3BlY3RpdmUpLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBrZXJuZWwgYWxsb2NhdGlvbnMgKHN0YWNrLCBoZWFwKSBhbmQgd291bGQgbm90IGRldGVjdCBoYXJkd2FyZS1sZXZlbCB1bmRlZmluZWQgc3RhdGUgaW4gYW4gYWxyZWFkeS1hbGxvY2F0ZWQgcGFnZS4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgbG9naWMgYnVnIGZpeCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgYnkgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBpc3N1ZSB3aGVyZSB0aGUgQU1EIFNWTSBhcmNoaXRlY3R1cmUgbGVhdmVzIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBWTUNCICh0aGUgc2F2ZSBhcmVhIGFuZCBjZXJ0YWluIGNvbnRyb2wgZmllbGRzKSB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQuIFByZXZpb3VzbHksIEtWTSBjbGVhcmVkIHRoZSBlbnRpcmUgVk1DQiBwYWdlLCB3aGljaCBsaWtlbHkgZGVzdHJveWVkIG90aGVyIHZhbGlkIGNvbnRyb2wgZmllbGRzLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGlzIHRvIG9ubHkgY2xlYXIgdGhlIGFyY2hpdGVjdHVyYWxseSB1bmRlZmluZWQgZmllbGRzLiBUaGlzIFwmIzM0O3VuZGVmaW5lZFwmIzM0OyBzdGF0ZSByZWZlcnMgdG8gdGhlIGhhcmR3YXJlIHNwZWNpZmljYXRpb24sIG5vdCBDLWxldmVsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh0aGUgVk1DQiBwYWdlIGl0c2VsZiBpcyBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIGZyb20gdGhlIGtlcm5lbCYjMzk7cyBwZXJzcGVjdGl2ZSkuIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGtlcm5lbCBhbGxvY2F0aW9ucyAoc3RhY2ssIGhlYXApIGFuZCB3b3VsZCBub3QgZGV0ZWN0IGhhcmR3YXJlLWxldmVsIHVuZGVmaW5lZCBzdGF0ZSBpbiBhbiBhbHJlYWR5LWFsbG9jYXRlZCBwYWdlLiBUaGVyZWZvcmUsIHRoaXMgaXMgYSBsb2dpYyBidWcgZml4IGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBieSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjQ6NDkuOTk4NTgyOTg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5OTY3MTE0NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNodXRkb3duX2ludGVyY2VwdGlvblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gbG9naWMgaXNzdWUgd2hlcmUgdGhlIEFNRCBTVk0gYXJjaGl0ZWN0dXJlIGxlYXZlcyBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgVk1DQiAodGhlIHNhdmUgYXJlYSBhbmQgY2VydGFpbiBjb250cm9sIGZpZWxkcykgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiBQcmV2aW91c2x5LCBLVk0gY2xlYXJlZCB0aGUgZW50aXJlIFZNQ0IgcGFnZSwgd2hpY2ggbGlrZWx5IGRlc3Ryb3llZCBvdGhlciB2YWxpZCBjb250cm9sIGZpZWxkcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBvbmx5IGNsZWFyIHRoZSBhcmNoaXRlY3R1cmFsbHkgdW5kZWZpbmVkIGZpZWxkcy4gVGhpcyBcXFwidW5kZWZpbmVkXFxcIiBzdGF0ZSByZWZlcnMgdG8gdGhlIGhhcmR3YXJlIHNwZWNpZmljYXRpb24sIG5vdCBDLWxldmVsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh0aGUgVk1DQiBwYWdlIGl0c2VsZiBpcyBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIGZyb20gdGhlIGtlcm5lbCdzIHBlcnNwZWN0aXZlKS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20ga2VybmVsIGFsbG9jYXRpb25zIChzdGFjaywgaGVhcCkgYW5kIHdvdWxkIG5vdCBkZXRlY3QgaGFyZHdhcmUtbGV2ZWwgdW5kZWZpbmVkIHN0YXRlIGluIGFuIGFscmVhZHktYWxsb2NhdGVkIHBhZ2UuIFRoZXJlZm9yZSwgdGhpcyBpcyBhIGxvZ2ljIGJ1ZyBmaXggYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RhYmxlIGJ5IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgU0hVVERPV04gaW50ZXJjZXB0IGluIEtWTSBTVk0gYnkgYXZvaWRpbmcgY2xlYXJpbmcgdGhlIGVudGlyZSBWTUNCIHBhZ2UgYW5kIGluc3RlYWQgb25seSBjbGVhcmluZyB0aGUgc2F2ZSBhcmVhIGFuZCBzcGVjaWZpYyBjb250cm9sIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gaHlwZXJ2aXNvciB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZ3Vlc3QgYWN0aW9ucyAoZS5nLiwgYSB0cmlwbGUgZmF1bHQgY2F1c2luZyBhIHNodXRkb3duKSwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjQ6NDkuOTk4NTk0ODk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzk2MDU1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MTViOWE1MTc2NThiMGUxZTcwNjUyN2IxNjY5ZGI4NTQ3MjQ0MGQ2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDE2OjI0OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggOWQ2MDdiOThiZDA2Ny4uY2I1ZTA0ZmQ1MThmNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC0yMTY0LDE4ICsyMTY0LDIzIEBAIHN0YXRpYyBpbnQgc2h1dGRvd25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBWTUNCIGlzIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdC4gIElOSVQgdGhlIHZDUFUgdG8gcHV0XFxuLVxcdCAqIHRoZSBWTUNCIGluIGEga25vd24gZ29vZCBzdGF0ZS4gIFVuZm9ydHVhdGVseSwgS1ZNIGRvZXNuJ3QgaGF2ZVxcbi1cXHQgKiBLVk1fTVBfU1RBVEVfU0hVVERPV04gYW5kIGNhbid0IGFkZCBpdCB3aXRob3V0IHBvdGVudGlhbGx5IGJyZWFraW5nXFxuLVxcdCAqIHVzZXJzcGFjZS4gIEF0IGEgcGxhdGZvcm0gdmlldywgSU5JVCBpcyBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzXFxuLVxcdCAqIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXQgYXV0b21hdGljYWxseSBJTklUIHRoZSBDUFVcXG4tXFx0ICogaW4gcmVzcG9uc2UgdG8gc2h1dGRvd24uXFxuK1xcdCAqIFRoZSBWTUNCIHNhdmUgYXJlYSBpcyB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQsIGFzIGFyZVxcbitcXHQgKiBjb250cm9sIGFyZWEgb2Zmc2V0cyA2MGgsIDYxaCwgYW5kIDY4aCAoaW50X2N0bFsxNTowXSBhbmQgaW50X3N0YXRlKS5cXG4rXFx0ICogSU5JVCB0aGUgdkNQVSB0byBwdXQgdGhlIFZNQ0IgaW4gYSBrbm93biBnb29kIHN0YXRlLiAgVW5mb3J0dWF0ZWx5LFxcbitcXHQgKiBLVk0gZG9lc24ndCBoYXZlIEtWTV9NUF9TVEFURV9TSFVURE9XTiBhbmQgY2FuJ3QgYWRkIGl0IHdpdGhvdXRcXG4rXFx0ICogcG90ZW50aWFsbHkgYnJlYWtpbmcgdXNlcnNwYWNlLiAgQXQgYSBwbGF0Zm9ybSB2aWV3LCBJTklUIGlzXFxuK1xcdCAqIGFjY2VwdGFibGUgYmVoYXZpb3IgYXMgdGhlcmUgZXhpc3QgYmFyZSBtZXRhbCBwbGF0Zm9ybXMgdGhhdFxcbitcXHQgKiBhdXRvbWF0aWNhbGx5IElOSVQgdGhlIENQVSBpbiByZXNwb25zZSB0byBzaHV0ZG93bi5cXG4gXFx0ICpcXG4gXFx0ICogVGhlIFZNIHNhdmUgYXJlYSBmb3IgU0VWLUVTIGd1ZXN0cyBoYXMgYWxyZWFkeSBiZWVuIGVuY3J5cHRlZCBzbyBpdFxcbiBcXHQgKiBjYW5ub3QgYmUgcmVpbml0aWFsaXplZCwgaS5lLiBzeW50aGVzaXppbmcgSU5JVCBpcyBmdXRpbGUuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWlzX3Nldl9lc19ndWVzdCh2Y3B1KSkge1xcbi1cXHRcXHRjbGVhcl9wYWdlKHN2bS1cXHUwMDNldm1jYik7XFxuK1xcdFxcdHN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9IFxcdTAwMjZzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2w7XFxuK1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZSwgMCwgc2l6ZW9mKHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZSkpO1xcbitcXHRcXHRjb250cm9sLVxcdTAwM2VpbnRfY3RsIFxcdTAwMjY9IH5HRU5NQVNLKDE1LCAwKTtcXG4rXFx0XFx0Y29udHJvbC1cXHUwMDNlaW50X3N0YXRlID0gMDtcXG4gI2lmZGVmIENPTkZJR19LVk1fU01NXFxuIFxcdFxcdGlmIChpc19zbW0odmNwdSkpXFxuIFxcdFxcdFxcdGt2bV9zbW1fY2hhbmdlZCh2Y3B1LCBmYWxzZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjI0OjUwLjMzODkxNzczMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQzNDIzOTQyNDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaHV0ZG93bl9pbnRlcmNlcHRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIFNIVVRET1dOIGludGVyY2VwdCBpbiBLVk0gU1ZNIGJ5IGF2b2lkaW5nIGNsZWFyaW5nIHRoZSBlbnRpcmUgVk1DQiBwYWdlIGFuZCBpbnN0ZWFkIG9ubHkgY2xlYXJpbmcgdGhlIHNhdmUgYXJlYSBhbmQgc3BlY2lmaWMgY29udHJvbCBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIGh5cGVydmlzb3IgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGd1ZXN0IGFjdGlvbnMgKGUuZy4sIGEgdHJpcGxlIGZhdWx0IGNhdXNpbmcgYSBzaHV0ZG93biksIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgxNWI5YTUxNzY1OGIwZTFlNzA2NTI3YjE2NjlkYjg1NDcyNDQwZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNjoyNDo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCA5ZDYwN2I5OGJkMDY3Li5jYjVlMDRmZDUxOGY2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTIxNjQsMTggKzIxNjQsMjMgQEAgc3RhdGljIGludCBzaHV0ZG93bl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFxuIFx0Lypcbi1cdCAqIFZNQ0IgaXMgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiAgSU5JVCB0aGUgdkNQVSB0byBwdXRcbi1cdCAqIHRoZSBWTUNCIGluIGEga25vd24gZ29vZCBzdGF0ZS4gIFVuZm9ydHVhdGVseSwgS1ZNIGRvZXNuJ3QgaGF2ZVxuLVx0ICogS1ZNX01QX1NUQVRFX1NIVVRET1dOIGFuZCBjYW4ndCBhZGQgaXQgd2l0aG91dCBwb3RlbnRpYWxseSBicmVha2luZ1xuLVx0ICogdXNlcnNwYWNlLiAgQXQgYSBwbGF0Zm9ybSB2aWV3LCBJTklUIGlzIGFjY2VwdGFibGUgYmVoYXZpb3IgYXNcbi1cdCAqIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXQgYXV0b21hdGljYWxseSBJTklUIHRoZSBDUFVcbi1cdCAqIGluIHJlc3BvbnNlIHRvIHNodXRkb3duLlxuK1x0ICogVGhlIFZNQ0Igc2F2ZSBhcmVhIGlzIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdCwgYXMgYXJlXG4rXHQgKiBjb250cm9sIGFyZWEgb2Zmc2V0cyA2MGgsIDYxaCwgYW5kIDY4aCAoaW50X2N0bFsxNTowXSBhbmQgaW50X3N0YXRlKS5cbitcdCAqIElOSVQgdGhlIHZDUFUgdG8gcHV0IHRoZSBWTUNCIGluIGEga25vd24gZ29vZCBzdGF0ZS4gIFVuZm9ydHVhdGVseSxcbitcdCAqIEtWTSBkb2Vzbid0IGhhdmUgS1ZNX01QX1NUQVRFX1NIVVRET1dOIGFuZCBjYW4ndCBhZGQgaXQgd2l0aG91dFxuK1x0ICogcG90ZW50aWFsbHkgYnJlYWtpbmcgdXNlcnNwYWNlLiAgQXQgYSBwbGF0Zm9ybSB2aWV3LCBJTklUIGlzXG4rXHQgKiBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXRcbitcdCAqIGF1dG9tYXRpY2FsbHkgSU5JVCB0aGUgQ1BVIGluIHJlc3BvbnNlIHRvIHNodXRkb3duLlxuIFx0ICpcbiBcdCAqIFRoZSBWTSBzYXZlIGFyZWEgZm9yIFNFVi1FUyBndWVzdHMgaGFzIGFscmVhZHkgYmVlbiBlbmNyeXB0ZWQgc28gaXRcbiBcdCAqIGNhbm5vdCBiZSByZWluaXRpYWxpemVkLCBpLmUuIHN5bnRoZXNpemluZyBJTklUIGlzIGZ1dGlsZS5cbiBcdCAqL1xuIFx0aWYgKCFpc19zZXZfZXNfZ3Vlc3QodmNwdSkpIHtcbi1cdFx0Y2xlYXJfcGFnZShzdm0tXHUwMDNldm1jYik7XG4rXHRcdHN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9IFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2w7XG4rXG4rXHRcdG1lbXNldChcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLCAwLCBzaXplb2Yoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZSkpO1xuK1x0XHRjb250cm9sLVx1MDAzZWludF9jdGwgXHUwMDI2PSB+R0VOTUFTSygxNSwgMCk7XG4rXHRcdGNvbnRyb2wtXHUwMDNlaW50X3N0YXRlID0gMDtcbiAjaWZkZWYgQ09ORklHX0tWTV9TTU1cbiBcdFx0aWYgKGlzX3NtbSh2Y3B1KSlcbiBcdFx0XHRrdm1fc21tX2NoYW5nZWQodmNwdSwgZmFsc2UpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjQ6NTAuMzM4OTE4OTQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA5NTcwODk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBLVk0gU1ZNIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGluIHRoZSBgc2h1dGRvd25faW50ZXJjZXB0aW9uYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgYHN2bS1cdTAwM2V2bWNiYCBpcyBoYW5kbGVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiBJdCBsb29rcyBsaWtlIGluc3RlYWQgb2YgY29tcGxldGVseSB3aXBpbmcgdGhlIGB2bWNiYCBwYWdlIHdpdGggYGNsZWFyX3BhZ2VgLCBpdCdzIG5vdyBzZWxlY3RpdmVseSB6ZXJvaW5nIG91dCB0aGUgYHZtY2ItXHUwMDNlc2F2ZWAgYXJlYSBhbmQgc3BlY2lmaWMgY29udHJvbCBmaWVsZHM6IGBjb250cm9sLVx1MDAzZWludF9jdGxgIGFuZCBgY29udHJvbC1cdTAwM2VpbnRfc3RhdGVgLiBUaGlzIGlzIGEgY2xlYXIgb3B0aW1pemF0aW9uIHN0cmF0ZWd5LCByYXRoZXIgdGhhbiBhIGJ1ZyBmaXgsIHRvIGF2b2lkIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIGZyb20gY2xlYXJpbmcgdGhlIGVudGlyZSBwYWdlLCBhbmQgbGVhdmluZyB0aGUgYXJlYXMgZm9yIGNvbnRyb2wgaW50YWN0LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBcIlNtYXJ0IG1vdmUuXCIgQ2xlYXJpbmcgdGhlIHdob2xlIHBhZ2UgaXMgYnJ1dGUgZm9yY2UgYW5kIHBvdGVudGlhbGx5IGRlc3RydWN0aXZlLCBlc3BlY2lhbGx5IGlmIG90aGVyIGNyaXRpY2FsIGRhdGEgcmVzaWRlcyB3aXRoaW4gdGhhdCBgdm1jYmAgdGhhdCB3ZSBtaWdodCB3YW50IHRvIHByZXNlcnZlLiBTZWxlY3RpdmUgY2xlYXJpbmcgaXMgdGhlIGJldHRlciBhcHByb2FjaCBmcm9tIGEgc3RhYmlsaXR5IHBlcnNwZWN0aXZlLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB3aGV0aGVyIHRoaXMgaXMgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLiBJcyB0aGlzIGNvZGUgcGF0aCBldmVuIHJlYWNoYWJsZT8gQW5kLCBtb3JlIGltcG9ydGFudGx5LCBpcyBpdCBmdXp6YWJsZT8gS1ZNIFNWTSwgSSdtIHByZXR0eSBzdXJlIGl0IGlzLiBZZXMsIEtWTSBTVk0gaXMgZnV6emFibGUuIFdlIHNob3VsZCBhbHdheXMgY2hlY2suIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSBpdC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBLVk1fQU1EYCBpcyB0aGUgb25lLiBZZXAsIGEgcXVpY2sgcGVlayBhdCBgYXJjaC94ODYva3ZtL0tjb25maWdgIGNvbmZpcm1zIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjQ6NTguNDM0NjMxMTgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDA0MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNodXRkb3duX2ludGVyY2VwdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjE1NT1zdGF0aWMgaW50IG1jX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIxNTktXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMTYwOnN0YXRpYyBpbnQgc2h1dGRvd25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIxNjEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzQ3PXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzk0LVxcdFtTVk1fRVhJVF9UQVNLX1NXSVRDSF1cXHRcXHRcXHQ9IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMzOTU6XFx0W1NWTV9FWElUX1NIVVRET1dOXVxcdFxcdFxcdD0gc2h1dGRvd25faW50ZXJjZXB0aW9uLFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzM5Ni1cXHRbU1ZNX0VYSVRfVk1SVU5dXFx0XFx0XFx0PSB2bXJ1bl9pbnRlcmNlcHRpb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjI0OjU4LjQ4MzA0Mjk4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzU1MTAxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNodXRkb3duIEludGVyY2VwdGlvbiBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHNodXRkb3duX2ludGVyY2VwdGlvbmAgZnVuY3Rpb24sIGFuZCBpdCdzIGNsZWFybHkgc2V0IHVwIGFzIGFuIGV4aXQgaGFuZGxlciBmb3IgYFNWTV9FWElUX1NIVVRET1dOYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBndWVzdCDigJMgeW91IGtub3csIHRoZSB2aXJ0dWFsIG1hY2hpbmUg4oCTIGluaXRpYXRlcyBhIHNodXRkb3duLiAgVGhpcyBpbmNsdWRlcyB0aG9zZSBsb3ZlbHksIGFuZCBvZnRlbiBicnV0YWwsIHRyaXBsZSBmYXVsdCBzY2VuYXJpb3MgdGhhdCBjYW4gaGFwcGVuIHdoZW4gdGhpbmdzIGdvIHNpZGV3YXlzIGluIHRoZSBndWVzdC4gIE15IHByaW1hcnkgY29uY2VybiBub3cgaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBpcyBjb25maWd1cmVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgaXQuICBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBmdWxseSBncmFzcCBpdHMgYmVoYXZpb3IuIExldCdzIGdldCB0byB3b3JrIG9uIGZpbmRpbmcgdGhvc2UgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjoyNTowMy4wMTg1NTY2ODdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NzIzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjoyNTowMy4wNjQyMzE5MjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk2MjcyMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIHNwZWNpZmllcyBgS1ZNX0FNRGAuIFJpZ2h0LCByaWdodC4gQ2xlYXJseSwgd2UgbmVlZCB0byBicmluZyBpbiBgS1ZNYCBpdHNlbGYgYXMgYSBmb3VuZGF0aW9uYWwgZWxlbWVudCwgdGhlIGJhc2UgY29uZmlnIHVwb24gd2hpY2ggYEtWTV9BTURgIGxpa2VseSBidWlsZHMuIEl0IHdvdWxkIGJlIGZvb2xpc2ggdG8gaWdub3JlIHRoYXQuXG5cbk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvZiBgS1ZNX0FNRGAsIG15IG5leHQgc3RlcCBpcyBvYnZpb3VzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSB4ODYgS1ZNIG1vZHVsZS4gVGhhdCBzaG91bGQgYmUgbG9jYXRlZCBhdCBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSB0cnV0aCBsaWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgY2xhcmlmeSB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjU6MDYuOTYwNTA2MzY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTU2MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjU6MDcuMDA2NDY2MDU4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxMzAwMDM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBLY29uZmlnIGZvciB4ODYgS1ZNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEtWTSBpcyBjb25maWd1cmVkIGZvciB4ODYgc3lzdGVtcywgc3BlY2lmaWNhbGx5IGZyb20gYSBmZWF0dXJlIG9yIGludGVncmF0aW9uIHBlcnNwZWN0aXZlLiBMZXQncyBzZWUuLi4gSSdtIHRoaW5raW5nIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUgaXMgYSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQuIExpbmUgMTQ2Li4uIGhtbSwgSSdsbCBuZWVkIHRvIGp1bXAgdGhlcmUgYW5kIGdldCBteSBiZWFyaW5ncy4gSSdtIGFzc3VtaW5nIHRoYXQgbGluZSB3aWxsIHRvdWNoIG9uIHRoZSByZWxldmFudCBvcHRpb25zIGZvciBLVk0ncyBiZWhhdmlvci4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFzc29jaWF0ZWQgdmFyaWFibGVzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgdG8gY29uZmlndXJlIHRoZSBLVk0gc2V0dGluZ3MgaW4gdGhhdCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjU6MTIuNjE5NDY4NzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdGhlbHBcXG4gMTQxOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXFxuIDE0MjpcXHRcXHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNDU6XFx0XFxuIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjI1OjEyLjYxOTU2NjgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODk2NjQwNjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkFzc2Vzc2luZyB0aGUgSHlwZXJ2aXNvciBSZXF1aXJlbWVudHMqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGZvciB0aGlzIHNldHVwLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBJJ20gZGVhbGluZyB3aXRoIGEgS1ZNIGVudmlyb25tZW50LCBhbmQgc2luY2UgdGhlIG1lbnRpb24gb2YgQU1EIGlzIHByb21pbmVudCwgYEtWTWAsIGBLVk1fQU1EYCwgYW5kIGBDUFVfU1VQX0FNRGAgYXJlIGdvaW5nIHRvIGJlIGtleSBwaWVjZXMgb2YgdGhlIHB1enpsZS4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gYENQVV9TVVBfQU1EYCB0byB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBzdXBwb3J0IGZvciB0aGUgYXJjaGl0ZWN0dXJlIGlzIGluIHBsYWNlLiBJdCdzIHRoZSBtb3N0IGxpa2VseSBwb2ludCB0byB2ZXJpZnkgZWFybHkgYW5kIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjI1OjQ0LjUxNjIxMDE5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwMzQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENQVV9TVVBfQU1EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L0tjb25maWcuY3B1XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWcuY3B1PTMxNj1jb25maWcgQ1BVX1NVUF9DWVJJWF8zMlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy5jcHUtMzI5LVxcbmFyY2gveDg2L0tjb25maWcuY3B1OjMzMDpjb25maWcgQ1BVX1NVUF9BTURcXG5hcmNoL3g4Ni9LY29uZmlnLmNwdS0zMzEtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjI1OjQ0LjU3NjI0OTcyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk5MjI0OTQ1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgZGVmYXVsdCBzZXR0aW5nIGhlcmUgaXMgY2xlYXJseSBgeWAsIHdoaWNoIGlzIGdvb2QgdG8ga25vdyByaWdodCBvZmYgdGhlIGJhdC4gVGhhdCBtZWFucyBqdXN0IHNwZWNpZnlpbmcgYEtWTWAgYW5kIGBLVk1fQU1EYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGludGVuZGVkIHB1cnBvc2UuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyBnb2luZyB0byBiZSB0aGUgYHNodXRkb3duX2ludGVyY2VwdGlvbmAgZnVuY3Rpb24uIFRoYXQncyB3aGVyZSB0aGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIHJlc2lkZXMsIGFuZCBpdCBzZWVtcyB0byBhZGRyZXNzIGEgYnVnIHJlbGF0ZWQgdG8gYGNsZWFyX3BhZ2Uoc3ZtLVx1MDAzZXZtY2IpYCBwb3RlbnRpYWxseSB3aXBpbmcgbW9yZSB0aGFuIGl0IHNob3VsZC4gVGhpcyB0eXBlIG9mIGZpeCBpcyAqZGVmaW5pdGVseSogd29ydGggcHV0dGluZyB0aHJvdWdoIHRoZSBmdXp6aW5nIHByb2Nlc3MgdG8gZW5zdXJlIGl0IGhvbGRzIHVwIHVuZGVyIHN0cmVzcyBhbmQgcmV2ZWFscyBhbnl0aGluZyB1bmV4cGVjdGVkLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGlzIHRoZSAqb25seSogZnVuY3Rpb24gaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFllYWgsIGp1c3QgdGhhdCBvbmUuIEV4Y2VsbGVudC5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGRvY3VtZW50IHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTY2LCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjozMjowNC40OTg3NDcxNzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU5MjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2h1dGRvd25faW50ZXJjZXB0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBTSFVURE9XTiBpbnRlcmNlcHQgaW4gS1ZNIFNWTSBieSBhdm9pZGluZyBjbGVhcmluZyB0aGUgZW50aXJlIFZNQ0IgcGFnZSBhbmQgaW5zdGVhZCBvbmx5IGNsZWFyaW5nIHRoZSBzYXZlIGFyZWEgYW5kIHNwZWNpZmljIGNvbnRyb2wgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBoeXBlcnZpc29yIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBndWVzdCBhY3Rpb25zIChlLmcuLCBhIHRyaXBsZSBmYXVsdCBjYXVzaW5nIGEgc2h1dGRvd24pLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNodXRkb3duX2ludGVyY2VwdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgU0hVVERPV04gaW50ZXJjZXB0IGluIEtWTSBTVk0gYnkgYXZvaWRpbmcgY2xlYXJpbmcgdGhlIGVudGlyZSBWTUNCIHBhZ2UgYW5kIGluc3RlYWQgb25seSBjbGVhcmluZyB0aGUgc2F2ZSBhcmVhIGFuZCBzcGVjaWZpYyBjb250cm9sIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gaHlwZXJ2aXNvciB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZ3Vlc3QgYWN0aW9ucyAoZS5nLiwgYSB0cmlwbGUgZmF1bHQgY2F1c2luZyBhIHNodXRkb3duKSwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MzI6MDQuNTc4MzQ1MjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1Mzg3MzQxNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MzI6MDQuNTc4ODY1NzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzUzODY4MTYxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGlzc3VlIHdoZXJlIHRoZSBBTUQgU1ZNIGFyY2hpdGVjdHVyZSBsZWF2ZXMgc3BlY2lmaWMgcGFydHMgb2YgdGhlIFZNQ0IgKHRoZSBzYXZlIGFyZWEgYW5kIGNlcnRhaW4gY29udHJvbCBmaWVsZHMpIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdC4gUHJldmlvdXNseSwgS1ZNIGNsZWFyZWQgdGhlIGVudGlyZSBWTUNCIHBhZ2UsIHdoaWNoIGxpa2VseSBkZXN0cm95ZWQgb3RoZXIgdmFsaWQgY29udHJvbCBmaWVsZHMuIFRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMgdG8gb25seSBjbGVhciB0aGUgYXJjaGl0ZWN0dXJhbGx5IHVuZGVmaW5lZCBmaWVsZHMuIFRoaXMgXFxcInVuZGVmaW5lZFxcXCIgc3RhdGUgcmVmZXJzIHRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBub3QgQy1sZXZlbCB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIFZNQ0IgcGFnZSBpdHNlbGYgaXMgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwncyBwZXJzcGVjdGl2ZSkuIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGtlcm5lbCBhbGxvY2F0aW9ucyAoc3RhY2ssIGhlYXApIGFuZCB3b3VsZCBub3QgZGV0ZWN0IGhhcmR3YXJlLWxldmVsIHVuZGVmaW5lZCBzdGF0ZSBpbiBhbiBhbHJlYWR5LWFsbG9jYXRlZCBwYWdlLiBUaGVyZWZvcmUsIHRoaXMgaXMgYSBsb2dpYyBidWcgZml4IGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBieSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MTViOWE1MTc2NThiMGUxZTcwNjUyN2IxNjY5ZGI4NTQ3MjQ0MGQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTY6MjQ6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggOWQ2MDdiOThiZDA2Ny4uY2I1ZTA0ZmQ1MThmNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC0yMTY0LDE4ICsyMTY0LDIzIEBAIHN0YXRpYyBpbnQgc2h1dGRvd25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcbiBcdC8qXG4tXHQgKiBWTUNCIGlzIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdC4gIElOSVQgdGhlIHZDUFUgdG8gcHV0XG4tXHQgKiB0aGUgVk1DQiBpbiBhIGtub3duIGdvb2Qgc3RhdGUuICBVbmZvcnR1YXRlbHksIEtWTSBkb2Vzbid0IGhhdmVcbi1cdCAqIEtWTV9NUF9TVEFURV9TSFVURE9XTiBhbmQgY2FuJ3QgYWRkIGl0IHdpdGhvdXQgcG90ZW50aWFsbHkgYnJlYWtpbmdcbi1cdCAqIHVzZXJzcGFjZS4gIEF0IGEgcGxhdGZvcm0gdmlldywgSU5JVCBpcyBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzXG4tXHQgKiB0aGVyZSBleGlzdCBiYXJlIG1ldGFsIHBsYXRmb3JtcyB0aGF0IGF1dG9tYXRpY2FsbHkgSU5JVCB0aGUgQ1BVXG4tXHQgKiBpbiByZXNwb25zZSB0byBzaHV0ZG93bi5cbitcdCAqIFRoZSBWTUNCIHNhdmUgYXJlYSBpcyB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQsIGFzIGFyZVxuK1x0ICogY29udHJvbCBhcmVhIG9mZnNldHMgNjBoLCA2MWgsIGFuZCA2OGggKGludF9jdGxbMTU6MF0gYW5kIGludF9zdGF0ZSkuXG4rXHQgKiBJTklUIHRoZSB2Q1BVIHRvIHB1dCB0aGUgVk1DQiBpbiBhIGtub3duIGdvb2Qgc3RhdGUuICBVbmZvcnR1YXRlbHksXG4rXHQgKiBLVk0gZG9lc24ndCBoYXZlIEtWTV9NUF9TVEFURV9TSFVURE9XTiBhbmQgY2FuJ3QgYWRkIGl0IHdpdGhvdXRcbitcdCAqIHBvdGVudGlhbGx5IGJyZWFraW5nIHVzZXJzcGFjZS4gIEF0IGEgcGxhdGZvcm0gdmlldywgSU5JVCBpc1xuK1x0ICogYWNjZXB0YWJsZSBiZWhhdmlvciBhcyB0aGVyZSBleGlzdCBiYXJlIG1ldGFsIHBsYXRmb3JtcyB0aGF0XG4rXHQgKiBhdXRvbWF0aWNhbGx5IElOSVQgdGhlIENQVSBpbiByZXNwb25zZSB0byBzaHV0ZG93bi5cbiBcdCAqXG4gXHQgKiBUaGUgVk0gc2F2ZSBhcmVhIGZvciBTRVYtRVMgZ3Vlc3RzIGhhcyBhbHJlYWR5IGJlZW4gZW5jcnlwdGVkIHNvIGl0XG4gXHQgKiBjYW5ub3QgYmUgcmVpbml0aWFsaXplZCwgaS5lLiBzeW50aGVzaXppbmcgSU5JVCBpcyBmdXRpbGUuXG4gXHQgKi9cbiBcdGlmICghaXNfc2V2X2VzX2d1ZXN0KHZjcHUpKSB7XG4tXHRcdGNsZWFyX3BhZ2Uoc3ZtLVx1MDAzZXZtY2IpO1xuK1x0XHRzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sO1xuK1xuK1x0XHRtZW1zZXQoXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZSwgMCwgc2l6ZW9mKHN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUpKTtcbitcdFx0Y29udHJvbC1cdTAwM2VpbnRfY3RsIFx1MDAyNj0gfkdFTk1BU0soMTUsIDApO1xuK1x0XHRjb250cm9sLVx1MDAzZWludF9zdGF0ZSA9IDA7XG4gI2lmZGVmIENPTkZJR19LVk1fU01NXG4gXHRcdGlmIChpc19zbW0odmNwdSkpXG4gXHRcdFx0a3ZtX3NtbV9jaGFuZ2VkKHZjcHUsIGZhbHNlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjMyOjA0LjU3ODg2NjgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTkzODI4MTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHNodXRkb3duX2ludGVyY2VwdGlvbmAgUGF0Y2g6IFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBDb25jZXJucyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgdGhlIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGZ1bmN0aW9uIHdpdGhpbiB0aGUgQU1EIFNWTSBLVk0gY29kZS4gU3BlY2lmaWNhbGx5LCBpdCdzIHJlcGxhY2luZyBhIGBjbGVhcl9wYWdlKHN2bS1cdTAwM2V2bWNiKWAgY2FsbCB3aXRoIGEgbW9yZSB0YXJnZXRlZCBjbGVhcmluZyBvZiBvbmx5IHRoZSBgc2F2ZWAgYXJlYSBhbmQgc29tZSBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIHRoZSBgY29udHJvbGAgYXJlYSBvZiB0aGUgVk1DQi4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhpcyBtaWdodCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSdyZSAqbm90KiB6ZXJvaW5nIHRoZSBlbnRpcmUgVk1DQiBhbnltb3JlOyB3ZSdyZSBsZWF2aW5nIHNvbWUgb2YgaXQgdW50b3VjaGVkLlxuXG5NeSBmaXJzdCBjb25jZXJuIHdhcyB0aGF0IHRoaXMgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHRoZSBndWVzdCBvciBwb3RlbnRpYWxseSB0byB1c2Vyc3BhY2UgaWYgc29tZXRoaW5nIHdlcmUgdG8gcmVhZCBpdC4gVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoYXQgdGhlIGhhcmR3YXJlIGxlYXZlcyB0aGUgc2F2ZSBhcmVhIGFuZCBjZXJ0YWluIGNvbnRyb2wgYXJlYSBvZmZzZXRzIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdC4gVGhhdCdzIHRoZSBrZXkuIEJ1dCB0aGVuIEkgcXVpY2tseSByZWFsaXplZCwgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLCB0aGlzIGlzbid0ICp0cnVseSogdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIEMgc2Vuc2UuIElmIHRoZSBtZW1vcnkgaGFkIGJlZW4gYWxsb2NhdGVkIGFuZCB1c2VkIGJlZm9yZSwgaXQgYWxyZWFkeSAqaGFkKiB2YWx1ZXMg4oCTIGl0IHdhcyBqdXN0IHJldGFpbmluZyBcIm9sZFwiIHZhbHVlcyBmcm9tIGEgcHJldmlvdXMgc3RhdGUuICBLTVNBTiB3b3VsZG4ndCB0cmFjayB0aGUgdmFsdWVzIHdyaXR0ZW4gYnkgdGhlIGhhcmR3YXJlIGFzIHVuaW5pdGlhbGl6ZWQsIHVubGVzcyBpdCBoYWQgYSBzcGVjaWFsIGhvb2sgZm9yIHRoYXQuXG5cblRoZSBrZXkgaXMgdGhhdCB0aGUgcHJpb3IgYGNsZWFyX3BhZ2VgIHdhcyBlZmZlY3RpdmVseSBpbml0aWFsaXppbmcgdGhlIGVudGlyZSBWTUNCLCBhbmQgbm93IHdlIGFyZSBvbmx5IGluaXRpYWxpemluZyBhIHNtYWxsIHBhcnQgb2YgaXQuIFRoYXQncyB3aGVyZSB0aGUgcG90ZW50aWFsIHJpc2sgbGllcy5cblxuSG93ZXZlciwgYWZ0ZXIgYSBiaXQgbW9yZSB0aG91Z2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBWTUNCIGlzICphY3R1YWxseSogdXNlZC4gSWYgYGNsZWFyX3BhZ2VgICp3YXMqIHVzZWQsIHRoZSBlbnRpcmUgVk1DQiB3b3VsZCBoYXZlIGJlZW4gemVyb2VkLiBUaGVuLCBga3ZtX3ZjcHVfcmVzZXRgIHdvdWxkIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciwgcmUtaW5pdGlhbGl6aW5nIHRoZSB0aGluZ3MgdGhlIEtWTSBjb3JlIG5lZWRzLiBUaGlzIGNvbnRleHQgaXMgaW1wb3J0YW50LlxuXG5TbywgdGhlIHBhdGNoIGlzIGxpa2VseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgY2xlYXJpbmcgb2YgcGFydHMgb2YgdGhlIFZNQ0IgdGhhdCBLVk0gd2FudHMgdG8gcmV0YWluIHRocm91Z2ggYSBzaHV0ZG93biBpbnRlcmNlcHQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgbGVhdmluZyB0aGUgXCJvbGRcIiBkYXRhIGluIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgVk1DQiBpcyBzYWZlLiBJdCdzIHByb2JhYmx5IHNhZmUgYmVjYXVzZSB0aGUgbWVtb3J5IGlzIGFscmVhZHkgKmluaXRpYWxpemVkKiB3aXRoIHZhbHVlcywgYnV0IHRoZSBzZW1hbnRpY3MgaGF2ZSBjaGFuZ2VkLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSBzaG91bGQgbG9vayBkZWVwZXIgYXQgaG93IHRoaXMgY2hhbmdlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgc2h1dGRvd25faW50ZXJjZXB0aW9uYCBhbmQgYGt2bV92Y3B1X3Jlc2V0YC4gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZSBoZXJlOiBpcyB0aGVyZSBhIHJpc2sgb2Ygc3RhbGUgZGF0YSBiZWluZyBpbmNvcnJlY3RseSBpbnRlcnByZXRlZCBhZnRlciB0aGUgaW50ZXJjZXB0IGJlZm9yZSB0aGUgZnVsbCBWTUNCIHJlLWluaXRpYWxpemF0aW9uPyBUaGUgb3JpZ2luYWwgYGNsZWFyX3BhZ2VgIHdhcyBpbml0aWFsaXppbmcgdGhlIGNvbnRyb2wgYXJlYSwgd2hpY2ggaXMgd2hhdCBLVk0gbmVlZHMsIGFuZCB0aGlzIG1lYW5zIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBzYW1lIHRoaW5ncyBhcmUgc2V0IHRocm91Z2ggdGhpcyBuZXcgbWV0aG9kLiBJdCdzIGxpa2VseSB0aGF0IGEgZGVlcGVyIGRpdmUgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSDigJMgcGFydGljdWxhcmx5IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMg4oCTIGlzIHJlcXVpcmVkIHRvIGJlIHN1cmUgd2UgYXJlIG5vdCBpbnRyb2R1Y2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgZnJvbSBhIHN0YWxlLWRhdGEgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjozMjoyMC41NzI2OTcxNTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODU5NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNodXRkb3duX2ludGVyY2VwdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjE1NT1zdGF0aWMgaW50IG1jX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIxNTktXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMTYwOnN0YXRpYyBpbnQgc2h1dGRvd25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIxNjEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzQ3PXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzk0LVxcdFtTVk1fRVhJVF9UQVNLX1NXSVRDSF1cXHRcXHRcXHQ9IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMzOTU6XFx0W1NWTV9FWElUX1NIVVRET1dOXVxcdFxcdFxcdD0gc2h1dGRvd25faW50ZXJjZXB0aW9uLFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzM5Ni1cXHRbU1ZNX0VYSVRfVk1SVU5dXFx0XFx0XFx0PSB2bXJ1bl9pbnRlcmNlcHRpb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjMyOjIwLjYxNjU2MTMzMloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE0NzI2NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGluIGBzdm0uY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHg4Ni9LVk0vU1ZNIHN5c3RlbSBoYW5kbGVzIGd1ZXN0IHNodXRkb3ducy4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGVkIG92ZXIgdG8gYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgIHRvIGxvb2sgYXQgdGhpcyBmdW5jdGlvbi4gSSBrbm93IHRoaXMgYXJlYSBpbnRpbWF0ZWx5LCBzbyBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgbG93LWxldmVsIEFNRCBTZWN1cmUgVmlydHVhbCBNYWNoaW5lIHNwZWNpZmljIGNvZGUgdGhhdCBtYW5hZ2VzIHRoaXMuIEnigJltIHRoaW5raW5nIHRoZXJlIHdpbGwgYmUgY2hlY2tzIGZvciBzcGVjaWZpYyBWTSBleGl0IHJlYXNvbnMgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50IGluc3RydWN0aW9ucyBvciBwb3NzaWJseSBldmVuIEFDUEkgZXZlbnRzIHRoYXQgdHJpZ2dlciBhIHNodXRkb3duLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBob3N0J3MgcG93ZXIgbWFuYWdlbWVudCBmZWF0dXJlcyBhbmQgaG93IHRoZSBTVk0gZW52aXJvbm1lbnQgbWFwcyB0aGVtLiBMZXTigJlzIHNlZSBob3cgdGhpcyBhbGwgY29tZXMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjozMjoyNC40MzEyOTA3MDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI5ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc3ZtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE2MDpcXHRzdGF0aWMgaW50IHNodXRkb3duX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuMjE2MTpcXHR7XFxuMjE2MjpcXHRcXHRzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1biA9IHZjcHUtXFx1MDAzZXJ1bjtcXG4yMTYzOlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbjIxNjQ6XFx0XFxuMjE2NTpcXHRcXG4yMTY2OlxcdFxcdC8qXFxuMjE2NzpcXHRcXHQgKiBUaGUgVk1DQiBzYXZlIGFyZWEgaXMgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LCBhcyBhcmVcXG4yMTY4OlxcdFxcdCAqIGNvbnRyb2wgYXJlYSBvZmZzZXRzIDYwaCwgNjFoLCBhbmQgNjhoIChpbnRfY3RsWzE1OjBdIGFuZCBpbnRfc3RhdGUpLlxcbjIxNjk6XFx0XFx0ICogSU5JVCB0aGUgdkNQVSB0byBwdXQgdGhlIFZNQ0IgaW4gYSBrbm93biBnb29kIHN0YXRlLiAgVW5mb3J0dWF0ZWx5LFxcbjIxNzA6XFx0XFx0ICogS1ZNIGRvZXNuJ3QgaGF2ZSBLVk1fTVBfU1RBVEVfU0hVVERPV04gYW5kIGNhbid0IGFkZCBpdCB3aXRob3V0XFxuMjE3MTpcXHRcXHQgKiBwb3RlbnRpYWxseSBicmVha2luZyB1c2Vyc3BhY2UuICBBdCBhIHBsYXRmb3JtIHZpZXcsIElOSVQgaXNcXG4yMTcyOlxcdFxcdCAqIGFjY2VwdGFibGUgYmVoYXZpb3IgYXMgdGhlcmUgZXhpc3QgYmFyZSBtZXRhbCBwbGF0Zm9ybXMgdGhhdFxcbjIxNzM6XFx0XFx0ICogYXV0b21hdGljYWxseSBJTklUIHRoZSBDUFUgaW4gcmVzcG9uc2UgdG8gc2h1dGRvd24uXFxuMjE3NDpcXHRcXHQgKlxcbjIxNzU6XFx0XFx0ICogVGhlIFZNIHNhdmUgYXJlYSBmb3IgU0VWLUVTIGd1ZXN0cyBoYXMgYWxyZWFkeSBiZWVuIGVuY3J5cHRlZCBzbyBpdFxcbjIxNzY6XFx0XFx0ICogY2Fubm90IGJlIHJlaW5pdGlhbGl6ZWQsIGkuZS4gc3ludGhlc2l6aW5nIElOSVQgaXMgZnV0aWxlLlxcbjIxNzc6XFx0XFx0ICovXFxuMjE3ODpcXHRcXHRpZiAoIWlzX3Nldl9lc19ndWVzdCh2Y3B1KSkge1xcbjIxNzk6XFx0XFx0XFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbDtcXG4yMTgwOlxcdFxcbjIxODE6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUsIDAsIHNpemVvZihzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUpKTtcXG4yMTgyOlxcdFxcdFxcdGNvbnRyb2wtXFx1MDAzZWludF9jdGwgXFx1MDAyNj0gfkdFTk1BU0soMTUsIDApO1xcbjIxODM6XFx0XFx0XFx0Y29udHJvbC1cXHUwMDNlaW50X3N0YXRlID0gMDtcXG4yMTg0OlxcdCNpZmRlZiBDT05GSUdfS1ZNX1NNTVxcbjIxODU6XFx0XFx0XFx0aWYgKGlzX3NtbSh2Y3B1KSlcXG4yMTg2OlxcdFxcdFxcdFxcdGt2bV9zbW1fY2hhbmdlZCh2Y3B1LCBmYWxzZSk7XFxuMjE4NzpcXHQjZW5kaWZcXG4yMTg4OlxcdFxcdFxcdGt2bV92Y3B1X3Jlc2V0KHZjcHUsIHRydWUpO1xcbjIxODk6XFx0XFx0fVxcbjIxOTA6XFx0XFxuMjE5MTpcXHRcXHRrdm1fcnVuLVxcdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1NIVVRET1dOO1xcbjIxOTI6XFx0XFx0cmV0dXJuIDA7XFxuMjE5MzpcXHR9XFxuMjE5NDpcXHRcXG4yMTk1OlxcdHN0YXRpYyBpbnQgaW9faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4yMTk2OlxcdHtcXG4yMTk3OlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbjIxOTg6XFx0XFx0dTMyIGlvX2luZm8gPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzE7IC8qIGFkZHJlc3Mgc2l6ZSBidWc/ICovXFxuMjE5OTpcXHRcXHRpbnQgc2l6ZSwgaW4sIHN0cmluZztcXG4yMjAwOlxcdFxcdHVuc2lnbmVkIHBvcnQ7XFxuMjIwMTpcXHRcXG4yMjAyOlxcdFxcdCsrdmNwdS1cXHUwMDNlc3RhdC5pb19leGl0cztcXG4yMjAzOlxcdFxcdHN0cmluZyA9IChpb19pbmZvIFxcdTAwMjYgU1ZNX0lPSU9fU1RSX01BU0spICE9IDA7XFxuMjIwNDpcXHRcXHRpbiA9IChpb19pbmZvIFxcdTAwMjYgU1ZNX0lPSU9fVFlQRV9NQVNLKSAhPSAwO1xcbjIyMDU6XFx0XFx0cG9ydCA9IGlvX2luZm8gXFx1MDAzZVxcdTAwM2UgMTY7XFxuMjIwNjpcXHRcXHRzaXplID0gKGlvX2luZm8gXFx1MDAyNiBTVk1fSU9JT19TSVpFX01BU0spIFxcdTAwM2VcXHUwMDNlIFNWTV9JT0lPX1NJWkVfU0hJRlQ7XFxuMjIwNzpcXHRcXG4yMjA4OlxcdFxcdGlmIChzdHJpbmcpIHtcXG4yMjA5OlxcdFxcdFxcdGlmIChpc19zZXZfZXNfZ3Vlc3QodmNwdSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjMyOjI0LjQzMTYyMjE0M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTUzNDAzODQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVk1DQiBDbGVhcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbG9naWMgZml4IHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSB0aGUgVk1DQiBkdXJpbmcgYSBTSFVURE9XTiBpbnRlcmNlcHQgaW4gdGhlIEFNRCBTVk0gZW52aXJvbm1lbnQuIFByZXZpb3VzbHksIHdlIHdlcmUgdXNpbmcgYGNsZWFyX3BhZ2Uoc3ZtLVx1MDAzZXZtY2IpYCB0byB3aXBlIHRoZSBlbnRpcmUgVk1DQi4gVGhhdCB3YXMuLi4gaW5lZmZpY2llbnQsIGFuZCwgYXMgdGhpcyBwYXRjaCBjbGFyaWZpZXMsIHByb2JhYmx5IGluY29ycmVjdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJXYWl0LCBpcyB0aGlzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5P1wiIFlvdSBrbm93LCB0aGUgdXN1YWwgS01TQU4gY29uY2VybnMuIEJ1dCBhZnRlciBkaWdnaW5nIGluLCBpdCdzIGNsZWFyIHRoaXMgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIEtNU0FOIHNlbnNlIGF0IGFsbC4gVGhlIFZNQ0IgaXMgKmFscmVhZHkqIGluaXRpYWxpemVkIHdoZW4gdGhlIHZDUFUgaXMgY3JlYXRlZC4gVGhlIFwidW5kZWZpbmVkXCIgc3RhdGUgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUgaXNuJ3QgYWJvdXQgQy1sZXZlbCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBsaWtlIHlvdSdkIHNlZSB3aXRoIGBrbWFsbG9jYCBvciBzdGFjayBhbGxvY2F0aW9ucyB0aGF0IEtNU0FOIHRyYWNrcy5cblxuV2hhdCB0aGUgQU1EIGRvY3VtZW50YXRpb24gc3BlY2lmaWVzIGlzIHRoYXQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQsIHRoZSAqY29udGVudHMqIG9mIHRoZSBzYXZlIGFyZWEgYW5kICpzb21lKiBjb250cm9sIGZpZWxkcyBpbiB0aGUgVk1DQiBiZWNvbWUgYXJjaGl0ZWN0dXJhbGx5IHVuZGVmaW5lZC4gVGhlIHBhdGNoJ3MgZ29hbCBpcyB0byBlbnN1cmUgdGhvc2UgKnNwZWNpZmljKiBhcmVhcyBhcmUgaW4gYSBrbm93biwgemVyb2VkIHN0YXRlLiBQcmV2aW91c2x5LCB3ZSB3ZXJlIG51a2luZyB0aGUgZW50aXJlIDRLQiBwYWdlLCB3aGljaCB3YXMgb3ZlcmtpbGwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBsaWtlbHkgZGVzdHJveWluZyBvdGhlciBjb250cm9sIGZpZWxkcyB0aGF0IEtWTSByZWxpZXMgb24gdG8gYmUgdmFsaWQgYWNyb3NzIGEgU0hVVERPV04gKHNpbmNlIEtWTSBzeW50aGVzaXplcyBhbiBJTklUKS5cblxuU28sIHRoaXMgcGF0Y2ggY2hhbmdlcyBmcm9tIGBjbGVhcl9wYWdlYCB0byBhIHRhcmdldGVkIGBtZW1zZXRgIGZvciBqdXN0IHRoZSBwcm9ibGVtYXRpYyBhcmVhcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlc2lnbmVkIHRvIGJldHRlciBhbGlnbiB3aXRoIHRoZSBBTUQgaGFyZHdhcmUgc3BlY2lmaWNhdGlvbi4gSXQncyBhIGxvZ2ljIGJ1ZyBmaXgsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiB0aGUgS01TQU4gc2Vuc2UuIFRoZSBWTUNCIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgbG9uZyBiZWZvcmUgdGhpcyBwb2ludCwgYW5kIHRoaXMgZml4IGlzIHNwZWNpZmljYWxseSBhYm91dCB0aGUgKmFyY2hpdGVjdHVyYWwqIHN0YXRlIG9mIHRoZSBWTUNCIGFmdGVyIHRoZSBTSFVURE9XTiwgbm90IEMtbGV2ZWwgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIHdvdWxkbid0IGJlIGFibGUgdG8gZGV0ZWN0IGFueXRoaW5nIGhlcmUgYmVjYXVzZSBpdCdzIG5vdCBsb29raW5nIGF0IHRoZSBoYXJkd2FyZSBkZWZpbmVkIHN0YXRlcy4gVGhpcyBwYXRjaCBpcyBqdXN0IGNsZWFuaW5nIHVwIGFuIGlzc3VlIG9mIGNvbnRyb2wgc3RydWN0dXJlcyBiZWluZyBvdmVyd3JpdHRlbi5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBhIGNsZWFuIGxvZ2ljIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI0MiwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjozMjozOS45NjU2NjI1NTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGlzc3VlIHdoZXJlIHRoZSBBTUQgU1ZNIGFyY2hpdGVjdHVyZSBsZWF2ZXMgc3BlY2lmaWMgcGFydHMgb2YgdGhlIFZNQ0IgKHRoZSBzYXZlIGFyZWEgYW5kIGNlcnRhaW4gY29udHJvbCBmaWVsZHMpIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdC4gUHJldmlvdXNseSwgS1ZNIGNsZWFyZWQgdGhlIGVudGlyZSBWTUNCIHBhZ2UsIHdoaWNoIGxpa2VseSBkZXN0cm95ZWQgb3RoZXIgdmFsaWQgY29udHJvbCBmaWVsZHMuIFRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMgdG8gb25seSBjbGVhciB0aGUgYXJjaGl0ZWN0dXJhbGx5IHVuZGVmaW5lZCBmaWVsZHMuIFRoaXMgXFxcInVuZGVmaW5lZFxcXCIgc3RhdGUgcmVmZXJzIHRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBub3QgQy1sZXZlbCB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIFZNQ0IgcGFnZSBpdHNlbGYgaXMgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwncyBwZXJzcGVjdGl2ZSkuIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGtlcm5lbCBhbGxvY2F0aW9ucyAoc3RhY2ssIGhlYXApIGFuZCB3b3VsZCBub3QgZGV0ZWN0IGhhcmR3YXJlLWxldmVsIHVuZGVmaW5lZCBzdGF0ZSBpbiBhbiBhbHJlYWR5LWFsbG9jYXRlZCBwYWdlLiBUaGVyZWZvcmUsIHRoaXMgaXMgYSBsb2dpYyBidWcgZml4IGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBieSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBpc3N1ZSB3aGVyZSB0aGUgQU1EIFNWTSBhcmNoaXRlY3R1cmUgbGVhdmVzIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBWTUNCICh0aGUgc2F2ZSBhcmVhIGFuZCBjZXJ0YWluIGNvbnRyb2wgZmllbGRzKSB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQuIFByZXZpb3VzbHksIEtWTSBjbGVhcmVkIHRoZSBlbnRpcmUgVk1DQiBwYWdlLCB3aGljaCBsaWtlbHkgZGVzdHJveWVkIG90aGVyIHZhbGlkIGNvbnRyb2wgZmllbGRzLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGlzIHRvIG9ubHkgY2xlYXIgdGhlIGFyY2hpdGVjdHVyYWxseSB1bmRlZmluZWQgZmllbGRzLiBUaGlzIFxcXCJ1bmRlZmluZWRcXFwiIHN0YXRlIHJlZmVycyB0byB0aGUgaGFyZHdhcmUgc3BlY2lmaWNhdGlvbiwgbm90IEMtbGV2ZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgKHRoZSBWTUNCIHBhZ2UgaXRzZWxmIGlzIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUpLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBrZXJuZWwgYWxsb2NhdGlvbnMgKHN0YWNrLCBoZWFwKSBhbmQgd291bGQgbm90IGRldGVjdCBoYXJkd2FyZS1sZXZlbCB1bmRlZmluZWQgc3RhdGUgaW4gYW4gYWxyZWFkeS1hbGxvY2F0ZWQgcGFnZS4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgbG9naWMgYnVnIGZpeCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgYnkgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tcmm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 16:23:19 +0000 UTC FinishedAt: 2026-08-24 16:32:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "1b731e5ded480bd1e5546aed35584238661ce72e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD" ], "series_id": "c3f5929e-b7f8-4dd0-9d0a-76c010b4da47" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "shutdown_interception" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2h1dGRvd25faW50ZXJjZXB0aW9uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gbG9naWMgaXNzdWUgd2hlcmUgdGhlIEFNRCBTVk0gYXJjaGl0ZWN0dXJlIGxlYXZlcyBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgVk1DQiAodGhlIHNhdmUgYXJlYSBhbmQgY2VydGFpbiBjb250cm9sIGZpZWxkcykgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiBQcmV2aW91c2x5LCBLVk0gY2xlYXJlZCB0aGUgZW50aXJlIFZNQ0IgcGFnZSwgd2hpY2ggbGlrZWx5IGRlc3Ryb3llZCBvdGhlciB2YWxpZCBjb250cm9sIGZpZWxkcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBvbmx5IGNsZWFyIHRoZSBhcmNoaXRlY3R1cmFsbHkgdW5kZWZpbmVkIGZpZWxkcy4gVGhpcyBcJiMzNDt1bmRlZmluZWRcJiMzNDsgc3RhdGUgcmVmZXJzIHRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBub3QgQy1sZXZlbCB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIFZNQ0IgcGFnZSBpdHNlbGYgaXMgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwmIzM5O3MgcGVyc3BlY3RpdmUpLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBrZXJuZWwgYWxsb2NhdGlvbnMgKHN0YWNrLCBoZWFwKSBhbmQgd291bGQgbm90IGRldGVjdCBoYXJkd2FyZS1sZXZlbCB1bmRlZmluZWQgc3RhdGUgaW4gYW4gYWxyZWFkeS1hbGxvY2F0ZWQgcGFnZS4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgbG9naWMgYnVnIGZpeCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgYnkgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgU0hVVERPV04gaW50ZXJjZXB0IGluIEtWTSBTVk0gYnkgYXZvaWRpbmcgY2xlYXJpbmcgdGhlIGVudGlyZSBWTUNCIHBhZ2UgYW5kIGluc3RlYWQgb25seSBjbGVhcmluZyB0aGUgc2F2ZSBhcmVhIGFuZCBzcGVjaWZpYyBjb250cm9sIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gaHlwZXJ2aXNvciB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZ3Vlc3QgYWN0aW9ucyAoZS5nLiwgYSB0cmlwbGUgZmF1bHQgY2F1c2luZyBhIHNodXRkb3duKSwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDgxNWI5YTUxNzY1OGIwZTFlNzA2NTI3YjE2NjlkYjg1NDcyNDQwZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNjoyNDo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggOWQ2MDdiOThiZDA2Ny4uY2I1ZTA0ZmQ1MThmNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC0yMTY0LDE4ICYjNDM7MjE2NCwyMyBAQCBzdGF0aWMgaW50IHNodXRkb3duX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXG4gXG4gXHQvKlxuLVx0ICogVk1DQiBpcyB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQuICBJTklUIHRoZSB2Q1BVIHRvIHB1dFxuLVx0ICogdGhlIFZNQ0IgaW4gYSBrbm93biBnb29kIHN0YXRlLiAgVW5mb3J0dWF0ZWx5LCBLVk0gZG9lc24mIzM5O3QgaGF2ZVxuLVx0ICogS1ZNX01QX1NUQVRFX1NIVVRET1dOIGFuZCBjYW4mIzM5O3QgYWRkIGl0IHdpdGhvdXQgcG90ZW50aWFsbHkgYnJlYWtpbmdcbi1cdCAqIHVzZXJzcGFjZS4gIEF0IGEgcGxhdGZvcm0gdmlldywgSU5JVCBpcyBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzXG4tXHQgKiB0aGVyZSBleGlzdCBiYXJlIG1ldGFsIHBsYXRmb3JtcyB0aGF0IGF1dG9tYXRpY2FsbHkgSU5JVCB0aGUgQ1BVXG4tXHQgKiBpbiByZXNwb25zZSB0byBzaHV0ZG93bi5cbiYjNDM7XHQgKiBUaGUgVk1DQiBzYXZlIGFyZWEgaXMgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LCBhcyBhcmVcbiYjNDM7XHQgKiBjb250cm9sIGFyZWEgb2Zmc2V0cyA2MGgsIDYxaCwgYW5kIDY4aCAoaW50X2N0bFsxNTowXSBhbmQgaW50X3N0YXRlKS5cbiYjNDM7XHQgKiBJTklUIHRoZSB2Q1BVIHRvIHB1dCB0aGUgVk1DQiBpbiBhIGtub3duIGdvb2Qgc3RhdGUuICBVbmZvcnR1YXRlbHksXG4mIzQzO1x0ICogS1ZNIGRvZXNuJiMzOTt0IGhhdmUgS1ZNX01QX1NUQVRFX1NIVVRET1dOIGFuZCBjYW4mIzM5O3QgYWRkIGl0IHdpdGhvdXRcbiYjNDM7XHQgKiBwb3RlbnRpYWxseSBicmVha2luZyB1c2Vyc3BhY2UuICBBdCBhIHBsYXRmb3JtIHZpZXcsIElOSVQgaXNcbiYjNDM7XHQgKiBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXRcbiYjNDM7XHQgKiBhdXRvbWF0aWNhbGx5IElOSVQgdGhlIENQVSBpbiByZXNwb25zZSB0byBzaHV0ZG93bi5cbiBcdCAqXG4gXHQgKiBUaGUgVk0gc2F2ZSBhcmVhIGZvciBTRVYtRVMgZ3Vlc3RzIGhhcyBhbHJlYWR5IGJlZW4gZW5jcnlwdGVkIHNvIGl0XG4gXHQgKiBjYW5ub3QgYmUgcmVpbml0aWFsaXplZCwgaS5lLiBzeW50aGVzaXppbmcgSU5JVCBpcyBmdXRpbGUuXG4gXHQgKi9cbiBcdGlmICghaXNfc2V2X2VzX2d1ZXN0KHZjcHUpKSB7XG4tXHRcdGNsZWFyX3BhZ2Uoc3ZtLVx1MDAzZXZtY2IpO1xuJiM0MztcdFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbDtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQoXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZSwgMCwgc2l6ZW9mKHN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUpKTtcbiYjNDM7XHRcdGNvbnRyb2wtXHUwMDNlaW50X2N0bCBcdTAwMjY9IH5HRU5NQVNLKDE1LCAwKTtcbiYjNDM7XHRcdGNvbnRyb2wtXHUwMDNlaW50X3N0YXRlID0gMDtcbiAjaWZkZWYgQ09ORklHX0tWTV9TTU1cbiBcdFx0aWYgKGlzX3NtbSh2Y3B1KSlcbiBcdFx0XHRrdm1fc21tX2NoYW5nZWQodmNwdSwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NodXRkb3duX2ludGVyY2VwdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIFNIVVRET1dOIGludGVyY2VwdCBpbiBLVk0gU1ZNIGJ5IGF2b2lkaW5nIGNsZWFyaW5nIHRoZSBlbnRpcmUgVk1DQiBwYWdlIGFuZCBpbnN0ZWFkIG9ubHkgY2xlYXJpbmcgdGhlIHNhdmUgYXJlYSBhbmQgc3BlY2lmaWMgY29udHJvbCBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIGh5cGVydmlzb3IgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGd1ZXN0IGFjdGlvbnMgKGUuZy4sIGEgdHJpcGxlIGZhdWx0IGNhdXNpbmcgYSBzaHV0ZG93biksIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4MTViOWE1MTc2NThiMGUxZTcwNjUyN2IxNjY5ZGI4NTQ3MjQ0MGQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTY6MjQ6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwppbmRleCA5ZDYwN2I5OGJkMDY3Li5jYjVlMDRmZDUxOGY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKQEAgLTIxNjQsMTggJiM0MzsyMTY0LDIzIEBAIHN0YXRpYyBpbnQgc2h1dGRvd25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAogCiAJLyoKLQkgKiBWTUNCIGlzIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdC4gIElOSVQgdGhlIHZDUFUgdG8gcHV0Ci0JICogdGhlIFZNQ0IgaW4gYSBrbm93biBnb29kIHN0YXRlLiAgVW5mb3J0dWF0ZWx5LCBLVk0gZG9lc24mIzM5O3QgaGF2ZQotCSAqIEtWTV9NUF9TVEFURV9TSFVURE9XTiBhbmQgY2FuJiMzOTt0IGFkZCBpdCB3aXRob3V0IHBvdGVudGlhbGx5IGJyZWFraW5nCi0JICogdXNlcnNwYWNlLiAgQXQgYSBwbGF0Zm9ybSB2aWV3LCBJTklUIGlzIGFjY2VwdGFibGUgYmVoYXZpb3IgYXMKLQkgKiB0aGVyZSBleGlzdCBiYXJlIG1ldGFsIHBsYXRmb3JtcyB0aGF0IGF1dG9tYXRpY2FsbHkgSU5JVCB0aGUgQ1BVCi0JICogaW4gcmVzcG9uc2UgdG8gc2h1dGRvd24uCiYjNDM7CSAqIFRoZSBWTUNCIHNhdmUgYXJlYSBpcyB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQsIGFzIGFyZQomIzQzOwkgKiBjb250cm9sIGFyZWEgb2Zmc2V0cyA2MGgsIDYxaCwgYW5kIDY4aCAoaW50X2N0bFsxNTowXSBhbmQgaW50X3N0YXRlKS4KJiM0MzsJICogSU5JVCB0aGUgdkNQVSB0byBwdXQgdGhlIFZNQ0IgaW4gYSBrbm93biBnb29kIHN0YXRlLiAgVW5mb3J0dWF0ZWx5LAomIzQzOwkgKiBLVk0gZG9lc24mIzM5O3QgaGF2ZSBLVk1fTVBfU1RBVEVfU0hVVERPV04gYW5kIGNhbiYjMzk7dCBhZGQgaXQgd2l0aG91dAomIzQzOwkgKiBwb3RlbnRpYWxseSBicmVha2luZyB1c2Vyc3BhY2UuICBBdCBhIHBsYXRmb3JtIHZpZXcsIElOSVQgaXMKJiM0MzsJICogYWNjZXB0YWJsZSBiZWhhdmlvciBhcyB0aGVyZSBleGlzdCBiYXJlIG1ldGFsIHBsYXRmb3JtcyB0aGF0CiYjNDM7CSAqIGF1dG9tYXRpY2FsbHkgSU5JVCB0aGUgQ1BVIGluIHJlc3BvbnNlIHRvIHNodXRkb3duLgogCSAqCiAJICogVGhlIFZNIHNhdmUgYXJlYSBmb3IgU0VWLUVTIGd1ZXN0cyBoYXMgYWxyZWFkeSBiZWVuIGVuY3J5cHRlZCBzbyBpdAogCSAqIGNhbm5vdCBiZSByZWluaXRpYWxpemVkLCBpLmUuIHN5bnRoZXNpemluZyBJTklUIGlzIGZ1dGlsZS4KIAkgKi8KIAlpZiAoIWlzX3Nldl9lc19ndWVzdCh2Y3B1KSkgewotCQljbGVhcl9wYWdlKHN2bS0mZ3Q7dm1jYik7CiYjNDM7CQlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSAmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7Y29udHJvbDsKJiM0MzsKJiM0MzsJCW1lbXNldCgmYW1wO3N2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZSwgMCwgc2l6ZW9mKHN2bS0mZ3Q7dm1jYi0mZ3Q7c2F2ZSkpOwomIzQzOwkJY29udHJvbC0mZ3Q7aW50X2N0bCAmYW1wOz0gfkdFTk1BU0soMTUsIDApOwomIzQzOwkJY29udHJvbC0mZ3Q7aW50X3N0YXRlID0gMDsKICNpZmRlZiBDT05GSUdfS1ZNX1NNTQogCQlpZiAoaXNfc21tKHZjcHUpKQogCQkJa3ZtX3NtbV9jaGFuZ2VkKHZjcHUsIGZhbHNlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBLVk0gU1ZNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYXJjaC94ODYva3ZtL3N2bS9zdm0uY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gdGhlIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IHRoZSBgc3ZtLSZndDt2bWNiYCBpcyBoYW5kbGVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiBJdCBsb29rcyBsaWtlIGluc3RlYWQgb2YgY29tcGxldGVseSB3aXBpbmcgdGhlIGB2bWNiYCBwYWdlIHdpdGggYGNsZWFyX3BhZ2VgLCBpdCYjMzk7cyBub3cgc2VsZWN0aXZlbHkgemVyb2luZyBvdXQgdGhlIGB2bWNiLSZndDtzYXZlYCBhcmVhIGFuZCBzcGVjaWZpYyBjb250cm9sIGZpZWxkczogYGNvbnRyb2wtJmd0O2ludF9jdGxgIGFuZCBgY29udHJvbC0mZ3Q7aW50X3N0YXRlYC4gVGhpcyBpcyBhIGNsZWFyIG9wdGltaXphdGlvbiBzdHJhdGVneSwgcmF0aGVyIHRoYW4gYSBidWcgZml4LCB0byBhdm9pZCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBmcm9tIGNsZWFyaW5nIHRoZSBlbnRpcmUgcGFnZSwgYW5kIGxlYXZpbmcgdGhlIGFyZWFzIGZvciBjb250cm9sIGludGFjdC4KCk15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7U21hcnQgbW92ZS4mIzM0OyBDbGVhcmluZyB0aGUgd2hvbGUgcGFnZSBpcyBicnV0ZSBmb3JjZSBhbmQgcG90ZW50aWFsbHkgZGVzdHJ1Y3RpdmUsIGVzcGVjaWFsbHkgaWYgb3RoZXIgY3JpdGljYWwgZGF0YSByZXNpZGVzIHdpdGhpbiB0aGF0IGB2bWNiYCB0aGF0IHdlIG1pZ2h0IHdhbnQgdG8gcHJlc2VydmUuIFNlbGVjdGl2ZSBjbGVhcmluZyBpcyB0aGUgYmV0dGVyIGFwcHJvYWNoIGZyb20gYSBzdGFiaWxpdHkgcGVyc3BlY3RpdmUuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGlzIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgZnVydGhlci4gSXMgdGhpcyBjb2RlIHBhdGggZXZlbiByZWFjaGFibGU/IEFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaXMgaXQgZnV6emFibGU/IEtWTSBTVk0sIEkmIzM5O20gcHJldHR5IHN1cmUgaXQgaXMuIFllcywgS1ZNIFNWTSBpcyBmdXp6YWJsZS4gV2Ugc2hvdWxkIGFsd2F5cyBjaGVjay4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSBpdC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBLVk1fQU1EYCBpcyB0aGUgb25lLiBZZXAsIGEgcXVpY2sgcGVlayBhdCBgYXJjaC94ODYva3ZtL0tjb25maWdgIGNvbmZpcm1zIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NodXRkb3duX2ludGVyY2VwdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zdm0uYz0yMTU1PXN0YXRpYyBpbnQgbWNfaW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIxNTktXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjIxNjA6c3RhdGljIGludCBzaHV0ZG93bl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMTYxLXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTMzNDc9c3RhdGljIGludCAoKmNvbnN0IHN2bV9leGl0X2hhbmRsZXJzW10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzk0LVx0W1NWTV9FWElUX1RBU0tfU1dJVENIXVx0XHRcdD0gdGFza19zd2l0Y2hfaW50ZXJjZXB0aW9uLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzozMzk1Olx0W1NWTV9FWElUX1NIVVRET1dOXVx0XHRcdD0gc2h1dGRvd25faW50ZXJjZXB0aW9uLFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzk2LVx0W1NWTV9FWElUX1ZNUlVOXVx0XHRcdD0gdm1ydW5faW50ZXJjZXB0aW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU2h1dGRvd24gSW50ZXJjZXB0aW9uIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgY2xlYXJseSBzZXQgdXAgYXMgYW4gZXhpdCBoYW5kbGVyIGZvciBgU1ZNX0VYSVRfU0hVVERPV05gLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBndWVzdCDigJMgeW91IGtub3csIHRoZSB2aXJ0dWFsIG1hY2hpbmUg4oCTIGluaXRpYXRlcyBhIHNodXRkb3duLiAgVGhpcyBpbmNsdWRlcyB0aG9zZSBsb3ZlbHksIGFuZCBvZnRlbiBicnV0YWwsIHRyaXBsZSBmYXVsdCBzY2VuYXJpb3MgdGhhdCBjYW4gaGFwcGVuIHdoZW4gdGhpbmdzIGdvIHNpZGV3YXlzIGluIHRoZSBndWVzdC4gIE15IHByaW1hcnkgY29uY2VybiBub3cgaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBpcyBjb25maWd1cmVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgaXQuICBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBmdWxseSBncmFzcCBpdHMgYmVoYXZpb3IuIExldCYjMzk7cyBnZXQgdG8gd29yayBvbiBmaW5kaW5nIHRob3NlIGNvbmZpZyBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQU1EJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXHRib29sIFwmIzM0O0FNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIHNwZWNpZmllcyBgS1ZNX0FNRGAuIFJpZ2h0LCByaWdodC4gQ2xlYXJseSwgd2UgbmVlZCB0byBicmluZyBpbiBgS1ZNYCBpdHNlbGYgYXMgYSBmb3VuZGF0aW9uYWwgZWxlbWVudCwgdGhlIGJhc2UgY29uZmlnIHVwb24gd2hpY2ggYEtWTV9BTURgIGxpa2VseSBidWlsZHMuIEl0IHdvdWxkIGJlIGZvb2xpc2ggdG8gaWdub3JlIHRoYXQuCgpOb3csIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb2YgYEtWTV9BTURgLCBteSBuZXh0IHN0ZXAgaXMgb2J2aW91cy4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgeDg2IEtWTSBtb2R1bGUuIFRoYXQgc2hvdWxkIGJlIGxvY2F0ZWQgYXQgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgdHJ1dGggbGllcy4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgdGhlIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIEtjb25maWcgZm9yIHg4NiBLVk0gQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEtWTSBpcyBjb25maWd1cmVkIGZvciB4ODYgc3lzdGVtcywgc3BlY2lmaWNhbGx5IGZyb20gYSBmZWF0dXJlIG9yIGludGVncmF0aW9uIHBlcnNwZWN0aXZlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gdGhpbmtpbmcgdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZSBpcyBhIGxpa2VseSBzdGFydGluZyBwb2ludC4gTGluZSAxNDYuLi4gaG1tLCBJJiMzOTtsbCBuZWVkIHRvIGp1bXAgdGhlcmUgYW5kIGdldCBteSBiZWFyaW5ncy4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGxpbmUgd2lsbCB0b3VjaCBvbiB0aGUgcmVsZXZhbnQgb3B0aW9ucyBmb3IgS1ZNJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBhbmQgYXNzb2NpYXRlZCB2YXJpYWJsZXMgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGJldHRlciB1bmRlcnN0YW5kIGhvdyB0byBjb25maWd1cmUgdGhlIEtWTSBzZXR0aW5ncyBpbiB0aGF0IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0aGVscFxuIDE0MTpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWClcbiAxNDI6XHRcdCAgY29uZmlkZW50aWFsIFZNcyBvbiBJbnRlbCBwcm9jZXNzb3JzLlxuIDE0MzpcdFxuIDE0NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDE0NTpcdFxuIDE0NjpcdGNvbmZpZyBLVk1fQU1EXG4gMTQ3Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbiAxNDg6XHRcdGRlcGVuZHMgb24gS1ZNIFx1MDAyNlx1MDAyNiAoQ1BVX1NVUF9BTUQgfHwgQ1BVX1NVUF9IWUdPTilcbiAxNDk6XHRcdGhlbHBcbiAxNTA6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIEFNRCBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggdGhlIEFNRC1WXG4gMTUxOlx0XHQgIChTVk0pIGV4dGVuc2lvbnMuXG4gMTUyOlx0XG4gMTUzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDE1NDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLlxuIDE1NTpcdFxuIDE1NjpcdGNvbmZpZyBLVk1fQU1EX1NFVlxuIDE1NzpcdFx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4gMTU4Olx0XHRkZWZhdWx0IHlcbiAxNTk6XHRcdGRlcGVuZHMgb24gS1ZNX0FNRCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFzc2Vzc2luZyB0aGUgSHlwZXJ2aXNvciBSZXF1aXJlbWVudHMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBuZWNlc3NhcnkgY29tcG9uZW50cyBmb3IgdGhpcyBzZXR1cC4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGggYSBLVk0gZW52aXJvbm1lbnQsIGFuZCBzaW5jZSB0aGUgbWVudGlvbiBvZiBBTUQgaXMgcHJvbWluZW50LCBgS1ZNYCwgYEtWTV9BTURgLCBhbmQgYENQVV9TVVBfQU1EYCBhcmUgZ29pbmcgdG8gYmUga2V5IHBpZWNlcyBvZiB0aGUgcHV6emxlLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBgQ1BVX1NVUF9BTURgIHRvIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlIHN1cHBvcnQgZm9yIHRoZSBhcmNoaXRlY3R1cmUgaXMgaW4gcGxhY2UuIEl0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwb2ludCB0byB2ZXJpZnkgZWFybHkgYW5kIHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDUFVfU1VQX0FNRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcuY3B1JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcuY3B1PTMxNj1jb25maWcgQ1BVX1NVUF9DWVJJWF8zMlxuLS1cbmFyY2gveDg2L0tjb25maWcuY3B1LTMyOS1cbmFyY2gveDg2L0tjb25maWcuY3B1OjMzMDpjb25maWcgQ1BVX1NVUF9BTURcbmFyY2gveDg2L0tjb25maWcuY3B1LTMzMS1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTY2CgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyB0aGUgZGVmYXVsdCBzZXR0aW5nIGhlcmUgaXMgY2xlYXJseSBgeWAsIHdoaWNoIGlzIGdvb2QgdG8ga25vdyByaWdodCBvZmYgdGhlIGJhdC4gVGhhdCBtZWFucyBqdXN0IHNwZWNpZnlpbmcgYEtWTWAgYW5kIGBLVk1fQU1EYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGludGVuZGVkIHB1cnBvc2UuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgZ29pbmcgdG8gYmUgdGhlIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIG9mIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgcmVzaWRlcywgYW5kIGl0IHNlZW1zIHRvIGFkZHJlc3MgYSBidWcgcmVsYXRlZCB0byBgY2xlYXJfcGFnZShzdm0tJmd0O3ZtY2IpYCBwb3RlbnRpYWxseSB3aXBpbmcgbW9yZSB0aGFuIGl0IHNob3VsZC4gVGhpcyB0eXBlIG9mIGZpeCBpcyAqZGVmaW5pdGVseSogd29ydGggcHV0dGluZyB0aHJvdWdoIHRoZSBmdXp6aW5nIHByb2Nlc3MgdG8gZW5zdXJlIGl0IGhvbGRzIHVwIHVuZGVyIHN0cmVzcyBhbmQgcmV2ZWFscyBhbnl0aGluZyB1bmV4cGVjdGVkLgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgc2h1dGRvd25faW50ZXJjZXB0aW9uYCBpcyB0aGUgKm9ubHkqIGZ1bmN0aW9uIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBZZWFoLCBqdXN0IHRoYXQgb25lLiBFeGNlbGxlbnQuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGRvY3VtZW50IHRoZXNlIGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaHV0ZG93bl9pbnRlcmNlcHRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBTSFVURE9XTiBpbnRlcmNlcHQgaW4gS1ZNIFNWTSBieSBhdm9pZGluZyBjbGVhcmluZyB0aGUgZW50aXJlIFZNQ0IgcGFnZSBhbmQgaW5zdGVhZCBvbmx5IGNsZWFyaW5nIHRoZSBzYXZlIGFyZWEgYW5kIHNwZWNpZmljIGNvbnRyb2wgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBoeXBlcnZpc29yIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBndWVzdCBhY3Rpb25zIChlLmcuLCBhIHRyaXBsZSBmYXVsdCBjYXVzaW5nIGEgc2h1dGRvd24pLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NodXRkb3duX2ludGVyY2VwdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIFNIVVRET1dOIGludGVyY2VwdCBpbiBLVk0gU1ZNIGJ5IGF2b2lkaW5nIGNsZWFyaW5nIHRoZSBlbnRpcmUgVk1DQiBwYWdlIGFuZCBpbnN0ZWFkIG9ubHkgY2xlYXJpbmcgdGhlIHNhdmUgYXJlYSBhbmQgc3BlY2lmaWMgY29udHJvbCBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIGh5cGVydmlzb3IgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGd1ZXN0IGFjdGlvbnMgKGUuZy4sIGEgdHJpcGxlIGZhdWx0IGNhdXNpbmcgYSBzaHV0ZG93biksIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gbG9naWMgaXNzdWUgd2hlcmUgdGhlIEFNRCBTVk0gYXJjaGl0ZWN0dXJlIGxlYXZlcyBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgVk1DQiAodGhlIHNhdmUgYXJlYSBhbmQgY2VydGFpbiBjb250cm9sIGZpZWxkcykgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiBQcmV2aW91c2x5LCBLVk0gY2xlYXJlZCB0aGUgZW50aXJlIFZNQ0IgcGFnZSwgd2hpY2ggbGlrZWx5IGRlc3Ryb3llZCBvdGhlciB2YWxpZCBjb250cm9sIGZpZWxkcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBvbmx5IGNsZWFyIHRoZSBhcmNoaXRlY3R1cmFsbHkgdW5kZWZpbmVkIGZpZWxkcy4gVGhpcyBcJiMzNDt1bmRlZmluZWRcJiMzNDsgc3RhdGUgcmVmZXJzIHRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBub3QgQy1sZXZlbCB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIFZNQ0IgcGFnZSBpdHNlbGYgaXMgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwmIzM5O3MgcGVyc3BlY3RpdmUpLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBrZXJuZWwgYWxsb2NhdGlvbnMgKHN0YWNrLCBoZWFwKSBhbmQgd291bGQgbm90IGRldGVjdCBoYXJkd2FyZS1sZXZlbCB1bmRlZmluZWQgc3RhdGUgaW4gYW4gYWxyZWFkeS1hbGxvY2F0ZWQgcGFnZS4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgbG9naWMgYnVnIGZpeCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgYnkgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgxNWI5YTUxNzY1OGIwZTFlNzA2NTI3YjE2NjlkYjg1NDcyNDQwZDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxNjoyNDo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IDlkNjA3Yjk4YmQwNjcuLmNiNWUwNGZkNTE4ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwpAQCAtMjE2NCwxOCAmIzQzOzIxNjQsMjMgQEAgc3RhdGljIGludCBzaHV0ZG93bl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCiAKIAkvKgotCSAqIFZNQ0IgaXMgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiAgSU5JVCB0aGUgdkNQVSB0byBwdXQKLQkgKiB0aGUgVk1DQiBpbiBhIGtub3duIGdvb2Qgc3RhdGUuICBVbmZvcnR1YXRlbHksIEtWTSBkb2VzbiYjMzk7dCBoYXZlCi0JICogS1ZNX01QX1NUQVRFX1NIVVRET1dOIGFuZCBjYW4mIzM5O3QgYWRkIGl0IHdpdGhvdXQgcG90ZW50aWFsbHkgYnJlYWtpbmcKLQkgKiB1c2Vyc3BhY2UuICBBdCBhIHBsYXRmb3JtIHZpZXcsIElOSVQgaXMgYWNjZXB0YWJsZSBiZWhhdmlvciBhcwotCSAqIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXQgYXV0b21hdGljYWxseSBJTklUIHRoZSBDUFUKLQkgKiBpbiByZXNwb25zZSB0byBzaHV0ZG93bi4KJiM0MzsJICogVGhlIFZNQ0Igc2F2ZSBhcmVhIGlzIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdCwgYXMgYXJlCiYjNDM7CSAqIGNvbnRyb2wgYXJlYSBvZmZzZXRzIDYwaCwgNjFoLCBhbmQgNjhoIChpbnRfY3RsWzE1OjBdIGFuZCBpbnRfc3RhdGUpLgomIzQzOwkgKiBJTklUIHRoZSB2Q1BVIHRvIHB1dCB0aGUgVk1DQiBpbiBhIGtub3duIGdvb2Qgc3RhdGUuICBVbmZvcnR1YXRlbHksCiYjNDM7CSAqIEtWTSBkb2VzbiYjMzk7dCBoYXZlIEtWTV9NUF9TVEFURV9TSFVURE9XTiBhbmQgY2FuJiMzOTt0IGFkZCBpdCB3aXRob3V0CiYjNDM7CSAqIHBvdGVudGlhbGx5IGJyZWFraW5nIHVzZXJzcGFjZS4gIEF0IGEgcGxhdGZvcm0gdmlldywgSU5JVCBpcwomIzQzOwkgKiBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXQKJiM0MzsJICogYXV0b21hdGljYWxseSBJTklUIHRoZSBDUFUgaW4gcmVzcG9uc2UgdG8gc2h1dGRvd24uCiAJICoKIAkgKiBUaGUgVk0gc2F2ZSBhcmVhIGZvciBTRVYtRVMgZ3Vlc3RzIGhhcyBhbHJlYWR5IGJlZW4gZW5jcnlwdGVkIHNvIGl0CiAJICogY2Fubm90IGJlIHJlaW5pdGlhbGl6ZWQsIGkuZS4gc3ludGhlc2l6aW5nIElOSVQgaXMgZnV0aWxlLgogCSAqLwogCWlmICghaXNfc2V2X2VzX2d1ZXN0KHZjcHUpKSB7Ci0JCWNsZWFyX3BhZ2Uoc3ZtLSZndDt2bWNiKTsKJiM0MzsJCXN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9ICZhbXA7c3ZtLSZndDt2bWNiLSZndDtjb250cm9sOwomIzQzOwomIzQzOwkJbWVtc2V0KCZhbXA7c3ZtLSZndDt2bWNiLSZndDtzYXZlLCAwLCBzaXplb2Yoc3ZtLSZndDt2bWNiLSZndDtzYXZlKSk7CiYjNDM7CQljb250cm9sLSZndDtpbnRfY3RsICZhbXA7PSB+R0VOTUFTSygxNSwgMCk7CiYjNDM7CQljb250cm9sLSZndDtpbnRfc3RhdGUgPSAwOwogI2lmZGVmIENPTkZJR19LVk1fU01NCiAJCWlmIChpc19zbW0odmNwdSkpCiAJCQlrdm1fc21tX2NoYW5nZWQodmNwdSwgZmFsc2UpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIFBhdGNoOiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgQ29uY2VybnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB0aGUgYHNodXRkb3duX2ludGVyY2VwdGlvbmAgZnVuY3Rpb24gd2l0aGluIHRoZSBBTUQgU1ZNIEtWTSBjb2RlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlcGxhY2luZyBhIGBjbGVhcl9wYWdlKHN2bS0mZ3Q7dm1jYilgIGNhbGwgd2l0aCBhIG1vcmUgdGFyZ2V0ZWQgY2xlYXJpbmcgb2Ygb25seSB0aGUgYHNhdmVgIGFyZWEgYW5kIHNvbWUgc3BlY2lmaWMgZmllbGRzIHdpdGhpbiB0aGUgYGNvbnRyb2xgIGFyZWEgb2YgdGhlIFZNQ0IuIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoaXMgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UmIzM5O3JlICpub3QqIHplcm9pbmcgdGhlIGVudGlyZSBWTUNCIGFueW1vcmU7IHdlJiMzOTtyZSBsZWF2aW5nIHNvbWUgb2YgaXQgdW50b3VjaGVkLgoKTXkgZmlyc3QgY29uY2VybiB3YXMgdGhhdCB0aGlzIGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB0aGUgZ3Vlc3Qgb3IgcG90ZW50aWFsbHkgdG8gdXNlcnNwYWNlIGlmIHNvbWV0aGluZyB3ZXJlIHRvIHJlYWQgaXQuIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGF0IHRoZSBoYXJkd2FyZSBsZWF2ZXMgdGhlIHNhdmUgYXJlYSBhbmQgY2VydGFpbiBjb250cm9sIGFyZWEgb2Zmc2V0cyB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQuIFRoYXQmIzM5O3MgdGhlIGtleS4gQnV0IHRoZW4gSSBxdWlja2x5IHJlYWxpemVkLCBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUsIHRoaXMgaXNuJiMzOTt0ICp0cnVseSogdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIEMgc2Vuc2UuIElmIHRoZSBtZW1vcnkgaGFkIGJlZW4gYWxsb2NhdGVkIGFuZCB1c2VkIGJlZm9yZSwgaXQgYWxyZWFkeSAqaGFkKiB2YWx1ZXMg4oCTIGl0IHdhcyBqdXN0IHJldGFpbmluZyAmIzM0O29sZCYjMzQ7IHZhbHVlcyBmcm9tIGEgcHJldmlvdXMgc3RhdGUuICBLTVNBTiB3b3VsZG4mIzM5O3QgdHJhY2sgdGhlIHZhbHVlcyB3cml0dGVuIGJ5IHRoZSBoYXJkd2FyZSBhcyB1bmluaXRpYWxpemVkLCB1bmxlc3MgaXQgaGFkIGEgc3BlY2lhbCBob29rIGZvciB0aGF0LgoKVGhlIGtleSBpcyB0aGF0IHRoZSBwcmlvciBgY2xlYXJfcGFnZWAgd2FzIGVmZmVjdGl2ZWx5IGluaXRpYWxpemluZyB0aGUgZW50aXJlIFZNQ0IsIGFuZCBub3cgd2UgYXJlIG9ubHkgaW5pdGlhbGl6aW5nIGEgc21hbGwgcGFydCBvZiBpdC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcG90ZW50aWFsIHJpc2sgbGllcy4KCkhvd2V2ZXIsIGFmdGVyIGEgYml0IG1vcmUgdGhvdWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIFZNQ0IgaXMgKmFjdHVhbGx5KiB1c2VkLiBJZiBgY2xlYXJfcGFnZWAgKndhcyogdXNlZCwgdGhlIGVudGlyZSBWTUNCIHdvdWxkIGhhdmUgYmVlbiB6ZXJvZWQuIFRoZW4sIGBrdm1fdmNwdV9yZXNldGAgd291bGQgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyLCByZS1pbml0aWFsaXppbmcgdGhlIHRoaW5ncyB0aGUgS1ZNIGNvcmUgbmVlZHMuIFRoaXMgY29udGV4dCBpcyBpbXBvcnRhbnQuCgpTbywgdGhlIHBhdGNoIGlzIGxpa2VseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgY2xlYXJpbmcgb2YgcGFydHMgb2YgdGhlIFZNQ0IgdGhhdCBLVk0gd2FudHMgdG8gcmV0YWluIHRocm91Z2ggYSBzaHV0ZG93biBpbnRlcmNlcHQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgbGVhdmluZyB0aGUgJiMzNDtvbGQmIzM0OyBkYXRhIGluIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgVk1DQiBpcyBzYWZlLiBJdCYjMzk7cyBwcm9iYWJseSBzYWZlIGJlY2F1c2UgdGhlIG1lbW9yeSBpcyBhbHJlYWR5ICppbml0aWFsaXplZCogd2l0aCB2YWx1ZXMsIGJ1dCB0aGUgc2VtYW50aWNzIGhhdmUgY2hhbmdlZC4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFdlIHNob3VsZCBsb29rIGRlZXBlciBhdCBob3cgdGhpcyBjaGFuZ2VzIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGFuZCBga3ZtX3ZjcHVfcmVzZXRgLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBwaWVjZSBoZXJlOiBpcyB0aGVyZSBhIHJpc2sgb2Ygc3RhbGUgZGF0YSBiZWluZyBpbmNvcnJlY3RseSBpbnRlcnByZXRlZCBhZnRlciB0aGUgaW50ZXJjZXB0IGJlZm9yZSB0aGUgZnVsbCBWTUNCIHJlLWluaXRpYWxpemF0aW9uPyBUaGUgb3JpZ2luYWwgYGNsZWFyX3BhZ2VgIHdhcyBpbml0aWFsaXppbmcgdGhlIGNvbnRyb2wgYXJlYSwgd2hpY2ggaXMgd2hhdCBLVk0gbmVlZHMsIGFuZCB0aGlzIG1lYW5zIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBzYW1lIHRoaW5ncyBhcmUgc2V0IHRocm91Z2ggdGhpcyBuZXcgbWV0aG9kLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIGRlZXBlciBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUg4oCTIHBhcnRpY3VsYXJseSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIOKAkyBpcyByZXF1aXJlZCB0byBiZSBzdXJlIHdlIGFyZSBub3QgaW50cm9kdWNpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGZyb20gYSBzdGFsZS1kYXRhIHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHV0ZG93bl9pbnRlcmNlcHRpb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjE1NT1zdGF0aWMgaW50IG1jX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0yMTU5LVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMTYwOnN0YXRpYyBpbnQgc2h1dGRvd25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMjE2MS17XG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzQ3PXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzM5NC1cdFtTVk1fRVhJVF9UQVNLX1NXSVRDSF1cdFx0XHQ9IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6MzM5NTpcdFtTVk1fRVhJVF9TSFVURE9XTl1cdFx0XHQ9IHNodXRkb3duX2ludGVyY2VwdGlvbixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzM5Ni1cdFtTVk1fRVhJVF9WTVJVTl1cdFx0XHQ9IHZtcnVuX2ludGVyY2VwdGlvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA4NgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNodXRkb3duX2ludGVyY2VwdGlvbmAgaW4gYHN2bS5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHg4Ni9LVk0vU1ZNIHN5c3RlbSBoYW5kbGVzIGd1ZXN0IHNodXRkb3ducy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRlZCBvdmVyIHRvIGBhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jYCB0byBsb29rIGF0IHRoaXMgZnVuY3Rpb24uIEkga25vdyB0aGlzIGFyZWEgaW50aW1hdGVseSwgc28gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBsb3ctbGV2ZWwgQU1EIFNlY3VyZSBWaXJ0dWFsIE1hY2hpbmUgc3BlY2lmaWMgY29kZSB0aGF0IG1hbmFnZXMgdGhpcy4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgd2lsbCBiZSBjaGVja3MgZm9yIHNwZWNpZmljIFZNIGV4aXQgcmVhc29ucyByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgaW5zdHJ1Y3Rpb25zIG9yIHBvc3NpYmx5IGV2ZW4gQUNQSSBldmVudHMgdGhhdCB0cmlnZ2VyIGEgc2h1dGRvd24uIEkmIzM5O20gYWxzbyBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBob3N0JiMzOTtzIHBvd2VyIG1hbmFnZW1lbnQgZmVhdHVyZXMgYW5kIGhvdyB0aGUgU1ZNIGVudmlyb25tZW50IG1hcHMgdGhlbS4gTGV04oCZcyBzZWUgaG93IHRoaXMgYWxsIGNvbWVzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNjA6XHRzdGF0aWMgaW50IHNodXRkb3duX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4yMTYxOlx0e1xuMjE2MjpcdFx0c3RydWN0IGt2bV9ydW4gKmt2bV9ydW4gPSB2Y3B1LVx1MDAzZXJ1bjtcbjIxNjM6XHRcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xuMjE2NDpcdFxuMjE2NTpcdFxuMjE2NjpcdFx0LypcbjIxNjc6XHRcdCAqIFRoZSBWTUNCIHNhdmUgYXJlYSBpcyB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQsIGFzIGFyZVxuMjE2ODpcdFx0ICogY29udHJvbCBhcmVhIG9mZnNldHMgNjBoLCA2MWgsIGFuZCA2OGggKGludF9jdGxbMTU6MF0gYW5kIGludF9zdGF0ZSkuXG4yMTY5Olx0XHQgKiBJTklUIHRoZSB2Q1BVIHRvIHB1dCB0aGUgVk1DQiBpbiBhIGtub3duIGdvb2Qgc3RhdGUuICBVbmZvcnR1YXRlbHksXG4yMTcwOlx0XHQgKiBLVk0gZG9lc24mIzM5O3QgaGF2ZSBLVk1fTVBfU1RBVEVfU0hVVERPV04gYW5kIGNhbiYjMzk7dCBhZGQgaXQgd2l0aG91dFxuMjE3MTpcdFx0ICogcG90ZW50aWFsbHkgYnJlYWtpbmcgdXNlcnNwYWNlLiAgQXQgYSBwbGF0Zm9ybSB2aWV3LCBJTklUIGlzXG4yMTcyOlx0XHQgKiBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXRcbjIxNzM6XHRcdCAqIGF1dG9tYXRpY2FsbHkgSU5JVCB0aGUgQ1BVIGluIHJlc3BvbnNlIHRvIHNodXRkb3duLlxuMjE3NDpcdFx0ICpcbjIxNzU6XHRcdCAqIFRoZSBWTSBzYXZlIGFyZWEgZm9yIFNFVi1FUyBndWVzdHMgaGFzIGFscmVhZHkgYmVlbiBlbmNyeXB0ZWQgc28gaXRcbjIxNzY6XHRcdCAqIGNhbm5vdCBiZSByZWluaXRpYWxpemVkLCBpLmUuIHN5bnRoZXNpemluZyBJTklUIGlzIGZ1dGlsZS5cbjIxNzc6XHRcdCAqL1xuMjE3ODpcdFx0aWYgKCFpc19zZXZfZXNfZ3Vlc3QodmNwdSkpIHtcbjIxNzk6XHRcdFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbDtcbjIxODA6XHRcbjIxODE6XHRcdFx0bWVtc2V0KFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUsIDAsIHNpemVvZihzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlKSk7XG4yMTgyOlx0XHRcdGNvbnRyb2wtXHUwMDNlaW50X2N0bCBcdTAwMjY9IH5HRU5NQVNLKDE1LCAwKTtcbjIxODM6XHRcdFx0Y29udHJvbC1cdTAwM2VpbnRfc3RhdGUgPSAwO1xuMjE4NDpcdCNpZmRlZiBDT05GSUdfS1ZNX1NNTVxuMjE4NTpcdFx0XHRpZiAoaXNfc21tKHZjcHUpKVxuMjE4NjpcdFx0XHRcdGt2bV9zbW1fY2hhbmdlZCh2Y3B1LCBmYWxzZSk7XG4yMTg3Olx0I2VuZGlmXG4yMTg4Olx0XHRcdGt2bV92Y3B1X3Jlc2V0KHZjcHUsIHRydWUpO1xuMjE4OTpcdFx0fVxuMjE5MDpcdFxuMjE5MTpcdFx0a3ZtX3J1bi1cdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1NIVVRET1dOO1xuMjE5MjpcdFx0cmV0dXJuIDA7XG4yMTkzOlx0fVxuMjE5NDpcdFxuMjE5NTpcdHN0YXRpYyBpbnQgaW9faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbjIxOTY6XHR7XG4yMTk3Olx0XHRzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTtcbjIxOTg6XHRcdHUzMiBpb19pbmZvID0gc3ZtLVx1MDAzZXZtY2ItXHUwMDNlY29udHJvbC5leGl0X2luZm9fMTsgLyogYWRkcmVzcyBzaXplIGJ1Zz8gKi9cbjIxOTk6XHRcdGludCBzaXplLCBpbiwgc3RyaW5nO1xuMjIwMDpcdFx0dW5zaWduZWQgcG9ydDtcbjIyMDE6XHRcbjIyMDI6XHRcdCYjNDM7JiM0Mzt2Y3B1LVx1MDAzZXN0YXQuaW9fZXhpdHM7XG4yMjAzOlx0XHRzdHJpbmcgPSAoaW9faW5mbyBcdTAwMjYgU1ZNX0lPSU9fU1RSX01BU0spICE9IDA7XG4yMjA0Olx0XHRpbiA9IChpb19pbmZvIFx1MDAyNiBTVk1fSU9JT19UWVBFX01BU0spICE9IDA7XG4yMjA1Olx0XHRwb3J0ID0gaW9faW5mbyBcdTAwM2VcdTAwM2UgMTY7XG4yMjA2Olx0XHRzaXplID0gKGlvX2luZm8gXHUwMDI2IFNWTV9JT0lPX1NJWkVfTUFTSykgXHUwMDNlXHUwMDNlIFNWTV9JT0lPX1NJWkVfU0hJRlQ7XG4yMjA3Olx0XG4yMjA4Olx0XHRpZiAoc3RyaW5nKSB7XG4yMjA5Olx0XHRcdGlmIChpc19zZXZfZXNfZ3Vlc3QodmNwdSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNDIKCQkJCQkJCW91dHB1dDogMTg0CgkJCQkJCQl0aG91Z2h0czogNzAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBWTUNCIENsZWFyaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbG9naWMgZml4IHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSB0aGUgVk1DQiBkdXJpbmcgYSBTSFVURE9XTiBpbnRlcmNlcHQgaW4gdGhlIEFNRCBTVk0gZW52aXJvbm1lbnQuIFByZXZpb3VzbHksIHdlIHdlcmUgdXNpbmcgYGNsZWFyX3BhZ2Uoc3ZtLSZndDt2bWNiKWAgdG8gd2lwZSB0aGUgZW50aXJlIFZNQ0IuIFRoYXQgd2FzLi4uIGluZWZmaWNpZW50LCBhbmQsIGFzIHRoaXMgcGF0Y2ggY2xhcmlmaWVzLCBwcm9iYWJseSBpbmNvcnJlY3QuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O1dhaXQsIGlzIHRoaXMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/JiMzNDsgWW91IGtub3csIHRoZSB1c3VhbCBLTVNBTiBjb25jZXJucy4gQnV0IGFmdGVyIGRpZ2dpbmcgaW4sIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXNuJiMzOTt0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGluIHRoZSBLTVNBTiBzZW5zZSBhdCBhbGwuIFRoZSBWTUNCIGlzICphbHJlYWR5KiBpbml0aWFsaXplZCB3aGVuIHRoZSB2Q1BVIGlzIGNyZWF0ZWQuIFRoZSAmIzM0O3VuZGVmaW5lZCYjMzQ7IHN0YXRlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZSBpc24mIzM5O3QgYWJvdXQgQy1sZXZlbCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBsaWtlIHlvdSYjMzk7ZCBzZWUgd2l0aCBga21hbGxvY2Agb3Igc3RhY2sgYWxsb2NhdGlvbnMgdGhhdCBLTVNBTiB0cmFja3MuCgpXaGF0IHRoZSBBTUQgZG9jdW1lbnRhdGlvbiBzcGVjaWZpZXMgaXMgdGhhdCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdCwgdGhlICpjb250ZW50cyogb2YgdGhlIHNhdmUgYXJlYSBhbmQgKnNvbWUqIGNvbnRyb2wgZmllbGRzIGluIHRoZSBWTUNCIGJlY29tZSBhcmNoaXRlY3R1cmFsbHkgdW5kZWZpbmVkLiBUaGUgcGF0Y2gmIzM5O3MgZ29hbCBpcyB0byBlbnN1cmUgdGhvc2UgKnNwZWNpZmljKiBhcmVhcyBhcmUgaW4gYSBrbm93biwgemVyb2VkIHN0YXRlLiBQcmV2aW91c2x5LCB3ZSB3ZXJlIG51a2luZyB0aGUgZW50aXJlIDRLQiBwYWdlLCB3aGljaCB3YXMgb3ZlcmtpbGwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBsaWtlbHkgZGVzdHJveWluZyBvdGhlciBjb250cm9sIGZpZWxkcyB0aGF0IEtWTSByZWxpZXMgb24gdG8gYmUgdmFsaWQgYWNyb3NzIGEgU0hVVERPV04gKHNpbmNlIEtWTSBzeW50aGVzaXplcyBhbiBJTklUKS4KClNvLCB0aGlzIHBhdGNoIGNoYW5nZXMgZnJvbSBgY2xlYXJfcGFnZWAgdG8gYSB0YXJnZXRlZCBgbWVtc2V0YCBmb3IganVzdCB0aGUgcHJvYmxlbWF0aWMgYXJlYXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZXNpZ25lZCB0byBiZXR0ZXIgYWxpZ24gd2l0aCB0aGUgQU1EIGhhcmR3YXJlIHNwZWNpZmljYXRpb24uIEl0JiMzOTtzIGEgbG9naWMgYnVnIGZpeCwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGluIHRoZSBLTVNBTiBzZW5zZS4gVGhlIFZNQ0IgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBsb25nIGJlZm9yZSB0aGlzIHBvaW50LCBhbmQgdGhpcyBmaXggaXMgc3BlY2lmaWNhbGx5IGFib3V0IHRoZSAqYXJjaGl0ZWN0dXJhbCogc3RhdGUgb2YgdGhlIFZNQ0IgYWZ0ZXIgdGhlIFNIVVRET1dOLCBub3QgQy1sZXZlbCB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gd291bGRuJiMzOTt0IGJlIGFibGUgdG8gZGV0ZWN0IGFueXRoaW5nIGhlcmUgYmVjYXVzZSBpdCYjMzk7cyBub3QgbG9va2luZyBhdCB0aGUgaGFyZHdhcmUgZGVmaW5lZCBzdGF0ZXMuIFRoaXMgcGF0Y2ggaXMganVzdCBjbGVhbmluZyB1cCBhbiBpc3N1ZSBvZiBjb250cm9sIHN0cnVjdHVyZXMgYmVpbmcgb3ZlcndyaXR0ZW4uCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCYjMzk7cyBhIGNsZWFuIGxvZ2ljIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gbG9naWMgaXNzdWUgd2hlcmUgdGhlIEFNRCBTVk0gYXJjaGl0ZWN0dXJlIGxlYXZlcyBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgVk1DQiAodGhlIHNhdmUgYXJlYSBhbmQgY2VydGFpbiBjb250cm9sIGZpZWxkcykgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiBQcmV2aW91c2x5LCBLVk0gY2xlYXJlZCB0aGUgZW50aXJlIFZNQ0IgcGFnZSwgd2hpY2ggbGlrZWx5IGRlc3Ryb3llZCBvdGhlciB2YWxpZCBjb250cm9sIGZpZWxkcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBvbmx5IGNsZWFyIHRoZSBhcmNoaXRlY3R1cmFsbHkgdW5kZWZpbmVkIGZpZWxkcy4gVGhpcyBcJiMzNDt1bmRlZmluZWRcJiMzNDsgc3RhdGUgcmVmZXJzIHRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBub3QgQy1sZXZlbCB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIFZNQ0IgcGFnZSBpdHNlbGYgaXMgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwmIzM5O3MgcGVyc3BlY3RpdmUpLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBrZXJuZWwgYWxsb2NhdGlvbnMgKHN0YWNrLCBoZWFwKSBhbmQgd291bGQgbm90IGRldGVjdCBoYXJkd2FyZS1sZXZlbCB1bmRlZmluZWQgc3RhdGUgaW4gYW4gYWxyZWFkeS1hbGxvY2F0ZWQgcGFnZS4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgbG9naWMgYnVnIGZpeCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgYnkgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBpc3N1ZSB3aGVyZSB0aGUgQU1EIFNWTSBhcmNoaXRlY3R1cmUgbGVhdmVzIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBWTUNCICh0aGUgc2F2ZSBhcmVhIGFuZCBjZXJ0YWluIGNvbnRyb2wgZmllbGRzKSB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQuIFByZXZpb3VzbHksIEtWTSBjbGVhcmVkIHRoZSBlbnRpcmUgVk1DQiBwYWdlLCB3aGljaCBsaWtlbHkgZGVzdHJveWVkIG90aGVyIHZhbGlkIGNvbnRyb2wgZmllbGRzLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGlzIHRvIG9ubHkgY2xlYXIgdGhlIGFyY2hpdGVjdHVyYWxseSB1bmRlZmluZWQgZmllbGRzLiBUaGlzIFwmIzM0O3VuZGVmaW5lZFwmIzM0OyBzdGF0ZSByZWZlcnMgdG8gdGhlIGhhcmR3YXJlIHNwZWNpZmljYXRpb24sIG5vdCBDLWxldmVsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh0aGUgVk1DQiBwYWdlIGl0c2VsZiBpcyBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIGZyb20gdGhlIGtlcm5lbCYjMzk7cyBwZXJzcGVjdGl2ZSkuIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGtlcm5lbCBhbGxvY2F0aW9ucyAoc3RhY2ssIGhlYXApIGFuZCB3b3VsZCBub3QgZGV0ZWN0IGhhcmR3YXJlLWxldmVsIHVuZGVmaW5lZCBzdGF0ZSBpbiBhbiBhbHJlYWR5LWFsbG9jYXRlZCBwYWdlLiBUaGVyZWZvcmUsIHRoaXMgaXMgYSBsb2dpYyBidWcgZml4IGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBieSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjQ6NDkuOTk4NTgyOTg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5OTY3MTE0NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNodXRkb3duX2ludGVyY2VwdGlvblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgaGFyZHdhcmUgdmlydHVhbGl6YXRpb24gbG9naWMgaXNzdWUgd2hlcmUgdGhlIEFNRCBTVk0gYXJjaGl0ZWN0dXJlIGxlYXZlcyBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgVk1DQiAodGhlIHNhdmUgYXJlYSBhbmQgY2VydGFpbiBjb250cm9sIGZpZWxkcykgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiBQcmV2aW91c2x5LCBLVk0gY2xlYXJlZCB0aGUgZW50aXJlIFZNQ0IgcGFnZSwgd2hpY2ggbGlrZWx5IGRlc3Ryb3llZCBvdGhlciB2YWxpZCBjb250cm9sIGZpZWxkcy4gVGhlIHBhdGNoIGNoYW5nZXMgdGhpcyB0byBvbmx5IGNsZWFyIHRoZSBhcmNoaXRlY3R1cmFsbHkgdW5kZWZpbmVkIGZpZWxkcy4gVGhpcyBcXFwidW5kZWZpbmVkXFxcIiBzdGF0ZSByZWZlcnMgdG8gdGhlIGhhcmR3YXJlIHNwZWNpZmljYXRpb24sIG5vdCBDLWxldmVsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICh0aGUgVk1DQiBwYWdlIGl0c2VsZiBpcyBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIGZyb20gdGhlIGtlcm5lbCdzIHBlcnNwZWN0aXZlKS4gS01TQU4gdHJhY2tzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20ga2VybmVsIGFsbG9jYXRpb25zIChzdGFjaywgaGVhcCkgYW5kIHdvdWxkIG5vdCBkZXRlY3QgaGFyZHdhcmUtbGV2ZWwgdW5kZWZpbmVkIHN0YXRlIGluIGFuIGFscmVhZHktYWxsb2NhdGVkIHBhZ2UuIFRoZXJlZm9yZSwgdGhpcyBpcyBhIGxvZ2ljIGJ1ZyBmaXggYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RhYmxlIGJ5IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgU0hVVERPV04gaW50ZXJjZXB0IGluIEtWTSBTVk0gYnkgYXZvaWRpbmcgY2xlYXJpbmcgdGhlIGVudGlyZSBWTUNCIHBhZ2UgYW5kIGluc3RlYWQgb25seSBjbGVhcmluZyB0aGUgc2F2ZSBhcmVhIGFuZCBzcGVjaWZpYyBjb250cm9sIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gaHlwZXJ2aXNvciB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZ3Vlc3QgYWN0aW9ucyAoZS5nLiwgYSB0cmlwbGUgZmF1bHQgY2F1c2luZyBhIHNodXRkb3duKSwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjQ6NDkuOTk4NTk0ODk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzk2MDU1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MTViOWE1MTc2NThiMGUxZTcwNjUyN2IxNjY5ZGI4NTQ3MjQ0MGQ2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDE2OjI0OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuaW5kZXggOWQ2MDdiOThiZDA2Ny4uY2I1ZTA0ZmQ1MThmNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xcbkBAIC0yMTY0LDE4ICsyMTY0LDIzIEBAIHN0YXRpYyBpbnQgc2h1dGRvd25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBWTUNCIGlzIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdC4gIElOSVQgdGhlIHZDUFUgdG8gcHV0XFxuLVxcdCAqIHRoZSBWTUNCIGluIGEga25vd24gZ29vZCBzdGF0ZS4gIFVuZm9ydHVhdGVseSwgS1ZNIGRvZXNuJ3QgaGF2ZVxcbi1cXHQgKiBLVk1fTVBfU1RBVEVfU0hVVERPV04gYW5kIGNhbid0IGFkZCBpdCB3aXRob3V0IHBvdGVudGlhbGx5IGJyZWFraW5nXFxuLVxcdCAqIHVzZXJzcGFjZS4gIEF0IGEgcGxhdGZvcm0gdmlldywgSU5JVCBpcyBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzXFxuLVxcdCAqIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXQgYXV0b21hdGljYWxseSBJTklUIHRoZSBDUFVcXG4tXFx0ICogaW4gcmVzcG9uc2UgdG8gc2h1dGRvd24uXFxuK1xcdCAqIFRoZSBWTUNCIHNhdmUgYXJlYSBpcyB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQsIGFzIGFyZVxcbitcXHQgKiBjb250cm9sIGFyZWEgb2Zmc2V0cyA2MGgsIDYxaCwgYW5kIDY4aCAoaW50X2N0bFsxNTowXSBhbmQgaW50X3N0YXRlKS5cXG4rXFx0ICogSU5JVCB0aGUgdkNQVSB0byBwdXQgdGhlIFZNQ0IgaW4gYSBrbm93biBnb29kIHN0YXRlLiAgVW5mb3J0dWF0ZWx5LFxcbitcXHQgKiBLVk0gZG9lc24ndCBoYXZlIEtWTV9NUF9TVEFURV9TSFVURE9XTiBhbmQgY2FuJ3QgYWRkIGl0IHdpdGhvdXRcXG4rXFx0ICogcG90ZW50aWFsbHkgYnJlYWtpbmcgdXNlcnNwYWNlLiAgQXQgYSBwbGF0Zm9ybSB2aWV3LCBJTklUIGlzXFxuK1xcdCAqIGFjY2VwdGFibGUgYmVoYXZpb3IgYXMgdGhlcmUgZXhpc3QgYmFyZSBtZXRhbCBwbGF0Zm9ybXMgdGhhdFxcbitcXHQgKiBhdXRvbWF0aWNhbGx5IElOSVQgdGhlIENQVSBpbiByZXNwb25zZSB0byBzaHV0ZG93bi5cXG4gXFx0ICpcXG4gXFx0ICogVGhlIFZNIHNhdmUgYXJlYSBmb3IgU0VWLUVTIGd1ZXN0cyBoYXMgYWxyZWFkeSBiZWVuIGVuY3J5cHRlZCBzbyBpdFxcbiBcXHQgKiBjYW5ub3QgYmUgcmVpbml0aWFsaXplZCwgaS5lLiBzeW50aGVzaXppbmcgSU5JVCBpcyBmdXRpbGUuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWlzX3Nldl9lc19ndWVzdCh2Y3B1KSkge1xcbi1cXHRcXHRjbGVhcl9wYWdlKHN2bS1cXHUwMDNldm1jYik7XFxuK1xcdFxcdHN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9IFxcdTAwMjZzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2w7XFxuK1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZSwgMCwgc2l6ZW9mKHN2bS1cXHUwMDNldm1jYi1cXHUwMDNlc2F2ZSkpO1xcbitcXHRcXHRjb250cm9sLVxcdTAwM2VpbnRfY3RsIFxcdTAwMjY9IH5HRU5NQVNLKDE1LCAwKTtcXG4rXFx0XFx0Y29udHJvbC1cXHUwMDNlaW50X3N0YXRlID0gMDtcXG4gI2lmZGVmIENPTkZJR19LVk1fU01NXFxuIFxcdFxcdGlmIChpc19zbW0odmNwdSkpXFxuIFxcdFxcdFxcdGt2bV9zbW1fY2hhbmdlZCh2Y3B1LCBmYWxzZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjI0OjUwLjMzODkxNzczMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQzNDIzOTQyNDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaHV0ZG93bl9pbnRlcmNlcHRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgdGhlIFNIVVRET1dOIGludGVyY2VwdCBpbiBLVk0gU1ZNIGJ5IGF2b2lkaW5nIGNsZWFyaW5nIHRoZSBlbnRpcmUgVk1DQiBwYWdlIGFuZCBpbnN0ZWFkIG9ubHkgY2xlYXJpbmcgdGhlIHNhdmUgYXJlYSBhbmQgc3BlY2lmaWMgY29udHJvbCBmaWVsZHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgS1ZNIGh5cGVydmlzb3IgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGd1ZXN0IGFjdGlvbnMgKGUuZy4sIGEgdHJpcGxlIGZhdWx0IGNhdXNpbmcgYSBzaHV0ZG93biksIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgxNWI5YTUxNzY1OGIwZTFlNzA2NTI3YjE2NjlkYjg1NDcyNDQwZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNjoyNDo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXG5pbmRleCA5ZDYwN2I5OGJkMDY3Li5jYjVlMDRmZDUxOGY2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuKysrIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuQEAgLTIxNjQsMTggKzIxNjQsMjMgQEAgc3RhdGljIGludCBzaHV0ZG93bl9pbnRlcmNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFxuIFxuIFx0Lypcbi1cdCAqIFZNQ0IgaXMgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiAgSU5JVCB0aGUgdkNQVSB0byBwdXRcbi1cdCAqIHRoZSBWTUNCIGluIGEga25vd24gZ29vZCBzdGF0ZS4gIFVuZm9ydHVhdGVseSwgS1ZNIGRvZXNuJ3QgaGF2ZVxuLVx0ICogS1ZNX01QX1NUQVRFX1NIVVRET1dOIGFuZCBjYW4ndCBhZGQgaXQgd2l0aG91dCBwb3RlbnRpYWxseSBicmVha2luZ1xuLVx0ICogdXNlcnNwYWNlLiAgQXQgYSBwbGF0Zm9ybSB2aWV3LCBJTklUIGlzIGFjY2VwdGFibGUgYmVoYXZpb3IgYXNcbi1cdCAqIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXQgYXV0b21hdGljYWxseSBJTklUIHRoZSBDUFVcbi1cdCAqIGluIHJlc3BvbnNlIHRvIHNodXRkb3duLlxuK1x0ICogVGhlIFZNQ0Igc2F2ZSBhcmVhIGlzIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdCwgYXMgYXJlXG4rXHQgKiBjb250cm9sIGFyZWEgb2Zmc2V0cyA2MGgsIDYxaCwgYW5kIDY4aCAoaW50X2N0bFsxNTowXSBhbmQgaW50X3N0YXRlKS5cbitcdCAqIElOSVQgdGhlIHZDUFUgdG8gcHV0IHRoZSBWTUNCIGluIGEga25vd24gZ29vZCBzdGF0ZS4gIFVuZm9ydHVhdGVseSxcbitcdCAqIEtWTSBkb2Vzbid0IGhhdmUgS1ZNX01QX1NUQVRFX1NIVVRET1dOIGFuZCBjYW4ndCBhZGQgaXQgd2l0aG91dFxuK1x0ICogcG90ZW50aWFsbHkgYnJlYWtpbmcgdXNlcnNwYWNlLiAgQXQgYSBwbGF0Zm9ybSB2aWV3LCBJTklUIGlzXG4rXHQgKiBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzIHRoZXJlIGV4aXN0IGJhcmUgbWV0YWwgcGxhdGZvcm1zIHRoYXRcbitcdCAqIGF1dG9tYXRpY2FsbHkgSU5JVCB0aGUgQ1BVIGluIHJlc3BvbnNlIHRvIHNodXRkb3duLlxuIFx0ICpcbiBcdCAqIFRoZSBWTSBzYXZlIGFyZWEgZm9yIFNFVi1FUyBndWVzdHMgaGFzIGFscmVhZHkgYmVlbiBlbmNyeXB0ZWQgc28gaXRcbiBcdCAqIGNhbm5vdCBiZSByZWluaXRpYWxpemVkLCBpLmUuIHN5bnRoZXNpemluZyBJTklUIGlzIGZ1dGlsZS5cbiBcdCAqL1xuIFx0aWYgKCFpc19zZXZfZXNfZ3Vlc3QodmNwdSkpIHtcbi1cdFx0Y2xlYXJfcGFnZShzdm0tXHUwMDNldm1jYik7XG4rXHRcdHN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqY29udHJvbCA9IFx1MDAyNnN2bS1cdTAwM2V2bWNiLVx1MDAzZWNvbnRyb2w7XG4rXG4rXHRcdG1lbXNldChcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2VzYXZlLCAwLCBzaXplb2Yoc3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZSkpO1xuK1x0XHRjb250cm9sLVx1MDAzZWludF9jdGwgXHUwMDI2PSB+R0VOTUFTSygxNSwgMCk7XG4rXHRcdGNvbnRyb2wtXHUwMDNlaW50X3N0YXRlID0gMDtcbiAjaWZkZWYgQ09ORklHX0tWTV9TTU1cbiBcdFx0aWYgKGlzX3NtbSh2Y3B1KSlcbiBcdFx0XHRrdm1fc21tX2NoYW5nZWQodmNwdSwgZmFsc2UpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjQ6NTAuMzM4OTE4OTQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA5NTcwODk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBLVk0gU1ZNIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGluIHRoZSBgc2h1dGRvd25faW50ZXJjZXB0aW9uYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgYHN2bS1cdTAwM2V2bWNiYCBpcyBoYW5kbGVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LiBJdCBsb29rcyBsaWtlIGluc3RlYWQgb2YgY29tcGxldGVseSB3aXBpbmcgdGhlIGB2bWNiYCBwYWdlIHdpdGggYGNsZWFyX3BhZ2VgLCBpdCdzIG5vdyBzZWxlY3RpdmVseSB6ZXJvaW5nIG91dCB0aGUgYHZtY2ItXHUwMDNlc2F2ZWAgYXJlYSBhbmQgc3BlY2lmaWMgY29udHJvbCBmaWVsZHM6IGBjb250cm9sLVx1MDAzZWludF9jdGxgIGFuZCBgY29udHJvbC1cdTAwM2VpbnRfc3RhdGVgLiBUaGlzIGlzIGEgY2xlYXIgb3B0aW1pemF0aW9uIHN0cmF0ZWd5LCByYXRoZXIgdGhhbiBhIGJ1ZyBmaXgsIHRvIGF2b2lkIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIGZyb20gY2xlYXJpbmcgdGhlIGVudGlyZSBwYWdlLCBhbmQgbGVhdmluZyB0aGUgYXJlYXMgZm9yIGNvbnRyb2wgaW50YWN0LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBcIlNtYXJ0IG1vdmUuXCIgQ2xlYXJpbmcgdGhlIHdob2xlIHBhZ2UgaXMgYnJ1dGUgZm9yY2UgYW5kIHBvdGVudGlhbGx5IGRlc3RydWN0aXZlLCBlc3BlY2lhbGx5IGlmIG90aGVyIGNyaXRpY2FsIGRhdGEgcmVzaWRlcyB3aXRoaW4gdGhhdCBgdm1jYmAgdGhhdCB3ZSBtaWdodCB3YW50IHRvIHByZXNlcnZlLiBTZWxlY3RpdmUgY2xlYXJpbmcgaXMgdGhlIGJldHRlciBhcHByb2FjaCBmcm9tIGEgc3RhYmlsaXR5IHBlcnNwZWN0aXZlLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB3aGV0aGVyIHRoaXMgaXMgd29ydGggaW52ZXN0aWdhdGluZyBmdXJ0aGVyLiBJcyB0aGlzIGNvZGUgcGF0aCBldmVuIHJlYWNoYWJsZT8gQW5kLCBtb3JlIGltcG9ydGFudGx5LCBpcyBpdCBmdXp6YWJsZT8gS1ZNIFNWTSwgSSdtIHByZXR0eSBzdXJlIGl0IGlzLiBZZXMsIEtWTSBTVk0gaXMgZnV6emFibGUuIFdlIHNob3VsZCBhbHdheXMgY2hlY2suIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zIGVuYWJsZSBpdC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBLVk1fQU1EYCBpcyB0aGUgb25lLiBZZXAsIGEgcXVpY2sgcGVlayBhdCBgYXJjaC94ODYva3ZtL0tjb25maWdgIGNvbmZpcm1zIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjQ6NTguNDM0NjMxMTgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDA0MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNodXRkb3duX2ludGVyY2VwdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjE1NT1zdGF0aWMgaW50IG1jX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIxNTktXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMTYwOnN0YXRpYyBpbnQgc2h1dGRvd25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIxNjEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzQ3PXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzk0LVxcdFtTVk1fRVhJVF9UQVNLX1NXSVRDSF1cXHRcXHRcXHQ9IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMzOTU6XFx0W1NWTV9FWElUX1NIVVRET1dOXVxcdFxcdFxcdD0gc2h1dGRvd25faW50ZXJjZXB0aW9uLFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzM5Ni1cXHRbU1ZNX0VYSVRfVk1SVU5dXFx0XFx0XFx0PSB2bXJ1bl9pbnRlcmNlcHRpb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjI0OjU4LjQ4MzA0Mjk4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzU1MTAxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNodXRkb3duIEludGVyY2VwdGlvbiBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHNodXRkb3duX2ludGVyY2VwdGlvbmAgZnVuY3Rpb24sIGFuZCBpdCdzIGNsZWFybHkgc2V0IHVwIGFzIGFuIGV4aXQgaGFuZGxlciBmb3IgYFNWTV9FWElUX1NIVVRET1dOYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBndWVzdCDigJMgeW91IGtub3csIHRoZSB2aXJ0dWFsIG1hY2hpbmUg4oCTIGluaXRpYXRlcyBhIHNodXRkb3duLiAgVGhpcyBpbmNsdWRlcyB0aG9zZSBsb3ZlbHksIGFuZCBvZnRlbiBicnV0YWwsIHRyaXBsZSBmYXVsdCBzY2VuYXJpb3MgdGhhdCBjYW4gaGFwcGVuIHdoZW4gdGhpbmdzIGdvIHNpZGV3YXlzIGluIHRoZSBndWVzdC4gIE15IHByaW1hcnkgY29uY2VybiBub3cgaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBpcyBjb25maWd1cmVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgaXQuICBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBmdWxseSBncmFzcCBpdHMgYmVoYXZpb3IuIExldCdzIGdldCB0byB3b3JrIG9uIGZpbmRpbmcgdGhvc2UgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjoyNTowMy4wMTg1NTY2ODdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NzIzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9BTURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjoyNTowMy4wNjQyMzE5MjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk2MjcyMjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIHNwZWNpZmllcyBgS1ZNX0FNRGAuIFJpZ2h0LCByaWdodC4gQ2xlYXJseSwgd2UgbmVlZCB0byBicmluZyBpbiBgS1ZNYCBpdHNlbGYgYXMgYSBmb3VuZGF0aW9uYWwgZWxlbWVudCwgdGhlIGJhc2UgY29uZmlnIHVwb24gd2hpY2ggYEtWTV9BTURgIGxpa2VseSBidWlsZHMuIEl0IHdvdWxkIGJlIGZvb2xpc2ggdG8gaWdub3JlIHRoYXQuXG5cbk5vdywgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvZiBgS1ZNX0FNRGAsIG15IG5leHQgc3RlcCBpcyBvYnZpb3VzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSB4ODYgS1ZNIG1vZHVsZS4gVGhhdCBzaG91bGQgYmUgbG9jYXRlZCBhdCBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSB0cnV0aCBsaWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgY2xhcmlmeSB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjU6MDYuOTYwNTA2MzY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTU2MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjU6MDcuMDA2NDY2MDU4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxMzAwMDM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBLY29uZmlnIGZvciB4ODYgS1ZNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEtWTSBpcyBjb25maWd1cmVkIGZvciB4ODYgc3lzdGVtcywgc3BlY2lmaWNhbGx5IGZyb20gYSBmZWF0dXJlIG9yIGludGVncmF0aW9uIHBlcnNwZWN0aXZlLiBMZXQncyBzZWUuLi4gSSdtIHRoaW5raW5nIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUgaXMgYSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQuIExpbmUgMTQ2Li4uIGhtbSwgSSdsbCBuZWVkIHRvIGp1bXAgdGhlcmUgYW5kIGdldCBteSBiZWFyaW5ncy4gSSdtIGFzc3VtaW5nIHRoYXQgbGluZSB3aWxsIHRvdWNoIG9uIHRoZSByZWxldmFudCBvcHRpb25zIGZvciBLVk0ncyBiZWhhdmlvci4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGFzc29jaWF0ZWQgdmFyaWFibGVzIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgdG8gY29uZmlndXJlIHRoZSBLVk0gc2V0dGluZ3MgaW4gdGhhdCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MjU6MTIuNjE5NDY4NzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdGhlbHBcXG4gMTQxOlxcdFxcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgbGF1bmNoaW5nIEludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpXFxuIDE0MjpcXHRcXHQgIGNvbmZpZGVudGlhbCBWTXMgb24gSW50ZWwgcHJvY2Vzc29ycy5cXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAxNDU6XFx0XFxuIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjI1OjEyLjYxOTU2NjgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODk2NjQwNjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkFzc2Vzc2luZyB0aGUgSHlwZXJ2aXNvciBSZXF1aXJlbWVudHMqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGZvciB0aGlzIHNldHVwLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCBJJ20gZGVhbGluZyB3aXRoIGEgS1ZNIGVudmlyb25tZW50LCBhbmQgc2luY2UgdGhlIG1lbnRpb24gb2YgQU1EIGlzIHByb21pbmVudCwgYEtWTWAsIGBLVk1fQU1EYCwgYW5kIGBDUFVfU1VQX0FNRGAgYXJlIGdvaW5nIHRvIGJlIGtleSBwaWVjZXMgb2YgdGhlIHB1enpsZS4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gYENQVV9TVVBfQU1EYCB0byB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBzdXBwb3J0IGZvciB0aGUgYXJjaGl0ZWN0dXJlIGlzIGluIHBsYWNlLiBJdCdzIHRoZSBtb3N0IGxpa2VseSBwb2ludCB0byB2ZXJpZnkgZWFybHkgYW5kIHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjI1OjQ0LjUxNjIxMDE5MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwMzQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENQVV9TVVBfQU1EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L0tjb25maWcuY3B1XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWcuY3B1PTMxNj1jb25maWcgQ1BVX1NVUF9DWVJJWF8zMlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy5jcHUtMzI5LVxcbmFyY2gveDg2L0tjb25maWcuY3B1OjMzMDpjb25maWcgQ1BVX1NVUF9BTURcXG5hcmNoL3g4Ni9LY29uZmlnLmNwdS0zMzEtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjI1OjQ0LjU3NjI0OTcyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk5MjI0OTQ1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgZGVmYXVsdCBzZXR0aW5nIGhlcmUgaXMgY2xlYXJseSBgeWAsIHdoaWNoIGlzIGdvb2QgdG8ga25vdyByaWdodCBvZmYgdGhlIGJhdC4gVGhhdCBtZWFucyBqdXN0IHNwZWNpZnlpbmcgYEtWTWAgYW5kIGBLVk1fQU1EYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGludGVuZGVkIHB1cnBvc2UuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBpcyBnb2luZyB0byBiZSB0aGUgYHNodXRkb3duX2ludGVyY2VwdGlvbmAgZnVuY3Rpb24uIFRoYXQncyB3aGVyZSB0aGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIHJlc2lkZXMsIGFuZCBpdCBzZWVtcyB0byBhZGRyZXNzIGEgYnVnIHJlbGF0ZWQgdG8gYGNsZWFyX3BhZ2Uoc3ZtLVx1MDAzZXZtY2IpYCBwb3RlbnRpYWxseSB3aXBpbmcgbW9yZSB0aGFuIGl0IHNob3VsZC4gVGhpcyB0eXBlIG9mIGZpeCBpcyAqZGVmaW5pdGVseSogd29ydGggcHV0dGluZyB0aHJvdWdoIHRoZSBmdXp6aW5nIHByb2Nlc3MgdG8gZW5zdXJlIGl0IGhvbGRzIHVwIHVuZGVyIHN0cmVzcyBhbmQgcmV2ZWFscyBhbnl0aGluZyB1bmV4cGVjdGVkLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGlzIHRoZSAqb25seSogZnVuY3Rpb24gaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIFllYWgsIGp1c3QgdGhhdCBvbmUuIEV4Y2VsbGVudC5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGRvY3VtZW50IHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTY2LCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjozMjowNC40OTg3NDcxNzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU5MjMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2h1dGRvd25faW50ZXJjZXB0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIHRoZSBTSFVURE9XTiBpbnRlcmNlcHQgaW4gS1ZNIFNWTSBieSBhdm9pZGluZyBjbGVhcmluZyB0aGUgZW50aXJlIFZNQ0IgcGFnZSBhbmQgaW5zdGVhZCBvbmx5IGNsZWFyaW5nIHRoZSBzYXZlIGFyZWEgYW5kIHNwZWNpZmljIGNvbnRyb2wgZmllbGRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEtWTSBoeXBlcnZpc29yIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBndWVzdCBhY3Rpb25zIChlLmcuLCBhIHRyaXBsZSBmYXVsdCBjYXVzaW5nIGEgc2h1dGRvd24pLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNodXRkb3duX2ludGVyY2VwdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiB0aGUgU0hVVERPV04gaW50ZXJjZXB0IGluIEtWTSBTVk0gYnkgYXZvaWRpbmcgY2xlYXJpbmcgdGhlIGVudGlyZSBWTUNCIHBhZ2UgYW5kIGluc3RlYWQgb25seSBjbGVhcmluZyB0aGUgc2F2ZSBhcmVhIGFuZCBzcGVjaWZpYyBjb250cm9sIGZpZWxkcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBLVk0gaHlwZXJ2aXNvciB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZ3Vlc3QgYWN0aW9ucyAoZS5nLiwgYSB0cmlwbGUgZmF1bHQgY2F1c2luZyBhIHNodXRkb3duKSwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MzI6MDQuNTc4MzQ1MjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1Mzg3MzQxNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MzI6MDQuNTc4ODY1NzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzUzODY4MTYxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGlzc3VlIHdoZXJlIHRoZSBBTUQgU1ZNIGFyY2hpdGVjdHVyZSBsZWF2ZXMgc3BlY2lmaWMgcGFydHMgb2YgdGhlIFZNQ0IgKHRoZSBzYXZlIGFyZWEgYW5kIGNlcnRhaW4gY29udHJvbCBmaWVsZHMpIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdC4gUHJldmlvdXNseSwgS1ZNIGNsZWFyZWQgdGhlIGVudGlyZSBWTUNCIHBhZ2UsIHdoaWNoIGxpa2VseSBkZXN0cm95ZWQgb3RoZXIgdmFsaWQgY29udHJvbCBmaWVsZHMuIFRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMgdG8gb25seSBjbGVhciB0aGUgYXJjaGl0ZWN0dXJhbGx5IHVuZGVmaW5lZCBmaWVsZHMuIFRoaXMgXFxcInVuZGVmaW5lZFxcXCIgc3RhdGUgcmVmZXJzIHRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBub3QgQy1sZXZlbCB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIFZNQ0IgcGFnZSBpdHNlbGYgaXMgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwncyBwZXJzcGVjdGl2ZSkuIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGtlcm5lbCBhbGxvY2F0aW9ucyAoc3RhY2ssIGhlYXApIGFuZCB3b3VsZCBub3QgZGV0ZWN0IGhhcmR3YXJlLWxldmVsIHVuZGVmaW5lZCBzdGF0ZSBpbiBhbiBhbHJlYWR5LWFsbG9jYXRlZCBwYWdlLiBUaGVyZWZvcmUsIHRoaXMgaXMgYSBsb2dpYyBidWcgZml4IGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBieSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MTViOWE1MTc2NThiMGUxZTcwNjUyN2IxNjY5ZGI4NTQ3MjQ0MGQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTY6MjQ6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggOWQ2MDdiOThiZDA2Ny4uY2I1ZTA0ZmQ1MThmNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC0yMTY0LDE4ICsyMTY0LDIzIEBAIHN0YXRpYyBpbnQgc2h1dGRvd25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiBcbiBcdC8qXG4tXHQgKiBWTUNCIGlzIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdC4gIElOSVQgdGhlIHZDUFUgdG8gcHV0XG4tXHQgKiB0aGUgVk1DQiBpbiBhIGtub3duIGdvb2Qgc3RhdGUuICBVbmZvcnR1YXRlbHksIEtWTSBkb2Vzbid0IGhhdmVcbi1cdCAqIEtWTV9NUF9TVEFURV9TSFVURE9XTiBhbmQgY2FuJ3QgYWRkIGl0IHdpdGhvdXQgcG90ZW50aWFsbHkgYnJlYWtpbmdcbi1cdCAqIHVzZXJzcGFjZS4gIEF0IGEgcGxhdGZvcm0gdmlldywgSU5JVCBpcyBhY2NlcHRhYmxlIGJlaGF2aW9yIGFzXG4tXHQgKiB0aGVyZSBleGlzdCBiYXJlIG1ldGFsIHBsYXRmb3JtcyB0aGF0IGF1dG9tYXRpY2FsbHkgSU5JVCB0aGUgQ1BVXG4tXHQgKiBpbiByZXNwb25zZSB0byBzaHV0ZG93bi5cbitcdCAqIFRoZSBWTUNCIHNhdmUgYXJlYSBpcyB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQsIGFzIGFyZVxuK1x0ICogY29udHJvbCBhcmVhIG9mZnNldHMgNjBoLCA2MWgsIGFuZCA2OGggKGludF9jdGxbMTU6MF0gYW5kIGludF9zdGF0ZSkuXG4rXHQgKiBJTklUIHRoZSB2Q1BVIHRvIHB1dCB0aGUgVk1DQiBpbiBhIGtub3duIGdvb2Qgc3RhdGUuICBVbmZvcnR1YXRlbHksXG4rXHQgKiBLVk0gZG9lc24ndCBoYXZlIEtWTV9NUF9TVEFURV9TSFVURE9XTiBhbmQgY2FuJ3QgYWRkIGl0IHdpdGhvdXRcbitcdCAqIHBvdGVudGlhbGx5IGJyZWFraW5nIHVzZXJzcGFjZS4gIEF0IGEgcGxhdGZvcm0gdmlldywgSU5JVCBpc1xuK1x0ICogYWNjZXB0YWJsZSBiZWhhdmlvciBhcyB0aGVyZSBleGlzdCBiYXJlIG1ldGFsIHBsYXRmb3JtcyB0aGF0XG4rXHQgKiBhdXRvbWF0aWNhbGx5IElOSVQgdGhlIENQVSBpbiByZXNwb25zZSB0byBzaHV0ZG93bi5cbiBcdCAqXG4gXHQgKiBUaGUgVk0gc2F2ZSBhcmVhIGZvciBTRVYtRVMgZ3Vlc3RzIGhhcyBhbHJlYWR5IGJlZW4gZW5jcnlwdGVkIHNvIGl0XG4gXHQgKiBjYW5ub3QgYmUgcmVpbml0aWFsaXplZCwgaS5lLiBzeW50aGVzaXppbmcgSU5JVCBpcyBmdXRpbGUuXG4gXHQgKi9cbiBcdGlmICghaXNfc2V2X2VzX2d1ZXN0KHZjcHUpKSB7XG4tXHRcdGNsZWFyX3BhZ2Uoc3ZtLVx1MDAzZXZtY2IpO1xuK1x0XHRzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSBcdTAwMjZzdm0tXHUwMDNldm1jYi1cdTAwM2Vjb250cm9sO1xuK1xuK1x0XHRtZW1zZXQoXHUwMDI2c3ZtLVx1MDAzZXZtY2ItXHUwMDNlc2F2ZSwgMCwgc2l6ZW9mKHN2bS1cdTAwM2V2bWNiLVx1MDAzZXNhdmUpKTtcbitcdFx0Y29udHJvbC1cdTAwM2VpbnRfY3RsIFx1MDAyNj0gfkdFTk1BU0soMTUsIDApO1xuK1x0XHRjb250cm9sLVx1MDAzZWludF9zdGF0ZSA9IDA7XG4gI2lmZGVmIENPTkZJR19LVk1fU01NXG4gXHRcdGlmIChpc19zbW0odmNwdSkpXG4gXHRcdFx0a3ZtX3NtbV9jaGFuZ2VkKHZjcHUsIGZhbHNlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjMyOjA0LjU3ODg2NjgzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTkzODI4MTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHNodXRkb3duX2ludGVyY2VwdGlvbmAgUGF0Y2g6IFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBDb25jZXJucyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgdGhlIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGZ1bmN0aW9uIHdpdGhpbiB0aGUgQU1EIFNWTSBLVk0gY29kZS4gU3BlY2lmaWNhbGx5LCBpdCdzIHJlcGxhY2luZyBhIGBjbGVhcl9wYWdlKHN2bS1cdTAwM2V2bWNiKWAgY2FsbCB3aXRoIGEgbW9yZSB0YXJnZXRlZCBjbGVhcmluZyBvZiBvbmx5IHRoZSBgc2F2ZWAgYXJlYSBhbmQgc29tZSBzcGVjaWZpYyBmaWVsZHMgd2l0aGluIHRoZSBgY29udHJvbGAgYXJlYSBvZiB0aGUgVk1DQi4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhpcyBtaWdodCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSdyZSAqbm90KiB6ZXJvaW5nIHRoZSBlbnRpcmUgVk1DQiBhbnltb3JlOyB3ZSdyZSBsZWF2aW5nIHNvbWUgb2YgaXQgdW50b3VjaGVkLlxuXG5NeSBmaXJzdCBjb25jZXJuIHdhcyB0aGF0IHRoaXMgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHRoZSBndWVzdCBvciBwb3RlbnRpYWxseSB0byB1c2Vyc3BhY2UgaWYgc29tZXRoaW5nIHdlcmUgdG8gcmVhZCBpdC4gVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoYXQgdGhlIGhhcmR3YXJlIGxlYXZlcyB0aGUgc2F2ZSBhcmVhIGFuZCBjZXJ0YWluIGNvbnRyb2wgYXJlYSBvZmZzZXRzIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdC4gVGhhdCdzIHRoZSBrZXkuIEJ1dCB0aGVuIEkgcXVpY2tseSByZWFsaXplZCwgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLCB0aGlzIGlzbid0ICp0cnVseSogdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIEMgc2Vuc2UuIElmIHRoZSBtZW1vcnkgaGFkIGJlZW4gYWxsb2NhdGVkIGFuZCB1c2VkIGJlZm9yZSwgaXQgYWxyZWFkeSAqaGFkKiB2YWx1ZXMg4oCTIGl0IHdhcyBqdXN0IHJldGFpbmluZyBcIm9sZFwiIHZhbHVlcyBmcm9tIGEgcHJldmlvdXMgc3RhdGUuICBLTVNBTiB3b3VsZG4ndCB0cmFjayB0aGUgdmFsdWVzIHdyaXR0ZW4gYnkgdGhlIGhhcmR3YXJlIGFzIHVuaW5pdGlhbGl6ZWQsIHVubGVzcyBpdCBoYWQgYSBzcGVjaWFsIGhvb2sgZm9yIHRoYXQuXG5cblRoZSBrZXkgaXMgdGhhdCB0aGUgcHJpb3IgYGNsZWFyX3BhZ2VgIHdhcyBlZmZlY3RpdmVseSBpbml0aWFsaXppbmcgdGhlIGVudGlyZSBWTUNCLCBhbmQgbm93IHdlIGFyZSBvbmx5IGluaXRpYWxpemluZyBhIHNtYWxsIHBhcnQgb2YgaXQuIFRoYXQncyB3aGVyZSB0aGUgcG90ZW50aWFsIHJpc2sgbGllcy5cblxuSG93ZXZlciwgYWZ0ZXIgYSBiaXQgbW9yZSB0aG91Z2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBWTUNCIGlzICphY3R1YWxseSogdXNlZC4gSWYgYGNsZWFyX3BhZ2VgICp3YXMqIHVzZWQsIHRoZSBlbnRpcmUgVk1DQiB3b3VsZCBoYXZlIGJlZW4gemVyb2VkLiBUaGVuLCBga3ZtX3ZjcHVfcmVzZXRgIHdvdWxkIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciwgcmUtaW5pdGlhbGl6aW5nIHRoZSB0aGluZ3MgdGhlIEtWTSBjb3JlIG5lZWRzLiBUaGlzIGNvbnRleHQgaXMgaW1wb3J0YW50LlxuXG5TbywgdGhlIHBhdGNoIGlzIGxpa2VseSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYXZvaWRpbmcgdW5uZWNlc3NhcnkgY2xlYXJpbmcgb2YgcGFydHMgb2YgdGhlIFZNQ0IgdGhhdCBLVk0gd2FudHMgdG8gcmV0YWluIHRocm91Z2ggYSBzaHV0ZG93biBpbnRlcmNlcHQuIFRoZSByZWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgbGVhdmluZyB0aGUgXCJvbGRcIiBkYXRhIGluIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgVk1DQiBpcyBzYWZlLiBJdCdzIHByb2JhYmx5IHNhZmUgYmVjYXVzZSB0aGUgbWVtb3J5IGlzIGFscmVhZHkgKmluaXRpYWxpemVkKiB3aXRoIHZhbHVlcywgYnV0IHRoZSBzZW1hbnRpY3MgaGF2ZSBjaGFuZ2VkLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSBzaG91bGQgbG9vayBkZWVwZXIgYXQgaG93IHRoaXMgY2hhbmdlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgc2h1dGRvd25faW50ZXJjZXB0aW9uYCBhbmQgYGt2bV92Y3B1X3Jlc2V0YC4gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZSBoZXJlOiBpcyB0aGVyZSBhIHJpc2sgb2Ygc3RhbGUgZGF0YSBiZWluZyBpbmNvcnJlY3RseSBpbnRlcnByZXRlZCBhZnRlciB0aGUgaW50ZXJjZXB0IGJlZm9yZSB0aGUgZnVsbCBWTUNCIHJlLWluaXRpYWxpemF0aW9uPyBUaGUgb3JpZ2luYWwgYGNsZWFyX3BhZ2VgIHdhcyBpbml0aWFsaXppbmcgdGhlIGNvbnRyb2wgYXJlYSwgd2hpY2ggaXMgd2hhdCBLVk0gbmVlZHMsIGFuZCB0aGlzIG1lYW5zIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSBzYW1lIHRoaW5ncyBhcmUgc2V0IHRocm91Z2ggdGhpcyBuZXcgbWV0aG9kLiBJdCdzIGxpa2VseSB0aGF0IGEgZGVlcGVyIGRpdmUgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSDigJMgcGFydGljdWxhcmx5IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMg4oCTIGlzIHJlcXVpcmVkIHRvIGJlIHN1cmUgd2UgYXJlIG5vdCBpbnRyb2R1Y2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgZnJvbSBhIHN0YWxlLWRhdGEgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjozMjoyMC41NzI2OTcxNTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODU5NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNodXRkb3duX2ludGVyY2VwdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9MjE1NT1zdGF0aWMgaW50IG1jX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIxNTktXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzoyMTYwOnN0YXRpYyBpbnQgc2h1dGRvd25faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTIxNjEte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYz0zMzQ3PXN0YXRpYyBpbnQgKCpjb25zdCBzdm1fZXhpdF9oYW5kbGVyc1tdKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpID0ge1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy0zMzk0LVxcdFtTVk1fRVhJVF9UQVNLX1NXSVRDSF1cXHRcXHRcXHQ9IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbixcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jOjMzOTU6XFx0W1NWTV9FWElUX1NIVVRET1dOXVxcdFxcdFxcdD0gc2h1dGRvd25faW50ZXJjZXB0aW9uLFxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmMtMzM5Ni1cXHRbU1ZNX0VYSVRfVk1SVU5dXFx0XFx0XFx0PSB2bXJ1bl9pbnRlcmNlcHRpb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjMyOjIwLjYxNjU2MTMzMloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODE0NzI2NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gIGluIGBzdm0uY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBzaHV0ZG93bl9pbnRlcmNlcHRpb25gLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHg4Ni9LVk0vU1ZNIHN5c3RlbSBoYW5kbGVzIGd1ZXN0IHNodXRkb3ducy4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGVkIG92ZXIgdG8gYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgIHRvIGxvb2sgYXQgdGhpcyBmdW5jdGlvbi4gSSBrbm93IHRoaXMgYXJlYSBpbnRpbWF0ZWx5LCBzbyBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgbG93LWxldmVsIEFNRCBTZWN1cmUgVmlydHVhbCBNYWNoaW5lIHNwZWNpZmljIGNvZGUgdGhhdCBtYW5hZ2VzIHRoaXMuIEnigJltIHRoaW5raW5nIHRoZXJlIHdpbGwgYmUgY2hlY2tzIGZvciBzcGVjaWZpYyBWTSBleGl0IHJlYXNvbnMgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50IGluc3RydWN0aW9ucyBvciBwb3NzaWJseSBldmVuIEFDUEkgZXZlbnRzIHRoYXQgdHJpZ2dlciBhIHNodXRkb3duLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBob3N0J3MgcG93ZXIgbWFuYWdlbWVudCBmZWF0dXJlcyBhbmQgaG93IHRoZSBTVk0gZW52aXJvbm1lbnQgbWFwcyB0aGVtLiBMZXTigJlzIHNlZSBob3cgdGhpcyBhbGwgY29tZXMgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjozMjoyNC40MzEyOTA3MDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI5ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc3ZtLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE2MDpcXHRzdGF0aWMgaW50IHNodXRkb3duX2ludGVyY2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuMjE2MTpcXHR7XFxuMjE2MjpcXHRcXHRzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1biA9IHZjcHUtXFx1MDAzZXJ1bjtcXG4yMTYzOlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbjIxNjQ6XFx0XFxuMjE2NTpcXHRcXG4yMTY2OlxcdFxcdC8qXFxuMjE2NzpcXHRcXHQgKiBUaGUgVk1DQiBzYXZlIGFyZWEgaXMgdW5kZWZpbmVkIGFmdGVyIGEgU0hVVERPV04gaW50ZXJjZXB0LCBhcyBhcmVcXG4yMTY4OlxcdFxcdCAqIGNvbnRyb2wgYXJlYSBvZmZzZXRzIDYwaCwgNjFoLCBhbmQgNjhoIChpbnRfY3RsWzE1OjBdIGFuZCBpbnRfc3RhdGUpLlxcbjIxNjk6XFx0XFx0ICogSU5JVCB0aGUgdkNQVSB0byBwdXQgdGhlIFZNQ0IgaW4gYSBrbm93biBnb29kIHN0YXRlLiAgVW5mb3J0dWF0ZWx5LFxcbjIxNzA6XFx0XFx0ICogS1ZNIGRvZXNuJ3QgaGF2ZSBLVk1fTVBfU1RBVEVfU0hVVERPV04gYW5kIGNhbid0IGFkZCBpdCB3aXRob3V0XFxuMjE3MTpcXHRcXHQgKiBwb3RlbnRpYWxseSBicmVha2luZyB1c2Vyc3BhY2UuICBBdCBhIHBsYXRmb3JtIHZpZXcsIElOSVQgaXNcXG4yMTcyOlxcdFxcdCAqIGFjY2VwdGFibGUgYmVoYXZpb3IgYXMgdGhlcmUgZXhpc3QgYmFyZSBtZXRhbCBwbGF0Zm9ybXMgdGhhdFxcbjIxNzM6XFx0XFx0ICogYXV0b21hdGljYWxseSBJTklUIHRoZSBDUFUgaW4gcmVzcG9uc2UgdG8gc2h1dGRvd24uXFxuMjE3NDpcXHRcXHQgKlxcbjIxNzU6XFx0XFx0ICogVGhlIFZNIHNhdmUgYXJlYSBmb3IgU0VWLUVTIGd1ZXN0cyBoYXMgYWxyZWFkeSBiZWVuIGVuY3J5cHRlZCBzbyBpdFxcbjIxNzY6XFx0XFx0ICogY2Fubm90IGJlIHJlaW5pdGlhbGl6ZWQsIGkuZS4gc3ludGhlc2l6aW5nIElOSVQgaXMgZnV0aWxlLlxcbjIxNzc6XFx0XFx0ICovXFxuMjE3ODpcXHRcXHRpZiAoIWlzX3Nldl9lc19ndWVzdCh2Y3B1KSkge1xcbjIxNzk6XFx0XFx0XFx0c3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gXFx1MDAyNnN2bS1cXHUwMDNldm1jYi1cXHUwMDNlY29udHJvbDtcXG4yMTgwOlxcdFxcbjIxODE6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUsIDAsIHNpemVvZihzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZXNhdmUpKTtcXG4yMTgyOlxcdFxcdFxcdGNvbnRyb2wtXFx1MDAzZWludF9jdGwgXFx1MDAyNj0gfkdFTk1BU0soMTUsIDApO1xcbjIxODM6XFx0XFx0XFx0Y29udHJvbC1cXHUwMDNlaW50X3N0YXRlID0gMDtcXG4yMTg0OlxcdCNpZmRlZiBDT05GSUdfS1ZNX1NNTVxcbjIxODU6XFx0XFx0XFx0aWYgKGlzX3NtbSh2Y3B1KSlcXG4yMTg2OlxcdFxcdFxcdFxcdGt2bV9zbW1fY2hhbmdlZCh2Y3B1LCBmYWxzZSk7XFxuMjE4NzpcXHQjZW5kaWZcXG4yMTg4OlxcdFxcdFxcdGt2bV92Y3B1X3Jlc2V0KHZjcHUsIHRydWUpO1xcbjIxODk6XFx0XFx0fVxcbjIxOTA6XFx0XFxuMjE5MTpcXHRcXHRrdm1fcnVuLVxcdTAwM2VleGl0X3JlYXNvbiA9IEtWTV9FWElUX1NIVVRET1dOO1xcbjIxOTI6XFx0XFx0cmV0dXJuIDA7XFxuMjE5MzpcXHR9XFxuMjE5NDpcXHRcXG4yMTk1OlxcdHN0YXRpYyBpbnQgaW9faW50ZXJjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4yMTk2OlxcdHtcXG4yMTk3OlxcdFxcdHN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpO1xcbjIxOTg6XFx0XFx0dTMyIGlvX2luZm8gPSBzdm0tXFx1MDAzZXZtY2ItXFx1MDAzZWNvbnRyb2wuZXhpdF9pbmZvXzE7IC8qIGFkZHJlc3Mgc2l6ZSBidWc/ICovXFxuMjE5OTpcXHRcXHRpbnQgc2l6ZSwgaW4sIHN0cmluZztcXG4yMjAwOlxcdFxcdHVuc2lnbmVkIHBvcnQ7XFxuMjIwMTpcXHRcXG4yMjAyOlxcdFxcdCsrdmNwdS1cXHUwMDNlc3RhdC5pb19leGl0cztcXG4yMjAzOlxcdFxcdHN0cmluZyA9IChpb19pbmZvIFxcdTAwMjYgU1ZNX0lPSU9fU1RSX01BU0spICE9IDA7XFxuMjIwNDpcXHRcXHRpbiA9IChpb19pbmZvIFxcdTAwMjYgU1ZNX0lPSU9fVFlQRV9NQVNLKSAhPSAwO1xcbjIyMDU6XFx0XFx0cG9ydCA9IGlvX2luZm8gXFx1MDAzZVxcdTAwM2UgMTY7XFxuMjIwNjpcXHRcXHRzaXplID0gKGlvX2luZm8gXFx1MDAyNiBTVk1fSU9JT19TSVpFX01BU0spIFxcdTAwM2VcXHUwMDNlIFNWTV9JT0lPX1NJWkVfU0hJRlQ7XFxuMjIwNzpcXHRcXG4yMjA4OlxcdFxcdGlmIChzdHJpbmcpIHtcXG4yMjA5OlxcdFxcdFxcdGlmIChpc19zZXZfZXNfZ3Vlc3QodmNwdSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjMyOjI0LjQzMTYyMjE0M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTUzNDAzODQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVk1DQiBDbGVhcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgbG9naWMgZml4IHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSB0aGUgVk1DQiBkdXJpbmcgYSBTSFVURE9XTiBpbnRlcmNlcHQgaW4gdGhlIEFNRCBTVk0gZW52aXJvbm1lbnQuIFByZXZpb3VzbHksIHdlIHdlcmUgdXNpbmcgYGNsZWFyX3BhZ2Uoc3ZtLVx1MDAzZXZtY2IpYCB0byB3aXBlIHRoZSBlbnRpcmUgVk1DQi4gVGhhdCB3YXMuLi4gaW5lZmZpY2llbnQsIGFuZCwgYXMgdGhpcyBwYXRjaCBjbGFyaWZpZXMsIHByb2JhYmx5IGluY29ycmVjdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJXYWl0LCBpcyB0aGlzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5P1wiIFlvdSBrbm93LCB0aGUgdXN1YWwgS01TQU4gY29uY2VybnMuIEJ1dCBhZnRlciBkaWdnaW5nIGluLCBpdCdzIGNsZWFyIHRoaXMgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gdGhlIEtNU0FOIHNlbnNlIGF0IGFsbC4gVGhlIFZNQ0IgaXMgKmFscmVhZHkqIGluaXRpYWxpemVkIHdoZW4gdGhlIHZDUFUgaXMgY3JlYXRlZC4gVGhlIFwidW5kZWZpbmVkXCIgc3RhdGUgd2UncmUgZGVhbGluZyB3aXRoIGhlcmUgaXNuJ3QgYWJvdXQgQy1sZXZlbCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBsaWtlIHlvdSdkIHNlZSB3aXRoIGBrbWFsbG9jYCBvciBzdGFjayBhbGxvY2F0aW9ucyB0aGF0IEtNU0FOIHRyYWNrcy5cblxuV2hhdCB0aGUgQU1EIGRvY3VtZW50YXRpb24gc3BlY2lmaWVzIGlzIHRoYXQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQsIHRoZSAqY29udGVudHMqIG9mIHRoZSBzYXZlIGFyZWEgYW5kICpzb21lKiBjb250cm9sIGZpZWxkcyBpbiB0aGUgVk1DQiBiZWNvbWUgYXJjaGl0ZWN0dXJhbGx5IHVuZGVmaW5lZC4gVGhlIHBhdGNoJ3MgZ29hbCBpcyB0byBlbnN1cmUgdGhvc2UgKnNwZWNpZmljKiBhcmVhcyBhcmUgaW4gYSBrbm93biwgemVyb2VkIHN0YXRlLiBQcmV2aW91c2x5LCB3ZSB3ZXJlIG51a2luZyB0aGUgZW50aXJlIDRLQiBwYWdlLCB3aGljaCB3YXMgb3ZlcmtpbGwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBsaWtlbHkgZGVzdHJveWluZyBvdGhlciBjb250cm9sIGZpZWxkcyB0aGF0IEtWTSByZWxpZXMgb24gdG8gYmUgdmFsaWQgYWNyb3NzIGEgU0hVVERPV04gKHNpbmNlIEtWTSBzeW50aGVzaXplcyBhbiBJTklUKS5cblxuU28sIHRoaXMgcGF0Y2ggY2hhbmdlcyBmcm9tIGBjbGVhcl9wYWdlYCB0byBhIHRhcmdldGVkIGBtZW1zZXRgIGZvciBqdXN0IHRoZSBwcm9ibGVtYXRpYyBhcmVhcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlc2lnbmVkIHRvIGJldHRlciBhbGlnbiB3aXRoIHRoZSBBTUQgaGFyZHdhcmUgc3BlY2lmaWNhdGlvbi4gSXQncyBhIGxvZ2ljIGJ1ZyBmaXgsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiB0aGUgS01TQU4gc2Vuc2UuIFRoZSBWTUNCIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgbG9uZyBiZWZvcmUgdGhpcyBwb2ludCwgYW5kIHRoaXMgZml4IGlzIHNwZWNpZmljYWxseSBhYm91dCB0aGUgKmFyY2hpdGVjdHVyYWwqIHN0YXRlIG9mIHRoZSBWTUNCIGFmdGVyIHRoZSBTSFVURE9XTiwgbm90IEMtbGV2ZWwgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOIHdvdWxkbid0IGJlIGFibGUgdG8gZGV0ZWN0IGFueXRoaW5nIGhlcmUgYmVjYXVzZSBpdCdzIG5vdCBsb29raW5nIGF0IHRoZSBoYXJkd2FyZSBkZWZpbmVkIHN0YXRlcy4gVGhpcyBwYXRjaCBpcyBqdXN0IGNsZWFuaW5nIHVwIGFuIGlzc3VlIG9mIGNvbnRyb2wgc3RydWN0dXJlcyBiZWluZyBvdmVyd3JpdHRlbi5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBhIGNsZWFuIGxvZ2ljIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI0MiwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjozMjozOS45NjU2NjI1NTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGxvZ2ljIGlzc3VlIHdoZXJlIHRoZSBBTUQgU1ZNIGFyY2hpdGVjdHVyZSBsZWF2ZXMgc3BlY2lmaWMgcGFydHMgb2YgdGhlIFZNQ0IgKHRoZSBzYXZlIGFyZWEgYW5kIGNlcnRhaW4gY29udHJvbCBmaWVsZHMpIHVuZGVmaW5lZCBhZnRlciBhIFNIVVRET1dOIGludGVyY2VwdC4gUHJldmlvdXNseSwgS1ZNIGNsZWFyZWQgdGhlIGVudGlyZSBWTUNCIHBhZ2UsIHdoaWNoIGxpa2VseSBkZXN0cm95ZWQgb3RoZXIgdmFsaWQgY29udHJvbCBmaWVsZHMuIFRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMgdG8gb25seSBjbGVhciB0aGUgYXJjaGl0ZWN0dXJhbGx5IHVuZGVmaW5lZCBmaWVsZHMuIFRoaXMgXFxcInVuZGVmaW5lZFxcXCIgc3RhdGUgcmVmZXJzIHRvIHRoZSBoYXJkd2FyZSBzcGVjaWZpY2F0aW9uLCBub3QgQy1sZXZlbCB1bmluaXRpYWxpemVkIG1lbW9yeSAodGhlIFZNQ0IgcGFnZSBpdHNlbGYgaXMgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHRoZSBrZXJuZWwncyBwZXJzcGVjdGl2ZSkuIEtNU0FOIHRyYWNrcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGtlcm5lbCBhbGxvY2F0aW9ucyAoc3RhY2ssIGhlYXApIGFuZCB3b3VsZCBub3QgZGV0ZWN0IGhhcmR3YXJlLWxldmVsIHVuZGVmaW5lZCBzdGF0ZSBpbiBhbiBhbHJlYWR5LWFsbG9jYXRlZCBwYWdlLiBUaGVyZWZvcmUsIHRoaXMgaXMgYSBsb2dpYyBidWcgZml4IGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBieSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBsb2dpYyBpc3N1ZSB3aGVyZSB0aGUgQU1EIFNWTSBhcmNoaXRlY3R1cmUgbGVhdmVzIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBWTUNCICh0aGUgc2F2ZSBhcmVhIGFuZCBjZXJ0YWluIGNvbnRyb2wgZmllbGRzKSB1bmRlZmluZWQgYWZ0ZXIgYSBTSFVURE9XTiBpbnRlcmNlcHQuIFByZXZpb3VzbHksIEtWTSBjbGVhcmVkIHRoZSBlbnRpcmUgVk1DQiBwYWdlLCB3aGljaCBsaWtlbHkgZGVzdHJveWVkIG90aGVyIHZhbGlkIGNvbnRyb2wgZmllbGRzLiBUaGUgcGF0Y2ggY2hhbmdlcyB0aGlzIHRvIG9ubHkgY2xlYXIgdGhlIGFyY2hpdGVjdHVyYWxseSB1bmRlZmluZWQgZmllbGRzLiBUaGlzIFxcXCJ1bmRlZmluZWRcXFwiIHN0YXRlIHJlZmVycyB0byB0aGUgaGFyZHdhcmUgc3BlY2lmaWNhdGlvbiwgbm90IEMtbGV2ZWwgdW5pbml0aWFsaXplZCBtZW1vcnkgKHRoZSBWTUNCIHBhZ2UgaXRzZWxmIGlzIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUpLiBLTVNBTiB0cmFja3MgdW5pbml0aWFsaXplZCBtZW1vcnkgZnJvbSBrZXJuZWwgYWxsb2NhdGlvbnMgKHN0YWNrLCBoZWFwKSBhbmQgd291bGQgbm90IGRldGVjdCBoYXJkd2FyZS1sZXZlbCB1bmRlZmluZWQgc3RhdGUgaW4gYW4gYWxyZWFkeS1hbGxvY2F0ZWQgcGFnZS4gVGhlcmVmb3JlLCB0aGlzIGlzIGEgbG9naWMgYnVnIGZpeCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgYnkgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tcmm[1] Phase: Succeeded StartedAt: 2026-08-24 16:32:52 +0000 UTC FinishedAt: 2026-08-24 16:32:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 16:32:52 +0000 UTC FinishedAt: 2026-08-24 16:32:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2] Phase: Succeeded StartedAt: 2026-08-24 16:32:52 +0000 UTC FinishedAt: 2026-08-24 17:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-24 16:32:52 +0000 UTC FinishedAt: 2026-08-24 17:55:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-24 16:32:52 +0000 UTC FinishedAt: 2026-08-24 16:33:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-24 16:32:52 +0000 UTC FinishedAt: 2026-08-24 16:32:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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-workflow4tcmm/series-workflow4tcmm-convert-artifact-1493385035/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-24 16:33:02 +0000 UTC FinishedAt: 2026-08-24 16:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-24 16:33:02 +0000 UTC FinishedAt: 2026-08-24 16:52:18 +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:*a5cea346-e3b3-4693-b408-a29c0a23ab95,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-workflow4tcmm/series-workflow4tcmm-convert-artifact-1493385035/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": "a3e92698-4cd9-42c9-bd7a-d4e1d8ff8cfe", "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-workflow4tcmm/series-workflow4tcmm-build-action-969324105/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-24 16:33:02 +0000 UTC FinishedAt: 2026-08-24 16:52:08 +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:*a5cea346-e3b3-4693-b408-a29c0a23ab95,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-workflow4tcmm/series-workflow4tcmm-convert-artifact-1493385035/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": "a3e92698-4cd9-42c9-bd7a-d4e1d8ff8cfe", "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-workflow4tcmm/series-workflow4tcmm-build-action-969324105/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-24 16:52:18 +0000 UTC FinishedAt: 2026-08-24 16:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-24 16:52:18 +0000 UTC FinishedAt: 2026-08-24 16:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-24 16:52:18 +0000 UTC FinishedAt: 2026-08-24 16:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-24 16:52:18 +0000 UTC FinishedAt: 2026-08-24 16:52:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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-workflow4tcmm/series-workflow4tcmm-convert-artifact-3965272738/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-24 16:52:28 +0000 UTC FinishedAt: 2026-08-24 16:54:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-24 16:52:28 +0000 UTC FinishedAt: 2026-08-24 16:54:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a3e92698-4cd9-42c9-bd7a-d4e1d8ff8cfe,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-workflow4tcmm/series-workflow4tcmm-build-action-969324105/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-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-24 16:54:47 +0000 UTC FinishedAt: 2026-08-24 16:54:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-24 16:54:47 +0000 UTC FinishedAt: 2026-08-24 16:54:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-24 16:54:47 +0000 UTC FinishedAt: 2026-08-24 17:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-24 16:54:47 +0000 UTC FinishedAt: 2026-08-24 17:15:11 +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:*a5cea346-e3b3-4693-b408-a29c0a23ab95,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-workflow4tcmm/series-workflow4tcmm-convert-artifact-3965272738/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": "6caa7286-5a1f-4fa7-a54a-7ef66c580899", "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-workflow4tcmm/series-workflow4tcmm-build-action-2050130678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-24 16:54:47 +0000 UTC FinishedAt: 2026-08-24 17:14:45 +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:*a5cea346-e3b3-4693-b408-a29c0a23ab95,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-workflow4tcmm/series-workflow4tcmm-convert-artifact-3965272738/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": "6caa7286-5a1f-4fa7-a54a-7ef66c580899", "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-workflow4tcmm/series-workflow4tcmm-build-action-2050130678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-24 17:15:11 +0000 UTC FinishedAt: 2026-08-24 17:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-24 17:15:11 +0000 UTC FinishedAt: 2026-08-24 17:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-24 17:15:11 +0000 UTC FinishedAt: 2026-08-24 17:16:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-24 17:15:11 +0000 UTC FinishedAt: 2026-08-24 17:16:50 +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:*6caa7286-5a1f-4fa7-a54a-7ef66c580899,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-workflow4tcmm/series-workflow4tcmm-build-action-2050130678/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-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-24 17:16:59 +0000 UTC FinishedAt: 2026-08-24 17:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-24 17:16:59 +0000 UTC FinishedAt: 2026-08-24 17:55:07 +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":["shutdown_interception"],"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:*a3e92698-4cd9-42c9-bd7a-d4e1d8ff8cfe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6caa7286-5a1f-4fa7-a54a-7ef66c580899,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-workflow4tcmm/series-workflow4tcmm-build-action-969324105/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-workflow4tcmm/series-workflow4tcmm-build-action-2050130678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-24 17:16:59 +0000 UTC FinishedAt: 2026-08-24 17:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-24 17:16:59 +0000 UTC FinishedAt: 2026-08-24 17:17:06 +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":["shutdown_interception"],"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-workflow4tcmm/series-workflow4tcmm-convert-artifact-2378208215/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-24 17:16:59 +0000 UTC FinishedAt: 2026-08-24 17:16:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-24 17:16:59 +0000 UTC FinishedAt: 2026-08-24 17:16:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-24 17:16:59 +0000 UTC FinishedAt: 2026-08-24 17:16:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-24 17:17:09 +0000 UTC FinishedAt: 2026-08-24 17:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4tcmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/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":["shutdown_interception"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b731e5ded480bd1e5546aed35584238661ce72e","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD"],"series_id":"c3f5929e-b7f8-4dd0-9d0a-76c010b4da47","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-24 17:17:09 +0000 UTC FinishedAt: 2026-08-24 17:54:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a3e92698-4cd9-42c9-bd7a-d4e1d8ff8cfe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6caa7286-5a1f-4fa7-a54a-7ef66c580899,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-workflow4tcmm/series-workflow4tcmm-build-action-969324105/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-workflow4tcmm/series-workflow4tcmm-build-action-2050130678/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-workflow4tcmm/series-workflow4tcmm-convert-artifact-2378208215/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,}