Name: series-workfloww2pww Phase: Succeeded StartedAt: 2026-07-16 18:41:39 +0000 UTC FinishedAt: 2026-07-16 23:14:57 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[0] Phase: Succeeded StartedAt: 2026-07-16 18:41:39 +0000 UTC FinishedAt: 2026-07-16 19:06:38 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 18:41:39 +0000 UTC FinishedAt: 2026-07-16 19:06:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "ff685978-352c-44b6-9961-d6fdead9d01e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "apply_range_set_cb", "apply_range_clear_cb", "arena_map_mem_usage", "arena_alloc_pages", "arena_free_pages", "arena_vm_fault" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXBwbHlfcmFuZ2Vfc2V0X2NiJiMzNDssCiAgICAmIzM0O2FwcGx5X3JhbmdlX2NsZWFyX2NiJiMzNDssCiAgICAmIzM0O2FyZW5hX21hcF9tZW1fdXNhZ2UmIzM0OywKICAgICYjMzQ7YXJlbmFfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7YXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV92bV9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1lbW9yeSB1c2FnZSB0cmFja2luZyB0byBCUEYgYXJlbmFzIGJ5IG1haW50YWluaW5nIGEgY291bnQgb2YgcG9wdWxhdGVkIHBhZ2VzIChgbnJfcGFnZXNgKS4gSXQgbW9kaWZpZXMgdGhlIHBhZ2UgdGFibGUgY2FsbGJhY2tzIChgYXBwbHlfcmFuZ2Vfc2V0X2NiYCwgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCkgdG8gdXBkYXRlIHRoaXMgY291bnRlciBhbmQgZXhwb3NlcyBpdCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdGhlc2UgY2FsbGJhY2tzIGluIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV92bV9mYXVsdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBwYWdlIGNvdW50aW5nIGxvZ2ljIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJhY2VzIG9yIG1lbW9yeSBsZWFrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOTowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYyNzBlNWZkYjk0MDk4MjhiOGM5ZmUyOGNjZGZkYmUzNjgyZjVhMGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxOTowNTozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDgwYjdiOGE2OTQ0NjQ1Li5iYzM0NjAyMTE2MDQwMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNTUsOCAmIzQzOzU1LDEwIEBAIHN0cnVjdCBicGZfYXJlbmEge1xuIFx0c3RydWN0IHZtX3N0cnVjdCAqa2Vybl92bTtcbiBcdHN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7XG4gXHRzdHJ1Y3QgcmFuZ2VfdHJlZSBydDtcbi1cdC8qIHByb3RlY3RzIHJ0ICovXG4mIzQzO1x0LyogcHJvdGVjdHMgcnQgYW5kIG5yX3BhZ2VzICovXG4gXHRycXNwaW5sb2NrX3Qgc3BpbmxvY2s7XG4mIzQzO1x0LyogbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBwb3B1bGF0ZWQgaW4gdGhlIGFyZW5hICovXG4mIzQzO1x0dTY0IG5yX3BhZ2VzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCB2bWFfbGlzdDtcbiBcdC8qIHByb3RlY3RzIHZtYV9saXN0ICovXG4gXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbkBAIC0xNDMsMTQgJiM0MzsxNDUsMTQgQEAgc3RhdGljIGxvbmcgY29tcHV0ZV9wZ29mZihzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkcilcbiB9XG4gXG4gc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEge1xuJiM0MztcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xuIFx0c3RydWN0IHBhZ2UgKipwYWdlcztcbi1cdHN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7XG4gXHRpbnQgaTtcbiB9O1xuIFxuIHN0cnVjdCBjbGVhcl9yYW5nZV9kYXRhIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkICpmcmVlX3BhZ2VzO1xuLVx0c3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbkBAIC0xODAsNyAmIzQzOzE4Miw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiBcbiBcdFx0aWYgKHB0ZV9ub25lKG9sZCkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChXQVJOX09OX09OQ0UocHRlX3BhZ2Uob2xkKSAhPSBkLVx1MDAzZXNjcmF0Y2hfcGFnZSkpXG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC1cdTAwM2VhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpKVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdHB0ZXBfZ2V0X2FuZF9jbGVhcihcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUpO1xuIFx0XHRmbHVzaF90bGJfYmVmb3JlX3NldChhZGRyKTtcbkBAIC0xOTYsNiAmIzQzOzE5OCw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiBcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwdGV2YWwpO1xuICNlbmRpZlxuIFx0ZC1cdTAwM2VpJiM0MzsmIzQzOztcbiYjNDM7XHRkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzJiM0MzsmIzQzOztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMjcsMTAgJiM0MzsyMzAsMTEgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9jbGVhcl9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4gXHQgKiBzY3JhdGNoZXMgaXRzIFBURS4gQSBsYXRlciBicGZfYXJlbmFfZnJlZV9wYWdlcygpIG92ZXIgdGhhdCByYW5nZSB3YWxrc1xuIFx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxuIFx0ICovXG4tXHRpZiAocGFnZSA9PSBkLVx1MDAzZXNjcmF0Y2hfcGFnZSlcbiYjNDM7XHRpZiAocGFnZSA9PSBkLVx1MDAzZWFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRfX2xsaXN0X2FkZChcdTAwMjZwYWdlLVx1MDAzZXBjcF9sbGlzdCwgZC1cdTAwM2VmcmVlX3BhZ2VzKTtcbiYjNDM7XHRkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzLS07XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDEzLDcgJiM0Mzs0MTcsOSBAQCBzdGF0aWMgaW50IGFyZW5hX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFxuIHN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIHtcbi1cdHJldHVybiAwO1xuJiM0MztcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICh1NjQpUkVBRF9PTkNFKGFyZW5hLVx1MDAzZW5yX3BhZ2VzKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiB9XG4gXG4gc3RydWN0IHZtYV9saXN0IHtcbkBAIC01MDYsOCAmIzQzOzUxMiw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbiBcbi1cdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5wYWdlcyA9IFx1MDAyNnBhZ2UsIC5pID0gMCxcbi1cdFx0XHRcdFx0IC5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UgfTtcbiYjNDM7XHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG4gXHQvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqL1xuIFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG4gXHRpZiAocmV0KSB7XG5AQCAtNjk2LDggJiM0Mzs3MDEsOCBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudFxuIFx0XHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiYjNDM7XHRkYXRhLmFyZW5hID0gYXJlbmE7XG4gXHRkYXRhLnBhZ2VzID0gcGFnZXM7XG4tXHRkYXRhLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZTtcbiBcbiBcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfcGFnZXM7XG5AQCAtODczLDggJiM0Mzs4NzgsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxuIFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4gXG4gXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2ZnJlZV9wYWdlcyk7XG4mIzQzO1x0Y2RhdGEuYXJlbmEgPSBhcmVuYTtcbiBcdGNkYXRhLmZyZWVfcGFnZXMgPSBcdTAwMjZmcmVlX3BhZ2VzO1xuLVx0Y2RhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlO1xuIFx0LyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBzdHJ1Y3QgcGFnZXMgKi9cbiBcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwga2FkZHIsIHBhZ2VfY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdFx0ICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgXHUwMDI2Y2RhdGEpO1xuQEAgLTk4MSw4ICYjNDM7OTg2LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbiBcbiBcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZmcmVlX3BhZ2VzKTtcbiYjNDM7XHRjZGF0YS5hcmVuYSA9IGFyZW5hO1xuIFx0Y2RhdGEuZnJlZV9wYWdlcyA9IFx1MDAyNmZyZWVfcGFnZXM7XG4tXHRjZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2U7XG4gXHRhcmVuYV92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XG4gXHR1c2VyX3ZtX3N0YXJ0ID0gYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGFyZW5hKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmNcbmluZGV4IGQ5ODU3N2E2YmFiYzBlLi4xYWQ1ZDAzZDA3YWRiMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jXG5AQCAtMjIyLDcgJiM0MzsyMjIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3N0b3JlX3JlbGVhc2Uoc3RydWN0IGFyZW5hX2F0b21pY3MgKnNrZWwpXG4gXHRcdCAgXCYjMzQ7c3RvcmVfcmVsZWFzZTY0X3Jlc3VsdFwmIzM0Oyk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9hdG9taWNzKHZvaWQpXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfYXRvbWljcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsO1xuIFx0aW50IGVycjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXG5pbmRleCA0YjRhZGIzZjRiNzFlYi4uMDFmY2Y0OTY1ZWE0M2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmNcbkBAIC02Niw3ICYjNDM7NjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQodm9pZClcbiBcdGNsb3NlKG1hcF9mZCk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWUodm9pZClcbiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWUodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtvbmVfcGFzdF9lbmRcJiMzNDspKVxuIFx0XHR0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcbmluZGV4IGQ2OWZkMjQ2NWY1MzY3Li45MWNjZjA0MDI5ODA0MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jXG5AQCAtODEsNyAmIzQzOzgxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9odGFiX2FzbSh2b2lkKVxuIFx0YXJlbmFfaHRhYl9hc21fX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9odGFiKHZvaWQpXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfaHRhYih2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX2h0YWJfbGx2bVwmIzM0OykpXG4gXHRcdHRlc3RfYXJlbmFfaHRhYl9sbHZtKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jXG5pbmRleCA0ZjI4NjZhNjE1Y2U1Mi4uMjY0OGUwNmY1M2QwNzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuY1xuQEAgLTY4LDcgJiM0Mzs2OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfbGlzdF9hZGRfZGVsKGludCBjbnQsIGJvb2wgbm9uc2xlZXBhYmxlKVxuIFx0YXJlbmFfbGlzdF9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX2xpc3Qodm9pZClcbiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9saXN0KHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YXJlbmFfbGlzdF8xXCYjMzQ7KSlcbiBcdFx0dGVzdF9hcmVuYV9saXN0X2FkZF9kZWwoMSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTRjMmQxYTFkNjczY2Zcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jXG5AQCAtMCwwICYjNDM7MSwxMjIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdXNlci5oXHUwMDNlXG4mIzQzOyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YXJlbmFfbWVtX3VzYWdlLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogYXJlbmFfbWFwX21lbV91c2FnZSgpIGlzIHN1cmZhY2VkIHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgbWFwJiMzOTtzXG4mIzQzOyAqIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9mZGluZm8vXHUwMDNjZmRcdTAwM2UgXCYjMzQ7bWVtbG9jazpcJiMzNDsgbGluZSAodGhlIHNhbWUgdmFsdWUgYnBmdG9vbCBtYXAgc2hvd1xuJiM0MzsgKiBwcmludHMpLiBSZWFkIGl0IGRpcmVjdGx5IHNvIHRoZSB0ZXN0IGhhcyBubyBleHRlcm5hbCBkZXBlbmRlbmN5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGxvbmcgbWFwX21lbWxvY2soaW50IG1hcF9mZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgcGF0aFs2NF0sIGxpbmVbMTI4XTtcbiYjNDM7XHRsb25nIG1lbWxvY2sgPSAtMTtcbiYjNDM7XHRGSUxFICpmO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0Oy9wcm9jL3NlbGYvZmRpbmZvLyVkXCYjMzQ7LCBtYXBfZmQpO1xuJiM0MztcdGYgPSBmb3BlbihwYXRoLCBcJiMzNDtyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoZiwgXCYjMzQ7b3Blbl9mZGluZm9cJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7XG4mIzQzO1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwmIzM0O21lbWxvY2s6XFx0JWxkXCYjMzQ7LCBcdTAwMjZtZW1sb2NrKSA9PSAxKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0ZmNsb3NlKGYpO1xuJiM0MztcdEFTU0VSVF9ORVEobWVtbG9jaywgLTEsIFwmIzM0O3BhcnNlX21lbWxvY2tcJiMzNDspO1xuJiM0MztcdHJldHVybiBtZW1sb2NrO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ1bihzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4mIzQzO1x0aW50IGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBcdTAwMjZvcHRzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBuYW1lKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgbmFtZSkpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtX3VzYWdlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXJlbmFfbWVtX3VzYWdlICpza2VsO1xuJiM0MztcdGNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7XG4mIzQzO1x0Y2hhciAqYmFzZTtcbiYjNDM7XHRzaXplX3Qgc3o7XG4mIzQzO1x0aW50IGZkLCBpO1xuJiM0MztcbiYjNDM7XHRza2VsID0gYXJlbmFfbWVtX3VzYWdlX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O29wZW5fbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0ZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuYXJlbmEpO1xuJiM0MztcbiYjNDM7XHQvKiBGcmVzaCBhcmVuYTogbm8gZGF0YSBwYWdlcywgYW5kIHRoZSBzY3JhdGNoIHBhZ2UgaXMgbm90IGNvdW50ZWQuICovXG4mIzQzO1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXCYjMzQ7aW5pdGlhbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEJQRi1zaWRlIGFsbG9jYXRpb24gb2YgMTcgcGFnZXMuICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYWxsb2NfY250ID0gMTc7XG4mIzQzO1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmFsbG9jLCBcJiMzNDthbGxvY1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdFxuJiM0MztcdCAqIGlzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSksIG5vdCBhIG1pc2NvdW50IC0tIGZsYWcgaXQgZGlzdGluY3RseSBzbyBhXG4mIzQzO1x0ICogcmVkIENJIHJ1biBpcyBub3QgbWlzdGFrZW4gZm9yIGEgY291bnRpbmcgYnVnLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWJzcy1cdTAwM2VwdHIsIFwmIzM0O2FyZW5hX2FsbG9jX3BhZ2VzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDE3ICogcHMsIFwmIzM0O2FmdGVyX2FsbG9jXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogRnJlZSBhIHNpbmdsZSBwYWdlIChhcmVuYV9mcmVlX3BhZ2VzIHBhZ2VfY250PT0xIHBhdGgpLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAwO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfY250ID0gMTtcbiYjNDM7XHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXCYjMzQ7ZnJlZV9vbmVcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTYgKiBwcywgXCYjMzQ7YWZ0ZXJfZnJlZV9vbmVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBGcmVlIHRlbiBwYWdlcyBpbiBvbmUgY2FsbCAoYnVsayBwYXRoKTsgb25seSB0aGUgZnJlZWQgcGFnZXMgY291bnQuICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9ieXRlX29mZiA9IDEgKiBwcztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2NudCA9IDEwO1xuJiM0MztcdGlmIChydW4oc2tlbC1cdTAwM2Vwcm9ncy5mcmVlX3BhZ2VzLCBcJiMzNDtmcmVlX2J1bGtcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgNiAqIHBzLCBcJiMzNDthZnRlcl9mcmVlX2J1bGtcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBGcmVlIHRoZSByZW1haW5pbmcgc2l4IC1cdTAwM2UgYXJlbmEgZW1wdHkgYWdhaW4uICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9ieXRlX29mZiA9IDExICogcHM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9jbnQgPSA2O1xuJiM0MztcdGlmIChydW4oc2tlbC1cdTAwM2Vwcm9ncy5mcmVlX3BhZ2VzLCBcJiMzNDtmcmVlX3Jlc3RcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXCYjMzQ7YWZ0ZXJfZnJlZV9yZXN0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2VyLXNwYWNlIGZhdWx0LWluOiB0b3VjaGluZyB1bmFsbG9jYXRlZCBhcmVuYSBwYWdlcyBhbGxvY2F0ZXMgdGhlbVxuJiM0MztcdCAqIHRocm91Z2ggYXJlbmFfdm1fZmF1bHQoKS4gbGliYnBmIG1tYXAoKXMgdGhlIGFyZW5hIGF0IG1hcF9leHRyYSBkdXJpbmdcbiYjNDM7XHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoc2tlbC1cdTAwM2VtYXBzLmFyZW5hLCBcdTAwMjZzeik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJhc2UsIFwmIzM0O2FyZW5hX2Jhc2VcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgODsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRiYXNlW2kgKiBwc10gPSAxO1xuJiM0MztcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDggKiBwcywgXCYjMzQ7YWZ0ZXJfZmF1bHRpblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRnJlZSB0aGUgZmF1bHRlZC1pbiBwYWdlcyBmcm9tIEJQRi4gVGhleSBhcmUgbWFwcGVkIGludG8gdGhlIHVzZXIgdm1hXG4mIzQzO1x0ICogKGVsZXZhdGVkIHJlZmNvdW50KSwgc28gdGhpcyBhbHNvIGV4ZXJjaXNlcyB0aGUgemFwIHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHRyID0gYmFzZTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2J5dGVfb2ZmID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2NudCA9IDg7XG4mIzQzO1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFwmIzM0O2ZyZWVfZmF1bHRlZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAwLCBcJiMzNDthZnRlcl9mcmVlX2ZhdWx0ZWRcJiMzNDspO1xuJiM0MztvdXQ6XG4mIzQzO1x0YXJlbmFfbWVtX3VzYWdlX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suY1xuaW5kZXggYWNiOWQ1M2I1OTczM2YuLjU0NWIwNWQ3YTBhYTcyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXG5AQCAtMTAxLDcgJiM0MzsxMDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9ja19zaXplKGludCBzaXplKVxuIFx0cmV0dXJuO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfc3Bpbl9sb2NrKHZvaWQpXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfc3Bpbl9sb2NrKHZvaWQpXG4ge1xuIFx0cmVwZWF0ID0gMTAwMDtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX3NwaW5fbG9ja18xXCYjMzQ7KSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXG5pbmRleCBmODFhMGMwNjY1MDU5Ni4uMGMxYzZjYmZhMGYxOWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmNcbkBAIC0yMyw3ICYjNDM7MjMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3N0cih2b2lkKVxuIFx0YXJlbmFfc3Ryc2VhcmNoX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfc3Ryc2VhcmNoKHZvaWQpXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfc3Ryc2VhcmNoKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YXJlbmFfc3Ryc2VhcmNoXCYjMzQ7KSlcbiBcdFx0dGVzdF9hcmVuYV9zdHIoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xuaW5kZXggYmE1YTVhNTBmN2MwN2QuLmRmN2U0YjhkYzM5NDU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xuQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3BhcmFsbGVsX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW1cbiBcdHJ1bl9saWJhcmVuYV9wYXJhbGxlbF9maW5pKHNrZWwsIG5hbWUsIHByZWZpeGxlbik7XG4gfVxuIFxuLXZvaWQgdGVzdF9saWJhcmVuYSh2b2lkKVxuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2xpYmFyZW5hKHZvaWQpXG4ge1xuIFx0c3RydWN0IGFyZW5hX2FsbG9jX3Jlc2VydmVfYXJncyBhcmdzO1xuIFx0c3RydWN0IGxpYmFyZW5hICpza2VsO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xuaW5kZXggZjg5NzQwNWY3MDFkZDUuLjljMzFiMTdkYmYzOTFmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcbkBAIC04NSw3ICYjNDM7ODUsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdCh2b2lkKVxuICAqIFJ1biB0aGUgdGVzdCBkZXBlbmRpbmcgb24gd2hldGhlciBMTFZNIGNhbiBjb21waWxlIGFyZW5hIEFTQU5cbiAgKiBwcm9ncmFtcy5cbiAgKi9cbi12b2lkIHRlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcbiB7XG4gI2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxuIFx0cnVuX3Rlc3QoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTBkOWQ2YWM4NmY2YjNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuY1xuQEAgLTAsMCAmIzQzOzEsMzkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfYXJlbmFfY29tbW9uLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4mIzQzO1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMTAwMCk7IC8qIG51bWJlciBvZiBwYWdlcyAqL1xuJiM0MzsjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuJiM0MztcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDMyKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuJiM0MzsjZWxzZVxuJiM0MztcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuJiM0MzsjZW5kaWZcbiYjNDM7fSBhcmVuYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7dm9pZCBfX2FyZW5hICpwdHI7XG4mIzQzO2ludCBhbGxvY19jbnQ7XHRcdC8qIGluOiAgcGFnZXMgdG8gYWxsb2NhdGUgKi9cbiYjNDM7bG9uZyBmcmVlX2J5dGVfb2ZmO1x0LyogaW46ICBieXRlIG9mZnNldCB3aXRoaW4gcHRyIHRvIHN0YXJ0IGZyZWVpbmcgKi9cbiYjNDM7aW50IGZyZWVfY250O1x0XHQvKiBpbjogIHBhZ2VzIHRvIGZyZWUgKi9cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztpbnQgYWxsb2Modm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cHRyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCBhbGxvY19jbnQsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0cmV0dXJuIHB0ciA/IDAgOiAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IGZyZWVfcGFnZXModm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwdHIpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKGNoYXIgX19hcmVuYSAqKXB0ciAmIzQzOyBmcmVlX2J5dGVfb2ZmLCBmcmVlX2NudCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcHBseV9yYW5nZV9zZXRfY2ImIzM0OywKICAgICYjMzQ7YXBwbHlfcmFuZ2VfY2xlYXJfY2ImIzM0OywKICAgICYjMzQ7YXJlbmFfbWFwX21lbV91c2FnZSYjMzQ7LAogICAgJiMzNDthcmVuYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FyZW5hX3ZtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWVtb3J5IHVzYWdlIHRyYWNraW5nIHRvIEJQRiBhcmVuYXMgYnkgbWFpbnRhaW5pbmcgYSBjb3VudCBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApLiBJdCBtb2RpZmllcyB0aGUgcGFnZSB0YWJsZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byB1cGRhdGUgdGhpcyBjb3VudGVyIGFuZCBleHBvc2VzIGl0IHZpYSBgYXJlbmFfbWFwX21lbV91c2FnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB0aGVzZSBjYWxsYmFja3MgaW4gYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX3ZtX2ZhdWx0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHBhZ2UgY291bnRpbmcgbG9naWMgaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmFjZXMgb3IgbWVtb3J5IGxlYWtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MjcwZTVmZGI5NDA5ODI4YjhjOWZlMjhjY2RmZGJlMzY4MmY1YTBlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMTk6MDU6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmMKaW5kZXggODBiN2I4YTY5NDQ2NDUuLmJjMzQ2MDIxMTYwNDAxIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jCkBAIC01NSw4ICYjNDM7NTUsMTAgQEAgc3RydWN0IGJwZl9hcmVuYSB7CiAJc3RydWN0IHZtX3N0cnVjdCAqa2Vybl92bTsKIAlzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlOwogCXN0cnVjdCByYW5nZV90cmVlIHJ0OwotCS8qIHByb3RlY3RzIHJ0ICovCiYjNDM7CS8qIHByb3RlY3RzIHJ0IGFuZCBucl9wYWdlcyAqLwogCXJxc3BpbmxvY2tfdCBzcGlubG9jazsKJiM0MzsJLyogbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBwb3B1bGF0ZWQgaW4gdGhlIGFyZW5hICovCiYjNDM7CXU2NCBucl9wYWdlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHZtYV9saXN0OwogCS8qIHByb3RlY3RzIHZtYV9saXN0ICovCiAJc3RydWN0IG11dGV4IGxvY2s7CkBAIC0xNDMsMTQgJiM0MzsxNDUsMTQgQEAgc3RhdGljIGxvbmcgY29tcHV0ZV9wZ29mZihzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkcikKIH0KIAogc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgewomIzQzOwlzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTsKIAlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwotCXN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7CiAJaW50IGk7CiB9OwogCiBzdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7CiYjNDM7CXN0cnVjdCBicGZfYXJlbmEgKmFyZW5hOwogCXN0cnVjdCBsbGlzdF9oZWFkICpmcmVlX3BhZ2VzOwotCXN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7CiB9OwogCiBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpCkBAIC0xODAsNyAmIzQzOzE4Miw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSkKIAogCQlpZiAocHRlX25vbmUob2xkKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC0mZ3Q7c2NyYXRjaF9wYWdlKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UocHRlX3BhZ2Uob2xkKSAhPSBkLSZndDthcmVuYS0mZ3Q7c2NyYXRjaF9wYWdlKSkKIAkJCXJldHVybiAtRUJVU1k7CiAJCXB0ZXBfZ2V0X2FuZF9jbGVhcigmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSk7CiAJCWZsdXNoX3RsYl9iZWZvcmVfc2V0KGFkZHIpOwpAQCAtMTk2LDYgJiM0MzsxOTgsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpCiAJc2V0X3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgcHRldmFsKTsKICNlbmRpZgogCWQtJmd0O2kmIzQzOyYjNDM7OwomIzQzOwlkLSZndDthcmVuYS0mZ3Q7bnJfcGFnZXMmIzQzOyYjNDM7OwogCXJldHVybiAwOwogfQogCkBAIC0yMjcsMTAgJiM0MzsyMzAsMTEgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9jbGVhcl9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpCiAJICogc2NyYXRjaGVzIGl0cyBQVEUuIEEgbGF0ZXIgYnBmX2FyZW5hX2ZyZWVfcGFnZXMoKSBvdmVyIHRoYXQgcmFuZ2Ugd2Fsa3MKIAkgKiBoZXJlLiBXaXRob3V0IHRoZSBza2lwLCBzY3JhdGNoX3BhZ2Ugd291bGQgYmUgZnJlZWQuCiAJICovCi0JaWYgKHBhZ2UgPT0gZC0mZ3Q7c2NyYXRjaF9wYWdlKQomIzQzOwlpZiAocGFnZSA9PSBkLSZndDthcmVuYS0mZ3Q7c2NyYXRjaF9wYWdlKQogCQlyZXR1cm4gMDsKIAogCV9fbGxpc3RfYWRkKCZhbXA7cGFnZS0mZ3Q7cGNwX2xsaXN0LCBkLSZndDtmcmVlX3BhZ2VzKTsKJiM0MzsJZC0mZ3Q7YXJlbmEtJmd0O25yX3BhZ2VzLS07CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxMyw3ICYjNDM7NDE3LDkgQEAgc3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIAogc3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApCiB7Ci0JcmV0dXJuIDA7CiYjNDM7CXN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTsKJiM0MzsKJiM0MzsJcmV0dXJuICh1NjQpUkVBRF9PTkNFKGFyZW5hLSZndDtucl9wYWdlcykgJmx0OyZsdDsgUEFHRV9TSElGVDsKIH0KIAogc3RydWN0IHZtYV9saXN0IHsKQEAgLTUwNiw4ICYjNDM7NTEyLDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJaWYgKHJldCkKIAkJZ290byBvdXRfc2lnc2Vndl9tZW1jZzsKIAotCXN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5wYWdlcyA9ICZhbXA7cGFnZSwgLmkgPSAwLAotCQkJCQkgLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UgfTsKJiM0MzsJc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9ICZhbXA7cGFnZSwgLmkgPSAwIH07CiAJLyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi8KIAlyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgTlVNQV9OT19OT0RFLCAxLCAmYW1wO3BhZ2UpOwogCWlmIChyZXQpIHsKQEAgLTY5Niw4ICYjNDM7NzAxLDggQEAgc3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQKIAkJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKIAkJcmV0dXJuIDA7CiAJfQomIzQzOwlkYXRhLmFyZW5hID0gYXJlbmE7CiAJZGF0YS5wYWdlcyA9IHBhZ2VzOwotCWRhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtJmd0O3NjcmF0Y2hfcGFnZTsKIAogCWlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncykpCiAJCWdvdG8gb3V0X2ZyZWVfcGFnZXM7CkBAIC04NzMsOCAmIzQzOzg3OCw4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsCiAJcmFuZ2VfdHJlZV9zZXQoJmFtcDthcmVuYS0mZ3Q7cnQsIHBnb2ZmLCBwYWdlX2NudCk7CiAKIAlpbml0X2xsaXN0X2hlYWQoJmFtcDtmcmVlX3BhZ2VzKTsKJiM0MzsJY2RhdGEuYXJlbmEgPSBhcmVuYTsKIAljZGF0YS5mcmVlX3BhZ2VzID0gJmFtcDtmcmVlX3BhZ2VzOwotCWNkYXRhLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2U7CiAJLyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBzdHJ1Y3QgcGFnZXMgKi8KIAlhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKCZhbXA7aW5pdF9tbSwga2FkZHIsIHBhZ2VfY250ICZsdDsmbHQ7IFBBR0VfU0hJRlQsCiAJCQkJICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgJmFtcDtjZGF0YSk7CkBAIC05ODEsOCAmIzQzOzk4Niw4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlicGZfbWFwX21lbWNnX2VudGVyKCZhbXA7YXJlbmEtJmd0O21hcCwgJmFtcDtvbGRfbWVtY2csICZhbXA7bmV3X21lbWNnKTsKIAogCWluaXRfbGxpc3RfaGVhZCgmYW1wO2ZyZWVfcGFnZXMpOwomIzQzOwljZGF0YS5hcmVuYSA9IGFyZW5hOwogCWNkYXRhLmZyZWVfcGFnZXMgPSAmYW1wO2ZyZWVfcGFnZXM7Ci0JY2RhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtJmd0O3NjcmF0Y2hfcGFnZTsKIAlhcmVuYV92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7CiAJdXNlcl92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfdXNlcl92bV9zdGFydChhcmVuYSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuYwppbmRleCBkOTg1NzdhNmJhYmMwZS4uMWFkNWQwM2QwN2FkYjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmMKQEAgLTIyMiw3ICYjNDM7MjIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zdG9yZV9yZWxlYXNlKHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsKQogCQkgICYjMzQ7c3RvcmVfcmVsZWFzZTY0X3Jlc3VsdCYjMzQ7KTsKIH0KIAotdm9pZCB0ZXN0X2FyZW5hX2F0b21pY3Modm9pZCkKJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2F0b21pY3Modm9pZCkKIHsKIAlzdHJ1Y3QgYXJlbmFfYXRvbWljcyAqc2tlbDsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuYwppbmRleCA0YjRhZGIzZjRiNzFlYi4uMDFmY2Y0OTY1ZWE0M2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jCkBAIC02Niw3ICYjNDM7NjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQodm9pZCkKIAljbG9zZShtYXBfZmQpOwogfQogCi12b2lkIHRlc3RfYXJlbmFfZGlyZWN0X3ZhbHVlKHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWUodm9pZCkKIHsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O29uZV9wYXN0X2VuZCYjMzQ7KSkKIAkJdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmMKaW5kZXggZDY5ZmQyNDY1ZjUzNjcuLjkxY2NmMDQwMjk4MDQwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jCkBAIC04MSw3ICYjNDM7ODEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2h0YWJfYXNtKHZvaWQpCiAJYXJlbmFfaHRhYl9hc21fX2Rlc3Ryb3koc2tlbCk7CiB9CiAKLXZvaWQgdGVzdF9hcmVuYV9odGFiKHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9odGFiKHZvaWQpCiB7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthcmVuYV9odGFiX2xsdm0mIzM0OykpCiAJCXRlc3RfYXJlbmFfaHRhYl9sbHZtKCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmMKaW5kZXggNGYyODY2YTYxNWNlNTIuLjI2NDhlMDZmNTNkMDcwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jCkBAIC02OCw3ICYjNDM7NjgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbChpbnQgY250LCBib29sIG5vbnNsZWVwYWJsZSkKIAlhcmVuYV9saXN0X19kZXN0cm95KHNrZWwpOwogfQogCi12b2lkIHRlc3RfYXJlbmFfbGlzdCh2b2lkKQomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbGlzdCh2b2lkKQogewogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfbGlzdF8xJiMzNDspKQogCQl0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbCgxLCBmYWxzZSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNGMyZDFhMWQ2NzNjZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jCkBAIC0wLDAgJiM0MzsxLDEyMiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3VzZXIuaCZndDsKJiM0MzsjaWZuZGVmIFBBR0VfU0laRSAvKiBvbiBzb21lIGFyY2hzIGl0IGNvbWVzIGluIHN5cy91c2VyLmggKi8KJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2RlZmluZSBQQUdFX1NJWkUgZ2V0cGFnZXNpemUoKQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7YXJlbmFfbWVtX3VzYWdlLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBhcmVuYV9tYXBfbWVtX3VzYWdlKCkgaXMgc3VyZmFjZWQgdG8gdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBtYXAmIzM5O3MKJiM0MzsgKiAvcHJvYy8mbHQ7cGlkJmd0Oy9mZGluZm8vJmx0O2ZkJmd0OyAmIzM0O21lbWxvY2s6JiMzNDsgbGluZSAodGhlIHNhbWUgdmFsdWUgYnBmdG9vbCBtYXAgc2hvdwomIzQzOyAqIHByaW50cykuIFJlYWQgaXQgZGlyZWN0bHkgc28gdGhlIHRlc3QgaGFzIG5vIGV4dGVybmFsIGRlcGVuZGVuY3kuCiYjNDM7ICovCiYjNDM7c3RhdGljIGxvbmcgbWFwX21lbWxvY2soaW50IG1hcF9mZCkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF0sIGxpbmVbMTI4XTsKJiM0MzsJbG9uZyBtZW1sb2NrID0gLTE7CiYjNDM7CUZJTEUgKmY7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDsvcHJvYy9zZWxmL2ZkaW5mby8lZCYjMzQ7LCBtYXBfZmQpOwomIzQzOwlmID0gZm9wZW4ocGF0aCwgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoZiwgJiMzNDtvcGVuX2ZkaW5mbyYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKJiM0MzsJCWlmIChzc2NhbmYobGluZSwgJiMzNDttZW1sb2NrOlx0JWxkJiMzNDssICZhbXA7bWVtbG9jaykgPT0gMSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwlmY2xvc2UoZik7CiYjNDM7CUFTU0VSVF9ORVEobWVtbG9jaywgLTEsICYjMzQ7cGFyc2VfbWVtbG9jayYjMzQ7KTsKJiM0MzsJcmV0dXJuIG1lbWxvY2s7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnVuKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJaW50IGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCAmYW1wO29wdHMpOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsIG5hbWUpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgbmFtZSkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbV91c2FnZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGFyZW5hX21lbV91c2FnZSAqc2tlbDsKJiM0MzsJY29uc3QgbG9uZyBwcyA9IFBBR0VfU0laRTsKJiM0MzsJY2hhciAqYmFzZTsKJiM0MzsJc2l6ZV90IHN6OwomIzQzOwlpbnQgZmQsIGk7CiYjNDM7CiYjNDM7CXNrZWwgPSBhcmVuYV9tZW1fdXNhZ2VfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7b3Blbl9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlmZCA9IGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMuYXJlbmEpOwomIzQzOwomIzQzOwkvKiBGcmVzaCBhcmVuYTogbm8gZGF0YSBwYWdlcywgYW5kIHRoZSBzY3JhdGNoIHBhZ2UgaXMgbm90IGNvdW50ZWQuICovCiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsICYjMzQ7aW5pdGlhbCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogQlBGLXNpZGUgYWxsb2NhdGlvbiBvZiAxNyBwYWdlcy4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDthbGxvY19jbnQgPSAxNzsKJiM0MzsJaWYgKHJ1bihza2VsLSZndDtwcm9ncy5hbGxvYywgJiMzNDthbGxvYyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwkvKgomIzQzOwkgKiBBIE5VTEwgcHRyIG1lYW5zIGJwZl9hcmVuYV9hbGxvY19wYWdlcygpIGl0c2VsZiBmYWlsZWQgKGUuZy4gdGhlIGhvc3QKJiM0MzsJICogaXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlKSwgbm90IGEgbWlzY291bnQgLS0gZmxhZyBpdCBkaXN0aW5jdGx5IHNvIGEKJiM0MzsJICogcmVkIENJIHJ1biBpcyBub3QgbWlzdGFrZW4gZm9yIGEgY291bnRpbmcgYnVnLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtJmd0O2Jzcy0mZ3Q7cHRyLCAmIzM0O2FyZW5hX2FsbG9jX3BhZ2VzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDE3ICogcHMsICYjMzQ7YWZ0ZXJfYWxsb2MmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEZyZWUgYSBzaW5nbGUgcGFnZSAoYXJlbmFfZnJlZV9wYWdlcyBwYWdlX2NudD09MSBwYXRoKS4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2J5dGVfb2ZmID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2NudCA9IDE7CiYjNDM7CWlmIChydW4oc2tlbC0mZ3Q7cHJvZ3MuZnJlZV9wYWdlcywgJiMzNDtmcmVlX29uZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAxNiAqIHBzLCAmIzM0O2FmdGVyX2ZyZWVfb25lJiMzNDspOwomIzQzOwomIzQzOwkvKiBGcmVlIHRlbiBwYWdlcyBpbiBvbmUgY2FsbCAoYnVsayBwYXRoKTsgb25seSB0aGUgZnJlZWQgcGFnZXMgY291bnQuICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZnJlZV9ieXRlX29mZiA9IDEgKiBwczsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2NudCA9IDEwOwomIzQzOwlpZiAocnVuKHNrZWwtJmd0O3Byb2dzLmZyZWVfcGFnZXMsICYjMzQ7ZnJlZV9idWxrJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDYgKiBwcywgJiMzNDthZnRlcl9mcmVlX2J1bGsmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEZyZWUgdGhlIHJlbWFpbmluZyBzaXggLSZndDsgYXJlbmEgZW1wdHkgYWdhaW4uICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZnJlZV9ieXRlX29mZiA9IDExICogcHM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZnJlZV9jbnQgPSA2OwomIzQzOwlpZiAocnVuKHNrZWwtJmd0O3Byb2dzLmZyZWVfcGFnZXMsICYjMzQ7ZnJlZV9yZXN0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsICYjMzQ7YWZ0ZXJfZnJlZV9yZXN0JiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVc2VyLXNwYWNlIGZhdWx0LWluOiB0b3VjaGluZyB1bmFsbG9jYXRlZCBhcmVuYSBwYWdlcyBhbGxvY2F0ZXMgdGhlbQomIzQzOwkgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nCiYjNDM7CSAqIGxvYWQsIHNvIGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoKSBoYW5kcyBiYWNrIHRoYXQgYmFzZS4KJiM0MzsJICovCiYjNDM7CWJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKHNrZWwtJmd0O21hcHMuYXJlbmEsICZhbXA7c3opOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoYmFzZSwgJiMzNDthcmVuYV9iYXNlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyA4OyBpJiM0MzsmIzQzOykKJiM0MzsJCWJhc2VbaSAqIHBzXSA9IDE7CiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDggKiBwcywgJiMzNDthZnRlcl9mYXVsdGluJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGcmVlIHRoZSBmYXVsdGVkLWluIHBhZ2VzIGZyb20gQlBGLiBUaGV5IGFyZSBtYXBwZWQgaW50byB0aGUgdXNlciB2bWEKJiM0MzsJICogKGVsZXZhdGVkIHJlZmNvdW50KSwgc28gdGhpcyBhbHNvIGV4ZXJjaXNlcyB0aGUgemFwIHBhdGguCiYjNDM7CSAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O3B0ciA9IGJhc2U7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZnJlZV9ieXRlX29mZiA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZnJlZV9jbnQgPSA4OwomIzQzOwlpZiAocnVuKHNrZWwtJmd0O3Byb2dzLmZyZWVfcGFnZXMsICYjMzQ7ZnJlZV9mYXVsdGVkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsICYjMzQ7YWZ0ZXJfZnJlZV9mYXVsdGVkJiMzNDspOwomIzQzO291dDoKJiM0MzsJYXJlbmFfbWVtX3VzYWdlX19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmMKaW5kZXggYWNiOWQ1M2I1OTczM2YuLjU0NWIwNWQ3YTBhYTcyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suYwpAQCAtMTAxLDcgJiM0MzsxMDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9ja19zaXplKGludCBzaXplKQogCXJldHVybjsKIH0KIAotdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKQomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfc3Bpbl9sb2NrKHZvaWQpCiB7CiAJcmVwZWF0ID0gMTAwMDsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2FyZW5hX3NwaW5fbG9ja18xJiMzNDspKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guYwppbmRleCBmODFhMGMwNjY1MDU5Ni4uMGMxYzZjYmZhMGYxOWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jCkBAIC0yMyw3ICYjNDM7MjMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3N0cih2b2lkKQogCWFyZW5hX3N0cnNlYXJjaF9fZGVzdHJveShza2VsKTsKIH0KIAotdm9pZCB0ZXN0X2FyZW5hX3N0cnNlYXJjaCh2b2lkKQomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfc3Ryc2VhcmNoKHZvaWQpCiB7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthcmVuYV9zdHJzZWFyY2gmIzM0OykpCiAJCXRlc3RfYXJlbmFfc3RyKCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYwppbmRleCBiYTVhNWE1MGY3YzA3ZC4uZGY3ZTRiOGRjMzk0NTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYwpAQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfcGFyYWxsZWxfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbQogCXJ1bl9saWJhcmVuYV9wYXJhbGxlbF9maW5pKHNrZWwsIG5hbWUsIHByZWZpeGxlbik7CiB9CiAKLXZvaWQgdGVzdF9saWJhcmVuYSh2b2lkKQomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfbGliYXJlbmEodm9pZCkKIHsKIAlzdHJ1Y3QgYXJlbmFfYWxsb2NfcmVzZXJ2ZV9hcmdzIGFyZ3M7CiAJc3RydWN0IGxpYmFyZW5hICpza2VsOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jCmluZGV4IGY4OTc0MDVmNzAxZGQ1Li45YzMxYjE3ZGJmMzkxZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYwpAQCAtODUsNyAmIzQzOzg1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZCkKICAqIFJ1biB0aGUgdGVzdCBkZXBlbmRpbmcgb24gd2hldGhlciBMTFZNIGNhbiBjb21waWxlIGFyZW5hIEFTQU4KICAqIHByb2dyYW1zLgogICovCi12b2lkIHRlc3RfbGliYXJlbmFfYXNhbih2b2lkKQomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfbGliYXJlbmFfYXNhbih2b2lkKQogewogI2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTgogCXJ1bl90ZXN0KCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjUwZDlkNmFjODZmNmIzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jCkBAIC0wLDAgJiM0MzsxLDM5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9hcmVuYV9jb21tb24uaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovCiYjNDM7I2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjQKJiM0MzsJX191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCAmbHQ7Jmx0OyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi8KJiM0MzsjZWxzZQomIzQzOwlfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsICZsdDsmbHQ7IDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwomIzQzOyNlbmRpZgomIzQzO30gYXJlbmEgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7dm9pZCBfX2FyZW5hICpwdHI7CiYjNDM7aW50IGFsbG9jX2NudDsJCS8qIGluOiAgcGFnZXMgdG8gYWxsb2NhdGUgKi8KJiM0Mztsb25nIGZyZWVfYnl0ZV9vZmY7CS8qIGluOiAgYnl0ZSBvZmZzZXQgd2l0aGluIHB0ciB0byBzdGFydCBmcmVlaW5nICovCiYjNDM7aW50IGZyZWVfY250OwkJLyogaW46ICBwYWdlcyB0byBmcmVlICovCiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBhbGxvYyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlwdHIgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgYWxsb2NfY250LCBOVU1BX05PX05PREUsIDApOwomIzQzOwlyZXR1cm4gcHRyID8gMCA6IDE7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQgZnJlZV9wYWdlcyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlpZiAoIXB0cikKJiM0MzsJCXJldHVybiAxOwomIzQzOwlicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAoY2hhciBfX2FyZW5hICopcHRyICYjNDM7IGZyZWVfYnl0ZV9vZmYsIGZyZWVfY250KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBpbnRyb2R1Y2luZyBhIG5ldyB0ZXN0LCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbCDigJMgaXMgdGhpcyBzb21ldGhpbmcgd29ydGggc2lua2luZyB0aW1lIGludG8/CgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIG1lbW9yeSB1c2FnZSB0cmFja2luZyB3aXRoaW4gdGhlIEJQRiBhcmVuYS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYG5yX3BhZ2VzYCB0byB0aGUgYHN0cnVjdCBicGZfYXJlbmFgIHRvIGtlZXAgdGFicyBvbiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBpbiB1c2UuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIGEgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBmb3IgYW55IG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBjYWxsYmFja3MgbGlrZSBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCAoaW5jcmVtZW50aW5nIGBucl9wYWdlc2ApLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgIChkZWNyZW1lbnRpbmcgaXQpLCBhbmQgdGhlIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCBmdW5jdGlvbi4gVGhlIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCBjaGFuZ2UgaXMganVzdCBncmFiYmluZyB0aGF0IHBhZ2UgY291bnQgYW5kIHNoaWZ0aW5nIGl0IGFwcHJvcHJpYXRlbHkuIFRoZSBjb2RlIGFsc28gYXBwZWFycyB0byBiZSByZWZhY3RvcmluZyBzb21lIHN0cnVjdHMgdG8gcGFzcyBgYXJlbmFgIHJhdGhlciB0aGFuIGp1c3QgdGhlIGBzY3JhdGNoX3BhZ2VgLgoKU28sIHRoZSBxdWVzdGlvbiBpcywgKmlzIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIHZ1bG5lcmFibGUgdG8gc29tZXRoaW5nIGxpa2UgYSBtZW1vcnkgY29ycnVwdGlvbj8qIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBCUEYsIHRoZSBhbnN3ZXIgaXMgYSBsaWtlbHkgeWVzLiBJdCBtb2RpZmllcyB0aGUgYXJlbmEgbG9naWMsIGFuZCB0aGUgYXJlbmEgaXRzZWxmIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBgQlBGX01BUF9UWVBFX0FSRU5BYCBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQg4oCTIGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLCBgYXJlbmFfbWFwX21lbV91c2FnZWAsIGBhcmVuYV92bV9mYXVsdGAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAg4oCTIGFyZSBhbGwgcHJpbWUgdGFyZ2V0cy4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgYXJlbmHigJlzIHN0YXRlLCBpbmNsdWRpbmcgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBwYWdlcyBhbmQgaGFuZGxpbmcgbWVtb3J5IGFjY2Vzcy4gQSBtaXNjYWxjdWxhdGlvbiBoZXJlIGNvdWxkIGxlYWQgdG8gc29tZSB2ZXJ5IGludGVyZXN0aW5nIG1lbW9yeSBpc3N1ZXMuIEkgc2hvdWxkIHB1bGwgdXAgYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGRpZyBpbi4gSXQmIzM5O3MgdGltZSB0byBmaW5kIGEgd2F5IHRvIGJyZWFrIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hX21hcF9tZW1fdXNhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jPTQxMj1zdGF0aWMgaW50IGFyZW5hX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00MTctXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDE4OnN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9hcmVuYS5jLTQxOS17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTYzNj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJlbmFfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjUwLVx0Lm1hcF9jaGVja19idGYgPSBhcmVuYV9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MTpcdC5tYXBfbWVtX3VzYWdlID0gYXJlbmFfbWFwX21lbV91c2FnZSxcbmtlcm5lbC9icGYvYXJlbmEuYy02NTItXHQubWFwX2J0Zl9pZCA9IFx1MDAyNmJwZl9hcmVuYV9tYXBfYnRmX2lkc1swXSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgVXNhZ2UgaW4gQXJlbmEgTWFwcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCB2YXJpYWJsZSBwbGF5cyBhIHJvbGUgd2l0aGluIHRoZSBgYXJlbmFfbWFwX29wc2Agc3RydWN0dXJlLiBUaGlzIGlzIHRoZSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdHJhY2UgaG93IHRoZSBtZW1vcnkgdXNhZ2UgZGF0YSBpcyBtYW5pcHVsYXRlZC4KClNwZWNpZmljYWxseSwgYG5yX3BhZ2VzYCBpcyB0aGUgdGFyZ2V0IHZhcmlhYmxlIGhlcmUuIEkgc2VlIHRoYXQgaXQmIzM5O3MgZ2V0dGluZyB1cGRhdGVkIHdpdGhpbiB0aGUgYGFwcGx5X3JhbmdlX3NldF9jYmAgYW5kIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAgY2FsbGJhY2sgZnVuY3Rpb25zLiBJbnRlcmVzdGluZy4gVGhvc2UgY2FsbGJhY2tzLCBpbiB0dXJuLCBhcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBgYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZWAgYW5kIGBhcHBseV90b19wYWdlX3JhbmdlYCBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdGhlIHdvcmtob3JzZXMgYXBwbHlpbmcgY2hhbmdlcyBvdmVyIGEgcmFuZ2Ugb2YgbWVtb3J5IHBhZ2VzLgoKTm93LCB0byBzb2xpZGlmeSBteSBjb21wcmVoZW5zaW9uLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB3aGF0IHRoZSBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCBhbmQgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGRvaW5nLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGVpciBpbXBsZW1lbnRhdGlvbiB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHBhZ2UgbWFuYWdlbWVudCBsb2dpYyBhbmQgaG93IHRoZXkmIzM5O3JlIGNvbnRyaWJ1dGluZyB0byB0aGUgYGFyZW5hX21hcF9tZW1fdXNhZ2VgIGZpZ3VyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGludHJpY2FjaWVzIG9mIGhvdyB0aGV5IGNoYW5nZSBgbnJfcGFnZXNgIGluIHRoZWlyIHJlc3BlY3RpdmUgc2V0IGFuZCBjbGVhciBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FwcGx5X3JhbmdlX3NldF9jYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJlbmEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9MTUzPXN0cnVjdCBjbGVhcl9yYW5nZV9kYXRhIHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTU3LVxua2VybmVsL2JwZi9hcmVuYS5jOjE1ODpzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTU5LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjU5PXN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yNjItXHRyZXR1cm4gYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpLFxua2VybmVsL2JwZi9hcmVuYS5jOjI2MzpcdFx0XHRcdCAgIFNaXzRHICYjNDM7IEdVQVJEX1NaIC8gMiwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBOVUxMKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjQtfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz00Nzk9c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUyMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo1MjM6XHRyZXQgPSBhcHBseV90b19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGthZGRyLCBQQUdFX1NJWkUsIGFwcGx5X3JhbmdlX3NldF9jYiwgXHUwMDI2ZGF0YSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI0LVx0aWYgKHJldCkge1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02NjQ9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03NDYtXHRcdFx0XHRcdCAga2Vybl92bV9zdGFydCAmIzQzOyB1YWRkcjMyICYjNDM7IChtYXBwZWQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxua2VybmVsL2JwZi9hcmVuYS5jOjc0NzpcdFx0XHRcdFx0ICB0aGlzX2JhdGNoIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBhcHBseV9yYW5nZV9zZXRfY2IsIFx1MDAyNmRhdGEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTc0OC1cdFx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMzMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEFyZW5hIE1lbW9yeSBUcmFja2luZzogQSBDbG9zZXIgTG9vayoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgbWVtb3J5IHVzYWdlIHRyYWNraW5nIGZvciBCUEYgYXJlbmFzLCB3aGljaCBpcyBhIHNlbnNpYmxlIGFkZGl0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCB1cGRhdGluZyBgbnJfcGFnZXNgIGFuZCByZXR1cm5pbmcgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gVGhpcyBpcyBmdW5jdGlvbmFsLCBidXQgdGhlIG1haW4gZ29hbCBpcyBtZW1vcnkgdHJhY2tpbmcuIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBvdmVybHkgY29tcGxleCBhdCBmaXJzdCBnbGFuY2UuCgpUaGUgY29kZSBjaGFuZ2VzIGFyZSBtb3N0bHkgYWJvdXQgcmVmYWN0b3Jpbmc6IHJlcGxhY2luZyBgc2NyYXRjaF9wYWdlYCB3aXRoIGBhcmVuYWAgaW4gYSBjb3VwbGUgb2YgZnVuY3Rpb25zLCBgYXBwbHlfcmFuZ2VfZGF0YWAgYW5kIGBjbGVhcl9yYW5nZV9kYXRhYC4gSXQgaW5jcmVtZW50cyBgbnJfcGFnZXNgIHdpdGhpbiBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCBhbmQgZGVjcmVtZW50cyBpdCB3aXRoaW4gYGFwcGx5X3JhbmdlX2NsZWFyX2NiYC4gTm90aGluZyB0b28gY3JhenksIGJ1dCB0aGlzIHRvdWNoZXMgY29yZSBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQuCgpHaXZlbiB0aGF0IHRoaXMgbW9kaWZpZXMgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIEl0JiMzOTtzIGEgZ29vZCB0YXJnZXQuIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSBzeW1ib2xzOiBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCwgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCwgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLCBgYXJlbmFfYWxsb2NfcGFnZXNgLCBhbmQgYGFyZW5hX2ZyZWVfcGFnZXNgLiBPaCwgYW5kIGBhcmVuYV92bV9mYXVsdGAgbWlnaHQgYWxzbyBiZSByZWxldmFudC4KCldhaXQsIGFyZSB0aG9zZSBjYWxsYmFjayBmdW5jdGlvbnMsIGBhcHBseV9yYW5nZV9zZXRfY2JgIGFuZCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLCBzdGF0aWM/IE9rYXksIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGVzZSBzdGF0aWMgY2FsbGJhY2tzIGFyZSByZWFjaGFibGUgZHVyaW5nIEJQRiBhcmVuYSBvcGVyYXRpb25zIGFuZCBpZiBJIGNhbiBlZmZlY3RpdmVseSB0YXJnZXQgdGhlbSB3aXRoIGZ1enppbmcuCgpHb29kLCB0aGV5ICphcmUqIGNhbGxlZCBkdXJpbmcgQlBGIGFyZW5hIG9wZXJhdGlvbnMuIEV4Y2VsbGVudC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYW55dGhpbmcgcmVsZXZhbnQgdG8gQlBGIGFyZW5hIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9BUkVOQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMDQ2PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgd2FzX2NsYXNzaWMpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTEwMC0jZGVmaW5lIEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSyAgIEdFTk1BU0soMjAsIDE2KVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTEwMTojZGVmaW5lIEJQRl9BUkVOQV9BQ0NFU1MgICAgICAgICAgIEJJVCgyMSlcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMDItI2RlZmluZSBCUEZfRklYVVBfUkVHX01BU0tcdEdFTk1BU0soMzEsIDI3KVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTExMDU9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTEwLVx0aW50IGFyZW5hX3JlZyA9IEZJRUxEX0dFVChCUEZfRklYVVBfQVJFTkFfUkVHX01BU0ssIGV4LVx1MDAzZWZpeHVwKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjExMTE6XHRib29sIGlzX2FyZW5hID0gISEoZXgtXHUwMDNlZml4dXAgXHUwMDI2IEJQRl9BUkVOQV9BQ0NFU1MpO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTExMi1cdGJvb2wgaXNfd3JpdGUgPSAoZHN0X3JlZyA9PSBET05UX0NMRUFSKTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMTI5PXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTg2LVx0aWYgKGlzX2FyZW5hKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTg3Olx0XHRleC1cdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfQUNDRVNTO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTE4OC1cdFx0Lypcbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC0xNi1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjE3OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTE4LSNpZm5kZWYgX19hcmVuYVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZT04NDQ9TElCQVJFTkFfQVNBTl9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hX2FzYW4uc2tlbC5oXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU6ODQ1OkNGTEFHUyAmIzQzOz0gLURIQVNfQlBGX0FSRU5BX0FTQU5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZS04NDYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlPTc5PWxpYmFyZW5hLmJwZi5vOiAkKExJQkFSRU5BX09CSkVDVFMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlLTg0LVx0JChjYWxsIG1zZyxDTE5HLUJQRixsaWJhcmVuYSwkQClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZTo4NTpcdCQoUSkkKENMQU5HKSAkKEJQRl9DRkxBR1MpICQoQVNBTl9GTEFHUykgLURCUEZfQVJFTkFfQVNBTiAkKEJQRl9UQVJHRVRfRU5ESUFOKSAtYyAkXHUwMDNjIC1vICRAXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUtODYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTM0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oOjM1OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC0zNi0jZGVmaW5lIF9fYXJlbmEgX19hdHRyaWJ1dGVfXygoYWRkcmVzc19zcGFjZSgxKSkpIF9fYXR0cmlidXRlX18oKGJ0Zl90eXBlX3RhZyhcJiMzNDthcmVuYVwmIzM0OykpKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaC0yLS8qIENvcHlyaWdodCAoYykgMjAyNSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaDozOiNpZm5kZWYgQlBGX0FSRU5BX1NQSU5fTE9DS19IXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmg6NDojZGVmaW5lIEJQRl9BUkVOQV9TUElOX0xPQ0tfSFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oLTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oPTUxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJlbmFfc3Bpbl91bmxvY2soYXJlbmFfc3BpbmxvY2tfdCBfX2FyZW5hICpsb2NrKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaC01NDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmg6NTQzOiNlbmRpZiAvKiBCUEZfQVJFTkFfU1BJTl9MT0NLX0ggKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9MTU9ZXh0ZXJuIHZvbGF0aWxlIGJvb2wgYXNhbl9yZXBvcnRfb25jZTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6MjY6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMjctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oPTg1PXN0YXRpYyB2b2lkICgqX19hc2FuX2J0Zl9hbmNob3JzW10pKGludHB0cl90KSA9IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtOTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6OTI6I2Vsc2UgLyogQlBGX0FSRU5BX0FTQU4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaC05My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9OTc9X193ZWFrIGJvb2wgYXNhbl9yZWFkeSh2b2lkKSB7IHJldHVybiB0cnVlOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtOTgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6OTk6I2VuZGlmIC8qIEJQRl9BUkVOQV9BU0FOICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMTAwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jPTExPWV4dGVybiBzdHJ1Y3QgYnVkZHkgX19hcmVuYSBidWRkeTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jLTEyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmM6MTM6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuYy0xNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9OD1lbnVtIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtODAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6ODE6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtODItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jPTQ4NT1fX3dlYWsgX19ub2FzYW4gaW50IGFzYW5faW5pdChzdHJ1Y3QgYXNhbl9pbml0X2FyZ3MgKmFyZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTU1MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzo1NTE6I2VuZGlmIC8qIEJQRl9BUkVOQV9BU0FOICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtNTUyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy00LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jOjU6I2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTYtI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2Vcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM9Mzc9c3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtODEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6ODI6I2VuZGlmIC8qIEhBU19CUEZfQVJFTkFfQVNBTiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTgzLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYz04OD12b2lkIHNlcmlhbF90ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy04OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6OTA6I2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTkxLVx0cnVuX3Rlc3QoKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jPTI2PWludCBhcmVuYV9odGFiX2xsdm0odm9pZCAqY3R4KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2h0YWIuYy0yNy17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jOjI4OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSB8fCBkZWZpbmVkKEJQRl9BUkVOQV9GT1JDRV9BU00pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jLTI5LVx0c3RydWN0IGh0YWIgX19hcmVuYSAqaHRhYjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYy0yLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9odGFiX2FzbS5jOjM6I2RlZmluZSBCUEZfQVJFTkFfRk9SQ0VfQVNNXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYy00LSNkZWZpbmUgYXJlbmFfaHRhYl9sbHZtIGFyZW5hX2h0YWJfYXNtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NTUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgQXJlbmEgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgYENPTkZJR19CUEZfQVJFTkFgIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGl0JiMzOTtzIG5vdCBhIHN0YW5kYWxvbmUgb3B0aW9uLiBJdCBzZWVtcyB0byBiZSBpbnRlcnR3aW5lZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgLCB3aGljaCBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFyZW5hIGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgYmVpbmcgY29tcGlsZWQuIE15IG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGFyZW5hLm9g4oCUdGhlIG9iamVjdCBmaWxlIHJlbGF0ZWQgdG8gdGhlIGFyZW5h4oCUaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFncywgYW5kIGlmIHNvLCB3aGF0IHRob3NlIGZsYWdzIGFyZS4gVGhhdCBNYWtlZmlsZSBzaG91bGQgcHJvdmlkZSB0aGUga2V5LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBkZXBlbmRlbmN5IGFuZCBhc2NlcnRhaW4gaXRzIHByZWNpc2UgcmVsYXRpb25zaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTgxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEFyZW5hIE1lbW9yeSBUcmFja2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHByaW1hcnkgZW5hYmxpbmcgY29uZmlndXJhdGlvbiBoZXJlIGlzIGBDT05GSUdfQlBGX1NZU0NBTExgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgaXQgYWxzbyByZXF1aXJlcyBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfNjRCSVRgLCB3aGljaCBpcyBleHBlY3RlZCBnaXZlbiB0aGUgbmF0dXJlIG9mIEJQRi4gVGhlIGNvZGUgaXMgdXNpbmcgYEJQRl9TWVNDQUxMYCBkaXJlY3RseS4gTWFrZXMgc2Vuc2UuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBga2VybmVsL2JwZi9hcmVuYS5jYCwgZm9jdXNpbmcgb24gdGhlIEJQRiBhcmVuYSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBpbnRyb2R1Y3Rpb24gb2YgbWVtb3J5IHVzYWdlIHRyYWNraW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLCBgYXJlbmFfbWFwX21lbV91c2FnZWAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV92bV9mYXVsdGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGFmZmVjdGVkLgoKTm93LCBhIHF1aWNrIGZvbGxvdy11cCB0aG91Z2h0Li4uIEkmIzM5O20gbm90aWNpbmcgdGhhdCBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCBhbmQgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCBhcmUgc3RhdGljIGNhbGxiYWNrcywgc28gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhleSYjMzk7cmUgaW5saW5lZC4gSWYgdGhleSBhcmUgaW5saW5lZCwgdGhhdCBjb3VsZCBtYWtlIHRoZW0gaGFyZGVyIGZvciBzeXprYWxsZXIgdG8gdGFyZ2V0IGRpcmVjdGx5LiBIb3dldmVyLCB0aGV5JiMzOTtyZSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGFwcGx5X3RvX3BhZ2VfcmFuZ2VgIGFuZCBgYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZWAsIHNvIGl0IGxvb2tzIGxpa2UgdGhleSB3b24mIzM5O3QgYmUgaW5saW5lZC4gVGhhdCYjMzk7cyBnb29kLiBgYXJlbmFfbWFwX21lbV91c2FnZWAgaXMgYSBjYWxsYmFjayB3aXRoaW4gYGJwZl9tYXBfb3BzYCwgc28gaXQmIzM5O3MgcHJvYmFibHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBtYXAgb3BlcmF0aW9ucy4gYGFyZW5hX2FsbG9jX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfcGFnZXNgIGFyZSBjYWxsZWQgYXMgQlBGIHByb2dyYW0gaGVscGVycywgd2hpY2ggSSBsaWtlIGJlY2F1c2UgSSBjYW4gY29udHJvbCB0aGVtIGZyb20gYSBCUEYgcHJvZ3JhbS4gRmluYWxseSwgYGFyZW5hX3ZtX2ZhdWx0YCBpcyBhIGB2bV9vcGVyYXRpb25zX3N0cnVjdGAgY2FsbGJhY2ssIHNvIGl0JiMzOTtzIHRpZWQgdG8gdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoYXQgYGFyZW5hX2FsbG9jX3BhZ2VzYCBpcyBpbmRlZWQgYSBoZWxwZXIuIEdvdHRhIGJlIGNlcnRhaW4gYWJvdXQgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfYWxsb2NfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jLTM5LSAqIGludG8ga2VybmVsIGFuZCB1c2VyIHZtYS5cbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xua2VybmVsL2JwZi9hcmVuYS5jLTQxLSAqIHdoaWNoIHdpbGwgaW5zZXJ0IGl0IGludG8ga2VybmVsIHZtX2FyZWEuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY1NT1zdGF0aWMgdTY0IGNsZWFyX2xvMzIodTY0IHZhbClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjYzLSAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjY2NDpzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY1LVx0XHRcdCAgICAgIGJvb2wgc2xlZXBhYmxlKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04NDM9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTkzMC0gKiBSZXNlcnZlIGFuIGFyZW5hIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB3aXRob3V0IHBvcHVsYXRpbmcgaXQuIFRoaXMgY2FsbCBzdG9wc1xua2VybmVsL2JwZi9hcmVuYS5jOjkzMTogKiBicGZfYXJlbmFfYWxsb2NfcGFnZXMgZnJvbSBhZGRpbmcgcGFnZXMgdG8gdGhpcyByYW5nZS5cbmtlcm5lbC9icGYvYXJlbmEuYy05MzItICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTEwNDE9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwNDItXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA0MzpfX2JwZl9rZnVuYyB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQ0LVx0XHRcdFx0XHRpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDUxLVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNTI6XHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgdHJ1ZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1My19XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1NC1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMDU1OnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1Ni1cdFx0XHRcdFx0ICBpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDYzLVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNjQ6XHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgZmFsc2UpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwNjUtfVxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2Nzp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2OC1cdFx0XHRcdCAgICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwNzUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3NjpcdHJldHVybiAodm9pZCAqKWFyZW5hX2FsbG9jX3BhZ2VzKGFyZW5hLCAobG9uZylhZGRyX19pZ24sIHBhZ2VfY250LCBub2RlX2lkLCB0cnVlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc3LX1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTExND1CVEZfS0ZVTkNTX1NUQVJUKGFyZW5hX2tmdW5jcylcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTE1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTExNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzQzCgkJCQkJCQlvdXRwdXQ6IDIyMwoJCQkJCQkJdGhvdWdodHM6IDQwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBNZW1vcnkgVXNhZ2UgUGF0Y2gqKgoKT2theSwgc28gYGJwZl9hcmVuYV9hbGxvY19wYWdlc2AgaXMgaW5kZWVkIGEga2Z1bmMsIGFzIGV4cGVjdGVkLiBUaGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIHNvbWUga2V5IG1vZGlmaWNhdGlvbnMgdG8gaG93IHRoZSBhcmVuYSBtZW1vcnkgaXMgbWFuYWdlZC4gSXQmIzM5O3MgY2hhbmdpbmcgYGFyZW5hX2FsbG9jX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfcGFnZXNgIHRvIHBhc3MgdGhlIGBhcmVuYWAgc3RydWN0dXJlIGluc3RlYWQgb2YgYHNjcmF0Y2hfcGFnZWAgdG8gYGFwcGx5X3JhbmdlX2RhdGFgIGFuZCBgY2xlYXJfcmFuZ2VfZGF0YWAuIEl0IGFsc28gaW50cm9kdWNlcyBgYXJlbmFfbWFwX21lbV91c2FnZWAsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHlvdSYjMzk7cmUgbG9va2luZyBhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIGluZm8gZm9yIHRoZSBtYXAuIEkgc2VlIGEgbmV3IHRlc3QsIGBhcmVuYV9tZW1fdXNhZ2UuY2AsIHRoYXQmIzM5O3MgZGVzaWduZWQgdG8gZXhlcmNpc2UgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZXNlIGNoYW5nZXMuCgpMZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzOgoKKiAgIGBhcHBseV9yYW5nZV9zZXRfY2JgCiogICBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgCiogICBgYXJlbmFfbWFwX21lbV91c2FnZWAKKiAgIGBhcmVuYV9hbGxvY19wYWdlc2AKKiAgIGBhcmVuYV9mcmVlX3BhZ2VzYAoqICAgYGFyZW5hX3ZtX2ZhdWx0YAoKTm93LCByZWdhcmRpbmcgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMuLi4gYEJQRl9TWVNDQUxMYCBpcyB0aGUgbWFpbiBvbmUuIEkgY2FuIGFzc3VtZSBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfNjRCSVRgIGFyZSBzdGFuZGFyZCBvbiBzeXprYWxsZXIgdGFyZ2V0cyAoZXNwZWNpYWxseSB4ODZcXzY0KSwgc28gZm9jdXNpbmcgb24gYEJQRl9TWVNDQUxMYCBpcyBzdWZmaWNpZW50LgoKSGVyZSYjMzk7cyBteSByZWFzb25pbmc6IFRoaXMgcGF0Y2ggaXMgaW5qZWN0aW5nIG1lbW9yeSB1c2FnZSB0cmFja2luZyBpbnRvIEJQRiBhcmVuYXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbWFpbnRhaW5pbmcgYSBjb3VudCBvZiBwb3B1bGF0ZWQgcGFnZXMgdmlhIGBucl9wYWdlc2AuIFRoZSB1cGRhdGUgaW52b2x2ZXMgbW9kaWZ5aW5nIHBhZ2UgdGFibGUgY2FsbGJhY2tzIChgYXBwbHlfcmFuZ2Vfc2V0X2NiYCwgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCkgdG8gdXBkYXRlIHRoaXMgY291bnRlci4gVGhlIG5ldyBgYXJlbmFfbWFwX21lbV91c2FnZWAgZnVuY3Rpb24gcHJvdmlkZXMgYSB3YXkgdG8gZXhwb3NlIHRoaXMgdXNhZ2UuIENoYW5nZXMgYWxzbyBmbG93IHRocm91Z2ggYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX3ZtX2ZhdWx0YC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBjb3JlIGFyZW5hIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGVyZWZvcmUsIGl0IGFic29sdXRlbHkgcmVxdWlyZXMgZnV6emluZy4gV2UgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGUgcGFnZSBjb3VudGluZyBsb2dpYyBpcyBzb3VuZCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByYWNlcywgbGVha3MsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSXQmIzM5O3MgdGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcHBseV9yYW5nZV9zZXRfY2ImIzM0OywKICAgICYjMzQ7YXBwbHlfcmFuZ2VfY2xlYXJfY2ImIzM0OywKICAgICYjMzQ7YXJlbmFfbWFwX21lbV91c2FnZSYjMzQ7LAogICAgJiMzNDthcmVuYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FyZW5hX3ZtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWVtb3J5IHVzYWdlIHRyYWNraW5nIHRvIEJQRiBhcmVuYXMgYnkgbWFpbnRhaW5pbmcgYSBjb3VudCBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApLiBJdCBtb2RpZmllcyB0aGUgcGFnZSB0YWJsZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byB1cGRhdGUgdGhpcyBjb3VudGVyIGFuZCBleHBvc2VzIGl0IHZpYSBgYXJlbmFfbWFwX21lbV91c2FnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB0aGVzZSBjYWxsYmFja3MgaW4gYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX3ZtX2ZhdWx0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHBhZ2UgY291bnRpbmcgbG9naWMgaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmFjZXMgb3IgbWVtb3J5IGxlYWtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FwcGx5X3JhbmdlX3NldF9jYiYjMzQ7LAogICAgJiMzNDthcHBseV9yYW5nZV9jbGVhcl9jYiYjMzQ7LAogICAgJiMzNDthcmVuYV9tYXBfbWVtX3VzYWdlJiMzNDssCiAgICAmIzM0O2FyZW5hX2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FyZW5hX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7YXJlbmFfdm1fZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcgdG8gQlBGIGFyZW5hcyBieSBtYWludGFpbmluZyBhIGNvdW50IG9mIHBvcHVsYXRlZCBwYWdlcyAoYG5yX3BhZ2VzYCkuIEl0IG1vZGlmaWVzIHRoZSBwYWdlIHRhYmxlIGNhbGxiYWNrcyAoYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmApIHRvIHVwZGF0ZSB0aGlzIGNvdW50ZXIgYW5kIGV4cG9zZXMgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHRoZXNlIGNhbGxiYWNrcyBpbiBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfdm1fZmF1bHRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGFyZW5hIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcGFnZSBjb3VudGluZyBsb2dpYyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByYWNlcyBvciBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNTo0MS4zODg2MDA3ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg5NzUxNTYyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFwcGx5X3JhbmdlX3NldF9jYlwiLFxuICAgIFwiYXBwbHlfcmFuZ2VfY2xlYXJfY2JcIixcbiAgICBcImFyZW5hX21hcF9tZW1fdXNhZ2VcIixcbiAgICBcImFyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJhcmVuYV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJhcmVuYV92bV9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWVtb3J5IHVzYWdlIHRyYWNraW5nIHRvIEJQRiBhcmVuYXMgYnkgbWFpbnRhaW5pbmcgYSBjb3VudCBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApLiBJdCBtb2RpZmllcyB0aGUgcGFnZSB0YWJsZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byB1cGRhdGUgdGhpcyBjb3VudGVyIGFuZCBleHBvc2VzIGl0IHZpYSBgYXJlbmFfbWFwX21lbV91c2FnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB0aGVzZSBjYWxsYmFja3MgaW4gYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX3ZtX2ZhdWx0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHBhZ2UgY291bnRpbmcgbG9naWMgaXMgcm9idXN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSByYWNlcyBvciBtZW1vcnkgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA1OjQxLjM4ODYwOTYyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MzcyMzk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYyNzBlNWZkYjk0MDk4MjhiOGM5ZmUyOGNjZGZkYmUzNjgyZjVhMGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTk6MDU6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jXFxuaW5kZXggODBiN2I4YTY5NDQ2NDUuLmJjMzQ2MDIxMTYwNDAxIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xcbkBAIC01NSw4ICs1NSwxMCBAQCBzdHJ1Y3QgYnBmX2FyZW5hIHtcXG4gXFx0c3RydWN0IHZtX3N0cnVjdCAqa2Vybl92bTtcXG4gXFx0c3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTtcXG4gXFx0c3RydWN0IHJhbmdlX3RyZWUgcnQ7XFxuLVxcdC8qIHByb3RlY3RzIHJ0ICovXFxuK1xcdC8qIHByb3RlY3RzIHJ0IGFuZCBucl9wYWdlcyAqL1xcbiBcXHRycXNwaW5sb2NrX3Qgc3BpbmxvY2s7XFxuK1xcdC8qIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgcG9wdWxhdGVkIGluIHRoZSBhcmVuYSAqL1xcbitcXHR1NjQgbnJfcGFnZXM7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgdm1hX2xpc3Q7XFxuIFxcdC8qIHByb3RlY3RzIHZtYV9saXN0ICovXFxuIFxcdHN0cnVjdCBtdXRleCBsb2NrO1xcbkBAIC0xNDMsMTQgKzE0NSwxNCBAQCBzdGF0aWMgbG9uZyBjb21wdXRlX3Bnb2ZmKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyKVxcbiB9XFxuIFxcbiBzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSB7XFxuK1xcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlO1xcbiBcXHRpbnQgaTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBjbGVhcl9yYW5nZV9kYXRhIHtcXG4rXFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7XFxuIFxcdHN0cnVjdCBsbGlzdF9oZWFkICpmcmVlX3BhZ2VzO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlO1xcbiB9O1xcbiBcXG4gc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbkBAIC0xODAsNyArMTgyLDcgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbiBcXG4gXFx0XFx0aWYgKHB0ZV9ub25lKG9sZCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC1cXHUwMDNlc2NyYXRjaF9wYWdlKSlcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXFx1MDAzZWFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXHRcXHRwdGVwX2dldF9hbmRfY2xlYXIoXFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSk7XFxuIFxcdFxcdGZsdXNoX3RsYl9iZWZvcmVfc2V0KGFkZHIpO1xcbkBAIC0xOTYsNiArMTk4LDcgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbiBcXHRzZXRfcHRlX2F0KFxcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHB0ZXZhbCk7XFxuICNlbmRpZlxcbiBcXHRkLVxcdTAwM2VpKys7XFxuK1xcdGQtXFx1MDAzZWFyZW5hLVxcdTAwM2Vucl9wYWdlcysrO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjI3LDEwICsyMzAsMTEgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9jbGVhcl9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuIFxcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXFxuIFxcdCAqIGhlcmUuIFdpdGhvdXQgdGhlIHNraXAsIHNjcmF0Y2hfcGFnZSB3b3VsZCBiZSBmcmVlZC5cXG4gXFx0ICovXFxuLVxcdGlmIChwYWdlID09IGQtXFx1MDAzZXNjcmF0Y2hfcGFnZSlcXG4rXFx0aWYgKHBhZ2UgPT0gZC1cXHUwMDNlYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRfX2xsaXN0X2FkZChcXHUwMDI2cGFnZS1cXHUwMDNlcGNwX2xsaXN0LCBkLVxcdTAwM2VmcmVlX3BhZ2VzKTtcXG4rXFx0ZC1cXHUwMDNlYXJlbmEtXFx1MDAzZW5yX3BhZ2VzLS07XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC00MTMsNyArNDE3LDkgQEAgc3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4gXFxuIHN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiB7XFxuLVxcdHJldHVybiAwO1xcbitcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxuK1xcbitcXHRyZXR1cm4gKHU2NClSRUFEX09OQ0UoYXJlbmEtXFx1MDAzZW5yX3BhZ2VzKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbiB9XFxuIFxcbiBzdHJ1Y3Qgdm1hX2xpc3Qge1xcbkBAIC01MDYsOCArNTEyLDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XFxuIFxcbi1cXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAucGFnZXMgPSBcXHUwMDI2cGFnZSwgLmkgPSAwLFxcbi1cXHRcXHRcXHRcXHRcXHQgLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UgfTtcXG4rXFx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFxcdTAwMjZwYWdlLCAuaSA9IDAgfTtcXG4gXFx0LyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi9cXG4gXFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXFx1MDAyNnBhZ2UpO1xcbiBcXHRpZiAocmV0KSB7XFxuQEAgLTY5Niw4ICs3MDEsOCBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudFxcbiBcXHRcXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbitcXHRkYXRhLmFyZW5hID0gYXJlbmE7XFxuIFxcdGRhdGEucGFnZXMgPSBwYWdlcztcXG4tXFx0ZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlO1xcbiBcXG4gXFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxcbiBcXHRcXHRnb3RvIG91dF9mcmVlX3BhZ2VzO1xcbkBAIC04NzMsOCArODc4LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCxcXG4gXFx0cmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcXG4gXFxuIFxcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2ZnJlZV9wYWdlcyk7XFxuK1xcdGNkYXRhLmFyZW5hID0gYXJlbmE7XFxuIFxcdGNkYXRhLmZyZWVfcGFnZXMgPSBcXHUwMDI2ZnJlZV9wYWdlcztcXG4tXFx0Y2RhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZTtcXG4gXFx0LyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBzdHJ1Y3QgcGFnZXMgKi9cXG4gXFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwga2FkZHIsIHBhZ2VfY250IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuIFxcdFxcdFxcdFxcdCAgICAgYXBwbHlfcmFuZ2VfY2xlYXJfY2IsIFxcdTAwMjZjZGF0YSk7XFxuQEAgLTk4MSw4ICs5ODYsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIFxcdTAwMjZvbGRfbWVtY2csIFxcdTAwMjZuZXdfbWVtY2cpO1xcbiBcXG4gXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZmcmVlX3BhZ2VzKTtcXG4rXFx0Y2RhdGEuYXJlbmEgPSBhcmVuYTtcXG4gXFx0Y2RhdGEuZnJlZV9wYWdlcyA9IFxcdTAwMjZmcmVlX3BhZ2VzO1xcbi1cXHRjZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlO1xcbiBcXHRhcmVuYV92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XFxuIFxcdHVzZXJfdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X3VzZXJfdm1fc3RhcnQoYXJlbmEpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jXFxuaW5kZXggZDk4NTc3YTZiYWJjMGUuLjFhZDVkMDNkMDdhZGIyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xcbkBAIC0yMjIsNyArMjIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zdG9yZV9yZWxlYXNlKHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsKVxcbiBcXHRcXHQgIFxcXCJzdG9yZV9yZWxlYXNlNjRfcmVzdWx0XFxcIik7XFxuIH1cXG4gXFxuLXZvaWQgdGVzdF9hcmVuYV9hdG9taWNzKHZvaWQpXFxuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfYXRvbWljcyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsO1xcbiBcXHRpbnQgZXJyO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXFxuaW5kZXggNGI0YWRiM2Y0YjcxZWIuLjAxZmNmNDk2NWVhNDNjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmNcXG5AQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQodm9pZClcXG4gXFx0Y2xvc2UobWFwX2ZkKTtcXG4gfVxcbiBcXG4tdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZSh2b2lkKVxcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZSh2b2lkKVxcbiB7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJvbmVfcGFzdF9lbmRcXFwiKSlcXG4gXFx0XFx0dGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuY1xcbmluZGV4IGQ2OWZkMjQ2NWY1MzY3Li45MWNjZjA0MDI5ODA0MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcXG5AQCAtODEsNyArODEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2h0YWJfYXNtKHZvaWQpXFxuIFxcdGFyZW5hX2h0YWJfYXNtX19kZXN0cm95KHNrZWwpO1xcbiB9XFxuIFxcbi12b2lkIHRlc3RfYXJlbmFfaHRhYih2b2lkKVxcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2h0YWIodm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXJlbmFfaHRhYl9sbHZtXFxcIikpXFxuIFxcdFxcdHRlc3RfYXJlbmFfaHRhYl9sbHZtKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuY1xcbmluZGV4IDRmMjg2NmE2MTVjZTUyLi4yNjQ4ZTA2ZjUzZDA3MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcXG5AQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbChpbnQgY250LCBib29sIG5vbnNsZWVwYWJsZSlcXG4gXFx0YXJlbmFfbGlzdF9fZGVzdHJveShza2VsKTtcXG4gfVxcbiBcXG4tdm9pZCB0ZXN0X2FyZW5hX2xpc3Qodm9pZClcXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9saXN0KHZvaWQpXFxuIHtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImFyZW5hX2xpc3RfMVxcXCIpKVxcbiBcXHRcXHR0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbCgxLCBmYWxzZSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNGMyZDFhMWQ2NzNjZlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuY1xcbkBAIC0wLDAgKzEsMTIyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3VzZXIuaFxcdTAwM2VcXG4rI2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2RlZmluZSBQQUdFX1NJWkUgZ2V0cGFnZXNpemUoKVxcbisjZW5kaWZcXG4rXFxuKyNpbmNsdWRlIFxcXCJhcmVuYV9tZW1fdXNhZ2Uuc2tlbC5oXFxcIlxcbitcXG4rLypcXG4rICogYXJlbmFfbWFwX21lbV91c2FnZSgpIGlzIHN1cmZhY2VkIHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgbWFwJ3NcXG4rICogL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvZmRpbmZvL1xcdTAwM2NmZFxcdTAwM2UgXFxcIm1lbWxvY2s6XFxcIiBsaW5lICh0aGUgc2FtZSB2YWx1ZSBicGZ0b29sIG1hcCBzaG93XFxuKyAqIHByaW50cykuIFJlYWQgaXQgZGlyZWN0bHkgc28gdGhlIHRlc3QgaGFzIG5vIGV4dGVybmFsIGRlcGVuZGVuY3kuXFxuKyAqL1xcbitzdGF0aWMgbG9uZyBtYXBfbWVtbG9jayhpbnQgbWFwX2ZkKVxcbit7XFxuK1xcdGNoYXIgcGF0aFs2NF0sIGxpbmVbMTI4XTtcXG4rXFx0bG9uZyBtZW1sb2NrID0gLTE7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIvcHJvYy9zZWxmL2ZkaW5mby8lZFxcXCIsIG1hcF9mZCk7XFxuK1xcdGYgPSBmb3BlbihwYXRoLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoZiwgXFxcIm9wZW5fZmRpbmZvXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcXG4rXFx0XFx0aWYgKHNzY2FuZihsaW5lLCBcXFwibWVtbG9jazpcXFxcdCVsZFxcXCIsIFxcdTAwMjZtZW1sb2NrKSA9PSAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRmY2xvc2UoZik7XFxuK1xcdEFTU0VSVF9ORVEobWVtbG9jaywgLTEsIFxcXCJwYXJzZV9tZW1sb2NrXFxcIik7XFxuK1xcdHJldHVybiBtZW1sb2NrO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bihzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xcbitcXHRpbnQgZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQocHJvZyksIFxcdTAwMjZvcHRzKTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgbmFtZSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0aWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsIG5hbWUpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbV91c2FnZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBhcmVuYV9tZW1fdXNhZ2UgKnNrZWw7XFxuK1xcdGNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7XFxuK1xcdGNoYXIgKmJhc2U7XFxuK1xcdHNpemVfdCBzejtcXG4rXFx0aW50IGZkLCBpO1xcbitcXG4rXFx0c2tlbCA9IGFyZW5hX21lbV91c2FnZV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcIm9wZW5fbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGZkID0gYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy5hcmVuYSk7XFxuK1xcbitcXHQvKiBGcmVzaCBhcmVuYTogbm8gZGF0YSBwYWdlcywgYW5kIHRoZSBzY3JhdGNoIHBhZ2UgaXMgbm90IGNvdW50ZWQuICovXFxuK1xcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsIFxcXCJpbml0aWFsXFxcIik7XFxuK1xcbitcXHQvKiBCUEYtc2lkZSBhbGxvY2F0aW9uIG9mIDE3IHBhZ2VzLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWFsbG9jX2NudCA9IDE3O1xcbitcXHRpZiAocnVuKHNrZWwtXFx1MDAzZXByb2dzLmFsbG9jLCBcXFwiYWxsb2NcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdC8qXFxuK1xcdCAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdFxcbitcXHQgKiBpcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLCBub3QgYSBtaXNjb3VudCAtLSBmbGFnIGl0IGRpc3RpbmN0bHkgc28gYVxcbitcXHQgKiByZWQgQ0kgcnVuIGlzIG5vdCBtaXN0YWtlbiBmb3IgYSBjb3VudGluZyBidWcuXFxuK1xcdCAqL1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwdHIsIFxcXCJhcmVuYV9hbGxvY19wYWdlc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTcgKiBwcywgXFxcImFmdGVyX2FsbG9jXFxcIik7XFxuK1xcbitcXHQvKiBGcmVlIGEgc2luZ2xlIHBhZ2UgKGFyZW5hX2ZyZWVfcGFnZXMgcGFnZV9jbnQ9PTEgcGF0aCkuICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9ieXRlX29mZiA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9jbnQgPSAxO1xcbitcXHRpZiAocnVuKHNrZWwtXFx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFxcXCJmcmVlX29uZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTYgKiBwcywgXFxcImFmdGVyX2ZyZWVfb25lXFxcIik7XFxuK1xcbitcXHQvKiBGcmVlIHRlbiBwYWdlcyBpbiBvbmUgY2FsbCAoYnVsayBwYXRoKTsgb25seSB0aGUgZnJlZWQgcGFnZXMgY291bnQuICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9ieXRlX29mZiA9IDEgKiBwcztcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2NudCA9IDEwO1xcbitcXHRpZiAocnVuKHNrZWwtXFx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFxcXCJmcmVlX2J1bGtcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDYgKiBwcywgXFxcImFmdGVyX2ZyZWVfYnVsa1xcXCIpO1xcbitcXG4rXFx0LyogRnJlZSB0aGUgcmVtYWluaW5nIHNpeCAtXFx1MDAzZSBhcmVuYSBlbXB0eSBhZ2Fpbi4gKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2J5dGVfb2ZmID0gMTEgKiBwcztcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2NudCA9IDY7XFxuK1xcdGlmIChydW4oc2tlbC1cXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXFxcImZyZWVfcmVzdFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXFxcImFmdGVyX2ZyZWVfcmVzdFxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlci1zcGFjZSBmYXVsdC1pbjogdG91Y2hpbmcgdW5hbGxvY2F0ZWQgYXJlbmEgcGFnZXMgYWxsb2NhdGVzIHRoZW1cXG4rXFx0ICogdGhyb3VnaCBhcmVuYV92bV9mYXVsdCgpLiBsaWJicGYgbW1hcCgpcyB0aGUgYXJlbmEgYXQgbWFwX2V4dHJhIGR1cmluZ1xcbitcXHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXFxuK1xcdCAqL1xcbitcXHRiYXNlID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShza2VsLVxcdTAwM2VtYXBzLmFyZW5hLCBcXHUwMDI2c3opO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoYmFzZSwgXFxcImFyZW5hX2Jhc2VcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA4OyBpKyspXFxuK1xcdFxcdGJhc2VbaSAqIHBzXSA9IDE7XFxuK1xcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDggKiBwcywgXFxcImFmdGVyX2ZhdWx0aW5cXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZyZWUgdGhlIGZhdWx0ZWQtaW4gcGFnZXMgZnJvbSBCUEYuIFRoZXkgYXJlIG1hcHBlZCBpbnRvIHRoZSB1c2VyIHZtYVxcbitcXHQgKiAoZWxldmF0ZWQgcmVmY291bnQpLCBzbyB0aGlzIGFsc28gZXhlcmNpc2VzIHRoZSB6YXAgcGF0aC5cXG4rXFx0ICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHRyID0gYmFzZTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2J5dGVfb2ZmID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2NudCA9IDg7XFxuK1xcdGlmIChydW4oc2tlbC1cXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXFxcImZyZWVfZmF1bHRlZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXFxcImFmdGVyX2ZyZWVfZmF1bHRlZFxcXCIpO1xcbitvdXQ6XFxuK1xcdGFyZW5hX21lbV91c2FnZV9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXFxuaW5kZXggYWNiOWQ1M2I1OTczM2YuLjU0NWIwNWQ3YTBhYTcyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmNcXG5AQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfc3Bpbl9sb2NrX3NpemUoaW50IHNpemUpXFxuIFxcdHJldHVybjtcXG4gfVxcbiBcXG4tdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxcbiB7XFxuIFxcdHJlcGVhdCA9IDEwMDA7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJhcmVuYV9zcGluX2xvY2tfMVxcXCIpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXFxuaW5kZXggZjgxYTBjMDY2NTA1OTYuLjBjMWM2Y2JmYTBmMTlkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmNcXG5AQCAtMjMsNyArMjMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3N0cih2b2lkKVxcbiBcXHRhcmVuYV9zdHJzZWFyY2hfX2Rlc3Ryb3koc2tlbCk7XFxuIH1cXG4gXFxuLXZvaWQgdGVzdF9hcmVuYV9zdHJzZWFyY2godm9pZClcXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9zdHJzZWFyY2godm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXJlbmFfc3Ryc2VhcmNoXFxcIikpXFxuIFxcdFxcdHRlc3RfYXJlbmFfc3RyKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXFxuaW5kZXggYmE1YTVhNTBmN2MwN2QuLmRmN2U0YjhkYzM5NDU2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXFxuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfcGFyYWxsZWxfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbVxcbiBcXHRydW5fbGliYXJlbmFfcGFyYWxsZWxfZmluaShza2VsLCBuYW1lLCBwcmVmaXhsZW4pO1xcbiB9XFxuIFxcbi12b2lkIHRlc3RfbGliYXJlbmEodm9pZClcXG4rdm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYSh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBhcmVuYV9hbGxvY19yZXNlcnZlX2FyZ3MgYXJncztcXG4gXFx0c3RydWN0IGxpYmFyZW5hICpza2VsO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcXG5pbmRleCBmODk3NDA1ZjcwMWRkNS4uOWMzMWIxN2RiZjM5MWYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXFxuQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcXG4gICogUnVuIHRoZSB0ZXN0IGRlcGVuZGluZyBvbiB3aGV0aGVyIExMVk0gY2FuIGNvbXBpbGUgYXJlbmEgQVNBTlxcbiAgKiBwcm9ncmFtcy5cXG4gICovXFxuLXZvaWQgdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpXFxuK3ZvaWQgc2VyaWFsX3Rlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxcbiB7XFxuICNpZmRlZiBIQVNfQlBGX0FSRU5BX0FTQU5cXG4gXFx0cnVuX3Rlc3QoKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTBkOWQ2YWM4NmY2YjNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jXFxuQEAgLTAsMCArMSwzOSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX2FyZW5hX2NvbW1vbi5oXFxcIlxcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovXFxuKyNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0XFxuK1xcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXFx1MDAzY1xcdTAwM2MgMzIpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuKyNlbHNlXFxuK1xcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXFx1MDAzY1xcdTAwM2MgNDQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuKyNlbmRpZlxcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK3ZvaWQgX19hcmVuYSAqcHRyO1xcbitpbnQgYWxsb2NfY250O1xcdFxcdC8qIGluOiAgcGFnZXMgdG8gYWxsb2NhdGUgKi9cXG4rbG9uZyBmcmVlX2J5dGVfb2ZmO1xcdC8qIGluOiAgYnl0ZSBvZmZzZXQgd2l0aGluIHB0ciB0byBzdGFydCBmcmVlaW5nICovXFxuK2ludCBmcmVlX2NudDtcXHRcXHQvKiBpbjogIHBhZ2VzIHRvIGZyZWUgKi9cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBhbGxvYyh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cHRyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgYWxsb2NfY250LCBOVU1BX05PX05PREUsIDApO1xcbitcXHRyZXR1cm4gcHRyID8gMCA6IDE7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBmcmVlX3BhZ2VzKHZvaWQgKmN0eClcXG4re1xcbitcXHRpZiAoIXB0cilcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKGNoYXIgX19hcmVuYSAqKXB0ciArIGZyZWVfYnl0ZV9vZmYsIGZyZWVfY250KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNTo0Mi43NzMzOTgyMzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNTEyNzAzNzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXBwbHlfcmFuZ2Vfc2V0X2NiXCIsXG4gICAgXCJhcHBseV9yYW5nZV9jbGVhcl9jYlwiLFxuICAgIFwiYXJlbmFfbWFwX21lbV91c2FnZVwiLFxuICAgIFwiYXJlbmFfYWxsb2NfcGFnZXNcIixcbiAgICBcImFyZW5hX2ZyZWVfcGFnZXNcIixcbiAgICBcImFyZW5hX3ZtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcgdG8gQlBGIGFyZW5hcyBieSBtYWludGFpbmluZyBhIGNvdW50IG9mIHBvcHVsYXRlZCBwYWdlcyAoYG5yX3BhZ2VzYCkuIEl0IG1vZGlmaWVzIHRoZSBwYWdlIHRhYmxlIGNhbGxiYWNrcyAoYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmApIHRvIHVwZGF0ZSB0aGlzIGNvdW50ZXIgYW5kIGV4cG9zZXMgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHRoZXNlIGNhbGxiYWNrcyBpbiBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfdm1fZmF1bHRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGFyZW5hIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcGFnZSBjb3VudGluZyBsb2dpYyBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJhY2VzIG9yIG1lbW9yeSBsZWFrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MjcwZTVmZGI5NDA5ODI4YjhjOWZlMjhjY2RmZGJlMzY4MmY1YTBlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMTk6MDU6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDgwYjdiOGE2OTQ0NjQ1Li5iYzM0NjAyMTE2MDQwMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuKysrIGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNTUsOCArNTUsMTAgQEAgc3RydWN0IGJwZl9hcmVuYSB7XG4gXHRzdHJ1Y3Qgdm1fc3RydWN0ICprZXJuX3ZtO1xuIFx0c3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTtcbiBcdHN0cnVjdCByYW5nZV90cmVlIHJ0O1xuLVx0LyogcHJvdGVjdHMgcnQgKi9cbitcdC8qIHByb3RlY3RzIHJ0IGFuZCBucl9wYWdlcyAqL1xuIFx0cnFzcGlubG9ja190IHNwaW5sb2NrO1xuK1x0LyogbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBwb3B1bGF0ZWQgaW4gdGhlIGFyZW5hICovXG4rXHR1NjQgbnJfcGFnZXM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHZtYV9saXN0O1xuIFx0LyogcHJvdGVjdHMgdm1hX2xpc3QgKi9cbiBcdHN0cnVjdCBtdXRleCBsb2NrO1xuQEAgLTE0MywxNCArMTQ1LDE0IEBAIHN0YXRpYyBsb25nIGNvbXB1dGVfcGdvZmYoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIpXG4gfVxuIFxuIHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIHtcbitcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xuIFx0c3RydWN0IHBhZ2UgKipwYWdlcztcbi1cdHN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7XG4gXHRpbnQgaTtcbiB9O1xuIFxuIHN0cnVjdCBjbGVhcl9yYW5nZV9kYXRhIHtcbitcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xuIFx0c3RydWN0IGxsaXN0X2hlYWQgKmZyZWVfcGFnZXM7XG4tXHRzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlO1xuIH07XG4gXG4gc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuQEAgLTE4MCw3ICsxODIsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4gXG4gXHRcdGlmIChwdGVfbm9uZShvbGQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC1cdTAwM2VzY3JhdGNoX3BhZ2UpKVxuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC1cdTAwM2VhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpKVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdHB0ZXBfZ2V0X2FuZF9jbGVhcihcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUpO1xuIFx0XHRmbHVzaF90bGJfYmVmb3JlX3NldChhZGRyKTtcbkBAIC0xOTYsNiArMTk4LDcgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuIFx0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHB0ZXZhbCk7XG4gI2VuZGlmXG4gXHRkLVx1MDAzZWkrKztcbitcdGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMrKztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMjcsMTAgKzIzMCwxMSBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiBcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXG4gXHQgKiBoZXJlLiBXaXRob3V0IHRoZSBza2lwLCBzY3JhdGNoX3BhZ2Ugd291bGQgYmUgZnJlZWQuXG4gXHQgKi9cbi1cdGlmIChwYWdlID09IGQtXHUwMDNlc2NyYXRjaF9wYWdlKVxuK1x0aWYgKHBhZ2UgPT0gZC1cdTAwM2VhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0X19sbGlzdF9hZGQoXHUwMDI2cGFnZS1cdTAwM2VwY3BfbGxpc3QsIGQtXHUwMDNlZnJlZV9wYWdlcyk7XG4rXHRkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzLS07XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDEzLDcgKzQxNyw5IEBAIHN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXG4gc3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4ge1xuLVx0cmV0dXJuIDA7XG4rXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG4rXG4rXHRyZXR1cm4gKHU2NClSRUFEX09OQ0UoYXJlbmEtXHUwMDNlbnJfcGFnZXMpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIH1cbiBcbiBzdHJ1Y3Qgdm1hX2xpc3Qge1xuQEAgLTUwNiw4ICs1MTIsNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4gXG4tXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAucGFnZXMgPSBcdTAwMjZwYWdlLCAuaSA9IDAsXG4tXHRcdFx0XHRcdCAuc2NyYXRjaF9wYWdlID0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlIH07XG4rXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG4gXHQvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqL1xuIFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG4gXHRpZiAocmV0KSB7XG5AQCAtNjk2LDggKzcwMSw4IEBAIHN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250XG4gXHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuK1x0ZGF0YS5hcmVuYSA9IGFyZW5hO1xuIFx0ZGF0YS5wYWdlcyA9IHBhZ2VzO1xuLVx0ZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2U7XG4gXG4gXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxuIFx0XHRnb3RvIG91dF9mcmVlX3BhZ2VzO1xuQEAgLTg3Myw4ICs4NzgsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxuIFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4gXG4gXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2ZnJlZV9wYWdlcyk7XG4rXHRjZGF0YS5hcmVuYSA9IGFyZW5hO1xuIFx0Y2RhdGEuZnJlZV9wYWdlcyA9IFx1MDAyNmZyZWVfcGFnZXM7XG4tXHRjZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2U7XG4gXHQvKiBjbGVhciBwdGVzIGFuZCBjb2xsZWN0IHN0cnVjdCBwYWdlcyAqL1xuIFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBrYWRkciwgcGFnZV9jbnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4gXHRcdFx0XHQgICAgIGFwcGx5X3JhbmdlX2NsZWFyX2NiLCBcdTAwMjZjZGF0YSk7XG5AQCAtOTgxLDggKzk4Niw4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4gXG4gXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2ZnJlZV9wYWdlcyk7XG4rXHRjZGF0YS5hcmVuYSA9IGFyZW5hO1xuIFx0Y2RhdGEuZnJlZV9wYWdlcyA9IFx1MDAyNmZyZWVfcGFnZXM7XG4tXHRjZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2U7XG4gXHRhcmVuYV92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XG4gXHR1c2VyX3ZtX3N0YXJ0ID0gYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGFyZW5hKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmNcbmluZGV4IGQ5ODU3N2E2YmFiYzBlLi4xYWQ1ZDAzZDA3YWRiMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jXG5AQCAtMjIyLDcgKzIyMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc3RvcmVfcmVsZWFzZShzdHJ1Y3QgYXJlbmFfYXRvbWljcyAqc2tlbClcbiBcdFx0ICBcInN0b3JlX3JlbGVhc2U2NF9yZXN1bHRcIik7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9hdG9taWNzKHZvaWQpXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9hdG9taWNzKHZvaWQpXG4ge1xuIFx0c3RydWN0IGFyZW5hX2F0b21pY3MgKnNrZWw7XG4gXHRpbnQgZXJyO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmNcbmluZGV4IDRiNGFkYjNmNGI3MWViLi4wMWZjZjQ5NjVlYTQzYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuY1xuQEAgLTY2LDcgKzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKHZvaWQpXG4gXHRjbG9zZShtYXBfZmQpO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfZGlyZWN0X3ZhbHVlKHZvaWQpXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWUodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcIm9uZV9wYXN0X2VuZFwiKSlcbiBcdFx0dGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jXG5pbmRleCBkNjlmZDI0NjVmNTM2Ny4uOTFjY2YwNDAyOTgwNDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuY1xuQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9odGFiX2FzbSh2b2lkKVxuIFx0YXJlbmFfaHRhYl9hc21fX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9odGFiKHZvaWQpXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9odGFiKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhcmVuYV9odGFiX2xsdm1cIikpXG4gXHRcdHRlc3RfYXJlbmFfaHRhYl9sbHZtKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jXG5pbmRleCA0ZjI4NjZhNjE1Y2U1Mi4uMjY0OGUwNmY1M2QwNzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuY1xuQEAgLTY4LDcgKzY4LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9saXN0X2FkZF9kZWwoaW50IGNudCwgYm9vbCBub25zbGVlcGFibGUpXG4gXHRhcmVuYV9saXN0X19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfbGlzdCh2b2lkKVxuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbGlzdCh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYXJlbmFfbGlzdF8xXCIpKVxuIFx0XHR0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbCgxLCBmYWxzZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNGMyZDFhMWQ2NzNjZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmNcbkBAIC0wLDAgKzEsMTIyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdXNlci5oXHUwMDNlXG4rI2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpXG4rI2VuZGlmXG4rXG4rI2luY2x1ZGUgXCJhcmVuYV9tZW1fdXNhZ2Uuc2tlbC5oXCJcbitcbisvKlxuKyAqIGFyZW5hX21hcF9tZW1fdXNhZ2UoKSBpcyBzdXJmYWNlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIG1hcCdzXG4rICogL3Byb2MvXHUwMDNjcGlkXHUwMDNlL2ZkaW5mby9cdTAwM2NmZFx1MDAzZSBcIm1lbWxvY2s6XCIgbGluZSAodGhlIHNhbWUgdmFsdWUgYnBmdG9vbCBtYXAgc2hvd1xuKyAqIHByaW50cykuIFJlYWQgaXQgZGlyZWN0bHkgc28gdGhlIHRlc3QgaGFzIG5vIGV4dGVybmFsIGRlcGVuZGVuY3kuXG4rICovXG4rc3RhdGljIGxvbmcgbWFwX21lbWxvY2soaW50IG1hcF9mZClcbit7XG4rXHRjaGFyIHBhdGhbNjRdLCBsaW5lWzEyOF07XG4rXHRsb25nIG1lbWxvY2sgPSAtMTtcbitcdEZJTEUgKmY7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiL3Byb2Mvc2VsZi9mZGluZm8vJWRcIiwgbWFwX2ZkKTtcbitcdGYgPSBmb3BlbihwYXRoLCBcInJcIik7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoZiwgXCJvcGVuX2ZkaW5mb1wiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcbitcdFx0aWYgKHNzY2FuZihsaW5lLCBcIm1lbWxvY2s6XFx0JWxkXCIsIFx1MDAyNm1lbWxvY2spID09IDEpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRmY2xvc2UoZik7XG4rXHRBU1NFUlRfTkVRKG1lbWxvY2ssIC0xLCBcInBhcnNlX21lbWxvY2tcIik7XG4rXHRyZXR1cm4gbWVtbG9jaztcbit9XG4rXG4rc3RhdGljIGludCBydW4oc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdGludCBlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgXHUwMDI2b3B0cyk7XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIG5hbWUpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgbmFtZSkpXG4rXHRcdHJldHVybiAtMTtcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbV91c2FnZSh2b2lkKVxuK3tcbitcdHN0cnVjdCBhcmVuYV9tZW1fdXNhZ2UgKnNrZWw7XG4rXHRjb25zdCBsb25nIHBzID0gUEFHRV9TSVpFO1xuK1x0Y2hhciAqYmFzZTtcbitcdHNpemVfdCBzejtcbitcdGludCBmZCwgaTtcbitcbitcdHNrZWwgPSBhcmVuYV9tZW1fdXNhZ2VfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcIm9wZW5fbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1x0ZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuYXJlbmEpO1xuK1xuK1x0LyogRnJlc2ggYXJlbmE6IG5vIGRhdGEgcGFnZXMsIGFuZCB0aGUgc2NyYXRjaCBwYWdlIGlzIG5vdCBjb3VudGVkLiAqL1xuK1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXCJpbml0aWFsXCIpO1xuK1xuK1x0LyogQlBGLXNpZGUgYWxsb2NhdGlvbiBvZiAxNyBwYWdlcy4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWFsbG9jX2NudCA9IDE3O1xuK1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmFsbG9jLCBcImFsbG9jXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdC8qXG4rXHQgKiBBIE5VTEwgcHRyIG1lYW5zIGJwZl9hcmVuYV9hbGxvY19wYWdlcygpIGl0c2VsZiBmYWlsZWQgKGUuZy4gdGhlIGhvc3RcbitcdCAqIGlzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSksIG5vdCBhIG1pc2NvdW50IC0tIGZsYWcgaXQgZGlzdGluY3RseSBzbyBhXG4rXHQgKiByZWQgQ0kgcnVuIGlzIG5vdCBtaXN0YWtlbiBmb3IgYSBjb3VudGluZyBidWcuXG4rXHQgKi9cbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWJzcy1cdTAwM2VwdHIsIFwiYXJlbmFfYWxsb2NfcGFnZXNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTcgKiBwcywgXCJhZnRlcl9hbGxvY1wiKTtcbitcbitcdC8qIEZyZWUgYSBzaW5nbGUgcGFnZSAoYXJlbmFfZnJlZV9wYWdlcyBwYWdlX2NudD09MSBwYXRoKS4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9jbnQgPSAxO1xuK1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFwiZnJlZV9vbmVcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTYgKiBwcywgXCJhZnRlcl9mcmVlX29uZVwiKTtcbitcbitcdC8qIEZyZWUgdGVuIHBhZ2VzIGluIG9uZSBjYWxsIChidWxrIHBhdGgpOyBvbmx5IHRoZSBmcmVlZCBwYWdlcyBjb3VudC4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAxICogcHM7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2NudCA9IDEwO1xuK1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFwiZnJlZV9idWxrXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDYgKiBwcywgXCJhZnRlcl9mcmVlX2J1bGtcIik7XG4rXG4rXHQvKiBGcmVlIHRoZSByZW1haW5pbmcgc2l4IC1cdTAwM2UgYXJlbmEgZW1wdHkgYWdhaW4uICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2J5dGVfb2ZmID0gMTEgKiBwcztcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfY250ID0gNjtcbitcdGlmIChydW4oc2tlbC1cdTAwM2Vwcm9ncy5mcmVlX3BhZ2VzLCBcImZyZWVfcmVzdFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAwLCBcImFmdGVyX2ZyZWVfcmVzdFwiKTtcbitcbitcdC8qXG4rXHQgKiBVc2VyLXNwYWNlIGZhdWx0LWluOiB0b3VjaGluZyB1bmFsbG9jYXRlZCBhcmVuYSBwYWdlcyBhbGxvY2F0ZXMgdGhlbVxuK1x0ICogdGhyb3VnaCBhcmVuYV92bV9mYXVsdCgpLiBsaWJicGYgbW1hcCgpcyB0aGUgYXJlbmEgYXQgbWFwX2V4dHJhIGR1cmluZ1xuK1x0ICogbG9hZCwgc28gYnBmX21hcF9faW5pdGlhbF92YWx1ZSgpIGhhbmRzIGJhY2sgdGhhdCBiYXNlLlxuK1x0ICovXG4rXHRiYXNlID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShza2VsLVx1MDAzZW1hcHMuYXJlbmEsIFx1MDAyNnN6KTtcbitcdGlmICghQVNTRVJUX09LX1BUUihiYXNlLCBcImFyZW5hX2Jhc2VcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgODsgaSsrKVxuK1x0XHRiYXNlW2kgKiBwc10gPSAxO1xuK1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgOCAqIHBzLCBcImFmdGVyX2ZhdWx0aW5cIik7XG4rXG4rXHQvKlxuK1x0ICogRnJlZSB0aGUgZmF1bHRlZC1pbiBwYWdlcyBmcm9tIEJQRi4gVGhleSBhcmUgbWFwcGVkIGludG8gdGhlIHVzZXIgdm1hXG4rXHQgKiAoZWxldmF0ZWQgcmVmY291bnQpLCBzbyB0aGlzIGFsc28gZXhlcmNpc2VzIHRoZSB6YXAgcGF0aC5cbitcdCAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHRyID0gYmFzZTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9jbnQgPSA4O1xuK1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFwiZnJlZV9mYXVsdGVkXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsIFwiYWZ0ZXJfZnJlZV9mYXVsdGVkXCIpO1xuK291dDpcbitcdGFyZW5hX21lbV91c2FnZV9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suY1xuaW5kZXggYWNiOWQ1M2I1OTczM2YuLjU0NWIwNWQ3YTBhYTcyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXG5AQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfc3Bpbl9sb2NrX3NpemUoaW50IHNpemUpXG4gXHRyZXR1cm47XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9zcGluX2xvY2sodm9pZClcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxuIHtcbiBcdHJlcGVhdCA9IDEwMDA7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX3NwaW5fbG9ja18xXCIpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmNcbmluZGV4IGY4MWEwYzA2NjUwNTk2Li4wYzFjNmNiZmEwZjE5ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guY1xuQEAgLTIzLDcgKzIzLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9zdHIodm9pZClcbiBcdGFyZW5hX3N0cnNlYXJjaF9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX3N0cnNlYXJjaCh2b2lkKVxuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfc3Ryc2VhcmNoKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhcmVuYV9zdHJzZWFyY2hcIikpXG4gXHRcdHRlc3RfYXJlbmFfc3RyKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbmluZGV4IGJhNWE1YTUwZjdjMDdkLi5kZjdlNGI4ZGMzOTQ1NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3BhcmFsbGVsX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW1cbiBcdHJ1bl9saWJhcmVuYV9wYXJhbGxlbF9maW5pKHNrZWwsIG5hbWUsIHByZWZpeGxlbik7XG4gfVxuIFxuLXZvaWQgdGVzdF9saWJhcmVuYSh2b2lkKVxuK3ZvaWQgc2VyaWFsX3Rlc3RfbGliYXJlbmEodm9pZClcbiB7XG4gXHRzdHJ1Y3QgYXJlbmFfYWxsb2NfcmVzZXJ2ZV9hcmdzIGFyZ3M7XG4gXHRzdHJ1Y3QgbGliYXJlbmEgKnNrZWw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXG5pbmRleCBmODk3NDA1ZjcwMWRkNS4uOWMzMWIxN2RiZjM5MWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xuQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcbiAgKiBSdW4gdGhlIHRlc3QgZGVwZW5kaW5nIG9uIHdoZXRoZXIgTExWTSBjYW4gY29tcGlsZSBhcmVuYSBBU0FOXG4gICogcHJvZ3JhbXMuXG4gICovXG4tdm9pZCB0ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcbit2b2lkIHNlcmlhbF90ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcbiB7XG4gI2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxuIFx0cnVuX3Rlc3QoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTBkOWQ2YWM4NmY2YjNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuY1xuQEAgLTAsMCArMSwzOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9hcmVuYV9jb21tb24uaFwiXG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovXG4rI2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjRcbitcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDMyKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuKyNlbHNlXG4rXHRfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsIFx1MDAzY1x1MDAzYyA0NCk7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbisjZW5kaWZcbit9IGFyZW5hIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3ZvaWQgX19hcmVuYSAqcHRyO1xuK2ludCBhbGxvY19jbnQ7XHRcdC8qIGluOiAgcGFnZXMgdG8gYWxsb2NhdGUgKi9cbitsb25nIGZyZWVfYnl0ZV9vZmY7XHQvKiBpbjogIGJ5dGUgb2Zmc2V0IHdpdGhpbiBwdHIgdG8gc3RhcnQgZnJlZWluZyAqL1xuK2ludCBmcmVlX2NudDtcdFx0LyogaW46ICBwYWdlcyB0byBmcmVlICovXG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBhbGxvYyh2b2lkICpjdHgpXG4re1xuK1x0cHRyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCBhbGxvY19jbnQsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRyZXR1cm4gcHRyID8gMCA6IDE7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgZnJlZV9wYWdlcyh2b2lkICpjdHgpXG4re1xuK1x0aWYgKCFwdHIpXG4rXHRcdHJldHVybiAxO1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIChjaGFyIF9fYXJlbmEgKilwdHIgKyBmcmVlX2J5dGVfb2ZmLCBmcmVlX2NudCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6MDU6NDIuNzczNDAwNzk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyNDY3MTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBga2VybmVsL2JwZi9hcmVuYS5jYCBhbmQgaW50cm9kdWNpbmcgYSBuZXcgdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwg4oCTIGlzIHRoaXMgc29tZXRoaW5nIHdvcnRoIHNpbmtpbmcgdGltZSBpbnRvP1xuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIG1lbW9yeSB1c2FnZSB0cmFja2luZyB3aXRoaW4gdGhlIEJQRiBhcmVuYS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBgbnJfcGFnZXNgIHRvIHRoZSBgc3RydWN0IGJwZl9hcmVuYWAgdG8ga2VlcCB0YWJzIG9uIHRoZSBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IGluIHVzZS4gTWFrZXMgc2Vuc2UsIHRoYXQncyBhIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGFueSBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gY2FsbGJhY2tzIGxpa2UgYGFwcGx5X3JhbmdlX3NldF9jYmAgKGluY3JlbWVudGluZyBgbnJfcGFnZXNgKSwgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCAoZGVjcmVtZW50aW5nIGl0KSwgYW5kIHRoZSBgYXJlbmFfbWFwX21lbV91c2FnZWAgZnVuY3Rpb24uIFRoZSBgYXJlbmFfbWFwX21lbV91c2FnZWAgY2hhbmdlIGlzIGp1c3QgZ3JhYmJpbmcgdGhhdCBwYWdlIGNvdW50IGFuZCBzaGlmdGluZyBpdCBhcHByb3ByaWF0ZWx5LiBUaGUgY29kZSBhbHNvIGFwcGVhcnMgdG8gYmUgcmVmYWN0b3Jpbmcgc29tZSBzdHJ1Y3RzIHRvIHBhc3MgYGFyZW5hYCByYXRoZXIgdGhhbiBqdXN0IHRoZSBgc2NyYXRjaF9wYWdlYC5cblxuU28sIHRoZSBxdWVzdGlvbiBpcywgKmlzIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIHZ1bG5lcmFibGUgdG8gc29tZXRoaW5nIGxpa2UgYSBtZW1vcnkgY29ycnVwdGlvbj8qIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBCUEYsIHRoZSBhbnN3ZXIgaXMgYSBsaWtlbHkgeWVzLiBJdCBtb2RpZmllcyB0aGUgYXJlbmEgbG9naWMsIGFuZCB0aGUgYXJlbmEgaXRzZWxmIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBgQlBGX01BUF9UWVBFX0FSRU5BYCBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQg4oCTIGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLCBgYXJlbmFfbWFwX21lbV91c2FnZWAsIGBhcmVuYV92bV9mYXVsdGAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAg4oCTIGFyZSBhbGwgcHJpbWUgdGFyZ2V0cy4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgYXJlbmHigJlzIHN0YXRlLCBpbmNsdWRpbmcgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBwYWdlcyBhbmQgaGFuZGxpbmcgbWVtb3J5IGFjY2Vzcy4gQSBtaXNjYWxjdWxhdGlvbiBoZXJlIGNvdWxkIGxlYWQgdG8gc29tZSB2ZXJ5IGludGVyZXN0aW5nIG1lbW9yeSBpc3N1ZXMuIEkgc2hvdWxkIHB1bGwgdXAgYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGRpZyBpbi4gSXQncyB0aW1lIHRvIGZpbmQgYSB3YXkgdG8gYnJlYWsgaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNTo0OS40OTgwNzUyNjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzODE1NTcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYV9tYXBfbWVtX3VzYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvYXJlbmEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9NDEyPXN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE3LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTg6c3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxOS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1MC1cXHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MTpcXHQubWFwX21lbV91c2FnZSA9IGFyZW5hX21hcF9tZW1fdXNhZ2UsXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZicGZfYXJlbmFfbWFwX2J0Zl9pZHNbMF0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA1OjUxLjUzNjIzNzEzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5Njk4MTg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IFVzYWdlIGluIEFyZW5hIE1hcHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYGFyZW5hX21hcF9tZW1fdXNhZ2VgIHZhcmlhYmxlIHBsYXlzIGEgcm9sZSB3aXRoaW4gdGhlIGBhcmVuYV9tYXBfb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgdGhlIGNvcmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byB0cmFjZSBob3cgdGhlIG1lbW9yeSB1c2FnZSBkYXRhIGlzIG1hbmlwdWxhdGVkLlxuXG5TcGVjaWZpY2FsbHksIGBucl9wYWdlc2AgaXMgdGhlIHRhcmdldCB2YXJpYWJsZSBoZXJlLiBJIHNlZSB0aGF0IGl0J3MgZ2V0dGluZyB1cGRhdGVkIHdpdGhpbiB0aGUgYGFwcGx5X3JhbmdlX3NldF9jYmAgYW5kIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAgY2FsbGJhY2sgZnVuY3Rpb25zLiBJbnRlcmVzdGluZy4gVGhvc2UgY2FsbGJhY2tzLCBpbiB0dXJuLCBhcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBgYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZWAgYW5kIGBhcHBseV90b19wYWdlX3JhbmdlYCBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSB0aGUgd29ya2hvcnNlcyBhcHBseWluZyBjaGFuZ2VzIG92ZXIgYSByYW5nZSBvZiBtZW1vcnkgcGFnZXMuXG5cbk5vdywgdG8gc29saWRpZnkgbXkgY29tcHJlaGVuc2lvbiwgSSBuZWVkIHRvIHpvb20gaW4gb24gd2hhdCB0aGUgYGFwcGx5X3JhbmdlX3NldF9jYmAgYW5kIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBkb2luZy4gTGV0J3MgZGVsdmUgaW50byB0aGVpciBpbXBsZW1lbnRhdGlvbiB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHBhZ2UgbWFuYWdlbWVudCBsb2dpYyBhbmQgaG93IHRoZXkncmUgY29udHJpYnV0aW5nIHRvIHRoZSBgYXJlbmFfbWFwX21lbV91c2FnZWAgZmlndXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgdGhleSBjaGFuZ2UgYG5yX3BhZ2VzYCBpbiB0aGVpciByZXNwZWN0aXZlIHNldCBhbmQgY2xlYXIgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM0MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNTo1NS4yMzMyMjE0NzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5NDgzNTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwcGx5X3JhbmdlX3NldF9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9hcmVuYS5jPTE1Mz1zdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTU3LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxNTg6c3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xNTkte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTI1OT1zdGF0aWMgaW50IHBvcHVsYXRlX3BndGFibGVfZXhjZXB0X3B0ZShzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjItXFx0cmV0dXJuIGFwcGx5X3RvX3BhZ2VfcmFuZ2UoXFx1MDAyNmluaXRfbW0sIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSksXFxua2VybmVsL2JwZi9hcmVuYS5jOjI2MzpcXHRcXHRcXHRcXHQgICBTWl80RyArIEdVQVJEX1NaIC8gMiwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjY0LX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz00Nzk9c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTIyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MjM6XFx0cmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwga2FkZHIsIFBBR0VfU0laRSwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBcXHUwMDI2ZGF0YSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUyNC1cXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY0PXN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03NDYtXFx0XFx0XFx0XFx0XFx0ICBrZXJuX3ZtX3N0YXJ0ICsgdWFkZHIzMiArIChtYXBwZWQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCksXFxua2VybmVsL2JwZi9hcmVuYS5jOjc0NzpcXHRcXHRcXHRcXHRcXHQgIHRoaXNfYmF0Y2ggXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBcXHUwMDI2ZGF0YSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc0OC1cXHRcXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA1OjU1LjgyMjcxMTAzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDA2MDkxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIEFyZW5hIE1lbW9yeSBUcmFja2luZzogQSBDbG9zZXIgTG9vayoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcgZm9yIEJQRiBhcmVuYXMsIHdoaWNoIGlzIGEgc2Vuc2libGUgYWRkaXRpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIHVwZGF0aW5nIGBucl9wYWdlc2AgYW5kIHJldHVybmluZyBpdCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLiBUaGlzIGlzIGZ1bmN0aW9uYWwsIGJ1dCB0aGUgbWFpbiBnb2FsIGlzIG1lbW9yeSB0cmFja2luZy4gSSBkb24ndCBzZWUgYW55dGhpbmcgb3Zlcmx5IGNvbXBsZXggYXQgZmlyc3QgZ2xhbmNlLlxuXG5UaGUgY29kZSBjaGFuZ2VzIGFyZSBtb3N0bHkgYWJvdXQgcmVmYWN0b3Jpbmc6IHJlcGxhY2luZyBgc2NyYXRjaF9wYWdlYCB3aXRoIGBhcmVuYWAgaW4gYSBjb3VwbGUgb2YgZnVuY3Rpb25zLCBgYXBwbHlfcmFuZ2VfZGF0YWAgYW5kIGBjbGVhcl9yYW5nZV9kYXRhYC4gSXQgaW5jcmVtZW50cyBgbnJfcGFnZXNgIHdpdGhpbiBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCBhbmQgZGVjcmVtZW50cyBpdCB3aXRoaW4gYGFwcGx5X3JhbmdlX2NsZWFyX2NiYC4gTm90aGluZyB0b28gY3JhenksIGJ1dCB0aGlzIHRvdWNoZXMgY29yZSBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQuXG5cbkdpdmVuIHRoYXQgdGhpcyBtb2RpZmllcyBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCwgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4gSXQncyBhIGdvb2QgdGFyZ2V0LiBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2Ugc3ltYm9sczogYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAsIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCwgYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3BhZ2VzYC4gT2gsIGFuZCBgYXJlbmFfdm1fZmF1bHRgIG1pZ2h0IGFsc28gYmUgcmVsZXZhbnQuXG5cbldhaXQsIGFyZSB0aG9zZSBjYWxsYmFjayBmdW5jdGlvbnMsIGBhcHBseV9yYW5nZV9zZXRfY2JgIGFuZCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLCBzdGF0aWM/IE9rYXksIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGVzZSBzdGF0aWMgY2FsbGJhY2tzIGFyZSByZWFjaGFibGUgZHVyaW5nIEJQRiBhcmVuYSBvcGVyYXRpb25zIGFuZCBpZiBJIGNhbiBlZmZlY3RpdmVseSB0YXJnZXQgdGhlbSB3aXRoIGZ1enppbmcuXG5cbkdvb2QsIHRoZXkgKmFyZSogY2FsbGVkIGR1cmluZyBCUEYgYXJlbmEgb3BlcmF0aW9ucy4gRXhjZWxsZW50LlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIGFueXRoaW5nIHJlbGV2YW50IHRvIEJQRiBhcmVuYSBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNjowMS4xNjMzMjI2MjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxMTAwNDc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfQVJFTkFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEwNDY9c3RhdGljIHZvaWQgYnVpbGRfZXBpbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCB3YXNfY2xhc3NpYylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMDAtI2RlZmluZSBCUEZfRklYVVBfQVJFTkFfUkVHX01BU0sgICBHRU5NQVNLKDIwLCAxNilcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTAxOiNkZWZpbmUgQlBGX0FSRU5BX0FDQ0VTUyAgICAgICAgICAgQklUKDIxKVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMDItI2RlZmluZSBCUEZfRklYVVBfUkVHX01BU0tcXHRHRU5NQVNLKDMxLCAyNylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTExMDU9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMTAtXFx0aW50IGFyZW5hX3JlZyA9IEZJRUxEX0dFVChCUEZfRklYVVBfQVJFTkFfUkVHX01BU0ssIGV4LVxcdTAwM2VmaXh1cCk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTExMTpcXHRib29sIGlzX2FyZW5hID0gISEoZXgtXFx1MDAzZWZpeHVwIFxcdTAwMjYgQlBGX0FSRU5BX0FDQ0VTUyk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTExMi1cXHRib29sIGlzX3dyaXRlID0gKGRzdF9yZWcgPT0gRE9OVF9DTEVBUik7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMTI5PXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExODYtXFx0aWYgKGlzX2FyZW5hKSB7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTE4NzpcXHRcXHRleC1cXHUwMDNlZml4dXAgfD0gQlBGX0FSRU5BX0FDQ0VTUztcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTg4LVxcdFxcdC8qXFxuLS1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC0xNi1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaDoxNzojaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgXFx1MDAyNlxcdTAwMjYgIWRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC0xOC0jaWZuZGVmIF9fYXJlbmFcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZT04NDQ9TElCQVJFTkFfQVNBTl9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hX2FzYW4uc2tlbC5oXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjg0NTpDRkxBR1MgKz0gLURIQVNfQlBGX0FSRU5BX0FTQU5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtODQ2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlPTc5PWxpYmFyZW5hLmJwZi5vOiAkKExJQkFSRU5BX09CSkVDVFMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUtODQtXFx0JChjYWxsIG1zZyxDTE5HLUJQRixsaWJhcmVuYSwkQClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGU6ODU6XFx0JChRKSQoQ0xBTkcpICQoQlBGX0NGTEFHUykgJChBU0FOX0ZMQUdTKSAtREJQRl9BUkVOQV9BU0FOICQoQlBGX1RBUkdFVF9FTkRJQU4pIC1jICRcXHUwMDNjIC1vICRAXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlLTg2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTM0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaDozNTojaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgXFx1MDAyNlxcdTAwMjYgIWRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmgtMzYtI2RlZmluZSBfX2FyZW5hIF9fYXR0cmlidXRlX18oKGFkZHJlc3Nfc3BhY2UoMSkpKSBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoXFxcImFyZW5hXFxcIikpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oLTItLyogQ29weXJpZ2h0IChjKSAyMDI1IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaDozOiNpZm5kZWYgQlBGX0FSRU5BX1NQSU5fTE9DS19IXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oOjQ6I2RlZmluZSBCUEZfQVJFTkFfU1BJTl9MT0NLX0hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmgtNS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaD01MTY9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFyZW5hX3NwaW5fdW5sb2NrKGFyZW5hX3NwaW5sb2NrX3QgX19hcmVuYSAqbG9jaylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaC01NDItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oOjU0MzojZW5kaWYgLyogQlBGX0FSRU5BX1NQSU5fTE9DS19IICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9MTU9ZXh0ZXJuIHZvbGF0aWxlIGJvb2wgYXNhbl9yZXBvcnRfb25jZTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaC0yNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6MjY6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oLTI3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oPTg1PXN0YXRpYyB2b2lkICgqX19hc2FuX2J0Zl9hbmNob3JzW10pKGludHB0cl90KSA9IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaC05MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6OTI6I2Vsc2UgLyogQlBGX0FSRU5BX0FTQU4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtOTMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9OTc9X193ZWFrIGJvb2wgYXNhbl9yZWFkeSh2b2lkKSB7IHJldHVybiB0cnVlOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oLTk4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaDo5OTojZW5kaWYgLyogQlBGX0FSRU5BX0FTQU4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMTAwLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmM9MTE9ZXh0ZXJuIHN0cnVjdCBidWRkeSBfX2FyZW5hIGJ1ZGR5O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jLTEyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jOjEzOiNpZmRlZiBCUEZfQVJFTkFfQVNBTlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jLTE0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jPTg9ZW51bSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtODAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jOjgxOiNpZmRlZiBCUEZfQVJFTkFfQVNBTlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy04Mi1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYz00ODU9X193ZWFrIF9fbm9hc2FuIGludCBhc2FuX2luaXQoc3RydWN0IGFzYW5faW5pdF9hcmdzICphcmdzKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTU1MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6NTUxOiNlbmRpZiAvKiBCUEZfQVJFTkFfQVNBTiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy01NTItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6NTojaWZkZWYgSEFTX0JQRl9BUkVOQV9BU0FOXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTYtI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jPTM3PXN0YXRpYyB2b2lkIHJ1bl90ZXN0KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtODEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jOjgyOiNlbmRpZiAvKiBIQVNfQlBGX0FSRU5BX0FTQU4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtODMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM9ODg9dm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTg5LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6OTA6I2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy05MS1cXHRydW5fdGVzdCgpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2h0YWIuYz0yNj1pbnQgYXJlbmFfaHRhYl9sbHZtKHZvaWQgKmN0eClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jLTI3LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jOjI4OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSB8fCBkZWZpbmVkKEJQRl9BUkVOQV9GT1JDRV9BU00pXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2h0YWIuYy0yOS1cXHRzdHJ1Y3QgaHRhYiBfX2FyZW5hICpodGFiO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2h0YWJfYXNtLmMtMi0vKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2h0YWJfYXNtLmM6MzojZGVmaW5lIEJQRl9BUkVOQV9GT1JDRV9BU01cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYy00LSNkZWZpbmUgYXJlbmFfaHRhYl9sbHZtIGFyZW5hX2h0YWJfYXNtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA2OjA2LjY3NDMzMjg0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTg0MDkxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIEFyZW5hIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBgQ09ORklHX0JQRl9BUkVOQWAgY29uZmlndXJhdGlvbiwgYW5kIGl0J3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBpdCdzIG5vdCBhIHN0YW5kYWxvbmUgb3B0aW9uLiBJdCBzZWVtcyB0byBiZSBpbnRlcnR3aW5lZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgLCB3aGljaCBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFyZW5hIGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgYmVpbmcgY29tcGlsZWQuIE15IG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGFyZW5hLm9g4oCUdGhlIG9iamVjdCBmaWxlIHJlbGF0ZWQgdG8gdGhlIGFyZW5h4oCUaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFncywgYW5kIGlmIHNvLCB3aGF0IHRob3NlIGZsYWdzIGFyZS4gVGhhdCBNYWtlZmlsZSBzaG91bGQgcHJvdmlkZSB0aGUga2V5LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBkZXBlbmRlbmN5IGFuZCBhc2NlcnRhaW4gaXRzIHByZWNpc2UgcmVsYXRpb25zaGlwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY1NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA2OjA5LjgzMjc0NDg2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5OTQzMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNjoxMC40OTI2OTc1MTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMyOTE0NTM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBBcmVuYSBNZW1vcnkgVHJhY2tpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcHJpbWFyeSBlbmFibGluZyBjb25maWd1cmF0aW9uIGhlcmUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBpdCBhbHNvIHJlcXVpcmVzIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAsIHdoaWNoIGlzIGV4cGVjdGVkIGdpdmVuIHRoZSBuYXR1cmUgb2YgQlBGLiBUaGUgY29kZSBpcyB1c2luZyBgQlBGX1NZU0NBTExgIGRpcmVjdGx5LiBNYWtlcyBzZW5zZS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AsIGZvY3VzaW5nIG9uIHRoZSBCUEYgYXJlbmEgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIG1lbW9yeSB1c2FnZSB0cmFja2luZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gSSdtIGZvY3VzaW5nIG9uIGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLCBgYXJlbmFfbWFwX21lbV91c2FnZWAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV92bV9mYXVsdGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGFmZmVjdGVkLlxuXG5Ob3csIGEgcXVpY2sgZm9sbG93LXVwIHRob3VnaHQuLi4gSSdtIG5vdGljaW5nIHRoYXQgYGFwcGx5X3JhbmdlX3NldF9jYmAgYW5kIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAgYXJlIHN0YXRpYyBjYWxsYmFja3MsIHNvIEknbSB3b25kZXJpbmcgaWYgdGhleSdyZSBpbmxpbmVkLiBJZiB0aGV5IGFyZSBpbmxpbmVkLCB0aGF0IGNvdWxkIG1ha2UgdGhlbSBoYXJkZXIgZm9yIHN5emthbGxlciB0byB0YXJnZXQgZGlyZWN0bHkuIEhvd2V2ZXIsIHRoZXkncmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGBhcHBseV90b19wYWdlX3JhbmdlYCBhbmQgYGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2VgLCBzbyBpdCBsb29rcyBsaWtlIHRoZXkgd29uJ3QgYmUgaW5saW5lZC4gVGhhdCdzIGdvb2QuIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCBpcyBhIGNhbGxiYWNrIHdpdGhpbiBgYnBmX21hcF9vcHNgLCBzbyBpdCdzIHByb2JhYmx5IGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbWFwIG9wZXJhdGlvbnMuIGBhcmVuYV9hbGxvY19wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3BhZ2VzYCBhcmUgY2FsbGVkIGFzIEJQRiBwcm9ncmFtIGhlbHBlcnMsIHdoaWNoIEkgbGlrZSBiZWNhdXNlIEkgY2FuIGNvbnRyb2wgdGhlbSBmcm9tIGEgQlBGIHByb2dyYW0uIEZpbmFsbHksIGBhcmVuYV92bV9mYXVsdGAgaXMgYSBgdm1fb3BlcmF0aW9uc19zdHJ1Y3RgIGNhbGxiYWNrLCBzbyBpdCdzIHRpZWQgdG8gdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZSBjaGVjayB0aGF0IGBhcmVuYV9hbGxvY19wYWdlc2AgaXMgaW5kZWVkIGEgaGVscGVyLiBHb3R0YSBiZSBjZXJ0YWluIGFib3V0IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTgxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA2OjE3LjgyMTg0NjQ1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4OTU1NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvYXJlbmEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmMtMzktICogaW50byBrZXJuZWwgYW5kIHVzZXIgdm1hLlxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xcbmtlcm5lbC9icGYvYXJlbmEuYy00MS0gKiB3aGljaCB3aWxsIGluc2VydCBpdCBpbnRvIGtlcm5lbCB2bV9hcmVhLlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY1NT1zdGF0aWMgdTY0IGNsZWFyX2xvMzIodTY0IHZhbClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02NjMtICovXFxua2VybmVsL2JwZi9hcmVuYS5jOjY2NDpzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTY2NS1cXHRcXHRcXHQgICAgICBib29sIHNsZWVwYWJsZSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz04NDM9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTMwLSAqIFJlc2VydmUgYW4gYXJlbmEgdmlydHVhbCBhZGRyZXNzIHJhbmdlIHdpdGhvdXQgcG9wdWxhdGluZyBpdC4gVGhpcyBjYWxsIHN0b3BzXFxua2VybmVsL2JwZi9hcmVuYS5jOjkzMTogKiBicGZfYXJlbmFfYWxsb2NfcGFnZXMgZnJvbSBhZGRpbmcgcGFnZXMgdG8gdGhpcyByYW5nZS5cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTMyLSAqL1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTEwNDE9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDQzOl9fYnBmX2tmdW5jIHZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQ0LVxcdFxcdFxcdFxcdFxcdGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1MS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA1MjpcXHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNTMtfVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDU0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDU1OnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNTYtXFx0XFx0XFx0XFx0XFx0ICBpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjMtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNjQ6XFx0cmV0dXJuICh2b2lkICopYXJlbmFfYWxsb2NfcGFnZXMoYXJlbmEsIChsb25nKWFkZHJfX2lnbiwgcGFnZV9jbnQsIG5vZGVfaWQsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2NS19XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNjc6dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDY4LVxcdFxcdFxcdFxcdCAgICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA3NS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3NjpcXHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNzctfVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTExMTQ9QlRGX0tGVU5DU19TVEFSVChhcmVuYV9rZnVuY3MpXFxua2VybmVsL2JwZi9hcmVuYS5jOjExMTU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9hbGxvY19wYWdlcywgS0ZfQVJFTkFfUkVUIHwgS0ZfQVJFTkFfQVJHMilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTExNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA2OjE4LjA4MDgwOTM2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTc5NzE1NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEFyZW5hIE1lbW9yeSBVc2FnZSBQYXRjaCoqXG5cbk9rYXksIHNvIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNgIGlzIGluZGVlZCBhIGtmdW5jLCBhcyBleHBlY3RlZC4gVGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIHNvbWUga2V5IG1vZGlmaWNhdGlvbnMgdG8gaG93IHRoZSBhcmVuYSBtZW1vcnkgaXMgbWFuYWdlZC4gSXQncyBjaGFuZ2luZyBgYXJlbmFfYWxsb2NfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV9wYWdlc2AgdG8gcGFzcyB0aGUgYGFyZW5hYCBzdHJ1Y3R1cmUgaW5zdGVhZCBvZiBgc2NyYXRjaF9wYWdlYCB0byBgYXBwbHlfcmFuZ2VfZGF0YWAgYW5kIGBjbGVhcl9yYW5nZV9kYXRhYC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCwgd2hpY2ggaXMgY2FsbGVkIHdoZW4geW91J3JlIGxvb2tpbmcgYXQgdGhlIGZpbGUgZGVzY3JpcHRvciBpbmZvIGZvciB0aGUgbWFwLiBJIHNlZSBhIG5ldyB0ZXN0LCBgYXJlbmFfbWVtX3VzYWdlLmNgLCB0aGF0J3MgZGVzaWduZWQgdG8gZXhlcmNpc2UgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZXNlIGNoYW5nZXMuXG5cbkxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9sczpcblxuKiAgIGBhcHBseV9yYW5nZV9zZXRfY2JgXG4qICAgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYFxuKiAgIGBhcmVuYV9tYXBfbWVtX3VzYWdlYFxuKiAgIGBhcmVuYV9hbGxvY19wYWdlc2BcbiogICBgYXJlbmFfZnJlZV9wYWdlc2BcbiogICBgYXJlbmFfdm1fZmF1bHRgXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLi4uIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG1haW4gb25lLiBJIGNhbiBhc3N1bWUgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCBhcmUgc3RhbmRhcmQgb24gc3l6a2FsbGVyIHRhcmdldHMgKGVzcGVjaWFsbHkgeDg2XFxfNjQpLCBzbyBmb2N1c2luZyBvbiBgQlBGX1NZU0NBTExgIGlzIHN1ZmZpY2llbnQuXG5cbkhlcmUncyBteSByZWFzb25pbmc6IFRoaXMgcGF0Y2ggaXMgaW5qZWN0aW5nIG1lbW9yeSB1c2FnZSB0cmFja2luZyBpbnRvIEJQRiBhcmVuYXMuIFNwZWNpZmljYWxseSwgaXQncyBtYWludGFpbmluZyBhIGNvdW50IG9mIHBvcHVsYXRlZCBwYWdlcyB2aWEgYG5yX3BhZ2VzYC4gVGhlIHVwZGF0ZSBpbnZvbHZlcyBtb2RpZnlpbmcgcGFnZSB0YWJsZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byB1cGRhdGUgdGhpcyBjb3VudGVyLiBUaGUgbmV3IGBhcmVuYV9tYXBfbWVtX3VzYWdlYCBmdW5jdGlvbiBwcm92aWRlcyBhIHdheSB0byBleHBvc2UgdGhpcyB1c2FnZS4gQ2hhbmdlcyBhbHNvIGZsb3cgdGhyb3VnaCBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfdm1fZmF1bHRgLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgY29yZSBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlcmVmb3JlLCBpdCBhYnNvbHV0ZWx5IHJlcXVpcmVzIGZ1enppbmcuIFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHBhZ2UgY291bnRpbmcgbG9naWMgaXMgc291bmQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByYWNlcywgbGVha3MsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSXQncyB0aW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzQzLCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNjoyNi4wNjA1MjkyMjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU1NjUwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXBwbHlfcmFuZ2Vfc2V0X2NiXCIsXG4gICAgXCJhcHBseV9yYW5nZV9jbGVhcl9jYlwiLFxuICAgIFwiYXJlbmFfbWFwX21lbV91c2FnZVwiLFxuICAgIFwiYXJlbmFfYWxsb2NfcGFnZXNcIixcbiAgICBcImFyZW5hX2ZyZWVfcGFnZXNcIixcbiAgICBcImFyZW5hX3ZtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcgdG8gQlBGIGFyZW5hcyBieSBtYWludGFpbmluZyBhIGNvdW50IG9mIHBvcHVsYXRlZCBwYWdlcyAoYG5yX3BhZ2VzYCkuIEl0IG1vZGlmaWVzIHRoZSBwYWdlIHRhYmxlIGNhbGxiYWNrcyAoYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmApIHRvIHVwZGF0ZSB0aGlzIGNvdW50ZXIgYW5kIGV4cG9zZXMgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHRoZXNlIGNhbGxiYWNrcyBpbiBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfdm1fZmF1bHRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGFyZW5hIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcGFnZSBjb3VudGluZyBsb2dpYyBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJhY2VzIG9yIG1lbW9yeSBsZWFrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFwcGx5X3JhbmdlX3NldF9jYlwiLFxuICAgIFwiYXBwbHlfcmFuZ2VfY2xlYXJfY2JcIixcbiAgICBcImFyZW5hX21hcF9tZW1fdXNhZ2VcIixcbiAgICBcImFyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJhcmVuYV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJhcmVuYV92bV9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWVtb3J5IHVzYWdlIHRyYWNraW5nIHRvIEJQRiBhcmVuYXMgYnkgbWFpbnRhaW5pbmcgYSBjb3VudCBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApLiBJdCBtb2RpZmllcyB0aGUgcGFnZSB0YWJsZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byB1cGRhdGUgdGhpcyBjb3VudGVyIGFuZCBleHBvc2VzIGl0IHZpYSBgYXJlbmFfbWFwX21lbV91c2FnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB0aGVzZSBjYWxsYmFja3MgaW4gYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX3ZtX2ZhdWx0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHBhZ2UgY291bnRpbmcgbG9naWMgaXMgcm9idXN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSByYWNlcyBvciBtZW1vcnkgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workfloww2pww[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 18:41:39 +0000 UTC FinishedAt: 2026-07-16 19:06:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "ff685978-352c-44b6-9961-d6fdead9d01e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "apply_range_set_cb", "apply_range_clear_cb", "arena_map_mem_usage", "arena_alloc_pages", "arena_free_pages", "arena_vm_fault" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXBwbHlfcmFuZ2Vfc2V0X2NiJiMzNDssCiAgICAmIzM0O2FwcGx5X3JhbmdlX2NsZWFyX2NiJiMzNDssCiAgICAmIzM0O2FyZW5hX21hcF9tZW1fdXNhZ2UmIzM0OywKICAgICYjMzQ7YXJlbmFfYWxsb2NfcGFnZXMmIzM0OywKICAgICYjMzQ7YXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV92bV9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1lbW9yeSB1c2FnZSB0cmFja2luZyB0byBCUEYgYXJlbmFzIGJ5IG1haW50YWluaW5nIGEgY291bnQgb2YgcG9wdWxhdGVkIHBhZ2VzIChgbnJfcGFnZXNgKS4gSXQgbW9kaWZpZXMgdGhlIHBhZ2UgdGFibGUgY2FsbGJhY2tzIChgYXBwbHlfcmFuZ2Vfc2V0X2NiYCwgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCkgdG8gdXBkYXRlIHRoaXMgY291bnRlciBhbmQgZXhwb3NlcyBpdCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdGhlc2UgY2FsbGJhY2tzIGluIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV92bV9mYXVsdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBwYWdlIGNvdW50aW5nIGxvZ2ljIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJhY2VzIG9yIG1lbW9yeSBsZWFrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOTowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYyNzBlNWZkYjk0MDk4MjhiOGM5ZmUyOGNjZGZkYmUzNjgyZjVhMGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxOTowNTozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDgwYjdiOGE2OTQ0NjQ1Li5iYzM0NjAyMTE2MDQwMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNTUsOCAmIzQzOzU1LDEwIEBAIHN0cnVjdCBicGZfYXJlbmEge1xuIFx0c3RydWN0IHZtX3N0cnVjdCAqa2Vybl92bTtcbiBcdHN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7XG4gXHRzdHJ1Y3QgcmFuZ2VfdHJlZSBydDtcbi1cdC8qIHByb3RlY3RzIHJ0ICovXG4mIzQzO1x0LyogcHJvdGVjdHMgcnQgYW5kIG5yX3BhZ2VzICovXG4gXHRycXNwaW5sb2NrX3Qgc3BpbmxvY2s7XG4mIzQzO1x0LyogbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBwb3B1bGF0ZWQgaW4gdGhlIGFyZW5hICovXG4mIzQzO1x0dTY0IG5yX3BhZ2VzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCB2bWFfbGlzdDtcbiBcdC8qIHByb3RlY3RzIHZtYV9saXN0ICovXG4gXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbkBAIC0xNDMsMTQgJiM0MzsxNDUsMTQgQEAgc3RhdGljIGxvbmcgY29tcHV0ZV9wZ29mZihzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkcilcbiB9XG4gXG4gc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEge1xuJiM0MztcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xuIFx0c3RydWN0IHBhZ2UgKipwYWdlcztcbi1cdHN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7XG4gXHRpbnQgaTtcbiB9O1xuIFxuIHN0cnVjdCBjbGVhcl9yYW5nZV9kYXRhIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcbiBcdHN0cnVjdCBsbGlzdF9oZWFkICpmcmVlX3BhZ2VzO1xuLVx0c3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbkBAIC0xODAsNyAmIzQzOzE4Miw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiBcbiBcdFx0aWYgKHB0ZV9ub25lKG9sZCkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdGlmIChXQVJOX09OX09OQ0UocHRlX3BhZ2Uob2xkKSAhPSBkLVx1MDAzZXNjcmF0Y2hfcGFnZSkpXG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC1cdTAwM2VhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpKVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdHB0ZXBfZ2V0X2FuZF9jbGVhcihcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUpO1xuIFx0XHRmbHVzaF90bGJfYmVmb3JlX3NldChhZGRyKTtcbkBAIC0xOTYsNiAmIzQzOzE5OCw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiBcdHNldF9wdGVfYXQoXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBwdGV2YWwpO1xuICNlbmRpZlxuIFx0ZC1cdTAwM2VpJiM0MzsmIzQzOztcbiYjNDM7XHRkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzJiM0MzsmIzQzOztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMjcsMTAgJiM0MzsyMzAsMTEgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9jbGVhcl9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4gXHQgKiBzY3JhdGNoZXMgaXRzIFBURS4gQSBsYXRlciBicGZfYXJlbmFfZnJlZV9wYWdlcygpIG92ZXIgdGhhdCByYW5nZSB3YWxrc1xuIFx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxuIFx0ICovXG4tXHRpZiAocGFnZSA9PSBkLVx1MDAzZXNjcmF0Y2hfcGFnZSlcbiYjNDM7XHRpZiAocGFnZSA9PSBkLVx1MDAzZWFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRfX2xsaXN0X2FkZChcdTAwMjZwYWdlLVx1MDAzZXBjcF9sbGlzdCwgZC1cdTAwM2VmcmVlX3BhZ2VzKTtcbiYjNDM7XHRkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzLS07XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDEzLDcgJiM0Mzs0MTcsOSBAQCBzdGF0aWMgaW50IGFyZW5hX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFxuIHN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIHtcbi1cdHJldHVybiAwO1xuJiM0MztcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICh1NjQpUkVBRF9PTkNFKGFyZW5hLVx1MDAzZW5yX3BhZ2VzKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiB9XG4gXG4gc3RydWN0IHZtYV9saXN0IHtcbkBAIC01MDYsOCAmIzQzOzUxMiw3IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbiBcbi1cdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5wYWdlcyA9IFx1MDAyNnBhZ2UsIC5pID0gMCxcbi1cdFx0XHRcdFx0IC5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UgfTtcbiYjNDM7XHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG4gXHQvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqL1xuIFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG4gXHRpZiAocmV0KSB7XG5AQCAtNjk2LDggJiM0Mzs3MDEsOCBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudFxuIFx0XHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiYjNDM7XHRkYXRhLmFyZW5hID0gYXJlbmE7XG4gXHRkYXRhLnBhZ2VzID0gcGFnZXM7XG4tXHRkYXRhLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZTtcbiBcbiBcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfcGFnZXM7XG5AQCAtODczLDggJiM0Mzs4NzgsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxuIFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4gXG4gXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2ZnJlZV9wYWdlcyk7XG4mIzQzO1x0Y2RhdGEuYXJlbmEgPSBhcmVuYTtcbiBcdGNkYXRhLmZyZWVfcGFnZXMgPSBcdTAwMjZmcmVlX3BhZ2VzO1xuLVx0Y2RhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlO1xuIFx0LyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBzdHJ1Y3QgcGFnZXMgKi9cbiBcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwga2FkZHIsIHBhZ2VfY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIFx0XHRcdFx0ICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgXHUwMDI2Y2RhdGEpO1xuQEAgLTk4MSw4ICYjNDM7OTg2LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbiBcbiBcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZmcmVlX3BhZ2VzKTtcbiYjNDM7XHRjZGF0YS5hcmVuYSA9IGFyZW5hO1xuIFx0Y2RhdGEuZnJlZV9wYWdlcyA9IFx1MDAyNmZyZWVfcGFnZXM7XG4tXHRjZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2U7XG4gXHRhcmVuYV92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XG4gXHR1c2VyX3ZtX3N0YXJ0ID0gYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGFyZW5hKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmNcbmluZGV4IGQ5ODU3N2E2YmFiYzBlLi4xYWQ1ZDAzZDA3YWRiMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jXG5AQCAtMjIyLDcgJiM0MzsyMjIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3N0b3JlX3JlbGVhc2Uoc3RydWN0IGFyZW5hX2F0b21pY3MgKnNrZWwpXG4gXHRcdCAgXCYjMzQ7c3RvcmVfcmVsZWFzZTY0X3Jlc3VsdFwmIzM0Oyk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9hdG9taWNzKHZvaWQpXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfYXRvbWljcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsO1xuIFx0aW50IGVycjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXG5pbmRleCA0YjRhZGIzZjRiNzFlYi4uMDFmY2Y0OTY1ZWE0M2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmNcbkBAIC02Niw3ICYjNDM7NjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQodm9pZClcbiBcdGNsb3NlKG1hcF9mZCk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWUodm9pZClcbiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWUodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtvbmVfcGFzdF9lbmRcJiMzNDspKVxuIFx0XHR0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcbmluZGV4IGQ2OWZkMjQ2NWY1MzY3Li45MWNjZjA0MDI5ODA0MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jXG5AQCAtODEsNyAmIzQzOzgxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9odGFiX2FzbSh2b2lkKVxuIFx0YXJlbmFfaHRhYl9hc21fX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9odGFiKHZvaWQpXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfaHRhYih2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX2h0YWJfbGx2bVwmIzM0OykpXG4gXHRcdHRlc3RfYXJlbmFfaHRhYl9sbHZtKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jXG5pbmRleCA0ZjI4NjZhNjE1Y2U1Mi4uMjY0OGUwNmY1M2QwNzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuY1xuQEAgLTY4LDcgJiM0Mzs2OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfbGlzdF9hZGRfZGVsKGludCBjbnQsIGJvb2wgbm9uc2xlZXBhYmxlKVxuIFx0YXJlbmFfbGlzdF9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX2xpc3Qodm9pZClcbiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9saXN0KHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YXJlbmFfbGlzdF8xXCYjMzQ7KSlcbiBcdFx0dGVzdF9hcmVuYV9saXN0X2FkZF9kZWwoMSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTRjMmQxYTFkNjczY2Zcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jXG5AQCAtMCwwICYjNDM7MSwxMjIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvdXNlci5oXHUwMDNlXG4mIzQzOyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YXJlbmFfbWVtX3VzYWdlLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogYXJlbmFfbWFwX21lbV91c2FnZSgpIGlzIHN1cmZhY2VkIHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgbWFwJiMzOTtzXG4mIzQzOyAqIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9mZGluZm8vXHUwMDNjZmRcdTAwM2UgXCYjMzQ7bWVtbG9jazpcJiMzNDsgbGluZSAodGhlIHNhbWUgdmFsdWUgYnBmdG9vbCBtYXAgc2hvd1xuJiM0MzsgKiBwcmludHMpLiBSZWFkIGl0IGRpcmVjdGx5IHNvIHRoZSB0ZXN0IGhhcyBubyBleHRlcm5hbCBkZXBlbmRlbmN5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGxvbmcgbWFwX21lbWxvY2soaW50IG1hcF9mZClcbiYjNDM7e1xuJiM0MztcdGNoYXIgcGF0aFs2NF0sIGxpbmVbMTI4XTtcbiYjNDM7XHRsb25nIG1lbWxvY2sgPSAtMTtcbiYjNDM7XHRGSUxFICpmO1xuJiM0MztcbiYjNDM7XHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0Oy9wcm9jL3NlbGYvZmRpbmZvLyVkXCYjMzQ7LCBtYXBfZmQpO1xuJiM0MztcdGYgPSBmb3BlbihwYXRoLCBcJiMzNDtyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoZiwgXCYjMzQ7b3Blbl9mZGluZm9cJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7XG4mIzQzO1x0XHRpZiAoc3NjYW5mKGxpbmUsIFwmIzM0O21lbWxvY2s6XFx0JWxkXCYjMzQ7LCBcdTAwMjZtZW1sb2NrKSA9PSAxKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0ZmNsb3NlKGYpO1xuJiM0MztcdEFTU0VSVF9ORVEobWVtbG9jaywgLTEsIFwmIzM0O3BhcnNlX21lbWxvY2tcJiMzNDspO1xuJiM0MztcdHJldHVybiBtZW1sb2NrO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ1bihzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XG4mIzQzO1x0aW50IGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBcdTAwMjZvcHRzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBuYW1lKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgbmFtZSkpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtX3VzYWdlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXJlbmFfbWVtX3VzYWdlICpza2VsO1xuJiM0MztcdGNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7XG4mIzQzO1x0Y2hhciAqYmFzZTtcbiYjNDM7XHRzaXplX3Qgc3o7XG4mIzQzO1x0aW50IGZkLCBpO1xuJiM0MztcbiYjNDM7XHRza2VsID0gYXJlbmFfbWVtX3VzYWdlX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O29wZW5fbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0ZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuYXJlbmEpO1xuJiM0MztcbiYjNDM7XHQvKiBGcmVzaCBhcmVuYTogbm8gZGF0YSBwYWdlcywgYW5kIHRoZSBzY3JhdGNoIHBhZ2UgaXMgbm90IGNvdW50ZWQuICovXG4mIzQzO1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXCYjMzQ7aW5pdGlhbFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEJQRi1zaWRlIGFsbG9jYXRpb24gb2YgMTcgcGFnZXMuICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYWxsb2NfY250ID0gMTc7XG4mIzQzO1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmFsbG9jLCBcJiMzNDthbGxvY1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdFxuJiM0MztcdCAqIGlzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSksIG5vdCBhIG1pc2NvdW50IC0tIGZsYWcgaXQgZGlzdGluY3RseSBzbyBhXG4mIzQzO1x0ICogcmVkIENJIHJ1biBpcyBub3QgbWlzdGFrZW4gZm9yIGEgY291bnRpbmcgYnVnLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWJzcy1cdTAwM2VwdHIsIFwmIzM0O2FyZW5hX2FsbG9jX3BhZ2VzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDE3ICogcHMsIFwmIzM0O2FmdGVyX2FsbG9jXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogRnJlZSBhIHNpbmdsZSBwYWdlIChhcmVuYV9mcmVlX3BhZ2VzIHBhZ2VfY250PT0xIHBhdGgpLiAqL1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAwO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfY250ID0gMTtcbiYjNDM7XHRpZiAocnVuKHNrZWwtXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXCYjMzQ7ZnJlZV9vbmVcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTYgKiBwcywgXCYjMzQ7YWZ0ZXJfZnJlZV9vbmVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBGcmVlIHRlbiBwYWdlcyBpbiBvbmUgY2FsbCAoYnVsayBwYXRoKTsgb25seSB0aGUgZnJlZWQgcGFnZXMgY291bnQuICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9ieXRlX29mZiA9IDEgKiBwcztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2NudCA9IDEwO1xuJiM0MztcdGlmIChydW4oc2tlbC1cdTAwM2Vwcm9ncy5mcmVlX3BhZ2VzLCBcJiMzNDtmcmVlX2J1bGtcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgNiAqIHBzLCBcJiMzNDthZnRlcl9mcmVlX2J1bGtcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBGcmVlIHRoZSByZW1haW5pbmcgc2l4IC1cdTAwM2UgYXJlbmEgZW1wdHkgYWdhaW4uICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9ieXRlX29mZiA9IDExICogcHM7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9jbnQgPSA2O1xuJiM0MztcdGlmIChydW4oc2tlbC1cdTAwM2Vwcm9ncy5mcmVlX3BhZ2VzLCBcJiMzNDtmcmVlX3Jlc3RcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXCYjMzQ7YWZ0ZXJfZnJlZV9yZXN0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2VyLXNwYWNlIGZhdWx0LWluOiB0b3VjaGluZyB1bmFsbG9jYXRlZCBhcmVuYSBwYWdlcyBhbGxvY2F0ZXMgdGhlbVxuJiM0MztcdCAqIHRocm91Z2ggYXJlbmFfdm1fZmF1bHQoKS4gbGliYnBmIG1tYXAoKXMgdGhlIGFyZW5hIGF0IG1hcF9leHRyYSBkdXJpbmdcbiYjNDM7XHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoc2tlbC1cdTAwM2VtYXBzLmFyZW5hLCBcdTAwMjZzeik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJhc2UsIFwmIzM0O2FyZW5hX2Jhc2VcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgODsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRiYXNlW2kgKiBwc10gPSAxO1xuJiM0MztcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDggKiBwcywgXCYjMzQ7YWZ0ZXJfZmF1bHRpblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRnJlZSB0aGUgZmF1bHRlZC1pbiBwYWdlcyBmcm9tIEJQRi4gVGhleSBhcmUgbWFwcGVkIGludG8gdGhlIHVzZXIgdm1hXG4mIzQzO1x0ICogKGVsZXZhdGVkIHJlZmNvdW50KSwgc28gdGhpcyBhbHNvIGV4ZXJjaXNlcyB0aGUgemFwIHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHRyID0gYmFzZTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2J5dGVfb2ZmID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2NudCA9IDg7XG4mIzQzO1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFwmIzM0O2ZyZWVfZmF1bHRlZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAwLCBcJiMzNDthZnRlcl9mcmVlX2ZhdWx0ZWRcJiMzNDspO1xuJiM0MztvdXQ6XG4mIzQzO1x0YXJlbmFfbWVtX3VzYWdlX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suY1xuaW5kZXggYWNiOWQ1M2I1OTczM2YuLjU0NWIwNWQ3YTBhYTcyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXG5AQCAtMTAxLDcgJiM0MzsxMDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9ja19zaXplKGludCBzaXplKVxuIFx0cmV0dXJuO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfc3Bpbl9sb2NrKHZvaWQpXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfc3Bpbl9sb2NrKHZvaWQpXG4ge1xuIFx0cmVwZWF0ID0gMTAwMDtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX3NwaW5fbG9ja18xXCYjMzQ7KSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXG5pbmRleCBmODFhMGMwNjY1MDU5Ni4uMGMxYzZjYmZhMGYxOWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmNcbkBAIC0yMyw3ICYjNDM7MjMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3N0cih2b2lkKVxuIFx0YXJlbmFfc3Ryc2VhcmNoX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfc3Ryc2VhcmNoKHZvaWQpXG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfc3Ryc2VhcmNoKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YXJlbmFfc3Ryc2VhcmNoXCYjMzQ7KSlcbiBcdFx0dGVzdF9hcmVuYV9zdHIoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xuaW5kZXggYmE1YTVhNTBmN2MwN2QuLmRmN2U0YjhkYzM5NDU2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xuQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3BhcmFsbGVsX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW1cbiBcdHJ1bl9saWJhcmVuYV9wYXJhbGxlbF9maW5pKHNrZWwsIG5hbWUsIHByZWZpeGxlbik7XG4gfVxuIFxuLXZvaWQgdGVzdF9saWJhcmVuYSh2b2lkKVxuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2xpYmFyZW5hKHZvaWQpXG4ge1xuIFx0c3RydWN0IGFyZW5hX2FsbG9jX3Jlc2VydmVfYXJncyBhcmdzO1xuIFx0c3RydWN0IGxpYmFyZW5hICpza2VsO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xuaW5kZXggZjg5NzQwNWY3MDFkZDUuLjljMzFiMTdkYmYzOTFmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcbkBAIC04NSw3ICYjNDM7ODUsNyBAQCBzdGF0aWMgdm9pZCBydW5fdGVzdCh2b2lkKVxuICAqIFJ1biB0aGUgdGVzdCBkZXBlbmRpbmcgb24gd2hldGhlciBMTFZNIGNhbiBjb21waWxlIGFyZW5hIEFTQU5cbiAgKiBwcm9ncmFtcy5cbiAgKi9cbi12b2lkIHRlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxuJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcbiB7XG4gI2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxuIFx0cnVuX3Rlc3QoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTBkOWQ2YWM4NmY2YjNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuY1xuQEAgLTAsMCAmIzQzOzEsMzkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfYXJlbmFfY29tbW9uLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4mIzQzO1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMTAwMCk7IC8qIG51bWJlciBvZiBwYWdlcyAqL1xuJiM0MzsjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuJiM0MztcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDMyKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuJiM0MzsjZWxzZVxuJiM0MztcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuJiM0MzsjZW5kaWZcbiYjNDM7fSBhcmVuYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7dm9pZCBfX2FyZW5hICpwdHI7XG4mIzQzO2ludCBhbGxvY19jbnQ7XHRcdC8qIGluOiAgcGFnZXMgdG8gYWxsb2NhdGUgKi9cbiYjNDM7bG9uZyBmcmVlX2J5dGVfb2ZmO1x0LyogaW46ICBieXRlIG9mZnNldCB3aXRoaW4gcHRyIHRvIHN0YXJ0IGZyZWVpbmcgKi9cbiYjNDM7aW50IGZyZWVfY250O1x0XHQvKiBpbjogIHBhZ2VzIHRvIGZyZWUgKi9cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztpbnQgYWxsb2Modm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0cHRyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCBhbGxvY19jbnQsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0cmV0dXJuIHB0ciA/IDAgOiAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7aW50IGZyZWVfcGFnZXModm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwdHIpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKGNoYXIgX19hcmVuYSAqKXB0ciAmIzQzOyBmcmVlX2J5dGVfb2ZmLCBmcmVlX2NudCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcHBseV9yYW5nZV9zZXRfY2ImIzM0OywKICAgICYjMzQ7YXBwbHlfcmFuZ2VfY2xlYXJfY2ImIzM0OywKICAgICYjMzQ7YXJlbmFfbWFwX21lbV91c2FnZSYjMzQ7LAogICAgJiMzNDthcmVuYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FyZW5hX3ZtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWVtb3J5IHVzYWdlIHRyYWNraW5nIHRvIEJQRiBhcmVuYXMgYnkgbWFpbnRhaW5pbmcgYSBjb3VudCBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApLiBJdCBtb2RpZmllcyB0aGUgcGFnZSB0YWJsZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byB1cGRhdGUgdGhpcyBjb3VudGVyIGFuZCBleHBvc2VzIGl0IHZpYSBgYXJlbmFfbWFwX21lbV91c2FnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB0aGVzZSBjYWxsYmFja3MgaW4gYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX3ZtX2ZhdWx0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHBhZ2UgY291bnRpbmcgbG9naWMgaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmFjZXMgb3IgbWVtb3J5IGxlYWtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MjcwZTVmZGI5NDA5ODI4YjhjOWZlMjhjY2RmZGJlMzY4MmY1YTBlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMTk6MDU6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmMKaW5kZXggODBiN2I4YTY5NDQ2NDUuLmJjMzQ2MDIxMTYwNDAxIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jCkBAIC01NSw4ICYjNDM7NTUsMTAgQEAgc3RydWN0IGJwZl9hcmVuYSB7CiAJc3RydWN0IHZtX3N0cnVjdCAqa2Vybl92bTsKIAlzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlOwogCXN0cnVjdCByYW5nZV90cmVlIHJ0OwotCS8qIHByb3RlY3RzIHJ0ICovCiYjNDM7CS8qIHByb3RlY3RzIHJ0IGFuZCBucl9wYWdlcyAqLwogCXJxc3BpbmxvY2tfdCBzcGlubG9jazsKJiM0MzsJLyogbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBwb3B1bGF0ZWQgaW4gdGhlIGFyZW5hICovCiYjNDM7CXU2NCBucl9wYWdlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHZtYV9saXN0OwogCS8qIHByb3RlY3RzIHZtYV9saXN0ICovCiAJc3RydWN0IG11dGV4IGxvY2s7CkBAIC0xNDMsMTQgJiM0MzsxNDUsMTQgQEAgc3RhdGljIGxvbmcgY29tcHV0ZV9wZ29mZihzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkcikKIH0KIAogc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgewomIzQzOwlzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTsKIAlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwotCXN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7CiAJaW50IGk7CiB9OwogCiBzdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7CiYjNDM7CXN0cnVjdCBicGZfYXJlbmEgKmFyZW5hOwogCXN0cnVjdCBsbGlzdF9oZWFkICpmcmVlX3BhZ2VzOwotCXN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7CiB9OwogCiBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpCkBAIC0xODAsNyAmIzQzOzE4Miw3IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSkKIAogCQlpZiAocHRlX25vbmUob2xkKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC0mZ3Q7c2NyYXRjaF9wYWdlKSkKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UocHRlX3BhZ2Uob2xkKSAhPSBkLSZndDthcmVuYS0mZ3Q7c2NyYXRjaF9wYWdlKSkKIAkJCXJldHVybiAtRUJVU1k7CiAJCXB0ZXBfZ2V0X2FuZF9jbGVhcigmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSk7CiAJCWZsdXNoX3RsYl9iZWZvcmVfc2V0KGFkZHIpOwpAQCAtMTk2LDYgJiM0MzsxOTgsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpCiAJc2V0X3B0ZV9hdCgmYW1wO2luaXRfbW0sIGFkZHIsIHB0ZSwgcHRldmFsKTsKICNlbmRpZgogCWQtJmd0O2kmIzQzOyYjNDM7OwomIzQzOwlkLSZndDthcmVuYS0mZ3Q7bnJfcGFnZXMmIzQzOyYjNDM7OwogCXJldHVybiAwOwogfQogCkBAIC0yMjcsMTAgJiM0MzsyMzAsMTEgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9jbGVhcl9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpCiAJICogc2NyYXRjaGVzIGl0cyBQVEUuIEEgbGF0ZXIgYnBmX2FyZW5hX2ZyZWVfcGFnZXMoKSBvdmVyIHRoYXQgcmFuZ2Ugd2Fsa3MKIAkgKiBoZXJlLiBXaXRob3V0IHRoZSBza2lwLCBzY3JhdGNoX3BhZ2Ugd291bGQgYmUgZnJlZWQuCiAJICovCi0JaWYgKHBhZ2UgPT0gZC0mZ3Q7c2NyYXRjaF9wYWdlKQomIzQzOwlpZiAocGFnZSA9PSBkLSZndDthcmVuYS0mZ3Q7c2NyYXRjaF9wYWdlKQogCQlyZXR1cm4gMDsKIAogCV9fbGxpc3RfYWRkKCZhbXA7cGFnZS0mZ3Q7cGNwX2xsaXN0LCBkLSZndDtmcmVlX3BhZ2VzKTsKJiM0MzsJZC0mZ3Q7YXJlbmEtJmd0O25yX3BhZ2VzLS07CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxMyw3ICYjNDM7NDE3LDkgQEAgc3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIAogc3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApCiB7Ci0JcmV0dXJuIDA7CiYjNDM7CXN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTsKJiM0MzsKJiM0MzsJcmV0dXJuICh1NjQpUkVBRF9PTkNFKGFyZW5hLSZndDtucl9wYWdlcykgJmx0OyZsdDsgUEFHRV9TSElGVDsKIH0KIAogc3RydWN0IHZtYV9saXN0IHsKQEAgLTUwNiw4ICYjNDM7NTEyLDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJaWYgKHJldCkKIAkJZ290byBvdXRfc2lnc2Vndl9tZW1jZzsKIAotCXN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5wYWdlcyA9ICZhbXA7cGFnZSwgLmkgPSAwLAotCQkJCQkgLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UgfTsKJiM0MzsJc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9ICZhbXA7cGFnZSwgLmkgPSAwIH07CiAJLyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi8KIAlyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgTlVNQV9OT19OT0RFLCAxLCAmYW1wO3BhZ2UpOwogCWlmIChyZXQpIHsKQEAgLTY5Niw4ICYjNDM7NzAxLDggQEAgc3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQKIAkJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKIAkJcmV0dXJuIDA7CiAJfQomIzQzOwlkYXRhLmFyZW5hID0gYXJlbmE7CiAJZGF0YS5wYWdlcyA9IHBhZ2VzOwotCWRhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtJmd0O3NjcmF0Y2hfcGFnZTsKIAogCWlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncykpCiAJCWdvdG8gb3V0X2ZyZWVfcGFnZXM7CkBAIC04NzMsOCAmIzQzOzg3OCw4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsCiAJcmFuZ2VfdHJlZV9zZXQoJmFtcDthcmVuYS0mZ3Q7cnQsIHBnb2ZmLCBwYWdlX2NudCk7CiAKIAlpbml0X2xsaXN0X2hlYWQoJmFtcDtmcmVlX3BhZ2VzKTsKJiM0MzsJY2RhdGEuYXJlbmEgPSBhcmVuYTsKIAljZGF0YS5mcmVlX3BhZ2VzID0gJmFtcDtmcmVlX3BhZ2VzOwotCWNkYXRhLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2U7CiAJLyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBzdHJ1Y3QgcGFnZXMgKi8KIAlhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKCZhbXA7aW5pdF9tbSwga2FkZHIsIHBhZ2VfY250ICZsdDsmbHQ7IFBBR0VfU0hJRlQsCiAJCQkJICAgICBhcHBseV9yYW5nZV9jbGVhcl9jYiwgJmFtcDtjZGF0YSk7CkBAIC05ODEsOCAmIzQzOzk4Niw4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlicGZfbWFwX21lbWNnX2VudGVyKCZhbXA7YXJlbmEtJmd0O21hcCwgJmFtcDtvbGRfbWVtY2csICZhbXA7bmV3X21lbWNnKTsKIAogCWluaXRfbGxpc3RfaGVhZCgmYW1wO2ZyZWVfcGFnZXMpOwomIzQzOwljZGF0YS5hcmVuYSA9IGFyZW5hOwogCWNkYXRhLmZyZWVfcGFnZXMgPSAmYW1wO2ZyZWVfcGFnZXM7Ci0JY2RhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtJmd0O3NjcmF0Y2hfcGFnZTsKIAlhcmVuYV92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7CiAJdXNlcl92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfdXNlcl92bV9zdGFydChhcmVuYSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuYwppbmRleCBkOTg1NzdhNmJhYmMwZS4uMWFkNWQwM2QwN2FkYjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmMKQEAgLTIyMiw3ICYjNDM7MjIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zdG9yZV9yZWxlYXNlKHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsKQogCQkgICYjMzQ7c3RvcmVfcmVsZWFzZTY0X3Jlc3VsdCYjMzQ7KTsKIH0KIAotdm9pZCB0ZXN0X2FyZW5hX2F0b21pY3Modm9pZCkKJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2F0b21pY3Modm9pZCkKIHsKIAlzdHJ1Y3QgYXJlbmFfYXRvbWljcyAqc2tlbDsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuYwppbmRleCA0YjRhZGIzZjRiNzFlYi4uMDFmY2Y0OTY1ZWE0M2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jCkBAIC02Niw3ICYjNDM7NjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQodm9pZCkKIAljbG9zZShtYXBfZmQpOwogfQogCi12b2lkIHRlc3RfYXJlbmFfZGlyZWN0X3ZhbHVlKHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWUodm9pZCkKIHsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O29uZV9wYXN0X2VuZCYjMzQ7KSkKIAkJdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmMKaW5kZXggZDY5ZmQyNDY1ZjUzNjcuLjkxY2NmMDQwMjk4MDQwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jCkBAIC04MSw3ICYjNDM7ODEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2h0YWJfYXNtKHZvaWQpCiAJYXJlbmFfaHRhYl9hc21fX2Rlc3Ryb3koc2tlbCk7CiB9CiAKLXZvaWQgdGVzdF9hcmVuYV9odGFiKHZvaWQpCiYjNDM7dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9odGFiKHZvaWQpCiB7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthcmVuYV9odGFiX2xsdm0mIzM0OykpCiAJCXRlc3RfYXJlbmFfaHRhYl9sbHZtKCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmMKaW5kZXggNGYyODY2YTYxNWNlNTIuLjI2NDhlMDZmNTNkMDcwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jCkBAIC02OCw3ICYjNDM7NjgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbChpbnQgY250LCBib29sIG5vbnNsZWVwYWJsZSkKIAlhcmVuYV9saXN0X19kZXN0cm95KHNrZWwpOwogfQogCi12b2lkIHRlc3RfYXJlbmFfbGlzdCh2b2lkKQomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbGlzdCh2b2lkKQogewogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfbGlzdF8xJiMzNDspKQogCQl0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbCgxLCBmYWxzZSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNGMyZDFhMWQ2NzNjZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jCkBAIC0wLDAgJiM0MzsxLDEyMiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3VzZXIuaCZndDsKJiM0MzsjaWZuZGVmIFBBR0VfU0laRSAvKiBvbiBzb21lIGFyY2hzIGl0IGNvbWVzIGluIHN5cy91c2VyLmggKi8KJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2RlZmluZSBQQUdFX1NJWkUgZ2V0cGFnZXNpemUoKQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7YXJlbmFfbWVtX3VzYWdlLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBhcmVuYV9tYXBfbWVtX3VzYWdlKCkgaXMgc3VyZmFjZWQgdG8gdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBtYXAmIzM5O3MKJiM0MzsgKiAvcHJvYy8mbHQ7cGlkJmd0Oy9mZGluZm8vJmx0O2ZkJmd0OyAmIzM0O21lbWxvY2s6JiMzNDsgbGluZSAodGhlIHNhbWUgdmFsdWUgYnBmdG9vbCBtYXAgc2hvdwomIzQzOyAqIHByaW50cykuIFJlYWQgaXQgZGlyZWN0bHkgc28gdGhlIHRlc3QgaGFzIG5vIGV4dGVybmFsIGRlcGVuZGVuY3kuCiYjNDM7ICovCiYjNDM7c3RhdGljIGxvbmcgbWFwX21lbWxvY2soaW50IG1hcF9mZCkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF0sIGxpbmVbMTI4XTsKJiM0MzsJbG9uZyBtZW1sb2NrID0gLTE7CiYjNDM7CUZJTEUgKmY7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDsvcHJvYy9zZWxmL2ZkaW5mby8lZCYjMzQ7LCBtYXBfZmQpOwomIzQzOwlmID0gZm9wZW4ocGF0aCwgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoZiwgJiMzNDtvcGVuX2ZkaW5mbyYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKJiM0MzsJCWlmIChzc2NhbmYobGluZSwgJiMzNDttZW1sb2NrOlx0JWxkJiMzNDssICZhbXA7bWVtbG9jaykgPT0gMSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwlmY2xvc2UoZik7CiYjNDM7CUFTU0VSVF9ORVEobWVtbG9jaywgLTEsICYjMzQ7cGFyc2VfbWVtbG9jayYjMzQ7KTsKJiM0MzsJcmV0dXJuIG1lbWxvY2s7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnVuKHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJaW50IGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCAmYW1wO29wdHMpOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsIG5hbWUpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgbmFtZSkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbV91c2FnZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGFyZW5hX21lbV91c2FnZSAqc2tlbDsKJiM0MzsJY29uc3QgbG9uZyBwcyA9IFBBR0VfU0laRTsKJiM0MzsJY2hhciAqYmFzZTsKJiM0MzsJc2l6ZV90IHN6OwomIzQzOwlpbnQgZmQsIGk7CiYjNDM7CiYjNDM7CXNrZWwgPSBhcmVuYV9tZW1fdXNhZ2VfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7b3Blbl9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwlmZCA9IGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMuYXJlbmEpOwomIzQzOwomIzQzOwkvKiBGcmVzaCBhcmVuYTogbm8gZGF0YSBwYWdlcywgYW5kIHRoZSBzY3JhdGNoIHBhZ2UgaXMgbm90IGNvdW50ZWQuICovCiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsICYjMzQ7aW5pdGlhbCYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogQlBGLXNpZGUgYWxsb2NhdGlvbiBvZiAxNyBwYWdlcy4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDthbGxvY19jbnQgPSAxNzsKJiM0MzsJaWYgKHJ1bihza2VsLSZndDtwcm9ncy5hbGxvYywgJiMzNDthbGxvYyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwkvKgomIzQzOwkgKiBBIE5VTEwgcHRyIG1lYW5zIGJwZl9hcmVuYV9hbGxvY19wYWdlcygpIGl0c2VsZiBmYWlsZWQgKGUuZy4gdGhlIGhvc3QKJiM0MzsJICogaXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlKSwgbm90IGEgbWlzY291bnQgLS0gZmxhZyBpdCBkaXN0aW5jdGx5IHNvIGEKJiM0MzsJICogcmVkIENJIHJ1biBpcyBub3QgbWlzdGFrZW4gZm9yIGEgY291bnRpbmcgYnVnLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtJmd0O2Jzcy0mZ3Q7cHRyLCAmIzM0O2FyZW5hX2FsbG9jX3BhZ2VzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDE3ICogcHMsICYjMzQ7YWZ0ZXJfYWxsb2MmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEZyZWUgYSBzaW5nbGUgcGFnZSAoYXJlbmFfZnJlZV9wYWdlcyBwYWdlX2NudD09MSBwYXRoKS4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2J5dGVfb2ZmID0gMDsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2NudCA9IDE7CiYjNDM7CWlmIChydW4oc2tlbC0mZ3Q7cHJvZ3MuZnJlZV9wYWdlcywgJiMzNDtmcmVlX29uZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAxNiAqIHBzLCAmIzM0O2FmdGVyX2ZyZWVfb25lJiMzNDspOwomIzQzOwomIzQzOwkvKiBGcmVlIHRlbiBwYWdlcyBpbiBvbmUgY2FsbCAoYnVsayBwYXRoKTsgb25seSB0aGUgZnJlZWQgcGFnZXMgY291bnQuICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZnJlZV9ieXRlX29mZiA9IDEgKiBwczsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDtmcmVlX2NudCA9IDEwOwomIzQzOwlpZiAocnVuKHNrZWwtJmd0O3Byb2dzLmZyZWVfcGFnZXMsICYjMzQ7ZnJlZV9idWxrJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDYgKiBwcywgJiMzNDthZnRlcl9mcmVlX2J1bGsmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEZyZWUgdGhlIHJlbWFpbmluZyBzaXggLSZndDsgYXJlbmEgZW1wdHkgYWdhaW4uICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZnJlZV9ieXRlX29mZiA9IDExICogcHM7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZnJlZV9jbnQgPSA2OwomIzQzOwlpZiAocnVuKHNrZWwtJmd0O3Byb2dzLmZyZWVfcGFnZXMsICYjMzQ7ZnJlZV9yZXN0JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsICYjMzQ7YWZ0ZXJfZnJlZV9yZXN0JiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVc2VyLXNwYWNlIGZhdWx0LWluOiB0b3VjaGluZyB1bmFsbG9jYXRlZCBhcmVuYSBwYWdlcyBhbGxvY2F0ZXMgdGhlbQomIzQzOwkgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nCiYjNDM7CSAqIGxvYWQsIHNvIGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoKSBoYW5kcyBiYWNrIHRoYXQgYmFzZS4KJiM0MzsJICovCiYjNDM7CWJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKHNrZWwtJmd0O21hcHMuYXJlbmEsICZhbXA7c3opOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoYmFzZSwgJiMzNDthcmVuYV9iYXNlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyA4OyBpJiM0MzsmIzQzOykKJiM0MzsJCWJhc2VbaSAqIHBzXSA9IDE7CiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDggKiBwcywgJiMzNDthZnRlcl9mYXVsdGluJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGcmVlIHRoZSBmYXVsdGVkLWluIHBhZ2VzIGZyb20gQlBGLiBUaGV5IGFyZSBtYXBwZWQgaW50byB0aGUgdXNlciB2bWEKJiM0MzsJICogKGVsZXZhdGVkIHJlZmNvdW50KSwgc28gdGhpcyBhbHNvIGV4ZXJjaXNlcyB0aGUgemFwIHBhdGguCiYjNDM7CSAqLwomIzQzOwlza2VsLSZndDtic3MtJmd0O3B0ciA9IGJhc2U7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZnJlZV9ieXRlX29mZiA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7ZnJlZV9jbnQgPSA4OwomIzQzOwlpZiAocnVuKHNrZWwtJmd0O3Byb2dzLmZyZWVfcGFnZXMsICYjMzQ7ZnJlZV9mYXVsdGVkJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CUFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsICYjMzQ7YWZ0ZXJfZnJlZV9mYXVsdGVkJiMzNDspOwomIzQzO291dDoKJiM0MzsJYXJlbmFfbWVtX3VzYWdlX19kZXN0cm95KHNrZWwpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmMKaW5kZXggYWNiOWQ1M2I1OTczM2YuLjU0NWIwNWQ3YTBhYTcyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suYwpAQCAtMTAxLDcgJiM0MzsxMDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9ja19zaXplKGludCBzaXplKQogCXJldHVybjsKIH0KIAotdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKQomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfc3Bpbl9sb2NrKHZvaWQpCiB7CiAJcmVwZWF0ID0gMTAwMDsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2FyZW5hX3NwaW5fbG9ja18xJiMzNDspKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guYwppbmRleCBmODFhMGMwNjY1MDU5Ni4uMGMxYzZjYmZhMGYxOWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jCkBAIC0yMyw3ICYjNDM7MjMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3N0cih2b2lkKQogCWFyZW5hX3N0cnNlYXJjaF9fZGVzdHJveShza2VsKTsKIH0KIAotdm9pZCB0ZXN0X2FyZW5hX3N0cnNlYXJjaCh2b2lkKQomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfc3Ryc2VhcmNoKHZvaWQpCiB7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthcmVuYV9zdHJzZWFyY2gmIzM0OykpCiAJCXRlc3RfYXJlbmFfc3RyKCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYwppbmRleCBiYTVhNWE1MGY3YzA3ZC4uZGY3ZTRiOGRjMzk0NTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYwpAQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfcGFyYWxsZWxfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbQogCXJ1bl9saWJhcmVuYV9wYXJhbGxlbF9maW5pKHNrZWwsIG5hbWUsIHByZWZpeGxlbik7CiB9CiAKLXZvaWQgdGVzdF9saWJhcmVuYSh2b2lkKQomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfbGliYXJlbmEodm9pZCkKIHsKIAlzdHJ1Y3QgYXJlbmFfYWxsb2NfcmVzZXJ2ZV9hcmdzIGFyZ3M7CiAJc3RydWN0IGxpYmFyZW5hICpza2VsOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jCmluZGV4IGY4OTc0MDVmNzAxZGQ1Li45YzMxYjE3ZGJmMzkxZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYwpAQCAtODUsNyAmIzQzOzg1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZCkKICAqIFJ1biB0aGUgdGVzdCBkZXBlbmRpbmcgb24gd2hldGhlciBMTFZNIGNhbiBjb21waWxlIGFyZW5hIEFTQU4KICAqIHByb2dyYW1zLgogICovCi12b2lkIHRlc3RfbGliYXJlbmFfYXNhbih2b2lkKQomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfbGliYXJlbmFfYXNhbih2b2lkKQogewogI2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTgogCXJ1bl90ZXN0KCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjUwZDlkNmFjODZmNmIzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jCkBAIC0wLDAgJiM0MzsxLDM5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9hcmVuYV9jb21tb24uaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7CiYjNDM7CV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovCiYjNDM7I2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjQKJiM0MzsJX191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCAmbHQ7Jmx0OyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi8KJiM0MzsjZWxzZQomIzQzOwlfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsICZsdDsmbHQ7IDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwomIzQzOyNlbmRpZgomIzQzO30gYXJlbmEgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7dm9pZCBfX2FyZW5hICpwdHI7CiYjNDM7aW50IGFsbG9jX2NudDsJCS8qIGluOiAgcGFnZXMgdG8gYWxsb2NhdGUgKi8KJiM0Mztsb25nIGZyZWVfYnl0ZV9vZmY7CS8qIGluOiAgYnl0ZSBvZmZzZXQgd2l0aGluIHB0ciB0byBzdGFydCBmcmVlaW5nICovCiYjNDM7aW50IGZyZWVfY250OwkJLyogaW46ICBwYWdlcyB0byBmcmVlICovCiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBhbGxvYyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlwdHIgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgYWxsb2NfY250LCBOVU1BX05PX05PREUsIDApOwomIzQzOwlyZXR1cm4gcHRyID8gMCA6IDE7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQgZnJlZV9wYWdlcyh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlpZiAoIXB0cikKJiM0MzsJCXJldHVybiAxOwomIzQzOwlicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAoY2hhciBfX2FyZW5hICopcHRyICYjNDM7IGZyZWVfYnl0ZV9vZmYsIGZyZWVfY250KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBpbnRyb2R1Y2luZyBhIG5ldyB0ZXN0LCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbCDigJMgaXMgdGhpcyBzb21ldGhpbmcgd29ydGggc2lua2luZyB0aW1lIGludG8/CgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIG1lbW9yeSB1c2FnZSB0cmFja2luZyB3aXRoaW4gdGhlIEJQRiBhcmVuYS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYG5yX3BhZ2VzYCB0byB0aGUgYHN0cnVjdCBicGZfYXJlbmFgIHRvIGtlZXAgdGFicyBvbiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBpbiB1c2UuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIGEgY3J1Y2lhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBmb3IgYW55IG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBjYWxsYmFja3MgbGlrZSBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCAoaW5jcmVtZW50aW5nIGBucl9wYWdlc2ApLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgIChkZWNyZW1lbnRpbmcgaXQpLCBhbmQgdGhlIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCBmdW5jdGlvbi4gVGhlIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCBjaGFuZ2UgaXMganVzdCBncmFiYmluZyB0aGF0IHBhZ2UgY291bnQgYW5kIHNoaWZ0aW5nIGl0IGFwcHJvcHJpYXRlbHkuIFRoZSBjb2RlIGFsc28gYXBwZWFycyB0byBiZSByZWZhY3RvcmluZyBzb21lIHN0cnVjdHMgdG8gcGFzcyBgYXJlbmFgIHJhdGhlciB0aGFuIGp1c3QgdGhlIGBzY3JhdGNoX3BhZ2VgLgoKU28sIHRoZSBxdWVzdGlvbiBpcywgKmlzIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIHZ1bG5lcmFibGUgdG8gc29tZXRoaW5nIGxpa2UgYSBtZW1vcnkgY29ycnVwdGlvbj8qIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBCUEYsIHRoZSBhbnN3ZXIgaXMgYSBsaWtlbHkgeWVzLiBJdCBtb2RpZmllcyB0aGUgYXJlbmEgbG9naWMsIGFuZCB0aGUgYXJlbmEgaXRzZWxmIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBgQlBGX01BUF9UWVBFX0FSRU5BYCBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQg4oCTIGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLCBgYXJlbmFfbWFwX21lbV91c2FnZWAsIGBhcmVuYV92bV9mYXVsdGAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAg4oCTIGFyZSBhbGwgcHJpbWUgdGFyZ2V0cy4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgYXJlbmHigJlzIHN0YXRlLCBpbmNsdWRpbmcgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBwYWdlcyBhbmQgaGFuZGxpbmcgbWVtb3J5IGFjY2Vzcy4gQSBtaXNjYWxjdWxhdGlvbiBoZXJlIGNvdWxkIGxlYWQgdG8gc29tZSB2ZXJ5IGludGVyZXN0aW5nIG1lbW9yeSBpc3N1ZXMuIEkgc2hvdWxkIHB1bGwgdXAgYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGRpZyBpbi4gSXQmIzM5O3MgdGltZSB0byBmaW5kIGEgd2F5IHRvIGJyZWFrIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hX21hcF9tZW1fdXNhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jPTQxMj1zdGF0aWMgaW50IGFyZW5hX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00MTctXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDE4OnN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9hcmVuYS5jLTQxOS17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTYzNj1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJlbmFfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjUwLVx0Lm1hcF9jaGVja19idGYgPSBhcmVuYV9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MTpcdC5tYXBfbWVtX3VzYWdlID0gYXJlbmFfbWFwX21lbV91c2FnZSxcbmtlcm5lbC9icGYvYXJlbmEuYy02NTItXHQubWFwX2J0Zl9pZCA9IFx1MDAyNmJwZl9hcmVuYV9tYXBfYnRmX2lkc1swXSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzQwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgVXNhZ2UgaW4gQXJlbmEgTWFwcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCB2YXJpYWJsZSBwbGF5cyBhIHJvbGUgd2l0aGluIHRoZSBgYXJlbmFfbWFwX29wc2Agc3RydWN0dXJlLiBUaGlzIGlzIHRoZSBjb3JlIG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdHJhY2UgaG93IHRoZSBtZW1vcnkgdXNhZ2UgZGF0YSBpcyBtYW5pcHVsYXRlZC4KClNwZWNpZmljYWxseSwgYG5yX3BhZ2VzYCBpcyB0aGUgdGFyZ2V0IHZhcmlhYmxlIGhlcmUuIEkgc2VlIHRoYXQgaXQmIzM5O3MgZ2V0dGluZyB1cGRhdGVkIHdpdGhpbiB0aGUgYGFwcGx5X3JhbmdlX3NldF9jYmAgYW5kIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAgY2FsbGJhY2sgZnVuY3Rpb25zLiBJbnRlcmVzdGluZy4gVGhvc2UgY2FsbGJhY2tzLCBpbiB0dXJuLCBhcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBgYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZWAgYW5kIGBhcHBseV90b19wYWdlX3JhbmdlYCBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdGhlIHdvcmtob3JzZXMgYXBwbHlpbmcgY2hhbmdlcyBvdmVyIGEgcmFuZ2Ugb2YgbWVtb3J5IHBhZ2VzLgoKTm93LCB0byBzb2xpZGlmeSBteSBjb21wcmVoZW5zaW9uLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB3aGF0IHRoZSBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCBhbmQgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGRvaW5nLiBMZXQmIzM5O3MgZGVsdmUgaW50byB0aGVpciBpbXBsZW1lbnRhdGlvbiB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHBhZ2UgbWFuYWdlbWVudCBsb2dpYyBhbmQgaG93IHRoZXkmIzM5O3JlIGNvbnRyaWJ1dGluZyB0byB0aGUgYGFyZW5hX21hcF9tZW1fdXNhZ2VgIGZpZ3VyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGludHJpY2FjaWVzIG9mIGhvdyB0aGV5IGNoYW5nZSBgbnJfcGFnZXNgIGluIHRoZWlyIHJlc3BlY3RpdmUgc2V0IGFuZCBjbGVhciBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FwcGx5X3JhbmdlX3NldF9jYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJlbmEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9MTUzPXN0cnVjdCBjbGVhcl9yYW5nZV9kYXRhIHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTU3LVxua2VybmVsL2JwZi9hcmVuYS5jOjE1ODpzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTU5LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjU5PXN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yNjItXHRyZXR1cm4gYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpLFxua2VybmVsL2JwZi9hcmVuYS5jOjI2MzpcdFx0XHRcdCAgIFNaXzRHICYjNDM7IEdVQVJEX1NaIC8gMiwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBOVUxMKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjQtfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz00Nzk9c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUyMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo1MjM6XHRyZXQgPSBhcHBseV90b19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGthZGRyLCBQQUdFX1NJWkUsIGFwcGx5X3JhbmdlX3NldF9jYiwgXHUwMDI2ZGF0YSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI0LVx0aWYgKHJldCkge1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02NjQ9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03NDYtXHRcdFx0XHRcdCAga2Vybl92bV9zdGFydCAmIzQzOyB1YWRkcjMyICYjNDM7IChtYXBwZWQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLFxua2VybmVsL2JwZi9hcmVuYS5jOjc0NzpcdFx0XHRcdFx0ICB0aGlzX2JhdGNoIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBhcHBseV9yYW5nZV9zZXRfY2IsIFx1MDAyNmRhdGEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTc0OC1cdFx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMzMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEFyZW5hIE1lbW9yeSBUcmFja2luZzogQSBDbG9zZXIgTG9vayoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgbWVtb3J5IHVzYWdlIHRyYWNraW5nIGZvciBCUEYgYXJlbmFzLCB3aGljaCBpcyBhIHNlbnNpYmxlIGFkZGl0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLCB1cGRhdGluZyBgbnJfcGFnZXNgIGFuZCByZXR1cm5pbmcgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gVGhpcyBpcyBmdW5jdGlvbmFsLCBidXQgdGhlIG1haW4gZ29hbCBpcyBtZW1vcnkgdHJhY2tpbmcuIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBvdmVybHkgY29tcGxleCBhdCBmaXJzdCBnbGFuY2UuCgpUaGUgY29kZSBjaGFuZ2VzIGFyZSBtb3N0bHkgYWJvdXQgcmVmYWN0b3Jpbmc6IHJlcGxhY2luZyBgc2NyYXRjaF9wYWdlYCB3aXRoIGBhcmVuYWAgaW4gYSBjb3VwbGUgb2YgZnVuY3Rpb25zLCBgYXBwbHlfcmFuZ2VfZGF0YWAgYW5kIGBjbGVhcl9yYW5nZV9kYXRhYC4gSXQgaW5jcmVtZW50cyBgbnJfcGFnZXNgIHdpdGhpbiBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCBhbmQgZGVjcmVtZW50cyBpdCB3aXRoaW4gYGFwcGx5X3JhbmdlX2NsZWFyX2NiYC4gTm90aGluZyB0b28gY3JhenksIGJ1dCB0aGlzIHRvdWNoZXMgY29yZSBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQuCgpHaXZlbiB0aGF0IHRoaXMgbW9kaWZpZXMgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIEl0JiMzOTtzIGEgZ29vZCB0YXJnZXQuIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSBzeW1ib2xzOiBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCwgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCwgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLCBgYXJlbmFfYWxsb2NfcGFnZXNgLCBhbmQgYGFyZW5hX2ZyZWVfcGFnZXNgLiBPaCwgYW5kIGBhcmVuYV92bV9mYXVsdGAgbWlnaHQgYWxzbyBiZSByZWxldmFudC4KCldhaXQsIGFyZSB0aG9zZSBjYWxsYmFjayBmdW5jdGlvbnMsIGBhcHBseV9yYW5nZV9zZXRfY2JgIGFuZCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLCBzdGF0aWM/IE9rYXksIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGVzZSBzdGF0aWMgY2FsbGJhY2tzIGFyZSByZWFjaGFibGUgZHVyaW5nIEJQRiBhcmVuYSBvcGVyYXRpb25zIGFuZCBpZiBJIGNhbiBlZmZlY3RpdmVseSB0YXJnZXQgdGhlbSB3aXRoIGZ1enppbmcuCgpHb29kLCB0aGV5ICphcmUqIGNhbGxlZCBkdXJpbmcgQlBGIGFyZW5hIG9wZXJhdGlvbnMuIEV4Y2VsbGVudC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYW55dGhpbmcgcmVsZXZhbnQgdG8gQlBGIGFyZW5hIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9BUkVOQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMDQ2PXN0YXRpYyB2b2lkIGJ1aWxkX2VwaWxvZ3VlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGJvb2wgd2FzX2NsYXNzaWMpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTEwMC0jZGVmaW5lIEJQRl9GSVhVUF9BUkVOQV9SRUdfTUFTSyAgIEdFTk1BU0soMjAsIDE2KVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTEwMTojZGVmaW5lIEJQRl9BUkVOQV9BQ0NFU1MgICAgICAgICAgIEJJVCgyMSlcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMDItI2RlZmluZSBCUEZfRklYVVBfUkVHX01BU0tcdEdFTk1BU0soMzEsIDI3KVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTExMDU9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTEwLVx0aW50IGFyZW5hX3JlZyA9IEZJRUxEX0dFVChCUEZfRklYVVBfQVJFTkFfUkVHX01BU0ssIGV4LVx1MDAzZWZpeHVwKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjExMTE6XHRib29sIGlzX2FyZW5hID0gISEoZXgtXHUwMDNlZml4dXAgXHUwMDI2IEJQRl9BUkVOQV9BQ0NFU1MpO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTExMi1cdGJvb2wgaXNfd3JpdGUgPSAoZHN0X3JlZyA9PSBET05UX0NMRUFSKTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMTI5PXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTg2LVx0aWYgKGlzX2FyZW5hKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTg3Olx0XHRleC1cdTAwM2VmaXh1cCB8PSBCUEZfQVJFTkFfQUNDRVNTO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTE4OC1cdFx0Lypcbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC0xNi1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjE3OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTE4LSNpZm5kZWYgX19hcmVuYVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZT04NDQ9TElCQVJFTkFfQVNBTl9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hX2FzYW4uc2tlbC5oXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU6ODQ1OkNGTEFHUyAmIzQzOz0gLURIQVNfQlBGX0FSRU5BX0FTQU5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZS04NDYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlPTc5PWxpYmFyZW5hLmJwZi5vOiAkKExJQkFSRU5BX09CSkVDVFMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlLTg0LVx0JChjYWxsIG1zZyxDTE5HLUJQRixsaWJhcmVuYSwkQClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9NYWtlZmlsZTo4NTpcdCQoUSkkKENMQU5HKSAkKEJQRl9DRkxBR1MpICQoQVNBTl9GTEFHUykgLURCUEZfQVJFTkFfQVNBTiAkKEJQRl9UQVJHRVRfRU5ESUFOKSAtYyAkXHUwMDNjIC1vICRAXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUtODYtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTM0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oOjM1OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaC0zNi0jZGVmaW5lIF9fYXJlbmEgX19hdHRyaWJ1dGVfXygoYWRkcmVzc19zcGFjZSgxKSkpIF9fYXR0cmlidXRlX18oKGJ0Zl90eXBlX3RhZyhcJiMzNDthcmVuYVwmIzM0OykpKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaC0yLS8qIENvcHlyaWdodCAoYykgMjAyNSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaDozOiNpZm5kZWYgQlBGX0FSRU5BX1NQSU5fTE9DS19IXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmg6NDojZGVmaW5lIEJQRl9BUkVOQV9TUElOX0xPQ0tfSFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oLTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oPTUxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYXJlbmFfc3Bpbl91bmxvY2soYXJlbmFfc3BpbmxvY2tfdCBfX2FyZW5hICpsb2NrKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaC01NDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmg6NTQzOiNlbmRpZiAvKiBCUEZfQVJFTkFfU1BJTl9MT0NLX0ggKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9MTU9ZXh0ZXJuIHZvbGF0aWxlIGJvb2wgYXNhbl9yZXBvcnRfb25jZTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6MjY6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMjctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oPTg1PXN0YXRpYyB2b2lkICgqX19hc2FuX2J0Zl9hbmNob3JzW10pKGludHB0cl90KSA9IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtOTEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6OTI6I2Vsc2UgLyogQlBGX0FSRU5BX0FTQU4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaC05My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9OTc9X193ZWFrIGJvb2wgYXNhbl9yZWFkeSh2b2lkKSB7IHJldHVybiB0cnVlOyB9XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtOTgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6OTk6I2VuZGlmIC8qIEJQRl9BUkVOQV9BU0FOICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMTAwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jPTExPWV4dGVybiBzdHJ1Y3QgYnVkZHkgX19hcmVuYSBidWRkeTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jLTEyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmM6MTM6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuYy0xNC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM9OD1lbnVtIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtODAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6ODE6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtODItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jPTQ4NT1fX3dlYWsgX19ub2FzYW4gaW50IGFzYW5faW5pdChzdHJ1Y3QgYXNhbl9pbml0X2FyZ3MgKmFyZ3MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTU1MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYzo1NTE6I2VuZGlmIC8qIEJQRl9BUkVOQV9BU0FOICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtNTUyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy00LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jOjU6I2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTYtI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2Vcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM9Mzc9c3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtODEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6ODI6I2VuZGlmIC8qIEhBU19CUEZfQVJFTkFfQVNBTiAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTgzLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYz04OD12b2lkIHNlcmlhbF90ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy04OS17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6OTA6I2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTkxLVx0cnVuX3Rlc3QoKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jPTI2PWludCBhcmVuYV9odGFiX2xsdm0odm9pZCAqY3R4KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2h0YWIuYy0yNy17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jOjI4OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSB8fCBkZWZpbmVkKEJQRl9BUkVOQV9GT1JDRV9BU00pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jLTI5LVx0c3RydWN0IGh0YWIgX19hcmVuYSAqaHRhYjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYy0yLS8qIENvcHlyaWdodCAoYykgMjAyNCBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9odGFiX2FzbS5jOjM6I2RlZmluZSBCUEZfQVJFTkFfRk9SQ0VfQVNNXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYy00LSNkZWZpbmUgYXJlbmFfaHRhYl9sbHZtIGFyZW5hX2h0YWJfYXNtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NTUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgQXJlbmEgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgYENPTkZJR19CUEZfQVJFTkFgIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGl0JiMzOTtzIG5vdCBhIHN0YW5kYWxvbmUgb3B0aW9uLiBJdCBzZWVtcyB0byBiZSBpbnRlcnR3aW5lZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgLCB3aGljaCBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFyZW5hIGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgYmVpbmcgY29tcGlsZWQuIE15IG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGFyZW5hLm9g4oCUdGhlIG9iamVjdCBmaWxlIHJlbGF0ZWQgdG8gdGhlIGFyZW5h4oCUaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFncywgYW5kIGlmIHNvLCB3aGF0IHRob3NlIGZsYWdzIGFyZS4gVGhhdCBNYWtlZmlsZSBzaG91bGQgcHJvdmlkZSB0aGUga2V5LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBkZXBlbmRlbmN5IGFuZCBhc2NlcnRhaW4gaXRzIHByZWNpc2UgcmVsYXRpb25zaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTgxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEFyZW5hIE1lbW9yeSBUcmFja2luZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHByaW1hcnkgZW5hYmxpbmcgY29uZmlndXJhdGlvbiBoZXJlIGlzIGBDT05GSUdfQlBGX1NZU0NBTExgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgaXQgYWxzbyByZXF1aXJlcyBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfNjRCSVRgLCB3aGljaCBpcyBleHBlY3RlZCBnaXZlbiB0aGUgbmF0dXJlIG9mIEJQRi4gVGhlIGNvZGUgaXMgdXNpbmcgYEJQRl9TWVNDQUxMYCBkaXJlY3RseS4gTWFrZXMgc2Vuc2UuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBga2VybmVsL2JwZi9hcmVuYS5jYCwgZm9jdXNpbmcgb24gdGhlIEJQRiBhcmVuYSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBpbnRyb2R1Y3Rpb24gb2YgbWVtb3J5IHVzYWdlIHRyYWNraW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLCBgYXJlbmFfbWFwX21lbV91c2FnZWAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV92bV9mYXVsdGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGFmZmVjdGVkLgoKTm93LCBhIHF1aWNrIGZvbGxvdy11cCB0aG91Z2h0Li4uIEkmIzM5O20gbm90aWNpbmcgdGhhdCBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCBhbmQgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCBhcmUgc3RhdGljIGNhbGxiYWNrcywgc28gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhleSYjMzk7cmUgaW5saW5lZC4gSWYgdGhleSBhcmUgaW5saW5lZCwgdGhhdCBjb3VsZCBtYWtlIHRoZW0gaGFyZGVyIGZvciBzeXprYWxsZXIgdG8gdGFyZ2V0IGRpcmVjdGx5LiBIb3dldmVyLCB0aGV5JiMzOTtyZSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGFwcGx5X3RvX3BhZ2VfcmFuZ2VgIGFuZCBgYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZWAsIHNvIGl0IGxvb2tzIGxpa2UgdGhleSB3b24mIzM5O3QgYmUgaW5saW5lZC4gVGhhdCYjMzk7cyBnb29kLiBgYXJlbmFfbWFwX21lbV91c2FnZWAgaXMgYSBjYWxsYmFjayB3aXRoaW4gYGJwZl9tYXBfb3BzYCwgc28gaXQmIzM5O3MgcHJvYmFibHkgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBtYXAgb3BlcmF0aW9ucy4gYGFyZW5hX2FsbG9jX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfcGFnZXNgIGFyZSBjYWxsZWQgYXMgQlBGIHByb2dyYW0gaGVscGVycywgd2hpY2ggSSBsaWtlIGJlY2F1c2UgSSBjYW4gY29udHJvbCB0aGVtIGZyb20gYSBCUEYgcHJvZ3JhbS4gRmluYWxseSwgYGFyZW5hX3ZtX2ZhdWx0YCBpcyBhIGB2bV9vcGVyYXRpb25zX3N0cnVjdGAgY2FsbGJhY2ssIHNvIGl0JiMzOTtzIHRpZWQgdG8gdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoYXQgYGFyZW5hX2FsbG9jX3BhZ2VzYCBpcyBpbmRlZWQgYSBoZWxwZXIuIEdvdHRhIGJlIGNlcnRhaW4gYWJvdXQgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTk6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmFfYWxsb2NfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9hcmVuYS5jLTM5LSAqIGludG8ga2VybmVsIGFuZCB1c2VyIHZtYS5cbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xua2VybmVsL2JwZi9hcmVuYS5jLTQxLSAqIHdoaWNoIHdpbGwgaW5zZXJ0IGl0IGludG8ga2VybmVsIHZtX2FyZWEuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTY1NT1zdGF0aWMgdTY0IGNsZWFyX2xvMzIodTY0IHZhbClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjYzLSAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjY2NDpzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY1LVx0XHRcdCAgICAgIGJvb2wgc2xlZXBhYmxlKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04NDM9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTkzMC0gKiBSZXNlcnZlIGFuIGFyZW5hIHZpcnR1YWwgYWRkcmVzcyByYW5nZSB3aXRob3V0IHBvcHVsYXRpbmcgaXQuIFRoaXMgY2FsbCBzdG9wc1xua2VybmVsL2JwZi9hcmVuYS5jOjkzMTogKiBicGZfYXJlbmFfYWxsb2NfcGFnZXMgZnJvbSBhZGRpbmcgcGFnZXMgdG8gdGhpcyByYW5nZS5cbmtlcm5lbC9icGYvYXJlbmEuYy05MzItICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTEwNDE9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwNDItXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA0MzpfX2JwZl9rZnVuYyB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQ0LVx0XHRcdFx0XHRpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDUxLVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNTI6XHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgdHJ1ZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1My19XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1NC1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMDU1OnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1Ni1cdFx0XHRcdFx0ICBpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDYzLVxua2VybmVsL2JwZi9hcmVuYS5jOjEwNjQ6XHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgZmFsc2UpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwNjUtfVxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2Nzp2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2OC1cdFx0XHRcdCAgICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwNzUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3NjpcdHJldHVybiAodm9pZCAqKWFyZW5hX2FsbG9jX3BhZ2VzKGFyZW5hLCAobG9uZylhZGRyX19pZ24sIHBhZ2VfY250LCBub2RlX2lkLCB0cnVlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDc3LX1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTExND1CVEZfS0ZVTkNTX1NUQVJUKGFyZW5hX2tmdW5jcylcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTE1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMsIEtGX0FSRU5BX1JFVCB8IEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTExNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE5OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzQzCgkJCQkJCQlvdXRwdXQ6IDIyMwoJCQkJCQkJdGhvdWdodHM6IDQwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBNZW1vcnkgVXNhZ2UgUGF0Y2gqKgoKT2theSwgc28gYGJwZl9hcmVuYV9hbGxvY19wYWdlc2AgaXMgaW5kZWVkIGEga2Z1bmMsIGFzIGV4cGVjdGVkLiBUaGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIHNvbWUga2V5IG1vZGlmaWNhdGlvbnMgdG8gaG93IHRoZSBhcmVuYSBtZW1vcnkgaXMgbWFuYWdlZC4gSXQmIzM5O3MgY2hhbmdpbmcgYGFyZW5hX2FsbG9jX3BhZ2VzYCBhbmQgYGFyZW5hX2ZyZWVfcGFnZXNgIHRvIHBhc3MgdGhlIGBhcmVuYWAgc3RydWN0dXJlIGluc3RlYWQgb2YgYHNjcmF0Y2hfcGFnZWAgdG8gYGFwcGx5X3JhbmdlX2RhdGFgIGFuZCBgY2xlYXJfcmFuZ2VfZGF0YWAuIEl0IGFsc28gaW50cm9kdWNlcyBgYXJlbmFfbWFwX21lbV91c2FnZWAsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHlvdSYjMzk7cmUgbG9va2luZyBhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIGluZm8gZm9yIHRoZSBtYXAuIEkgc2VlIGEgbmV3IHRlc3QsIGBhcmVuYV9tZW1fdXNhZ2UuY2AsIHRoYXQmIzM5O3MgZGVzaWduZWQgdG8gZXhlcmNpc2UgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZXNlIGNoYW5nZXMuCgpMZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzOgoKKiAgIGBhcHBseV9yYW5nZV9zZXRfY2JgCiogICBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgCiogICBgYXJlbmFfbWFwX21lbV91c2FnZWAKKiAgIGBhcmVuYV9hbGxvY19wYWdlc2AKKiAgIGBhcmVuYV9mcmVlX3BhZ2VzYAoqICAgYGFyZW5hX3ZtX2ZhdWx0YAoKTm93LCByZWdhcmRpbmcgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMuLi4gYEJQRl9TWVNDQUxMYCBpcyB0aGUgbWFpbiBvbmUuIEkgY2FuIGFzc3VtZSBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfNjRCSVRgIGFyZSBzdGFuZGFyZCBvbiBzeXprYWxsZXIgdGFyZ2V0cyAoZXNwZWNpYWxseSB4ODZcXzY0KSwgc28gZm9jdXNpbmcgb24gYEJQRl9TWVNDQUxMYCBpcyBzdWZmaWNpZW50LgoKSGVyZSYjMzk7cyBteSByZWFzb25pbmc6IFRoaXMgcGF0Y2ggaXMgaW5qZWN0aW5nIG1lbW9yeSB1c2FnZSB0cmFja2luZyBpbnRvIEJQRiBhcmVuYXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbWFpbnRhaW5pbmcgYSBjb3VudCBvZiBwb3B1bGF0ZWQgcGFnZXMgdmlhIGBucl9wYWdlc2AuIFRoZSB1cGRhdGUgaW52b2x2ZXMgbW9kaWZ5aW5nIHBhZ2UgdGFibGUgY2FsbGJhY2tzIChgYXBwbHlfcmFuZ2Vfc2V0X2NiYCwgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCkgdG8gdXBkYXRlIHRoaXMgY291bnRlci4gVGhlIG5ldyBgYXJlbmFfbWFwX21lbV91c2FnZWAgZnVuY3Rpb24gcHJvdmlkZXMgYSB3YXkgdG8gZXhwb3NlIHRoaXMgdXNhZ2UuIENoYW5nZXMgYWxzbyBmbG93IHRocm91Z2ggYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX3ZtX2ZhdWx0YC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFsdGVycyBjb3JlIGFyZW5hIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGVyZWZvcmUsIGl0IGFic29sdXRlbHkgcmVxdWlyZXMgZnV6emluZy4gV2UgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGUgcGFnZSBjb3VudGluZyBsb2dpYyBpcyBzb3VuZCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByYWNlcywgbGVha3MsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSXQmIzM5O3MgdGltZSB0byBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcHBseV9yYW5nZV9zZXRfY2ImIzM0OywKICAgICYjMzQ7YXBwbHlfcmFuZ2VfY2xlYXJfY2ImIzM0OywKICAgICYjMzQ7YXJlbmFfbWFwX21lbV91c2FnZSYjMzQ7LAogICAgJiMzNDthcmVuYV9hbGxvY19wYWdlcyYjMzQ7LAogICAgJiMzNDthcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FyZW5hX3ZtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWVtb3J5IHVzYWdlIHRyYWNraW5nIHRvIEJQRiBhcmVuYXMgYnkgbWFpbnRhaW5pbmcgYSBjb3VudCBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApLiBJdCBtb2RpZmllcyB0aGUgcGFnZSB0YWJsZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byB1cGRhdGUgdGhpcyBjb3VudGVyIGFuZCBleHBvc2VzIGl0IHZpYSBgYXJlbmFfbWFwX21lbV91c2FnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB0aGVzZSBjYWxsYmFja3MgaW4gYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX3ZtX2ZhdWx0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHBhZ2UgY291bnRpbmcgbG9naWMgaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmFjZXMgb3IgbWVtb3J5IGxlYWtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FwcGx5X3JhbmdlX3NldF9jYiYjMzQ7LAogICAgJiMzNDthcHBseV9yYW5nZV9jbGVhcl9jYiYjMzQ7LAogICAgJiMzNDthcmVuYV9tYXBfbWVtX3VzYWdlJiMzNDssCiAgICAmIzM0O2FyZW5hX2FsbG9jX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FyZW5hX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7YXJlbmFfdm1fZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcgdG8gQlBGIGFyZW5hcyBieSBtYWludGFpbmluZyBhIGNvdW50IG9mIHBvcHVsYXRlZCBwYWdlcyAoYG5yX3BhZ2VzYCkuIEl0IG1vZGlmaWVzIHRoZSBwYWdlIHRhYmxlIGNhbGxiYWNrcyAoYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmApIHRvIHVwZGF0ZSB0aGlzIGNvdW50ZXIgYW5kIGV4cG9zZXMgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHRoZXNlIGNhbGxiYWNrcyBpbiBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfdm1fZmF1bHRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGFyZW5hIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcGFnZSBjb3VudGluZyBsb2dpYyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByYWNlcyBvciBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNTo0MS4zODg2MDA3ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg5NzUxNTYyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFwcGx5X3JhbmdlX3NldF9jYlwiLFxuICAgIFwiYXBwbHlfcmFuZ2VfY2xlYXJfY2JcIixcbiAgICBcImFyZW5hX21hcF9tZW1fdXNhZ2VcIixcbiAgICBcImFyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJhcmVuYV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJhcmVuYV92bV9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWVtb3J5IHVzYWdlIHRyYWNraW5nIHRvIEJQRiBhcmVuYXMgYnkgbWFpbnRhaW5pbmcgYSBjb3VudCBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApLiBJdCBtb2RpZmllcyB0aGUgcGFnZSB0YWJsZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byB1cGRhdGUgdGhpcyBjb3VudGVyIGFuZCBleHBvc2VzIGl0IHZpYSBgYXJlbmFfbWFwX21lbV91c2FnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB0aGVzZSBjYWxsYmFja3MgaW4gYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX3ZtX2ZhdWx0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHBhZ2UgY291bnRpbmcgbG9naWMgaXMgcm9idXN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSByYWNlcyBvciBtZW1vcnkgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA1OjQxLjM4ODYwOTYyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MzcyMzk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYyNzBlNWZkYjk0MDk4MjhiOGM5ZmUyOGNjZGZkYmUzNjgyZjVhMGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTk6MDU6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jXFxuaW5kZXggODBiN2I4YTY5NDQ2NDUuLmJjMzQ2MDIxMTYwNDAxIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xcbkBAIC01NSw4ICs1NSwxMCBAQCBzdHJ1Y3QgYnBmX2FyZW5hIHtcXG4gXFx0c3RydWN0IHZtX3N0cnVjdCAqa2Vybl92bTtcXG4gXFx0c3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTtcXG4gXFx0c3RydWN0IHJhbmdlX3RyZWUgcnQ7XFxuLVxcdC8qIHByb3RlY3RzIHJ0ICovXFxuK1xcdC8qIHByb3RlY3RzIHJ0IGFuZCBucl9wYWdlcyAqL1xcbiBcXHRycXNwaW5sb2NrX3Qgc3BpbmxvY2s7XFxuK1xcdC8qIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgcG9wdWxhdGVkIGluIHRoZSBhcmVuYSAqL1xcbitcXHR1NjQgbnJfcGFnZXM7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgdm1hX2xpc3Q7XFxuIFxcdC8qIHByb3RlY3RzIHZtYV9saXN0ICovXFxuIFxcdHN0cnVjdCBtdXRleCBsb2NrO1xcbkBAIC0xNDMsMTQgKzE0NSwxNCBAQCBzdGF0aWMgbG9uZyBjb21wdXRlX3Bnb2ZmKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyKVxcbiB9XFxuIFxcbiBzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSB7XFxuK1xcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlO1xcbiBcXHRpbnQgaTtcXG4gfTtcXG4gXFxuIHN0cnVjdCBjbGVhcl9yYW5nZV9kYXRhIHtcXG4rXFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7XFxuIFxcdHN0cnVjdCBsbGlzdF9oZWFkICpmcmVlX3BhZ2VzO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlO1xcbiB9O1xcbiBcXG4gc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbkBAIC0xODAsNyArMTgyLDcgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbiBcXG4gXFx0XFx0aWYgKHB0ZV9ub25lKG9sZCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC1cXHUwMDNlc2NyYXRjaF9wYWdlKSlcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXFx1MDAzZWFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXHRcXHRwdGVwX2dldF9hbmRfY2xlYXIoXFx1MDAyNmluaXRfbW0sIGFkZHIsIHB0ZSk7XFxuIFxcdFxcdGZsdXNoX3RsYl9iZWZvcmVfc2V0KGFkZHIpO1xcbkBAIC0xOTYsNiArMTk4LDcgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbiBcXHRzZXRfcHRlX2F0KFxcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHB0ZXZhbCk7XFxuICNlbmRpZlxcbiBcXHRkLVxcdTAwM2VpKys7XFxuK1xcdGQtXFx1MDAzZWFyZW5hLVxcdTAwM2Vucl9wYWdlcysrO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMjI3LDEwICsyMzAsMTEgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9jbGVhcl9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuIFxcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXFxuIFxcdCAqIGhlcmUuIFdpdGhvdXQgdGhlIHNraXAsIHNjcmF0Y2hfcGFnZSB3b3VsZCBiZSBmcmVlZC5cXG4gXFx0ICovXFxuLVxcdGlmIChwYWdlID09IGQtXFx1MDAzZXNjcmF0Y2hfcGFnZSlcXG4rXFx0aWYgKHBhZ2UgPT0gZC1cXHUwMDNlYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRfX2xsaXN0X2FkZChcXHUwMDI2cGFnZS1cXHUwMDNlcGNwX2xsaXN0LCBkLVxcdTAwM2VmcmVlX3BhZ2VzKTtcXG4rXFx0ZC1cXHUwMDNlYXJlbmEtXFx1MDAzZW5yX3BhZ2VzLS07XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC00MTMsNyArNDE3LDkgQEAgc3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4gXFxuIHN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiB7XFxuLVxcdHJldHVybiAwO1xcbitcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxuK1xcbitcXHRyZXR1cm4gKHU2NClSRUFEX09OQ0UoYXJlbmEtXFx1MDAzZW5yX3BhZ2VzKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbiB9XFxuIFxcbiBzdHJ1Y3Qgdm1hX2xpc3Qge1xcbkBAIC01MDYsOCArNTEyLDcgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XFxuIFxcbi1cXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAucGFnZXMgPSBcXHUwMDI2cGFnZSwgLmkgPSAwLFxcbi1cXHRcXHRcXHRcXHRcXHQgLnNjcmF0Y2hfcGFnZSA9IGFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UgfTtcXG4rXFx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFxcdTAwMjZwYWdlLCAuaSA9IDAgfTtcXG4gXFx0LyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi9cXG4gXFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXFx1MDAyNnBhZ2UpO1xcbiBcXHRpZiAocmV0KSB7XFxuQEAgLTY5Niw4ICs3MDEsOCBAQCBzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudFxcbiBcXHRcXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbitcXHRkYXRhLmFyZW5hID0gYXJlbmE7XFxuIFxcdGRhdGEucGFnZXMgPSBwYWdlcztcXG4tXFx0ZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlO1xcbiBcXG4gXFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxcbiBcXHRcXHRnb3RvIG91dF9mcmVlX3BhZ2VzO1xcbkBAIC04NzMsOCArODc4LDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCxcXG4gXFx0cmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcXG4gXFxuIFxcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2ZnJlZV9wYWdlcyk7XFxuK1xcdGNkYXRhLmFyZW5hID0gYXJlbmE7XFxuIFxcdGNkYXRhLmZyZWVfcGFnZXMgPSBcXHUwMDI2ZnJlZV9wYWdlcztcXG4tXFx0Y2RhdGEuc2NyYXRjaF9wYWdlID0gYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZTtcXG4gXFx0LyogY2xlYXIgcHRlcyBhbmQgY29sbGVjdCBzdHJ1Y3QgcGFnZXMgKi9cXG4gXFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwga2FkZHIsIHBhZ2VfY250IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuIFxcdFxcdFxcdFxcdCAgICAgYXBwbHlfcmFuZ2VfY2xlYXJfY2IsIFxcdTAwMjZjZGF0YSk7XFxuQEAgLTk4MSw4ICs5ODYsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIFxcdTAwMjZvbGRfbWVtY2csIFxcdTAwMjZuZXdfbWVtY2cpO1xcbiBcXG4gXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZmcmVlX3BhZ2VzKTtcXG4rXFx0Y2RhdGEuYXJlbmEgPSBhcmVuYTtcXG4gXFx0Y2RhdGEuZnJlZV9wYWdlcyA9IFxcdTAwMjZmcmVlX3BhZ2VzO1xcbi1cXHRjZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlO1xcbiBcXHRhcmVuYV92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XFxuIFxcdHVzZXJfdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X3VzZXJfdm1fc3RhcnQoYXJlbmEpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jXFxuaW5kZXggZDk4NTc3YTZiYWJjMGUuLjFhZDVkMDNkMDdhZGIyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xcbkBAIC0yMjIsNyArMjIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zdG9yZV9yZWxlYXNlKHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsKVxcbiBcXHRcXHQgIFxcXCJzdG9yZV9yZWxlYXNlNjRfcmVzdWx0XFxcIik7XFxuIH1cXG4gXFxuLXZvaWQgdGVzdF9hcmVuYV9hdG9taWNzKHZvaWQpXFxuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfYXRvbWljcyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBhcmVuYV9hdG9taWNzICpza2VsO1xcbiBcXHRpbnQgZXJyO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXFxuaW5kZXggNGI0YWRiM2Y0YjcxZWIuLjAxZmNmNDk2NWVhNDNjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmNcXG5AQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZV9vbmVfcGFzdF9lbmQodm9pZClcXG4gXFx0Y2xvc2UobWFwX2ZkKTtcXG4gfVxcbiBcXG4tdm9pZCB0ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZSh2b2lkKVxcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2RpcmVjdF92YWx1ZSh2b2lkKVxcbiB7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJvbmVfcGFzdF9lbmRcXFwiKSlcXG4gXFx0XFx0dGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuY1xcbmluZGV4IGQ2OWZkMjQ2NWY1MzY3Li45MWNjZjA0MDI5ODA0MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcXG5AQCAtODEsNyArODEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2h0YWJfYXNtKHZvaWQpXFxuIFxcdGFyZW5hX2h0YWJfYXNtX19kZXN0cm95KHNrZWwpO1xcbiB9XFxuIFxcbi12b2lkIHRlc3RfYXJlbmFfaHRhYih2b2lkKVxcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX2h0YWIodm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXJlbmFfaHRhYl9sbHZtXFxcIikpXFxuIFxcdFxcdHRlc3RfYXJlbmFfaHRhYl9sbHZtKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuY1xcbmluZGV4IDRmMjg2NmE2MTVjZTUyLi4yNjQ4ZTA2ZjUzZDA3MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcXG5AQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbChpbnQgY250LCBib29sIG5vbnNsZWVwYWJsZSlcXG4gXFx0YXJlbmFfbGlzdF9fZGVzdHJveShza2VsKTtcXG4gfVxcbiBcXG4tdm9pZCB0ZXN0X2FyZW5hX2xpc3Qodm9pZClcXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9saXN0KHZvaWQpXFxuIHtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImFyZW5hX2xpc3RfMVxcXCIpKVxcbiBcXHRcXHR0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbCgxLCBmYWxzZSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNGMyZDFhMWQ2NzNjZlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuY1xcbkBAIC0wLDAgKzEsMTIyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3VzZXIuaFxcdTAwM2VcXG4rI2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2RlZmluZSBQQUdFX1NJWkUgZ2V0cGFnZXNpemUoKVxcbisjZW5kaWZcXG4rXFxuKyNpbmNsdWRlIFxcXCJhcmVuYV9tZW1fdXNhZ2Uuc2tlbC5oXFxcIlxcbitcXG4rLypcXG4rICogYXJlbmFfbWFwX21lbV91c2FnZSgpIGlzIHN1cmZhY2VkIHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0aGUgbWFwJ3NcXG4rICogL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvZmRpbmZvL1xcdTAwM2NmZFxcdTAwM2UgXFxcIm1lbWxvY2s6XFxcIiBsaW5lICh0aGUgc2FtZSB2YWx1ZSBicGZ0b29sIG1hcCBzaG93XFxuKyAqIHByaW50cykuIFJlYWQgaXQgZGlyZWN0bHkgc28gdGhlIHRlc3QgaGFzIG5vIGV4dGVybmFsIGRlcGVuZGVuY3kuXFxuKyAqL1xcbitzdGF0aWMgbG9uZyBtYXBfbWVtbG9jayhpbnQgbWFwX2ZkKVxcbit7XFxuK1xcdGNoYXIgcGF0aFs2NF0sIGxpbmVbMTI4XTtcXG4rXFx0bG9uZyBtZW1sb2NrID0gLTE7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFxcXCIvcHJvYy9zZWxmL2ZkaW5mby8lZFxcXCIsIG1hcF9mZCk7XFxuK1xcdGYgPSBmb3BlbihwYXRoLCBcXFwiclxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoZiwgXFxcIm9wZW5fZmRpbmZvXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcXG4rXFx0XFx0aWYgKHNzY2FuZihsaW5lLCBcXFwibWVtbG9jazpcXFxcdCVsZFxcXCIsIFxcdTAwMjZtZW1sb2NrKSA9PSAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRmY2xvc2UoZik7XFxuK1xcdEFTU0VSVF9ORVEobWVtbG9jaywgLTEsIFxcXCJwYXJzZV9tZW1sb2NrXFxcIik7XFxuK1xcdHJldHVybiBtZW1sb2NrO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bihzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xcbitcXHRpbnQgZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQocHJvZyksIFxcdTAwMjZvcHRzKTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgbmFtZSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0aWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsIG5hbWUpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbV91c2FnZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBhcmVuYV9tZW1fdXNhZ2UgKnNrZWw7XFxuK1xcdGNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7XFxuK1xcdGNoYXIgKmJhc2U7XFxuK1xcdHNpemVfdCBzejtcXG4rXFx0aW50IGZkLCBpO1xcbitcXG4rXFx0c2tlbCA9IGFyZW5hX21lbV91c2FnZV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcIm9wZW5fbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGZkID0gYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy5hcmVuYSk7XFxuK1xcbitcXHQvKiBGcmVzaCBhcmVuYTogbm8gZGF0YSBwYWdlcywgYW5kIHRoZSBzY3JhdGNoIHBhZ2UgaXMgbm90IGNvdW50ZWQuICovXFxuK1xcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsIFxcXCJpbml0aWFsXFxcIik7XFxuK1xcbitcXHQvKiBCUEYtc2lkZSBhbGxvY2F0aW9uIG9mIDE3IHBhZ2VzLiAqL1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWFsbG9jX2NudCA9IDE3O1xcbitcXHRpZiAocnVuKHNrZWwtXFx1MDAzZXByb2dzLmFsbG9jLCBcXFwiYWxsb2NcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdC8qXFxuK1xcdCAqIEEgTlVMTCBwdHIgbWVhbnMgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCkgaXRzZWxmIGZhaWxlZCAoZS5nLiB0aGUgaG9zdFxcbitcXHQgKiBpcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUpLCBub3QgYSBtaXNjb3VudCAtLSBmbGFnIGl0IGRpc3RpbmN0bHkgc28gYVxcbitcXHQgKiByZWQgQ0kgcnVuIGlzIG5vdCBtaXN0YWtlbiBmb3IgYSBjb3VudGluZyBidWcuXFxuK1xcdCAqL1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VwdHIsIFxcXCJhcmVuYV9hbGxvY19wYWdlc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTcgKiBwcywgXFxcImFmdGVyX2FsbG9jXFxcIik7XFxuK1xcbitcXHQvKiBGcmVlIGEgc2luZ2xlIHBhZ2UgKGFyZW5hX2ZyZWVfcGFnZXMgcGFnZV9jbnQ9PTEgcGF0aCkuICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9ieXRlX29mZiA9IDA7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9jbnQgPSAxO1xcbitcXHRpZiAocnVuKHNrZWwtXFx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFxcXCJmcmVlX29uZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTYgKiBwcywgXFxcImFmdGVyX2ZyZWVfb25lXFxcIik7XFxuK1xcbitcXHQvKiBGcmVlIHRlbiBwYWdlcyBpbiBvbmUgY2FsbCAoYnVsayBwYXRoKTsgb25seSB0aGUgZnJlZWQgcGFnZXMgY291bnQuICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZnJlZV9ieXRlX29mZiA9IDEgKiBwcztcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2NudCA9IDEwO1xcbitcXHRpZiAocnVuKHNrZWwtXFx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFxcXCJmcmVlX2J1bGtcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDYgKiBwcywgXFxcImFmdGVyX2ZyZWVfYnVsa1xcXCIpO1xcbitcXG4rXFx0LyogRnJlZSB0aGUgcmVtYWluaW5nIHNpeCAtXFx1MDAzZSBhcmVuYSBlbXB0eSBhZ2Fpbi4gKi9cXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2J5dGVfb2ZmID0gMTEgKiBwcztcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2NudCA9IDY7XFxuK1xcdGlmIChydW4oc2tlbC1cXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXFxcImZyZWVfcmVzdFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXFxcImFmdGVyX2ZyZWVfcmVzdFxcXCIpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlci1zcGFjZSBmYXVsdC1pbjogdG91Y2hpbmcgdW5hbGxvY2F0ZWQgYXJlbmEgcGFnZXMgYWxsb2NhdGVzIHRoZW1cXG4rXFx0ICogdGhyb3VnaCBhcmVuYV92bV9mYXVsdCgpLiBsaWJicGYgbW1hcCgpcyB0aGUgYXJlbmEgYXQgbWFwX2V4dHJhIGR1cmluZ1xcbitcXHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXFxuK1xcdCAqL1xcbitcXHRiYXNlID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShza2VsLVxcdTAwM2VtYXBzLmFyZW5hLCBcXHUwMDI2c3opO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoYmFzZSwgXFxcImFyZW5hX2Jhc2VcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA4OyBpKyspXFxuK1xcdFxcdGJhc2VbaSAqIHBzXSA9IDE7XFxuK1xcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDggKiBwcywgXFxcImFmdGVyX2ZhdWx0aW5cXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZyZWUgdGhlIGZhdWx0ZWQtaW4gcGFnZXMgZnJvbSBCUEYuIFRoZXkgYXJlIG1hcHBlZCBpbnRvIHRoZSB1c2VyIHZtYVxcbitcXHQgKiAoZWxldmF0ZWQgcmVmY291bnQpLCBzbyB0aGlzIGFsc28gZXhlcmNpc2VzIHRoZSB6YXAgcGF0aC5cXG4rXFx0ICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlcHRyID0gYmFzZTtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2J5dGVfb2ZmID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VmcmVlX2NudCA9IDg7XFxuK1xcdGlmIChydW4oc2tlbC1cXHUwMDNlcHJvZ3MuZnJlZV9wYWdlcywgXFxcImZyZWVfZmF1bHRlZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXFxcImFmdGVyX2ZyZWVfZmF1bHRlZFxcXCIpO1xcbitvdXQ6XFxuK1xcdGFyZW5hX21lbV91c2FnZV9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXFxuaW5kZXggYWNiOWQ1M2I1OTczM2YuLjU0NWIwNWQ3YTBhYTcyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmNcXG5AQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfc3Bpbl9sb2NrX3NpemUoaW50IHNpemUpXFxuIFxcdHJldHVybjtcXG4gfVxcbiBcXG4tdm9pZCB0ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxcbiB7XFxuIFxcdHJlcGVhdCA9IDEwMDA7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJhcmVuYV9zcGluX2xvY2tfMVxcXCIpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXFxuaW5kZXggZjgxYTBjMDY2NTA1OTYuLjBjMWM2Y2JmYTBmMTlkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmNcXG5AQCAtMjMsNyArMjMsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2FyZW5hX3N0cih2b2lkKVxcbiBcXHRhcmVuYV9zdHJzZWFyY2hfX2Rlc3Ryb3koc2tlbCk7XFxuIH1cXG4gXFxuLXZvaWQgdGVzdF9hcmVuYV9zdHJzZWFyY2godm9pZClcXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9zdHJzZWFyY2godm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYXJlbmFfc3Ryc2VhcmNoXFxcIikpXFxuIFxcdFxcdHRlc3RfYXJlbmFfc3RyKCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXFxuaW5kZXggYmE1YTVhNTBmN2MwN2QuLmRmN2U0YjhkYzM5NDU2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXFxuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfcGFyYWxsZWxfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbVxcbiBcXHRydW5fbGliYXJlbmFfcGFyYWxsZWxfZmluaShza2VsLCBuYW1lLCBwcmVmaXhsZW4pO1xcbiB9XFxuIFxcbi12b2lkIHRlc3RfbGliYXJlbmEodm9pZClcXG4rdm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYSh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBhcmVuYV9hbGxvY19yZXNlcnZlX2FyZ3MgYXJncztcXG4gXFx0c3RydWN0IGxpYmFyZW5hICpza2VsO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcXG5pbmRleCBmODk3NDA1ZjcwMWRkNS4uOWMzMWIxN2RiZjM5MWYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXFxuQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcXG4gICogUnVuIHRoZSB0ZXN0IGRlcGVuZGluZyBvbiB3aGV0aGVyIExMVk0gY2FuIGNvbXBpbGUgYXJlbmEgQVNBTlxcbiAgKiBwcm9ncmFtcy5cXG4gICovXFxuLXZvaWQgdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpXFxuK3ZvaWQgc2VyaWFsX3Rlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxcbiB7XFxuICNpZmRlZiBIQVNfQlBGX0FSRU5BX0FTQU5cXG4gXFx0cnVuX3Rlc3QoKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTBkOWQ2YWM4NmY2YjNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbV91c2FnZS5jXFxuQEAgLTAsMCArMSwzOSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX2FyZW5hX2NvbW1vbi5oXFxcIlxcbitcXG4rc3RydWN0IHtcXG4rXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovXFxuKyNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0XFxuK1xcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXFx1MDAzY1xcdTAwM2MgMzIpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuKyNlbHNlXFxuK1xcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXFx1MDAzY1xcdTAwM2MgNDQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuKyNlbmRpZlxcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK3ZvaWQgX19hcmVuYSAqcHRyO1xcbitpbnQgYWxsb2NfY250O1xcdFxcdC8qIGluOiAgcGFnZXMgdG8gYWxsb2NhdGUgKi9cXG4rbG9uZyBmcmVlX2J5dGVfb2ZmO1xcdC8qIGluOiAgYnl0ZSBvZmZzZXQgd2l0aGluIHB0ciB0byBzdGFydCBmcmVlaW5nICovXFxuK2ludCBmcmVlX2NudDtcXHRcXHQvKiBpbjogIHBhZ2VzIHRvIGZyZWUgKi9cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBhbGxvYyh2b2lkICpjdHgpXFxuK3tcXG4rXFx0cHRyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgYWxsb2NfY250LCBOVU1BX05PX05PREUsIDApO1xcbitcXHRyZXR1cm4gcHRyID8gMCA6IDE7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBmcmVlX3BhZ2VzKHZvaWQgKmN0eClcXG4re1xcbitcXHRpZiAoIXB0cilcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKGNoYXIgX19hcmVuYSAqKXB0ciArIGZyZWVfYnl0ZV9vZmYsIGZyZWVfY250KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNTo0Mi43NzMzOTgyMzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNTEyNzAzNzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXBwbHlfcmFuZ2Vfc2V0X2NiXCIsXG4gICAgXCJhcHBseV9yYW5nZV9jbGVhcl9jYlwiLFxuICAgIFwiYXJlbmFfbWFwX21lbV91c2FnZVwiLFxuICAgIFwiYXJlbmFfYWxsb2NfcGFnZXNcIixcbiAgICBcImFyZW5hX2ZyZWVfcGFnZXNcIixcbiAgICBcImFyZW5hX3ZtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcgdG8gQlBGIGFyZW5hcyBieSBtYWludGFpbmluZyBhIGNvdW50IG9mIHBvcHVsYXRlZCBwYWdlcyAoYG5yX3BhZ2VzYCkuIEl0IG1vZGlmaWVzIHRoZSBwYWdlIHRhYmxlIGNhbGxiYWNrcyAoYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmApIHRvIHVwZGF0ZSB0aGlzIGNvdW50ZXIgYW5kIGV4cG9zZXMgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHRoZXNlIGNhbGxiYWNrcyBpbiBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfdm1fZmF1bHRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGFyZW5hIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcGFnZSBjb3VudGluZyBsb2dpYyBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJhY2VzIG9yIG1lbW9yeSBsZWFrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MjcwZTVmZGI5NDA5ODI4YjhjOWZlMjhjY2RmZGJlMzY4MmY1YTBlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMTk6MDU6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDgwYjdiOGE2OTQ0NjQ1Li5iYzM0NjAyMTE2MDQwMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuKysrIGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNTUsOCArNTUsMTAgQEAgc3RydWN0IGJwZl9hcmVuYSB7XG4gXHRzdHJ1Y3Qgdm1fc3RydWN0ICprZXJuX3ZtO1xuIFx0c3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTtcbiBcdHN0cnVjdCByYW5nZV90cmVlIHJ0O1xuLVx0LyogcHJvdGVjdHMgcnQgKi9cbitcdC8qIHByb3RlY3RzIHJ0IGFuZCBucl9wYWdlcyAqL1xuIFx0cnFzcGlubG9ja190IHNwaW5sb2NrO1xuK1x0LyogbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBwb3B1bGF0ZWQgaW4gdGhlIGFyZW5hICovXG4rXHR1NjQgbnJfcGFnZXM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHZtYV9saXN0O1xuIFx0LyogcHJvdGVjdHMgdm1hX2xpc3QgKi9cbiBcdHN0cnVjdCBtdXRleCBsb2NrO1xuQEAgLTE0MywxNCArMTQ1LDE0IEBAIHN0YXRpYyBsb25nIGNvbXB1dGVfcGdvZmYoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIpXG4gfVxuIFxuIHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIHtcbitcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xuIFx0c3RydWN0IHBhZ2UgKipwYWdlcztcbi1cdHN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7XG4gXHRpbnQgaTtcbiB9O1xuIFxuIHN0cnVjdCBjbGVhcl9yYW5nZV9kYXRhIHtcbitcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xuIFx0c3RydWN0IGxsaXN0X2hlYWQgKmZyZWVfcGFnZXM7XG4tXHRzdHJ1Y3QgcGFnZSAqc2NyYXRjaF9wYWdlO1xuIH07XG4gXG4gc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuQEAgLTE4MCw3ICsxODIsNyBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4gXG4gXHRcdGlmIChwdGVfbm9uZShvbGQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC1cdTAwM2VzY3JhdGNoX3BhZ2UpKVxuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKHB0ZV9wYWdlKG9sZCkgIT0gZC1cdTAwM2VhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpKVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdHB0ZXBfZ2V0X2FuZF9jbGVhcihcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUpO1xuIFx0XHRmbHVzaF90bGJfYmVmb3JlX3NldChhZGRyKTtcbkBAIC0xOTYsNiArMTk4LDcgQEAgc3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuIFx0c2V0X3B0ZV9hdChcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHB0ZXZhbCk7XG4gI2VuZGlmXG4gXHRkLVx1MDAzZWkrKztcbitcdGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMrKztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMjcsMTAgKzIzMCwxMSBAQCBzdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbiBcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXG4gXHQgKiBoZXJlLiBXaXRob3V0IHRoZSBza2lwLCBzY3JhdGNoX3BhZ2Ugd291bGQgYmUgZnJlZWQuXG4gXHQgKi9cbi1cdGlmIChwYWdlID09IGQtXHUwMDNlc2NyYXRjaF9wYWdlKVxuK1x0aWYgKHBhZ2UgPT0gZC1cdTAwM2VhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0X19sbGlzdF9hZGQoXHUwMDI2cGFnZS1cdTAwM2VwY3BfbGxpc3QsIGQtXHUwMDNlZnJlZV9wYWdlcyk7XG4rXHRkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzLS07XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDEzLDcgKzQxNyw5IEBAIHN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXG4gc3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4ge1xuLVx0cmV0dXJuIDA7XG4rXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG4rXG4rXHRyZXR1cm4gKHU2NClSRUFEX09OQ0UoYXJlbmEtXHUwMDNlbnJfcGFnZXMpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIH1cbiBcbiBzdHJ1Y3Qgdm1hX2xpc3Qge1xuQEAgLTUwNiw4ICs1MTIsNyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4gXG4tXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAucGFnZXMgPSBcdTAwMjZwYWdlLCAuaSA9IDAsXG4tXHRcdFx0XHRcdCAuc2NyYXRjaF9wYWdlID0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlIH07XG4rXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG4gXHQvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqL1xuIFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG4gXHRpZiAocmV0KSB7XG5AQCAtNjk2LDggKzcwMSw4IEBAIHN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250XG4gXHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuK1x0ZGF0YS5hcmVuYSA9IGFyZW5hO1xuIFx0ZGF0YS5wYWdlcyA9IHBhZ2VzO1xuLVx0ZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2U7XG4gXG4gXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxuIFx0XHRnb3RvIG91dF9mcmVlX3BhZ2VzO1xuQEAgLTg3Myw4ICs4NzgsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxuIFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG4gXG4gXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2ZnJlZV9wYWdlcyk7XG4rXHRjZGF0YS5hcmVuYSA9IGFyZW5hO1xuIFx0Y2RhdGEuZnJlZV9wYWdlcyA9IFx1MDAyNmZyZWVfcGFnZXM7XG4tXHRjZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2U7XG4gXHQvKiBjbGVhciBwdGVzIGFuZCBjb2xsZWN0IHN0cnVjdCBwYWdlcyAqL1xuIFx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBrYWRkciwgcGFnZV9jbnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4gXHRcdFx0XHQgICAgIGFwcGx5X3JhbmdlX2NsZWFyX2NiLCBcdTAwMjZjZGF0YSk7XG5AQCAtOTgxLDggKzk4Niw4IEBAIHN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4gXG4gXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2ZnJlZV9wYWdlcyk7XG4rXHRjZGF0YS5hcmVuYSA9IGFyZW5hO1xuIFx0Y2RhdGEuZnJlZV9wYWdlcyA9IFx1MDAyNmZyZWVfcGFnZXM7XG4tXHRjZGF0YS5zY3JhdGNoX3BhZ2UgPSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2U7XG4gXHRhcmVuYV92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XG4gXHR1c2VyX3ZtX3N0YXJ0ID0gYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KGFyZW5hKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9hdG9taWNzLmNcbmluZGV4IGQ5ODU3N2E2YmFiYzBlLi4xYWQ1ZDAzZDA3YWRiMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2F0b21pY3MuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfYXRvbWljcy5jXG5AQCAtMjIyLDcgKzIyMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc3RvcmVfcmVsZWFzZShzdHJ1Y3QgYXJlbmFfYXRvbWljcyAqc2tlbClcbiBcdFx0ICBcInN0b3JlX3JlbGVhc2U2NF9yZXN1bHRcIik7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9hdG9taWNzKHZvaWQpXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9hdG9taWNzKHZvaWQpXG4ge1xuIFx0c3RydWN0IGFyZW5hX2F0b21pY3MgKnNrZWw7XG4gXHRpbnQgZXJyO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfZGlyZWN0X3ZhbHVlLmNcbmluZGV4IDRiNGFkYjNmNGI3MWViLi4wMWZjZjQ5NjVlYTQzYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2RpcmVjdF92YWx1ZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9kaXJlY3RfdmFsdWUuY1xuQEAgLTY2LDcgKzY2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKHZvaWQpXG4gXHRjbG9zZShtYXBfZmQpO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfZGlyZWN0X3ZhbHVlKHZvaWQpXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9kaXJlY3RfdmFsdWUodm9pZClcbiB7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcIm9uZV9wYXN0X2VuZFwiKSlcbiBcdFx0dGVzdF9hcmVuYV9kaXJlY3RfdmFsdWVfb25lX3Bhc3RfZW5kKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfaHRhYi5jXG5pbmRleCBkNjlmZDI0NjVmNTM2Ny4uOTFjY2YwNDAyOTgwNDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9odGFiLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2h0YWIuY1xuQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9odGFiX2FzbSh2b2lkKVxuIFx0YXJlbmFfaHRhYl9hc21fX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9odGFiKHZvaWQpXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9odGFiKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhcmVuYV9odGFiX2xsdm1cIikpXG4gXHRcdHRlc3RfYXJlbmFfaHRhYl9sbHZtKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbGlzdC5jXG5pbmRleCA0ZjI4NjZhNjE1Y2U1Mi4uMjY0OGUwNmY1M2QwNzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9saXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX2xpc3QuY1xuQEAgLTY4LDcgKzY4LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9saXN0X2FkZF9kZWwoaW50IGNudCwgYm9vbCBub25zbGVlcGFibGUpXG4gXHRhcmVuYV9saXN0X19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbi12b2lkIHRlc3RfYXJlbmFfbGlzdCh2b2lkKVxuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbGlzdCh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYXJlbmFfbGlzdF8xXCIpKVxuIFx0XHR0ZXN0X2FyZW5hX2xpc3RfYWRkX2RlbCgxLCBmYWxzZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNGMyZDFhMWQ2NzNjZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmNcbkBAIC0wLDAgKzEsMTIyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdXNlci5oXHUwMDNlXG4rI2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpXG4rI2VuZGlmXG4rXG4rI2luY2x1ZGUgXCJhcmVuYV9tZW1fdXNhZ2Uuc2tlbC5oXCJcbitcbisvKlxuKyAqIGFyZW5hX21hcF9tZW1fdXNhZ2UoKSBpcyBzdXJmYWNlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIG1hcCdzXG4rICogL3Byb2MvXHUwMDNjcGlkXHUwMDNlL2ZkaW5mby9cdTAwM2NmZFx1MDAzZSBcIm1lbWxvY2s6XCIgbGluZSAodGhlIHNhbWUgdmFsdWUgYnBmdG9vbCBtYXAgc2hvd1xuKyAqIHByaW50cykuIFJlYWQgaXQgZGlyZWN0bHkgc28gdGhlIHRlc3QgaGFzIG5vIGV4dGVybmFsIGRlcGVuZGVuY3kuXG4rICovXG4rc3RhdGljIGxvbmcgbWFwX21lbWxvY2soaW50IG1hcF9mZClcbit7XG4rXHRjaGFyIHBhdGhbNjRdLCBsaW5lWzEyOF07XG4rXHRsb25nIG1lbWxvY2sgPSAtMTtcbitcdEZJTEUgKmY7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiL3Byb2Mvc2VsZi9mZGluZm8vJWRcIiwgbWFwX2ZkKTtcbitcdGYgPSBmb3BlbihwYXRoLCBcInJcIik7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoZiwgXCJvcGVuX2ZkaW5mb1wiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcbitcdFx0aWYgKHNzY2FuZihsaW5lLCBcIm1lbWxvY2s6XFx0JWxkXCIsIFx1MDAyNm1lbWxvY2spID09IDEpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXHRmY2xvc2UoZik7XG4rXHRBU1NFUlRfTkVRKG1lbWxvY2ssIC0xLCBcInBhcnNlX21lbWxvY2tcIik7XG4rXHRyZXR1cm4gbWVtbG9jaztcbit9XG4rXG4rc3RhdGljIGludCBydW4oc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdGludCBlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgXHUwMDI2b3B0cyk7XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIG5hbWUpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgbmFtZSkpXG4rXHRcdHJldHVybiAtMTtcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbV91c2FnZSh2b2lkKVxuK3tcbitcdHN0cnVjdCBhcmVuYV9tZW1fdXNhZ2UgKnNrZWw7XG4rXHRjb25zdCBsb25nIHBzID0gUEFHRV9TSVpFO1xuK1x0Y2hhciAqYmFzZTtcbitcdHNpemVfdCBzejtcbitcdGludCBmZCwgaTtcbitcbitcdHNrZWwgPSBhcmVuYV9tZW1fdXNhZ2VfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcIm9wZW5fbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1x0ZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuYXJlbmEpO1xuK1xuK1x0LyogRnJlc2ggYXJlbmE6IG5vIGRhdGEgcGFnZXMsIGFuZCB0aGUgc2NyYXRjaCBwYWdlIGlzIG5vdCBjb3VudGVkLiAqL1xuK1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMCwgXCJpbml0aWFsXCIpO1xuK1xuK1x0LyogQlBGLXNpZGUgYWxsb2NhdGlvbiBvZiAxNyBwYWdlcy4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWFsbG9jX2NudCA9IDE3O1xuK1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmFsbG9jLCBcImFsbG9jXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdC8qXG4rXHQgKiBBIE5VTEwgcHRyIG1lYW5zIGJwZl9hcmVuYV9hbGxvY19wYWdlcygpIGl0c2VsZiBmYWlsZWQgKGUuZy4gdGhlIGhvc3RcbitcdCAqIGlzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSksIG5vdCBhIG1pc2NvdW50IC0tIGZsYWcgaXQgZGlzdGluY3RseSBzbyBhXG4rXHQgKiByZWQgQ0kgcnVuIGlzIG5vdCBtaXN0YWtlbiBmb3IgYSBjb3VudGluZyBidWcuXG4rXHQgKi9cbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLVx1MDAzZWJzcy1cdTAwM2VwdHIsIFwiYXJlbmFfYWxsb2NfcGFnZXNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTcgKiBwcywgXCJhZnRlcl9hbGxvY1wiKTtcbitcbitcdC8qIEZyZWUgYSBzaW5nbGUgcGFnZSAoYXJlbmFfZnJlZV9wYWdlcyBwYWdlX2NudD09MSBwYXRoKS4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9jbnQgPSAxO1xuK1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFwiZnJlZV9vbmVcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgMTYgKiBwcywgXCJhZnRlcl9mcmVlX29uZVwiKTtcbitcbitcdC8qIEZyZWUgdGVuIHBhZ2VzIGluIG9uZSBjYWxsIChidWxrIHBhdGgpOyBvbmx5IHRoZSBmcmVlZCBwYWdlcyBjb3VudC4gKi9cbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAxICogcHM7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2NudCA9IDEwO1xuK1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFwiZnJlZV9idWxrXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDYgKiBwcywgXCJhZnRlcl9mcmVlX2J1bGtcIik7XG4rXG4rXHQvKiBGcmVlIHRoZSByZW1haW5pbmcgc2l4IC1cdTAwM2UgYXJlbmEgZW1wdHkgYWdhaW4uICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VmcmVlX2J5dGVfb2ZmID0gMTEgKiBwcztcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfY250ID0gNjtcbitcdGlmIChydW4oc2tlbC1cdTAwM2Vwcm9ncy5mcmVlX3BhZ2VzLCBcImZyZWVfcmVzdFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRBU1NFUlRfRVEobWFwX21lbWxvY2soZmQpLCAwLCBcImFmdGVyX2ZyZWVfcmVzdFwiKTtcbitcbitcdC8qXG4rXHQgKiBVc2VyLXNwYWNlIGZhdWx0LWluOiB0b3VjaGluZyB1bmFsbG9jYXRlZCBhcmVuYSBwYWdlcyBhbGxvY2F0ZXMgdGhlbVxuK1x0ICogdGhyb3VnaCBhcmVuYV92bV9mYXVsdCgpLiBsaWJicGYgbW1hcCgpcyB0aGUgYXJlbmEgYXQgbWFwX2V4dHJhIGR1cmluZ1xuK1x0ICogbG9hZCwgc28gYnBmX21hcF9faW5pdGlhbF92YWx1ZSgpIGhhbmRzIGJhY2sgdGhhdCBiYXNlLlxuK1x0ICovXG4rXHRiYXNlID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShza2VsLVx1MDAzZW1hcHMuYXJlbmEsIFx1MDAyNnN6KTtcbitcdGlmICghQVNTRVJUX09LX1BUUihiYXNlLCBcImFyZW5hX2Jhc2VcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgODsgaSsrKVxuK1x0XHRiYXNlW2kgKiBwc10gPSAxO1xuK1x0QVNTRVJUX0VRKG1hcF9tZW1sb2NrKGZkKSwgOCAqIHBzLCBcImFmdGVyX2ZhdWx0aW5cIik7XG4rXG4rXHQvKlxuK1x0ICogRnJlZSB0aGUgZmF1bHRlZC1pbiBwYWdlcyBmcm9tIEJQRi4gVGhleSBhcmUgbWFwcGVkIGludG8gdGhlIHVzZXIgdm1hXG4rXHQgKiAoZWxldmF0ZWQgcmVmY291bnQpLCBzbyB0aGlzIGFsc28gZXhlcmNpc2VzIHRoZSB6YXAgcGF0aC5cbitcdCAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcHRyID0gYmFzZTtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWZyZWVfYnl0ZV9vZmYgPSAwO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlZnJlZV9jbnQgPSA4O1xuK1x0aWYgKHJ1bihza2VsLVx1MDAzZXByb2dzLmZyZWVfcGFnZXMsIFwiZnJlZV9mYXVsdGVkXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdEFTU0VSVF9FUShtYXBfbWVtbG9jayhmZCksIDAsIFwiYWZ0ZXJfZnJlZV9mYXVsdGVkXCIpO1xuK291dDpcbitcdGFyZW5hX21lbV91c2FnZV9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zcGluX2xvY2suY1xuaW5kZXggYWNiOWQ1M2I1OTczM2YuLjU0NWIwNWQ3YTBhYTcyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Bpbl9sb2NrLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3NwaW5fbG9jay5jXG5AQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYXJlbmFfc3Bpbl9sb2NrX3NpemUoaW50IHNpemUpXG4gXHRyZXR1cm47XG4gfVxuIFxuLXZvaWQgdGVzdF9hcmVuYV9zcGluX2xvY2sodm9pZClcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX3NwaW5fbG9jayh2b2lkKVxuIHtcbiBcdHJlcGVhdCA9IDEwMDA7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX3NwaW5fbG9ja18xXCIpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfc3Ryc2VhcmNoLmNcbmluZGV4IGY4MWEwYzA2NjUwNTk2Li4wYzFjNmNiZmEwZjE5ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX3N0cnNlYXJjaC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9zdHJzZWFyY2guY1xuQEAgLTIzLDcgKzIzLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9hcmVuYV9zdHIodm9pZClcbiBcdGFyZW5hX3N0cnNlYXJjaF9fZGVzdHJveShza2VsKTtcbiB9XG4gXG4tdm9pZCB0ZXN0X2FyZW5hX3N0cnNlYXJjaCh2b2lkKVxuK3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfc3Ryc2VhcmNoKHZvaWQpXG4ge1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhcmVuYV9zdHJzZWFyY2hcIikpXG4gXHRcdHRlc3RfYXJlbmFfc3RyKCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbmluZGV4IGJhNWE1YTUwZjdjMDdkLi5kZjdlNGI4ZGMzOTQ1NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3BhcmFsbGVsX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW1cbiBcdHJ1bl9saWJhcmVuYV9wYXJhbGxlbF9maW5pKHNrZWwsIG5hbWUsIHByZWZpeGxlbik7XG4gfVxuIFxuLXZvaWQgdGVzdF9saWJhcmVuYSh2b2lkKVxuK3ZvaWQgc2VyaWFsX3Rlc3RfbGliYXJlbmEodm9pZClcbiB7XG4gXHRzdHJ1Y3QgYXJlbmFfYWxsb2NfcmVzZXJ2ZV9hcmdzIGFyZ3M7XG4gXHRzdHJ1Y3QgbGliYXJlbmEgKnNrZWw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXG5pbmRleCBmODk3NDA1ZjcwMWRkNS4uOWMzMWIxN2RiZjM5MWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xuQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIHZvaWQgcnVuX3Rlc3Qodm9pZClcbiAgKiBSdW4gdGhlIHRlc3QgZGVwZW5kaW5nIG9uIHdoZXRoZXIgTExWTSBjYW4gY29tcGlsZSBhcmVuYSBBU0FOXG4gICogcHJvZ3JhbXMuXG4gICovXG4tdm9pZCB0ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcbit2b2lkIHNlcmlhbF90ZXN0X2xpYmFyZW5hX2FzYW4odm9pZClcbiB7XG4gI2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxuIFx0cnVuX3Rlc3QoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtX3VzYWdlLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTBkOWQ2YWM4NmY2YjNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1fdXNhZ2UuY1xuQEAgLTAsMCArMSwzOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9hcmVuYV9jb21tb24uaFwiXG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovXG4rI2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjRcbitcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDMyKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuKyNlbHNlXG4rXHRfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsIFx1MDAzY1x1MDAzYyA0NCk7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbisjZW5kaWZcbit9IGFyZW5hIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3ZvaWQgX19hcmVuYSAqcHRyO1xuK2ludCBhbGxvY19jbnQ7XHRcdC8qIGluOiAgcGFnZXMgdG8gYWxsb2NhdGUgKi9cbitsb25nIGZyZWVfYnl0ZV9vZmY7XHQvKiBpbjogIGJ5dGUgb2Zmc2V0IHdpdGhpbiBwdHIgdG8gc3RhcnQgZnJlZWluZyAqL1xuK2ludCBmcmVlX2NudDtcdFx0LyogaW46ICBwYWdlcyB0byBmcmVlICovXG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBhbGxvYyh2b2lkICpjdHgpXG4re1xuK1x0cHRyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCBhbGxvY19jbnQsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRyZXR1cm4gcHRyID8gMCA6IDE7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgZnJlZV9wYWdlcyh2b2lkICpjdHgpXG4re1xuK1x0aWYgKCFwdHIpXG4rXHRcdHJldHVybiAxO1xuK1x0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIChjaGFyIF9fYXJlbmEgKilwdHIgKyBmcmVlX2J5dGVfb2ZmLCBmcmVlX2NudCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTk6MDU6NDIuNzczNDAwNzk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyNDY3MTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBga2VybmVsL2JwZi9hcmVuYS5jYCBhbmQgaW50cm9kdWNpbmcgYSBuZXcgdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwg4oCTIGlzIHRoaXMgc29tZXRoaW5nIHdvcnRoIHNpbmtpbmcgdGltZSBpbnRvP1xuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIG1lbW9yeSB1c2FnZSB0cmFja2luZyB3aXRoaW4gdGhlIEJQRiBhcmVuYS4gU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBgbnJfcGFnZXNgIHRvIHRoZSBgc3RydWN0IGJwZl9hcmVuYWAgdG8ga2VlcCB0YWJzIG9uIHRoZSBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IGluIHVzZS4gTWFrZXMgc2Vuc2UsIHRoYXQncyBhIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGFueSBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gY2FsbGJhY2tzIGxpa2UgYGFwcGx5X3JhbmdlX3NldF9jYmAgKGluY3JlbWVudGluZyBgbnJfcGFnZXNgKSwgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYCAoZGVjcmVtZW50aW5nIGl0KSwgYW5kIHRoZSBgYXJlbmFfbWFwX21lbV91c2FnZWAgZnVuY3Rpb24uIFRoZSBgYXJlbmFfbWFwX21lbV91c2FnZWAgY2hhbmdlIGlzIGp1c3QgZ3JhYmJpbmcgdGhhdCBwYWdlIGNvdW50IGFuZCBzaGlmdGluZyBpdCBhcHByb3ByaWF0ZWx5LiBUaGUgY29kZSBhbHNvIGFwcGVhcnMgdG8gYmUgcmVmYWN0b3Jpbmcgc29tZSBzdHJ1Y3RzIHRvIHBhc3MgYGFyZW5hYCByYXRoZXIgdGhhbiBqdXN0IHRoZSBgc2NyYXRjaF9wYWdlYC5cblxuU28sIHRoZSBxdWVzdGlvbiBpcywgKmlzIHRoaXMgY29kZSByZWFjaGFibGUgYW5kIHZ1bG5lcmFibGUgdG8gc29tZXRoaW5nIGxpa2UgYSBtZW1vcnkgY29ycnVwdGlvbj8qIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBCUEYsIHRoZSBhbnN3ZXIgaXMgYSBsaWtlbHkgeWVzLiBJdCBtb2RpZmllcyB0aGUgYXJlbmEgbG9naWMsIGFuZCB0aGUgYXJlbmEgaXRzZWxmIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBgQlBGX01BUF9UWVBFX0FSRU5BYCBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQg4oCTIGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLCBgYXJlbmFfbWFwX21lbV91c2FnZWAsIGBhcmVuYV92bV9mYXVsdGAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3dvcmtlcmAg4oCTIGFyZSBhbGwgcHJpbWUgdGFyZ2V0cy4gVGhlc2UgYXJlIGNyaXRpY2FsIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB0aGUgYXJlbmHigJlzIHN0YXRlLCBpbmNsdWRpbmcgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBwYWdlcyBhbmQgaGFuZGxpbmcgbWVtb3J5IGFjY2Vzcy4gQSBtaXNjYWxjdWxhdGlvbiBoZXJlIGNvdWxkIGxlYWQgdG8gc29tZSB2ZXJ5IGludGVyZXN0aW5nIG1lbW9yeSBpc3N1ZXMuIEkgc2hvdWxkIHB1bGwgdXAgYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGRpZyBpbi4gSXQncyB0aW1lIHRvIGZpbmQgYSB3YXkgdG8gYnJlYWsgaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNTo0OS40OTgwNzUyNjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzODE1NTcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYV9tYXBfbWVtX3VzYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvYXJlbmEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmM9NDEyPXN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE3LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTg6c3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxOS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1MC1cXHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MTpcXHQubWFwX21lbV91c2FnZSA9IGFyZW5hX21hcF9tZW1fdXNhZ2UsXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cXHQubWFwX2J0Zl9pZCA9IFxcdTAwMjZicGZfYXJlbmFfbWFwX2J0Zl9pZHNbMF0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA1OjUxLjUzNjIzNzEzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5Njk4MTg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IFVzYWdlIGluIEFyZW5hIE1hcHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYGFyZW5hX21hcF9tZW1fdXNhZ2VgIHZhcmlhYmxlIHBsYXlzIGEgcm9sZSB3aXRoaW4gdGhlIGBhcmVuYV9tYXBfb3BzYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgdGhlIGNvcmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byB0cmFjZSBob3cgdGhlIG1lbW9yeSB1c2FnZSBkYXRhIGlzIG1hbmlwdWxhdGVkLlxuXG5TcGVjaWZpY2FsbHksIGBucl9wYWdlc2AgaXMgdGhlIHRhcmdldCB2YXJpYWJsZSBoZXJlLiBJIHNlZSB0aGF0IGl0J3MgZ2V0dGluZyB1cGRhdGVkIHdpdGhpbiB0aGUgYGFwcGx5X3JhbmdlX3NldF9jYmAgYW5kIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAgY2FsbGJhY2sgZnVuY3Rpb25zLiBJbnRlcmVzdGluZy4gVGhvc2UgY2FsbGJhY2tzLCBpbiB0dXJuLCBhcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBgYXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZWAgYW5kIGBhcHBseV90b19wYWdlX3JhbmdlYCBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSB0aGUgd29ya2hvcnNlcyBhcHBseWluZyBjaGFuZ2VzIG92ZXIgYSByYW5nZSBvZiBtZW1vcnkgcGFnZXMuXG5cbk5vdywgdG8gc29saWRpZnkgbXkgY29tcHJlaGVuc2lvbiwgSSBuZWVkIHRvIHpvb20gaW4gb24gd2hhdCB0aGUgYGFwcGx5X3JhbmdlX3NldF9jYmAgYW5kIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBkb2luZy4gTGV0J3MgZGVsdmUgaW50byB0aGVpciBpbXBsZW1lbnRhdGlvbiB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHBhZ2UgbWFuYWdlbWVudCBsb2dpYyBhbmQgaG93IHRoZXkncmUgY29udHJpYnV0aW5nIHRvIHRoZSBgYXJlbmFfbWFwX21lbV91c2FnZWAgZmlndXJlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRyaWNhY2llcyBvZiBob3cgdGhleSBjaGFuZ2UgYG5yX3BhZ2VzYCBpbiB0aGVpciByZXNwZWN0aXZlIHNldCBhbmQgY2xlYXIgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM0MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNTo1NS4yMzMyMjE0NzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5NDgzNTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwcGx5X3JhbmdlX3NldF9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9hcmVuYS5jPTE1Mz1zdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTU3LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxNTg6c3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xNTkte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTI1OT1zdGF0aWMgaW50IHBvcHVsYXRlX3BndGFibGVfZXhjZXB0X3B0ZShzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjItXFx0cmV0dXJuIGFwcGx5X3RvX3BhZ2VfcmFuZ2UoXFx1MDAyNmluaXRfbW0sIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSksXFxua2VybmVsL2JwZi9hcmVuYS5jOjI2MzpcXHRcXHRcXHRcXHQgICBTWl80RyArIEdVQVJEX1NaIC8gMiwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBOVUxMKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjY0LX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz00Nzk9c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTIyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MjM6XFx0cmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwga2FkZHIsIFBBR0VfU0laRSwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBcXHUwMDI2ZGF0YSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUyNC1cXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY0PXN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03NDYtXFx0XFx0XFx0XFx0XFx0ICBrZXJuX3ZtX3N0YXJ0ICsgdWFkZHIzMiArIChtYXBwZWQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCksXFxua2VybmVsL2JwZi9hcmVuYS5jOjc0NzpcXHRcXHRcXHRcXHRcXHQgIHRoaXNfYmF0Y2ggXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBcXHUwMDI2ZGF0YSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc0OC1cXHRcXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA1OjU1LjgyMjcxMTAzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDA2MDkxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIEFyZW5hIE1lbW9yeSBUcmFja2luZzogQSBDbG9zZXIgTG9vayoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcgZm9yIEJQRiBhcmVuYXMsIHdoaWNoIGlzIGEgc2Vuc2libGUgYWRkaXRpb24uIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIHVwZGF0aW5nIGBucl9wYWdlc2AgYW5kIHJldHVybmluZyBpdCB2aWEgYGFyZW5hX21hcF9tZW1fdXNhZ2VgLiBUaGlzIGlzIGZ1bmN0aW9uYWwsIGJ1dCB0aGUgbWFpbiBnb2FsIGlzIG1lbW9yeSB0cmFja2luZy4gSSBkb24ndCBzZWUgYW55dGhpbmcgb3Zlcmx5IGNvbXBsZXggYXQgZmlyc3QgZ2xhbmNlLlxuXG5UaGUgY29kZSBjaGFuZ2VzIGFyZSBtb3N0bHkgYWJvdXQgcmVmYWN0b3Jpbmc6IHJlcGxhY2luZyBgc2NyYXRjaF9wYWdlYCB3aXRoIGBhcmVuYWAgaW4gYSBjb3VwbGUgb2YgZnVuY3Rpb25zLCBgYXBwbHlfcmFuZ2VfZGF0YWAgYW5kIGBjbGVhcl9yYW5nZV9kYXRhYC4gSXQgaW5jcmVtZW50cyBgbnJfcGFnZXNgIHdpdGhpbiBgYXBwbHlfcmFuZ2Vfc2V0X2NiYCBhbmQgZGVjcmVtZW50cyBpdCB3aXRoaW4gYGFwcGx5X3JhbmdlX2NsZWFyX2NiYC4gTm90aGluZyB0b28gY3JhenksIGJ1dCB0aGlzIHRvdWNoZXMgY29yZSBCUEYgYXJlbmEgbWVtb3J5IG1hbmFnZW1lbnQuXG5cbkdpdmVuIHRoYXQgdGhpcyBtb2RpZmllcyBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCwgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4gSXQncyBhIGdvb2QgdGFyZ2V0LiBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2Ugc3ltYm9sczogYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAsIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCwgYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYW5kIGBhcmVuYV9mcmVlX3BhZ2VzYC4gT2gsIGFuZCBgYXJlbmFfdm1fZmF1bHRgIG1pZ2h0IGFsc28gYmUgcmVsZXZhbnQuXG5cbldhaXQsIGFyZSB0aG9zZSBjYWxsYmFjayBmdW5jdGlvbnMsIGBhcHBseV9yYW5nZV9zZXRfY2JgIGFuZCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLCBzdGF0aWM/IE9rYXksIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGVzZSBzdGF0aWMgY2FsbGJhY2tzIGFyZSByZWFjaGFibGUgZHVyaW5nIEJQRiBhcmVuYSBvcGVyYXRpb25zIGFuZCBpZiBJIGNhbiBlZmZlY3RpdmVseSB0YXJnZXQgdGhlbSB3aXRoIGZ1enppbmcuXG5cbkdvb2QsIHRoZXkgKmFyZSogY2FsbGVkIGR1cmluZyBCUEYgYXJlbmEgb3BlcmF0aW9ucy4gRXhjZWxsZW50LlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIGFueXRoaW5nIHJlbGV2YW50IHRvIEJQRiBhcmVuYSBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNjowMS4xNjMzMjI2MjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUxMTAwNDc0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfQVJFTkFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEwNDY9c3RhdGljIHZvaWQgYnVpbGRfZXBpbG9ndWUoc3RydWN0IGppdF9jdHggKmN0eCwgYm9vbCB3YXNfY2xhc3NpYylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMDAtI2RlZmluZSBCUEZfRklYVVBfQVJFTkFfUkVHX01BU0sgICBHRU5NQVNLKDIwLCAxNilcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMTAxOiNkZWZpbmUgQlBGX0FSRU5BX0FDQ0VTUyAgICAgICAgICAgQklUKDIxKVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMDItI2RlZmluZSBCUEZfRklYVVBfUkVHX01BU0tcXHRHRU5NQVNLKDMxLCAyNylcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTExMDU9Ym9vbCBleF9oYW5kbGVyX2JwZihjb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleCxcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExMTAtXFx0aW50IGFyZW5hX3JlZyA9IEZJRUxEX0dFVChCUEZfRklYVVBfQVJFTkFfUkVHX01BU0ssIGV4LVxcdTAwM2VmaXh1cCk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTExMTpcXHRib29sIGlzX2FyZW5hID0gISEoZXgtXFx1MDAzZWZpeHVwIFxcdTAwMjYgQlBGX0FSRU5BX0FDQ0VTUyk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTExMi1cXHRib29sIGlzX3dyaXRlID0gKGRzdF9yZWcgPT0gRE9OVF9DTEVBUik7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMTI5PXN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTExODYtXFx0aWYgKGlzX2FyZW5hKSB7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTE4NzpcXHRcXHRleC1cXHUwMDNlZml4dXAgfD0gQlBGX0FSRU5BX0FDQ0VTUztcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMTg4LVxcdFxcdC8qXFxuLS1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC0xNi1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaDoxNzojaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgXFx1MDAyNlxcdTAwMjYgIWRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC0xOC0jaWZuZGVmIF9fYXJlbmFcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZT04NDQ9TElCQVJFTkFfQVNBTl9TS0VMIDo9IGxpYmFyZW5hL2xpYmFyZW5hX2FzYW4uc2tlbC5oXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjg0NTpDRkxBR1MgKz0gLURIQVNfQlBGX0FSRU5BX0FTQU5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtODQ2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlPTc5PWxpYmFyZW5hLmJwZi5vOiAkKExJQkFSRU5BX09CSkVDVFMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGUtODQtXFx0JChjYWxsIG1zZyxDTE5HLUJQRixsaWJhcmVuYSwkQClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvTWFrZWZpbGU6ODU6XFx0JChRKSQoQ0xBTkcpICQoQlBGX0NGTEFHUykgJChBU0FOX0ZMQUdTKSAtREJQRl9BUkVOQV9BU0FOICQoQlBGX1RBUkdFVF9FTkRJQU4pIC1jICRcXHUwMDNjIC1vICRAXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL01ha2VmaWxlLTg2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX2NvbW1vbi5oLTM0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9jb21tb24uaDozNTojaWYgZGVmaW5lZChfX0JQRl9GRUFUVVJFX0FERFJfU1BBQ0VfQ0FTVCkgXFx1MDAyNlxcdTAwMjYgIWRlZmluZWQoQlBGX0FSRU5BX0ZPUkNFX0FTTSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfY29tbW9uLmgtMzYtI2RlZmluZSBfX2FyZW5hIF9fYXR0cmlidXRlX18oKGFkZHJlc3Nfc3BhY2UoMSkpKSBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoXFxcImFyZW5hXFxcIikpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oLTItLyogQ29weXJpZ2h0IChjKSAyMDI1IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaDozOiNpZm5kZWYgQlBGX0FSRU5BX1NQSU5fTE9DS19IXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oOjQ6I2RlZmluZSBCUEZfQVJFTkFfU1BJTl9MT0NLX0hcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9icGZfYXJlbmFfc3Bpbl9sb2NrLmgtNS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaD01MTY9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFyZW5hX3NwaW5fdW5sb2NrKGFyZW5hX3NwaW5sb2NrX3QgX19hcmVuYSAqbG9jaylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2JwZl9hcmVuYV9zcGluX2xvY2suaC01NDItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvYnBmX2FyZW5hX3NwaW5fbG9jay5oOjU0MzojZW5kaWYgLyogQlBGX0FSRU5BX1NQSU5fTE9DS19IICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9MTU9ZXh0ZXJuIHZvbGF0aWxlIGJvb2wgYXNhbl9yZXBvcnRfb25jZTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaC0yNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6MjY6I2lmZGVmIEJQRl9BUkVOQV9BU0FOXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oLTI3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oPTg1PXN0YXRpYyB2b2lkICgqX19hc2FuX2J0Zl9hbmNob3JzW10pKGludHB0cl90KSA9IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaC05MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg6OTI6I2Vsc2UgLyogQlBGX0FSRU5BX0FTQU4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtOTMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmg9OTc9X193ZWFrIGJvb2wgYXNhbl9yZWFkeSh2b2lkKSB7IHJldHVybiB0cnVlOyB9XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYXNhbi5oLTk4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2FzYW4uaDo5OTojZW5kaWYgLyogQlBGX0FSRU5BX0FTQU4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9hc2FuLmgtMTAwLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmM9MTE9ZXh0ZXJuIHN0cnVjdCBidWRkeSBfX2FyZW5hIGJ1ZGR5O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jLTEyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jOjEzOiNpZmRlZiBCUEZfQVJFTkFfQVNBTlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jLTE0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jPTg9ZW51bSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmMtODAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jOjgxOiNpZmRlZiBCUEZfQVJFTkFfQVNBTlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy04Mi1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYz00ODU9X193ZWFrIF9fbm9hc2FuIGludCBhc2FuX2luaXQoc3RydWN0IGFzYW5faW5pdF9hcmdzICphcmdzKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9hc2FuLmJwZi5jLTU1MC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2FzYW4uYnBmLmM6NTUxOiNlbmRpZiAvKiBCUEZfQVJFTkFfQVNBTiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYXNhbi5icGYuYy01NTItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6NTojaWZkZWYgSEFTX0JQRl9BUkVOQV9BU0FOXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTYtI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jPTM3PXN0YXRpYyB2b2lkIHJ1bl90ZXN0KHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtODEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jOjgyOiNlbmRpZiAvKiBIQVNfQlBGX0FSRU5BX0FTQU4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMtODMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM9ODg9dm9pZCBzZXJpYWxfdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jLTg5LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmM6OTA6I2lmZGVmIEhBU19CUEZfQVJFTkFfQVNBTlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYy05MS1cXHRydW5fdGVzdCgpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2h0YWIuYz0yNj1pbnQgYXJlbmFfaHRhYl9sbHZtKHZvaWQgKmN0eClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jLTI3LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYi5jOjI4OiNpZiBkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfQUREUl9TUEFDRV9DQVNUKSB8fCBkZWZpbmVkKEJQRl9BUkVOQV9GT1JDRV9BU00pXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2h0YWIuYy0yOS1cXHRzdHJ1Y3QgaHRhYiBfX2FyZW5hICpodGFiO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2h0YWJfYXNtLmMtMi0vKiBDb3B5cmlnaHQgKGMpIDIwMjQgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2h0YWJfYXNtLmM6MzojZGVmaW5lIEJQRl9BUkVOQV9GT1JDRV9BU01cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfaHRhYl9hc20uYy00LSNkZWZpbmUgYXJlbmFfaHRhYl9sbHZtIGFyZW5hX2h0YWJfYXNtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA2OjA2LjY3NDMzMjg0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTg0MDkxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIEFyZW5hIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBgQ09ORklHX0JQRl9BUkVOQWAgY29uZmlndXJhdGlvbiwgYW5kIGl0J3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBpdCdzIG5vdCBhIHN0YW5kYWxvbmUgb3B0aW9uLiBJdCBzZWVtcyB0byBiZSBpbnRlcnR3aW5lZCB3aXRoIGBDT05GSUdfQlBGX1NZU0NBTExgLCB3aGljaCBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFyZW5hIGZ1bmN0aW9uYWxpdHkgaXMgYWN0dWFsbHkgYmVpbmcgY29tcGlsZWQuIE15IG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGFyZW5hLm9g4oCUdGhlIG9iamVjdCBmaWxlIHJlbGF0ZWQgdG8gdGhlIGFyZW5h4oCUaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFncywgYW5kIGlmIHNvLCB3aGF0IHRob3NlIGZsYWdzIGFyZS4gVGhhdCBNYWtlZmlsZSBzaG91bGQgcHJvdmlkZSB0aGUga2V5LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBkZXBlbmRlbmN5IGFuZCBhc2NlcnRhaW4gaXRzIHByZWNpc2UgcmVsYXRpb25zaGlwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY1NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA2OjA5LjgzMjc0NDg2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5OTQzMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXFxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNjoxMC40OTI2OTc1MTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMyOTE0NTM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBBcmVuYSBNZW1vcnkgVHJhY2tpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcHJpbWFyeSBlbmFibGluZyBjb25maWd1cmF0aW9uIGhlcmUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBpdCBhbHNvIHJlcXVpcmVzIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAsIHdoaWNoIGlzIGV4cGVjdGVkIGdpdmVuIHRoZSBuYXR1cmUgb2YgQlBGLiBUaGUgY29kZSBpcyB1c2luZyBgQlBGX1NZU0NBTExgIGRpcmVjdGx5LiBNYWtlcyBzZW5zZS5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AsIGZvY3VzaW5nIG9uIHRoZSBCUEYgYXJlbmEgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIG1lbW9yeSB1c2FnZSB0cmFja2luZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gSSdtIGZvY3VzaW5nIG9uIGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgLCBgYXJlbmFfbWFwX21lbV91c2FnZWAsIGBhcmVuYV9hbGxvY19wYWdlc2AsIGBhcmVuYV9mcmVlX3BhZ2VzYCwgYW5kIGBhcmVuYV92bV9mYXVsdGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGFmZmVjdGVkLlxuXG5Ob3csIGEgcXVpY2sgZm9sbG93LXVwIHRob3VnaHQuLi4gSSdtIG5vdGljaW5nIHRoYXQgYGFwcGx5X3JhbmdlX3NldF9jYmAgYW5kIGBhcHBseV9yYW5nZV9jbGVhcl9jYmAgYXJlIHN0YXRpYyBjYWxsYmFja3MsIHNvIEknbSB3b25kZXJpbmcgaWYgdGhleSdyZSBpbmxpbmVkLiBJZiB0aGV5IGFyZSBpbmxpbmVkLCB0aGF0IGNvdWxkIG1ha2UgdGhlbSBoYXJkZXIgZm9yIHN5emthbGxlciB0byB0YXJnZXQgZGlyZWN0bHkuIEhvd2V2ZXIsIHRoZXkncmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGBhcHBseV90b19wYWdlX3JhbmdlYCBhbmQgYGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2VgLCBzbyBpdCBsb29rcyBsaWtlIHRoZXkgd29uJ3QgYmUgaW5saW5lZC4gVGhhdCdzIGdvb2QuIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCBpcyBhIGNhbGxiYWNrIHdpdGhpbiBgYnBmX21hcF9vcHNgLCBzbyBpdCdzIHByb2JhYmx5IGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbWFwIG9wZXJhdGlvbnMuIGBhcmVuYV9hbGxvY19wYWdlc2AgYW5kIGBhcmVuYV9mcmVlX3BhZ2VzYCBhcmUgY2FsbGVkIGFzIEJQRiBwcm9ncmFtIGhlbHBlcnMsIHdoaWNoIEkgbGlrZSBiZWNhdXNlIEkgY2FuIGNvbnRyb2wgdGhlbSBmcm9tIGEgQlBGIHByb2dyYW0uIEZpbmFsbHksIGBhcmVuYV92bV9mYXVsdGAgaXMgYSBgdm1fb3BlcmF0aW9uc19zdHJ1Y3RgIGNhbGxiYWNrLCBzbyBpdCdzIHRpZWQgdG8gdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBnb2luZyB0byBxdWlja2x5IGRvdWJsZSBjaGVjayB0aGF0IGBhcmVuYV9hbGxvY19wYWdlc2AgaXMgaW5kZWVkIGEgaGVscGVyLiBHb3R0YSBiZSBjZXJ0YWluIGFib3V0IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTgxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA2OjE3LjgyMTg0NjQ1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4OTU1NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvYXJlbmEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FyZW5hLmMtMzktICogaW50byBrZXJuZWwgYW5kIHVzZXIgdm1hLlxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xcbmtlcm5lbC9icGYvYXJlbmEuYy00MS0gKiB3aGljaCB3aWxsIGluc2VydCBpdCBpbnRvIGtlcm5lbCB2bV9hcmVhLlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTY1NT1zdGF0aWMgdTY0IGNsZWFyX2xvMzIodTY0IHZhbClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02NjMtICovXFxua2VybmVsL2JwZi9hcmVuYS5jOjY2NDpzdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTY2NS1cXHRcXHRcXHQgICAgICBib29sIHNsZWVwYWJsZSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz04NDM9c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTMwLSAqIFJlc2VydmUgYW4gYXJlbmEgdmlydHVhbCBhZGRyZXNzIHJhbmdlIHdpdGhvdXQgcG9wdWxhdGluZyBpdC4gVGhpcyBjYWxsIHN0b3BzXFxua2VybmVsL2JwZi9hcmVuYS5jOjkzMTogKiBicGZfYXJlbmFfYWxsb2NfcGFnZXMgZnJvbSBhZGRpbmcgcGFnZXMgdG8gdGhpcyByYW5nZS5cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTMyLSAqL1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTEwNDE9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDQzOl9fYnBmX2tmdW5jIHZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQ0LVxcdFxcdFxcdFxcdFxcdGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1MS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA1MjpcXHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNTMtfVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDU0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDU1OnZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNTYtXFx0XFx0XFx0XFx0XFx0ICBpbnQgbm9kZV9pZCwgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjMtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNjQ6XFx0cmV0dXJuICh2b2lkICopYXJlbmFfYWxsb2NfcGFnZXMoYXJlbmEsIChsb25nKWFkZHJfX2lnbiwgcGFnZV9jbnQsIG5vZGVfaWQsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA2NS19XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNjYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwNjc6dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDY4LVxcdFxcdFxcdFxcdCAgICAgIGludCBub2RlX2lkLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA3NS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3NjpcXHRyZXR1cm4gKHZvaWQgKilhcmVuYV9hbGxvY19wYWdlcyhhcmVuYSwgKGxvbmcpYWRkcl9faWduLCBwYWdlX2NudCwgbm9kZV9pZCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNzctfVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTExMTQ9QlRGX0tGVU5DU19TVEFSVChhcmVuYV9rZnVuY3MpXFxua2VybmVsL2JwZi9hcmVuYS5jOjExMTU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9hbGxvY19wYWdlcywgS0ZfQVJFTkFfUkVUIHwgS0ZfQVJFTkFfQVJHMilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTExNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE5OjA2OjE4LjA4MDgwOTM2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTc5NzE1NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEFyZW5hIE1lbW9yeSBVc2FnZSBQYXRjaCoqXG5cbk9rYXksIHNvIGBicGZfYXJlbmFfYWxsb2NfcGFnZXNgIGlzIGluZGVlZCBhIGtmdW5jLCBhcyBleHBlY3RlZC4gVGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIHNvbWUga2V5IG1vZGlmaWNhdGlvbnMgdG8gaG93IHRoZSBhcmVuYSBtZW1vcnkgaXMgbWFuYWdlZC4gSXQncyBjaGFuZ2luZyBgYXJlbmFfYWxsb2NfcGFnZXNgIGFuZCBgYXJlbmFfZnJlZV9wYWdlc2AgdG8gcGFzcyB0aGUgYGFyZW5hYCBzdHJ1Y3R1cmUgaW5zdGVhZCBvZiBgc2NyYXRjaF9wYWdlYCB0byBgYXBwbHlfcmFuZ2VfZGF0YWAgYW5kIGBjbGVhcl9yYW5nZV9kYXRhYC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGBhcmVuYV9tYXBfbWVtX3VzYWdlYCwgd2hpY2ggaXMgY2FsbGVkIHdoZW4geW91J3JlIGxvb2tpbmcgYXQgdGhlIGZpbGUgZGVzY3JpcHRvciBpbmZvIGZvciB0aGUgbWFwLiBJIHNlZSBhIG5ldyB0ZXN0LCBgYXJlbmFfbWVtX3VzYWdlLmNgLCB0aGF0J3MgZGVzaWduZWQgdG8gZXhlcmNpc2UgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZXNlIGNoYW5nZXMuXG5cbkxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9sczpcblxuKiAgIGBhcHBseV9yYW5nZV9zZXRfY2JgXG4qICAgYGFwcGx5X3JhbmdlX2NsZWFyX2NiYFxuKiAgIGBhcmVuYV9tYXBfbWVtX3VzYWdlYFxuKiAgIGBhcmVuYV9hbGxvY19wYWdlc2BcbiogICBgYXJlbmFfZnJlZV9wYWdlc2BcbiogICBgYXJlbmFfdm1fZmF1bHRgXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWcgZGVwZW5kZW5jaWVzLi4uIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG1haW4gb25lLiBJIGNhbiBhc3N1bWUgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCBhcmUgc3RhbmRhcmQgb24gc3l6a2FsbGVyIHRhcmdldHMgKGVzcGVjaWFsbHkgeDg2XFxfNjQpLCBzbyBmb2N1c2luZyBvbiBgQlBGX1NZU0NBTExgIGlzIHN1ZmZpY2llbnQuXG5cbkhlcmUncyBteSByZWFzb25pbmc6IFRoaXMgcGF0Y2ggaXMgaW5qZWN0aW5nIG1lbW9yeSB1c2FnZSB0cmFja2luZyBpbnRvIEJQRiBhcmVuYXMuIFNwZWNpZmljYWxseSwgaXQncyBtYWludGFpbmluZyBhIGNvdW50IG9mIHBvcHVsYXRlZCBwYWdlcyB2aWEgYG5yX3BhZ2VzYC4gVGhlIHVwZGF0ZSBpbnZvbHZlcyBtb2RpZnlpbmcgcGFnZSB0YWJsZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byB1cGRhdGUgdGhpcyBjb3VudGVyLiBUaGUgbmV3IGBhcmVuYV9tYXBfbWVtX3VzYWdlYCBmdW5jdGlvbiBwcm92aWRlcyBhIHdheSB0byBleHBvc2UgdGhpcyB1c2FnZS4gQ2hhbmdlcyBhbHNvIGZsb3cgdGhyb3VnaCBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfdm1fZmF1bHRgLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhbHRlcnMgY29yZSBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlcmVmb3JlLCBpdCBhYnNvbHV0ZWx5IHJlcXVpcmVzIGZ1enppbmcuIFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHBhZ2UgY291bnRpbmcgbG9naWMgaXMgc291bmQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByYWNlcywgbGVha3MsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSXQncyB0aW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzQzLCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxOTowNjoyNi4wNjA1MjkyMjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU1NjUwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXBwbHlfcmFuZ2Vfc2V0X2NiXCIsXG4gICAgXCJhcHBseV9yYW5nZV9jbGVhcl9jYlwiLFxuICAgIFwiYXJlbmFfbWFwX21lbV91c2FnZVwiLFxuICAgIFwiYXJlbmFfYWxsb2NfcGFnZXNcIixcbiAgICBcImFyZW5hX2ZyZWVfcGFnZXNcIixcbiAgICBcImFyZW5hX3ZtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcgdG8gQlBGIGFyZW5hcyBieSBtYWludGFpbmluZyBhIGNvdW50IG9mIHBvcHVsYXRlZCBwYWdlcyAoYG5yX3BhZ2VzYCkuIEl0IG1vZGlmaWVzIHRoZSBwYWdlIHRhYmxlIGNhbGxiYWNrcyAoYGFwcGx5X3JhbmdlX3NldF9jYmAsIGBhcHBseV9yYW5nZV9jbGVhcl9jYmApIHRvIHVwZGF0ZSB0aGlzIGNvdW50ZXIgYW5kIGV4cG9zZXMgaXQgdmlhIGBhcmVuYV9tYXBfbWVtX3VzYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHRoZXNlIGNhbGxiYWNrcyBpbiBgYXJlbmFfYWxsb2NfcGFnZXNgLCBgYXJlbmFfZnJlZV9wYWdlc2AsIGFuZCBgYXJlbmFfdm1fZmF1bHRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGFyZW5hIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgcGFnZSBjb3VudGluZyBsb2dpYyBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIHJhY2VzIG9yIG1lbW9yeSBsZWFrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFwcGx5X3JhbmdlX3NldF9jYlwiLFxuICAgIFwiYXBwbHlfcmFuZ2VfY2xlYXJfY2JcIixcbiAgICBcImFyZW5hX21hcF9tZW1fdXNhZ2VcIixcbiAgICBcImFyZW5hX2FsbG9jX3BhZ2VzXCIsXG4gICAgXCJhcmVuYV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJhcmVuYV92bV9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWVtb3J5IHVzYWdlIHRyYWNraW5nIHRvIEJQRiBhcmVuYXMgYnkgbWFpbnRhaW5pbmcgYSBjb3VudCBvZiBwb3B1bGF0ZWQgcGFnZXMgKGBucl9wYWdlc2ApLiBJdCBtb2RpZmllcyB0aGUgcGFnZSB0YWJsZSBjYWxsYmFja3MgKGBhcHBseV9yYW5nZV9zZXRfY2JgLCBgYXBwbHlfcmFuZ2VfY2xlYXJfY2JgKSB0byB1cGRhdGUgdGhpcyBjb3VudGVyIGFuZCBleHBvc2VzIGl0IHZpYSBgYXJlbmFfbWFwX21lbV91c2FnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB0aGVzZSBjYWxsYmFja3MgaW4gYGFyZW5hX2FsbG9jX3BhZ2VzYCwgYGFyZW5hX2ZyZWVfcGFnZXNgLCBhbmQgYGFyZW5hX3ZtX2ZhdWx0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhcmVuYSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIHBhZ2UgY291bnRpbmcgbG9naWMgaXMgcm9idXN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSByYWNlcyBvciBtZW1vcnkgbGVha3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workfloww2pww[1] Phase: Succeeded StartedAt: 2026-07-16 19:06:38 +0000 UTC FinishedAt: 2026-07-16 19:06:38 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 19:06:38 +0000 UTC FinishedAt: 2026-07-16 19:06:38 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2] Phase: Succeeded StartedAt: 2026-07-16 19:06:38 +0000 UTC FinishedAt: 2026-07-16 23:14:57 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 19:06:38 +0000 UTC FinishedAt: 2026-07-16 23:14:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 19:06:38 +0000 UTC FinishedAt: 2026-07-16 19:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 19:06:38 +0000 UTC FinishedAt: 2026-07-16 19:07:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww2pww/series-workfloww2pww-convert-artifact-2054138806/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 19:07:13 +0000 UTC FinishedAt: 2026-07-16 19:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 19:07:13 +0000 UTC FinishedAt: 2026-07-16 19:39:23 +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:*4d040a14-0ba9-48a9-9b58-e19abfc3a612,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-workfloww2pww/series-workfloww2pww-convert-artifact-2054138806/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": "b2a62345-71a9-4e4c-9eee-33587137a9e2", "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-workfloww2pww/series-workfloww2pww-build-action-1975571148/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 19:07:13 +0000 UTC FinishedAt: 2026-07-16 19:39:13 +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:*4d040a14-0ba9-48a9-9b58-e19abfc3a612,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-workfloww2pww/series-workfloww2pww-convert-artifact-2054138806/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": "b2a62345-71a9-4e4c-9eee-33587137a9e2", "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-workfloww2pww/series-workfloww2pww-build-action-1975571148/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 19:39:23 +0000 UTC FinishedAt: 2026-07-16 19:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 19:39:23 +0000 UTC FinishedAt: 2026-07-16 19:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 19:39:23 +0000 UTC FinishedAt: 2026-07-16 19:39:33 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 19:39:23 +0000 UTC FinishedAt: 2026-07-16 19:39:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww2pww/series-workfloww2pww-convert-artifact-31842633/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 19:39:33 +0000 UTC FinishedAt: 2026-07-16 19:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 19:39:33 +0000 UTC FinishedAt: 2026-07-16 19:41:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b2a62345-71a9-4e4c-9eee-33587137a9e2,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-workfloww2pww/series-workfloww2pww-build-action-1975571148/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-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 19:41:33 +0000 UTC FinishedAt: 2026-07-16 19:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 19:41:33 +0000 UTC FinishedAt: 2026-07-16 19:41:33 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 19:41:33 +0000 UTC FinishedAt: 2026-07-16 20:11:33 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 19:41:33 +0000 UTC FinishedAt: 2026-07-16 20:11:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4d040a14-0ba9-48a9-9b58-e19abfc3a612,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-workfloww2pww/series-workfloww2pww-convert-artifact-31842633/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": "b12b6687-46e9-4321-a095-cf5d78a1fdc5", "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-workfloww2pww/series-workfloww2pww-build-action-1944809509/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 19:41:33 +0000 UTC FinishedAt: 2026-07-16 20:11:23 +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:*4d040a14-0ba9-48a9-9b58-e19abfc3a612,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-workfloww2pww/series-workfloww2pww-convert-artifact-31842633/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": "b12b6687-46e9-4321-a095-cf5d78a1fdc5", "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-workfloww2pww/series-workfloww2pww-build-action-1944809509/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 20:11:33 +0000 UTC FinishedAt: 2026-07-16 20:11:33 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 20:11:33 +0000 UTC FinishedAt: 2026-07-16 20:11:33 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 20:11:33 +0000 UTC FinishedAt: 2026-07-16 20:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 20:11:33 +0000 UTC FinishedAt: 2026-07-16 20:13:27 +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:*b12b6687-46e9-4321-a095-cf5d78a1fdc5,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-workfloww2pww/series-workfloww2pww-build-action-1944809509/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-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 20:13:37 +0000 UTC FinishedAt: 2026-07-16 23:14:57 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 20:13:37 +0000 UTC FinishedAt: 2026-07-16 23:14:57 +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":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"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:*b2a62345-71a9-4e4c-9eee-33587137a9e2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b12b6687-46e9-4321-a095-cf5d78a1fdc5,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-workfloww2pww/series-workfloww2pww-build-action-1975571148/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-workfloww2pww/series-workfloww2pww-build-action-1944809509/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 20:13:37 +0000 UTC FinishedAt: 2026-07-16 20:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 20:13:37 +0000 UTC FinishedAt: 2026-07-16 20:13:42 +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":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"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-workfloww2pww/series-workfloww2pww-convert-artifact-1004561054/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 20:13:37 +0000 UTC FinishedAt: 2026-07-16 20:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 20:13:37 +0000 UTC FinishedAt: 2026-07-16 20:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 20:13:37 +0000 UTC FinishedAt: 2026-07-16 20:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 20:13:47 +0000 UTC FinishedAt: 2026-07-16 23:14:57 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2pww[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["apply_range_set_cb","apply_range_clear_cb","arena_map_mem_usage","arena_alloc_pages","arena_free_pages","arena_vm_fault"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"ff685978-352c-44b6-9961-d6fdead9d01e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 20:13:47 +0000 UTC FinishedAt: 2026-07-16 23:14:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b2a62345-71a9-4e4c-9eee-33587137a9e2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b12b6687-46e9-4321-a095-cf5d78a1fdc5,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-workfloww2pww/series-workfloww2pww-build-action-1975571148/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-workfloww2pww/series-workfloww2pww-build-action-1944809509/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-workfloww2pww/series-workfloww2pww-convert-artifact-1004561054/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,}