Name: series-workflowrzfjm Phase: Succeeded StartedAt: 2026-07-28 06:21:31 +0000 UTC FinishedAt: 2026-07-28 08:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[0] Phase: Succeeded StartedAt: 2026-07-28 06:21:31 +0000 UTC FinishedAt: 2026-07-28 06:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 06:21:31 +0000 UTC FinishedAt: 2026-07-28 06:43:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFI", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFI", "BPF_JIT" ], "series_id": "0351e2ac-97b3-437a-b7e1-164dea218d95" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "arch_prepare_bpf_trampoline" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA2OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGSSYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSkgc3VwcG9ydCBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byBlbWl0IEtDRkkgaGFzaGVzIGZvciBCUEYgcHJvZ3JhbXMgYW5kIHRyYW1wb2xpbmVzLCBhbmQgdXBkYXRlcyBhc3NlbWJseSBmdW5jdGlvbnMgdG8gdXNlIHR5cGVkIGZ1bmN0aW9uIG1hY3Jvcy4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHdoZW4gQlBGIHByb2dyYW1zIGFyZSBsb2FkZWQgb3IgdHJhbXBvbGluZXMgYXJlIGF0dGFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA2OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjk4NGFiODU0NGQzMjNlYzhhNWE4MjJjNTc1MTc5MTBlZGFiMjhiNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDA2OjQxOjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcbmluZGV4IDg0NDA0ZTY3NzhkNTA0Li5lYzk2NTk1Y2FlMzlmMCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTE0NCw2ICYjNDM7MTQ0LDcgQEAgY29uZmlnIFMzOTBcbiBcdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxuIFx0c2VsZWN0IEFSQ0hfU1RBQ0tXQUxLXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19BVE9NSUNfUk1XXG4mIzQzO1x0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ0ZJXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0NcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSU5UMTI4IGlmIENDX0hBU19JTlQxMjggXHUwMDI2XHUwMDI2IENDX0lTX0NMQU5HXG5AQCAtMTUxLDYgJiM0MzsxNTIsNyBAQCBjb25maWcgUzM5MFxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuJiM0MztcdHNlbGVjdCBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTIGlmIENDX0lTX0NMQU5HXG4gXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxuIFx0c2VsZWN0IEFSQ0hfVVNFX0NNUFhDSEdfTE9DS1JFRlxuIFx0c2VsZWN0IEFSQ0hfVVNFX1NZTV9BTk5PVEFUSU9OU1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jZmkuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jZmkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45YWYyYzdjYjcwY2E3YVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NmaS5oXG5AQCAtMCwwICYjNDM7MSw3IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX0FTTV9TMzkwX0NGSV9IXG4mIzQzOyNkZWZpbmUgX0FTTV9TMzkwX0NGSV9IXG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9fYnBmY2FsbFxuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9BU01fUzM5MF9DRklfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvbWNvdW50LlMgYi9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TXG5pbmRleCAxZmVjMzcwZmVjZjQ4MS4uNmJjNDRjNzY3NjQyZTUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gICpcbiAgKi9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2ZpX3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saW5rYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLW9mZnNldHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mdHJhY2UuaFx1MDAzZVxuQEAgLTM0LDEwICYjNDM7MzUsMTYgQEBcbiBcbiBcdC5zZWN0aW9uIC5rcHJvYmVzLnRleHQsIFwmIzM0O2F4XCYjMzQ7XG4gXG4tU1lNX0ZVTkNfU1RBUlQoZnRyYWNlX3N0dWIpXG4mIzQzO1NZTV9UWVBFRF9GVU5DX1NUQVJUKGZ0cmFjZV9zdHViKVxuIFx0QlJfRVhcdCVyMTRcbiBTWU1fRlVOQ19FTkQoZnRyYWNlX3N0dWIpXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4mIzQzO1NZTV9UWVBFRF9GVU5DX1NUQVJUKGZ0cmFjZV9zdHViX2dyYXBoKVxuJiM0MztcdEJSX0VYXHQlcjE0XG4mIzQzO1NZTV9GVU5DX0VORChmdHJhY2Vfc3R1Yl9ncmFwaClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFNZTV9DT0RFX1NUQVJUKGZ0cmFjZV9zdHViX2RpcmVjdF90cmFtcClcbiBcdGxnclx0JXIxLCAlcjBcbiBcdEJSX0VYXHQlcjFcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RleHRfYW1vZGUzMS5TIGIvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuU1xuaW5kZXggMjZmMjk4MWFhMDllMzEuLmYwMDdkODkyZDBjNWZkIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuU1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuU1xuQEAgLTUsNiAmIzQzOzUsNyBAQFxuICAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxOVxuICAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jZmlfdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbmthZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9hc20tZXh0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2Vycm5vLmhcdTAwM2VcbkBAIC0yNiw3ICYjNDM7MjcsNyBAQFxuIC8qXG4gICogaW50IF9kaWFnMTRfYW1vZGUzMSh1bnNpZ25lZCBsb25nIHJ4LCB1bnNpZ25lZCBsb25nIHJ5MSwgdW5zaWduZWQgbG9uZyBzdWJjb2RlKVxuICAqL1xuLVNZTV9GVU5DX1NUQVJUKF9kaWFnMTRfYW1vZGUzMSlcbiYjNDM7U1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcxNF9hbW9kZTMxKVxuIFx0bGdyXHQlcjEsJXIyXG4gXHRsZ3JcdCVyMiwlcjNcbiBcdGxnclx0JXIzLCVyNFxuQEAgLTQ2LDcgJiM0Mzs0Nyw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzE0X2Ftb2RlMzEpXG4gLypcbiAgKiBpbnQgX2RpYWcyMTBfYW1vZGUzMShzdHJ1Y3QgZGlhZzIxMCAqYWRkcilcbiAgKi9cbi1TWU1fRlVOQ19TVEFSVChfZGlhZzIxMF9hbW9kZTMxKVxuJiM0MztTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzIxMF9hbW9kZTMxKVxuIFx0bGdyXHQlcjEsJXIyXG4gXHRsaGlcdCVyMiwtMVxuIFx0c2FtMzFcbkBAIC02NCw3ICYjNDM7NjUsNyBAQCBTWU1fRlVOQ19FTkQoX2RpYWcyMTBfYW1vZGUzMSlcbiAvKlxuICAqIGludCBkaWFnOGMoc3RydWN0IGRpYWc4YyAqYWRkciwgc3RydWN0IGNjd19kZXZfaWQgKmRldm5vLCBzaXplX3QgbGVuKVxuICovXG4tU1lNX0ZVTkNfU1RBUlQoX2RpYWc4Y19hbW9kZTMxKVxuJiM0MztTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzhjX2Ftb2RlMzEpXG4gXHRsbGdmXHQlcjMsMCglcjMpXG4gXHRzYW0zMVxuIFx0ZGlhZ1x0JXIyLCVyNCwweDhjXG5AQCAtNzcsNyAmIzQzOzc4LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnOGNfYW1vZGUzMSlcbiAvKlxuICAqIGludCBfZGlhZzI2Y19hbW9kZTMxKHZvaWQgKnJlcSwgdm9pZCAqcmVzcCwgZW51bSBkaWFnMjZjX3NjIHN1YmNvZGUpXG4gICovXG4tU1lNX0ZVTkNfU1RBUlQoX2RpYWcyNmNfYW1vZGUzMSlcbiYjNDM7U1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcyNmNfYW1vZGUzMSlcbiBcdGxnaGlcdCVyNSwtRU9QTk9UU1VQUFxuIFx0c2FtMzFcbiBcdGRpYWdcdCVyMiwlcjQsMHgyNmNcbkBAIC05MSw3ICYjNDM7OTIsNyBAQCBTWU1fRlVOQ19FTkQoX2RpYWcyNmNfYW1vZGUzMSlcbiAvKlxuICAqIHZvaWQgX2RpYWcwY19hbW9kZTMxKHVuc2lnbmVkIGxvbmcgcngpXG4gICovXG4tU1lNX0ZVTkNfU1RBUlQoX2RpYWcwY19hbW9kZTMxKVxuJiM0MztTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzBjX2Ftb2RlMzEpXG4gXHRzYW0zMVxuIFx0ZGlhZ1x0JXIyLCVyMiwweDBjXG4gXHRzYW02NFxuQEAgLTEwMyw3ICYjNDM7MTA0LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMGNfYW1vZGUzMSlcbiAgKlxuICAqIENhbGxzIGRpYWcgMzA4IHN1YmNvZGUgMSBhbmQgY29udGludWVzIGV4ZWN1dGlvblxuICAqL1xuLVNZTV9GVU5DX1NUQVJUKF9kaWFnMzA4X3Jlc2V0X2Ftb2RlMzEpXG4mIzQzO1NZTV9UWVBFRF9GVU5DX1NUQVJUKF9kaWFnMzA4X3Jlc2V0X2Ftb2RlMzEpXG4gXHRsYXJsXHQlcjQsY3RscmVnc1x0XHQjIFNhdmUgY29udHJvbCByZWdpc3RlcnNcbiBcdHN0Y3RnXHQlYzAsJWMxNSwwKCVyNClcbiBcdGxnXHQlcjIsMCglcjQpXHRcdCMgRGlzYWJsZSBsb3djb3JlIHByb3RlY3Rpb25cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggMzE3NDljMDM2MmNhMjMuLjdmNDVjMTA2NDQ0ZGU0IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTIxLDYgJiM0MzsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsdGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jZmkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9jYWNoZWZsdXNoLmhcdTAwM2VcbkBAIC0zNTYsNiAmIzQzOzM1NywxOSBAQCBzdGF0aWMgdm9pZCBlbWl0Nl9wY3JlbF9yaWxjKHN0cnVjdCBicGZfaml0ICpqaXQsIHUzMiBvcCwgdTggbWFzaywgczY0IHBjcmVsKVxuIFx0fVx0XHRcdFx0XHRcdFx0XFxcbiB9KVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF91MzJfZGF0YShjb25zdCB1MzIgZGF0YSwgc3RydWN0IGJwZl9qaXQgKmppdClcbiYjNDM7e1xuJiM0MztcdGlmIChqaXQtXHUwMDNlcHJnX2J1ZilcbiYjNDM7XHRcdCoodTMyICopKGppdC1cdTAwM2VwcmdfYnVmICYjNDM7IGppdC1cdTAwM2VwcmcpID0gZGF0YTtcbiYjNDM7XHRqaXQtXHUwMDNlcHJnICYjNDM7PSA0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF9rY2ZpKHUzMiBoYXNoLCBzdHJ1Y3QgYnBmX2ppdCAqaml0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NGSSkpXG4mIzQzO1x0XHRlbWl0X3UzMl9kYXRhKGhhc2gsIGppdCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBSZXR1cm4gd2hldGhlciB0aGlzIGlzIHRoZSBmaXJzdCBwYXNzLiBUaGUgZmlyc3QgcGFzcyBpcyBzcGVjaWFsLCBzaW5jZSB3ZVxuICAqIGRvbiYjMzk7dCBrbm93IGFueSBzaXplcyB5ZXQsIGFuZCB0aHVzIG11c3QgYmUgY29uc2VydmF0aXZlLlxuQEAgLTU5Nyw2ICYjNDM7NjExLDggQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuIHtcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHByb2dfZnJhbWUpICE9IFNUQUNLX0ZSQU1FX09WRVJIRUFEKTtcbiBcbiYjNDM7XHRlbWl0X2tjZmkoYnBmX2lzX3N1YnByb2coZnApID8gY2ZpX2JwZl9zdWJwcm9nX2hhc2ggOiBjZmlfYnBmX2hhc2gsIGppdCk7XG4mIzQzO1xuIFx0LyogTm8tb3AgZm9yIGhvdHBhdGNoaW5nICovXG4gXHQvKiBicmNsIDAscHJvbG9ndWVfcGx0ICovXG4gXHRFTUlUNl9QQ1JFTF9SSUxDKDB4YzAwNDAwMDAsIDAsIGppdC1cdTAwM2Vwcm9sb2d1ZV9wbHQpO1xuQEAgLTYxNiw3ICYjNDM7NjMyLDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuIFx0XHRicGZfc2tpcChqaXQsIDYpO1xuIFx0fVxuIFx0LyogVGFpbCBjYWxscyBoYXZlIHRvIHNraXAgYWJvdmUgaW5pdGlhbGl6YXRpb24gKi9cbi1cdGppdC1cdTAwM2V0YWlsX2NhbGxfc3RhcnQgPSBqaXQtXHUwMDNlcHJnO1xuJiM0MztcdGppdC1cdTAwM2V0YWlsX2NhbGxfc3RhcnQgPSBqaXQtXHUwMDNlcHJnIC0gY2ZpX2dldF9vZmZzZXQoKTtcbiBcdGlmIChmcC1cdTAwM2VhdXgtXHUwMDNlZXhjZXB0aW9uX2NiKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFN3aXRjaCBzdGFjaywgdGhlIG5ldyBhZGRyZXNzIGlzIGluIHRoZSAybmQgcGFyYW1ldGVyLlxuQEAgLTI0MDEsMTEgJiM0MzsyNDE3LDEzIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHRcdGppdF9kYXRhLVx1MDAzZWN0eCA9IGppdDtcbiBcdFx0aml0X2RhdGEtXHUwMDNlcGFzcyA9IHBhc3M7XG4gXHR9XG4tXHRmcC1cdTAwM2VicGZfZnVuYyA9ICh2b2lkICopIGppdC5wcmdfYnVmO1xuJiM0MztcdGZwLVx1MDAzZWJwZl9mdW5jID0gKHZvaWQgKilqaXQucHJnX2J1ZiAmIzQzOyBjZmlfZ2V0X29mZnNldCgpO1xuIFx0ZnAtXHUwMDNlaml0ZWQgPSAxO1xuLVx0ZnAtXHUwMDNlaml0ZWRfbGVuID0gaml0LnNpemU7XG4mIzQzO1x0ZnAtXHUwMDNlaml0ZWRfbGVuID0gaml0LnNpemUgLSBjZmlfZ2V0X29mZnNldCgpO1xuIFxuIFx0aWYgKCFmcC1cdTAwM2Vpc19mdW5jIHx8IGV4dHJhX3Bhc3MpIHtcbiYjNDM7XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBmcC1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRqaXQuYWRkcnNbaV0gLT0gY2ZpX2dldF9vZmZzZXQoKTtcbiBcdFx0YnBmX3Byb2dfZmlsbF9qaXRlZF9saW5mbyhmcCwgaml0LmFkZHJzICYjNDM7IDEpO1xuIGZyZWVfYWRkcnM6XG4gXHRcdGt2ZnJlZShqaXQuYWRkcnMpO1xuQEAgLTI2NzEsOCAmIzQzOzI2ODksMTAgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbiBcbiBcdC8qIFJldHVybiB0byAlcjE0IGluIHRoZSBzdHJ1Y3Rfb3BzIGNhc2UuICovXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKVxuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIHtcbiBcdFx0ZmxhZ3MgfD0gQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRTtcbiYjNDM7XHRcdGVtaXRfa2NmaShjZmlfZ2V0X2Z1bmNfaGFzaChmdW5jX2FkZHIpLCBqaXQpO1xuJiM0MztcdH1cbiBcbiBcdC8qXG4gXHQgKiBDb21wdXRlIGhvdyBtYW55IGFyZ3VtZW50cyB3ZSBuZWVkIHRvIHBhc3MgdG8gQlBGIHByb2dyYW1zLlxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC90b29scy9yZWxvY3MuYyBiL2FyY2gvczM5MC90b29scy9yZWxvY3MuY1xuaW5kZXggMzBhNzMyYzgwOGYzNWUuLjcyMTc4ZGM5MGE0Y2Y4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvdG9vbHMvcmVsb2NzLmNcbkBAIC00MSw2ICYjNDM7NDEsMTAgQEBcbiBzdGF0aWMgRWxmX0VoZHJcdFx0ZWhkcjtcbiBzdGF0aWMgdW5zaWduZWQgbG9uZ1x0c2hudW07XG4gc3RhdGljIHVuc2lnbmVkIGludFx0c2hzdHJuZHg7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnRcdHNoc3ltdGFibmR4O1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50XHRzaHhzeW10YWJuZHg7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHN5bV9pbmRleChFbGZfU3ltICpzeW0pO1xuIFxuIHN0cnVjdCByZWxvY3Mge1xuIFx0dWludDMyX3RcdCpvZmZzZXQ7XG5AQCAtNTQsMTEgJiM0Mzs1OCw0MCBAQCBzdGF0aWMgc3RydWN0IHJlbG9jcyByZWxvY3M2NDtcbiBzdHJ1Y3Qgc2VjdGlvbiB7XG4gXHRFbGZfU2hkclx0c2hkcjtcbiBcdHN0cnVjdCBzZWN0aW9uXHQqbGluaztcbiYjNDM7XHRFbGZfU3ltXHRcdCpzeW10YWI7XG4mIzQzO1x0RWxmMzJfV29yZFx0KnhzeW10YWI7XG4gXHRFbGZfUmVsXHRcdCpyZWx0YWI7XG4mIzQzO1x0Y2hhclx0XHQqc3RydGFiO1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBzZWN0aW9uICpzZWNzO1xuIFxuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqc2VjX25hbWUodW5zaWduZWQgc2huZHgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpzZWNfc3RydGFiO1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWUgPSBcJiMzNDtcdTAwM2Nub25hbWVcdTAwM2VcJiMzNDs7XG4mIzQzO1x0c2VjX3N0cnRhYiA9IHNlY3Nbc2hzdHJuZHhdLnN0cnRhYjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNobmR4IFx1MDAzYyBzaG51bSlcbiYjNDM7XHRcdG5hbWUgPSBzZWNfc3RydGFiICYjNDM7IHNlY3Nbc2huZHhdLnNoZHIuc2hfbmFtZTtcbiYjNDM7XHRlbHNlIGlmIChzaG5keCA9PSBTSE5fQUJTKVxuJiM0MztcdFx0bmFtZSA9IFwmIzM0O0FCU09MVVRFXCYjMzQ7O1xuJiM0MztcdGVsc2UgaWYgKHNobmR4ID09IFNITl9DT01NT04pXG4mIzQzO1x0XHRuYW1lID0gXCYjMzQ7Q09NTU9OXCYjMzQ7O1xuJiM0MztcdHJldHVybiBuYW1lO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqc3ltX25hbWUoY29uc3QgY2hhciAqc3ltX3N0cnRhYiwgRWxmX1N5bSAqc3ltKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN5bS1cdTAwM2VzdF9uYW1lKVxuJiM0MztcdFx0bmFtZSA9IHN5bV9zdHJ0YWIgJiM0Mzsgc3ltLVx1MDAzZXN0X25hbWU7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmFtZSA9IHNlY19uYW1lKHN5bV9pbmRleChzeW0pKTtcbiYjNDM7XHRyZXR1cm4gbmFtZTtcbiYjNDM7fVxuJiM0MztcbiAjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOXG4gI2RlZmluZSBsZTE2X3RvX2NwdSh2YWwpXHQodmFsKVxuICNkZWZpbmUgbGUzMl90b19jcHUodmFsKVx0KHZhbClcbkBAIC0xMDUsNiAmIzQzOzEzOCwyMyBAQCBzdGF0aWMgdWludDY0X3QgZWxmNjRfdG9fY3B1KHVpbnQ2NF90IHZhbClcbiAjZGVmaW5lIGVsZl9vZmZfdG9fY3B1KHgpXHRlbGY2NF90b19jcHUoeClcbiAjZGVmaW5lIGVsZl94d29yZF90b19jcHUoeClcdGVsZjY0X3RvX2NwdSh4KVxuIFxuJiM0MztzdGF0aWMgaW50IHN5bV9pbmRleChFbGZfU3ltICpzeW0pXG4mIzQzO3tcbiYjNDM7XHRFbGZfU3ltICpzeW10YWIgPSBzZWNzW3Noc3ltdGFibmR4XS5zeW10YWI7XG4mIzQzO1x0RWxmMzJfV29yZCAqeHN5bXRhYiA9IHNlY3Nbc2h4c3ltdGFibmR4XS54c3ltdGFiO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0O1xuJiM0MztcdGludCBpbmRleDtcbiYjNDM7XG4mIzQzO1x0aWYgKHN5bS1cdTAwM2VzdF9zaG5keCAhPSBTSE5fWElOREVYKVxuJiM0MztcdFx0cmV0dXJuIHN5bS1cdTAwM2VzdF9zaG5keDtcbiYjNDM7XG4mIzQzO1x0LyogY2FsY3VsYXRlIG9mZnNldCBvZiBzeW0gZnJvbSBoZWFkIG9mIHRhYmxlLiAqL1xuJiM0MztcdG9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXN5bSAtICh1bnNpZ25lZCBsb25nKXN5bXRhYjtcbiYjNDM7XHRpbmRleCA9IG9mZnNldCAvIHNpemVvZigqc3ltKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVsZjMyX3RvX2NwdSh4c3ltdGFiW2luZGV4XSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZGllKGNoYXIgKmZtdCwgLi4uKVxuIHtcbiBcdHZhX2xpc3QgYXA7XG5AQCAtMjE2LDYgJiM0MzsyNjYsODEgQEAgc3RhdGljIHZvaWQgcmVhZF9zaGRycyhGSUxFICpmcClcbiBcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJlYWRfc3RydGFicyhGSUxFICpmcClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaG51bTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBzZWN0aW9uICpzZWMgPSBcdTAwMjZzZWNzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZWMtXHUwMDNlc2hkci5zaF90eXBlICE9IFNIVF9TVFJUQUIpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNlYy1cdTAwM2VzdHJ0YWIgPSBtYWxsb2Moc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSk7XG4mIzQzO1x0XHRpZiAoIXNlYy1cdTAwM2VzdHJ0YWIpXG4mIzQzO1x0XHRcdGRpZShcJiMzNDttYWxsb2Mgb2YgJVwmIzM0OyBGTVQgXCYjMzQ7IGJ5dGVzIGZvciBzdHJ0YWIgZmFpbGVkXFxuXCYjMzQ7LCBzZWMtXHUwMDNlc2hkci5zaF9zaXplKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZnNlZWsoZnAsIHNlYy1cdTAwM2VzaGRyLnNoX29mZnNldCwgU0VFS19TRVQpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRkaWUoXCYjMzQ7U2VlayB0byAlXCYjMzQ7IEZNVCBcJiMzNDsgZmFpbGVkOiAlc1xcblwmIzM0Oywgc2VjLVx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChmcmVhZChzZWMtXHUwMDNlc3RydGFiLCAxLCBzZWMtXHUwMDNlc2hkci5zaF9zaXplLCBmcCkgIT0gc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSlcbiYjNDM7XHRcdFx0ZGllKFwmIzM0O0Nhbm5vdCByZWFkIHN5bWJvbCB0YWJsZTogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWFkX3N5bXRhYnMoRklMRSAqZnApXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgajtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2hudW07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2VjdGlvbiAqc2VjID0gXHUwMDI2c2Vjc1tpXTtcbiYjNDM7XHRcdGludCBudW1fc3ltcztcbiYjNDM7XG4mIzQzO1x0XHRzd2l0Y2ggKHNlYy1cdTAwM2VzaGRyLnNoX3R5cGUpIHtcbiYjNDM7XHRcdGNhc2UgU0hUX1NZTVRBQl9TSE5EWDpcbiYjNDM7XHRcdFx0c2VjLVx1MDAzZXhzeW10YWIgPSBtYWxsb2Moc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSk7XG4mIzQzO1x0XHRcdGlmICghc2VjLVx1MDAzZXhzeW10YWIpXG4mIzQzO1x0XHRcdFx0ZGllKFwmIzM0O21hbGxvYyBvZiAlXCYjMzQ7IEZNVCBcJiMzNDsgYnl0ZXMgZm9yIHhzeW10YWIgZmFpbGVkXFxuXCYjMzQ7LCBzZWMtXHUwMDNlc2hkci5zaF9zaXplKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChmc2VlayhmcCwgc2VjLVx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBTRUVLX1NFVCkgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0ZGllKFwmIzM0O1NlZWsgdG8gJVwmIzM0OyBGTVQgXCYjMzQ7IGZhaWxlZDogJXNcXG5cJiMzNDssIHNlYy1cdTAwM2VzaGRyLnNoX29mZnNldCwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChmcmVhZChzZWMtXHUwMDNleHN5bXRhYiwgMSwgc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSwgZnApICE9IHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpXG4mIzQzO1x0XHRcdFx0ZGllKFwmIzM0O0Nhbm5vdCByZWFkIGV4dGVuZGVkIHN5bWJvbCB0YWJsZTogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRzaHhzeW10YWJuZHggPSBpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRjYXNlIFNIVF9TWU1UQUI6XG4mIzQzO1x0XHRcdG51bV9zeW1zID0gc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSAvIHNpemVvZihFbGZfU3ltKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHNlYy1cdTAwM2VzeW10YWIgPSBtYWxsb2Moc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSk7XG4mIzQzO1x0XHRcdGlmICghc2VjLVx1MDAzZXN5bXRhYilcbiYjNDM7XHRcdFx0XHRkaWUoXCYjMzQ7bWFsbG9jIG9mICVcJiMzNDsgRk1UIFwmIzM0OyBieXRlcyBmb3Igc3ltdGFiIGZhaWxlZFxcblwmIzM0Oywgc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZnNlZWsoZnAsIHNlYy1cdTAwM2VzaGRyLnNoX29mZnNldCwgU0VFS19TRVQpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGRpZShcJiMzNDtTZWVrIHRvICVcJiMzNDsgRk1UIFwmIzM0OyBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBzZWMtXHUwMDNlc2hkci5zaF9vZmZzZXQsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZnJlYWQoc2VjLVx1MDAzZXN5bXRhYiwgMSwgc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSwgZnApICE9IHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpXG4mIzQzO1x0XHRcdFx0ZGllKFwmIzM0O0Nhbm5vdCByZWFkIHN5bWJvbCB0YWJsZTogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBudW1fc3ltczsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHRFbGZfU3ltICpzeW0gPSBcdTAwMjZzZWMtXHUwMDNlc3ltdGFiW2pdO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRzeW0tXHUwMDNlc3RfbmFtZSAgPSBlbGZfd29yZF90b19jcHUoc3ltLVx1MDAzZXN0X25hbWUpO1xuJiM0MztcdFx0XHRcdHN5bS1cdTAwM2VzdF92YWx1ZSA9IGVsZl9hZGRyX3RvX2NwdShzeW0tXHUwMDNlc3RfdmFsdWUpO1xuJiM0MztcdFx0XHRcdHN5bS1cdTAwM2VzdF9zaXplICA9IGVsZl94d29yZF90b19jcHUoc3ltLVx1MDAzZXN0X3NpemUpO1xuJiM0MztcdFx0XHRcdHN5bS1cdTAwM2VzdF9zaG5keCA9IGVsZl9oYWxmX3RvX2NwdShzeW0tXHUwMDNlc3Rfc2huZHgpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHNoc3ltdGFibmR4ID0gaTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJlYWRfcmVsb2NzKEZJTEUgKmZwKVxuIHtcbiBcdGludCBpLCBqO1xuQEAgLTI2Myw3ICYjNDM7Mzg4LDggQEAgc3RhdGljIHZvaWQgYWRkX3JlbG9jKHN0cnVjdCByZWxvY3MgKnIsIHVpbnQzMl90IG9mZnNldClcbiBcdHItXHUwMDNlb2Zmc2V0W3ItXHUwMDNlY291bnQmIzQzOyYjNDM7XSA9IG9mZnNldDtcbiB9XG4gXG4tc3RhdGljIGludCBkb19yZWxvYyhzdHJ1Y3Qgc2VjdGlvbiAqc2VjLCBFbGZfUmVsICpyZWwpXG4mIzQzO3N0YXRpYyBpbnQgZG9fcmVsb2Moc3RydWN0IHNlY3Rpb24gKnNlYywgRWxmX1JlbCAqcmVsLCBFbGZXKFN5bSkgKnN5bSxcbiYjNDM7XHRcdCAgICBjb25zdCBjaGFyICpzeW1uYW1lKVxuIHtcbiBcdHVuc2lnbmVkIGludCByX3R5cGUgPSBFTEY2NF9SX1RZUEUocmVsLVx1MDAzZXJfaW5mbyk7XG4gXHRFbGZXKEFkZHIpIG9mZnNldCA9IHJlbC1cdTAwM2VyX29mZnNldDtcbkBAIC0yNzksNiAmIzQzOzQwNSwyMiBAQCBzdGF0aWMgaW50IGRvX3JlbG9jKHN0cnVjdCBzZWN0aW9uICpzZWMsIEVsZl9SZWwgKnJlbClcbiBcdGNhc2UgUl8zOTBfR09UUENEQkw6XG4gXHRjYXNlIFJfMzkwX0dPVE9GRjY0OlxuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJfMzkwXzMyOiB7XG4mIzQzO1x0XHRzdGF0aWMgY29uc3QgY2hhciBrY2ZpcGZ4W10gPSBcJiMzNDtfX2tjZmlfdHlwZWlkX1wmIzM0OztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3ltLVx1MDAzZXN0X3NobmR4ICE9IFNITl9BQlMpXG4mIzQzO1x0XHRcdGRpZShcJiMzNDtVbnN1cHBvcnRlZCByZWxvY2F0aW9uIHR5cGU6ICVkXFxuXCYjMzQ7LCByX3R5cGUpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFN5bWJvbHMgd2l0aCBfX2tjZmlfdHlwZWlkXyBwcmVmaXggaGF2ZSBjb25zdGFudCB2YWx1ZXMsXG4mIzQzO1x0XHQgKiB3aGljaCBkbyBub3QgY2hhbmdlIGlmIGJ6SW1hZ2UgaXMgbG9hZGVkIGF0IGEgZGlmZmVyZW50XG4mIzQzO1x0XHQgKiBwaHlzaWNhbCBhZGRyZXNzIHRoYW4gdGhlIGFkZHJlc3MgZm9yIHdoaWNoIGl0IGhhcyBiZWVuXG4mIzQzO1x0XHQgKiBjb21waWxlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFzdHJuY21wKGtjZmlwZngsIHN5bW5hbWUsIHNpemVvZihrY2ZpcGZ4KSAtIDEpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRpZShcJiMzNDtJbnZhbGlkIGFic29sdXRlIFJfMzkwXzMyIHJlbG9jYXRpb246ICVzXFxuXCYjMzQ7LCBzeW1uYW1lKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiBcdGNhc2UgUl8zOTBfNjQ6XG4gXHRcdGFkZF9yZWxvYyhcdTAwMjZyZWxvY3M2NCwgb2Zmc2V0KTtcbiBcdFx0YnJlYWs7XG5AQCAtMjk2LDIxICYjNDM7NDM4LDI5IEBAIHN0YXRpYyB2b2lkIHdhbGtfcmVsb2NzKHZvaWQpXG4gXG4gXHQvKiBXYWxrIHRocm91Z2ggdGhlIHJlbG9jYXRpb25zICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaG51bTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHNlY3Rpb24gKnNlY19hcHBsaWVzO1xuJiM0MztcdFx0Y2hhciAqc3ltX3N0cnRhYjtcbiYjNDM7XHRcdEVsZl9TeW0gKnNoX3N5bXRhYjtcbiYjNDM7XHRcdHN0cnVjdCBzZWN0aW9uICpzZWNfYXBwbGllcywgKnNlY19zeW10YWI7XG4gXHRcdGludCBqO1xuIFx0XHRzdHJ1Y3Qgc2VjdGlvbiAqc2VjID0gXHUwMDI2c2Vjc1tpXTtcbiBcbiBcdFx0aWYgKHNlYy1cdTAwM2VzaGRyLnNoX3R5cGUgIT0gU0hUX1JFTF9UWVBFKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0c2VjX3N5bXRhYiAgPSBzZWMtXHUwMDNlbGluaztcbiBcdFx0c2VjX2FwcGxpZXMgPSBcdTAwMjZzZWNzW3NlYy1cdTAwM2VzaGRyLnNoX2luZm9dO1xuIFx0XHRpZiAoIShzZWNfYXBwbGllcy1cdTAwM2VzaGRyLnNoX2ZsYWdzIFx1MDAyNiBTSEZfQUxMT0MpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0c2hfc3ltdGFiID0gc2VjX3N5bXRhYi1cdTAwM2VzeW10YWI7XG4mIzQzO1x0XHRzeW1fc3RydGFiID0gc2VjX3N5bXRhYi1cdTAwM2VsaW5rLVx1MDAzZXN0cnRhYjtcbiYjNDM7XG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHNlYy1cdTAwM2VzaGRyLnNoX3NpemUgLyBzaXplb2YoRWxmX1JlbCk7IGomIzQzOyYjNDM7KSB7XG4gXHRcdFx0RWxmX1JlbCAqcmVsID0gXHUwMDI2c2VjLVx1MDAzZXJlbHRhYltqXTtcbiYjNDM7XHRcdFx0RWxmX1N5bSAqc3ltID0gXHUwMDI2c2hfc3ltdGFiW0VMRl9SX1NZTShyZWwtXHUwMDNlcl9pbmZvKV07XG4mIzQzO1x0XHRcdGNvbnN0IGNoYXIgKnN5bW5hbWUgPSBzeW1fbmFtZShzeW1fc3RydGFiLCBzeW0pO1xuIFxuLVx0XHRcdGRvX3JlbG9jKHNlYywgcmVsKTtcbiYjNDM7XHRcdFx0ZG9fcmVsb2Moc2VjLCByZWwsIHN5bSwgc3ltbmFtZSk7XG4gXHRcdH1cbiBcdH1cbiB9XG5AQCAtMzQ5LDYgJiM0Mzs0OTksOCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzKEZJTEUgKmZwKVxuIHtcbiBcdHJlYWRfZWhkcihmcCk7XG4gXHRyZWFkX3NoZHJzKGZwKTtcbiYjNDM7XHRyZWFkX3N0cnRhYnMoZnApO1xuJiM0MztcdHJlYWRfc3ltdGFicyhmcCk7XG4gXHRyZWFkX3JlbG9jcyhmcCk7XG4gXHRlbWl0X3JlbG9jcygpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNjo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZJJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIEtlcm5lbCBDb250cm9sIEZsb3cgSW50ZWdyaXR5IChrQ0ZJKSBzdXBwb3J0IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEl0IG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIGVtaXQgS0NGSSBoYXNoZXMgZm9yIEJQRiBwcm9ncmFtcyBhbmQgdHJhbXBvbGluZXMsIGFuZCB1cGRhdGVzIGFzc2VtYmx5IGZ1bmN0aW9ucyB0byB1c2UgdHlwZWQgZnVuY3Rpb24gbWFjcm9zLiBUaGUgQlBGIEpJVCBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgd2hlbiBCUEYgcHJvZ3JhbXMgYXJlIGxvYWRlZCBvciB0cmFtcG9saW5lcyBhcmUgYXR0YWNoZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2OTg0YWI4NTQ0ZDMyM2VjOGE1YTgyMmM1NzUxNzkxMGVkYWIyOGI0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMDY6NDE6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDg0NDA0ZTY3NzhkNTA0Li5lYzk2NTk1Y2FlMzlmMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTE0NCw2ICYjNDM7MTQ0LDcgQEAgY29uZmlnIFMzOTAKIAlzZWxlY3QgQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEUKIAlzZWxlY3QgQVJDSF9TVEFDS1dBTEsKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19BVE9NSUNfUk1XCiYjNDM7CXNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSQogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQwogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGUwogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0lOVDEyOCBpZiBDQ19IQVNfSU5UMTI4ICZhbXA7JmFtcDsgQ0NfSVNfQ0xBTkcKQEAgLTE1MSw2ICYjNDM7MTUyLDcgQEAgY29uZmlnIFMzOTAKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lORwogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0sKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sKJiM0MzsJc2VsZWN0IEFSQ0hfVVNFU19DRklfR0VORVJJQ19MTFZNX1BBU1MgaWYgQ0NfSVNfQ0xBTkcKIAlzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUAogCXNlbGVjdCBBUkNIX1VTRV9DTVBYQ0hHX0xPQ0tSRUYKIAlzZWxlY3QgQVJDSF9VU0VfU1lNX0FOTk9UQVRJT05TCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2ZpLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2ZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlhZjJjN2NiNzBjYTdhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NmaS5oCkBAIC0wLDAgJiM0MzsxLDcgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX0FTTV9TMzkwX0NGSV9ICiYjNDM7I2RlZmluZSBfQVNNX1MzOTBfQ0ZJX0gKJiM0MzsKJiM0MzsjZGVmaW5lIF9fYnBmY2FsbAomIzQzOwomIzQzOyNlbmRpZiAvKiBfQVNNX1MzOTBfQ0ZJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvbWNvdW50LlMgYi9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TCmluZGV4IDFmZWMzNzBmZWNmNDgxLi42YmM0NGM3Njc2NDJlNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuUwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TCkBAIC00LDYgJiM0Mzs0LDcgQEAKICAqCiAgKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jZmlfdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saW5rYWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2FzbS1vZmZzZXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2Z0cmFjZS5oJmd0OwpAQCAtMzQsMTAgJiM0MzszNSwxNiBAQAogCiAJLnNlY3Rpb24gLmtwcm9iZXMudGV4dCwgJiMzNDtheCYjMzQ7CiAKLVNZTV9GVU5DX1NUQVJUKGZ0cmFjZV9zdHViKQomIzQzO1NZTV9UWVBFRF9GVU5DX1NUQVJUKGZ0cmFjZV9zdHViKQogCUJSX0VYCSVyMTQKIFNZTV9GVU5DX0VORChmdHJhY2Vfc3R1YikKIAomIzQzOyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiYjNDM7U1lNX1RZUEVEX0ZVTkNfU1RBUlQoZnRyYWNlX3N0dWJfZ3JhcGgpCiYjNDM7CUJSX0VYCSVyMTQKJiM0MztTWU1fRlVOQ19FTkQoZnRyYWNlX3N0dWJfZ3JhcGgpCiYjNDM7I2VuZGlmCiYjNDM7CiBTWU1fQ09ERV9TVEFSVChmdHJhY2Vfc3R1Yl9kaXJlY3RfdHJhbXApCiAJbGdyCSVyMSwgJXIwCiAJQlJfRVgJJXIxCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RleHRfYW1vZGUzMS5TIGIvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuUwppbmRleCAyNmYyOTgxYWEwOWUzMS4uZjAwN2Q4OTJkMGM1ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuUwpAQCAtNSw2ICYjNDM7NSw3IEBACiAgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTkKICAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NmaV90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpbmthZ2UuaCZndDsKICNpbmNsdWRlICZsdDthc20vYXNtLWV4dGFibGUuaCZndDsKICNpbmNsdWRlICZsdDthc20vZXJybm8uaCZndDsKQEAgLTI2LDcgJiM0MzsyNyw3IEBACiAvKgogICogaW50IF9kaWFnMTRfYW1vZGUzMSh1bnNpZ25lZCBsb25nIHJ4LCB1bnNpZ25lZCBsb25nIHJ5MSwgdW5zaWduZWQgbG9uZyBzdWJjb2RlKQogICovCi1TWU1fRlVOQ19TVEFSVChfZGlhZzE0X2Ftb2RlMzEpCiYjNDM7U1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcxNF9hbW9kZTMxKQogCWxncgklcjEsJXIyCiAJbGdyCSVyMiwlcjMKIAlsZ3IJJXIzLCVyNApAQCAtNDYsNyAmIzQzOzQ3LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMTRfYW1vZGUzMSkKIC8qCiAgKiBpbnQgX2RpYWcyMTBfYW1vZGUzMShzdHJ1Y3QgZGlhZzIxMCAqYWRkcikKICAqLwotU1lNX0ZVTkNfU1RBUlQoX2RpYWcyMTBfYW1vZGUzMSkKJiM0MztTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzIxMF9hbW9kZTMxKQogCWxncgklcjEsJXIyCiAJbGhpCSVyMiwtMQogCXNhbTMxCkBAIC02NCw3ICYjNDM7NjUsNyBAQCBTWU1fRlVOQ19FTkQoX2RpYWcyMTBfYW1vZGUzMSkKIC8qCiAgKiBpbnQgZGlhZzhjKHN0cnVjdCBkaWFnOGMgKmFkZHIsIHN0cnVjdCBjY3dfZGV2X2lkICpkZXZubywgc2l6ZV90IGxlbikKICovCi1TWU1fRlVOQ19TVEFSVChfZGlhZzhjX2Ftb2RlMzEpCiYjNDM7U1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWc4Y19hbW9kZTMxKQogCWxsZ2YJJXIzLDAoJXIzKQogCXNhbTMxCiAJZGlhZwklcjIsJXI0LDB4OGMKQEAgLTc3LDcgJiM0Mzs3OCw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzhjX2Ftb2RlMzEpCiAvKgogICogaW50IF9kaWFnMjZjX2Ftb2RlMzEodm9pZCAqcmVxLCB2b2lkICpyZXNwLCBlbnVtIGRpYWcyNmNfc2Mgc3ViY29kZSkKICAqLwotU1lNX0ZVTkNfU1RBUlQoX2RpYWcyNmNfYW1vZGUzMSkKJiM0MztTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzI2Y19hbW9kZTMxKQogCWxnaGkJJXI1LC1FT1BOT1RTVVBQCiAJc2FtMzEKIAlkaWFnCSVyMiwlcjQsMHgyNmMKQEAgLTkxLDcgJiM0Mzs5Miw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzI2Y19hbW9kZTMxKQogLyoKICAqIHZvaWQgX2RpYWcwY19hbW9kZTMxKHVuc2lnbmVkIGxvbmcgcngpCiAgKi8KLVNZTV9GVU5DX1NUQVJUKF9kaWFnMGNfYW1vZGUzMSkKJiM0MztTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzBjX2Ftb2RlMzEpCiAJc2FtMzEKIAlkaWFnCSVyMiwlcjIsMHgwYwogCXNhbTY0CkBAIC0xMDMsNyAmIzQzOzEwNCw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzBjX2Ftb2RlMzEpCiAgKgogICogQ2FsbHMgZGlhZyAzMDggc3ViY29kZSAxIGFuZCBjb250aW51ZXMgZXhlY3V0aW9uCiAgKi8KLVNZTV9GVU5DX1NUQVJUKF9kaWFnMzA4X3Jlc2V0X2Ftb2RlMzEpCiYjNDM7U1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWczMDhfcmVzZXRfYW1vZGUzMSkKIAlsYXJsCSVyNCxjdGxyZWdzCQkjIFNhdmUgY29udHJvbCByZWdpc3RlcnMKIAlzdGN0ZwklYzAsJWMxNSwwKCVyNCkKIAlsZwklcjIsMCglcjQpCQkjIERpc2FibGUgbG93Y29yZSBwcm90ZWN0aW9uCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYwppbmRleCAzMTc0OWMwMzYyY2EyMy4uN2Y0NWMxMDY0NDRkZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYwpAQCAtMjEsNiAmIzQzOzIxLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9maWx0ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NmaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2NhY2hlZmx1c2guaCZndDsKQEAgLTM1Niw2ICYjNDM7MzU3LDE5IEBAIHN0YXRpYyB2b2lkIGVtaXQ2X3BjcmVsX3JpbGMoc3RydWN0IGJwZl9qaXQgKmppdCwgdTMyIG9wLCB1OCBtYXNrLCBzNjQgcGNyZWwpCiAJfQkJCQkJCQlcCiB9KQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVtaXRfdTMyX2RhdGEoY29uc3QgdTMyIGRhdGEsIHN0cnVjdCBicGZfaml0ICpqaXQpCiYjNDM7ewomIzQzOwlpZiAoaml0LSZndDtwcmdfYnVmKQomIzQzOwkJKih1MzIgKikoaml0LSZndDtwcmdfYnVmICYjNDM7IGppdC0mZ3Q7cHJnKSA9IGRhdGE7CiYjNDM7CWppdC0mZ3Q7cHJnICYjNDM7PSA0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF9rY2ZpKHUzMiBoYXNoLCBzdHJ1Y3QgYnBmX2ppdCAqaml0KQomIzQzO3sKJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NGSSkpCiYjNDM7CQllbWl0X3UzMl9kYXRhKGhhc2gsIGppdCk7CiYjNDM7fQomIzQzOwogLyoKICAqIFJldHVybiB3aGV0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFRoZSBmaXJzdCBwYXNzIGlzIHNwZWNpYWwsIHNpbmNlIHdlCiAgKiBkb24mIzM5O3Qga25vdyBhbnkgc2l6ZXMgeWV0LCBhbmQgdGh1cyBtdXN0IGJlIGNvbnNlcnZhdGl2ZS4KQEAgLTU5Nyw2ICYjNDM7NjExLDggQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKQogewogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHByb2dfZnJhbWUpICE9IFNUQUNLX0ZSQU1FX09WRVJIRUFEKTsKIAomIzQzOwllbWl0X2tjZmkoYnBmX2lzX3N1YnByb2coZnApID8gY2ZpX2JwZl9zdWJwcm9nX2hhc2ggOiBjZmlfYnBmX2hhc2gsIGppdCk7CiYjNDM7CiAJLyogTm8tb3AgZm9yIGhvdHBhdGNoaW5nICovCiAJLyogYnJjbCAwLHByb2xvZ3VlX3BsdCAqLwogCUVNSVQ2X1BDUkVMX1JJTEMoMHhjMDA0MDAwMCwgMCwgaml0LSZndDtwcm9sb2d1ZV9wbHQpOwpAQCAtNjE2LDcgJiM0Mzs2MzIsNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnApCiAJCWJwZl9za2lwKGppdCwgNik7CiAJfQogCS8qIFRhaWwgY2FsbHMgaGF2ZSB0byBza2lwIGFib3ZlIGluaXRpYWxpemF0aW9uICovCi0Jaml0LSZndDt0YWlsX2NhbGxfc3RhcnQgPSBqaXQtJmd0O3ByZzsKJiM0MzsJaml0LSZndDt0YWlsX2NhbGxfc3RhcnQgPSBqaXQtJmd0O3ByZyAtIGNmaV9nZXRfb2Zmc2V0KCk7CiAJaWYgKGZwLSZndDthdXgtJmd0O2V4Y2VwdGlvbl9jYikgewogCQkvKgogCQkgKiBTd2l0Y2ggc3RhY2ssIHRoZSBuZXcgYWRkcmVzcyBpcyBpbiB0aGUgMm5kIHBhcmFtZXRlci4KQEAgLTI0MDEsMTEgJiM0MzsyNDE3LDEzIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJCWppdF9kYXRhLSZndDtjdHggPSBqaXQ7CiAJCWppdF9kYXRhLSZndDtwYXNzID0gcGFzczsKIAl9Ci0JZnAtJmd0O2JwZl9mdW5jID0gKHZvaWQgKikgaml0LnByZ19idWY7CiYjNDM7CWZwLSZndDticGZfZnVuYyA9ICh2b2lkICopaml0LnByZ19idWYgJiM0MzsgY2ZpX2dldF9vZmZzZXQoKTsKIAlmcC0mZ3Q7aml0ZWQgPSAxOwotCWZwLSZndDtqaXRlZF9sZW4gPSBqaXQuc2l6ZTsKJiM0MzsJZnAtJmd0O2ppdGVkX2xlbiA9IGppdC5zaXplIC0gY2ZpX2dldF9vZmZzZXQoKTsKIAogCWlmICghZnAtJmd0O2lzX2Z1bmMgfHwgZXh0cmFfcGFzcykgewomIzQzOwkJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBmcC0mZ3Q7bGVuOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlqaXQuYWRkcnNbaV0gLT0gY2ZpX2dldF9vZmZzZXQoKTsKIAkJYnBmX3Byb2dfZmlsbF9qaXRlZF9saW5mbyhmcCwgaml0LmFkZHJzICYjNDM7IDEpOwogZnJlZV9hZGRyczoKIAkJa3ZmcmVlKGppdC5hZGRycyk7CkBAIC0yNjcxLDggJiM0MzsyNjg5LDEwIEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sCiAJCXJldHVybiAtRU5PVFNVUFA7CiAKIAkvKiBSZXR1cm4gdG8gJXIxNCBpbiB0aGUgc3RydWN0X29wcyBjYXNlLiAqLwotCWlmIChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9JTkRJUkVDVCkKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX0lORElSRUNUKSB7CiAJCWZsYWdzIHw9IEJQRl9UUkFNUF9GX1NLSVBfRlJBTUU7CiYjNDM7CQllbWl0X2tjZmkoY2ZpX2dldF9mdW5jX2hhc2goZnVuY19hZGRyKSwgaml0KTsKJiM0MzsJfQogCiAJLyoKIAkgKiBDb21wdXRlIGhvdyBtYW55IGFyZ3VtZW50cyB3ZSBuZWVkIHRvIHBhc3MgdG8gQlBGIHByb2dyYW1zLgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jIGIvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jCmluZGV4IDMwYTczMmM4MDhmMzVlLi43MjE3OGRjOTBhNGNmOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC90b29scy9yZWxvY3MuYwpAQCAtNDEsNiAmIzQzOzQxLDEwIEBACiBzdGF0aWMgRWxmX0VoZHIJCWVoZHI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlzaG51bTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQJc2hzdHJuZHg7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludAlzaHN5bXRhYm5keDsKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50CXNoeHN5bXRhYm5keDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHN5bV9pbmRleChFbGZfU3ltICpzeW0pOwogCiBzdHJ1Y3QgcmVsb2NzIHsKIAl1aW50MzJfdAkqb2Zmc2V0OwpAQCAtNTQsMTEgJiM0Mzs1OCw0MCBAQCBzdGF0aWMgc3RydWN0IHJlbG9jcyByZWxvY3M2NDsKIHN0cnVjdCBzZWN0aW9uIHsKIAlFbGZfU2hkcglzaGRyOwogCXN0cnVjdCBzZWN0aW9uCSpsaW5rOwomIzQzOwlFbGZfU3ltCQkqc3ltdGFiOwomIzQzOwlFbGYzMl9Xb3JkCSp4c3ltdGFiOwogCUVsZl9SZWwJCSpyZWx0YWI7CiYjNDM7CWNoYXIJCSpzdHJ0YWI7CiB9OwogCiBzdGF0aWMgc3RydWN0IHNlY3Rpb24gKnNlY3M7CiAKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqc2VjX25hbWUodW5zaWduZWQgc2huZHgpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpzZWNfc3RydGFiOwomIzQzOwljb25zdCBjaGFyICpuYW1lID0gJiMzNDsmbHQ7bm9uYW1lJmd0OyYjMzQ7OwomIzQzOwlzZWNfc3RydGFiID0gc2Vjc1tzaHN0cm5keF0uc3RydGFiOwomIzQzOwomIzQzOwlpZiAoc2huZHggJmx0OyBzaG51bSkKJiM0MzsJCW5hbWUgPSBzZWNfc3RydGFiICYjNDM7IHNlY3Nbc2huZHhdLnNoZHIuc2hfbmFtZTsKJiM0MzsJZWxzZSBpZiAoc2huZHggPT0gU0hOX0FCUykKJiM0MzsJCW5hbWUgPSAmIzM0O0FCU09MVVRFJiMzNDs7CiYjNDM7CWVsc2UgaWYgKHNobmR4ID09IFNITl9DT01NT04pCiYjNDM7CQluYW1lID0gJiMzNDtDT01NT04mIzM0OzsKJiM0MzsJcmV0dXJuIG5hbWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICpzeW1fbmFtZShjb25zdCBjaGFyICpzeW1fc3RydGFiLCBFbGZfU3ltICpzeW0pCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwomIzQzOwlpZiAoc3ltLSZndDtzdF9uYW1lKQomIzQzOwkJbmFtZSA9IHN5bV9zdHJ0YWIgJiM0Mzsgc3ltLSZndDtzdF9uYW1lOwomIzQzOwllbHNlCiYjNDM7CQluYW1lID0gc2VjX25hbWUoc3ltX2luZGV4KHN5bSkpOwomIzQzOwlyZXR1cm4gbmFtZTsKJiM0Mzt9CiYjNDM7CiAjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCiAjZGVmaW5lIGxlMTZfdG9fY3B1KHZhbCkJKHZhbCkKICNkZWZpbmUgbGUzMl90b19jcHUodmFsKQkodmFsKQpAQCAtMTA1LDYgJiM0MzsxMzgsMjMgQEAgc3RhdGljIHVpbnQ2NF90IGVsZjY0X3RvX2NwdSh1aW50NjRfdCB2YWwpCiAjZGVmaW5lIGVsZl9vZmZfdG9fY3B1KHgpCWVsZjY0X3RvX2NwdSh4KQogI2RlZmluZSBlbGZfeHdvcmRfdG9fY3B1KHgpCWVsZjY0X3RvX2NwdSh4KQogCiYjNDM7c3RhdGljIGludCBzeW1faW5kZXgoRWxmX1N5bSAqc3ltKQomIzQzO3sKJiM0MzsJRWxmX1N5bSAqc3ltdGFiID0gc2Vjc1tzaHN5bXRhYm5keF0uc3ltdGFiOwomIzQzOwlFbGYzMl9Xb3JkICp4c3ltdGFiID0gc2Vjc1tzaHhzeW10YWJuZHhdLnhzeW10YWI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwomIzQzOwlpbnQgaW5kZXg7CiYjNDM7CiYjNDM7CWlmIChzeW0tJmd0O3N0X3NobmR4ICE9IFNITl9YSU5ERVgpCiYjNDM7CQlyZXR1cm4gc3ltLSZndDtzdF9zaG5keDsKJiM0MzsKJiM0MzsJLyogY2FsY3VsYXRlIG9mZnNldCBvZiBzeW0gZnJvbSBoZWFkIG9mIHRhYmxlLiAqLwomIzQzOwlvZmZzZXQgPSAodW5zaWduZWQgbG9uZylzeW0gLSAodW5zaWduZWQgbG9uZylzeW10YWI7CiYjNDM7CWluZGV4ID0gb2Zmc2V0IC8gc2l6ZW9mKCpzeW0pOwomIzQzOwomIzQzOwlyZXR1cm4gZWxmMzJfdG9fY3B1KHhzeW10YWJbaW5kZXhdKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkaWUoY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcDsKQEAgLTIxNiw2ICYjNDM7MjY2LDgxIEBAIHN0YXRpYyB2b2lkIHJlYWRfc2hkcnMoRklMRSAqZnApCiAKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJlYWRfc3RydGFicyhGSUxFICpmcCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc2hudW07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgc2VjdGlvbiAqc2VjID0gJmFtcDtzZWNzW2ldOwomIzQzOwomIzQzOwkJaWYgKHNlYy0mZ3Q7c2hkci5zaF90eXBlICE9IFNIVF9TVFJUQUIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzZWMtJmd0O3N0cnRhYiA9IG1hbGxvYyhzZWMtJmd0O3NoZHIuc2hfc2l6ZSk7CiYjNDM7CQlpZiAoIXNlYy0mZ3Q7c3RydGFiKQomIzQzOwkJCWRpZSgmIzM0O21hbGxvYyBvZiAlJiMzNDsgRk1UICYjMzQ7IGJ5dGVzIGZvciBzdHJ0YWIgZmFpbGVkXG4mIzM0Oywgc2VjLSZndDtzaGRyLnNoX3NpemUpOwomIzQzOwomIzQzOwkJaWYgKGZzZWVrKGZwLCBzZWMtJmd0O3NoZHIuc2hfb2Zmc2V0LCBTRUVLX1NFVCkgJmx0OyAwKQomIzQzOwkJCWRpZSgmIzM0O1NlZWsgdG8gJSYjMzQ7IEZNVCAmIzM0OyBmYWlsZWQ6ICVzXG4mIzM0Oywgc2VjLSZndDtzaGRyLnNoX29mZnNldCwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsKJiM0MzsJCWlmIChmcmVhZChzZWMtJmd0O3N0cnRhYiwgMSwgc2VjLSZndDtzaGRyLnNoX3NpemUsIGZwKSAhPSBzZWMtJmd0O3NoZHIuc2hfc2l6ZSkKJiM0MzsJCQlkaWUoJiMzNDtDYW5ub3QgcmVhZCBzeW1ib2wgdGFibGU6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZWFkX3N5bXRhYnMoRklMRSAqZnApCiYjNDM7ewomIzQzOwlpbnQgaSwgajsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHNobnVtOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHNlY3Rpb24gKnNlYyA9ICZhbXA7c2Vjc1tpXTsKJiM0MzsJCWludCBudW1fc3ltczsKJiM0MzsKJiM0MzsJCXN3aXRjaCAoc2VjLSZndDtzaGRyLnNoX3R5cGUpIHsKJiM0MzsJCWNhc2UgU0hUX1NZTVRBQl9TSE5EWDoKJiM0MzsJCQlzZWMtJmd0O3hzeW10YWIgPSBtYWxsb2Moc2VjLSZndDtzaGRyLnNoX3NpemUpOwomIzQzOwkJCWlmICghc2VjLSZndDt4c3ltdGFiKQomIzQzOwkJCQlkaWUoJiMzNDttYWxsb2Mgb2YgJSYjMzQ7IEZNVCAmIzM0OyBieXRlcyBmb3IgeHN5bXRhYiBmYWlsZWRcbiYjMzQ7LCBzZWMtJmd0O3NoZHIuc2hfc2l6ZSk7CiYjNDM7CiYjNDM7CQkJaWYgKGZzZWVrKGZwLCBzZWMtJmd0O3NoZHIuc2hfb2Zmc2V0LCBTRUVLX1NFVCkgJmx0OyAwKQomIzQzOwkJCQlkaWUoJiMzNDtTZWVrIHRvICUmIzM0OyBGTVQgJiMzNDsgZmFpbGVkOiAlc1xuJiMzNDssIHNlYy0mZ3Q7c2hkci5zaF9vZmZzZXQsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CiYjNDM7CQkJaWYgKGZyZWFkKHNlYy0mZ3Q7eHN5bXRhYiwgMSwgc2VjLSZndDtzaGRyLnNoX3NpemUsIGZwKSAhPSBzZWMtJmd0O3NoZHIuc2hfc2l6ZSkKJiM0MzsJCQkJZGllKCYjMzQ7Q2Fubm90IHJlYWQgZXh0ZW5kZWQgc3ltYm9sIHRhYmxlOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CiYjNDM7CQkJc2h4c3ltdGFibmR4ID0gaTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWNhc2UgU0hUX1NZTVRBQjoKJiM0MzsJCQludW1fc3ltcyA9IHNlYy0mZ3Q7c2hkci5zaF9zaXplIC8gc2l6ZW9mKEVsZl9TeW0pOwomIzQzOwomIzQzOwkJCXNlYy0mZ3Q7c3ltdGFiID0gbWFsbG9jKHNlYy0mZ3Q7c2hkci5zaF9zaXplKTsKJiM0MzsJCQlpZiAoIXNlYy0mZ3Q7c3ltdGFiKQomIzQzOwkJCQlkaWUoJiMzNDttYWxsb2Mgb2YgJSYjMzQ7IEZNVCAmIzM0OyBieXRlcyBmb3Igc3ltdGFiIGZhaWxlZFxuJiMzNDssIHNlYy0mZ3Q7c2hkci5zaF9zaXplKTsKJiM0MzsKJiM0MzsJCQlpZiAoZnNlZWsoZnAsIHNlYy0mZ3Q7c2hkci5zaF9vZmZzZXQsIFNFRUtfU0VUKSAmbHQ7IDApCiYjNDM7CQkJCWRpZSgmIzM0O1NlZWsgdG8gJSYjMzQ7IEZNVCAmIzM0OyBmYWlsZWQ6ICVzXG4mIzM0Oywgc2VjLSZndDtzaGRyLnNoX29mZnNldCwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsKJiM0MzsJCQlpZiAoZnJlYWQoc2VjLSZndDtzeW10YWIsIDEsIHNlYy0mZ3Q7c2hkci5zaF9zaXplLCBmcCkgIT0gc2VjLSZndDtzaGRyLnNoX3NpemUpCiYjNDM7CQkJCWRpZSgmIzM0O0Nhbm5vdCByZWFkIHN5bWJvbCB0YWJsZTogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwomIzQzOwkJCWZvciAoaiA9IDA7IGogJmx0OyBudW1fc3ltczsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQkJRWxmX1N5bSAqc3ltID0gJmFtcDtzZWMtJmd0O3N5bXRhYltqXTsKJiM0MzsKJiM0MzsJCQkJc3ltLSZndDtzdF9uYW1lICA9IGVsZl93b3JkX3RvX2NwdShzeW0tJmd0O3N0X25hbWUpOwomIzQzOwkJCQlzeW0tJmd0O3N0X3ZhbHVlID0gZWxmX2FkZHJfdG9fY3B1KHN5bS0mZ3Q7c3RfdmFsdWUpOwomIzQzOwkJCQlzeW0tJmd0O3N0X3NpemUgID0gZWxmX3h3b3JkX3RvX2NwdShzeW0tJmd0O3N0X3NpemUpOwomIzQzOwkJCQlzeW0tJmd0O3N0X3NobmR4ID0gZWxmX2hhbGZfdG9fY3B1KHN5bS0mZ3Q7c3Rfc2huZHgpOwomIzQzOwkJCX0KJiM0MzsJCQlzaHN5bXRhYm5keCA9IGk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcmVhZF9yZWxvY3MoRklMRSAqZnApCiB7CiAJaW50IGksIGo7CkBAIC0yNjMsNyAmIzQzOzM4OCw4IEBAIHN0YXRpYyB2b2lkIGFkZF9yZWxvYyhzdHJ1Y3QgcmVsb2NzICpyLCB1aW50MzJfdCBvZmZzZXQpCiAJci0mZ3Q7b2Zmc2V0W3ItJmd0O2NvdW50JiM0MzsmIzQzO10gPSBvZmZzZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZG9fcmVsb2Moc3RydWN0IHNlY3Rpb24gKnNlYywgRWxmX1JlbCAqcmVsKQomIzQzO3N0YXRpYyBpbnQgZG9fcmVsb2Moc3RydWN0IHNlY3Rpb24gKnNlYywgRWxmX1JlbCAqcmVsLCBFbGZXKFN5bSkgKnN5bSwKJiM0MzsJCSAgICBjb25zdCBjaGFyICpzeW1uYW1lKQogewogCXVuc2lnbmVkIGludCByX3R5cGUgPSBFTEY2NF9SX1RZUEUocmVsLSZndDtyX2luZm8pOwogCUVsZlcoQWRkcikgb2Zmc2V0ID0gcmVsLSZndDtyX29mZnNldDsKQEAgLTI3OSw2ICYjNDM7NDA1LDIyIEBAIHN0YXRpYyBpbnQgZG9fcmVsb2Moc3RydWN0IHNlY3Rpb24gKnNlYywgRWxmX1JlbCAqcmVsKQogCWNhc2UgUl8zOTBfR09UUENEQkw6CiAJY2FzZSBSXzM5MF9HT1RPRkY2NDoKIAkJYnJlYWs7CiYjNDM7CWNhc2UgUl8zOTBfMzI6IHsKJiM0MzsJCXN0YXRpYyBjb25zdCBjaGFyIGtjZmlwZnhbXSA9ICYjMzQ7X19rY2ZpX3R5cGVpZF8mIzM0OzsKJiM0MzsKJiM0MzsJCWlmIChzeW0tJmd0O3N0X3NobmR4ICE9IFNITl9BQlMpCiYjNDM7CQkJZGllKCYjMzQ7VW5zdXBwb3J0ZWQgcmVsb2NhdGlvbiB0eXBlOiAlZFxuJiMzNDssIHJfdHlwZSk7CiYjNDM7CQkvKgomIzQzOwkJICogU3ltYm9scyB3aXRoIF9fa2NmaV90eXBlaWRfIHByZWZpeCBoYXZlIGNvbnN0YW50IHZhbHVlcywKJiM0MzsJCSAqIHdoaWNoIGRvIG5vdCBjaGFuZ2UgaWYgYnpJbWFnZSBpcyBsb2FkZWQgYXQgYSBkaWZmZXJlbnQKJiM0MzsJCSAqIHBoeXNpY2FsIGFkZHJlc3MgdGhhbiB0aGUgYWRkcmVzcyBmb3Igd2hpY2ggaXQgaGFzIGJlZW4KJiM0MzsJCSAqIGNvbXBpbGVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIXN0cm5jbXAoa2NmaXBmeCwgc3ltbmFtZSwgc2l6ZW9mKGtjZmlwZngpIC0gMSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkaWUoJiMzNDtJbnZhbGlkIGFic29sdXRlIFJfMzkwXzMyIHJlbG9jYXRpb246ICVzXG4mIzM0Oywgc3ltbmFtZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQogCWNhc2UgUl8zOTBfNjQ6CiAJCWFkZF9yZWxvYygmYW1wO3JlbG9jczY0LCBvZmZzZXQpOwogCQlicmVhazsKQEAgLTI5NiwyMSAmIzQzOzQzOCwyOSBAQCBzdGF0aWMgdm9pZCB3YWxrX3JlbG9jcyh2b2lkKQogCiAJLyogV2FsayB0aHJvdWdoIHRoZSByZWxvY2F0aW9ucyAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBzaG51bTsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHNlY3Rpb24gKnNlY19hcHBsaWVzOwomIzQzOwkJY2hhciAqc3ltX3N0cnRhYjsKJiM0MzsJCUVsZl9TeW0gKnNoX3N5bXRhYjsKJiM0MzsJCXN0cnVjdCBzZWN0aW9uICpzZWNfYXBwbGllcywgKnNlY19zeW10YWI7CiAJCWludCBqOwogCQlzdHJ1Y3Qgc2VjdGlvbiAqc2VjID0gJmFtcDtzZWNzW2ldOwogCiAJCWlmIChzZWMtJmd0O3NoZHIuc2hfdHlwZSAhPSBTSFRfUkVMX1RZUEUpCiAJCQljb250aW51ZTsKIAomIzQzOwkJc2VjX3N5bXRhYiAgPSBzZWMtJmd0O2xpbms7CiAJCXNlY19hcHBsaWVzID0gJmFtcDtzZWNzW3NlYy0mZ3Q7c2hkci5zaF9pbmZvXTsKIAkJaWYgKCEoc2VjX2FwcGxpZXMtJmd0O3NoZHIuc2hfZmxhZ3MgJmFtcDsgU0hGX0FMTE9DKSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlzaF9zeW10YWIgPSBzZWNfc3ltdGFiLSZndDtzeW10YWI7CiYjNDM7CQlzeW1fc3RydGFiID0gc2VjX3N5bXRhYi0mZ3Q7bGluay0mZ3Q7c3RydGFiOwomIzQzOwogCQlmb3IgKGogPSAwOyBqICZsdDsgc2VjLSZndDtzaGRyLnNoX3NpemUgLyBzaXplb2YoRWxmX1JlbCk7IGomIzQzOyYjNDM7KSB7CiAJCQlFbGZfUmVsICpyZWwgPSAmYW1wO3NlYy0mZ3Q7cmVsdGFiW2pdOwomIzQzOwkJCUVsZl9TeW0gKnN5bSA9ICZhbXA7c2hfc3ltdGFiW0VMRl9SX1NZTShyZWwtJmd0O3JfaW5mbyldOwomIzQzOwkJCWNvbnN0IGNoYXIgKnN5bW5hbWUgPSBzeW1fbmFtZShzeW1fc3RydGFiLCBzeW0pOwogCi0JCQlkb19yZWxvYyhzZWMsIHJlbCk7CiYjNDM7CQkJZG9fcmVsb2Moc2VjLCByZWwsIHN5bSwgc3ltbmFtZSk7CiAJCX0KIAl9CiB9CkBAIC0zNDksNiAmIzQzOzQ5OSw4IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3MoRklMRSAqZnApCiB7CiAJcmVhZF9laGRyKGZwKTsKIAlyZWFkX3NoZHJzKGZwKTsKJiM0MzsJcmVhZF9zdHJ0YWJzKGZwKTsKJiM0MzsJcmVhZF9zeW10YWJzKGZwKTsKIAlyZWFkX3JlbG9jcyhmcCk7CiAJZW1pdF9yZWxvY3MoKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDU5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEltcGFjdCBvZiB0aGlzIENGSSBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nIGF0dGVudGlvbi4gSXQgdG91Y2hlcyBxdWl0ZSBhIGZldyBmaWxlcyBpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmU6IGBhcmNoL3MzOTAvS2NvbmZpZ2AsIHNvbWUgaW5jbHVkZSBmaWxlcywgYW5kIHNvbWUgYXNzZW1ibHkgYW5kIEMgZmlsZXMgcmVsYXRlZCB0byB0aGUga2VybmVsIGFuZCBuZXR3b3JraW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGVuYWJsaW5nIENGSSAoQ29udHJvbCBGbG93IEludGVncml0eSkgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3Mgc2VsZWN0aW5nIGBBUkNIX1NVUFBPUlRTX0NGSWAgYW5kIGBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTYCBpZiBjbGFuZyBpcyBiZWluZyB1c2VkLgoKVGhlIHJlYWxseSBpbnRlcmVzdGluZyBwYXJ0LCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgaXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgbW9kaWZpY2F0aW9ucy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGFyZWEgdGhhdCYjMzk7cyBwcmltZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgYnBmX2ppdF9wcm9sb2d1ZWAsIGBicGZfaW50X2ppdF9jb21waWxlYCwgYW5kIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgdG8gZW1pdCBLQ0ZJIGhhc2hlcy4gU28sIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV3IGNvZGUgZ2VuZXJhdGlvbiByZWxhdGVkIHRvIENGSSB3aXRoaW4gdGhlIEJQRiBKSVQsIG1ha2luZyB0aG9zZSBmdW5jdGlvbnMga2V5IHRhcmdldHMgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZ29pbmcgdG8gdXNlIGBDT05GSUdfQ0ZJYC4gSSB0aG91Z2h0IGBDT05GSUdfQ0ZJX0NMQU5HYCB3YXMgdXN1YWxseSB0aGUga25vYi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdCwgYnV0IHllYWgsIGl0JiMzOTtzIGBDT05GSUdfQ0ZJYC4gVGhlIGNvZGUgdXNlcyBgSVNfRU5BQkxFRChDT05GSUdfQ0ZJKWAgdG8gZGV0ZXJtaW5lIGlmIGl0IHNob3VsZCBlbWl0IHRoZXNlIGhhc2hlcy4gT2theSwgc28gdGhhdCYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTkzMD1jb25maWcgQVJDSF9VU0VTX0NGSV9HRU5FUklDX0xMVk1fUEFTU1xuLS1cbmFyY2gvS2NvbmZpZy05MzYtXG5hcmNoL0tjb25maWc6OTM3OmNvbmZpZyBDRklcbmFyY2gvS2NvbmZpZy05MzgtXHRib29sIFwmIzM0O1VzZSBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSlcJiMzNDtcbi0tXG5hcmNoL0tjb25maWctOTUyLVxuYXJjaC9LY29uZmlnOjk1Mzpjb25maWcgQ0ZJX0NMQU5HXG5hcmNoL0tjb25maWctOTU0LVx0Ym9vbFxuLS1cbmFyY2gvS2NvbmZpZy05NTgtXG5hcmNoL0tjb25maWc6OTU5OmNvbmZpZyBDRklfSUNBTExfTk9STUFMSVpFX0lOVEVHRVJTXG5hcmNoL0tjb25maWctOTYwLVx0Ym9vbCBcJiMzNDtOb3JtYWxpemUgQ0ZJIHRhZ3MgZm9yIGludGVnZXJzXCYjMzQ7XG4tLVxuYXJjaC9LY29uZmlnPTk4MT1jb25maWcgSEFWRV9DRklfSUNBTExfTk9STUFMSVpFX0lOVEVHRVJTX1JVU1RDXG4tLVxuYXJjaC9LY29uZmlnLTk4OC1cbmFyY2gvS2NvbmZpZzo5ODk6Y29uZmlnIENGSV9QRVJNSVNTSVZFXG5hcmNoL0tjb25maWctOTkwLVx0Ym9vbCBcJiMzNDtVc2UgQ0ZJIGluIHBlcm1pc3NpdmUgbW9kZVwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9MjI5Mz1jb25maWcgU1RSSUNUX1NJR0FMVFNUQUNLX1NJWkVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTIzMDgtXG5hcmNoL3g4Ni9LY29uZmlnOjIzMDk6Y29uZmlnIENGSV9BVVRPX0RFRkFVTFRcbmFyY2gveDg2L0tjb25maWctMjMxMC1cdGJvb2wgXCYjMzQ7QXR0ZW1wdCB0byB1c2UgRmluZUlCVCBieSBkZWZhdWx0IGF0IGJvb3QgdGltZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipDaGVja2luZyBDRkkgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX0NGSWAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIFByZXR0eSBzdXJlIHRoYXQmIzM5O3MgYSBsZWdpdGltYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIGl0IGRlZmluZWQgc29tZXdoZXJlIGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYEtjb25maWdgIGZpbGVzLCBwcm9iYWJseSBpbiBgYXJjaC9LY29uZmlnYC4gR29vZCBwcmFjdGljZSB0byBkb3VibGUtY2hlY2sgdGhhdCwgYnV0IEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpbiB0aGF0IG9uZS4KCk5vdywgaG9sZCBvbiBhIHNlY29uZC4gTGV0IG1lIHF1aWNrbHkgc2NhbiBgYXJjaC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYSByZWxhdGVkIGBjb25maWdgIG9wdGlvbiBjYWxsZWQgYENGSV9DTEFOR2AuIE1pZ2h0IGJlIGEgQ2xhbmctc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb3IgZGVwZW5kZW5jeSB0aGF0JiMzOTtzIGNvbnRyb2xsZWQgc2VwYXJhdGVseS4gR290dGEgY29uc2lkZXIgYWxsIHRoZSBwb3RlbnRpYWwgdmFyaWFibGVzLCByaWdodD8gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkzMDpcdGNvbmZpZyBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTXG4gOTMxOlx0XHRib29sXG4gOTMyOlx0XHRoZWxwXG4gOTMzOlx0XHQgIEFuIGFyY2hpdGVjdHVyZSBzaG91bGQgc2VsZWN0IHRoaXMgb3B0aW9uIGlmIGl0IHVzZXMgdGhlIGdlbmVyaWNcbiA5MzQ6XHRcdCAgS0NGSVBhc3MgaW4gTExWTSB0byBleHBhbmQga0NGSSBidW5kbGVzIGluc3RlYWQgb2YgYXJjaGl0ZWN0dXJlLXNwZWNpZmljXG4gOTM1Olx0XHQgIGxvd2VyaW5nLlxuIDkzNjpcdFxuIDkzNzpcdGNvbmZpZyBDRklcbiA5Mzg6XHRcdGJvb2wgXCYjMzQ7VXNlIEtlcm5lbCBDb250cm9sIEZsb3cgSW50ZWdyaXR5IChrQ0ZJKVwmIzM0O1xuIDkzOTpcdFx0ZGVmYXVsdCBDRklfQ0xBTkdcbiA5NDA6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19DRklcbiA5NDE6XHRcdGRlcGVuZHMgb24gJChjYy1vcHRpb24sLWZzYW5pdGl6ZT1rY2ZpKVxuIDk0MjpcdFx0aGVscFxuIDk0MzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvcndhcmQtZWRnZSBDb250cm9sIEZsb3cgSW50ZWdyaXR5IChDRkkpXG4gOTQ0Olx0XHQgIGNoZWNraW5nLCB3aGVyZSB0aGUgY29tcGlsZXIgaW5qZWN0cyBhIHJ1bnRpbWUgY2hlY2sgdG8gZWFjaFxuIDk0NTpcdFx0ICBpbmRpcmVjdCBmdW5jdGlvbiBjYWxsIHRvIGVuc3VyZSB0aGUgdGFyZ2V0IGlzIGEgdmFsaWQgZnVuY3Rpb24gd2l0aFxuIDk0NjpcdFx0ICB0aGUgY29ycmVjdCBzdGF0aWMgdHlwZS4gVGhpcyByZXN0cmljdHMgcG9zc2libGUgY2FsbCB0YXJnZXRzIGFuZFxuIDk0NzpcdFx0ICBtYWtlcyBpdCBtb3JlIGRpZmZpY3VsdCBmb3IgYW4gYXR0YWNrZXIgdG8gZXhwbG9pdCBidWdzIHRoYXQgYWxsb3dcbiA5NDg6XHRcdCAgdGhlIG1vZGlmaWNhdGlvbiBvZiBzdG9yZWQgZnVuY3Rpb24gcG9pbnRlcnMuIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlXG4gOTQ5Olx0XHQgIGZvdW5kIGZyb20gQ2xhbmcmIzM5O3MgZG9jdW1lbnRhdGlvbjpcbiA5NTA6XHRcbiA5NTE6XHRcdCAgICBodHRwczovL2NsYW5nLmxsdm0ub3JnL2RvY3MvQ29udHJvbEZsb3dJbnRlZ3JpdHkuaHRtbFxuIDk1MjpcdFxuIDk1MzpcdGNvbmZpZyBDRklfQ0xBTkdcbiA5NTQ6XHRcdGJvb2xcbiA5NTU6XHRcdHRyYW5zaXRpb25hbFxuIDk1NjpcdFx0aGVscFxuIDk1NzpcdFx0ICBUcmFuc2l0aW9uYWwgY29uZmlnIGZvciBDRklfQ0xBTkcgdG8gQ0ZJIG1pZ3JhdGlvbi5cbiA5NTg6XHRcbiA5NTk6XHRjb25maWcgQ0ZJX0lDQUxMX05PUk1BTElaRV9JTlRFR0VSU1xuIDk2MDpcdFx0Ym9vbCBcJiMzNDtOb3JtYWxpemUgQ0ZJIHRhZ3MgZm9yIGludGVnZXJzXCYjMzQ7XG4gOTYxOlx0XHRkZXBlbmRzIG9uIENGSVxuIDk2MjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNcbiA5NjM6XHRcdGhlbHBcbiA5NjQ6XHRcdCAgVGhpcyBvcHRpb24gbm9ybWFsaXplcyB0aGUgQ0ZJIHRhZ3MgZm9yIGludGVnZXIgdHlwZXMgc28gdGhhdCBhbGxcbiA5NjU6XHRcdCAgaW50ZWdlciB0eXBlcyBvZiB0aGUgc2FtZSBzaXplIGFuZCBzaWduZWRuZXNzIHJlY2VpdmUgdGhlIHNhbWUgQ0ZJXG4gOTY2Olx0XHQgIHRhZy5cbiA5Njc6XHRcbiA5Njg6XHRcdCAgVGhlIG9wdGlvbiBpcyBzZXBhcmF0ZSBmcm9tIENPTkZJR19SVVNUIGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUgQUJJLlxuIDk2OTpcdFx0ICBXaGVuIHdvcmtpbmcgd2l0aCBidWlsZCBzeXN0ZW1zIHRoYXQgY2FyZSBhYm91dCB0aGUgQUJJLCBpdCBpc1xuIDk3MDpcdFx0ICBjb252ZW5pZW50IHRvIGJlIGFibGUgdG8gdHVybiBvbiB0aGlzIGZsYWcgZmlyc3QsIGJlZm9yZSBSdXN0IGlzXG4gOTcxOlx0XHQgIHR1cm5lZCBvbi5cbiA5NzI6XHRcbiA5NzM6XHRcdCAgVGhpcyBvcHRpb24gaXMgbmVjZXNzYXJ5IGZvciB1c2luZyBDRkkgd2l0aCBSdXN0LiBJZiB1bnN1cmUsIHNheSBOLlxuIDk3NDpcdFxuIDk3NTpcdGNvbmZpZyBIQVZFX0NGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNcbiA5NzY6XHRcdGRlZl9ib29sIHlcbiA5Nzc6XHRcdGRlcGVuZHMgb24gJChjYy1vcHRpb24sLWZzYW5pdGl6ZT1rY2ZpIC1mc2FuaXRpemUtY2ZpLWljYWxsLWV4cGVyaW1lbnRhbC1ub3JtYWxpemUtaW50ZWdlcnMpXG4gOTc4Olx0XHQjIFdpdGggR0NPVi9LQVNBTiB3ZSBuZWVkIHRoaXMgZml4OiBodHRwczovL2dpdGh1Yi5jb20vbGx2bS9sbHZtLXByb2plY3QvcHVsbC8xMDQ4MjZcbiA5Nzk6XHRcdGRlcGVuZHMgb24gQ0xBTkdfVkVSU0lPTiBcdTAwM2U9IDE5MDEwMyB8fCAoIUdDT1ZfS0VSTkVMIFx1MDAyNlx1MDAyNiAhS0FTQU5fR0VORVJJQyBcdTAwMjZcdTAwMjYgIUtBU0FOX1NXX1RBR1MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNjUKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzOgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzIGZvciBCUEYgSklUIENvbXBpbGF0aW9uIG9uIHMzOTAgQXJjaGl0ZWN0dXJlKioKCkFscmlnaHQsIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBGaXJzdCB0aG91Z2h0OiBgQ09ORklHX0NGSWAgLSB0aGF0JiMzOTtzICp0aGUqIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBCdXQgaG9sZCBvbiwgdGhlIGNvZGUgcGF0aCB0aGF0JiMzOTtzIGdyYWJiZWQgbXkgYXR0ZW50aW9uLCBzcGVjaWZpY2FsbHkgYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgLCBzdWdnZXN0cyBhbm90aGVyIGNyaXRpY2FsIHBpZWNlIGlzIG5lZWRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0JQRl9KSVRgIGlzIGVuYWJsZWQgYXMgd2VsbCwgb3Igd2Ugd29uJiMzOTt0IGdldCBmYXIuIFJpZ2h0LCBzbywgdGhlIG5leHQgc3RlcCBpcyBjbGVhcmx5IHRvIGRpdmUgaW50byBgYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY2AgaXRzZWxmLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGF0IGZpbGUgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYmVpbmcgdXNlZCBhbmQgaG93IHRoZXkgaW50ZXJyZWxhdGUgd2l0aGluIHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gVGhpcyB3aWxsIHNob3cgdXMgaG93IHRvIHZlcmlmeSBvciBjb25maWd1cmUgdGhlIG5lY2Vzc2FyeSBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTIzMTQ9c3RhdGljIHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqYnBmX2ppdF9hbGxvYyhzdHJ1Y3QgYnBmX2ppdCAqaml0LFxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjM1NS0gKi9cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MjM1NjpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcClcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjM1Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODQKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHRoaXMgaXMgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR1cCBmb3IgQlBGIHRyYW1wb2xpbmVzIGlzIGhhcHBlbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBkZXRhaWxzIG9mIEpJVCBjb21waWxhdGlvbiwgcHJvYmFibHkgaW52b2x2aW5nIHNvbWUga2luZCBvZiBjb2RlIGdlbmVyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGFzc2VtYmx5IG91dHB1dCB0byB2ZXJpZnkuCgpGaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgaWRlbnRpZnkgd2hpY2ggYXJjaGl0ZWN0dXJlcyB0aGlzIGFwcGxpZXMgdG8uIElzIHRoaXMgYSBjb21tb24gcm91dGluZSBvciBzb21ldGhpbmcgc3BlY2lmaWMgdG8gY2VydGFpbiBpbnN0cnVjdGlvbiBzZXRzPyBMZXQmIzM5O3MgdHJhY2UgaG93IGl0JiMzOTtzIGJlaW5nIGNhbGxlZCwgZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb252ZW50aW9ucyBhbmQgYW55IHByZWNvbmRpdGlvbnMuIFdoYXQmIzM5O3MgaXQgZXhwZWN0aW5nIGFzIGlucHV0PyBNZW1vcnkgYWRkcmVzcywgcmVnaXN0ZXJzLCBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXM/IEFueSBwb3RlbnRpYWwgZm9yIGFsaWdubWVudCBpc3N1ZXMgb3IgY2FjaGUtbGluZSBlZmZlY3RzPyBJJiMzOTtsbCBhbHNvIGNoZWNrIGZvciBhbnkgaW5saW5lIGFzc2VtYmx5LCB0aGF0IGFsd2F5cyBncmFicyBteSBhdHRlbnRpb24uCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgY3JpdGljYWwgcGFydHM6IGluc3RydWN0aW9uIHBhdGNoaW5nLCBzZXR0aW5nIHVwIHRoZSB0cmFtcG9saW5lIGVudmlyb25tZW50LCBhbmQgdGhlIGFjdHVhbCBqdW1wIHRvIHRoZSBCUEYgcHJvZ3JhbS4gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBoZXJlPyBBbnkgY2hlY2tzIGZvciB2YWxpZCBCUEYgY29kZSBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzPyBBbnkgcG90ZW50aWFsIGZvciBzaWRlLWNoYW5uZWwgYXR0YWNrcyBkdXJpbmcgdGhpcyBzZXR1cD8KCkZpbmFsbHksIGxldCYjMzk7cyBzZWUgaG93IGl0IHBsYXlzIHdpdGggdGhpbmdzIGxpa2Ugc3BlY3VsYXRpdmUgZXhlY3V0aW9uLiBUaGUgZ29hbCBpcyBhIGZhc3QsIHNlY3VyZSwgYW5kIHByZWRpY3RhYmxlIHBhdGggaW50byB0aGUgQlBGIHByb2dyYW0uIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBmdW5jdGlvbiBhY2hpZXZlcyB0aGVzZSBnb2Fscy4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgZGVzY3JpcHRpdmUgb3IgaWYgSSBuZWVkIHRvIGRpc2Fzc2VtYmxlIGFuZCBhbmFseXplIGZvciBteXNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI2NTA9c3RhdGljIGludCBhbGxvY19zdGFjayhzdHJ1Y3QgYnBmX3RyYW1wX2ppdCAqdGppdCwgc2l6ZV90IHNpemUpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNjY3LVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyNjY4OnN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI2NjktXHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX3RyYW1wX2ppdCAqdGppdCxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI5ODY9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5OTQtXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI5OTU6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgXHUwMDI2dGppdCwgbSwgZmxhZ3MsXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5OTYtXHRcdFx0XHRcdCAgICB0bm9kZXMsIG9yaWdfY2FsbCk7XG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0zMDAxPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLFxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAxMC1cdG1lbXNldChcdTAwMjZ0aml0LCAwLCBzaXplb2YodGppdCkpO1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDExOlx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIFx1MDAyNnRqaXQsIG0sIGZsYWdzLFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDEyLVx0XHRcdFx0XHQgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAyNC1cdHRqaXQuY29tbW9uLnByZ19idWYgPSBpbWFnZTtcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MzAyNTpcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCBcdTAwMjZ0aml0LCBtLCBmbGFncyxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAyNi1cdFx0XHRcdFx0ICAgIHRub2RlcywgZnVuY19hZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBCUEYgSklUIENvbXBpbGF0aW9uIGFuZCBUcmFtcG9saW5lcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGVudHJ5IHBvaW50cyBmb3IgQlBGIEpJVCBhbmQgdHJhbXBvbGluZXMuIEl0IHNlZW1zIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgYXJlIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gUmlnaHQsIHJpZ2h0LCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgc3BlY2lmaWNhbGx5IGZvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MsIGFuZCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBoYW5kbGVzIHRoZSB0cmFtcG9saW5lIHNldHVwLgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgZWl0aGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLiBBaCwgbm9wZSwgbmVpdGhlciBgYnBmX2ludF9qaXRfY29tcGlsZWAgbm9yIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFyZSBzdGF0aWMuIEFuZCB3aGlsZSBJJiMzOTttIGF0IGl0LCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpc24mIzM5O3Qgc3RhdGljIGVpdGhlci4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhIGJpdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgQlBGIEpJVCBzdXBwb3J0IG9uIHMzOTAuIGBDT05GSUdfQlBGX0pJVGAgaXMgb2J2aW91c2x5IGEgbXVzdC1oYXZlLiBBbmQsIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyBjb3JyZWN0bHksIGBDT05GSUdfQ0ZJYCBpcyBjcnVjaWFsIGZvciB0aGUgQ0ZJIGZlYXR1cmVzLiBMZXQmIzM5O3MgZGlnIGludG8gYGFyY2gvczM5MC9LY29uZmlnYCB0byBzZWUgaWYgYEFSQ0hfU1VQUE9SVFNfQ0ZJYCBpcyBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX1NVUFBPUlRTX0NGSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMTQ2LVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQVRPTUlDX1JNV1xuYXJjaC9zMzkwL0tjb25maWc6MTQ3Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ0ZJXG5hcmNoL3MzOTAvS2NvbmZpZy0xNDgtXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNjYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQ0ZJIGFuZCB0aGUgQlBGIEpJVCoqCgpBbHJpZ2h0LCB0aGUgYnVpbGQgY29uZmlnJiMzOTtzIGFsbG93aW5nIGBDT05GSUdfQ0ZJYCB0byBiZSBzZWxlY3RlZCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBnaXZlcyB1cyBzb21lIHBvdGVudGlhbCBjb21waWxlLXRpbWUgY2hlY2tzIGFuZCBzZWN1cml0eSBoYXJkZW5pbmcuIEJ1dCwgc2luY2UgSSYjMzk7bSBhbHJlYWR5IGluIHRoaXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBCUEYgSklUIGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCBpcyBgQ09ORklHX0JQRl9KSVRgIGFsc28gcmVxdWlyZWQgaW4gdGhpcyBidWlsZD8gVGhlcmUmIzM5O3MgbGlrZWx5IHNvbWUgaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jeSB0byBrZWVwIGluIG1pbmQsIGFuZCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVpciBpbnRlcnBsYXkuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODAyCgkJCQkJCQlvdXRwdXQ6IDEzOQoJCQkJCQkJdGhvdWdodHM6IDkwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBzMzkwIGtDRkkgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGltcGxlbWVudGluZyBDRkkgKENvbnRyb2wgRmxvdyBJbnRlZ3JpdHkpIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBhbG9uZ3NpZGUgdGhlIEJQRiBKSVQgY29tcGlsZXIgKGBCUEZfSklUYCkuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGZvciBmdXp6aW5nLgoKTXkgZmlyc3QgdGhvdWdodCB3YXMgdG8gZXhhbWluZSBgYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jYCwgYnV0IHRoYXQmIzM5O3MgYSBob3N0IHRvb2wsIG5vdCBrZXJuZWwgY29kZSwgc28gaXQmIzM5O3Mgbm90IHJlbGV2YW50IGZvciBydW50aW1lIGZ1enppbmcuIEkgdGhlbiBjaGVja2VkIHRoZSBhc3NlbWJseSBmaWxlcyBgYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuU2AgYW5kIGBhcmNoL3MzOTAva2VybmVsL3RleHRfYW1vZGUzMS5TYC4gSSBzZWUgdGhlIGBTWU1fRlVOQ19TVEFSVGAgbWFjcm8gaXMgYmVpbmcgdXBkYXRlZCB0byBgU1lNX1RZUEVEX0ZVTkNfU1RBUlRgIHRvIGVuYWJsZSBDRkksIHdoaWNoIGlzIGxpa2VseSB3aGVyZSB0aGUgQ0ZJLXNwZWNpZmljIGNoYW5nZXMgYXJlLgoKVGhlIHByaW1hcnkgZnVuY3Rpb25hbCBjaGFuZ2VzIGZvciBmdXp6aW5nIHNlZW0gdG8gYmUgaW4gYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGF0IGRpcmVjdG9yeSBzb3VuZHMgcHJvbWlzaW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBib3RoIHN0YW5kYXJkIEJQRiBKSVQgYW5kIHRyYW1wb2xpbmUgZW50cnkgcG9pbnRzLCB3aGljaCBhcmUgZ29vZCBjYW5kaWRhdGVzLiBJIHdhbnRlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGluZGVlZCB0aGUgcmlnaHQgb25lcywgYW5kIGJhc2VkIG9uIHRoZWlyIG5hbWVzLCBJJiMzOTttIGNvbWZvcnRhYmxlIHRoYXQgdGhleSBhcmUuCgpOZXh0LCBJIGxvb2tlZCBmb3IgZGVwZW5kZW5jaWVzIG9uIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCB3aXRoaW4gYGFyY2gvczM5MC9rZXJuZWwvbWNvdW50LlNgLCB3aGVyZSB0aGUgY29kZSB1c2VzIHRoZSB0eXBlZCBmdW5jdGlvbiBzdGFydCwgYnV0IHRoYXQmIzM5O3MganVzdCBhZGRpbmcgdGhlIENGSSB0eXBlIGhhc2hlcyB0byB0aGUgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIG5vdCBhIHByaW1hcnkgdGFyZ2V0LgoKSSYjMzk7dmUgZGV0ZXJtaW5lZCB0aGF0IGBDRklgIGFuZCBgQlBGX0pJVGAgYXJlIHRoZSByZWxldmFudCBjb25maWdzIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFyZSB0aGUgcmVsZXZhbnQgc3ltYm9scyB0byBmb2N1cyBvbi4KClRoZW4gSSByZWFsaXplZCBhIHBvdGVudGlhbCBpc3N1ZTogYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHZlcnkgY29tbW9uIGZvciBCUEYgSklULiBJcyBpdCBhIGhvdC1wYXRoPyBObywgaXQgaXMgY2FsbGVkIHdoZW4gYSBCUEYgcHJvZ3JhbSBpcyBsb2FkZWQsIHdoaWNoIGlzIGNvbnRyb2wtcGF0aCwgYW5kIHNvIGlzIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLgoKSSBkb3VibGUtY2hlY2tlZCBgYXJjaC9LY29uZmlnYCB0byBjb25maXJtIHRoYXQgYENGSWAgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbi4gSSBjYW4gY29uZmlybSBpdCYjMzk7cyB0aGUgcHJpbWFyeSBjb25maWcgYXMgYENGSV9DTEFOR2AgZGVmYXVsdHMgdG8gYENGSWAuCgpUaGUgcGF0Y2ggaW1wbGVtZW50cyBrQ0ZJIGZvciBzMzkwLCBtb2RpZnlpbmcgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBLQ0ZJIGhhc2hlcyBhbmQgdXBkYXRpbmcgYXNzZW1ibHkgZnVuY3Rpb25zIHRvIHVzZSB0eXBlZCBmdW5jdGlvbiBtYWNyb3MuIFRoZSBCUEYgSklUIGNoYW5nZXMgb2NjdXIgd2hlbiBCUEYgcHJvZ3JhbXMgYXJlIGxvYWRlZCBvciB0cmFtcG9saW5lcyBhcmUgYXR0YWNoZWQuCgpTbywgaGVyZSYjMzk7cyBteSBzdHJhdGVneToKCiogICBDb25maWdzOiBgQ0ZJYCwgYEJQRl9KSVRgLgoqICAgU3ltYm9sczogYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4KCldoaWxlIGBicGZfaW50X2ppdF9jb21waWxlYCAqaXMqIGFscmVhZHkgZnV6emVkIGJ5IHN5emthbGxlciwgZm9jdXNpbmcgb24gaXQgd2l0aCBgQ0ZJYCBlbmFibGVkIHdpbGwgc3BlY2lmaWNhbGx5IHRlc3QgdGhlIG5ldyBLQ0ZJIGVtaXNzaW9uIGxvZ2ljIG9uIHMzOTAuIEkgY2FuIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGSSYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSkgc3VwcG9ydCBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byBlbWl0IEtDRkkgaGFzaGVzIGZvciBCUEYgcHJvZ3JhbXMgYW5kIHRyYW1wb2xpbmVzLCBhbmQgdXBkYXRlcyBhc3NlbWJseSBmdW5jdGlvbnMgdG8gdXNlIHR5cGVkIGZ1bmN0aW9uIG1hY3Jvcy4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHdoZW4gQlBGIHByb2dyYW1zIGFyZSBsb2FkZWQgb3IgdHJhbXBvbGluZXMgYXJlIGF0dGFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkkmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgS2VybmVsIENvbnRyb2wgRmxvdyBJbnRlZ3JpdHkgKGtDRkkpIHN1cHBvcnQgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBLQ0ZJIGhhc2hlcyBmb3IgQlBGIHByb2dyYW1zIGFuZCB0cmFtcG9saW5lcywgYW5kIHVwZGF0ZXMgYXNzZW1ibHkgZnVuY3Rpb25zIHRvIHVzZSB0eXBlZCBmdW5jdGlvbiBtYWNyb3MuIFRoZSBCUEYgSklUIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCB3aGVuIEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkIG9yIHRyYW1wb2xpbmVzIGFyZSBhdHRhY2hlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA2OjQxOjU3LjA0MzM0NDA0M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDMxOTkxNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGSVwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgS2VybmVsIENvbnRyb2wgRmxvdyBJbnRlZ3JpdHkgKGtDRkkpIHN1cHBvcnQgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBLQ0ZJIGhhc2hlcyBmb3IgQlBGIHByb2dyYW1zIGFuZCB0cmFtcG9saW5lcywgYW5kIHVwZGF0ZXMgYXNzZW1ibHkgZnVuY3Rpb25zIHRvIHVzZSB0eXBlZCBmdW5jdGlvbiBtYWNyb3MuIFRoZSBCUEYgSklUIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCB3aGVuIEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkIG9yIHRyYW1wb2xpbmVzIGFyZSBhdHRhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDE6NTcuMDQzMzUwODgzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA1NzM1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2OTg0YWI4NTQ0ZDMyM2VjOGE1YTgyMmM1NzUxNzkxMGVkYWIyOGI0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDI4IDA2OjQxOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcXG5pbmRleCA4NDQwNGU2Nzc4ZDUwNC4uZWM5NjU5NWNhZTM5ZjAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL0tjb25maWdcXG4rKysgYi9hcmNoL3MzOTAvS2NvbmZpZ1xcbkBAIC0xNDQsNiArMTQ0LDcgQEAgY29uZmlnIFMzOTBcXG4gXFx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFxuIFxcdHNlbGVjdCBBUkNIX1NUQUNLV0FMS1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19BVE9NSUNfUk1XXFxuK1xcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSVxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0NcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0lOVDEyOCBpZiBDQ19IQVNfSU5UMTI4IFxcdTAwMjZcXHUwMDI2IENDX0lTX0NMQU5HXFxuQEAgLTE1MSw2ICsxNTIsNyBAQCBjb25maWcgUzM5MFxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbitcXHRzZWxlY3QgQVJDSF9VU0VTX0NGSV9HRU5FUklDX0xMVk1fUEFTUyBpZiBDQ19JU19DTEFOR1xcbiBcXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxcbiBcXHRzZWxlY3QgQVJDSF9VU0VfQ01QWENIR19MT0NLUkVGXFxuIFxcdHNlbGVjdCBBUkNIX1VTRV9TWU1fQU5OT1RBVElPTlNcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NmaS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NmaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWFmMmM3Y2I3MGNhN2FcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NmaS5oXFxuQEAgLTAsMCArMSw3IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKyNpZm5kZWYgX0FTTV9TMzkwX0NGSV9IXFxuKyNkZWZpbmUgX0FTTV9TMzkwX0NGSV9IXFxuK1xcbisjZGVmaW5lIF9fYnBmY2FsbFxcbitcXG4rI2VuZGlmIC8qIF9BU01fUzM5MF9DRklfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuU1xcbmluZGV4IDFmZWMzNzBmZWNmNDgxLi42YmM0NGM3Njc2NDJlNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TXFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuU1xcbkBAIC00LDYgKzQsNyBAQFxcbiAgKlxcbiAgKi9cXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jZmlfdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbmthZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9hc20tb2Zmc2V0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2Z0cmFjZS5oXFx1MDAzZVxcbkBAIC0zNCwxMCArMzUsMTYgQEBcXG4gXFxuIFxcdC5zZWN0aW9uIC5rcHJvYmVzLnRleHQsIFxcXCJheFxcXCJcXG4gXFxuLVNZTV9GVU5DX1NUQVJUKGZ0cmFjZV9zdHViKVxcbitTWU1fVFlQRURfRlVOQ19TVEFSVChmdHJhY2Vfc3R1YilcXG4gXFx0QlJfRVhcXHQlcjE0XFxuIFNZTV9GVU5DX0VORChmdHJhY2Vfc3R1YilcXG4gXFxuKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxuK1NZTV9UWVBFRF9GVU5DX1NUQVJUKGZ0cmFjZV9zdHViX2dyYXBoKVxcbitcXHRCUl9FWFxcdCVyMTRcXG4rU1lNX0ZVTkNfRU5EKGZ0cmFjZV9zdHViX2dyYXBoKVxcbisjZW5kaWZcXG4rXFxuIFNZTV9DT0RFX1NUQVJUKGZ0cmFjZV9zdHViX2RpcmVjdF90cmFtcClcXG4gXFx0bGdyXFx0JXIxLCAlcjBcXG4gXFx0QlJfRVhcXHQlcjFcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuUyBiL2FyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlNcXG5pbmRleCAyNmYyOTgxYWEwOWUzMS4uZjAwN2Q4OTJkMGM1ZmQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuU1xcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlNcXG5AQCAtNSw2ICs1LDcgQEBcXG4gICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDE5XFxuICAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NmaV90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlua2FnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2FzbS1leHRhYmxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZXJybm8uaFxcdTAwM2VcXG5AQCAtMjYsNyArMjcsNyBAQFxcbiAvKlxcbiAgKiBpbnQgX2RpYWcxNF9hbW9kZTMxKHVuc2lnbmVkIGxvbmcgcngsIHVuc2lnbmVkIGxvbmcgcnkxLCB1bnNpZ25lZCBsb25nIHN1YmNvZGUpXFxuICAqL1xcbi1TWU1fRlVOQ19TVEFSVChfZGlhZzE0X2Ftb2RlMzEpXFxuK1NZTV9UWVBFRF9GVU5DX1NUQVJUKF9kaWFnMTRfYW1vZGUzMSlcXG4gXFx0bGdyXFx0JXIxLCVyMlxcbiBcXHRsZ3JcXHQlcjIsJXIzXFxuIFxcdGxnclxcdCVyMywlcjRcXG5AQCAtNDYsNyArNDcsNyBAQCBTWU1fRlVOQ19FTkQoX2RpYWcxNF9hbW9kZTMxKVxcbiAvKlxcbiAgKiBpbnQgX2RpYWcyMTBfYW1vZGUzMShzdHJ1Y3QgZGlhZzIxMCAqYWRkcilcXG4gICovXFxuLVNZTV9GVU5DX1NUQVJUKF9kaWFnMjEwX2Ftb2RlMzEpXFxuK1NZTV9UWVBFRF9GVU5DX1NUQVJUKF9kaWFnMjEwX2Ftb2RlMzEpXFxuIFxcdGxnclxcdCVyMSwlcjJcXG4gXFx0bGhpXFx0JXIyLC0xXFxuIFxcdHNhbTMxXFxuQEAgLTY0LDcgKzY1LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMjEwX2Ftb2RlMzEpXFxuIC8qXFxuICAqIGludCBkaWFnOGMoc3RydWN0IGRpYWc4YyAqYWRkciwgc3RydWN0IGNjd19kZXZfaWQgKmRldm5vLCBzaXplX3QgbGVuKVxcbiAqL1xcbi1TWU1fRlVOQ19TVEFSVChfZGlhZzhjX2Ftb2RlMzEpXFxuK1NZTV9UWVBFRF9GVU5DX1NUQVJUKF9kaWFnOGNfYW1vZGUzMSlcXG4gXFx0bGxnZlxcdCVyMywwKCVyMylcXG4gXFx0c2FtMzFcXG4gXFx0ZGlhZ1xcdCVyMiwlcjQsMHg4Y1xcbkBAIC03Nyw3ICs3OCw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzhjX2Ftb2RlMzEpXFxuIC8qXFxuICAqIGludCBfZGlhZzI2Y19hbW9kZTMxKHZvaWQgKnJlcSwgdm9pZCAqcmVzcCwgZW51bSBkaWFnMjZjX3NjIHN1YmNvZGUpXFxuICAqL1xcbi1TWU1fRlVOQ19TVEFSVChfZGlhZzI2Y19hbW9kZTMxKVxcbitTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzI2Y19hbW9kZTMxKVxcbiBcXHRsZ2hpXFx0JXI1LC1FT1BOT1RTVVBQXFxuIFxcdHNhbTMxXFxuIFxcdGRpYWdcXHQlcjIsJXI0LDB4MjZjXFxuQEAgLTkxLDcgKzkyLDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMjZjX2Ftb2RlMzEpXFxuIC8qXFxuICAqIHZvaWQgX2RpYWcwY19hbW9kZTMxKHVuc2lnbmVkIGxvbmcgcngpXFxuICAqL1xcbi1TWU1fRlVOQ19TVEFSVChfZGlhZzBjX2Ftb2RlMzEpXFxuK1NZTV9UWVBFRF9GVU5DX1NUQVJUKF9kaWFnMGNfYW1vZGUzMSlcXG4gXFx0c2FtMzFcXG4gXFx0ZGlhZ1xcdCVyMiwlcjIsMHgwY1xcbiBcXHRzYW02NFxcbkBAIC0xMDMsNyArMTA0LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMGNfYW1vZGUzMSlcXG4gICpcXG4gICogQ2FsbHMgZGlhZyAzMDggc3ViY29kZSAxIGFuZCBjb250aW51ZXMgZXhlY3V0aW9uXFxuICAqL1xcbi1TWU1fRlVOQ19TVEFSVChfZGlhZzMwOF9yZXNldF9hbW9kZTMxKVxcbitTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzMwOF9yZXNldF9hbW9kZTMxKVxcbiBcXHRsYXJsXFx0JXI0LGN0bHJlZ3NcXHRcXHQjIFNhdmUgY29udHJvbCByZWdpc3RlcnNcXG4gXFx0c3RjdGdcXHQlYzAsJWMxNSwwKCVyNClcXG4gXFx0bGdcXHQlcjIsMCglcjQpXFx0XFx0IyBEaXNhYmxlIGxvd2NvcmUgcHJvdGVjdGlvblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IDMxNzQ5YzAzNjJjYTIzLi43ZjQ1YzEwNjQ0NGRlNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0yMSw2ICsyMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWx0ZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2ZpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXFx1MDAzZVxcbkBAIC0zNTYsNiArMzU3LDE5IEBAIHN0YXRpYyB2b2lkIGVtaXQ2X3BjcmVsX3JpbGMoc3RydWN0IGJwZl9qaXQgKmppdCwgdTMyIG9wLCB1OCBtYXNrLCBzNjQgcGNyZWwpXFxuIFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIH0pXFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF91MzJfZGF0YShjb25zdCB1MzIgZGF0YSwgc3RydWN0IGJwZl9qaXQgKmppdClcXG4re1xcbitcXHRpZiAoaml0LVxcdTAwM2VwcmdfYnVmKVxcbitcXHRcXHQqKHUzMiAqKShqaXQtXFx1MDAzZXByZ19idWYgKyBqaXQtXFx1MDAzZXByZykgPSBkYXRhO1xcbitcXHRqaXQtXFx1MDAzZXByZyArPSA0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF9rY2ZpKHUzMiBoYXNoLCBzdHJ1Y3QgYnBmX2ppdCAqaml0KVxcbit7XFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19DRkkpKVxcbitcXHRcXHRlbWl0X3UzMl9kYXRhKGhhc2gsIGppdCk7XFxuK31cXG4rXFxuIC8qXFxuICAqIFJldHVybiB3aGV0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFRoZSBmaXJzdCBwYXNzIGlzIHNwZWNpYWwsIHNpbmNlIHdlXFxuICAqIGRvbid0IGtub3cgYW55IHNpemVzIHlldCwgYW5kIHRodXMgbXVzdCBiZSBjb25zZXJ2YXRpdmUuXFxuQEAgLTU5Nyw2ICs2MTEsOCBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnApXFxuIHtcXG4gXFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgcHJvZ19mcmFtZSkgIT0gU1RBQ0tfRlJBTUVfT1ZFUkhFQUQpO1xcbiBcXG4rXFx0ZW1pdF9rY2ZpKGJwZl9pc19zdWJwcm9nKGZwKSA/IGNmaV9icGZfc3VicHJvZ19oYXNoIDogY2ZpX2JwZl9oYXNoLCBqaXQpO1xcbitcXG4gXFx0LyogTm8tb3AgZm9yIGhvdHBhdGNoaW5nICovXFxuIFxcdC8qIGJyY2wgMCxwcm9sb2d1ZV9wbHQgKi9cXG4gXFx0RU1JVDZfUENSRUxfUklMQygweGMwMDQwMDAwLCAwLCBqaXQtXFx1MDAzZXByb2xvZ3VlX3BsdCk7XFxuQEAgLTYxNiw3ICs2MzIsNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnApXFxuIFxcdFxcdGJwZl9za2lwKGppdCwgNik7XFxuIFxcdH1cXG4gXFx0LyogVGFpbCBjYWxscyBoYXZlIHRvIHNraXAgYWJvdmUgaW5pdGlhbGl6YXRpb24gKi9cXG4tXFx0aml0LVxcdTAwM2V0YWlsX2NhbGxfc3RhcnQgPSBqaXQtXFx1MDAzZXByZztcXG4rXFx0aml0LVxcdTAwM2V0YWlsX2NhbGxfc3RhcnQgPSBqaXQtXFx1MDAzZXByZyAtIGNmaV9nZXRfb2Zmc2V0KCk7XFxuIFxcdGlmIChmcC1cXHUwMDNlYXV4LVxcdTAwM2VleGNlcHRpb25fY2IpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogU3dpdGNoIHN0YWNrLCB0aGUgbmV3IGFkZHJlc3MgaXMgaW4gdGhlIDJuZCBwYXJhbWV0ZXIuXFxuQEAgLTI0MDEsMTEgKzI0MTcsMTMgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcXG4gXFx0XFx0aml0X2RhdGEtXFx1MDAzZWN0eCA9IGppdDtcXG4gXFx0XFx0aml0X2RhdGEtXFx1MDAzZXBhc3MgPSBwYXNzO1xcbiBcXHR9XFxuLVxcdGZwLVxcdTAwM2VicGZfZnVuYyA9ICh2b2lkICopIGppdC5wcmdfYnVmO1xcbitcXHRmcC1cXHUwMDNlYnBmX2Z1bmMgPSAodm9pZCAqKWppdC5wcmdfYnVmICsgY2ZpX2dldF9vZmZzZXQoKTtcXG4gXFx0ZnAtXFx1MDAzZWppdGVkID0gMTtcXG4tXFx0ZnAtXFx1MDAzZWppdGVkX2xlbiA9IGppdC5zaXplO1xcbitcXHRmcC1cXHUwMDNlaml0ZWRfbGVuID0gaml0LnNpemUgLSBjZmlfZ2V0X29mZnNldCgpO1xcbiBcXG4gXFx0aWYgKCFmcC1cXHUwMDNlaXNfZnVuYyB8fCBleHRyYV9wYXNzKSB7XFxuK1xcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgZnAtXFx1MDAzZWxlbjsgaSsrKVxcbitcXHRcXHRcXHRqaXQuYWRkcnNbaV0gLT0gY2ZpX2dldF9vZmZzZXQoKTtcXG4gXFx0XFx0YnBmX3Byb2dfZmlsbF9qaXRlZF9saW5mbyhmcCwgaml0LmFkZHJzICsgMSk7XFxuIGZyZWVfYWRkcnM6XFxuIFxcdFxcdGt2ZnJlZShqaXQuYWRkcnMpO1xcbkBAIC0yNjcxLDggKzI2ODksMTAgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4gXFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4gXFxuIFxcdC8qIFJldHVybiB0byAlcjE0IGluIHRoZSBzdHJ1Y3Rfb3BzIGNhc2UuICovXFxuLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKVxcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkge1xcbiBcXHRcXHRmbGFncyB8PSBCUEZfVFJBTVBfRl9TS0lQX0ZSQU1FO1xcbitcXHRcXHRlbWl0X2tjZmkoY2ZpX2dldF9mdW5jX2hhc2goZnVuY19hZGRyKSwgaml0KTtcXG4rXFx0fVxcbiBcXG4gXFx0LypcXG4gXFx0ICogQ29tcHV0ZSBob3cgbWFueSBhcmd1bWVudHMgd2UgbmVlZCB0byBwYXNzIHRvIEJQRiBwcm9ncmFtcy5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jIGIvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jXFxuaW5kZXggMzBhNzMyYzgwOGYzNWUuLjcyMTc4ZGM5MGE0Y2Y4IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC90b29scy9yZWxvY3MuY1xcbisrKyBiL2FyY2gvczM5MC90b29scy9yZWxvY3MuY1xcbkBAIC00MSw2ICs0MSwxMCBAQFxcbiBzdGF0aWMgRWxmX0VoZHJcXHRcXHRlaGRyO1xcbiBzdGF0aWMgdW5zaWduZWQgbG9uZ1xcdHNobnVtO1xcbiBzdGF0aWMgdW5zaWduZWQgaW50XFx0c2hzdHJuZHg7XFxuK3N0YXRpYyB1bnNpZ25lZCBpbnRcXHRzaHN5bXRhYm5keDtcXG4rc3RhdGljIHVuc2lnbmVkIGludFxcdHNoeHN5bXRhYm5keDtcXG4rXFxuK3N0YXRpYyBpbnQgc3ltX2luZGV4KEVsZl9TeW0gKnN5bSk7XFxuIFxcbiBzdHJ1Y3QgcmVsb2NzIHtcXG4gXFx0dWludDMyX3RcXHQqb2Zmc2V0O1xcbkBAIC01NCwxMSArNTgsNDAgQEAgc3RhdGljIHN0cnVjdCByZWxvY3MgcmVsb2NzNjQ7XFxuIHN0cnVjdCBzZWN0aW9uIHtcXG4gXFx0RWxmX1NoZHJcXHRzaGRyO1xcbiBcXHRzdHJ1Y3Qgc2VjdGlvblxcdCpsaW5rO1xcbitcXHRFbGZfU3ltXFx0XFx0KnN5bXRhYjtcXG4rXFx0RWxmMzJfV29yZFxcdCp4c3ltdGFiO1xcbiBcXHRFbGZfUmVsXFx0XFx0KnJlbHRhYjtcXG4rXFx0Y2hhclxcdFxcdCpzdHJ0YWI7XFxuIH07XFxuIFxcbiBzdGF0aWMgc3RydWN0IHNlY3Rpb24gKnNlY3M7XFxuIFxcbitzdGF0aWMgY29uc3QgY2hhciAqc2VjX25hbWUodW5zaWduZWQgc2huZHgpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqc2VjX3N0cnRhYjtcXG4rXFx0Y29uc3QgY2hhciAqbmFtZSA9IFxcXCJcXHUwMDNjbm9uYW1lXFx1MDAzZVxcXCI7XFxuK1xcdHNlY19zdHJ0YWIgPSBzZWNzW3Noc3RybmR4XS5zdHJ0YWI7XFxuK1xcbitcXHRpZiAoc2huZHggXFx1MDAzYyBzaG51bSlcXG4rXFx0XFx0bmFtZSA9IHNlY19zdHJ0YWIgKyBzZWNzW3NobmR4XS5zaGRyLnNoX25hbWU7XFxuK1xcdGVsc2UgaWYgKHNobmR4ID09IFNITl9BQlMpXFxuK1xcdFxcdG5hbWUgPSBcXFwiQUJTT0xVVEVcXFwiO1xcbitcXHRlbHNlIGlmIChzaG5keCA9PSBTSE5fQ09NTU9OKVxcbitcXHRcXHRuYW1lID0gXFxcIkNPTU1PTlxcXCI7XFxuK1xcdHJldHVybiBuYW1lO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqc3ltX25hbWUoY29uc3QgY2hhciAqc3ltX3N0cnRhYiwgRWxmX1N5bSAqc3ltKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcbitcXHRpZiAoc3ltLVxcdTAwM2VzdF9uYW1lKVxcbitcXHRcXHRuYW1lID0gc3ltX3N0cnRhYiArIHN5bS1cXHUwMDNlc3RfbmFtZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuYW1lID0gc2VjX25hbWUoc3ltX2luZGV4KHN5bSkpO1xcbitcXHRyZXR1cm4gbmFtZTtcXG4rfVxcbitcXG4gI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTlxcbiAjZGVmaW5lIGxlMTZfdG9fY3B1KHZhbClcXHQodmFsKVxcbiAjZGVmaW5lIGxlMzJfdG9fY3B1KHZhbClcXHQodmFsKVxcbkBAIC0xMDUsNiArMTM4LDIzIEBAIHN0YXRpYyB1aW50NjRfdCBlbGY2NF90b19jcHUodWludDY0X3QgdmFsKVxcbiAjZGVmaW5lIGVsZl9vZmZfdG9fY3B1KHgpXFx0ZWxmNjRfdG9fY3B1KHgpXFxuICNkZWZpbmUgZWxmX3h3b3JkX3RvX2NwdSh4KVxcdGVsZjY0X3RvX2NwdSh4KVxcbiBcXG4rc3RhdGljIGludCBzeW1faW5kZXgoRWxmX1N5bSAqc3ltKVxcbit7XFxuK1xcdEVsZl9TeW0gKnN5bXRhYiA9IHNlY3Nbc2hzeW10YWJuZHhdLnN5bXRhYjtcXG4rXFx0RWxmMzJfV29yZCAqeHN5bXRhYiA9IHNlY3Nbc2h4c3ltdGFibmR4XS54c3ltdGFiO1xcbitcXHR1bnNpZ25lZCBsb25nIG9mZnNldDtcXG4rXFx0aW50IGluZGV4O1xcbitcXG4rXFx0aWYgKHN5bS1cXHUwMDNlc3Rfc2huZHggIT0gU0hOX1hJTkRFWClcXG4rXFx0XFx0cmV0dXJuIHN5bS1cXHUwMDNlc3Rfc2huZHg7XFxuK1xcbitcXHQvKiBjYWxjdWxhdGUgb2Zmc2V0IG9mIHN5bSBmcm9tIGhlYWQgb2YgdGFibGUuICovXFxuK1xcdG9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXN5bSAtICh1bnNpZ25lZCBsb25nKXN5bXRhYjtcXG4rXFx0aW5kZXggPSBvZmZzZXQgLyBzaXplb2YoKnN5bSk7XFxuK1xcbitcXHRyZXR1cm4gZWxmMzJfdG9fY3B1KHhzeW10YWJbaW5kZXhdKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZGllKGNoYXIgKmZtdCwgLi4uKVxcbiB7XFxuIFxcdHZhX2xpc3QgYXA7XFxuQEAgLTIxNiw2ICsyNjYsODEgQEAgc3RhdGljIHZvaWQgcmVhZF9zaGRycyhGSUxFICpmcClcXG4gXFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJlYWRfc3RydGFicyhGSUxFICpmcClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzaG51bTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBzZWN0aW9uICpzZWMgPSBcXHUwMDI2c2Vjc1tpXTtcXG4rXFxuK1xcdFxcdGlmIChzZWMtXFx1MDAzZXNoZHIuc2hfdHlwZSAhPSBTSFRfU1RSVEFCKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNlYy1cXHUwMDNlc3RydGFiID0gbWFsbG9jKHNlYy1cXHUwMDNlc2hkci5zaF9zaXplKTtcXG4rXFx0XFx0aWYgKCFzZWMtXFx1MDAzZXN0cnRhYilcXG4rXFx0XFx0XFx0ZGllKFxcXCJtYWxsb2Mgb2YgJVxcXCIgRk1UIFxcXCIgYnl0ZXMgZm9yIHN0cnRhYiBmYWlsZWRcXFxcblxcXCIsIHNlYy1cXHUwMDNlc2hkci5zaF9zaXplKTtcXG4rXFxuK1xcdFxcdGlmIChmc2VlayhmcCwgc2VjLVxcdTAwM2VzaGRyLnNoX29mZnNldCwgU0VFS19TRVQpIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0ZGllKFxcXCJTZWVrIHRvICVcXFwiIEZNVCBcXFwiIGZhaWxlZDogJXNcXFxcblxcXCIsIHNlYy1cXHUwMDNlc2hkci5zaF9vZmZzZXQsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcbitcXHRcXHRpZiAoZnJlYWQoc2VjLVxcdTAwM2VzdHJ0YWIsIDEsIHNlYy1cXHUwMDNlc2hkci5zaF9zaXplLCBmcCkgIT0gc2VjLVxcdTAwM2VzaGRyLnNoX3NpemUpXFxuK1xcdFxcdFxcdGRpZShcXFwiQ2Fubm90IHJlYWQgc3ltYm9sIHRhYmxlOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByZWFkX3N5bXRhYnMoRklMRSAqZnApXFxuK3tcXG4rXFx0aW50IGksIGo7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2hudW07IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qgc2VjdGlvbiAqc2VjID0gXFx1MDAyNnNlY3NbaV07XFxuK1xcdFxcdGludCBudW1fc3ltcztcXG4rXFxuK1xcdFxcdHN3aXRjaCAoc2VjLVxcdTAwM2VzaGRyLnNoX3R5cGUpIHtcXG4rXFx0XFx0Y2FzZSBTSFRfU1lNVEFCX1NITkRYOlxcbitcXHRcXHRcXHRzZWMtXFx1MDAzZXhzeW10YWIgPSBtYWxsb2Moc2VjLVxcdTAwM2VzaGRyLnNoX3NpemUpO1xcbitcXHRcXHRcXHRpZiAoIXNlYy1cXHUwMDNleHN5bXRhYilcXG4rXFx0XFx0XFx0XFx0ZGllKFxcXCJtYWxsb2Mgb2YgJVxcXCIgRk1UIFxcXCIgYnl0ZXMgZm9yIHhzeW10YWIgZmFpbGVkXFxcXG5cXFwiLCBzZWMtXFx1MDAzZXNoZHIuc2hfc2l6ZSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoZnNlZWsoZnAsIHNlYy1cXHUwMDNlc2hkci5zaF9vZmZzZXQsIFNFRUtfU0VUKSBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGRpZShcXFwiU2VlayB0byAlXFxcIiBGTVQgXFxcIiBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBzZWMtXFx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBzdHJlcnJvcihlcnJubykpO1xcbitcXG4rXFx0XFx0XFx0aWYgKGZyZWFkKHNlYy1cXHUwMDNleHN5bXRhYiwgMSwgc2VjLVxcdTAwM2VzaGRyLnNoX3NpemUsIGZwKSAhPSBzZWMtXFx1MDAzZXNoZHIuc2hfc2l6ZSlcXG4rXFx0XFx0XFx0XFx0ZGllKFxcXCJDYW5ub3QgcmVhZCBleHRlbmRlZCBzeW1ib2wgdGFibGU6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXG4rXFx0XFx0XFx0c2h4c3ltdGFibmR4ID0gaTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRjYXNlIFNIVF9TWU1UQUI6XFxuK1xcdFxcdFxcdG51bV9zeW1zID0gc2VjLVxcdTAwM2VzaGRyLnNoX3NpemUgLyBzaXplb2YoRWxmX1N5bSk7XFxuK1xcbitcXHRcXHRcXHRzZWMtXFx1MDAzZXN5bXRhYiA9IG1hbGxvYyhzZWMtXFx1MDAzZXNoZHIuc2hfc2l6ZSk7XFxuK1xcdFxcdFxcdGlmICghc2VjLVxcdTAwM2VzeW10YWIpXFxuK1xcdFxcdFxcdFxcdGRpZShcXFwibWFsbG9jIG9mICVcXFwiIEZNVCBcXFwiIGJ5dGVzIGZvciBzeW10YWIgZmFpbGVkXFxcXG5cXFwiLCBzZWMtXFx1MDAzZXNoZHIuc2hfc2l6ZSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoZnNlZWsoZnAsIHNlYy1cXHUwMDNlc2hkci5zaF9vZmZzZXQsIFNFRUtfU0VUKSBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGRpZShcXFwiU2VlayB0byAlXFxcIiBGTVQgXFxcIiBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBzZWMtXFx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBzdHJlcnJvcihlcnJubykpO1xcbitcXG4rXFx0XFx0XFx0aWYgKGZyZWFkKHNlYy1cXHUwMDNlc3ltdGFiLCAxLCBzZWMtXFx1MDAzZXNoZHIuc2hfc2l6ZSwgZnApICE9IHNlYy1cXHUwMDNlc2hkci5zaF9zaXplKVxcbitcXHRcXHRcXHRcXHRkaWUoXFxcIkNhbm5vdCByZWFkIHN5bWJvbCB0YWJsZTogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcbitcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgbnVtX3N5bXM7IGorKykge1xcbitcXHRcXHRcXHRcXHRFbGZfU3ltICpzeW0gPSBcXHUwMDI2c2VjLVxcdTAwM2VzeW10YWJbal07XFxuK1xcbitcXHRcXHRcXHRcXHRzeW0tXFx1MDAzZXN0X25hbWUgID0gZWxmX3dvcmRfdG9fY3B1KHN5bS1cXHUwMDNlc3RfbmFtZSk7XFxuK1xcdFxcdFxcdFxcdHN5bS1cXHUwMDNlc3RfdmFsdWUgPSBlbGZfYWRkcl90b19jcHUoc3ltLVxcdTAwM2VzdF92YWx1ZSk7XFxuK1xcdFxcdFxcdFxcdHN5bS1cXHUwMDNlc3Rfc2l6ZSAgPSBlbGZfeHdvcmRfdG9fY3B1KHN5bS1cXHUwMDNlc3Rfc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdHN5bS1cXHUwMDNlc3Rfc2huZHggPSBlbGZfaGFsZl90b19jcHUoc3ltLVxcdTAwM2VzdF9zaG5keCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0c2hzeW10YWJuZHggPSBpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcmVhZF9yZWxvY3MoRklMRSAqZnApXFxuIHtcXG4gXFx0aW50IGksIGo7XFxuQEAgLTI2Myw3ICszODgsOCBAQCBzdGF0aWMgdm9pZCBhZGRfcmVsb2Moc3RydWN0IHJlbG9jcyAqciwgdWludDMyX3Qgb2Zmc2V0KVxcbiBcXHRyLVxcdTAwM2VvZmZzZXRbci1cXHUwMDNlY291bnQrK10gPSBvZmZzZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZG9fcmVsb2Moc3RydWN0IHNlY3Rpb24gKnNlYywgRWxmX1JlbCAqcmVsKVxcbitzdGF0aWMgaW50IGRvX3JlbG9jKHN0cnVjdCBzZWN0aW9uICpzZWMsIEVsZl9SZWwgKnJlbCwgRWxmVyhTeW0pICpzeW0sXFxuK1xcdFxcdCAgICBjb25zdCBjaGFyICpzeW1uYW1lKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCByX3R5cGUgPSBFTEY2NF9SX1RZUEUocmVsLVxcdTAwM2VyX2luZm8pO1xcbiBcXHRFbGZXKEFkZHIpIG9mZnNldCA9IHJlbC1cXHUwMDNlcl9vZmZzZXQ7XFxuQEAgLTI3OSw2ICs0MDUsMjIgQEAgc3RhdGljIGludCBkb19yZWxvYyhzdHJ1Y3Qgc2VjdGlvbiAqc2VjLCBFbGZfUmVsICpyZWwpXFxuIFxcdGNhc2UgUl8zOTBfR09UUENEQkw6XFxuIFxcdGNhc2UgUl8zOTBfR09UT0ZGNjQ6XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJfMzkwXzMyOiB7XFxuK1xcdFxcdHN0YXRpYyBjb25zdCBjaGFyIGtjZmlwZnhbXSA9IFxcXCJfX2tjZmlfdHlwZWlkX1xcXCI7XFxuK1xcbitcXHRcXHRpZiAoc3ltLVxcdTAwM2VzdF9zaG5keCAhPSBTSE5fQUJTKVxcbitcXHRcXHRcXHRkaWUoXFxcIlVuc3VwcG9ydGVkIHJlbG9jYXRpb24gdHlwZTogJWRcXFxcblxcXCIsIHJfdHlwZSk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFN5bWJvbHMgd2l0aCBfX2tjZmlfdHlwZWlkXyBwcmVmaXggaGF2ZSBjb25zdGFudCB2YWx1ZXMsXFxuK1xcdFxcdCAqIHdoaWNoIGRvIG5vdCBjaGFuZ2UgaWYgYnpJbWFnZSBpcyBsb2FkZWQgYXQgYSBkaWZmZXJlbnRcXG4rXFx0XFx0ICogcGh5c2ljYWwgYWRkcmVzcyB0aGFuIHRoZSBhZGRyZXNzIGZvciB3aGljaCBpdCBoYXMgYmVlblxcbitcXHRcXHQgKiBjb21waWxlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghc3RybmNtcChrY2ZpcGZ4LCBzeW1uYW1lLCBzaXplb2Yoa2NmaXBmeCkgLSAxKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRpZShcXFwiSW52YWxpZCBhYnNvbHV0ZSBSXzM5MF8zMiByZWxvY2F0aW9uOiAlc1xcXFxuXFxcIiwgc3ltbmFtZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcdGNhc2UgUl8zOTBfNjQ6XFxuIFxcdFxcdGFkZF9yZWxvYyhcXHUwMDI2cmVsb2NzNjQsIG9mZnNldCk7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0yOTYsMjEgKzQzOCwyOSBAQCBzdGF0aWMgdm9pZCB3YWxrX3JlbG9jcyh2b2lkKVxcbiBcXG4gXFx0LyogV2FsayB0aHJvdWdoIHRoZSByZWxvY2F0aW9ucyAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2hudW07IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qgc2VjdGlvbiAqc2VjX2FwcGxpZXM7XFxuK1xcdFxcdGNoYXIgKnN5bV9zdHJ0YWI7XFxuK1xcdFxcdEVsZl9TeW0gKnNoX3N5bXRhYjtcXG4rXFx0XFx0c3RydWN0IHNlY3Rpb24gKnNlY19hcHBsaWVzLCAqc2VjX3N5bXRhYjtcXG4gXFx0XFx0aW50IGo7XFxuIFxcdFxcdHN0cnVjdCBzZWN0aW9uICpzZWMgPSBcXHUwMDI2c2Vjc1tpXTtcXG4gXFxuIFxcdFxcdGlmIChzZWMtXFx1MDAzZXNoZHIuc2hfdHlwZSAhPSBTSFRfUkVMX1RZUEUpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0c2VjX3N5bXRhYiAgPSBzZWMtXFx1MDAzZWxpbms7XFxuIFxcdFxcdHNlY19hcHBsaWVzID0gXFx1MDAyNnNlY3Nbc2VjLVxcdTAwM2VzaGRyLnNoX2luZm9dO1xcbiBcXHRcXHRpZiAoIShzZWNfYXBwbGllcy1cXHUwMDNlc2hkci5zaF9mbGFncyBcXHUwMDI2IFNIRl9BTExPQykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0c2hfc3ltdGFiID0gc2VjX3N5bXRhYi1cXHUwMDNlc3ltdGFiO1xcbitcXHRcXHRzeW1fc3RydGFiID0gc2VjX3N5bXRhYi1cXHUwMDNlbGluay1cXHUwMDNlc3RydGFiO1xcbitcXG4gXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHNlYy1cXHUwMDNlc2hkci5zaF9zaXplIC8gc2l6ZW9mKEVsZl9SZWwpOyBqKyspIHtcXG4gXFx0XFx0XFx0RWxmX1JlbCAqcmVsID0gXFx1MDAyNnNlYy1cXHUwMDNlcmVsdGFiW2pdO1xcbitcXHRcXHRcXHRFbGZfU3ltICpzeW0gPSBcXHUwMDI2c2hfc3ltdGFiW0VMRl9SX1NZTShyZWwtXFx1MDAzZXJfaW5mbyldO1xcbitcXHRcXHRcXHRjb25zdCBjaGFyICpzeW1uYW1lID0gc3ltX25hbWUoc3ltX3N0cnRhYiwgc3ltKTtcXG4gXFxuLVxcdFxcdFxcdGRvX3JlbG9jKHNlYywgcmVsKTtcXG4rXFx0XFx0XFx0ZG9fcmVsb2Moc2VjLCByZWwsIHN5bSwgc3ltbmFtZSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiB9XFxuQEAgLTM0OSw2ICs0OTksOCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzKEZJTEUgKmZwKVxcbiB7XFxuIFxcdHJlYWRfZWhkcihmcCk7XFxuIFxcdHJlYWRfc2hkcnMoZnApO1xcbitcXHRyZWFkX3N0cnRhYnMoZnApO1xcbitcXHRyZWFkX3N5bXRhYnMoZnApO1xcbiBcXHRyZWFkX3JlbG9jcyhmcCk7XFxuIFxcdGVtaXRfcmVsb2NzKCk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDE6NTcuNjI0OTIzMzMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTM0NTA0MDEyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZJXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSkgc3VwcG9ydCBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byBlbWl0IEtDRkkgaGFzaGVzIGZvciBCUEYgcHJvZ3JhbXMgYW5kIHRyYW1wb2xpbmVzLCBhbmQgdXBkYXRlcyBhc3NlbWJseSBmdW5jdGlvbnMgdG8gdXNlIHR5cGVkIGZ1bmN0aW9uIG1hY3Jvcy4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHdoZW4gQlBGIHByb2dyYW1zIGFyZSBsb2FkZWQgb3IgdHJhbXBvbGluZXMgYXJlIGF0dGFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2OTg0YWI4NTQ0ZDMyM2VjOGE1YTgyMmM1NzUxNzkxMGVkYWIyOGI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDY6NDE6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXG5pbmRleCA4NDQwNGU2Nzc4ZDUwNC4uZWM5NjU5NWNhZTM5ZjAgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xuKysrIGIvYXJjaC9zMzkwL0tjb25maWdcbkBAIC0xNDQsNiArMTQ0LDcgQEAgY29uZmlnIFMzOTBcbiBcdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxuIFx0c2VsZWN0IEFSQ0hfU1RBQ0tXQUxLXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19BVE9NSUNfUk1XXG4rXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19DRklcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQ1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19JTlQxMjggaWYgQ0NfSEFTX0lOVDEyOCBcdTAwMjZcdTAwMjYgQ0NfSVNfQ0xBTkdcbkBAIC0xNTEsNiArMTUyLDcgQEAgY29uZmlnIFMzOTBcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbitcdHNlbGVjdCBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTIGlmIENDX0lTX0NMQU5HXG4gXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxuIFx0c2VsZWN0IEFSQ0hfVVNFX0NNUFhDSEdfTE9DS1JFRlxuIFx0c2VsZWN0IEFSQ0hfVVNFX1NZTV9BTk5PVEFUSU9OU1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jZmkuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jZmkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45YWYyYzdjYjcwY2E3YVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NmaS5oXG5AQCAtMCwwICsxLDcgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyNpZm5kZWYgX0FTTV9TMzkwX0NGSV9IXG4rI2RlZmluZSBfQVNNX1MzOTBfQ0ZJX0hcbitcbisjZGVmaW5lIF9fYnBmY2FsbFxuK1xuKyNlbmRpZiAvKiBfQVNNX1MzOTBfQ0ZJX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuU1xuaW5kZXggMWZlYzM3MGZlY2Y0ODEuLjZiYzQ0Yzc2NzY0MmU1IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuU1xuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuU1xuQEAgLTQsNiArNCw3IEBAXG4gICpcbiAgKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jZmlfdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbmthZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9hc20tb2Zmc2V0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2Z0cmFjZS5oXHUwMDNlXG5AQCAtMzQsMTAgKzM1LDE2IEBAXG4gXG4gXHQuc2VjdGlvbiAua3Byb2Jlcy50ZXh0LCBcImF4XCJcbiBcbi1TWU1fRlVOQ19TVEFSVChmdHJhY2Vfc3R1YilcbitTWU1fVFlQRURfRlVOQ19TVEFSVChmdHJhY2Vfc3R1YilcbiBcdEJSX0VYXHQlcjE0XG4gU1lNX0ZVTkNfRU5EKGZ0cmFjZV9zdHViKVxuIFxuKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4rU1lNX1RZUEVEX0ZVTkNfU1RBUlQoZnRyYWNlX3N0dWJfZ3JhcGgpXG4rXHRCUl9FWFx0JXIxNFxuK1NZTV9GVU5DX0VORChmdHJhY2Vfc3R1Yl9ncmFwaClcbisjZW5kaWZcbitcbiBTWU1fQ09ERV9TVEFSVChmdHJhY2Vfc3R1Yl9kaXJlY3RfdHJhbXApXG4gXHRsZ3JcdCVyMSwgJXIwXG4gXHRCUl9FWFx0JXIxXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuUyBiL2FyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlNcbmluZGV4IDI2ZjI5ODFhYTA5ZTMxLi5mMDA3ZDg5MmQwYzVmZCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlNcbkBAIC01LDYgKzUsNyBAQFxuICAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxOVxuICAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NmaV90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlua2FnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2FzbS1leHRhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZXJybm8uaFx1MDAzZVxuQEAgLTI2LDcgKzI3LDcgQEBcbiAvKlxuICAqIGludCBfZGlhZzE0X2Ftb2RlMzEodW5zaWduZWQgbG9uZyByeCwgdW5zaWduZWQgbG9uZyByeTEsIHVuc2lnbmVkIGxvbmcgc3ViY29kZSlcbiAgKi9cbi1TWU1fRlVOQ19TVEFSVChfZGlhZzE0X2Ftb2RlMzEpXG4rU1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcxNF9hbW9kZTMxKVxuIFx0bGdyXHQlcjEsJXIyXG4gXHRsZ3JcdCVyMiwlcjNcbiBcdGxnclx0JXIzLCVyNFxuQEAgLTQ2LDcgKzQ3LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMTRfYW1vZGUzMSlcbiAvKlxuICAqIGludCBfZGlhZzIxMF9hbW9kZTMxKHN0cnVjdCBkaWFnMjEwICphZGRyKVxuICAqL1xuLVNZTV9GVU5DX1NUQVJUKF9kaWFnMjEwX2Ftb2RlMzEpXG4rU1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcyMTBfYW1vZGUzMSlcbiBcdGxnclx0JXIxLCVyMlxuIFx0bGhpXHQlcjIsLTFcbiBcdHNhbTMxXG5AQCAtNjQsNyArNjUsNyBAQCBTWU1fRlVOQ19FTkQoX2RpYWcyMTBfYW1vZGUzMSlcbiAvKlxuICAqIGludCBkaWFnOGMoc3RydWN0IGRpYWc4YyAqYWRkciwgc3RydWN0IGNjd19kZXZfaWQgKmRldm5vLCBzaXplX3QgbGVuKVxuICovXG4tU1lNX0ZVTkNfU1RBUlQoX2RpYWc4Y19hbW9kZTMxKVxuK1NZTV9UWVBFRF9GVU5DX1NUQVJUKF9kaWFnOGNfYW1vZGUzMSlcbiBcdGxsZ2ZcdCVyMywwKCVyMylcbiBcdHNhbTMxXG4gXHRkaWFnXHQlcjIsJXI0LDB4OGNcbkBAIC03Nyw3ICs3OCw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzhjX2Ftb2RlMzEpXG4gLypcbiAgKiBpbnQgX2RpYWcyNmNfYW1vZGUzMSh2b2lkICpyZXEsIHZvaWQgKnJlc3AsIGVudW0gZGlhZzI2Y19zYyBzdWJjb2RlKVxuICAqL1xuLVNZTV9GVU5DX1NUQVJUKF9kaWFnMjZjX2Ftb2RlMzEpXG4rU1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcyNmNfYW1vZGUzMSlcbiBcdGxnaGlcdCVyNSwtRU9QTk9UU1VQUFxuIFx0c2FtMzFcbiBcdGRpYWdcdCVyMiwlcjQsMHgyNmNcbkBAIC05MSw3ICs5Miw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzI2Y19hbW9kZTMxKVxuIC8qXG4gICogdm9pZCBfZGlhZzBjX2Ftb2RlMzEodW5zaWduZWQgbG9uZyByeClcbiAgKi9cbi1TWU1fRlVOQ19TVEFSVChfZGlhZzBjX2Ftb2RlMzEpXG4rU1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcwY19hbW9kZTMxKVxuIFx0c2FtMzFcbiBcdGRpYWdcdCVyMiwlcjIsMHgwY1xuIFx0c2FtNjRcbkBAIC0xMDMsNyArMTA0LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMGNfYW1vZGUzMSlcbiAgKlxuICAqIENhbGxzIGRpYWcgMzA4IHN1YmNvZGUgMSBhbmQgY29udGludWVzIGV4ZWN1dGlvblxuICAqL1xuLVNZTV9GVU5DX1NUQVJUKF9kaWFnMzA4X3Jlc2V0X2Ftb2RlMzEpXG4rU1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWczMDhfcmVzZXRfYW1vZGUzMSlcbiBcdGxhcmxcdCVyNCxjdGxyZWdzXHRcdCMgU2F2ZSBjb250cm9sIHJlZ2lzdGVyc1xuIFx0c3RjdGdcdCVjMCwlYzE1LDAoJXI0KVxuIFx0bGdcdCVyMiwwKCVyNClcdFx0IyBEaXNhYmxlIGxvd2NvcmUgcHJvdGVjdGlvblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCAzMTc0OWMwMzYyY2EyMy4uN2Y0NWMxMDY0NDRkZTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jZmkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9jYWNoZWZsdXNoLmhcdTAwM2VcbkBAIC0zNTYsNiArMzU3LDE5IEBAIHN0YXRpYyB2b2lkIGVtaXQ2X3BjcmVsX3JpbGMoc3RydWN0IGJwZl9qaXQgKmppdCwgdTMyIG9wLCB1OCBtYXNrLCBzNjQgcGNyZWwpXG4gXHR9XHRcdFx0XHRcdFx0XHRcXFxuIH0pXG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGVtaXRfdTMyX2RhdGEoY29uc3QgdTMyIGRhdGEsIHN0cnVjdCBicGZfaml0ICpqaXQpXG4re1xuK1x0aWYgKGppdC1cdTAwM2VwcmdfYnVmKVxuK1x0XHQqKHUzMiAqKShqaXQtXHUwMDNlcHJnX2J1ZiArIGppdC1cdTAwM2VwcmcpID0gZGF0YTtcbitcdGppdC1cdTAwM2VwcmcgKz0gNDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGVtaXRfa2NmaSh1MzIgaGFzaCwgc3RydWN0IGJwZl9qaXQgKmppdClcbit7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ0ZJKSlcbitcdFx0ZW1pdF91MzJfZGF0YShoYXNoLCBqaXQpO1xuK31cbitcbiAvKlxuICAqIFJldHVybiB3aGV0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFRoZSBmaXJzdCBwYXNzIGlzIHNwZWNpYWwsIHNpbmNlIHdlXG4gICogZG9uJ3Qga25vdyBhbnkgc2l6ZXMgeWV0LCBhbmQgdGh1cyBtdXN0IGJlIGNvbnNlcnZhdGl2ZS5cbkBAIC01OTcsNiArNjExLDggQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuIHtcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHByb2dfZnJhbWUpICE9IFNUQUNLX0ZSQU1FX09WRVJIRUFEKTtcbiBcbitcdGVtaXRfa2NmaShicGZfaXNfc3VicHJvZyhmcCkgPyBjZmlfYnBmX3N1YnByb2dfaGFzaCA6IGNmaV9icGZfaGFzaCwgaml0KTtcbitcbiBcdC8qIE5vLW9wIGZvciBob3RwYXRjaGluZyAqL1xuIFx0LyogYnJjbCAwLHByb2xvZ3VlX3BsdCAqL1xuIFx0RU1JVDZfUENSRUxfUklMQygweGMwMDQwMDAwLCAwLCBqaXQtXHUwMDNlcHJvbG9ndWVfcGx0KTtcbkBAIC02MTYsNyArNjMyLDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuIFx0XHRicGZfc2tpcChqaXQsIDYpO1xuIFx0fVxuIFx0LyogVGFpbCBjYWxscyBoYXZlIHRvIHNraXAgYWJvdmUgaW5pdGlhbGl6YXRpb24gKi9cbi1cdGppdC1cdTAwM2V0YWlsX2NhbGxfc3RhcnQgPSBqaXQtXHUwMDNlcHJnO1xuK1x0aml0LVx1MDAzZXRhaWxfY2FsbF9zdGFydCA9IGppdC1cdTAwM2VwcmcgLSBjZmlfZ2V0X29mZnNldCgpO1xuIFx0aWYgKGZwLVx1MDAzZWF1eC1cdTAwM2VleGNlcHRpb25fY2IpIHtcbiBcdFx0LypcbiBcdFx0ICogU3dpdGNoIHN0YWNrLCB0aGUgbmV3IGFkZHJlc3MgaXMgaW4gdGhlIDJuZCBwYXJhbWV0ZXIuXG5AQCAtMjQwMSwxMSArMjQxNywxMyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0XHRqaXRfZGF0YS1cdTAwM2VjdHggPSBqaXQ7XG4gXHRcdGppdF9kYXRhLVx1MDAzZXBhc3MgPSBwYXNzO1xuIFx0fVxuLVx0ZnAtXHUwMDNlYnBmX2Z1bmMgPSAodm9pZCAqKSBqaXQucHJnX2J1ZjtcbitcdGZwLVx1MDAzZWJwZl9mdW5jID0gKHZvaWQgKilqaXQucHJnX2J1ZiArIGNmaV9nZXRfb2Zmc2V0KCk7XG4gXHRmcC1cdTAwM2VqaXRlZCA9IDE7XG4tXHRmcC1cdTAwM2VqaXRlZF9sZW4gPSBqaXQuc2l6ZTtcbitcdGZwLVx1MDAzZWppdGVkX2xlbiA9IGppdC5zaXplIC0gY2ZpX2dldF9vZmZzZXQoKTtcbiBcbiBcdGlmICghZnAtXHUwMDNlaXNfZnVuYyB8fCBleHRyYV9wYXNzKSB7XG4rXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBmcC1cdTAwM2VsZW47IGkrKylcbitcdFx0XHRqaXQuYWRkcnNbaV0gLT0gY2ZpX2dldF9vZmZzZXQoKTtcbiBcdFx0YnBmX3Byb2dfZmlsbF9qaXRlZF9saW5mbyhmcCwgaml0LmFkZHJzICsgMSk7XG4gZnJlZV9hZGRyczpcbiBcdFx0a3ZmcmVlKGppdC5hZGRycyk7XG5AQCAtMjY3MSw4ICsyNjg5LDEwIEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHRcdHJldHVybiAtRU5PVFNVUFA7XG4gXG4gXHQvKiBSZXR1cm4gdG8gJXIxNCBpbiB0aGUgc3RydWN0X29wcyBjYXNlLiAqL1xuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVClcbitcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIHtcbiBcdFx0ZmxhZ3MgfD0gQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRTtcbitcdFx0ZW1pdF9rY2ZpKGNmaV9nZXRfZnVuY19oYXNoKGZ1bmNfYWRkciksIGppdCk7XG4rXHR9XG4gXG4gXHQvKlxuIFx0ICogQ29tcHV0ZSBob3cgbWFueSBhcmd1bWVudHMgd2UgbmVlZCB0byBwYXNzIHRvIEJQRiBwcm9ncmFtcy5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvdG9vbHMvcmVsb2NzLmMgYi9hcmNoL3MzOTAvdG9vbHMvcmVsb2NzLmNcbmluZGV4IDMwYTczMmM4MDhmMzVlLi43MjE3OGRjOTBhNGNmOCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC90b29scy9yZWxvY3MuY1xuKysrIGIvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jXG5AQCAtNDEsNiArNDEsMTAgQEBcbiBzdGF0aWMgRWxmX0VoZHJcdFx0ZWhkcjtcbiBzdGF0aWMgdW5zaWduZWQgbG9uZ1x0c2hudW07XG4gc3RhdGljIHVuc2lnbmVkIGludFx0c2hzdHJuZHg7XG4rc3RhdGljIHVuc2lnbmVkIGludFx0c2hzeW10YWJuZHg7XG4rc3RhdGljIHVuc2lnbmVkIGludFx0c2h4c3ltdGFibmR4O1xuK1xuK3N0YXRpYyBpbnQgc3ltX2luZGV4KEVsZl9TeW0gKnN5bSk7XG4gXG4gc3RydWN0IHJlbG9jcyB7XG4gXHR1aW50MzJfdFx0Km9mZnNldDtcbkBAIC01NCwxMSArNTgsNDAgQEAgc3RhdGljIHN0cnVjdCByZWxvY3MgcmVsb2NzNjQ7XG4gc3RydWN0IHNlY3Rpb24ge1xuIFx0RWxmX1NoZHJcdHNoZHI7XG4gXHRzdHJ1Y3Qgc2VjdGlvblx0Kmxpbms7XG4rXHRFbGZfU3ltXHRcdCpzeW10YWI7XG4rXHRFbGYzMl9Xb3JkXHQqeHN5bXRhYjtcbiBcdEVsZl9SZWxcdFx0KnJlbHRhYjtcbitcdGNoYXJcdFx0KnN0cnRhYjtcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2VjdGlvbiAqc2VjcztcbiBcbitzdGF0aWMgY29uc3QgY2hhciAqc2VjX25hbWUodW5zaWduZWQgc2huZHgpXG4re1xuK1x0Y29uc3QgY2hhciAqc2VjX3N0cnRhYjtcbitcdGNvbnN0IGNoYXIgKm5hbWUgPSBcIlx1MDAzY25vbmFtZVx1MDAzZVwiO1xuK1x0c2VjX3N0cnRhYiA9IHNlY3Nbc2hzdHJuZHhdLnN0cnRhYjtcbitcbitcdGlmIChzaG5keCBcdTAwM2Mgc2hudW0pXG4rXHRcdG5hbWUgPSBzZWNfc3RydGFiICsgc2Vjc1tzaG5keF0uc2hkci5zaF9uYW1lO1xuK1x0ZWxzZSBpZiAoc2huZHggPT0gU0hOX0FCUylcbitcdFx0bmFtZSA9IFwiQUJTT0xVVEVcIjtcbitcdGVsc2UgaWYgKHNobmR4ID09IFNITl9DT01NT04pXG4rXHRcdG5hbWUgPSBcIkNPTU1PTlwiO1xuK1x0cmV0dXJuIG5hbWU7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpzeW1fbmFtZShjb25zdCBjaGFyICpzeW1fc3RydGFiLCBFbGZfU3ltICpzeW0pXG4re1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcbitcdGlmIChzeW0tXHUwMDNlc3RfbmFtZSlcbitcdFx0bmFtZSA9IHN5bV9zdHJ0YWIgKyBzeW0tXHUwMDNlc3RfbmFtZTtcbitcdGVsc2VcbitcdFx0bmFtZSA9IHNlY19uYW1lKHN5bV9pbmRleChzeW0pKTtcbitcdHJldHVybiBuYW1lO1xuK31cbitcbiAjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOXG4gI2RlZmluZSBsZTE2X3RvX2NwdSh2YWwpXHQodmFsKVxuICNkZWZpbmUgbGUzMl90b19jcHUodmFsKVx0KHZhbClcbkBAIC0xMDUsNiArMTM4LDIzIEBAIHN0YXRpYyB1aW50NjRfdCBlbGY2NF90b19jcHUodWludDY0X3QgdmFsKVxuICNkZWZpbmUgZWxmX29mZl90b19jcHUoeClcdGVsZjY0X3RvX2NwdSh4KVxuICNkZWZpbmUgZWxmX3h3b3JkX3RvX2NwdSh4KVx0ZWxmNjRfdG9fY3B1KHgpXG4gXG4rc3RhdGljIGludCBzeW1faW5kZXgoRWxmX1N5bSAqc3ltKVxuK3tcbitcdEVsZl9TeW0gKnN5bXRhYiA9IHNlY3Nbc2hzeW10YWJuZHhdLnN5bXRhYjtcbitcdEVsZjMyX1dvcmQgKnhzeW10YWIgPSBzZWNzW3NoeHN5bXRhYm5keF0ueHN5bXRhYjtcbitcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0O1xuK1x0aW50IGluZGV4O1xuK1xuK1x0aWYgKHN5bS1cdTAwM2VzdF9zaG5keCAhPSBTSE5fWElOREVYKVxuK1x0XHRyZXR1cm4gc3ltLVx1MDAzZXN0X3NobmR4O1xuK1xuK1x0LyogY2FsY3VsYXRlIG9mZnNldCBvZiBzeW0gZnJvbSBoZWFkIG9mIHRhYmxlLiAqL1xuK1x0b2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpc3ltIC0gKHVuc2lnbmVkIGxvbmcpc3ltdGFiO1xuK1x0aW5kZXggPSBvZmZzZXQgLyBzaXplb2YoKnN5bSk7XG4rXG4rXHRyZXR1cm4gZWxmMzJfdG9fY3B1KHhzeW10YWJbaW5kZXhdKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZGllKGNoYXIgKmZtdCwgLi4uKVxuIHtcbiBcdHZhX2xpc3QgYXA7XG5AQCAtMjE2LDYgKzI2Niw4MSBAQCBzdGF0aWMgdm9pZCByZWFkX3NoZHJzKEZJTEUgKmZwKVxuIFxuIH1cbiBcbitzdGF0aWMgdm9pZCByZWFkX3N0cnRhYnMoRklMRSAqZnApXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaG51bTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBzZWN0aW9uICpzZWMgPSBcdTAwMjZzZWNzW2ldO1xuK1xuK1x0XHRpZiAoc2VjLVx1MDAzZXNoZHIuc2hfdHlwZSAhPSBTSFRfU1RSVEFCKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzZWMtXHUwMDNlc3RydGFiID0gbWFsbG9jKHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpO1xuK1x0XHRpZiAoIXNlYy1cdTAwM2VzdHJ0YWIpXG4rXHRcdFx0ZGllKFwibWFsbG9jIG9mICVcIiBGTVQgXCIgYnl0ZXMgZm9yIHN0cnRhYiBmYWlsZWRcXG5cIiwgc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSk7XG4rXG4rXHRcdGlmIChmc2VlayhmcCwgc2VjLVx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBTRUVLX1NFVCkgXHUwMDNjIDApXG4rXHRcdFx0ZGllKFwiU2VlayB0byAlXCIgRk1UIFwiIGZhaWxlZDogJXNcXG5cIiwgc2VjLVx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBzdHJlcnJvcihlcnJubykpO1xuK1xuK1x0XHRpZiAoZnJlYWQoc2VjLVx1MDAzZXN0cnRhYiwgMSwgc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSwgZnApICE9IHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpXG4rXHRcdFx0ZGllKFwiQ2Fubm90IHJlYWQgc3ltYm9sIHRhYmxlOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCByZWFkX3N5bXRhYnMoRklMRSAqZnApXG4re1xuK1x0aW50IGksIGo7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaG51bTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBzZWN0aW9uICpzZWMgPSBcdTAwMjZzZWNzW2ldO1xuK1x0XHRpbnQgbnVtX3N5bXM7XG4rXG4rXHRcdHN3aXRjaCAoc2VjLVx1MDAzZXNoZHIuc2hfdHlwZSkge1xuK1x0XHRjYXNlIFNIVF9TWU1UQUJfU0hORFg6XG4rXHRcdFx0c2VjLVx1MDAzZXhzeW10YWIgPSBtYWxsb2Moc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSk7XG4rXHRcdFx0aWYgKCFzZWMtXHUwMDNleHN5bXRhYilcbitcdFx0XHRcdGRpZShcIm1hbGxvYyBvZiAlXCIgRk1UIFwiIGJ5dGVzIGZvciB4c3ltdGFiIGZhaWxlZFxcblwiLCBzZWMtXHUwMDNlc2hkci5zaF9zaXplKTtcbitcbitcdFx0XHRpZiAoZnNlZWsoZnAsIHNlYy1cdTAwM2VzaGRyLnNoX29mZnNldCwgU0VFS19TRVQpIFx1MDAzYyAwKVxuK1x0XHRcdFx0ZGllKFwiU2VlayB0byAlXCIgRk1UIFwiIGZhaWxlZDogJXNcXG5cIiwgc2VjLVx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBzdHJlcnJvcihlcnJubykpO1xuK1xuK1x0XHRcdGlmIChmcmVhZChzZWMtXHUwMDNleHN5bXRhYiwgMSwgc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSwgZnApICE9IHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpXG4rXHRcdFx0XHRkaWUoXCJDYW5ub3QgcmVhZCBleHRlbmRlZCBzeW1ib2wgdGFibGU6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXG4rXHRcdFx0c2h4c3ltdGFibmR4ID0gaTtcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Y2FzZSBTSFRfU1lNVEFCOlxuK1x0XHRcdG51bV9zeW1zID0gc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSAvIHNpemVvZihFbGZfU3ltKTtcbitcbitcdFx0XHRzZWMtXHUwMDNlc3ltdGFiID0gbWFsbG9jKHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpO1xuK1x0XHRcdGlmICghc2VjLVx1MDAzZXN5bXRhYilcbitcdFx0XHRcdGRpZShcIm1hbGxvYyBvZiAlXCIgRk1UIFwiIGJ5dGVzIGZvciBzeW10YWIgZmFpbGVkXFxuXCIsIHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpO1xuK1xuK1x0XHRcdGlmIChmc2VlayhmcCwgc2VjLVx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBTRUVLX1NFVCkgXHUwMDNjIDApXG4rXHRcdFx0XHRkaWUoXCJTZWVrIHRvICVcIiBGTVQgXCIgZmFpbGVkOiAlc1xcblwiLCBzZWMtXHUwMDNlc2hkci5zaF9vZmZzZXQsIHN0cmVycm9yKGVycm5vKSk7XG4rXG4rXHRcdFx0aWYgKGZyZWFkKHNlYy1cdTAwM2VzeW10YWIsIDEsIHNlYy1cdTAwM2VzaGRyLnNoX3NpemUsIGZwKSAhPSBzZWMtXHUwMDNlc2hkci5zaF9zaXplKVxuK1x0XHRcdFx0ZGllKFwiQ2Fubm90IHJlYWQgc3ltYm9sIHRhYmxlOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK1xuK1x0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG51bV9zeW1zOyBqKyspIHtcbitcdFx0XHRcdEVsZl9TeW0gKnN5bSA9IFx1MDAyNnNlYy1cdTAwM2VzeW10YWJbal07XG4rXG4rXHRcdFx0XHRzeW0tXHUwMDNlc3RfbmFtZSAgPSBlbGZfd29yZF90b19jcHUoc3ltLVx1MDAzZXN0X25hbWUpO1xuK1x0XHRcdFx0c3ltLVx1MDAzZXN0X3ZhbHVlID0gZWxmX2FkZHJfdG9fY3B1KHN5bS1cdTAwM2VzdF92YWx1ZSk7XG4rXHRcdFx0XHRzeW0tXHUwMDNlc3Rfc2l6ZSAgPSBlbGZfeHdvcmRfdG9fY3B1KHN5bS1cdTAwM2VzdF9zaXplKTtcbitcdFx0XHRcdHN5bS1cdTAwM2VzdF9zaG5keCA9IGVsZl9oYWxmX3RvX2NwdShzeW0tXHUwMDNlc3Rfc2huZHgpO1xuK1x0XHRcdH1cbitcdFx0XHRzaHN5bXRhYm5keCA9IGk7XG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgcmVhZF9yZWxvY3MoRklMRSAqZnApXG4ge1xuIFx0aW50IGksIGo7XG5AQCAtMjYzLDcgKzM4OCw4IEBAIHN0YXRpYyB2b2lkIGFkZF9yZWxvYyhzdHJ1Y3QgcmVsb2NzICpyLCB1aW50MzJfdCBvZmZzZXQpXG4gXHRyLVx1MDAzZW9mZnNldFtyLVx1MDAzZWNvdW50KytdID0gb2Zmc2V0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3JlbG9jKHN0cnVjdCBzZWN0aW9uICpzZWMsIEVsZl9SZWwgKnJlbClcbitzdGF0aWMgaW50IGRvX3JlbG9jKHN0cnVjdCBzZWN0aW9uICpzZWMsIEVsZl9SZWwgKnJlbCwgRWxmVyhTeW0pICpzeW0sXG4rXHRcdCAgICBjb25zdCBjaGFyICpzeW1uYW1lKVxuIHtcbiBcdHVuc2lnbmVkIGludCByX3R5cGUgPSBFTEY2NF9SX1RZUEUocmVsLVx1MDAzZXJfaW5mbyk7XG4gXHRFbGZXKEFkZHIpIG9mZnNldCA9IHJlbC1cdTAwM2VyX29mZnNldDtcbkBAIC0yNzksNiArNDA1LDIyIEBAIHN0YXRpYyBpbnQgZG9fcmVsb2Moc3RydWN0IHNlY3Rpb24gKnNlYywgRWxmX1JlbCAqcmVsKVxuIFx0Y2FzZSBSXzM5MF9HT1RQQ0RCTDpcbiBcdGNhc2UgUl8zOTBfR09UT0ZGNjQ6XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBSXzM5MF8zMjoge1xuK1x0XHRzdGF0aWMgY29uc3QgY2hhciBrY2ZpcGZ4W10gPSBcIl9fa2NmaV90eXBlaWRfXCI7XG4rXG4rXHRcdGlmIChzeW0tXHUwMDNlc3Rfc2huZHggIT0gU0hOX0FCUylcbitcdFx0XHRkaWUoXCJVbnN1cHBvcnRlZCByZWxvY2F0aW9uIHR5cGU6ICVkXFxuXCIsIHJfdHlwZSk7XG4rXHRcdC8qXG4rXHRcdCAqIFN5bWJvbHMgd2l0aCBfX2tjZmlfdHlwZWlkXyBwcmVmaXggaGF2ZSBjb25zdGFudCB2YWx1ZXMsXG4rXHRcdCAqIHdoaWNoIGRvIG5vdCBjaGFuZ2UgaWYgYnpJbWFnZSBpcyBsb2FkZWQgYXQgYSBkaWZmZXJlbnRcbitcdFx0ICogcGh5c2ljYWwgYWRkcmVzcyB0aGFuIHRoZSBhZGRyZXNzIGZvciB3aGljaCBpdCBoYXMgYmVlblxuK1x0XHQgKiBjb21waWxlZC5cbitcdFx0ICovXG4rXHRcdGlmICghc3RybmNtcChrY2ZpcGZ4LCBzeW1uYW1lLCBzaXplb2Yoa2NmaXBmeCkgLSAxKSlcbitcdFx0XHRicmVhaztcbitcdFx0ZGllKFwiSW52YWxpZCBhYnNvbHV0ZSBSXzM5MF8zMiByZWxvY2F0aW9uOiAlc1xcblwiLCBzeW1uYW1lKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4gXHRjYXNlIFJfMzkwXzY0OlxuIFx0XHRhZGRfcmVsb2MoXHUwMDI2cmVsb2NzNjQsIG9mZnNldCk7XG4gXHRcdGJyZWFrO1xuQEAgLTI5NiwyMSArNDM4LDI5IEBAIHN0YXRpYyB2b2lkIHdhbGtfcmVsb2NzKHZvaWQpXG4gXG4gXHQvKiBXYWxrIHRocm91Z2ggdGhlIHJlbG9jYXRpb25zICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaG51bTsgaSsrKSB7XG4tXHRcdHN0cnVjdCBzZWN0aW9uICpzZWNfYXBwbGllcztcbitcdFx0Y2hhciAqc3ltX3N0cnRhYjtcbitcdFx0RWxmX1N5bSAqc2hfc3ltdGFiO1xuK1x0XHRzdHJ1Y3Qgc2VjdGlvbiAqc2VjX2FwcGxpZXMsICpzZWNfc3ltdGFiO1xuIFx0XHRpbnQgajtcbiBcdFx0c3RydWN0IHNlY3Rpb24gKnNlYyA9IFx1MDAyNnNlY3NbaV07XG4gXG4gXHRcdGlmIChzZWMtXHUwMDNlc2hkci5zaF90eXBlICE9IFNIVF9SRUxfVFlQRSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0c2VjX3N5bXRhYiAgPSBzZWMtXHUwMDNlbGluaztcbiBcdFx0c2VjX2FwcGxpZXMgPSBcdTAwMjZzZWNzW3NlYy1cdTAwM2VzaGRyLnNoX2luZm9dO1xuIFx0XHRpZiAoIShzZWNfYXBwbGllcy1cdTAwM2VzaGRyLnNoX2ZsYWdzIFx1MDAyNiBTSEZfQUxMT0MpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRzaF9zeW10YWIgPSBzZWNfc3ltdGFiLVx1MDAzZXN5bXRhYjtcbitcdFx0c3ltX3N0cnRhYiA9IHNlY19zeW10YWItXHUwMDNlbGluay1cdTAwM2VzdHJ0YWI7XG4rXG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHNlYy1cdTAwM2VzaGRyLnNoX3NpemUgLyBzaXplb2YoRWxmX1JlbCk7IGorKykge1xuIFx0XHRcdEVsZl9SZWwgKnJlbCA9IFx1MDAyNnNlYy1cdTAwM2VyZWx0YWJbal07XG4rXHRcdFx0RWxmX1N5bSAqc3ltID0gXHUwMDI2c2hfc3ltdGFiW0VMRl9SX1NZTShyZWwtXHUwMDNlcl9pbmZvKV07XG4rXHRcdFx0Y29uc3QgY2hhciAqc3ltbmFtZSA9IHN5bV9uYW1lKHN5bV9zdHJ0YWIsIHN5bSk7XG4gXG4tXHRcdFx0ZG9fcmVsb2Moc2VjLCByZWwpO1xuK1x0XHRcdGRvX3JlbG9jKHNlYywgcmVsLCBzeW0sIHN5bW5hbWUpO1xuIFx0XHR9XG4gXHR9XG4gfVxuQEAgLTM0OSw2ICs0OTksOCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzKEZJTEUgKmZwKVxuIHtcbiBcdHJlYWRfZWhkcihmcCk7XG4gXHRyZWFkX3NoZHJzKGZwKTtcbitcdHJlYWRfc3RydGFicyhmcCk7XG4rXHRyZWFkX3N5bXRhYnMoZnApO1xuIFx0cmVhZF9yZWxvY3MoZnApO1xuIFx0ZW1pdF9yZWxvY3MoKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNjo0MTo1Ny42MjQ5MjU4NzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjU1Mjk0MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgSW1wYWN0IG9mIHRoaXMgQ0ZJIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZyBhdHRlbnRpb24uIEl0IHRvdWNoZXMgcXVpdGUgYSBmZXcgZmlsZXMgaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlOiBgYXJjaC9zMzkwL0tjb25maWdgLCBzb21lIGluY2x1ZGUgZmlsZXMsIGFuZCBzb21lIGFzc2VtYmx5IGFuZCBDIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCBhbmQgbmV0d29ya2luZy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBlbmFibGluZyBDRkkgKENvbnRyb2wgRmxvdyBJbnRlZ3JpdHkpIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEl0J3Mgc2VsZWN0aW5nIGBBUkNIX1NVUFBPUlRTX0NGSWAgYW5kIGBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTYCBpZiBjbGFuZyBpcyBiZWluZyB1c2VkLlxuXG5UaGUgcmVhbGx5IGludGVyZXN0aW5nIHBhcnQsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBpcyB0aGUgQlBGIEpJVCBjb21waWxlciBtb2RpZmljYXRpb25zLiBUaGlzIGlzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgYXJlYSB0aGF0J3MgcHJpbWUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYGJwZl9qaXRfcHJvbG9ndWVgLCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGFuZCBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIHRvIGVtaXQgS0NGSSBoYXNoZXMuIFNvLCB3ZSdyZSBkZWFsaW5nIHdpdGggbmV3IGNvZGUgZ2VuZXJhdGlvbiByZWxhdGVkIHRvIENGSSB3aXRoaW4gdGhlIEJQRiBKSVQsIG1ha2luZyB0aG9zZSBmdW5jdGlvbnMga2V5IHRhcmdldHMgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkLiBJdCBsb29rcyBsaWtlIGl0J3MgZ29pbmcgdG8gdXNlIGBDT05GSUdfQ0ZJYC4gSSB0aG91Z2h0IGBDT05GSUdfQ0ZJX0NMQU5HYCB3YXMgdXN1YWxseSB0aGUga25vYi4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBjb3JyZWN0LCBidXQgeWVhaCwgaXQncyBgQ09ORklHX0NGSWAuIFRoZSBjb2RlIHVzZXMgYElTX0VOQUJMRUQoQ09ORklHX0NGSSlgIHRvIGRldGVybWluZSBpZiBpdCBzaG91bGQgZW1pdCB0aGVzZSBoYXNoZXMuIE9rYXksIHNvIHRoYXQncyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzY0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDI6MDYuMjgwMjI0MDY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODgyNzkxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTkzMD1jb25maWcgQVJDSF9VU0VTX0NGSV9HRU5FUklDX0xMVk1fUEFTU1xcbi0tXFxuYXJjaC9LY29uZmlnLTkzNi1cXG5hcmNoL0tjb25maWc6OTM3OmNvbmZpZyBDRklcXG5hcmNoL0tjb25maWctOTM4LVxcdGJvb2wgXFxcIlVzZSBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSlcXFwiXFxuLS1cXG5hcmNoL0tjb25maWctOTUyLVxcbmFyY2gvS2NvbmZpZzo5NTM6Y29uZmlnIENGSV9DTEFOR1xcbmFyY2gvS2NvbmZpZy05NTQtXFx0Ym9vbFxcbi0tXFxuYXJjaC9LY29uZmlnLTk1OC1cXG5hcmNoL0tjb25maWc6OTU5OmNvbmZpZyBDRklfSUNBTExfTk9STUFMSVpFX0lOVEVHRVJTXFxuYXJjaC9LY29uZmlnLTk2MC1cXHRib29sIFxcXCJOb3JtYWxpemUgQ0ZJIHRhZ3MgZm9yIGludGVnZXJzXFxcIlxcbi0tXFxuYXJjaC9LY29uZmlnPTk4MT1jb25maWcgSEFWRV9DRklfSUNBTExfTk9STUFMSVpFX0lOVEVHRVJTX1JVU1RDXFxuLS1cXG5hcmNoL0tjb25maWctOTg4LVxcbmFyY2gvS2NvbmZpZzo5ODk6Y29uZmlnIENGSV9QRVJNSVNTSVZFXFxuYXJjaC9LY29uZmlnLTk5MC1cXHRib29sIFxcXCJVc2UgQ0ZJIGluIHBlcm1pc3NpdmUgbW9kZVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MjI5Mz1jb25maWcgU1RSSUNUX1NJR0FMVFNUQUNLX1NJWkVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjMwOC1cXG5hcmNoL3g4Ni9LY29uZmlnOjIzMDk6Y29uZmlnIENGSV9BVVRPX0RFRkFVTFRcXG5hcmNoL3g4Ni9LY29uZmlnLTIzMTAtXFx0Ym9vbCBcXFwiQXR0ZW1wdCB0byB1c2UgRmluZUlCVCBieSBkZWZhdWx0IGF0IGJvb3QgdGltZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDI6MDguMzY4NTE4MzkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0MjU5NjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQ2hlY2tpbmcgQ0ZJIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgQ09ORklHX0NGSWAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIFByZXR0eSBzdXJlIHRoYXQncyBhIGxlZ2l0aW1hdGUgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgaXQgZGVmaW5lZCBzb21ld2hlcmUgaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgS2NvbmZpZ2AgZmlsZXMsIHByb2JhYmx5IGluIGBhcmNoL0tjb25maWdgLiBHb29kIHByYWN0aWNlIHRvIGRvdWJsZS1jaGVjayB0aGF0LCBidXQgSSdtIHByZXR0eSBjb25maWRlbnQgaW4gdGhhdCBvbmUuXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4gTGV0IG1lIHF1aWNrbHkgc2NhbiBgYXJjaC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUncyBhIHJlbGF0ZWQgYGNvbmZpZ2Agb3B0aW9uIGNhbGxlZCBgQ0ZJX0NMQU5HYC4gTWlnaHQgYmUgYSBDbGFuZy1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvciBkZXBlbmRlbmN5IHRoYXQncyBjb250cm9sbGVkIHNlcGFyYXRlbHkuIEdvdHRhIGNvbnNpZGVyIGFsbCB0aGUgcG90ZW50aWFsIHZhcmlhYmxlcywgcmlnaHQ/IEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDc4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDI6MTMuOTExMTE3NzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkzMDpcXHRjb25maWcgQVJDSF9VU0VTX0NGSV9HRU5FUklDX0xMVk1fUEFTU1xcbiA5MzE6XFx0XFx0Ym9vbFxcbiA5MzI6XFx0XFx0aGVscFxcbiA5MzM6XFx0XFx0ICBBbiBhcmNoaXRlY3R1cmUgc2hvdWxkIHNlbGVjdCB0aGlzIG9wdGlvbiBpZiBpdCB1c2VzIHRoZSBnZW5lcmljXFxuIDkzNDpcXHRcXHQgIEtDRklQYXNzIGluIExMVk0gdG8gZXhwYW5kIGtDRkkgYnVuZGxlcyBpbnN0ZWFkIG9mIGFyY2hpdGVjdHVyZS1zcGVjaWZpY1xcbiA5MzU6XFx0XFx0ICBsb3dlcmluZy5cXG4gOTM2OlxcdFxcbiA5Mzc6XFx0Y29uZmlnIENGSVxcbiA5Mzg6XFx0XFx0Ym9vbCBcXFwiVXNlIEtlcm5lbCBDb250cm9sIEZsb3cgSW50ZWdyaXR5IChrQ0ZJKVxcXCJcXG4gOTM5OlxcdFxcdGRlZmF1bHQgQ0ZJX0NMQU5HXFxuIDk0MDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfQ0ZJXFxuIDk0MTpcXHRcXHRkZXBlbmRzIG9uICQoY2Mtb3B0aW9uLC1mc2FuaXRpemU9a2NmaSlcXG4gOTQyOlxcdFxcdGhlbHBcXG4gOTQzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBmb3J3YXJkLWVkZ2UgQ29udHJvbCBGbG93IEludGVncml0eSAoQ0ZJKVxcbiA5NDQ6XFx0XFx0ICBjaGVja2luZywgd2hlcmUgdGhlIGNvbXBpbGVyIGluamVjdHMgYSBydW50aW1lIGNoZWNrIHRvIGVhY2hcXG4gOTQ1OlxcdFxcdCAgaW5kaXJlY3QgZnVuY3Rpb24gY2FsbCB0byBlbnN1cmUgdGhlIHRhcmdldCBpcyBhIHZhbGlkIGZ1bmN0aW9uIHdpdGhcXG4gOTQ2OlxcdFxcdCAgdGhlIGNvcnJlY3Qgc3RhdGljIHR5cGUuIFRoaXMgcmVzdHJpY3RzIHBvc3NpYmxlIGNhbGwgdGFyZ2V0cyBhbmRcXG4gOTQ3OlxcdFxcdCAgbWFrZXMgaXQgbW9yZSBkaWZmaWN1bHQgZm9yIGFuIGF0dGFja2VyIHRvIGV4cGxvaXQgYnVncyB0aGF0IGFsbG93XFxuIDk0ODpcXHRcXHQgIHRoZSBtb2RpZmljYXRpb24gb2Ygc3RvcmVkIGZ1bmN0aW9uIHBvaW50ZXJzLiBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZVxcbiA5NDk6XFx0XFx0ICBmb3VuZCBmcm9tIENsYW5nJ3MgZG9jdW1lbnRhdGlvbjpcXG4gOTUwOlxcdFxcbiA5NTE6XFx0XFx0ICAgIGh0dHBzOi8vY2xhbmcubGx2bS5vcmcvZG9jcy9Db250cm9sRmxvd0ludGVncml0eS5odG1sXFxuIDk1MjpcXHRcXG4gOTUzOlxcdGNvbmZpZyBDRklfQ0xBTkdcXG4gOTU0OlxcdFxcdGJvb2xcXG4gOTU1OlxcdFxcdHRyYW5zaXRpb25hbFxcbiA5NTY6XFx0XFx0aGVscFxcbiA5NTc6XFx0XFx0ICBUcmFuc2l0aW9uYWwgY29uZmlnIGZvciBDRklfQ0xBTkcgdG8gQ0ZJIG1pZ3JhdGlvbi5cXG4gOTU4OlxcdFxcbiA5NTk6XFx0Y29uZmlnIENGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNcXG4gOTYwOlxcdFxcdGJvb2wgXFxcIk5vcm1hbGl6ZSBDRkkgdGFncyBmb3IgaW50ZWdlcnNcXFwiXFxuIDk2MTpcXHRcXHRkZXBlbmRzIG9uIENGSVxcbiA5NjI6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNcXG4gOTYzOlxcdFxcdGhlbHBcXG4gOTY0OlxcdFxcdCAgVGhpcyBvcHRpb24gbm9ybWFsaXplcyB0aGUgQ0ZJIHRhZ3MgZm9yIGludGVnZXIgdHlwZXMgc28gdGhhdCBhbGxcXG4gOTY1OlxcdFxcdCAgaW50ZWdlciB0eXBlcyBvZiB0aGUgc2FtZSBzaXplIGFuZCBzaWduZWRuZXNzIHJlY2VpdmUgdGhlIHNhbWUgQ0ZJXFxuIDk2NjpcXHRcXHQgIHRhZy5cXG4gOTY3OlxcdFxcbiA5Njg6XFx0XFx0ICBUaGUgb3B0aW9uIGlzIHNlcGFyYXRlIGZyb20gQ09ORklHX1JVU1QgYmVjYXVzZSBpdCBhZmZlY3RzIHRoZSBBQkkuXFxuIDk2OTpcXHRcXHQgIFdoZW4gd29ya2luZyB3aXRoIGJ1aWxkIHN5c3RlbXMgdGhhdCBjYXJlIGFib3V0IHRoZSBBQkksIGl0IGlzXFxuIDk3MDpcXHRcXHQgIGNvbnZlbmllbnQgdG8gYmUgYWJsZSB0byB0dXJuIG9uIHRoaXMgZmxhZyBmaXJzdCwgYmVmb3JlIFJ1c3QgaXNcXG4gOTcxOlxcdFxcdCAgdHVybmVkIG9uLlxcbiA5NzI6XFx0XFxuIDk3MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGlzIG5lY2Vzc2FyeSBmb3IgdXNpbmcgQ0ZJIHdpdGggUnVzdC4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gOTc0OlxcdFxcbiA5NzU6XFx0Y29uZmlnIEhBVkVfQ0ZJX0lDQUxMX05PUk1BTElaRV9JTlRFR0VSU1xcbiA5NzY6XFx0XFx0ZGVmX2Jvb2wgeVxcbiA5Nzc6XFx0XFx0ZGVwZW5kcyBvbiAkKGNjLW9wdGlvbiwtZnNhbml0aXplPWtjZmkgLWZzYW5pdGl6ZS1jZmktaWNhbGwtZXhwZXJpbWVudGFsLW5vcm1hbGl6ZS1pbnRlZ2VycylcXG4gOTc4OlxcdFxcdCMgV2l0aCBHQ09WL0tBU0FOIHdlIG5lZWQgdGhpcyBmaXg6IGh0dHBzOi8vZ2l0aHViLmNvbS9sbHZtL2xsdm0tcHJvamVjdC9wdWxsLzEwNDgyNlxcbiA5Nzk6XFx0XFx0ZGVwZW5kcyBvbiBDTEFOR19WRVJTSU9OIFxcdTAwM2U9IDE5MDEwMyB8fCAoIUdDT1ZfS0VSTkVMIFxcdTAwMjZcXHUwMDI2ICFLQVNBTl9HRU5FUklDIFxcdTAwMjZcXHUwMDI2ICFLQVNBTl9TV19UQUdTKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNjo0MjoxMy45MTEzNTkxNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzgwNjIyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXM6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyBmb3IgQlBGIEpJVCBDb21waWxhdGlvbiBvbiBzMzkwIEFyY2hpdGVjdHVyZSoqXG5cbkFscmlnaHQsIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUuIEZpcnN0IHRob3VnaHQ6IGBDT05GSUdfQ0ZJYCAtIHRoYXQncyAqdGhlKiBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IGhvbGQgb24sIHRoZSBjb2RlIHBhdGggdGhhdCdzIGdyYWJiZWQgbXkgYXR0ZW50aW9uLCBzcGVjaWZpY2FsbHkgYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgLCBzdWdnZXN0cyBhbm90aGVyIGNyaXRpY2FsIHBpZWNlIGlzIG5lZWRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0JQRl9KSVRgIGlzIGVuYWJsZWQgYXMgd2VsbCwgb3Igd2Ugd29uJ3QgZ2V0IGZhci4gUmlnaHQsIHNvLCB0aGUgbmV4dCBzdGVwIGlzIGNsZWFybHkgdG8gZGl2ZSBpbnRvIGBhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jYCBpdHNlbGYuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRoYXQgZmlsZSB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBiZWluZyB1c2VkIGFuZCBob3cgdGhleSBpbnRlcnJlbGF0ZSB3aXRoaW4gdGhlIEJQRiBKSVQgY29tcGlsYXRpb24gcHJvY2VzcyBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIHdpbGwgc2hvdyB1cyBob3cgdG8gdmVyaWZ5IG9yIGNvbmZpZ3VyZSB0aGUgbmVjZXNzYXJ5IHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE2NSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDI6MTguMTg5NDI0NDA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODQwMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTIzMTQ9c3RhdGljIHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqYnBmX2ppdF9hbGxvYyhzdHJ1Y3QgYnBmX2ppdCAqaml0LFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yMzU1LSAqL1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MjM1NjpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcClcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTIzNTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNjo0MjoxOC4yODEyNzYxMjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTE0NDE1MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGZ1bmN0aW9uLiBSaWdodCwgc28gdGhpcyBpcyB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHVwIGZvciBCUEYgdHJhbXBvbGluZXMgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBpcyBkb2luZyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBkZXRhaWxzIG9mIEpJVCBjb21waWxhdGlvbiwgcHJvYmFibHkgaW52b2x2aW5nIHNvbWUga2luZCBvZiBjb2RlIGdlbmVyYXRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYXNzZW1ibHkgb3V0cHV0IHRvIHZlcmlmeS5cblxuRmlyc3QsIEkgc2hvdWxkIHByb2JhYmx5IGlkZW50aWZ5IHdoaWNoIGFyY2hpdGVjdHVyZXMgdGhpcyBhcHBsaWVzIHRvLiBJcyB0aGlzIGEgY29tbW9uIHJvdXRpbmUgb3Igc29tZXRoaW5nIHNwZWNpZmljIHRvIGNlcnRhaW4gaW5zdHJ1Y3Rpb24gc2V0cz8gTGV0J3MgdHJhY2UgaG93IGl0J3MgYmVpbmcgY2FsbGVkLCBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGFuZCBhbnkgcHJlY29uZGl0aW9ucy4gV2hhdCdzIGl0IGV4cGVjdGluZyBhcyBpbnB1dD8gTWVtb3J5IGFkZHJlc3MsIHJlZ2lzdGVycywgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzPyBBbnkgcG90ZW50aWFsIGZvciBhbGlnbm1lbnQgaXNzdWVzIG9yIGNhY2hlLWxpbmUgZWZmZWN0cz8gSSdsbCBhbHNvIGNoZWNrIGZvciBhbnkgaW5saW5lIGFzc2VtYmx5LCB0aGF0IGFsd2F5cyBncmFicyBteSBhdHRlbnRpb24uXG5cbkknbGwgYmUgbG9va2luZyBmb3IgdGhlIGNyaXRpY2FsIHBhcnRzOiBpbnN0cnVjdGlvbiBwYXRjaGluZywgc2V0dGluZyB1cCB0aGUgdHJhbXBvbGluZSBlbnZpcm9ubWVudCwgYW5kIHRoZSBhY3R1YWwganVtcCB0byB0aGUgQlBGIHByb2dyYW0uIEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgaGVyZT8gQW55IGNoZWNrcyBmb3IgdmFsaWQgQlBGIGNvZGUgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcz8gQW55IHBvdGVudGlhbCBmb3Igc2lkZS1jaGFubmVsIGF0dGFja3MgZHVyaW5nIHRoaXMgc2V0dXA/XG5cbkZpbmFsbHksIGxldCdzIHNlZSBob3cgaXQgcGxheXMgd2l0aCB0aGluZ3MgbGlrZSBzcGVjdWxhdGl2ZSBleGVjdXRpb24uIFRoZSBnb2FsIGlzIGEgZmFzdCwgc2VjdXJlLCBhbmQgcHJlZGljdGFibGUgcGF0aCBpbnRvIHRoZSBCUEYgcHJvZ3JhbS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGZ1bmN0aW9uIGFjaGlldmVzIHRoZXNlIGdvYWxzLiBMZXQncyBzZWUgaWYgdGhlIGNvZGUgY29tbWVudHMgYXJlIGRlc2NyaXB0aXZlIG9yIGlmIEkgbmVlZCB0byBkaXNhc3NlbWJsZSBhbmQgYW5hbHl6ZSBmb3IgbXlzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4NCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA2OjQyOjI0LjM5NTY5NTE1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEwNzU3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI2NTA9c3RhdGljIGludCBhbGxvY19zdGFjayhzdHJ1Y3QgYnBmX3RyYW1wX2ppdCAqdGppdCwgc2l6ZV90IHNpemUpXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI2NjctXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyNjY4OnN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNjY5LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3RyYW1wX2ppdCAqdGppdCxcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9Mjk4Nj1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yOTk0LVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6Mjk5NTpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcXHUwMDI2aW0sIFxcdTAwMjZ0aml0LCBtLCBmbGFncyxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5OTYtXFx0XFx0XFx0XFx0XFx0ICAgIHRub2Rlcywgb3JpZ19jYWxsKTtcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MzAwMT1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSxcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAxMC1cXHRtZW1zZXQoXFx1MDAyNnRqaXQsIDAsIHNpemVvZih0aml0KSk7XFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDExOlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCBcXHUwMDI2dGppdCwgbSwgZmxhZ3MsXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDEyLVxcdFxcdFxcdFxcdFxcdCAgICB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTMwMjQtXFx0dGppdC5jb21tb24ucHJnX2J1ZiA9IGltYWdlO1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MzAyNTpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgXFx1MDAyNnRqaXQsIG0sIGZsYWdzLFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAyNi1cXHRcXHRcXHRcXHRcXHQgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNjo0MjoyNC40NjY3Nzg2OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk1NjI1NTkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEJQRiBKSVQgQ29tcGlsYXRpb24gYW5kIFRyYW1wb2xpbmVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGVudHJ5IHBvaW50cyBmb3IgQlBGIEpJVCBhbmQgdHJhbXBvbGluZXMuIEl0IHNlZW1zIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgYXJlIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gUmlnaHQsIHJpZ2h0LCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgc3BlY2lmaWNhbGx5IGZvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MsIGFuZCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBoYW5kbGVzIHRoZSB0cmFtcG9saW5lIHNldHVwLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiBlaXRoZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIEFoLCBub3BlLCBuZWl0aGVyIGBicGZfaW50X2ppdF9jb21waWxlYCBub3IgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYXJlIHN0YXRpYy4gQW5kIHdoaWxlIEknbSBhdCBpdCwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaXNuJ3Qgc3RhdGljIGVpdGhlci5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYSBiaXQsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIEJQRiBKSVQgc3VwcG9ydCBvbiBzMzkwLiBgQ09ORklHX0JQRl9KSVRgIGlzIG9idmlvdXNseSBhIG11c3QtaGF2ZS4gQW5kLCBpZiBJJ20gdW5kZXJzdGFuZGluZyBjb3JyZWN0bHksIGBDT05GSUdfQ0ZJYCBpcyBjcnVjaWFsIGZvciB0aGUgQ0ZJIGZlYXR1cmVzLiBMZXQncyBkaWcgaW50byBgYXJjaC9zMzkwL0tjb25maWdgIHRvIHNlZSBpZiBgQVJDSF9TVVBQT1JUU19DRklgIGlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzE3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA2OjQyOjMxLjQyMzAzODc0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI5NzE2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJDSF9TVVBQT1JUU19DRklcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTE0Ni1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19BVE9NSUNfUk1XXFxuYXJjaC9zMzkwL0tjb25maWc6MTQ3OlxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSVxcbmFyY2gvczM5MC9LY29uZmlnLTE0OC1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDI6MzEuNDk2MDE3ODE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MTI1MTUzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIENGSSBhbmQgdGhlIEJQRiBKSVQqKlxuXG5BbHJpZ2h0LCB0aGUgYnVpbGQgY29uZmlnJ3MgYWxsb3dpbmcgYENPTkZJR19DRklgIHRvIGJlIHNlbGVjdGVkLCB3aGljaCBpcyBnb29kLiBUaGF0IGdpdmVzIHVzIHNvbWUgcG90ZW50aWFsIGNvbXBpbGUtdGltZSBjaGVja3MgYW5kIHNlY3VyaXR5IGhhcmRlbmluZy4gQnV0LCBzaW5jZSBJJ20gYWxyZWFkeSBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UncmUgaGFuZGxpbmcgdGhlIEJQRiBKSVQgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIGlzIGBDT05GSUdfQlBGX0pJVGAgYWxzbyByZXF1aXJlZCBpbiB0aGlzIGJ1aWxkPyBUaGVyZSdzIGxpa2VseSBzb21lIGludGVyYWN0aW9uIG9yIGRlcGVuZGVuY3kgdG8ga2VlcCBpbiBtaW5kLCBhbmQgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlaXIgaW50ZXJwbGF5LiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA2OjQyOjM2LjAwODUzNTk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg5NTkwNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNjo0MjozOC4xOTgxMzIzMDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3OTQxMjUwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgczM5MCBrQ0ZJIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaW1wbGVtZW50aW5nIENGSSAoQ29udHJvbCBGbG93IEludGVncml0eSkgc3BlY2lmaWNhbGx5IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIGFsb25nc2lkZSB0aGUgQlBGIEpJVCBjb21waWxlciAoYEJQRl9KSVRgKS4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgZm9yIGZ1enppbmcuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzIHRvIGV4YW1pbmUgYGFyY2gvczM5MC90b29scy9yZWxvY3MuY2AsIGJ1dCB0aGF0J3MgYSBob3N0IHRvb2wsIG5vdCBrZXJuZWwgY29kZSwgc28gaXQncyBub3QgcmVsZXZhbnQgZm9yIHJ1bnRpbWUgZnV6emluZy4gSSB0aGVuIGNoZWNrZWQgdGhlIGFzc2VtYmx5IGZpbGVzIGBhcmNoL3MzOTAva2VybmVsL21jb3VudC5TYCBhbmQgYGFyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlNgLiBJIHNlZSB0aGUgYFNZTV9GVU5DX1NUQVJUYCBtYWNybyBpcyBiZWluZyB1cGRhdGVkIHRvIGBTWU1fVFlQRURfRlVOQ19TVEFSVGAgdG8gZW5hYmxlIENGSSwgd2hpY2ggaXMgbGlrZWx5IHdoZXJlIHRoZSBDRkktc3BlY2lmaWMgY2hhbmdlcyBhcmUuXG5cblRoZSBwcmltYXJ5IGZ1bmN0aW9uYWwgY2hhbmdlcyBmb3IgZnV6emluZyBzZWVtIHRvIGJlIGluIGBhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhhdCBkaXJlY3Rvcnkgc291bmRzIHByb21pc2luZy4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgZnVuY3Rpb25zLiBUaGV5J3JlIGJvdGggc3RhbmRhcmQgQlBGIEpJVCBhbmQgdHJhbXBvbGluZSBlbnRyeSBwb2ludHMsIHdoaWNoIGFyZSBnb29kIGNhbmRpZGF0ZXMuIEkgd2FudGVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIHRoZSByaWdodCBvbmVzLCBhbmQgYmFzZWQgb24gdGhlaXIgbmFtZXMsIEknbSBjb21mb3J0YWJsZSB0aGF0IHRoZXkgYXJlLlxuXG5OZXh0LCBJIGxvb2tlZCBmb3IgZGVwZW5kZW5jaWVzIG9uIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCB3aXRoaW4gYGFyY2gvczM5MC9rZXJuZWwvbWNvdW50LlNgLCB3aGVyZSB0aGUgY29kZSB1c2VzIHRoZSB0eXBlZCBmdW5jdGlvbiBzdGFydCwgYnV0IHRoYXQncyBqdXN0IGFkZGluZyB0aGUgQ0ZJIHR5cGUgaGFzaGVzIHRvIHRoZSBmdW5jdGlvbiwgc28gaXQncyBub3QgYSBwcmltYXJ5IHRhcmdldC5cblxuSSd2ZSBkZXRlcm1pbmVkIHRoYXQgYENGSWAgYW5kIGBCUEZfSklUYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIGZvY3VzIG9uLlxuXG5UaGVuIEkgcmVhbGl6ZWQgYSBwb3RlbnRpYWwgaXNzdWU6IGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB2ZXJ5IGNvbW1vbiBmb3IgQlBGIEpJVC4gSXMgaXQgYSBob3QtcGF0aD8gTm8sIGl0IGlzIGNhbGxlZCB3aGVuIGEgQlBGIHByb2dyYW0gaXMgbG9hZGVkLCB3aGljaCBpcyBjb250cm9sLXBhdGgsIGFuZCBzbyBpcyBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC5cblxuSSBkb3VibGUtY2hlY2tlZCBgYXJjaC9LY29uZmlnYCB0byBjb25maXJtIHRoYXQgYENGSWAgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbi4gSSBjYW4gY29uZmlybSBpdCdzIHRoZSBwcmltYXJ5IGNvbmZpZyBhcyBgQ0ZJX0NMQU5HYCBkZWZhdWx0cyB0byBgQ0ZJYC5cblxuVGhlIHBhdGNoIGltcGxlbWVudHMga0NGSSBmb3IgczM5MCwgbW9kaWZ5aW5nIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIGVtaXQgS0NGSSBoYXNoZXMgYW5kIHVwZGF0aW5nIGFzc2VtYmx5IGZ1bmN0aW9ucyB0byB1c2UgdHlwZWQgZnVuY3Rpb24gbWFjcm9zLiBUaGUgQlBGIEpJVCBjaGFuZ2VzIG9jY3VyIHdoZW4gQlBGIHByb2dyYW1zIGFyZSBsb2FkZWQgb3IgdHJhbXBvbGluZXMgYXJlIGF0dGFjaGVkLlxuXG5TbywgaGVyZSdzIG15IHN0cmF0ZWd5OlxuXG4qICAgQ29uZmlnczogYENGSWAsIGBCUEZfSklUYC5cbiogICBTeW1ib2xzOiBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLlxuXG5XaGlsZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgKmlzKiBhbHJlYWR5IGZ1enplZCBieSBzeXprYWxsZXIsIGZvY3VzaW5nIG9uIGl0IHdpdGggYENGSWAgZW5hYmxlZCB3aWxsIHNwZWNpZmljYWxseSB0ZXN0IHRoZSBuZXcgS0NGSSBlbWlzc2lvbiBsb2dpYyBvbiBzMzkwLiBJIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODAyLCJPdXRwdXRUb2tlbnMiOjEzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNjo0Mjo1MC45OTIyNjA4MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzA1OTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZJXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSkgc3VwcG9ydCBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byBlbWl0IEtDRkkgaGFzaGVzIGZvciBCUEYgcHJvZ3JhbXMgYW5kIHRyYW1wb2xpbmVzLCBhbmQgdXBkYXRlcyBhc3NlbWJseSBmdW5jdGlvbnMgdG8gdXNlIHR5cGVkIGZ1bmN0aW9uIG1hY3Jvcy4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHdoZW4gQlBGIHByb2dyYW1zIGFyZSBsb2FkZWQgb3IgdHJhbXBvbGluZXMgYXJlIGF0dGFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGSVwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgS2VybmVsIENvbnRyb2wgRmxvdyBJbnRlZ3JpdHkgKGtDRkkpIHN1cHBvcnQgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBLQ0ZJIGhhc2hlcyBmb3IgQlBGIHByb2dyYW1zIGFuZCB0cmFtcG9saW5lcywgYW5kIHVwZGF0ZXMgYXNzZW1ibHkgZnVuY3Rpb25zIHRvIHVzZSB0eXBlZCBmdW5jdGlvbiBtYWNyb3MuIFRoZSBCUEYgSklUIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCB3aGVuIEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkIG9yIHRyYW1wb2xpbmVzIGFyZSBhdHRhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrzfjm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 06:21:31 +0000 UTC FinishedAt: 2026-07-28 06:42:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFI", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFI", "BPF_JIT" ], "series_id": "0351e2ac-97b3-437a-b7e1-164dea218d95" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "arch_prepare_bpf_trampoline" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA2OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGSSYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSkgc3VwcG9ydCBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byBlbWl0IEtDRkkgaGFzaGVzIGZvciBCUEYgcHJvZ3JhbXMgYW5kIHRyYW1wb2xpbmVzLCBhbmQgdXBkYXRlcyBhc3NlbWJseSBmdW5jdGlvbnMgdG8gdXNlIHR5cGVkIGZ1bmN0aW9uIG1hY3Jvcy4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHdoZW4gQlBGIHByb2dyYW1zIGFyZSBsb2FkZWQgb3IgdHJhbXBvbGluZXMgYXJlIGF0dGFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA2OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjk4NGFiODU0NGQzMjNlYzhhNWE4MjJjNTc1MTc5MTBlZGFiMjhiNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDA2OjQxOjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcbmluZGV4IDg0NDA0ZTY3NzhkNTA0Li5lYzk2NTk1Y2FlMzlmMCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTE0NCw2ICYjNDM7MTQ0LDcgQEAgY29uZmlnIFMzOTBcbiBcdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxuIFx0c2VsZWN0IEFSQ0hfU1RBQ0tXQUxLXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19BVE9NSUNfUk1XXG4mIzQzO1x0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ0ZJXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0NcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSU5UMTI4IGlmIENDX0hBU19JTlQxMjggXHUwMDI2XHUwMDI2IENDX0lTX0NMQU5HXG5AQCAtMTUxLDYgJiM0MzsxNTIsNyBAQCBjb25maWcgUzM5MFxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuJiM0MztcdHNlbGVjdCBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTIGlmIENDX0lTX0NMQU5HXG4gXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxuIFx0c2VsZWN0IEFSQ0hfVVNFX0NNUFhDSEdfTE9DS1JFRlxuIFx0c2VsZWN0IEFSQ0hfVVNFX1NZTV9BTk5PVEFUSU9OU1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jZmkuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jZmkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45YWYyYzdjYjcwY2E3YVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NmaS5oXG5AQCAtMCwwICYjNDM7MSw3IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX0FTTV9TMzkwX0NGSV9IXG4mIzQzOyNkZWZpbmUgX0FTTV9TMzkwX0NGSV9IXG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9fYnBmY2FsbFxuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9BU01fUzM5MF9DRklfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvbWNvdW50LlMgYi9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TXG5pbmRleCAxZmVjMzcwZmVjZjQ4MS4uNmJjNDRjNzY3NjQyZTUgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gICpcbiAgKi9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2ZpX3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saW5rYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vYXNtLW9mZnNldHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9mdHJhY2UuaFx1MDAzZVxuQEAgLTM0LDEwICYjNDM7MzUsMTYgQEBcbiBcbiBcdC5zZWN0aW9uIC5rcHJvYmVzLnRleHQsIFwmIzM0O2F4XCYjMzQ7XG4gXG4tU1lNX0ZVTkNfU1RBUlQoZnRyYWNlX3N0dWIpXG4mIzQzO1NZTV9UWVBFRF9GVU5DX1NUQVJUKGZ0cmFjZV9zdHViKVxuIFx0QlJfRVhcdCVyMTRcbiBTWU1fRlVOQ19FTkQoZnRyYWNlX3N0dWIpXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4mIzQzO1NZTV9UWVBFRF9GVU5DX1NUQVJUKGZ0cmFjZV9zdHViX2dyYXBoKVxuJiM0MztcdEJSX0VYXHQlcjE0XG4mIzQzO1NZTV9GVU5DX0VORChmdHJhY2Vfc3R1Yl9ncmFwaClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFNZTV9DT0RFX1NUQVJUKGZ0cmFjZV9zdHViX2RpcmVjdF90cmFtcClcbiBcdGxnclx0JXIxLCAlcjBcbiBcdEJSX0VYXHQlcjFcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RleHRfYW1vZGUzMS5TIGIvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuU1xuaW5kZXggMjZmMjk4MWFhMDllMzEuLmYwMDdkODkyZDBjNWZkIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuU1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuU1xuQEAgLTUsNiAmIzQzOzUsNyBAQFxuICAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxOVxuICAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jZmlfdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbmthZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9hc20tZXh0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2Vycm5vLmhcdTAwM2VcbkBAIC0yNiw3ICYjNDM7MjcsNyBAQFxuIC8qXG4gICogaW50IF9kaWFnMTRfYW1vZGUzMSh1bnNpZ25lZCBsb25nIHJ4LCB1bnNpZ25lZCBsb25nIHJ5MSwgdW5zaWduZWQgbG9uZyBzdWJjb2RlKVxuICAqL1xuLVNZTV9GVU5DX1NUQVJUKF9kaWFnMTRfYW1vZGUzMSlcbiYjNDM7U1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcxNF9hbW9kZTMxKVxuIFx0bGdyXHQlcjEsJXIyXG4gXHRsZ3JcdCVyMiwlcjNcbiBcdGxnclx0JXIzLCVyNFxuQEAgLTQ2LDcgJiM0Mzs0Nyw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzE0X2Ftb2RlMzEpXG4gLypcbiAgKiBpbnQgX2RpYWcyMTBfYW1vZGUzMShzdHJ1Y3QgZGlhZzIxMCAqYWRkcilcbiAgKi9cbi1TWU1fRlVOQ19TVEFSVChfZGlhZzIxMF9hbW9kZTMxKVxuJiM0MztTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzIxMF9hbW9kZTMxKVxuIFx0bGdyXHQlcjEsJXIyXG4gXHRsaGlcdCVyMiwtMVxuIFx0c2FtMzFcbkBAIC02NCw3ICYjNDM7NjUsNyBAQCBTWU1fRlVOQ19FTkQoX2RpYWcyMTBfYW1vZGUzMSlcbiAvKlxuICAqIGludCBkaWFnOGMoc3RydWN0IGRpYWc4YyAqYWRkciwgc3RydWN0IGNjd19kZXZfaWQgKmRldm5vLCBzaXplX3QgbGVuKVxuICovXG4tU1lNX0ZVTkNfU1RBUlQoX2RpYWc4Y19hbW9kZTMxKVxuJiM0MztTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzhjX2Ftb2RlMzEpXG4gXHRsbGdmXHQlcjMsMCglcjMpXG4gXHRzYW0zMVxuIFx0ZGlhZ1x0JXIyLCVyNCwweDhjXG5AQCAtNzcsNyAmIzQzOzc4LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnOGNfYW1vZGUzMSlcbiAvKlxuICAqIGludCBfZGlhZzI2Y19hbW9kZTMxKHZvaWQgKnJlcSwgdm9pZCAqcmVzcCwgZW51bSBkaWFnMjZjX3NjIHN1YmNvZGUpXG4gICovXG4tU1lNX0ZVTkNfU1RBUlQoX2RpYWcyNmNfYW1vZGUzMSlcbiYjNDM7U1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcyNmNfYW1vZGUzMSlcbiBcdGxnaGlcdCVyNSwtRU9QTk9UU1VQUFxuIFx0c2FtMzFcbiBcdGRpYWdcdCVyMiwlcjQsMHgyNmNcbkBAIC05MSw3ICYjNDM7OTIsNyBAQCBTWU1fRlVOQ19FTkQoX2RpYWcyNmNfYW1vZGUzMSlcbiAvKlxuICAqIHZvaWQgX2RpYWcwY19hbW9kZTMxKHVuc2lnbmVkIGxvbmcgcngpXG4gICovXG4tU1lNX0ZVTkNfU1RBUlQoX2RpYWcwY19hbW9kZTMxKVxuJiM0MztTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzBjX2Ftb2RlMzEpXG4gXHRzYW0zMVxuIFx0ZGlhZ1x0JXIyLCVyMiwweDBjXG4gXHRzYW02NFxuQEAgLTEwMyw3ICYjNDM7MTA0LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMGNfYW1vZGUzMSlcbiAgKlxuICAqIENhbGxzIGRpYWcgMzA4IHN1YmNvZGUgMSBhbmQgY29udGludWVzIGV4ZWN1dGlvblxuICAqL1xuLVNZTV9GVU5DX1NUQVJUKF9kaWFnMzA4X3Jlc2V0X2Ftb2RlMzEpXG4mIzQzO1NZTV9UWVBFRF9GVU5DX1NUQVJUKF9kaWFnMzA4X3Jlc2V0X2Ftb2RlMzEpXG4gXHRsYXJsXHQlcjQsY3RscmVnc1x0XHQjIFNhdmUgY29udHJvbCByZWdpc3RlcnNcbiBcdHN0Y3RnXHQlYzAsJWMxNSwwKCVyNClcbiBcdGxnXHQlcjIsMCglcjQpXHRcdCMgRGlzYWJsZSBsb3djb3JlIHByb3RlY3Rpb25cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggMzE3NDljMDM2MmNhMjMuLjdmNDVjMTA2NDQ0ZGU0IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTIxLDYgJiM0MzsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsdGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jZmkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9jYWNoZWZsdXNoLmhcdTAwM2VcbkBAIC0zNTYsNiAmIzQzOzM1NywxOSBAQCBzdGF0aWMgdm9pZCBlbWl0Nl9wY3JlbF9yaWxjKHN0cnVjdCBicGZfaml0ICpqaXQsIHUzMiBvcCwgdTggbWFzaywgczY0IHBjcmVsKVxuIFx0fVx0XHRcdFx0XHRcdFx0XFxcbiB9KVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF91MzJfZGF0YShjb25zdCB1MzIgZGF0YSwgc3RydWN0IGJwZl9qaXQgKmppdClcbiYjNDM7e1xuJiM0MztcdGlmIChqaXQtXHUwMDNlcHJnX2J1ZilcbiYjNDM7XHRcdCoodTMyICopKGppdC1cdTAwM2VwcmdfYnVmICYjNDM7IGppdC1cdTAwM2VwcmcpID0gZGF0YTtcbiYjNDM7XHRqaXQtXHUwMDNlcHJnICYjNDM7PSA0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF9rY2ZpKHUzMiBoYXNoLCBzdHJ1Y3QgYnBmX2ppdCAqaml0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NGSSkpXG4mIzQzO1x0XHRlbWl0X3UzMl9kYXRhKGhhc2gsIGppdCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBSZXR1cm4gd2hldGhlciB0aGlzIGlzIHRoZSBmaXJzdCBwYXNzLiBUaGUgZmlyc3QgcGFzcyBpcyBzcGVjaWFsLCBzaW5jZSB3ZVxuICAqIGRvbiYjMzk7dCBrbm93IGFueSBzaXplcyB5ZXQsIGFuZCB0aHVzIG11c3QgYmUgY29uc2VydmF0aXZlLlxuQEAgLTU5Nyw2ICYjNDM7NjExLDggQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuIHtcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHByb2dfZnJhbWUpICE9IFNUQUNLX0ZSQU1FX09WRVJIRUFEKTtcbiBcbiYjNDM7XHRlbWl0X2tjZmkoYnBmX2lzX3N1YnByb2coZnApID8gY2ZpX2JwZl9zdWJwcm9nX2hhc2ggOiBjZmlfYnBmX2hhc2gsIGppdCk7XG4mIzQzO1xuIFx0LyogTm8tb3AgZm9yIGhvdHBhdGNoaW5nICovXG4gXHQvKiBicmNsIDAscHJvbG9ndWVfcGx0ICovXG4gXHRFTUlUNl9QQ1JFTF9SSUxDKDB4YzAwNDAwMDAsIDAsIGppdC1cdTAwM2Vwcm9sb2d1ZV9wbHQpO1xuQEAgLTYxNiw3ICYjNDM7NjMyLDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuIFx0XHRicGZfc2tpcChqaXQsIDYpO1xuIFx0fVxuIFx0LyogVGFpbCBjYWxscyBoYXZlIHRvIHNraXAgYWJvdmUgaW5pdGlhbGl6YXRpb24gKi9cbi1cdGppdC1cdTAwM2V0YWlsX2NhbGxfc3RhcnQgPSBqaXQtXHUwMDNlcHJnO1xuJiM0MztcdGppdC1cdTAwM2V0YWlsX2NhbGxfc3RhcnQgPSBqaXQtXHUwMDNlcHJnIC0gY2ZpX2dldF9vZmZzZXQoKTtcbiBcdGlmIChmcC1cdTAwM2VhdXgtXHUwMDNlZXhjZXB0aW9uX2NiKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFN3aXRjaCBzdGFjaywgdGhlIG5ldyBhZGRyZXNzIGlzIGluIHRoZSAybmQgcGFyYW1ldGVyLlxuQEAgLTI0MDEsMTEgJiM0MzsyNDE3LDEzIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByXG4gXHRcdGppdF9kYXRhLVx1MDAzZWN0eCA9IGppdDtcbiBcdFx0aml0X2RhdGEtXHUwMDNlcGFzcyA9IHBhc3M7XG4gXHR9XG4tXHRmcC1cdTAwM2VicGZfZnVuYyA9ICh2b2lkICopIGppdC5wcmdfYnVmO1xuJiM0MztcdGZwLVx1MDAzZWJwZl9mdW5jID0gKHZvaWQgKilqaXQucHJnX2J1ZiAmIzQzOyBjZmlfZ2V0X29mZnNldCgpO1xuIFx0ZnAtXHUwMDNlaml0ZWQgPSAxO1xuLVx0ZnAtXHUwMDNlaml0ZWRfbGVuID0gaml0LnNpemU7XG4mIzQzO1x0ZnAtXHUwMDNlaml0ZWRfbGVuID0gaml0LnNpemUgLSBjZmlfZ2V0X29mZnNldCgpO1xuIFxuIFx0aWYgKCFmcC1cdTAwM2Vpc19mdW5jIHx8IGV4dHJhX3Bhc3MpIHtcbiYjNDM7XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBmcC1cdTAwM2VsZW47IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRqaXQuYWRkcnNbaV0gLT0gY2ZpX2dldF9vZmZzZXQoKTtcbiBcdFx0YnBmX3Byb2dfZmlsbF9qaXRlZF9saW5mbyhmcCwgaml0LmFkZHJzICYjNDM7IDEpO1xuIGZyZWVfYWRkcnM6XG4gXHRcdGt2ZnJlZShqaXQuYWRkcnMpO1xuQEAgLTI2NzEsOCAmIzQzOzI2ODksMTAgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbiBcbiBcdC8qIFJldHVybiB0byAlcjE0IGluIHRoZSBzdHJ1Y3Rfb3BzIGNhc2UuICovXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKVxuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIHtcbiBcdFx0ZmxhZ3MgfD0gQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRTtcbiYjNDM7XHRcdGVtaXRfa2NmaShjZmlfZ2V0X2Z1bmNfaGFzaChmdW5jX2FkZHIpLCBqaXQpO1xuJiM0MztcdH1cbiBcbiBcdC8qXG4gXHQgKiBDb21wdXRlIGhvdyBtYW55IGFyZ3VtZW50cyB3ZSBuZWVkIHRvIHBhc3MgdG8gQlBGIHByb2dyYW1zLlxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC90b29scy9yZWxvY3MuYyBiL2FyY2gvczM5MC90b29scy9yZWxvY3MuY1xuaW5kZXggMzBhNzMyYzgwOGYzNWUuLjcyMTc4ZGM5MGE0Y2Y4IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvdG9vbHMvcmVsb2NzLmNcbkBAIC00MSw2ICYjNDM7NDEsMTAgQEBcbiBzdGF0aWMgRWxmX0VoZHJcdFx0ZWhkcjtcbiBzdGF0aWMgdW5zaWduZWQgbG9uZ1x0c2hudW07XG4gc3RhdGljIHVuc2lnbmVkIGludFx0c2hzdHJuZHg7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnRcdHNoc3ltdGFibmR4O1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50XHRzaHhzeW10YWJuZHg7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHN5bV9pbmRleChFbGZfU3ltICpzeW0pO1xuIFxuIHN0cnVjdCByZWxvY3Mge1xuIFx0dWludDMyX3RcdCpvZmZzZXQ7XG5AQCAtNTQsMTEgJiM0Mzs1OCw0MCBAQCBzdGF0aWMgc3RydWN0IHJlbG9jcyByZWxvY3M2NDtcbiBzdHJ1Y3Qgc2VjdGlvbiB7XG4gXHRFbGZfU2hkclx0c2hkcjtcbiBcdHN0cnVjdCBzZWN0aW9uXHQqbGluaztcbiYjNDM7XHRFbGZfU3ltXHRcdCpzeW10YWI7XG4mIzQzO1x0RWxmMzJfV29yZFx0KnhzeW10YWI7XG4gXHRFbGZfUmVsXHRcdCpyZWx0YWI7XG4mIzQzO1x0Y2hhclx0XHQqc3RydGFiO1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBzZWN0aW9uICpzZWNzO1xuIFxuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqc2VjX25hbWUodW5zaWduZWQgc2huZHgpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICpzZWNfc3RydGFiO1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWUgPSBcJiMzNDtcdTAwM2Nub25hbWVcdTAwM2VcJiMzNDs7XG4mIzQzO1x0c2VjX3N0cnRhYiA9IHNlY3Nbc2hzdHJuZHhdLnN0cnRhYjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNobmR4IFx1MDAzYyBzaG51bSlcbiYjNDM7XHRcdG5hbWUgPSBzZWNfc3RydGFiICYjNDM7IHNlY3Nbc2huZHhdLnNoZHIuc2hfbmFtZTtcbiYjNDM7XHRlbHNlIGlmIChzaG5keCA9PSBTSE5fQUJTKVxuJiM0MztcdFx0bmFtZSA9IFwmIzM0O0FCU09MVVRFXCYjMzQ7O1xuJiM0MztcdGVsc2UgaWYgKHNobmR4ID09IFNITl9DT01NT04pXG4mIzQzO1x0XHRuYW1lID0gXCYjMzQ7Q09NTU9OXCYjMzQ7O1xuJiM0MztcdHJldHVybiBuYW1lO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqc3ltX25hbWUoY29uc3QgY2hhciAqc3ltX3N0cnRhYiwgRWxmX1N5bSAqc3ltKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN5bS1cdTAwM2VzdF9uYW1lKVxuJiM0MztcdFx0bmFtZSA9IHN5bV9zdHJ0YWIgJiM0Mzsgc3ltLVx1MDAzZXN0X25hbWU7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmFtZSA9IHNlY19uYW1lKHN5bV9pbmRleChzeW0pKTtcbiYjNDM7XHRyZXR1cm4gbmFtZTtcbiYjNDM7fVxuJiM0MztcbiAjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOXG4gI2RlZmluZSBsZTE2X3RvX2NwdSh2YWwpXHQodmFsKVxuICNkZWZpbmUgbGUzMl90b19jcHUodmFsKVx0KHZhbClcbkBAIC0xMDUsNiAmIzQzOzEzOCwyMyBAQCBzdGF0aWMgdWludDY0X3QgZWxmNjRfdG9fY3B1KHVpbnQ2NF90IHZhbClcbiAjZGVmaW5lIGVsZl9vZmZfdG9fY3B1KHgpXHRlbGY2NF90b19jcHUoeClcbiAjZGVmaW5lIGVsZl94d29yZF90b19jcHUoeClcdGVsZjY0X3RvX2NwdSh4KVxuIFxuJiM0MztzdGF0aWMgaW50IHN5bV9pbmRleChFbGZfU3ltICpzeW0pXG4mIzQzO3tcbiYjNDM7XHRFbGZfU3ltICpzeW10YWIgPSBzZWNzW3Noc3ltdGFibmR4XS5zeW10YWI7XG4mIzQzO1x0RWxmMzJfV29yZCAqeHN5bXRhYiA9IHNlY3Nbc2h4c3ltdGFibmR4XS54c3ltdGFiO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0O1xuJiM0MztcdGludCBpbmRleDtcbiYjNDM7XG4mIzQzO1x0aWYgKHN5bS1cdTAwM2VzdF9zaG5keCAhPSBTSE5fWElOREVYKVxuJiM0MztcdFx0cmV0dXJuIHN5bS1cdTAwM2VzdF9zaG5keDtcbiYjNDM7XG4mIzQzO1x0LyogY2FsY3VsYXRlIG9mZnNldCBvZiBzeW0gZnJvbSBoZWFkIG9mIHRhYmxlLiAqL1xuJiM0MztcdG9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXN5bSAtICh1bnNpZ25lZCBsb25nKXN5bXRhYjtcbiYjNDM7XHRpbmRleCA9IG9mZnNldCAvIHNpemVvZigqc3ltKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVsZjMyX3RvX2NwdSh4c3ltdGFiW2luZGV4XSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgZGllKGNoYXIgKmZtdCwgLi4uKVxuIHtcbiBcdHZhX2xpc3QgYXA7XG5AQCAtMjE2LDYgJiM0MzsyNjYsODEgQEAgc3RhdGljIHZvaWQgcmVhZF9zaGRycyhGSUxFICpmcClcbiBcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJlYWRfc3RydGFicyhGSUxFICpmcClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaG51bTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBzZWN0aW9uICpzZWMgPSBcdTAwMjZzZWNzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZWMtXHUwMDNlc2hkci5zaF90eXBlICE9IFNIVF9TVFJUQUIpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNlYy1cdTAwM2VzdHJ0YWIgPSBtYWxsb2Moc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSk7XG4mIzQzO1x0XHRpZiAoIXNlYy1cdTAwM2VzdHJ0YWIpXG4mIzQzO1x0XHRcdGRpZShcJiMzNDttYWxsb2Mgb2YgJVwmIzM0OyBGTVQgXCYjMzQ7IGJ5dGVzIGZvciBzdHJ0YWIgZmFpbGVkXFxuXCYjMzQ7LCBzZWMtXHUwMDNlc2hkci5zaF9zaXplKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZnNlZWsoZnAsIHNlYy1cdTAwM2VzaGRyLnNoX29mZnNldCwgU0VFS19TRVQpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRkaWUoXCYjMzQ7U2VlayB0byAlXCYjMzQ7IEZNVCBcJiMzNDsgZmFpbGVkOiAlc1xcblwmIzM0Oywgc2VjLVx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChmcmVhZChzZWMtXHUwMDNlc3RydGFiLCAxLCBzZWMtXHUwMDNlc2hkci5zaF9zaXplLCBmcCkgIT0gc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSlcbiYjNDM7XHRcdFx0ZGllKFwmIzM0O0Nhbm5vdCByZWFkIHN5bWJvbCB0YWJsZTogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZWFkX3N5bXRhYnMoRklMRSAqZnApXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgajtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2hudW07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2VjdGlvbiAqc2VjID0gXHUwMDI2c2Vjc1tpXTtcbiYjNDM7XHRcdGludCBudW1fc3ltcztcbiYjNDM7XG4mIzQzO1x0XHRzd2l0Y2ggKHNlYy1cdTAwM2VzaGRyLnNoX3R5cGUpIHtcbiYjNDM7XHRcdGNhc2UgU0hUX1NZTVRBQl9TSE5EWDpcbiYjNDM7XHRcdFx0c2VjLVx1MDAzZXhzeW10YWIgPSBtYWxsb2Moc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSk7XG4mIzQzO1x0XHRcdGlmICghc2VjLVx1MDAzZXhzeW10YWIpXG4mIzQzO1x0XHRcdFx0ZGllKFwmIzM0O21hbGxvYyBvZiAlXCYjMzQ7IEZNVCBcJiMzNDsgYnl0ZXMgZm9yIHhzeW10YWIgZmFpbGVkXFxuXCYjMzQ7LCBzZWMtXHUwMDNlc2hkci5zaF9zaXplKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChmc2VlayhmcCwgc2VjLVx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBTRUVLX1NFVCkgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0ZGllKFwmIzM0O1NlZWsgdG8gJVwmIzM0OyBGTVQgXCYjMzQ7IGZhaWxlZDogJXNcXG5cJiMzNDssIHNlYy1cdTAwM2VzaGRyLnNoX29mZnNldCwgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChmcmVhZChzZWMtXHUwMDNleHN5bXRhYiwgMSwgc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSwgZnApICE9IHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpXG4mIzQzO1x0XHRcdFx0ZGllKFwmIzM0O0Nhbm5vdCByZWFkIGV4dGVuZGVkIHN5bWJvbCB0YWJsZTogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRzaHhzeW10YWJuZHggPSBpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRjYXNlIFNIVF9TWU1UQUI6XG4mIzQzO1x0XHRcdG51bV9zeW1zID0gc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSAvIHNpemVvZihFbGZfU3ltKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHNlYy1cdTAwM2VzeW10YWIgPSBtYWxsb2Moc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSk7XG4mIzQzO1x0XHRcdGlmICghc2VjLVx1MDAzZXN5bXRhYilcbiYjNDM7XHRcdFx0XHRkaWUoXCYjMzQ7bWFsbG9jIG9mICVcJiMzNDsgRk1UIFwmIzM0OyBieXRlcyBmb3Igc3ltdGFiIGZhaWxlZFxcblwmIzM0Oywgc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZnNlZWsoZnAsIHNlYy1cdTAwM2VzaGRyLnNoX29mZnNldCwgU0VFS19TRVQpIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGRpZShcJiMzNDtTZWVrIHRvICVcJiMzNDsgRk1UIFwmIzM0OyBmYWlsZWQ6ICVzXFxuXCYjMzQ7LCBzZWMtXHUwMDNlc2hkci5zaF9vZmZzZXQsIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZnJlYWQoc2VjLVx1MDAzZXN5bXRhYiwgMSwgc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSwgZnApICE9IHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpXG4mIzQzO1x0XHRcdFx0ZGllKFwmIzM0O0Nhbm5vdCByZWFkIHN5bWJvbCB0YWJsZTogJXNcXG5cJiMzNDssIHN0cmVycm9yKGVycm5vKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBudW1fc3ltczsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHRFbGZfU3ltICpzeW0gPSBcdTAwMjZzZWMtXHUwMDNlc3ltdGFiW2pdO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRzeW0tXHUwMDNlc3RfbmFtZSAgPSBlbGZfd29yZF90b19jcHUoc3ltLVx1MDAzZXN0X25hbWUpO1xuJiM0MztcdFx0XHRcdHN5bS1cdTAwM2VzdF92YWx1ZSA9IGVsZl9hZGRyX3RvX2NwdShzeW0tXHUwMDNlc3RfdmFsdWUpO1xuJiM0MztcdFx0XHRcdHN5bS1cdTAwM2VzdF9zaXplICA9IGVsZl94d29yZF90b19jcHUoc3ltLVx1MDAzZXN0X3NpemUpO1xuJiM0MztcdFx0XHRcdHN5bS1cdTAwM2VzdF9zaG5keCA9IGVsZl9oYWxmX3RvX2NwdShzeW0tXHUwMDNlc3Rfc2huZHgpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHNoc3ltdGFibmR4ID0gaTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJlYWRfcmVsb2NzKEZJTEUgKmZwKVxuIHtcbiBcdGludCBpLCBqO1xuQEAgLTI2Myw3ICYjNDM7Mzg4LDggQEAgc3RhdGljIHZvaWQgYWRkX3JlbG9jKHN0cnVjdCByZWxvY3MgKnIsIHVpbnQzMl90IG9mZnNldClcbiBcdHItXHUwMDNlb2Zmc2V0W3ItXHUwMDNlY291bnQmIzQzOyYjNDM7XSA9IG9mZnNldDtcbiB9XG4gXG4tc3RhdGljIGludCBkb19yZWxvYyhzdHJ1Y3Qgc2VjdGlvbiAqc2VjLCBFbGZfUmVsICpyZWwpXG4mIzQzO3N0YXRpYyBpbnQgZG9fcmVsb2Moc3RydWN0IHNlY3Rpb24gKnNlYywgRWxmX1JlbCAqcmVsLCBFbGZXKFN5bSkgKnN5bSxcbiYjNDM7XHRcdCAgICBjb25zdCBjaGFyICpzeW1uYW1lKVxuIHtcbiBcdHVuc2lnbmVkIGludCByX3R5cGUgPSBFTEY2NF9SX1RZUEUocmVsLVx1MDAzZXJfaW5mbyk7XG4gXHRFbGZXKEFkZHIpIG9mZnNldCA9IHJlbC1cdTAwM2VyX29mZnNldDtcbkBAIC0yNzksNiAmIzQzOzQwNSwyMiBAQCBzdGF0aWMgaW50IGRvX3JlbG9jKHN0cnVjdCBzZWN0aW9uICpzZWMsIEVsZl9SZWwgKnJlbClcbiBcdGNhc2UgUl8zOTBfR09UUENEQkw6XG4gXHRjYXNlIFJfMzkwX0dPVE9GRjY0OlxuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJfMzkwXzMyOiB7XG4mIzQzO1x0XHRzdGF0aWMgY29uc3QgY2hhciBrY2ZpcGZ4W10gPSBcJiMzNDtfX2tjZmlfdHlwZWlkX1wmIzM0OztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3ltLVx1MDAzZXN0X3NobmR4ICE9IFNITl9BQlMpXG4mIzQzO1x0XHRcdGRpZShcJiMzNDtVbnN1cHBvcnRlZCByZWxvY2F0aW9uIHR5cGU6ICVkXFxuXCYjMzQ7LCByX3R5cGUpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFN5bWJvbHMgd2l0aCBfX2tjZmlfdHlwZWlkXyBwcmVmaXggaGF2ZSBjb25zdGFudCB2YWx1ZXMsXG4mIzQzO1x0XHQgKiB3aGljaCBkbyBub3QgY2hhbmdlIGlmIGJ6SW1hZ2UgaXMgbG9hZGVkIGF0IGEgZGlmZmVyZW50XG4mIzQzO1x0XHQgKiBwaHlzaWNhbCBhZGRyZXNzIHRoYW4gdGhlIGFkZHJlc3MgZm9yIHdoaWNoIGl0IGhhcyBiZWVuXG4mIzQzO1x0XHQgKiBjb21waWxlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFzdHJuY21wKGtjZmlwZngsIHN5bW5hbWUsIHNpemVvZihrY2ZpcGZ4KSAtIDEpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRpZShcJiMzNDtJbnZhbGlkIGFic29sdXRlIFJfMzkwXzMyIHJlbG9jYXRpb246ICVzXFxuXCYjMzQ7LCBzeW1uYW1lKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiBcdGNhc2UgUl8zOTBfNjQ6XG4gXHRcdGFkZF9yZWxvYyhcdTAwMjZyZWxvY3M2NCwgb2Zmc2V0KTtcbiBcdFx0YnJlYWs7XG5AQCAtMjk2LDIxICYjNDM7NDM4LDI5IEBAIHN0YXRpYyB2b2lkIHdhbGtfcmVsb2NzKHZvaWQpXG4gXG4gXHQvKiBXYWxrIHRocm91Z2ggdGhlIHJlbG9jYXRpb25zICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaG51bTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHNlY3Rpb24gKnNlY19hcHBsaWVzO1xuJiM0MztcdFx0Y2hhciAqc3ltX3N0cnRhYjtcbiYjNDM7XHRcdEVsZl9TeW0gKnNoX3N5bXRhYjtcbiYjNDM7XHRcdHN0cnVjdCBzZWN0aW9uICpzZWNfYXBwbGllcywgKnNlY19zeW10YWI7XG4gXHRcdGludCBqO1xuIFx0XHRzdHJ1Y3Qgc2VjdGlvbiAqc2VjID0gXHUwMDI2c2Vjc1tpXTtcbiBcbiBcdFx0aWYgKHNlYy1cdTAwM2VzaGRyLnNoX3R5cGUgIT0gU0hUX1JFTF9UWVBFKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0c2VjX3N5bXRhYiAgPSBzZWMtXHUwMDNlbGluaztcbiBcdFx0c2VjX2FwcGxpZXMgPSBcdTAwMjZzZWNzW3NlYy1cdTAwM2VzaGRyLnNoX2luZm9dO1xuIFx0XHRpZiAoIShzZWNfYXBwbGllcy1cdTAwM2VzaGRyLnNoX2ZsYWdzIFx1MDAyNiBTSEZfQUxMT0MpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0c2hfc3ltdGFiID0gc2VjX3N5bXRhYi1cdTAwM2VzeW10YWI7XG4mIzQzO1x0XHRzeW1fc3RydGFiID0gc2VjX3N5bXRhYi1cdTAwM2VsaW5rLVx1MDAzZXN0cnRhYjtcbiYjNDM7XG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHNlYy1cdTAwM2VzaGRyLnNoX3NpemUgLyBzaXplb2YoRWxmX1JlbCk7IGomIzQzOyYjNDM7KSB7XG4gXHRcdFx0RWxmX1JlbCAqcmVsID0gXHUwMDI2c2VjLVx1MDAzZXJlbHRhYltqXTtcbiYjNDM7XHRcdFx0RWxmX1N5bSAqc3ltID0gXHUwMDI2c2hfc3ltdGFiW0VMRl9SX1NZTShyZWwtXHUwMDNlcl9pbmZvKV07XG4mIzQzO1x0XHRcdGNvbnN0IGNoYXIgKnN5bW5hbWUgPSBzeW1fbmFtZShzeW1fc3RydGFiLCBzeW0pO1xuIFxuLVx0XHRcdGRvX3JlbG9jKHNlYywgcmVsKTtcbiYjNDM7XHRcdFx0ZG9fcmVsb2Moc2VjLCByZWwsIHN5bSwgc3ltbmFtZSk7XG4gXHRcdH1cbiBcdH1cbiB9XG5AQCAtMzQ5LDYgJiM0Mzs0OTksOCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzKEZJTEUgKmZwKVxuIHtcbiBcdHJlYWRfZWhkcihmcCk7XG4gXHRyZWFkX3NoZHJzKGZwKTtcbiYjNDM7XHRyZWFkX3N0cnRhYnMoZnApO1xuJiM0MztcdHJlYWRfc3ltdGFicyhmcCk7XG4gXHRyZWFkX3JlbG9jcyhmcCk7XG4gXHRlbWl0X3JlbG9jcygpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNjo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZJJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIEtlcm5lbCBDb250cm9sIEZsb3cgSW50ZWdyaXR5IChrQ0ZJKSBzdXBwb3J0IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEl0IG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIGVtaXQgS0NGSSBoYXNoZXMgZm9yIEJQRiBwcm9ncmFtcyBhbmQgdHJhbXBvbGluZXMsIGFuZCB1cGRhdGVzIGFzc2VtYmx5IGZ1bmN0aW9ucyB0byB1c2UgdHlwZWQgZnVuY3Rpb24gbWFjcm9zLiBUaGUgQlBGIEpJVCBjaGFuZ2VzIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgd2hlbiBCUEYgcHJvZ3JhbXMgYXJlIGxvYWRlZCBvciB0cmFtcG9saW5lcyBhcmUgYXR0YWNoZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2OTg0YWI4NTQ0ZDMyM2VjOGE1YTgyMmM1NzUxNzkxMGVkYWIyOGI0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjggMDY6NDE6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDg0NDA0ZTY3NzhkNTA0Li5lYzk2NTk1Y2FlMzlmMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTE0NCw2ICYjNDM7MTQ0LDcgQEAgY29uZmlnIFMzOTAKIAlzZWxlY3QgQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEUKIAlzZWxlY3QgQVJDSF9TVEFDS1dBTEsKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19BVE9NSUNfUk1XCiYjNDM7CXNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSQogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQwogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGUwogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0lOVDEyOCBpZiBDQ19IQVNfSU5UMTI4ICZhbXA7JmFtcDsgQ0NfSVNfQ0xBTkcKQEAgLTE1MSw2ICYjNDM7MTUyLDcgQEAgY29uZmlnIFMzOTAKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lORwogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0sKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0sKJiM0MzsJc2VsZWN0IEFSQ0hfVVNFU19DRklfR0VORVJJQ19MTFZNX1BBU1MgaWYgQ0NfSVNfQ0xBTkcKIAlzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUAogCXNlbGVjdCBBUkNIX1VTRV9DTVBYQ0hHX0xPQ0tSRUYKIAlzZWxlY3QgQVJDSF9VU0VfU1lNX0FOTk9UQVRJT05TCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2ZpLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2ZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlhZjJjN2NiNzBjYTdhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NmaS5oCkBAIC0wLDAgJiM0MzsxLDcgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX0FTTV9TMzkwX0NGSV9ICiYjNDM7I2RlZmluZSBfQVNNX1MzOTBfQ0ZJX0gKJiM0MzsKJiM0MzsjZGVmaW5lIF9fYnBmY2FsbAomIzQzOwomIzQzOyNlbmRpZiAvKiBfQVNNX1MzOTBfQ0ZJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvbWNvdW50LlMgYi9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TCmluZGV4IDFmZWMzNzBmZWNmNDgxLi42YmM0NGM3Njc2NDJlNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuUwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TCkBAIC00LDYgJiM0Mzs0LDcgQEAKICAqCiAgKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jZmlfdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saW5rYWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2FzbS1vZmZzZXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2Z0cmFjZS5oJmd0OwpAQCAtMzQsMTAgJiM0MzszNSwxNiBAQAogCiAJLnNlY3Rpb24gLmtwcm9iZXMudGV4dCwgJiMzNDtheCYjMzQ7CiAKLVNZTV9GVU5DX1NUQVJUKGZ0cmFjZV9zdHViKQomIzQzO1NZTV9UWVBFRF9GVU5DX1NUQVJUKGZ0cmFjZV9zdHViKQogCUJSX0VYCSVyMTQKIFNZTV9GVU5DX0VORChmdHJhY2Vfc3R1YikKIAomIzQzOyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiYjNDM7U1lNX1RZUEVEX0ZVTkNfU1RBUlQoZnRyYWNlX3N0dWJfZ3JhcGgpCiYjNDM7CUJSX0VYCSVyMTQKJiM0MztTWU1fRlVOQ19FTkQoZnRyYWNlX3N0dWJfZ3JhcGgpCiYjNDM7I2VuZGlmCiYjNDM7CiBTWU1fQ09ERV9TVEFSVChmdHJhY2Vfc3R1Yl9kaXJlY3RfdHJhbXApCiAJbGdyCSVyMSwgJXIwCiAJQlJfRVgJJXIxCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RleHRfYW1vZGUzMS5TIGIvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuUwppbmRleCAyNmYyOTgxYWEwOWUzMS4uZjAwN2Q4OTJkMGM1ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuUwpAQCAtNSw2ICYjNDM7NSw3IEBACiAgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTkKICAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NmaV90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpbmthZ2UuaCZndDsKICNpbmNsdWRlICZsdDthc20vYXNtLWV4dGFibGUuaCZndDsKICNpbmNsdWRlICZsdDthc20vZXJybm8uaCZndDsKQEAgLTI2LDcgJiM0MzsyNyw3IEBACiAvKgogICogaW50IF9kaWFnMTRfYW1vZGUzMSh1bnNpZ25lZCBsb25nIHJ4LCB1bnNpZ25lZCBsb25nIHJ5MSwgdW5zaWduZWQgbG9uZyBzdWJjb2RlKQogICovCi1TWU1fRlVOQ19TVEFSVChfZGlhZzE0X2Ftb2RlMzEpCiYjNDM7U1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcxNF9hbW9kZTMxKQogCWxncgklcjEsJXIyCiAJbGdyCSVyMiwlcjMKIAlsZ3IJJXIzLCVyNApAQCAtNDYsNyAmIzQzOzQ3LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMTRfYW1vZGUzMSkKIC8qCiAgKiBpbnQgX2RpYWcyMTBfYW1vZGUzMShzdHJ1Y3QgZGlhZzIxMCAqYWRkcikKICAqLwotU1lNX0ZVTkNfU1RBUlQoX2RpYWcyMTBfYW1vZGUzMSkKJiM0MztTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzIxMF9hbW9kZTMxKQogCWxncgklcjEsJXIyCiAJbGhpCSVyMiwtMQogCXNhbTMxCkBAIC02NCw3ICYjNDM7NjUsNyBAQCBTWU1fRlVOQ19FTkQoX2RpYWcyMTBfYW1vZGUzMSkKIC8qCiAgKiBpbnQgZGlhZzhjKHN0cnVjdCBkaWFnOGMgKmFkZHIsIHN0cnVjdCBjY3dfZGV2X2lkICpkZXZubywgc2l6ZV90IGxlbikKICovCi1TWU1fRlVOQ19TVEFSVChfZGlhZzhjX2Ftb2RlMzEpCiYjNDM7U1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWc4Y19hbW9kZTMxKQogCWxsZ2YJJXIzLDAoJXIzKQogCXNhbTMxCiAJZGlhZwklcjIsJXI0LDB4OGMKQEAgLTc3LDcgJiM0Mzs3OCw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzhjX2Ftb2RlMzEpCiAvKgogICogaW50IF9kaWFnMjZjX2Ftb2RlMzEodm9pZCAqcmVxLCB2b2lkICpyZXNwLCBlbnVtIGRpYWcyNmNfc2Mgc3ViY29kZSkKICAqLwotU1lNX0ZVTkNfU1RBUlQoX2RpYWcyNmNfYW1vZGUzMSkKJiM0MztTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzI2Y19hbW9kZTMxKQogCWxnaGkJJXI1LC1FT1BOT1RTVVBQCiAJc2FtMzEKIAlkaWFnCSVyMiwlcjQsMHgyNmMKQEAgLTkxLDcgJiM0Mzs5Miw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzI2Y19hbW9kZTMxKQogLyoKICAqIHZvaWQgX2RpYWcwY19hbW9kZTMxKHVuc2lnbmVkIGxvbmcgcngpCiAgKi8KLVNZTV9GVU5DX1NUQVJUKF9kaWFnMGNfYW1vZGUzMSkKJiM0MztTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzBjX2Ftb2RlMzEpCiAJc2FtMzEKIAlkaWFnCSVyMiwlcjIsMHgwYwogCXNhbTY0CkBAIC0xMDMsNyAmIzQzOzEwNCw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzBjX2Ftb2RlMzEpCiAgKgogICogQ2FsbHMgZGlhZyAzMDggc3ViY29kZSAxIGFuZCBjb250aW51ZXMgZXhlY3V0aW9uCiAgKi8KLVNZTV9GVU5DX1NUQVJUKF9kaWFnMzA4X3Jlc2V0X2Ftb2RlMzEpCiYjNDM7U1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWczMDhfcmVzZXRfYW1vZGUzMSkKIAlsYXJsCSVyNCxjdGxyZWdzCQkjIFNhdmUgY29udHJvbCByZWdpc3RlcnMKIAlzdGN0ZwklYzAsJWMxNSwwKCVyNCkKIAlsZwklcjIsMCglcjQpCQkjIERpc2FibGUgbG93Y29yZSBwcm90ZWN0aW9uCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYwppbmRleCAzMTc0OWMwMzYyY2EyMy4uN2Y0NWMxMDY0NDRkZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYwpAQCAtMjEsNiAmIzQzOzIxLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9maWx0ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NmaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2NhY2hlZmx1c2guaCZndDsKQEAgLTM1Niw2ICYjNDM7MzU3LDE5IEBAIHN0YXRpYyB2b2lkIGVtaXQ2X3BjcmVsX3JpbGMoc3RydWN0IGJwZl9qaXQgKmppdCwgdTMyIG9wLCB1OCBtYXNrLCBzNjQgcGNyZWwpCiAJfQkJCQkJCQlcCiB9KQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVtaXRfdTMyX2RhdGEoY29uc3QgdTMyIGRhdGEsIHN0cnVjdCBicGZfaml0ICpqaXQpCiYjNDM7ewomIzQzOwlpZiAoaml0LSZndDtwcmdfYnVmKQomIzQzOwkJKih1MzIgKikoaml0LSZndDtwcmdfYnVmICYjNDM7IGppdC0mZ3Q7cHJnKSA9IGRhdGE7CiYjNDM7CWppdC0mZ3Q7cHJnICYjNDM7PSA0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF9rY2ZpKHUzMiBoYXNoLCBzdHJ1Y3QgYnBmX2ppdCAqaml0KQomIzQzO3sKJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NGSSkpCiYjNDM7CQllbWl0X3UzMl9kYXRhKGhhc2gsIGppdCk7CiYjNDM7fQomIzQzOwogLyoKICAqIFJldHVybiB3aGV0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFRoZSBmaXJzdCBwYXNzIGlzIHNwZWNpYWwsIHNpbmNlIHdlCiAgKiBkb24mIzM5O3Qga25vdyBhbnkgc2l6ZXMgeWV0LCBhbmQgdGh1cyBtdXN0IGJlIGNvbnNlcnZhdGl2ZS4KQEAgLTU5Nyw2ICYjNDM7NjExLDggQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKQogewogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHByb2dfZnJhbWUpICE9IFNUQUNLX0ZSQU1FX09WRVJIRUFEKTsKIAomIzQzOwllbWl0X2tjZmkoYnBmX2lzX3N1YnByb2coZnApID8gY2ZpX2JwZl9zdWJwcm9nX2hhc2ggOiBjZmlfYnBmX2hhc2gsIGppdCk7CiYjNDM7CiAJLyogTm8tb3AgZm9yIGhvdHBhdGNoaW5nICovCiAJLyogYnJjbCAwLHByb2xvZ3VlX3BsdCAqLwogCUVNSVQ2X1BDUkVMX1JJTEMoMHhjMDA0MDAwMCwgMCwgaml0LSZndDtwcm9sb2d1ZV9wbHQpOwpAQCAtNjE2LDcgJiM0Mzs2MzIsNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnApCiAJCWJwZl9za2lwKGppdCwgNik7CiAJfQogCS8qIFRhaWwgY2FsbHMgaGF2ZSB0byBza2lwIGFib3ZlIGluaXRpYWxpemF0aW9uICovCi0Jaml0LSZndDt0YWlsX2NhbGxfc3RhcnQgPSBqaXQtJmd0O3ByZzsKJiM0MzsJaml0LSZndDt0YWlsX2NhbGxfc3RhcnQgPSBqaXQtJmd0O3ByZyAtIGNmaV9nZXRfb2Zmc2V0KCk7CiAJaWYgKGZwLSZndDthdXgtJmd0O2V4Y2VwdGlvbl9jYikgewogCQkvKgogCQkgKiBTd2l0Y2ggc3RhY2ssIHRoZSBuZXcgYWRkcmVzcyBpcyBpbiB0aGUgMm5kIHBhcmFtZXRlci4KQEAgLTI0MDEsMTEgJiM0MzsyNDE3LDEzIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ByCiAJCWppdF9kYXRhLSZndDtjdHggPSBqaXQ7CiAJCWppdF9kYXRhLSZndDtwYXNzID0gcGFzczsKIAl9Ci0JZnAtJmd0O2JwZl9mdW5jID0gKHZvaWQgKikgaml0LnByZ19idWY7CiYjNDM7CWZwLSZndDticGZfZnVuYyA9ICh2b2lkICopaml0LnByZ19idWYgJiM0MzsgY2ZpX2dldF9vZmZzZXQoKTsKIAlmcC0mZ3Q7aml0ZWQgPSAxOwotCWZwLSZndDtqaXRlZF9sZW4gPSBqaXQuc2l6ZTsKJiM0MzsJZnAtJmd0O2ppdGVkX2xlbiA9IGppdC5zaXplIC0gY2ZpX2dldF9vZmZzZXQoKTsKIAogCWlmICghZnAtJmd0O2lzX2Z1bmMgfHwgZXh0cmFfcGFzcykgewomIzQzOwkJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBmcC0mZ3Q7bGVuOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlqaXQuYWRkcnNbaV0gLT0gY2ZpX2dldF9vZmZzZXQoKTsKIAkJYnBmX3Byb2dfZmlsbF9qaXRlZF9saW5mbyhmcCwgaml0LmFkZHJzICYjNDM7IDEpOwogZnJlZV9hZGRyczoKIAkJa3ZmcmVlKGppdC5hZGRycyk7CkBAIC0yNjcxLDggJiM0MzsyNjg5LDEwIEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sCiAJCXJldHVybiAtRU5PVFNVUFA7CiAKIAkvKiBSZXR1cm4gdG8gJXIxNCBpbiB0aGUgc3RydWN0X29wcyBjYXNlLiAqLwotCWlmIChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9JTkRJUkVDVCkKJiM0MzsJaWYgKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX0lORElSRUNUKSB7CiAJCWZsYWdzIHw9IEJQRl9UUkFNUF9GX1NLSVBfRlJBTUU7CiYjNDM7CQllbWl0X2tjZmkoY2ZpX2dldF9mdW5jX2hhc2goZnVuY19hZGRyKSwgaml0KTsKJiM0MzsJfQogCiAJLyoKIAkgKiBDb21wdXRlIGhvdyBtYW55IGFyZ3VtZW50cyB3ZSBuZWVkIHRvIHBhc3MgdG8gQlBGIHByb2dyYW1zLgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jIGIvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jCmluZGV4IDMwYTczMmM4MDhmMzVlLi43MjE3OGRjOTBhNGNmOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC90b29scy9yZWxvY3MuYwpAQCAtNDEsNiAmIzQzOzQxLDEwIEBACiBzdGF0aWMgRWxmX0VoZHIJCWVoZHI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlzaG51bTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQJc2hzdHJuZHg7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludAlzaHN5bXRhYm5keDsKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50CXNoeHN5bXRhYm5keDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHN5bV9pbmRleChFbGZfU3ltICpzeW0pOwogCiBzdHJ1Y3QgcmVsb2NzIHsKIAl1aW50MzJfdAkqb2Zmc2V0OwpAQCAtNTQsMTEgJiM0Mzs1OCw0MCBAQCBzdGF0aWMgc3RydWN0IHJlbG9jcyByZWxvY3M2NDsKIHN0cnVjdCBzZWN0aW9uIHsKIAlFbGZfU2hkcglzaGRyOwogCXN0cnVjdCBzZWN0aW9uCSpsaW5rOwomIzQzOwlFbGZfU3ltCQkqc3ltdGFiOwomIzQzOwlFbGYzMl9Xb3JkCSp4c3ltdGFiOwogCUVsZl9SZWwJCSpyZWx0YWI7CiYjNDM7CWNoYXIJCSpzdHJ0YWI7CiB9OwogCiBzdGF0aWMgc3RydWN0IHNlY3Rpb24gKnNlY3M7CiAKJiM0MztzdGF0aWMgY29uc3QgY2hhciAqc2VjX25hbWUodW5zaWduZWQgc2huZHgpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpzZWNfc3RydGFiOwomIzQzOwljb25zdCBjaGFyICpuYW1lID0gJiMzNDsmbHQ7bm9uYW1lJmd0OyYjMzQ7OwomIzQzOwlzZWNfc3RydGFiID0gc2Vjc1tzaHN0cm5keF0uc3RydGFiOwomIzQzOwomIzQzOwlpZiAoc2huZHggJmx0OyBzaG51bSkKJiM0MzsJCW5hbWUgPSBzZWNfc3RydGFiICYjNDM7IHNlY3Nbc2huZHhdLnNoZHIuc2hfbmFtZTsKJiM0MzsJZWxzZSBpZiAoc2huZHggPT0gU0hOX0FCUykKJiM0MzsJCW5hbWUgPSAmIzM0O0FCU09MVVRFJiMzNDs7CiYjNDM7CWVsc2UgaWYgKHNobmR4ID09IFNITl9DT01NT04pCiYjNDM7CQluYW1lID0gJiMzNDtDT01NT04mIzM0OzsKJiM0MzsJcmV0dXJuIG5hbWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBjaGFyICpzeW1fbmFtZShjb25zdCBjaGFyICpzeW1fc3RydGFiLCBFbGZfU3ltICpzeW0pCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwomIzQzOwlpZiAoc3ltLSZndDtzdF9uYW1lKQomIzQzOwkJbmFtZSA9IHN5bV9zdHJ0YWIgJiM0Mzsgc3ltLSZndDtzdF9uYW1lOwomIzQzOwllbHNlCiYjNDM7CQluYW1lID0gc2VjX25hbWUoc3ltX2luZGV4KHN5bSkpOwomIzQzOwlyZXR1cm4gbmFtZTsKJiM0Mzt9CiYjNDM7CiAjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCiAjZGVmaW5lIGxlMTZfdG9fY3B1KHZhbCkJKHZhbCkKICNkZWZpbmUgbGUzMl90b19jcHUodmFsKQkodmFsKQpAQCAtMTA1LDYgJiM0MzsxMzgsMjMgQEAgc3RhdGljIHVpbnQ2NF90IGVsZjY0X3RvX2NwdSh1aW50NjRfdCB2YWwpCiAjZGVmaW5lIGVsZl9vZmZfdG9fY3B1KHgpCWVsZjY0X3RvX2NwdSh4KQogI2RlZmluZSBlbGZfeHdvcmRfdG9fY3B1KHgpCWVsZjY0X3RvX2NwdSh4KQogCiYjNDM7c3RhdGljIGludCBzeW1faW5kZXgoRWxmX1N5bSAqc3ltKQomIzQzO3sKJiM0MzsJRWxmX1N5bSAqc3ltdGFiID0gc2Vjc1tzaHN5bXRhYm5keF0uc3ltdGFiOwomIzQzOwlFbGYzMl9Xb3JkICp4c3ltdGFiID0gc2Vjc1tzaHhzeW10YWJuZHhdLnhzeW10YWI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwomIzQzOwlpbnQgaW5kZXg7CiYjNDM7CiYjNDM7CWlmIChzeW0tJmd0O3N0X3NobmR4ICE9IFNITl9YSU5ERVgpCiYjNDM7CQlyZXR1cm4gc3ltLSZndDtzdF9zaG5keDsKJiM0MzsKJiM0MzsJLyogY2FsY3VsYXRlIG9mZnNldCBvZiBzeW0gZnJvbSBoZWFkIG9mIHRhYmxlLiAqLwomIzQzOwlvZmZzZXQgPSAodW5zaWduZWQgbG9uZylzeW0gLSAodW5zaWduZWQgbG9uZylzeW10YWI7CiYjNDM7CWluZGV4ID0gb2Zmc2V0IC8gc2l6ZW9mKCpzeW0pOwomIzQzOwomIzQzOwlyZXR1cm4gZWxmMzJfdG9fY3B1KHhzeW10YWJbaW5kZXhdKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkaWUoY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcDsKQEAgLTIxNiw2ICYjNDM7MjY2LDgxIEBAIHN0YXRpYyB2b2lkIHJlYWRfc2hkcnMoRklMRSAqZnApCiAKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJlYWRfc3RydGFicyhGSUxFICpmcCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgc2hudW07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3Qgc2VjdGlvbiAqc2VjID0gJmFtcDtzZWNzW2ldOwomIzQzOwomIzQzOwkJaWYgKHNlYy0mZ3Q7c2hkci5zaF90eXBlICE9IFNIVF9TVFJUQUIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzZWMtJmd0O3N0cnRhYiA9IG1hbGxvYyhzZWMtJmd0O3NoZHIuc2hfc2l6ZSk7CiYjNDM7CQlpZiAoIXNlYy0mZ3Q7c3RydGFiKQomIzQzOwkJCWRpZSgmIzM0O21hbGxvYyBvZiAlJiMzNDsgRk1UICYjMzQ7IGJ5dGVzIGZvciBzdHJ0YWIgZmFpbGVkXG4mIzM0Oywgc2VjLSZndDtzaGRyLnNoX3NpemUpOwomIzQzOwomIzQzOwkJaWYgKGZzZWVrKGZwLCBzZWMtJmd0O3NoZHIuc2hfb2Zmc2V0LCBTRUVLX1NFVCkgJmx0OyAwKQomIzQzOwkJCWRpZSgmIzM0O1NlZWsgdG8gJSYjMzQ7IEZNVCAmIzM0OyBmYWlsZWQ6ICVzXG4mIzM0Oywgc2VjLSZndDtzaGRyLnNoX29mZnNldCwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsKJiM0MzsJCWlmIChmcmVhZChzZWMtJmd0O3N0cnRhYiwgMSwgc2VjLSZndDtzaGRyLnNoX3NpemUsIGZwKSAhPSBzZWMtJmd0O3NoZHIuc2hfc2l6ZSkKJiM0MzsJCQlkaWUoJiMzNDtDYW5ub3QgcmVhZCBzeW1ib2wgdGFibGU6ICVzXG4mIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZWFkX3N5bXRhYnMoRklMRSAqZnApCiYjNDM7ewomIzQzOwlpbnQgaSwgajsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHNobnVtOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHNlY3Rpb24gKnNlYyA9ICZhbXA7c2Vjc1tpXTsKJiM0MzsJCWludCBudW1fc3ltczsKJiM0MzsKJiM0MzsJCXN3aXRjaCAoc2VjLSZndDtzaGRyLnNoX3R5cGUpIHsKJiM0MzsJCWNhc2UgU0hUX1NZTVRBQl9TSE5EWDoKJiM0MzsJCQlzZWMtJmd0O3hzeW10YWIgPSBtYWxsb2Moc2VjLSZndDtzaGRyLnNoX3NpemUpOwomIzQzOwkJCWlmICghc2VjLSZndDt4c3ltdGFiKQomIzQzOwkJCQlkaWUoJiMzNDttYWxsb2Mgb2YgJSYjMzQ7IEZNVCAmIzM0OyBieXRlcyBmb3IgeHN5bXRhYiBmYWlsZWRcbiYjMzQ7LCBzZWMtJmd0O3NoZHIuc2hfc2l6ZSk7CiYjNDM7CiYjNDM7CQkJaWYgKGZzZWVrKGZwLCBzZWMtJmd0O3NoZHIuc2hfb2Zmc2V0LCBTRUVLX1NFVCkgJmx0OyAwKQomIzQzOwkJCQlkaWUoJiMzNDtTZWVrIHRvICUmIzM0OyBGTVQgJiMzNDsgZmFpbGVkOiAlc1xuJiMzNDssIHNlYy0mZ3Q7c2hkci5zaF9vZmZzZXQsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CiYjNDM7CQkJaWYgKGZyZWFkKHNlYy0mZ3Q7eHN5bXRhYiwgMSwgc2VjLSZndDtzaGRyLnNoX3NpemUsIGZwKSAhPSBzZWMtJmd0O3NoZHIuc2hfc2l6ZSkKJiM0MzsJCQkJZGllKCYjMzQ7Q2Fubm90IHJlYWQgZXh0ZW5kZWQgc3ltYm9sIHRhYmxlOiAlc1xuJiMzNDssIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CiYjNDM7CQkJc2h4c3ltdGFibmR4ID0gaTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWNhc2UgU0hUX1NZTVRBQjoKJiM0MzsJCQludW1fc3ltcyA9IHNlYy0mZ3Q7c2hkci5zaF9zaXplIC8gc2l6ZW9mKEVsZl9TeW0pOwomIzQzOwomIzQzOwkJCXNlYy0mZ3Q7c3ltdGFiID0gbWFsbG9jKHNlYy0mZ3Q7c2hkci5zaF9zaXplKTsKJiM0MzsJCQlpZiAoIXNlYy0mZ3Q7c3ltdGFiKQomIzQzOwkJCQlkaWUoJiMzNDttYWxsb2Mgb2YgJSYjMzQ7IEZNVCAmIzM0OyBieXRlcyBmb3Igc3ltdGFiIGZhaWxlZFxuJiMzNDssIHNlYy0mZ3Q7c2hkci5zaF9zaXplKTsKJiM0MzsKJiM0MzsJCQlpZiAoZnNlZWsoZnAsIHNlYy0mZ3Q7c2hkci5zaF9vZmZzZXQsIFNFRUtfU0VUKSAmbHQ7IDApCiYjNDM7CQkJCWRpZSgmIzM0O1NlZWsgdG8gJSYjMzQ7IEZNVCAmIzM0OyBmYWlsZWQ6ICVzXG4mIzM0Oywgc2VjLSZndDtzaGRyLnNoX29mZnNldCwgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsKJiM0MzsJCQlpZiAoZnJlYWQoc2VjLSZndDtzeW10YWIsIDEsIHNlYy0mZ3Q7c2hkci5zaF9zaXplLCBmcCkgIT0gc2VjLSZndDtzaGRyLnNoX3NpemUpCiYjNDM7CQkJCWRpZSgmIzM0O0Nhbm5vdCByZWFkIHN5bWJvbCB0YWJsZTogJXNcbiYjMzQ7LCBzdHJlcnJvcihlcnJubykpOwomIzQzOwomIzQzOwkJCWZvciAoaiA9IDA7IGogJmx0OyBudW1fc3ltczsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQkJRWxmX1N5bSAqc3ltID0gJmFtcDtzZWMtJmd0O3N5bXRhYltqXTsKJiM0MzsKJiM0MzsJCQkJc3ltLSZndDtzdF9uYW1lICA9IGVsZl93b3JkX3RvX2NwdShzeW0tJmd0O3N0X25hbWUpOwomIzQzOwkJCQlzeW0tJmd0O3N0X3ZhbHVlID0gZWxmX2FkZHJfdG9fY3B1KHN5bS0mZ3Q7c3RfdmFsdWUpOwomIzQzOwkJCQlzeW0tJmd0O3N0X3NpemUgID0gZWxmX3h3b3JkX3RvX2NwdShzeW0tJmd0O3N0X3NpemUpOwomIzQzOwkJCQlzeW0tJmd0O3N0X3NobmR4ID0gZWxmX2hhbGZfdG9fY3B1KHN5bS0mZ3Q7c3Rfc2huZHgpOwomIzQzOwkJCX0KJiM0MzsJCQlzaHN5bXRhYm5keCA9IGk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcmVhZF9yZWxvY3MoRklMRSAqZnApCiB7CiAJaW50IGksIGo7CkBAIC0yNjMsNyAmIzQzOzM4OCw4IEBAIHN0YXRpYyB2b2lkIGFkZF9yZWxvYyhzdHJ1Y3QgcmVsb2NzICpyLCB1aW50MzJfdCBvZmZzZXQpCiAJci0mZ3Q7b2Zmc2V0W3ItJmd0O2NvdW50JiM0MzsmIzQzO10gPSBvZmZzZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZG9fcmVsb2Moc3RydWN0IHNlY3Rpb24gKnNlYywgRWxmX1JlbCAqcmVsKQomIzQzO3N0YXRpYyBpbnQgZG9fcmVsb2Moc3RydWN0IHNlY3Rpb24gKnNlYywgRWxmX1JlbCAqcmVsLCBFbGZXKFN5bSkgKnN5bSwKJiM0MzsJCSAgICBjb25zdCBjaGFyICpzeW1uYW1lKQogewogCXVuc2lnbmVkIGludCByX3R5cGUgPSBFTEY2NF9SX1RZUEUocmVsLSZndDtyX2luZm8pOwogCUVsZlcoQWRkcikgb2Zmc2V0ID0gcmVsLSZndDtyX29mZnNldDsKQEAgLTI3OSw2ICYjNDM7NDA1LDIyIEBAIHN0YXRpYyBpbnQgZG9fcmVsb2Moc3RydWN0IHNlY3Rpb24gKnNlYywgRWxmX1JlbCAqcmVsKQogCWNhc2UgUl8zOTBfR09UUENEQkw6CiAJY2FzZSBSXzM5MF9HT1RPRkY2NDoKIAkJYnJlYWs7CiYjNDM7CWNhc2UgUl8zOTBfMzI6IHsKJiM0MzsJCXN0YXRpYyBjb25zdCBjaGFyIGtjZmlwZnhbXSA9ICYjMzQ7X19rY2ZpX3R5cGVpZF8mIzM0OzsKJiM0MzsKJiM0MzsJCWlmIChzeW0tJmd0O3N0X3NobmR4ICE9IFNITl9BQlMpCiYjNDM7CQkJZGllKCYjMzQ7VW5zdXBwb3J0ZWQgcmVsb2NhdGlvbiB0eXBlOiAlZFxuJiMzNDssIHJfdHlwZSk7CiYjNDM7CQkvKgomIzQzOwkJICogU3ltYm9scyB3aXRoIF9fa2NmaV90eXBlaWRfIHByZWZpeCBoYXZlIGNvbnN0YW50IHZhbHVlcywKJiM0MzsJCSAqIHdoaWNoIGRvIG5vdCBjaGFuZ2UgaWYgYnpJbWFnZSBpcyBsb2FkZWQgYXQgYSBkaWZmZXJlbnQKJiM0MzsJCSAqIHBoeXNpY2FsIGFkZHJlc3MgdGhhbiB0aGUgYWRkcmVzcyBmb3Igd2hpY2ggaXQgaGFzIGJlZW4KJiM0MzsJCSAqIGNvbXBpbGVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIXN0cm5jbXAoa2NmaXBmeCwgc3ltbmFtZSwgc2l6ZW9mKGtjZmlwZngpIC0gMSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkaWUoJiMzNDtJbnZhbGlkIGFic29sdXRlIFJfMzkwXzMyIHJlbG9jYXRpb246ICVzXG4mIzM0Oywgc3ltbmFtZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQogCWNhc2UgUl8zOTBfNjQ6CiAJCWFkZF9yZWxvYygmYW1wO3JlbG9jczY0LCBvZmZzZXQpOwogCQlicmVhazsKQEAgLTI5NiwyMSAmIzQzOzQzOCwyOSBAQCBzdGF0aWMgdm9pZCB3YWxrX3JlbG9jcyh2b2lkKQogCiAJLyogV2FsayB0aHJvdWdoIHRoZSByZWxvY2F0aW9ucyAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBzaG51bTsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHNlY3Rpb24gKnNlY19hcHBsaWVzOwomIzQzOwkJY2hhciAqc3ltX3N0cnRhYjsKJiM0MzsJCUVsZl9TeW0gKnNoX3N5bXRhYjsKJiM0MzsJCXN0cnVjdCBzZWN0aW9uICpzZWNfYXBwbGllcywgKnNlY19zeW10YWI7CiAJCWludCBqOwogCQlzdHJ1Y3Qgc2VjdGlvbiAqc2VjID0gJmFtcDtzZWNzW2ldOwogCiAJCWlmIChzZWMtJmd0O3NoZHIuc2hfdHlwZSAhPSBTSFRfUkVMX1RZUEUpCiAJCQljb250aW51ZTsKIAomIzQzOwkJc2VjX3N5bXRhYiAgPSBzZWMtJmd0O2xpbms7CiAJCXNlY19hcHBsaWVzID0gJmFtcDtzZWNzW3NlYy0mZ3Q7c2hkci5zaF9pbmZvXTsKIAkJaWYgKCEoc2VjX2FwcGxpZXMtJmd0O3NoZHIuc2hfZmxhZ3MgJmFtcDsgU0hGX0FMTE9DKSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQlzaF9zeW10YWIgPSBzZWNfc3ltdGFiLSZndDtzeW10YWI7CiYjNDM7CQlzeW1fc3RydGFiID0gc2VjX3N5bXRhYi0mZ3Q7bGluay0mZ3Q7c3RydGFiOwomIzQzOwogCQlmb3IgKGogPSAwOyBqICZsdDsgc2VjLSZndDtzaGRyLnNoX3NpemUgLyBzaXplb2YoRWxmX1JlbCk7IGomIzQzOyYjNDM7KSB7CiAJCQlFbGZfUmVsICpyZWwgPSAmYW1wO3NlYy0mZ3Q7cmVsdGFiW2pdOwomIzQzOwkJCUVsZl9TeW0gKnN5bSA9ICZhbXA7c2hfc3ltdGFiW0VMRl9SX1NZTShyZWwtJmd0O3JfaW5mbyldOwomIzQzOwkJCWNvbnN0IGNoYXIgKnN5bW5hbWUgPSBzeW1fbmFtZShzeW1fc3RydGFiLCBzeW0pOwogCi0JCQlkb19yZWxvYyhzZWMsIHJlbCk7CiYjNDM7CQkJZG9fcmVsb2Moc2VjLCByZWwsIHN5bSwgc3ltbmFtZSk7CiAJCX0KIAl9CiB9CkBAIC0zNDksNiAmIzQzOzQ5OSw4IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3MoRklMRSAqZnApCiB7CiAJcmVhZF9laGRyKGZwKTsKIAlyZWFkX3NoZHJzKGZwKTsKJiM0MzsJcmVhZF9zdHJ0YWJzKGZwKTsKJiM0MzsJcmVhZF9zeW10YWJzKGZwKTsKIAlyZWFkX3JlbG9jcyhmcCk7CiAJZW1pdF9yZWxvY3MoKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDU5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEltcGFjdCBvZiB0aGlzIENGSSBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nIGF0dGVudGlvbi4gSXQgdG91Y2hlcyBxdWl0ZSBhIGZldyBmaWxlcyBpbiB0aGUgczM5MCBhcmNoaXRlY3R1cmU6IGBhcmNoL3MzOTAvS2NvbmZpZ2AsIHNvbWUgaW5jbHVkZSBmaWxlcywgYW5kIHNvbWUgYXNzZW1ibHkgYW5kIEMgZmlsZXMgcmVsYXRlZCB0byB0aGUga2VybmVsIGFuZCBuZXR3b3JraW5nLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGVuYWJsaW5nIENGSSAoQ29udHJvbCBGbG93IEludGVncml0eSkgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3Mgc2VsZWN0aW5nIGBBUkNIX1NVUFBPUlRTX0NGSWAgYW5kIGBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTYCBpZiBjbGFuZyBpcyBiZWluZyB1c2VkLgoKVGhlIHJlYWxseSBpbnRlcmVzdGluZyBwYXJ0LCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgaXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgbW9kaWZpY2F0aW9ucy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGFyZWEgdGhhdCYjMzk7cyBwcmltZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgYnBmX2ppdF9wcm9sb2d1ZWAsIGBicGZfaW50X2ppdF9jb21waWxlYCwgYW5kIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgdG8gZW1pdCBLQ0ZJIGhhc2hlcy4gU28sIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV3IGNvZGUgZ2VuZXJhdGlvbiByZWxhdGVkIHRvIENGSSB3aXRoaW4gdGhlIEJQRiBKSVQsIG1ha2luZyB0aG9zZSBmdW5jdGlvbnMga2V5IHRhcmdldHMgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZ29pbmcgdG8gdXNlIGBDT05GSUdfQ0ZJYC4gSSB0aG91Z2h0IGBDT05GSUdfQ0ZJX0NMQU5HYCB3YXMgdXN1YWxseSB0aGUga25vYi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdCwgYnV0IHllYWgsIGl0JiMzOTtzIGBDT05GSUdfQ0ZJYC4gVGhlIGNvZGUgdXNlcyBgSVNfRU5BQkxFRChDT05GSUdfQ0ZJKWAgdG8gZGV0ZXJtaW5lIGlmIGl0IHNob3VsZCBlbWl0IHRoZXNlIGhhc2hlcy4gT2theSwgc28gdGhhdCYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRkkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTkzMD1jb25maWcgQVJDSF9VU0VTX0NGSV9HRU5FUklDX0xMVk1fUEFTU1xuLS1cbmFyY2gvS2NvbmZpZy05MzYtXG5hcmNoL0tjb25maWc6OTM3OmNvbmZpZyBDRklcbmFyY2gvS2NvbmZpZy05MzgtXHRib29sIFwmIzM0O1VzZSBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSlcJiMzNDtcbi0tXG5hcmNoL0tjb25maWctOTUyLVxuYXJjaC9LY29uZmlnOjk1Mzpjb25maWcgQ0ZJX0NMQU5HXG5hcmNoL0tjb25maWctOTU0LVx0Ym9vbFxuLS1cbmFyY2gvS2NvbmZpZy05NTgtXG5hcmNoL0tjb25maWc6OTU5OmNvbmZpZyBDRklfSUNBTExfTk9STUFMSVpFX0lOVEVHRVJTXG5hcmNoL0tjb25maWctOTYwLVx0Ym9vbCBcJiMzNDtOb3JtYWxpemUgQ0ZJIHRhZ3MgZm9yIGludGVnZXJzXCYjMzQ7XG4tLVxuYXJjaC9LY29uZmlnPTk4MT1jb25maWcgSEFWRV9DRklfSUNBTExfTk9STUFMSVpFX0lOVEVHRVJTX1JVU1RDXG4tLVxuYXJjaC9LY29uZmlnLTk4OC1cbmFyY2gvS2NvbmZpZzo5ODk6Y29uZmlnIENGSV9QRVJNSVNTSVZFXG5hcmNoL0tjb25maWctOTkwLVx0Ym9vbCBcJiMzNDtVc2UgQ0ZJIGluIHBlcm1pc3NpdmUgbW9kZVwmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9MjI5Mz1jb25maWcgU1RSSUNUX1NJR0FMVFNUQUNLX1NJWkVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTIzMDgtXG5hcmNoL3g4Ni9LY29uZmlnOjIzMDk6Y29uZmlnIENGSV9BVVRPX0RFRkFVTFRcbmFyY2gveDg2L0tjb25maWctMjMxMC1cdGJvb2wgXCYjMzQ7QXR0ZW1wdCB0byB1c2UgRmluZUlCVCBieSBkZWZhdWx0IGF0IGJvb3QgdGltZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipDaGVja2luZyBDRkkgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX0NGSWAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIFByZXR0eSBzdXJlIHRoYXQmIzM5O3MgYSBsZWdpdGltYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIGl0IGRlZmluZWQgc29tZXdoZXJlIGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYEtjb25maWdgIGZpbGVzLCBwcm9iYWJseSBpbiBgYXJjaC9LY29uZmlnYC4gR29vZCBwcmFjdGljZSB0byBkb3VibGUtY2hlY2sgdGhhdCwgYnV0IEkmIzM5O20gcHJldHR5IGNvbmZpZGVudCBpbiB0aGF0IG9uZS4KCk5vdywgaG9sZCBvbiBhIHNlY29uZC4gTGV0IG1lIHF1aWNrbHkgc2NhbiBgYXJjaC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYSByZWxhdGVkIGBjb25maWdgIG9wdGlvbiBjYWxsZWQgYENGSV9DTEFOR2AuIE1pZ2h0IGJlIGEgQ2xhbmctc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb3IgZGVwZW5kZW5jeSB0aGF0JiMzOTtzIGNvbnRyb2xsZWQgc2VwYXJhdGVseS4gR290dGEgY29uc2lkZXIgYWxsIHRoZSBwb3RlbnRpYWwgdmFyaWFibGVzLCByaWdodD8gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkzMDpcdGNvbmZpZyBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTXG4gOTMxOlx0XHRib29sXG4gOTMyOlx0XHRoZWxwXG4gOTMzOlx0XHQgIEFuIGFyY2hpdGVjdHVyZSBzaG91bGQgc2VsZWN0IHRoaXMgb3B0aW9uIGlmIGl0IHVzZXMgdGhlIGdlbmVyaWNcbiA5MzQ6XHRcdCAgS0NGSVBhc3MgaW4gTExWTSB0byBleHBhbmQga0NGSSBidW5kbGVzIGluc3RlYWQgb2YgYXJjaGl0ZWN0dXJlLXNwZWNpZmljXG4gOTM1Olx0XHQgIGxvd2VyaW5nLlxuIDkzNjpcdFxuIDkzNzpcdGNvbmZpZyBDRklcbiA5Mzg6XHRcdGJvb2wgXCYjMzQ7VXNlIEtlcm5lbCBDb250cm9sIEZsb3cgSW50ZWdyaXR5IChrQ0ZJKVwmIzM0O1xuIDkzOTpcdFx0ZGVmYXVsdCBDRklfQ0xBTkdcbiA5NDA6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19DRklcbiA5NDE6XHRcdGRlcGVuZHMgb24gJChjYy1vcHRpb24sLWZzYW5pdGl6ZT1rY2ZpKVxuIDk0MjpcdFx0aGVscFxuIDk0MzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvcndhcmQtZWRnZSBDb250cm9sIEZsb3cgSW50ZWdyaXR5IChDRkkpXG4gOTQ0Olx0XHQgIGNoZWNraW5nLCB3aGVyZSB0aGUgY29tcGlsZXIgaW5qZWN0cyBhIHJ1bnRpbWUgY2hlY2sgdG8gZWFjaFxuIDk0NTpcdFx0ICBpbmRpcmVjdCBmdW5jdGlvbiBjYWxsIHRvIGVuc3VyZSB0aGUgdGFyZ2V0IGlzIGEgdmFsaWQgZnVuY3Rpb24gd2l0aFxuIDk0NjpcdFx0ICB0aGUgY29ycmVjdCBzdGF0aWMgdHlwZS4gVGhpcyByZXN0cmljdHMgcG9zc2libGUgY2FsbCB0YXJnZXRzIGFuZFxuIDk0NzpcdFx0ICBtYWtlcyBpdCBtb3JlIGRpZmZpY3VsdCBmb3IgYW4gYXR0YWNrZXIgdG8gZXhwbG9pdCBidWdzIHRoYXQgYWxsb3dcbiA5NDg6XHRcdCAgdGhlIG1vZGlmaWNhdGlvbiBvZiBzdG9yZWQgZnVuY3Rpb24gcG9pbnRlcnMuIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlXG4gOTQ5Olx0XHQgIGZvdW5kIGZyb20gQ2xhbmcmIzM5O3MgZG9jdW1lbnRhdGlvbjpcbiA5NTA6XHRcbiA5NTE6XHRcdCAgICBodHRwczovL2NsYW5nLmxsdm0ub3JnL2RvY3MvQ29udHJvbEZsb3dJbnRlZ3JpdHkuaHRtbFxuIDk1MjpcdFxuIDk1MzpcdGNvbmZpZyBDRklfQ0xBTkdcbiA5NTQ6XHRcdGJvb2xcbiA5NTU6XHRcdHRyYW5zaXRpb25hbFxuIDk1NjpcdFx0aGVscFxuIDk1NzpcdFx0ICBUcmFuc2l0aW9uYWwgY29uZmlnIGZvciBDRklfQ0xBTkcgdG8gQ0ZJIG1pZ3JhdGlvbi5cbiA5NTg6XHRcbiA5NTk6XHRjb25maWcgQ0ZJX0lDQUxMX05PUk1BTElaRV9JTlRFR0VSU1xuIDk2MDpcdFx0Ym9vbCBcJiMzNDtOb3JtYWxpemUgQ0ZJIHRhZ3MgZm9yIGludGVnZXJzXCYjMzQ7XG4gOTYxOlx0XHRkZXBlbmRzIG9uIENGSVxuIDk2MjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNcbiA5NjM6XHRcdGhlbHBcbiA5NjQ6XHRcdCAgVGhpcyBvcHRpb24gbm9ybWFsaXplcyB0aGUgQ0ZJIHRhZ3MgZm9yIGludGVnZXIgdHlwZXMgc28gdGhhdCBhbGxcbiA5NjU6XHRcdCAgaW50ZWdlciB0eXBlcyBvZiB0aGUgc2FtZSBzaXplIGFuZCBzaWduZWRuZXNzIHJlY2VpdmUgdGhlIHNhbWUgQ0ZJXG4gOTY2Olx0XHQgIHRhZy5cbiA5Njc6XHRcbiA5Njg6XHRcdCAgVGhlIG9wdGlvbiBpcyBzZXBhcmF0ZSBmcm9tIENPTkZJR19SVVNUIGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUgQUJJLlxuIDk2OTpcdFx0ICBXaGVuIHdvcmtpbmcgd2l0aCBidWlsZCBzeXN0ZW1zIHRoYXQgY2FyZSBhYm91dCB0aGUgQUJJLCBpdCBpc1xuIDk3MDpcdFx0ICBjb252ZW5pZW50IHRvIGJlIGFibGUgdG8gdHVybiBvbiB0aGlzIGZsYWcgZmlyc3QsIGJlZm9yZSBSdXN0IGlzXG4gOTcxOlx0XHQgIHR1cm5lZCBvbi5cbiA5NzI6XHRcbiA5NzM6XHRcdCAgVGhpcyBvcHRpb24gaXMgbmVjZXNzYXJ5IGZvciB1c2luZyBDRkkgd2l0aCBSdXN0LiBJZiB1bnN1cmUsIHNheSBOLlxuIDk3NDpcdFxuIDk3NTpcdGNvbmZpZyBIQVZFX0NGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNcbiA5NzY6XHRcdGRlZl9ib29sIHlcbiA5Nzc6XHRcdGRlcGVuZHMgb24gJChjYy1vcHRpb24sLWZzYW5pdGl6ZT1rY2ZpIC1mc2FuaXRpemUtY2ZpLWljYWxsLWV4cGVyaW1lbnRhbC1ub3JtYWxpemUtaW50ZWdlcnMpXG4gOTc4Olx0XHQjIFdpdGggR0NPVi9LQVNBTiB3ZSBuZWVkIHRoaXMgZml4OiBodHRwczovL2dpdGh1Yi5jb20vbGx2bS9sbHZtLXByb2plY3QvcHVsbC8xMDQ4MjZcbiA5Nzk6XHRcdGRlcGVuZHMgb24gQ0xBTkdfVkVSU0lPTiBcdTAwM2U9IDE5MDEwMyB8fCAoIUdDT1ZfS0VSTkVMIFx1MDAyNlx1MDAyNiAhS0FTQU5fR0VORVJJQyBcdTAwMjZcdTAwMjYgIUtBU0FOX1NXX1RBR1MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNjUKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzOgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzIGZvciBCUEYgSklUIENvbXBpbGF0aW9uIG9uIHMzOTAgQXJjaGl0ZWN0dXJlKioKCkFscmlnaHQsIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBGaXJzdCB0aG91Z2h0OiBgQ09ORklHX0NGSWAgLSB0aGF0JiMzOTtzICp0aGUqIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBCdXQgaG9sZCBvbiwgdGhlIGNvZGUgcGF0aCB0aGF0JiMzOTtzIGdyYWJiZWQgbXkgYXR0ZW50aW9uLCBzcGVjaWZpY2FsbHkgYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgLCBzdWdnZXN0cyBhbm90aGVyIGNyaXRpY2FsIHBpZWNlIGlzIG5lZWRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0JQRl9KSVRgIGlzIGVuYWJsZWQgYXMgd2VsbCwgb3Igd2Ugd29uJiMzOTt0IGdldCBmYXIuIFJpZ2h0LCBzbywgdGhlIG5leHQgc3RlcCBpcyBjbGVhcmx5IHRvIGRpdmUgaW50byBgYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY2AgaXRzZWxmLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGF0IGZpbGUgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYmVpbmcgdXNlZCBhbmQgaG93IHRoZXkgaW50ZXJyZWxhdGUgd2l0aGluIHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gVGhpcyB3aWxsIHNob3cgdXMgaG93IHRvIHZlcmlmeSBvciBjb25maWd1cmUgdGhlIG5lY2Vzc2FyeSBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTIzMTQ9c3RhdGljIHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqYnBmX2ppdF9hbGxvYyhzdHJ1Y3QgYnBmX2ppdCAqaml0LFxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjM1NS0gKi9cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MjM1NjpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcClcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjM1Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODQKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHRoaXMgaXMgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR1cCBmb3IgQlBGIHRyYW1wb2xpbmVzIGlzIGhhcHBlbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBkZXRhaWxzIG9mIEpJVCBjb21waWxhdGlvbiwgcHJvYmFibHkgaW52b2x2aW5nIHNvbWUga2luZCBvZiBjb2RlIGdlbmVyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGFzc2VtYmx5IG91dHB1dCB0byB2ZXJpZnkuCgpGaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgaWRlbnRpZnkgd2hpY2ggYXJjaGl0ZWN0dXJlcyB0aGlzIGFwcGxpZXMgdG8uIElzIHRoaXMgYSBjb21tb24gcm91dGluZSBvciBzb21ldGhpbmcgc3BlY2lmaWMgdG8gY2VydGFpbiBpbnN0cnVjdGlvbiBzZXRzPyBMZXQmIzM5O3MgdHJhY2UgaG93IGl0JiMzOTtzIGJlaW5nIGNhbGxlZCwgZmlndXJlIG91dCB0aGUgY2FsbGluZyBjb252ZW50aW9ucyBhbmQgYW55IHByZWNvbmRpdGlvbnMuIFdoYXQmIzM5O3MgaXQgZXhwZWN0aW5nIGFzIGlucHV0PyBNZW1vcnkgYWRkcmVzcywgcmVnaXN0ZXJzLCBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXM/IEFueSBwb3RlbnRpYWwgZm9yIGFsaWdubWVudCBpc3N1ZXMgb3IgY2FjaGUtbGluZSBlZmZlY3RzPyBJJiMzOTtsbCBhbHNvIGNoZWNrIGZvciBhbnkgaW5saW5lIGFzc2VtYmx5LCB0aGF0IGFsd2F5cyBncmFicyBteSBhdHRlbnRpb24uCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgY3JpdGljYWwgcGFydHM6IGluc3RydWN0aW9uIHBhdGNoaW5nLCBzZXR0aW5nIHVwIHRoZSB0cmFtcG9saW5lIGVudmlyb25tZW50LCBhbmQgdGhlIGFjdHVhbCBqdW1wIHRvIHRoZSBCUEYgcHJvZ3JhbS4gQXJlIHRoZXJlIGFueSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBoZXJlPyBBbnkgY2hlY2tzIGZvciB2YWxpZCBCUEYgY29kZSBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzPyBBbnkgcG90ZW50aWFsIGZvciBzaWRlLWNoYW5uZWwgYXR0YWNrcyBkdXJpbmcgdGhpcyBzZXR1cD8KCkZpbmFsbHksIGxldCYjMzk7cyBzZWUgaG93IGl0IHBsYXlzIHdpdGggdGhpbmdzIGxpa2Ugc3BlY3VsYXRpdmUgZXhlY3V0aW9uLiBUaGUgZ29hbCBpcyBhIGZhc3QsIHNlY3VyZSwgYW5kIHByZWRpY3RhYmxlIHBhdGggaW50byB0aGUgQlBGIHByb2dyYW0uIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBmdW5jdGlvbiBhY2hpZXZlcyB0aGVzZSBnb2Fscy4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgZGVzY3JpcHRpdmUgb3IgaWYgSSBuZWVkIHRvIGRpc2Fzc2VtYmxlIGFuZCBhbmFseXplIGZvciBteXNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI2NTA9c3RhdGljIGludCBhbGxvY19zdGFjayhzdHJ1Y3QgYnBmX3RyYW1wX2ppdCAqdGppdCwgc2l6ZV90IHNpemUpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNjY3LVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyNjY4OnN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI2NjktXHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX3RyYW1wX2ppdCAqdGppdCxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI5ODY9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5OTQtXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI5OTU6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgXHUwMDI2dGppdCwgbSwgZmxhZ3MsXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5OTYtXHRcdFx0XHRcdCAgICB0bm9kZXMsIG9yaWdfY2FsbCk7XG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0zMDAxPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLFxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAxMC1cdG1lbXNldChcdTAwMjZ0aml0LCAwLCBzaXplb2YodGppdCkpO1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDExOlx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIFx1MDAyNnRqaXQsIG0sIGZsYWdzLFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDEyLVx0XHRcdFx0XHQgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAyNC1cdHRqaXQuY29tbW9uLnByZ19idWYgPSBpbWFnZTtcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MzAyNTpcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCBcdTAwMjZ0aml0LCBtLCBmbGFncyxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAyNi1cdFx0XHRcdFx0ICAgIHRub2RlcywgZnVuY19hZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBCUEYgSklUIENvbXBpbGF0aW9uIGFuZCBUcmFtcG9saW5lcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGVudHJ5IHBvaW50cyBmb3IgQlBGIEpJVCBhbmQgdHJhbXBvbGluZXMuIEl0IHNlZW1zIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgYXJlIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gUmlnaHQsIHJpZ2h0LCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgc3BlY2lmaWNhbGx5IGZvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MsIGFuZCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBoYW5kbGVzIHRoZSB0cmFtcG9saW5lIHNldHVwLgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gaWYgZWl0aGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLiBBaCwgbm9wZSwgbmVpdGhlciBgYnBmX2ludF9qaXRfY29tcGlsZWAgbm9yIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFyZSBzdGF0aWMuIEFuZCB3aGlsZSBJJiMzOTttIGF0IGl0LCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpc24mIzM5O3Qgc3RhdGljIGVpdGhlci4KCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhIGJpdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgQlBGIEpJVCBzdXBwb3J0IG9uIHMzOTAuIGBDT05GSUdfQlBGX0pJVGAgaXMgb2J2aW91c2x5IGEgbXVzdC1oYXZlLiBBbmQsIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyBjb3JyZWN0bHksIGBDT05GSUdfQ0ZJYCBpcyBjcnVjaWFsIGZvciB0aGUgQ0ZJIGZlYXR1cmVzLiBMZXQmIzM5O3MgZGlnIGludG8gYGFyY2gvczM5MC9LY29uZmlnYCB0byBzZWUgaWYgYEFSQ0hfU1VQUE9SVFNfQ0ZJYCBpcyBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX1NVUFBPUlRTX0NGSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnPTc1PWNvbmZpZyBTMzkwXG4tLVxuYXJjaC9zMzkwL0tjb25maWctMTQ2LVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQVRPTUlDX1JNV1xuYXJjaC9zMzkwL0tjb25maWc6MTQ3Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ0ZJXG5hcmNoL3MzOTAvS2NvbmZpZy0xNDgtXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNjYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQ0ZJIGFuZCB0aGUgQlBGIEpJVCoqCgpBbHJpZ2h0LCB0aGUgYnVpbGQgY29uZmlnJiMzOTtzIGFsbG93aW5nIGBDT05GSUdfQ0ZJYCB0byBiZSBzZWxlY3RlZCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBnaXZlcyB1cyBzb21lIHBvdGVudGlhbCBjb21waWxlLXRpbWUgY2hlY2tzIGFuZCBzZWN1cml0eSBoYXJkZW5pbmcuIEJ1dCwgc2luY2UgSSYjMzk7bSBhbHJlYWR5IGluIHRoaXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBCUEYgSklUIGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCBpcyBgQ09ORklHX0JQRl9KSVRgIGFsc28gcmVxdWlyZWQgaW4gdGhpcyBidWlsZD8gVGhlcmUmIzM5O3MgbGlrZWx5IHNvbWUgaW50ZXJhY3Rpb24gb3IgZGVwZW5kZW5jeSB0byBrZWVwIGluIG1pbmQsIGFuZCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVpciBpbnRlcnBsYXkuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDA2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODAyCgkJCQkJCQlvdXRwdXQ6IDEzOQoJCQkJCQkJdGhvdWdodHM6IDkwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBzMzkwIGtDRkkgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGltcGxlbWVudGluZyBDRkkgKENvbnRyb2wgRmxvdyBJbnRlZ3JpdHkpIHNwZWNpZmljYWxseSBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLCBhbG9uZ3NpZGUgdGhlIEJQRiBKSVQgY29tcGlsZXIgKGBCUEZfSklUYCkuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGZvciBmdXp6aW5nLgoKTXkgZmlyc3QgdGhvdWdodCB3YXMgdG8gZXhhbWluZSBgYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jYCwgYnV0IHRoYXQmIzM5O3MgYSBob3N0IHRvb2wsIG5vdCBrZXJuZWwgY29kZSwgc28gaXQmIzM5O3Mgbm90IHJlbGV2YW50IGZvciBydW50aW1lIGZ1enppbmcuIEkgdGhlbiBjaGVja2VkIHRoZSBhc3NlbWJseSBmaWxlcyBgYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuU2AgYW5kIGBhcmNoL3MzOTAva2VybmVsL3RleHRfYW1vZGUzMS5TYC4gSSBzZWUgdGhlIGBTWU1fRlVOQ19TVEFSVGAgbWFjcm8gaXMgYmVpbmcgdXBkYXRlZCB0byBgU1lNX1RZUEVEX0ZVTkNfU1RBUlRgIHRvIGVuYWJsZSBDRkksIHdoaWNoIGlzIGxpa2VseSB3aGVyZSB0aGUgQ0ZJLXNwZWNpZmljIGNoYW5nZXMgYXJlLgoKVGhlIHByaW1hcnkgZnVuY3Rpb25hbCBjaGFuZ2VzIGZvciBmdXp6aW5nIHNlZW0gdG8gYmUgaW4gYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGF0IGRpcmVjdG9yeSBzb3VuZHMgcHJvbWlzaW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBib3RoIHN0YW5kYXJkIEJQRiBKSVQgYW5kIHRyYW1wb2xpbmUgZW50cnkgcG9pbnRzLCB3aGljaCBhcmUgZ29vZCBjYW5kaWRhdGVzLiBJIHdhbnRlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGluZGVlZCB0aGUgcmlnaHQgb25lcywgYW5kIGJhc2VkIG9uIHRoZWlyIG5hbWVzLCBJJiMzOTttIGNvbWZvcnRhYmxlIHRoYXQgdGhleSBhcmUuCgpOZXh0LCBJIGxvb2tlZCBmb3IgZGVwZW5kZW5jaWVzIG9uIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCB3aXRoaW4gYGFyY2gvczM5MC9rZXJuZWwvbWNvdW50LlNgLCB3aGVyZSB0aGUgY29kZSB1c2VzIHRoZSB0eXBlZCBmdW5jdGlvbiBzdGFydCwgYnV0IHRoYXQmIzM5O3MganVzdCBhZGRpbmcgdGhlIENGSSB0eXBlIGhhc2hlcyB0byB0aGUgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIG5vdCBhIHByaW1hcnkgdGFyZ2V0LgoKSSYjMzk7dmUgZGV0ZXJtaW5lZCB0aGF0IGBDRklgIGFuZCBgQlBGX0pJVGAgYXJlIHRoZSByZWxldmFudCBjb25maWdzIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFyZSB0aGUgcmVsZXZhbnQgc3ltYm9scyB0byBmb2N1cyBvbi4KClRoZW4gSSByZWFsaXplZCBhIHBvdGVudGlhbCBpc3N1ZTogYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIHZlcnkgY29tbW9uIGZvciBCUEYgSklULiBJcyBpdCBhIGhvdC1wYXRoPyBObywgaXQgaXMgY2FsbGVkIHdoZW4gYSBCUEYgcHJvZ3JhbSBpcyBsb2FkZWQsIHdoaWNoIGlzIGNvbnRyb2wtcGF0aCwgYW5kIHNvIGlzIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLgoKSSBkb3VibGUtY2hlY2tlZCBgYXJjaC9LY29uZmlnYCB0byBjb25maXJtIHRoYXQgYENGSWAgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbi4gSSBjYW4gY29uZmlybSBpdCYjMzk7cyB0aGUgcHJpbWFyeSBjb25maWcgYXMgYENGSV9DTEFOR2AgZGVmYXVsdHMgdG8gYENGSWAuCgpUaGUgcGF0Y2ggaW1wbGVtZW50cyBrQ0ZJIGZvciBzMzkwLCBtb2RpZnlpbmcgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBLQ0ZJIGhhc2hlcyBhbmQgdXBkYXRpbmcgYXNzZW1ibHkgZnVuY3Rpb25zIHRvIHVzZSB0eXBlZCBmdW5jdGlvbiBtYWNyb3MuIFRoZSBCUEYgSklUIGNoYW5nZXMgb2NjdXIgd2hlbiBCUEYgcHJvZ3JhbXMgYXJlIGxvYWRlZCBvciB0cmFtcG9saW5lcyBhcmUgYXR0YWNoZWQuCgpTbywgaGVyZSYjMzk7cyBteSBzdHJhdGVneToKCiogICBDb25maWdzOiBgQ0ZJYCwgYEJQRl9KSVRgLgoqICAgU3ltYm9sczogYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4KCldoaWxlIGBicGZfaW50X2ppdF9jb21waWxlYCAqaXMqIGFscmVhZHkgZnV6emVkIGJ5IHN5emthbGxlciwgZm9jdXNpbmcgb24gaXQgd2l0aCBgQ0ZJYCBlbmFibGVkIHdpbGwgc3BlY2lmaWNhbGx5IHRlc3QgdGhlIG5ldyBLQ0ZJIGVtaXNzaW9uIGxvZ2ljIG9uIHMzOTAuIEkgY2FuIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGSSYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSkgc3VwcG9ydCBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byBlbWl0IEtDRkkgaGFzaGVzIGZvciBCUEYgcHJvZ3JhbXMgYW5kIHRyYW1wb2xpbmVzLCBhbmQgdXBkYXRlcyBhc3NlbWJseSBmdW5jdGlvbnMgdG8gdXNlIHR5cGVkIGZ1bmN0aW9uIG1hY3Jvcy4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHdoZW4gQlBGIHByb2dyYW1zIGFyZSBsb2FkZWQgb3IgdHJhbXBvbGluZXMgYXJlIGF0dGFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkkmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgS2VybmVsIENvbnRyb2wgRmxvdyBJbnRlZ3JpdHkgKGtDRkkpIHN1cHBvcnQgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBLQ0ZJIGhhc2hlcyBmb3IgQlBGIHByb2dyYW1zIGFuZCB0cmFtcG9saW5lcywgYW5kIHVwZGF0ZXMgYXNzZW1ibHkgZnVuY3Rpb25zIHRvIHVzZSB0eXBlZCBmdW5jdGlvbiBtYWNyb3MuIFRoZSBCUEYgSklUIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCB3aGVuIEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkIG9yIHRyYW1wb2xpbmVzIGFyZSBhdHRhY2hlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA2OjQxOjU3LjA0MzM0NDA0M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDMxOTkxNDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGSVwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgS2VybmVsIENvbnRyb2wgRmxvdyBJbnRlZ3JpdHkgKGtDRkkpIHN1cHBvcnQgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBLQ0ZJIGhhc2hlcyBmb3IgQlBGIHByb2dyYW1zIGFuZCB0cmFtcG9saW5lcywgYW5kIHVwZGF0ZXMgYXNzZW1ibHkgZnVuY3Rpb25zIHRvIHVzZSB0eXBlZCBmdW5jdGlvbiBtYWNyb3MuIFRoZSBCUEYgSklUIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCB3aGVuIEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkIG9yIHRyYW1wb2xpbmVzIGFyZSBhdHRhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDE6NTcuMDQzMzUwODgzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA1NzM1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2OTg0YWI4NTQ0ZDMyM2VjOGE1YTgyMmM1NzUxNzkxMGVkYWIyOGI0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDI4IDA2OjQxOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcXG5pbmRleCA4NDQwNGU2Nzc4ZDUwNC4uZWM5NjU5NWNhZTM5ZjAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL0tjb25maWdcXG4rKysgYi9hcmNoL3MzOTAvS2NvbmZpZ1xcbkBAIC0xNDQsNiArMTQ0LDcgQEAgY29uZmlnIFMzOTBcXG4gXFx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFxuIFxcdHNlbGVjdCBBUkNIX1NUQUNLV0FMS1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19BVE9NSUNfUk1XXFxuK1xcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSVxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0NcXG4gXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0lOVDEyOCBpZiBDQ19IQVNfSU5UMTI4IFxcdTAwMjZcXHUwMDI2IENDX0lTX0NMQU5HXFxuQEAgLTE1MSw2ICsxNTIsNyBAQCBjb25maWcgUzM5MFxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbitcXHRzZWxlY3QgQVJDSF9VU0VTX0NGSV9HRU5FUklDX0xMVk1fUEFTUyBpZiBDQ19JU19DTEFOR1xcbiBcXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxcbiBcXHRzZWxlY3QgQVJDSF9VU0VfQ01QWENIR19MT0NLUkVGXFxuIFxcdHNlbGVjdCBBUkNIX1VTRV9TWU1fQU5OT1RBVElPTlNcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NmaS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NmaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOWFmMmM3Y2I3MGNhN2FcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NmaS5oXFxuQEAgLTAsMCArMSw3IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKyNpZm5kZWYgX0FTTV9TMzkwX0NGSV9IXFxuKyNkZWZpbmUgX0FTTV9TMzkwX0NGSV9IXFxuK1xcbisjZGVmaW5lIF9fYnBmY2FsbFxcbitcXG4rI2VuZGlmIC8qIF9BU01fUzM5MF9DRklfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuU1xcbmluZGV4IDFmZWMzNzBmZWNmNDgxLi42YmM0NGM3Njc2NDJlNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TXFxuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuU1xcbkBAIC00LDYgKzQsNyBAQFxcbiAgKlxcbiAgKi9cXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jZmlfdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbmthZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9hc20tb2Zmc2V0cy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2Z0cmFjZS5oXFx1MDAzZVxcbkBAIC0zNCwxMCArMzUsMTYgQEBcXG4gXFxuIFxcdC5zZWN0aW9uIC5rcHJvYmVzLnRleHQsIFxcXCJheFxcXCJcXG4gXFxuLVNZTV9GVU5DX1NUQVJUKGZ0cmFjZV9zdHViKVxcbitTWU1fVFlQRURfRlVOQ19TVEFSVChmdHJhY2Vfc3R1YilcXG4gXFx0QlJfRVhcXHQlcjE0XFxuIFNZTV9GVU5DX0VORChmdHJhY2Vfc3R1YilcXG4gXFxuKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxuK1NZTV9UWVBFRF9GVU5DX1NUQVJUKGZ0cmFjZV9zdHViX2dyYXBoKVxcbitcXHRCUl9FWFxcdCVyMTRcXG4rU1lNX0ZVTkNfRU5EKGZ0cmFjZV9zdHViX2dyYXBoKVxcbisjZW5kaWZcXG4rXFxuIFNZTV9DT0RFX1NUQVJUKGZ0cmFjZV9zdHViX2RpcmVjdF90cmFtcClcXG4gXFx0bGdyXFx0JXIxLCAlcjBcXG4gXFx0QlJfRVhcXHQlcjFcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuUyBiL2FyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlNcXG5pbmRleCAyNmYyOTgxYWEwOWUzMS4uZjAwN2Q4OTJkMGM1ZmQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuU1xcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlNcXG5AQCAtNSw2ICs1LDcgQEBcXG4gICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDE5XFxuICAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NmaV90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlua2FnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2FzbS1leHRhYmxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZXJybm8uaFxcdTAwM2VcXG5AQCAtMjYsNyArMjcsNyBAQFxcbiAvKlxcbiAgKiBpbnQgX2RpYWcxNF9hbW9kZTMxKHVuc2lnbmVkIGxvbmcgcngsIHVuc2lnbmVkIGxvbmcgcnkxLCB1bnNpZ25lZCBsb25nIHN1YmNvZGUpXFxuICAqL1xcbi1TWU1fRlVOQ19TVEFSVChfZGlhZzE0X2Ftb2RlMzEpXFxuK1NZTV9UWVBFRF9GVU5DX1NUQVJUKF9kaWFnMTRfYW1vZGUzMSlcXG4gXFx0bGdyXFx0JXIxLCVyMlxcbiBcXHRsZ3JcXHQlcjIsJXIzXFxuIFxcdGxnclxcdCVyMywlcjRcXG5AQCAtNDYsNyArNDcsNyBAQCBTWU1fRlVOQ19FTkQoX2RpYWcxNF9hbW9kZTMxKVxcbiAvKlxcbiAgKiBpbnQgX2RpYWcyMTBfYW1vZGUzMShzdHJ1Y3QgZGlhZzIxMCAqYWRkcilcXG4gICovXFxuLVNZTV9GVU5DX1NUQVJUKF9kaWFnMjEwX2Ftb2RlMzEpXFxuK1NZTV9UWVBFRF9GVU5DX1NUQVJUKF9kaWFnMjEwX2Ftb2RlMzEpXFxuIFxcdGxnclxcdCVyMSwlcjJcXG4gXFx0bGhpXFx0JXIyLC0xXFxuIFxcdHNhbTMxXFxuQEAgLTY0LDcgKzY1LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMjEwX2Ftb2RlMzEpXFxuIC8qXFxuICAqIGludCBkaWFnOGMoc3RydWN0IGRpYWc4YyAqYWRkciwgc3RydWN0IGNjd19kZXZfaWQgKmRldm5vLCBzaXplX3QgbGVuKVxcbiAqL1xcbi1TWU1fRlVOQ19TVEFSVChfZGlhZzhjX2Ftb2RlMzEpXFxuK1NZTV9UWVBFRF9GVU5DX1NUQVJUKF9kaWFnOGNfYW1vZGUzMSlcXG4gXFx0bGxnZlxcdCVyMywwKCVyMylcXG4gXFx0c2FtMzFcXG4gXFx0ZGlhZ1xcdCVyMiwlcjQsMHg4Y1xcbkBAIC03Nyw3ICs3OCw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzhjX2Ftb2RlMzEpXFxuIC8qXFxuICAqIGludCBfZGlhZzI2Y19hbW9kZTMxKHZvaWQgKnJlcSwgdm9pZCAqcmVzcCwgZW51bSBkaWFnMjZjX3NjIHN1YmNvZGUpXFxuICAqL1xcbi1TWU1fRlVOQ19TVEFSVChfZGlhZzI2Y19hbW9kZTMxKVxcbitTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzI2Y19hbW9kZTMxKVxcbiBcXHRsZ2hpXFx0JXI1LC1FT1BOT1RTVVBQXFxuIFxcdHNhbTMxXFxuIFxcdGRpYWdcXHQlcjIsJXI0LDB4MjZjXFxuQEAgLTkxLDcgKzkyLDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMjZjX2Ftb2RlMzEpXFxuIC8qXFxuICAqIHZvaWQgX2RpYWcwY19hbW9kZTMxKHVuc2lnbmVkIGxvbmcgcngpXFxuICAqL1xcbi1TWU1fRlVOQ19TVEFSVChfZGlhZzBjX2Ftb2RlMzEpXFxuK1NZTV9UWVBFRF9GVU5DX1NUQVJUKF9kaWFnMGNfYW1vZGUzMSlcXG4gXFx0c2FtMzFcXG4gXFx0ZGlhZ1xcdCVyMiwlcjIsMHgwY1xcbiBcXHRzYW02NFxcbkBAIC0xMDMsNyArMTA0LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMGNfYW1vZGUzMSlcXG4gICpcXG4gICogQ2FsbHMgZGlhZyAzMDggc3ViY29kZSAxIGFuZCBjb250aW51ZXMgZXhlY3V0aW9uXFxuICAqL1xcbi1TWU1fRlVOQ19TVEFSVChfZGlhZzMwOF9yZXNldF9hbW9kZTMxKVxcbitTWU1fVFlQRURfRlVOQ19TVEFSVChfZGlhZzMwOF9yZXNldF9hbW9kZTMxKVxcbiBcXHRsYXJsXFx0JXI0LGN0bHJlZ3NcXHRcXHQjIFNhdmUgY29udHJvbCByZWdpc3RlcnNcXG4gXFx0c3RjdGdcXHQlYzAsJWMxNSwwKCVyNClcXG4gXFx0bGdcXHQlcjIsMCglcjQpXFx0XFx0IyBEaXNhYmxlIGxvd2NvcmUgcHJvdGVjdGlvblxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IDMxNzQ5YzAzNjJjYTIzLi43ZjQ1YzEwNjQ0NGRlNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0yMSw2ICsyMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWx0ZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2ZpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vY2FjaGVmbHVzaC5oXFx1MDAzZVxcbkBAIC0zNTYsNiArMzU3LDE5IEBAIHN0YXRpYyB2b2lkIGVtaXQ2X3BjcmVsX3JpbGMoc3RydWN0IGJwZl9qaXQgKmppdCwgdTMyIG9wLCB1OCBtYXNrLCBzNjQgcGNyZWwpXFxuIFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIH0pXFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF91MzJfZGF0YShjb25zdCB1MzIgZGF0YSwgc3RydWN0IGJwZl9qaXQgKmppdClcXG4re1xcbitcXHRpZiAoaml0LVxcdTAwM2VwcmdfYnVmKVxcbitcXHRcXHQqKHUzMiAqKShqaXQtXFx1MDAzZXByZ19idWYgKyBqaXQtXFx1MDAzZXByZykgPSBkYXRhO1xcbitcXHRqaXQtXFx1MDAzZXByZyArPSA0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF9rY2ZpKHUzMiBoYXNoLCBzdHJ1Y3QgYnBmX2ppdCAqaml0KVxcbit7XFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19DRkkpKVxcbitcXHRcXHRlbWl0X3UzMl9kYXRhKGhhc2gsIGppdCk7XFxuK31cXG4rXFxuIC8qXFxuICAqIFJldHVybiB3aGV0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFRoZSBmaXJzdCBwYXNzIGlzIHNwZWNpYWwsIHNpbmNlIHdlXFxuICAqIGRvbid0IGtub3cgYW55IHNpemVzIHlldCwgYW5kIHRodXMgbXVzdCBiZSBjb25zZXJ2YXRpdmUuXFxuQEAgLTU5Nyw2ICs2MTEsOCBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnApXFxuIHtcXG4gXFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgcHJvZ19mcmFtZSkgIT0gU1RBQ0tfRlJBTUVfT1ZFUkhFQUQpO1xcbiBcXG4rXFx0ZW1pdF9rY2ZpKGJwZl9pc19zdWJwcm9nKGZwKSA/IGNmaV9icGZfc3VicHJvZ19oYXNoIDogY2ZpX2JwZl9oYXNoLCBqaXQpO1xcbitcXG4gXFx0LyogTm8tb3AgZm9yIGhvdHBhdGNoaW5nICovXFxuIFxcdC8qIGJyY2wgMCxwcm9sb2d1ZV9wbHQgKi9cXG4gXFx0RU1JVDZfUENSRUxfUklMQygweGMwMDQwMDAwLCAwLCBqaXQtXFx1MDAzZXByb2xvZ3VlX3BsdCk7XFxuQEAgLTYxNiw3ICs2MzIsNyBAQCBzdGF0aWMgdm9pZCBicGZfaml0X3Byb2xvZ3VlKHN0cnVjdCBicGZfaml0ICpqaXQsIHN0cnVjdCBicGZfcHJvZyAqZnApXFxuIFxcdFxcdGJwZl9za2lwKGppdCwgNik7XFxuIFxcdH1cXG4gXFx0LyogVGFpbCBjYWxscyBoYXZlIHRvIHNraXAgYWJvdmUgaW5pdGlhbGl6YXRpb24gKi9cXG4tXFx0aml0LVxcdTAwM2V0YWlsX2NhbGxfc3RhcnQgPSBqaXQtXFx1MDAzZXByZztcXG4rXFx0aml0LVxcdTAwM2V0YWlsX2NhbGxfc3RhcnQgPSBqaXQtXFx1MDAzZXByZyAtIGNmaV9nZXRfb2Zmc2V0KCk7XFxuIFxcdGlmIChmcC1cXHUwMDNlYXV4LVxcdTAwM2VleGNlcHRpb25fY2IpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogU3dpdGNoIHN0YWNrLCB0aGUgbmV3IGFkZHJlc3MgaXMgaW4gdGhlIDJuZCBwYXJhbWV0ZXIuXFxuQEAgLTI0MDEsMTEgKzI0MTcsMTMgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJcXG4gXFx0XFx0aml0X2RhdGEtXFx1MDAzZWN0eCA9IGppdDtcXG4gXFx0XFx0aml0X2RhdGEtXFx1MDAzZXBhc3MgPSBwYXNzO1xcbiBcXHR9XFxuLVxcdGZwLVxcdTAwM2VicGZfZnVuYyA9ICh2b2lkICopIGppdC5wcmdfYnVmO1xcbitcXHRmcC1cXHUwMDNlYnBmX2Z1bmMgPSAodm9pZCAqKWppdC5wcmdfYnVmICsgY2ZpX2dldF9vZmZzZXQoKTtcXG4gXFx0ZnAtXFx1MDAzZWppdGVkID0gMTtcXG4tXFx0ZnAtXFx1MDAzZWppdGVkX2xlbiA9IGppdC5zaXplO1xcbitcXHRmcC1cXHUwMDNlaml0ZWRfbGVuID0gaml0LnNpemUgLSBjZmlfZ2V0X29mZnNldCgpO1xcbiBcXG4gXFx0aWYgKCFmcC1cXHUwMDNlaXNfZnVuYyB8fCBleHRyYV9wYXNzKSB7XFxuK1xcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgZnAtXFx1MDAzZWxlbjsgaSsrKVxcbitcXHRcXHRcXHRqaXQuYWRkcnNbaV0gLT0gY2ZpX2dldF9vZmZzZXQoKTtcXG4gXFx0XFx0YnBmX3Byb2dfZmlsbF9qaXRlZF9saW5mbyhmcCwgaml0LmFkZHJzICsgMSk7XFxuIGZyZWVfYWRkcnM6XFxuIFxcdFxcdGt2ZnJlZShqaXQuYWRkcnMpO1xcbkBAIC0yNjcxLDggKzI2ODksMTAgQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4gXFx0XFx0cmV0dXJuIC1FTk9UU1VQUDtcXG4gXFxuIFxcdC8qIFJldHVybiB0byAlcjE0IGluIHRoZSBzdHJ1Y3Rfb3BzIGNhc2UuICovXFxuLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKVxcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkge1xcbiBcXHRcXHRmbGFncyB8PSBCUEZfVFJBTVBfRl9TS0lQX0ZSQU1FO1xcbitcXHRcXHRlbWl0X2tjZmkoY2ZpX2dldF9mdW5jX2hhc2goZnVuY19hZGRyKSwgaml0KTtcXG4rXFx0fVxcbiBcXG4gXFx0LypcXG4gXFx0ICogQ29tcHV0ZSBob3cgbWFueSBhcmd1bWVudHMgd2UgbmVlZCB0byBwYXNzIHRvIEJQRiBwcm9ncmFtcy5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jIGIvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jXFxuaW5kZXggMzBhNzMyYzgwOGYzNWUuLjcyMTc4ZGM5MGE0Y2Y4IDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC90b29scy9yZWxvY3MuY1xcbisrKyBiL2FyY2gvczM5MC90b29scy9yZWxvY3MuY1xcbkBAIC00MSw2ICs0MSwxMCBAQFxcbiBzdGF0aWMgRWxmX0VoZHJcXHRcXHRlaGRyO1xcbiBzdGF0aWMgdW5zaWduZWQgbG9uZ1xcdHNobnVtO1xcbiBzdGF0aWMgdW5zaWduZWQgaW50XFx0c2hzdHJuZHg7XFxuK3N0YXRpYyB1bnNpZ25lZCBpbnRcXHRzaHN5bXRhYm5keDtcXG4rc3RhdGljIHVuc2lnbmVkIGludFxcdHNoeHN5bXRhYm5keDtcXG4rXFxuK3N0YXRpYyBpbnQgc3ltX2luZGV4KEVsZl9TeW0gKnN5bSk7XFxuIFxcbiBzdHJ1Y3QgcmVsb2NzIHtcXG4gXFx0dWludDMyX3RcXHQqb2Zmc2V0O1xcbkBAIC01NCwxMSArNTgsNDAgQEAgc3RhdGljIHN0cnVjdCByZWxvY3MgcmVsb2NzNjQ7XFxuIHN0cnVjdCBzZWN0aW9uIHtcXG4gXFx0RWxmX1NoZHJcXHRzaGRyO1xcbiBcXHRzdHJ1Y3Qgc2VjdGlvblxcdCpsaW5rO1xcbitcXHRFbGZfU3ltXFx0XFx0KnN5bXRhYjtcXG4rXFx0RWxmMzJfV29yZFxcdCp4c3ltdGFiO1xcbiBcXHRFbGZfUmVsXFx0XFx0KnJlbHRhYjtcXG4rXFx0Y2hhclxcdFxcdCpzdHJ0YWI7XFxuIH07XFxuIFxcbiBzdGF0aWMgc3RydWN0IHNlY3Rpb24gKnNlY3M7XFxuIFxcbitzdGF0aWMgY29uc3QgY2hhciAqc2VjX25hbWUodW5zaWduZWQgc2huZHgpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqc2VjX3N0cnRhYjtcXG4rXFx0Y29uc3QgY2hhciAqbmFtZSA9IFxcXCJcXHUwMDNjbm9uYW1lXFx1MDAzZVxcXCI7XFxuK1xcdHNlY19zdHJ0YWIgPSBzZWNzW3Noc3RybmR4XS5zdHJ0YWI7XFxuK1xcbitcXHRpZiAoc2huZHggXFx1MDAzYyBzaG51bSlcXG4rXFx0XFx0bmFtZSA9IHNlY19zdHJ0YWIgKyBzZWNzW3NobmR4XS5zaGRyLnNoX25hbWU7XFxuK1xcdGVsc2UgaWYgKHNobmR4ID09IFNITl9BQlMpXFxuK1xcdFxcdG5hbWUgPSBcXFwiQUJTT0xVVEVcXFwiO1xcbitcXHRlbHNlIGlmIChzaG5keCA9PSBTSE5fQ09NTU9OKVxcbitcXHRcXHRuYW1lID0gXFxcIkNPTU1PTlxcXCI7XFxuK1xcdHJldHVybiBuYW1lO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciAqc3ltX25hbWUoY29uc3QgY2hhciAqc3ltX3N0cnRhYiwgRWxmX1N5bSAqc3ltKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcbitcXHRpZiAoc3ltLVxcdTAwM2VzdF9uYW1lKVxcbitcXHRcXHRuYW1lID0gc3ltX3N0cnRhYiArIHN5bS1cXHUwMDNlc3RfbmFtZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRuYW1lID0gc2VjX25hbWUoc3ltX2luZGV4KHN5bSkpO1xcbitcXHRyZXR1cm4gbmFtZTtcXG4rfVxcbitcXG4gI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTlxcbiAjZGVmaW5lIGxlMTZfdG9fY3B1KHZhbClcXHQodmFsKVxcbiAjZGVmaW5lIGxlMzJfdG9fY3B1KHZhbClcXHQodmFsKVxcbkBAIC0xMDUsNiArMTM4LDIzIEBAIHN0YXRpYyB1aW50NjRfdCBlbGY2NF90b19jcHUodWludDY0X3QgdmFsKVxcbiAjZGVmaW5lIGVsZl9vZmZfdG9fY3B1KHgpXFx0ZWxmNjRfdG9fY3B1KHgpXFxuICNkZWZpbmUgZWxmX3h3b3JkX3RvX2NwdSh4KVxcdGVsZjY0X3RvX2NwdSh4KVxcbiBcXG4rc3RhdGljIGludCBzeW1faW5kZXgoRWxmX1N5bSAqc3ltKVxcbit7XFxuK1xcdEVsZl9TeW0gKnN5bXRhYiA9IHNlY3Nbc2hzeW10YWJuZHhdLnN5bXRhYjtcXG4rXFx0RWxmMzJfV29yZCAqeHN5bXRhYiA9IHNlY3Nbc2h4c3ltdGFibmR4XS54c3ltdGFiO1xcbitcXHR1bnNpZ25lZCBsb25nIG9mZnNldDtcXG4rXFx0aW50IGluZGV4O1xcbitcXG4rXFx0aWYgKHN5bS1cXHUwMDNlc3Rfc2huZHggIT0gU0hOX1hJTkRFWClcXG4rXFx0XFx0cmV0dXJuIHN5bS1cXHUwMDNlc3Rfc2huZHg7XFxuK1xcbitcXHQvKiBjYWxjdWxhdGUgb2Zmc2V0IG9mIHN5bSBmcm9tIGhlYWQgb2YgdGFibGUuICovXFxuK1xcdG9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXN5bSAtICh1bnNpZ25lZCBsb25nKXN5bXRhYjtcXG4rXFx0aW5kZXggPSBvZmZzZXQgLyBzaXplb2YoKnN5bSk7XFxuK1xcbitcXHRyZXR1cm4gZWxmMzJfdG9fY3B1KHhzeW10YWJbaW5kZXhdKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZGllKGNoYXIgKmZtdCwgLi4uKVxcbiB7XFxuIFxcdHZhX2xpc3QgYXA7XFxuQEAgLTIxNiw2ICsyNjYsODEgQEAgc3RhdGljIHZvaWQgcmVhZF9zaGRycyhGSUxFICpmcClcXG4gXFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJlYWRfc3RydGFicyhGSUxFICpmcClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzaG51bTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBzZWN0aW9uICpzZWMgPSBcXHUwMDI2c2Vjc1tpXTtcXG4rXFxuK1xcdFxcdGlmIChzZWMtXFx1MDAzZXNoZHIuc2hfdHlwZSAhPSBTSFRfU1RSVEFCKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNlYy1cXHUwMDNlc3RydGFiID0gbWFsbG9jKHNlYy1cXHUwMDNlc2hkci5zaF9zaXplKTtcXG4rXFx0XFx0aWYgKCFzZWMtXFx1MDAzZXN0cnRhYilcXG4rXFx0XFx0XFx0ZGllKFxcXCJtYWxsb2Mgb2YgJVxcXCIgRk1UIFxcXCIgYnl0ZXMgZm9yIHN0cnRhYiBmYWlsZWRcXFxcblxcXCIsIHNlYy1cXHUwMDNlc2hkci5zaF9zaXplKTtcXG4rXFxuK1xcdFxcdGlmIChmc2VlayhmcCwgc2VjLVxcdTAwM2VzaGRyLnNoX29mZnNldCwgU0VFS19TRVQpIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0ZGllKFxcXCJTZWVrIHRvICVcXFwiIEZNVCBcXFwiIGZhaWxlZDogJXNcXFxcblxcXCIsIHNlYy1cXHUwMDNlc2hkci5zaF9vZmZzZXQsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcbitcXHRcXHRpZiAoZnJlYWQoc2VjLVxcdTAwM2VzdHJ0YWIsIDEsIHNlYy1cXHUwMDNlc2hkci5zaF9zaXplLCBmcCkgIT0gc2VjLVxcdTAwM2VzaGRyLnNoX3NpemUpXFxuK1xcdFxcdFxcdGRpZShcXFwiQ2Fubm90IHJlYWQgc3ltYm9sIHRhYmxlOiAlc1xcXFxuXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByZWFkX3N5bXRhYnMoRklMRSAqZnApXFxuK3tcXG4rXFx0aW50IGksIGo7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2hudW07IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qgc2VjdGlvbiAqc2VjID0gXFx1MDAyNnNlY3NbaV07XFxuK1xcdFxcdGludCBudW1fc3ltcztcXG4rXFxuK1xcdFxcdHN3aXRjaCAoc2VjLVxcdTAwM2VzaGRyLnNoX3R5cGUpIHtcXG4rXFx0XFx0Y2FzZSBTSFRfU1lNVEFCX1NITkRYOlxcbitcXHRcXHRcXHRzZWMtXFx1MDAzZXhzeW10YWIgPSBtYWxsb2Moc2VjLVxcdTAwM2VzaGRyLnNoX3NpemUpO1xcbitcXHRcXHRcXHRpZiAoIXNlYy1cXHUwMDNleHN5bXRhYilcXG4rXFx0XFx0XFx0XFx0ZGllKFxcXCJtYWxsb2Mgb2YgJVxcXCIgRk1UIFxcXCIgYnl0ZXMgZm9yIHhzeW10YWIgZmFpbGVkXFxcXG5cXFwiLCBzZWMtXFx1MDAzZXNoZHIuc2hfc2l6ZSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoZnNlZWsoZnAsIHNlYy1cXHUwMDNlc2hkci5zaF9vZmZzZXQsIFNFRUtfU0VUKSBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGRpZShcXFwiU2VlayB0byAlXFxcIiBGTVQgXFxcIiBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBzZWMtXFx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBzdHJlcnJvcihlcnJubykpO1xcbitcXG4rXFx0XFx0XFx0aWYgKGZyZWFkKHNlYy1cXHUwMDNleHN5bXRhYiwgMSwgc2VjLVxcdTAwM2VzaGRyLnNoX3NpemUsIGZwKSAhPSBzZWMtXFx1MDAzZXNoZHIuc2hfc2l6ZSlcXG4rXFx0XFx0XFx0XFx0ZGllKFxcXCJDYW5ub3QgcmVhZCBleHRlbmRlZCBzeW1ib2wgdGFibGU6ICVzXFxcXG5cXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbitcXG4rXFx0XFx0XFx0c2h4c3ltdGFibmR4ID0gaTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRjYXNlIFNIVF9TWU1UQUI6XFxuK1xcdFxcdFxcdG51bV9zeW1zID0gc2VjLVxcdTAwM2VzaGRyLnNoX3NpemUgLyBzaXplb2YoRWxmX1N5bSk7XFxuK1xcbitcXHRcXHRcXHRzZWMtXFx1MDAzZXN5bXRhYiA9IG1hbGxvYyhzZWMtXFx1MDAzZXNoZHIuc2hfc2l6ZSk7XFxuK1xcdFxcdFxcdGlmICghc2VjLVxcdTAwM2VzeW10YWIpXFxuK1xcdFxcdFxcdFxcdGRpZShcXFwibWFsbG9jIG9mICVcXFwiIEZNVCBcXFwiIGJ5dGVzIGZvciBzeW10YWIgZmFpbGVkXFxcXG5cXFwiLCBzZWMtXFx1MDAzZXNoZHIuc2hfc2l6ZSk7XFxuK1xcbitcXHRcXHRcXHRpZiAoZnNlZWsoZnAsIHNlYy1cXHUwMDNlc2hkci5zaF9vZmZzZXQsIFNFRUtfU0VUKSBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGRpZShcXFwiU2VlayB0byAlXFxcIiBGTVQgXFxcIiBmYWlsZWQ6ICVzXFxcXG5cXFwiLCBzZWMtXFx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBzdHJlcnJvcihlcnJubykpO1xcbitcXG4rXFx0XFx0XFx0aWYgKGZyZWFkKHNlYy1cXHUwMDNlc3ltdGFiLCAxLCBzZWMtXFx1MDAzZXNoZHIuc2hfc2l6ZSwgZnApICE9IHNlYy1cXHUwMDNlc2hkci5zaF9zaXplKVxcbitcXHRcXHRcXHRcXHRkaWUoXFxcIkNhbm5vdCByZWFkIHN5bWJvbCB0YWJsZTogJXNcXFxcblxcXCIsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcbitcXHRcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgbnVtX3N5bXM7IGorKykge1xcbitcXHRcXHRcXHRcXHRFbGZfU3ltICpzeW0gPSBcXHUwMDI2c2VjLVxcdTAwM2VzeW10YWJbal07XFxuK1xcbitcXHRcXHRcXHRcXHRzeW0tXFx1MDAzZXN0X25hbWUgID0gZWxmX3dvcmRfdG9fY3B1KHN5bS1cXHUwMDNlc3RfbmFtZSk7XFxuK1xcdFxcdFxcdFxcdHN5bS1cXHUwMDNlc3RfdmFsdWUgPSBlbGZfYWRkcl90b19jcHUoc3ltLVxcdTAwM2VzdF92YWx1ZSk7XFxuK1xcdFxcdFxcdFxcdHN5bS1cXHUwMDNlc3Rfc2l6ZSAgPSBlbGZfeHdvcmRfdG9fY3B1KHN5bS1cXHUwMDNlc3Rfc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdHN5bS1cXHUwMDNlc3Rfc2huZHggPSBlbGZfaGFsZl90b19jcHUoc3ltLVxcdTAwM2VzdF9zaG5keCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0c2hzeW10YWJuZHggPSBpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcmVhZF9yZWxvY3MoRklMRSAqZnApXFxuIHtcXG4gXFx0aW50IGksIGo7XFxuQEAgLTI2Myw3ICszODgsOCBAQCBzdGF0aWMgdm9pZCBhZGRfcmVsb2Moc3RydWN0IHJlbG9jcyAqciwgdWludDMyX3Qgb2Zmc2V0KVxcbiBcXHRyLVxcdTAwM2VvZmZzZXRbci1cXHUwMDNlY291bnQrK10gPSBvZmZzZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZG9fcmVsb2Moc3RydWN0IHNlY3Rpb24gKnNlYywgRWxmX1JlbCAqcmVsKVxcbitzdGF0aWMgaW50IGRvX3JlbG9jKHN0cnVjdCBzZWN0aW9uICpzZWMsIEVsZl9SZWwgKnJlbCwgRWxmVyhTeW0pICpzeW0sXFxuK1xcdFxcdCAgICBjb25zdCBjaGFyICpzeW1uYW1lKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCByX3R5cGUgPSBFTEY2NF9SX1RZUEUocmVsLVxcdTAwM2VyX2luZm8pO1xcbiBcXHRFbGZXKEFkZHIpIG9mZnNldCA9IHJlbC1cXHUwMDNlcl9vZmZzZXQ7XFxuQEAgLTI3OSw2ICs0MDUsMjIgQEAgc3RhdGljIGludCBkb19yZWxvYyhzdHJ1Y3Qgc2VjdGlvbiAqc2VjLCBFbGZfUmVsICpyZWwpXFxuIFxcdGNhc2UgUl8zOTBfR09UUENEQkw6XFxuIFxcdGNhc2UgUl8zOTBfR09UT0ZGNjQ6XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJfMzkwXzMyOiB7XFxuK1xcdFxcdHN0YXRpYyBjb25zdCBjaGFyIGtjZmlwZnhbXSA9IFxcXCJfX2tjZmlfdHlwZWlkX1xcXCI7XFxuK1xcbitcXHRcXHRpZiAoc3ltLVxcdTAwM2VzdF9zaG5keCAhPSBTSE5fQUJTKVxcbitcXHRcXHRcXHRkaWUoXFxcIlVuc3VwcG9ydGVkIHJlbG9jYXRpb24gdHlwZTogJWRcXFxcblxcXCIsIHJfdHlwZSk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFN5bWJvbHMgd2l0aCBfX2tjZmlfdHlwZWlkXyBwcmVmaXggaGF2ZSBjb25zdGFudCB2YWx1ZXMsXFxuK1xcdFxcdCAqIHdoaWNoIGRvIG5vdCBjaGFuZ2UgaWYgYnpJbWFnZSBpcyBsb2FkZWQgYXQgYSBkaWZmZXJlbnRcXG4rXFx0XFx0ICogcGh5c2ljYWwgYWRkcmVzcyB0aGFuIHRoZSBhZGRyZXNzIGZvciB3aGljaCBpdCBoYXMgYmVlblxcbitcXHRcXHQgKiBjb21waWxlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghc3RybmNtcChrY2ZpcGZ4LCBzeW1uYW1lLCBzaXplb2Yoa2NmaXBmeCkgLSAxKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRpZShcXFwiSW52YWxpZCBhYnNvbHV0ZSBSXzM5MF8zMiByZWxvY2F0aW9uOiAlc1xcXFxuXFxcIiwgc3ltbmFtZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcdGNhc2UgUl8zOTBfNjQ6XFxuIFxcdFxcdGFkZF9yZWxvYyhcXHUwMDI2cmVsb2NzNjQsIG9mZnNldCk7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0yOTYsMjEgKzQzOCwyOSBAQCBzdGF0aWMgdm9pZCB3YWxrX3JlbG9jcyh2b2lkKVxcbiBcXG4gXFx0LyogV2FsayB0aHJvdWdoIHRoZSByZWxvY2F0aW9ucyAqL1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2hudW07IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3Qgc2VjdGlvbiAqc2VjX2FwcGxpZXM7XFxuK1xcdFxcdGNoYXIgKnN5bV9zdHJ0YWI7XFxuK1xcdFxcdEVsZl9TeW0gKnNoX3N5bXRhYjtcXG4rXFx0XFx0c3RydWN0IHNlY3Rpb24gKnNlY19hcHBsaWVzLCAqc2VjX3N5bXRhYjtcXG4gXFx0XFx0aW50IGo7XFxuIFxcdFxcdHN0cnVjdCBzZWN0aW9uICpzZWMgPSBcXHUwMDI2c2Vjc1tpXTtcXG4gXFxuIFxcdFxcdGlmIChzZWMtXFx1MDAzZXNoZHIuc2hfdHlwZSAhPSBTSFRfUkVMX1RZUEUpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0c2VjX3N5bXRhYiAgPSBzZWMtXFx1MDAzZWxpbms7XFxuIFxcdFxcdHNlY19hcHBsaWVzID0gXFx1MDAyNnNlY3Nbc2VjLVxcdTAwM2VzaGRyLnNoX2luZm9dO1xcbiBcXHRcXHRpZiAoIShzZWNfYXBwbGllcy1cXHUwMDNlc2hkci5zaF9mbGFncyBcXHUwMDI2IFNIRl9BTExPQykpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0c2hfc3ltdGFiID0gc2VjX3N5bXRhYi1cXHUwMDNlc3ltdGFiO1xcbitcXHRcXHRzeW1fc3RydGFiID0gc2VjX3N5bXRhYi1cXHUwMDNlbGluay1cXHUwMDNlc3RydGFiO1xcbitcXG4gXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIHNlYy1cXHUwMDNlc2hkci5zaF9zaXplIC8gc2l6ZW9mKEVsZl9SZWwpOyBqKyspIHtcXG4gXFx0XFx0XFx0RWxmX1JlbCAqcmVsID0gXFx1MDAyNnNlYy1cXHUwMDNlcmVsdGFiW2pdO1xcbitcXHRcXHRcXHRFbGZfU3ltICpzeW0gPSBcXHUwMDI2c2hfc3ltdGFiW0VMRl9SX1NZTShyZWwtXFx1MDAzZXJfaW5mbyldO1xcbitcXHRcXHRcXHRjb25zdCBjaGFyICpzeW1uYW1lID0gc3ltX25hbWUoc3ltX3N0cnRhYiwgc3ltKTtcXG4gXFxuLVxcdFxcdFxcdGRvX3JlbG9jKHNlYywgcmVsKTtcXG4rXFx0XFx0XFx0ZG9fcmVsb2Moc2VjLCByZWwsIHN5bSwgc3ltbmFtZSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiB9XFxuQEAgLTM0OSw2ICs0OTksOCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzKEZJTEUgKmZwKVxcbiB7XFxuIFxcdHJlYWRfZWhkcihmcCk7XFxuIFxcdHJlYWRfc2hkcnMoZnApO1xcbitcXHRyZWFkX3N0cnRhYnMoZnApO1xcbitcXHRyZWFkX3N5bXRhYnMoZnApO1xcbiBcXHRyZWFkX3JlbG9jcyhmcCk7XFxuIFxcdGVtaXRfcmVsb2NzKCk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDE6NTcuNjI0OTIzMzMzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTM0NTA0MDEyMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZJXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSkgc3VwcG9ydCBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byBlbWl0IEtDRkkgaGFzaGVzIGZvciBCUEYgcHJvZ3JhbXMgYW5kIHRyYW1wb2xpbmVzLCBhbmQgdXBkYXRlcyBhc3NlbWJseSBmdW5jdGlvbnMgdG8gdXNlIHR5cGVkIGZ1bmN0aW9uIG1hY3Jvcy4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHdoZW4gQlBGIHByb2dyYW1zIGFyZSBsb2FkZWQgb3IgdHJhbXBvbGluZXMgYXJlIGF0dGFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2OTg0YWI4NTQ0ZDMyM2VjOGE1YTgyMmM1NzUxNzkxMGVkYWIyOGI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDY6NDE6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXG5pbmRleCA4NDQwNGU2Nzc4ZDUwNC4uZWM5NjU5NWNhZTM5ZjAgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xuKysrIGIvYXJjaC9zMzkwL0tjb25maWdcbkBAIC0xNDQsNiArMTQ0LDcgQEAgY29uZmlnIFMzOTBcbiBcdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxuIFx0c2VsZWN0IEFSQ0hfU1RBQ0tXQUxLXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19BVE9NSUNfUk1XXG4rXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19DRklcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQ1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19JTlQxMjggaWYgQ0NfSEFTX0lOVDEyOCBcdTAwMjZcdTAwMjYgQ0NfSVNfQ0xBTkdcbkBAIC0xNTEsNiArMTUyLDcgQEAgY29uZmlnIFMzOTBcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbitcdHNlbGVjdCBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTIGlmIENDX0lTX0NMQU5HXG4gXHRzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUFxuIFx0c2VsZWN0IEFSQ0hfVVNFX0NNUFhDSEdfTE9DS1JFRlxuIFx0c2VsZWN0IEFSQ0hfVVNFX1NZTV9BTk5PVEFUSU9OU1xuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jZmkuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jZmkuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45YWYyYzdjYjcwY2E3YVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NmaS5oXG5AQCAtMCwwICsxLDcgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyNpZm5kZWYgX0FTTV9TMzkwX0NGSV9IXG4rI2RlZmluZSBfQVNNX1MzOTBfQ0ZJX0hcbitcbisjZGVmaW5lIF9fYnBmY2FsbFxuK1xuKyNlbmRpZiAvKiBfQVNNX1MzOTBfQ0ZJX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuU1xuaW5kZXggMWZlYzM3MGZlY2Y0ODEuLjZiYzQ0Yzc2NzY0MmU1IDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuU1xuKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuU1xuQEAgLTQsNiArNCw3IEBAXG4gICpcbiAgKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jZmlfdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbmthZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9hc20tb2Zmc2V0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2Z0cmFjZS5oXHUwMDNlXG5AQCAtMzQsMTAgKzM1LDE2IEBAXG4gXG4gXHQuc2VjdGlvbiAua3Byb2Jlcy50ZXh0LCBcImF4XCJcbiBcbi1TWU1fRlVOQ19TVEFSVChmdHJhY2Vfc3R1YilcbitTWU1fVFlQRURfRlVOQ19TVEFSVChmdHJhY2Vfc3R1YilcbiBcdEJSX0VYXHQlcjE0XG4gU1lNX0ZVTkNfRU5EKGZ0cmFjZV9zdHViKVxuIFxuKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4rU1lNX1RZUEVEX0ZVTkNfU1RBUlQoZnRyYWNlX3N0dWJfZ3JhcGgpXG4rXHRCUl9FWFx0JXIxNFxuK1NZTV9GVU5DX0VORChmdHJhY2Vfc3R1Yl9ncmFwaClcbisjZW5kaWZcbitcbiBTWU1fQ09ERV9TVEFSVChmdHJhY2Vfc3R1Yl9kaXJlY3RfdHJhbXApXG4gXHRsZ3JcdCVyMSwgJXIwXG4gXHRCUl9FWFx0JXIxXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90ZXh0X2Ftb2RlMzEuUyBiL2FyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlNcbmluZGV4IDI2ZjI5ODFhYTA5ZTMxLi5mMDA3ZDg5MmQwYzVmZCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlNcbkBAIC01LDYgKzUsNyBAQFxuICAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxOVxuICAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NmaV90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlua2FnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2FzbS1leHRhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZXJybm8uaFx1MDAzZVxuQEAgLTI2LDcgKzI3LDcgQEBcbiAvKlxuICAqIGludCBfZGlhZzE0X2Ftb2RlMzEodW5zaWduZWQgbG9uZyByeCwgdW5zaWduZWQgbG9uZyByeTEsIHVuc2lnbmVkIGxvbmcgc3ViY29kZSlcbiAgKi9cbi1TWU1fRlVOQ19TVEFSVChfZGlhZzE0X2Ftb2RlMzEpXG4rU1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcxNF9hbW9kZTMxKVxuIFx0bGdyXHQlcjEsJXIyXG4gXHRsZ3JcdCVyMiwlcjNcbiBcdGxnclx0JXIzLCVyNFxuQEAgLTQ2LDcgKzQ3LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMTRfYW1vZGUzMSlcbiAvKlxuICAqIGludCBfZGlhZzIxMF9hbW9kZTMxKHN0cnVjdCBkaWFnMjEwICphZGRyKVxuICAqL1xuLVNZTV9GVU5DX1NUQVJUKF9kaWFnMjEwX2Ftb2RlMzEpXG4rU1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcyMTBfYW1vZGUzMSlcbiBcdGxnclx0JXIxLCVyMlxuIFx0bGhpXHQlcjIsLTFcbiBcdHNhbTMxXG5AQCAtNjQsNyArNjUsNyBAQCBTWU1fRlVOQ19FTkQoX2RpYWcyMTBfYW1vZGUzMSlcbiAvKlxuICAqIGludCBkaWFnOGMoc3RydWN0IGRpYWc4YyAqYWRkciwgc3RydWN0IGNjd19kZXZfaWQgKmRldm5vLCBzaXplX3QgbGVuKVxuICovXG4tU1lNX0ZVTkNfU1RBUlQoX2RpYWc4Y19hbW9kZTMxKVxuK1NZTV9UWVBFRF9GVU5DX1NUQVJUKF9kaWFnOGNfYW1vZGUzMSlcbiBcdGxsZ2ZcdCVyMywwKCVyMylcbiBcdHNhbTMxXG4gXHRkaWFnXHQlcjIsJXI0LDB4OGNcbkBAIC03Nyw3ICs3OCw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzhjX2Ftb2RlMzEpXG4gLypcbiAgKiBpbnQgX2RpYWcyNmNfYW1vZGUzMSh2b2lkICpyZXEsIHZvaWQgKnJlc3AsIGVudW0gZGlhZzI2Y19zYyBzdWJjb2RlKVxuICAqL1xuLVNZTV9GVU5DX1NUQVJUKF9kaWFnMjZjX2Ftb2RlMzEpXG4rU1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcyNmNfYW1vZGUzMSlcbiBcdGxnaGlcdCVyNSwtRU9QTk9UU1VQUFxuIFx0c2FtMzFcbiBcdGRpYWdcdCVyMiwlcjQsMHgyNmNcbkBAIC05MSw3ICs5Miw3IEBAIFNZTV9GVU5DX0VORChfZGlhZzI2Y19hbW9kZTMxKVxuIC8qXG4gICogdm9pZCBfZGlhZzBjX2Ftb2RlMzEodW5zaWduZWQgbG9uZyByeClcbiAgKi9cbi1TWU1fRlVOQ19TVEFSVChfZGlhZzBjX2Ftb2RlMzEpXG4rU1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWcwY19hbW9kZTMxKVxuIFx0c2FtMzFcbiBcdGRpYWdcdCVyMiwlcjIsMHgwY1xuIFx0c2FtNjRcbkBAIC0xMDMsNyArMTA0LDcgQEAgU1lNX0ZVTkNfRU5EKF9kaWFnMGNfYW1vZGUzMSlcbiAgKlxuICAqIENhbGxzIGRpYWcgMzA4IHN1YmNvZGUgMSBhbmQgY29udGludWVzIGV4ZWN1dGlvblxuICAqL1xuLVNZTV9GVU5DX1NUQVJUKF9kaWFnMzA4X3Jlc2V0X2Ftb2RlMzEpXG4rU1lNX1RZUEVEX0ZVTkNfU1RBUlQoX2RpYWczMDhfcmVzZXRfYW1vZGUzMSlcbiBcdGxhcmxcdCVyNCxjdGxyZWdzXHRcdCMgU2F2ZSBjb250cm9sIHJlZ2lzdGVyc1xuIFx0c3RjdGdcdCVjMCwlYzE1LDAoJXI0KVxuIFx0bGdcdCVyMiwwKCVyNClcdFx0IyBEaXNhYmxlIGxvd2NvcmUgcHJvdGVjdGlvblxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCAzMTc0OWMwMzYyY2EyMy4uN2Y0NWMxMDY0NDRkZTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jZmkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9jYWNoZWZsdXNoLmhcdTAwM2VcbkBAIC0zNTYsNiArMzU3LDE5IEBAIHN0YXRpYyB2b2lkIGVtaXQ2X3BjcmVsX3JpbGMoc3RydWN0IGJwZl9qaXQgKmppdCwgdTMyIG9wLCB1OCBtYXNrLCBzNjQgcGNyZWwpXG4gXHR9XHRcdFx0XHRcdFx0XHRcXFxuIH0pXG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGVtaXRfdTMyX2RhdGEoY29uc3QgdTMyIGRhdGEsIHN0cnVjdCBicGZfaml0ICpqaXQpXG4re1xuK1x0aWYgKGppdC1cdTAwM2VwcmdfYnVmKVxuK1x0XHQqKHUzMiAqKShqaXQtXHUwMDNlcHJnX2J1ZiArIGppdC1cdTAwM2VwcmcpID0gZGF0YTtcbitcdGppdC1cdTAwM2VwcmcgKz0gNDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGVtaXRfa2NmaSh1MzIgaGFzaCwgc3RydWN0IGJwZl9qaXQgKmppdClcbit7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ0ZJKSlcbitcdFx0ZW1pdF91MzJfZGF0YShoYXNoLCBqaXQpO1xuK31cbitcbiAvKlxuICAqIFJldHVybiB3aGV0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFRoZSBmaXJzdCBwYXNzIGlzIHNwZWNpYWwsIHNpbmNlIHdlXG4gICogZG9uJ3Qga25vdyBhbnkgc2l6ZXMgeWV0LCBhbmQgdGh1cyBtdXN0IGJlIGNvbnNlcnZhdGl2ZS5cbkBAIC01OTcsNiArNjExLDggQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuIHtcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHByb2dfZnJhbWUpICE9IFNUQUNLX0ZSQU1FX09WRVJIRUFEKTtcbiBcbitcdGVtaXRfa2NmaShicGZfaXNfc3VicHJvZyhmcCkgPyBjZmlfYnBmX3N1YnByb2dfaGFzaCA6IGNmaV9icGZfaGFzaCwgaml0KTtcbitcbiBcdC8qIE5vLW9wIGZvciBob3RwYXRjaGluZyAqL1xuIFx0LyogYnJjbCAwLHByb2xvZ3VlX3BsdCAqL1xuIFx0RU1JVDZfUENSRUxfUklMQygweGMwMDQwMDAwLCAwLCBqaXQtXHUwMDNlcHJvbG9ndWVfcGx0KTtcbkBAIC02MTYsNyArNjMyLDcgQEAgc3RhdGljIHZvaWQgYnBmX2ppdF9wcm9sb2d1ZShzdHJ1Y3QgYnBmX2ppdCAqaml0LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuIFx0XHRicGZfc2tpcChqaXQsIDYpO1xuIFx0fVxuIFx0LyogVGFpbCBjYWxscyBoYXZlIHRvIHNraXAgYWJvdmUgaW5pdGlhbGl6YXRpb24gKi9cbi1cdGppdC1cdTAwM2V0YWlsX2NhbGxfc3RhcnQgPSBqaXQtXHUwMDNlcHJnO1xuK1x0aml0LVx1MDAzZXRhaWxfY2FsbF9zdGFydCA9IGppdC1cdTAwM2VwcmcgLSBjZmlfZ2V0X29mZnNldCgpO1xuIFx0aWYgKGZwLVx1MDAzZWF1eC1cdTAwM2VleGNlcHRpb25fY2IpIHtcbiBcdFx0LypcbiBcdFx0ICogU3dpdGNoIHN0YWNrLCB0aGUgbmV3IGFkZHJlc3MgaXMgaW4gdGhlIDJuZCBwYXJhbWV0ZXIuXG5AQCAtMjQwMSwxMSArMjQxNywxMyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wclxuIFx0XHRqaXRfZGF0YS1cdTAwM2VjdHggPSBqaXQ7XG4gXHRcdGppdF9kYXRhLVx1MDAzZXBhc3MgPSBwYXNzO1xuIFx0fVxuLVx0ZnAtXHUwMDNlYnBmX2Z1bmMgPSAodm9pZCAqKSBqaXQucHJnX2J1ZjtcbitcdGZwLVx1MDAzZWJwZl9mdW5jID0gKHZvaWQgKilqaXQucHJnX2J1ZiArIGNmaV9nZXRfb2Zmc2V0KCk7XG4gXHRmcC1cdTAwM2VqaXRlZCA9IDE7XG4tXHRmcC1cdTAwM2VqaXRlZF9sZW4gPSBqaXQuc2l6ZTtcbitcdGZwLVx1MDAzZWppdGVkX2xlbiA9IGppdC5zaXplIC0gY2ZpX2dldF9vZmZzZXQoKTtcbiBcbiBcdGlmICghZnAtXHUwMDNlaXNfZnVuYyB8fCBleHRyYV9wYXNzKSB7XG4rXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBmcC1cdTAwM2VsZW47IGkrKylcbitcdFx0XHRqaXQuYWRkcnNbaV0gLT0gY2ZpX2dldF9vZmZzZXQoKTtcbiBcdFx0YnBmX3Byb2dfZmlsbF9qaXRlZF9saW5mbyhmcCwgaml0LmFkZHJzICsgMSk7XG4gZnJlZV9hZGRyczpcbiBcdFx0a3ZmcmVlKGppdC5hZGRycyk7XG5AQCAtMjY3MSw4ICsyNjg5LDEwIEBAIHN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHRcdHJldHVybiAtRU5PVFNVUFA7XG4gXG4gXHQvKiBSZXR1cm4gdG8gJXIxNCBpbiB0aGUgc3RydWN0X29wcyBjYXNlLiAqL1xuLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVClcbitcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIHtcbiBcdFx0ZmxhZ3MgfD0gQlBGX1RSQU1QX0ZfU0tJUF9GUkFNRTtcbitcdFx0ZW1pdF9rY2ZpKGNmaV9nZXRfZnVuY19oYXNoKGZ1bmNfYWRkciksIGppdCk7XG4rXHR9XG4gXG4gXHQvKlxuIFx0ICogQ29tcHV0ZSBob3cgbWFueSBhcmd1bWVudHMgd2UgbmVlZCB0byBwYXNzIHRvIEJQRiBwcm9ncmFtcy5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvdG9vbHMvcmVsb2NzLmMgYi9hcmNoL3MzOTAvdG9vbHMvcmVsb2NzLmNcbmluZGV4IDMwYTczMmM4MDhmMzVlLi43MjE3OGRjOTBhNGNmOCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC90b29scy9yZWxvY3MuY1xuKysrIGIvYXJjaC9zMzkwL3Rvb2xzL3JlbG9jcy5jXG5AQCAtNDEsNiArNDEsMTAgQEBcbiBzdGF0aWMgRWxmX0VoZHJcdFx0ZWhkcjtcbiBzdGF0aWMgdW5zaWduZWQgbG9uZ1x0c2hudW07XG4gc3RhdGljIHVuc2lnbmVkIGludFx0c2hzdHJuZHg7XG4rc3RhdGljIHVuc2lnbmVkIGludFx0c2hzeW10YWJuZHg7XG4rc3RhdGljIHVuc2lnbmVkIGludFx0c2h4c3ltdGFibmR4O1xuK1xuK3N0YXRpYyBpbnQgc3ltX2luZGV4KEVsZl9TeW0gKnN5bSk7XG4gXG4gc3RydWN0IHJlbG9jcyB7XG4gXHR1aW50MzJfdFx0Km9mZnNldDtcbkBAIC01NCwxMSArNTgsNDAgQEAgc3RhdGljIHN0cnVjdCByZWxvY3MgcmVsb2NzNjQ7XG4gc3RydWN0IHNlY3Rpb24ge1xuIFx0RWxmX1NoZHJcdHNoZHI7XG4gXHRzdHJ1Y3Qgc2VjdGlvblx0Kmxpbms7XG4rXHRFbGZfU3ltXHRcdCpzeW10YWI7XG4rXHRFbGYzMl9Xb3JkXHQqeHN5bXRhYjtcbiBcdEVsZl9SZWxcdFx0KnJlbHRhYjtcbitcdGNoYXJcdFx0KnN0cnRhYjtcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2VjdGlvbiAqc2VjcztcbiBcbitzdGF0aWMgY29uc3QgY2hhciAqc2VjX25hbWUodW5zaWduZWQgc2huZHgpXG4re1xuK1x0Y29uc3QgY2hhciAqc2VjX3N0cnRhYjtcbitcdGNvbnN0IGNoYXIgKm5hbWUgPSBcIlx1MDAzY25vbmFtZVx1MDAzZVwiO1xuK1x0c2VjX3N0cnRhYiA9IHNlY3Nbc2hzdHJuZHhdLnN0cnRhYjtcbitcbitcdGlmIChzaG5keCBcdTAwM2Mgc2hudW0pXG4rXHRcdG5hbWUgPSBzZWNfc3RydGFiICsgc2Vjc1tzaG5keF0uc2hkci5zaF9uYW1lO1xuK1x0ZWxzZSBpZiAoc2huZHggPT0gU0hOX0FCUylcbitcdFx0bmFtZSA9IFwiQUJTT0xVVEVcIjtcbitcdGVsc2UgaWYgKHNobmR4ID09IFNITl9DT01NT04pXG4rXHRcdG5hbWUgPSBcIkNPTU1PTlwiO1xuK1x0cmV0dXJuIG5hbWU7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpzeW1fbmFtZShjb25zdCBjaGFyICpzeW1fc3RydGFiLCBFbGZfU3ltICpzeW0pXG4re1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcbitcdGlmIChzeW0tXHUwMDNlc3RfbmFtZSlcbitcdFx0bmFtZSA9IHN5bV9zdHJ0YWIgKyBzeW0tXHUwMDNlc3RfbmFtZTtcbitcdGVsc2VcbitcdFx0bmFtZSA9IHNlY19uYW1lKHN5bV9pbmRleChzeW0pKTtcbitcdHJldHVybiBuYW1lO1xuK31cbitcbiAjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOXG4gI2RlZmluZSBsZTE2X3RvX2NwdSh2YWwpXHQodmFsKVxuICNkZWZpbmUgbGUzMl90b19jcHUodmFsKVx0KHZhbClcbkBAIC0xMDUsNiArMTM4LDIzIEBAIHN0YXRpYyB1aW50NjRfdCBlbGY2NF90b19jcHUodWludDY0X3QgdmFsKVxuICNkZWZpbmUgZWxmX29mZl90b19jcHUoeClcdGVsZjY0X3RvX2NwdSh4KVxuICNkZWZpbmUgZWxmX3h3b3JkX3RvX2NwdSh4KVx0ZWxmNjRfdG9fY3B1KHgpXG4gXG4rc3RhdGljIGludCBzeW1faW5kZXgoRWxmX1N5bSAqc3ltKVxuK3tcbitcdEVsZl9TeW0gKnN5bXRhYiA9IHNlY3Nbc2hzeW10YWJuZHhdLnN5bXRhYjtcbitcdEVsZjMyX1dvcmQgKnhzeW10YWIgPSBzZWNzW3NoeHN5bXRhYm5keF0ueHN5bXRhYjtcbitcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0O1xuK1x0aW50IGluZGV4O1xuK1xuK1x0aWYgKHN5bS1cdTAwM2VzdF9zaG5keCAhPSBTSE5fWElOREVYKVxuK1x0XHRyZXR1cm4gc3ltLVx1MDAzZXN0X3NobmR4O1xuK1xuK1x0LyogY2FsY3VsYXRlIG9mZnNldCBvZiBzeW0gZnJvbSBoZWFkIG9mIHRhYmxlLiAqL1xuK1x0b2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpc3ltIC0gKHVuc2lnbmVkIGxvbmcpc3ltdGFiO1xuK1x0aW5kZXggPSBvZmZzZXQgLyBzaXplb2YoKnN5bSk7XG4rXG4rXHRyZXR1cm4gZWxmMzJfdG9fY3B1KHhzeW10YWJbaW5kZXhdKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZGllKGNoYXIgKmZtdCwgLi4uKVxuIHtcbiBcdHZhX2xpc3QgYXA7XG5AQCAtMjE2LDYgKzI2Niw4MSBAQCBzdGF0aWMgdm9pZCByZWFkX3NoZHJzKEZJTEUgKmZwKVxuIFxuIH1cbiBcbitzdGF0aWMgdm9pZCByZWFkX3N0cnRhYnMoRklMRSAqZnApXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaG51bTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBzZWN0aW9uICpzZWMgPSBcdTAwMjZzZWNzW2ldO1xuK1xuK1x0XHRpZiAoc2VjLVx1MDAzZXNoZHIuc2hfdHlwZSAhPSBTSFRfU1RSVEFCKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzZWMtXHUwMDNlc3RydGFiID0gbWFsbG9jKHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpO1xuK1x0XHRpZiAoIXNlYy1cdTAwM2VzdHJ0YWIpXG4rXHRcdFx0ZGllKFwibWFsbG9jIG9mICVcIiBGTVQgXCIgYnl0ZXMgZm9yIHN0cnRhYiBmYWlsZWRcXG5cIiwgc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSk7XG4rXG4rXHRcdGlmIChmc2VlayhmcCwgc2VjLVx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBTRUVLX1NFVCkgXHUwMDNjIDApXG4rXHRcdFx0ZGllKFwiU2VlayB0byAlXCIgRk1UIFwiIGZhaWxlZDogJXNcXG5cIiwgc2VjLVx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBzdHJlcnJvcihlcnJubykpO1xuK1xuK1x0XHRpZiAoZnJlYWQoc2VjLVx1MDAzZXN0cnRhYiwgMSwgc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSwgZnApICE9IHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpXG4rXHRcdFx0ZGllKFwiQ2Fubm90IHJlYWQgc3ltYm9sIHRhYmxlOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCByZWFkX3N5bXRhYnMoRklMRSAqZnApXG4re1xuK1x0aW50IGksIGo7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaG51bTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBzZWN0aW9uICpzZWMgPSBcdTAwMjZzZWNzW2ldO1xuK1x0XHRpbnQgbnVtX3N5bXM7XG4rXG4rXHRcdHN3aXRjaCAoc2VjLVx1MDAzZXNoZHIuc2hfdHlwZSkge1xuK1x0XHRjYXNlIFNIVF9TWU1UQUJfU0hORFg6XG4rXHRcdFx0c2VjLVx1MDAzZXhzeW10YWIgPSBtYWxsb2Moc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSk7XG4rXHRcdFx0aWYgKCFzZWMtXHUwMDNleHN5bXRhYilcbitcdFx0XHRcdGRpZShcIm1hbGxvYyBvZiAlXCIgRk1UIFwiIGJ5dGVzIGZvciB4c3ltdGFiIGZhaWxlZFxcblwiLCBzZWMtXHUwMDNlc2hkci5zaF9zaXplKTtcbitcbitcdFx0XHRpZiAoZnNlZWsoZnAsIHNlYy1cdTAwM2VzaGRyLnNoX29mZnNldCwgU0VFS19TRVQpIFx1MDAzYyAwKVxuK1x0XHRcdFx0ZGllKFwiU2VlayB0byAlXCIgRk1UIFwiIGZhaWxlZDogJXNcXG5cIiwgc2VjLVx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBzdHJlcnJvcihlcnJubykpO1xuK1xuK1x0XHRcdGlmIChmcmVhZChzZWMtXHUwMDNleHN5bXRhYiwgMSwgc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSwgZnApICE9IHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpXG4rXHRcdFx0XHRkaWUoXCJDYW5ub3QgcmVhZCBleHRlbmRlZCBzeW1ib2wgdGFibGU6ICVzXFxuXCIsIHN0cmVycm9yKGVycm5vKSk7XG4rXG4rXHRcdFx0c2h4c3ltdGFibmR4ID0gaTtcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Y2FzZSBTSFRfU1lNVEFCOlxuK1x0XHRcdG51bV9zeW1zID0gc2VjLVx1MDAzZXNoZHIuc2hfc2l6ZSAvIHNpemVvZihFbGZfU3ltKTtcbitcbitcdFx0XHRzZWMtXHUwMDNlc3ltdGFiID0gbWFsbG9jKHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpO1xuK1x0XHRcdGlmICghc2VjLVx1MDAzZXN5bXRhYilcbitcdFx0XHRcdGRpZShcIm1hbGxvYyBvZiAlXCIgRk1UIFwiIGJ5dGVzIGZvciBzeW10YWIgZmFpbGVkXFxuXCIsIHNlYy1cdTAwM2VzaGRyLnNoX3NpemUpO1xuK1xuK1x0XHRcdGlmIChmc2VlayhmcCwgc2VjLVx1MDAzZXNoZHIuc2hfb2Zmc2V0LCBTRUVLX1NFVCkgXHUwMDNjIDApXG4rXHRcdFx0XHRkaWUoXCJTZWVrIHRvICVcIiBGTVQgXCIgZmFpbGVkOiAlc1xcblwiLCBzZWMtXHUwMDNlc2hkci5zaF9vZmZzZXQsIHN0cmVycm9yKGVycm5vKSk7XG4rXG4rXHRcdFx0aWYgKGZyZWFkKHNlYy1cdTAwM2VzeW10YWIsIDEsIHNlYy1cdTAwM2VzaGRyLnNoX3NpemUsIGZwKSAhPSBzZWMtXHUwMDNlc2hkci5zaF9zaXplKVxuK1x0XHRcdFx0ZGllKFwiQ2Fubm90IHJlYWQgc3ltYm9sIHRhYmxlOiAlc1xcblwiLCBzdHJlcnJvcihlcnJubykpO1xuK1xuK1x0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIG51bV9zeW1zOyBqKyspIHtcbitcdFx0XHRcdEVsZl9TeW0gKnN5bSA9IFx1MDAyNnNlYy1cdTAwM2VzeW10YWJbal07XG4rXG4rXHRcdFx0XHRzeW0tXHUwMDNlc3RfbmFtZSAgPSBlbGZfd29yZF90b19jcHUoc3ltLVx1MDAzZXN0X25hbWUpO1xuK1x0XHRcdFx0c3ltLVx1MDAzZXN0X3ZhbHVlID0gZWxmX2FkZHJfdG9fY3B1KHN5bS1cdTAwM2VzdF92YWx1ZSk7XG4rXHRcdFx0XHRzeW0tXHUwMDNlc3Rfc2l6ZSAgPSBlbGZfeHdvcmRfdG9fY3B1KHN5bS1cdTAwM2VzdF9zaXplKTtcbitcdFx0XHRcdHN5bS1cdTAwM2VzdF9zaG5keCA9IGVsZl9oYWxmX3RvX2NwdShzeW0tXHUwMDNlc3Rfc2huZHgpO1xuK1x0XHRcdH1cbitcdFx0XHRzaHN5bXRhYm5keCA9IGk7XG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgcmVhZF9yZWxvY3MoRklMRSAqZnApXG4ge1xuIFx0aW50IGksIGo7XG5AQCAtMjYzLDcgKzM4OCw4IEBAIHN0YXRpYyB2b2lkIGFkZF9yZWxvYyhzdHJ1Y3QgcmVsb2NzICpyLCB1aW50MzJfdCBvZmZzZXQpXG4gXHRyLVx1MDAzZW9mZnNldFtyLVx1MDAzZWNvdW50KytdID0gb2Zmc2V0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGRvX3JlbG9jKHN0cnVjdCBzZWN0aW9uICpzZWMsIEVsZl9SZWwgKnJlbClcbitzdGF0aWMgaW50IGRvX3JlbG9jKHN0cnVjdCBzZWN0aW9uICpzZWMsIEVsZl9SZWwgKnJlbCwgRWxmVyhTeW0pICpzeW0sXG4rXHRcdCAgICBjb25zdCBjaGFyICpzeW1uYW1lKVxuIHtcbiBcdHVuc2lnbmVkIGludCByX3R5cGUgPSBFTEY2NF9SX1RZUEUocmVsLVx1MDAzZXJfaW5mbyk7XG4gXHRFbGZXKEFkZHIpIG9mZnNldCA9IHJlbC1cdTAwM2VyX29mZnNldDtcbkBAIC0yNzksNiArNDA1LDIyIEBAIHN0YXRpYyBpbnQgZG9fcmVsb2Moc3RydWN0IHNlY3Rpb24gKnNlYywgRWxmX1JlbCAqcmVsKVxuIFx0Y2FzZSBSXzM5MF9HT1RQQ0RCTDpcbiBcdGNhc2UgUl8zOTBfR09UT0ZGNjQ6XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBSXzM5MF8zMjoge1xuK1x0XHRzdGF0aWMgY29uc3QgY2hhciBrY2ZpcGZ4W10gPSBcIl9fa2NmaV90eXBlaWRfXCI7XG4rXG4rXHRcdGlmIChzeW0tXHUwMDNlc3Rfc2huZHggIT0gU0hOX0FCUylcbitcdFx0XHRkaWUoXCJVbnN1cHBvcnRlZCByZWxvY2F0aW9uIHR5cGU6ICVkXFxuXCIsIHJfdHlwZSk7XG4rXHRcdC8qXG4rXHRcdCAqIFN5bWJvbHMgd2l0aCBfX2tjZmlfdHlwZWlkXyBwcmVmaXggaGF2ZSBjb25zdGFudCB2YWx1ZXMsXG4rXHRcdCAqIHdoaWNoIGRvIG5vdCBjaGFuZ2UgaWYgYnpJbWFnZSBpcyBsb2FkZWQgYXQgYSBkaWZmZXJlbnRcbitcdFx0ICogcGh5c2ljYWwgYWRkcmVzcyB0aGFuIHRoZSBhZGRyZXNzIGZvciB3aGljaCBpdCBoYXMgYmVlblxuK1x0XHQgKiBjb21waWxlZC5cbitcdFx0ICovXG4rXHRcdGlmICghc3RybmNtcChrY2ZpcGZ4LCBzeW1uYW1lLCBzaXplb2Yoa2NmaXBmeCkgLSAxKSlcbitcdFx0XHRicmVhaztcbitcdFx0ZGllKFwiSW52YWxpZCBhYnNvbHV0ZSBSXzM5MF8zMiByZWxvY2F0aW9uOiAlc1xcblwiLCBzeW1uYW1lKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4gXHRjYXNlIFJfMzkwXzY0OlxuIFx0XHRhZGRfcmVsb2MoXHUwMDI2cmVsb2NzNjQsIG9mZnNldCk7XG4gXHRcdGJyZWFrO1xuQEAgLTI5NiwyMSArNDM4LDI5IEBAIHN0YXRpYyB2b2lkIHdhbGtfcmVsb2NzKHZvaWQpXG4gXG4gXHQvKiBXYWxrIHRocm91Z2ggdGhlIHJlbG9jYXRpb25zICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzaG51bTsgaSsrKSB7XG4tXHRcdHN0cnVjdCBzZWN0aW9uICpzZWNfYXBwbGllcztcbitcdFx0Y2hhciAqc3ltX3N0cnRhYjtcbitcdFx0RWxmX1N5bSAqc2hfc3ltdGFiO1xuK1x0XHRzdHJ1Y3Qgc2VjdGlvbiAqc2VjX2FwcGxpZXMsICpzZWNfc3ltdGFiO1xuIFx0XHRpbnQgajtcbiBcdFx0c3RydWN0IHNlY3Rpb24gKnNlYyA9IFx1MDAyNnNlY3NbaV07XG4gXG4gXHRcdGlmIChzZWMtXHUwMDNlc2hkci5zaF90eXBlICE9IFNIVF9SRUxfVFlQRSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0c2VjX3N5bXRhYiAgPSBzZWMtXHUwMDNlbGluaztcbiBcdFx0c2VjX2FwcGxpZXMgPSBcdTAwMjZzZWNzW3NlYy1cdTAwM2VzaGRyLnNoX2luZm9dO1xuIFx0XHRpZiAoIShzZWNfYXBwbGllcy1cdTAwM2VzaGRyLnNoX2ZsYWdzIFx1MDAyNiBTSEZfQUxMT0MpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRzaF9zeW10YWIgPSBzZWNfc3ltdGFiLVx1MDAzZXN5bXRhYjtcbitcdFx0c3ltX3N0cnRhYiA9IHNlY19zeW10YWItXHUwMDNlbGluay1cdTAwM2VzdHJ0YWI7XG4rXG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIHNlYy1cdTAwM2VzaGRyLnNoX3NpemUgLyBzaXplb2YoRWxmX1JlbCk7IGorKykge1xuIFx0XHRcdEVsZl9SZWwgKnJlbCA9IFx1MDAyNnNlYy1cdTAwM2VyZWx0YWJbal07XG4rXHRcdFx0RWxmX1N5bSAqc3ltID0gXHUwMDI2c2hfc3ltdGFiW0VMRl9SX1NZTShyZWwtXHUwMDNlcl9pbmZvKV07XG4rXHRcdFx0Y29uc3QgY2hhciAqc3ltbmFtZSA9IHN5bV9uYW1lKHN5bV9zdHJ0YWIsIHN5bSk7XG4gXG4tXHRcdFx0ZG9fcmVsb2Moc2VjLCByZWwpO1xuK1x0XHRcdGRvX3JlbG9jKHNlYywgcmVsLCBzeW0sIHN5bW5hbWUpO1xuIFx0XHR9XG4gXHR9XG4gfVxuQEAgLTM0OSw2ICs0OTksOCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzKEZJTEUgKmZwKVxuIHtcbiBcdHJlYWRfZWhkcihmcCk7XG4gXHRyZWFkX3NoZHJzKGZwKTtcbitcdHJlYWRfc3RydGFicyhmcCk7XG4rXHRyZWFkX3N5bXRhYnMoZnApO1xuIFx0cmVhZF9yZWxvY3MoZnApO1xuIFx0ZW1pdF9yZWxvY3MoKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNjo0MTo1Ny42MjQ5MjU4NzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjU1Mjk0MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgSW1wYWN0IG9mIHRoaXMgQ0ZJIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZyBhdHRlbnRpb24uIEl0IHRvdWNoZXMgcXVpdGUgYSBmZXcgZmlsZXMgaW4gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlOiBgYXJjaC9zMzkwL0tjb25maWdgLCBzb21lIGluY2x1ZGUgZmlsZXMsIGFuZCBzb21lIGFzc2VtYmx5IGFuZCBDIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCBhbmQgbmV0d29ya2luZy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBlbmFibGluZyBDRkkgKENvbnRyb2wgRmxvdyBJbnRlZ3JpdHkpIGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUuIEl0J3Mgc2VsZWN0aW5nIGBBUkNIX1NVUFBPUlRTX0NGSWAgYW5kIGBBUkNIX1VTRVNfQ0ZJX0dFTkVSSUNfTExWTV9QQVNTYCBpZiBjbGFuZyBpcyBiZWluZyB1c2VkLlxuXG5UaGUgcmVhbGx5IGludGVyZXN0aW5nIHBhcnQsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBpcyB0aGUgQlBGIEpJVCBjb21waWxlciBtb2RpZmljYXRpb25zLiBUaGlzIGlzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgYXJlYSB0aGF0J3MgcHJpbWUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYGJwZl9qaXRfcHJvbG9ndWVgLCBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGFuZCBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIHRvIGVtaXQgS0NGSSBoYXNoZXMuIFNvLCB3ZSdyZSBkZWFsaW5nIHdpdGggbmV3IGNvZGUgZ2VuZXJhdGlvbiByZWxhdGVkIHRvIENGSSB3aXRoaW4gdGhlIEJQRiBKSVQsIG1ha2luZyB0aG9zZSBmdW5jdGlvbnMga2V5IHRhcmdldHMgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkLiBJdCBsb29rcyBsaWtlIGl0J3MgZ29pbmcgdG8gdXNlIGBDT05GSUdfQ0ZJYC4gSSB0aG91Z2h0IGBDT05GSUdfQ0ZJX0NMQU5HYCB3YXMgdXN1YWxseSB0aGUga25vYi4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBjb3JyZWN0LCBidXQgeWVhaCwgaXQncyBgQ09ORklHX0NGSWAuIFRoZSBjb2RlIHVzZXMgYElTX0VOQUJMRUQoQ09ORklHX0NGSSlgIHRvIGRldGVybWluZSBpZiBpdCBzaG91bGQgZW1pdCB0aGVzZSBoYXNoZXMuIE9rYXksIHNvIHRoYXQncyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzY0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDI6MDYuMjgwMjI0MDY4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODgyNzkxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENGSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTkzMD1jb25maWcgQVJDSF9VU0VTX0NGSV9HRU5FUklDX0xMVk1fUEFTU1xcbi0tXFxuYXJjaC9LY29uZmlnLTkzNi1cXG5hcmNoL0tjb25maWc6OTM3OmNvbmZpZyBDRklcXG5hcmNoL0tjb25maWctOTM4LVxcdGJvb2wgXFxcIlVzZSBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSlcXFwiXFxuLS1cXG5hcmNoL0tjb25maWctOTUyLVxcbmFyY2gvS2NvbmZpZzo5NTM6Y29uZmlnIENGSV9DTEFOR1xcbmFyY2gvS2NvbmZpZy05NTQtXFx0Ym9vbFxcbi0tXFxuYXJjaC9LY29uZmlnLTk1OC1cXG5hcmNoL0tjb25maWc6OTU5OmNvbmZpZyBDRklfSUNBTExfTk9STUFMSVpFX0lOVEVHRVJTXFxuYXJjaC9LY29uZmlnLTk2MC1cXHRib29sIFxcXCJOb3JtYWxpemUgQ0ZJIHRhZ3MgZm9yIGludGVnZXJzXFxcIlxcbi0tXFxuYXJjaC9LY29uZmlnPTk4MT1jb25maWcgSEFWRV9DRklfSUNBTExfTk9STUFMSVpFX0lOVEVHRVJTX1JVU1RDXFxuLS1cXG5hcmNoL0tjb25maWctOTg4LVxcbmFyY2gvS2NvbmZpZzo5ODk6Y29uZmlnIENGSV9QRVJNSVNTSVZFXFxuYXJjaC9LY29uZmlnLTk5MC1cXHRib29sIFxcXCJVc2UgQ0ZJIGluIHBlcm1pc3NpdmUgbW9kZVxcXCJcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MjI5Mz1jb25maWcgU1RSSUNUX1NJR0FMVFNUQUNLX1NJWkVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjMwOC1cXG5hcmNoL3g4Ni9LY29uZmlnOjIzMDk6Y29uZmlnIENGSV9BVVRPX0RFRkFVTFRcXG5hcmNoL3g4Ni9LY29uZmlnLTIzMTAtXFx0Ym9vbCBcXFwiQXR0ZW1wdCB0byB1c2UgRmluZUlCVCBieSBkZWZhdWx0IGF0IGJvb3QgdGltZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDI6MDguMzY4NTE4MzkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0MjU5NjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQ2hlY2tpbmcgQ0ZJIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgQ09ORklHX0NGSWAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIFByZXR0eSBzdXJlIHRoYXQncyBhIGxlZ2l0aW1hdGUgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgaXQgZGVmaW5lZCBzb21ld2hlcmUgaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgS2NvbmZpZ2AgZmlsZXMsIHByb2JhYmx5IGluIGBhcmNoL0tjb25maWdgLiBHb29kIHByYWN0aWNlIHRvIGRvdWJsZS1jaGVjayB0aGF0LCBidXQgSSdtIHByZXR0eSBjb25maWRlbnQgaW4gdGhhdCBvbmUuXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4gTGV0IG1lIHF1aWNrbHkgc2NhbiBgYXJjaC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUncyBhIHJlbGF0ZWQgYGNvbmZpZ2Agb3B0aW9uIGNhbGxlZCBgQ0ZJX0NMQU5HYC4gTWlnaHQgYmUgYSBDbGFuZy1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvciBkZXBlbmRlbmN5IHRoYXQncyBjb250cm9sbGVkIHNlcGFyYXRlbHkuIEdvdHRhIGNvbnNpZGVyIGFsbCB0aGUgcG90ZW50aWFsIHZhcmlhYmxlcywgcmlnaHQ/IEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDc4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDI6MTMuOTExMTE3NzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkzMDpcXHRjb25maWcgQVJDSF9VU0VTX0NGSV9HRU5FUklDX0xMVk1fUEFTU1xcbiA5MzE6XFx0XFx0Ym9vbFxcbiA5MzI6XFx0XFx0aGVscFxcbiA5MzM6XFx0XFx0ICBBbiBhcmNoaXRlY3R1cmUgc2hvdWxkIHNlbGVjdCB0aGlzIG9wdGlvbiBpZiBpdCB1c2VzIHRoZSBnZW5lcmljXFxuIDkzNDpcXHRcXHQgIEtDRklQYXNzIGluIExMVk0gdG8gZXhwYW5kIGtDRkkgYnVuZGxlcyBpbnN0ZWFkIG9mIGFyY2hpdGVjdHVyZS1zcGVjaWZpY1xcbiA5MzU6XFx0XFx0ICBsb3dlcmluZy5cXG4gOTM2OlxcdFxcbiA5Mzc6XFx0Y29uZmlnIENGSVxcbiA5Mzg6XFx0XFx0Ym9vbCBcXFwiVXNlIEtlcm5lbCBDb250cm9sIEZsb3cgSW50ZWdyaXR5IChrQ0ZJKVxcXCJcXG4gOTM5OlxcdFxcdGRlZmF1bHQgQ0ZJX0NMQU5HXFxuIDk0MDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfQ0ZJXFxuIDk0MTpcXHRcXHRkZXBlbmRzIG9uICQoY2Mtb3B0aW9uLC1mc2FuaXRpemU9a2NmaSlcXG4gOTQyOlxcdFxcdGhlbHBcXG4gOTQzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBmb3J3YXJkLWVkZ2UgQ29udHJvbCBGbG93IEludGVncml0eSAoQ0ZJKVxcbiA5NDQ6XFx0XFx0ICBjaGVja2luZywgd2hlcmUgdGhlIGNvbXBpbGVyIGluamVjdHMgYSBydW50aW1lIGNoZWNrIHRvIGVhY2hcXG4gOTQ1OlxcdFxcdCAgaW5kaXJlY3QgZnVuY3Rpb24gY2FsbCB0byBlbnN1cmUgdGhlIHRhcmdldCBpcyBhIHZhbGlkIGZ1bmN0aW9uIHdpdGhcXG4gOTQ2OlxcdFxcdCAgdGhlIGNvcnJlY3Qgc3RhdGljIHR5cGUuIFRoaXMgcmVzdHJpY3RzIHBvc3NpYmxlIGNhbGwgdGFyZ2V0cyBhbmRcXG4gOTQ3OlxcdFxcdCAgbWFrZXMgaXQgbW9yZSBkaWZmaWN1bHQgZm9yIGFuIGF0dGFja2VyIHRvIGV4cGxvaXQgYnVncyB0aGF0IGFsbG93XFxuIDk0ODpcXHRcXHQgIHRoZSBtb2RpZmljYXRpb24gb2Ygc3RvcmVkIGZ1bmN0aW9uIHBvaW50ZXJzLiBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZVxcbiA5NDk6XFx0XFx0ICBmb3VuZCBmcm9tIENsYW5nJ3MgZG9jdW1lbnRhdGlvbjpcXG4gOTUwOlxcdFxcbiA5NTE6XFx0XFx0ICAgIGh0dHBzOi8vY2xhbmcubGx2bS5vcmcvZG9jcy9Db250cm9sRmxvd0ludGVncml0eS5odG1sXFxuIDk1MjpcXHRcXG4gOTUzOlxcdGNvbmZpZyBDRklfQ0xBTkdcXG4gOTU0OlxcdFxcdGJvb2xcXG4gOTU1OlxcdFxcdHRyYW5zaXRpb25hbFxcbiA5NTY6XFx0XFx0aGVscFxcbiA5NTc6XFx0XFx0ICBUcmFuc2l0aW9uYWwgY29uZmlnIGZvciBDRklfQ0xBTkcgdG8gQ0ZJIG1pZ3JhdGlvbi5cXG4gOTU4OlxcdFxcbiA5NTk6XFx0Y29uZmlnIENGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNcXG4gOTYwOlxcdFxcdGJvb2wgXFxcIk5vcm1hbGl6ZSBDRkkgdGFncyBmb3IgaW50ZWdlcnNcXFwiXFxuIDk2MTpcXHRcXHRkZXBlbmRzIG9uIENGSVxcbiA5NjI6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NGSV9JQ0FMTF9OT1JNQUxJWkVfSU5URUdFUlNcXG4gOTYzOlxcdFxcdGhlbHBcXG4gOTY0OlxcdFxcdCAgVGhpcyBvcHRpb24gbm9ybWFsaXplcyB0aGUgQ0ZJIHRhZ3MgZm9yIGludGVnZXIgdHlwZXMgc28gdGhhdCBhbGxcXG4gOTY1OlxcdFxcdCAgaW50ZWdlciB0eXBlcyBvZiB0aGUgc2FtZSBzaXplIGFuZCBzaWduZWRuZXNzIHJlY2VpdmUgdGhlIHNhbWUgQ0ZJXFxuIDk2NjpcXHRcXHQgIHRhZy5cXG4gOTY3OlxcdFxcbiA5Njg6XFx0XFx0ICBUaGUgb3B0aW9uIGlzIHNlcGFyYXRlIGZyb20gQ09ORklHX1JVU1QgYmVjYXVzZSBpdCBhZmZlY3RzIHRoZSBBQkkuXFxuIDk2OTpcXHRcXHQgIFdoZW4gd29ya2luZyB3aXRoIGJ1aWxkIHN5c3RlbXMgdGhhdCBjYXJlIGFib3V0IHRoZSBBQkksIGl0IGlzXFxuIDk3MDpcXHRcXHQgIGNvbnZlbmllbnQgdG8gYmUgYWJsZSB0byB0dXJuIG9uIHRoaXMgZmxhZyBmaXJzdCwgYmVmb3JlIFJ1c3QgaXNcXG4gOTcxOlxcdFxcdCAgdHVybmVkIG9uLlxcbiA5NzI6XFx0XFxuIDk3MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGlzIG5lY2Vzc2FyeSBmb3IgdXNpbmcgQ0ZJIHdpdGggUnVzdC4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gOTc0OlxcdFxcbiA5NzU6XFx0Y29uZmlnIEhBVkVfQ0ZJX0lDQUxMX05PUk1BTElaRV9JTlRFR0VSU1xcbiA5NzY6XFx0XFx0ZGVmX2Jvb2wgeVxcbiA5Nzc6XFx0XFx0ZGVwZW5kcyBvbiAkKGNjLW9wdGlvbiwtZnNhbml0aXplPWtjZmkgLWZzYW5pdGl6ZS1jZmktaWNhbGwtZXhwZXJpbWVudGFsLW5vcm1hbGl6ZS1pbnRlZ2VycylcXG4gOTc4OlxcdFxcdCMgV2l0aCBHQ09WL0tBU0FOIHdlIG5lZWQgdGhpcyBmaXg6IGh0dHBzOi8vZ2l0aHViLmNvbS9sbHZtL2xsdm0tcHJvamVjdC9wdWxsLzEwNDgyNlxcbiA5Nzk6XFx0XFx0ZGVwZW5kcyBvbiBDTEFOR19WRVJTSU9OIFxcdTAwM2U9IDE5MDEwMyB8fCAoIUdDT1ZfS0VSTkVMIFxcdTAwMjZcXHUwMDI2ICFLQVNBTl9HRU5FUklDIFxcdTAwMjZcXHUwMDI2ICFLQVNBTl9TV19UQUdTKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNjo0MjoxMy45MTEzNTkxNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzgwNjIyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXM6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyBmb3IgQlBGIEpJVCBDb21waWxhdGlvbiBvbiBzMzkwIEFyY2hpdGVjdHVyZSoqXG5cbkFscmlnaHQsIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUuIEZpcnN0IHRob3VnaHQ6IGBDT05GSUdfQ0ZJYCAtIHRoYXQncyAqdGhlKiBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IGhvbGQgb24sIHRoZSBjb2RlIHBhdGggdGhhdCdzIGdyYWJiZWQgbXkgYXR0ZW50aW9uLCBzcGVjaWZpY2FsbHkgYGFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmNgLCBzdWdnZXN0cyBhbm90aGVyIGNyaXRpY2FsIHBpZWNlIGlzIG5lZWRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0JQRl9KSVRgIGlzIGVuYWJsZWQgYXMgd2VsbCwgb3Igd2Ugd29uJ3QgZ2V0IGZhci4gUmlnaHQsIHNvLCB0aGUgbmV4dCBzdGVwIGlzIGNsZWFybHkgdG8gZGl2ZSBpbnRvIGBhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jYCBpdHNlbGYuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIHRoYXQgZmlsZSB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBiZWluZyB1c2VkIGFuZCBob3cgdGhleSBpbnRlcnJlbGF0ZSB3aXRoaW4gdGhlIEJQRiBKSVQgY29tcGlsYXRpb24gcHJvY2VzcyBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBUaGlzIHdpbGwgc2hvdyB1cyBob3cgdG8gdmVyaWZ5IG9yIGNvbmZpZ3VyZSB0aGUgbmVjZXNzYXJ5IHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE2NSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDI6MTguMTg5NDI0NDA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODQwMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTIzMTQ9c3RhdGljIHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqYnBmX2ppdF9hbGxvYyhzdHJ1Y3QgYnBmX2ppdCAqaml0LFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yMzU1LSAqL1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MjM1NjpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9pbnRfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcClcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTIzNTcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNjo0MjoxOC4yODEyNzYxMjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTE0NDE1MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGZ1bmN0aW9uLiBSaWdodCwgc28gdGhpcyBpcyB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHVwIGZvciBCUEYgdHJhbXBvbGluZXMgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBpcyBkb2luZyBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBkZXRhaWxzIG9mIEpJVCBjb21waWxhdGlvbiwgcHJvYmFibHkgaW52b2x2aW5nIHNvbWUga2luZCBvZiBjb2RlIGdlbmVyYXRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYXNzZW1ibHkgb3V0cHV0IHRvIHZlcmlmeS5cblxuRmlyc3QsIEkgc2hvdWxkIHByb2JhYmx5IGlkZW50aWZ5IHdoaWNoIGFyY2hpdGVjdHVyZXMgdGhpcyBhcHBsaWVzIHRvLiBJcyB0aGlzIGEgY29tbW9uIHJvdXRpbmUgb3Igc29tZXRoaW5nIHNwZWNpZmljIHRvIGNlcnRhaW4gaW5zdHJ1Y3Rpb24gc2V0cz8gTGV0J3MgdHJhY2UgaG93IGl0J3MgYmVpbmcgY2FsbGVkLCBmaWd1cmUgb3V0IHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGFuZCBhbnkgcHJlY29uZGl0aW9ucy4gV2hhdCdzIGl0IGV4cGVjdGluZyBhcyBpbnB1dD8gTWVtb3J5IGFkZHJlc3MsIHJlZ2lzdGVycywgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzPyBBbnkgcG90ZW50aWFsIGZvciBhbGlnbm1lbnQgaXNzdWVzIG9yIGNhY2hlLWxpbmUgZWZmZWN0cz8gSSdsbCBhbHNvIGNoZWNrIGZvciBhbnkgaW5saW5lIGFzc2VtYmx5LCB0aGF0IGFsd2F5cyBncmFicyBteSBhdHRlbnRpb24uXG5cbkknbGwgYmUgbG9va2luZyBmb3IgdGhlIGNyaXRpY2FsIHBhcnRzOiBpbnN0cnVjdGlvbiBwYXRjaGluZywgc2V0dGluZyB1cCB0aGUgdHJhbXBvbGluZSBlbnZpcm9ubWVudCwgYW5kIHRoZSBhY3R1YWwganVtcCB0byB0aGUgQlBGIHByb2dyYW0uIEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgaGVyZT8gQW55IGNoZWNrcyBmb3IgdmFsaWQgQlBGIGNvZGUgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcz8gQW55IHBvdGVudGlhbCBmb3Igc2lkZS1jaGFubmVsIGF0dGFja3MgZHVyaW5nIHRoaXMgc2V0dXA/XG5cbkZpbmFsbHksIGxldCdzIHNlZSBob3cgaXQgcGxheXMgd2l0aCB0aGluZ3MgbGlrZSBzcGVjdWxhdGl2ZSBleGVjdXRpb24uIFRoZSBnb2FsIGlzIGEgZmFzdCwgc2VjdXJlLCBhbmQgcHJlZGljdGFibGUgcGF0aCBpbnRvIHRoZSBCUEYgcHJvZ3JhbS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGZ1bmN0aW9uIGFjaGlldmVzIHRoZXNlIGdvYWxzLiBMZXQncyBzZWUgaWYgdGhlIGNvZGUgY29tbWVudHMgYXJlIGRlc2NyaXB0aXZlIG9yIGlmIEkgbmVlZCB0byBkaXNhc3NlbWJsZSBhbmQgYW5hbHl6ZSBmb3IgbXlzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4NCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA2OjQyOjI0LjM5NTY5NTE1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEwNzU3NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI2NTA9c3RhdGljIGludCBhbGxvY19zdGFjayhzdHJ1Y3QgYnBmX3RyYW1wX2ppdCAqdGppdCwgc2l6ZV90IHNpemUpXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI2NjctXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyNjY4OnN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNjY5LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3RyYW1wX2ppdCAqdGppdCxcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9Mjk4Nj1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yOTk0LVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6Mjk5NTpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcXHUwMDI2aW0sIFxcdTAwMjZ0aml0LCBtLCBmbGFncyxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5OTYtXFx0XFx0XFx0XFx0XFx0ICAgIHRub2Rlcywgb3JpZ19jYWxsKTtcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MzAwMT1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSxcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAxMC1cXHRtZW1zZXQoXFx1MDAyNnRqaXQsIDAsIHNpemVvZih0aml0KSk7XFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDExOlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCBcXHUwMDI2dGppdCwgbSwgZmxhZ3MsXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDEyLVxcdFxcdFxcdFxcdFxcdCAgICB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTMwMjQtXFx0dGppdC5jb21tb24ucHJnX2J1ZiA9IGltYWdlO1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MzAyNTpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgXFx1MDAyNnRqaXQsIG0sIGZsYWdzLFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAyNi1cXHRcXHRcXHRcXHRcXHQgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNjo0MjoyNC40NjY3Nzg2OTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk1NjI1NTkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEJQRiBKSVQgQ29tcGlsYXRpb24gYW5kIFRyYW1wb2xpbmVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGVudHJ5IHBvaW50cyBmb3IgQlBGIEpJVCBhbmQgdHJhbXBvbGluZXMuIEl0IHNlZW1zIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgYXJlIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gUmlnaHQsIHJpZ2h0LCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgc3BlY2lmaWNhbGx5IGZvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MsIGFuZCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBoYW5kbGVzIHRoZSB0cmFtcG9saW5lIHNldHVwLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBpZiBlaXRoZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMuIEFoLCBub3BlLCBuZWl0aGVyIGBicGZfaW50X2ppdF9jb21waWxlYCBub3IgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYXJlIHN0YXRpYy4gQW5kIHdoaWxlIEknbSBhdCBpdCwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgaXNuJ3Qgc3RhdGljIGVpdGhlci5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYSBiaXQsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIEJQRiBKSVQgc3VwcG9ydCBvbiBzMzkwLiBgQ09ORklHX0JQRl9KSVRgIGlzIG9idmlvdXNseSBhIG11c3QtaGF2ZS4gQW5kLCBpZiBJJ20gdW5kZXJzdGFuZGluZyBjb3JyZWN0bHksIGBDT05GSUdfQ0ZJYCBpcyBjcnVjaWFsIGZvciB0aGUgQ0ZJIGZlYXR1cmVzLiBMZXQncyBkaWcgaW50byBgYXJjaC9zMzkwL0tjb25maWdgIHRvIHNlZSBpZiBgQVJDSF9TVVBQT1JUU19DRklgIGlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzE3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA2OjQyOjMxLjQyMzAzODc0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI5NzE2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJDSF9TVVBQT1JUU19DRklcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTE0Ni1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19BVE9NSUNfUk1XXFxuYXJjaC9zMzkwL0tjb25maWc6MTQ3OlxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSVxcbmFyY2gvczM5MC9LY29uZmlnLTE0OC1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDY6NDI6MzEuNDk2MDE3ODE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MTI1MTUzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIENGSSBhbmQgdGhlIEJQRiBKSVQqKlxuXG5BbHJpZ2h0LCB0aGUgYnVpbGQgY29uZmlnJ3MgYWxsb3dpbmcgYENPTkZJR19DRklgIHRvIGJlIHNlbGVjdGVkLCB3aGljaCBpcyBnb29kLiBUaGF0IGdpdmVzIHVzIHNvbWUgcG90ZW50aWFsIGNvbXBpbGUtdGltZSBjaGVja3MgYW5kIHNlY3VyaXR5IGhhcmRlbmluZy4gQnV0LCBzaW5jZSBJJ20gYWxyZWFkeSBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UncmUgaGFuZGxpbmcgdGhlIEJQRiBKSVQgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIGlzIGBDT05GSUdfQlBGX0pJVGAgYWxzbyByZXF1aXJlZCBpbiB0aGlzIGJ1aWxkPyBUaGVyZSdzIGxpa2VseSBzb21lIGludGVyYWN0aW9uIG9yIGRlcGVuZGVuY3kgdG8ga2VlcCBpbiBtaW5kLCBhbmQgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlaXIgaW50ZXJwbGF5LiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM2NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDA2OjQyOjM2LjAwODUzNTk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg5NTkwNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNjo0MjozOC4xOTgxMzIzMDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3OTQxMjUwNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgczM5MCBrQ0ZJIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaW1wbGVtZW50aW5nIENGSSAoQ29udHJvbCBGbG93IEludGVncml0eSkgc3BlY2lmaWNhbGx5IGZvciB0aGUgczM5MCBhcmNoaXRlY3R1cmUsIGFsb25nc2lkZSB0aGUgQlBGIEpJVCBjb21waWxlciAoYEJQRl9KSVRgKS4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgZm9yIGZ1enppbmcuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzIHRvIGV4YW1pbmUgYGFyY2gvczM5MC90b29scy9yZWxvY3MuY2AsIGJ1dCB0aGF0J3MgYSBob3N0IHRvb2wsIG5vdCBrZXJuZWwgY29kZSwgc28gaXQncyBub3QgcmVsZXZhbnQgZm9yIHJ1bnRpbWUgZnV6emluZy4gSSB0aGVuIGNoZWNrZWQgdGhlIGFzc2VtYmx5IGZpbGVzIGBhcmNoL3MzOTAva2VybmVsL21jb3VudC5TYCBhbmQgYGFyY2gvczM5MC9rZXJuZWwvdGV4dF9hbW9kZTMxLlNgLiBJIHNlZSB0aGUgYFNZTV9GVU5DX1NUQVJUYCBtYWNybyBpcyBiZWluZyB1cGRhdGVkIHRvIGBTWU1fVFlQRURfRlVOQ19TVEFSVGAgdG8gZW5hYmxlIENGSSwgd2hpY2ggaXMgbGlrZWx5IHdoZXJlIHRoZSBDRkktc3BlY2lmaWMgY2hhbmdlcyBhcmUuXG5cblRoZSBwcmltYXJ5IGZ1bmN0aW9uYWwgY2hhbmdlcyBmb3IgZnV6emluZyBzZWVtIHRvIGJlIGluIGBhcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhhdCBkaXJlY3Rvcnkgc291bmRzIHByb21pc2luZy4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgZnVuY3Rpb25zLiBUaGV5J3JlIGJvdGggc3RhbmRhcmQgQlBGIEpJVCBhbmQgdHJhbXBvbGluZSBlbnRyeSBwb2ludHMsIHdoaWNoIGFyZSBnb29kIGNhbmRpZGF0ZXMuIEkgd2FudGVkIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIHRoZSByaWdodCBvbmVzLCBhbmQgYmFzZWQgb24gdGhlaXIgbmFtZXMsIEknbSBjb21mb3J0YWJsZSB0aGF0IHRoZXkgYXJlLlxuXG5OZXh0LCBJIGxvb2tlZCBmb3IgZGVwZW5kZW5jaWVzIG9uIGBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSYCB3aXRoaW4gYGFyY2gvczM5MC9rZXJuZWwvbWNvdW50LlNgLCB3aGVyZSB0aGUgY29kZSB1c2VzIHRoZSB0eXBlZCBmdW5jdGlvbiBzdGFydCwgYnV0IHRoYXQncyBqdXN0IGFkZGluZyB0aGUgQ0ZJIHR5cGUgaGFzaGVzIHRvIHRoZSBmdW5jdGlvbiwgc28gaXQncyBub3QgYSBwcmltYXJ5IHRhcmdldC5cblxuSSd2ZSBkZXRlcm1pbmVkIHRoYXQgYENGSWAgYW5kIGBCUEZfSklUYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzIHRvIGZvY3VzIG9uLlxuXG5UaGVuIEkgcmVhbGl6ZWQgYSBwb3RlbnRpYWwgaXNzdWU6IGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB2ZXJ5IGNvbW1vbiBmb3IgQlBGIEpJVC4gSXMgaXQgYSBob3QtcGF0aD8gTm8sIGl0IGlzIGNhbGxlZCB3aGVuIGEgQlBGIHByb2dyYW0gaXMgbG9hZGVkLCB3aGljaCBpcyBjb250cm9sLXBhdGgsIGFuZCBzbyBpcyBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC5cblxuSSBkb3VibGUtY2hlY2tlZCBgYXJjaC9LY29uZmlnYCB0byBjb25maXJtIHRoYXQgYENGSWAgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbi4gSSBjYW4gY29uZmlybSBpdCdzIHRoZSBwcmltYXJ5IGNvbmZpZyBhcyBgQ0ZJX0NMQU5HYCBkZWZhdWx0cyB0byBgQ0ZJYC5cblxuVGhlIHBhdGNoIGltcGxlbWVudHMga0NGSSBmb3IgczM5MCwgbW9kaWZ5aW5nIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIGVtaXQgS0NGSSBoYXNoZXMgYW5kIHVwZGF0aW5nIGFzc2VtYmx5IGZ1bmN0aW9ucyB0byB1c2UgdHlwZWQgZnVuY3Rpb24gbWFjcm9zLiBUaGUgQlBGIEpJVCBjaGFuZ2VzIG9jY3VyIHdoZW4gQlBGIHByb2dyYW1zIGFyZSBsb2FkZWQgb3IgdHJhbXBvbGluZXMgYXJlIGF0dGFjaGVkLlxuXG5TbywgaGVyZSdzIG15IHN0cmF0ZWd5OlxuXG4qICAgQ29uZmlnczogYENGSWAsIGBCUEZfSklUYC5cbiogICBTeW1ib2xzOiBgYnBmX2ludF9qaXRfY29tcGlsZWAsIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLlxuXG5XaGlsZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgKmlzKiBhbHJlYWR5IGZ1enplZCBieSBzeXprYWxsZXIsIGZvY3VzaW5nIG9uIGl0IHdpdGggYENGSWAgZW5hYmxlZCB3aWxsIHNwZWNpZmljYWxseSB0ZXN0IHRoZSBuZXcgS0NGSSBlbWlzc2lvbiBsb2dpYyBvbiBzMzkwLiBJIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODAyLCJPdXRwdXRUb2tlbnMiOjEzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwNjo0Mjo1MC45OTIyNjA4MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzA1OTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZJXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBLZXJuZWwgQ29udHJvbCBGbG93IEludGVncml0eSAoa0NGSSkgc3VwcG9ydCBmb3IgdGhlIHMzOTAgYXJjaGl0ZWN0dXJlLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byBlbWl0IEtDRkkgaGFzaGVzIGZvciBCUEYgcHJvZ3JhbXMgYW5kIHRyYW1wb2xpbmVzLCBhbmQgdXBkYXRlcyBhc3NlbWJseSBmdW5jdGlvbnMgdG8gdXNlIHR5cGVkIGZ1bmN0aW9uIG1hY3Jvcy4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIHdoZW4gQlBGIHByb2dyYW1zIGFyZSBsb2FkZWQgb3IgdHJhbXBvbGluZXMgYXJlIGF0dGFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGSVwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgS2VybmVsIENvbnRyb2wgRmxvdyBJbnRlZ3JpdHkgKGtDRkkpIHN1cHBvcnQgZm9yIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBLQ0ZJIGhhc2hlcyBmb3IgQlBGIHByb2dyYW1zIGFuZCB0cmFtcG9saW5lcywgYW5kIHVwZGF0ZXMgYXNzZW1ibHkgZnVuY3Rpb25zIHRvIHVzZSB0eXBlZCBmdW5jdGlvbiBtYWNyb3MuIFRoZSBCUEYgSklUIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCB3aGVuIEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkIG9yIHRyYW1wb2xpbmVzIGFyZSBhdHRhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrzfjm[1] Phase: Succeeded StartedAt: 2026-07-28 06:43:02 +0000 UTC FinishedAt: 2026-07-28 06:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 06:43:02 +0000 UTC FinishedAt: 2026-07-28 06:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2] Phase: Succeeded StartedAt: 2026-07-28 06:43:02 +0000 UTC FinishedAt: 2026-07-28 08:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-28 06:43:02 +0000 UTC FinishedAt: 2026-07-28 08:45:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-28 06:43:02 +0000 UTC FinishedAt: 2026-07-28 06:43:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-28 06:43:02 +0000 UTC FinishedAt: 2026-07-28 06:43:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowrzfjm/series-workflowrzfjm-convert-artifact-2109860146/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-28 06:43:12 +0000 UTC FinishedAt: 2026-07-28 07:44:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-28 06:43:12 +0000 UTC FinishedAt: 2026-07-28 07:44: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:*59aaf2de-8129-49c4-8f44-84f7083fd8e7,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-workflowrzfjm/series-workflowrzfjm-convert-artifact-2109860146/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": "bdf395ca-00f1-4b79-85d6-6b31b7d277dd", "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-workflowrzfjm/series-workflowrzfjm-build-action-289290928/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-28 06:43:12 +0000 UTC FinishedAt: 2026-07-28 07:43:58 +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:*59aaf2de-8129-49c4-8f44-84f7083fd8e7,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-workflowrzfjm/series-workflowrzfjm-convert-artifact-2109860146/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": "bdf395ca-00f1-4b79-85d6-6b31b7d277dd", "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-workflowrzfjm/series-workflowrzfjm-build-action-289290928/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-28 07:44:08 +0000 UTC FinishedAt: 2026-07-28 07:44:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-28 07:44:08 +0000 UTC FinishedAt: 2026-07-28 07:44:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-28 07:44:08 +0000 UTC FinishedAt: 2026-07-28 07:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-28 07:44:08 +0000 UTC FinishedAt: 2026-07-28 07:44:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowrzfjm/series-workflowrzfjm-convert-artifact-3662119245/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-28 07:44:19 +0000 UTC FinishedAt: 2026-07-28 07:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-28 07:44:19 +0000 UTC FinishedAt: 2026-07-28 07:47:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bdf395ca-00f1-4b79-85d6-6b31b7d277dd,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-workflowrzfjm/series-workflowrzfjm-build-action-289290928/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-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-28 07:47:32 +0000 UTC FinishedAt: 2026-07-28 07:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-28 07:47:32 +0000 UTC FinishedAt: 2026-07-28 07:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-28 07:47:32 +0000 UTC FinishedAt: 2026-07-28 08:40:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-28 07:47:32 +0000 UTC FinishedAt: 2026-07-28 08:40:52 +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:*59aaf2de-8129-49c4-8f44-84f7083fd8e7,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-workflowrzfjm/series-workflowrzfjm-convert-artifact-3662119245/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": "195b7980-fad8-4cb2-892f-2e18d2c3de4a", "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-workflowrzfjm/series-workflowrzfjm-build-action-3814633257/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-28 07:47:32 +0000 UTC FinishedAt: 2026-07-28 08:40:30 +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:*59aaf2de-8129-49c4-8f44-84f7083fd8e7,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-workflowrzfjm/series-workflowrzfjm-convert-artifact-3662119245/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": "195b7980-fad8-4cb2-892f-2e18d2c3de4a", "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-workflowrzfjm/series-workflowrzfjm-build-action-3814633257/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-28 08:40:52 +0000 UTC FinishedAt: 2026-07-28 08:40:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-28 08:40:52 +0000 UTC FinishedAt: 2026-07-28 08:40:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-28 08:40:52 +0000 UTC FinishedAt: 2026-07-28 08:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-28 08:40:52 +0000 UTC FinishedAt: 2026-07-28 08:43:01 +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:*195b7980-fad8-4cb2-892f-2e18d2c3de4a,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-workflowrzfjm/series-workflowrzfjm-build-action-3814633257/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-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-28 08:43:11 +0000 UTC FinishedAt: 2026-07-28 08:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-28 08:43:11 +0000 UTC FinishedAt: 2026-07-28 08:45:02 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"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:*bdf395ca-00f1-4b79-85d6-6b31b7d277dd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*195b7980-fad8-4cb2-892f-2e18d2c3de4a,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-workflowrzfjm/series-workflowrzfjm-build-action-289290928/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-workflowrzfjm/series-workflowrzfjm-build-action-3814633257/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-28 08:43:11 +0000 UTC FinishedAt: 2026-07-28 08:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-28 08:43:11 +0000 UTC FinishedAt: 2026-07-28 08:43:19 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"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-workflowrzfjm/series-workflowrzfjm-convert-artifact-2702742834/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-28 08:43:11 +0000 UTC FinishedAt: 2026-07-28 08:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-28 08:43:11 +0000 UTC FinishedAt: 2026-07-28 08:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-28 08:43:11 +0000 UTC FinishedAt: 2026-07-28 08:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-28 08:43:21 +0000 UTC FinishedAt: 2026-07-28 08:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrzfjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFI","BPF_JIT"],"series_id":"0351e2ac-97b3-437a-b7e1-164dea218d95","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-28 08:43:21 +0000 UTC FinishedAt: 2026-07-28 08:44:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bdf395ca-00f1-4b79-85d6-6b31b7d277dd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*195b7980-fad8-4cb2-892f-2e18d2c3de4a,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-workflowrzfjm/series-workflowrzfjm-build-action-289290928/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-workflowrzfjm/series-workflowrzfjm-build-action-3814633257/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-workflowrzfjm/series-workflowrzfjm-convert-artifact-2702742834/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,}