Name: series-workflow9vtb2 Phase: Succeeded StartedAt: 2026-07-30 07:13:08 +0000 UTC FinishedAt: 2026-07-30 08:22:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[0] Phase: Succeeded StartedAt: 2026-07-30 07:13:08 +0000 UTC FinishedAt: 2026-07-30 07:33:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 07:13:08 +0000 UTC FinishedAt: 2026-07-30 07:33:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fc46aed51f6280801f43a2cf4b5060cc33b572f9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fc46aed51f6280801f43a2cf4b5060cc33b572f9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "dda6c35c-c2ae-417b-8b2b-e31f063388df" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYXRvbWljIGluc3RydWN0aW9ucyBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgY29tcGlsZXIgYW5kIGVuYWJsZXMgdGhlIGJwZl9rcHRyX3hjaGcgaW5saW5lIHRlc3QuIFRoZSBCUEYgSklUIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSB0ZXN0ZWQgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgY29udGFpbmluZyB0aGVzZSBhdG9taWMgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM3NjU3ODM3NjIzOWJlNTIwM2QwMWZkNzIxNDg2MTljODQ1OTZiNTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwNzozMjoxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmhcbmluZGV4IDc2YjcyMzU5MDAyM2QuLmJkYmMxN2QwNzExMDUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaFxuQEAgLTE5OSw2ICYjNDM7MTk5LDEwIEBAIGVudW0gcmVnM19vcCB7XG4gXHRhbXN3YXBoX29wXHQ9IDB4NzBiOSxcbiBcdGFtYWRkYl9vcFx0PSAweDcwYmEsXG4gXHRhbWFkZGhfb3BcdD0gMHg3MGJiLFxuJiM0MztcdGFtc3dhcGRiYl9vcFx0PSAweDcwYmMsXG4mIzQzO1x0YW1zd2FwZGJoX29wXHQ9IDB4NzBiZCxcbiYjNDM7XHRhbWFkZGRiYl9vcFx0PSAweDcwYmUsXG4mIzQzO1x0YW1hZGRkYmhfb3BcdD0gMHg3MGJmLFxuIFx0YW1zd2Fwd19vcFx0PSAweDcwYzAsXG4gXHRhbXN3YXBkX29wXHQ9IDB4NzBjMSxcbiBcdGFtYWRkd19vcFx0PSAweDcwYzIsXG5AQCAtNzgzLDYgJiM0Mzs3ODcsMjAgQEAgREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwYiwgYW1zd2FwYl9vcClcbiBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBoLCBhbXN3YXBoX29wKVxuIERFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcHcsIGFtc3dhcHdfb3ApXG4gREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwZCwgYW1zd2FwZF9vcClcbiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwZGJiLCBhbXN3YXBkYmJfb3ApXG4mIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGRiaCwgYW1zd2FwZGJoX29wKVxuJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFkZGRiYiwgYW1hZGRkYmJfb3ApXG4mIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYWRkZGJoLCBhbWFkZGRiaF9vcClcbiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW1hZGRkYncsIGFtYWRkZGJ3X29wKVxuJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFkZGRiZCwgYW1hZGRkYmRfb3ApXG4mIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYW5kZGJ3LCBhbWFuZGRid19vcClcbiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW1hbmRkYmQsIGFtYW5kZGJkX29wKVxuJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbW9yZGJ3LCBhbW9yZGJ3X29wKVxuJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbW9yZGJkLCBhbW9yZGJkX29wKVxuJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbXhvcmRidywgYW14b3JkYndfb3ApXG4mIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFteG9yZGJkLCBhbXhvcmRiZF9vcClcbiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwZGJ3LCBhbXN3YXBkYndfb3ApXG4mIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGRiZCwgYW1zd2FwZGJkX29wKVxuIFxuICNkZWZpbmUgREVGX0VNSVRfUkVHM1NBMl9GT1JNQVQoTkFNRSwgT1ApXHRcdFx0XHRcXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0XyMjTkFNRSh1bmlvbiBsb29uZ2FyY2hfaW5zdHJ1Y3Rpb24gKmluc24sXHRcXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMgYi9hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jXG5pbmRleCAyOWMyODFiZWYyOGVmLi42ODZkMzMzMTQ2Y2UyIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY1xuQEAgLTgsNiAmIzQzOzgsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9hc20tb2Zmc2V0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YnBmX2ppdC5oXCYjMzQ7XG4gXG4mIzQzOy8qIGRiYXIgaGludCBmb3IgbGwvc2MgY29tcGxldGlvbiBvcmRlcmluZywgc2VlIF9fV0VBS19MTFNDX01CICovXG4mIzQzOyNkZWZpbmUgREJBUl9MTFNDX01CXHQweDcwMFxuJiM0MztcbiAjZGVmaW5lIExPT05HQVJDSF9NQVhfUkVHX0FSR1MgOFxuIFxuICNkZWZpbmUgTE9PTkdBUkNIX1NBVkVfUkFfTklOU05TICAgMVxuQEAgLTQzMyw3ICYjNDM7NDM2LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuIFx0XHRcdFx0cHJfZXJyX29uY2UoXCYjMzQ7YnBmLWppdDogYW1hZGQuYiBpbnN0cnVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbWFkZGIsIHNyYywgdDEsIHQzKTtcbiYjNDM7XHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkYmIsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEJQRl9IOlxuQEAgLTQ0MSwzOSAmIzQzOzQ0NCwzOSBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4gXHRcdFx0XHRwcl9lcnJfb25jZShcJiMzNDticGYtaml0OiBhbWFkZC5oIGluc3RydWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtYWRkaCwgc3JjLCB0MSwgdDMpO1xuJiM0MztcdFx0XHRlbWl0X2luc24oY3R4LCBhbWFkZGRiaCwgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX1c6XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGR3LCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtYWRkZGJ3LCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBCUEZfRFc6XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkLCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtYWRkZGJkLCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9BTkQgfCBCUEZfRkVUQ0g6XG4gXHRcdGlmIChpc2R3KSB7XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hbmRkLCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtYW5kZGJkLCBzcmMsIHQxLCB0Myk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hbmR3LCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtYW5kZGJ3LCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOlxuIFx0XHRpZiAoaXNkdykge1xuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtb3JkLCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtb3JkYmQsIHNyYywgdDEsIHQzKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbW9ydywgc3JjLCB0MSwgdDMpO1xuJiM0MztcdFx0XHRlbWl0X2luc24oY3R4LCBhbW9yZGJ3LCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX1hPUiB8IEJQRl9GRVRDSDpcbiBcdFx0aWYgKGlzZHcpIHtcbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbXhvcmQsIHNyYywgdDEsIHQzKTtcbiYjNDM7XHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW14b3JkYmQsIHNyYywgdDEsIHQzKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbXhvcncsIHNyYywgdDEsIHQzKTtcbiYjNDM7XHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW14b3JkYncsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuQEAgLTQ4NSw3ICYjNDM7NDg4LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuIFx0XHRcdFx0cHJfZXJyX29uY2UoXCYjMzQ7YnBmLWppdDogYW1zd2FwLmIgaW5zdHJ1Y3Rpb24gaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2FwYiwgc3JjLCB0MSwgdDMpO1xuJiM0MztcdFx0XHRlbWl0X2luc24oY3R4LCBhbXN3YXBkYmIsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEJQRl9IOlxuQEAgLTQ5MywxNSAmIzQzOzQ5NiwxNSBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4gXHRcdFx0XHRwcl9lcnJfb25jZShcJiMzNDticGYtaml0OiBhbXN3YXAuaCBpbnN0cnVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbXN3YXBoLCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGRiaCwgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX1c6XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2Fwdywgc3JjLCB0MSwgdDMpO1xuJiM0MztcdFx0XHRlbWl0X2luc24oY3R4LCBhbXN3YXBkYncsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEJQRl9EVzpcbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbXN3YXBkLCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGRiZCwgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuQEAgLTUyNCw2ICYjNDM7NTI3LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuIFx0XHRcdGVtaXRfaW5zbihjdHgsIGJlcSwgdDMsIExPT05HQVJDSF9HUFJfWkVSTywgLTYpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHIwLCB0cnVlKTtcbiBcdFx0fVxuJiM0MztcdFx0ZW1pdF9pbnNuKGN0eCwgZGJhciwgREJBUl9MTFNDX01CKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRwcl9lcnJfb25jZShcJiMzNDticGYtaml0OiBpbnZhbGlkIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvcGNvZGUgJTAyeFxcblwmIzM0OywgaW1tKTtcbkBAIC0yMzkyLDYgJiM0MzsyMzk2LDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIEluZGljYXRlIHRoZSBKSVQgYmFja2VuZCBzdXBwb3J0cyBtaXhpbmcgYnBmMmJwZiBhbmQgdGFpbGNhbGxzLiAqL1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IGI2NDJlZTQ4OWVhNjQuLjZkZmM4MTc0ODU4NDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTk4MCw2ICYjNDM7OTgwLDcgQEAgJChPVVRQVVQpL2JlbmNoX2xwbV90cmllX21hcC5vOiAkKE9VVFBVVCkvbHBtX3RyaWVfYmVuY2guc2tlbC5oICQoT1VUUFVUKS9scG1fdHJcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vOiAkKE9VVFBVVCkvYnBmX25vcF9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oXG4gJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vOiAkKE9VVFBVVCkveGRwX2xiX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmhcbiYjNDM7JChPVVRQVVQpL2JlbmNoX2twdHJfeGNoZy5vOiAkKE9VVFBVVCkva3B0cl94Y2hnX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaC5vOiBiZW5jaC5oIHRlc3RpbmdfaGVscGVycy5oICQoQlBGT0JKKVxuICQoT1VUUFVUKS9iZW5jaDogTERMSUJTICYjNDM7PSAtbG1cbiAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXG5AQCAtMTAwNSw2ICYjNDM7MTAwNiw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxuJiM0MztcdFx0ICQoT1VUUFVUKS9iZW5jaF9rcHRyX3hjaGcubyBcXFxuIFx0XHQgJChPVVRQVVQpL3VzZHRfMS5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvdXNkdF8yLm8gXFxcbiBcdFx0ICNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5pbmRleCAzZDlkMmNkNzc2NGJkLi41NTAyOTBkNjcwMWE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5AQCAtNTgyLDYgJiM0Mzs1ODIsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2RlbGV0ZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2ZyZWU7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbm9wO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfeGRwX2xiO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2twdHJfeGNoZztcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcbiBcdFx1MDAyNmJlbmNoX2NvdW50X2dsb2JhbCxcbkBAIC02NjUsNiAmIzQzOzY2Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xuIFx0XHUwMDI2YmVuY2hfbHBtX3RyaWVfZnJlZSxcbiBcdFx1MDAyNmJlbmNoX2JwZl9ub3AsXG4gXHRcdTAwMjZiZW5jaF94ZHBfbGIsXG4mIzQzO1x0XHUwMDI2YmVuY2hfa3B0cl94Y2hnLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgZmluZF9iZW5jaG1hcmsodm9pZClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2twdHJfeGNoZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9rcHRyX3hjaGcuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4YTBkMzQ2ZmRhNjhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfa3B0cl94Y2hnLmNcbkBAIC0wLDAgJiM0MzsxLDk2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoQykgMjAyNi4gTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FyZ3AuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtiZW5jaC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2twdHJfeGNoZ19iZW5jaC5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgY3R4IHtcbiYjNDM7XHRzdHJ1Y3Qga3B0cl94Y2hnX2JlbmNoICpza2VsO1xuJiM0Mzt9IGN0eDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qge1xuJiM0MztcdF9fdTMyIG5yX2xvb3BzO1xuJiM0Mzt9IGFyZ3MgPSB7XG4mIzQzO1x0Lm5yX2xvb3BzID0gMjU2LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSB7XG4mIzQzO1x0QVJHX05SX0xPT1BTID0gNzAwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7bnJfbG9vcHNcJiMzNDssIEFSR19OUl9MT09QUywgXCYjMzQ7bnJfbG9vcHNcJiMzNDssIDAsXG4mIzQzO1x0ICBcJiMzNDtTZXQgbnVtYmVyIG9mIGJwZl9rcHRyX3hjaGcoKSBjYWxscyBwZXIgdHJpZ2dlclwmIzM0O30sXG4mIzQzO1x0e30sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgZXJyb3JfdCBwYXJzZV9hcmcoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGtleSkge1xuJiM0MztcdGNhc2UgQVJHX05SX0xPT1BTOlxuJiM0MztcdFx0YXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfa3B0cl94Y2hnX2FyZ3AgPSB7XG4mIzQzO1x0Lm9wdGlvbnMgPSBvcHRzLFxuJiM0MztcdC5wYXJzZXIgPSBwYXJzZV9hcmcsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2JlbmNobWFyayBkb2VzbiYjMzk7dCBzdXBwb3J0IGNvbnN1bWVyIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnByb2R1Y2VyKHZvaWQgKmlucHV0KVxuJiM0Mzt7XG4mIzQzO1x0d2hpbGUgKHRydWUpXG4mIzQzO1x0XHRzeXNjYWxsKF9fTlJfZ2V0cGdpZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcylcbiYjNDM7e1xuJiM0MztcdHJlcy1cdTAwM2VoaXRzID0gYXRvbWljX3N3YXAoXHUwMDI2Y3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZWhpdHMsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzZXR1cCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuJiM0MztcbiYjNDM7XHRzZXR1cF9saWJicGYoKTtcbiYjNDM7XG4mIzQzO1x0Y3R4LnNrZWwgPSBrcHRyX3hjaGdfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIWN0eC5za2VsKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cXG5cJiMzNDspO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eC5za2VsLVx1MDAzZWRhdGEtXHUwMDNlbnJfbG9vcHMgPSBhcmdzLm5yX2xvb3BzO1xuJiM0MztcbiYjNDM7XHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChjdHguc2tlbC1cdTAwM2Vwcm9ncy5iZW5jaG1hcmspO1xuJiM0MztcdGlmICghbGluaykge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZhaWxlZCB0byBhdHRhY2ggcHJvZ3JhbSFcXG5cJiMzNDspO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9rcHRyX3hjaGcgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtrcHRyLXhjaGdcJiMzNDssXG4mIzQzO1x0LmFyZ3AgPSBcdTAwMjZiZW5jaF9rcHRyX3hjaGdfYXJncCxcbiYjNDM7XHQudmFsaWRhdGUgPSB2YWxpZGF0ZSxcbiYjNDM7XHQuc2V0dXAgPSBzZXR1cCxcbiYjNDM7XHQucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsXG4mIzQzO1x0Lm1lYXN1cmUgPSBtZWFzdXJlLFxuJiM0MztcdC5yZXBvcnRfcHJvZ3Jlc3MgPSBvcHNfcmVwb3J0X3Byb2dyZXNzLFxuJiM0MztcdC5yZXBvcnRfZmluYWwgPSBvcHNfcmVwb3J0X2ZpbmFsLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuY1xuaW5kZXggN2RlZjE1OGRhOWViNy4uMTIxNWQ2ZWRkNTkwNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3B0cl94Y2hnX2lubGluZS5jXG5AQCAtMTQsNyAmIzQzOzE0LDggQEAgdm9pZCB0ZXN0X2twdHJfeGNoZ19pbmxpbmUodm9pZClcbiBcdGludCBlcnI7XG4gXG4gI2lmICEoZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKSB8fCBcXFxuLSAgICAgIChkZWZpbmVkKF9fcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpKVxuJiM0MztcdChkZWZpbmVkKF9fcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFxcXG4mIzQzO1x0KGRlZmluZWQoX19sb29uZ2FyY2hfXykgXHUwMDI2XHUwMDI2IF9fbG9vbmdhcmNoX2dybGVuID09IDY0KSlcbiBcdHRlc3RfX3NraXAoKTtcbiBcdHJldHVybjtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3B0cl94Y2hnX2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3B0cl94Y2hnX2JlbmNoLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zNjM4ODMwNzNlMmMwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3B0cl94Y2hnX2JlbmNoLmNcbkBAIC0wLDAgJiM0MzsxLDQ5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoQykgMjAyNi4gTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkICovXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1BWF9YQ0hHX0xPT1BTIDQwOTZcbiYjNDM7XG4mIzQzO3N0cnVjdCBiaW5fZGF0YSB7XG4mIzQzO1x0Y2hhciBibG9iWzMyXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoXCYjMzQ7LmJzcy5cJiMzNDsgI25hbWUpIF9faGlkZGVuIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKVxuJiM0MztcbiYjNDM7cHJpdmF0ZShrcHRyKSBzdHJ1Y3QgYmluX2RhdGEgX19rcHRyICpwdHI7XG4mIzQzO3UzMiBucl9sb29wcyA9IDI1NjtcbiYjNDM7bG9uZyBoaXRzO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2ZlbnRyeS9cJiMzNDsgU1lTX1BSRUZJWCBcJiMzNDtzeXNfZ2V0cGdpZFwmIzM0OylcbiYjNDM7aW50IGJlbmNobWFyayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmluX2RhdGEgKm9sZDtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX1hDSEdfTE9PUFM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaSBcdTAwM2U9IG5yX2xvb3BzKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnB0ciwgTlVMTCk7XG4mIzQzO1x0XHRpZiAob2xkKVxuJiM0MztcdFx0XHRicGZfb2JqX2Ryb3Aob2xkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdF9fc3luY19hZGRfYW5kX2ZldGNoKFx1MDAyNmhpdHMsIGkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBCVEYgRlVOQyByZWNvcmRzIGFyZSBub3QgZ2VuZXJhdGVkIGZvciBrZnVuY3MgcmVmZXJlbmNlZCBvbmx5IHRocm91Z2hcbiYjNDM7ICogb3B0aW1pemVkIHBhdGhzLiBLZWVwIGJwZl9vYmpfZHJvcCgpIHZpc2libGUgdG8gbGliYnBmJiMzOTtzIGtmdW5jIGxpbmtlci5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgX19idGZfcm9vdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YnBmX29ial9kcm9wKE5VTEwpO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYXRvbWljIGluc3RydWN0aW9ucyBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgY29tcGlsZXIgYW5kIGVuYWJsZXMgdGhlIGJwZl9rcHRyX3hjaGcgaW5saW5lIHRlc3QuIFRoZSBCUEYgSklUIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSB0ZXN0ZWQgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgY29udGFpbmluZyB0aGVzZSBhdG9taWMgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM3NjU3ODM3NjIzOWJlNTIwM2QwMWZkNzIxNDg2MTljODQ1OTZiNTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwNzozMjoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaAppbmRleCA3NmI3MjM1OTAwMjNkLi5iZGJjMTdkMDcxMTA1IDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaW5zdC5oCkBAIC0xOTksNiAmIzQzOzE5OSwxMCBAQCBlbnVtIHJlZzNfb3AgewogCWFtc3dhcGhfb3AJPSAweDcwYjksCiAJYW1hZGRiX29wCT0gMHg3MGJhLAogCWFtYWRkaF9vcAk9IDB4NzBiYiwKJiM0MzsJYW1zd2FwZGJiX29wCT0gMHg3MGJjLAomIzQzOwlhbXN3YXBkYmhfb3AJPSAweDcwYmQsCiYjNDM7CWFtYWRkZGJiX29wCT0gMHg3MGJlLAomIzQzOwlhbWFkZGRiaF9vcAk9IDB4NzBiZiwKIAlhbXN3YXB3X29wCT0gMHg3MGMwLAogCWFtc3dhcGRfb3AJPSAweDcwYzEsCiAJYW1hZGR3X29wCT0gMHg3MGMyLApAQCAtNzgzLDYgJiM0Mzs3ODcsMjAgQEAgREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwYiwgYW1zd2FwYl9vcCkKIERFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGgsIGFtc3dhcGhfb3ApCiBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXB3LCBhbXN3YXB3X29wKQogREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwZCwgYW1zd2FwZF9vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkYmIsIGFtc3dhcGRiYl9vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkYmgsIGFtc3dhcGRiaF9vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFkZGRiYiwgYW1hZGRkYmJfb3ApCiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW1hZGRkYmgsIGFtYWRkZGJoX29wKQomIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYWRkZGJ3LCBhbWFkZGRid19vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFkZGRiZCwgYW1hZGRkYmRfb3ApCiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW1hbmRkYncsIGFtYW5kZGJ3X29wKQomIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYW5kZGJkLCBhbWFuZGRiZF9vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbW9yZGJ3LCBhbW9yZGJ3X29wKQomIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtb3JkYmQsIGFtb3JkYmRfb3ApCiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW14b3JkYncsIGFteG9yZGJ3X29wKQomIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFteG9yZGJkLCBhbXhvcmRiZF9vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkYncsIGFtc3dhcGRid19vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkYmQsIGFtc3dhcGRiZF9vcCkKIAogI2RlZmluZSBERUZfRU1JVF9SRUczU0EyX0ZPUk1BVChOQU1FLCBPUCkJCQkJXAogc3RhdGljIGlubGluZSB2b2lkIGVtaXRfIyNOQU1FKHVuaW9uIGxvb25nYXJjaF9pbnN0cnVjdGlvbiAqaW5zbiwJXApkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYyBiL2FyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMKaW5kZXggMjljMjgxYmVmMjhlZi4uNjg2ZDMzMzE0NmNlMiAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jCkBAIC04LDYgJiM0Mzs4LDkgQEAKICNpbmNsdWRlICZsdDthc20vYXNtLW9mZnNldHMuaCZndDsKICNpbmNsdWRlICYjMzQ7YnBmX2ppdC5oJiMzNDsKIAomIzQzOy8qIGRiYXIgaGludCBmb3IgbGwvc2MgY29tcGxldGlvbiBvcmRlcmluZywgc2VlIF9fV0VBS19MTFNDX01CICovCiYjNDM7I2RlZmluZSBEQkFSX0xMU0NfTUIJMHg3MDAKJiM0MzsKICNkZWZpbmUgTE9PTkdBUkNIX01BWF9SRUdfQVJHUyA4CiAKICNkZWZpbmUgTE9PTkdBUkNIX1NBVkVfUkFfTklOU05TICAgMQpAQCAtNDMzLDcgJiM0Mzs0MzYsNyBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpCiAJCQkJcHJfZXJyX29uY2UoJiMzNDticGYtaml0OiBhbWFkZC5iIGluc3RydWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJCWVtaXRfaW5zbihjdHgsIGFtYWRkYiwgc3JjLCB0MSwgdDMpOwomIzQzOwkJCWVtaXRfaW5zbihjdHgsIGFtYWRkZGJiLCBzcmMsIHQxLCB0Myk7CiAJCQllbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0g6CkBAIC00NDEsMzkgJiM0Mzs0NDQsMzkgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQogCQkJCXByX2Vycl9vbmNlKCYjMzQ7YnBmLWppdDogYW1hZGQuaCBpbnN0cnVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0Oyk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQllbWl0X2luc24oY3R4LCBhbWFkZGgsIHNyYywgdDEsIHQzKTsKJiM0MzsJCQllbWl0X2luc24oY3R4LCBhbWFkZGRiaCwgc3JjLCB0MSwgdDMpOwogCQkJZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIEJQRl9XOgotCQkJZW1pdF9pbnNuKGN0eCwgYW1hZGR3LCBzcmMsIHQxLCB0Myk7CiYjNDM7CQkJZW1pdF9pbnNuKGN0eCwgYW1hZGRkYncsIHNyYywgdDEsIHQzKTsKIAkJCWVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBCUEZfRFc6Ci0JCQllbWl0X2luc24oY3R4LCBhbWFkZGQsIHNyYywgdDEsIHQzKTsKJiM0MzsJCQllbWl0X2luc24oY3R4LCBhbWFkZGRiZCwgc3JjLCB0MSwgdDMpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBCUEZfQU5EIHwgQlBGX0ZFVENIOgogCQlpZiAoaXNkdykgewotCQkJZW1pdF9pbnNuKGN0eCwgYW1hbmRkLCBzcmMsIHQxLCB0Myk7CiYjNDM7CQkJZW1pdF9pbnNuKGN0eCwgYW1hbmRkYmQsIHNyYywgdDEsIHQzKTsKIAkJfSBlbHNlIHsKLQkJCWVtaXRfaW5zbihjdHgsIGFtYW5kdywgc3JjLCB0MSwgdDMpOwomIzQzOwkJCWVtaXRfaW5zbihjdHgsIGFtYW5kZGJ3LCBzcmMsIHQxLCB0Myk7CiAJCQllbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOgogCQlpZiAoaXNkdykgewotCQkJZW1pdF9pbnNuKGN0eCwgYW1vcmQsIHNyYywgdDEsIHQzKTsKJiM0MzsJCQllbWl0X2luc24oY3R4LCBhbW9yZGJkLCBzcmMsIHQxLCB0Myk7CiAJCX0gZWxzZSB7Ci0JCQllbWl0X2luc24oY3R4LCBhbW9ydywgc3JjLCB0MSwgdDMpOwomIzQzOwkJCWVtaXRfaW5zbihjdHgsIGFtb3JkYncsIHNyYywgdDEsIHQzKTsKIAkJCWVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBCUEZfWE9SIHwgQlBGX0ZFVENIOgogCQlpZiAoaXNkdykgewotCQkJZW1pdF9pbnNuKGN0eCwgYW14b3JkLCBzcmMsIHQxLCB0Myk7CiYjNDM7CQkJZW1pdF9pbnNuKGN0eCwgYW14b3JkYmQsIHNyYywgdDEsIHQzKTsKIAkJfSBlbHNlIHsKLQkJCWVtaXRfaW5zbihjdHgsIGFteG9ydywgc3JjLCB0MSwgdDMpOwomIzQzOwkJCWVtaXRfaW5zbihjdHgsIGFteG9yZGJ3LCBzcmMsIHQxLCB0Myk7CiAJCQllbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpOwogCQl9CiAJCWJyZWFrOwpAQCAtNDg1LDcgJiM0Mzs0ODgsNyBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpCiAJCQkJcHJfZXJyX29uY2UoJiMzNDticGYtaml0OiBhbXN3YXAuYiBpbnN0cnVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0Oyk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQllbWl0X2luc24oY3R4LCBhbXN3YXBiLCBzcmMsIHQxLCB0Myk7CiYjNDM7CQkJZW1pdF9pbnNuKGN0eCwgYW1zd2FwZGJiLCBzcmMsIHQxLCB0Myk7CiAJCQllbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0g6CkBAIC00OTMsMTUgJiM0Mzs0OTYsMTUgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQogCQkJCXByX2Vycl9vbmNlKCYjMzQ7YnBmLWppdDogYW1zd2FwLmggaW5zdHJ1Y3Rpb24gaXMgbm90IHN1cHBvcnRlZFxuJiMzNDspOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJZW1pdF9pbnNuKGN0eCwgYW1zd2FwaCwgc3JjLCB0MSwgdDMpOwomIzQzOwkJCWVtaXRfaW5zbihjdHgsIGFtc3dhcGRiaCwgc3JjLCB0MSwgdDMpOwogCQkJZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIEJQRl9XOgotCQkJZW1pdF9pbnNuKGN0eCwgYW1zd2Fwdywgc3JjLCB0MSwgdDMpOwomIzQzOwkJCWVtaXRfaW5zbihjdHgsIGFtc3dhcGRidywgc3JjLCB0MSwgdDMpOwogCQkJZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIEJQRl9EVzoKLQkJCWVtaXRfaW5zbihjdHgsIGFtc3dhcGQsIHNyYywgdDEsIHQzKTsKJiM0MzsJCQllbWl0X2luc24oY3R4LCBhbXN3YXBkYmQsIHNyYywgdDEsIHQzKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwpAQCAtNTI0LDYgJiM0Mzs1MjcsNyBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpCiAJCQllbWl0X2luc24oY3R4LCBiZXEsIHQzLCBMT09OR0FSQ0hfR1BSX1pFUk8sIC02KTsKIAkJCWVtaXRfemV4dF8zMihjdHgsIHIwLCB0cnVlKTsKIAkJfQomIzQzOwkJZW1pdF9pbnNuKGN0eCwgZGJhciwgREJBUl9MTFNDX01CKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfZXJyX29uY2UoJiMzNDticGYtaml0OiBpbnZhbGlkIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvcGNvZGUgJTAyeFxuJiMzNDssIGltbSk7CkBAIC0yMzkyLDYgJiM0MzsyMzk2LDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKiBJbmRpY2F0ZSB0aGUgSklUIGJhY2tlbmQgc3VwcG9ydHMgbWl4aW5nIGJwZjJicGYgYW5kIHRhaWxjYWxscy4gKi8KIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCmluZGV4IGI2NDJlZTQ4OWVhNjQuLjZkZmM4MTc0ODU4NDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKQEAgLTk4MCw2ICYjNDM7OTgwLDcgQEAgJChPVVRQVVQpL2JlbmNoX2xwbV90cmllX21hcC5vOiAkKE9VVFBVVCkvbHBtX3RyaWVfYmVuY2guc2tlbC5oICQoT1VUUFVUKS9scG1fdHIKICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm86ICQoT1VUUFVUKS9icGZfbm9wX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmgKICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubzogJChPVVRQVVQpL3hkcF9sYl9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oCiAkKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmgKJiM0MzskKE9VVFBVVCkvYmVuY2hfa3B0cl94Y2hnLm86ICQoT1VUUFVUKS9rcHRyX3hjaGdfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2gubzogYmVuY2guaCB0ZXN0aW5nX2hlbHBlcnMuaCAkKEJQRk9CSikKICQoT1VUUFVUKS9iZW5jaDogTERMSUJTICYjNDM7PSAtbG0KICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXApAQCAtMTAwNSw2ICYjNDM7MTAwNiw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcCiYjNDM7CQkgJChPVVRQVVQpL2JlbmNoX2twdHJfeGNoZy5vIFwKIAkJICQoT1VUUFVUKS91c2R0XzEubyBcCiAJCSAkKE9VVFBVVCkvdXNkdF8yLm8gXAogCQkgIwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYwppbmRleCAzZDlkMmNkNzc2NGJkLi41NTAyOTBkNjcwMWE2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYwpAQCAtNTgyLDYgJiM0Mzs1ODIsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2RlbGV0ZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZnJlZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX25vcDsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfeGRwX2xiOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfa3B0cl94Y2hnOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHsKIAkmYW1wO2JlbmNoX2NvdW50X2dsb2JhbCwKQEAgLTY2NSw2ICYjNDM7NjY2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7CiAJJmFtcDtiZW5jaF9scG1fdHJpZV9mcmVlLAogCSZhbXA7YmVuY2hfYnBmX25vcCwKIAkmYW1wO2JlbmNoX3hkcF9sYiwKJiM0MzsJJmFtcDtiZW5jaF9rcHRyX3hjaGcsCiB9OwogCiBzdGF0aWMgdm9pZCBmaW5kX2JlbmNobWFyayh2b2lkKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9rcHRyX3hjaGcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfa3B0cl94Y2hnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjhhMGQzNDZmZGE2OAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfa3B0cl94Y2hnLmMKQEAgLTAsMCAmIzQzOzEsOTYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoQykgMjAyNi4gTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkICovCiYjNDM7I2luY2x1ZGUgJmx0O2FyZ3AuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JlbmNoLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3B0cl94Y2hnX2JlbmNoLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBjdHggewomIzQzOwlzdHJ1Y3Qga3B0cl94Y2hnX2JlbmNoICpza2VsOwomIzQzO30gY3R4OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgewomIzQzOwlfX3UzMiBucl9sb29wczsKJiM0Mzt9IGFyZ3MgPSB7CiYjNDM7CS5ucl9sb29wcyA9IDI1NiwKJiM0Mzt9OwomIzQzOwomIzQzO2VudW0gewomIzQzOwlBUkdfTlJfTE9PUFMgPSA3MDAwLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7CiYjNDM7CXsgJiMzNDtucl9sb29wcyYjMzQ7LCBBUkdfTlJfTE9PUFMsICYjMzQ7bnJfbG9vcHMmIzM0OywgMCwKJiM0MzsJICAmIzM0O1NldCBudW1iZXIgb2YgYnBmX2twdHJfeGNoZygpIGNhbGxzIHBlciB0cmlnZ2VyJiMzNDt9LAomIzQzOwl7fSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoa2V5KSB7CiYjNDM7CWNhc2UgQVJHX05SX0xPT1BTOgomIzQzOwkJYXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncCBiZW5jaF9rcHRyX3hjaGdfYXJncCA9IHsKJiM0MzsJLm9wdGlvbnMgPSBvcHRzLAomIzQzOwkucGFyc2VyID0gcGFyc2VfYXJnLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2JlbmNobWFyayBkb2VzbiYjMzk7dCBzdXBwb3J0IGNvbnN1bWVyIVxuJiMzNDspOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpCiYjNDM7ewomIzQzOwl3aGlsZSAodHJ1ZSkKJiM0MzsJCXN5c2NhbGwoX19OUl9nZXRwZ2lkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKQomIzQzO3sKJiM0MzsJcmVzLSZndDtoaXRzID0gYXRvbWljX3N3YXAoJmFtcDtjdHguc2tlbC0mZ3Q7YnNzLSZndDtoaXRzLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0dXAodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfbGluayAqbGluazsKJiM0MzsKJiM0MzsJc2V0dXBfbGliYnBmKCk7CiYjNDM7CiYjNDM7CWN0eC5za2VsID0ga3B0cl94Y2hnX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghY3R4LnNrZWwpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2ZhaWxlZCB0byBvcGVuIHNrZWxldG9uXG4mIzM0Oyk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eC5za2VsLSZndDtkYXRhLSZndDtucl9sb29wcyA9IGFyZ3MubnJfbG9vcHM7CiYjNDM7CiYjNDM7CWxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKGN0eC5za2VsLSZndDtwcm9ncy5iZW5jaG1hcmspOwomIzQzOwlpZiAoIWxpbmspIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2ZhaWxlZCB0byBhdHRhY2ggcHJvZ3JhbSFcbiYjMzQ7KTsKJiM0MzsJCWV4aXQoMSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2twdHJfeGNoZyA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O2twdHIteGNoZyYjMzQ7LAomIzQzOwkuYXJncCA9ICZhbXA7YmVuY2hfa3B0cl94Y2hnX2FyZ3AsCiYjNDM7CS52YWxpZGF0ZSA9IHZhbGlkYXRlLAomIzQzOwkuc2V0dXAgPSBzZXR1cCwKJiM0MzsJLnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLAomIzQzOwkubWVhc3VyZSA9IG1lYXN1cmUsCiYjNDM7CS5yZXBvcnRfcHJvZ3Jlc3MgPSBvcHNfcmVwb3J0X3Byb2dyZXNzLAomIzQzOwkucmVwb3J0X2ZpbmFsID0gb3BzX3JlcG9ydF9maW5hbCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3B0cl94Y2hnX2lubGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3B0cl94Y2hnX2lubGluZS5jCmluZGV4IDdkZWYxNThkYTllYjcuLjEyMTVkNmVkZDU5MDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHRyX3hjaGdfaW5saW5lLmMKQEAgLTE0LDcgJiM0MzsxNCw4IEBAIHZvaWQgdGVzdF9rcHRyX3hjaGdfaW5saW5lKHZvaWQpCiAJaW50IGVycjsKIAogI2lmICEoZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKSB8fCBcCi0gICAgICAoZGVmaW5lZChfX3Jpc2N2KSAmYW1wOyZhbXA7IF9fcmlzY3ZfeGxlbiA9PSA2NCkpCiYjNDM7CShkZWZpbmVkKF9fcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0KSB8fCBcCiYjNDM7CShkZWZpbmVkKF9fbG9vbmdhcmNoX18pICZhbXA7JmFtcDsgX19sb29uZ2FyY2hfZ3JsZW4gPT0gNjQpKQogCXRlc3RfX3NraXAoKTsKIAlyZXR1cm47CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rcHRyX3hjaGdfYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rcHRyX3hjaGdfYmVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zNjM4ODMwNzNlMmMwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2twdHJfeGNoZ19iZW5jaC5jCkBAIC0wLDAgJiM0MzsxLDQ5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKEMpIDIwMjYuIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCAqLwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfZXhwZXJpbWVudGFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzOyNkZWZpbmUgTUFYX1hDSEdfTE9PUFMgNDA5NgomIzQzOwomIzQzO3N0cnVjdCBiaW5fZGF0YSB7CiYjNDM7CWNoYXIgYmxvYlszMl07CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIHByaXZhdGUobmFtZSkgU0VDKCYjMzQ7LmJzcy4mIzM0OyAjbmFtZSkgX19oaWRkZW4gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCiYjNDM7CiYjNDM7cHJpdmF0ZShrcHRyKSBzdHJ1Y3QgYmluX2RhdGEgX19rcHRyICpwdHI7CiYjNDM7dTMyIG5yX2xvb3BzID0gMjU2OwomIzQzO2xvbmcgaGl0czsKJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvJiMzNDsgU1lTX1BSRUZJWCAmIzM0O3N5c19nZXRwZ2lkJiMzNDspCiYjNDM7aW50IGJlbmNobWFyayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmluX2RhdGEgKm9sZDsKJiM0MzsJdTMyIGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNQVhfWENIR19MT09QUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChpICZndDs9IG5yX2xvb3BzKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJb2xkID0gYnBmX2twdHJfeGNoZygmYW1wO3B0ciwgTlVMTCk7CiYjNDM7CQlpZiAob2xkKQomIzQzOwkJCWJwZl9vYmpfZHJvcChvbGQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CV9fc3luY19hZGRfYW5kX2ZldGNoKCZhbXA7aGl0cywgaSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEJURiBGVU5DIHJlY29yZHMgYXJlIG5vdCBnZW5lcmF0ZWQgZm9yIGtmdW5jcyByZWZlcmVuY2VkIG9ubHkgdGhyb3VnaAomIzQzOyAqIG9wdGltaXplZCBwYXRocy4gS2VlcCBicGZfb2JqX2Ryb3AoKSB2aXNpYmxlIHRvIGxpYmJwZiYjMzk7cyBrZnVuYyBsaW5rZXIuCiYjNDM7ICovCiYjNDM7dm9pZCBfX2J0Zl9yb290KHZvaWQpCiYjNDM7ewomIzQzOwlicGZfb2JqX2Ryb3AoTlVMTCk7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTcxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogODc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgYnBmX2twdHJfeGNoZ2AuIEl0IHNlZW1zIHRoZSBjaGFuZ2VzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGV5JiMzOTt2ZSB1cGRhdGVkIGBhcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jYCBhbmQgYWRkZWQgbmV3IGluc3RydWN0aW9ucyBsaWtlIGBhbWFkZGRiYmAsIGBhbWFkZGRiaGAsIGV0Yy4sIGluIGBhcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmhgLiBUaGV5JiMzOTt2ZSBhbHNvIGluY2x1ZGVkIGEgYmVuY2htYXJrIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2twdHJfeGNoZy5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rcHRyX3hjaGdfYmVuY2guY2AsIGFuZCBtb2RpZmllZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3B0cl94Y2hnX2lubGluZS5jYCB0byBlbmFibGUgdGhlIHRlc3Qgb24gTG9vbmdBcmNoLgoKRGlnZ2luZyBpbnRvIHRoZSBgYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY2AgY2hhbmdlcywgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaXMgcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCBhdG9taWMgaW5zdHJ1Y3Rpb25zIHdpdGggZG91YmxlLWJ5dGUgdmVyc2lvbnMsIHNvIGBhbWFkZGJgIGJlY29tZXMgYGFtYWRkZGJiYCwgZXRjLiwgYW5kIGFkZHMgYGRiYXIgREJBUl9MTFNDX01CYCBhdCB0aGUgZW5kIG9mIGBlbWl0X2F0b21pY19ybXdgLiBJdCYjMzk7cyBhbHNvIGFkZGluZyBgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZygpYCByZXR1cm5pbmcgYHRydWVgLCB3aGljaCBpcyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBTbywgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZW5oYW5jaW5nIHRoZSBCUEYgSklUIHN1cHBvcnQgZm9yIGF0b21pYyBvcGVyYXRpb25zIG9uIExvb25nQXJjaC4KCkdpdmVuIHRoYXQgdGhpcyBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSwgdGVzdGluZyBpdCBuYXRpdmVseSBvbiBMb29uZ0FyY2ggaGFyZHdhcmUgb3IgYW4gZW11bGF0b3IgaXMgYSBtdXN0LiBUaGUgcXVlc3Rpb24gYmVjb21lcyB3aGV0aGVyIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBCUEYgSklULCBzbyBmdXp6aW5nIHNob3VsZCBiZSBhIGdvb2Qgc3RyYXRlZ3kuIFN5emthbGxlciBzdXBwb3J0cyBMb29uZ0FyY2gsIHJpZ2h0PyBJIHJlY2FsbCB0aGVyZSBiZWluZyBzb21lIGxldmVsIG9mIHN1cHBvcnQuIEFzc3VtaW5nIFN5emthbGxlciBpcyBjb25maWd1cmVkIGZvciBMb29uZ0FyY2gsIGl0IHNob3VsZCBiZSBhYmxlIHRvIGV4ZXJjaXNlIHRoaXMgY29kZS4KClJlZ2FyZGluZyB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZywgYGVtaXRfYXRvbWljX3Jtd2AgYW5kIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnYCBqdW1wIG91dCwgYnV0IGBlbWl0X2F0b21pY19ybXdgIGlzIGEgKnN0YXRpYyogZnVuY3Rpb24uIEdpdmVuIHRoZSBwcm9tcHQmIzM5O3MgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVhbCBlbnRyeSBwb2ludC4gVGhlIG1vcmUgZ2VuZXJhbCBlbnRyeSBwb2ludCBmb3IgQlBGIEpJVCBjb21waWxhdGlvbiBvbiBMb29uZ0FyY2ggd2lsbCBsaWtlbHkgYmUgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBzbyBJIHdpbGwgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIxODY9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIyMDAtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIyMDE6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjIwMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU5MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gQlBGIEpJVCBhbmQgTG9vbmdBcmNoKioKCkFscmlnaHQsIHNvIHRoZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb24sIHRoYXQmIzM5O3MgdGhlIG9uZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLCB0aGUgZW50cnkgcG9pbnQgZm9yIEpJVCBjb21waWxhdGlvbi4gR290IGl0LiBBbmQgaGV5LCBsb29rcyBsaWtlIHdlIGhhdmUgYGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGdgIGFzIHdlbGwsIGFuZCBpdCYjMzk7cyBub3Qgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmb3IgcG90ZW50aWFsIGV4dGVybmFsIGFjY2VzcyBvciBwZXJoYXBzIGZvciBtb3JlIGZsZXhpYmxlIGludGVybmFsIHVzYWdlLgoKTm93LCB3aGVyZSBkbyB3ZSBzdGFuZCB3aXRoIEtjb25maWcgb3B0aW9ucz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBCUEYgSklUIHNwZWNpZmljYWxseSBvbiBMb29uZ0FyY2guIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgY29uZGl0aW9uYWxseSBjb21waWxlZC4gR290dGEgdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIHdoYXQgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBiZWZvcmUgSSBjYW4gZGlnIGRlZXBlci4gVGhpcyBpcyBnb2luZyB0byBzZXQgdGhlIHN0YWdlIGZvciBob3cgbXVjaCBvZiB0aGlzIHdvcmsgaGFzIGJlZW4gZG9uZSBiZWZvcmUgYW5kIGhvdyBtdWNoIHRoZXJlIGlzIGZvciBtZSB0byB0aGluayB0aHJvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4ODkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBCUEZfSklUYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoaWRpbmcuIE15IGluaXRpYWwgaW5zdGluY3QsIGJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZSBhbmQgY29tbW9uIGtlcm5lbCBvcmdhbml6YXRpb25hbCBwYXR0ZXJucywgaXMgdG8gbG9vayBpbiB0aGUgc3RhbmRhcmQgcGxhY2VzLiBUeXBpY2FsbHksIHRoZXNlIHNvcnRzIG9mIHRoaW5ncyDigJMgdGhlIGVuYWJsaW5nIG9mIEpJVCBjb21waWxhdGlvbiBmb3IgQlBGIOKAkyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIG1haW4ga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgaXQgZWl0aGVyIHdpdGhpbiB0aGUgY29yZSBgaW5pdC9LY29uZmlnYCBmaWxlLCByZWZsZWN0aW5nIGl0cyBmdW5kYW1lbnRhbCBuYXR1cmUsIG9yIHBlcmhhcHMgd2l0aGluIGBuZXQvS2NvbmZpZ2AsIGdpdmVuIEJQRiYjMzk7cyBzdHJvbmcgYXNzb2NpYXRpb24gd2l0aCBuZXR3b3JraW5nLiBUaGVyZSYjMzk7cyBhbHdheXMgYSBjaGFuY2UgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gYW4gYXJjaGl0ZWN0dXJlLCBzbyBJIHNob3VsZCBhbHNvIGNoZWNrIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRlZmluaXRpb24gb3IgZGVwZW5kZW5jeSBpbiB0aGVyZS4gSXTigJlzIGFuIGV4cGxvcmF0b3J5IHByb2Nlc3MuIEtub3dpbmcgdGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgd2lsbCB1c3VhbGx5IHRlbGwgbWUgZXhhY3RseSB3aGVyZSB0byBsb29rIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxOTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqRXhhbWluaW5nIHRoZSBMb29uZ0FyY2ggS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTG9vbmdBcmNoIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSBvdmVyIHRvIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYCBhbmQgdGFrZSBhIGRlZXAgZGl2ZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBvcHRpb25zLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGFsbCB0aGUgdmFyaW91cyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmdzLCBib2FyZC1zcGVjaWZpYyBvcHRpb25zIGlmIHRoZXkmIzM5O3JlIHJlbGV2YW50LCBhbmQgaG93IHRoaW5ncyB0aWUgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgdGltZSB0byBidWlsZCBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiB0aGUgTG9vbmdBcmNoIGNvbmZpZ3VyYXRpb24gc3BhY2UuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9CUEZfSklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQyMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTdXBwb3J0IGluIHRoZSBMb29uZ0FyY2ggS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgQlBGIGlzIGVuYWJsZWQgb3IgY29uZmlndXJhYmxlIGZvciB0aGUgTG9vbmdBcmNoIGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLCB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGUuIFRoYXQgd291bGQgYmUgYGFyY2gvbG9vbmdhcmNoL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgaW5jbHVkaW5nIHRob3NlIHJlbGF0ZWQgdG8gZmVhdHVyZXMgbGlrZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpLCBzaG91bGQgYmUgZGVmaW5lZCBvciBhdCBsZWFzdCByZWZlcmVuY2VkLiBJIHdpbGwgbm93IG9wZW4gdGhhdCBmaWxlIGFuZCBsb29rIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIEJQRiBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGRpcmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiAoYENPTkZJR19CUEY9eS9uL21gKSBvciBtYXliZSBhIGRlcGVuZGVuY3kgY2hlY2sgdGhhdCBpcyBzcGVjaWZpYyB0byBMb29uZ0FyY2guIE15IGpvYiBub3cgaXMgdG8gZGV0ZXJtaW5lIGlmIEJQRiBzdXBwb3J0IGV4aXN0cywgYW5kIGlmIHNvLCBob3cgaXQgaXMgbWFuYWdlZCB3aXRoaW4gdGhlIExvb25nQXJjaCBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTc5LVx0c2VsZWN0IEFSQ0hfVVNFX1FVRVVFRF9TUElOTE9DS1NcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6ODA6XHRzZWxlY3QgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCBpZiBIQVZFX0VCUEZfSklUXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTgxLVx0c2VsZWN0IEFSQ0hfV0FOVF9ERUZBVUxUX1RPUERPV05fTU1BUF9MQVlPVVRcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0My1cdHNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzoxNDQ6XHRzZWxlY3QgSEFWRV9FQlBGX0pJVCBpZiA2NEJJVFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xNDUtXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpZiAhQVJDSF9TVFJJQ1RfQUxJR05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg3NwoJCQkJCQkJb3V0cHV0OiA3MQoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBCUEYgSklUIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgdGhlIGBCUEZfSklUYCBvcHRpb24gaXMgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYEhBVkVfRUJQRl9KSVRgIGlzIGNob3Nlbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBJIGFsc28gbmVlZCBgQlBGX1NZU0NBTExgIGVuYWJsZWQgYXMgd2VsbC4gVGhhdCYjMzk7cyBhIGtleSBkZXBlbmRlbmN5LgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnRzIG9yIGZ1bmN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgc2VlIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnYCBpcyBpbiBwbGF5LiBBbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBgYnBmX2ludF9qaXRfY29tcGlsZWAuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLgoKVGltZSB0byBkaXZlIGEgYml0IGRlZXBlci4gSSBzaG91bGQgY2hlY2sgYGFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmNgIHRvIHNlZSBpZiBJJiMzOTttIG1pc3NpbmcgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9mIG5vdGUuIE5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueXRoaW5nIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9Mjc5PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yODMtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjI4NDpib29sIGJwZl9qaXRfc3VwcG9ydHNfa2Z1bmNfY2FsbCh2b2lkKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yODUte1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjg4LVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyODk6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2Zhcl9rZnVuY19jYWxsKHZvaWQpXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTI5MC17XG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz02MzM9c3RhdGljIGJvb2wgaXNfc2lnbmVkX2JwZl9jb25kKHU4IGNvbmQpXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy02NDItXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjY0Mzpib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy02NDQtXHRcdCAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTE1Nzg9dm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTU5MC1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTU5MTppbnQgYnBmX2FyY2hfdGV4dF9wb2tlKHZvaWQgKmlwLCBlbnVtIGJwZl90ZXh0X3Bva2VfdHlwZSBvbGRfdCxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTU5Mi1cdFx0ICAgICAgIGVudW0gYnBmX3RleHRfcG9rZV90eXBlIG5ld190LCB2b2lkICpvbGRfYWRkcixcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE2NDMtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE2NDQ6aW50IGJwZl9hcmNoX3RleHRfaW52YWxpZGF0ZSh2b2lkICpkc3QsIHNpemVfdCBsZW4pXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE2NDUte1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MTc5NT12b2lkICphcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHVuc2lnbmVkIGludCBzaXplKVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTc5OS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTgwMDp2b2lkIGFyY2hfZnJlZV9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE4MDEte1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTgwNC1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTgwNTppbnQgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTgwNi17XG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0xODQxPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTQ3LVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTQ4OmludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJvX2ltYWdlLFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTQ5LVx0XHRcdFx0dm9pZCAqcm9faW1hZ2VfZW5kLCBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTg1LVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTg2OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxODctXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIyMDE9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzNTQtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIzNTU6dm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMzU2LXtcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzNzgtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIzNzk6Ym9vbCBicGZfaml0X2J5cGFzc19zcGVjX3YxKHZvaWQpXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzODAte1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM4My1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MjM4NDpib29sIGJwZl9qaXRfYnlwYXNzX3NwZWNfdjQodm9pZClcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM4NS17XG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMzg4LVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMzg5OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMzkwLXtcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzOTMtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIzOTQ6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzOTUte1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM5OC1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MjM5OTpib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZClcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjQwMC17XG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yNDA0LS8qIEluZGljYXRlIHRoZSBKSVQgYmFja2VuZCBzdXBwb3J0cyBtaXhpbmcgYnBmMmJwZiBhbmQgdGFpbGNhbGxzLiAqL1xuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyNDA1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yNDA2LXtcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTI0MDktXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjI0MTA6Ym9vbCBicGZfaml0X2lubGluZXNfaGVscGVyX2NhbGwoczMyIGltbSlcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjQxMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDUxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgTG9vbmdBcmNoIEJQRiBKSVQgcGF0Y2guIEZyb20gd2hhdCBJIHNlZSwgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYWRkZWQgYXJlIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnYCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiAgSG9sZCBvbiwgYGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGdgIGlzIGp1c3QgYSBzaW1wbGUgYm9vbGVhbiByZXR1cm4g4oCTIG5vdCBtdWNoIHRvIGRpZyBpbnRvIHRoZXJlLiAgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGxvb2tzIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnQsIHRoZSByZWFsIGhlYXJ0IG9mIHRoZXNlIGNoYW5nZXMuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGNvbmNlbnRyYXRlLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgc2VlIHRoYXQgYGVtaXRfYXRvbWljX3Jtd2AgaXMgYWxzbyB0b3VjaGVkLCBhbmQgdGhhdCYjMzk7cyBjYWxsZWQgYnkgYGJ1aWxkX2luc25gLCB3aGljaCBpcyBjYWxsZWQgYnkgYGJ1aWxkX2JvZHlgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgYnBmX2ludF9qaXRfY29tcGlsZWAuIENvbmZpcm1lZCwgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IHN5bWJvbCB0byBob25lIGluIG9uLgoKTmV4dCB1cCwgdGhlIGNvbmZpZ3VyYXRpb24uICBMb29rcyBsaWtlIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgbWFuZGF0b3J5IGZvciB0aGlzIHRvIHdvcmsuICBUaGF0JiMzOTtzIHN0YW5kYXJkLCBhbmQgZWFzeSBlbm91Z2ggdG8gdmVyaWZ5LgoKTm93LCBhIHF1aWNrIHByYWN0aWNhbCBjb25zaWRlcmF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSBpZiBJIGNhbiBhY3R1YWxseSB0ZXN0IHRoaXMuICBDYW4gSSByZWFjaCB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgaW4gUUVNVT8gWWVzLCBsb29rcyBsaWtlIFFFTVUgc3VwcG9ydHMgTG9vbmdBcmNoNjQgZW11bGF0aW9uLCBhbmQgc3l6a2FsbGVyIGNhbiBydW4gaXQuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24uICBUaGUgY2hhbmdlcyBzZWVtIGZ1bmN0aW9uYWwgYW5kIGRpcmVjdGx5IHdpdGhpbiB0aGUgY29yZSBrZXJuZWwgKEJQRiBKSVQpLiAgVGhlcmVmb3JlLCBXb3J0aEZ1enppbmc9dHJ1ZS4KClNvLCB0byBzdW1tYXJpemUsIHRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhdG9taWMgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgY29tcGlsZXIsIGluY2x1ZGluZyBhIGJlbmNobWFyayBmb3IgYGJwZl9rcHRyX3hjaGdgLiAgVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bmN0aW9uYWwsIGFuZCBJIGNhbiB0ZXN0IGl0IGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIHRoZXNlIGF0b21pYyBvcGVyYXRpb25zIG9uIGEgTG9vbmdBcmNoIHN5c3RlbS4KCioqQ29uZmlnczoqKgoKKiAgIGBCUEZfSklUYAoqICAgYEJQRl9TWVNDQUxMYAoKKipGb2N1c1N5bWJvbDoqKgoKKiAgIGBicGZfaW50X2ppdF9jb21waWxlYAoKQW5kIEkgd2lsbCBkbyBhIHF1aWNrIGNoZWNrIG9uIHRoYXQgZnVuY3Rpb24gaW4gYGFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmNgIHRvIHNlZSB0aGUgZGV0YWlscyBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0yMTg2PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMjAwLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMjAxOnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIyMDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgYnBmX2ludF9qaXRfY29tcGlsZWAgaW4gRW11bGF0ZWQgTG9vbmdBcmNoIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyBjb3JyZWN0OiBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgaW5kZWVkIHRoZSBmdW5jdGlvbiB0byBjb25zaWRlci4gSG93ZXZlciwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IGNvZGUgcGF0aHMgdGhhdCBhcmUgKnVucmVhY2hhYmxlKiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgcGFydGljdWxhcmx5IHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIEJ1dCB3YWl0LCBMb29uZ0FyY2ggKmlzKiBlbXVsYXRhYmxlIGluIFFFTVUsIGFuZCBTeXprYWxsZXIgZXZlbiBzdXBwb3J0cyBhIExvb25nQXJjaCB0YXJnZXQuIFRoYXQgY2hhbmdlcyB0aGluZ3MuIFRoaXMgcGF0aCAqaXMqIHJlYWNoYWJsZS4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgdGhpbmsgYWJvdXQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLiBXZSBkZWZpbml0ZWx5IG5lZWQgYEJQRl9TWVNDQUxMYCBmb3IgQlBGIHRvIGZ1bmN0aW9uLCBhbmQgYEJQRl9KSVRgIGZvciB0aGUgSklUIGNvbXBpbGVyIGl0c2VsZi4gQXJlIHRoZXJlIGFueSBMb29uZ0FyY2gtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbmVlZCBjb25zaWRlcmF0aW9uPyBUaGUgYXJjaGl0ZWN0dXJlIGl0c2VsZiBpcyBgTE9PTkdBUkNIYCwgYnV0IHRoYXQmIzM5O3MgdGhlIGFyY2hpdGVjdHVyZSBpZGVudGlmaWVyLiBXZSYjMzk7cmUgY29uY2VybmVkIHdpdGggZmVhdHVyZXMsIHNvIHRoZSBhcmNoaXRlY3R1cmUgY29uZmlnIGl0c2VsZiBpcyBub3Qgd2hhdCB3ZSYjMzk7cmUgYWZ0ZXIuCgpGaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjazogQ2FuIHdlIGFjdHVhbGx5ICpmb2N1cyogb24gYGJwZl9rcHRyX3hjaGdgIHdpdGhpbiB0aGlzIGNvbnRleHQ/IFRoYXQmIzM5O3MgYSBCUEYgaGVscGVyL2tmdW5jLCByaWdodD8gU28sIGlzIGl0IGFjdHVhbGx5IGRlZmluZWQgYW5kIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGtlcm5lbD8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2twdHJfeGNoZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmM9MTQ4MT1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMzEyLVxua2VybmVsL2JwZi9maXh1cHMuYzoyMzEzOlx0XHQvKiBJbXBsZW1lbnQgYnBmX2twdHJfeGNoZyBpbmxpbmUgKi9cbmtlcm5lbC9icGYvZml4dXBzLmMtMjMxNC1cdFx0aWYgKHByb2ctXHUwMDNlaml0X3JlcXVlc3RlZCBcdTAwMjZcdTAwMjYgQklUU19QRVJfTE9ORyA9PSA2NCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xNzI2PXZvaWQgYnBmX3dxX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp2YWwpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTczMC1cbmtlcm5lbC9icGYvaGVscGVycy5jOjE3MzE6QlBGX0NBTExfMihicGZfa3B0cl94Y2hnLCB2b2lkICosIGRzdCwgdm9pZCAqLCBwdHIpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzMyLXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzM4LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTczOTovKiBVbmxpa2Ugb3RoZXIgUFRSX1RPX0JURl9JRCBoZWxwZXJzIHRoZSBidGZfaWQgaW4gYnBmX2twdHJfeGNoZygpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzQwLSAqIGhlbHBlciBpcyBkZXRlcm1pbmVkIGR5bmFtaWNhbGx5IGJ5IHRoZSB2ZXJpZmllci4gVXNlIEJQRl9QVFJfUE9JU09OIHRvXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTc0Mi0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjE3NDM6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa3B0cl94Y2hnX3Byb3RvID0ge1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MTc0NDpcdC5mdW5jICAgICAgICAgPSBicGZfa3B0cl94Y2hnLFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTc0NS1cdC5ncGxfb25seSAgICAgPSBmYWxzZSxcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yMDY3PWJwZl9iYXNlX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE0Ni1cdGNhc2UgQlBGX0ZVTkNfa3B0cl94Y2hnOlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjE0NzpcdFx0cmV0dXJuIFx1MDAyNmJwZl9rcHRyX3hjaGdfcHJvdG87XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMTQ4LVx0Y2FzZSBCUEZfRlVOQ19mb3JfZWFjaF9tYXBfZWxlbTpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzE2Nz1zdGF0aWMgaW50IHByb2Nlc3Nfa3B0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzE4MC1cdFx0aWYgKCFtYXBfcHRyLVx1MDAzZWJ0Zikge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjcxODE6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21hcCAmIzM5OyVzJiMzOTsgaGFzIHRvIGhhdmUgQlRGIGluIG9yZGVyIHRvIHVzZSBicGZfa3B0cl94Y2hnXFxuXCYjMzQ7LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxODItXHRcdFx0XHRtYXBfcHRyLVx1MDAzZW5hbWUpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03ODMzPXN0YXRpYyBpbnQgY2hlY2tfcmVnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzg2Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODY3Olx0LyogTG9jYWwga3B0ciB0eXBlcyBhcmUgYWxsb3dlZCBhcyB0aGUgc291cmNlIGFyZ3VtZW50IG9mIGJwZl9rcHRyX3hjaGcgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODY4LVx0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBCUEZfRlVOQ19rcHRyX3hjaGcgXHUwMDI2XHUwMDI2IHR5cGVfaXNfYWxsb2ModHlwZSkgXHUwMDI2XHUwMDI2IHJlZ19mcm9tX2FyZ25vKGFyZ25vKSA9PSBCUEZfUkVHXzIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NjAKCQkJCQkJCW91dHB1dDogMTExCgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIExvb25nQXJjaCBCUEYgSklUIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIHRoZSBMb29uZ0FyY2ggYXJjaGl0ZWN0dXJlIGFuZCBpdHMgaW1wbGljYXRpb25zLiBJdCYjMzk7cyBjbGVhciBmcm9tIHRoZSBkZXNjcmlwdGlvbiB0aGF0IHRoZSBjb3JlIG9mIHRoaXMgd29yayByZXZvbHZlcyBhcm91bmQgYWRkaW5nIHN1cHBvcnQgZm9yIGBicGZfa3B0cl94Y2hnYCB3aXRoaW4gdGhlIEp1c3QtSW4tVGltZSAoSklUKSBjb21waWxlci4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0JiMzOTtzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gYXRvbWljIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgY29udGV4dCwgd2hpY2ggY291bGQgb3BlbiB0aGUgZG9vciBmb3IgbW9yZSBjb21wbGV4IGFuZCBlZmZpY2llbnQgQlBGIHByb2dyYW1zLiBHaXZlbiB0aGF0IGZvY3VzLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIGtleSBzeW1ib2wgSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIHdpdGhpbiB0aGUgSklUIGluZnJhc3RydWN0dXJlLgoKVGhlIGV4aXN0ZW5jZSBvZiBhIGJlbmNobWFyayBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9rcHRyX3hjaGcuY2AgaXMgaW1wb3J0YW50OyBpdCBzdWdnZXN0cyB3ZSBoYXZlIGEgdXNlci1zcGFjZSB0ZXN0YmVkIHRvIGV2YWx1YXRlIHRoZSBlZmZlY3RpdmVuZXNzIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGlzIGF0b21pYyBpbXBsZW1lbnRhdGlvbi4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgc29tZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0LiAmIzM0O1dvcnRoRnV6emluZzogdHJ1ZSYjMzQ7IGlzIGEgbm8tYnJhaW5lci4gVGhlIGltcGxlbWVudGF0aW9uIG9mIGF0b21pYyBvcGVyYXRpb25zIGlzIGEgY3JpdGljYWwgYXJlYSwgc28gaXTigJlzIGxpa2VseSB0aGF0IGFueSBidWdzIG9yIGlzc3VlcyB3aWxsIHNob3cgdXAgcXVpY2tseS4KCiYjMzQ7Rm9jdXNTeW1ib2xzOiBbXCYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZVwmIzM0O10mIzM0OyBpcyBteSB3YXkgb2YgbmFycm93aW5nIHRoZSBmdXp6aW5nIHNjb3BlIHRvIHRoZSByZWxldmFudCBwb3J0aW9uIG9mIHRoZSBjb2RlIGFuZCB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guCgpBbmQgZmluYWxseSwgdG8gY29uZmlndXJlIHRoZSB0ZXN0IGFuZCBtYWtlIHN1cmUgdGhhdCB3ZSBnZXQgYWNjdXJhdGUgcmVzdWx0cywgSSYjMzk7bGwgZW5hYmxlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnM6ICYjMzQ7RW5hYmxlQ29uZmlnczogW1wmIzM0O0JQRl9KSVRcJiMzNDssIFwmIzM0O0JQRl9TWVNDQUxMXCYjMzQ7XSYjMzQ7LgoKVGhpcyBpcyB0aGUgcmVhc29uaW5nIEkmIzM5O2xsIGJhc2UgbXkgZnV6emluZzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhdG9taWMgaW5zdHJ1Y3Rpb25zIGluIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBjb21waWxlciBhbmQgZW5hYmxlcyB0aGUgYnBmX2twdHJfeGNoZyBpbmxpbmUgdGVzdC4gVGhlIEJQRiBKSVQgbW9kaWZpY2F0aW9ucyBhcmUgZnVuY3Rpb25hbCBhbmQgY2FuIGJlIHRlc3RlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBjb250YWluaW5nIHRoZXNlIGF0b21pYyBvcGVyYXRpb25zLiYjMzQ7IFRoaXMgZXNzZW50aWFsbHkgYm9pbHMgZG93biB0bzogJiMzNDtBdG9taWMgb3BzIGluIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBhcmUgbm93IGEgdGhpbmc7IGxldCYjMzk7cyBwb2tlIGF0IHRoZW0hJiMzNDsgSSYjMzk7bSBub3cgcmVhZHkgdG8gc3RhcnQgcnVubmluZyB0aGlzIHRocm91Z2ggdGhlIHBhY2VzIGFuZCBzZWUgd2hhdCBwb3BzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhdG9taWMgaW5zdHJ1Y3Rpb25zIGluIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBjb21waWxlciBhbmQgZW5hYmxlcyB0aGUgYnBmX2twdHJfeGNoZyBpbmxpbmUgdGVzdC4gVGhlIEJQRiBKSVQgbW9kaWZpY2F0aW9ucyBhcmUgZnVuY3Rpb25hbCBhbmQgY2FuIGJlIHRlc3RlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBjb250YWluaW5nIHRoZXNlIGF0b21pYyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGF0b21pYyBpbnN0cnVjdGlvbnMgaW4gdGhlIExvb25nQXJjaCBCUEYgSklUIGNvbXBpbGVyIGFuZCBlbmFibGVzIHRoZSBicGZfa3B0cl94Y2hnIGlubGluZSB0ZXN0LiBUaGUgQlBGIEpJVCBtb2RpZmljYXRpb25zIGFyZSBmdW5jdGlvbmFsIGFuZCBjYW4gYmUgdGVzdGVkIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIGNvbnRhaW5pbmcgdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjoyMC40NTgwMDc5NzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY4MDU2NTY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGF0b21pYyBpbnN0cnVjdGlvbnMgaW4gdGhlIExvb25nQXJjaCBCUEYgSklUIGNvbXBpbGVyIGFuZCBlbmFibGVzIHRoZSBicGZfa3B0cl94Y2hnIGlubGluZSB0ZXN0LiBUaGUgQlBGIEpJVCBtb2RpZmljYXRpb25zIGFyZSBmdW5jdGlvbmFsIGFuZCBjYW4gYmUgdGVzdGVkIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIGNvbnRhaW5pbmcgdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjMyOjIwLjQ1ODAxMjgwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3OTAyNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzc2NTc4Mzc2MjM5YmU1MjAzZDAxZmQ3MjE0ODYxOWM4NDU5NmI1NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAwNzozMjoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmhcXG5pbmRleCA3NmI3MjM1OTAwMjNkLi5iZGJjMTdkMDcxMTA1IDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaFxcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaFxcbkBAIC0xOTksNiArMTk5LDEwIEBAIGVudW0gcmVnM19vcCB7XFxuIFxcdGFtc3dhcGhfb3BcXHQ9IDB4NzBiOSxcXG4gXFx0YW1hZGRiX29wXFx0PSAweDcwYmEsXFxuIFxcdGFtYWRkaF9vcFxcdD0gMHg3MGJiLFxcbitcXHRhbXN3YXBkYmJfb3BcXHQ9IDB4NzBiYyxcXG4rXFx0YW1zd2FwZGJoX29wXFx0PSAweDcwYmQsXFxuK1xcdGFtYWRkZGJiX29wXFx0PSAweDcwYmUsXFxuK1xcdGFtYWRkZGJoX29wXFx0PSAweDcwYmYsXFxuIFxcdGFtc3dhcHdfb3BcXHQ9IDB4NzBjMCxcXG4gXFx0YW1zd2FwZF9vcFxcdD0gMHg3MGMxLFxcbiBcXHRhbWFkZHdfb3BcXHQ9IDB4NzBjMixcXG5AQCAtNzgzLDYgKzc4NywyMCBAQCBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBiLCBhbXN3YXBiX29wKVxcbiBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBoLCBhbXN3YXBoX29wKVxcbiBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXB3LCBhbXN3YXB3X29wKVxcbiBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkLCBhbXN3YXBkX29wKVxcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkYmIsIGFtc3dhcGRiYl9vcClcXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwZGJoLCBhbXN3YXBkYmhfb3ApXFxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYWRkZGJiLCBhbWFkZGRiYl9vcClcXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1hZGRkYmgsIGFtYWRkZGJoX29wKVxcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFkZGRidywgYW1hZGRkYndfb3ApXFxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYWRkZGJkLCBhbWFkZGRiZF9vcClcXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1hbmRkYncsIGFtYW5kZGJ3X29wKVxcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFuZGRiZCwgYW1hbmRkYmRfb3ApXFxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtb3JkYncsIGFtb3JkYndfb3ApXFxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtb3JkYmQsIGFtb3JkYmRfb3ApXFxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFteG9yZGJ3LCBhbXhvcmRid19vcClcXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW14b3JkYmQsIGFteG9yZGJkX29wKVxcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkYncsIGFtc3dhcGRid19vcClcXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwZGJkLCBhbXN3YXBkYmRfb3ApXFxuIFxcbiAjZGVmaW5lIERFRl9FTUlUX1JFRzNTQTJfRk9STUFUKE5BTUUsIE9QKVxcdFxcdFxcdFxcdFxcXFxcXG4gc3RhdGljIGlubGluZSB2b2lkIGVtaXRfIyNOQU1FKHVuaW9uIGxvb25nYXJjaF9pbnN0cnVjdGlvbiAqaW5zbixcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMgYi9hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jXFxuaW5kZXggMjljMjgxYmVmMjhlZi4uNjg2ZDMzMzE0NmNlMiAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY1xcbkBAIC04LDYgKzgsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2FzbS1vZmZzZXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJicGZfaml0LmhcXFwiXFxuIFxcbisvKiBkYmFyIGhpbnQgZm9yIGxsL3NjIGNvbXBsZXRpb24gb3JkZXJpbmcsIHNlZSBfX1dFQUtfTExTQ19NQiAqL1xcbisjZGVmaW5lIERCQVJfTExTQ19NQlxcdDB4NzAwXFxuK1xcbiAjZGVmaW5lIExPT05HQVJDSF9NQVhfUkVHX0FSR1MgOFxcbiBcXG4gI2RlZmluZSBMT09OR0FSQ0hfU0FWRV9SQV9OSU5TTlMgICAxXFxuQEAgLTQzMyw3ICs0MzYsNyBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuIFxcdFxcdFxcdFxcdHByX2Vycl9vbmNlKFxcXCJicGYtaml0OiBhbWFkZC5iIGluc3RydWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbWFkZGIsIHNyYywgdDEsIHQzKTtcXG4rXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkYmIsIHNyYywgdDEsIHQzKTtcXG4gXFx0XFx0XFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgQlBGX0g6XFxuQEAgLTQ0MSwzOSArNDQ0LDM5IEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfcm13KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4gXFx0XFx0XFx0XFx0cHJfZXJyX29uY2UoXFxcImJwZi1qaXQ6IGFtYWRkLmggaW5zdHJ1Y3Rpb24gaXMgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtYWRkaCwgc3JjLCB0MSwgdDMpO1xcbitcXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbWFkZGRiaCwgc3JjLCB0MSwgdDMpO1xcbiBcXHRcXHRcXHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBCUEZfVzpcXG4tXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGR3LCBzcmMsIHQxLCB0Myk7XFxuK1xcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtYWRkZGJ3LCBzcmMsIHQxLCB0Myk7XFxuIFxcdFxcdFxcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEJQRl9EVzpcXG4tXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkLCBzcmMsIHQxLCB0Myk7XFxuK1xcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtYWRkZGJkLCBzcmMsIHQxLCB0Myk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9BTkQgfCBCUEZfRkVUQ0g6XFxuIFxcdFxcdGlmIChpc2R3KSB7XFxuLVxcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtYW5kZCwgc3JjLCB0MSwgdDMpO1xcbitcXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbWFuZGRiZCwgc3JjLCB0MSwgdDMpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbWFuZHcsIHNyYywgdDEsIHQzKTtcXG4rXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1hbmRkYncsIHNyYywgdDEsIHQzKTtcXG4gXFx0XFx0XFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBCUEZfT1IgfCBCUEZfRkVUQ0g6XFxuIFxcdFxcdGlmIChpc2R3KSB7XFxuLVxcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtb3JkLCBzcmMsIHQxLCB0Myk7XFxuK1xcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtb3JkYmQsIHNyYywgdDEsIHQzKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1vcncsIHNyYywgdDEsIHQzKTtcXG4rXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1vcmRidywgc3JjLCB0MSwgdDMpO1xcbiBcXHRcXHRcXHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9YT1IgfCBCUEZfRkVUQ0g6XFxuIFxcdFxcdGlmIChpc2R3KSB7XFxuLVxcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFteG9yZCwgc3JjLCB0MSwgdDMpO1xcbitcXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbXhvcmRiZCwgc3JjLCB0MSwgdDMpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbXhvcncsIHNyYywgdDEsIHQzKTtcXG4rXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW14b3JkYncsIHNyYywgdDEsIHQzKTtcXG4gXFx0XFx0XFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG5AQCAtNDg1LDcgKzQ4OCw3IEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfcm13KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4gXFx0XFx0XFx0XFx0cHJfZXJyX29uY2UoXFxcImJwZi1qaXQ6IGFtc3dhcC5iIGluc3RydWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbXN3YXBiLCBzcmMsIHQxLCB0Myk7XFxuK1xcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGRiYiwgc3JjLCB0MSwgdDMpO1xcbiBcXHRcXHRcXHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBCUEZfSDpcXG5AQCAtNDkzLDE1ICs0OTYsMTUgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbiBcXHRcXHRcXHRcXHRwcl9lcnJfb25jZShcXFwiYnBmLWppdDogYW1zd2FwLmggaW5zdHJ1Y3Rpb24gaXMgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGgsIHNyYywgdDEsIHQzKTtcXG4rXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2FwZGJoLCBzcmMsIHQxLCB0Myk7XFxuIFxcdFxcdFxcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEJQRl9XOlxcbi1cXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbXN3YXB3LCBzcmMsIHQxLCB0Myk7XFxuK1xcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGRidywgc3JjLCB0MSwgdDMpO1xcbiBcXHRcXHRcXHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBCUEZfRFc6XFxuLVxcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGQsIHNyYywgdDEsIHQzKTtcXG4rXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2FwZGJkLCBzcmMsIHQxLCB0Myk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC01MjQsNiArNTI3LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbiBcXHRcXHRcXHRlbWl0X2luc24oY3R4LCBiZXEsIHQzLCBMT09OR0FSQ0hfR1BSX1pFUk8sIC02KTtcXG4gXFx0XFx0XFx0ZW1pdF96ZXh0XzMyKGN0eCwgcjAsIHRydWUpO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGVtaXRfaW5zbihjdHgsIGRiYXIsIERCQVJfTExTQ19NQik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRwcl9lcnJfb25jZShcXFwiYnBmLWppdDogaW52YWxpZCBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgb3Bjb2RlICUwMnhcXFxcblxcXCIsIGltbSk7XFxuQEAgLTIzOTIsNiArMjM5NiwxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiAvKiBJbmRpY2F0ZSB0aGUgSklUIGJhY2tlbmQgc3VwcG9ydHMgbWl4aW5nIGJwZjJicGYgYW5kIHRhaWxjYWxscy4gKi9cXG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuaW5kZXggYjY0MmVlNDg5ZWE2NC4uNmRmYzgxNzQ4NTg0NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG5AQCAtOTgwLDYgKzk4MCw3IEBAICQoT1VUUFVUKS9iZW5jaF9scG1fdHJpZV9tYXAubzogJChPVVRQVVQpL2xwbV90cmllX2JlbmNoLnNrZWwuaCAkKE9VVFBVVCkvbHBtX3RyXFxuICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm86ICQoT1VUUFVUKS9icGZfbm9wX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcXG4gJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vOiAkKE9VVFBVVCkveGRwX2xiX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcXG4gJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubzogYmVuY2hfYnBmX3RpbWluZy5oXFxuKyQoT1VUUFVUKS9iZW5jaF9rcHRyX3hjaGcubzogJChPVVRQVVQpL2twdHJfeGNoZ19iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoLm86IGJlbmNoLmggdGVzdGluZ19oZWxwZXJzLmggJChCUEZPQkopXFxuICQoT1VUUFVUKS9iZW5jaDogTERMSUJTICs9IC1sbVxcbiAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXFxcXG5AQCAtMTAwNSw2ICsxMDA2LDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vIFxcXFxcXG4rXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9rcHRyX3hjaGcubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL3VzZHRfMi5vIFxcXFxcXG4gXFx0XFx0ICNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbmluZGV4IDNkOWQyY2Q3NzY0YmQuLjU1MDI5MGQ2NzAxYTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbkBAIC01ODIsNiArNTgyLDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9scG1fdHJpZV9kZWxldGU7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZnJlZTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbm9wO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3hkcF9sYjtcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9rcHRyX3hjaGc7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcXG4gXFx0XFx1MDAyNmJlbmNoX2NvdW50X2dsb2JhbCxcXG5AQCAtNjY1LDYgKzY2Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xcbiBcXHRcXHUwMDI2YmVuY2hfbHBtX3RyaWVfZnJlZSxcXG4gXFx0XFx1MDAyNmJlbmNoX2JwZl9ub3AsXFxuIFxcdFxcdTAwMjZiZW5jaF94ZHBfbGIsXFxuK1xcdFxcdTAwMjZiZW5jaF9rcHRyX3hjaGcsXFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCBmaW5kX2JlbmNobWFyayh2b2lkKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2twdHJfeGNoZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9rcHRyX3hjaGcuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjhhMGQzNDZmZGE2OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2twdHJfeGNoZy5jXFxuQEAgLTAsMCArMSw5NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKEMpIDIwMjYuIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCAqL1xcbisjaW5jbHVkZSBcXHUwMDNjYXJncC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYmVuY2guaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtwdHJfeGNoZ19iZW5jaC5za2VsLmhcXFwiXFxuK1xcbitzdGF0aWMgc3RydWN0IGN0eCB7XFxuK1xcdHN0cnVjdCBrcHRyX3hjaGdfYmVuY2ggKnNrZWw7XFxuK30gY3R4O1xcbitcXG4rc3RhdGljIHN0cnVjdCB7XFxuK1xcdF9fdTMyIG5yX2xvb3BzO1xcbit9IGFyZ3MgPSB7XFxuK1xcdC5ucl9sb29wcyA9IDI1NixcXG4rfTtcXG4rXFxuK2VudW0ge1xcbitcXHRBUkdfTlJfTE9PUFMgPSA3MDAwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XFxuK1xcdHsgXFxcIm5yX2xvb3BzXFxcIiwgQVJHX05SX0xPT1BTLCBcXFwibnJfbG9vcHNcXFwiLCAwLFxcbitcXHQgIFxcXCJTZXQgbnVtYmVyIG9mIGJwZl9rcHRyX3hjaGcoKSBjYWxscyBwZXIgdHJpZ2dlclxcXCJ9LFxcbitcXHR7fSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRzd2l0Y2ggKGtleSkge1xcbitcXHRjYXNlIEFSR19OUl9MT09QUzpcXG4rXFx0XFx0YXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBBUkdQX0VSUl9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2twdHJfeGNoZ19hcmdwID0ge1xcbitcXHQub3B0aW9ucyA9IG9wdHMsXFxuK1xcdC5wYXJzZXIgPSBwYXJzZV9hcmcsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKVxcbit7XFxuK1xcdGlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJiZW5jaG1hcmsgZG9lc24ndCBzdXBwb3J0IGNvbnN1bWVyIVxcXFxuXFxcIik7XFxuK1xcdFxcdGV4aXQoMSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgKnByb2R1Y2VyKHZvaWQgKmlucHV0KVxcbit7XFxuK1xcdHdoaWxlICh0cnVlKVxcbitcXHRcXHRzeXNjYWxsKF9fTlJfZ2V0cGdpZCk7XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWVhc3VyZShzdHJ1Y3QgYmVuY2hfcmVzICpyZXMpXFxuK3tcXG4rXFx0cmVzLVxcdTAwM2VoaXRzID0gYXRvbWljX3N3YXAoXFx1MDAyNmN0eC5za2VsLVxcdTAwM2Vic3MtXFx1MDAzZWhpdHMsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXR1cCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfbGluayAqbGluaztcXG4rXFxuK1xcdHNldHVwX2xpYmJwZigpO1xcbitcXG4rXFx0Y3R4LnNrZWwgPSBrcHRyX3hjaGdfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFjdHguc2tlbCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZhaWxlZCB0byBvcGVuIHNrZWxldG9uXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbitcXG4rXFx0Y3R4LnNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZW5yX2xvb3BzID0gYXJncy5ucl9sb29wcztcXG4rXFxuK1xcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKGN0eC5za2VsLVxcdTAwM2Vwcm9ncy5iZW5jaG1hcmspO1xcbitcXHRpZiAoIWxpbmspIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gYXR0YWNoIHByb2dyYW0hXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfa3B0cl94Y2hnID0ge1xcbitcXHQubmFtZSA9IFxcXCJrcHRyLXhjaGdcXFwiLFxcbitcXHQuYXJncCA9IFxcdTAwMjZiZW5jaF9rcHRyX3hjaGdfYXJncCxcXG4rXFx0LnZhbGlkYXRlID0gdmFsaWRhdGUsXFxuK1xcdC5zZXR1cCA9IHNldHVwLFxcbitcXHQucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsXFxuK1xcdC5tZWFzdXJlID0gbWVhc3VyZSxcXG4rXFx0LnJlcG9ydF9wcm9ncmVzcyA9IG9wc19yZXBvcnRfcHJvZ3Jlc3MsXFxuK1xcdC5yZXBvcnRfZmluYWwgPSBvcHNfcmVwb3J0X2ZpbmFsLFxcbit9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHRyX3hjaGdfaW5saW5lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHRyX3hjaGdfaW5saW5lLmNcXG5pbmRleCA3ZGVmMTU4ZGE5ZWI3Li4xMjE1ZDZlZGQ1OTA2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuY1xcbkBAIC0xNCw3ICsxNCw4IEBAIHZvaWQgdGVzdF9rcHRyX3hjaGdfaW5saW5lKHZvaWQpXFxuIFxcdGludCBlcnI7XFxuIFxcbiAjaWYgIShkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pIHx8IFxcXFxcXG4tICAgICAgKGRlZmluZWQoX19yaXNjdikgXFx1MDAyNlxcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSlcXG4rXFx0KGRlZmluZWQoX19yaXNjdikgXFx1MDAyNlxcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSB8fCBcXFxcXFxuK1xcdChkZWZpbmVkKF9fbG9vbmdhcmNoX18pIFxcdTAwMjZcXHUwMDI2IF9fbG9vbmdhcmNoX2dybGVuID09IDY0KSlcXG4gXFx0dGVzdF9fc2tpcCgpO1xcbiBcXHRyZXR1cm47XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3B0cl94Y2hnX2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3B0cl94Y2hnX2JlbmNoLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjM2Mzg4MzA3M2UyYzBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2twdHJfeGNoZ19iZW5jaC5jXFxuQEAgLTAsMCArMSw0OSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKEMpIDIwMjYuIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCAqL1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiYnBmX2V4cGVyaW1lbnRhbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rI2RlZmluZSBNQVhfWENIR19MT09QUyA0MDk2XFxuK1xcbitzdHJ1Y3QgYmluX2RhdGEge1xcbitcXHRjaGFyIGJsb2JbMzJdO1xcbit9O1xcbitcXG4rI2RlZmluZSBwcml2YXRlKG5hbWUpIFNFQyhcXFwiLmJzcy5cXFwiICNuYW1lKSBfX2hpZGRlbiBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSlcXG4rXFxuK3ByaXZhdGUoa3B0cikgc3RydWN0IGJpbl9kYXRhIF9fa3B0ciAqcHRyO1xcbit1MzIgbnJfbG9vcHMgPSAyNTY7XFxuK2xvbmcgaGl0cztcXG4rXFxuK1NFQyhcXFwiZmVudHJ5L1xcXCIgU1lTX1BSRUZJWCBcXFwic3lzX2dldHBnaWRcXFwiKVxcbitpbnQgYmVuY2htYXJrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgYmluX2RhdGEgKm9sZDtcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX1hDSEdfTE9PUFM7IGkrKykge1xcbitcXHRcXHRpZiAoaSBcXHUwMDNlPSBucl9sb29wcylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRvbGQgPSBicGZfa3B0cl94Y2hnKFxcdTAwMjZwdHIsIE5VTEwpO1xcbitcXHRcXHRpZiAob2xkKVxcbitcXHRcXHRcXHRicGZfb2JqX2Ryb3Aob2xkKTtcXG4rXFx0fVxcbitcXG4rXFx0X19zeW5jX2FkZF9hbmRfZmV0Y2goXFx1MDAyNmhpdHMsIGkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogQlRGIEZVTkMgcmVjb3JkcyBhcmUgbm90IGdlbmVyYXRlZCBmb3Iga2Z1bmNzIHJlZmVyZW5jZWQgb25seSB0aHJvdWdoXFxuKyAqIG9wdGltaXplZCBwYXRocy4gS2VlcCBicGZfb2JqX2Ryb3AoKSB2aXNpYmxlIHRvIGxpYmJwZidzIGtmdW5jIGxpbmtlci5cXG4rICovXFxuK3ZvaWQgX19idGZfcm9vdCh2b2lkKVxcbit7XFxuK1xcdGJwZl9vYmpfZHJvcChOVUxMKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjoyMC43ODY2MTMxMjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NDM1MTk1MTQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGF0b21pYyBpbnN0cnVjdGlvbnMgaW4gdGhlIExvb25nQXJjaCBCUEYgSklUIGNvbXBpbGVyIGFuZCBlbmFibGVzIHRoZSBicGZfa3B0cl94Y2hnIGlubGluZSB0ZXN0LiBUaGUgQlBGIEpJVCBtb2RpZmljYXRpb25zIGFyZSBmdW5jdGlvbmFsIGFuZCBjYW4gYmUgdGVzdGVkIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIGNvbnRhaW5pbmcgdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3NjU3ODM3NjIzOWJlNTIwM2QwMWZkNzIxNDg2MTljODQ1OTZiNTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwNzozMjoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaFxuaW5kZXggNzZiNzIzNTkwMDIzZC4uYmRiYzE3ZDA3MTEwNSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaW5zdC5oXG5AQCAtMTk5LDYgKzE5OSwxMCBAQCBlbnVtIHJlZzNfb3Age1xuIFx0YW1zd2FwaF9vcFx0PSAweDcwYjksXG4gXHRhbWFkZGJfb3BcdD0gMHg3MGJhLFxuIFx0YW1hZGRoX29wXHQ9IDB4NzBiYixcbitcdGFtc3dhcGRiYl9vcFx0PSAweDcwYmMsXG4rXHRhbXN3YXBkYmhfb3BcdD0gMHg3MGJkLFxuK1x0YW1hZGRkYmJfb3BcdD0gMHg3MGJlLFxuK1x0YW1hZGRkYmhfb3BcdD0gMHg3MGJmLFxuIFx0YW1zd2Fwd19vcFx0PSAweDcwYzAsXG4gXHRhbXN3YXBkX29wXHQ9IDB4NzBjMSxcbiBcdGFtYWRkd19vcFx0PSAweDcwYzIsXG5AQCAtNzgzLDYgKzc4NywyMCBAQCBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBiLCBhbXN3YXBiX29wKVxuIERFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGgsIGFtc3dhcGhfb3ApXG4gREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwdywgYW1zd2Fwd19vcClcbiBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkLCBhbXN3YXBkX29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGRiYiwgYW1zd2FwZGJiX29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGRiaCwgYW1zd2FwZGJoX29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYWRkZGJiLCBhbWFkZGRiYl9vcClcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFkZGRiaCwgYW1hZGRkYmhfb3ApXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1hZGRkYncsIGFtYWRkZGJ3X29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYWRkZGJkLCBhbWFkZGRiZF9vcClcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFuZGRidywgYW1hbmRkYndfb3ApXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1hbmRkYmQsIGFtYW5kZGJkX29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtb3JkYncsIGFtb3JkYndfb3ApXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1vcmRiZCwgYW1vcmRiZF9vcClcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbXhvcmRidywgYW14b3JkYndfb3ApXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW14b3JkYmQsIGFteG9yZGJkX29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGRidywgYW1zd2FwZGJ3X29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGRiZCwgYW1zd2FwZGJkX29wKVxuIFxuICNkZWZpbmUgREVGX0VNSVRfUkVHM1NBMl9GT1JNQVQoTkFNRSwgT1ApXHRcdFx0XHRcXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0XyMjTkFNRSh1bmlvbiBsb29uZ2FyY2hfaW5zdHJ1Y3Rpb24gKmluc24sXHRcXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMgYi9hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jXG5pbmRleCAyOWMyODFiZWYyOGVmLi42ODZkMzMzMTQ2Y2UyIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY1xuKysrIGIvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY1xuQEAgLTgsNiArOCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2FzbS1vZmZzZXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImJwZl9qaXQuaFwiXG4gXG4rLyogZGJhciBoaW50IGZvciBsbC9zYyBjb21wbGV0aW9uIG9yZGVyaW5nLCBzZWUgX19XRUFLX0xMU0NfTUIgKi9cbisjZGVmaW5lIERCQVJfTExTQ19NQlx0MHg3MDBcbitcbiAjZGVmaW5lIExPT05HQVJDSF9NQVhfUkVHX0FSR1MgOFxuIFxuICNkZWZpbmUgTE9PTkdBUkNIX1NBVkVfUkFfTklOU05TICAgMVxuQEAgLTQzMyw3ICs0MzYsNyBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4gXHRcdFx0XHRwcl9lcnJfb25jZShcImJwZi1qaXQ6IGFtYWRkLmIgaW5zdHJ1Y3Rpb24gaXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbWFkZGIsIHNyYywgdDEsIHQzKTtcbitcdFx0XHRlbWl0X2luc24oY3R4LCBhbWFkZGRiYiwgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX0g6XG5AQCAtNDQxLDM5ICs0NDQsMzkgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuIFx0XHRcdFx0cHJfZXJyX29uY2UoXCJicGYtaml0OiBhbWFkZC5oIGluc3RydWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcXG5cIik7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRoLCBzcmMsIHQxLCB0Myk7XG4rXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkYmgsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEJQRl9XOlxuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtYWRkdywgc3JjLCB0MSwgdDMpO1xuK1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtYWRkZGJ3LCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBCUEZfRFc6XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkLCBzcmMsIHQxLCB0Myk7XG4rXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkYmQsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0FORCB8IEJQRl9GRVRDSDpcbiBcdFx0aWYgKGlzZHcpIHtcbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbWFuZGQsIHNyYywgdDEsIHQzKTtcbitcdFx0XHRlbWl0X2luc24oY3R4LCBhbWFuZGRiZCwgc3JjLCB0MSwgdDMpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtYW5kdywgc3JjLCB0MSwgdDMpO1xuK1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtYW5kZGJ3LCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOlxuIFx0XHRpZiAoaXNkdykge1xuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtb3JkLCBzcmMsIHQxLCB0Myk7XG4rXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1vcmRiZCwgc3JjLCB0MSwgdDMpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtb3J3LCBzcmMsIHQxLCB0Myk7XG4rXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1vcmRidywgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9YT1IgfCBCUEZfRkVUQ0g6XG4gXHRcdGlmIChpc2R3KSB7XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW14b3JkLCBzcmMsIHQxLCB0Myk7XG4rXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW14b3JkYmQsIHNyYywgdDEsIHQzKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbXhvcncsIHNyYywgdDEsIHQzKTtcbitcdFx0XHRlbWl0X2luc24oY3R4LCBhbXhvcmRidywgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG5AQCAtNDg1LDcgKzQ4OCw3IEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfcm13KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbiBcdFx0XHRcdHByX2Vycl9vbmNlKFwiYnBmLWppdDogYW1zd2FwLmIgaW5zdHJ1Y3Rpb24gaXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbXN3YXBiLCBzcmMsIHQxLCB0Myk7XG4rXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2FwZGJiLCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBCUEZfSDpcbkBAIC00OTMsMTUgKzQ5NiwxNSBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4gXHRcdFx0XHRwcl9lcnJfb25jZShcImJwZi1qaXQ6IGFtc3dhcC5oIGluc3RydWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcXG5cIik7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2FwaCwgc3JjLCB0MSwgdDMpO1xuK1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGRiaCwgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX1c6XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2Fwdywgc3JjLCB0MSwgdDMpO1xuK1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGRidywgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX0RXOlxuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGQsIHNyYywgdDEsIHQzKTtcbitcdFx0XHRlbWl0X2luc24oY3R4LCBhbXN3YXBkYmQsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRicmVhaztcbkBAIC01MjQsNiArNTI3LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuIFx0XHRcdGVtaXRfaW5zbihjdHgsIGJlcSwgdDMsIExPT05HQVJDSF9HUFJfWkVSTywgLTYpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHIwLCB0cnVlKTtcbiBcdFx0fVxuK1x0XHRlbWl0X2luc24oY3R4LCBkYmFyLCBEQkFSX0xMU0NfTUIpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHByX2Vycl9vbmNlKFwiYnBmLWppdDogaW52YWxpZCBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgb3Bjb2RlICUwMnhcXG5cIiwgaW1tKTtcbkBAIC0yMzkyLDYgKzIzOTYsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnKHZvaWQpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qIEluZGljYXRlIHRoZSBKSVQgYmFja2VuZCBzdXBwb3J0cyBtaXhpbmcgYnBmMmJwZiBhbmQgdGFpbGNhbGxzLiAqL1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IGI2NDJlZTQ4OWVhNjQuLjZkZmM4MTc0ODU4NDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTk4MCw2ICs5ODAsNyBAQCAkKE9VVFBVVCkvYmVuY2hfbHBtX3RyaWVfbWFwLm86ICQoT1VUUFVUKS9scG1fdHJpZV9iZW5jaC5za2VsLmggJChPVVRQVVQpL2xwbV90clxuICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm86ICQoT1VUUFVUKS9icGZfbm9wX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcbiAkKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm86ICQoT1VUUFVUKS94ZHBfbGJfYmVuY2guc2tlbC5oIGJlbmNoX2JwZl90aW1pbmcuaFxuICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm86IGJlbmNoX2JwZl90aW1pbmcuaFxuKyQoT1VUUFVUKS9iZW5jaF9rcHRyX3hjaGcubzogJChPVVRQVVQpL2twdHJfeGNoZ19iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2gubzogYmVuY2guaCB0ZXN0aW5nX2hlbHBlcnMuaCAkKEJQRk9CSilcbiAkKE9VVFBVVCkvYmVuY2g6IExETElCUyArPSAtbG1cbiAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXG5AQCAtMTAwNSw2ICsxMDA2LDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9ub3AubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vIFxcXG4rXHRcdCAkKE9VVFBVVCkvYmVuY2hfa3B0cl94Y2hnLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS91c2R0XzEubyBcXFxuIFx0XHQgJChPVVRQVVQpL3VzZHRfMi5vIFxcXG4gXHRcdCAjXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuaW5kZXggM2Q5ZDJjZDc3NjRiZC4uNTUwMjkwZDY3MDFhNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuQEAgLTU4Miw2ICs1ODIsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2RlbGV0ZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2ZyZWU7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbm9wO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfeGRwX2xiO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfa3B0cl94Y2hnO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xuIFx0XHUwMDI2YmVuY2hfY291bnRfZ2xvYmFsLFxuQEAgLTY2NSw2ICs2NjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcbiBcdFx1MDAyNmJlbmNoX2xwbV90cmllX2ZyZWUsXG4gXHRcdTAwMjZiZW5jaF9icGZfbm9wLFxuIFx0XHUwMDI2YmVuY2hfeGRwX2xiLFxuK1x0XHUwMDI2YmVuY2hfa3B0cl94Y2hnLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgZmluZF9iZW5jaG1hcmsodm9pZClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2twdHJfeGNoZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9rcHRyX3hjaGcuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4YTBkMzQ2ZmRhNjhcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfa3B0cl94Y2hnLmNcbkBAIC0wLDAgKzEsOTYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoQykgMjAyNi4gTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkICovXG4rI2luY2x1ZGUgXHUwMDNjYXJncC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJiZW5jaC5oXCJcbisjaW5jbHVkZSBcImtwdHJfeGNoZ19iZW5jaC5za2VsLmhcIlxuK1xuK3N0YXRpYyBzdHJ1Y3QgY3R4IHtcbitcdHN0cnVjdCBrcHRyX3hjaGdfYmVuY2ggKnNrZWw7XG4rfSBjdHg7XG4rXG4rc3RhdGljIHN0cnVjdCB7XG4rXHRfX3UzMiBucl9sb29wcztcbit9IGFyZ3MgPSB7XG4rXHQubnJfbG9vcHMgPSAyNTYsXG4rfTtcbitcbitlbnVtIHtcbitcdEFSR19OUl9MT09QUyA9IDcwMDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdHNbXSA9IHtcbitcdHsgXCJucl9sb29wc1wiLCBBUkdfTlJfTE9PUFMsIFwibnJfbG9vcHNcIiwgMCxcbitcdCAgXCJTZXQgbnVtYmVyIG9mIGJwZl9rcHRyX3hjaGcoKSBjYWxscyBwZXIgdHJpZ2dlclwifSxcbitcdHt9LFxuK307XG4rXG4rc3RhdGljIGVycm9yX3QgcGFyc2VfYXJnKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHN3aXRjaCAoa2V5KSB7XG4rXHRjYXNlIEFSR19OUl9MT09QUzpcbitcdFx0YXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfa3B0cl94Y2hnX2FyZ3AgPSB7XG4rXHQub3B0aW9ucyA9IG9wdHMsXG4rXHQucGFyc2VyID0gcGFyc2VfYXJnLFxuK307XG4rXG4rc3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZClcbit7XG4rXHRpZiAoZW52LmNvbnN1bWVyX2NudCAhPSAwKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImJlbmNobWFyayBkb2Vzbid0IHN1cHBvcnQgY29uc3VtZXIhXFxuXCIpO1xuK1x0XHRleGl0KDEpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpXG4re1xuK1x0d2hpbGUgKHRydWUpXG4rXHRcdHN5c2NhbGwoX19OUl9nZXRwZ2lkKTtcbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcylcbit7XG4rXHRyZXMtXHUwMDNlaGl0cyA9IGF0b21pY19zd2FwKFx1MDAyNmN0eC5za2VsLVx1MDAzZWJzcy1cdTAwM2VoaXRzLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0dXAodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4rXG4rXHRzZXR1cF9saWJicGYoKTtcbitcbitcdGN0eC5za2VsID0ga3B0cl94Y2hnX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIWN0eC5za2VsKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBvcGVuIHNrZWxldG9uXFxuXCIpO1xuK1x0XHRleGl0KDEpO1xuK1x0fVxuK1xuK1x0Y3R4LnNrZWwtXHUwMDNlZGF0YS1cdTAwM2Vucl9sb29wcyA9IGFyZ3MubnJfbG9vcHM7XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChjdHguc2tlbC1cdTAwM2Vwcm9ncy5iZW5jaG1hcmspO1xuK1x0aWYgKCFsaW5rKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBhdHRhY2ggcHJvZ3JhbSFcXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9rcHRyX3hjaGcgPSB7XG4rXHQubmFtZSA9IFwia3B0ci14Y2hnXCIsXG4rXHQuYXJncCA9IFx1MDAyNmJlbmNoX2twdHJfeGNoZ19hcmdwLFxuK1x0LnZhbGlkYXRlID0gdmFsaWRhdGUsXG4rXHQuc2V0dXAgPSBzZXR1cCxcbitcdC5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlcixcbitcdC5tZWFzdXJlID0gbWVhc3VyZSxcbitcdC5yZXBvcnRfcHJvZ3Jlc3MgPSBvcHNfcmVwb3J0X3Byb2dyZXNzLFxuK1x0LnJlcG9ydF9maW5hbCA9IG9wc19yZXBvcnRfZmluYWwsXG4rfTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHRyX3hjaGdfaW5saW5lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHRyX3hjaGdfaW5saW5lLmNcbmluZGV4IDdkZWYxNThkYTllYjcuLjEyMTVkNmVkZDU5MDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHRyX3hjaGdfaW5saW5lLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuY1xuQEAgLTE0LDcgKzE0LDggQEAgdm9pZCB0ZXN0X2twdHJfeGNoZ19pbmxpbmUodm9pZClcbiBcdGludCBlcnI7XG4gXG4gI2lmICEoZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKSB8fCBcXFxuLSAgICAgIChkZWZpbmVkKF9fcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpKVxuK1x0KGRlZmluZWQoX19yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcbitcdChkZWZpbmVkKF9fbG9vbmdhcmNoX18pIFx1MDAyNlx1MDAyNiBfX2xvb25nYXJjaF9ncmxlbiA9PSA2NCkpXG4gXHR0ZXN0X19za2lwKCk7XG4gXHRyZXR1cm47XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2twdHJfeGNoZ19iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2twdHJfeGNoZ19iZW5jaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzYzODgzMDczZTJjMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2twdHJfeGNoZ19iZW5jaC5jXG5AQCAtMCwwICsxLDQ5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKEMpIDIwMjYuIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCAqL1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbisjZGVmaW5lIE1BWF9YQ0hHX0xPT1BTIDQwOTZcbitcbitzdHJ1Y3QgYmluX2RhdGEge1xuK1x0Y2hhciBibG9iWzMyXTtcbit9O1xuK1xuKyNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoXCIuYnNzLlwiICNuYW1lKSBfX2hpZGRlbiBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSlcbitcbitwcml2YXRlKGtwdHIpIHN0cnVjdCBiaW5fZGF0YSBfX2twdHIgKnB0cjtcbit1MzIgbnJfbG9vcHMgPSAyNTY7XG4rbG9uZyBoaXRzO1xuK1xuK1NFQyhcImZlbnRyeS9cIiBTWVNfUFJFRklYIFwic3lzX2dldHBnaWRcIilcbitpbnQgYmVuY2htYXJrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYmluX2RhdGEgKm9sZDtcbitcdHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX1hDSEdfTE9PUFM7IGkrKykge1xuK1x0XHRpZiAoaSBcdTAwM2U9IG5yX2xvb3BzKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnB0ciwgTlVMTCk7XG4rXHRcdGlmIChvbGQpXG4rXHRcdFx0YnBmX29ial9kcm9wKG9sZCk7XG4rXHR9XG4rXG4rXHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcdTAwMjZoaXRzLCBpKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIEJURiBGVU5DIHJlY29yZHMgYXJlIG5vdCBnZW5lcmF0ZWQgZm9yIGtmdW5jcyByZWZlcmVuY2VkIG9ubHkgdGhyb3VnaFxuKyAqIG9wdGltaXplZCBwYXRocy4gS2VlcCBicGZfb2JqX2Ryb3AoKSB2aXNpYmxlIHRvIGxpYmJwZidzIGtmdW5jIGxpbmtlci5cbisgKi9cbit2b2lkIF9fYnRmX3Jvb3Qodm9pZClcbit7XG4rXHRicGZfb2JqX2Ryb3AoTlVMTCk7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MzI6MjAuNzg2NjE0ODIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExNzU5MTU0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgYnBmX2twdHJfeGNoZ2AuIEl0IHNlZW1zIHRoZSBjaGFuZ2VzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGV5J3ZlIHVwZGF0ZWQgYGFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmNgIGFuZCBhZGRlZCBuZXcgaW5zdHJ1Y3Rpb25zIGxpa2UgYGFtYWRkZGJiYCwgYGFtYWRkZGJoYCwgZXRjLiwgaW4gYGFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaGAuIFRoZXkndmUgYWxzbyBpbmNsdWRlZCBhIGJlbmNobWFyayBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9rcHRyX3hjaGcuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3B0cl94Y2hnX2JlbmNoLmNgLCBhbmQgbW9kaWZpZWQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuY2AgdG8gZW5hYmxlIHRoZSB0ZXN0IG9uIExvb25nQXJjaC5cblxuRGlnZ2luZyBpbnRvIHRoZSBgYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY2AgY2hhbmdlcywgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaXMgcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCBhdG9taWMgaW5zdHJ1Y3Rpb25zIHdpdGggZG91YmxlLWJ5dGUgdmVyc2lvbnMsIHNvIGBhbWFkZGJgIGJlY29tZXMgYGFtYWRkZGJiYCwgZXRjLiwgYW5kIGFkZHMgYGRiYXIgREJBUl9MTFNDX01CYCBhdCB0aGUgZW5kIG9mIGBlbWl0X2F0b21pY19ybXdgLiBJdCdzIGFsc28gYWRkaW5nIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnKClgIHJldHVybmluZyBgdHJ1ZWAsIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdC4gU28sIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZW5oYW5jaW5nIHRoZSBCUEYgSklUIHN1cHBvcnQgZm9yIGF0b21pYyBvcGVyYXRpb25zIG9uIExvb25nQXJjaC5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlLCB0ZXN0aW5nIGl0IG5hdGl2ZWx5IG9uIExvb25nQXJjaCBoYXJkd2FyZSBvciBhbiBlbXVsYXRvciBpcyBhIG11c3QuIFRoZSBxdWVzdGlvbiBiZWNvbWVzIHdoZXRoZXIgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgQlBGIEpJVCwgc28gZnV6emluZyBzaG91bGQgYmUgYSBnb29kIHN0cmF0ZWd5LiBTeXprYWxsZXIgc3VwcG9ydHMgTG9vbmdBcmNoLCByaWdodD8gSSByZWNhbGwgdGhlcmUgYmVpbmcgc29tZSBsZXZlbCBvZiBzdXBwb3J0LiBBc3N1bWluZyBTeXprYWxsZXIgaXMgY29uZmlndXJlZCBmb3IgTG9vbmdBcmNoLCBpdCBzaG91bGQgYmUgYWJsZSB0byBleGVyY2lzZSB0aGlzIGNvZGUuXG5cblJlZ2FyZGluZyB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZywgYGVtaXRfYXRvbWljX3Jtd2AgYW5kIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnYCBqdW1wIG91dCwgYnV0IGBlbWl0X2F0b21pY19ybXdgIGlzIGEgKnN0YXRpYyogZnVuY3Rpb24uIEdpdmVuIHRoZSBwcm9tcHQncyBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cywgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWFsIGVudHJ5IHBvaW50LiBUaGUgbW9yZSBnZW5lcmFsIGVudHJ5IHBvaW50IGZvciBCUEYgSklUIGNvbXBpbGF0aW9uIG9uIExvb25nQXJjaCB3aWxsIGxpa2VseSBiZSBgYnBmX2ludF9qaXRfY29tcGlsZWAsIHNvIEkgd2lsbCBjaGVjayB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTcxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MzI6MzEuOTYyNTMyNTc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMjM0NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIxODY9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjIwMC1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIyMDE6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIyMDIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjozMi4wMDM3NjkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3ODkwMDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEJQRiBKSVQgYW5kIExvb25nQXJjaCoqXG5cbkFscmlnaHQsIHNvIHRoZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb24sIHRoYXQncyB0aGUgb25lIHdlJ3JlIGRlYWxpbmcgd2l0aCwgdGhlIGVudHJ5IHBvaW50IGZvciBKSVQgY29tcGlsYXRpb24uIEdvdCBpdC4gQW5kIGhleSwgbG9va3MgbGlrZSB3ZSBoYXZlIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnYCBhcyB3ZWxsLCBhbmQgaXQncyBub3Qgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmb3IgcG90ZW50aWFsIGV4dGVybmFsIGFjY2VzcyBvciBwZXJoYXBzIGZvciBtb3JlIGZsZXhpYmxlIGludGVybmFsIHVzYWdlLlxuXG5Ob3csIHdoZXJlIGRvIHdlIHN0YW5kIHdpdGggS2NvbmZpZyBvcHRpb25zPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIEJQRiBKSVQgc3BlY2lmaWNhbGx5IG9uIExvb25nQXJjaC4gTGV0J3Mgc2VlIHdoYXQncyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgY29uZGl0aW9uYWxseSBjb21waWxlZC4gR290dGEgdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIHdoYXQgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBiZWZvcmUgSSBjYW4gZGlnIGRlZXBlci4gVGhpcyBpcyBnb2luZyB0byBzZXQgdGhlIHN0YWdlIGZvciBob3cgbXVjaCBvZiB0aGlzIHdvcmsgaGFzIGJlZW4gZG9uZSBiZWZvcmUgYW5kIGhvdyBtdWNoIHRoZXJlIGlzIGZvciBtZSB0byB0aGluayB0aHJvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MzI6MzUuNzgyNjcyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk3NjU5MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjozNS44Mjc2NTYwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODU4MjI5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBCUEZfSklUYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoaWRpbmcuIE15IGluaXRpYWwgaW5zdGluY3QsIGJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZSBhbmQgY29tbW9uIGtlcm5lbCBvcmdhbml6YXRpb25hbCBwYXR0ZXJucywgaXMgdG8gbG9vayBpbiB0aGUgc3RhbmRhcmQgcGxhY2VzLiBUeXBpY2FsbHksIHRoZXNlIHNvcnRzIG9mIHRoaW5ncyDigJMgdGhlIGVuYWJsaW5nIG9mIEpJVCBjb21waWxhdGlvbiBmb3IgQlBGIOKAkyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIG1haW4ga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknZCBleHBlY3QgdG8gZmluZCBpdCBlaXRoZXIgd2l0aGluIHRoZSBjb3JlIGBpbml0L0tjb25maWdgIGZpbGUsIHJlZmxlY3RpbmcgaXRzIGZ1bmRhbWVudGFsIG5hdHVyZSwgb3IgcGVyaGFwcyB3aXRoaW4gYG5ldC9LY29uZmlnYCwgZ2l2ZW4gQlBGJ3Mgc3Ryb25nIGFzc29jaWF0aW9uIHdpdGggbmV0d29ya2luZy4gVGhlcmUncyBhbHdheXMgYSBjaGFuY2UgaXQncyBzcGVjaWZpYyB0byBhbiBhcmNoaXRlY3R1cmUsIHNvIEkgc2hvdWxkIGFsc28gY2hlY2sgYGFyY2gvbG9vbmdhcmNoL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSdzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZWZpbml0aW9uIG9yIGRlcGVuZGVuY3kgaW4gdGhlcmUuIEl04oCZcyBhbiBleHBsb3JhdG9yeSBwcm9jZXNzLiBLbm93aW5nIHRoZSBnZW5lcmFsIGxheW91dCBvZiB0aGUga2VybmVsIGNvbmZpZyBvcHRpb25zIHdpbGwgdXN1YWxseSB0ZWxsIG1lIGV4YWN0bHkgd2hlcmUgdG8gbG9vayFcblxuXG4iLCJJbnB1dFRva2VucyI6ODg4OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjMyOjM5LjQxMzQ4MTA2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk5NDg1MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjozOS40NTc0ODEwNzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAzNzI3MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqRXhhbWluaW5nIHRoZSBMb29uZ0FyY2ggS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBMb29uZ0FyY2gga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgYXJjaGl0ZWN0dXJlLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgb3ZlciB0byBgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ2AgYW5kIHRha2UgYSBkZWVwIGRpdmUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBvcHRpb25zLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGFsbCB0aGUgdmFyaW91cyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3MsIGJvYXJkLXNwZWNpZmljIG9wdGlvbnMgaWYgdGhleSdyZSByZWxldmFudCwgYW5kIGhvdyB0aGluZ3MgdGllIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0J3MgdGltZSB0byBidWlsZCBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiB0aGUgTG9vbmdBcmNoIGNvbmZpZ3VyYXRpb24gc3BhY2UuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxOTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjo0Mi44NjEyMTAwNzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjI5NzkxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0JQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjo0Mi45MDU0NDYzNzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1NDUyODIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN1cHBvcnQgaW4gdGhlIExvb25nQXJjaCBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIEJQRiBpcyBlbmFibGVkIG9yIGNvbmZpZ3VyYWJsZSBmb3IgdGhlIExvb25nQXJjaCBhcmNoaXRlY3R1cmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSwgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlLiBUaGF0IHdvdWxkIGJlIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGluY2x1ZGluZyB0aG9zZSByZWxhdGVkIHRvIGZlYXR1cmVzIGxpa2UgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSwgc2hvdWxkIGJlIGRlZmluZWQgb3IgYXQgbGVhc3QgcmVmZXJlbmNlZC4gSSB3aWxsIG5vdyBvcGVuIHRoYXQgZmlsZSBhbmQgbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBCUEYgZnVuY3Rpb25hbGl0eS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGRpcmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiAoYENPTkZJR19CUEY9eS9uL21gKSBvciBtYXliZSBhIGRlcGVuZGVuY3kgY2hlY2sgdGhhdCBpcyBzcGVjaWZpYyB0byBMb29uZ0FyY2guIE15IGpvYiBub3cgaXMgdG8gZGV0ZXJtaW5lIGlmIEJQRiBzdXBwb3J0IGV4aXN0cywgYW5kIGlmIHNvLCBob3cgaXQgaXMgbWFuYWdlZCB3aXRoaW4gdGhlIExvb25nQXJjaCBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjo0Ny40NTk5NzY0MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODE1MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2xvb25nYXJjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTc5LVxcdHNlbGVjdCBBUkNIX1VTRV9RVUVVRURfU1BJTkxPQ0tTXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo4MDpcXHRzZWxlY3QgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCBpZiBIQVZFX0VCUEZfSklUXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy04MS1cXHRzZWxlY3QgQVJDSF9XQU5UX0RFRkFVTFRfVE9QRE9XTl9NTUFQX0xBWU9VVFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xNDMtXFx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzoxNDQ6XFx0c2VsZWN0IEhBVkVfRUJQRl9KSVQgaWYgNjRCSVRcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0NS1cXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpZiAhQVJDSF9TVFJJQ1RfQUxJR05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MzI6NDcuNTAxNzkzMzA4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDA1MjcyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEpJVCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhhdCB0aGUgYEJQRl9KSVRgIG9wdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBgSEFWRV9FQlBGX0pJVGAgaXMgY2hvc2VuLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IEkgYWxzbyBuZWVkIGBCUEZfU1lTQ0FMTGAgZW5hYmxlZCBhcyB3ZWxsLiBUaGF0J3MgYSBrZXkgZGVwZW5kZW5jeS5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBlbnRyeSBwb2ludHMgb3IgZnVuY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBzZWUgYGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGdgIGlzIGluIHBsYXkuIEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGBicGZfaW50X2ppdF9jb21waWxlYC4gSSdsbCBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC5cblxuVGltZSB0byBkaXZlIGEgYml0IGRlZXBlci4gSSBzaG91bGQgY2hlY2sgYGFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmNgIHRvIHNlZSBpZiBJJ20gbWlzc2luZyBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgb2Ygbm90ZS4gTmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhbnl0aGluZyBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODc3LCJPdXRwdXRUb2tlbnMiOjcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjMyOjUyLjc0MjMyMjMxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NzQ0NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9Mjc5PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTI4My1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjI4NDpib29sIGJwZl9qaXRfc3VwcG9ydHNfa2Z1bmNfY2FsbCh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjg1LXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjg4LVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6Mjg5OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjkwLXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9NjMzPXN0YXRpYyBib29sIGlzX3NpZ25lZF9icGZfY29uZCh1OCBjb25kKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy02NDItXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzo2NDM6Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTY0NC1cXHRcXHQgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTE1Nzg9dm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNTkwLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTU5MTppbnQgYnBmX2FyY2hfdGV4dF9wb2tlKHZvaWQgKmlwLCBlbnVtIGJwZl90ZXh0X3Bva2VfdHlwZSBvbGRfdCxcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE1OTItXFx0XFx0ICAgICAgIGVudW0gYnBmX3RleHRfcG9rZV90eXBlIG5ld190LCB2b2lkICpvbGRfYWRkcixcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTY0My1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE2NDQ6aW50IGJwZl9hcmNoX3RleHRfaW52YWxpZGF0ZSh2b2lkICpkc3QsIHNpemVfdCBsZW4pXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNjQ1LXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MTc5NT12b2lkICphcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNzk5LVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTgwMDp2b2lkIGFyY2hfZnJlZV9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xODAxLXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTgwNC1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE4MDU6aW50IGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xODA2LXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MTg0MT1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTQ3LVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MjE0ODppbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxNDktXFx0XFx0XFx0XFx0dm9pZCAqcm9faW1hZ2VfZW5kLCBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxODUtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTg2OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTg3LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIyMDE9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM1NC1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIzNTU6dm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM1Ni17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzNzgtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMzc5OmJvb2wgYnBmX2ppdF9ieXBhc3Nfc3BlY192MSh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM4MC17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzODMtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMzg0OmJvb2wgYnBmX2ppdF9ieXBhc3Nfc3BlY192NCh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM4NS17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzODgtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMzg5OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM5MC17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzOTMtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMzk0OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM5NS17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzOTgtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMzk5OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZyh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjQwMC17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTI0MDQtLyogSW5kaWNhdGUgdGhlIEpJVCBiYWNrZW5kIHN1cHBvcnRzIG1peGluZyBicGYyYnBmIGFuZCB0YWlsY2FsbHMuICovXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyNDA1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjQwNi17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTI0MDktXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyNDEwOmJvb2wgYnBmX2ppdF9pbmxpbmVzX2hlbHBlcl9jYWxsKHMzMiBpbW0pXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yNDExLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MzI6NTIuODQ3MDY5MjQ4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMTkwODEyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgTG9vbmdBcmNoIEJQRiBKSVQgcGF0Y2guIEZyb20gd2hhdCBJIHNlZSwgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYWRkZWQgYXJlIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnYCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiAgSG9sZCBvbiwgYGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGdgIGlzIGp1c3QgYSBzaW1wbGUgYm9vbGVhbiByZXR1cm4g4oCTIG5vdCBtdWNoIHRvIGRpZyBpbnRvIHRoZXJlLiAgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGxvb2tzIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnQsIHRoZSByZWFsIGhlYXJ0IG9mIHRoZXNlIGNoYW5nZXMuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gY29uY2VudHJhdGUuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgc2VlIHRoYXQgYGVtaXRfYXRvbWljX3Jtd2AgaXMgYWxzbyB0b3VjaGVkLCBhbmQgdGhhdCdzIGNhbGxlZCBieSBgYnVpbGRfaW5zbmAsIHdoaWNoIGlzIGNhbGxlZCBieSBgYnVpbGRfYm9keWAsIHdoaWNoIGlzIGluIHR1cm4gY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYC4gQ29uZmlybWVkLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgc3ltYm9sIHRvIGhvbmUgaW4gb24uXG5cbk5leHQgdXAsIHRoZSBjb25maWd1cmF0aW9uLiAgTG9va3MgbGlrZSBgQlBGX0pJVGAgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIG1hbmRhdG9yeSBmb3IgdGhpcyB0byB3b3JrLiAgVGhhdCdzIHN0YW5kYXJkLCBhbmQgZWFzeSBlbm91Z2ggdG8gdmVyaWZ5LlxuXG5Ob3csIGEgcXVpY2sgcHJhY3RpY2FsIGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byBjb25maXJtIGlmIEkgY2FuIGFjdHVhbGx5IHRlc3QgdGhpcy4gIENhbiBJIHJlYWNoIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBpbiBRRU1VPyBZZXMsIGxvb2tzIGxpa2UgUUVNVSBzdXBwb3J0cyBMb29uZ0FyY2g2NCBlbXVsYXRpb24sIGFuZCBzeXprYWxsZXIgY2FuIHJ1biBpdC4gVGhhdCdzIGEgZ29vZCBzaWduLiAgVGhlIGNoYW5nZXMgc2VlbSBmdW5jdGlvbmFsIGFuZCBkaXJlY3RseSB3aXRoaW4gdGhlIGNvcmUga2VybmVsIChCUEYgSklUKS4gIFRoZXJlZm9yZSwgV29ydGhGdXp6aW5nPXRydWUuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhdG9taWMgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgY29tcGlsZXIsIGluY2x1ZGluZyBhIGJlbmNobWFyayBmb3IgYGJwZl9rcHRyX3hjaGdgLiAgVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bmN0aW9uYWwsIGFuZCBJIGNhbiB0ZXN0IGl0IGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIHRoZXNlIGF0b21pYyBvcGVyYXRpb25zIG9uIGEgTG9vbmdBcmNoIHN5c3RlbS5cblxuKipDb25maWdzOioqXG5cbiogICBgQlBGX0pJVGBcbiogICBgQlBGX1NZU0NBTExgXG5cbioqRm9jdXNTeW1ib2w6KipcblxuKiAgIGBicGZfaW50X2ppdF9jb21waWxlYFxuXG5BbmQgSSB3aWxsIGRvIGEgcXVpY2sgY2hlY2sgb24gdGhhdCBmdW5jdGlvbiBpbiBgYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY2AgdG8gc2VlIHRoZSBkZXRhaWxzIG9mIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA1MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMzowMC44NjYxNTE5MjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTg2NDM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0yMTg2PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIyMDAtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMjAxOnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMjAyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MzM6MDEuMDM2MDE5MjYyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTIzODI3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGluIEVtdWxhdGVkIExvb25nQXJjaCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyBjb3JyZWN0OiBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgaW5kZWVkIHRoZSBmdW5jdGlvbiB0byBjb25zaWRlci4gSG93ZXZlciwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IGNvZGUgcGF0aHMgdGhhdCBhcmUgKnVucmVhY2hhYmxlKiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgcGFydGljdWxhcmx5IHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIEJ1dCB3YWl0LCBMb29uZ0FyY2ggKmlzKiBlbXVsYXRhYmxlIGluIFFFTVUsIGFuZCBTeXprYWxsZXIgZXZlbiBzdXBwb3J0cyBhIExvb25nQXJjaCB0YXJnZXQuIFRoYXQgY2hhbmdlcyB0aGluZ3MuIFRoaXMgcGF0aCAqaXMqIHJlYWNoYWJsZS5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIHRoaW5rIGFib3V0IHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucy4gV2UgZGVmaW5pdGVseSBuZWVkIGBCUEZfU1lTQ0FMTGAgZm9yIEJQRiB0byBmdW5jdGlvbiwgYW5kIGBCUEZfSklUYCBmb3IgdGhlIEpJVCBjb21waWxlciBpdHNlbGYuIEFyZSB0aGVyZSBhbnkgTG9vbmdBcmNoLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG5lZWQgY29uc2lkZXJhdGlvbj8gVGhlIGFyY2hpdGVjdHVyZSBpdHNlbGYgaXMgYExPT05HQVJDSGAsIGJ1dCB0aGF0J3MgdGhlIGFyY2hpdGVjdHVyZSBpZGVudGlmaWVyLiBXZSdyZSBjb25jZXJuZWQgd2l0aCBmZWF0dXJlcywgc28gdGhlIGFyY2hpdGVjdHVyZSBjb25maWcgaXRzZWxmIGlzIG5vdCB3aGF0IHdlJ3JlIGFmdGVyLlxuXG5GaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjazogQ2FuIHdlIGFjdHVhbGx5ICpmb2N1cyogb24gYGJwZl9rcHRyX3hjaGdgIHdpdGhpbiB0aGlzIGNvbnRleHQ/IFRoYXQncyBhIEJQRiBoZWxwZXIva2Z1bmMsIHJpZ2h0PyBTbywgaXMgaXQgYWN0dWFsbHkgZGVmaW5lZCBhbmQgYXZhaWxhYmxlIHdpdGhpbiB0aGUga2VybmVsPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbiBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjE1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjMzOjA2LjE4ODQwMzg0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NTU1MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2twdHJfeGNoZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2ZpeHVwcy5jPTE0ODE9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzEyLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjMxMzpcXHRcXHQvKiBJbXBsZW1lbnQgYnBmX2twdHJfeGNoZyBpbmxpbmUgKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMTQtXFx0XFx0aWYgKHByb2ctXFx1MDAzZWppdF9yZXF1ZXN0ZWQgXFx1MDAyNlxcdTAwMjYgQklUU19QRVJfTE9ORyA9PSA2NCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MTcyNj12b2lkIGJwZl93cV9jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdmFsKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTczMC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoxNzMxOkJQRl9DQUxMXzIoYnBmX2twdHJfeGNoZywgdm9pZCAqLCBkc3QsIHZvaWQgKiwgcHRyKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTE3MzIte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTczOC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoxNzM5Oi8qIFVubGlrZSBvdGhlciBQVFJfVE9fQlRGX0lEIGhlbHBlcnMgdGhlIGJ0Zl9pZCBpbiBicGZfa3B0cl94Y2hnKClcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzQwLSAqIGhlbHBlciBpcyBkZXRlcm1pbmVkIGR5bmFtaWNhbGx5IGJ5IHRoZSB2ZXJpZmllci4gVXNlIEJQRl9QVFJfUE9JU09OIHRvXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzQyLSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjE3NDM6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa3B0cl94Y2hnX3Byb3RvID0ge1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjE3NDQ6XFx0LmZ1bmMgICAgICAgICA9IGJwZl9rcHRyX3hjaGcsXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTc0NS1cXHQuZ3BsX29ubHkgICAgID0gZmFsc2UsXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yMDY3PWJwZl9iYXNlX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMTQ2LVxcdGNhc2UgQlBGX0ZVTkNfa3B0cl94Y2hnOlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjIxNDc6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfa3B0cl94Y2hnX3Byb3RvO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTIxNDgtXFx0Y2FzZSBCUEZfRlVOQ19mb3JfZWFjaF9tYXBfZWxlbTpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MTY3PXN0YXRpYyBpbnQgcHJvY2Vzc19rcHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxODAtXFx0XFx0aWYgKCFtYXBfcHRyLVxcdTAwM2VidGYpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzE4MTpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1hcCAnJXMnIGhhcyB0byBoYXZlIEJURiBpbiBvcmRlciB0byB1c2UgYnBmX2twdHJfeGNoZ1xcXFxuXFxcIixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzE4Mi1cXHRcXHRcXHRcXHRtYXBfcHRyLVxcdTAwM2VuYW1lKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03ODMzPXN0YXRpYyBpbnQgY2hlY2tfcmVnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODY2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODY3OlxcdC8qIExvY2FsIGtwdHIgdHlwZXMgYXJlIGFsbG93ZWQgYXMgdGhlIHNvdXJjZSBhcmd1bWVudCBvZiBicGZfa3B0cl94Y2hnICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4NjgtXFx0aWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gQlBGX0ZVTkNfa3B0cl94Y2hnIFxcdTAwMjZcXHUwMDI2IHR5cGVfaXNfYWxsb2ModHlwZSkgXFx1MDAyNlxcdTAwMjYgcmVnX2Zyb21fYXJnbm8oYXJnbm8pID09IEJQRl9SRUdfMikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMzowNi4yMzEyNjIxNjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODgyOTI3MzY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgdGhlIExvb25nQXJjaCBhcmNoaXRlY3R1cmUgYW5kIGl0cyBpbXBsaWNhdGlvbnMuIEl0J3MgY2xlYXIgZnJvbSB0aGUgZGVzY3JpcHRpb24gdGhhdCB0aGUgY29yZSBvZiB0aGlzIHdvcmsgcmV2b2x2ZXMgYXJvdW5kIGFkZGluZyBzdXBwb3J0IGZvciBgYnBmX2twdHJfeGNoZ2Agd2l0aGluIHRoZSBKdXN0LUluLVRpbWUgKEpJVCkgY29tcGlsZXIuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCdzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gYXRvbWljIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgY29udGV4dCwgd2hpY2ggY291bGQgb3BlbiB0aGUgZG9vciBmb3IgbW9yZSBjb21wbGV4IGFuZCBlZmZpY2llbnQgQlBGIHByb2dyYW1zLiBHaXZlbiB0aGF0IGZvY3VzLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIGtleSBzeW1ib2wgSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIHdpdGhpbiB0aGUgSklUIGluZnJhc3RydWN0dXJlLlxuXG5UaGUgZXhpc3RlbmNlIG9mIGEgYmVuY2htYXJrIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2twdHJfeGNoZy5jYCBpcyBpbXBvcnRhbnQ7IGl0IHN1Z2dlc3RzIHdlIGhhdmUgYSB1c2VyLXNwYWNlIHRlc3RiZWQgdG8gZXZhbHVhdGUgdGhlIGVmZmVjdGl2ZW5lc3MgYW5kIHBlcmZvcm1hbmNlIG9mIHRoaXMgYXRvbWljIGltcGxlbWVudGF0aW9uLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byBzZXQgc29tZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0LiBcIldvcnRoRnV6emluZzogdHJ1ZVwiIGlzIGEgbm8tYnJhaW5lci4gVGhlIGltcGxlbWVudGF0aW9uIG9mIGF0b21pYyBvcGVyYXRpb25zIGlzIGEgY3JpdGljYWwgYXJlYSwgc28gaXTigJlzIGxpa2VseSB0aGF0IGFueSBidWdzIG9yIGlzc3VlcyB3aWxsIHNob3cgdXAgcXVpY2tseS5cblxuXCJGb2N1c1N5bWJvbHM6IFtcXFwiYnBmX2ludF9qaXRfY29tcGlsZVxcXCJdXCIgaXMgbXkgd2F5IG9mIG5hcnJvd2luZyB0aGUgZnV6emluZyBzY29wZSB0byB0aGUgcmVsZXZhbnQgcG9ydGlvbiBvZiB0aGUgY29kZSBhbmQgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLlxuXG5BbmQgZmluYWxseSwgdG8gY29uZmlndXJlIHRoZSB0ZXN0IGFuZCBtYWtlIHN1cmUgdGhhdCB3ZSBnZXQgYWNjdXJhdGUgcmVzdWx0cywgSSdsbCBlbmFibGUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uczogXCJFbmFibGVDb25maWdzOiBbXFxcIkJQRl9KSVRcXFwiLCBcXFwiQlBGX1NZU0NBTExcXFwiXVwiLlxuXG5UaGlzIGlzIHRoZSByZWFzb25pbmcgSSdsbCBiYXNlIG15IGZ1enppbmc6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYXRvbWljIGluc3RydWN0aW9ucyBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgY29tcGlsZXIgYW5kIGVuYWJsZXMgdGhlIGJwZl9rcHRyX3hjaGcgaW5saW5lIHRlc3QuIFRoZSBCUEYgSklUIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSB0ZXN0ZWQgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgY29udGFpbmluZyB0aGVzZSBhdG9taWMgb3BlcmF0aW9ucy5cIiBUaGlzIGVzc2VudGlhbGx5IGJvaWxzIGRvd24gdG86IFwiQXRvbWljIG9wcyBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgYXJlIG5vdyBhIHRoaW5nOyBsZXQncyBwb2tlIGF0IHRoZW0hXCIgSSdtIG5vdyByZWFkeSB0byBzdGFydCBydW5uaW5nIHRoaXMgdGhyb3VnaCB0aGUgcGFjZXMgYW5kIHNlZSB3aGF0IHBvcHMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjYwLCJPdXRwdXRUb2tlbnMiOjExMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMzoxNS4wNjA1Mzc2MDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODAyNDE1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhdG9taWMgaW5zdHJ1Y3Rpb25zIGluIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBjb21waWxlciBhbmQgZW5hYmxlcyB0aGUgYnBmX2twdHJfeGNoZyBpbmxpbmUgdGVzdC4gVGhlIEJQRiBKSVQgbW9kaWZpY2F0aW9ucyBhcmUgZnVuY3Rpb25hbCBhbmQgY2FuIGJlIHRlc3RlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBjb250YWluaW5nIHRoZXNlIGF0b21pYyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYXRvbWljIGluc3RydWN0aW9ucyBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgY29tcGlsZXIgYW5kIGVuYWJsZXMgdGhlIGJwZl9rcHRyX3hjaGcgaW5saW5lIHRlc3QuIFRoZSBCUEYgSklUIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSB0ZXN0ZWQgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgY29udGFpbmluZyB0aGVzZSBhdG9taWMgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow9vtb2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 07:13:08 +0000 UTC FinishedAt: 2026-07-30 07:33:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fc46aed51f6280801f43a2cf4b5060cc33b572f9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "fc46aed51f6280801f43a2cf4b5060cc33b572f9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "dda6c35c-c2ae-417b-8b2b-e31f063388df" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYXRvbWljIGluc3RydWN0aW9ucyBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgY29tcGlsZXIgYW5kIGVuYWJsZXMgdGhlIGJwZl9rcHRyX3hjaGcgaW5saW5lIHRlc3QuIFRoZSBCUEYgSklUIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSB0ZXN0ZWQgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgY29udGFpbmluZyB0aGVzZSBhdG9taWMgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM3NjU3ODM3NjIzOWJlNTIwM2QwMWZkNzIxNDg2MTljODQ1OTZiNTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwNzozMjoxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmhcbmluZGV4IDc2YjcyMzU5MDAyM2QuLmJkYmMxN2QwNzExMDUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaFxuQEAgLTE5OSw2ICYjNDM7MTk5LDEwIEBAIGVudW0gcmVnM19vcCB7XG4gXHRhbXN3YXBoX29wXHQ9IDB4NzBiOSxcbiBcdGFtYWRkYl9vcFx0PSAweDcwYmEsXG4gXHRhbWFkZGhfb3BcdD0gMHg3MGJiLFxuJiM0MztcdGFtc3dhcGRiYl9vcFx0PSAweDcwYmMsXG4mIzQzO1x0YW1zd2FwZGJoX29wXHQ9IDB4NzBiZCxcbiYjNDM7XHRhbWFkZGRiYl9vcFx0PSAweDcwYmUsXG4mIzQzO1x0YW1hZGRkYmhfb3BcdD0gMHg3MGJmLFxuIFx0YW1zd2Fwd19vcFx0PSAweDcwYzAsXG4gXHRhbXN3YXBkX29wXHQ9IDB4NzBjMSxcbiBcdGFtYWRkd19vcFx0PSAweDcwYzIsXG5AQCAtNzgzLDYgJiM0Mzs3ODcsMjAgQEAgREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwYiwgYW1zd2FwYl9vcClcbiBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBoLCBhbXN3YXBoX29wKVxuIERFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcHcsIGFtc3dhcHdfb3ApXG4gREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwZCwgYW1zd2FwZF9vcClcbiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwZGJiLCBhbXN3YXBkYmJfb3ApXG4mIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGRiaCwgYW1zd2FwZGJoX29wKVxuJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFkZGRiYiwgYW1hZGRkYmJfb3ApXG4mIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYWRkZGJoLCBhbWFkZGRiaF9vcClcbiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW1hZGRkYncsIGFtYWRkZGJ3X29wKVxuJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFkZGRiZCwgYW1hZGRkYmRfb3ApXG4mIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYW5kZGJ3LCBhbWFuZGRid19vcClcbiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW1hbmRkYmQsIGFtYW5kZGJkX29wKVxuJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbW9yZGJ3LCBhbW9yZGJ3X29wKVxuJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbW9yZGJkLCBhbW9yZGJkX29wKVxuJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbXhvcmRidywgYW14b3JkYndfb3ApXG4mIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFteG9yZGJkLCBhbXhvcmRiZF9vcClcbiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwZGJ3LCBhbXN3YXBkYndfb3ApXG4mIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGRiZCwgYW1zd2FwZGJkX29wKVxuIFxuICNkZWZpbmUgREVGX0VNSVRfUkVHM1NBMl9GT1JNQVQoTkFNRSwgT1ApXHRcdFx0XHRcXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0XyMjTkFNRSh1bmlvbiBsb29uZ2FyY2hfaW5zdHJ1Y3Rpb24gKmluc24sXHRcXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMgYi9hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jXG5pbmRleCAyOWMyODFiZWYyOGVmLi42ODZkMzMzMTQ2Y2UyIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY1xuQEAgLTgsNiAmIzQzOzgsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9hc20tb2Zmc2V0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YnBmX2ppdC5oXCYjMzQ7XG4gXG4mIzQzOy8qIGRiYXIgaGludCBmb3IgbGwvc2MgY29tcGxldGlvbiBvcmRlcmluZywgc2VlIF9fV0VBS19MTFNDX01CICovXG4mIzQzOyNkZWZpbmUgREJBUl9MTFNDX01CXHQweDcwMFxuJiM0MztcbiAjZGVmaW5lIExPT05HQVJDSF9NQVhfUkVHX0FSR1MgOFxuIFxuICNkZWZpbmUgTE9PTkdBUkNIX1NBVkVfUkFfTklOU05TICAgMVxuQEAgLTQzMyw3ICYjNDM7NDM2LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuIFx0XHRcdFx0cHJfZXJyX29uY2UoXCYjMzQ7YnBmLWppdDogYW1hZGQuYiBpbnN0cnVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbWFkZGIsIHNyYywgdDEsIHQzKTtcbiYjNDM7XHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkYmIsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEJQRl9IOlxuQEAgLTQ0MSwzOSAmIzQzOzQ0NCwzOSBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4gXHRcdFx0XHRwcl9lcnJfb25jZShcJiMzNDticGYtaml0OiBhbWFkZC5oIGluc3RydWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtYWRkaCwgc3JjLCB0MSwgdDMpO1xuJiM0MztcdFx0XHRlbWl0X2luc24oY3R4LCBhbWFkZGRiaCwgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX1c6XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGR3LCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtYWRkZGJ3LCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBCUEZfRFc6XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkLCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtYWRkZGJkLCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9BTkQgfCBCUEZfRkVUQ0g6XG4gXHRcdGlmIChpc2R3KSB7XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hbmRkLCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtYW5kZGJkLCBzcmMsIHQxLCB0Myk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hbmR3LCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtYW5kZGJ3LCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOlxuIFx0XHRpZiAoaXNkdykge1xuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtb3JkLCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtb3JkYmQsIHNyYywgdDEsIHQzKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbW9ydywgc3JjLCB0MSwgdDMpO1xuJiM0MztcdFx0XHRlbWl0X2luc24oY3R4LCBhbW9yZGJ3LCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX1hPUiB8IEJQRl9GRVRDSDpcbiBcdFx0aWYgKGlzZHcpIHtcbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbXhvcmQsIHNyYywgdDEsIHQzKTtcbiYjNDM7XHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW14b3JkYmQsIHNyYywgdDEsIHQzKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbXhvcncsIHNyYywgdDEsIHQzKTtcbiYjNDM7XHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW14b3JkYncsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuQEAgLTQ4NSw3ICYjNDM7NDg4LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuIFx0XHRcdFx0cHJfZXJyX29uY2UoXCYjMzQ7YnBmLWppdDogYW1zd2FwLmIgaW5zdHJ1Y3Rpb24gaXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2FwYiwgc3JjLCB0MSwgdDMpO1xuJiM0MztcdFx0XHRlbWl0X2luc24oY3R4LCBhbXN3YXBkYmIsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEJQRl9IOlxuQEAgLTQ5MywxNSAmIzQzOzQ5NiwxNSBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4gXHRcdFx0XHRwcl9lcnJfb25jZShcJiMzNDticGYtaml0OiBhbXN3YXAuaCBpbnN0cnVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbXN3YXBoLCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGRiaCwgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX1c6XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2Fwdywgc3JjLCB0MSwgdDMpO1xuJiM0MztcdFx0XHRlbWl0X2luc24oY3R4LCBhbXN3YXBkYncsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEJQRl9EVzpcbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbXN3YXBkLCBzcmMsIHQxLCB0Myk7XG4mIzQzO1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGRiZCwgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuQEAgLTUyNCw2ICYjNDM7NTI3LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuIFx0XHRcdGVtaXRfaW5zbihjdHgsIGJlcSwgdDMsIExPT05HQVJDSF9HUFJfWkVSTywgLTYpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHIwLCB0cnVlKTtcbiBcdFx0fVxuJiM0MztcdFx0ZW1pdF9pbnNuKGN0eCwgZGJhciwgREJBUl9MTFNDX01CKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRwcl9lcnJfb25jZShcJiMzNDticGYtaml0OiBpbnZhbGlkIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvcGNvZGUgJTAyeFxcblwmIzM0OywgaW1tKTtcbkBAIC0yMzkyLDYgJiM0MzsyMzk2LDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIEluZGljYXRlIHRoZSBKSVQgYmFja2VuZCBzdXBwb3J0cyBtaXhpbmcgYnBmMmJwZiBhbmQgdGFpbGNhbGxzLiAqL1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IGI2NDJlZTQ4OWVhNjQuLjZkZmM4MTc0ODU4NDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTk4MCw2ICYjNDM7OTgwLDcgQEAgJChPVVRQVVQpL2JlbmNoX2xwbV90cmllX21hcC5vOiAkKE9VVFBVVCkvbHBtX3RyaWVfYmVuY2guc2tlbC5oICQoT1VUUFVUKS9scG1fdHJcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vOiAkKE9VVFBVVCkvYnBmX25vcF9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oXG4gJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vOiAkKE9VVFBVVCkveGRwX2xiX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmhcbiYjNDM7JChPVVRQVVQpL2JlbmNoX2twdHJfeGNoZy5vOiAkKE9VVFBVVCkva3B0cl94Y2hnX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaC5vOiBiZW5jaC5oIHRlc3RpbmdfaGVscGVycy5oICQoQlBGT0JKKVxuICQoT1VUUFVUKS9iZW5jaDogTERMSUJTICYjNDM7PSAtbG1cbiAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXG5AQCAtMTAwNSw2ICYjNDM7MTAwNiw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxuJiM0MztcdFx0ICQoT1VUUFVUKS9iZW5jaF9rcHRyX3hjaGcubyBcXFxuIFx0XHQgJChPVVRQVVQpL3VzZHRfMS5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvdXNkdF8yLm8gXFxcbiBcdFx0ICNcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5pbmRleCAzZDlkMmNkNzc2NGJkLi41NTAyOTBkNjcwMWE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5AQCAtNTgyLDYgJiM0Mzs1ODIsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2RlbGV0ZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2ZyZWU7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbm9wO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfeGRwX2xiO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2twdHJfeGNoZztcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcbiBcdFx1MDAyNmJlbmNoX2NvdW50X2dsb2JhbCxcbkBAIC02NjUsNiAmIzQzOzY2Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xuIFx0XHUwMDI2YmVuY2hfbHBtX3RyaWVfZnJlZSxcbiBcdFx1MDAyNmJlbmNoX2JwZl9ub3AsXG4gXHRcdTAwMjZiZW5jaF94ZHBfbGIsXG4mIzQzO1x0XHUwMDI2YmVuY2hfa3B0cl94Y2hnLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgZmluZF9iZW5jaG1hcmsodm9pZClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2twdHJfeGNoZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9rcHRyX3hjaGcuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4YTBkMzQ2ZmRhNjhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfa3B0cl94Y2hnLmNcbkBAIC0wLDAgJiM0MzsxLDk2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoQykgMjAyNi4gTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FyZ3AuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtiZW5jaC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2twdHJfeGNoZ19iZW5jaC5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgY3R4IHtcbiYjNDM7XHRzdHJ1Y3Qga3B0cl94Y2hnX2JlbmNoICpza2VsO1xuJiM0Mzt9IGN0eDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qge1xuJiM0MztcdF9fdTMyIG5yX2xvb3BzO1xuJiM0Mzt9IGFyZ3MgPSB7XG4mIzQzO1x0Lm5yX2xvb3BzID0gMjU2LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSB7XG4mIzQzO1x0QVJHX05SX0xPT1BTID0gNzAwMCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xuJiM0MztcdHsgXCYjMzQ7bnJfbG9vcHNcJiMzNDssIEFSR19OUl9MT09QUywgXCYjMzQ7bnJfbG9vcHNcJiMzNDssIDAsXG4mIzQzO1x0ICBcJiMzNDtTZXQgbnVtYmVyIG9mIGJwZl9rcHRyX3hjaGcoKSBjYWxscyBwZXIgdHJpZ2dlclwmIzM0O30sXG4mIzQzO1x0e30sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgZXJyb3JfdCBwYXJzZV9hcmcoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGtleSkge1xuJiM0MztcdGNhc2UgQVJHX05SX0xPT1BTOlxuJiM0MztcdFx0YXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfa3B0cl94Y2hnX2FyZ3AgPSB7XG4mIzQzO1x0Lm9wdGlvbnMgPSBvcHRzLFxuJiM0MztcdC5wYXJzZXIgPSBwYXJzZV9hcmcsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2JlbmNobWFyayBkb2VzbiYjMzk7dCBzdXBwb3J0IGNvbnN1bWVyIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnByb2R1Y2VyKHZvaWQgKmlucHV0KVxuJiM0Mzt7XG4mIzQzO1x0d2hpbGUgKHRydWUpXG4mIzQzO1x0XHRzeXNjYWxsKF9fTlJfZ2V0cGdpZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcylcbiYjNDM7e1xuJiM0MztcdHJlcy1cdTAwM2VoaXRzID0gYXRvbWljX3N3YXAoXHUwMDI2Y3R4LnNrZWwtXHUwMDNlYnNzLVx1MDAzZWhpdHMsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzZXR1cCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuJiM0MztcbiYjNDM7XHRzZXR1cF9saWJicGYoKTtcbiYjNDM7XG4mIzQzO1x0Y3R4LnNrZWwgPSBrcHRyX3hjaGdfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRpZiAoIWN0eC5za2VsKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cXG5cJiMzNDspO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eC5za2VsLVx1MDAzZWRhdGEtXHUwMDNlbnJfbG9vcHMgPSBhcmdzLm5yX2xvb3BzO1xuJiM0MztcbiYjNDM7XHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChjdHguc2tlbC1cdTAwM2Vwcm9ncy5iZW5jaG1hcmspO1xuJiM0MztcdGlmICghbGluaykge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZhaWxlZCB0byBhdHRhY2ggcHJvZ3JhbSFcXG5cJiMzNDspO1xuJiM0MztcdFx0ZXhpdCgxKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9rcHRyX3hjaGcgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtrcHRyLXhjaGdcJiMzNDssXG4mIzQzO1x0LmFyZ3AgPSBcdTAwMjZiZW5jaF9rcHRyX3hjaGdfYXJncCxcbiYjNDM7XHQudmFsaWRhdGUgPSB2YWxpZGF0ZSxcbiYjNDM7XHQuc2V0dXAgPSBzZXR1cCxcbiYjNDM7XHQucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsXG4mIzQzO1x0Lm1lYXN1cmUgPSBtZWFzdXJlLFxuJiM0MztcdC5yZXBvcnRfcHJvZ3Jlc3MgPSBvcHNfcmVwb3J0X3Byb2dyZXNzLFxuJiM0MztcdC5yZXBvcnRfZmluYWwgPSBvcHNfcmVwb3J0X2ZpbmFsLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuY1xuaW5kZXggN2RlZjE1OGRhOWViNy4uMTIxNWQ2ZWRkNTkwNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3B0cl94Y2hnX2lubGluZS5jXG5AQCAtMTQsNyAmIzQzOzE0LDggQEAgdm9pZCB0ZXN0X2twdHJfeGNoZ19pbmxpbmUodm9pZClcbiBcdGludCBlcnI7XG4gXG4gI2lmICEoZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKSB8fCBcXFxuLSAgICAgIChkZWZpbmVkKF9fcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpKVxuJiM0MztcdChkZWZpbmVkKF9fcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpIHx8IFxcXG4mIzQzO1x0KGRlZmluZWQoX19sb29uZ2FyY2hfXykgXHUwMDI2XHUwMDI2IF9fbG9vbmdhcmNoX2dybGVuID09IDY0KSlcbiBcdHRlc3RfX3NraXAoKTtcbiBcdHJldHVybjtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3B0cl94Y2hnX2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3B0cl94Y2hnX2JlbmNoLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zNjM4ODMwNzNlMmMwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3B0cl94Y2hnX2JlbmNoLmNcbkBAIC0wLDAgJiM0MzsxLDQ5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoQykgMjAyNi4gTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkICovXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2V4cGVyaW1lbnRhbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1BWF9YQ0hHX0xPT1BTIDQwOTZcbiYjNDM7XG4mIzQzO3N0cnVjdCBiaW5fZGF0YSB7XG4mIzQzO1x0Y2hhciBibG9iWzMyXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoXCYjMzQ7LmJzcy5cJiMzNDsgI25hbWUpIF9faGlkZGVuIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKVxuJiM0MztcbiYjNDM7cHJpdmF0ZShrcHRyKSBzdHJ1Y3QgYmluX2RhdGEgX19rcHRyICpwdHI7XG4mIzQzO3UzMiBucl9sb29wcyA9IDI1NjtcbiYjNDM7bG9uZyBoaXRzO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2ZlbnRyeS9cJiMzNDsgU1lTX1BSRUZJWCBcJiMzNDtzeXNfZ2V0cGdpZFwmIzM0OylcbiYjNDM7aW50IGJlbmNobWFyayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmluX2RhdGEgKm9sZDtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX1hDSEdfTE9PUFM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaSBcdTAwM2U9IG5yX2xvb3BzKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnB0ciwgTlVMTCk7XG4mIzQzO1x0XHRpZiAob2xkKVxuJiM0MztcdFx0XHRicGZfb2JqX2Ryb3Aob2xkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdF9fc3luY19hZGRfYW5kX2ZldGNoKFx1MDAyNmhpdHMsIGkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBCVEYgRlVOQyByZWNvcmRzIGFyZSBub3QgZ2VuZXJhdGVkIGZvciBrZnVuY3MgcmVmZXJlbmNlZCBvbmx5IHRocm91Z2hcbiYjNDM7ICogb3B0aW1pemVkIHBhdGhzLiBLZWVwIGJwZl9vYmpfZHJvcCgpIHZpc2libGUgdG8gbGliYnBmJiMzOTtzIGtmdW5jIGxpbmtlci5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgX19idGZfcm9vdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YnBmX29ial9kcm9wKE5VTEwpO1xuJiM0Mzt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYXRvbWljIGluc3RydWN0aW9ucyBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgY29tcGlsZXIgYW5kIGVuYWJsZXMgdGhlIGJwZl9rcHRyX3hjaGcgaW5saW5lIHRlc3QuIFRoZSBCUEYgSklUIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSB0ZXN0ZWQgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgY29udGFpbmluZyB0aGVzZSBhdG9taWMgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM3NjU3ODM3NjIzOWJlNTIwM2QwMWZkNzIxNDg2MTljODQ1OTZiNTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwNzozMjoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaAppbmRleCA3NmI3MjM1OTAwMjNkLi5iZGJjMTdkMDcxMTA1IDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaW5zdC5oCkBAIC0xOTksNiAmIzQzOzE5OSwxMCBAQCBlbnVtIHJlZzNfb3AgewogCWFtc3dhcGhfb3AJPSAweDcwYjksCiAJYW1hZGRiX29wCT0gMHg3MGJhLAogCWFtYWRkaF9vcAk9IDB4NzBiYiwKJiM0MzsJYW1zd2FwZGJiX29wCT0gMHg3MGJjLAomIzQzOwlhbXN3YXBkYmhfb3AJPSAweDcwYmQsCiYjNDM7CWFtYWRkZGJiX29wCT0gMHg3MGJlLAomIzQzOwlhbWFkZGRiaF9vcAk9IDB4NzBiZiwKIAlhbXN3YXB3X29wCT0gMHg3MGMwLAogCWFtc3dhcGRfb3AJPSAweDcwYzEsCiAJYW1hZGR3X29wCT0gMHg3MGMyLApAQCAtNzgzLDYgJiM0Mzs3ODcsMjAgQEAgREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwYiwgYW1zd2FwYl9vcCkKIERFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGgsIGFtc3dhcGhfb3ApCiBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXB3LCBhbXN3YXB3X29wKQogREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwZCwgYW1zd2FwZF9vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkYmIsIGFtc3dhcGRiYl9vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkYmgsIGFtc3dhcGRiaF9vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFkZGRiYiwgYW1hZGRkYmJfb3ApCiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW1hZGRkYmgsIGFtYWRkZGJoX29wKQomIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYWRkZGJ3LCBhbWFkZGRid19vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFkZGRiZCwgYW1hZGRkYmRfb3ApCiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW1hbmRkYncsIGFtYW5kZGJ3X29wKQomIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYW5kZGJkLCBhbWFuZGRiZF9vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbW9yZGJ3LCBhbW9yZGJ3X29wKQomIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtb3JkYmQsIGFtb3JkYmRfb3ApCiYjNDM7REVGX0VNSVRfUkVHM19GT1JNQVQoYW14b3JkYncsIGFteG9yZGJ3X29wKQomIzQzO0RFRl9FTUlUX1JFRzNfRk9STUFUKGFteG9yZGJkLCBhbXhvcmRiZF9vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkYncsIGFtc3dhcGRid19vcCkKJiM0MztERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkYmQsIGFtc3dhcGRiZF9vcCkKIAogI2RlZmluZSBERUZfRU1JVF9SRUczU0EyX0ZPUk1BVChOQU1FLCBPUCkJCQkJXAogc3RhdGljIGlubGluZSB2b2lkIGVtaXRfIyNOQU1FKHVuaW9uIGxvb25nYXJjaF9pbnN0cnVjdGlvbiAqaW5zbiwJXApkaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYyBiL2FyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMKaW5kZXggMjljMjgxYmVmMjhlZi4uNjg2ZDMzMzE0NmNlMiAxMDA2NDQKLS0tIGEvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jCkBAIC04LDYgJiM0Mzs4LDkgQEAKICNpbmNsdWRlICZsdDthc20vYXNtLW9mZnNldHMuaCZndDsKICNpbmNsdWRlICYjMzQ7YnBmX2ppdC5oJiMzNDsKIAomIzQzOy8qIGRiYXIgaGludCBmb3IgbGwvc2MgY29tcGxldGlvbiBvcmRlcmluZywgc2VlIF9fV0VBS19MTFNDX01CICovCiYjNDM7I2RlZmluZSBEQkFSX0xMU0NfTUIJMHg3MDAKJiM0MzsKICNkZWZpbmUgTE9PTkdBUkNIX01BWF9SRUdfQVJHUyA4CiAKICNkZWZpbmUgTE9PTkdBUkNIX1NBVkVfUkFfTklOU05TICAgMQpAQCAtNDMzLDcgJiM0Mzs0MzYsNyBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpCiAJCQkJcHJfZXJyX29uY2UoJiMzNDticGYtaml0OiBhbWFkZC5iIGluc3RydWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJCWVtaXRfaW5zbihjdHgsIGFtYWRkYiwgc3JjLCB0MSwgdDMpOwomIzQzOwkJCWVtaXRfaW5zbihjdHgsIGFtYWRkZGJiLCBzcmMsIHQxLCB0Myk7CiAJCQllbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0g6CkBAIC00NDEsMzkgJiM0Mzs0NDQsMzkgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQogCQkJCXByX2Vycl9vbmNlKCYjMzQ7YnBmLWppdDogYW1hZGQuaCBpbnN0cnVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0Oyk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQllbWl0X2luc24oY3R4LCBhbWFkZGgsIHNyYywgdDEsIHQzKTsKJiM0MzsJCQllbWl0X2luc24oY3R4LCBhbWFkZGRiaCwgc3JjLCB0MSwgdDMpOwogCQkJZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIEJQRl9XOgotCQkJZW1pdF9pbnNuKGN0eCwgYW1hZGR3LCBzcmMsIHQxLCB0Myk7CiYjNDM7CQkJZW1pdF9pbnNuKGN0eCwgYW1hZGRkYncsIHNyYywgdDEsIHQzKTsKIAkJCWVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBCUEZfRFc6Ci0JCQllbWl0X2luc24oY3R4LCBhbWFkZGQsIHNyYywgdDEsIHQzKTsKJiM0MzsJCQllbWl0X2luc24oY3R4LCBhbWFkZGRiZCwgc3JjLCB0MSwgdDMpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBCUEZfQU5EIHwgQlBGX0ZFVENIOgogCQlpZiAoaXNkdykgewotCQkJZW1pdF9pbnNuKGN0eCwgYW1hbmRkLCBzcmMsIHQxLCB0Myk7CiYjNDM7CQkJZW1pdF9pbnNuKGN0eCwgYW1hbmRkYmQsIHNyYywgdDEsIHQzKTsKIAkJfSBlbHNlIHsKLQkJCWVtaXRfaW5zbihjdHgsIGFtYW5kdywgc3JjLCB0MSwgdDMpOwomIzQzOwkJCWVtaXRfaW5zbihjdHgsIGFtYW5kZGJ3LCBzcmMsIHQxLCB0Myk7CiAJCQllbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOgogCQlpZiAoaXNkdykgewotCQkJZW1pdF9pbnNuKGN0eCwgYW1vcmQsIHNyYywgdDEsIHQzKTsKJiM0MzsJCQllbWl0X2luc24oY3R4LCBhbW9yZGJkLCBzcmMsIHQxLCB0Myk7CiAJCX0gZWxzZSB7Ci0JCQllbWl0X2luc24oY3R4LCBhbW9ydywgc3JjLCB0MSwgdDMpOwomIzQzOwkJCWVtaXRfaW5zbihjdHgsIGFtb3JkYncsIHNyYywgdDEsIHQzKTsKIAkJCWVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBCUEZfWE9SIHwgQlBGX0ZFVENIOgogCQlpZiAoaXNkdykgewotCQkJZW1pdF9pbnNuKGN0eCwgYW14b3JkLCBzcmMsIHQxLCB0Myk7CiYjNDM7CQkJZW1pdF9pbnNuKGN0eCwgYW14b3JkYmQsIHNyYywgdDEsIHQzKTsKIAkJfSBlbHNlIHsKLQkJCWVtaXRfaW5zbihjdHgsIGFteG9ydywgc3JjLCB0MSwgdDMpOwomIzQzOwkJCWVtaXRfaW5zbihjdHgsIGFteG9yZGJ3LCBzcmMsIHQxLCB0Myk7CiAJCQllbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpOwogCQl9CiAJCWJyZWFrOwpAQCAtNDg1LDcgJiM0Mzs0ODgsNyBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpCiAJCQkJcHJfZXJyX29uY2UoJiMzNDticGYtaml0OiBhbXN3YXAuYiBpbnN0cnVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0Oyk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQllbWl0X2luc24oY3R4LCBhbXN3YXBiLCBzcmMsIHQxLCB0Myk7CiYjNDM7CQkJZW1pdF9pbnNuKGN0eCwgYW1zd2FwZGJiLCBzcmMsIHQxLCB0Myk7CiAJCQllbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgQlBGX0g6CkBAIC00OTMsMTUgJiM0Mzs0OTYsMTUgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KQogCQkJCXByX2Vycl9vbmNlKCYjMzQ7YnBmLWppdDogYW1zd2FwLmggaW5zdHJ1Y3Rpb24gaXMgbm90IHN1cHBvcnRlZFxuJiMzNDspOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJZW1pdF9pbnNuKGN0eCwgYW1zd2FwaCwgc3JjLCB0MSwgdDMpOwomIzQzOwkJCWVtaXRfaW5zbihjdHgsIGFtc3dhcGRiaCwgc3JjLCB0MSwgdDMpOwogCQkJZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIEJQRl9XOgotCQkJZW1pdF9pbnNuKGN0eCwgYW1zd2Fwdywgc3JjLCB0MSwgdDMpOwomIzQzOwkJCWVtaXRfaW5zbihjdHgsIGFtc3dhcGRidywgc3JjLCB0MSwgdDMpOwogCQkJZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIEJQRl9EVzoKLQkJCWVtaXRfaW5zbihjdHgsIGFtc3dhcGQsIHNyYywgdDEsIHQzKTsKJiM0MzsJCQllbWl0X2luc24oY3R4LCBhbXN3YXBkYmQsIHNyYywgdDEsIHQzKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwpAQCAtNTI0LDYgJiM0Mzs1MjcsNyBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpCiAJCQllbWl0X2luc24oY3R4LCBiZXEsIHQzLCBMT09OR0FSQ0hfR1BSX1pFUk8sIC02KTsKIAkJCWVtaXRfemV4dF8zMihjdHgsIHIwLCB0cnVlKTsKIAkJfQomIzQzOwkJZW1pdF9pbnNuKGN0eCwgZGJhciwgREJBUl9MTFNDX01CKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfZXJyX29uY2UoJiMzNDticGYtaml0OiBpbnZhbGlkIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvcGNvZGUgJTAyeFxuJiMzNDssIGltbSk7CkBAIC0yMzkyLDYgJiM0MzsyMzk2LDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKiBJbmRpY2F0ZSB0aGUgSklUIGJhY2tlbmQgc3VwcG9ydHMgbWl4aW5nIGJwZjJicGYgYW5kIHRhaWxjYWxscy4gKi8KIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCmluZGV4IGI2NDJlZTQ4OWVhNjQuLjZkZmM4MTc0ODU4NDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKQEAgLTk4MCw2ICYjNDM7OTgwLDcgQEAgJChPVVRQVVQpL2JlbmNoX2xwbV90cmllX21hcC5vOiAkKE9VVFBVVCkvbHBtX3RyaWVfYmVuY2guc2tlbC5oICQoT1VUUFVUKS9scG1fdHIKICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm86ICQoT1VUUFVUKS9icGZfbm9wX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmgKICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubzogJChPVVRQVVQpL3hkcF9sYl9iZW5jaC5za2VsLmggYmVuY2hfYnBmX3RpbWluZy5oCiAkKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmgKJiM0MzskKE9VVFBVVCkvYmVuY2hfa3B0cl94Y2hnLm86ICQoT1VUUFVUKS9rcHRyX3hjaGdfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2gubzogYmVuY2guaCB0ZXN0aW5nX2hlbHBlcnMuaCAkKEJQRk9CSikKICQoT1VUUFVUKS9iZW5jaDogTERMSUJTICYjNDM7PSAtbG0KICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXApAQCAtMTAwNSw2ICYjNDM7MTAwNiw3IEBAICQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfYnBmX25vcC5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcCiYjNDM7CQkgJChPVVRQVVQpL2JlbmNoX2twdHJfeGNoZy5vIFwKIAkJICQoT1VUUFVUKS91c2R0XzEubyBcCiAJCSAkKE9VVFBVVCkvdXNkdF8yLm8gXAogCQkgIwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYwppbmRleCAzZDlkMmNkNzc2NGJkLi41NTAyOTBkNjcwMWE2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYwpAQCAtNTgyLDYgJiM0Mzs1ODIsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2RlbGV0ZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZnJlZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX25vcDsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfeGRwX2xiOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfa3B0cl94Y2hnOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHsKIAkmYW1wO2JlbmNoX2NvdW50X2dsb2JhbCwKQEAgLTY2NSw2ICYjNDM7NjY2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7CiAJJmFtcDtiZW5jaF9scG1fdHJpZV9mcmVlLAogCSZhbXA7YmVuY2hfYnBmX25vcCwKIAkmYW1wO2JlbmNoX3hkcF9sYiwKJiM0MzsJJmFtcDtiZW5jaF9rcHRyX3hjaGcsCiB9OwogCiBzdGF0aWMgdm9pZCBmaW5kX2JlbmNobWFyayh2b2lkKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9rcHRyX3hjaGcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfa3B0cl94Y2hnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjhhMGQzNDZmZGE2OAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfa3B0cl94Y2hnLmMKQEAgLTAsMCAmIzQzOzEsOTYgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoQykgMjAyNi4gTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkICovCiYjNDM7I2luY2x1ZGUgJmx0O2FyZ3AuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JlbmNoLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3B0cl94Y2hnX2JlbmNoLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBjdHggewomIzQzOwlzdHJ1Y3Qga3B0cl94Y2hnX2JlbmNoICpza2VsOwomIzQzO30gY3R4OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgewomIzQzOwlfX3UzMiBucl9sb29wczsKJiM0Mzt9IGFyZ3MgPSB7CiYjNDM7CS5ucl9sb29wcyA9IDI1NiwKJiM0Mzt9OwomIzQzOwomIzQzO2VudW0gewomIzQzOwlBUkdfTlJfTE9PUFMgPSA3MDAwLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7CiYjNDM7CXsgJiMzNDtucl9sb29wcyYjMzQ7LCBBUkdfTlJfTE9PUFMsICYjMzQ7bnJfbG9vcHMmIzM0OywgMCwKJiM0MzsJICAmIzM0O1NldCBudW1iZXIgb2YgYnBmX2twdHJfeGNoZygpIGNhbGxzIHBlciB0cmlnZ2VyJiMzNDt9LAomIzQzOwl7fSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoa2V5KSB7CiYjNDM7CWNhc2UgQVJHX05SX0xPT1BTOgomIzQzOwkJYXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncCBiZW5jaF9rcHRyX3hjaGdfYXJncCA9IHsKJiM0MzsJLm9wdGlvbnMgPSBvcHRzLAomIzQzOwkucGFyc2VyID0gcGFyc2VfYXJnLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2JlbmNobWFyayBkb2VzbiYjMzk7dCBzdXBwb3J0IGNvbnN1bWVyIVxuJiMzNDspOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpCiYjNDM7ewomIzQzOwl3aGlsZSAodHJ1ZSkKJiM0MzsJCXN5c2NhbGwoX19OUl9nZXRwZ2lkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKQomIzQzO3sKJiM0MzsJcmVzLSZndDtoaXRzID0gYXRvbWljX3N3YXAoJmFtcDtjdHguc2tlbC0mZ3Q7YnNzLSZndDtoaXRzLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2V0dXAodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfbGluayAqbGluazsKJiM0MzsKJiM0MzsJc2V0dXBfbGliYnBmKCk7CiYjNDM7CiYjNDM7CWN0eC5za2VsID0ga3B0cl94Y2hnX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghY3R4LnNrZWwpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2ZhaWxlZCB0byBvcGVuIHNrZWxldG9uXG4mIzM0Oyk7CiYjNDM7CQlleGl0KDEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eC5za2VsLSZndDtkYXRhLSZndDtucl9sb29wcyA9IGFyZ3MubnJfbG9vcHM7CiYjNDM7CiYjNDM7CWxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKGN0eC5za2VsLSZndDtwcm9ncy5iZW5jaG1hcmspOwomIzQzOwlpZiAoIWxpbmspIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2ZhaWxlZCB0byBhdHRhY2ggcHJvZ3JhbSFcbiYjMzQ7KTsKJiM0MzsJCWV4aXQoMSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2twdHJfeGNoZyA9IHsKJiM0MzsJLm5hbWUgPSAmIzM0O2twdHIteGNoZyYjMzQ7LAomIzQzOwkuYXJncCA9ICZhbXA7YmVuY2hfa3B0cl94Y2hnX2FyZ3AsCiYjNDM7CS52YWxpZGF0ZSA9IHZhbGlkYXRlLAomIzQzOwkuc2V0dXAgPSBzZXR1cCwKJiM0MzsJLnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLAomIzQzOwkubWVhc3VyZSA9IG1lYXN1cmUsCiYjNDM7CS5yZXBvcnRfcHJvZ3Jlc3MgPSBvcHNfcmVwb3J0X3Byb2dyZXNzLAomIzQzOwkucmVwb3J0X2ZpbmFsID0gb3BzX3JlcG9ydF9maW5hbCwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3B0cl94Y2hnX2lubGluZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3B0cl94Y2hnX2lubGluZS5jCmluZGV4IDdkZWYxNThkYTllYjcuLjEyMTVkNmVkZDU5MDYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHRyX3hjaGdfaW5saW5lLmMKQEAgLTE0LDcgJiM0MzsxNCw4IEBAIHZvaWQgdGVzdF9rcHRyX3hjaGdfaW5saW5lKHZvaWQpCiAJaW50IGVycjsKIAogI2lmICEoZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKSB8fCBcCi0gICAgICAoZGVmaW5lZChfX3Jpc2N2KSAmYW1wOyZhbXA7IF9fcmlzY3ZfeGxlbiA9PSA2NCkpCiYjNDM7CShkZWZpbmVkKF9fcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0KSB8fCBcCiYjNDM7CShkZWZpbmVkKF9fbG9vbmdhcmNoX18pICZhbXA7JmFtcDsgX19sb29uZ2FyY2hfZ3JsZW4gPT0gNjQpKQogCXRlc3RfX3NraXAoKTsKIAlyZXR1cm47CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rcHRyX3hjaGdfYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rcHRyX3hjaGdfYmVuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zNjM4ODMwNzNlMmMwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2twdHJfeGNoZ19iZW5jaC5jCkBAIC0wLDAgJiM0MzsxLDQ5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKEMpIDIwMjYuIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCAqLwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfZXhwZXJpbWVudGFsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzOyNkZWZpbmUgTUFYX1hDSEdfTE9PUFMgNDA5NgomIzQzOwomIzQzO3N0cnVjdCBiaW5fZGF0YSB7CiYjNDM7CWNoYXIgYmxvYlszMl07CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIHByaXZhdGUobmFtZSkgU0VDKCYjMzQ7LmJzcy4mIzM0OyAjbmFtZSkgX19oaWRkZW4gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCiYjNDM7CiYjNDM7cHJpdmF0ZShrcHRyKSBzdHJ1Y3QgYmluX2RhdGEgX19rcHRyICpwdHI7CiYjNDM7dTMyIG5yX2xvb3BzID0gMjU2OwomIzQzO2xvbmcgaGl0czsKJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvJiMzNDsgU1lTX1BSRUZJWCAmIzM0O3N5c19nZXRwZ2lkJiMzNDspCiYjNDM7aW50IGJlbmNobWFyayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmluX2RhdGEgKm9sZDsKJiM0MzsJdTMyIGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNQVhfWENIR19MT09QUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChpICZndDs9IG5yX2xvb3BzKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJb2xkID0gYnBmX2twdHJfeGNoZygmYW1wO3B0ciwgTlVMTCk7CiYjNDM7CQlpZiAob2xkKQomIzQzOwkJCWJwZl9vYmpfZHJvcChvbGQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CV9fc3luY19hZGRfYW5kX2ZldGNoKCZhbXA7aGl0cywgaSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEJURiBGVU5DIHJlY29yZHMgYXJlIG5vdCBnZW5lcmF0ZWQgZm9yIGtmdW5jcyByZWZlcmVuY2VkIG9ubHkgdGhyb3VnaAomIzQzOyAqIG9wdGltaXplZCBwYXRocy4gS2VlcCBicGZfb2JqX2Ryb3AoKSB2aXNpYmxlIHRvIGxpYmJwZiYjMzk7cyBrZnVuYyBsaW5rZXIuCiYjNDM7ICovCiYjNDM7dm9pZCBfX2J0Zl9yb290KHZvaWQpCiYjNDM7ewomIzQzOwlicGZfb2JqX2Ryb3AoTlVMTCk7CiYjNDM7fQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTcxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogODc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgYnBmX2twdHJfeGNoZ2AuIEl0IHNlZW1zIHRoZSBjaGFuZ2VzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGV5JiMzOTt2ZSB1cGRhdGVkIGBhcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jYCBhbmQgYWRkZWQgbmV3IGluc3RydWN0aW9ucyBsaWtlIGBhbWFkZGRiYmAsIGBhbWFkZGRiaGAsIGV0Yy4sIGluIGBhcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmhgLiBUaGV5JiMzOTt2ZSBhbHNvIGluY2x1ZGVkIGEgYmVuY2htYXJrIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2twdHJfeGNoZy5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rcHRyX3hjaGdfYmVuY2guY2AsIGFuZCBtb2RpZmllZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3B0cl94Y2hnX2lubGluZS5jYCB0byBlbmFibGUgdGhlIHRlc3Qgb24gTG9vbmdBcmNoLgoKRGlnZ2luZyBpbnRvIHRoZSBgYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY2AgY2hhbmdlcywgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaXMgcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCBhdG9taWMgaW5zdHJ1Y3Rpb25zIHdpdGggZG91YmxlLWJ5dGUgdmVyc2lvbnMsIHNvIGBhbWFkZGJgIGJlY29tZXMgYGFtYWRkZGJiYCwgZXRjLiwgYW5kIGFkZHMgYGRiYXIgREJBUl9MTFNDX01CYCBhdCB0aGUgZW5kIG9mIGBlbWl0X2F0b21pY19ybXdgLiBJdCYjMzk7cyBhbHNvIGFkZGluZyBgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZygpYCByZXR1cm5pbmcgYHRydWVgLCB3aGljaCBpcyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBTbywgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZW5oYW5jaW5nIHRoZSBCUEYgSklUIHN1cHBvcnQgZm9yIGF0b21pYyBvcGVyYXRpb25zIG9uIExvb25nQXJjaC4KCkdpdmVuIHRoYXQgdGhpcyBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSwgdGVzdGluZyBpdCBuYXRpdmVseSBvbiBMb29uZ0FyY2ggaGFyZHdhcmUgb3IgYW4gZW11bGF0b3IgaXMgYSBtdXN0LiBUaGUgcXVlc3Rpb24gYmVjb21lcyB3aGV0aGVyIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBCUEYgSklULCBzbyBmdXp6aW5nIHNob3VsZCBiZSBhIGdvb2Qgc3RyYXRlZ3kuIFN5emthbGxlciBzdXBwb3J0cyBMb29uZ0FyY2gsIHJpZ2h0PyBJIHJlY2FsbCB0aGVyZSBiZWluZyBzb21lIGxldmVsIG9mIHN1cHBvcnQuIEFzc3VtaW5nIFN5emthbGxlciBpcyBjb25maWd1cmVkIGZvciBMb29uZ0FyY2gsIGl0IHNob3VsZCBiZSBhYmxlIHRvIGV4ZXJjaXNlIHRoaXMgY29kZS4KClJlZ2FyZGluZyB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZywgYGVtaXRfYXRvbWljX3Jtd2AgYW5kIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnYCBqdW1wIG91dCwgYnV0IGBlbWl0X2F0b21pY19ybXdgIGlzIGEgKnN0YXRpYyogZnVuY3Rpb24uIEdpdmVuIHRoZSBwcm9tcHQmIzM5O3MgcHJlZmVyZW5jZSBmb3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVhbCBlbnRyeSBwb2ludC4gVGhlIG1vcmUgZ2VuZXJhbCBlbnRyeSBwb2ludCBmb3IgQlBGIEpJVCBjb21waWxhdGlvbiBvbiBMb29uZ0FyY2ggd2lsbCBsaWtlbHkgYmUgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBzbyBJIHdpbGwgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIxODY9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIyMDAtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIyMDE6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjIwMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU5MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gQlBGIEpJVCBhbmQgTG9vbmdBcmNoKioKCkFscmlnaHQsIHNvIHRoZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb24sIHRoYXQmIzM5O3MgdGhlIG9uZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLCB0aGUgZW50cnkgcG9pbnQgZm9yIEpJVCBjb21waWxhdGlvbi4gR290IGl0LiBBbmQgaGV5LCBsb29rcyBsaWtlIHdlIGhhdmUgYGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGdgIGFzIHdlbGwsIGFuZCBpdCYjMzk7cyBub3Qgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmb3IgcG90ZW50aWFsIGV4dGVybmFsIGFjY2VzcyBvciBwZXJoYXBzIGZvciBtb3JlIGZsZXhpYmxlIGludGVybmFsIHVzYWdlLgoKTm93LCB3aGVyZSBkbyB3ZSBzdGFuZCB3aXRoIEtjb25maWcgb3B0aW9ucz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBCUEYgSklUIHNwZWNpZmljYWxseSBvbiBMb29uZ0FyY2guIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgY29uZGl0aW9uYWxseSBjb21waWxlZC4gR290dGEgdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIHdoYXQgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBiZWZvcmUgSSBjYW4gZGlnIGRlZXBlci4gVGhpcyBpcyBnb2luZyB0byBzZXQgdGhlIHN0YWdlIGZvciBob3cgbXVjaCBvZiB0aGlzIHdvcmsgaGFzIGJlZW4gZG9uZSBiZWZvcmUgYW5kIGhvdyBtdWNoIHRoZXJlIGlzIGZvciBtZSB0byB0aGluayB0aHJvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4ODkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBCUEZfSklUYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoaWRpbmcuIE15IGluaXRpYWwgaW5zdGluY3QsIGJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZSBhbmQgY29tbW9uIGtlcm5lbCBvcmdhbml6YXRpb25hbCBwYXR0ZXJucywgaXMgdG8gbG9vayBpbiB0aGUgc3RhbmRhcmQgcGxhY2VzLiBUeXBpY2FsbHksIHRoZXNlIHNvcnRzIG9mIHRoaW5ncyDigJMgdGhlIGVuYWJsaW5nIG9mIEpJVCBjb21waWxhdGlvbiBmb3IgQlBGIOKAkyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIG1haW4ga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgaXQgZWl0aGVyIHdpdGhpbiB0aGUgY29yZSBgaW5pdC9LY29uZmlnYCBmaWxlLCByZWZsZWN0aW5nIGl0cyBmdW5kYW1lbnRhbCBuYXR1cmUsIG9yIHBlcmhhcHMgd2l0aGluIGBuZXQvS2NvbmZpZ2AsIGdpdmVuIEJQRiYjMzk7cyBzdHJvbmcgYXNzb2NpYXRpb24gd2l0aCBuZXR3b3JraW5nLiBUaGVyZSYjMzk7cyBhbHdheXMgYSBjaGFuY2UgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gYW4gYXJjaGl0ZWN0dXJlLCBzbyBJIHNob3VsZCBhbHNvIGNoZWNrIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGRlZmluaXRpb24gb3IgZGVwZW5kZW5jeSBpbiB0aGVyZS4gSXTigJlzIGFuIGV4cGxvcmF0b3J5IHByb2Nlc3MuIEtub3dpbmcgdGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgd2lsbCB1c3VhbGx5IHRlbGwgbWUgZXhhY3RseSB3aGVyZSB0byBsb29rIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxOTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqRXhhbWluaW5nIHRoZSBMb29uZ0FyY2ggS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgTG9vbmdBcmNoIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBhbHdheXMgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBnb2luZyB0byBuYXZpZ2F0ZSBvdmVyIHRvIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYCBhbmQgdGFrZSBhIGRlZXAgZGl2ZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBvcHRpb25zLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGFsbCB0aGUgdmFyaW91cyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmdzLCBib2FyZC1zcGVjaWZpYyBvcHRpb25zIGlmIHRoZXkmIzM5O3JlIHJlbGV2YW50LCBhbmQgaG93IHRoaW5ncyB0aWUgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgdGltZSB0byBidWlsZCBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiB0aGUgTG9vbmdBcmNoIGNvbmZpZ3VyYXRpb24gc3BhY2UuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9CUEZfSklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQyMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTdXBwb3J0IGluIHRoZSBMb29uZ0FyY2ggS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgQlBGIGlzIGVuYWJsZWQgb3IgY29uZmlndXJhYmxlIGZvciB0aGUgTG9vbmdBcmNoIGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLCB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGUuIFRoYXQgd291bGQgYmUgYGFyY2gvbG9vbmdhcmNoL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgaW5jbHVkaW5nIHRob3NlIHJlbGF0ZWQgdG8gZmVhdHVyZXMgbGlrZSBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpLCBzaG91bGQgYmUgZGVmaW5lZCBvciBhdCBsZWFzdCByZWZlcmVuY2VkLiBJIHdpbGwgbm93IG9wZW4gdGhhdCBmaWxlIGFuZCBsb29rIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIEJQRiBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGRpcmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiAoYENPTkZJR19CUEY9eS9uL21gKSBvciBtYXliZSBhIGRlcGVuZGVuY3kgY2hlY2sgdGhhdCBpcyBzcGVjaWZpYyB0byBMb29uZ0FyY2guIE15IGpvYiBub3cgaXMgdG8gZGV0ZXJtaW5lIGlmIEJQRiBzdXBwb3J0IGV4aXN0cywgYW5kIGlmIHNvLCBob3cgaXQgaXMgbWFuYWdlZCB3aXRoaW4gdGhlIExvb25nQXJjaCBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTc5LVx0c2VsZWN0IEFSQ0hfVVNFX1FVRVVFRF9TUElOTE9DS1NcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6ODA6XHRzZWxlY3QgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCBpZiBIQVZFX0VCUEZfSklUXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTgxLVx0c2VsZWN0IEFSQ0hfV0FOVF9ERUZBVUxUX1RPUERPV05fTU1BUF9MQVlPVVRcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0My1cdHNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzoxNDQ6XHRzZWxlY3QgSEFWRV9FQlBGX0pJVCBpZiA2NEJJVFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xNDUtXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpZiAhQVJDSF9TVFJJQ1RfQUxJR05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg3NwoJCQkJCQkJb3V0cHV0OiA3MQoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBCUEYgSklUIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgdGhlIGBCUEZfSklUYCBvcHRpb24gaXMgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYEhBVkVfRUJQRl9KSVRgIGlzIGNob3Nlbiwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBJIGFsc28gbmVlZCBgQlBGX1NZU0NBTExgIGVuYWJsZWQgYXMgd2VsbC4gVGhhdCYjMzk7cyBhIGtleSBkZXBlbmRlbmN5LgoKTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnRzIG9yIGZ1bmN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgc2VlIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnYCBpcyBpbiBwbGF5LiBBbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBgYnBmX2ludF9qaXRfY29tcGlsZWAuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kLgoKVGltZSB0byBkaXZlIGEgYml0IGRlZXBlci4gSSBzaG91bGQgY2hlY2sgYGFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmNgIHRvIHNlZSBpZiBJJiMzOTttIG1pc3NpbmcgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9mIG5vdGUuIE5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueXRoaW5nIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9Mjc5PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yODMtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjI4NDpib29sIGJwZl9qaXRfc3VwcG9ydHNfa2Z1bmNfY2FsbCh2b2lkKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yODUte1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjg4LVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyODk6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2Zhcl9rZnVuY19jYWxsKHZvaWQpXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTI5MC17XG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz02MzM9c3RhdGljIGJvb2wgaXNfc2lnbmVkX2JwZl9jb25kKHU4IGNvbmQpXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy02NDItXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjY0Mzpib29sIGV4X2hhbmRsZXJfYnBmKGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmV4LFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy02NDQtXHRcdCAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTE1Nzg9dm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTU5MC1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTU5MTppbnQgYnBmX2FyY2hfdGV4dF9wb2tlKHZvaWQgKmlwLCBlbnVtIGJwZl90ZXh0X3Bva2VfdHlwZSBvbGRfdCxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTU5Mi1cdFx0ICAgICAgIGVudW0gYnBmX3RleHRfcG9rZV90eXBlIG5ld190LCB2b2lkICpvbGRfYWRkcixcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE2NDMtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE2NDQ6aW50IGJwZl9hcmNoX3RleHRfaW52YWxpZGF0ZSh2b2lkICpkc3QsIHNpemVfdCBsZW4pXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE2NDUte1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MTc5NT12b2lkICphcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHVuc2lnbmVkIGludCBzaXplKVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTc5OS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTgwMDp2b2lkIGFyY2hfZnJlZV9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE4MDEte1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTgwNC1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTgwNTppbnQgYXJjaF9wcm90ZWN0X2JwZl90cmFtcG9saW5lKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTgwNi17XG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0xODQxPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTQ3LVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTQ4OmludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJvX2ltYWdlLFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTQ5LVx0XHRcdFx0dm9pZCAqcm9faW1hZ2VfZW5kLCBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTg1LVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTg2OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxODctXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bm9kZXMsIHZvaWQgKmZ1bmNfYWRkcilcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIyMDE9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzNTQtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIzNTU6dm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMzU2LXtcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzNzgtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIzNzk6Ym9vbCBicGZfaml0X2J5cGFzc19zcGVjX3YxKHZvaWQpXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzODAte1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM4My1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MjM4NDpib29sIGJwZl9qaXRfYnlwYXNzX3NwZWNfdjQodm9pZClcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM4NS17XG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMzg4LVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMzg5OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMzkwLXtcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzOTMtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIzOTQ6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzOTUte1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM5OC1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MjM5OTpib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZClcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjQwMC17XG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yNDA0LS8qIEluZGljYXRlIHRoZSBKSVQgYmFja2VuZCBzdXBwb3J0cyBtaXhpbmcgYnBmMmJwZiBhbmQgdGFpbGNhbGxzLiAqL1xuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyNDA1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yNDA2LXtcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTI0MDktXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjI0MTA6Ym9vbCBicGZfaml0X2lubGluZXNfaGVscGVyX2NhbGwoczMyIGltbSlcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjQxMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDUxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgTG9vbmdBcmNoIEJQRiBKSVQgcGF0Y2guIEZyb20gd2hhdCBJIHNlZSwgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYWRkZWQgYXJlIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnYCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiAgSG9sZCBvbiwgYGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGdgIGlzIGp1c3QgYSBzaW1wbGUgYm9vbGVhbiByZXR1cm4g4oCTIG5vdCBtdWNoIHRvIGRpZyBpbnRvIHRoZXJlLiAgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGxvb2tzIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnQsIHRoZSByZWFsIGhlYXJ0IG9mIHRoZXNlIGNoYW5nZXMuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGNvbmNlbnRyYXRlLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgc2VlIHRoYXQgYGVtaXRfYXRvbWljX3Jtd2AgaXMgYWxzbyB0b3VjaGVkLCBhbmQgdGhhdCYjMzk7cyBjYWxsZWQgYnkgYGJ1aWxkX2luc25gLCB3aGljaCBpcyBjYWxsZWQgYnkgYGJ1aWxkX2JvZHlgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgYnBmX2ludF9qaXRfY29tcGlsZWAuIENvbmZpcm1lZCwgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGRlZmluaXRlbHkgdGhlIHJpZ2h0IHN5bWJvbCB0byBob25lIGluIG9uLgoKTmV4dCB1cCwgdGhlIGNvbmZpZ3VyYXRpb24uICBMb29rcyBsaWtlIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgbWFuZGF0b3J5IGZvciB0aGlzIHRvIHdvcmsuICBUaGF0JiMzOTtzIHN0YW5kYXJkLCBhbmQgZWFzeSBlbm91Z2ggdG8gdmVyaWZ5LgoKTm93LCBhIHF1aWNrIHByYWN0aWNhbCBjb25zaWRlcmF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSBpZiBJIGNhbiBhY3R1YWxseSB0ZXN0IHRoaXMuICBDYW4gSSByZWFjaCB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgaW4gUUVNVT8gWWVzLCBsb29rcyBsaWtlIFFFTVUgc3VwcG9ydHMgTG9vbmdBcmNoNjQgZW11bGF0aW9uLCBhbmQgc3l6a2FsbGVyIGNhbiBydW4gaXQuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24uICBUaGUgY2hhbmdlcyBzZWVtIGZ1bmN0aW9uYWwgYW5kIGRpcmVjdGx5IHdpdGhpbiB0aGUgY29yZSBrZXJuZWwgKEJQRiBKSVQpLiAgVGhlcmVmb3JlLCBXb3J0aEZ1enppbmc9dHJ1ZS4KClNvLCB0byBzdW1tYXJpemUsIHRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhdG9taWMgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgY29tcGlsZXIsIGluY2x1ZGluZyBhIGJlbmNobWFyayBmb3IgYGJwZl9rcHRyX3hjaGdgLiAgVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bmN0aW9uYWwsIGFuZCBJIGNhbiB0ZXN0IGl0IGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIHRoZXNlIGF0b21pYyBvcGVyYXRpb25zIG9uIGEgTG9vbmdBcmNoIHN5c3RlbS4KCioqQ29uZmlnczoqKgoKKiAgIGBCUEZfSklUYAoqICAgYEJQRl9TWVNDQUxMYAoKKipGb2N1c1N5bWJvbDoqKgoKKiAgIGBicGZfaW50X2ppdF9jb21waWxlYAoKQW5kIEkgd2lsbCBkbyBhIHF1aWNrIGNoZWNrIG9uIHRoYXQgZnVuY3Rpb24gaW4gYGFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmNgIHRvIHNlZSB0aGUgZGV0YWlscyBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0yMTg2PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMjAwLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMjAxOnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIyMDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgYnBmX2ludF9qaXRfY29tcGlsZWAgaW4gRW11bGF0ZWQgTG9vbmdBcmNoIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyBjb3JyZWN0OiBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgaW5kZWVkIHRoZSBmdW5jdGlvbiB0byBjb25zaWRlci4gSG93ZXZlciwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IGNvZGUgcGF0aHMgdGhhdCBhcmUgKnVucmVhY2hhYmxlKiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgcGFydGljdWxhcmx5IHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIEJ1dCB3YWl0LCBMb29uZ0FyY2ggKmlzKiBlbXVsYXRhYmxlIGluIFFFTVUsIGFuZCBTeXprYWxsZXIgZXZlbiBzdXBwb3J0cyBhIExvb25nQXJjaCB0YXJnZXQuIFRoYXQgY2hhbmdlcyB0aGluZ3MuIFRoaXMgcGF0aCAqaXMqIHJlYWNoYWJsZS4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgdGhpbmsgYWJvdXQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLiBXZSBkZWZpbml0ZWx5IG5lZWQgYEJQRl9TWVNDQUxMYCBmb3IgQlBGIHRvIGZ1bmN0aW9uLCBhbmQgYEJQRl9KSVRgIGZvciB0aGUgSklUIGNvbXBpbGVyIGl0c2VsZi4gQXJlIHRoZXJlIGFueSBMb29uZ0FyY2gtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbmVlZCBjb25zaWRlcmF0aW9uPyBUaGUgYXJjaGl0ZWN0dXJlIGl0c2VsZiBpcyBgTE9PTkdBUkNIYCwgYnV0IHRoYXQmIzM5O3MgdGhlIGFyY2hpdGVjdHVyZSBpZGVudGlmaWVyLiBXZSYjMzk7cmUgY29uY2VybmVkIHdpdGggZmVhdHVyZXMsIHNvIHRoZSBhcmNoaXRlY3R1cmUgY29uZmlnIGl0c2VsZiBpcyBub3Qgd2hhdCB3ZSYjMzk7cmUgYWZ0ZXIuCgpGaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjazogQ2FuIHdlIGFjdHVhbGx5ICpmb2N1cyogb24gYGJwZl9rcHRyX3hjaGdgIHdpdGhpbiB0aGlzIGNvbnRleHQ/IFRoYXQmIzM5O3MgYSBCUEYgaGVscGVyL2tmdW5jLCByaWdodD8gU28sIGlzIGl0IGFjdHVhbGx5IGRlZmluZWQgYW5kIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGtlcm5lbD8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2twdHJfeGNoZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmM9MTQ4MT1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMzEyLVxua2VybmVsL2JwZi9maXh1cHMuYzoyMzEzOlx0XHQvKiBJbXBsZW1lbnQgYnBmX2twdHJfeGNoZyBpbmxpbmUgKi9cbmtlcm5lbC9icGYvZml4dXBzLmMtMjMxNC1cdFx0aWYgKHByb2ctXHUwMDNlaml0X3JlcXVlc3RlZCBcdTAwMjZcdTAwMjYgQklUU19QRVJfTE9ORyA9PSA2NCBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0xNzI2PXZvaWQgYnBmX3dxX2NhbmNlbF9hbmRfZnJlZSh2b2lkICp2YWwpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTczMC1cbmtlcm5lbC9icGYvaGVscGVycy5jOjE3MzE6QlBGX0NBTExfMihicGZfa3B0cl94Y2hnLCB2b2lkICosIGRzdCwgdm9pZCAqLCBwdHIpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzMyLXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzM4LVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MTczOTovKiBVbmxpa2Ugb3RoZXIgUFRSX1RPX0JURl9JRCBoZWxwZXJzIHRoZSBidGZfaWQgaW4gYnBmX2twdHJfeGNoZygpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzQwLSAqIGhlbHBlciBpcyBkZXRlcm1pbmVkIGR5bmFtaWNhbGx5IGJ5IHRoZSB2ZXJpZmllci4gVXNlIEJQRl9QVFJfUE9JU09OIHRvXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTc0Mi0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjE3NDM6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa3B0cl94Y2hnX3Byb3RvID0ge1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MTc0NDpcdC5mdW5jICAgICAgICAgPSBicGZfa3B0cl94Y2hnLFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTc0NS1cdC5ncGxfb25seSAgICAgPSBmYWxzZSxcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yMDY3PWJwZl9iYXNlX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjE0Ni1cdGNhc2UgQlBGX0ZVTkNfa3B0cl94Y2hnOlxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjE0NzpcdFx0cmV0dXJuIFx1MDAyNmJwZl9rcHRyX3hjaGdfcHJvdG87XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMTQ4LVx0Y2FzZSBCUEZfRlVOQ19mb3JfZWFjaF9tYXBfZWxlbTpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzE2Nz1zdGF0aWMgaW50IHByb2Nlc3Nfa3B0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzE4MC1cdFx0aWYgKCFtYXBfcHRyLVx1MDAzZWJ0Zikge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjcxODE6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21hcCAmIzM5OyVzJiMzOTsgaGFzIHRvIGhhdmUgQlRGIGluIG9yZGVyIHRvIHVzZSBicGZfa3B0cl94Y2hnXFxuXCYjMzQ7LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxODItXHRcdFx0XHRtYXBfcHRyLVx1MDAzZW5hbWUpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03ODMzPXN0YXRpYyBpbnQgY2hlY2tfcmVnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzg2Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODY3Olx0LyogTG9jYWwga3B0ciB0eXBlcyBhcmUgYWxsb3dlZCBhcyB0aGUgc291cmNlIGFyZ3VtZW50IG9mIGJwZl9rcHRyX3hjaGcgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODY4LVx0aWYgKG1ldGEtXHUwMDNlZnVuY19pZCA9PSBCUEZfRlVOQ19rcHRyX3hjaGcgXHUwMDI2XHUwMDI2IHR5cGVfaXNfYWxsb2ModHlwZSkgXHUwMDI2XHUwMDI2IHJlZ19mcm9tX2FyZ25vKGFyZ25vKSA9PSBCUEZfUkVHXzIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NjAKCQkJCQkJCW91dHB1dDogMTExCgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIExvb25nQXJjaCBCUEYgSklUIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIHRoZSBMb29uZ0FyY2ggYXJjaGl0ZWN0dXJlIGFuZCBpdHMgaW1wbGljYXRpb25zLiBJdCYjMzk7cyBjbGVhciBmcm9tIHRoZSBkZXNjcmlwdGlvbiB0aGF0IHRoZSBjb3JlIG9mIHRoaXMgd29yayByZXZvbHZlcyBhcm91bmQgYWRkaW5nIHN1cHBvcnQgZm9yIGBicGZfa3B0cl94Y2hnYCB3aXRoaW4gdGhlIEp1c3QtSW4tVGltZSAoSklUKSBjb21waWxlci4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0JiMzOTtzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gYXRvbWljIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgY29udGV4dCwgd2hpY2ggY291bGQgb3BlbiB0aGUgZG9vciBmb3IgbW9yZSBjb21wbGV4IGFuZCBlZmZpY2llbnQgQlBGIHByb2dyYW1zLiBHaXZlbiB0aGF0IGZvY3VzLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIGtleSBzeW1ib2wgSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIHdpdGhpbiB0aGUgSklUIGluZnJhc3RydWN0dXJlLgoKVGhlIGV4aXN0ZW5jZSBvZiBhIGJlbmNobWFyayBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9rcHRyX3hjaGcuY2AgaXMgaW1wb3J0YW50OyBpdCBzdWdnZXN0cyB3ZSBoYXZlIGEgdXNlci1zcGFjZSB0ZXN0YmVkIHRvIGV2YWx1YXRlIHRoZSBlZmZlY3RpdmVuZXNzIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGlzIGF0b21pYyBpbXBsZW1lbnRhdGlvbi4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgc29tZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0LiAmIzM0O1dvcnRoRnV6emluZzogdHJ1ZSYjMzQ7IGlzIGEgbm8tYnJhaW5lci4gVGhlIGltcGxlbWVudGF0aW9uIG9mIGF0b21pYyBvcGVyYXRpb25zIGlzIGEgY3JpdGljYWwgYXJlYSwgc28gaXTigJlzIGxpa2VseSB0aGF0IGFueSBidWdzIG9yIGlzc3VlcyB3aWxsIHNob3cgdXAgcXVpY2tseS4KCiYjMzQ7Rm9jdXNTeW1ib2xzOiBbXCYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZVwmIzM0O10mIzM0OyBpcyBteSB3YXkgb2YgbmFycm93aW5nIHRoZSBmdXp6aW5nIHNjb3BlIHRvIHRoZSByZWxldmFudCBwb3J0aW9uIG9mIHRoZSBjb2RlIGFuZCB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guCgpBbmQgZmluYWxseSwgdG8gY29uZmlndXJlIHRoZSB0ZXN0IGFuZCBtYWtlIHN1cmUgdGhhdCB3ZSBnZXQgYWNjdXJhdGUgcmVzdWx0cywgSSYjMzk7bGwgZW5hYmxlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnM6ICYjMzQ7RW5hYmxlQ29uZmlnczogW1wmIzM0O0JQRl9KSVRcJiMzNDssIFwmIzM0O0JQRl9TWVNDQUxMXCYjMzQ7XSYjMzQ7LgoKVGhpcyBpcyB0aGUgcmVhc29uaW5nIEkmIzM5O2xsIGJhc2UgbXkgZnV6emluZzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhdG9taWMgaW5zdHJ1Y3Rpb25zIGluIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBjb21waWxlciBhbmQgZW5hYmxlcyB0aGUgYnBmX2twdHJfeGNoZyBpbmxpbmUgdGVzdC4gVGhlIEJQRiBKSVQgbW9kaWZpY2F0aW9ucyBhcmUgZnVuY3Rpb25hbCBhbmQgY2FuIGJlIHRlc3RlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBjb250YWluaW5nIHRoZXNlIGF0b21pYyBvcGVyYXRpb25zLiYjMzQ7IFRoaXMgZXNzZW50aWFsbHkgYm9pbHMgZG93biB0bzogJiMzNDtBdG9taWMgb3BzIGluIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBhcmUgbm93IGEgdGhpbmc7IGxldCYjMzk7cyBwb2tlIGF0IHRoZW0hJiMzNDsgSSYjMzk7bSBub3cgcmVhZHkgdG8gc3RhcnQgcnVubmluZyB0aGlzIHRocm91Z2ggdGhlIHBhY2VzIGFuZCBzZWUgd2hhdCBwb3BzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhdG9taWMgaW5zdHJ1Y3Rpb25zIGluIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBjb21waWxlciBhbmQgZW5hYmxlcyB0aGUgYnBmX2twdHJfeGNoZyBpbmxpbmUgdGVzdC4gVGhlIEJQRiBKSVQgbW9kaWZpY2F0aW9ucyBhcmUgZnVuY3Rpb25hbCBhbmQgY2FuIGJlIHRlc3RlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBjb250YWluaW5nIHRoZXNlIGF0b21pYyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGF0b21pYyBpbnN0cnVjdGlvbnMgaW4gdGhlIExvb25nQXJjaCBCUEYgSklUIGNvbXBpbGVyIGFuZCBlbmFibGVzIHRoZSBicGZfa3B0cl94Y2hnIGlubGluZSB0ZXN0LiBUaGUgQlBGIEpJVCBtb2RpZmljYXRpb25zIGFyZSBmdW5jdGlvbmFsIGFuZCBjYW4gYmUgdGVzdGVkIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIGNvbnRhaW5pbmcgdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjoyMC40NTgwMDc5NzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY4MDU2NTY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGF0b21pYyBpbnN0cnVjdGlvbnMgaW4gdGhlIExvb25nQXJjaCBCUEYgSklUIGNvbXBpbGVyIGFuZCBlbmFibGVzIHRoZSBicGZfa3B0cl94Y2hnIGlubGluZSB0ZXN0LiBUaGUgQlBGIEpJVCBtb2RpZmljYXRpb25zIGFyZSBmdW5jdGlvbmFsIGFuZCBjYW4gYmUgdGVzdGVkIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIGNvbnRhaW5pbmcgdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjMyOjIwLjQ1ODAxMjgwNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3OTAyNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzc2NTc4Mzc2MjM5YmU1MjAzZDAxZmQ3MjE0ODYxOWM4NDU5NmI1NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAwNzozMjoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9pbnN0LmhcXG5pbmRleCA3NmI3MjM1OTAwMjNkLi5iZGJjMTdkMDcxMTA1IDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaFxcbisrKyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaFxcbkBAIC0xOTksNiArMTk5LDEwIEBAIGVudW0gcmVnM19vcCB7XFxuIFxcdGFtc3dhcGhfb3BcXHQ9IDB4NzBiOSxcXG4gXFx0YW1hZGRiX29wXFx0PSAweDcwYmEsXFxuIFxcdGFtYWRkaF9vcFxcdD0gMHg3MGJiLFxcbitcXHRhbXN3YXBkYmJfb3BcXHQ9IDB4NzBiYyxcXG4rXFx0YW1zd2FwZGJoX29wXFx0PSAweDcwYmQsXFxuK1xcdGFtYWRkZGJiX29wXFx0PSAweDcwYmUsXFxuK1xcdGFtYWRkZGJoX29wXFx0PSAweDcwYmYsXFxuIFxcdGFtc3dhcHdfb3BcXHQ9IDB4NzBjMCxcXG4gXFx0YW1zd2FwZF9vcFxcdD0gMHg3MGMxLFxcbiBcXHRhbWFkZHdfb3BcXHQ9IDB4NzBjMixcXG5AQCAtNzgzLDYgKzc4NywyMCBAQCBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBiLCBhbXN3YXBiX29wKVxcbiBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBoLCBhbXN3YXBoX29wKVxcbiBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXB3LCBhbXN3YXB3X29wKVxcbiBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkLCBhbXN3YXBkX29wKVxcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkYmIsIGFtc3dhcGRiYl9vcClcXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwZGJoLCBhbXN3YXBkYmhfb3ApXFxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYWRkZGJiLCBhbWFkZGRiYl9vcClcXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1hZGRkYmgsIGFtYWRkZGJoX29wKVxcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFkZGRidywgYW1hZGRkYndfb3ApXFxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYWRkZGJkLCBhbWFkZGRiZF9vcClcXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1hbmRkYncsIGFtYW5kZGJ3X29wKVxcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFuZGRiZCwgYW1hbmRkYmRfb3ApXFxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtb3JkYncsIGFtb3JkYndfb3ApXFxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtb3JkYmQsIGFtb3JkYmRfb3ApXFxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFteG9yZGJ3LCBhbXhvcmRid19vcClcXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW14b3JkYmQsIGFteG9yZGJkX29wKVxcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkYncsIGFtc3dhcGRid19vcClcXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwZGJkLCBhbXN3YXBkYmRfb3ApXFxuIFxcbiAjZGVmaW5lIERFRl9FTUlUX1JFRzNTQTJfRk9STUFUKE5BTUUsIE9QKVxcdFxcdFxcdFxcdFxcXFxcXG4gc3RhdGljIGlubGluZSB2b2lkIGVtaXRfIyNOQU1FKHVuaW9uIGxvb25nYXJjaF9pbnN0cnVjdGlvbiAqaW5zbixcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMgYi9hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jXFxuaW5kZXggMjljMjgxYmVmMjhlZi4uNjg2ZDMzMzE0NmNlMiAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY1xcbkBAIC04LDYgKzgsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2FzbS1vZmZzZXRzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJicGZfaml0LmhcXFwiXFxuIFxcbisvKiBkYmFyIGhpbnQgZm9yIGxsL3NjIGNvbXBsZXRpb24gb3JkZXJpbmcsIHNlZSBfX1dFQUtfTExTQ19NQiAqL1xcbisjZGVmaW5lIERCQVJfTExTQ19NQlxcdDB4NzAwXFxuK1xcbiAjZGVmaW5lIExPT05HQVJDSF9NQVhfUkVHX0FSR1MgOFxcbiBcXG4gI2RlZmluZSBMT09OR0FSQ0hfU0FWRV9SQV9OSU5TTlMgICAxXFxuQEAgLTQzMyw3ICs0MzYsNyBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuIFxcdFxcdFxcdFxcdHByX2Vycl9vbmNlKFxcXCJicGYtaml0OiBhbWFkZC5iIGluc3RydWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbWFkZGIsIHNyYywgdDEsIHQzKTtcXG4rXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkYmIsIHNyYywgdDEsIHQzKTtcXG4gXFx0XFx0XFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgQlBGX0g6XFxuQEAgLTQ0MSwzOSArNDQ0LDM5IEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfcm13KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4gXFx0XFx0XFx0XFx0cHJfZXJyX29uY2UoXFxcImJwZi1qaXQ6IGFtYWRkLmggaW5zdHJ1Y3Rpb24gaXMgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtYWRkaCwgc3JjLCB0MSwgdDMpO1xcbitcXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbWFkZGRiaCwgc3JjLCB0MSwgdDMpO1xcbiBcXHRcXHRcXHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBCUEZfVzpcXG4tXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGR3LCBzcmMsIHQxLCB0Myk7XFxuK1xcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtYWRkZGJ3LCBzcmMsIHQxLCB0Myk7XFxuIFxcdFxcdFxcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEJQRl9EVzpcXG4tXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkLCBzcmMsIHQxLCB0Myk7XFxuK1xcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtYWRkZGJkLCBzcmMsIHQxLCB0Myk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9BTkQgfCBCUEZfRkVUQ0g6XFxuIFxcdFxcdGlmIChpc2R3KSB7XFxuLVxcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtYW5kZCwgc3JjLCB0MSwgdDMpO1xcbitcXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbWFuZGRiZCwgc3JjLCB0MSwgdDMpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbWFuZHcsIHNyYywgdDEsIHQzKTtcXG4rXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1hbmRkYncsIHNyYywgdDEsIHQzKTtcXG4gXFx0XFx0XFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBCUEZfT1IgfCBCUEZfRkVUQ0g6XFxuIFxcdFxcdGlmIChpc2R3KSB7XFxuLVxcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtb3JkLCBzcmMsIHQxLCB0Myk7XFxuK1xcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtb3JkYmQsIHNyYywgdDEsIHQzKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1vcncsIHNyYywgdDEsIHQzKTtcXG4rXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1vcmRidywgc3JjLCB0MSwgdDMpO1xcbiBcXHRcXHRcXHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9YT1IgfCBCUEZfRkVUQ0g6XFxuIFxcdFxcdGlmIChpc2R3KSB7XFxuLVxcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFteG9yZCwgc3JjLCB0MSwgdDMpO1xcbitcXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbXhvcmRiZCwgc3JjLCB0MSwgdDMpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbXhvcncsIHNyYywgdDEsIHQzKTtcXG4rXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW14b3JkYncsIHNyYywgdDEsIHQzKTtcXG4gXFx0XFx0XFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG5AQCAtNDg1LDcgKzQ4OCw3IEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfcm13KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4gXFx0XFx0XFx0XFx0cHJfZXJyX29uY2UoXFxcImJwZi1qaXQ6IGFtc3dhcC5iIGluc3RydWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbXN3YXBiLCBzcmMsIHQxLCB0Myk7XFxuK1xcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGRiYiwgc3JjLCB0MSwgdDMpO1xcbiBcXHRcXHRcXHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBCUEZfSDpcXG5AQCAtNDkzLDE1ICs0OTYsMTUgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbiBcXHRcXHRcXHRcXHRwcl9lcnJfb25jZShcXFwiYnBmLWppdDogYW1zd2FwLmggaW5zdHJ1Y3Rpb24gaXMgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGgsIHNyYywgdDEsIHQzKTtcXG4rXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2FwZGJoLCBzcmMsIHQxLCB0Myk7XFxuIFxcdFxcdFxcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIEJQRl9XOlxcbi1cXHRcXHRcXHRlbWl0X2luc24oY3R4LCBhbXN3YXB3LCBzcmMsIHQxLCB0Myk7XFxuK1xcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGRidywgc3JjLCB0MSwgdDMpO1xcbiBcXHRcXHRcXHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBCUEZfRFc6XFxuLVxcdFxcdFxcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGQsIHNyYywgdDEsIHQzKTtcXG4rXFx0XFx0XFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2FwZGJkLCBzcmMsIHQxLCB0Myk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC01MjQsNiArNTI3LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxcbiBcXHRcXHRcXHRlbWl0X2luc24oY3R4LCBiZXEsIHQzLCBMT09OR0FSQ0hfR1BSX1pFUk8sIC02KTtcXG4gXFx0XFx0XFx0ZW1pdF96ZXh0XzMyKGN0eCwgcjAsIHRydWUpO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGVtaXRfaW5zbihjdHgsIGRiYXIsIERCQVJfTExTQ19NQik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRwcl9lcnJfb25jZShcXFwiYnBmLWppdDogaW52YWxpZCBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgb3Bjb2RlICUwMnhcXFxcblxcXCIsIGltbSk7XFxuQEAgLTIzOTIsNiArMjM5NiwxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiAvKiBJbmRpY2F0ZSB0aGUgSklUIGJhY2tlbmQgc3VwcG9ydHMgbWl4aW5nIGJwZjJicGYgYW5kIHRhaWxjYWxscy4gKi9cXG4gYm9vbCBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuaW5kZXggYjY0MmVlNDg5ZWE2NC4uNmRmYzgxNzQ4NTg0NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG5AQCAtOTgwLDYgKzk4MCw3IEBAICQoT1VUUFVUKS9iZW5jaF9scG1fdHJpZV9tYXAubzogJChPVVRQVVQpL2xwbV90cmllX2JlbmNoLnNrZWwuaCAkKE9VVFBVVCkvbHBtX3RyXFxuICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm86ICQoT1VUUFVUKS9icGZfbm9wX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcXG4gJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vOiAkKE9VVFBVVCkveGRwX2xiX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcXG4gJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubzogYmVuY2hfYnBmX3RpbWluZy5oXFxuKyQoT1VUUFVUKS9iZW5jaF9rcHRyX3hjaGcubzogJChPVVRQVVQpL2twdHJfeGNoZ19iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoLm86IGJlbmNoLmggdGVzdGluZ19oZWxwZXJzLmggJChCUEZPQkopXFxuICQoT1VUUFVUKS9iZW5jaDogTERMSUJTICs9IC1sbVxcbiAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXFxcXG5AQCAtMTAwNSw2ICsxMDA2LDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vIFxcXFxcXG4rXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9rcHRyX3hjaGcubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL3VzZHRfMi5vIFxcXFxcXG4gXFx0XFx0ICNcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbmluZGV4IDNkOWQyY2Q3NzY0YmQuLjU1MDI5MGQ2NzAxYTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xcbkBAIC01ODIsNiArNTgyLDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9scG1fdHJpZV9kZWxldGU7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfbHBtX3RyaWVfZnJlZTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbm9wO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3hkcF9sYjtcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9rcHRyX3hjaGc7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcXG4gXFx0XFx1MDAyNmJlbmNoX2NvdW50X2dsb2JhbCxcXG5AQCAtNjY1LDYgKzY2Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xcbiBcXHRcXHUwMDI2YmVuY2hfbHBtX3RyaWVfZnJlZSxcXG4gXFx0XFx1MDAyNmJlbmNoX2JwZl9ub3AsXFxuIFxcdFxcdTAwMjZiZW5jaF94ZHBfbGIsXFxuK1xcdFxcdTAwMjZiZW5jaF9rcHRyX3hjaGcsXFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCBmaW5kX2JlbmNobWFyayh2b2lkKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2twdHJfeGNoZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9rcHRyX3hjaGcuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjhhMGQzNDZmZGE2OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2twdHJfeGNoZy5jXFxuQEAgLTAsMCArMSw5NiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKEMpIDIwMjYuIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCAqL1xcbisjaW5jbHVkZSBcXHUwMDNjYXJncC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYmVuY2guaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtwdHJfeGNoZ19iZW5jaC5za2VsLmhcXFwiXFxuK1xcbitzdGF0aWMgc3RydWN0IGN0eCB7XFxuK1xcdHN0cnVjdCBrcHRyX3hjaGdfYmVuY2ggKnNrZWw7XFxuK30gY3R4O1xcbitcXG4rc3RhdGljIHN0cnVjdCB7XFxuK1xcdF9fdTMyIG5yX2xvb3BzO1xcbit9IGFyZ3MgPSB7XFxuK1xcdC5ucl9sb29wcyA9IDI1NixcXG4rfTtcXG4rXFxuK2VudW0ge1xcbitcXHRBUkdfTlJfTE9PUFMgPSA3MDAwLFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XFxuK1xcdHsgXFxcIm5yX2xvb3BzXFxcIiwgQVJHX05SX0xPT1BTLCBcXFwibnJfbG9vcHNcXFwiLCAwLFxcbitcXHQgIFxcXCJTZXQgbnVtYmVyIG9mIGJwZl9rcHRyX3hjaGcoKSBjYWxscyBwZXIgdHJpZ2dlclxcXCJ9LFxcbitcXHR7fSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRzd2l0Y2ggKGtleSkge1xcbitcXHRjYXNlIEFSR19OUl9MT09QUzpcXG4rXFx0XFx0YXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBBUkdQX0VSUl9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2twdHJfeGNoZ19hcmdwID0ge1xcbitcXHQub3B0aW9ucyA9IG9wdHMsXFxuK1xcdC5wYXJzZXIgPSBwYXJzZV9hcmcsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKVxcbit7XFxuK1xcdGlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJiZW5jaG1hcmsgZG9lc24ndCBzdXBwb3J0IGNvbnN1bWVyIVxcXFxuXFxcIik7XFxuK1xcdFxcdGV4aXQoMSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgKnByb2R1Y2VyKHZvaWQgKmlucHV0KVxcbit7XFxuK1xcdHdoaWxlICh0cnVlKVxcbitcXHRcXHRzeXNjYWxsKF9fTlJfZ2V0cGdpZCk7XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWVhc3VyZShzdHJ1Y3QgYmVuY2hfcmVzICpyZXMpXFxuK3tcXG4rXFx0cmVzLVxcdTAwM2VoaXRzID0gYXRvbWljX3N3YXAoXFx1MDAyNmN0eC5za2VsLVxcdTAwM2Vic3MtXFx1MDAzZWhpdHMsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzZXR1cCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfbGluayAqbGluaztcXG4rXFxuK1xcdHNldHVwX2xpYmJwZigpO1xcbitcXG4rXFx0Y3R4LnNrZWwgPSBrcHRyX3hjaGdfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFjdHguc2tlbCkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZhaWxlZCB0byBvcGVuIHNrZWxldG9uXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbitcXG4rXFx0Y3R4LnNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZW5yX2xvb3BzID0gYXJncy5ucl9sb29wcztcXG4rXFxuK1xcdGxpbmsgPSBicGZfcHJvZ3JhbV9fYXR0YWNoKGN0eC5za2VsLVxcdTAwM2Vwcm9ncy5iZW5jaG1hcmspO1xcbitcXHRpZiAoIWxpbmspIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmYWlsZWQgdG8gYXR0YWNoIHByb2dyYW0hXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZXhpdCgxKTtcXG4rXFx0fVxcbit9XFxuK1xcbitjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfa3B0cl94Y2hnID0ge1xcbitcXHQubmFtZSA9IFxcXCJrcHRyLXhjaGdcXFwiLFxcbitcXHQuYXJncCA9IFxcdTAwMjZiZW5jaF9rcHRyX3hjaGdfYXJncCxcXG4rXFx0LnZhbGlkYXRlID0gdmFsaWRhdGUsXFxuK1xcdC5zZXR1cCA9IHNldHVwLFxcbitcXHQucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsXFxuK1xcdC5tZWFzdXJlID0gbWVhc3VyZSxcXG4rXFx0LnJlcG9ydF9wcm9ncmVzcyA9IG9wc19yZXBvcnRfcHJvZ3Jlc3MsXFxuK1xcdC5yZXBvcnRfZmluYWwgPSBvcHNfcmVwb3J0X2ZpbmFsLFxcbit9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHRyX3hjaGdfaW5saW5lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHRyX3hjaGdfaW5saW5lLmNcXG5pbmRleCA3ZGVmMTU4ZGE5ZWI3Li4xMjE1ZDZlZGQ1OTA2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuY1xcbkBAIC0xNCw3ICsxNCw4IEBAIHZvaWQgdGVzdF9rcHRyX3hjaGdfaW5saW5lKHZvaWQpXFxuIFxcdGludCBlcnI7XFxuIFxcbiAjaWYgIShkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pIHx8IFxcXFxcXG4tICAgICAgKGRlZmluZWQoX19yaXNjdikgXFx1MDAyNlxcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSlcXG4rXFx0KGRlZmluZWQoX19yaXNjdikgXFx1MDAyNlxcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSB8fCBcXFxcXFxuK1xcdChkZWZpbmVkKF9fbG9vbmdhcmNoX18pIFxcdTAwMjZcXHUwMDI2IF9fbG9vbmdhcmNoX2dybGVuID09IDY0KSlcXG4gXFx0dGVzdF9fc2tpcCgpO1xcbiBcXHRyZXR1cm47XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3B0cl94Y2hnX2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3B0cl94Y2hnX2JlbmNoLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjM2Mzg4MzA3M2UyYzBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2twdHJfeGNoZ19iZW5jaC5jXFxuQEAgLTAsMCArMSw0OSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKEMpIDIwMjYuIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCAqL1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiYnBmX2V4cGVyaW1lbnRhbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbitcXG4rI2RlZmluZSBNQVhfWENIR19MT09QUyA0MDk2XFxuK1xcbitzdHJ1Y3QgYmluX2RhdGEge1xcbitcXHRjaGFyIGJsb2JbMzJdO1xcbit9O1xcbitcXG4rI2RlZmluZSBwcml2YXRlKG5hbWUpIFNFQyhcXFwiLmJzcy5cXFwiICNuYW1lKSBfX2hpZGRlbiBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSlcXG4rXFxuK3ByaXZhdGUoa3B0cikgc3RydWN0IGJpbl9kYXRhIF9fa3B0ciAqcHRyO1xcbit1MzIgbnJfbG9vcHMgPSAyNTY7XFxuK2xvbmcgaGl0cztcXG4rXFxuK1NFQyhcXFwiZmVudHJ5L1xcXCIgU1lTX1BSRUZJWCBcXFwic3lzX2dldHBnaWRcXFwiKVxcbitpbnQgYmVuY2htYXJrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgYmluX2RhdGEgKm9sZDtcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX1hDSEdfTE9PUFM7IGkrKykge1xcbitcXHRcXHRpZiAoaSBcXHUwMDNlPSBucl9sb29wcylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRvbGQgPSBicGZfa3B0cl94Y2hnKFxcdTAwMjZwdHIsIE5VTEwpO1xcbitcXHRcXHRpZiAob2xkKVxcbitcXHRcXHRcXHRicGZfb2JqX2Ryb3Aob2xkKTtcXG4rXFx0fVxcbitcXG4rXFx0X19zeW5jX2FkZF9hbmRfZmV0Y2goXFx1MDAyNmhpdHMsIGkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogQlRGIEZVTkMgcmVjb3JkcyBhcmUgbm90IGdlbmVyYXRlZCBmb3Iga2Z1bmNzIHJlZmVyZW5jZWQgb25seSB0aHJvdWdoXFxuKyAqIG9wdGltaXplZCBwYXRocy4gS2VlcCBicGZfb2JqX2Ryb3AoKSB2aXNpYmxlIHRvIGxpYmJwZidzIGtmdW5jIGxpbmtlci5cXG4rICovXFxuK3ZvaWQgX19idGZfcm9vdCh2b2lkKVxcbit7XFxuK1xcdGJwZl9vYmpfZHJvcChOVUxMKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjoyMC43ODY2MTMxMjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NDM1MTk1MTQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGF0b21pYyBpbnN0cnVjdGlvbnMgaW4gdGhlIExvb25nQXJjaCBCUEYgSklUIGNvbXBpbGVyIGFuZCBlbmFibGVzIHRoZSBicGZfa3B0cl94Y2hnIGlubGluZSB0ZXN0LiBUaGUgQlBGIEpJVCBtb2RpZmljYXRpb25zIGFyZSBmdW5jdGlvbmFsIGFuZCBjYW4gYmUgdGVzdGVkIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIGNvbnRhaW5pbmcgdGhlc2UgYXRvbWljIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3NjU3ODM3NjIzOWJlNTIwM2QwMWZkNzIxNDg2MTljODQ1OTZiNTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwNzozMjoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaFxuaW5kZXggNzZiNzIzNTkwMDIzZC4uYmRiYzE3ZDA3MTEwNSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaW5zdC5oXG5AQCAtMTk5LDYgKzE5OSwxMCBAQCBlbnVtIHJlZzNfb3Age1xuIFx0YW1zd2FwaF9vcFx0PSAweDcwYjksXG4gXHRhbWFkZGJfb3BcdD0gMHg3MGJhLFxuIFx0YW1hZGRoX29wXHQ9IDB4NzBiYixcbitcdGFtc3dhcGRiYl9vcFx0PSAweDcwYmMsXG4rXHRhbXN3YXBkYmhfb3BcdD0gMHg3MGJkLFxuK1x0YW1hZGRkYmJfb3BcdD0gMHg3MGJlLFxuK1x0YW1hZGRkYmhfb3BcdD0gMHg3MGJmLFxuIFx0YW1zd2Fwd19vcFx0PSAweDcwYzAsXG4gXHRhbXN3YXBkX29wXHQ9IDB4NzBjMSxcbiBcdGFtYWRkd19vcFx0PSAweDcwYzIsXG5AQCAtNzgzLDYgKzc4NywyMCBAQCBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBiLCBhbXN3YXBiX29wKVxuIERFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGgsIGFtc3dhcGhfb3ApXG4gREVGX0VNSVRfUkVHM19GT1JNQVQoYW1zd2FwdywgYW1zd2Fwd19vcClcbiBERUZfRU1JVF9SRUczX0ZPUk1BVChhbXN3YXBkLCBhbXN3YXBkX29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGRiYiwgYW1zd2FwZGJiX29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGRiaCwgYW1zd2FwZGJoX29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYWRkZGJiLCBhbWFkZGRiYl9vcClcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFkZGRiaCwgYW1hZGRkYmhfb3ApXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1hZGRkYncsIGFtYWRkZGJ3X29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtYWRkZGJkLCBhbWFkZGRiZF9vcClcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbWFuZGRidywgYW1hbmRkYndfb3ApXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1hbmRkYmQsIGFtYW5kZGJkX29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtb3JkYncsIGFtb3JkYndfb3ApXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW1vcmRiZCwgYW1vcmRiZF9vcClcbitERUZfRU1JVF9SRUczX0ZPUk1BVChhbXhvcmRidywgYW14b3JkYndfb3ApXG4rREVGX0VNSVRfUkVHM19GT1JNQVQoYW14b3JkYmQsIGFteG9yZGJkX29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGRidywgYW1zd2FwZGJ3X29wKVxuK0RFRl9FTUlUX1JFRzNfRk9STUFUKGFtc3dhcGRiZCwgYW1zd2FwZGJkX29wKVxuIFxuICNkZWZpbmUgREVGX0VNSVRfUkVHM1NBMl9GT1JNQVQoTkFNRSwgT1ApXHRcdFx0XHRcXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0XyMjTkFNRSh1bmlvbiBsb29uZ2FyY2hfaW5zdHJ1Y3Rpb24gKmluc24sXHRcXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMgYi9hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jXG5pbmRleCAyOWMyODFiZWYyOGVmLi42ODZkMzMzMTQ2Y2UyIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY1xuKysrIGIvYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY1xuQEAgLTgsNiArOCw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2FzbS1vZmZzZXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcImJwZl9qaXQuaFwiXG4gXG4rLyogZGJhciBoaW50IGZvciBsbC9zYyBjb21wbGV0aW9uIG9yZGVyaW5nLCBzZWUgX19XRUFLX0xMU0NfTUIgKi9cbisjZGVmaW5lIERCQVJfTExTQ19NQlx0MHg3MDBcbitcbiAjZGVmaW5lIExPT05HQVJDSF9NQVhfUkVHX0FSR1MgOFxuIFxuICNkZWZpbmUgTE9PTkdBUkNIX1NBVkVfUkFfTklOU05TICAgMVxuQEAgLTQzMyw3ICs0MzYsNyBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4gXHRcdFx0XHRwcl9lcnJfb25jZShcImJwZi1qaXQ6IGFtYWRkLmIgaW5zdHJ1Y3Rpb24gaXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbWFkZGIsIHNyYywgdDEsIHQzKTtcbitcdFx0XHRlbWl0X2luc24oY3R4LCBhbWFkZGRiYiwgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX0g6XG5AQCAtNDQxLDM5ICs0NDQsMzkgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuIFx0XHRcdFx0cHJfZXJyX29uY2UoXCJicGYtaml0OiBhbWFkZC5oIGluc3RydWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcXG5cIik7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRoLCBzcmMsIHQxLCB0Myk7XG4rXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkYmgsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRlbWl0X3pleHRfMzIoY3R4LCBzcmMsIHRydWUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEJQRl9XOlxuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtYWRkdywgc3JjLCB0MSwgdDMpO1xuK1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtYWRkZGJ3LCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBCUEZfRFc6XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkLCBzcmMsIHQxLCB0Myk7XG4rXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1hZGRkYmQsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX0FORCB8IEJQRl9GRVRDSDpcbiBcdFx0aWYgKGlzZHcpIHtcbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbWFuZGQsIHNyYywgdDEsIHQzKTtcbitcdFx0XHRlbWl0X2luc24oY3R4LCBhbWFuZGRiZCwgc3JjLCB0MSwgdDMpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtYW5kdywgc3JjLCB0MSwgdDMpO1xuK1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtYW5kZGJ3LCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX09SIHwgQlBGX0ZFVENIOlxuIFx0XHRpZiAoaXNkdykge1xuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtb3JkLCBzcmMsIHQxLCB0Myk7XG4rXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1vcmRiZCwgc3JjLCB0MSwgdDMpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtb3J3LCBzcmMsIHQxLCB0Myk7XG4rXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1vcmRidywgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9YT1IgfCBCUEZfRkVUQ0g6XG4gXHRcdGlmIChpc2R3KSB7XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW14b3JkLCBzcmMsIHQxLCB0Myk7XG4rXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW14b3JkYmQsIHNyYywgdDEsIHQzKTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbXhvcncsIHNyYywgdDEsIHQzKTtcbitcdFx0XHRlbWl0X2luc24oY3R4LCBhbXhvcmRidywgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG5AQCAtNDg1LDcgKzQ4OCw3IEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfcm13KGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcbiBcdFx0XHRcdHByX2Vycl9vbmNlKFwiYnBmLWppdDogYW1zd2FwLmIgaW5zdHJ1Y3Rpb24gaXMgbm90IHN1cHBvcnRlZFxcblwiKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRlbWl0X2luc24oY3R4LCBhbXN3YXBiLCBzcmMsIHQxLCB0Myk7XG4rXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2FwZGJiLCBzcmMsIHQxLCB0Myk7XG4gXHRcdFx0ZW1pdF96ZXh0XzMyKGN0eCwgc3JjLCB0cnVlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBCUEZfSDpcbkBAIC00OTMsMTUgKzQ5NiwxNSBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtdyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4gXHRcdFx0XHRwcl9lcnJfb25jZShcImJwZi1qaXQ6IGFtc3dhcC5oIGluc3RydWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcXG5cIik7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2FwaCwgc3JjLCB0MSwgdDMpO1xuK1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGRiaCwgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX1c6XG4tXHRcdFx0ZW1pdF9pbnNuKGN0eCwgYW1zd2Fwdywgc3JjLCB0MSwgdDMpO1xuK1x0XHRcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGRidywgc3JjLCB0MSwgdDMpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHNyYywgdHJ1ZSk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgQlBGX0RXOlxuLVx0XHRcdGVtaXRfaW5zbihjdHgsIGFtc3dhcGQsIHNyYywgdDEsIHQzKTtcbitcdFx0XHRlbWl0X2luc24oY3R4LCBhbXN3YXBkYmQsIHNyYywgdDEsIHQzKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0XHRicmVhaztcbkBAIC01MjQsNiArNTI3LDcgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXcoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuIFx0XHRcdGVtaXRfaW5zbihjdHgsIGJlcSwgdDMsIExPT05HQVJDSF9HUFJfWkVSTywgLTYpO1xuIFx0XHRcdGVtaXRfemV4dF8zMihjdHgsIHIwLCB0cnVlKTtcbiBcdFx0fVxuK1x0XHRlbWl0X2luc24oY3R4LCBkYmFyLCBEQkFSX0xMU0NfTUIpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHByX2Vycl9vbmNlKFwiYnBmLWppdDogaW52YWxpZCBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgb3Bjb2RlICUwMnhcXG5cIiwgaW1tKTtcbkBAIC0yMzkyLDYgKzIzOTYsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnKHZvaWQpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qIEluZGljYXRlIHRoZSBKSVQgYmFja2VuZCBzdXBwb3J0cyBtaXhpbmcgYnBmMmJwZiBhbmQgdGFpbGNhbGxzLiAqL1xuIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IGI2NDJlZTQ4OWVhNjQuLjZkZmM4MTc0ODU4NDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTk4MCw2ICs5ODAsNyBAQCAkKE9VVFBVVCkvYmVuY2hfbHBtX3RyaWVfbWFwLm86ICQoT1VUUFVUKS9scG1fdHJpZV9iZW5jaC5za2VsLmggJChPVVRQVVQpL2xwbV90clxuICQoT1VUUFVUKS9iZW5jaF9icGZfbm9wLm86ICQoT1VUUFVUKS9icGZfbm9wX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcbiAkKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm86ICQoT1VUUFVUKS94ZHBfbGJfYmVuY2guc2tlbC5oIGJlbmNoX2JwZl90aW1pbmcuaFxuICQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm86IGJlbmNoX2JwZl90aW1pbmcuaFxuKyQoT1VUUFVUKS9iZW5jaF9rcHRyX3hjaGcubzogJChPVVRQVVQpL2twdHJfeGNoZ19iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2gubzogYmVuY2guaCB0ZXN0aW5nX2hlbHBlcnMuaCAkKEJQRk9CSilcbiAkKE9VVFBVVCkvYmVuY2g6IExETElCUyArPSAtbG1cbiAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXG5AQCAtMTAwNSw2ICsxMDA2LDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl90aW1pbmcubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9ub3AubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vIFxcXG4rXHRcdCAkKE9VVFBVVCkvYmVuY2hfa3B0cl94Y2hnLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS91c2R0XzEubyBcXFxuIFx0XHQgJChPVVRQVVQpL3VzZHRfMi5vIFxcXG4gXHRcdCAjXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuaW5kZXggM2Q5ZDJjZDc3NjRiZC4uNTUwMjkwZDY3MDFhNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuQEAgLTU4Miw2ICs1ODIsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2RlbGV0ZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2xwbV90cmllX2ZyZWU7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbm9wO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfeGRwX2xiO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfa3B0cl94Y2hnO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmVuY2ggKmJlbmNoc1tdID0ge1xuIFx0XHUwMDI2YmVuY2hfY291bnRfZ2xvYmFsLFxuQEAgLTY2NSw2ICs2NjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcbiBcdFx1MDAyNmJlbmNoX2xwbV90cmllX2ZyZWUsXG4gXHRcdTAwMjZiZW5jaF9icGZfbm9wLFxuIFx0XHUwMDI2YmVuY2hfeGRwX2xiLFxuK1x0XHUwMDI2YmVuY2hfa3B0cl94Y2hnLFxuIH07XG4gXG4gc3RhdGljIHZvaWQgZmluZF9iZW5jaG1hcmsodm9pZClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2twdHJfeGNoZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9rcHRyX3hjaGcuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4YTBkMzQ2ZmRhNjhcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfa3B0cl94Y2hnLmNcbkBAIC0wLDAgKzEsOTYgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoQykgMjAyNi4gTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkICovXG4rI2luY2x1ZGUgXHUwMDNjYXJncC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJiZW5jaC5oXCJcbisjaW5jbHVkZSBcImtwdHJfeGNoZ19iZW5jaC5za2VsLmhcIlxuK1xuK3N0YXRpYyBzdHJ1Y3QgY3R4IHtcbitcdHN0cnVjdCBrcHRyX3hjaGdfYmVuY2ggKnNrZWw7XG4rfSBjdHg7XG4rXG4rc3RhdGljIHN0cnVjdCB7XG4rXHRfX3UzMiBucl9sb29wcztcbit9IGFyZ3MgPSB7XG4rXHQubnJfbG9vcHMgPSAyNTYsXG4rfTtcbitcbitlbnVtIHtcbitcdEFSR19OUl9MT09QUyA9IDcwMDAsXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdHNbXSA9IHtcbitcdHsgXCJucl9sb29wc1wiLCBBUkdfTlJfTE9PUFMsIFwibnJfbG9vcHNcIiwgMCxcbitcdCAgXCJTZXQgbnVtYmVyIG9mIGJwZl9rcHRyX3hjaGcoKSBjYWxscyBwZXIgdHJpZ2dlclwifSxcbitcdHt9LFxuK307XG4rXG4rc3RhdGljIGVycm9yX3QgcGFyc2VfYXJnKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHN3aXRjaCAoa2V5KSB7XG4rXHRjYXNlIEFSR19OUl9MT09QUzpcbitcdFx0YXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfa3B0cl94Y2hnX2FyZ3AgPSB7XG4rXHQub3B0aW9ucyA9IG9wdHMsXG4rXHQucGFyc2VyID0gcGFyc2VfYXJnLFxuK307XG4rXG4rc3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZClcbit7XG4rXHRpZiAoZW52LmNvbnN1bWVyX2NudCAhPSAwKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImJlbmNobWFyayBkb2Vzbid0IHN1cHBvcnQgY29uc3VtZXIhXFxuXCIpO1xuK1x0XHRleGl0KDEpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpXG4re1xuK1x0d2hpbGUgKHRydWUpXG4rXHRcdHN5c2NhbGwoX19OUl9nZXRwZ2lkKTtcbitcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcylcbit7XG4rXHRyZXMtXHUwMDNlaGl0cyA9IGF0b21pY19zd2FwKFx1MDAyNmN0eC5za2VsLVx1MDAzZWJzcy1cdTAwM2VoaXRzLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2V0dXAodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4rXG4rXHRzZXR1cF9saWJicGYoKTtcbitcbitcdGN0eC5za2VsID0ga3B0cl94Y2hnX2JlbmNoX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIWN0eC5za2VsKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBvcGVuIHNrZWxldG9uXFxuXCIpO1xuK1x0XHRleGl0KDEpO1xuK1x0fVxuK1xuK1x0Y3R4LnNrZWwtXHUwMDNlZGF0YS1cdTAwM2Vucl9sb29wcyA9IGFyZ3MubnJfbG9vcHM7XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChjdHguc2tlbC1cdTAwM2Vwcm9ncy5iZW5jaG1hcmspO1xuK1x0aWYgKCFsaW5rKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBhdHRhY2ggcHJvZ3JhbSFcXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9rcHRyX3hjaGcgPSB7XG4rXHQubmFtZSA9IFwia3B0ci14Y2hnXCIsXG4rXHQuYXJncCA9IFx1MDAyNmJlbmNoX2twdHJfeGNoZ19hcmdwLFxuK1x0LnZhbGlkYXRlID0gdmFsaWRhdGUsXG4rXHQuc2V0dXAgPSBzZXR1cCxcbitcdC5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlcixcbitcdC5tZWFzdXJlID0gbWVhc3VyZSxcbitcdC5yZXBvcnRfcHJvZ3Jlc3MgPSBvcHNfcmVwb3J0X3Byb2dyZXNzLFxuK1x0LnJlcG9ydF9maW5hbCA9IG9wc19yZXBvcnRfZmluYWwsXG4rfTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHRyX3hjaGdfaW5saW5lLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHRyX3hjaGdfaW5saW5lLmNcbmluZGV4IDdkZWYxNThkYTllYjcuLjEyMTVkNmVkZDU5MDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rcHRyX3hjaGdfaW5saW5lLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuY1xuQEAgLTE0LDcgKzE0LDggQEAgdm9pZCB0ZXN0X2twdHJfeGNoZ19pbmxpbmUodm9pZClcbiBcdGludCBlcnI7XG4gXG4gI2lmICEoZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKSB8fCBcXFxuLSAgICAgIChkZWZpbmVkKF9fcmlzY3YpIFx1MDAyNlx1MDAyNiBfX3Jpc2N2X3hsZW4gPT0gNjQpKVxuK1x0KGRlZmluZWQoX19yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkgfHwgXFxcbitcdChkZWZpbmVkKF9fbG9vbmdhcmNoX18pIFx1MDAyNlx1MDAyNiBfX2xvb25nYXJjaF9ncmxlbiA9PSA2NCkpXG4gXHR0ZXN0X19za2lwKCk7XG4gXHRyZXR1cm47XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2twdHJfeGNoZ19iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2twdHJfeGNoZ19iZW5jaC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzYzODgzMDczZTJjMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2twdHJfeGNoZ19iZW5jaC5jXG5AQCAtMCwwICsxLDQ5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKEMpIDIwMjYuIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZCAqL1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbisjZGVmaW5lIE1BWF9YQ0hHX0xPT1BTIDQwOTZcbitcbitzdHJ1Y3QgYmluX2RhdGEge1xuK1x0Y2hhciBibG9iWzMyXTtcbit9O1xuK1xuKyNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoXCIuYnNzLlwiICNuYW1lKSBfX2hpZGRlbiBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSlcbitcbitwcml2YXRlKGtwdHIpIHN0cnVjdCBiaW5fZGF0YSBfX2twdHIgKnB0cjtcbit1MzIgbnJfbG9vcHMgPSAyNTY7XG4rbG9uZyBoaXRzO1xuK1xuK1NFQyhcImZlbnRyeS9cIiBTWVNfUFJFRklYIFwic3lzX2dldHBnaWRcIilcbitpbnQgYmVuY2htYXJrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgYmluX2RhdGEgKm9sZDtcbitcdHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX1hDSEdfTE9PUFM7IGkrKykge1xuK1x0XHRpZiAoaSBcdTAwM2U9IG5yX2xvb3BzKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRvbGQgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnB0ciwgTlVMTCk7XG4rXHRcdGlmIChvbGQpXG4rXHRcdFx0YnBmX29ial9kcm9wKG9sZCk7XG4rXHR9XG4rXG4rXHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcdTAwMjZoaXRzLCBpKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIEJURiBGVU5DIHJlY29yZHMgYXJlIG5vdCBnZW5lcmF0ZWQgZm9yIGtmdW5jcyByZWZlcmVuY2VkIG9ubHkgdGhyb3VnaFxuKyAqIG9wdGltaXplZCBwYXRocy4gS2VlcCBicGZfb2JqX2Ryb3AoKSB2aXNpYmxlIHRvIGxpYmJwZidzIGtmdW5jIGxpbmtlci5cbisgKi9cbit2b2lkIF9fYnRmX3Jvb3Qodm9pZClcbit7XG4rXHRicGZfb2JqX2Ryb3AoTlVMTCk7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MzI6MjAuNzg2NjE0ODIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExNzU5MTU0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgYnBmX2twdHJfeGNoZ2AuIEl0IHNlZW1zIHRoZSBjaGFuZ2VzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGV5J3ZlIHVwZGF0ZWQgYGFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmNgIGFuZCBhZGRlZCBuZXcgaW5zdHJ1Y3Rpb25zIGxpa2UgYGFtYWRkZGJiYCwgYGFtYWRkZGJoYCwgZXRjLiwgaW4gYGFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2luc3QuaGAuIFRoZXkndmUgYWxzbyBpbmNsdWRlZCBhIGJlbmNobWFyayBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9rcHRyX3hjaGcuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3B0cl94Y2hnX2JlbmNoLmNgLCBhbmQgbW9kaWZpZWQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2twdHJfeGNoZ19pbmxpbmUuY2AgdG8gZW5hYmxlIHRoZSB0ZXN0IG9uIExvb25nQXJjaC5cblxuRGlnZ2luZyBpbnRvIHRoZSBgYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY2AgY2hhbmdlcywgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggaXMgcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCBhdG9taWMgaW5zdHJ1Y3Rpb25zIHdpdGggZG91YmxlLWJ5dGUgdmVyc2lvbnMsIHNvIGBhbWFkZGJgIGJlY29tZXMgYGFtYWRkZGJiYCwgZXRjLiwgYW5kIGFkZHMgYGRiYXIgREJBUl9MTFNDX01CYCBhdCB0aGUgZW5kIG9mIGBlbWl0X2F0b21pY19ybXdgLiBJdCdzIGFsc28gYWRkaW5nIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnKClgIHJldHVybmluZyBgdHJ1ZWAsIHdoaWNoIGlzIHdoYXQgSSdkIGV4cGVjdC4gU28sIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZW5oYW5jaW5nIHRoZSBCUEYgSklUIHN1cHBvcnQgZm9yIGF0b21pYyBvcGVyYXRpb25zIG9uIExvb25nQXJjaC5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlLCB0ZXN0aW5nIGl0IG5hdGl2ZWx5IG9uIExvb25nQXJjaCBoYXJkd2FyZSBvciBhbiBlbXVsYXRvciBpcyBhIG11c3QuIFRoZSBxdWVzdGlvbiBiZWNvbWVzIHdoZXRoZXIgaXQncyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgQlBGIEpJVCwgc28gZnV6emluZyBzaG91bGQgYmUgYSBnb29kIHN0cmF0ZWd5LiBTeXprYWxsZXIgc3VwcG9ydHMgTG9vbmdBcmNoLCByaWdodD8gSSByZWNhbGwgdGhlcmUgYmVpbmcgc29tZSBsZXZlbCBvZiBzdXBwb3J0LiBBc3N1bWluZyBTeXprYWxsZXIgaXMgY29uZmlndXJlZCBmb3IgTG9vbmdBcmNoLCBpdCBzaG91bGQgYmUgYWJsZSB0byBleGVyY2lzZSB0aGlzIGNvZGUuXG5cblJlZ2FyZGluZyB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZywgYGVtaXRfYXRvbWljX3Jtd2AgYW5kIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnYCBqdW1wIG91dCwgYnV0IGBlbWl0X2F0b21pY19ybXdgIGlzIGEgKnN0YXRpYyogZnVuY3Rpb24uIEdpdmVuIHRoZSBwcm9tcHQncyBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cywgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWFsIGVudHJ5IHBvaW50LiBUaGUgbW9yZSBnZW5lcmFsIGVudHJ5IHBvaW50IGZvciBCUEYgSklUIGNvbXBpbGF0aW9uIG9uIExvb25nQXJjaCB3aWxsIGxpa2VseSBiZSBgYnBmX2ludF9qaXRfY29tcGlsZWAsIHNvIEkgd2lsbCBjaGVjayB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTcxLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MzI6MzEuOTYyNTMyNTc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMjM0NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIxODY9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjIwMC1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIyMDE6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIyMDIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjozMi4wMDM3NjkzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3ODkwMDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEJQRiBKSVQgYW5kIExvb25nQXJjaCoqXG5cbkFscmlnaHQsIHNvIHRoZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb24sIHRoYXQncyB0aGUgb25lIHdlJ3JlIGRlYWxpbmcgd2l0aCwgdGhlIGVudHJ5IHBvaW50IGZvciBKSVQgY29tcGlsYXRpb24uIEdvdCBpdC4gQW5kIGhleSwgbG9va3MgbGlrZSB3ZSBoYXZlIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnYCBhcyB3ZWxsLCBhbmQgaXQncyBub3Qgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmb3IgcG90ZW50aWFsIGV4dGVybmFsIGFjY2VzcyBvciBwZXJoYXBzIGZvciBtb3JlIGZsZXhpYmxlIGludGVybmFsIHVzYWdlLlxuXG5Ob3csIHdoZXJlIGRvIHdlIHN0YW5kIHdpdGggS2NvbmZpZyBvcHRpb25zPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIEJQRiBKSVQgc3BlY2lmaWNhbGx5IG9uIExvb25nQXJjaC4gTGV0J3Mgc2VlIHdoYXQncyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgY29uZGl0aW9uYWxseSBjb21waWxlZC4gR290dGEgdW5kZXJzdGFuZCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIHdoYXQgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBiZWZvcmUgSSBjYW4gZGlnIGRlZXBlci4gVGhpcyBpcyBnb2luZyB0byBzZXQgdGhlIHN0YWdlIGZvciBob3cgbXVjaCBvZiB0aGlzIHdvcmsgaGFzIGJlZW4gZG9uZSBiZWZvcmUgYW5kIGhvdyBtdWNoIHRoZXJlIGlzIGZvciBtZSB0byB0aGluayB0aHJvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MzI6MzUuNzgyNjcyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk3NjU5MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjozNS44Mjc2NTYwM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODU4MjI5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBCUEZfSklUYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoaWRpbmcuIE15IGluaXRpYWwgaW5zdGluY3QsIGJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZSBhbmQgY29tbW9uIGtlcm5lbCBvcmdhbml6YXRpb25hbCBwYXR0ZXJucywgaXMgdG8gbG9vayBpbiB0aGUgc3RhbmRhcmQgcGxhY2VzLiBUeXBpY2FsbHksIHRoZXNlIHNvcnRzIG9mIHRoaW5ncyDigJMgdGhlIGVuYWJsaW5nIG9mIEpJVCBjb21waWxhdGlvbiBmb3IgQlBGIOKAkyBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIG1haW4ga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknZCBleHBlY3QgdG8gZmluZCBpdCBlaXRoZXIgd2l0aGluIHRoZSBjb3JlIGBpbml0L0tjb25maWdgIGZpbGUsIHJlZmxlY3RpbmcgaXRzIGZ1bmRhbWVudGFsIG5hdHVyZSwgb3IgcGVyaGFwcyB3aXRoaW4gYG5ldC9LY29uZmlnYCwgZ2l2ZW4gQlBGJ3Mgc3Ryb25nIGFzc29jaWF0aW9uIHdpdGggbmV0d29ya2luZy4gVGhlcmUncyBhbHdheXMgYSBjaGFuY2UgaXQncyBzcGVjaWZpYyB0byBhbiBhcmNoaXRlY3R1cmUsIHNvIEkgc2hvdWxkIGFsc28gY2hlY2sgYGFyY2gvbG9vbmdhcmNoL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSdzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZWZpbml0aW9uIG9yIGRlcGVuZGVuY3kgaW4gdGhlcmUuIEl04oCZcyBhbiBleHBsb3JhdG9yeSBwcm9jZXNzLiBLbm93aW5nIHRoZSBnZW5lcmFsIGxheW91dCBvZiB0aGUga2VybmVsIGNvbmZpZyBvcHRpb25zIHdpbGwgdXN1YWxseSB0ZWxsIG1lIGV4YWN0bHkgd2hlcmUgdG8gbG9vayFcblxuXG4iLCJJbnB1dFRva2VucyI6ODg4OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjMyOjM5LjQxMzQ4MTA2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk5NDg1MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjozOS40NTc0ODEwNzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAzNzI3MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqRXhhbWluaW5nIHRoZSBMb29uZ0FyY2ggS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBMb29uZ0FyY2gga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgYXJjaGl0ZWN0dXJlLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgb3ZlciB0byBgYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ2AgYW5kIHRha2UgYSBkZWVwIGRpdmUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBvcHRpb25zLCB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGFsbCB0aGUgdmFyaW91cyBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc2V0dGluZ3MsIGJvYXJkLXNwZWNpZmljIG9wdGlvbnMgaWYgdGhleSdyZSByZWxldmFudCwgYW5kIGhvdyB0aGluZ3MgdGllIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0J3MgdGltZSB0byBidWlsZCBhIHNvbGlkIG1lbnRhbCBtb2RlbCBvZiB0aGUgTG9vbmdBcmNoIGNvbmZpZ3VyYXRpb24gc3BhY2UuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxOTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjo0Mi44NjEyMTAwNzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjI5NzkxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0JQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjo0Mi45MDU0NDYzNzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1NDUyODIwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN1cHBvcnQgaW4gdGhlIExvb25nQXJjaCBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIEJQRiBpcyBlbmFibGVkIG9yIGNvbmZpZ3VyYWJsZSBmb3IgdGhlIExvb25nQXJjaCBhcmNoaXRlY3R1cmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSwgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlLiBUaGF0IHdvdWxkIGJlIGBhcmNoL2xvb25nYXJjaC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBhbGwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGluY2x1ZGluZyB0aG9zZSByZWxhdGVkIHRvIGZlYXR1cmVzIGxpa2UgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSwgc2hvdWxkIGJlIGRlZmluZWQgb3IgYXQgbGVhc3QgcmVmZXJlbmNlZC4gSSB3aWxsIG5vdyBvcGVuIHRoYXQgZmlsZSBhbmQgbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBCUEYgZnVuY3Rpb25hbGl0eS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGRpcmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbiAoYENPTkZJR19CUEY9eS9uL21gKSBvciBtYXliZSBhIGRlcGVuZGVuY3kgY2hlY2sgdGhhdCBpcyBzcGVjaWZpYyB0byBMb29uZ0FyY2guIE15IGpvYiBub3cgaXMgdG8gZGV0ZXJtaW5lIGlmIEJQRiBzdXBwb3J0IGV4aXN0cywgYW5kIGlmIHNvLCBob3cgaXQgaXMgbWFuYWdlZCB3aXRoaW4gdGhlIExvb25nQXJjaCBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMjo0Ny40NTk5NzY0MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODE1MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2xvb25nYXJjaC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTc5LVxcdHNlbGVjdCBBUkNIX1VTRV9RVUVVRURfU1BJTkxPQ0tTXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo4MDpcXHRzZWxlY3QgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCBpZiBIQVZFX0VCUEZfSklUXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy04MS1cXHRzZWxlY3QgQVJDSF9XQU5UX0RFRkFVTFRfVE9QRE9XTl9NTUFQX0xBWU9VVFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xNDMtXFx0c2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzoxNDQ6XFx0c2VsZWN0IEhBVkVfRUJQRl9KSVQgaWYgNjRCSVRcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0NS1cXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpZiAhQVJDSF9TVFJJQ1RfQUxJR05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MzI6NDcuNTAxNzkzMzA4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDA1MjcyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEpJVCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhhdCB0aGUgYEJQRl9KSVRgIG9wdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBgSEFWRV9FQlBGX0pJVGAgaXMgY2hvc2VuLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IEkgYWxzbyBuZWVkIGBCUEZfU1lTQ0FMTGAgZW5hYmxlZCBhcyB3ZWxsLiBUaGF0J3MgYSBrZXkgZGVwZW5kZW5jeS5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBlbnRyeSBwb2ludHMgb3IgZnVuY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBzZWUgYGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGdgIGlzIGluIHBsYXkuIEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGBicGZfaW50X2ppdF9jb21waWxlYC4gSSdsbCBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC5cblxuVGltZSB0byBkaXZlIGEgYml0IGRlZXBlci4gSSBzaG91bGQgY2hlY2sgYGFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmNgIHRvIHNlZSBpZiBJJ20gbWlzc2luZyBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgb2Ygbm90ZS4gTmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhbnl0aGluZyBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODc3LCJPdXRwdXRUb2tlbnMiOjcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjMyOjUyLjc0MjMyMjMxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NzQ0NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9Mjc5PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTI4My1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjI4NDpib29sIGJwZl9qaXRfc3VwcG9ydHNfa2Z1bmNfY2FsbCh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjg1LXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjg4LVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6Mjg5OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19mYXJfa2Z1bmNfY2FsbCh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjkwLXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9NjMzPXN0YXRpYyBib29sIGlzX3NpZ25lZF9icGZfY29uZCh1OCBjb25kKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy02NDItXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzo2NDM6Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTY0NC1cXHRcXHQgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTE1Nzg9dm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNTkwLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTU5MTppbnQgYnBmX2FyY2hfdGV4dF9wb2tlKHZvaWQgKmlwLCBlbnVtIGJwZl90ZXh0X3Bva2VfdHlwZSBvbGRfdCxcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE1OTItXFx0XFx0ICAgICAgIGVudW0gYnBmX3RleHRfcG9rZV90eXBlIG5ld190LCB2b2lkICpvbGRfYWRkcixcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTY0My1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE2NDQ6aW50IGJwZl9hcmNoX3RleHRfaW52YWxpZGF0ZSh2b2lkICpkc3QsIHNpemVfdCBsZW4pXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNjQ1LXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MTc5NT12b2lkICphcmNoX2FsbG9jX2JwZl90cmFtcG9saW5lKHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNzk5LVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTgwMDp2b2lkIGFyY2hfZnJlZV9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xODAxLXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTgwNC1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE4MDU6aW50IGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xODA2LXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MTg0MT1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTQ3LVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MjE0ODppbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxNDktXFx0XFx0XFx0XFx0dm9pZCAqcm9faW1hZ2VfZW5kLCBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxODUtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTg2OmludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTg3LVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIyMDE9c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM1NC1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIzNTU6dm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM1Ni17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzNzgtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMzc5OmJvb2wgYnBmX2ppdF9ieXBhc3Nfc3BlY192MSh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM4MC17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzODMtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMzg0OmJvb2wgYnBmX2ppdF9ieXBhc3Nfc3BlY192NCh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM4NS17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzODgtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMzg5OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYSh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM5MC17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzOTMtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMzk0OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjM5NS17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIzOTgtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMzk5OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZyh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjQwMC17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTI0MDQtLyogSW5kaWNhdGUgdGhlIEpJVCBiYWNrZW5kIHN1cHBvcnRzIG1peGluZyBicGYyYnBmIGFuZCB0YWlsY2FsbHMuICovXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyNDA1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdWJwcm9nX3RhaWxjYWxscyh2b2lkKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjQwNi17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTI0MDktXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyNDEwOmJvb2wgYnBmX2ppdF9pbmxpbmVzX2hlbHBlcl9jYWxsKHMzMiBpbW0pXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yNDExLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MzI6NTIuODQ3MDY5MjQ4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMTkwODEyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoaXMgTG9vbmdBcmNoIEJQRiBKSVQgcGF0Y2guIEZyb20gd2hhdCBJIHNlZSwgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgb3IgYWRkZWQgYXJlIGBicGZfaml0X3N1cHBvcnRzX3B0cl94Y2hnYCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiAgSG9sZCBvbiwgYGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGdgIGlzIGp1c3QgYSBzaW1wbGUgYm9vbGVhbiByZXR1cm4g4oCTIG5vdCBtdWNoIHRvIGRpZyBpbnRvIHRoZXJlLiAgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGxvb2tzIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnQsIHRoZSByZWFsIGhlYXJ0IG9mIHRoZXNlIGNoYW5nZXMuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gY29uY2VudHJhdGUuXG5cbk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgc2VlIHRoYXQgYGVtaXRfYXRvbWljX3Jtd2AgaXMgYWxzbyB0b3VjaGVkLCBhbmQgdGhhdCdzIGNhbGxlZCBieSBgYnVpbGRfaW5zbmAsIHdoaWNoIGlzIGNhbGxlZCBieSBgYnVpbGRfYm9keWAsIHdoaWNoIGlzIGluIHR1cm4gY2FsbGVkIGJ5IGBicGZfaW50X2ppdF9jb21waWxlYC4gQ29uZmlybWVkLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgc3ltYm9sIHRvIGhvbmUgaW4gb24uXG5cbk5leHQgdXAsIHRoZSBjb25maWd1cmF0aW9uLiAgTG9va3MgbGlrZSBgQlBGX0pJVGAgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIG1hbmRhdG9yeSBmb3IgdGhpcyB0byB3b3JrLiAgVGhhdCdzIHN0YW5kYXJkLCBhbmQgZWFzeSBlbm91Z2ggdG8gdmVyaWZ5LlxuXG5Ob3csIGEgcXVpY2sgcHJhY3RpY2FsIGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byBjb25maXJtIGlmIEkgY2FuIGFjdHVhbGx5IHRlc3QgdGhpcy4gIENhbiBJIHJlYWNoIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBpbiBRRU1VPyBZZXMsIGxvb2tzIGxpa2UgUUVNVSBzdXBwb3J0cyBMb29uZ0FyY2g2NCBlbXVsYXRpb24sIGFuZCBzeXprYWxsZXIgY2FuIHJ1biBpdC4gVGhhdCdzIGEgZ29vZCBzaWduLiAgVGhlIGNoYW5nZXMgc2VlbSBmdW5jdGlvbmFsIGFuZCBkaXJlY3RseSB3aXRoaW4gdGhlIGNvcmUga2VybmVsIChCUEYgSklUKS4gIFRoZXJlZm9yZSwgV29ydGhGdXp6aW5nPXRydWUuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhdG9taWMgaW5zdHJ1Y3Rpb24gc3VwcG9ydCBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgY29tcGlsZXIsIGluY2x1ZGluZyBhIGJlbmNobWFyayBmb3IgYGJwZl9rcHRyX3hjaGdgLiAgVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bmN0aW9uYWwsIGFuZCBJIGNhbiB0ZXN0IGl0IGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIHRoZXNlIGF0b21pYyBvcGVyYXRpb25zIG9uIGEgTG9vbmdBcmNoIHN5c3RlbS5cblxuKipDb25maWdzOioqXG5cbiogICBgQlBGX0pJVGBcbiogICBgQlBGX1NZU0NBTExgXG5cbioqRm9jdXNTeW1ib2w6KipcblxuKiAgIGBicGZfaW50X2ppdF9jb21waWxlYFxuXG5BbmQgSSB3aWxsIGRvIGEgcXVpY2sgY2hlY2sgb24gdGhhdCBmdW5jdGlvbiBpbiBgYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuY2AgdG8gc2VlIHRoZSBkZXRhaWxzIG9mIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA1MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMzowMC44NjYxNTE5MjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTg2NDM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0yMTg2PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIyMDAtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMjAxOnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMjAyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MzM6MDEuMDM2MDE5MjYyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTIzODI3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGluIEVtdWxhdGVkIExvb25nQXJjaCBFbnZpcm9ubWVudHMqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyBjb3JyZWN0OiBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgaW5kZWVkIHRoZSBmdW5jdGlvbiB0byBjb25zaWRlci4gSG93ZXZlciwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgY2FsbHMgb3V0IGNvZGUgcGF0aHMgdGhhdCBhcmUgKnVucmVhY2hhYmxlKiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgcGFydGljdWxhcmx5IHdoZW4gdXNpbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIEJ1dCB3YWl0LCBMb29uZ0FyY2ggKmlzKiBlbXVsYXRhYmxlIGluIFFFTVUsIGFuZCBTeXprYWxsZXIgZXZlbiBzdXBwb3J0cyBhIExvb25nQXJjaCB0YXJnZXQuIFRoYXQgY2hhbmdlcyB0aGluZ3MuIFRoaXMgcGF0aCAqaXMqIHJlYWNoYWJsZS5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIHRoaW5rIGFib3V0IHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucy4gV2UgZGVmaW5pdGVseSBuZWVkIGBCUEZfU1lTQ0FMTGAgZm9yIEJQRiB0byBmdW5jdGlvbiwgYW5kIGBCUEZfSklUYCBmb3IgdGhlIEpJVCBjb21waWxlciBpdHNlbGYuIEFyZSB0aGVyZSBhbnkgTG9vbmdBcmNoLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG5lZWQgY29uc2lkZXJhdGlvbj8gVGhlIGFyY2hpdGVjdHVyZSBpdHNlbGYgaXMgYExPT05HQVJDSGAsIGJ1dCB0aGF0J3MgdGhlIGFyY2hpdGVjdHVyZSBpZGVudGlmaWVyLiBXZSdyZSBjb25jZXJuZWQgd2l0aCBmZWF0dXJlcywgc28gdGhlIGFyY2hpdGVjdHVyZSBjb25maWcgaXRzZWxmIGlzIG5vdCB3aGF0IHdlJ3JlIGFmdGVyLlxuXG5GaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjazogQ2FuIHdlIGFjdHVhbGx5ICpmb2N1cyogb24gYGJwZl9rcHRyX3hjaGdgIHdpdGhpbiB0aGlzIGNvbnRleHQ/IFRoYXQncyBhIEJQRiBoZWxwZXIva2Z1bmMsIHJpZ2h0PyBTbywgaXMgaXQgYWN0dWFsbHkgZGVmaW5lZCBhbmQgYXZhaWxhYmxlIHdpdGhpbiB0aGUga2VybmVsPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbiBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjE1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjMzOjA2LjE4ODQwMzg0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NTU1MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2twdHJfeGNoZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2ZpeHVwcy5jPTE0ODE9aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzEyLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjMxMzpcXHRcXHQvKiBJbXBsZW1lbnQgYnBmX2twdHJfeGNoZyBpbmxpbmUgKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMTQtXFx0XFx0aWYgKHByb2ctXFx1MDAzZWppdF9yZXF1ZXN0ZWQgXFx1MDAyNlxcdTAwMjYgQklUU19QRVJfTE9ORyA9PSA2NCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9MTcyNj12b2lkIGJwZl93cV9jYW5jZWxfYW5kX2ZyZWUodm9pZCAqdmFsKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTczMC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoxNzMxOkJQRl9DQUxMXzIoYnBmX2twdHJfeGNoZywgdm9pZCAqLCBkc3QsIHZvaWQgKiwgcHRyKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTE3MzIte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTczOC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoxNzM5Oi8qIFVubGlrZSBvdGhlciBQVFJfVE9fQlRGX0lEIGhlbHBlcnMgdGhlIGJ0Zl9pZCBpbiBicGZfa3B0cl94Y2hnKClcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzQwLSAqIGhlbHBlciBpcyBkZXRlcm1pbmVkIGR5bmFtaWNhbGx5IGJ5IHRoZSB2ZXJpZmllci4gVXNlIEJQRl9QVFJfUE9JU09OIHRvXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0xNzQyLSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjE3NDM6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfa3B0cl94Y2hnX3Byb3RvID0ge1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjE3NDQ6XFx0LmZ1bmMgICAgICAgICA9IGJwZl9rcHRyX3hjaGcsXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMTc0NS1cXHQuZ3BsX29ubHkgICAgID0gZmFsc2UsXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz0yMDY3PWJwZl9iYXNlX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yMTQ2LVxcdGNhc2UgQlBGX0ZVTkNfa3B0cl94Y2hnOlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjIxNDc6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfa3B0cl94Y2hnX3Byb3RvO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTIxNDgtXFx0Y2FzZSBCUEZfRlVOQ19mb3JfZWFjaF9tYXBfZWxlbTpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03MTY3PXN0YXRpYyBpbnQgcHJvY2Vzc19rcHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxODAtXFx0XFx0aWYgKCFtYXBfcHRyLVxcdTAwM2VidGYpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzE4MTpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1hcCAnJXMnIGhhcyB0byBoYXZlIEJURiBpbiBvcmRlciB0byB1c2UgYnBmX2twdHJfeGNoZ1xcXFxuXFxcIixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzE4Mi1cXHRcXHRcXHRcXHRtYXBfcHRyLVxcdTAwM2VuYW1lKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03ODMzPXN0YXRpYyBpbnQgY2hlY2tfcmVnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODY2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3ODY3OlxcdC8qIExvY2FsIGtwdHIgdHlwZXMgYXJlIGFsbG93ZWQgYXMgdGhlIHNvdXJjZSBhcmd1bWVudCBvZiBicGZfa3B0cl94Y2hnICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4NjgtXFx0aWYgKG1ldGEtXFx1MDAzZWZ1bmNfaWQgPT0gQlBGX0ZVTkNfa3B0cl94Y2hnIFxcdTAwMjZcXHUwMDI2IHR5cGVfaXNfYWxsb2ModHlwZSkgXFx1MDAyNlxcdTAwMjYgcmVnX2Zyb21fYXJnbm8oYXJnbm8pID09IEJQRl9SRUdfMikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMzowNi4yMzEyNjIxNjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODgyOTI3MzY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgdGhlIExvb25nQXJjaCBhcmNoaXRlY3R1cmUgYW5kIGl0cyBpbXBsaWNhdGlvbnMuIEl0J3MgY2xlYXIgZnJvbSB0aGUgZGVzY3JpcHRpb24gdGhhdCB0aGUgY29yZSBvZiB0aGlzIHdvcmsgcmV2b2x2ZXMgYXJvdW5kIGFkZGluZyBzdXBwb3J0IGZvciBgYnBmX2twdHJfeGNoZ2Agd2l0aGluIHRoZSBKdXN0LUluLVRpbWUgKEpJVCkgY29tcGlsZXIuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBpdCdzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gYXRvbWljIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBCUEYgY29udGV4dCwgd2hpY2ggY291bGQgb3BlbiB0aGUgZG9vciBmb3IgbW9yZSBjb21wbGV4IGFuZCBlZmZpY2llbnQgQlBGIHByb2dyYW1zLiBHaXZlbiB0aGF0IGZvY3VzLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdGhlIGtleSBzeW1ib2wgSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG9uIHdpdGhpbiB0aGUgSklUIGluZnJhc3RydWN0dXJlLlxuXG5UaGUgZXhpc3RlbmNlIG9mIGEgYmVuY2htYXJrIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2twdHJfeGNoZy5jYCBpcyBpbXBvcnRhbnQ7IGl0IHN1Z2dlc3RzIHdlIGhhdmUgYSB1c2VyLXNwYWNlIHRlc3RiZWQgdG8gZXZhbHVhdGUgdGhlIGVmZmVjdGl2ZW5lc3MgYW5kIHBlcmZvcm1hbmNlIG9mIHRoaXMgYXRvbWljIGltcGxlbWVudGF0aW9uLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byBzZXQgc29tZSBzcGVjaWZpYyBwYXJhbWV0ZXJzIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0LiBcIldvcnRoRnV6emluZzogdHJ1ZVwiIGlzIGEgbm8tYnJhaW5lci4gVGhlIGltcGxlbWVudGF0aW9uIG9mIGF0b21pYyBvcGVyYXRpb25zIGlzIGEgY3JpdGljYWwgYXJlYSwgc28gaXTigJlzIGxpa2VseSB0aGF0IGFueSBidWdzIG9yIGlzc3VlcyB3aWxsIHNob3cgdXAgcXVpY2tseS5cblxuXCJGb2N1c1N5bWJvbHM6IFtcXFwiYnBmX2ludF9qaXRfY29tcGlsZVxcXCJdXCIgaXMgbXkgd2F5IG9mIG5hcnJvd2luZyB0aGUgZnV6emluZyBzY29wZSB0byB0aGUgcmVsZXZhbnQgcG9ydGlvbiBvZiB0aGUgY29kZSBhbmQgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLlxuXG5BbmQgZmluYWxseSwgdG8gY29uZmlndXJlIHRoZSB0ZXN0IGFuZCBtYWtlIHN1cmUgdGhhdCB3ZSBnZXQgYWNjdXJhdGUgcmVzdWx0cywgSSdsbCBlbmFibGUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uczogXCJFbmFibGVDb25maWdzOiBbXFxcIkJQRl9KSVRcXFwiLCBcXFwiQlBGX1NZU0NBTExcXFwiXVwiLlxuXG5UaGlzIGlzIHRoZSByZWFzb25pbmcgSSdsbCBiYXNlIG15IGZ1enppbmc6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYXRvbWljIGluc3RydWN0aW9ucyBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgY29tcGlsZXIgYW5kIGVuYWJsZXMgdGhlIGJwZl9rcHRyX3hjaGcgaW5saW5lIHRlc3QuIFRoZSBCUEYgSklUIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSB0ZXN0ZWQgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgY29udGFpbmluZyB0aGVzZSBhdG9taWMgb3BlcmF0aW9ucy5cIiBUaGlzIGVzc2VudGlhbGx5IGJvaWxzIGRvd24gdG86IFwiQXRvbWljIG9wcyBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgYXJlIG5vdyBhIHRoaW5nOyBsZXQncyBwb2tlIGF0IHRoZW0hXCIgSSdtIG5vdyByZWFkeSB0byBzdGFydCBydW5uaW5nIHRoaXMgdGhyb3VnaCB0aGUgcGFjZXMgYW5kIHNlZSB3aGF0IHBvcHMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjYwLCJPdXRwdXRUb2tlbnMiOjExMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzozMzoxNS4wNjA1Mzc2MDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODAyNDE1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhdG9taWMgaW5zdHJ1Y3Rpb25zIGluIHRoZSBMb29uZ0FyY2ggQlBGIEpJVCBjb21waWxlciBhbmQgZW5hYmxlcyB0aGUgYnBmX2twdHJfeGNoZyBpbmxpbmUgdGVzdC4gVGhlIEJQRiBKSVQgbW9kaWZpY2F0aW9ucyBhcmUgZnVuY3Rpb25hbCBhbmQgY2FuIGJlIHRlc3RlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBjb250YWluaW5nIHRoZXNlIGF0b21pYyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYXRvbWljIGluc3RydWN0aW9ucyBpbiB0aGUgTG9vbmdBcmNoIEJQRiBKSVQgY29tcGlsZXIgYW5kIGVuYWJsZXMgdGhlIGJwZl9rcHRyX3hjaGcgaW5saW5lIHRlc3QuIFRoZSBCUEYgSklUIG1vZGlmaWNhdGlvbnMgYXJlIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSB0ZXN0ZWQgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgY29udGFpbmluZyB0aGVzZSBhdG9taWMgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow9vtb2[1] Phase: Succeeded StartedAt: 2026-07-30 07:33:25 +0000 UTC FinishedAt: 2026-07-30 07:33:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 07:33:25 +0000 UTC FinishedAt: 2026-07-30 07:33:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2] Phase: Succeeded StartedAt: 2026-07-30 07:33:25 +0000 UTC FinishedAt: 2026-07-30 08:22:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-30 07:33:25 +0000 UTC FinishedAt: 2026-07-30 08:22:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"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"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 07:33:25 +0000 UTC FinishedAt: 2026-07-30 07:33:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 07:33:25 +0000 UTC FinishedAt: 2026-07-30 07:33:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow9vtb2/series-workflow9vtb2-convert-artifact-4160296149/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 07:33:49 +0000 UTC FinishedAt: 2026-07-30 07:55:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 07:33:49 +0000 UTC FinishedAt: 2026-07-30 07:55:44 +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:*b9b28aed-d7b8-4eec-aef8-86575d4daca0,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-workflow9vtb2/series-workflow9vtb2-convert-artifact-4160296149/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": "e744c96c-9853-4274-a770-179b2bfd4242", "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-workflow9vtb2/series-workflow9vtb2-build-action-3254042427/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 07:33:49 +0000 UTC FinishedAt: 2026-07-30 07:55:32 +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:*b9b28aed-d7b8-4eec-aef8-86575d4daca0,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-workflow9vtb2/series-workflow9vtb2-convert-artifact-4160296149/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": "e744c96c-9853-4274-a770-179b2bfd4242", "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-workflow9vtb2/series-workflow9vtb2-build-action-3254042427/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 07:55:45 +0000 UTC FinishedAt: 2026-07-30 07:55:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 07:55:45 +0000 UTC FinishedAt: 2026-07-30 07:55:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 07:55:45 +0000 UTC FinishedAt: 2026-07-30 07:56:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 07:55:46 +0000 UTC FinishedAt: 2026-07-30 07:55:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow9vtb2/series-workflow9vtb2-convert-artifact-2971098800/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 07:56:00 +0000 UTC FinishedAt: 2026-07-30 07:58:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 07:56:00 +0000 UTC FinishedAt: 2026-07-30 07:58:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e744c96c-9853-4274-a770-179b2bfd4242,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-workflow9vtb2/series-workflow9vtb2-build-action-3254042427/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-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 07:58:24 +0000 UTC FinishedAt: 2026-07-30 07:58:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 07:58:24 +0000 UTC FinishedAt: 2026-07-30 07:58:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 07:58:24 +0000 UTC FinishedAt: 2026-07-30 08:19:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 07:58:24 +0000 UTC FinishedAt: 2026-07-30 08:19:10 +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:*b9b28aed-d7b8-4eec-aef8-86575d4daca0,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-workflow9vtb2/series-workflow9vtb2-convert-artifact-2971098800/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": "88c970ba-83c8-4e5f-85cc-e81d6715726b", "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-workflow9vtb2/series-workflow9vtb2-build-action-4236064940/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 07:58:24 +0000 UTC FinishedAt: 2026-07-30 08:19:00 +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:*b9b28aed-d7b8-4eec-aef8-86575d4daca0,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-workflow9vtb2/series-workflow9vtb2-convert-artifact-2971098800/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": "88c970ba-83c8-4e5f-85cc-e81d6715726b", "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-workflow9vtb2/series-workflow9vtb2-build-action-4236064940/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 08:19:10 +0000 UTC FinishedAt: 2026-07-30 08:19:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 08:19:10 +0000 UTC FinishedAt: 2026-07-30 08:19:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 08:19:10 +0000 UTC FinishedAt: 2026-07-30 08:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 08:19:10 +0000 UTC FinishedAt: 2026-07-30 08:21:18 +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:*88c970ba-83c8-4e5f-85cc-e81d6715726b,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-workflow9vtb2/series-workflow9vtb2-build-action-4236064940/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-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-30 08:21:28 +0000 UTC FinishedAt: 2026-07-30 08:22:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-30 08:21:28 +0000 UTC FinishedAt: 2026-07-30 08:22:46 +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"],"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:*e744c96c-9853-4274-a770-179b2bfd4242,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*88c970ba-83c8-4e5f-85cc-e81d6715726b,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-workflow9vtb2/series-workflow9vtb2-build-action-3254042427/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-workflow9vtb2/series-workflow9vtb2-build-action-4236064940/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 08:21:28 +0000 UTC FinishedAt: 2026-07-30 08:21:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 08:21:28 +0000 UTC FinishedAt: 2026-07-30 08:21:34 +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"],"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-workflow9vtb2/series-workflow9vtb2-convert-artifact-1557289/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 08:21:28 +0000 UTC FinishedAt: 2026-07-30 08:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 08:21:28 +0000 UTC FinishedAt: 2026-07-30 08:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 08:21:28 +0000 UTC FinishedAt: 2026-07-30 08:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-30 08:21:38 +0000 UTC FinishedAt: 2026-07-30 08:22:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9vtb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fc46aed51f6280801f43a2cf4b5060cc33b572f9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"dda6c35c-c2ae-417b-8b2b-e31f063388df","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-30 08:21:38 +0000 UTC FinishedAt: 2026-07-30 08:22:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e744c96c-9853-4274-a770-179b2bfd4242,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*88c970ba-83c8-4e5f-85cc-e81d6715726b,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-workflow9vtb2/series-workflow9vtb2-build-action-3254042427/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-workflow9vtb2/series-workflow9vtb2-build-action-4236064940/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-workflow9vtb2/series-workflow9vtb2-convert-artifact-1557289/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,}