Name: series-workflow6v762 Phase: Succeeded StartedAt: 2026-08-24 12:50:32 +0000 UTC FinishedAt: 2026-08-24 17:23:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[0] Phase: Succeeded StartedAt: 2026-08-24 12:50:32 +0000 UTC FinishedAt: 2026-08-24 13:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 12:50:32 +0000 UTC FinishedAt: 2026-08-24 13:33:27 +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": "5e289c5a4a526e870efac0ca658635c47138593a", "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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "d6efc1ce-a42b-48e5-b04b-1891043d5a75" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "rhtab_map_delete_elem", "rhtab_map_update_elem", "rhtab_map_lookup_and_delete_elem", "rhtab_map_lookup_and_delete_batch" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmh0YWJfbWFwX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3JodGFiX21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG9mIEJQRiBtYXAgZWxlbWVudCBmaWVsZHMgKHN1Y2ggYXMga3B0cnMsIHRpbWVycywgd29ya3F1ZXVlcykgaW4gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgIHRvIGF2b2lkIE5NSS11bnNhZmUgb3BlcmF0aW9ucy4gQnkgcmVwbGFjaW5nIGBicGZfb2JqX2ZyZWVfZmllbGRzYCB3aXRoIGBicGZfb2JqX2NhbmNlbF9maWVsZHNgLCBpdCBkZWZlcnMga3B0ciBkZXN0cnVjdGlvbiB0byBhIHNhZmVyIGNvbnRleHQgKFJDVSBjYWxsYmFjaykuIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgaW52YWxpZCBjb250ZXh0IGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gQW55IHJlc3VsdGluZyBtZW1vcnkgY29ycnVwdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUpIHdvdWxkIGJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cga3B0cnMgYW5kIG90aGVyIHNwZWNpYWwgZmllbGRzIGFyZSBoYW5kbGVkIGR1cmluZyB1cGRhdGUgYW5kIGRlbGV0ZSBvcGVyYXRpb25zIG9uIEJQRl9NQVBfVFlQRV9SSEFTSCBtYXBzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGFuIE5NSS1zYWZldHkgaXNzdWUgYnkgZGVmZXJyaW5nIGtwdHIgZGVzdHJ1Y3Rpb24uIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzM2NkNjFiZTFlMDhkMGI2MDRjMjFiODYzOTcwZDlhMzE3NmJlMWQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTM6MzE6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uYTM5NTkyOGEzY2YyMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTI4NjQsMTYgJiM0MzsyODY0LDYgQEAgc3RhdGljIGludCByaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRyZXR1cm4gaHRhYl9tYXBfYWxsb2NfY2hlY2soYXR0cik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYixcbi1cdFx0XHRcdFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW0pXG4te1xuLVx0aWYgKElTX0VSUl9PUl9OVUxMKHJodGFiLVx1MDAzZW1hcC5yZWNvcmQpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRicGZfb2JqX2ZyZWVfZmllbGRzKHJodGFiLVx1MDAzZW1hcC5yZWNvcmQsXG4tXHRcdFx0ICAgIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHJodGFiX21lbV9kdG9yKHZvaWQgKm9iaiwgdm9pZCAqY3R4KVxuIHtcbiBcdHN0cnVjdCBodGFiX2J0Zl9yZWNvcmQgKmhyZWMgPSBjdHg7XG5AQCAtMjk2Myw4ICYjNDM7Mjk1MywxMiBAQCBzdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdlxuIFx0XHRyaHRhYl9yZWFkX2VsZW1fdmFsdWUoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCBjb3B5LCBlbGVtLCBmbGFncyk7XG4gXHRcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIGNvcHkpO1xuIFx0fVxuLVx0LyogUmVsZWFzZSBpbnRlcm5hbCBzdHJ1Y3RzOiBrcHRyLCBicGZfdGltZXIsIHRhc2tfd29yaywgd3EgKi9cbi1cdHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYW5jZWwgdGltZXIsIHdvcmtxdWV1ZSwgYW5kIHRhc2tfd29yayBmaWVsZHMgYmVmb3JlIGRlZmVycmluZyB0aGVcbiYjNDM7XHQgKiBlbGVtZW50IGZyZWUuIFJlZmVyZW5jZWQga3B0ciBkZXN0cnVjdGlvbiBpcyBub3QgTk1JLXNhZmUsIHNvIGxlYXZlXG4mIzQzO1x0ICogaXQgZm9yIHJodGFiX21lbV9kdG9yKCkgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2RzLlxuJiM0MztcdCAqL1xuJiM0MztcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4gXHRicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KFx1MDAyNnJodGFiLVx1MDAzZW1hLCBlbGVtKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMDIyLDEwICYjNDM7MzAxNiwxMiBAQCBzdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbFxuIFx0ICogQlBGX0ZfTE9DSywgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzLlxuIFx0ICpcbiBcdCAqIGNvcHlfbWFwX3ZhbHVlKCkgc2tpcHMgc3BlY2lhbC1maWVsZCBvZmZzZXRzLCBzbyBvbGQgdGltZXJzL1xuLVx0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGVtIGFmdGVyIHRoZSBjb3B5XG4tXHQgKiB0byBtYXRjaCBhcnJheW1hcCYjMzk7cyB1cGRhdGUgc2VtYW50aWNzLlxuJiM0MztcdCAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBUaGlzIHBhdGggbWF5IHJ1biBpbiBOTUkgY29udGV4dCxcbiYjNDM7XHQgKiBzbyBvbmx5IGNhbmNlbCB0aW1lci93b3JrcXVldWUvdGFza193b3JrIGhlcmUuIEtlZXAga3B0ciBmaWVsZHNcbiYjNDM7XHQgKiBhdHRhY2hlZCB0byB0aGUgdmFsdWUsIG1hdGNoaW5nIGFycmF5bWFwIHNlbWFudGljczsgcmVmZXJlbmNlZFxuJiM0MztcdCAqIGtwdHJzIGFyZSBkZXN0cm95ZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBldmVudHVhbGx5IGZyZWVkLlxuIFx0ICovXG4tXHRyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pO1xuJiM0MztcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIG9sZF92YWwpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jXG5pbmRleCAxN2U3MDdkZGRkYThkLi45ZmRkZjAzMzg3YmI4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY1xuQEAgLTk4LDYgJiM0Mzs5OCwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X21hcF9rcHRyX3N1Y2Nlc3MoYm9vbCB0ZXN0X3J1bilcbiBcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O3Rlc3RfbWFwX2twdHJfcmVmMyByZWZjb3VudFwmIzM0Oyk7XG4gXHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwmIzM0O3Rlc3RfbWFwX2twdHJfcmVmMyByZXR2YWxcJiMzNDspO1xuIFxuJiM0MztcdHJldCA9IGJwZl9tYXBfX2RlbGV0ZV9lbGVtKHNrZWwtXHUwMDNlbWFwcy5yaGFzaF9tYXAsIFx1MDAyNmtleSwgc2l6ZW9mKGtleSksIDApO1xuJiM0MztcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O3JoYXNoX21hcCBkZWxldGVcJiMzNDspO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9tYXBfa3B0cl9yZWYzKSwgXHUwMDI2b3B0cyk7XG4mIzQzO1x0QVNTRVJUX09LKHJldCwgXCYjMzQ7dGVzdF9tYXBfa3B0cl9yZWYzIHJlZmNvdW50XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwmIzM0O3Rlc3RfbWFwX2twdHJfcmVmMyByZXR2YWxcJiMzNDspO1xuJiM0MztcbiBcdHJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9sc19tYXBfa3B0cl9yZWZfZGVsKSwgXHUwMDI2bG9wdHMpO1xuIFx0QVNTRVJUX09LKHJldCwgXCYjMzQ7dGVzdF9sc19tYXBfa3B0cl9yZWZfZGVsIGRlbGV0ZVwmIzM0Oyk7XG4gXHRza2VsLVx1MDAzZWRhdGEtXHUwMDNlcmVmLS07XG5AQCAtMTQ3LDYgJiM0MzsxNTMsNyBAQCBlbnVtIG1hcF91cGRhdGVfa3B0cl9jYXNlIHtcbiBcdE1BUF9VUERBVEVfS1BUUl9BUlJBWSxcbiBcdE1BUF9VUERBVEVfS1BUUl9IQVNILFxuIFx0TUFQX1VQREFURV9LUFRSX0hBU0hfTUFMTE9DLFxuJiM0MztcdE1BUF9VUERBVEVfS1BUUl9SSEFTSCxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCxcbkBAIC0xNTksNiAmIzQzOzE2Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCxcbiBcdFx0cmV0dXJuIHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9oYXNoX21hcF91cGRhdGVfa3B0cjtcbiBcdGNhc2UgTUFQX1VQREFURV9LUFRSX0hBU0hfTUFMTE9DOlxuIFx0XHRyZXR1cm4gc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2hhc2hfbWFsbG9jX21hcF91cGRhdGVfa3B0cjtcbiYjNDM7XHRjYXNlIE1BUF9VUERBVEVfS1BUUl9SSEFTSDpcbiYjNDM7XHRcdHJldHVybiBza2VsLVx1MDAzZXByb2dzLnRlc3Rfcmhhc2hfbWFwX3VwZGF0ZV9rcHRyO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtMjA0LDYgJiM0MzsyMTMsOCBAQCB2b2lkIHNlcmlhbF90ZXN0X21hcF9rcHRyKHZvaWQpXG4gXHRcdHRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9IQVNIKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3VwZGF0ZV9oYXNoX21hbGxvY19tYXBfa3B0clwmIzM0OykpXG4gXHRcdHRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQyk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dXBkYXRlX3JoYXNoX21hcF9rcHRyXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9SSEFTSCk7XG4gXG4gXHRza2VsID0gcmN1X3Rhc2tzX3RyYWNlX2dwX19vcGVuX2FuZF9sb2FkKCk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7cmN1X3Rhc2tzX3RyYWNlX2dwX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXG5pbmRleCAwZDg3Yzk3ZGFjOTkxLi40NDIxMGRkM2MwZWM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXG5AQCAtNTcsNiAmIzQzOzU3LDE0IEBAIHN0cnVjdCBoYXNoX21hbGxvY19tYXAge1xuIFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuIH0gaGFzaF9tYWxsb2NfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4gXG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWUpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuJiM0Mzt9IHJoYXNoX21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiBzdHJ1Y3QgcGNwdV9oYXNoX21hbGxvY19tYXAge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCk7XG4gXHRfX3R5cGUoa2V5LCBpbnQpO1xuQEAgLTQyMSw2ICYjNDM7NDI5LDcgQEAgaW50IHRlc3RfbWFwX2twdHJfcmVmMShzdHJ1Y3QgX19za19idWZmICpjdHgpXG4gXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNmhhc2hfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4gXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNmhhc2hfbWFsbG9jX21hcCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZscnVfaGFzaF9tYXAsIFx1MDAyNmtleSwgXHUwMDI2dmFsLCAwKTtcbiYjNDM7XHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnJoYXNoX21hcCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuIFxuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZwY3B1X2hhc2hfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4gXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnBjcHVfaGFzaF9tYWxsb2NfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG5AQCAtNDMwLDYgJiM0Mzs0MzksNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYxKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcbiBcdFRFU1QoaGFzaF9tYXApO1xuIFx0VEVTVChoYXNoX21hbGxvY19tYXApO1xuIFx0VEVTVChscnVfaGFzaF9tYXApO1xuJiM0MztcdFRFU1Qocmhhc2hfbWFwKTtcbiBcbiBcdFRFU1RfUENQVShwY3B1X2FycmF5X21hcCk7XG4gXHRURVNUX1BDUFUocGNwdV9oYXNoX21hcCk7XG5AQCAtNDY4LDYgJiM0Mzs0NzgsNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYyKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcbiBcdFRFU1QoaGFzaF9tYXApO1xuIFx0VEVTVChoYXNoX21hbGxvY19tYXApO1xuIFx0VEVTVChscnVfaGFzaF9tYXApO1xuJiM0MztcdFRFU1Qocmhhc2hfbWFwKTtcbiBcbiBcdFRFU1RfUENQVShwY3B1X2FycmF5X21hcCk7XG4gXHRURVNUX1BDUFUocGNwdV9oYXNoX21hcCk7XG5AQCAtNTk5LDYgJiM0Mzs2MTAsNyBAQCBpbnQgbmFtZSh2b2lkICpjdHgpXHRcdFx0XHRcdFx0XFxcbiBcbiBERUZJTkVfSEFTSF9VUERBVEVfS1BUUl9URVNUKHRlc3RfaGFzaF9tYXBfdXBkYXRlX2twdHIsIGhhc2hfbWFwKVxuIERFRklORV9IQVNIX1VQREFURV9LUFRSX1RFU1QodGVzdF9oYXNoX21hbGxvY19tYXBfdXBkYXRlX2twdHIsIGhhc2hfbWFsbG9jX21hcClcbiYjNDM7REVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X3JoYXNoX21hcF91cGRhdGVfa3B0ciwgcmhhc2hfbWFwKVxuIFxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIGludCB0ZXN0X2xzX21hcF9rcHRyX3JlZjEodm9pZCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IGtwdHJzIGFuZCBvdGhlciBzcGVjaWFsIGZpZWxkcyBhcmUgaGFuZGxlZCBkdXJpbmcgdXBkYXRlIGFuZCBkZWxldGUgb3BlcmF0aW9ucyBvbiBCUEZfTUFQX1RZUEVfUkhBU0ggbWFwcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBOTUktc2FmZXR5IGlzc3VlIGJ5IGRlZmVycmluZyBrcHRyIGRlc3RydWN0aW9uLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzNjZDYxYmUxZTA4ZDBiNjA0YzIxYjg2Mzk3MGQ5YTMxNzZiZTFkMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDEzOjMxOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCBkNDBjYjVkZDQ0NmNhLi5hMzk1OTI4YTNjZjIwIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMjg2NCwxNiAmIzQzOzI4NjQsNiBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cikKIAlyZXR1cm4gaHRhYl9tYXBfYWxsb2NfY2hlY2soYXR0cik7CiB9CiAKLXN0YXRpYyB2b2lkIHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwKLQkJCQkJc3RydWN0IHJodGFiX2VsZW0gKmVsZW0pCi17Ci0JaWYgKElTX0VSUl9PUl9OVUxMKHJodGFiLSZndDttYXAucmVjb3JkKSkKLQkJcmV0dXJuOwotCi0JYnBmX29ial9mcmVlX2ZpZWxkcyhyaHRhYi0mZ3Q7bWFwLnJlY29yZCwKLQkJCSAgICByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLSZndDttYXAua2V5X3NpemUpKTsKLX0KLQogc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpCiB7CiAJc3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYyA9IGN0eDsKQEAgLTI5NjMsOCAmIzQzOzI5NTMsMTIgQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHYKIAkJcmh0YWJfcmVhZF9lbGVtX3ZhbHVlKCZhbXA7cmh0YWItJmd0O21hcCwgY29weSwgZWxlbSwgZmxhZ3MpOwogCQljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoJmFtcDtyaHRhYi0mZ3Q7bWFwLCBjb3B5KTsKIAl9Ci0JLyogUmVsZWFzZSBpbnRlcm5hbCBzdHJ1Y3RzOiBrcHRyLCBicGZfdGltZXIsIHRhc2tfd29yaywgd3EgKi8KLQlyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pOwomIzQzOwkvKgomIzQzOwkgKiBDYW5jZWwgdGltZXIsIHdvcmtxdWV1ZSwgYW5kIHRhc2tfd29yayBmaWVsZHMgYmVmb3JlIGRlZmVycmluZyB0aGUKJiM0MzsJICogZWxlbWVudCBmcmVlLiBSZWZlcmVuY2VkIGtwdHIgZGVzdHJ1Y3Rpb24gaXMgbm90IE5NSS1zYWZlLCBzbyBsZWF2ZQomIzQzOwkgKiBpdCBmb3Igcmh0YWJfbWVtX2R0b3IoKSBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZHMuCiYjNDM7CSAqLwomIzQzOwlicGZfb2JqX2NhbmNlbF9maWVsZHMoJmFtcDtyaHRhYi0mZ3Q7bWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLSZndDttYXAua2V5X3NpemUpKTsKIAlicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KCZhbXA7cmh0YWItJmd0O21hLCBlbGVtKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMwMjIsMTAgJiM0MzszMDE2LDEyIEBAIHN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsCiAJICogQlBGX0ZfTE9DSywgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzLgogCSAqCiAJICogY29weV9tYXBfdmFsdWUoKSBza2lwcyBzcGVjaWFsLWZpZWxkIG9mZnNldHMsIHNvIG9sZCB0aW1lcnMvCi0JICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGVtIGFmdGVyIHRoZSBjb3B5Ci0JICogdG8gbWF0Y2ggYXJyYXltYXAmIzM5O3MgdXBkYXRlIHNlbWFudGljcy4KJiM0MzsJICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIFRoaXMgcGF0aCBtYXkgcnVuIGluIE5NSSBjb250ZXh0LAomIzQzOwkgKiBzbyBvbmx5IGNhbmNlbCB0aW1lci93b3JrcXVldWUvdGFza193b3JrIGhlcmUuIEtlZXAga3B0ciBmaWVsZHMKJiM0MzsJICogYXR0YWNoZWQgdG8gdGhlIHZhbHVlLCBtYXRjaGluZyBhcnJheW1hcCBzZW1hbnRpY3M7IHJlZmVyZW5jZWQKJiM0MzsJICoga3B0cnMgYXJlIGRlc3Ryb3llZCB3aGVuIHRoZSBlbGVtZW50IGlzIGV2ZW50dWFsbHkgZnJlZWQuCiAJICovCi0Jcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTsKJiM0MzsJYnBmX29ial9jYW5jZWxfZmllbGRzKCZhbXA7cmh0YWItJmd0O21hcCwgb2xkX3ZhbCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jCmluZGV4IDE3ZTcwN2RkZGRhOGQuLjlmZGRmMDMzODdiYjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuYwpAQCAtOTgsNiAmIzQzOzk4LDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbWFwX2twdHJfc3VjY2Vzcyhib29sIHRlc3RfcnVuKQogCUFTU0VSVF9PSyhyZXQsICYjMzQ7dGVzdF9tYXBfa3B0cl9yZWYzIHJlZmNvdW50JiMzNDspOwogCUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgJiMzNDt0ZXN0X21hcF9rcHRyX3JlZjMgcmV0dmFsJiMzNDspOwogCiYjNDM7CXJldCA9IGJwZl9tYXBfX2RlbGV0ZV9lbGVtKHNrZWwtJmd0O21hcHMucmhhc2hfbWFwLCAmYW1wO2tleSwgc2l6ZW9mKGtleSksIDApOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O3JoYXNoX21hcCBkZWxldGUmIzM0Oyk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnRlc3RfbWFwX2twdHJfcmVmMyksICZhbXA7b3B0cyk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7dGVzdF9tYXBfa3B0cl9yZWYzIHJlZmNvdW50JiMzNDspOwomIzQzOwlBU1NFUlRfT0sob3B0cy5yZXR2YWwsICYjMzQ7dGVzdF9tYXBfa3B0cl9yZWYzIHJldHZhbCYjMzQ7KTsKJiM0MzsKIAlyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy50ZXN0X2xzX21hcF9rcHRyX3JlZl9kZWwpLCAmYW1wO2xvcHRzKTsKIAlBU1NFUlRfT0socmV0LCAmIzM0O3Rlc3RfbHNfbWFwX2twdHJfcmVmX2RlbCBkZWxldGUmIzM0Oyk7CiAJc2tlbC0mZ3Q7ZGF0YS0mZ3Q7cmVmLS07CkBAIC0xNDcsNiAmIzQzOzE1Myw3IEBAIGVudW0gbWFwX3VwZGF0ZV9rcHRyX2Nhc2UgewogCU1BUF9VUERBVEVfS1BUUl9BUlJBWSwKIAlNQVBfVVBEQVRFX0tQVFJfSEFTSCwKIAlNQVBfVVBEQVRFX0tQVFJfSEFTSF9NQUxMT0MsCiYjNDM7CU1BUF9VUERBVEVfS1BUUl9SSEFTSCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCwKQEAgLTE1OSw2ICYjNDM7MTY2LDggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ3JhbSAqbWFwX3VwZGF0ZV9rcHRyX3Byb2coc3RydWN0IG1hcF9rcHRyICpza2VsLAogCQlyZXR1cm4gc2tlbC0mZ3Q7cHJvZ3MudGVzdF9oYXNoX21hcF91cGRhdGVfa3B0cjsKIAljYXNlIE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQzoKIAkJcmV0dXJuIHNrZWwtJmd0O3Byb2dzLnRlc3RfaGFzaF9tYWxsb2NfbWFwX3VwZGF0ZV9rcHRyOwomIzQzOwljYXNlIE1BUF9VUERBVEVfS1BUUl9SSEFTSDoKJiM0MzsJCXJldHVybiBza2VsLSZndDtwcm9ncy50ZXN0X3JoYXNoX21hcF91cGRhdGVfa3B0cjsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTIwNCw2ICYjNDM7MjEzLDggQEAgdm9pZCBzZXJpYWxfdGVzdF9tYXBfa3B0cih2b2lkKQogCQl0ZXN0X21hcF91cGRhdGVfa3B0cihNQVBfVVBEQVRFX0tQVFJfSEFTSCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt1cGRhdGVfaGFzaF9tYWxsb2NfbWFwX2twdHImIzM0OykpCiAJCXRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQyk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dXBkYXRlX3JoYXNoX21hcF9rcHRyJiMzNDspKQomIzQzOwkJdGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX1JIQVNIKTsKIAogCXNrZWwgPSByY3VfdGFza3NfdHJhY2VfZ3BfX29wZW5fYW5kX2xvYWQoKTsKIAlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtyY3VfdGFza3NfdHJhY2VfZ3BfX29wZW5fYW5kX2xvYWQmIzM0OykpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jCmluZGV4IDBkODdjOTdkYWM5OTEuLjQ0MjEwZGQzYzBlYzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jCkBAIC01Nyw2ICYjNDM7NTcsMTQgQEAgc3RydWN0IGhhc2hfbWFsbG9jX21hcCB7CiAJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpOwogfSBoYXNoX21hbGxvY19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpOwomIzQzO30gcmhhc2hfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwogc3RydWN0IHBjcHVfaGFzaF9tYWxsb2NfbWFwIHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIKTsKIAlfX3R5cGUoa2V5LCBpbnQpOwpAQCAtNDIxLDYgJiM0Mzs0MjksNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYxKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eCkKIAlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7aGFzaF9tYXAsICZhbXA7a2V5LCAmYW1wO3ZhbCwgMCk7CiAJYnBmX21hcF91cGRhdGVfZWxlbSgmYW1wO2hhc2hfbWFsbG9jX21hcCwgJmFtcDtrZXksICZhbXA7dmFsLCAwKTsKIAlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7bHJ1X2hhc2hfbWFwLCAmYW1wO2tleSwgJmFtcDt2YWwsIDApOwomIzQzOwlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7cmhhc2hfbWFwLCAmYW1wO2tleSwgJmFtcDt2YWwsIDApOwogCiAJYnBmX21hcF91cGRhdGVfZWxlbSgmYW1wO3BjcHVfaGFzaF9tYXAsICZhbXA7a2V5LCAmYW1wO3ZhbCwgMCk7CiAJYnBmX21hcF91cGRhdGVfZWxlbSgmYW1wO3BjcHVfaGFzaF9tYWxsb2NfbWFwLCAmYW1wO2tleSwgJmFtcDt2YWwsIDApOwpAQCAtNDMwLDYgJiM0Mzs0MzksNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYxKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eCkKIAlURVNUKGhhc2hfbWFwKTsKIAlURVNUKGhhc2hfbWFsbG9jX21hcCk7CiAJVEVTVChscnVfaGFzaF9tYXApOwomIzQzOwlURVNUKHJoYXNoX21hcCk7CiAKIAlURVNUX1BDUFUocGNwdV9hcnJheV9tYXApOwogCVRFU1RfUENQVShwY3B1X2hhc2hfbWFwKTsKQEAgLTQ2OCw2ICYjNDM7NDc4LDcgQEAgaW50IHRlc3RfbWFwX2twdHJfcmVmMihzdHJ1Y3QgX19za19idWZmICpjdHgpCiAJVEVTVChoYXNoX21hcCk7CiAJVEVTVChoYXNoX21hbGxvY19tYXApOwogCVRFU1QobHJ1X2hhc2hfbWFwKTsKJiM0MzsJVEVTVChyaGFzaF9tYXApOwogCiAJVEVTVF9QQ1BVKHBjcHVfYXJyYXlfbWFwKTsKIAlURVNUX1BDUFUocGNwdV9oYXNoX21hcCk7CkBAIC01OTksNiAmIzQzOzYxMCw3IEBAIGludCBuYW1lKHZvaWQgKmN0eCkJCQkJCQlcCiAKIERFRklORV9IQVNIX1VQREFURV9LUFRSX1RFU1QodGVzdF9oYXNoX21hcF91cGRhdGVfa3B0ciwgaGFzaF9tYXApCiBERUZJTkVfSEFTSF9VUERBVEVfS1BUUl9URVNUKHRlc3RfaGFzaF9tYWxsb2NfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hbGxvY19tYXApCiYjNDM7REVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X3JoYXNoX21hcF91cGRhdGVfa3B0ciwgcmhhc2hfbWFwKQogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBpbnQgdGVzdF9sc19tYXBfa3B0cl9yZWYxKHZvaWQgKmN0eCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIEJQRiBIYXNodGFibGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AsIGFuZCBpdCBsb29rcyBsaWtlIGEgdGFyZ2V0ZWQgZml4IGZvciBob3cgd2UgaGFuZGxlIGtlcm5lbCBwb2ludGVycyAoYGtwdHJgKSB3aXRoaW4gQlBGIGhhc2h0YWJsZXMsIHNwZWNpZmljYWxseSBpbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AuIFRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuY2AgdGVzdHMgYXJlIGluY2x1ZGVkLCB3aGljaCBpcyBnb29kIHRvIHNlZSBmb3IgdmVyaWZpY2F0aW9uLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHJlcGxhY2luZyBgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzYCB3aXRoIGBicGZfb2JqX2NhbmNlbF9maWVsZHNgIGluIHRob3NlIHR3byBmdW5jdGlvbnMuIEZyb20gdGhlIGNvbW1lbnRzLCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIGFib3V0IE5NSSBzYWZldHkuIFRoZSBvbGQgY29kZSB3YXMgZGlyZWN0bHkgZnJlZWluZyBpbnRlcm5hbCBzdHJ1Y3RzIGxpa2UgYGtwdHJgLCBgYnBmX3RpbWVyYCwgYHRhc2tfd29ya2AsIGFuZCBgd3FgIGR1cmluZyB0aGUgZGVsZXRlIGFuZCB1cGRhdGUgb3BlcmF0aW9ucy4gTm93LCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCBpcyB1c2VkIGluc3RlYWQuIFRoaXMgc2VlbXMgdG8gYmUgZGVsYXlpbmcgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSByZWZlcmVuY2VkIGBrcHRyYCB1bnRpbCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZHMsIHdoaWNoIGlzIGxpa2VseSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgTk1JLXNhZmV0eSBjb25jZXJuLiBUaGUgdGltZXIsIHdvcmtxdWV1ZSwgYW5kIHRhc2tfd29yayBmaWVsZHMgYXJlIGNhbmNlbGxlZCBlYXJsaWVyLiBUaGUgdXBkYXRlIG9wZXJhdGlvbiBpbiBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgYWxzbyBub3cgbWF0Y2hlcyBhcnJheW1hcCBzZW1hbnRpY3MsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4KClRoZSBvbGQgY29kZSBsb29rcyBsaWtlIGl0IHBvdGVudGlhbGx5IGhhZCBhIHJhY2UgY29uZGl0aW9uIG9yIGEgcHJvYmxlbSB3aGVyZSB0aGUgYGtwdHJgIGRlc3RydWN0aW9uIGNvdWxkIGhhcHBlbiBpbiBhIGNvbnRleHQgdGhhdCBpc24mIzM5O3Qgc2FmZSBmb3IgaXQuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyB0aGF0IGRpcmVjdGx5LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IGEgZml4IGZvciBCUEYgbWFwcyBvZiB0aGUgUkhBU0ggdHlwZSwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBob3cgdGhleSBoYW5kbGUgYGtwdHJgIG9uIGRlbGV0ZS91cGRhdGUgb3BlcmF0aW9ucy4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCB0aGlzIGlzIHByb2JhYmx5IHNwZWNpZmljIHRvIGBCUEZfTUFQX1RZUEVfUkhBU0hgLCB0aG91Z2ggSSB3aWxsIHZlcmlmeSB0aGF0IGJ5IGxvb2tpbmcgYXQgaG93IGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCBhcmUgdXNlZCB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSBuZWVkIHRvIGZ1bGx5IGdyb2sgdGhlIEJQRiBtYXAgdHlwZXMgYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaHRhYl9kZWxldGVfZWxlbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTE4PXN0YXRpYyB2b2lkIHJodGFiX3JlYWRfZWxlbV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpkc3QsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MjgtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTI5OnN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICpjb3B5LFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkzMC1cdFx0XHQgICAgIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTY2PXN0YXRpYyBsb25nIHJodGFiX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk3Ni1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5Nzc6XHRyZXR1cm4gcmh0YWJfZGVsZXRlX2VsZW0ocmh0YWIsIGVsZW0sIE5VTEwsIDApO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjk3OC19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjk4MD1zdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTk1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk5NjpcdHJldHVybiByaHRhYl9kZWxldGVfZWxlbShyaHRhYiwgZWxlbSwgdmFsdWUsIGZsYWdzKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OTctfVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyMzk9c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzNDItXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRvdGFsOyBpJiM0MzsmIzQzOylcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzNDM6XHRcdFx0cmh0YWJfZGVsZXRlX2VsZW0ocmh0YWIsIGRlbF9lbGVtc1tpXSwgTlVMTCwgMCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzQ0LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMzQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipBbmFseXppbmcgQlBGIE1hcCBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbiBuYW1lczogYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCwgYW5kIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIFRoZSBwcmVmaXggYHJodGFiX2Agc3VnZ2VzdHMgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24sIHBlcmhhcHMgYSAmIzM0O3Jlc2l6YWJsZSBoYXNoIHRhYmxlLiYjMzQ7IFRoZSBvcGVyYXRpb25zIHRoZW1zZWx2ZXMgcG9pbnQgdG93YXJkcyBjb21tb24gbWFwIGZ1bmN0aW9uYWxpdGllczogZWxlbWVudCBkZWxldGlvbiwgbG9va3VwIGFuZCBkZWxldGlvbiBpbiBvbmUgc3RlcCwgdXBkYXRpbmcgZXhpc3RpbmcgZWxlbWVudHMsIGFuZCBhIGJhdGNoIHZlcnNpb24gb2YgdGhlIGxvb2t1cC1hbmQtZGVsZXRlIG9wZXJhdGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgYWxsIHRpZWQgdG8gYEJQRl9NQVBfVFlQRV9SSEFTSGAsIGJ1dCBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBjb3JyZWN0LiBJIHNob3VsZCBjb25maXJtIHRoaXMgYnkgbG9va2luZyBhdCBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYC4gR290dGEgdmVyaWZ5IHRoZSBtYXAgdHlwZSBmb3IgdGhlc2UgZnVuY3Rpb25zIHRvIGtub3cgZm9yIHN1cmUgdGhlIGV4YWN0IGNvbnRleHQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfTUFQX1RZUEVfUkhBU0gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMzY9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLCBpbnNuX2FycmF5X21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMzgtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA1MDpcdEJQRl9NQVBfVFlQRV9SSEFTSCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVx0X19NQVhfQlBGX01BUF9UWVBFXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVx0XHQgKlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XHRcdCAqIEJQRl9NQVBfVFlQRV9SSEFTSCAtIGluaXRpYWwgdGFibGUgc2l6ZSBoaW50XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cdFx0ICogKG5lbGVtX2hpbnQpLiAwID0gdXNlIHJoYXNodGFibGUgZGVmYXVsdC4gTXVzdCBiZVxuLS1cbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0xMDA9c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTI2LVx0XHQgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoxMjc6XHRcdCBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIKVxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyOC1cdFx0Z290byBwdXRfbWFwO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyNTU9c3RhdGljIGludCBtYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyOTktXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMwMDpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwMS1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMTQtXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMxNTpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMxNi1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMjYtXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMyNzpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMyOC1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDIwLVx0ICAgIGF0dHItXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSRU5BIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQyMTpcdCAgICBhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MjItXHQgICAgYXR0ci1cdTAwM2VtYXBfZXh0cmEgIT0gMCkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0OTItXHRjYXNlIEJQRl9NQVBfVFlQRV9IQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ5MzpcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQ5NC1cdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIOlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIyMTY9c3RhdGljIGludCBtYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMjc1LVx0XHQgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9QRVJDUFVfSEFTSCB8fFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjI3NjpcdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSCB8fFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI3Ny1cdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TVEFDS19UUkFDRSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODc0ND1zdGF0aWMgaW50IGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg3OTItXHRcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg3OTM6XHRcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4Nzk0LVx0XHRjYXNlIEJQRl9NQVBfVFlQRV9MUlVfSEFTSDpcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNDktXHRCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlx0QlBGX01BUF9UWVBFX1JIQVNILFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNTEtXHRfX01BWF9CUEZfTUFQX1RZUEVcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTctXHRcdCAqXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU1ODpcdFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU5LVx0XHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xNjM9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYXBfdHlwZV9uYW1lW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xOTgtXHRbQlBGX01BUF9UWVBFX0lOU05fQVJSQVldXHRcdD0gXCYjMzQ7aW5zbl9hcnJheVwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTk5Olx0W0JQRl9NQVBfVFlQRV9SSEFTSF1cdFx0XHQ9IFwmIzM0O3JoYXNoXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMDAtfTtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0yOTI9c3RhdGljIGludCBwcm9iZV9tYXBfY3JlYXRlKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMS1cdFx0YnJlYWs7XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzozMTI6XHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMy1cdFx0b3B0cy5tYXBfZmxhZ3NcdD0gQlBGX0ZfTk9fUFJFQUxMT0M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jPTM3PXN0YXRpYyB2b2lkIGhhc2htYXBfZnVsbF91cGRhdGVfc2V0dXAoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUwLVx0YnBmX21hcF9fc2V0X3R5cGUoY3R4LnNrZWwtXHUwMDNlbWFwcy5oYXNoX21hcF9iZW5jaCwgbWFwX3R5cGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jOjUxOlx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy01Mi1cdFx0YnBmX21hcF9fc2V0X21hcF9mbGFncyhjdHguc2tlbC1cdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz04MD1zdGF0aWMgdm9pZCByaGFzaF9zZXR1cCh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgxLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo4MjpcdGhhc2htYXBfZnVsbF91cGRhdGVfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy04My19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0xNTE9c3RhdGljIHZvaWQgaGFzaG1hcF9sb29rdXBfc2V0dXAoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjctXHRtYXBfZmxhZ3MgPSBhcmdzLm1hcF9mbGFncztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MTY4Olx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMTY5LVx0XHRtYXBfZmxhZ3MgfD0gQlBGX0ZfTk9fUFJFQUxMT0M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0yMTE9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjEyLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MjEzOlx0aGFzaG1hcF9sb29rdXBfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjE0LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM9MTU1PXN0YXRpYyB2b2lkIGh0YWJfbWVtX3NldHVwX2ltcGwoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4NC1cdGJwZl9tYXBfX3NldF9tYXhfZW50cmllcyhtYXAsIE1BWCg4MTkyLCA2NCAqIGVudi5ucl9jcHVzKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MTg1Olx0aWYgKG1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjYgYXJncy5wcmVhbGxvY2F0ZWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMTg2LVx0XHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKG1hcCwgYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXHUwMDI2IH5CUEZfRl9OT19QUkVBTExPQyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTIyOT1zdGF0aWMgdm9pZCByaHRhYl9tZW1fc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0yMzAte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jOjIzMTpcdGh0YWJfbWVtX3NldHVwX2ltcGwoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0yMzItfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM9NDY9c3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYy01MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM6NTI6XHRyZXR1cm4gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1JIQVNILCBcJiMzNDtyaGFzaF9leHRyYVwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMtNTMtXHRcdFx0ICAgICAgc2l6ZW9mKF9fdTMyKSwgc2l6ZW9mKF9fdTY0KSwgbWF4X2VudHJpZXMsIFx1MDAyNm9wdHMpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcmhhc2hfbWFwLmM9OD1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYzo5Olx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jLTEwLVx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jPTYwPXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYzo2MTpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmMtNjItXHRfX3R5cGUoa2V5LCBpbnQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jPTIyPXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYzoyMzpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmMtMjQtXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgzMgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgQlBGIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwIHR5cGUgaW4gdGhlIGtlcm5lbCDigJMgZ29vZCwgdGhhdCYjMzk7cyBhIGtub3duIHF1YW50aXR5LiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AsIHdoaWNoIGFyZSBjb3JlIG9wZXJhdGlvbnMgZm9yIHRoZXNlIFJIQVNIIG1hcHMuIFRoaXMgbWVhbnMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZy4KClRoZSBuZXh0IHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzICpyZWFjaGFiaWxpdHkqLiBDYW4gdGhpcyBiZSB0cmlnZ2VyZWQ/IEFic29sdXRlbHkuIEEgdXNlci1zcGFjZSBwcm9ncmFtIHVzaW5nIHRoZSBgYnBmKClgIHN5c2NhbGwgdG8gY3JlYXRlIGFuZCBtYW5pcHVsYXRlIGEgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwIGNhbiBkZWZpbml0ZWx5IGhpdCB0aGVzZSBmdW5jdGlvbnMgdmlhIHVwZGF0ZSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEl0JiMzOTtzIHJlYWxseSBhYm91dCBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AuIEJ1dCB3YWl0LCB3YXNuJiMzOTt0IGByaHRhYl9kZWxldGVfZWxlbWAgc3RhdGljPyBBaGEhIFRoYXQmIzM5O3Mgbm90IHRoZSBtYXAgb3AhIEl0JiMzOTtzIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gIHRoYXQgbWF0dGVycy4gSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaHRhYl9tYXBfZGVsZXRlX2VsZW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmM9MjkyOT1zdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTY1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk2NjpzdGF0aWMgbG9uZyByaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk2Ny17XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUwOT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTE5LVx0Lm1hcF91cGRhdGVfZWxlbSA9IHJodGFiX21hcF91cGRhdGVfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MjA6XHQubWFwX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMS1cdC5tYXBfZ2VuX2xvb2t1cCA9IHJodGFiX21hcF9nZW5fbG9va3VwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTg5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyBvZiBhIHNlYXNvbmVkIGRldmVsb3BlcjoKCioqRGVsdmluZyBpbnRvIHRoZSBUYWJsZSBNYW5hZ2VtZW50IENvZGUqKgoKT2theSwgc28gYHJodGFiX21hcF9kZWxldGVfZWxlbWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgaW4gc2NvcGUgd2l0aGluIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQuIEJ1dCwgdGhlIGNydWNpYWwgdGhpbmcgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgYSBtYXAgb3BlcmF0aW9uLCBhIGRlbGV0aW9uIHdpdGhpbiB0aGUgaGFzaCB0YWJsZS4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIGl0cyBjb3VudGVycGFydCwgdGhlIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCBmdW5jdGlvbi4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSByZWxhdGlvbnNoaXAsIGlmIGFueSwgYmV0d2VlbiBkZWxldGlvbiBhbmQgdXBkYXRlIHdpdGhpbiB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBBcmUgdGhlcmUgc2hhcmVkIHN1YnJvdXRpbmVzLCBjb21tb24gZGF0YSBzdHJ1Y3R1cmVzLCBvciBwZXJoYXBzIHNpbWlsYXIgZXJyb3IgaGFuZGxpbmc/IFVuZGVyc3RhbmRpbmcgaG93IHVwZGF0ZXMgaW50ZXJhY3Qgd2l0aCB0aGUgaGFzaCB0YWJsZSBkZWxldGlvbiBwcm9jZXNzIHdpbGwgcHJvYmFibHkgaWxsdW1pbmF0ZSBkZWVwZXIgYXNwZWN0cyBvZiB0YWJsZSBtYW5pcHVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JodGFiX21hcF91cGRhdGVfZXhpc3RpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmM9Mjk4MD1zdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTk4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk5OTpzdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICp2YWx1ZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMDAtXHRcdFx0XHQgICAgICB1NjQgbWFwX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMwMjg9c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA0MS1cdGlmIChlbGVtKVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA0MjpcdFx0cmV0dXJuIHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmcobWFwLCBlbGVtLCB2YWx1ZSwgbWFwX2ZsYWdzKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNDMtXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA4MS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwODI6XHRcdHJldHVybiByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKG1hcCwgdG1wLCB2YWx1ZSwgbWFwX2ZsYWdzKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODMtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTczCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgcmh0YWIgTWFwIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyAqdGhlKiBtYXAgb3BlcmF0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIHRoZSBpbXBvcnRhbnQgc3ltYm9scyB0byBzY3J1dGluaXplIGFyZSBnb2luZyB0byBpbmNsdWRlIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYW5kIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuCgpOb3csIHRoZSBwcm9tcHQgYnJpbmdzIHVwIGFuIGludGVyZXN0aW5nIHBvaW50OiBpdCBwcmVmZXJzIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIGdvYWwgaXMgdG8gZmF2b3IgdGhlIG9uZXMgdGhhdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgaGVyZSYjMzk7cyB0aGUgcnViOiBib3RoIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGV5IGFyZSBpbnRlcm5hbCBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGByaHRhYl9tYXBfb3BzYC4gQW5kICp0aGF0KiBkYXRhIHN0cnVjdHVyZSwgYHJodGFiX21hcF9vcHNgLCBpcyBub24tc3RhdGljLiBUaGUgY29kZSBhcHBlYXJzIHRvIGJlIHRyYWRpbmcgdGhlIGV4cGxpY2l0IG5vbi1zdGF0aWMgZnVuY3Rpb24gd2l0aCB0aGUgc3RhdGljIGZ1bmN0aW9uIHZpYSB0aGUgc3RydWN0IG1lbWJlci4gVGhpcyBiZWFycyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgpTbywgdGhlIG5leHQgc3RlcCBpcyB0byBjaGVjayBob3cgYHJodGFiX21hcF9vcHNgIGlzIHVzZWQgb3IgZXhwb3J0ZWQuIElzIGl0IHBhcnQgb2YgdGhlIGV4cG9zZWQgQVBJPyBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgcHJvcGVyIGRpcmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmh0YWJfbWFwX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzNj1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTM3OkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfUkhBU0gsIHJodGFiX21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEzOC1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PUJURl9JRF9MSVNUX1NJTkdMRShyaHRhYl9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfcmh0YWIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTA5OmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzUxMC1cdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcmh0YWJfbWFwX29wc2AgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYHJodGFiX21hcF9vcHNgIGlzIGRlZmluaXRlbHkgdXRpbGl6ZWQgd2l0aGluIGBicGZfdHlwZXMuaGAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBiZSBpbnZva2VkIHZpYSBmdW5jdGlvbiBwb2ludGVyczsgdGhlIG9uZXMgdGhhdCBoYXZlIHVuaXF1ZSBzeW1ib2wgYWRkcmVzc2VzLiBCYXNlZCBvbiB0aGlzLCBJIG5lZWQgdG8gZm9jdXMgb24gYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYC4gVGhleSB3b24mIzM5O3QgYmUgaW5saW5lZCwgdGhhdCYjMzk7cyBjZXJ0YWluLgoKTm93LCBob2xkIG9uLi4uIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCBhcmUgbGlzdGVkIGFzIHN0YXRpYyBoZWxwZXJzLiBIbW0sIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXkgd2lsbCBiZSBpbmxpbmVkLiBMb29raW5nIGF0IHRoZSBjYWxsIGdyYXBoLCBgcmh0YWJfZGVsZXRlX2VsZW1gIGdldHMgY2FsbGVkIGZyb20gYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsICphbmQqIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIFRoYXQgb25lIG1pZ2h0IGJlIGlubGluZWQuIEFuZCB0aGVuIHRoZXJlJiMzOTtzIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCB3aGljaCBpcyBjYWxsZWQgb25seSBmcm9tIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLiBTbywgYWdhaW4sIGl0ICptaWdodCogYmUgaW5saW5lZC4KClRoZXJlZm9yZSwgZm9yIHRoZSBzYWtlIG9mIGVmZmljaWVuY3kgYW5kIGNsYXJpdHksIEkgc2hvdWxkIHN0aWNrIHdpdGggZm9jdXNpbmcgb24gdGhvc2UgaW5pdGlhbCB0aHJlZTogYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGNhbiBnZXQgdGhlIGJlc3QgdmlldyBvZiB0aGUgbm9uLWlubGluZWQgZnVuY3Rpb24gY2FsbHMuCgpOZXh0IHVwLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBgQ09ORklHYCBvcHRpb25zIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGlzLiBTcGVjaWZpY2FsbHkgZm9yIEJQRi4gV2Uga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZXMgQlBGLCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGF0IGlzIGRlZmluZWQuIExldCBtZSBjaGVjayBga2VybmVsL2JwZi9LY29uZmlnYCBvciBwb3NzaWJseSBgaW5pdC9LY29uZmlnYCB0byBwaW5wb2ludCB0aGF0IGBCUEZfU1lTQ0FMTGAgc2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzgwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYEJQRl9NQVBfVFlQRV9SSEFTSGAgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcy4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgY29tZSBpbnRvIHBsYXk/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYsIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgYCNpZmRlZmAgYmxvY2tzIHN1cnJvdW5kaW5nIHRoZSBgcmh0YWJfbWFwX29wc2Agc3RydWN0dXJlIG9yIGFueSBvZiB0aGUgZnVuY3Rpb25zIHVzZWQgd2l0aGluIGl0LiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSBhbnkgY29uZmlndXJhdGlvbi1kZXBlbmRlbnQgbG9naWMgd291bGQgYmUgaGlkZGVuLiBBIHF1aWNrIHNjYW4gc2hvdWxkIHJldmVhbCBpZiB0aGVyZSBhcmUgYW55IHNldHRpbmdzIHRoYXQgY291bGQgaW1wYWN0IGl0cyBwZXJmb3JtYW5jZSwgZmVhdHVyZXMsIG9yIGV2ZW4gYXZhaWxhYmlsaXR5LCBkaXJlY3RseSBpbXBhY3RpbmcgbXkgdXNhZ2Ugb2YgdGhpcyBtYXAgdHlwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmh0YWJfbWFwX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzNj1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTM3OkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfUkhBU0gsIHJodGFiX21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEzOC1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PUJURl9JRF9MSVNUX1NJTkdMRShyaHRhYl9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfcmh0YWIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTA5OmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzUxMC1cdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNTkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIElzc3VlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBzb21ldGhpbmcmIzM5O3MgYnVnZ2luZyBtZS4gSSBub3RpY2VkIHRoZXJlJiMzOTtzIG5vIGV4cGxpY2l0IGAjaWZkZWZgIGd1YXJkIGFyb3VuZCB0aG9zZSBgcmh0YWJfbWFwX29wc2AgZGVmaW5pdGlvbnMuIFRoYXQmIzM5O3MgdW51c3VhbC4gSXQgbWFrZXMgbWUgd29uZGVyIGlmIHRoaXMgd2hvbGUgZmlsZSwgb3IgcG9ydGlvbnMgb2YgaXQsIG1pZ2h0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gc29tZSBvdGhlciBtYWNybyBkZWZpbml0aW9uLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBoYXNodGFiLmNgIGl0c2VsZiBpcyBzdWJqZWN0ZWQgdG8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24g4oCTIGlzIHRoZXJlIGEgYnJvYWRlciBwcmVwcm9jZXNzb3IgY2hlY2sgdGhhdCB3b3VsZCBleGNsdWRlIGl0IGVudGlyZWx5IHVuZGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zPyBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybS4gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY29udGV4dCBoZXJlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgY29kZSB3aWxsIGJlaGF2ZSBpbiBkaWZmZXJlbnQga2VybmVsIGJ1aWxkcy4gSSYjMzk7bGwgc3RhcnQgYnkgcXVpY2tseSBzZWFyY2hpbmcgdGhlIHByb2plY3QgZm9yIGFueSByZWxldmFudCBmbGFncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzaHRhYi5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cbi0tXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlPTE3PXNlbGludXgteSA6PSBhdmMubyBob29rcy5vIHNlbGludXhmcy5vIG5ldGxpbmsubyBubG1zZ3RhYi5vIG5ldGlmLm8gXFxcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUtMTgtXHQgICAgIG5ldG5vZGUubyBuZXRwb3J0Lm8gc3RhdHVzLm8gaW5pdGNhbGxzLm8gXFxcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGU6MTk6XHQgICAgIHNzL2ViaXRtYXAubyBzcy9oYXNodGFiLm8gc3Mvc3ltdGFiLm8gc3Mvc2lkdGFiLm8gc3MvYXZ0YWIubyBcXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0yMC1cdCAgICAgc3MvcG9saWN5ZGIubyBzcy9zZXJ2aWNlcy5vIHNzL2NvbmRpdGlvbmFsLm8gc3MvbWxzLm8gc3MvY29udGV4dC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODY0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgTWFwIEVsZW1lbnQgRnJlZWluZyBDaGFuZ2UqKgoKT2theSwgc28gdGhlIG9ubHkgY29uZmlnIHJlcXVpcmVtZW50IGhlcmUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTGV0JiMzOTtzIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcy4KClJpZ2h0LCB0aGUga2V5IGNoYW5nZSBpcyB3aXRoaW4gdGhlIGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgQlBGX01BUF9UWVBFX1JIQVNIYC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBob3cgQlBGIG1hcCBlbGVtZW50cyBhcmUgZnJlZWQsIGFuZCB0aGlzIGlzIGEgKmZ1bmN0aW9uYWwqIHNoaWZ0LiBJdCBsb29rcyBsaWtlIHdlIGFyZSBhZGRyZXNzaW5nIGFuIE5NSS1zYWZldHkgaXNzdWUgcmVsYXRlZCB0byBrcHRyIGRlc3RydWN0aW9uLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgYW5kIGZ1enppbmcgc2VlbXMgbGlrZSBhIGdvb2QgcGxhbi4KClRoZSBtYWluIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmUgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYC4gSSBuZWVkIHRvIGNvbmZpcm0gSSBoYXZlIHRoZSBjb3JyZWN0IHN5bWJvbHMgZm9yIHRoZSBgQlBGX01BUF9UWVBFX1JIQVNIYCB0eXBlLiBPa2F5LCB5ZXMsIHRob3NlIGFyZSB0aGUgbWFwIG9wZXJhdGlvbnMgZm9yIHRoYXQgdHlwZS4KCkJ1dCwgSSBuZWVkIHRvIHBhdXNlIGZvciBhIG1vbWVudC4uLiB3aGF0JiMzOTtzIHRoaXMgbmV3IGZ1bmN0aW9uIGNhbGwsIGBicGZfb2JqX2NhbmNlbF9maWVsZHNgPyBJcyBpdCBhIG5ldyBmdW5jdGlvbiBvciBhbiBleGlzdGluZyBvbmUgYmVpbmcgdXNlZCBpbiBhIG5ldyB3YXk/IFRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCBpdHMgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBleGlzdGluZyBCUEYgaW5mcmFzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9vYmpfY2FuY2VsX2ZpZWxkcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTI3Mjc9dm9pZCBicGZfb2JqX2ZyZWVfdGFza193b3JrKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iaik7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI3Mjg6dm9pZCBicGZfb2JqX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqb2JqKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtMjcyOS12b2lkIGJwZl9vYmpfZnJlZV9maWVsZHMoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKTtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MzkyPXN0YXRpYyBsb25nIGFycmF5X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy00MTctXHRcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsLCB2YWx1ZSk7XG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDE4Olx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMobWFwLCB2YWwpO1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTQxOS1cdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQyNS1cdFx0XHRjb3B5X21hcF92YWx1ZShtYXAsIHZhbCwgdmFsdWUpO1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjQyNjpcdFx0YnBmX29ial9jYW5jZWxfZmllbGRzKG1hcCwgdmFsKTtcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00MjctXHR9XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTQzMT1pbnQgYnBmX3BlcmNwdV9hcnJheV91cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNDY1LVx0XHRjb3B5X21hcF92YWx1ZShtYXAsIHB0ciwgdmFsdWUpO1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjQ2NjpcdFx0YnBmX29ial9jYW5jZWxfZmllbGRzKG1hcCwgcHRyKTtcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NjctXHRcdGdvdG8gdW5sb2NrO1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NzItXHRcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgcHRyLCB2YWwpO1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjQ3MzpcdFx0YnBmX29ial9jYW5jZWxfZmllbGRzKG1hcCwgcHRyKTtcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NzQtXHR9XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9ODQwPXN0YXRpYyB2b2lkIGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04NTAtXHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo4NTE6XHRcdFx0YnBmX29ial9jYW5jZWxfZmllbGRzKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTg1Mi1cdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtODU0LVxua2VybmVsL2JwZi9oYXNodGFiLmM6ODU1Olx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIG1hcF92YWx1ZSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04NTYtXHR9XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MTAxNT1zdGF0aWMgdm9pZCBwY3B1X2NvcHlfdmFsdWUoc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkIF9fcGVyY3B1ICpwcHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEwMjMtXHRcdGNvcHlfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBwdHIsIHZhbHVlKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjEwMjQ6XHRcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZodGFiLVx1MDAzZW1hcCwgcHRyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEwMjUtXHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEwMzMtXHRcdFx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIHB0ciwgdmFsdWUpO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MTAzNDpcdFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIHB0cik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDM1LVx0XHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDQxLVx0XHRcdGNvcHlfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBwdHIsIHZhbCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMDQyOlx0XHRcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZodGFiLVx1MDAzZW1hcCwgcHRyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEwNDMtXHRcdH1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTI5PXN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICpjb3B5LFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NjAtXHQgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NjE6XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjk2Mi1cdGJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoXHUwMDI2cmh0YWItXHUwMDNlbWEsIGVsZW0pO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5OTk9c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqdmFsdWUsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyMy1cdCAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzAyNDpcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIG9sZF92YWwpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyNS1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgwMj12b2lkIGJwZl9vYmpfZnJlZV90YXNrX3dvcmsoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgwOC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjgwOTp2b2lkIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MTAte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2h0YWJfdXBkYXRlLmM9MTU9c3RhdGljIHZvaWQgdGVzdF9yZWVudGVyX3VwZGF0ZSh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2h0YWJfdXBkYXRlLmMtMjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9odGFiX3VwZGF0ZS5jOjI2Olx0YnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLmJwZl9vYmpfY2FuY2VsX2ZpZWxkcywgdHJ1ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9odGFiX3VwZGF0ZS5jLTI3LVx0ZXJyID0gaHRhYl91cGRhdGVfX2xvYWQoc2tlbCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaHRhYl91cGRhdGUuYy01Mi1cdCAqIHRoZSByZWVudHJhbmN5IG9mIGJwZl9tYXBfdXBkYXRlX2VsZW0oKS5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2h0YWJfdXBkYXRlLmM6NTM6XHQgKiBjaGVja19hbmRfY2FuY2VsX2ZpZWxkcygpIGNhbGxzIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcygpIG9uIHRoZSBvbGRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2h0YWJfdXBkYXRlLmMtNTQtXHQgKiB2YWx1ZSwgd2hpY2ggaXMgd2hlcmUgZmVudHJ5IHByb2dyYW0gcnVucyBhbmQgcGVyZm9ybXMgYSBuZXN0ZWRcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaHRhYl91cGRhdGUuYz0yMz1pbnQgdXBkYXRlX2VyciA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaHRhYl91cGRhdGUuYy0yNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9odGFiX3VwZGF0ZS5jOjI1OlNFQyhcJiMzNDs/ZmVudHJ5L2JwZl9vYmpfY2FuY2VsX2ZpZWxkc1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9odGFiX3VwZGF0ZS5jOjI2OmludCBicGZfb2JqX2NhbmNlbF9maWVsZHModm9pZCAqY3R4KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2h0YWJfdXBkYXRlLmMtMjcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQyOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUkhBU0ggTWFwIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIHRoaW5ncyB1cCBhIGJpdCB3aXRoIHRoZSBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzLCB1c2luZyBgYnBmX29ial9jYW5jZWxfZmllbGRzYCBpbnN0ZWFkIG9mIHRoZSBvbGRlciBgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgYmVoYXZpb3JhbCBzaGlmdC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKVGhlIHJlc3VsdHMgcG9pbnQgdG8gdGhpcyBiZWluZyB3b3J0aCBmdXp6aW5nLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzIHRvIHVuY292ZXIgZWRnZSBjYXNlcy4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYW5kIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYEJQRl9TWVNDQUxMYC4KClRoZSByZWFzb25pbmcgbmFpbHMgaXQgZG93bjogdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IGtwdHJzIGFuZCBvdGhlciBzcGVjaWFsIGZpZWxkcyBhcmUgbWFuYWdlZCBkdXJpbmcgdXBkYXRlcyBhbmQgZGVsZXRlcyBpbiBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGZpeGluZyBhbiBOTUktc2FmZXR5IGlzc3VlIGJ5IGRlbGF5aW5nIGtwdHIgZGVzdHJ1Y3Rpb24uIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nLgoKTm93LCB0aGF0IGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgaXMgb24gdGhlIGxpc3QuLi4gaXQmIzM5O3Mgc3RhdGljLCByaWdodD8gWWVzLCBpdCBpcy4gQnV0LCBJIHJlbWVtYmVyIHRoYXQgaXQgaXMgYWxzbyBhc3NpZ25lZCB0byBgcmh0YWJfbWFwX29wcy5tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgPyBCZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjI5PXN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMzgtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjM5OnN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNDAtXHRcdFx0XHRcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMzc1PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzc3LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzNzg6XHRyZXR1cm4gX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzM3OS19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzM4MT1zdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzgzLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzODQ6XHRyZXR1cm4gX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzg1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NjYKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRoaW5raW5nIG9uIEJQRiBNYXAgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIEJQRiBtYXAgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGByaHRhYl9tYXBfbG9va3VwX2JhdGNoYCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIEkmIzM5O20gZ29pbmcgdG8gZXhwbGljaXRseSBpbmNsdWRlIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIHJhdGhlciB0aGFuIHRoYXQgaW50ZXJuYWwgdmVyc2lvbi4KCk5vdywgSSYjMzk7dmUgZ290IGEgZmV3IGtleSBzeW1ib2xzIEkgd2FudCB0byBrZWVwIGluIG1pbmQgYXMgSSB3b3JrIHRocm91Z2ggdGhpczogYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCBhbmQsIG9mIGNvdXJzZSwgdGhhdCBjcnVjaWFsIGJhdGNoIG9wZXJhdGlvbiwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuCgpBbmQgdGhlbiwganVzdCBhIHJlbWluZGVyIG9uIHRoZSBjb25maWcsIG1ha2Ugc3VyZSB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgaW5jbHVkZWQuCgpSaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIG5leHQgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IGtwdHJzIGFuZCBvdGhlciBzcGVjaWFsIGZpZWxkcyBhcmUgaGFuZGxlZCBkdXJpbmcgdXBkYXRlIGFuZCBkZWxldGUgb3BlcmF0aW9ucyBvbiBCUEZfTUFQX1RZUEVfUkhBU0ggbWFwcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBOTUktc2FmZXR5IGlzc3VlIGJ5IGRlZmVycmluZyBrcHRyIGRlc3RydWN0aW9uLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IGtwdHJzIGFuZCBvdGhlciBzcGVjaWFsIGZpZWxkcyBhcmUgaGFuZGxlZCBkdXJpbmcgdXBkYXRlIGFuZCBkZWxldGUgb3BlcmF0aW9ucyBvbiBCUEZfTUFQX1RZUEVfUkhBU0ggbWFwcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBOTUktc2FmZXR5IGlzc3VlIGJ5IGRlZmVycmluZyBrcHRyIGRlc3RydWN0aW9uLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgQlBGIG1hcCBlbGVtZW50IGZpZWxkcyAoc3VjaCBhcyBrcHRycywgdGltZXJzLCB3b3JrcXVldWVzKSBpbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgdG8gYXZvaWQgTk1JLXVuc2FmZSBvcGVyYXRpb25zLiBCeSByZXBsYWNpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgIHdpdGggYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2AsIGl0IGRlZmVycyBrcHRyIGRlc3RydWN0aW9uIHRvIGEgc2FmZXIgY29udGV4dCAoUkNVIGNhbGxiYWNrKS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBpbnZhbGlkIGNvbnRleHQgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzM2NkNjFiZTFlMDhkMGI2MDRjMjFiODYzOTcwZDlhMzE3NmJlMWQxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTM6MzE6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmEzOTU5MjhhM2NmMjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCkBAIC0yODY0LDE2ICYjNDM7Mjg2NCw2IEBAIHN0YXRpYyBpbnQgcmh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKQogCXJldHVybiBodGFiX21hcF9hbGxvY19jaGVjayhhdHRyKTsKIH0KIAotc3RhdGljIHZvaWQgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLAotCQkJCQlzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSkKLXsKLQlpZiAoSVNfRVJSX09SX05VTEwocmh0YWItJmd0O21hcC5yZWNvcmQpKQotCQlyZXR1cm47Ci0KLQlicGZfb2JqX2ZyZWVfZmllbGRzKHJodGFiLSZndDttYXAucmVjb3JkLAotCQkJICAgIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItJmd0O21hcC5rZXlfc2l6ZSkpOwotfQotCiBzdGF0aWMgdm9pZCByaHRhYl9tZW1fZHRvcih2b2lkICpvYmosIHZvaWQgKmN0eCkKIHsKIAlzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkICpocmVjID0gY3R4OwpAQCAtMjk2Myw4ICYjNDM7Mjk1MywxMiBAQCBzdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdgogCQlyaHRhYl9yZWFkX2VsZW1fdmFsdWUoJmFtcDtyaHRhYi0mZ3Q7bWFwLCBjb3B5LCBlbGVtLCBmbGFncyk7CiAJCWNoZWNrX2FuZF9pbml0X21hcF92YWx1ZSgmYW1wO3JodGFiLSZndDttYXAsIGNvcHkpOwogCX0KLQkvKiBSZWxlYXNlIGludGVybmFsIHN0cnVjdHM6IGtwdHIsIGJwZl90aW1lciwgdGFza193b3JrLCB3cSAqLwotCXJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7CiYjNDM7CS8qCiYjNDM7CSAqIENhbmNlbCB0aW1lciwgd29ya3F1ZXVlLCBhbmQgdGFza193b3JrIGZpZWxkcyBiZWZvcmUgZGVmZXJyaW5nIHRoZQomIzQzOwkgKiBlbGVtZW50IGZyZWUuIFJlZmVyZW5jZWQga3B0ciBkZXN0cnVjdGlvbiBpcyBub3QgTk1JLXNhZmUsIHNvIGxlYXZlCiYjNDM7CSAqIGl0IGZvciByaHRhYl9tZW1fZHRvcigpIGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kcy4KJiM0MzsJICovCiYjNDM7CWJwZl9vYmpfY2FuY2VsX2ZpZWxkcygmYW1wO3JodGFiLSZndDttYXAsIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItJmd0O21hcC5rZXlfc2l6ZSkpOwogCWJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoJmFtcDtyaHRhYi0mZ3Q7bWEsIGVsZW0pOwogCXJldHVybiAwOwogfQpAQCAtMzAyMiwxMCAmIzQzOzMwMTYsMTIgQEAgc3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWwKIAkgKiBCUEZfRl9MT0NLLCBtYXRjaGluZyBhcnJheW1hcCBzZW1hbnRpY3MuCiAJICoKIAkgKiBjb3B5X21hcF92YWx1ZSgpIHNraXBzIHNwZWNpYWwtZmllbGQgb2Zmc2V0cywgc28gb2xkIHRpbWVycy8KLQkgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gQ2FuY2VsIHRoZW0gYWZ0ZXIgdGhlIGNvcHkKLQkgKiB0byBtYXRjaCBhcnJheW1hcCYjMzk7cyB1cGRhdGUgc2VtYW50aWNzLgomIzQzOwkgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gVGhpcyBwYXRoIG1heSBydW4gaW4gTk1JIGNvbnRleHQsCiYjNDM7CSAqIHNvIG9ubHkgY2FuY2VsIHRpbWVyL3dvcmtxdWV1ZS90YXNrX3dvcmsgaGVyZS4gS2VlcCBrcHRyIGZpZWxkcwomIzQzOwkgKiBhdHRhY2hlZCB0byB0aGUgdmFsdWUsIG1hdGNoaW5nIGFycmF5bWFwIHNlbWFudGljczsgcmVmZXJlbmNlZAomIzQzOwkgKiBrcHRycyBhcmUgZGVzdHJveWVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgZXZlbnR1YWxseSBmcmVlZC4KIAkgKi8KLQlyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pOwomIzQzOwlicGZfb2JqX2NhbmNlbF9maWVsZHMoJmFtcDtyaHRhYi0mZ3Q7bWFwLCBvbGRfdmFsKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmMKaW5kZXggMTdlNzA3ZGRkZGE4ZC4uOWZkZGYwMzM4N2JiOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jCkBAIC05OCw2ICYjNDM7OTgsMTIgQEAgc3RhdGljIHZvaWQgdGVzdF9tYXBfa3B0cl9zdWNjZXNzKGJvb2wgdGVzdF9ydW4pCiAJQVNTRVJUX09LKHJldCwgJiMzNDt0ZXN0X21hcF9rcHRyX3JlZjMgcmVmY291bnQmIzM0Oyk7CiAJQVNTRVJUX09LKG9wdHMucmV0dmFsLCAmIzM0O3Rlc3RfbWFwX2twdHJfcmVmMyByZXR2YWwmIzM0Oyk7CiAKJiM0MzsJcmV0ID0gYnBmX21hcF9fZGVsZXRlX2VsZW0oc2tlbC0mZ3Q7bWFwcy5yaGFzaF9tYXAsICZhbXA7a2V5LCBzaXplb2Yoa2V5KSwgMCk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7cmhhc2hfbWFwIGRlbGV0ZSYjMzQ7KTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MudGVzdF9tYXBfa3B0cl9yZWYzKSwgJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX09LKHJldCwgJiMzNDt0ZXN0X21hcF9rcHRyX3JlZjMgcmVmY291bnQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgJiMzNDt0ZXN0X21hcF9rcHRyX3JlZjMgcmV0dmFsJiMzNDspOwomIzQzOwogCXJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnRlc3RfbHNfbWFwX2twdHJfcmVmX2RlbCksICZhbXA7bG9wdHMpOwogCUFTU0VSVF9PSyhyZXQsICYjMzQ7dGVzdF9sc19tYXBfa3B0cl9yZWZfZGVsIGRlbGV0ZSYjMzQ7KTsKIAlza2VsLSZndDtkYXRhLSZndDtyZWYtLTsKQEAgLTE0Nyw2ICYjNDM7MTUzLDcgQEAgZW51bSBtYXBfdXBkYXRlX2twdHJfY2FzZSB7CiAJTUFQX1VQREFURV9LUFRSX0FSUkFZLAogCU1BUF9VUERBVEVfS1BUUl9IQVNILAogCU1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQywKJiM0MzsJTUFQX1VQREFURV9LUFRSX1JIQVNILAogfTsKIAogc3RhdGljIHN0cnVjdCBicGZfcHJvZ3JhbSAqbWFwX3VwZGF0ZV9rcHRyX3Byb2coc3RydWN0IG1hcF9rcHRyICpza2VsLApAQCAtMTU5LDYgJiM0MzsxNjYsOCBAQCBzdGF0aWMgc3RydWN0IGJwZl9wcm9ncmFtICptYXBfdXBkYXRlX2twdHJfcHJvZyhzdHJ1Y3QgbWFwX2twdHIgKnNrZWwsCiAJCXJldHVybiBza2VsLSZndDtwcm9ncy50ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyOwogCWNhc2UgTUFQX1VQREFURV9LUFRSX0hBU0hfTUFMTE9DOgogCQlyZXR1cm4gc2tlbC0mZ3Q7cHJvZ3MudGVzdF9oYXNoX21hbGxvY19tYXBfdXBkYXRlX2twdHI7CiYjNDM7CWNhc2UgTUFQX1VQREFURV9LUFRSX1JIQVNIOgomIzQzOwkJcmV0dXJuIHNrZWwtJmd0O3Byb2dzLnRlc3Rfcmhhc2hfbWFwX3VwZGF0ZV9rcHRyOwogCX0KIAogCXJldHVybiBOVUxMOwpAQCAtMjA0LDYgJiM0MzsyMTMsOCBAQCB2b2lkIHNlcmlhbF90ZXN0X21hcF9rcHRyKHZvaWQpCiAJCXRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9IQVNIKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VwZGF0ZV9oYXNoX21hbGxvY19tYXBfa3B0ciYjMzQ7KSkKIAkJdGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX0hBU0hfTUFMTE9DKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt1cGRhdGVfcmhhc2hfbWFwX2twdHImIzM0OykpCiYjNDM7CQl0ZXN0X21hcF91cGRhdGVfa3B0cihNQVBfVVBEQVRFX0tQVFJfUkhBU0gpOwogCiAJc2tlbCA9IHJjdV90YXNrc190cmFjZV9ncF9fb3Blbl9hbmRfbG9hZCgpOwogCWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3JjdV90YXNrc190cmFjZV9ncF9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmMKaW5kZXggMGQ4N2M5N2RhYzk5MS4uNDQyMTBkZDNjMGVjOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmMKQEAgLTU3LDYgJiM0Mzs1NywxNCBAQCBzdHJ1Y3QgaGFzaF9tYWxsb2NfbWFwIHsKIAlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7CiB9IGhhc2hfbWFsbG9jX21hcCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIAomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7CiYjNDM7fSByaGFzaF9tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiBzdHJ1Y3QgcGNwdV9oYXNoX21hbGxvY19tYXAgewogCV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0gpOwogCV9fdHlwZShrZXksIGludCk7CkBAIC00MjEsNiAmIzQzOzQyOSw3IEBAIGludCB0ZXN0X21hcF9rcHRyX3JlZjEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KQogCWJwZl9tYXBfdXBkYXRlX2VsZW0oJmFtcDtoYXNoX21hcCwgJmFtcDtrZXksICZhbXA7dmFsLCAwKTsKIAlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7aGFzaF9tYWxsb2NfbWFwLCAmYW1wO2tleSwgJmFtcDt2YWwsIDApOwogCWJwZl9tYXBfdXBkYXRlX2VsZW0oJmFtcDtscnVfaGFzaF9tYXAsICZhbXA7a2V5LCAmYW1wO3ZhbCwgMCk7CiYjNDM7CWJwZl9tYXBfdXBkYXRlX2VsZW0oJmFtcDtyaGFzaF9tYXAsICZhbXA7a2V5LCAmYW1wO3ZhbCwgMCk7CiAKIAlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7cGNwdV9oYXNoX21hcCwgJmFtcDtrZXksICZhbXA7dmFsLCAwKTsKIAlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7cGNwdV9oYXNoX21hbGxvY19tYXAsICZhbXA7a2V5LCAmYW1wO3ZhbCwgMCk7CkBAIC00MzAsNiAmIzQzOzQzOSw3IEBAIGludCB0ZXN0X21hcF9rcHRyX3JlZjEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KQogCVRFU1QoaGFzaF9tYXApOwogCVRFU1QoaGFzaF9tYWxsb2NfbWFwKTsKIAlURVNUKGxydV9oYXNoX21hcCk7CiYjNDM7CVRFU1Qocmhhc2hfbWFwKTsKIAogCVRFU1RfUENQVShwY3B1X2FycmF5X21hcCk7CiAJVEVTVF9QQ1BVKHBjcHVfaGFzaF9tYXApOwpAQCAtNDY4LDYgJiM0Mzs0NzgsNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYyKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eCkKIAlURVNUKGhhc2hfbWFwKTsKIAlURVNUKGhhc2hfbWFsbG9jX21hcCk7CiAJVEVTVChscnVfaGFzaF9tYXApOwomIzQzOwlURVNUKHJoYXNoX21hcCk7CiAKIAlURVNUX1BDUFUocGNwdV9hcnJheV9tYXApOwogCVRFU1RfUENQVShwY3B1X2hhc2hfbWFwKTsKQEAgLTU5OSw2ICYjNDM7NjEwLDcgQEAgaW50IG5hbWUodm9pZCAqY3R4KQkJCQkJCVwKIAogREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hcCkKIERFRklORV9IQVNIX1VQREFURV9LUFRSX1RFU1QodGVzdF9oYXNoX21hbGxvY19tYXBfdXBkYXRlX2twdHIsIGhhc2hfbWFsbG9jX21hcCkKJiM0MztERUZJTkVfSEFTSF9VUERBVEVfS1BUUl9URVNUKHRlc3Rfcmhhc2hfbWFwX3VwZGF0ZV9rcHRyLCByaGFzaF9tYXApCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIGludCB0ZXN0X2xzX21hcF9rcHRyX3JlZjEodm9pZCAqY3R4KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2MQoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA3MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgSGFzaHRhYmxlIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBzb21lIHNlbGZ0ZXN0cy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBoYXNodGFibGUgZWxlbWVudHMgYXJlIGNsZWFuZWQgdXAsIHNwZWNpZmljYWxseSB3aXRoaW4gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgLiBJdCBsb29rcyBsaWtlIGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIGlzIGJlaW5nIHJpcHBlZCBvdXQgY29tcGxldGVseS4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgdGhlIHBhdGNoIHJlcGxhY2VzIGNhbGxzIHRvIGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIGluIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCB3aXRoIGNhbGxzIHRvIGBicGZfb2JqX2NhbmNlbF9maWVsZHNgLgoKTGV0JiMzOTtzIGRyaWxsIGRvd246IGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIHdhcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBgYnBmX29ial9mcmVlX2ZpZWxkc2AuIFRoZSBjb21tZW50cyBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIHByb2JsZW0gaXMgY2FsbGluZyBgYnBmX29ial9mcmVlX2ZpZWxkc2AgKHdoaWNoIGNhbiBmcmVlIGtwdHJzKSBpbiBhbiBOTUkgY29udGV4dCBpcyBub3Qgc2FmZS4gVGhlIGZpeCBpcyB0byB1c2UgYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2AgaW5zdGVhZC4gVGhpcyBmdW5jdGlvbiBvbmx5IGNhbmNlbHMgdGltZXJzLCB3b3JrcXVldWVzLCBhbmQgdGFza193b3JrIGZpZWxkcywgbGVhdmluZyB0aGUga3B0ciBkZXN0cnVjdGlvbiB0byBiZSBoYW5kbGVkIGxhdGVyLCB3aXRoaW4gYHJodGFiX21lbV9kdG9yKClgLCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZHMuIFRoaXMgaXMgYSBjbGFzc2ljIG9iamVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudCBpc3N1ZSwgcHJldmVudGluZyBOTUktdW5zYWZlIG9wZXJhdGlvbnMuCgpUaGUga2V5IHF1ZXN0aW9uOiBEb2VzIHRoaXMgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoaXMgaXNuJiMzOTt0IGFib3V0IEtNU0FOIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBvYmplY3QgbGlmZWN5Y2xlLCBhbmQgZW5zdXJpbmcgc2FmZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUga2VybmVsLCBlc3BlY2lhbGx5IGluIE5NSSBjb250ZXh0cy4gS0FTQU4vTE9DS0RFUCBhcmUgdGhlIHJlbGV2YW50IHRvb2xzIGZvciBjYXRjaGluZyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBvciBwb3RlbnRpYWwgZGVhZGxvY2tzIGludHJvZHVjZWQgYnkgY2hhbmdlcyBpbiBtZW1vcnkgbWFuYWdlbWVudC4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBub3Qgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZS4gVGhlIGtwdHJzIGFyZSBzaW1wbHkgYmVpbmcgZnJlZWQgYXQgYSBsYXRlciB0aW1lLgoKQSBxdWljayByZWNhcDogYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2AgYW5kIGBicGZfb2JqX2ZyZWVfZmllbGRzYCBhcmUgdGhlIGtleXMuIFRoZSBmb3JtZXIgY2FuY2VscyB0aGluZ3MgbGlrZSB0aW1lcnMsIHdoaWxlIHRoZSBsYXR0ZXIgaXMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IGZyZWVpbmcgcmVzb3VyY2VzIGluY2x1ZGluZyBrcHRycy4gVGhlIGtwdHJzIGFyZSBhdHRhY2hlZCB0byB0aGUgZWxlbWVudCB2YWx1ZSBhbmQgYXJlIGZyZWVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWN0dWFsbHkgZnJlZWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIGxpZmVjeWNsZSBvZiBCUEYgbWFwIGVsZW1lbnQgZmllbGRzLCBzcGVjaWZpY2FsbHkgZGVmZXJyaW5nIGtwdHIgZGVzdHJ1Y3Rpb24gaW4gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgIHRvIGVuc3VyZSBOTUktc2FmZSBvcGVyYXRpb25zLiBUaGlzIHBhdGNoIGlzIHJlcGxhY2luZyBgYnBmX29ial9mcmVlX2ZpZWxkc2Agd2l0aCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCB0byBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGludmFsaWQgY29udGV4dHMgZm9yIGZyZWVpbmcgbWVtb3J5LiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbmV3IGFsbG9jYXRpb25zLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBvYmplY3QgbGlmZWN5Y2xlcywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb3JyZWN0IGNvbmN1cnJlbmN5IG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgd291bGQgYmUgZmxhZ2dlZCBieSBvdGhlciB0b29scyBsaWtlIEtBU0FOL0xPQ0tERVAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgQlBGIG1hcCBlbGVtZW50IGZpZWxkcyAoc3VjaCBhcyBrcHRycywgdGltZXJzLCB3b3JrcXVldWVzKSBpbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgdG8gYXZvaWQgTk1JLXVuc2FmZSBvcGVyYXRpb25zLiBCeSByZXBsYWNpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgIHdpdGggYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2AsIGl0IGRlZmVycyBrcHRyIGRlc3RydWN0aW9uIHRvIGEgc2FmZXIgY29udGV4dCAoUkNVIGNhbGxiYWNrKS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBpbnZhbGlkIGNvbnRleHQgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBCUEYgbWFwIGVsZW1lbnQgZmllbGRzIChzdWNoIGFzIGtwdHJzLCB0aW1lcnMsIHdvcmtxdWV1ZXMpIGluIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCB0byBhdm9pZCBOTUktdW5zYWZlIG9wZXJhdGlvbnMuIEJ5IHJlcGxhY2luZyBgYnBmX29ial9mcmVlX2ZpZWxkc2Agd2l0aCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCwgaXQgZGVmZXJzIGtwdHIgZGVzdHJ1Y3Rpb24gdG8gYSBzYWZlciBjb250ZXh0IChSQ1UgY2FsbGJhY2spLiBUaGlzIGFkZHJlc3NlcyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGludmFsaWQgY29udGV4dCBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIEFueSByZXN1bHRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlKSB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMxOjE3LjA2NjIzNzQyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTExOTg0Nzc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJodGFiX21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG9mIEJQRiBtYXAgZWxlbWVudCBmaWVsZHMgKHN1Y2ggYXMga3B0cnMsIHRpbWVycywgd29ya3F1ZXVlcykgaW4gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgIHRvIGF2b2lkIE5NSS11bnNhZmUgb3BlcmF0aW9ucy4gQnkgcmVwbGFjaW5nIGBicGZfb2JqX2ZyZWVfZmllbGRzYCB3aXRoIGBicGZfb2JqX2NhbmNlbF9maWVsZHNgLCBpdCBkZWZlcnMga3B0ciBkZXN0cnVjdGlvbiB0byBhIHNhZmVyIGNvbnRleHQgKFJDVSBjYWxsYmFjaykuIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgaW52YWxpZCBjb250ZXh0IGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gQW55IHJlc3VsdGluZyBtZW1vcnkgY29ycnVwdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUpIHdvdWxkIGJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBrcHRycyBhbmQgb3RoZXIgc3BlY2lhbCBmaWVsZHMgYXJlIGhhbmRsZWQgZHVyaW5nIHVwZGF0ZSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMgb24gQlBGX01BUF9UWVBFX1JIQVNIIG1hcHMsIHNwZWNpZmljYWxseSBmaXhpbmcgYW4gTk1JLXNhZmV0eSBpc3N1ZSBieSBkZWZlcnJpbmcga3B0ciBkZXN0cnVjdGlvbi4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzE6MTcuMDY2MjQxNTM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE2OTM4NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzNjZDYxYmUxZTA4ZDBiNjA0YzIxYjg2Mzk3MGQ5YTMxNzZiZTFkMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxMzozMToxNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uYTM5NTkyOGEzY2YyMCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbisrKyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuQEAgLTI4NjQsMTYgKzI4NjQsNiBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4gXFx0cmV0dXJuIGh0YWJfbWFwX2FsbG9jX2NoZWNrKGF0dHIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtKVxcbi17XFxuLVxcdGlmIChJU19FUlJfT1JfTlVMTChyaHRhYi1cXHUwMDNlbWFwLnJlY29yZCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGJwZl9vYmpfZnJlZV9maWVsZHMocmh0YWItXFx1MDAzZW1hcC5yZWNvcmQsXFxuLVxcdFxcdFxcdCAgICByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXFxuIHtcXG4gXFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYyA9IGN0eDtcXG5AQCAtMjk2Myw4ICsyOTUzLDEyIEBAIHN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2XFxuIFxcdFxcdHJodGFiX3JlYWRfZWxlbV92YWx1ZShcXHUwMDI2cmh0YWItXFx1MDAzZW1hcCwgY29weSwgZWxlbSwgZmxhZ3MpO1xcbiBcXHRcXHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXFx1MDAyNnJodGFiLVxcdTAwM2VtYXAsIGNvcHkpO1xcbiBcXHR9XFxuLVxcdC8qIFJlbGVhc2UgaW50ZXJuYWwgc3RydWN0czoga3B0ciwgYnBmX3RpbWVyLCB0YXNrX3dvcmssIHdxICovXFxuLVxcdHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XFxuK1xcdC8qXFxuK1xcdCAqIENhbmNlbCB0aW1lciwgd29ya3F1ZXVlLCBhbmQgdGFza193b3JrIGZpZWxkcyBiZWZvcmUgZGVmZXJyaW5nIHRoZVxcbitcXHQgKiBlbGVtZW50IGZyZWUuIFJlZmVyZW5jZWQga3B0ciBkZXN0cnVjdGlvbiBpcyBub3QgTk1JLXNhZmUsIHNvIGxlYXZlXFxuK1xcdCAqIGl0IGZvciByaHRhYl9tZW1fZHRvcigpIGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kcy5cXG4rXFx0ICovXFxuK1xcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcXHUwMDI2cmh0YWItXFx1MDAzZW1hcCwgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKSk7XFxuIFxcdGJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoXFx1MDAyNnJodGFiLVxcdTAwM2VtYSwgZWxlbSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTMwMjIsMTAgKzMwMTYsMTIgQEAgc3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxcXG4gXFx0ICogQlBGX0ZfTE9DSywgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzLlxcbiBcXHQgKlxcbiBcXHQgKiBjb3B5X21hcF92YWx1ZSgpIHNraXBzIHNwZWNpYWwtZmllbGQgb2Zmc2V0cywgc28gb2xkIHRpbWVycy9cXG4tXFx0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGVtIGFmdGVyIHRoZSBjb3B5XFxuLVxcdCAqIHRvIG1hdGNoIGFycmF5bWFwJ3MgdXBkYXRlIHNlbWFudGljcy5cXG4rXFx0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIFRoaXMgcGF0aCBtYXkgcnVuIGluIE5NSSBjb250ZXh0LFxcbitcXHQgKiBzbyBvbmx5IGNhbmNlbCB0aW1lci93b3JrcXVldWUvdGFza193b3JrIGhlcmUuIEtlZXAga3B0ciBmaWVsZHNcXG4rXFx0ICogYXR0YWNoZWQgdG8gdGhlIHZhbHVlLCBtYXRjaGluZyBhcnJheW1hcCBzZW1hbnRpY3M7IHJlZmVyZW5jZWRcXG4rXFx0ICoga3B0cnMgYXJlIGRlc3Ryb3llZCB3aGVuIHRoZSBlbGVtZW50IGlzIGV2ZW50dWFsbHkgZnJlZWQuXFxuIFxcdCAqL1xcbi1cXHRyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pO1xcbitcXHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXFx1MDAyNnJodGFiLVxcdTAwM2VtYXAsIG9sZF92YWwpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmNcXG5pbmRleCAxN2U3MDdkZGRkYThkLi45ZmRkZjAzMzg3YmI4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jXFxuQEAgLTk4LDYgKzk4LDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbWFwX2twdHJfc3VjY2Vzcyhib29sIHRlc3RfcnVuKVxcbiBcXHRBU1NFUlRfT0socmV0LCBcXFwidGVzdF9tYXBfa3B0cl9yZWYzIHJlZmNvdW50XFxcIik7XFxuIFxcdEFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXFxcInRlc3RfbWFwX2twdHJfcmVmMyByZXR2YWxcXFwiKTtcXG4gXFxuK1xcdHJldCA9IGJwZl9tYXBfX2RlbGV0ZV9lbGVtKHNrZWwtXFx1MDAzZW1hcHMucmhhc2hfbWFwLCBcXHUwMDI2a2V5LCBzaXplb2Yoa2V5KSwgMCk7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJyaGFzaF9tYXAgZGVsZXRlXFxcIik7XFxuK1xcdHJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLnRlc3RfbWFwX2twdHJfcmVmMyksIFxcdTAwMjZvcHRzKTtcXG4rXFx0QVNTRVJUX09LKHJldCwgXFxcInRlc3RfbWFwX2twdHJfcmVmMyByZWZjb3VudFxcXCIpO1xcbitcXHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFxcXCJ0ZXN0X21hcF9rcHRyX3JlZjMgcmV0dmFsXFxcIik7XFxuK1xcbiBcXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy50ZXN0X2xzX21hcF9rcHRyX3JlZl9kZWwpLCBcXHUwMDI2bG9wdHMpO1xcbiBcXHRBU1NFUlRfT0socmV0LCBcXFwidGVzdF9sc19tYXBfa3B0cl9yZWZfZGVsIGRlbGV0ZVxcXCIpO1xcbiBcXHRza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VyZWYtLTtcXG5AQCAtMTQ3LDYgKzE1Myw3IEBAIGVudW0gbWFwX3VwZGF0ZV9rcHRyX2Nhc2Uge1xcbiBcXHRNQVBfVVBEQVRFX0tQVFJfQVJSQVksXFxuIFxcdE1BUF9VUERBVEVfS1BUUl9IQVNILFxcbiBcXHRNQVBfVVBEQVRFX0tQVFJfSEFTSF9NQUxMT0MsXFxuK1xcdE1BUF9VUERBVEVfS1BUUl9SSEFTSCxcXG4gfTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCxcXG5AQCAtMTU5LDYgKzE2Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCxcXG4gXFx0XFx0cmV0dXJuIHNrZWwtXFx1MDAzZXByb2dzLnRlc3RfaGFzaF9tYXBfdXBkYXRlX2twdHI7XFxuIFxcdGNhc2UgTUFQX1VQREFURV9LUFRSX0hBU0hfTUFMTE9DOlxcbiBcXHRcXHRyZXR1cm4gc2tlbC1cXHUwMDNlcHJvZ3MudGVzdF9oYXNoX21hbGxvY19tYXBfdXBkYXRlX2twdHI7XFxuK1xcdGNhc2UgTUFQX1VQREFURV9LUFRSX1JIQVNIOlxcbitcXHRcXHRyZXR1cm4gc2tlbC1cXHUwMDNlcHJvZ3MudGVzdF9yaGFzaF9tYXBfdXBkYXRlX2twdHI7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBOVUxMO1xcbkBAIC0yMDQsNiArMjEzLDggQEAgdm9pZCBzZXJpYWxfdGVzdF9tYXBfa3B0cih2b2lkKVxcbiBcXHRcXHR0ZXN0X21hcF91cGRhdGVfa3B0cihNQVBfVVBEQVRFX0tQVFJfSEFTSCk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ1cGRhdGVfaGFzaF9tYWxsb2NfbWFwX2twdHJcXFwiKSlcXG4gXFx0XFx0dGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX0hBU0hfTUFMTE9DKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInVwZGF0ZV9yaGFzaF9tYXBfa3B0clxcXCIpKVxcbitcXHRcXHR0ZXN0X21hcF91cGRhdGVfa3B0cihNQVBfVVBEQVRFX0tQVFJfUkhBU0gpO1xcbiBcXG4gXFx0c2tlbCA9IHJjdV90YXNrc190cmFjZV9ncF9fb3Blbl9hbmRfbG9hZCgpO1xcbiBcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInJjdV90YXNrc190cmFjZV9ncF9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXFxuaW5kZXggMGQ4N2M5N2RhYzk5MS4uNDQyMTBkZDNjMGVjOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXFxuQEAgLTU3LDYgKzU3LDE0IEBAIHN0cnVjdCBoYXNoX21hbGxvY19tYXAge1xcbiBcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuIH0gaGFzaF9tYWxsb2NfbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4gXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuK30gcmhhc2hfbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuIHN0cnVjdCBwY3B1X2hhc2hfbWFsbG9jX21hcCB7XFxuIFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0gpO1xcbiBcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbkBAIC00MjEsNiArNDI5LDcgQEAgaW50IHRlc3RfbWFwX2twdHJfcmVmMShzdHJ1Y3QgX19za19idWZmICpjdHgpXFxuIFxcdGJwZl9tYXBfdXBkYXRlX2VsZW0oXFx1MDAyNmhhc2hfbWFwLCBcXHUwMDI2a2V5LCBcXHUwMDI2dmFsLCAwKTtcXG4gXFx0YnBmX21hcF91cGRhdGVfZWxlbShcXHUwMDI2aGFzaF9tYWxsb2NfbWFwLCBcXHUwMDI2a2V5LCBcXHUwMDI2dmFsLCAwKTtcXG4gXFx0YnBmX21hcF91cGRhdGVfZWxlbShcXHUwMDI2bHJ1X2hhc2hfbWFwLCBcXHUwMDI2a2V5LCBcXHUwMDI2dmFsLCAwKTtcXG4rXFx0YnBmX21hcF91cGRhdGVfZWxlbShcXHUwMDI2cmhhc2hfbWFwLCBcXHUwMDI2a2V5LCBcXHUwMDI2dmFsLCAwKTtcXG4gXFxuIFxcdGJwZl9tYXBfdXBkYXRlX2VsZW0oXFx1MDAyNnBjcHVfaGFzaF9tYXAsIFxcdTAwMjZrZXksIFxcdTAwMjZ2YWwsIDApO1xcbiBcXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFxcdTAwMjZwY3B1X2hhc2hfbWFsbG9jX21hcCwgXFx1MDAyNmtleSwgXFx1MDAyNnZhbCwgMCk7XFxuQEAgLTQzMCw2ICs0MzksNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYxKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcXG4gXFx0VEVTVChoYXNoX21hcCk7XFxuIFxcdFRFU1QoaGFzaF9tYWxsb2NfbWFwKTtcXG4gXFx0VEVTVChscnVfaGFzaF9tYXApO1xcbitcXHRURVNUKHJoYXNoX21hcCk7XFxuIFxcbiBcXHRURVNUX1BDUFUocGNwdV9hcnJheV9tYXApO1xcbiBcXHRURVNUX1BDUFUocGNwdV9oYXNoX21hcCk7XFxuQEAgLTQ2OCw2ICs0NzgsNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYyKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcXG4gXFx0VEVTVChoYXNoX21hcCk7XFxuIFxcdFRFU1QoaGFzaF9tYWxsb2NfbWFwKTtcXG4gXFx0VEVTVChscnVfaGFzaF9tYXApO1xcbitcXHRURVNUKHJoYXNoX21hcCk7XFxuIFxcbiBcXHRURVNUX1BDUFUocGNwdV9hcnJheV9tYXApO1xcbiBcXHRURVNUX1BDUFUocGNwdV9oYXNoX21hcCk7XFxuQEAgLTU5OSw2ICs2MTAsNyBAQCBpbnQgbmFtZSh2b2lkICpjdHgpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXG4gREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hcClcXG4gREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X2hhc2hfbWFsbG9jX21hcF91cGRhdGVfa3B0ciwgaGFzaF9tYWxsb2NfbWFwKVxcbitERUZJTkVfSEFTSF9VUERBVEVfS1BUUl9URVNUKHRlc3Rfcmhhc2hfbWFwX3VwZGF0ZV9rcHRyLCByaGFzaF9tYXApXFxuIFxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBpbnQgdGVzdF9sc19tYXBfa3B0cl9yZWYxKHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzE6MTguNjgzODY3MDAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA0NjE0NTE0NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcInJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBrcHRycyBhbmQgb3RoZXIgc3BlY2lhbCBmaWVsZHMgYXJlIGhhbmRsZWQgZHVyaW5nIHVwZGF0ZSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMgb24gQlBGX01BUF9UWVBFX1JIQVNIIG1hcHMsIHNwZWNpZmljYWxseSBmaXhpbmcgYW4gTk1JLXNhZmV0eSBpc3N1ZSBieSBkZWZlcnJpbmcga3B0ciBkZXN0cnVjdGlvbi4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzNjZDYxYmUxZTA4ZDBiNjA0YzIxYjg2Mzk3MGQ5YTMxNzZiZTFkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDEzOjMxOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uYTM5NTkyOGEzY2YyMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTI4NjQsMTYgKzI4NjQsNiBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdHJldHVybiBodGFiX21hcF9hbGxvY19jaGVjayhhdHRyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLFxuLVx0XHRcdFx0XHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSlcbi17XG4tXHRpZiAoSVNfRVJSX09SX05VTEwocmh0YWItXHUwMDNlbWFwLnJlY29yZCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGJwZl9vYmpfZnJlZV9maWVsZHMocmh0YWItXHUwMDNlbWFwLnJlY29yZCxcbi1cdFx0XHQgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXG4ge1xuIFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYyA9IGN0eDtcbkBAIC0yOTYzLDggKzI5NTMsMTIgQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZcbiBcdFx0cmh0YWJfcmVhZF9lbGVtX3ZhbHVlKFx1MDAyNnJodGFiLVx1MDAzZW1hcCwgY29weSwgZWxlbSwgZmxhZ3MpO1xuIFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCBjb3B5KTtcbiBcdH1cbi1cdC8qIFJlbGVhc2UgaW50ZXJuYWwgc3RydWN0czoga3B0ciwgYnBmX3RpbWVyLCB0YXNrX3dvcmssIHdxICovXG4tXHRyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pO1xuK1x0LypcbitcdCAqIENhbmNlbCB0aW1lciwgd29ya3F1ZXVlLCBhbmQgdGFza193b3JrIGZpZWxkcyBiZWZvcmUgZGVmZXJyaW5nIHRoZVxuK1x0ICogZWxlbWVudCBmcmVlLiBSZWZlcmVuY2VkIGtwdHIgZGVzdHJ1Y3Rpb24gaXMgbm90IE5NSS1zYWZlLCBzbyBsZWF2ZVxuK1x0ICogaXQgZm9yIHJodGFiX21lbV9kdG9yKCkgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2RzLlxuK1x0ICovXG4rXHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuIFx0YnBmX21lbV9jYWNoZV9mcmVlX3JjdShcdTAwMjZyaHRhYi1cdTAwM2VtYSwgZWxlbSk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzAyMiwxMCArMzAxNiwxMiBAQCBzdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbFxuIFx0ICogQlBGX0ZfTE9DSywgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzLlxuIFx0ICpcbiBcdCAqIGNvcHlfbWFwX3ZhbHVlKCkgc2tpcHMgc3BlY2lhbC1maWVsZCBvZmZzZXRzLCBzbyBvbGQgdGltZXJzL1xuLVx0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGVtIGFmdGVyIHRoZSBjb3B5XG4tXHQgKiB0byBtYXRjaCBhcnJheW1hcCdzIHVwZGF0ZSBzZW1hbnRpY3MuXG4rXHQgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gVGhpcyBwYXRoIG1heSBydW4gaW4gTk1JIGNvbnRleHQsXG4rXHQgKiBzbyBvbmx5IGNhbmNlbCB0aW1lci93b3JrcXVldWUvdGFza193b3JrIGhlcmUuIEtlZXAga3B0ciBmaWVsZHNcbitcdCAqIGF0dGFjaGVkIHRvIHRoZSB2YWx1ZSwgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzOyByZWZlcmVuY2VkXG4rXHQgKiBrcHRycyBhcmUgZGVzdHJveWVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgZXZlbnR1YWxseSBmcmVlZC5cbiBcdCAqL1xuLVx0cmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTtcbitcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIG9sZF92YWwpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jXG5pbmRleCAxN2U3MDdkZGRkYThkLi45ZmRkZjAzMzg3YmI4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY1xuQEAgLTk4LDYgKzk4LDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbWFwX2twdHJfc3VjY2Vzcyhib29sIHRlc3RfcnVuKVxuIFx0QVNTRVJUX09LKHJldCwgXCJ0ZXN0X21hcF9rcHRyX3JlZjMgcmVmY291bnRcIik7XG4gXHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwidGVzdF9tYXBfa3B0cl9yZWYzIHJldHZhbFwiKTtcbiBcbitcdHJldCA9IGJwZl9tYXBfX2RlbGV0ZV9lbGVtKHNrZWwtXHUwMDNlbWFwcy5yaGFzaF9tYXAsIFx1MDAyNmtleSwgc2l6ZW9mKGtleSksIDApO1xuK1x0QVNTRVJUX09LKHJldCwgXCJyaGFzaF9tYXAgZGVsZXRlXCIpO1xuK1x0cmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X21hcF9rcHRyX3JlZjMpLCBcdTAwMjZvcHRzKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwidGVzdF9tYXBfa3B0cl9yZWYzIHJlZmNvdW50XCIpO1xuK1x0QVNTRVJUX09LKG9wdHMucmV0dmFsLCBcInRlc3RfbWFwX2twdHJfcmVmMyByZXR2YWxcIik7XG4rXG4gXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnRlc3RfbHNfbWFwX2twdHJfcmVmX2RlbCksIFx1MDAyNmxvcHRzKTtcbiBcdEFTU0VSVF9PSyhyZXQsIFwidGVzdF9sc19tYXBfa3B0cl9yZWZfZGVsIGRlbGV0ZVwiKTtcbiBcdHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VyZWYtLTtcbkBAIC0xNDcsNiArMTUzLDcgQEAgZW51bSBtYXBfdXBkYXRlX2twdHJfY2FzZSB7XG4gXHRNQVBfVVBEQVRFX0tQVFJfQVJSQVksXG4gXHRNQVBfVVBEQVRFX0tQVFJfSEFTSCxcbiBcdE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQyxcbitcdE1BUF9VUERBVEVfS1BUUl9SSEFTSCxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCxcbkBAIC0xNTksNiArMTY2LDggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ3JhbSAqbWFwX3VwZGF0ZV9rcHRyX3Byb2coc3RydWN0IG1hcF9rcHRyICpza2VsLFxuIFx0XHRyZXR1cm4gc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyO1xuIFx0Y2FzZSBNQVBfVVBEQVRFX0tQVFJfSEFTSF9NQUxMT0M6XG4gXHRcdHJldHVybiBza2VsLVx1MDAzZXByb2dzLnRlc3RfaGFzaF9tYWxsb2NfbWFwX3VwZGF0ZV9rcHRyO1xuK1x0Y2FzZSBNQVBfVVBEQVRFX0tQVFJfUkhBU0g6XG4rXHRcdHJldHVybiBza2VsLVx1MDAzZXByb2dzLnRlc3Rfcmhhc2hfbWFwX3VwZGF0ZV9rcHRyO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtMjA0LDYgKzIxMyw4IEBAIHZvaWQgc2VyaWFsX3Rlc3RfbWFwX2twdHIodm9pZClcbiBcdFx0dGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX0hBU0gpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1cGRhdGVfaGFzaF9tYWxsb2NfbWFwX2twdHJcIikpXG4gXHRcdHRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQyk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInVwZGF0ZV9yaGFzaF9tYXBfa3B0clwiKSlcbitcdFx0dGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX1JIQVNIKTtcbiBcbiBcdHNrZWwgPSByY3VfdGFza3NfdHJhY2VfZ3BfX29wZW5fYW5kX2xvYWQoKTtcbiBcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInJjdV90YXNrc190cmFjZV9ncF9fb3Blbl9hbmRfbG9hZFwiKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXG5pbmRleCAwZDg3Yzk3ZGFjOTkxLi40NDIxMGRkM2MwZWM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXG5AQCAtNTcsNiArNTcsMTQgQEAgc3RydWN0IGhhc2hfbWFsbG9jX21hcCB7XG4gXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4gfSBoYXNoX21hbGxvY19tYXAgU0VDKFwiLm1hcHNcIik7XG4gXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuK30gcmhhc2hfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuIHN0cnVjdCBwY3B1X2hhc2hfbWFsbG9jX21hcCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIKTtcbiBcdF9fdHlwZShrZXksIGludCk7XG5AQCAtNDIxLDYgKzQyOSw3IEBAIGludCB0ZXN0X21hcF9rcHRyX3JlZjEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZoYXNoX21hcCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZoYXNoX21hbGxvY19tYXAsIFx1MDAyNmtleSwgXHUwMDI2dmFsLCAwKTtcbiBcdGJwZl9tYXBfdXBkYXRlX2VsZW0oXHUwMDI2bHJ1X2hhc2hfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4rXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnJoYXNoX21hcCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuIFxuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZwY3B1X2hhc2hfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4gXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnBjcHVfaGFzaF9tYWxsb2NfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG5AQCAtNDMwLDYgKzQzOSw3IEBAIGludCB0ZXN0X21hcF9rcHRyX3JlZjEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuIFx0VEVTVChoYXNoX21hcCk7XG4gXHRURVNUKGhhc2hfbWFsbG9jX21hcCk7XG4gXHRURVNUKGxydV9oYXNoX21hcCk7XG4rXHRURVNUKHJoYXNoX21hcCk7XG4gXG4gXHRURVNUX1BDUFUocGNwdV9hcnJheV9tYXApO1xuIFx0VEVTVF9QQ1BVKHBjcHVfaGFzaF9tYXApO1xuQEAgLTQ2OCw2ICs0NzgsNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYyKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcbiBcdFRFU1QoaGFzaF9tYXApO1xuIFx0VEVTVChoYXNoX21hbGxvY19tYXApO1xuIFx0VEVTVChscnVfaGFzaF9tYXApO1xuK1x0VEVTVChyaGFzaF9tYXApO1xuIFxuIFx0VEVTVF9QQ1BVKHBjcHVfYXJyYXlfbWFwKTtcbiBcdFRFU1RfUENQVShwY3B1X2hhc2hfbWFwKTtcbkBAIC01OTksNiArNjEwLDcgQEAgaW50IG5hbWUodm9pZCAqY3R4KVx0XHRcdFx0XHRcdFxcXG4gXG4gREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hcClcbiBERUZJTkVfSEFTSF9VUERBVEVfS1BUUl9URVNUKHRlc3RfaGFzaF9tYWxsb2NfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hbGxvY19tYXApXG4rREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X3JoYXNoX21hcF91cGRhdGVfa3B0ciwgcmhhc2hfbWFwKVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBpbnQgdGVzdF9sc19tYXBfa3B0cl9yZWYxKHZvaWQgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMxOjE4LjY4Mzg2ODkyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MzEzNTgxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBCUEYgSGFzaHRhYmxlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBmaXggZm9yIGhvdyB3ZSBoYW5kbGUga2VybmVsIHBvaW50ZXJzIChga3B0cmApIHdpdGhpbiBCUEYgaGFzaHRhYmxlcywgc3BlY2lmaWNhbGx5IGluIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYC4gVGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jYCB0ZXN0cyBhcmUgaW5jbHVkZWQsIHdoaWNoIGlzIGdvb2QgdG8gc2VlIGZvciB2ZXJpZmljYXRpb24uXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSByZXBsYWNpbmcgYHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkc2Agd2l0aCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCBpbiB0aG9zZSB0d28gZnVuY3Rpb25zLiBGcm9tIHRoZSBjb21tZW50cywgaXQncyBjbGVhciB0aGlzIGlzIGFib3V0IE5NSSBzYWZldHkuIFRoZSBvbGQgY29kZSB3YXMgZGlyZWN0bHkgZnJlZWluZyBpbnRlcm5hbCBzdHJ1Y3RzIGxpa2UgYGtwdHJgLCBgYnBmX3RpbWVyYCwgYHRhc2tfd29ya2AsIGFuZCBgd3FgIGR1cmluZyB0aGUgZGVsZXRlIGFuZCB1cGRhdGUgb3BlcmF0aW9ucy4gTm93LCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCBpcyB1c2VkIGluc3RlYWQuIFRoaXMgc2VlbXMgdG8gYmUgZGVsYXlpbmcgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSByZWZlcmVuY2VkIGBrcHRyYCB1bnRpbCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZHMsIHdoaWNoIGlzIGxpa2VseSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgTk1JLXNhZmV0eSBjb25jZXJuLiBUaGUgdGltZXIsIHdvcmtxdWV1ZSwgYW5kIHRhc2tfd29yayBmaWVsZHMgYXJlIGNhbmNlbGxlZCBlYXJsaWVyLiBUaGUgdXBkYXRlIG9wZXJhdGlvbiBpbiBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgYWxzbyBub3cgbWF0Y2hlcyBhcnJheW1hcCBzZW1hbnRpY3MsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyB0byBtYWludGFpbiBjb25zaXN0ZW5jeS5cblxuVGhlIG9sZCBjb2RlIGxvb2tzIGxpa2UgaXQgcG90ZW50aWFsbHkgaGFkIGEgcmFjZSBjb25kaXRpb24gb3IgYSBwcm9ibGVtIHdoZXJlIHRoZSBga3B0cmAgZGVzdHJ1Y3Rpb24gY291bGQgaGFwcGVuIGluIGEgY29udGV4dCB0aGF0IGlzbid0IHNhZmUgZm9yIGl0LiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgdGhhdCBkaXJlY3RseS4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IGEgZml4IGZvciBCUEYgbWFwcyBvZiB0aGUgUkhBU0ggdHlwZSwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBob3cgdGhleSBoYW5kbGUgYGtwdHJgIG9uIGRlbGV0ZS91cGRhdGUgb3BlcmF0aW9ucy5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIHRoYXQgdGhpcyBpcyBwcm9iYWJseSBzcGVjaWZpYyB0byBgQlBGX01BUF9UWVBFX1JIQVNIYCwgdGhvdWdoIEkgd2lsbCB2ZXJpZnkgdGhhdCBieSBsb29raW5nIGF0IGhvdyBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgYXJlIHVzZWQgd2l0aGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIEkgbmVlZCB0byBmdWxseSBncm9rIHRoZSBCUEYgbWFwIHR5cGVzIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMToyOC4xMTUyMzAwNDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1OTM5NTA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRhYl9kZWxldGVfZWxlbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTE4PXN0YXRpYyB2b2lkIHJodGFiX3JlYWRfZWxlbV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpkc3QsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkyOC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTI5OnN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICpjb3B5LFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MzAtXFx0XFx0XFx0ICAgICB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTY2PXN0YXRpYyBsb25nIHJodGFiX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTc2LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5Nzc6XFx0cmV0dXJuIHJodGFiX2RlbGV0ZV9lbGVtKHJodGFiLCBlbGVtLCBOVUxMLCAwKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTc4LX1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5ODA9c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTk1LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5OTY6XFx0cmV0dXJuIHJodGFiX2RlbGV0ZV9lbGVtKHJodGFiLCBlbGVtLCB2YWx1ZSwgZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OTctfVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzIzOT1zdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzQyLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0b3RhbDsgaSsrKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzNDM6XFx0XFx0XFx0cmh0YWJfZGVsZXRlX2VsZW0ocmh0YWIsIGRlbF9lbGVtc1tpXSwgTlVMTCwgMCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM0NC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMxOjI5Ljc3NDY0MDI4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjAzMzM3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyBCUEYgTWFwIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbiBuYW1lczogYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCwgYW5kIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIFRoZSBwcmVmaXggYHJodGFiX2Agc3VnZ2VzdHMgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24sIHBlcmhhcHMgYSBcInJlc2l6YWJsZSBoYXNoIHRhYmxlLlwiIFRoZSBvcGVyYXRpb25zIHRoZW1zZWx2ZXMgcG9pbnQgdG93YXJkcyBjb21tb24gbWFwIGZ1bmN0aW9uYWxpdGllczogZWxlbWVudCBkZWxldGlvbiwgbG9va3VwIGFuZCBkZWxldGlvbiBpbiBvbmUgc3RlcCwgdXBkYXRpbmcgZXhpc3RpbmcgZWxlbWVudHMsIGFuZCBhIGJhdGNoIHZlcnNpb24gb2YgdGhlIGxvb2t1cC1hbmQtZGVsZXRlIG9wZXJhdGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgYWxsIHRpZWQgdG8gYEJQRl9NQVBfVFlQRV9SSEFTSGAsIGJ1dCBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBjb3JyZWN0LiBJIHNob3VsZCBjb25maXJtIHRoaXMgYnkgbG9va2luZyBhdCBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYC4gR290dGEgdmVyaWZ5IHRoZSBtYXAgdHlwZSBmb3IgdGhlc2UgZnVuY3Rpb25zIHRvIGtub3cgZm9yIHN1cmUgdGhlIGV4YWN0IGNvbnRleHQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAzNCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMxOjMzLjgzNDk3NjY3OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUxMTM0ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9NQVBfVFlQRV9SSEFTSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzNj1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTM4LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNDktXFx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwNTA6XFx0QlBGX01BUF9UWVBFX1JIQVNILFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVxcdF9fTUFYX0JQRl9NQVBfVFlQRVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTctXFx0XFx0ICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU1ODpcXHRcXHQgKiBCUEZfTUFQX1RZUEVfUkhBU0ggLSBpbml0aWFsIHRhYmxlIHNpemUgaGludFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU5LVxcdFxcdCAqIChuZWxlbV9oaW50KS4gMCA9IHVzZSByaGFzaHRhYmxlIGRlZmF1bHQuIE11c3QgYmVcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0xMDA9c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xMjYtXFx0XFx0IG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9tYXBfaXRlci5jOjEyNzpcXHRcXHQgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyOC1cXHRcXHRnb3RvIHB1dF9tYXA7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMjU1PXN0YXRpYyBpbnQgbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyOTktXFx0XFx0XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMzAwOlxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMDEtXFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzE0LVxcdFxcdFxcdFxcdGlmIChtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMxNTpcXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzE2LVxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9MUlVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMyNi1cXHRcXHRcXHRcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzMjc6XFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMyOC1cXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MjAtXFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUkVOQSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MjE6XFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MjItXFx0ICAgIGF0dHItXFx1MDAzZW1hcF9leHRyYSAhPSAwKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDkyLVxcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ5MzpcXHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDk0LVxcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjIxNj1zdGF0aWMgaW50IG1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI3NS1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMjc2OlxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JIQVNIIHx8XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI3Ny1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TVEFDS19UUkFDRSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4NzQ0PXN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NzkyLVxcdFxcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NzkzOlxcdFxcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODc5NC1cXHRcXHRjYXNlIEJQRl9NQVBfVFlQRV9MUlVfSEFTSDpcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVxcdEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlxcdEJQRl9NQVBfVFlQRV9SSEFTSCxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA1MS1cXHRfX01BWF9CUEZfTUFQX1RZUEVcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVxcdFxcdCAqXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XFx0XFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cXHRcXHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE2Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1hcF90eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTk4LVxcdFtCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWV1cXHRcXHQ9IFxcXCJpbnNuX2FycmF5XFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjE5OTpcXHRbQlBGX01BUF9UWVBFX1JIQVNIXVxcdFxcdFxcdD0gXFxcInJoYXNoXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIwMC19O1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM9MjkyPXN0YXRpYyBpbnQgcHJvYmVfbWFwX2NyZWF0ZShlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMS1cXHRcXHRicmVhaztcXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzozMTI6XFx0Y2FzZSBCUEZfTUFQX1RZUEVfUkhBU0g6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzEzLVxcdFxcdG9wdHMubWFwX2ZsYWdzXFx0PSBCUEZfRl9OT19QUkVBTExPQztcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz0zNz1zdGF0aWMgdm9pZCBoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUwLVxcdGJwZl9tYXBfX3NldF90eXBlKGN0eC5za2VsLVxcdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLCBtYXBfdHlwZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jOjUxOlxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUyLVxcdFxcdGJwZl9tYXBfX3NldF9tYXBfZmxhZ3MoY3R4LnNrZWwtXFx1MDAzZW1hcHMuaGFzaF9tYXBfYmVuY2gsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM9ODA9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmMtODEte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo4MjpcXHRoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgzLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM9MTUxPXN0YXRpYyB2b2lkIGhhc2htYXBfbG9va3VwX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjctXFx0bWFwX2ZsYWdzID0gYXJncy5tYXBfZmxhZ3M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYzoxNjg6XFx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTE2OS1cXHRcXHRtYXBfZmxhZ3MgfD0gQlBGX0ZfTk9fUFJFQUxMT0M7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jPTIxMT1zdGF0aWMgdm9pZCByaGFzaF9zZXR1cCh2b2lkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjEyLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jOjIxMzpcXHRoYXNobWFwX2xvb2t1cF9zZXR1cChCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjE0LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYz0xNTU9c3RhdGljIHZvaWQgaHRhYl9tZW1fc2V0dXBfaW1wbChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0xODQtXFx0YnBmX21hcF9fc2V0X21heF9lbnRyaWVzKG1hcCwgTUFYKDgxOTIsIDY0ICogZW52Lm5yX2NwdXMpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MTg1OlxcdGlmIChtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjYgYXJncy5wcmVhbGxvY2F0ZWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4Ni1cXHRcXHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKG1hcCwgYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXFx1MDAyNiB+QlBGX0ZfTk9fUFJFQUxMT0MpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTIyOT1zdGF0aWMgdm9pZCByaHRhYl9tZW1fc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MjMxOlxcdGh0YWJfbWVtX3NldHVwX2ltcGwoQlBGX01BUF9UWVBFX1JIQVNIKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMyLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM9NDY9c3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTUxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM6NTI6XFx0cmV0dXJuIGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9SSEFTSCwgXFxcInJoYXNoX2V4dHJhXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTUzLVxcdFxcdFxcdCAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3U2NCksIG1heF9lbnRyaWVzLCBcXHUwMDI2b3B0cyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jPTg9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jOjk6XFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYy0xMC1cXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYz02MD1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jOjYxOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jLTYyLVxcdF9fdHlwZShrZXksIGludCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYz0yMj1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jOjIzOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jLTI0LVxcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzE6MzUuNDg2MTE3MzA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyMzQwNTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgQlBGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIHRoZSBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXAgdHlwZSBpbiB0aGUga2VybmVsIOKAkyBnb29kLCB0aGF0J3MgYSBrbm93biBxdWFudGl0eS4gSSBzZWUgdGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgLCB3aGljaCBhcmUgY29yZSBvcGVyYXRpb25zIGZvciB0aGVzZSBSSEFTSCBtYXBzLiBUaGlzIG1lYW5zIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuXG5cblRoZSBuZXh0IHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzICpyZWFjaGFiaWxpdHkqLiBDYW4gdGhpcyBiZSB0cmlnZ2VyZWQ/IEFic29sdXRlbHkuIEEgdXNlci1zcGFjZSBwcm9ncmFtIHVzaW5nIHRoZSBgYnBmKClgIHN5c2NhbGwgdG8gY3JlYXRlIGFuZCBtYW5pcHVsYXRlIGEgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwIGNhbiBkZWZpbml0ZWx5IGhpdCB0aGVzZSBmdW5jdGlvbnMgdmlhIHVwZGF0ZSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJdCdzIHJlYWxseSBhYm91dCBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AuIEJ1dCB3YWl0LCB3YXNuJ3QgYHJodGFiX2RlbGV0ZV9lbGVtYCBzdGF0aWM/IEFoYSEgVGhhdCdzIG5vdCB0aGUgbWFwIG9wISBJdCdzIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gIHRoYXQgbWF0dGVycy4gSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvaGFzaHRhYi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgzMiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMTo0Mi41MDk1MjQ0OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NTY4ODg3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRhYl9tYXBfZGVsZXRlX2VsZW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmM9MjkyOT1zdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NjUtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk2NjpzdGF0aWMgbG9uZyByaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5Njcte1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUwOT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MTktXFx0Lm1hcF91cGRhdGVfZWxlbSA9IHJodGFiX21hcF91cGRhdGVfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTIwOlxcdC5tYXBfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMS1cXHQubWFwX2dlbl9sb29rdXAgPSByaHRhYl9tYXBfZ2VuX2xvb2t1cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzE6NDQuMjY1MjE5Nzk5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk3MjQ0OTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3Mgb2YgYSBzZWFzb25lZCBkZXZlbG9wZXI6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBUYWJsZSBNYW5hZ2VtZW50IENvZGUqKlxuXG5Pa2F5LCBzbyBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBsaW1pdGVkIGluIHNjb3BlIHdpdGhpbiB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0LiBCdXQsIHRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhhdCBpdCdzIGZ1bmRhbWVudGFsbHkgYSBtYXAgb3BlcmF0aW9uLCBhIGRlbGV0aW9uIHdpdGhpbiB0aGUgaGFzaCB0YWJsZS4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIGl0cyBjb3VudGVycGFydCwgdGhlIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCBmdW5jdGlvbi4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCwgaWYgYW55LCBiZXR3ZWVuIGRlbGV0aW9uIGFuZCB1cGRhdGUgd2l0aGluIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIEFyZSB0aGVyZSBzaGFyZWQgc3Vicm91dGluZXMsIGNvbW1vbiBkYXRhIHN0cnVjdHVyZXMsIG9yIHBlcmhhcHMgc2ltaWxhciBlcnJvciBoYW5kbGluZz8gVW5kZXJzdGFuZGluZyBob3cgdXBkYXRlcyBpbnRlcmFjdCB3aXRoIHRoZSBoYXNoIHRhYmxlIGRlbGV0aW9uIHByb2Nlc3Mgd2lsbCBwcm9iYWJseSBpbGx1bWluYXRlIGRlZXBlciBhc3BlY3RzIG9mIHRhYmxlIG1hbmlwdWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1ODksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMTo1Mi4yMzc2NzIyNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMjU3OTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTI5ODA9c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTk4LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5OTk6c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqdmFsdWUsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAwMC1cXHRcXHRcXHRcXHQgICAgICB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzAyOD1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNDEtXFx0aWYgKGVsZW0pXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA0MjpcXHRcXHRyZXR1cm4gcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhtYXAsIGVsZW0sIHZhbHVlLCBtYXBfZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNDMtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDgxLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwODI6XFx0XFx0cmV0dXJuIHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmcobWFwLCB0bXAsIHZhbHVlLCBtYXBfZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODMtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMTo1My42NzAyNTk0OTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1OTE1NDkwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSByaHRhYiBNYXAgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgaXQncyBmbGFnZ2VkIGFzICp0aGUqIG1hcCBvcGVyYXRpb24uIFRoYXQgbWFrZXMgc2Vuc2UuIFRoZXJlZm9yZSwgdGhlIGltcG9ydGFudCBzeW1ib2xzIHRvIHNjcnV0aW5pemUgYXJlIGdvaW5nIHRvIGluY2x1ZGUgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCBhbmQgYF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC5cblxuTm93LCB0aGUgcHJvbXB0IGJyaW5ncyB1cCBhbiBpbnRlcmVzdGluZyBwb2ludDogaXQgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBnb2FsIGlzIHRvIGZhdm9yIHRoZSBvbmVzIHRoYXQgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQsIGhlcmUncyB0aGUgcnViOiBib3RoIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGV5IGFyZSBpbnRlcm5hbCBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZXkncmUgYXNzaWduZWQgdG8gYHJodGFiX21hcF9vcHNgLiBBbmQgKnRoYXQqIGRhdGEgc3RydWN0dXJlLCBgcmh0YWJfbWFwX29wc2AsIGlzIG5vbi1zdGF0aWMuIFRoZSBjb2RlIGFwcGVhcnMgdG8gYmUgdHJhZGluZyB0aGUgZXhwbGljaXQgbm9uLXN0YXRpYyBmdW5jdGlvbiB3aXRoIHRoZSBzdGF0aWMgZnVuY3Rpb24gdmlhIHRoZSBzdHJ1Y3QgbWVtYmVyLiBUaGlzIGJlYXJzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gY2hlY2sgaG93IGByaHRhYl9tYXBfb3BzYCBpcyB1c2VkIG9yIGV4cG9ydGVkLiBJcyBpdCBwYXJ0IG9mIHRoZSBleHBvc2VkIEFQST8gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIHByb3BlciBkaXJlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTczLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMyOjA2LjI2MTgxMTQ0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2ODgxNTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRhYl9tYXBfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTM2PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSwgaW5zbl9hcnJheV9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTM3OkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfUkhBU0gsIHJodGFiX21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMzgtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PUJURl9JRF9MSVNUX1NJTkdMRShyaHRhYl9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfcmh0YWIpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUwOTpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTEwLVxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzI6MDcuNzMwNjMxMDAzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTc3NzUxODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHJodGFiX21hcF9vcHNgIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHJodGFiX21hcF9vcHNgIGlzIGRlZmluaXRlbHkgdXRpbGl6ZWQgd2l0aGluIGBicGZfdHlwZXMuaGAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGludm9rZWQgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzOyB0aGUgb25lcyB0aGF0IGhhdmUgdW5pcXVlIHN5bWJvbCBhZGRyZXNzZXMuIEJhc2VkIG9uIHRoaXMsIEkgbmVlZCB0byBmb2N1cyBvbiBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLiBUaGV5IHdvbid0IGJlIGlubGluZWQsIHRoYXQncyBjZXJ0YWluLlxuXG5Ob3csIGhvbGQgb24uLi4gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgIGFyZSBsaXN0ZWQgYXMgc3RhdGljIGhlbHBlcnMuIEhtbSwgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhleSB3aWxsIGJlIGlubGluZWQuIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGByaHRhYl9kZWxldGVfZWxlbWAgZ2V0cyBjYWxsZWQgZnJvbSBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgKmFuZCogYF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gVGhhdCBvbmUgbWlnaHQgYmUgaW5saW5lZC4gQW5kIHRoZW4gdGhlcmUncyBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2Agd2hpY2ggaXMgY2FsbGVkIG9ubHkgZnJvbSBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYC4gU28sIGFnYWluLCBpdCAqbWlnaHQqIGJlIGlubGluZWQuXG5cblRoZXJlZm9yZSwgZm9yIHRoZSBzYWtlIG9mIGVmZmljaWVuY3kgYW5kIGNsYXJpdHksIEkgc2hvdWxkIHN0aWNrIHdpdGggZm9jdXNpbmcgb24gdGhvc2UgaW5pdGlhbCB0aHJlZTogYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYC4gVGhhdCdzIHdoZXJlIEkgY2FuIGdldCB0aGUgYmVzdCB2aWV3IG9mIHRoZSBub24taW5saW5lZCBmdW5jdGlvbiBjYWxscy5cblxuTmV4dCB1cCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgYENPTkZJR2Agb3B0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgdGhpcy4gU3BlY2lmaWNhbGx5IGZvciBCUEYuIFdlIGtub3cgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVzIEJQRiwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhhdCBpcyBkZWZpbmVkLiBMZXQgbWUgY2hlY2sgYGtlcm5lbC9icGYvS2NvbmZpZ2Agb3IgcG9zc2libHkgYGluaXQvS2NvbmZpZ2AgdG8gcGlucG9pbnQgdGhhdCBgQlBGX1NZU0NBTExgIHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMyOjE4LjkwODM4NTQzNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0ODk4OTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMjoyMC4zNTczNzg4OTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxNDY1NDg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgQlBGX01BUF9UWVBFX1JIQVNIYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcy4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgY29tZSBpbnRvIHBsYXk/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYsIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgYCNpZmRlZmAgYmxvY2tzIHN1cnJvdW5kaW5nIHRoZSBgcmh0YWJfbWFwX29wc2Agc3RydWN0dXJlIG9yIGFueSBvZiB0aGUgZnVuY3Rpb25zIHVzZWQgd2l0aGluIGl0LiBUaGF0J3MgbGlrZWx5IHdoZXJlIGFueSBjb25maWd1cmF0aW9uLWRlcGVuZGVudCBsb2dpYyB3b3VsZCBiZSBoaWRkZW4uIEEgcXVpY2sgc2NhbiBzaG91bGQgcmV2ZWFsIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGluZ3MgdGhhdCBjb3VsZCBpbXBhY3QgaXRzIHBlcmZvcm1hbmNlLCBmZWF0dXJlcywgb3IgZXZlbiBhdmFpbGFiaWxpdHksIGRpcmVjdGx5IGltcGFjdGluZyBteSB1c2FnZSBvZiB0aGlzIG1hcCB0eXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc4MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMyOjI1LjY3MjAzNjIxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NjkyNzgzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRhYl9tYXBfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTM2PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSwgaW5zbl9hcnJheV9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTM3OkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfUkhBU0gsIHJodGFiX21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMzgtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PUJURl9JRF9MSVNUX1NJTkdMRShyaHRhYl9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfcmh0YWIpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUwOTpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTEwLVxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzI6MjcuMTI4OTY4MTQzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MTIzMDIxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gSXNzdWUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBzb21ldGhpbmcncyBidWdnaW5nIG1lLiBJIG5vdGljZWQgdGhlcmUncyBubyBleHBsaWNpdCBgI2lmZGVmYCBndWFyZCBhcm91bmQgdGhvc2UgYHJodGFiX21hcF9vcHNgIGRlZmluaXRpb25zLiBUaGF0J3MgdW51c3VhbC4gSXQgbWFrZXMgbWUgd29uZGVyIGlmIHRoaXMgd2hvbGUgZmlsZSwgb3IgcG9ydGlvbnMgb2YgaXQsIG1pZ2h0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gc29tZSBvdGhlciBtYWNybyBkZWZpbml0aW9uLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGhhc2h0YWIuY2AgaXRzZWxmIGlzIHN1YmplY3RlZCB0byBjb25kaXRpb25hbCBjb21waWxhdGlvbiDigJMgaXMgdGhlcmUgYSBicm9hZGVyIHByZXByb2Nlc3NvciBjaGVjayB0aGF0IHdvdWxkIGV4Y2x1ZGUgaXQgZW50aXJlbHkgdW5kZXIgc3BlY2lmaWMgY29uZmlndXJhdGlvbnM/IFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0uIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvbnRleHQgaGVyZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGNvZGUgd2lsbCBiZWhhdmUgaW4gZGlmZmVyZW50IGtlcm5lbCBidWlsZHMuIEknbGwgc3RhcnQgYnkgcXVpY2tseSBzZWFyY2hpbmcgdGhlIHByb2plY3QgZm9yIGFueSByZWxldmFudCBmbGFncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNTksIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMjozNi42NDEyNzM5MjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTEwOTk1MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFzaHRhYi5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZT0xNz1zZWxpbnV4LXkgOj0gYXZjLm8gaG9va3MubyBzZWxpbnV4ZnMubyBuZXRsaW5rLm8gbmxtc2d0YWIubyBuZXRpZi5vIFxcXFxcXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlLTE4LVxcdCAgICAgbmV0bm9kZS5vIG5ldHBvcnQubyBzdGF0dXMubyBpbml0Y2FsbHMubyBcXFxcXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZToxOTpcXHQgICAgIHNzL2ViaXRtYXAubyBzcy9oYXNodGFiLm8gc3Mvc3ltdGFiLm8gc3Mvc2lkdGFiLm8gc3MvYXZ0YWIubyBcXFxcXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0yMC1cXHQgICAgIHNzL3BvbGljeWRiLm8gc3Mvc2VydmljZXMubyBzcy9jb25kaXRpb25hbC5vIHNzL21scy5vIHNzL2NvbnRleHQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMjozOC40MzIzODAzNDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyMzI1MTIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIE1hcCBFbGVtZW50IEZyZWVpbmcgQ2hhbmdlKipcblxuT2theSwgc28gdGhlIG9ubHkgY29uZmlnIHJlcXVpcmVtZW50IGhlcmUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBMZXQncyBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuXG5cblJpZ2h0LCB0aGUga2V5IGNoYW5nZSBpcyB3aXRoaW4gdGhlIGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgQlBGX01BUF9UWVBFX1JIQVNIYC4gV2UncmUgZGVhbGluZyB3aXRoIGhvdyBCUEYgbWFwIGVsZW1lbnRzIGFyZSBmcmVlZCwgYW5kIHRoaXMgaXMgYSAqZnVuY3Rpb25hbCogc2hpZnQuIEl0IGxvb2tzIGxpa2Ugd2UgYXJlIGFkZHJlc3NpbmcgYW4gTk1JLXNhZmV0eSBpc3N1ZSByZWxhdGVkIHRvIGtwdHIgZGVzdHJ1Y3Rpb24uIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBhbmQgZnV6emluZyBzZWVtcyBsaWtlIGEgZ29vZCBwbGFuLlxuXG5UaGUgbWFpbiBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXJlIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYW5kIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAuIEkgbmVlZCB0byBjb25maXJtIEkgaGF2ZSB0aGUgY29ycmVjdCBzeW1ib2xzIGZvciB0aGUgYEJQRl9NQVBfVFlQRV9SSEFTSGAgdHlwZS4gT2theSwgeWVzLCB0aG9zZSBhcmUgdGhlIG1hcCBvcGVyYXRpb25zIGZvciB0aGF0IHR5cGUuXG5cbkJ1dCwgSSBuZWVkIHRvIHBhdXNlIGZvciBhIG1vbWVudC4uLiB3aGF0J3MgdGhpcyBuZXcgZnVuY3Rpb24gY2FsbCwgYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2A/IElzIGl0IGEgbmV3IGZ1bmN0aW9uIG9yIGFuIGV4aXN0aW5nIG9uZSBiZWluZyB1c2VkIGluIGEgbmV3IHdheT8gVGhhdCBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBhbmQgaXRzIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXhpc3RpbmcgQlBGIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMjo0NS4zNTU2MzM3NDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzM2MjM4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX29ial9jYW5jZWxfZmllbGRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MjcyNz12b2lkIGJwZl9vYmpfZnJlZV90YXNrX3dvcmsoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI3Mjg6dm9pZCBicGZfb2JqX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqb2JqKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI3Mjktdm9pZCBicGZfb2JqX2ZyZWVfZmllbGRzKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iaik7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MzkyPXN0YXRpYyBsb25nIGFycmF5X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQxNy1cXHRcXHRjb3B5X21hcF92YWx1ZShtYXAsIHZhbCwgdmFsdWUpO1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo0MTg6XFx0XFx0YnBmX29ial9jYW5jZWxfZmllbGRzKG1hcCwgdmFsKTtcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNDE5LVxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNDI1LVxcdFxcdFxcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsLCB2YWx1ZSk7XFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjQyNjpcXHRcXHRicGZfb2JqX2NhbmNlbF9maWVsZHMobWFwLCB2YWwpO1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00MjctXFx0fVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTQzMT1pbnQgYnBmX3BlcmNwdV9hcnJheV91cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NjUtXFx0XFx0Y29weV9tYXBfdmFsdWUobWFwLCBwdHIsIHZhbHVlKTtcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDY2OlxcdFxcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhtYXAsIHB0cik7XFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQ2Ny1cXHRcXHRnb3RvIHVubG9jaztcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NzItXFx0XFx0Y29weV9tYXBfdmFsdWUobWFwLCBwdHIsIHZhbCk7XFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjQ3MzpcXHRcXHRicGZfb2JqX2NhbmNlbF9maWVsZHMobWFwLCBwdHIpO1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NzQtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9ODQwPXN0YXRpYyB2b2lkIGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTg1MC1cXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjg1MTpcXHRcXHRcXHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtODUyLVxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04NTQtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6ODU1OlxcdFxcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBtYXBfdmFsdWUpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTg1Ni1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMDE1PXN0YXRpYyB2b2lkIHBjcHVfY29weV92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgX19wZXJjcHUgKnBwdHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDIzLVxcdFxcdGNvcHlfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIHB0ciwgdmFsdWUpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjEwMjQ6XFx0XFx0YnBmX29ial9jYW5jZWxfZmllbGRzKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIHB0cik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTAyNS1cXHR9IGVsc2Uge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTAzMy1cXHRcXHRcXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBwdHIsIHZhbHVlKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMDM0OlxcdFxcdFxcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBwdHIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEwMzUtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTA0MS1cXHRcXHRcXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBwdHIsIHZhbCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTA0MjpcXHRcXHRcXHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgcHRyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDQzLVxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5Mjk9c3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZvaWQgKmNvcHksXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTYwLVxcdCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NjE6XFx0YnBmX29ial9jYW5jZWxfZmllbGRzKFxcdTAwMjZyaHRhYi1cXHUwMDNlbWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTYyLVxcdGJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoXFx1MDAyNnJodGFiLVxcdTAwM2VtYSwgZWxlbSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTk5PXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyMy1cXHQgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDI0OlxcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcXHUwMDI2cmh0YWItXFx1MDAzZW1hcCwgb2xkX3ZhbCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyNS1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgwMj12b2lkIGJwZl9vYmpfZnJlZV90YXNrX3dvcmsoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtODA4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjgwOTp2b2lkIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtODEwLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2h0YWJfdXBkYXRlLmM9MTU9c3RhdGljIHZvaWQgdGVzdF9yZWVudGVyX3VwZGF0ZSh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaHRhYl91cGRhdGUuYy0yNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9odGFiX3VwZGF0ZS5jOjI2OlxcdGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC1cXHUwMDNlcHJvZ3MuYnBmX29ial9jYW5jZWxfZmllbGRzLCB0cnVlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9odGFiX3VwZGF0ZS5jLTI3LVxcdGVyciA9IGh0YWJfdXBkYXRlX19sb2FkKHNrZWwpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaHRhYl91cGRhdGUuYy01Mi1cXHQgKiB0aGUgcmVlbnRyYW5jeSBvZiBicGZfbWFwX3VwZGF0ZV9lbGVtKCkuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaHRhYl91cGRhdGUuYzo1MzpcXHQgKiBjaGVja19hbmRfY2FuY2VsX2ZpZWxkcygpIGNhbGxzIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcygpIG9uIHRoZSBvbGRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9odGFiX3VwZGF0ZS5jLTU0LVxcdCAqIHZhbHVlLCB3aGljaCBpcyB3aGVyZSBmZW50cnkgcHJvZ3JhbSBydW5zIGFuZCBwZXJmb3JtcyBhIG5lc3RlZFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2h0YWJfdXBkYXRlLmM9MjM9aW50IHVwZGF0ZV9lcnIgPSAwO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9odGFiX3VwZGF0ZS5jLTI0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9odGFiX3VwZGF0ZS5jOjI1OlNFQyhcXFwiP2ZlbnRyeS9icGZfb2JqX2NhbmNlbF9maWVsZHNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9odGFiX3VwZGF0ZS5jOjI2OmludCBicGZfb2JqX2NhbmNlbF9maWVsZHModm9pZCAqY3R4KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9odGFiX3VwZGF0ZS5jLTI3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzI6NDYuNzg5MjY0MTQyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MTQ1MTIxMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFJIQVNIIE1hcCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIHRoaW5ncyB1cCBhIGJpdCB3aXRoIHRoZSBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzLCB1c2luZyBgYnBmX29ial9jYW5jZWxfZmllbGRzYCBpbnN0ZWFkIG9mIHRoZSBvbGRlciBgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgYmVoYXZpb3JhbCBzaGlmdC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5UaGUgcmVzdWx0cyBwb2ludCB0byB0aGlzIGJlaW5nIHdvcnRoIGZ1enppbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHRoZXNlIGtpbmRzIG9mIGNoYW5nZXMgdG8gdW5jb3ZlciBlZGdlIGNhc2VzLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCBhbmQgYF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQlBGX1NZU0NBTExgLlxuXG5UaGUgcmVhc29uaW5nIG5haWxzIGl0IGRvd246IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyBrcHRycyBhbmQgb3RoZXIgc3BlY2lhbCBmaWVsZHMgYXJlIG1hbmFnZWQgZHVyaW5nIHVwZGF0ZXMgYW5kIGRlbGV0ZXMgaW4gYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBmaXhpbmcgYW4gTk1JLXNhZmV0eSBpc3N1ZSBieSBkZWxheWluZyBrcHRyIGRlc3RydWN0aW9uLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgd2hpY2ggYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZy5cblxuTm93LCB0aGF0IGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgaXMgb24gdGhlIGxpc3QuLi4gaXQncyBzdGF0aWMsIHJpZ2h0PyBZZXMsIGl0IGlzLiBCdXQsIEkgcmVtZW1iZXIgdGhhdCBpdCBpcyBhbHNvIGFzc2lnbmVkIHRvIGByaHRhYl9tYXBfb3BzLm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGA/IEJldHRlciBkb3VibGUtY2hlY2sgdGhhdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDI5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMyOjU2LjYwMzc3ODcwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNzE5MDE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjI5PXN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIzOC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjM5OnN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjQwLVxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMzNzU9c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM3Ny17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM3ODpcXHRyZXR1cm4gX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzNzktfVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzM4MT1zdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzODMte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzODQ6XFx0cmV0dXJuIF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzODUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMjo1OC4wMzA5NzM3NjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5MzU1NTAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaGlua2luZyBvbiBCUEYgTWFwIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlc2UgQlBGIG1hcCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgYHJodGFiX21hcF9sb29rdXBfYmF0Y2hgIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gSSdtIGdvaW5nIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCByYXRoZXIgdGhhbiB0aGF0IGludGVybmFsIHZlcnNpb24uXG5cbk5vdywgSSd2ZSBnb3QgYSBmZXcga2V5IHN5bWJvbHMgSSB3YW50IHRvIGtlZXAgaW4gbWluZCBhcyBJIHdvcmsgdGhyb3VnaCB0aGlzOiBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGFuZCwgb2YgY291cnNlLCB0aGF0IGNydWNpYWwgYmF0Y2ggb3BlcmF0aW9uLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC5cblxuQW5kIHRoZW4sIGp1c3QgYSByZW1pbmRlciBvbiB0aGUgY29uZmlnLCBtYWtlIHN1cmUgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGluY2x1ZGVkLlxuXG5SaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIG5leHQgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDY2LCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMzowMy4yMjQ1MzEyNDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzg0NzE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyaHRhYl9tYXBfZGVsZXRlX2VsZW1cIixcbiAgICBcInJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1cIixcbiAgICBcInJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGtwdHJzIGFuZCBvdGhlciBzcGVjaWFsIGZpZWxkcyBhcmUgaGFuZGxlZCBkdXJpbmcgdXBkYXRlIGFuZCBkZWxldGUgb3BlcmF0aW9ucyBvbiBCUEZfTUFQX1RZUEVfUkhBU0ggbWFwcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBOTUktc2FmZXR5IGlzc3VlIGJ5IGRlZmVycmluZyBrcHRyIGRlc3RydWN0aW9uLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcInJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBrcHRycyBhbmQgb3RoZXIgc3BlY2lhbCBmaWVsZHMgYXJlIGhhbmRsZWQgZHVyaW5nIHVwZGF0ZSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMgb24gQlBGX01BUF9UWVBFX1JIQVNIIG1hcHMsIHNwZWNpZmljYWxseSBmaXhpbmcgYW4gTk1JLXNhZmV0eSBpc3N1ZSBieSBkZWZlcnJpbmcga3B0ciBkZXN0cnVjdGlvbi4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzM6MDMuMjk4Mzg2MjE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg4NzY5MDA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMzOjAzLjI5ODgwOTE5N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjg4NzI2MjcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBCUEYgbWFwIGVsZW1lbnQgZmllbGRzIChzdWNoIGFzIGtwdHJzLCB0aW1lcnMsIHdvcmtxdWV1ZXMpIGluIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCB0byBhdm9pZCBOTUktdW5zYWZlIG9wZXJhdGlvbnMuIEJ5IHJlcGxhY2luZyBgYnBmX29ial9mcmVlX2ZpZWxkc2Agd2l0aCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCwgaXQgZGVmZXJzIGtwdHIgZGVzdHJ1Y3Rpb24gdG8gYSBzYWZlciBjb250ZXh0IChSQ1UgY2FsbGJhY2spLiBUaGlzIGFkZHJlc3NlcyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGludmFsaWQgY29udGV4dCBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIEFueSByZXN1bHRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlKSB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzNjZDYxYmUxZTA4ZDBiNjA0YzIxYjg2Mzk3MGQ5YTMxNzZiZTFkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDEzOjMxOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uYTM5NTkyOGEzY2YyMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTI4NjQsMTYgKzI4NjQsNiBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdHJldHVybiBodGFiX21hcF9hbGxvY19jaGVjayhhdHRyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLFxuLVx0XHRcdFx0XHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSlcbi17XG4tXHRpZiAoSVNfRVJSX09SX05VTEwocmh0YWItXHUwMDNlbWFwLnJlY29yZCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGJwZl9vYmpfZnJlZV9maWVsZHMocmh0YWItXHUwMDNlbWFwLnJlY29yZCxcbi1cdFx0XHQgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXG4ge1xuIFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYyA9IGN0eDtcbkBAIC0yOTYzLDggKzI5NTMsMTIgQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZcbiBcdFx0cmh0YWJfcmVhZF9lbGVtX3ZhbHVlKFx1MDAyNnJodGFiLVx1MDAzZW1hcCwgY29weSwgZWxlbSwgZmxhZ3MpO1xuIFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCBjb3B5KTtcbiBcdH1cbi1cdC8qIFJlbGVhc2UgaW50ZXJuYWwgc3RydWN0czoga3B0ciwgYnBmX3RpbWVyLCB0YXNrX3dvcmssIHdxICovXG4tXHRyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pO1xuK1x0LypcbitcdCAqIENhbmNlbCB0aW1lciwgd29ya3F1ZXVlLCBhbmQgdGFza193b3JrIGZpZWxkcyBiZWZvcmUgZGVmZXJyaW5nIHRoZVxuK1x0ICogZWxlbWVudCBmcmVlLiBSZWZlcmVuY2VkIGtwdHIgZGVzdHJ1Y3Rpb24gaXMgbm90IE5NSS1zYWZlLCBzbyBsZWF2ZVxuK1x0ICogaXQgZm9yIHJodGFiX21lbV9kdG9yKCkgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2RzLlxuK1x0ICovXG4rXHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuIFx0YnBmX21lbV9jYWNoZV9mcmVlX3JjdShcdTAwMjZyaHRhYi1cdTAwM2VtYSwgZWxlbSk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzAyMiwxMCArMzAxNiwxMiBAQCBzdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbFxuIFx0ICogQlBGX0ZfTE9DSywgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzLlxuIFx0ICpcbiBcdCAqIGNvcHlfbWFwX3ZhbHVlKCkgc2tpcHMgc3BlY2lhbC1maWVsZCBvZmZzZXRzLCBzbyBvbGQgdGltZXJzL1xuLVx0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGVtIGFmdGVyIHRoZSBjb3B5XG4tXHQgKiB0byBtYXRjaCBhcnJheW1hcCdzIHVwZGF0ZSBzZW1hbnRpY3MuXG4rXHQgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gVGhpcyBwYXRoIG1heSBydW4gaW4gTk1JIGNvbnRleHQsXG4rXHQgKiBzbyBvbmx5IGNhbmNlbCB0aW1lci93b3JrcXVldWUvdGFza193b3JrIGhlcmUuIEtlZXAga3B0ciBmaWVsZHNcbitcdCAqIGF0dGFjaGVkIHRvIHRoZSB2YWx1ZSwgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzOyByZWZlcmVuY2VkXG4rXHQgKiBrcHRycyBhcmUgZGVzdHJveWVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgZXZlbnR1YWxseSBmcmVlZC5cbiBcdCAqL1xuLVx0cmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTtcbitcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIG9sZF92YWwpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jXG5pbmRleCAxN2U3MDdkZGRkYThkLi45ZmRkZjAzMzg3YmI4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY1xuQEAgLTk4LDYgKzk4LDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbWFwX2twdHJfc3VjY2Vzcyhib29sIHRlc3RfcnVuKVxuIFx0QVNTRVJUX09LKHJldCwgXCJ0ZXN0X21hcF9rcHRyX3JlZjMgcmVmY291bnRcIik7XG4gXHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwidGVzdF9tYXBfa3B0cl9yZWYzIHJldHZhbFwiKTtcbiBcbitcdHJldCA9IGJwZl9tYXBfX2RlbGV0ZV9lbGVtKHNrZWwtXHUwMDNlbWFwcy5yaGFzaF9tYXAsIFx1MDAyNmtleSwgc2l6ZW9mKGtleSksIDApO1xuK1x0QVNTRVJUX09LKHJldCwgXCJyaGFzaF9tYXAgZGVsZXRlXCIpO1xuK1x0cmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X21hcF9rcHRyX3JlZjMpLCBcdTAwMjZvcHRzKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwidGVzdF9tYXBfa3B0cl9yZWYzIHJlZmNvdW50XCIpO1xuK1x0QVNTRVJUX09LKG9wdHMucmV0dmFsLCBcInRlc3RfbWFwX2twdHJfcmVmMyByZXR2YWxcIik7XG4rXG4gXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnRlc3RfbHNfbWFwX2twdHJfcmVmX2RlbCksIFx1MDAyNmxvcHRzKTtcbiBcdEFTU0VSVF9PSyhyZXQsIFwidGVzdF9sc19tYXBfa3B0cl9yZWZfZGVsIGRlbGV0ZVwiKTtcbiBcdHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VyZWYtLTtcbkBAIC0xNDcsNiArMTUzLDcgQEAgZW51bSBtYXBfdXBkYXRlX2twdHJfY2FzZSB7XG4gXHRNQVBfVVBEQVRFX0tQVFJfQVJSQVksXG4gXHRNQVBfVVBEQVRFX0tQVFJfSEFTSCxcbiBcdE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQyxcbitcdE1BUF9VUERBVEVfS1BUUl9SSEFTSCxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCxcbkBAIC0xNTksNiArMTY2LDggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ3JhbSAqbWFwX3VwZGF0ZV9rcHRyX3Byb2coc3RydWN0IG1hcF9rcHRyICpza2VsLFxuIFx0XHRyZXR1cm4gc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyO1xuIFx0Y2FzZSBNQVBfVVBEQVRFX0tQVFJfSEFTSF9NQUxMT0M6XG4gXHRcdHJldHVybiBza2VsLVx1MDAzZXByb2dzLnRlc3RfaGFzaF9tYWxsb2NfbWFwX3VwZGF0ZV9rcHRyO1xuK1x0Y2FzZSBNQVBfVVBEQVRFX0tQVFJfUkhBU0g6XG4rXHRcdHJldHVybiBza2VsLVx1MDAzZXByb2dzLnRlc3Rfcmhhc2hfbWFwX3VwZGF0ZV9rcHRyO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtMjA0LDYgKzIxMyw4IEBAIHZvaWQgc2VyaWFsX3Rlc3RfbWFwX2twdHIodm9pZClcbiBcdFx0dGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX0hBU0gpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1cGRhdGVfaGFzaF9tYWxsb2NfbWFwX2twdHJcIikpXG4gXHRcdHRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQyk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInVwZGF0ZV9yaGFzaF9tYXBfa3B0clwiKSlcbitcdFx0dGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX1JIQVNIKTtcbiBcbiBcdHNrZWwgPSByY3VfdGFza3NfdHJhY2VfZ3BfX29wZW5fYW5kX2xvYWQoKTtcbiBcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInJjdV90YXNrc190cmFjZV9ncF9fb3Blbl9hbmRfbG9hZFwiKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXG5pbmRleCAwZDg3Yzk3ZGFjOTkxLi40NDIxMGRkM2MwZWM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXG5AQCAtNTcsNiArNTcsMTQgQEAgc3RydWN0IGhhc2hfbWFsbG9jX21hcCB7XG4gXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4gfSBoYXNoX21hbGxvY19tYXAgU0VDKFwiLm1hcHNcIik7XG4gXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuK30gcmhhc2hfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuIHN0cnVjdCBwY3B1X2hhc2hfbWFsbG9jX21hcCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIKTtcbiBcdF9fdHlwZShrZXksIGludCk7XG5AQCAtNDIxLDYgKzQyOSw3IEBAIGludCB0ZXN0X21hcF9rcHRyX3JlZjEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZoYXNoX21hcCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZoYXNoX21hbGxvY19tYXAsIFx1MDAyNmtleSwgXHUwMDI2dmFsLCAwKTtcbiBcdGJwZl9tYXBfdXBkYXRlX2VsZW0oXHUwMDI2bHJ1X2hhc2hfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4rXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnJoYXNoX21hcCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuIFxuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZwY3B1X2hhc2hfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4gXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnBjcHVfaGFzaF9tYWxsb2NfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG5AQCAtNDMwLDYgKzQzOSw3IEBAIGludCB0ZXN0X21hcF9rcHRyX3JlZjEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuIFx0VEVTVChoYXNoX21hcCk7XG4gXHRURVNUKGhhc2hfbWFsbG9jX21hcCk7XG4gXHRURVNUKGxydV9oYXNoX21hcCk7XG4rXHRURVNUKHJoYXNoX21hcCk7XG4gXG4gXHRURVNUX1BDUFUocGNwdV9hcnJheV9tYXApO1xuIFx0VEVTVF9QQ1BVKHBjcHVfaGFzaF9tYXApO1xuQEAgLTQ2OCw2ICs0NzgsNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYyKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcbiBcdFRFU1QoaGFzaF9tYXApO1xuIFx0VEVTVChoYXNoX21hbGxvY19tYXApO1xuIFx0VEVTVChscnVfaGFzaF9tYXApO1xuK1x0VEVTVChyaGFzaF9tYXApO1xuIFxuIFx0VEVTVF9QQ1BVKHBjcHVfYXJyYXlfbWFwKTtcbiBcdFRFU1RfUENQVShwY3B1X2hhc2hfbWFwKTtcbkBAIC01OTksNiArNjEwLDcgQEAgaW50IG5hbWUodm9pZCAqY3R4KVx0XHRcdFx0XHRcdFxcXG4gXG4gREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hcClcbiBERUZJTkVfSEFTSF9VUERBVEVfS1BUUl9URVNUKHRlc3RfaGFzaF9tYWxsb2NfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hbGxvY19tYXApXG4rREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X3JoYXNoX21hcF91cGRhdGVfa3B0ciwgcmhhc2hfbWFwKVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBpbnQgdGVzdF9sc19tYXBfa3B0cl9yZWYxKHZvaWQgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMzOjAzLjI5ODgxMDAzN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg4NzIzMjQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBIYXNodGFibGUgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgc29tZSBzZWxmdGVzdHMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgaGFzaHRhYmxlIGVsZW1lbnRzIGFyZSBjbGVhbmVkIHVwLCBzcGVjaWZpY2FsbHkgd2l0aGluIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYC4gSXQgbG9va3MgbGlrZSBgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzYCBpcyBiZWluZyByaXBwZWQgb3V0IGNvbXBsZXRlbHkuIFRoZSBpbXBvcnRhbnQgcGFydCBpcyB0aGF0IHRoZSBwYXRjaCByZXBsYWNlcyBjYWxscyB0byBgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzYCBpbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2Agd2l0aCBjYWxscyB0byBgYnBmX29ial9jYW5jZWxfZmllbGRzYC5cblxuTGV0J3MgZHJpbGwgZG93bjogYHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkc2Agd2FzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGBicGZfb2JqX2ZyZWVfZmllbGRzYC4gVGhlIGNvbW1lbnRzIG1ha2UgaXQgY2xlYXIgdGhhdCB0aGUgcHJvYmxlbSBpcyBjYWxsaW5nIGBicGZfb2JqX2ZyZWVfZmllbGRzYCAod2hpY2ggY2FuIGZyZWUga3B0cnMpIGluIGFuIE5NSSBjb250ZXh0IGlzIG5vdCBzYWZlLiBUaGUgZml4IGlzIHRvIHVzZSBgYnBmX29ial9jYW5jZWxfZmllbGRzYCBpbnN0ZWFkLiBUaGlzIGZ1bmN0aW9uIG9ubHkgY2FuY2VscyB0aW1lcnMsIHdvcmtxdWV1ZXMsIGFuZCB0YXNrX3dvcmsgZmllbGRzLCBsZWF2aW5nIHRoZSBrcHRyIGRlc3RydWN0aW9uIHRvIGJlIGhhbmRsZWQgbGF0ZXIsIHdpdGhpbiBgcmh0YWJfbWVtX2R0b3IoKWAsIGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kcy4gVGhpcyBpcyBhIGNsYXNzaWMgb2JqZWN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IGlzc3VlLCBwcmV2ZW50aW5nIE5NSS11bnNhZmUgb3BlcmF0aW9ucy5cblxuVGhlIGtleSBxdWVzdGlvbjogRG9lcyB0aGlzIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGlzIGlzbid0IGFib3V0IEtNU0FOIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBvYmplY3QgbGlmZWN5Y2xlLCBhbmQgZW5zdXJpbmcgc2FmZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUga2VybmVsLCBlc3BlY2lhbGx5IGluIE5NSSBjb250ZXh0cy4gS0FTQU4vTE9DS0RFUCBhcmUgdGhlIHJlbGV2YW50IHRvb2xzIGZvciBjYXRjaGluZyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBvciBwb3RlbnRpYWwgZGVhZGxvY2tzIGludHJvZHVjZWQgYnkgY2hhbmdlcyBpbiBtZW1vcnkgbWFuYWdlbWVudC4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBub3Qgd2hhdCdzIGhhcHBlbmluZyBoZXJlLiBUaGUga3B0cnMgYXJlIHNpbXBseSBiZWluZyBmcmVlZCBhdCBhIGxhdGVyIHRpbWUuXG5cbkEgcXVpY2sgcmVjYXA6IGBicGZfb2JqX2NhbmNlbF9maWVsZHNgIGFuZCBgYnBmX29ial9mcmVlX2ZpZWxkc2AgYXJlIHRoZSBrZXlzLiBUaGUgZm9ybWVyIGNhbmNlbHMgdGhpbmdzIGxpa2UgdGltZXJzLCB3aGlsZSB0aGUgbGF0dGVyIGlzIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBmcmVlaW5nIHJlc291cmNlcyBpbmNsdWRpbmcga3B0cnMuIFRoZSBrcHRycyBhcmUgYXR0YWNoZWQgdG8gdGhlIGVsZW1lbnQgdmFsdWUgYW5kIGFyZSBmcmVlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGFjdHVhbGx5IGZyZWVkLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIGxpZmVjeWNsZSBvZiBCUEYgbWFwIGVsZW1lbnQgZmllbGRzLCBzcGVjaWZpY2FsbHkgZGVmZXJyaW5nIGtwdHIgZGVzdHJ1Y3Rpb24gaW4gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgIHRvIGVuc3VyZSBOTUktc2FmZSBvcGVyYXRpb25zLiBUaGlzIHBhdGNoIGlzIHJlcGxhY2luZyBgYnBmX29ial9mcmVlX2ZpZWxkc2Agd2l0aCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCB0byBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGludmFsaWQgY29udGV4dHMgZm9yIGZyZWVpbmcgbWVtb3J5LiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBuZXcgYWxsb2NhdGlvbnMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG9iamVjdCBsaWZlY3ljbGVzLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbmNvcnJlY3QgY29uY3VycmVuY3kgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB3b3VsZCBiZSBmbGFnZ2VkIGJ5IG90aGVyIHRvb2xzIGxpa2UgS0FTQU4vTE9DS0RFUC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2MSwiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMzoxNi4xODYwNDYwMDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgQlBGIG1hcCBlbGVtZW50IGZpZWxkcyAoc3VjaCBhcyBrcHRycywgdGltZXJzLCB3b3JrcXVldWVzKSBpbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgdG8gYXZvaWQgTk1JLXVuc2FmZSBvcGVyYXRpb25zLiBCeSByZXBsYWNpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgIHdpdGggYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2AsIGl0IGRlZmVycyBrcHRyIGRlc3RydWN0aW9uIHRvIGEgc2FmZXIgY29udGV4dCAoUkNVIGNhbGxiYWNrKS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBpbnZhbGlkIGNvbnRleHQgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgQlBGIG1hcCBlbGVtZW50IGZpZWxkcyAoc3VjaCBhcyBrcHRycywgdGltZXJzLCB3b3JrcXVldWVzKSBpbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgdG8gYXZvaWQgTk1JLXVuc2FmZSBvcGVyYXRpb25zLiBCeSByZXBsYWNpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgIHdpdGggYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2AsIGl0IGRlZmVycyBrcHRyIGRlc3RydWN0aW9uIHRvIGEgc2FmZXIgY29udGV4dCAoUkNVIGNhbGxiYWNrKS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBpbnZhbGlkIGNvbnRleHQgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow6v762[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 12:50:32 +0000 UTC FinishedAt: 2026-08-24 13:33:18 +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": "5e289c5a4a526e870efac0ca658635c47138593a", "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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "d6efc1ce-a42b-48e5-b04b-1891043d5a75" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "rhtab_map_delete_elem", "rhtab_map_update_elem", "rhtab_map_lookup_and_delete_elem", "rhtab_map_lookup_and_delete_batch" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmh0YWJfbWFwX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O3JodGFiX21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG9mIEJQRiBtYXAgZWxlbWVudCBmaWVsZHMgKHN1Y2ggYXMga3B0cnMsIHRpbWVycywgd29ya3F1ZXVlcykgaW4gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgIHRvIGF2b2lkIE5NSS11bnNhZmUgb3BlcmF0aW9ucy4gQnkgcmVwbGFjaW5nIGBicGZfb2JqX2ZyZWVfZmllbGRzYCB3aXRoIGBicGZfb2JqX2NhbmNlbF9maWVsZHNgLCBpdCBkZWZlcnMga3B0ciBkZXN0cnVjdGlvbiB0byBhIHNhZmVyIGNvbnRleHQgKFJDVSBjYWxsYmFjaykuIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgaW52YWxpZCBjb250ZXh0IGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gQW55IHJlc3VsdGluZyBtZW1vcnkgY29ycnVwdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUpIHdvdWxkIGJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cga3B0cnMgYW5kIG90aGVyIHNwZWNpYWwgZmllbGRzIGFyZSBoYW5kbGVkIGR1cmluZyB1cGRhdGUgYW5kIGRlbGV0ZSBvcGVyYXRpb25zIG9uIEJQRl9NQVBfVFlQRV9SSEFTSCBtYXBzLCBzcGVjaWZpY2FsbHkgZml4aW5nIGFuIE5NSS1zYWZldHkgaXNzdWUgYnkgZGVmZXJyaW5nIGtwdHIgZGVzdHJ1Y3Rpb24uIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzM2NkNjFiZTFlMDhkMGI2MDRjMjFiODYzOTcwZDlhMzE3NmJlMWQxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTM6MzE6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uYTM5NTkyOGEzY2YyMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTI4NjQsMTYgJiM0MzsyODY0LDYgQEAgc3RhdGljIGludCByaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG4gXHRyZXR1cm4gaHRhYl9tYXBfYWxsb2NfY2hlY2soYXR0cik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYixcbi1cdFx0XHRcdFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW0pXG4te1xuLVx0aWYgKElTX0VSUl9PUl9OVUxMKHJodGFiLVx1MDAzZW1hcC5yZWNvcmQpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRicGZfb2JqX2ZyZWVfZmllbGRzKHJodGFiLVx1MDAzZW1hcC5yZWNvcmQsXG4tXHRcdFx0ICAgIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHJodGFiX21lbV9kdG9yKHZvaWQgKm9iaiwgdm9pZCAqY3R4KVxuIHtcbiBcdHN0cnVjdCBodGFiX2J0Zl9yZWNvcmQgKmhyZWMgPSBjdHg7XG5AQCAtMjk2Myw4ICYjNDM7Mjk1MywxMiBAQCBzdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdlxuIFx0XHRyaHRhYl9yZWFkX2VsZW1fdmFsdWUoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCBjb3B5LCBlbGVtLCBmbGFncyk7XG4gXHRcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIGNvcHkpO1xuIFx0fVxuLVx0LyogUmVsZWFzZSBpbnRlcm5hbCBzdHJ1Y3RzOiBrcHRyLCBicGZfdGltZXIsIHRhc2tfd29yaywgd3EgKi9cbi1cdHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBDYW5jZWwgdGltZXIsIHdvcmtxdWV1ZSwgYW5kIHRhc2tfd29yayBmaWVsZHMgYmVmb3JlIGRlZmVycmluZyB0aGVcbiYjNDM7XHQgKiBlbGVtZW50IGZyZWUuIFJlZmVyZW5jZWQga3B0ciBkZXN0cnVjdGlvbiBpcyBub3QgTk1JLXNhZmUsIHNvIGxlYXZlXG4mIzQzO1x0ICogaXQgZm9yIHJodGFiX21lbV9kdG9yKCkgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2RzLlxuJiM0MztcdCAqL1xuJiM0MztcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4gXHRicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KFx1MDAyNnJodGFiLVx1MDAzZW1hLCBlbGVtKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zMDIyLDEwICYjNDM7MzAxNiwxMiBAQCBzdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbFxuIFx0ICogQlBGX0ZfTE9DSywgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzLlxuIFx0ICpcbiBcdCAqIGNvcHlfbWFwX3ZhbHVlKCkgc2tpcHMgc3BlY2lhbC1maWVsZCBvZmZzZXRzLCBzbyBvbGQgdGltZXJzL1xuLVx0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGVtIGFmdGVyIHRoZSBjb3B5XG4tXHQgKiB0byBtYXRjaCBhcnJheW1hcCYjMzk7cyB1cGRhdGUgc2VtYW50aWNzLlxuJiM0MztcdCAqIGtwdHJzL2V0Yy4gc3RpbGwgc2l0IGluIHRoZSBzbG90LiBUaGlzIHBhdGggbWF5IHJ1biBpbiBOTUkgY29udGV4dCxcbiYjNDM7XHQgKiBzbyBvbmx5IGNhbmNlbCB0aW1lci93b3JrcXVldWUvdGFza193b3JrIGhlcmUuIEtlZXAga3B0ciBmaWVsZHNcbiYjNDM7XHQgKiBhdHRhY2hlZCB0byB0aGUgdmFsdWUsIG1hdGNoaW5nIGFycmF5bWFwIHNlbWFudGljczsgcmVmZXJlbmNlZFxuJiM0MztcdCAqIGtwdHJzIGFyZSBkZXN0cm95ZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBldmVudHVhbGx5IGZyZWVkLlxuIFx0ICovXG4tXHRyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pO1xuJiM0MztcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIG9sZF92YWwpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jXG5pbmRleCAxN2U3MDdkZGRkYThkLi45ZmRkZjAzMzg3YmI4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY1xuQEAgLTk4LDYgJiM0Mzs5OCwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X21hcF9rcHRyX3N1Y2Nlc3MoYm9vbCB0ZXN0X3J1bilcbiBcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O3Rlc3RfbWFwX2twdHJfcmVmMyByZWZjb3VudFwmIzM0Oyk7XG4gXHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwmIzM0O3Rlc3RfbWFwX2twdHJfcmVmMyByZXR2YWxcJiMzNDspO1xuIFxuJiM0MztcdHJldCA9IGJwZl9tYXBfX2RlbGV0ZV9lbGVtKHNrZWwtXHUwMDNlbWFwcy5yaGFzaF9tYXAsIFx1MDAyNmtleSwgc2l6ZW9mKGtleSksIDApO1xuJiM0MztcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O3JoYXNoX21hcCBkZWxldGVcJiMzNDspO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9tYXBfa3B0cl9yZWYzKSwgXHUwMDI2b3B0cyk7XG4mIzQzO1x0QVNTRVJUX09LKHJldCwgXCYjMzQ7dGVzdF9tYXBfa3B0cl9yZWYzIHJlZmNvdW50XCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwmIzM0O3Rlc3RfbWFwX2twdHJfcmVmMyByZXR2YWxcJiMzNDspO1xuJiM0MztcbiBcdHJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9sc19tYXBfa3B0cl9yZWZfZGVsKSwgXHUwMDI2bG9wdHMpO1xuIFx0QVNTRVJUX09LKHJldCwgXCYjMzQ7dGVzdF9sc19tYXBfa3B0cl9yZWZfZGVsIGRlbGV0ZVwmIzM0Oyk7XG4gXHRza2VsLVx1MDAzZWRhdGEtXHUwMDNlcmVmLS07XG5AQCAtMTQ3LDYgJiM0MzsxNTMsNyBAQCBlbnVtIG1hcF91cGRhdGVfa3B0cl9jYXNlIHtcbiBcdE1BUF9VUERBVEVfS1BUUl9BUlJBWSxcbiBcdE1BUF9VUERBVEVfS1BUUl9IQVNILFxuIFx0TUFQX1VQREFURV9LUFRSX0hBU0hfTUFMTE9DLFxuJiM0MztcdE1BUF9VUERBVEVfS1BUUl9SSEFTSCxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCxcbkBAIC0xNTksNiAmIzQzOzE2Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCxcbiBcdFx0cmV0dXJuIHNrZWwtXHUwMDNlcHJvZ3MudGVzdF9oYXNoX21hcF91cGRhdGVfa3B0cjtcbiBcdGNhc2UgTUFQX1VQREFURV9LUFRSX0hBU0hfTUFMTE9DOlxuIFx0XHRyZXR1cm4gc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2hhc2hfbWFsbG9jX21hcF91cGRhdGVfa3B0cjtcbiYjNDM7XHRjYXNlIE1BUF9VUERBVEVfS1BUUl9SSEFTSDpcbiYjNDM7XHRcdHJldHVybiBza2VsLVx1MDAzZXByb2dzLnRlc3Rfcmhhc2hfbWFwX3VwZGF0ZV9rcHRyO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtMjA0LDYgJiM0MzsyMTMsOCBAQCB2b2lkIHNlcmlhbF90ZXN0X21hcF9rcHRyKHZvaWQpXG4gXHRcdHRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9IQVNIKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3VwZGF0ZV9oYXNoX21hbGxvY19tYXBfa3B0clwmIzM0OykpXG4gXHRcdHRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQyk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dXBkYXRlX3JoYXNoX21hcF9rcHRyXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9SSEFTSCk7XG4gXG4gXHRza2VsID0gcmN1X3Rhc2tzX3RyYWNlX2dwX19vcGVuX2FuZF9sb2FkKCk7XG4gXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7cmN1X3Rhc2tzX3RyYWNlX2dwX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXG5pbmRleCAwZDg3Yzk3ZGFjOTkxLi40NDIxMGRkM2MwZWM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXG5AQCAtNTcsNiAmIzQzOzU3LDE0IEBAIHN0cnVjdCBoYXNoX21hbGxvY19tYXAge1xuIFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuIH0gaGFzaF9tYWxsb2NfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4gXG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWUpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuJiM0Mzt9IHJoYXNoX21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiBzdHJ1Y3QgcGNwdV9oYXNoX21hbGxvY19tYXAge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCk7XG4gXHRfX3R5cGUoa2V5LCBpbnQpO1xuQEAgLTQyMSw2ICYjNDM7NDI5LDcgQEAgaW50IHRlc3RfbWFwX2twdHJfcmVmMShzdHJ1Y3QgX19za19idWZmICpjdHgpXG4gXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNmhhc2hfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4gXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNmhhc2hfbWFsbG9jX21hcCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZscnVfaGFzaF9tYXAsIFx1MDAyNmtleSwgXHUwMDI2dmFsLCAwKTtcbiYjNDM7XHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnJoYXNoX21hcCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuIFxuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZwY3B1X2hhc2hfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4gXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnBjcHVfaGFzaF9tYWxsb2NfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG5AQCAtNDMwLDYgJiM0Mzs0MzksNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYxKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcbiBcdFRFU1QoaGFzaF9tYXApO1xuIFx0VEVTVChoYXNoX21hbGxvY19tYXApO1xuIFx0VEVTVChscnVfaGFzaF9tYXApO1xuJiM0MztcdFRFU1Qocmhhc2hfbWFwKTtcbiBcbiBcdFRFU1RfUENQVShwY3B1X2FycmF5X21hcCk7XG4gXHRURVNUX1BDUFUocGNwdV9oYXNoX21hcCk7XG5AQCAtNDY4LDYgJiM0Mzs0NzgsNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYyKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcbiBcdFRFU1QoaGFzaF9tYXApO1xuIFx0VEVTVChoYXNoX21hbGxvY19tYXApO1xuIFx0VEVTVChscnVfaGFzaF9tYXApO1xuJiM0MztcdFRFU1Qocmhhc2hfbWFwKTtcbiBcbiBcdFRFU1RfUENQVShwY3B1X2FycmF5X21hcCk7XG4gXHRURVNUX1BDUFUocGNwdV9oYXNoX21hcCk7XG5AQCAtNTk5LDYgJiM0Mzs2MTAsNyBAQCBpbnQgbmFtZSh2b2lkICpjdHgpXHRcdFx0XHRcdFx0XFxcbiBcbiBERUZJTkVfSEFTSF9VUERBVEVfS1BUUl9URVNUKHRlc3RfaGFzaF9tYXBfdXBkYXRlX2twdHIsIGhhc2hfbWFwKVxuIERFRklORV9IQVNIX1VQREFURV9LUFRSX1RFU1QodGVzdF9oYXNoX21hbGxvY19tYXBfdXBkYXRlX2twdHIsIGhhc2hfbWFsbG9jX21hcClcbiYjNDM7REVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X3JoYXNoX21hcF91cGRhdGVfa3B0ciwgcmhhc2hfbWFwKVxuIFxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIGludCB0ZXN0X2xzX21hcF9rcHRyX3JlZjEodm9pZCAqY3R4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IGtwdHJzIGFuZCBvdGhlciBzcGVjaWFsIGZpZWxkcyBhcmUgaGFuZGxlZCBkdXJpbmcgdXBkYXRlIGFuZCBkZWxldGUgb3BlcmF0aW9ucyBvbiBCUEZfTUFQX1RZUEVfUkhBU0ggbWFwcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBOTUktc2FmZXR5IGlzc3VlIGJ5IGRlZmVycmluZyBrcHRyIGRlc3RydWN0aW9uLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzNjZDYxYmUxZTA4ZDBiNjA0YzIxYjg2Mzk3MGQ5YTMxNzZiZTFkMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDEzOjMxOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCBkNDBjYjVkZDQ0NmNhLi5hMzk1OTI4YTNjZjIwIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMjg2NCwxNiAmIzQzOzI4NjQsNiBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cikKIAlyZXR1cm4gaHRhYl9tYXBfYWxsb2NfY2hlY2soYXR0cik7CiB9CiAKLXN0YXRpYyB2b2lkIHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwKLQkJCQkJc3RydWN0IHJodGFiX2VsZW0gKmVsZW0pCi17Ci0JaWYgKElTX0VSUl9PUl9OVUxMKHJodGFiLSZndDttYXAucmVjb3JkKSkKLQkJcmV0dXJuOwotCi0JYnBmX29ial9mcmVlX2ZpZWxkcyhyaHRhYi0mZ3Q7bWFwLnJlY29yZCwKLQkJCSAgICByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLSZndDttYXAua2V5X3NpemUpKTsKLX0KLQogc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpCiB7CiAJc3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYyA9IGN0eDsKQEAgLTI5NjMsOCAmIzQzOzI5NTMsMTIgQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHYKIAkJcmh0YWJfcmVhZF9lbGVtX3ZhbHVlKCZhbXA7cmh0YWItJmd0O21hcCwgY29weSwgZWxlbSwgZmxhZ3MpOwogCQljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoJmFtcDtyaHRhYi0mZ3Q7bWFwLCBjb3B5KTsKIAl9Ci0JLyogUmVsZWFzZSBpbnRlcm5hbCBzdHJ1Y3RzOiBrcHRyLCBicGZfdGltZXIsIHRhc2tfd29yaywgd3EgKi8KLQlyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pOwomIzQzOwkvKgomIzQzOwkgKiBDYW5jZWwgdGltZXIsIHdvcmtxdWV1ZSwgYW5kIHRhc2tfd29yayBmaWVsZHMgYmVmb3JlIGRlZmVycmluZyB0aGUKJiM0MzsJICogZWxlbWVudCBmcmVlLiBSZWZlcmVuY2VkIGtwdHIgZGVzdHJ1Y3Rpb24gaXMgbm90IE5NSS1zYWZlLCBzbyBsZWF2ZQomIzQzOwkgKiBpdCBmb3Igcmh0YWJfbWVtX2R0b3IoKSBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZHMuCiYjNDM7CSAqLwomIzQzOwlicGZfb2JqX2NhbmNlbF9maWVsZHMoJmFtcDtyaHRhYi0mZ3Q7bWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLSZndDttYXAua2V5X3NpemUpKTsKIAlicGZfbWVtX2NhY2hlX2ZyZWVfcmN1KCZhbXA7cmh0YWItJmd0O21hLCBlbGVtKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMwMjIsMTAgJiM0MzszMDE2LDEyIEBAIHN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsCiAJICogQlBGX0ZfTE9DSywgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzLgogCSAqCiAJICogY29weV9tYXBfdmFsdWUoKSBza2lwcyBzcGVjaWFsLWZpZWxkIG9mZnNldHMsIHNvIG9sZCB0aW1lcnMvCi0JICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGVtIGFmdGVyIHRoZSBjb3B5Ci0JICogdG8gbWF0Y2ggYXJyYXltYXAmIzM5O3MgdXBkYXRlIHNlbWFudGljcy4KJiM0MzsJICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIFRoaXMgcGF0aCBtYXkgcnVuIGluIE5NSSBjb250ZXh0LAomIzQzOwkgKiBzbyBvbmx5IGNhbmNlbCB0aW1lci93b3JrcXVldWUvdGFza193b3JrIGhlcmUuIEtlZXAga3B0ciBmaWVsZHMKJiM0MzsJICogYXR0YWNoZWQgdG8gdGhlIHZhbHVlLCBtYXRjaGluZyBhcnJheW1hcCBzZW1hbnRpY3M7IHJlZmVyZW5jZWQKJiM0MzsJICoga3B0cnMgYXJlIGRlc3Ryb3llZCB3aGVuIHRoZSBlbGVtZW50IGlzIGV2ZW50dWFsbHkgZnJlZWQuCiAJICovCi0Jcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTsKJiM0MzsJYnBmX29ial9jYW5jZWxfZmllbGRzKCZhbXA7cmh0YWItJmd0O21hcCwgb2xkX3ZhbCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jCmluZGV4IDE3ZTcwN2RkZGRhOGQuLjlmZGRmMDMzODdiYjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuYwpAQCAtOTgsNiAmIzQzOzk4LDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbWFwX2twdHJfc3VjY2Vzcyhib29sIHRlc3RfcnVuKQogCUFTU0VSVF9PSyhyZXQsICYjMzQ7dGVzdF9tYXBfa3B0cl9yZWYzIHJlZmNvdW50JiMzNDspOwogCUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgJiMzNDt0ZXN0X21hcF9rcHRyX3JlZjMgcmV0dmFsJiMzNDspOwogCiYjNDM7CXJldCA9IGJwZl9tYXBfX2RlbGV0ZV9lbGVtKHNrZWwtJmd0O21hcHMucmhhc2hfbWFwLCAmYW1wO2tleSwgc2l6ZW9mKGtleSksIDApOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O3JoYXNoX21hcCBkZWxldGUmIzM0Oyk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnRlc3RfbWFwX2twdHJfcmVmMyksICZhbXA7b3B0cyk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7dGVzdF9tYXBfa3B0cl9yZWYzIHJlZmNvdW50JiMzNDspOwomIzQzOwlBU1NFUlRfT0sob3B0cy5yZXR2YWwsICYjMzQ7dGVzdF9tYXBfa3B0cl9yZWYzIHJldHZhbCYjMzQ7KTsKJiM0MzsKIAlyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy50ZXN0X2xzX21hcF9rcHRyX3JlZl9kZWwpLCAmYW1wO2xvcHRzKTsKIAlBU1NFUlRfT0socmV0LCAmIzM0O3Rlc3RfbHNfbWFwX2twdHJfcmVmX2RlbCBkZWxldGUmIzM0Oyk7CiAJc2tlbC0mZ3Q7ZGF0YS0mZ3Q7cmVmLS07CkBAIC0xNDcsNiAmIzQzOzE1Myw3IEBAIGVudW0gbWFwX3VwZGF0ZV9rcHRyX2Nhc2UgewogCU1BUF9VUERBVEVfS1BUUl9BUlJBWSwKIAlNQVBfVVBEQVRFX0tQVFJfSEFTSCwKIAlNQVBfVVBEQVRFX0tQVFJfSEFTSF9NQUxMT0MsCiYjNDM7CU1BUF9VUERBVEVfS1BUUl9SSEFTSCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCwKQEAgLTE1OSw2ICYjNDM7MTY2LDggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ3JhbSAqbWFwX3VwZGF0ZV9rcHRyX3Byb2coc3RydWN0IG1hcF9rcHRyICpza2VsLAogCQlyZXR1cm4gc2tlbC0mZ3Q7cHJvZ3MudGVzdF9oYXNoX21hcF91cGRhdGVfa3B0cjsKIAljYXNlIE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQzoKIAkJcmV0dXJuIHNrZWwtJmd0O3Byb2dzLnRlc3RfaGFzaF9tYWxsb2NfbWFwX3VwZGF0ZV9rcHRyOwomIzQzOwljYXNlIE1BUF9VUERBVEVfS1BUUl9SSEFTSDoKJiM0MzsJCXJldHVybiBza2VsLSZndDtwcm9ncy50ZXN0X3JoYXNoX21hcF91cGRhdGVfa3B0cjsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTIwNCw2ICYjNDM7MjEzLDggQEAgdm9pZCBzZXJpYWxfdGVzdF9tYXBfa3B0cih2b2lkKQogCQl0ZXN0X21hcF91cGRhdGVfa3B0cihNQVBfVVBEQVRFX0tQVFJfSEFTSCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt1cGRhdGVfaGFzaF9tYWxsb2NfbWFwX2twdHImIzM0OykpCiAJCXRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQyk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dXBkYXRlX3JoYXNoX21hcF9rcHRyJiMzNDspKQomIzQzOwkJdGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX1JIQVNIKTsKIAogCXNrZWwgPSByY3VfdGFza3NfdHJhY2VfZ3BfX29wZW5fYW5kX2xvYWQoKTsKIAlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtyY3VfdGFza3NfdHJhY2VfZ3BfX29wZW5fYW5kX2xvYWQmIzM0OykpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jCmluZGV4IDBkODdjOTdkYWM5OTEuLjQ0MjEwZGQzYzBlYzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jCkBAIC01Nyw2ICYjNDM7NTcsMTQgQEAgc3RydWN0IGhhc2hfbWFsbG9jX21hcCB7CiAJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpOwogfSBoYXNoX21hbGxvY19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1JIQVNIKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpOwomIzQzO30gcmhhc2hfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwogc3RydWN0IHBjcHVfaGFzaF9tYWxsb2NfbWFwIHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIKTsKIAlfX3R5cGUoa2V5LCBpbnQpOwpAQCAtNDIxLDYgJiM0Mzs0MjksNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYxKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eCkKIAlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7aGFzaF9tYXAsICZhbXA7a2V5LCAmYW1wO3ZhbCwgMCk7CiAJYnBmX21hcF91cGRhdGVfZWxlbSgmYW1wO2hhc2hfbWFsbG9jX21hcCwgJmFtcDtrZXksICZhbXA7dmFsLCAwKTsKIAlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7bHJ1X2hhc2hfbWFwLCAmYW1wO2tleSwgJmFtcDt2YWwsIDApOwomIzQzOwlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7cmhhc2hfbWFwLCAmYW1wO2tleSwgJmFtcDt2YWwsIDApOwogCiAJYnBmX21hcF91cGRhdGVfZWxlbSgmYW1wO3BjcHVfaGFzaF9tYXAsICZhbXA7a2V5LCAmYW1wO3ZhbCwgMCk7CiAJYnBmX21hcF91cGRhdGVfZWxlbSgmYW1wO3BjcHVfaGFzaF9tYWxsb2NfbWFwLCAmYW1wO2tleSwgJmFtcDt2YWwsIDApOwpAQCAtNDMwLDYgJiM0Mzs0MzksNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYxKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eCkKIAlURVNUKGhhc2hfbWFwKTsKIAlURVNUKGhhc2hfbWFsbG9jX21hcCk7CiAJVEVTVChscnVfaGFzaF9tYXApOwomIzQzOwlURVNUKHJoYXNoX21hcCk7CiAKIAlURVNUX1BDUFUocGNwdV9hcnJheV9tYXApOwogCVRFU1RfUENQVShwY3B1X2hhc2hfbWFwKTsKQEAgLTQ2OCw2ICYjNDM7NDc4LDcgQEAgaW50IHRlc3RfbWFwX2twdHJfcmVmMihzdHJ1Y3QgX19za19idWZmICpjdHgpCiAJVEVTVChoYXNoX21hcCk7CiAJVEVTVChoYXNoX21hbGxvY19tYXApOwogCVRFU1QobHJ1X2hhc2hfbWFwKTsKJiM0MzsJVEVTVChyaGFzaF9tYXApOwogCiAJVEVTVF9QQ1BVKHBjcHVfYXJyYXlfbWFwKTsKIAlURVNUX1BDUFUocGNwdV9oYXNoX21hcCk7CkBAIC01OTksNiAmIzQzOzYxMCw3IEBAIGludCBuYW1lKHZvaWQgKmN0eCkJCQkJCQlcCiAKIERFRklORV9IQVNIX1VQREFURV9LUFRSX1RFU1QodGVzdF9oYXNoX21hcF91cGRhdGVfa3B0ciwgaGFzaF9tYXApCiBERUZJTkVfSEFTSF9VUERBVEVfS1BUUl9URVNUKHRlc3RfaGFzaF9tYWxsb2NfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hbGxvY19tYXApCiYjNDM7REVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X3JoYXNoX21hcF91cGRhdGVfa3B0ciwgcmhhc2hfbWFwKQogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBpbnQgdGVzdF9sc19tYXBfa3B0cl9yZWYxKHZvaWQgKmN0eCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIEJQRiBIYXNodGFibGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AsIGFuZCBpdCBsb29rcyBsaWtlIGEgdGFyZ2V0ZWQgZml4IGZvciBob3cgd2UgaGFuZGxlIGtlcm5lbCBwb2ludGVycyAoYGtwdHJgKSB3aXRoaW4gQlBGIGhhc2h0YWJsZXMsIHNwZWNpZmljYWxseSBpbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AuIFRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuY2AgdGVzdHMgYXJlIGluY2x1ZGVkLCB3aGljaCBpcyBnb29kIHRvIHNlZSBmb3IgdmVyaWZpY2F0aW9uLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHJlcGxhY2luZyBgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzYCB3aXRoIGBicGZfb2JqX2NhbmNlbF9maWVsZHNgIGluIHRob3NlIHR3byBmdW5jdGlvbnMuIEZyb20gdGhlIGNvbW1lbnRzLCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIGFib3V0IE5NSSBzYWZldHkuIFRoZSBvbGQgY29kZSB3YXMgZGlyZWN0bHkgZnJlZWluZyBpbnRlcm5hbCBzdHJ1Y3RzIGxpa2UgYGtwdHJgLCBgYnBmX3RpbWVyYCwgYHRhc2tfd29ya2AsIGFuZCBgd3FgIGR1cmluZyB0aGUgZGVsZXRlIGFuZCB1cGRhdGUgb3BlcmF0aW9ucy4gTm93LCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCBpcyB1c2VkIGluc3RlYWQuIFRoaXMgc2VlbXMgdG8gYmUgZGVsYXlpbmcgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSByZWZlcmVuY2VkIGBrcHRyYCB1bnRpbCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZHMsIHdoaWNoIGlzIGxpa2VseSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgTk1JLXNhZmV0eSBjb25jZXJuLiBUaGUgdGltZXIsIHdvcmtxdWV1ZSwgYW5kIHRhc2tfd29yayBmaWVsZHMgYXJlIGNhbmNlbGxlZCBlYXJsaWVyLiBUaGUgdXBkYXRlIG9wZXJhdGlvbiBpbiBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgYWxzbyBub3cgbWF0Y2hlcyBhcnJheW1hcCBzZW1hbnRpY3MsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4KClRoZSBvbGQgY29kZSBsb29rcyBsaWtlIGl0IHBvdGVudGlhbGx5IGhhZCBhIHJhY2UgY29uZGl0aW9uIG9yIGEgcHJvYmxlbSB3aGVyZSB0aGUgYGtwdHJgIGRlc3RydWN0aW9uIGNvdWxkIGhhcHBlbiBpbiBhIGNvbnRleHQgdGhhdCBpc24mIzM5O3Qgc2FmZSBmb3IgaXQuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyB0aGF0IGRpcmVjdGx5LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IGEgZml4IGZvciBCUEYgbWFwcyBvZiB0aGUgUkhBU0ggdHlwZSwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBob3cgdGhleSBoYW5kbGUgYGtwdHJgIG9uIGRlbGV0ZS91cGRhdGUgb3BlcmF0aW9ucy4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCB0aGlzIGlzIHByb2JhYmx5IHNwZWNpZmljIHRvIGBCUEZfTUFQX1RZUEVfUkhBU0hgLCB0aG91Z2ggSSB3aWxsIHZlcmlmeSB0aGF0IGJ5IGxvb2tpbmcgYXQgaG93IGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCBhcmUgdXNlZCB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4gSSBuZWVkIHRvIGZ1bGx5IGdyb2sgdGhlIEJQRiBtYXAgdHlwZXMgYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaHRhYl9kZWxldGVfZWxlbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTE4PXN0YXRpYyB2b2lkIHJodGFiX3JlYWRfZWxlbV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpkc3QsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MjgtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTI5OnN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICpjb3B5LFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkzMC1cdFx0XHQgICAgIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTY2PXN0YXRpYyBsb25nIHJodGFiX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk3Ni1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5Nzc6XHRyZXR1cm4gcmh0YWJfZGVsZXRlX2VsZW0ocmh0YWIsIGVsZW0sIE5VTEwsIDApO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjk3OC19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjk4MD1zdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTk1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk5NjpcdHJldHVybiByaHRhYl9kZWxldGVfZWxlbShyaHRhYiwgZWxlbSwgdmFsdWUsIGZsYWdzKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OTctfVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMyMzk9c3RhdGljIGludCBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzNDItXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRvdGFsOyBpJiM0MzsmIzQzOylcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzNDM6XHRcdFx0cmh0YWJfZGVsZXRlX2VsZW0ocmh0YWIsIGRlbF9lbGVtc1tpXSwgTlVMTCwgMCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzQ0LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMzQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipBbmFseXppbmcgQlBGIE1hcCBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbiBuYW1lczogYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCwgYW5kIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIFRoZSBwcmVmaXggYHJodGFiX2Agc3VnZ2VzdHMgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24sIHBlcmhhcHMgYSAmIzM0O3Jlc2l6YWJsZSBoYXNoIHRhYmxlLiYjMzQ7IFRoZSBvcGVyYXRpb25zIHRoZW1zZWx2ZXMgcG9pbnQgdG93YXJkcyBjb21tb24gbWFwIGZ1bmN0aW9uYWxpdGllczogZWxlbWVudCBkZWxldGlvbiwgbG9va3VwIGFuZCBkZWxldGlvbiBpbiBvbmUgc3RlcCwgdXBkYXRpbmcgZXhpc3RpbmcgZWxlbWVudHMsIGFuZCBhIGJhdGNoIHZlcnNpb24gb2YgdGhlIGxvb2t1cC1hbmQtZGVsZXRlIG9wZXJhdGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgYWxsIHRpZWQgdG8gYEJQRl9NQVBfVFlQRV9SSEFTSGAsIGJ1dCBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBjb3JyZWN0LiBJIHNob3VsZCBjb25maXJtIHRoaXMgYnkgbG9va2luZyBhdCBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYC4gR290dGEgdmVyaWZ5IHRoZSBtYXAgdHlwZSBmb3IgdGhlc2UgZnVuY3Rpb25zIHRvIGtub3cgZm9yIHN1cmUgdGhlIGV4YWN0IGNvbnRleHQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfTUFQX1RZUEVfUkhBU0gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdHlwZXMuaD0xMzY9QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLCBpbnNuX2FycmF5X21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMzgtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTA1MDpcdEJQRl9NQVBfVFlQRV9SSEFTSCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVx0X19NQVhfQlBGX01BUF9UWVBFXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVx0XHQgKlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XHRcdCAqIEJQRl9NQVBfVFlQRV9SSEFTSCAtIGluaXRpYWwgdGFibGUgc2l6ZSBoaW50XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cdFx0ICogKG5lbGVtX2hpbnQpLiAwID0gdXNlIHJoYXNodGFibGUgZGVmYXVsdC4gTXVzdCBiZVxuLS1cbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0xMDA9c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL21hcF9pdGVyLmMtMTI2LVx0XHQgbWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUlJBWSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYzoxMjc6XHRcdCBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIKVxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyOC1cdFx0Z290byBwdXRfbWFwO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEyNTU9c3RhdGljIGludCBtYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfdG9rZW4gKnRva2VuLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyOTktXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMwMDpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMwMS1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMTQtXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMxNTpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMxNi1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMjYtXHRcdFx0XHRpZiAobWFwLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMyNzpcdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMyOC1cdFx0XHRcdCAgICBtYXAtXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIIFx1MDAyNlx1MDAyNlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDIwLVx0ICAgIGF0dHItXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSRU5BIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQyMTpcdCAgICBhdHRyLVx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MjItXHQgICAgYXR0ci1cdTAwM2VtYXBfZXh0cmEgIT0gMCkge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0OTItXHRjYXNlIEJQRl9NQVBfVFlQRV9IQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ5MzpcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTQ5NC1cdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIOlxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTIyMTY9c3RhdGljIGludCBtYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSh1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMjc1LVx0XHQgICBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9QRVJDUFVfSEFTSCB8fFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjI3NjpcdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSCB8fFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI3Ny1cdFx0ICAgbWFwLVx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TVEFDS19UUkFDRSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODc0ND1zdGF0aWMgaW50IGNoZWNrX21hcF9wcm9nX2NvbXBhdGliaWxpdHkoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg3OTItXHRcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg3OTM6XHRcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4Nzk0LVx0XHRjYXNlIEJQRl9NQVBfVFlQRV9MUlVfSEFTSDpcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTAwMD1lbnVtIGJwZl9tYXBfdHlwZSB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNDktXHRCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlx0QlBGX01BUF9UWVBFX1JIQVNILFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNTEtXHRfX01BWF9CUEZfTUFQX1RZUEVcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTUyNz11bmlvbiBicGZfYXR0ciB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTctXHRcdCAqXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU1ODpcdFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU5LVx0XHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz0xNjM9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYXBfdHlwZV9uYW1lW10gPSB7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYy0xOTgtXHRbQlBGX01BUF9UWVBFX0lOU05fQVJSQVldXHRcdD0gXCYjMzQ7aW5zbl9hcnJheVwmIzM0OyxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6MTk5Olx0W0JQRl9NQVBfVFlQRV9SSEFTSF1cdFx0XHQ9IFwmIzM0O3JoYXNoXCYjMzQ7LFxudG9vbHMvbGliL2JwZi9saWJicGYuYy0yMDAtfTtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYz0yOTI9c3RhdGljIGludCBwcm9iZV9tYXBfY3JlYXRlKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMS1cdFx0YnJlYWs7XG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzozMTI6XHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMy1cdFx0b3B0cy5tYXBfZmxhZ3NcdD0gQlBGX0ZfTk9fUFJFQUxMT0M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jPTM3PXN0YXRpYyB2b2lkIGhhc2htYXBfZnVsbF91cGRhdGVfc2V0dXAoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUwLVx0YnBmX21hcF9fc2V0X3R5cGUoY3R4LnNrZWwtXHUwMDNlbWFwcy5oYXNoX21hcF9iZW5jaCwgbWFwX3R5cGUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jOjUxOlx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy01Mi1cdFx0YnBmX21hcF9fc2V0X21hcF9mbGFncyhjdHguc2tlbC1cdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz04MD1zdGF0aWMgdm9pZCByaGFzaF9zZXR1cCh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgxLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo4MjpcdGhhc2htYXBfZnVsbF91cGRhdGVfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYy04My19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0xNTE9c3RhdGljIHZvaWQgaGFzaG1hcF9sb29rdXBfc2V0dXAoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjctXHRtYXBfZmxhZ3MgPSBhcmdzLm1hcF9mbGFncztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MTY4Olx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMTY5LVx0XHRtYXBfZmxhZ3MgfD0gQlBGX0ZfTk9fUFJFQUxMT0M7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYz0yMTE9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjEyLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM6MjEzOlx0aGFzaG1hcF9sb29rdXBfc2V0dXAoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjE0LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM9MTU1PXN0YXRpYyB2b2lkIGh0YWJfbWVtX3NldHVwX2ltcGwoZW51bSBicGZfbWFwX3R5cGUgbWFwX3R5cGUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4NC1cdGJwZl9tYXBfX3NldF9tYXhfZW50cmllcyhtYXAsIE1BWCg4MTkyLCA2NCAqIGVudi5ucl9jcHVzKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MTg1Olx0aWYgKG1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcdTAwMjZcdTAwMjYgYXJncy5wcmVhbGxvY2F0ZWQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMTg2LVx0XHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKG1hcCwgYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXHUwMDI2IH5CUEZfRl9OT19QUkVBTExPQyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTIyOT1zdGF0aWMgdm9pZCByaHRhYl9tZW1fc2V0dXAodm9pZClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0yMzAte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jOjIzMTpcdGh0YWJfbWVtX3NldHVwX2ltcGwoQlBGX01BUF9UWVBFX1JIQVNIKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0yMzItfVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM9NDY9c3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmhhc2guYy01MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM6NTI6XHRyZXR1cm4gYnBmX21hcF9jcmVhdGUoQlBGX01BUF9UWVBFX1JIQVNILCBcJiMzNDtyaGFzaF9leHRyYVwmIzM0OyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmMtNTMtXHRcdFx0ICAgICAgc2l6ZW9mKF9fdTMyKSwgc2l6ZW9mKF9fdTY0KSwgbWF4X2VudHJpZXMsIFx1MDAyNm9wdHMpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfaXRlcl9icGZfcmhhc2hfbWFwLmM9OD1zdHJ1Y3Qge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYzo5Olx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jLTEwLVx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jPTYwPXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYzo2MTpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmMtNjItXHRfX3R5cGUoa2V5LCBpbnQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jPTIyPXN0cnVjdCB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYzoyMzpcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JoYXNoLmMtMjQtXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgzMgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgQlBGIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwIHR5cGUgaW4gdGhlIGtlcm5lbCDigJMgZ29vZCwgdGhhdCYjMzk7cyBhIGtub3duIHF1YW50aXR5LiBJIHNlZSB0aGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AsIHdoaWNoIGFyZSBjb3JlIG9wZXJhdGlvbnMgZm9yIHRoZXNlIFJIQVNIIG1hcHMuIFRoaXMgbWVhbnMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZy4KClRoZSBuZXh0IHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzICpyZWFjaGFiaWxpdHkqLiBDYW4gdGhpcyBiZSB0cmlnZ2VyZWQ/IEFic29sdXRlbHkuIEEgdXNlci1zcGFjZSBwcm9ncmFtIHVzaW5nIHRoZSBgYnBmKClgIHN5c2NhbGwgdG8gY3JlYXRlIGFuZCBtYW5pcHVsYXRlIGEgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwIGNhbiBkZWZpbml0ZWx5IGhpdCB0aGVzZSBmdW5jdGlvbnMgdmlhIHVwZGF0ZSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEl0JiMzOTtzIHJlYWxseSBhYm91dCBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AuIEJ1dCB3YWl0LCB3YXNuJiMzOTt0IGByaHRhYl9kZWxldGVfZWxlbWAgc3RhdGljPyBBaGEhIFRoYXQmIzM5O3Mgbm90IHRoZSBtYXAgb3AhIEl0JiMzOTtzIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gIHRoYXQgbWF0dGVycy4gSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvaGFzaHRhYi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyaHRhYl9tYXBfZGVsZXRlX2VsZW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmM9MjkyOT1zdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTY1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk2NjpzdGF0aWMgbG9uZyByaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk2Ny17XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUwOT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTE5LVx0Lm1hcF91cGRhdGVfZWxlbSA9IHJodGFiX21hcF91cGRhdGVfZWxlbSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM1MjA6XHQubWFwX2RlbGV0ZV9lbGVtID0gcmh0YWJfbWFwX2RlbGV0ZV9lbGVtLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMS1cdC5tYXBfZ2VuX2xvb2t1cCA9IHJodGFiX21hcF9nZW5fbG9va3VwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTg5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyBvZiBhIHNlYXNvbmVkIGRldmVsb3BlcjoKCioqRGVsdmluZyBpbnRvIHRoZSBUYWJsZSBNYW5hZ2VtZW50IENvZGUqKgoKT2theSwgc28gYHJodGFiX21hcF9kZWxldGVfZWxlbWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgaW4gc2NvcGUgd2l0aGluIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQuIEJ1dCwgdGhlIGNydWNpYWwgdGhpbmcgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgYSBtYXAgb3BlcmF0aW9uLCBhIGRlbGV0aW9uIHdpdGhpbiB0aGUgaGFzaCB0YWJsZS4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIGl0cyBjb3VudGVycGFydCwgdGhlIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCBmdW5jdGlvbi4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSByZWxhdGlvbnNoaXAsIGlmIGFueSwgYmV0d2VlbiBkZWxldGlvbiBhbmQgdXBkYXRlIHdpdGhpbiB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBBcmUgdGhlcmUgc2hhcmVkIHN1YnJvdXRpbmVzLCBjb21tb24gZGF0YSBzdHJ1Y3R1cmVzLCBvciBwZXJoYXBzIHNpbWlsYXIgZXJyb3IgaGFuZGxpbmc/IFVuZGVyc3RhbmRpbmcgaG93IHVwZGF0ZXMgaW50ZXJhY3Qgd2l0aCB0aGUgaGFzaCB0YWJsZSBkZWxldGlvbiBwcm9jZXNzIHdpbGwgcHJvYmFibHkgaWxsdW1pbmF0ZSBkZWVwZXIgYXNwZWN0cyBvZiB0YWJsZSBtYW5pcHVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JodGFiX21hcF91cGRhdGVfZXhpc3RpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmM9Mjk4MD1zdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTk4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk5OTpzdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICp2YWx1ZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMDAtXHRcdFx0XHQgICAgICB1NjQgbWFwX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMwMjg9c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA0MS1cdGlmIChlbGVtKVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA0MjpcdFx0cmV0dXJuIHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmcobWFwLCBlbGVtLCB2YWx1ZSwgbWFwX2ZsYWdzKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNDMtXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzA4MS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwODI6XHRcdHJldHVybiByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKG1hcCwgdG1wLCB2YWx1ZSwgbWFwX2ZsYWdzKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODMtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTczCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgcmh0YWIgTWFwIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyAqdGhlKiBtYXAgb3BlcmF0aW9uLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIHRoZSBpbXBvcnRhbnQgc3ltYm9scyB0byBzY3J1dGluaXplIGFyZSBnb2luZyB0byBpbmNsdWRlIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYW5kIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuCgpOb3csIHRoZSBwcm9tcHQgYnJpbmdzIHVwIGFuIGludGVyZXN0aW5nIHBvaW50OiBpdCBwcmVmZXJzIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIGdvYWwgaXMgdG8gZmF2b3IgdGhlIG9uZXMgdGhhdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEJ1dCwgaGVyZSYjMzk7cyB0aGUgcnViOiBib3RoIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGV5IGFyZSBpbnRlcm5hbCBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGByaHRhYl9tYXBfb3BzYC4gQW5kICp0aGF0KiBkYXRhIHN0cnVjdHVyZSwgYHJodGFiX21hcF9vcHNgLCBpcyBub24tc3RhdGljLiBUaGUgY29kZSBhcHBlYXJzIHRvIGJlIHRyYWRpbmcgdGhlIGV4cGxpY2l0IG5vbi1zdGF0aWMgZnVuY3Rpb24gd2l0aCB0aGUgc3RhdGljIGZ1bmN0aW9uIHZpYSB0aGUgc3RydWN0IG1lbWJlci4gVGhpcyBiZWFycyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgpTbywgdGhlIG5leHQgc3RlcCBpcyB0byBjaGVjayBob3cgYHJodGFiX21hcF9vcHNgIGlzIHVzZWQgb3IgZXhwb3J0ZWQuIElzIGl0IHBhcnQgb2YgdGhlIGV4cG9zZWQgQVBJPyBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgcHJvcGVyIGRpcmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmh0YWJfbWFwX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzNj1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTM3OkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfUkhBU0gsIHJodGFiX21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEzOC1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PUJURl9JRF9MSVNUX1NJTkdMRShyaHRhYl9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfcmh0YWIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTA5OmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzUxMC1cdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcmh0YWJfbWFwX29wc2AgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYHJodGFiX21hcF9vcHNgIGlzIGRlZmluaXRlbHkgdXRpbGl6ZWQgd2l0aGluIGBicGZfdHlwZXMuaGAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBiZSBpbnZva2VkIHZpYSBmdW5jdGlvbiBwb2ludGVyczsgdGhlIG9uZXMgdGhhdCBoYXZlIHVuaXF1ZSBzeW1ib2wgYWRkcmVzc2VzLiBCYXNlZCBvbiB0aGlzLCBJIG5lZWQgdG8gZm9jdXMgb24gYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYC4gVGhleSB3b24mIzM5O3QgYmUgaW5saW5lZCwgdGhhdCYjMzk7cyBjZXJ0YWluLgoKTm93LCBob2xkIG9uLi4uIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCBhcmUgbGlzdGVkIGFzIHN0YXRpYyBoZWxwZXJzLiBIbW0sIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXkgd2lsbCBiZSBpbmxpbmVkLiBMb29raW5nIGF0IHRoZSBjYWxsIGdyYXBoLCBgcmh0YWJfZGVsZXRlX2VsZW1gIGdldHMgY2FsbGVkIGZyb20gYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsICphbmQqIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIFRoYXQgb25lIG1pZ2h0IGJlIGlubGluZWQuIEFuZCB0aGVuIHRoZXJlJiMzOTtzIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCB3aGljaCBpcyBjYWxsZWQgb25seSBmcm9tIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLiBTbywgYWdhaW4sIGl0ICptaWdodCogYmUgaW5saW5lZC4KClRoZXJlZm9yZSwgZm9yIHRoZSBzYWtlIG9mIGVmZmljaWVuY3kgYW5kIGNsYXJpdHksIEkgc2hvdWxkIHN0aWNrIHdpdGggZm9jdXNpbmcgb24gdGhvc2UgaW5pdGlhbCB0aHJlZTogYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGNhbiBnZXQgdGhlIGJlc3QgdmlldyBvZiB0aGUgbm9uLWlubGluZWQgZnVuY3Rpb24gY2FsbHMuCgpOZXh0IHVwLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBgQ09ORklHYCBvcHRpb25zIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGlzLiBTcGVjaWZpY2FsbHkgZm9yIEJQRi4gV2Uga25vdyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGVuYWJsZXMgQlBGLCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGF0IGlzIGRlZmluZWQuIExldCBtZSBjaGVjayBga2VybmVsL2JwZi9LY29uZmlnYCBvciBwb3NzaWJseSBgaW5pdC9LY29uZmlnYCB0byBwaW5wb2ludCB0aGF0IGBCUEZfU1lTQ0FMTGAgc2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzgwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYEJQRl9NQVBfVFlQRV9SSEFTSGAgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcy4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgY29tZSBpbnRvIHBsYXk/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYsIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgYCNpZmRlZmAgYmxvY2tzIHN1cnJvdW5kaW5nIHRoZSBgcmh0YWJfbWFwX29wc2Agc3RydWN0dXJlIG9yIGFueSBvZiB0aGUgZnVuY3Rpb25zIHVzZWQgd2l0aGluIGl0LiBUaGF0JiMzOTtzIGxpa2VseSB3aGVyZSBhbnkgY29uZmlndXJhdGlvbi1kZXBlbmRlbnQgbG9naWMgd291bGQgYmUgaGlkZGVuLiBBIHF1aWNrIHNjYW4gc2hvdWxkIHJldmVhbCBpZiB0aGVyZSBhcmUgYW55IHNldHRpbmdzIHRoYXQgY291bGQgaW1wYWN0IGl0cyBwZXJmb3JtYW5jZSwgZmVhdHVyZXMsIG9yIGV2ZW4gYXZhaWxhYmlsaXR5LCBkaXJlY3RseSBpbXBhY3RpbmcgbXkgdXNhZ2Ugb2YgdGhpcyBtYXAgdHlwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmh0YWJfbWFwX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzNj1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTM3OkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfUkhBU0gsIHJodGFiX21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEzOC1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PUJURl9JRF9MSVNUX1NJTkdMRShyaHRhYl9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfcmh0YWIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTA5OmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzUxMC1cdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNTkKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIElzc3VlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBzb21ldGhpbmcmIzM5O3MgYnVnZ2luZyBtZS4gSSBub3RpY2VkIHRoZXJlJiMzOTtzIG5vIGV4cGxpY2l0IGAjaWZkZWZgIGd1YXJkIGFyb3VuZCB0aG9zZSBgcmh0YWJfbWFwX29wc2AgZGVmaW5pdGlvbnMuIFRoYXQmIzM5O3MgdW51c3VhbC4gSXQgbWFrZXMgbWUgd29uZGVyIGlmIHRoaXMgd2hvbGUgZmlsZSwgb3IgcG9ydGlvbnMgb2YgaXQsIG1pZ2h0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gc29tZSBvdGhlciBtYWNybyBkZWZpbml0aW9uLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBoYXNodGFiLmNgIGl0c2VsZiBpcyBzdWJqZWN0ZWQgdG8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24g4oCTIGlzIHRoZXJlIGEgYnJvYWRlciBwcmVwcm9jZXNzb3IgY2hlY2sgdGhhdCB3b3VsZCBleGNsdWRlIGl0IGVudGlyZWx5IHVuZGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zPyBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gY29uZmlybS4gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY29udGV4dCBoZXJlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgY29kZSB3aWxsIGJlaGF2ZSBpbiBkaWZmZXJlbnQga2VybmVsIGJ1aWxkcy4gSSYjMzk7bGwgc3RhcnQgYnkgcXVpY2tseSBzZWFyY2hpbmcgdGhlIHByb2plY3QgZm9yIGFueSByZWxldmFudCBmbGFncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFzaHRhYi5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cbi0tXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlPTE3PXNlbGludXgteSA6PSBhdmMubyBob29rcy5vIHNlbGludXhmcy5vIG5ldGxpbmsubyBubG1zZ3RhYi5vIG5ldGlmLm8gXFxcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUtMTgtXHQgICAgIG5ldG5vZGUubyBuZXRwb3J0Lm8gc3RhdHVzLm8gaW5pdGNhbGxzLm8gXFxcbnNlY3VyaXR5L3NlbGludXgvTWFrZWZpbGU6MTk6XHQgICAgIHNzL2ViaXRtYXAubyBzcy9oYXNodGFiLm8gc3Mvc3ltdGFiLm8gc3Mvc2lkdGFiLm8gc3MvYXZ0YWIubyBcXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0yMC1cdCAgICAgc3MvcG9saWN5ZGIubyBzcy9zZXJ2aWNlcy5vIHNzL2NvbmRpdGlvbmFsLm8gc3MvbWxzLm8gc3MvY29udGV4dC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODY0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgTWFwIEVsZW1lbnQgRnJlZWluZyBDaGFuZ2UqKgoKT2theSwgc28gdGhlIG9ubHkgY29uZmlnIHJlcXVpcmVtZW50IGhlcmUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTGV0JiMzOTtzIGdldCBhIGhhbmRsZSBvbiB0aGUgY2hhbmdlcy4KClJpZ2h0LCB0aGUga2V5IGNoYW5nZSBpcyB3aXRoaW4gdGhlIGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgQlBGX01BUF9UWVBFX1JIQVNIYC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBob3cgQlBGIG1hcCBlbGVtZW50cyBhcmUgZnJlZWQsIGFuZCB0aGlzIGlzIGEgKmZ1bmN0aW9uYWwqIHNoaWZ0LiBJdCBsb29rcyBsaWtlIHdlIGFyZSBhZGRyZXNzaW5nIGFuIE5NSS1zYWZldHkgaXNzdWUgcmVsYXRlZCB0byBrcHRyIGRlc3RydWN0aW9uLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgYW5kIGZ1enppbmcgc2VlbXMgbGlrZSBhIGdvb2QgcGxhbi4KClRoZSBtYWluIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmUgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYC4gSSBuZWVkIHRvIGNvbmZpcm0gSSBoYXZlIHRoZSBjb3JyZWN0IHN5bWJvbHMgZm9yIHRoZSBgQlBGX01BUF9UWVBFX1JIQVNIYCB0eXBlLiBPa2F5LCB5ZXMsIHRob3NlIGFyZSB0aGUgbWFwIG9wZXJhdGlvbnMgZm9yIHRoYXQgdHlwZS4KCkJ1dCwgSSBuZWVkIHRvIHBhdXNlIGZvciBhIG1vbWVudC4uLiB3aGF0JiMzOTtzIHRoaXMgbmV3IGZ1bmN0aW9uIGNhbGwsIGBicGZfb2JqX2NhbmNlbF9maWVsZHNgPyBJcyBpdCBhIG5ldyBmdW5jdGlvbiBvciBhbiBleGlzdGluZyBvbmUgYmVpbmcgdXNlZCBpbiBhIG5ldyB3YXk/IFRoYXQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCBpdHMgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBleGlzdGluZyBCUEYgaW5mcmFzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9vYmpfY2FuY2VsX2ZpZWxkcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTI3Mjc9dm9pZCBicGZfb2JqX2ZyZWVfdGFza193b3JrKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iaik7XG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI3Mjg6dm9pZCBicGZfb2JqX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqb2JqKTtcbmluY2x1ZGUvbGludXgvYnBmLmgtMjcyOS12b2lkIGJwZl9vYmpfZnJlZV9maWVsZHMoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKTtcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MzkyPXN0YXRpYyBsb25nIGFycmF5X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy00MTctXHRcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsLCB2YWx1ZSk7XG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDE4Olx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMobWFwLCB2YWwpO1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTQxOS1cdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQyNS1cdFx0XHRjb3B5X21hcF92YWx1ZShtYXAsIHZhbCwgdmFsdWUpO1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjQyNjpcdFx0YnBmX29ial9jYW5jZWxfZmllbGRzKG1hcCwgdmFsKTtcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00MjctXHR9XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jPTQzMT1pbnQgYnBmX3BlcmNwdV9hcnJheV91cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNDY1LVx0XHRjb3B5X21hcF92YWx1ZShtYXAsIHB0ciwgdmFsdWUpO1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjQ2NjpcdFx0YnBmX29ial9jYW5jZWxfZmllbGRzKG1hcCwgcHRyKTtcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NjctXHRcdGdvdG8gdW5sb2NrO1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NzItXHRcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgcHRyLCB2YWwpO1xua2VybmVsL2JwZi9hcnJheW1hcC5jOjQ3MzpcdFx0YnBmX29ial9jYW5jZWxfZmllbGRzKG1hcCwgcHRyKTtcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NzQtXHR9XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9ODQwPXN0YXRpYyB2b2lkIGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04NTAtXHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo4NTE6XHRcdFx0YnBmX29ial9jYW5jZWxfZmllbGRzKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTg1Mi1cdH0gZWxzZSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtODU0LVxua2VybmVsL2JwZi9oYXNodGFiLmM6ODU1Olx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIG1hcF92YWx1ZSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04NTYtXHR9XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MTAxNT1zdGF0aWMgdm9pZCBwY3B1X2NvcHlfdmFsdWUoc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkIF9fcGVyY3B1ICpwcHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEwMjMtXHRcdGNvcHlfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBwdHIsIHZhbHVlKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjEwMjQ6XHRcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZodGFiLVx1MDAzZW1hcCwgcHRyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEwMjUtXHR9IGVsc2Uge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEwMzMtXHRcdFx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIHB0ciwgdmFsdWUpO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MTAzNDpcdFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIHB0cik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDM1LVx0XHRcdHJldHVybjtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDQxLVx0XHRcdGNvcHlfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBwdHIsIHZhbCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMDQyOlx0XHRcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZodGFiLVx1MDAzZW1hcCwgcHRyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEwNDMtXHRcdH1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTI5PXN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICpjb3B5LFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NjAtXHQgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NjE6XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjk2Mi1cdGJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoXHUwMDI2cmh0YWItXHUwMDNlbWEsIGVsZW0pO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5OTk9c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqdmFsdWUsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyMy1cdCAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzAyNDpcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIG9sZF92YWwpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyNS1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgwMj12b2lkIGJwZl9vYmpfZnJlZV90YXNrX3dvcmsoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTgwOC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjgwOTp2b2lkIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy04MTAte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2h0YWJfdXBkYXRlLmM9MTU9c3RhdGljIHZvaWQgdGVzdF9yZWVudGVyX3VwZGF0ZSh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2h0YWJfdXBkYXRlLmMtMjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9odGFiX3VwZGF0ZS5jOjI2Olx0YnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLmJwZl9vYmpfY2FuY2VsX2ZpZWxkcywgdHJ1ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9odGFiX3VwZGF0ZS5jLTI3LVx0ZXJyID0gaHRhYl91cGRhdGVfX2xvYWQoc2tlbCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaHRhYl91cGRhdGUuYy01Mi1cdCAqIHRoZSByZWVudHJhbmN5IG9mIGJwZl9tYXBfdXBkYXRlX2VsZW0oKS5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2h0YWJfdXBkYXRlLmM6NTM6XHQgKiBjaGVja19hbmRfY2FuY2VsX2ZpZWxkcygpIGNhbGxzIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcygpIG9uIHRoZSBvbGRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2h0YWJfdXBkYXRlLmMtNTQtXHQgKiB2YWx1ZSwgd2hpY2ggaXMgd2hlcmUgZmVudHJ5IHByb2dyYW0gcnVucyBhbmQgcGVyZm9ybXMgYSBuZXN0ZWRcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaHRhYl91cGRhdGUuYz0yMz1pbnQgdXBkYXRlX2VyciA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaHRhYl91cGRhdGUuYy0yNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9odGFiX3VwZGF0ZS5jOjI1OlNFQyhcJiMzNDs/ZmVudHJ5L2JwZl9vYmpfY2FuY2VsX2ZpZWxkc1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9odGFiX3VwZGF0ZS5jOjI2OmludCBicGZfb2JqX2NhbmNlbF9maWVsZHModm9pZCAqY3R4KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2h0YWJfdXBkYXRlLmMtMjcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQyOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUkhBU0ggTWFwIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIHRoaW5ncyB1cCBhIGJpdCB3aXRoIHRoZSBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzLCB1c2luZyBgYnBmX29ial9jYW5jZWxfZmllbGRzYCBpbnN0ZWFkIG9mIHRoZSBvbGRlciBgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgYmVoYXZpb3JhbCBzaGlmdC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKVGhlIHJlc3VsdHMgcG9pbnQgdG8gdGhpcyBiZWluZyB3b3J0aCBmdXp6aW5nLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzIHRvIHVuY292ZXIgZWRnZSBjYXNlcy4gVGhlIGZvY3VzIHN5bWJvbHMgYXJlIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgYW5kIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYEJQRl9TWVNDQUxMYC4KClRoZSByZWFzb25pbmcgbmFpbHMgaXQgZG93bjogdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IGtwdHJzIGFuZCBvdGhlciBzcGVjaWFsIGZpZWxkcyBhcmUgbWFuYWdlZCBkdXJpbmcgdXBkYXRlcyBhbmQgZGVsZXRlcyBpbiBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGZpeGluZyBhbiBOTUktc2FmZXR5IGlzc3VlIGJ5IGRlbGF5aW5nIGtwdHIgZGVzdHJ1Y3Rpb24uIFRoaXMgaXMgYSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nLgoKTm93LCB0aGF0IGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgaXMgb24gdGhlIGxpc3QuLi4gaXQmIzM5O3Mgc3RhdGljLCByaWdodD8gWWVzLCBpdCBpcy4gQnV0LCBJIHJlbWVtYmVyIHRoYXQgaXQgaXMgYWxzbyBhc3NpZ25lZCB0byBgcmh0YWJfbWFwX29wcy5tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgPyBCZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjI5PXN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMzgtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjM5OnN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNDAtXHRcdFx0XHRcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMzc1PXN0YXRpYyBpbnQgcmh0YWJfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzc3LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzNzg6XHRyZXR1cm4gX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzM3OS19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzM4MT1zdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzgzLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzODQ6XHRyZXR1cm4gX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzg1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NjYKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFRoaW5raW5nIG9uIEJQRiBNYXAgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIEJQRiBtYXAgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGByaHRhYl9tYXBfbG9va3VwX2JhdGNoYCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIEkmIzM5O20gZ29pbmcgdG8gZXhwbGljaXRseSBpbmNsdWRlIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIHJhdGhlciB0aGFuIHRoYXQgaW50ZXJuYWwgdmVyc2lvbi4KCk5vdywgSSYjMzk7dmUgZ290IGEgZmV3IGtleSBzeW1ib2xzIEkgd2FudCB0byBrZWVwIGluIG1pbmQgYXMgSSB3b3JrIHRocm91Z2ggdGhpczogYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCBhbmQsIG9mIGNvdXJzZSwgdGhhdCBjcnVjaWFsIGJhdGNoIG9wZXJhdGlvbiwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuCgpBbmQgdGhlbiwganVzdCBhIHJlbWluZGVyIG9uIHRoZSBjb25maWcsIG1ha2Ugc3VyZSB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgaW5jbHVkZWQuCgpSaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIG5leHQgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IGtwdHJzIGFuZCBvdGhlciBzcGVjaWFsIGZpZWxkcyBhcmUgaGFuZGxlZCBkdXJpbmcgdXBkYXRlIGFuZCBkZWxldGUgb3BlcmF0aW9ucyBvbiBCUEZfTUFQX1RZUEVfUkhBU0ggbWFwcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBOTUktc2FmZXR5IGlzc3VlIGJ5IGRlZmVycmluZyBrcHRyIGRlc3RydWN0aW9uLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtyaHRhYl9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7cmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IGtwdHJzIGFuZCBvdGhlciBzcGVjaWFsIGZpZWxkcyBhcmUgaGFuZGxlZCBkdXJpbmcgdXBkYXRlIGFuZCBkZWxldGUgb3BlcmF0aW9ucyBvbiBCUEZfTUFQX1RZUEVfUkhBU0ggbWFwcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBOTUktc2FmZXR5IGlzc3VlIGJ5IGRlZmVycmluZyBrcHRyIGRlc3RydWN0aW9uLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgQlBGIG1hcCBlbGVtZW50IGZpZWxkcyAoc3VjaCBhcyBrcHRycywgdGltZXJzLCB3b3JrcXVldWVzKSBpbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgdG8gYXZvaWQgTk1JLXVuc2FmZSBvcGVyYXRpb25zLiBCeSByZXBsYWNpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgIHdpdGggYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2AsIGl0IGRlZmVycyBrcHRyIGRlc3RydWN0aW9uIHRvIGEgc2FmZXIgY29udGV4dCAoUkNVIGNhbGxiYWNrKS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBpbnZhbGlkIGNvbnRleHQgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzM2NkNjFiZTFlMDhkMGI2MDRjMjFiODYzOTcwZDlhMzE3NmJlMWQxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTM6MzE6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmEzOTU5MjhhM2NmMjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jCkBAIC0yODY0LDE2ICYjNDM7Mjg2NCw2IEBAIHN0YXRpYyBpbnQgcmh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKQogCXJldHVybiBodGFiX21hcF9hbGxvY19jaGVjayhhdHRyKTsKIH0KIAotc3RhdGljIHZvaWQgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLAotCQkJCQlzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSkKLXsKLQlpZiAoSVNfRVJSX09SX05VTEwocmh0YWItJmd0O21hcC5yZWNvcmQpKQotCQlyZXR1cm47Ci0KLQlicGZfb2JqX2ZyZWVfZmllbGRzKHJodGFiLSZndDttYXAucmVjb3JkLAotCQkJICAgIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItJmd0O21hcC5rZXlfc2l6ZSkpOwotfQotCiBzdGF0aWMgdm9pZCByaHRhYl9tZW1fZHRvcih2b2lkICpvYmosIHZvaWQgKmN0eCkKIHsKIAlzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkICpocmVjID0gY3R4OwpAQCAtMjk2Myw4ICYjNDM7Mjk1MywxMiBAQCBzdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdgogCQlyaHRhYl9yZWFkX2VsZW1fdmFsdWUoJmFtcDtyaHRhYi0mZ3Q7bWFwLCBjb3B5LCBlbGVtLCBmbGFncyk7CiAJCWNoZWNrX2FuZF9pbml0X21hcF92YWx1ZSgmYW1wO3JodGFiLSZndDttYXAsIGNvcHkpOwogCX0KLQkvKiBSZWxlYXNlIGludGVybmFsIHN0cnVjdHM6IGtwdHIsIGJwZl90aW1lciwgdGFza193b3JrLCB3cSAqLwotCXJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7CiYjNDM7CS8qCiYjNDM7CSAqIENhbmNlbCB0aW1lciwgd29ya3F1ZXVlLCBhbmQgdGFza193b3JrIGZpZWxkcyBiZWZvcmUgZGVmZXJyaW5nIHRoZQomIzQzOwkgKiBlbGVtZW50IGZyZWUuIFJlZmVyZW5jZWQga3B0ciBkZXN0cnVjdGlvbiBpcyBub3QgTk1JLXNhZmUsIHNvIGxlYXZlCiYjNDM7CSAqIGl0IGZvciByaHRhYl9tZW1fZHRvcigpIGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kcy4KJiM0MzsJICovCiYjNDM7CWJwZl9vYmpfY2FuY2VsX2ZpZWxkcygmYW1wO3JodGFiLSZndDttYXAsIHJodGFiX2VsZW1fdmFsdWUoZWxlbSwgcmh0YWItJmd0O21hcC5rZXlfc2l6ZSkpOwogCWJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoJmFtcDtyaHRhYi0mZ3Q7bWEsIGVsZW0pOwogCXJldHVybiAwOwogfQpAQCAtMzAyMiwxMCAmIzQzOzMwMTYsMTIgQEAgc3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWwKIAkgKiBCUEZfRl9MT0NLLCBtYXRjaGluZyBhcnJheW1hcCBzZW1hbnRpY3MuCiAJICoKIAkgKiBjb3B5X21hcF92YWx1ZSgpIHNraXBzIHNwZWNpYWwtZmllbGQgb2Zmc2V0cywgc28gb2xkIHRpbWVycy8KLQkgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gQ2FuY2VsIHRoZW0gYWZ0ZXIgdGhlIGNvcHkKLQkgKiB0byBtYXRjaCBhcnJheW1hcCYjMzk7cyB1cGRhdGUgc2VtYW50aWNzLgomIzQzOwkgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gVGhpcyBwYXRoIG1heSBydW4gaW4gTk1JIGNvbnRleHQsCiYjNDM7CSAqIHNvIG9ubHkgY2FuY2VsIHRpbWVyL3dvcmtxdWV1ZS90YXNrX3dvcmsgaGVyZS4gS2VlcCBrcHRyIGZpZWxkcwomIzQzOwkgKiBhdHRhY2hlZCB0byB0aGUgdmFsdWUsIG1hdGNoaW5nIGFycmF5bWFwIHNlbWFudGljczsgcmVmZXJlbmNlZAomIzQzOwkgKiBrcHRycyBhcmUgZGVzdHJveWVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgZXZlbnR1YWxseSBmcmVlZC4KIAkgKi8KLQlyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pOwomIzQzOwlicGZfb2JqX2NhbmNlbF9maWVsZHMoJmFtcDtyaHRhYi0mZ3Q7bWFwLCBvbGRfdmFsKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmMKaW5kZXggMTdlNzA3ZGRkZGE4ZC4uOWZkZGYwMzM4N2JiOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jCkBAIC05OCw2ICYjNDM7OTgsMTIgQEAgc3RhdGljIHZvaWQgdGVzdF9tYXBfa3B0cl9zdWNjZXNzKGJvb2wgdGVzdF9ydW4pCiAJQVNTRVJUX09LKHJldCwgJiMzNDt0ZXN0X21hcF9rcHRyX3JlZjMgcmVmY291bnQmIzM0Oyk7CiAJQVNTRVJUX09LKG9wdHMucmV0dmFsLCAmIzM0O3Rlc3RfbWFwX2twdHJfcmVmMyByZXR2YWwmIzM0Oyk7CiAKJiM0MzsJcmV0ID0gYnBmX21hcF9fZGVsZXRlX2VsZW0oc2tlbC0mZ3Q7bWFwcy5yaGFzaF9tYXAsICZhbXA7a2V5LCBzaXplb2Yoa2V5KSwgMCk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7cmhhc2hfbWFwIGRlbGV0ZSYjMzQ7KTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MudGVzdF9tYXBfa3B0cl9yZWYzKSwgJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX09LKHJldCwgJiMzNDt0ZXN0X21hcF9rcHRyX3JlZjMgcmVmY291bnQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgJiMzNDt0ZXN0X21hcF9rcHRyX3JlZjMgcmV0dmFsJiMzNDspOwomIzQzOwogCXJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtJmd0O3Byb2dzLnRlc3RfbHNfbWFwX2twdHJfcmVmX2RlbCksICZhbXA7bG9wdHMpOwogCUFTU0VSVF9PSyhyZXQsICYjMzQ7dGVzdF9sc19tYXBfa3B0cl9yZWZfZGVsIGRlbGV0ZSYjMzQ7KTsKIAlza2VsLSZndDtkYXRhLSZndDtyZWYtLTsKQEAgLTE0Nyw2ICYjNDM7MTUzLDcgQEAgZW51bSBtYXBfdXBkYXRlX2twdHJfY2FzZSB7CiAJTUFQX1VQREFURV9LUFRSX0FSUkFZLAogCU1BUF9VUERBVEVfS1BUUl9IQVNILAogCU1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQywKJiM0MzsJTUFQX1VQREFURV9LUFRSX1JIQVNILAogfTsKIAogc3RhdGljIHN0cnVjdCBicGZfcHJvZ3JhbSAqbWFwX3VwZGF0ZV9rcHRyX3Byb2coc3RydWN0IG1hcF9rcHRyICpza2VsLApAQCAtMTU5LDYgJiM0MzsxNjYsOCBAQCBzdGF0aWMgc3RydWN0IGJwZl9wcm9ncmFtICptYXBfdXBkYXRlX2twdHJfcHJvZyhzdHJ1Y3QgbWFwX2twdHIgKnNrZWwsCiAJCXJldHVybiBza2VsLSZndDtwcm9ncy50ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyOwogCWNhc2UgTUFQX1VQREFURV9LUFRSX0hBU0hfTUFMTE9DOgogCQlyZXR1cm4gc2tlbC0mZ3Q7cHJvZ3MudGVzdF9oYXNoX21hbGxvY19tYXBfdXBkYXRlX2twdHI7CiYjNDM7CWNhc2UgTUFQX1VQREFURV9LUFRSX1JIQVNIOgomIzQzOwkJcmV0dXJuIHNrZWwtJmd0O3Byb2dzLnRlc3Rfcmhhc2hfbWFwX3VwZGF0ZV9rcHRyOwogCX0KIAogCXJldHVybiBOVUxMOwpAQCAtMjA0LDYgJiM0MzsyMTMsOCBAQCB2b2lkIHNlcmlhbF90ZXN0X21hcF9rcHRyKHZvaWQpCiAJCXRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9IQVNIKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VwZGF0ZV9oYXNoX21hbGxvY19tYXBfa3B0ciYjMzQ7KSkKIAkJdGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX0hBU0hfTUFMTE9DKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt1cGRhdGVfcmhhc2hfbWFwX2twdHImIzM0OykpCiYjNDM7CQl0ZXN0X21hcF91cGRhdGVfa3B0cihNQVBfVVBEQVRFX0tQVFJfUkhBU0gpOwogCiAJc2tlbCA9IHJjdV90YXNrc190cmFjZV9ncF9fb3Blbl9hbmRfbG9hZCgpOwogCWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3JjdV90YXNrc190cmFjZV9ncF9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmMKaW5kZXggMGQ4N2M5N2RhYzk5MS4uNDQyMTBkZDNjMGVjOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmMKQEAgLTU3LDYgJiM0Mzs1NywxNCBAQCBzdHJ1Y3QgaGFzaF9tYWxsb2NfbWFwIHsKIAlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7CiB9IGhhc2hfbWFsbG9jX21hcCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIAomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7CiYjNDM7fSByaGFzaF9tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiBzdHJ1Y3QgcGNwdV9oYXNoX21hbGxvY19tYXAgewogCV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0gpOwogCV9fdHlwZShrZXksIGludCk7CkBAIC00MjEsNiAmIzQzOzQyOSw3IEBAIGludCB0ZXN0X21hcF9rcHRyX3JlZjEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KQogCWJwZl9tYXBfdXBkYXRlX2VsZW0oJmFtcDtoYXNoX21hcCwgJmFtcDtrZXksICZhbXA7dmFsLCAwKTsKIAlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7aGFzaF9tYWxsb2NfbWFwLCAmYW1wO2tleSwgJmFtcDt2YWwsIDApOwogCWJwZl9tYXBfdXBkYXRlX2VsZW0oJmFtcDtscnVfaGFzaF9tYXAsICZhbXA7a2V5LCAmYW1wO3ZhbCwgMCk7CiYjNDM7CWJwZl9tYXBfdXBkYXRlX2VsZW0oJmFtcDtyaGFzaF9tYXAsICZhbXA7a2V5LCAmYW1wO3ZhbCwgMCk7CiAKIAlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7cGNwdV9oYXNoX21hcCwgJmFtcDtrZXksICZhbXA7dmFsLCAwKTsKIAlicGZfbWFwX3VwZGF0ZV9lbGVtKCZhbXA7cGNwdV9oYXNoX21hbGxvY19tYXAsICZhbXA7a2V5LCAmYW1wO3ZhbCwgMCk7CkBAIC00MzAsNiAmIzQzOzQzOSw3IEBAIGludCB0ZXN0X21hcF9rcHRyX3JlZjEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KQogCVRFU1QoaGFzaF9tYXApOwogCVRFU1QoaGFzaF9tYWxsb2NfbWFwKTsKIAlURVNUKGxydV9oYXNoX21hcCk7CiYjNDM7CVRFU1Qocmhhc2hfbWFwKTsKIAogCVRFU1RfUENQVShwY3B1X2FycmF5X21hcCk7CiAJVEVTVF9QQ1BVKHBjcHVfaGFzaF9tYXApOwpAQCAtNDY4LDYgJiM0Mzs0NzgsNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYyKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eCkKIAlURVNUKGhhc2hfbWFwKTsKIAlURVNUKGhhc2hfbWFsbG9jX21hcCk7CiAJVEVTVChscnVfaGFzaF9tYXApOwomIzQzOwlURVNUKHJoYXNoX21hcCk7CiAKIAlURVNUX1BDUFUocGNwdV9hcnJheV9tYXApOwogCVRFU1RfUENQVShwY3B1X2hhc2hfbWFwKTsKQEAgLTU5OSw2ICYjNDM7NjEwLDcgQEAgaW50IG5hbWUodm9pZCAqY3R4KQkJCQkJCVwKIAogREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hcCkKIERFRklORV9IQVNIX1VQREFURV9LUFRSX1RFU1QodGVzdF9oYXNoX21hbGxvY19tYXBfdXBkYXRlX2twdHIsIGhhc2hfbWFsbG9jX21hcCkKJiM0MztERUZJTkVfSEFTSF9VUERBVEVfS1BUUl9URVNUKHRlc3Rfcmhhc2hfbWFwX3VwZGF0ZV9rcHRyLCByaGFzaF9tYXApCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIGludCB0ZXN0X2xzX21hcF9rcHRyX3JlZjEodm9pZCAqY3R4KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM2MQoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA3MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgSGFzaHRhYmxlIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBzb21lIHNlbGZ0ZXN0cy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBoYXNodGFibGUgZWxlbWVudHMgYXJlIGNsZWFuZWQgdXAsIHNwZWNpZmljYWxseSB3aXRoaW4gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgLiBJdCBsb29rcyBsaWtlIGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIGlzIGJlaW5nIHJpcHBlZCBvdXQgY29tcGxldGVseS4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgdGhlIHBhdGNoIHJlcGxhY2VzIGNhbGxzIHRvIGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIGluIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCB3aXRoIGNhbGxzIHRvIGBicGZfb2JqX2NhbmNlbF9maWVsZHNgLgoKTGV0JiMzOTtzIGRyaWxsIGRvd246IGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIHdhcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBgYnBmX29ial9mcmVlX2ZpZWxkc2AuIFRoZSBjb21tZW50cyBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIHByb2JsZW0gaXMgY2FsbGluZyBgYnBmX29ial9mcmVlX2ZpZWxkc2AgKHdoaWNoIGNhbiBmcmVlIGtwdHJzKSBpbiBhbiBOTUkgY29udGV4dCBpcyBub3Qgc2FmZS4gVGhlIGZpeCBpcyB0byB1c2UgYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2AgaW5zdGVhZC4gVGhpcyBmdW5jdGlvbiBvbmx5IGNhbmNlbHMgdGltZXJzLCB3b3JrcXVldWVzLCBhbmQgdGFza193b3JrIGZpZWxkcywgbGVhdmluZyB0aGUga3B0ciBkZXN0cnVjdGlvbiB0byBiZSBoYW5kbGVkIGxhdGVyLCB3aXRoaW4gYHJodGFiX21lbV9kdG9yKClgLCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZHMuIFRoaXMgaXMgYSBjbGFzc2ljIG9iamVjdCBsaWZlY3ljbGUgbWFuYWdlbWVudCBpc3N1ZSwgcHJldmVudGluZyBOTUktdW5zYWZlIG9wZXJhdGlvbnMuCgpUaGUga2V5IHF1ZXN0aW9uOiBEb2VzIHRoaXMgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoaXMgaXNuJiMzOTt0IGFib3V0IEtNU0FOIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBvYmplY3QgbGlmZWN5Y2xlLCBhbmQgZW5zdXJpbmcgc2FmZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUga2VybmVsLCBlc3BlY2lhbGx5IGluIE5NSSBjb250ZXh0cy4gS0FTQU4vTE9DS0RFUCBhcmUgdGhlIHJlbGV2YW50IHRvb2xzIGZvciBjYXRjaGluZyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBvciBwb3RlbnRpYWwgZGVhZGxvY2tzIGludHJvZHVjZWQgYnkgY2hhbmdlcyBpbiBtZW1vcnkgbWFuYWdlbWVudC4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBub3Qgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZS4gVGhlIGtwdHJzIGFyZSBzaW1wbHkgYmVpbmcgZnJlZWQgYXQgYSBsYXRlciB0aW1lLgoKQSBxdWljayByZWNhcDogYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2AgYW5kIGBicGZfb2JqX2ZyZWVfZmllbGRzYCBhcmUgdGhlIGtleXMuIFRoZSBmb3JtZXIgY2FuY2VscyB0aGluZ3MgbGlrZSB0aW1lcnMsIHdoaWxlIHRoZSBsYXR0ZXIgaXMgcmVzcG9uc2libGUgZm9yIGFjdHVhbGx5IGZyZWVpbmcgcmVzb3VyY2VzIGluY2x1ZGluZyBrcHRycy4gVGhlIGtwdHJzIGFyZSBhdHRhY2hlZCB0byB0aGUgZWxlbWVudCB2YWx1ZSBhbmQgYXJlIGZyZWVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWN0dWFsbHkgZnJlZWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIGxpZmVjeWNsZSBvZiBCUEYgbWFwIGVsZW1lbnQgZmllbGRzLCBzcGVjaWZpY2FsbHkgZGVmZXJyaW5nIGtwdHIgZGVzdHJ1Y3Rpb24gaW4gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgIHRvIGVuc3VyZSBOTUktc2FmZSBvcGVyYXRpb25zLiBUaGlzIHBhdGNoIGlzIHJlcGxhY2luZyBgYnBmX29ial9mcmVlX2ZpZWxkc2Agd2l0aCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCB0byBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGludmFsaWQgY29udGV4dHMgZm9yIGZyZWVpbmcgbWVtb3J5LiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbmV3IGFsbG9jYXRpb25zLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBvYmplY3QgbGlmZWN5Y2xlcywgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gaW5jb3JyZWN0IGNvbmN1cnJlbmN5IG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgd291bGQgYmUgZmxhZ2dlZCBieSBvdGhlciB0b29scyBsaWtlIEtBU0FOL0xPQ0tERVAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgQlBGIG1hcCBlbGVtZW50IGZpZWxkcyAoc3VjaCBhcyBrcHRycywgdGltZXJzLCB3b3JrcXVldWVzKSBpbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgdG8gYXZvaWQgTk1JLXVuc2FmZSBvcGVyYXRpb25zLiBCeSByZXBsYWNpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgIHdpdGggYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2AsIGl0IGRlZmVycyBrcHRyIGRlc3RydWN0aW9uIHRvIGEgc2FmZXIgY29udGV4dCAoUkNVIGNhbGxiYWNrKS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBpbnZhbGlkIGNvbnRleHQgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBCUEYgbWFwIGVsZW1lbnQgZmllbGRzIChzdWNoIGFzIGtwdHJzLCB0aW1lcnMsIHdvcmtxdWV1ZXMpIGluIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCB0byBhdm9pZCBOTUktdW5zYWZlIG9wZXJhdGlvbnMuIEJ5IHJlcGxhY2luZyBgYnBmX29ial9mcmVlX2ZpZWxkc2Agd2l0aCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCwgaXQgZGVmZXJzIGtwdHIgZGVzdHJ1Y3Rpb24gdG8gYSBzYWZlciBjb250ZXh0IChSQ1UgY2FsbGJhY2spLiBUaGlzIGFkZHJlc3NlcyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGludmFsaWQgY29udGV4dCBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIEFueSByZXN1bHRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlKSB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMxOjE3LjA2NjIzNzQyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTExOTg0Nzc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJodGFiX21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG9mIEJQRiBtYXAgZWxlbWVudCBmaWVsZHMgKHN1Y2ggYXMga3B0cnMsIHRpbWVycywgd29ya3F1ZXVlcykgaW4gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgIHRvIGF2b2lkIE5NSS11bnNhZmUgb3BlcmF0aW9ucy4gQnkgcmVwbGFjaW5nIGBicGZfb2JqX2ZyZWVfZmllbGRzYCB3aXRoIGBicGZfb2JqX2NhbmNlbF9maWVsZHNgLCBpdCBkZWZlcnMga3B0ciBkZXN0cnVjdGlvbiB0byBhIHNhZmVyIGNvbnRleHQgKFJDVSBjYWxsYmFjaykuIFRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgaW52YWxpZCBjb250ZXh0IGJ1Z3MsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gQW55IHJlc3VsdGluZyBtZW1vcnkgY29ycnVwdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUpIHdvdWxkIGJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBrcHRycyBhbmQgb3RoZXIgc3BlY2lhbCBmaWVsZHMgYXJlIGhhbmRsZWQgZHVyaW5nIHVwZGF0ZSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMgb24gQlBGX01BUF9UWVBFX1JIQVNIIG1hcHMsIHNwZWNpZmljYWxseSBmaXhpbmcgYW4gTk1JLXNhZmV0eSBpc3N1ZSBieSBkZWZlcnJpbmcga3B0ciBkZXN0cnVjdGlvbi4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzE6MTcuMDY2MjQxNTM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE2OTM4NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzNjZDYxYmUxZTA4ZDBiNjA0YzIxYjg2Mzk3MGQ5YTMxNzZiZTFkMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxMzozMToxNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uYTM5NTkyOGEzY2YyMCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbisrKyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuQEAgLTI4NjQsMTYgKzI4NjQsNiBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4gXFx0cmV0dXJuIGh0YWJfbWFwX2FsbG9jX2NoZWNrKGF0dHIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMoc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCByaHRhYl9lbGVtICplbGVtKVxcbi17XFxuLVxcdGlmIChJU19FUlJfT1JfTlVMTChyaHRhYi1cXHUwMDNlbWFwLnJlY29yZCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGJwZl9vYmpfZnJlZV9maWVsZHMocmh0YWItXFx1MDAzZW1hcC5yZWNvcmQsXFxuLVxcdFxcdFxcdCAgICByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXFxuIHtcXG4gXFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYyA9IGN0eDtcXG5AQCAtMjk2Myw4ICsyOTUzLDEyIEBAIHN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2XFxuIFxcdFxcdHJodGFiX3JlYWRfZWxlbV92YWx1ZShcXHUwMDI2cmh0YWItXFx1MDAzZW1hcCwgY29weSwgZWxlbSwgZmxhZ3MpO1xcbiBcXHRcXHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXFx1MDAyNnJodGFiLVxcdTAwM2VtYXAsIGNvcHkpO1xcbiBcXHR9XFxuLVxcdC8qIFJlbGVhc2UgaW50ZXJuYWwgc3RydWN0czoga3B0ciwgYnBmX3RpbWVyLCB0YXNrX3dvcmssIHdxICovXFxuLVxcdHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkcyhyaHRhYiwgZWxlbSk7XFxuK1xcdC8qXFxuK1xcdCAqIENhbmNlbCB0aW1lciwgd29ya3F1ZXVlLCBhbmQgdGFza193b3JrIGZpZWxkcyBiZWZvcmUgZGVmZXJyaW5nIHRoZVxcbitcXHQgKiBlbGVtZW50IGZyZWUuIFJlZmVyZW5jZWQga3B0ciBkZXN0cnVjdGlvbiBpcyBub3QgTk1JLXNhZmUsIHNvIGxlYXZlXFxuK1xcdCAqIGl0IGZvciByaHRhYl9tZW1fZHRvcigpIGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kcy5cXG4rXFx0ICovXFxuK1xcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcXHUwMDI2cmh0YWItXFx1MDAzZW1hcCwgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKSk7XFxuIFxcdGJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoXFx1MDAyNnJodGFiLVxcdTAwM2VtYSwgZWxlbSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTMwMjIsMTAgKzMwMTYsMTIgQEAgc3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxcXG4gXFx0ICogQlBGX0ZfTE9DSywgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzLlxcbiBcXHQgKlxcbiBcXHQgKiBjb3B5X21hcF92YWx1ZSgpIHNraXBzIHNwZWNpYWwtZmllbGQgb2Zmc2V0cywgc28gb2xkIHRpbWVycy9cXG4tXFx0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGVtIGFmdGVyIHRoZSBjb3B5XFxuLVxcdCAqIHRvIG1hdGNoIGFycmF5bWFwJ3MgdXBkYXRlIHNlbWFudGljcy5cXG4rXFx0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIFRoaXMgcGF0aCBtYXkgcnVuIGluIE5NSSBjb250ZXh0LFxcbitcXHQgKiBzbyBvbmx5IGNhbmNlbCB0aW1lci93b3JrcXVldWUvdGFza193b3JrIGhlcmUuIEtlZXAga3B0ciBmaWVsZHNcXG4rXFx0ICogYXR0YWNoZWQgdG8gdGhlIHZhbHVlLCBtYXRjaGluZyBhcnJheW1hcCBzZW1hbnRpY3M7IHJlZmVyZW5jZWRcXG4rXFx0ICoga3B0cnMgYXJlIGRlc3Ryb3llZCB3aGVuIHRoZSBlbGVtZW50IGlzIGV2ZW50dWFsbHkgZnJlZWQuXFxuIFxcdCAqL1xcbi1cXHRyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pO1xcbitcXHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXFx1MDAyNnJodGFiLVxcdTAwM2VtYXAsIG9sZF92YWwpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmNcXG5pbmRleCAxN2U3MDdkZGRkYThkLi45ZmRkZjAzMzg3YmI4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jXFxuQEAgLTk4LDYgKzk4LDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbWFwX2twdHJfc3VjY2Vzcyhib29sIHRlc3RfcnVuKVxcbiBcXHRBU1NFUlRfT0socmV0LCBcXFwidGVzdF9tYXBfa3B0cl9yZWYzIHJlZmNvdW50XFxcIik7XFxuIFxcdEFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXFxcInRlc3RfbWFwX2twdHJfcmVmMyByZXR2YWxcXFwiKTtcXG4gXFxuK1xcdHJldCA9IGJwZl9tYXBfX2RlbGV0ZV9lbGVtKHNrZWwtXFx1MDAzZW1hcHMucmhhc2hfbWFwLCBcXHUwMDI2a2V5LCBzaXplb2Yoa2V5KSwgMCk7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJyaGFzaF9tYXAgZGVsZXRlXFxcIik7XFxuK1xcdHJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLnRlc3RfbWFwX2twdHJfcmVmMyksIFxcdTAwMjZvcHRzKTtcXG4rXFx0QVNTRVJUX09LKHJldCwgXFxcInRlc3RfbWFwX2twdHJfcmVmMyByZWZjb3VudFxcXCIpO1xcbitcXHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFxcXCJ0ZXN0X21hcF9rcHRyX3JlZjMgcmV0dmFsXFxcIik7XFxuK1xcbiBcXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy50ZXN0X2xzX21hcF9rcHRyX3JlZl9kZWwpLCBcXHUwMDI2bG9wdHMpO1xcbiBcXHRBU1NFUlRfT0socmV0LCBcXFwidGVzdF9sc19tYXBfa3B0cl9yZWZfZGVsIGRlbGV0ZVxcXCIpO1xcbiBcXHRza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VyZWYtLTtcXG5AQCAtMTQ3LDYgKzE1Myw3IEBAIGVudW0gbWFwX3VwZGF0ZV9rcHRyX2Nhc2Uge1xcbiBcXHRNQVBfVVBEQVRFX0tQVFJfQVJSQVksXFxuIFxcdE1BUF9VUERBVEVfS1BUUl9IQVNILFxcbiBcXHRNQVBfVVBEQVRFX0tQVFJfSEFTSF9NQUxMT0MsXFxuK1xcdE1BUF9VUERBVEVfS1BUUl9SSEFTSCxcXG4gfTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCxcXG5AQCAtMTU5LDYgKzE2Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCxcXG4gXFx0XFx0cmV0dXJuIHNrZWwtXFx1MDAzZXByb2dzLnRlc3RfaGFzaF9tYXBfdXBkYXRlX2twdHI7XFxuIFxcdGNhc2UgTUFQX1VQREFURV9LUFRSX0hBU0hfTUFMTE9DOlxcbiBcXHRcXHRyZXR1cm4gc2tlbC1cXHUwMDNlcHJvZ3MudGVzdF9oYXNoX21hbGxvY19tYXBfdXBkYXRlX2twdHI7XFxuK1xcdGNhc2UgTUFQX1VQREFURV9LUFRSX1JIQVNIOlxcbitcXHRcXHRyZXR1cm4gc2tlbC1cXHUwMDNlcHJvZ3MudGVzdF9yaGFzaF9tYXBfdXBkYXRlX2twdHI7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBOVUxMO1xcbkBAIC0yMDQsNiArMjEzLDggQEAgdm9pZCBzZXJpYWxfdGVzdF9tYXBfa3B0cih2b2lkKVxcbiBcXHRcXHR0ZXN0X21hcF91cGRhdGVfa3B0cihNQVBfVVBEQVRFX0tQVFJfSEFTSCk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJ1cGRhdGVfaGFzaF9tYWxsb2NfbWFwX2twdHJcXFwiKSlcXG4gXFx0XFx0dGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX0hBU0hfTUFMTE9DKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInVwZGF0ZV9yaGFzaF9tYXBfa3B0clxcXCIpKVxcbitcXHRcXHR0ZXN0X21hcF91cGRhdGVfa3B0cihNQVBfVVBEQVRFX0tQVFJfUkhBU0gpO1xcbiBcXG4gXFx0c2tlbCA9IHJjdV90YXNrc190cmFjZV9ncF9fb3Blbl9hbmRfbG9hZCgpO1xcbiBcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcInJjdV90YXNrc190cmFjZV9ncF9fb3Blbl9hbmRfbG9hZFxcXCIpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXFxuaW5kZXggMGQ4N2M5N2RhYzk5MS4uNDQyMTBkZDNjMGVjOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXFxuQEAgLTU3LDYgKzU3LDE0IEBAIHN0cnVjdCBoYXNoX21hbGxvY19tYXAge1xcbiBcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuIH0gaGFzaF9tYWxsb2NfbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4gXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbitcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuK30gcmhhc2hfbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuIHN0cnVjdCBwY3B1X2hhc2hfbWFsbG9jX21hcCB7XFxuIFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0gpO1xcbiBcXHRfX3R5cGUoa2V5LCBpbnQpO1xcbkBAIC00MjEsNiArNDI5LDcgQEAgaW50IHRlc3RfbWFwX2twdHJfcmVmMShzdHJ1Y3QgX19za19idWZmICpjdHgpXFxuIFxcdGJwZl9tYXBfdXBkYXRlX2VsZW0oXFx1MDAyNmhhc2hfbWFwLCBcXHUwMDI2a2V5LCBcXHUwMDI2dmFsLCAwKTtcXG4gXFx0YnBmX21hcF91cGRhdGVfZWxlbShcXHUwMDI2aGFzaF9tYWxsb2NfbWFwLCBcXHUwMDI2a2V5LCBcXHUwMDI2dmFsLCAwKTtcXG4gXFx0YnBmX21hcF91cGRhdGVfZWxlbShcXHUwMDI2bHJ1X2hhc2hfbWFwLCBcXHUwMDI2a2V5LCBcXHUwMDI2dmFsLCAwKTtcXG4rXFx0YnBmX21hcF91cGRhdGVfZWxlbShcXHUwMDI2cmhhc2hfbWFwLCBcXHUwMDI2a2V5LCBcXHUwMDI2dmFsLCAwKTtcXG4gXFxuIFxcdGJwZl9tYXBfdXBkYXRlX2VsZW0oXFx1MDAyNnBjcHVfaGFzaF9tYXAsIFxcdTAwMjZrZXksIFxcdTAwMjZ2YWwsIDApO1xcbiBcXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFxcdTAwMjZwY3B1X2hhc2hfbWFsbG9jX21hcCwgXFx1MDAyNmtleSwgXFx1MDAyNnZhbCwgMCk7XFxuQEAgLTQzMCw2ICs0MzksNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYxKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcXG4gXFx0VEVTVChoYXNoX21hcCk7XFxuIFxcdFRFU1QoaGFzaF9tYWxsb2NfbWFwKTtcXG4gXFx0VEVTVChscnVfaGFzaF9tYXApO1xcbitcXHRURVNUKHJoYXNoX21hcCk7XFxuIFxcbiBcXHRURVNUX1BDUFUocGNwdV9hcnJheV9tYXApO1xcbiBcXHRURVNUX1BDUFUocGNwdV9oYXNoX21hcCk7XFxuQEAgLTQ2OCw2ICs0NzgsNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYyKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcXG4gXFx0VEVTVChoYXNoX21hcCk7XFxuIFxcdFRFU1QoaGFzaF9tYWxsb2NfbWFwKTtcXG4gXFx0VEVTVChscnVfaGFzaF9tYXApO1xcbitcXHRURVNUKHJoYXNoX21hcCk7XFxuIFxcbiBcXHRURVNUX1BDUFUocGNwdV9hcnJheV9tYXApO1xcbiBcXHRURVNUX1BDUFUocGNwdV9oYXNoX21hcCk7XFxuQEAgLTU5OSw2ICs2MTAsNyBAQCBpbnQgbmFtZSh2b2lkICpjdHgpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXG4gREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hcClcXG4gREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X2hhc2hfbWFsbG9jX21hcF91cGRhdGVfa3B0ciwgaGFzaF9tYWxsb2NfbWFwKVxcbitERUZJTkVfSEFTSF9VUERBVEVfS1BUUl9URVNUKHRlc3Rfcmhhc2hfbWFwX3VwZGF0ZV9rcHRyLCByaGFzaF9tYXApXFxuIFxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBpbnQgdGVzdF9sc19tYXBfa3B0cl9yZWYxKHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzE6MTguNjgzODY3MDAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA0NjE0NTE0NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcInJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBrcHRycyBhbmQgb3RoZXIgc3BlY2lhbCBmaWVsZHMgYXJlIGhhbmRsZWQgZHVyaW5nIHVwZGF0ZSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMgb24gQlBGX01BUF9UWVBFX1JIQVNIIG1hcHMsIHNwZWNpZmljYWxseSBmaXhpbmcgYW4gTk1JLXNhZmV0eSBpc3N1ZSBieSBkZWZlcnJpbmcga3B0ciBkZXN0cnVjdGlvbi4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzNjZDYxYmUxZTA4ZDBiNjA0YzIxYjg2Mzk3MGQ5YTMxNzZiZTFkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDEzOjMxOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uYTM5NTkyOGEzY2YyMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTI4NjQsMTYgKzI4NjQsNiBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdHJldHVybiBodGFiX21hcF9hbGxvY19jaGVjayhhdHRyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLFxuLVx0XHRcdFx0XHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSlcbi17XG4tXHRpZiAoSVNfRVJSX09SX05VTEwocmh0YWItXHUwMDNlbWFwLnJlY29yZCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGJwZl9vYmpfZnJlZV9maWVsZHMocmh0YWItXHUwMDNlbWFwLnJlY29yZCxcbi1cdFx0XHQgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXG4ge1xuIFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYyA9IGN0eDtcbkBAIC0yOTYzLDggKzI5NTMsMTIgQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZcbiBcdFx0cmh0YWJfcmVhZF9lbGVtX3ZhbHVlKFx1MDAyNnJodGFiLVx1MDAzZW1hcCwgY29weSwgZWxlbSwgZmxhZ3MpO1xuIFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCBjb3B5KTtcbiBcdH1cbi1cdC8qIFJlbGVhc2UgaW50ZXJuYWwgc3RydWN0czoga3B0ciwgYnBmX3RpbWVyLCB0YXNrX3dvcmssIHdxICovXG4tXHRyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pO1xuK1x0LypcbitcdCAqIENhbmNlbCB0aW1lciwgd29ya3F1ZXVlLCBhbmQgdGFza193b3JrIGZpZWxkcyBiZWZvcmUgZGVmZXJyaW5nIHRoZVxuK1x0ICogZWxlbWVudCBmcmVlLiBSZWZlcmVuY2VkIGtwdHIgZGVzdHJ1Y3Rpb24gaXMgbm90IE5NSS1zYWZlLCBzbyBsZWF2ZVxuK1x0ICogaXQgZm9yIHJodGFiX21lbV9kdG9yKCkgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2RzLlxuK1x0ICovXG4rXHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuIFx0YnBmX21lbV9jYWNoZV9mcmVlX3JjdShcdTAwMjZyaHRhYi1cdTAwM2VtYSwgZWxlbSk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzAyMiwxMCArMzAxNiwxMiBAQCBzdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbFxuIFx0ICogQlBGX0ZfTE9DSywgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzLlxuIFx0ICpcbiBcdCAqIGNvcHlfbWFwX3ZhbHVlKCkgc2tpcHMgc3BlY2lhbC1maWVsZCBvZmZzZXRzLCBzbyBvbGQgdGltZXJzL1xuLVx0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGVtIGFmdGVyIHRoZSBjb3B5XG4tXHQgKiB0byBtYXRjaCBhcnJheW1hcCdzIHVwZGF0ZSBzZW1hbnRpY3MuXG4rXHQgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gVGhpcyBwYXRoIG1heSBydW4gaW4gTk1JIGNvbnRleHQsXG4rXHQgKiBzbyBvbmx5IGNhbmNlbCB0aW1lci93b3JrcXVldWUvdGFza193b3JrIGhlcmUuIEtlZXAga3B0ciBmaWVsZHNcbitcdCAqIGF0dGFjaGVkIHRvIHRoZSB2YWx1ZSwgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzOyByZWZlcmVuY2VkXG4rXHQgKiBrcHRycyBhcmUgZGVzdHJveWVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgZXZlbnR1YWxseSBmcmVlZC5cbiBcdCAqL1xuLVx0cmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTtcbitcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIG9sZF92YWwpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jXG5pbmRleCAxN2U3MDdkZGRkYThkLi45ZmRkZjAzMzg3YmI4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY1xuQEAgLTk4LDYgKzk4LDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbWFwX2twdHJfc3VjY2Vzcyhib29sIHRlc3RfcnVuKVxuIFx0QVNTRVJUX09LKHJldCwgXCJ0ZXN0X21hcF9rcHRyX3JlZjMgcmVmY291bnRcIik7XG4gXHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwidGVzdF9tYXBfa3B0cl9yZWYzIHJldHZhbFwiKTtcbiBcbitcdHJldCA9IGJwZl9tYXBfX2RlbGV0ZV9lbGVtKHNrZWwtXHUwMDNlbWFwcy5yaGFzaF9tYXAsIFx1MDAyNmtleSwgc2l6ZW9mKGtleSksIDApO1xuK1x0QVNTRVJUX09LKHJldCwgXCJyaGFzaF9tYXAgZGVsZXRlXCIpO1xuK1x0cmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X21hcF9rcHRyX3JlZjMpLCBcdTAwMjZvcHRzKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwidGVzdF9tYXBfa3B0cl9yZWYzIHJlZmNvdW50XCIpO1xuK1x0QVNTRVJUX09LKG9wdHMucmV0dmFsLCBcInRlc3RfbWFwX2twdHJfcmVmMyByZXR2YWxcIik7XG4rXG4gXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnRlc3RfbHNfbWFwX2twdHJfcmVmX2RlbCksIFx1MDAyNmxvcHRzKTtcbiBcdEFTU0VSVF9PSyhyZXQsIFwidGVzdF9sc19tYXBfa3B0cl9yZWZfZGVsIGRlbGV0ZVwiKTtcbiBcdHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VyZWYtLTtcbkBAIC0xNDcsNiArMTUzLDcgQEAgZW51bSBtYXBfdXBkYXRlX2twdHJfY2FzZSB7XG4gXHRNQVBfVVBEQVRFX0tQVFJfQVJSQVksXG4gXHRNQVBfVVBEQVRFX0tQVFJfSEFTSCxcbiBcdE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQyxcbitcdE1BUF9VUERBVEVfS1BUUl9SSEFTSCxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCxcbkBAIC0xNTksNiArMTY2LDggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ3JhbSAqbWFwX3VwZGF0ZV9rcHRyX3Byb2coc3RydWN0IG1hcF9rcHRyICpza2VsLFxuIFx0XHRyZXR1cm4gc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyO1xuIFx0Y2FzZSBNQVBfVVBEQVRFX0tQVFJfSEFTSF9NQUxMT0M6XG4gXHRcdHJldHVybiBza2VsLVx1MDAzZXByb2dzLnRlc3RfaGFzaF9tYWxsb2NfbWFwX3VwZGF0ZV9rcHRyO1xuK1x0Y2FzZSBNQVBfVVBEQVRFX0tQVFJfUkhBU0g6XG4rXHRcdHJldHVybiBza2VsLVx1MDAzZXByb2dzLnRlc3Rfcmhhc2hfbWFwX3VwZGF0ZV9rcHRyO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtMjA0LDYgKzIxMyw4IEBAIHZvaWQgc2VyaWFsX3Rlc3RfbWFwX2twdHIodm9pZClcbiBcdFx0dGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX0hBU0gpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1cGRhdGVfaGFzaF9tYWxsb2NfbWFwX2twdHJcIikpXG4gXHRcdHRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQyk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInVwZGF0ZV9yaGFzaF9tYXBfa3B0clwiKSlcbitcdFx0dGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX1JIQVNIKTtcbiBcbiBcdHNrZWwgPSByY3VfdGFza3NfdHJhY2VfZ3BfX29wZW5fYW5kX2xvYWQoKTtcbiBcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInJjdV90YXNrc190cmFjZV9ncF9fb3Blbl9hbmRfbG9hZFwiKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXG5pbmRleCAwZDg3Yzk3ZGFjOTkxLi40NDIxMGRkM2MwZWM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXG5AQCAtNTcsNiArNTcsMTQgQEAgc3RydWN0IGhhc2hfbWFsbG9jX21hcCB7XG4gXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4gfSBoYXNoX21hbGxvY19tYXAgU0VDKFwiLm1hcHNcIik7XG4gXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuK30gcmhhc2hfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuIHN0cnVjdCBwY3B1X2hhc2hfbWFsbG9jX21hcCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIKTtcbiBcdF9fdHlwZShrZXksIGludCk7XG5AQCAtNDIxLDYgKzQyOSw3IEBAIGludCB0ZXN0X21hcF9rcHRyX3JlZjEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZoYXNoX21hcCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZoYXNoX21hbGxvY19tYXAsIFx1MDAyNmtleSwgXHUwMDI2dmFsLCAwKTtcbiBcdGJwZl9tYXBfdXBkYXRlX2VsZW0oXHUwMDI2bHJ1X2hhc2hfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4rXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnJoYXNoX21hcCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuIFxuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZwY3B1X2hhc2hfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4gXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnBjcHVfaGFzaF9tYWxsb2NfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG5AQCAtNDMwLDYgKzQzOSw3IEBAIGludCB0ZXN0X21hcF9rcHRyX3JlZjEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuIFx0VEVTVChoYXNoX21hcCk7XG4gXHRURVNUKGhhc2hfbWFsbG9jX21hcCk7XG4gXHRURVNUKGxydV9oYXNoX21hcCk7XG4rXHRURVNUKHJoYXNoX21hcCk7XG4gXG4gXHRURVNUX1BDUFUocGNwdV9hcnJheV9tYXApO1xuIFx0VEVTVF9QQ1BVKHBjcHVfaGFzaF9tYXApO1xuQEAgLTQ2OCw2ICs0NzgsNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYyKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcbiBcdFRFU1QoaGFzaF9tYXApO1xuIFx0VEVTVChoYXNoX21hbGxvY19tYXApO1xuIFx0VEVTVChscnVfaGFzaF9tYXApO1xuK1x0VEVTVChyaGFzaF9tYXApO1xuIFxuIFx0VEVTVF9QQ1BVKHBjcHVfYXJyYXlfbWFwKTtcbiBcdFRFU1RfUENQVShwY3B1X2hhc2hfbWFwKTtcbkBAIC01OTksNiArNjEwLDcgQEAgaW50IG5hbWUodm9pZCAqY3R4KVx0XHRcdFx0XHRcdFxcXG4gXG4gREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hcClcbiBERUZJTkVfSEFTSF9VUERBVEVfS1BUUl9URVNUKHRlc3RfaGFzaF9tYWxsb2NfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hbGxvY19tYXApXG4rREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X3JoYXNoX21hcF91cGRhdGVfa3B0ciwgcmhhc2hfbWFwKVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBpbnQgdGVzdF9sc19tYXBfa3B0cl9yZWYxKHZvaWQgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMxOjE4LjY4Mzg2ODkyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MzEzNTgxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBCUEYgSGFzaHRhYmxlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBmaXggZm9yIGhvdyB3ZSBoYW5kbGUga2VybmVsIHBvaW50ZXJzIChga3B0cmApIHdpdGhpbiBCUEYgaGFzaHRhYmxlcywgc3BlY2lmaWNhbGx5IGluIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYC4gVGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jYCB0ZXN0cyBhcmUgaW5jbHVkZWQsIHdoaWNoIGlzIGdvb2QgdG8gc2VlIGZvciB2ZXJpZmljYXRpb24uXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSByZXBsYWNpbmcgYHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkc2Agd2l0aCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCBpbiB0aG9zZSB0d28gZnVuY3Rpb25zLiBGcm9tIHRoZSBjb21tZW50cywgaXQncyBjbGVhciB0aGlzIGlzIGFib3V0IE5NSSBzYWZldHkuIFRoZSBvbGQgY29kZSB3YXMgZGlyZWN0bHkgZnJlZWluZyBpbnRlcm5hbCBzdHJ1Y3RzIGxpa2UgYGtwdHJgLCBgYnBmX3RpbWVyYCwgYHRhc2tfd29ya2AsIGFuZCBgd3FgIGR1cmluZyB0aGUgZGVsZXRlIGFuZCB1cGRhdGUgb3BlcmF0aW9ucy4gTm93LCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCBpcyB1c2VkIGluc3RlYWQuIFRoaXMgc2VlbXMgdG8gYmUgZGVsYXlpbmcgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSByZWZlcmVuY2VkIGBrcHRyYCB1bnRpbCBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZHMsIHdoaWNoIGlzIGxpa2VseSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgTk1JLXNhZmV0eSBjb25jZXJuLiBUaGUgdGltZXIsIHdvcmtxdWV1ZSwgYW5kIHRhc2tfd29yayBmaWVsZHMgYXJlIGNhbmNlbGxlZCBlYXJsaWVyLiBUaGUgdXBkYXRlIG9wZXJhdGlvbiBpbiBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgYWxzbyBub3cgbWF0Y2hlcyBhcnJheW1hcCBzZW1hbnRpY3MsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyB0byBtYWludGFpbiBjb25zaXN0ZW5jeS5cblxuVGhlIG9sZCBjb2RlIGxvb2tzIGxpa2UgaXQgcG90ZW50aWFsbHkgaGFkIGEgcmFjZSBjb25kaXRpb24gb3IgYSBwcm9ibGVtIHdoZXJlIHRoZSBga3B0cmAgZGVzdHJ1Y3Rpb24gY291bGQgaGFwcGVuIGluIGEgY29udGV4dCB0aGF0IGlzbid0IHNhZmUgZm9yIGl0LiBUaGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgdGhhdCBkaXJlY3RseS4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IGEgZml4IGZvciBCUEYgbWFwcyBvZiB0aGUgUkhBU0ggdHlwZSwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCBob3cgdGhleSBoYW5kbGUgYGtwdHJgIG9uIGRlbGV0ZS91cGRhdGUgb3BlcmF0aW9ucy5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIHRoYXQgdGhpcyBpcyBwcm9iYWJseSBzcGVjaWZpYyB0byBgQlBGX01BUF9UWVBFX1JIQVNIYCwgdGhvdWdoIEkgd2lsbCB2ZXJpZnkgdGhhdCBieSBsb29raW5nIGF0IGhvdyBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgYXJlIHVzZWQgd2l0aGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIEkgbmVlZCB0byBmdWxseSBncm9rIHRoZSBCUEYgbWFwIHR5cGVzIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMToyOC4xMTUyMzAwNDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1OTM5NTA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRhYl9kZWxldGVfZWxlbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTE4PXN0YXRpYyB2b2lkIHJodGFiX3JlYWRfZWxlbV92YWx1ZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpkc3QsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkyOC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTI5OnN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICpjb3B5LFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MzAtXFx0XFx0XFx0ICAgICB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTY2PXN0YXRpYyBsb25nIHJodGFiX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTc2LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5Nzc6XFx0cmV0dXJuIHJodGFiX2RlbGV0ZV9lbGVtKHJodGFiLCBlbGVtLCBOVUxMLCAwKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTc4LX1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5ODA9c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTk1LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5OTY6XFx0cmV0dXJuIHJodGFiX2RlbGV0ZV9lbGVtKHJodGFiLCBlbGVtLCB2YWx1ZSwgZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OTctfVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzIzOT1zdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzQyLVxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0b3RhbDsgaSsrKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzNDM6XFx0XFx0XFx0cmh0YWJfZGVsZXRlX2VsZW0ocmh0YWIsIGRlbF9lbGVtc1tpXSwgTlVMTCwgMCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM0NC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMxOjI5Ljc3NDY0MDI4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjAzMzM3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyBCUEYgTWFwIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbiBuYW1lczogYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCwgYW5kIGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIFRoZSBwcmVmaXggYHJodGFiX2Agc3VnZ2VzdHMgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24sIHBlcmhhcHMgYSBcInJlc2l6YWJsZSBoYXNoIHRhYmxlLlwiIFRoZSBvcGVyYXRpb25zIHRoZW1zZWx2ZXMgcG9pbnQgdG93YXJkcyBjb21tb24gbWFwIGZ1bmN0aW9uYWxpdGllczogZWxlbWVudCBkZWxldGlvbiwgbG9va3VwIGFuZCBkZWxldGlvbiBpbiBvbmUgc3RlcCwgdXBkYXRpbmcgZXhpc3RpbmcgZWxlbWVudHMsIGFuZCBhIGJhdGNoIHZlcnNpb24gb2YgdGhlIGxvb2t1cC1hbmQtZGVsZXRlIG9wZXJhdGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgYWxsIHRpZWQgdG8gYEJQRl9NQVBfVFlQRV9SSEFTSGAsIGJ1dCBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBjb3JyZWN0LiBJIHNob3VsZCBjb25maXJtIHRoaXMgYnkgbG9va2luZyBhdCBgaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oYC4gR290dGEgdmVyaWZ5IHRoZSBtYXAgdHlwZSBmb3IgdGhlc2UgZnVuY3Rpb25zIHRvIGtub3cgZm9yIHN1cmUgdGhlIGV4YWN0IGNvbnRleHQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAzNCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMxOjMzLjgzNDk3NjY3OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUxMTM0ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9NQVBfVFlQRV9SSEFTSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzNj1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oOjEzNzpCUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1JIQVNILCByaHRhYl9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmgtMTM4LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEwMDA9ZW51bSBicGZfbWFwX3R5cGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEwNDktXFx0QlBGX01BUF9UWVBFX0lOU05fQVJSQVksXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjEwNTA6XFx0QlBGX01BUF9UWVBFX1JIQVNILFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDUxLVxcdF9fTUFYX0JQRl9NQVBfVFlQRVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1NTctXFx0XFx0ICpcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU1ODpcXHRcXHQgKiBCUEZfTUFQX1RZUEVfUkhBU0ggLSBpbml0aWFsIHRhYmxlIHNpemUgaGludFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU5LVxcdFxcdCAqIChuZWxlbV9oaW50KS4gMCA9IHVzZSByaGFzaHRhYmxlIGRlZmF1bHQuIE11c3QgYmVcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYz0xMDA9c3RhdGljIGludCBicGZfaXRlcl9hdHRhY2hfbWFwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2l0ZXIuYy0xMjYtXFx0XFx0IG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9tYXBfaXRlci5jOjEyNzpcXHRcXHQgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxua2VybmVsL2JwZi9tYXBfaXRlci5jLTEyOC1cXHRcXHRnb3RvIHB1dF9tYXA7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0xMjU1PXN0YXRpYyBpbnQgbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX3Rva2VuICp0b2tlbixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEyOTktXFx0XFx0XFx0XFx0aWYgKG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMzAwOlxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEzMDEtXFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX0FSUkFZIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzE0LVxcdFxcdFxcdFxcdGlmIChtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9IQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTMxNTpcXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xMzE2LVxcdFxcdFxcdFxcdCAgICBtYXAtXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9MUlVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMyNi1cXHRcXHRcXHRcXHRpZiAobWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjEzMjc6XFx0XFx0XFx0XFx0ICAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgIT0gQlBGX01BUF9UWVBFX1JIQVNIIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMTMyOC1cXHRcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0ggXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MjAtXFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9BUkVOQSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjE0MjE6XFx0ICAgIGF0dHItXFx1MDAzZW1hcF90eXBlICE9IEJQRl9NQVBfVFlQRV9SSEFTSCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MjItXFx0ICAgIGF0dHItXFx1MDAzZW1hcF9leHRyYSAhPSAwKSB7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDkyLVxcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQ5MzpcXHRjYXNlIEJQRl9NQVBfVFlQRV9SSEFTSDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDk0LVxcdGNhc2UgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIOlxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjIxNj1zdGF0aWMgaW50IG1hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI3NS1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMjc2OlxcdFxcdCAgIG1hcC1cXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JIQVNIIHx8XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjI3Ny1cXHRcXHQgICBtYXAtXFx1MDAzZW1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9TVEFDS19UUkFDRSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4NzQ0PXN0YXRpYyBpbnQgY2hlY2tfbWFwX3Byb2dfY29tcGF0aWJpbGl0eShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NzkyLVxcdFxcdGNhc2UgQlBGX01BUF9UWVBFX0hBU0g6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4NzkzOlxcdFxcdGNhc2UgQlBGX01BUF9UWVBFX1JIQVNIOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODc5NC1cXHRcXHRjYXNlIEJQRl9NQVBfVFlQRV9MUlVfSEFTSDpcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMDAwPWVudW0gYnBmX21hcF90eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMDQ5LVxcdEJQRl9NQVBfVFlQRV9JTlNOX0FSUkFZLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMDUwOlxcdEJQRl9NQVBfVFlQRV9SSEFTSCxcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTA1MS1cXHRfX01BWF9CUEZfTUFQX1RZUEVcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTU3LVxcdFxcdCAqXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1NTg6XFx0XFx0ICogQlBGX01BUF9UWVBFX1JIQVNIIC0gaW5pdGlhbCB0YWJsZSBzaXplIGhpbnRcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU1OS1cXHRcXHQgKiAobmVsZW1faGludCkuIDAgPSB1c2Ugcmhhc2h0YWJsZSBkZWZhdWx0LiBNdXN0IGJlXFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTE2Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1hcF90eXBlX25hbWVbXSA9IHtcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtMTk4LVxcdFtCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWV1cXHRcXHQ9IFxcXCJpbnNuX2FycmF5XFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jOjE5OTpcXHRbQlBGX01BUF9UWVBFX1JIQVNIXVxcdFxcdFxcdD0gXFxcInJoYXNoXFxcIixcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTIwMC19O1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmM9MjkyPXN0YXRpYyBpbnQgcHJvYmVfbWFwX2NyZWF0ZShlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmX3Byb2Jlcy5jLTMxMS1cXHRcXHRicmVhaztcXG50b29scy9saWIvYnBmL2xpYmJwZl9wcm9iZXMuYzozMTI6XFx0Y2FzZSBCUEZfTUFQX1RZUEVfUkhBU0g6XFxudG9vbHMvbGliL2JwZi9saWJicGZfcHJvYmVzLmMtMzEzLVxcdFxcdG9wdHMubWFwX2ZsYWdzXFx0PSBCUEZfRl9OT19QUkVBTExPQztcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYz0zNz1zdGF0aWMgdm9pZCBoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUwLVxcdGJwZl9tYXBfX3NldF90eXBlKGN0eC5za2VsLVxcdTAwM2VtYXBzLmhhc2hfbWFwX2JlbmNoLCBtYXBfdHlwZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jOjUxOlxcdGlmIChtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkhBU0gpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTUyLVxcdFxcdGJwZl9tYXBfX3NldF9tYXBfZmxhZ3MoY3R4LnNrZWwtXFx1MDAzZW1hcHMuaGFzaF9tYXBfYmVuY2gsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmM9ODA9c3RhdGljIHZvaWQgcmhhc2hfc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLmMtODEte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUuYzo4MjpcXHRoYXNobWFwX2Z1bGxfdXBkYXRlX3NldHVwKEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5jLTgzLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmM9MTUxPXN0YXRpYyB2b2lkIGhhc2htYXBfbG9va3VwX3NldHVwKGVudW0gYnBmX21hcF90eXBlIG1hcF90eXBlKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYy0xNjctXFx0bWFwX2ZsYWdzID0gYXJncy5tYXBfZmxhZ3M7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfaGFzaG1hcF9sb29rdXAuYzoxNjg6XFx0aWYgKG1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9SSEFTSClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jLTE2OS1cXHRcXHRtYXBfZmxhZ3MgfD0gQlBGX0ZfTk9fUFJFQUxMT0M7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jPTIxMT1zdGF0aWMgdm9pZCByaGFzaF9zZXR1cCh2b2lkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjEyLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9oYXNobWFwX2xvb2t1cC5jOjIxMzpcXHRoYXNobWFwX2xvb2t1cF9zZXR1cChCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2hhc2htYXBfbG9va3VwLmMtMjE0LX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYz0xNTU9c3RhdGljIHZvaWQgaHRhYl9tZW1fc2V0dXBfaW1wbChlbnVtIGJwZl9tYXBfdHlwZSBtYXBfdHlwZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfaHRhYl9tZW0uYy0xODQtXFx0YnBmX21hcF9fc2V0X21heF9lbnRyaWVzKG1hcCwgTUFYKDgxOTIsIDY0ICogZW52Lm5yX2NwdXMpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MTg1OlxcdGlmIChtYXBfdHlwZSAhPSBCUEZfTUFQX1RZUEVfUkhBU0ggXFx1MDAyNlxcdTAwMjYgYXJncy5wcmVhbGxvY2F0ZWQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jLTE4Ni1cXHRcXHRicGZfbWFwX19zZXRfbWFwX2ZsYWdzKG1hcCwgYnBmX21hcF9fbWFwX2ZsYWdzKG1hcCkgXFx1MDAyNiB+QlBGX0ZfTk9fUFJFQUxMT0MpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9odGFiX21lbS5jPTIyOT1zdGF0aWMgdm9pZCByaHRhYl9tZW1fc2V0dXAodm9pZClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMwLXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmM6MjMxOlxcdGh0YWJfbWVtX3NldHVwX2ltcGwoQlBGX01BUF9UWVBFX1JIQVNIKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2h0YWJfbWVtLmMtMjMyLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM9NDY9c3RhdGljIGludCByaGFzaF9tYXBfY3JlYXRlKF9fdTMyIG1heF9lbnRyaWVzLCBfX3U2NCBtYXBfZXh0cmEpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTUxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JoYXNoLmM6NTI6XFx0cmV0dXJuIGJwZl9tYXBfY3JlYXRlKEJQRl9NQVBfVFlQRV9SSEFTSCwgXFxcInJoYXNoX2V4dHJhXFxcIixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yaGFzaC5jLTUzLVxcdFxcdFxcdCAgICAgIHNpemVvZihfX3UzMiksIHNpemVvZihfX3U2NCksIG1heF9lbnRyaWVzLCBcXHUwMDI2b3B0cyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jPTg9c3RydWN0IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2l0ZXJfYnBmX3JoYXNoX21hcC5jOjk6XFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9SSEFTSCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9pdGVyX2JwZl9yaGFzaF9tYXAuYy0xMC1cXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYz02MD1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jOjYxOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jLTYyLVxcdF9fdHlwZShrZXksIGludCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvcmhhc2guYz0yMj1zdHJ1Y3Qge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jOjIzOlxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yaGFzaC5jLTI0LVxcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzE6MzUuNDg2MTE3MzA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyMzQwNTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgQlBGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIHRoZSBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXAgdHlwZSBpbiB0aGUga2VybmVsIOKAkyBnb29kLCB0aGF0J3MgYSBrbm93biBxdWFudGl0eS4gSSBzZWUgdGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgLCB3aGljaCBhcmUgY29yZSBvcGVyYXRpb25zIGZvciB0aGVzZSBSSEFTSCBtYXBzLiBUaGlzIG1lYW5zIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuXG5cblRoZSBuZXh0IHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzICpyZWFjaGFiaWxpdHkqLiBDYW4gdGhpcyBiZSB0cmlnZ2VyZWQ/IEFic29sdXRlbHkuIEEgdXNlci1zcGFjZSBwcm9ncmFtIHVzaW5nIHRoZSBgYnBmKClgIHN5c2NhbGwgdG8gY3JlYXRlIGFuZCBtYW5pcHVsYXRlIGEgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwIGNhbiBkZWZpbml0ZWx5IGhpdCB0aGVzZSBmdW5jdGlvbnMgdmlhIHVwZGF0ZSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJdCdzIHJlYWxseSBhYm91dCBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AuIEJ1dCB3YWl0LCB3YXNuJ3QgYHJodGFiX2RlbGV0ZV9lbGVtYCBzdGF0aWM/IEFoYSEgVGhhdCdzIG5vdCB0aGUgbWFwIG9wISBJdCdzIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gIHRoYXQgbWF0dGVycy4gSSBzaG91bGQgY2hlY2sgYGtlcm5lbC9icGYvaGFzaHRhYi5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgzMiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMTo0Mi41MDk1MjQ0OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NTY4ODg3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRhYl9tYXBfZGVsZXRlX2VsZW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmM9MjkyOT1zdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NjUtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk2NjpzdGF0aWMgbG9uZyByaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5Njcte1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzUwOT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM1MTktXFx0Lm1hcF91cGRhdGVfZWxlbSA9IHJodGFiX21hcF91cGRhdGVfZWxlbSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNTIwOlxcdC5tYXBfZGVsZXRlX2VsZW0gPSByaHRhYl9tYXBfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUyMS1cXHQubWFwX2dlbl9sb29rdXAgPSByaHRhYl9tYXBfZ2VuX2xvb2t1cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzE6NDQuMjY1MjE5Nzk5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk3MjQ0OTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3Mgb2YgYSBzZWFzb25lZCBkZXZlbG9wZXI6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBUYWJsZSBNYW5hZ2VtZW50IENvZGUqKlxuXG5Pa2F5LCBzbyBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBsaW1pdGVkIGluIHNjb3BlIHdpdGhpbiB0aGUgY3VycmVudCB0cmFuc2xhdGlvbiB1bml0LiBCdXQsIHRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhhdCBpdCdzIGZ1bmRhbWVudGFsbHkgYSBtYXAgb3BlcmF0aW9uLCBhIGRlbGV0aW9uIHdpdGhpbiB0aGUgaGFzaCB0YWJsZS4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIGl0cyBjb3VudGVycGFydCwgdGhlIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCBmdW5jdGlvbi4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCwgaWYgYW55LCBiZXR3ZWVuIGRlbGV0aW9uIGFuZCB1cGRhdGUgd2l0aGluIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIEFyZSB0aGVyZSBzaGFyZWQgc3Vicm91dGluZXMsIGNvbW1vbiBkYXRhIHN0cnVjdHVyZXMsIG9yIHBlcmhhcHMgc2ltaWxhciBlcnJvciBoYW5kbGluZz8gVW5kZXJzdGFuZGluZyBob3cgdXBkYXRlcyBpbnRlcmFjdCB3aXRoIHRoZSBoYXNoIHRhYmxlIGRlbGV0aW9uIHByb2Nlc3Mgd2lsbCBwcm9iYWJseSBpbGx1bWluYXRlIGRlZXBlciBhc3BlY3RzIG9mIHRhYmxlIG1hbmlwdWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1ODksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMTo1Mi4yMzc2NzIyNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMjU3OTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTI5ODA9c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTk4LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5OTk6c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqdmFsdWUsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAwMC1cXHRcXHRcXHRcXHQgICAgICB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzAyOD1zdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNDEtXFx0aWYgKGVsZW0pXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA0MjpcXHRcXHRyZXR1cm4gcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZyhtYXAsIGVsZW0sIHZhbHVlLCBtYXBfZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNDMtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDgxLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwODI6XFx0XFx0cmV0dXJuIHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmcobWFwLCB0bXAsIHZhbHVlLCBtYXBfZmxhZ3MpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwODMtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMTo1My42NzAyNTk0OTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1OTE1NDkwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSByaHRhYiBNYXAgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgaXQncyBmbGFnZ2VkIGFzICp0aGUqIG1hcCBvcGVyYXRpb24uIFRoYXQgbWFrZXMgc2Vuc2UuIFRoZXJlZm9yZSwgdGhlIGltcG9ydGFudCBzeW1ib2xzIHRvIHNjcnV0aW5pemUgYXJlIGdvaW5nIHRvIGluY2x1ZGUgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCBhbmQgYF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC5cblxuTm93LCB0aGUgcHJvbXB0IGJyaW5ncyB1cCBhbiBpbnRlcmVzdGluZyBwb2ludDogaXQgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBnb2FsIGlzIHRvIGZhdm9yIHRoZSBvbmVzIHRoYXQgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBCdXQsIGhlcmUncyB0aGUgcnViOiBib3RoIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGV5IGFyZSBpbnRlcm5hbCBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZXkncmUgYXNzaWduZWQgdG8gYHJodGFiX21hcF9vcHNgLiBBbmQgKnRoYXQqIGRhdGEgc3RydWN0dXJlLCBgcmh0YWJfbWFwX29wc2AsIGlzIG5vbi1zdGF0aWMuIFRoZSBjb2RlIGFwcGVhcnMgdG8gYmUgdHJhZGluZyB0aGUgZXhwbGljaXQgbm9uLXN0YXRpYyBmdW5jdGlvbiB3aXRoIHRoZSBzdGF0aWMgZnVuY3Rpb24gdmlhIHRoZSBzdHJ1Y3QgbWVtYmVyLiBUaGlzIGJlYXJzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gY2hlY2sgaG93IGByaHRhYl9tYXBfb3BzYCBpcyB1c2VkIG9yIGV4cG9ydGVkLiBJcyBpdCBwYXJ0IG9mIHRoZSBleHBvc2VkIEFQST8gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIHByb3BlciBkaXJlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTczLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMyOjA2LjI2MTgxMTQ0M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2ODgxNTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRhYl9tYXBfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTM2PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSwgaW5zbl9hcnJheV9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTM3OkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfUkhBU0gsIHJodGFiX21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMzgtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PUJURl9JRF9MSVNUX1NJTkdMRShyaHRhYl9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfcmh0YWIpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUwOTpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTEwLVxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzI6MDcuNzMwNjMxMDAzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTc3NzUxODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHJodGFiX21hcF9vcHNgIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHJodGFiX21hcF9vcHNgIGlzIGRlZmluaXRlbHkgdXRpbGl6ZWQgd2l0aGluIGBicGZfdHlwZXMuaGAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGludm9rZWQgdmlhIGZ1bmN0aW9uIHBvaW50ZXJzOyB0aGUgb25lcyB0aGF0IGhhdmUgdW5pcXVlIHN5bWJvbCBhZGRyZXNzZXMuIEJhc2VkIG9uIHRoaXMsIEkgbmVlZCB0byBmb2N1cyBvbiBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLiBUaGV5IHdvbid0IGJlIGlubGluZWQsIHRoYXQncyBjZXJ0YWluLlxuXG5Ob3csIGhvbGQgb24uLi4gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgIGFyZSBsaXN0ZWQgYXMgc3RhdGljIGhlbHBlcnMuIEhtbSwgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhleSB3aWxsIGJlIGlubGluZWQuIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGByaHRhYl9kZWxldGVfZWxlbWAgZ2V0cyBjYWxsZWQgZnJvbSBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYCwgKmFuZCogYF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gVGhhdCBvbmUgbWlnaHQgYmUgaW5saW5lZC4gQW5kIHRoZW4gdGhlcmUncyBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2Agd2hpY2ggaXMgY2FsbGVkIG9ubHkgZnJvbSBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYC4gU28sIGFnYWluLCBpdCAqbWlnaHQqIGJlIGlubGluZWQuXG5cblRoZXJlZm9yZSwgZm9yIHRoZSBzYWtlIG9mIGVmZmljaWVuY3kgYW5kIGNsYXJpdHksIEkgc2hvdWxkIHN0aWNrIHdpdGggZm9jdXNpbmcgb24gdGhvc2UgaW5pdGlhbCB0aHJlZTogYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBhbmQgYHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYC4gVGhhdCdzIHdoZXJlIEkgY2FuIGdldCB0aGUgYmVzdCB2aWV3IG9mIHRoZSBub24taW5saW5lZCBmdW5jdGlvbiBjYWxscy5cblxuTmV4dCB1cCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgYENPTkZJR2Agb3B0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgdGhpcy4gU3BlY2lmaWNhbGx5IGZvciBCUEYuIFdlIGtub3cgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBlbmFibGVzIEJQRiwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhhdCBpcyBkZWZpbmVkLiBMZXQgbWUgY2hlY2sgYGtlcm5lbC9icGYvS2NvbmZpZ2Agb3IgcG9zc2libHkgYGluaXQvS2NvbmZpZ2AgdG8gcGlucG9pbnQgdGhhdCBgQlBGX1NZU0NBTExgIHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMyOjE4LjkwODM4NTQzNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0ODk4OTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxua2VybmVsL2JwZi9LY29uZmlnLTI2LVxcbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMjoyMC4zNTczNzg4OTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxNDY1NDg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgQlBGX01BUF9UWVBFX1JIQVNIYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcy4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgY29tZSBpbnRvIHBsYXk/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYsIGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgYCNpZmRlZmAgYmxvY2tzIHN1cnJvdW5kaW5nIHRoZSBgcmh0YWJfbWFwX29wc2Agc3RydWN0dXJlIG9yIGFueSBvZiB0aGUgZnVuY3Rpb25zIHVzZWQgd2l0aGluIGl0LiBUaGF0J3MgbGlrZWx5IHdoZXJlIGFueSBjb25maWd1cmF0aW9uLWRlcGVuZGVudCBsb2dpYyB3b3VsZCBiZSBoaWRkZW4uIEEgcXVpY2sgc2NhbiBzaG91bGQgcmV2ZWFsIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGluZ3MgdGhhdCBjb3VsZCBpbXBhY3QgaXRzIHBlcmZvcm1hbmNlLCBmZWF0dXJlcywgb3IgZXZlbiBhdmFpbGFiaWxpdHksIGRpcmVjdGx5IGltcGFjdGluZyBteSB1c2FnZSBvZiB0aGlzIG1hcCB0eXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc4MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMyOjI1LjY3MjAzNjIxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NjkyNzgzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyaHRhYl9tYXBfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTM2PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfSU5TTl9BUlJBWSwgaW5zbl9hcnJheV9tYXBfb3BzKVxcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTM3OkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfUkhBU0gsIHJodGFiX21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaC0xMzgtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNTA4PUJURl9JRF9MSVNUX1NJTkdMRShyaHRhYl9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfcmh0YWIpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzUwOTpjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNTEwLVxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzI6MjcuMTI4OTY4MTQzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MTIzMDIxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gSXNzdWUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBzb21ldGhpbmcncyBidWdnaW5nIG1lLiBJIG5vdGljZWQgdGhlcmUncyBubyBleHBsaWNpdCBgI2lmZGVmYCBndWFyZCBhcm91bmQgdGhvc2UgYHJodGFiX21hcF9vcHNgIGRlZmluaXRpb25zLiBUaGF0J3MgdW51c3VhbC4gSXQgbWFrZXMgbWUgd29uZGVyIGlmIHRoaXMgd2hvbGUgZmlsZSwgb3IgcG9ydGlvbnMgb2YgaXQsIG1pZ2h0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gc29tZSBvdGhlciBtYWNybyBkZWZpbml0aW9uLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGhhc2h0YWIuY2AgaXRzZWxmIGlzIHN1YmplY3RlZCB0byBjb25kaXRpb25hbCBjb21waWxhdGlvbiDigJMgaXMgdGhlcmUgYSBicm9hZGVyIHByZXByb2Nlc3NvciBjaGVjayB0aGF0IHdvdWxkIGV4Y2x1ZGUgaXQgZW50aXJlbHkgdW5kZXIgc3BlY2lmaWMgY29uZmlndXJhdGlvbnM/IFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0uIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvbnRleHQgaGVyZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGNvZGUgd2lsbCBiZWhhdmUgaW4gZGlmZmVyZW50IGtlcm5lbCBidWlsZHMuIEknbGwgc3RhcnQgYnkgcXVpY2tseSBzZWFyY2hpbmcgdGhlIHByb2plY3QgZm9yIGFueSByZWxldmFudCBmbGFncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNTksIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMjozNi42NDEyNzM5MjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTEwOTk1MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFzaHRhYi5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEyLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZT0xNz1zZWxpbnV4LXkgOj0gYXZjLm8gaG9va3MubyBzZWxpbnV4ZnMubyBuZXRsaW5rLm8gbmxtc2d0YWIubyBuZXRpZi5vIFxcXFxcXG5zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlLTE4LVxcdCAgICAgbmV0bm9kZS5vIG5ldHBvcnQubyBzdGF0dXMubyBpbml0Y2FsbHMubyBcXFxcXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZToxOTpcXHQgICAgIHNzL2ViaXRtYXAubyBzcy9oYXNodGFiLm8gc3Mvc3ltdGFiLm8gc3Mvc2lkdGFiLm8gc3MvYXZ0YWIubyBcXFxcXFxuc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZS0yMC1cXHQgICAgIHNzL3BvbGljeWRiLm8gc3Mvc2VydmljZXMubyBzcy9jb25kaXRpb25hbC5vIHNzL21scy5vIHNzL2NvbnRleHQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMjozOC40MzIzODAzNDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyMzI1MTIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIE1hcCBFbGVtZW50IEZyZWVpbmcgQ2hhbmdlKipcblxuT2theSwgc28gdGhlIG9ubHkgY29uZmlnIHJlcXVpcmVtZW50IGhlcmUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBMZXQncyBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMuXG5cblJpZ2h0LCB0aGUga2V5IGNoYW5nZSBpcyB3aXRoaW4gdGhlIGByaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgQlBGX01BUF9UWVBFX1JIQVNIYC4gV2UncmUgZGVhbGluZyB3aXRoIGhvdyBCUEYgbWFwIGVsZW1lbnRzIGFyZSBmcmVlZCwgYW5kIHRoaXMgaXMgYSAqZnVuY3Rpb25hbCogc2hpZnQuIEl0IGxvb2tzIGxpa2Ugd2UgYXJlIGFkZHJlc3NpbmcgYW4gTk1JLXNhZmV0eSBpc3N1ZSByZWxhdGVkIHRvIGtwdHIgZGVzdHJ1Y3Rpb24uIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBhbmQgZnV6emluZyBzZWVtcyBsaWtlIGEgZ29vZCBwbGFuLlxuXG5UaGUgbWFpbiBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXJlIGByaHRhYl9tYXBfZGVsZXRlX2VsZW1gLCBgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYW5kIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAuIEkgbmVlZCB0byBjb25maXJtIEkgaGF2ZSB0aGUgY29ycmVjdCBzeW1ib2xzIGZvciB0aGUgYEJQRl9NQVBfVFlQRV9SSEFTSGAgdHlwZS4gT2theSwgeWVzLCB0aG9zZSBhcmUgdGhlIG1hcCBvcGVyYXRpb25zIGZvciB0aGF0IHR5cGUuXG5cbkJ1dCwgSSBuZWVkIHRvIHBhdXNlIGZvciBhIG1vbWVudC4uLiB3aGF0J3MgdGhpcyBuZXcgZnVuY3Rpb24gY2FsbCwgYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2A/IElzIGl0IGEgbmV3IGZ1bmN0aW9uIG9yIGFuIGV4aXN0aW5nIG9uZSBiZWluZyB1c2VkIGluIGEgbmV3IHdheT8gVGhhdCBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBhbmQgaXRzIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZXhpc3RpbmcgQlBGIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg2NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMjo0NS4zNTU2MzM3NDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzM2MjM4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX29ial9jYW5jZWxfZmllbGRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MjcyNz12b2lkIGJwZl9vYmpfZnJlZV90YXNrX3dvcmsoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjI3Mjg6dm9pZCBicGZfb2JqX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqb2JqKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI3Mjktdm9pZCBicGZfb2JqX2ZyZWVfZmllbGRzKGNvbnN0IHN0cnVjdCBidGZfcmVjb3JkICpyZWMsIHZvaWQgKm9iaik7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MzkyPXN0YXRpYyBsb25nIGFycmF5X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQxNy1cXHRcXHRjb3B5X21hcF92YWx1ZShtYXAsIHZhbCwgdmFsdWUpO1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo0MTg6XFx0XFx0YnBmX29ial9jYW5jZWxfZmllbGRzKG1hcCwgdmFsKTtcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNDE5LVxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtNDI1LVxcdFxcdFxcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsLCB2YWx1ZSk7XFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjQyNjpcXHRcXHRicGZfb2JqX2NhbmNlbF9maWVsZHMobWFwLCB2YWwpO1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00MjctXFx0fVxcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jPTQzMT1pbnQgYnBmX3BlcmNwdV9hcnJheV91cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NjUtXFx0XFx0Y29weV9tYXBfdmFsdWUobWFwLCBwdHIsIHZhbHVlKTtcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6NDY2OlxcdFxcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhtYXAsIHB0cik7XFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTQ2Ny1cXHRcXHRnb3RvIHVubG9jaztcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NzItXFx0XFx0Y29weV9tYXBfdmFsdWUobWFwLCBwdHIsIHZhbCk7XFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjQ3MzpcXHRcXHRicGZfb2JqX2NhbmNlbF9maWVsZHMobWFwLCBwdHIpO1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYy00NzQtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9ODQwPXN0YXRpYyB2b2lkIGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTg1MC1cXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjg1MTpcXHRcXHRcXHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtODUyLVxcdH0gZWxzZSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy04NTQtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6ODU1OlxcdFxcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBtYXBfdmFsdWUpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTg1Ni1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xMDE1PXN0YXRpYyB2b2lkIHBjcHVfY29weV92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgX19wZXJjcHUgKnBwdHIsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDIzLVxcdFxcdGNvcHlfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIHB0ciwgdmFsdWUpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjEwMjQ6XFx0XFx0YnBmX29ial9jYW5jZWxfZmllbGRzKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIHB0cik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTAyNS1cXHR9IGVsc2Uge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTAzMy1cXHRcXHRcXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBwdHIsIHZhbHVlKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMDM0OlxcdFxcdFxcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBwdHIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEwMzUtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTA0MS1cXHRcXHRcXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBwdHIsIHZhbCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTA0MjpcXHRcXHRcXHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCwgcHRyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xMDQzLVxcdFxcdH1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5Mjk9c3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZvaWQgKmNvcHksXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTYwLVxcdCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NjE6XFx0YnBmX29ial9jYW5jZWxfZmllbGRzKFxcdTAwMjZyaHRhYi1cXHUwMDNlbWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTYyLVxcdGJwZl9tZW1fY2FjaGVfZnJlZV9yY3UoXFx1MDAyNnJodGFiLVxcdTAwM2VtYSwgZWxlbSk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTk5PXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZvaWQgKnZhbHVlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyMy1cXHQgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDI0OlxcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcXHUwMDI2cmh0YWItXFx1MDAzZW1hcCwgb2xkX3ZhbCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAyNS1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTgwMj12b2lkIGJwZl9vYmpfZnJlZV90YXNrX3dvcmsoY29uc3Qgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYywgdm9pZCAqb2JqKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtODA4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjgwOTp2b2lkIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpvYmopXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtODEwLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2h0YWJfdXBkYXRlLmM9MTU9c3RhdGljIHZvaWQgdGVzdF9yZWVudGVyX3VwZGF0ZSh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaHRhYl91cGRhdGUuYy0yNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9odGFiX3VwZGF0ZS5jOjI2OlxcdGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC1cXHUwMDNlcHJvZ3MuYnBmX29ial9jYW5jZWxfZmllbGRzLCB0cnVlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9odGFiX3VwZGF0ZS5jLTI3LVxcdGVyciA9IGh0YWJfdXBkYXRlX19sb2FkKHNrZWwpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaHRhYl91cGRhdGUuYy01Mi1cXHQgKiB0aGUgcmVlbnRyYW5jeSBvZiBicGZfbWFwX3VwZGF0ZV9lbGVtKCkuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvaHRhYl91cGRhdGUuYzo1MzpcXHQgKiBjaGVja19hbmRfY2FuY2VsX2ZpZWxkcygpIGNhbGxzIGJwZl9vYmpfY2FuY2VsX2ZpZWxkcygpIG9uIHRoZSBvbGRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9odGFiX3VwZGF0ZS5jLTU0LVxcdCAqIHZhbHVlLCB3aGljaCBpcyB3aGVyZSBmZW50cnkgcHJvZ3JhbSBydW5zIGFuZCBwZXJmb3JtcyBhIG5lc3RlZFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2h0YWJfdXBkYXRlLmM9MjM9aW50IHVwZGF0ZV9lcnIgPSAwO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9odGFiX3VwZGF0ZS5jLTI0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9odGFiX3VwZGF0ZS5jOjI1OlNFQyhcXFwiP2ZlbnRyeS9icGZfb2JqX2NhbmNlbF9maWVsZHNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9odGFiX3VwZGF0ZS5jOjI2OmludCBicGZfb2JqX2NhbmNlbF9maWVsZHModm9pZCAqY3R4KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9odGFiX3VwZGF0ZS5jLTI3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzI6NDYuNzg5MjY0MTQyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MTQ1MTIxMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFJIQVNIIE1hcCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIHRoaW5ncyB1cCBhIGJpdCB3aXRoIHRoZSBgQlBGX01BUF9UWVBFX1JIQVNIYCBtYXBzLCB1c2luZyBgYnBmX29ial9jYW5jZWxfZmllbGRzYCBpbnN0ZWFkIG9mIHRoZSBvbGRlciBgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgYmVoYXZpb3JhbCBzaGlmdC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5UaGUgcmVzdWx0cyBwb2ludCB0byB0aGlzIGJlaW5nIHdvcnRoIGZ1enppbmcsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHRoZXNlIGtpbmRzIG9mIGNoYW5nZXMgdG8gdW5jb3ZlciBlZGdlIGNhc2VzLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgYHJodGFiX21hcF9kZWxldGVfZWxlbWAsIGByaHRhYl9tYXBfdXBkYXRlX2VsZW1gLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gLCBhbmQgYF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQlBGX1NZU0NBTExgLlxuXG5UaGUgcmVhc29uaW5nIG5haWxzIGl0IGRvd246IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyBrcHRycyBhbmQgb3RoZXIgc3BlY2lhbCBmaWVsZHMgYXJlIG1hbmFnZWQgZHVyaW5nIHVwZGF0ZXMgYW5kIGRlbGV0ZXMgaW4gYEJQRl9NQVBfVFlQRV9SSEFTSGAgbWFwcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBmaXhpbmcgYW4gTk1JLXNhZmV0eSBpc3N1ZSBieSBkZWxheWluZyBrcHRyIGRlc3RydWN0aW9uLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSwgd2hpY2ggYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZy5cblxuTm93LCB0aGF0IGBfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgaXMgb24gdGhlIGxpc3QuLi4gaXQncyBzdGF0aWMsIHJpZ2h0PyBZZXMsIGl0IGlzLiBCdXQsIEkgcmVtZW1iZXIgdGhhdCBpdCBpcyBhbHNvIGFzc2lnbmVkIHRvIGByaHRhYl9tYXBfb3BzLm1hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGA/IEJldHRlciBkb3VibGUtY2hlY2sgdGhhdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDI5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMyOjU2LjYwMzc3ODcwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNzE5MDE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3JodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjI5PXN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIzOC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjM5OnN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjQwLVxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMzNzU9c3RhdGljIGludCByaHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM3Ny17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzM3ODpcXHRyZXR1cm4gX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzNzktfVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzM4MT1zdGF0aWMgaW50IHJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzODMte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzODQ6XFx0cmV0dXJuIF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzODUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMjo1OC4wMzA5NzM3NjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5MzU1NTAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaGlua2luZyBvbiBCUEYgTWFwIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlc2UgQlBGIG1hcCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgYHJodGFiX21hcF9sb29rdXBfYmF0Y2hgIGFuZCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gSSdtIGdvaW5nIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCByYXRoZXIgdGhhbiB0aGF0IGludGVybmFsIHZlcnNpb24uXG5cbk5vdywgSSd2ZSBnb3QgYSBmZXcga2V5IHN5bWJvbHMgSSB3YW50IHRvIGtlZXAgaW4gbWluZCBhcyBJIHdvcmsgdGhyb3VnaCB0aGlzOiBgcmh0YWJfbWFwX2RlbGV0ZV9lbGVtYCwgYHJodGFiX21hcF91cGRhdGVfZWxlbWAsIGByaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAsIGFuZCwgb2YgY291cnNlLCB0aGF0IGNydWNpYWwgYmF0Y2ggb3BlcmF0aW9uLCBgcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC5cblxuQW5kIHRoZW4sIGp1c3QgYSByZW1pbmRlciBvbiB0aGUgY29uZmlnLCBtYWtlIHN1cmUgdGhhdCBgQlBGX1NZU0NBTExgIGlzIGluY2x1ZGVkLlxuXG5SaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIG5leHQgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDY2LCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMzowMy4yMjQ1MzEyNDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzg0NzE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyaHRhYl9tYXBfZGVsZXRlX2VsZW1cIixcbiAgICBcInJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwicmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1cIixcbiAgICBcInJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGtwdHJzIGFuZCBvdGhlciBzcGVjaWFsIGZpZWxkcyBhcmUgaGFuZGxlZCBkdXJpbmcgdXBkYXRlIGFuZCBkZWxldGUgb3BlcmF0aW9ucyBvbiBCUEZfTUFQX1RZUEVfUkhBU0ggbWFwcywgc3BlY2lmaWNhbGx5IGZpeGluZyBhbiBOTUktc2FmZXR5IGlzc3VlIGJ5IGRlZmVycmluZyBrcHRyIGRlc3RydWN0aW9uLiBUaGlzIGlzIGEgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcInJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJyaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBrcHRycyBhbmQgb3RoZXIgc3BlY2lhbCBmaWVsZHMgYXJlIGhhbmRsZWQgZHVyaW5nIHVwZGF0ZSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMgb24gQlBGX01BUF9UWVBFX1JIQVNIIG1hcHMsIHNwZWNpZmljYWxseSBmaXhpbmcgYW4gTk1JLXNhZmV0eSBpc3N1ZSBieSBkZWZlcnJpbmcga3B0ciBkZXN0cnVjdGlvbi4gVGhpcyBpcyBhIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6MzM6MDMuMjk4Mzg2MjE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg4NzY5MDA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMzOjAzLjI5ODgwOTE5N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjg4NzI2MjcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBCUEYgbWFwIGVsZW1lbnQgZmllbGRzIChzdWNoIGFzIGtwdHJzLCB0aW1lcnMsIHdvcmtxdWV1ZXMpIGluIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYCB0byBhdm9pZCBOTUktdW5zYWZlIG9wZXJhdGlvbnMuIEJ5IHJlcGxhY2luZyBgYnBmX29ial9mcmVlX2ZpZWxkc2Agd2l0aCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCwgaXQgZGVmZXJzIGtwdHIgZGVzdHJ1Y3Rpb24gdG8gYSBzYWZlciBjb250ZXh0IChSQ1UgY2FsbGJhY2spLiBUaGlzIGFkZHJlc3NlcyBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGludmFsaWQgY29udGV4dCBidWdzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIEFueSByZXN1bHRpbmcgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlKSB3b3VsZCBiZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzNjZDYxYmUxZTA4ZDBiNjA0YzIxYjg2Mzk3MGQ5YTMxNzZiZTFkMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDEzOjMxOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uYTM5NTkyOGEzY2YyMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTI4NjQsMTYgKzI4NjQsNiBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdHJldHVybiBodGFiX21hcF9hbGxvY19jaGVjayhhdHRyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLFxuLVx0XHRcdFx0XHRzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSlcbi17XG4tXHRpZiAoSVNfRVJSX09SX05VTEwocmh0YWItXHUwMDNlbWFwLnJlY29yZCkpXG4tXHRcdHJldHVybjtcbi1cbi1cdGJwZl9vYmpfZnJlZV9maWVsZHMocmh0YWItXHUwMDNlbWFwLnJlY29yZCxcbi1cdFx0XHQgICAgcmh0YWJfZWxlbV92YWx1ZShlbGVtLCByaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgcmh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXG4ge1xuIFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYyA9IGN0eDtcbkBAIC0yOTYzLDggKzI5NTMsMTIgQEAgc3RhdGljIGludCByaHRhYl9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiwgc3RydWN0IHJodGFiX2VsZW0gKmVsZW0sIHZcbiBcdFx0cmh0YWJfcmVhZF9lbGVtX3ZhbHVlKFx1MDAyNnJodGFiLVx1MDAzZW1hcCwgY29weSwgZWxlbSwgZmxhZ3MpO1xuIFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCBjb3B5KTtcbiBcdH1cbi1cdC8qIFJlbGVhc2UgaW50ZXJuYWwgc3RydWN0czoga3B0ciwgYnBmX3RpbWVyLCB0YXNrX3dvcmssIHdxICovXG4tXHRyaHRhYl9jaGVja19hbmRfZnJlZV9maWVsZHMocmh0YWIsIGVsZW0pO1xuK1x0LypcbitcdCAqIENhbmNlbCB0aW1lciwgd29ya3F1ZXVlLCBhbmQgdGFza193b3JrIGZpZWxkcyBiZWZvcmUgZGVmZXJyaW5nIHRoZVxuK1x0ICogZWxlbWVudCBmcmVlLiBSZWZlcmVuY2VkIGtwdHIgZGVzdHJ1Y3Rpb24gaXMgbm90IE5NSS1zYWZlLCBzbyBsZWF2ZVxuK1x0ICogaXQgZm9yIHJodGFiX21lbV9kdG9yKCkgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2RzLlxuK1x0ICovXG4rXHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2cmh0YWItXHUwMDNlbWFwLCByaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIHJodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuIFx0YnBmX21lbV9jYWNoZV9mcmVlX3JjdShcdTAwMjZyaHRhYi1cdTAwM2VtYSwgZWxlbSk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzAyMiwxMCArMzAxNiwxMiBAQCBzdGF0aWMgbG9uZyByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCByaHRhYl9lbGVtICplbFxuIFx0ICogQlBGX0ZfTE9DSywgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzLlxuIFx0ICpcbiBcdCAqIGNvcHlfbWFwX3ZhbHVlKCkgc2tpcHMgc3BlY2lhbC1maWVsZCBvZmZzZXRzLCBzbyBvbGQgdGltZXJzL1xuLVx0ICoga3B0cnMvZXRjLiBzdGlsbCBzaXQgaW4gdGhlIHNsb3QuIENhbmNlbCB0aGVtIGFmdGVyIHRoZSBjb3B5XG4tXHQgKiB0byBtYXRjaCBhcnJheW1hcCdzIHVwZGF0ZSBzZW1hbnRpY3MuXG4rXHQgKiBrcHRycy9ldGMuIHN0aWxsIHNpdCBpbiB0aGUgc2xvdC4gVGhpcyBwYXRoIG1heSBydW4gaW4gTk1JIGNvbnRleHQsXG4rXHQgKiBzbyBvbmx5IGNhbmNlbCB0aW1lci93b3JrcXVldWUvdGFza193b3JrIGhlcmUuIEtlZXAga3B0ciBmaWVsZHNcbitcdCAqIGF0dGFjaGVkIHRvIHRoZSB2YWx1ZSwgbWF0Y2hpbmcgYXJyYXltYXAgc2VtYW50aWNzOyByZWZlcmVuY2VkXG4rXHQgKiBrcHRycyBhcmUgZGVzdHJveWVkIHdoZW4gdGhlIGVsZW1lbnQgaXMgZXZlbnR1YWxseSBmcmVlZC5cbiBcdCAqL1xuLVx0cmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzKHJodGFiLCBlbGVtKTtcbitcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZyaHRhYi1cdTAwM2VtYXAsIG9sZF92YWwpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL21hcF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9tYXBfa3B0ci5jXG5pbmRleCAxN2U3MDdkZGRkYThkLi45ZmRkZjAzMzg3YmI4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbWFwX2twdHIuY1xuQEAgLTk4LDYgKzk4LDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbWFwX2twdHJfc3VjY2Vzcyhib29sIHRlc3RfcnVuKVxuIFx0QVNTRVJUX09LKHJldCwgXCJ0ZXN0X21hcF9rcHRyX3JlZjMgcmVmY291bnRcIik7XG4gXHRBU1NFUlRfT0sob3B0cy5yZXR2YWwsIFwidGVzdF9tYXBfa3B0cl9yZWYzIHJldHZhbFwiKTtcbiBcbitcdHJldCA9IGJwZl9tYXBfX2RlbGV0ZV9lbGVtKHNrZWwtXHUwMDNlbWFwcy5yaGFzaF9tYXAsIFx1MDAyNmtleSwgc2l6ZW9mKGtleSksIDApO1xuK1x0QVNTRVJUX09LKHJldCwgXCJyaGFzaF9tYXAgZGVsZXRlXCIpO1xuK1x0cmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X21hcF9rcHRyX3JlZjMpLCBcdTAwMjZvcHRzKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwidGVzdF9tYXBfa3B0cl9yZWYzIHJlZmNvdW50XCIpO1xuK1x0QVNTRVJUX09LKG9wdHMucmV0dmFsLCBcInRlc3RfbWFwX2twdHJfcmVmMyByZXR2YWxcIik7XG4rXG4gXHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLnRlc3RfbHNfbWFwX2twdHJfcmVmX2RlbCksIFx1MDAyNmxvcHRzKTtcbiBcdEFTU0VSVF9PSyhyZXQsIFwidGVzdF9sc19tYXBfa3B0cl9yZWZfZGVsIGRlbGV0ZVwiKTtcbiBcdHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VyZWYtLTtcbkBAIC0xNDcsNiArMTUzLDcgQEAgZW51bSBtYXBfdXBkYXRlX2twdHJfY2FzZSB7XG4gXHRNQVBfVVBEQVRFX0tQVFJfQVJSQVksXG4gXHRNQVBfVVBEQVRFX0tQVFJfSEFTSCxcbiBcdE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQyxcbitcdE1BUF9VUERBVEVfS1BUUl9SSEFTSCxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dyYW0gKm1hcF91cGRhdGVfa3B0cl9wcm9nKHN0cnVjdCBtYXBfa3B0ciAqc2tlbCxcbkBAIC0xNTksNiArMTY2LDggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ3JhbSAqbWFwX3VwZGF0ZV9rcHRyX3Byb2coc3RydWN0IG1hcF9rcHRyICpza2VsLFxuIFx0XHRyZXR1cm4gc2tlbC1cdTAwM2Vwcm9ncy50ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyO1xuIFx0Y2FzZSBNQVBfVVBEQVRFX0tQVFJfSEFTSF9NQUxMT0M6XG4gXHRcdHJldHVybiBza2VsLVx1MDAzZXByb2dzLnRlc3RfaGFzaF9tYWxsb2NfbWFwX3VwZGF0ZV9rcHRyO1xuK1x0Y2FzZSBNQVBfVVBEQVRFX0tQVFJfUkhBU0g6XG4rXHRcdHJldHVybiBza2VsLVx1MDAzZXByb2dzLnRlc3Rfcmhhc2hfbWFwX3VwZGF0ZV9rcHRyO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtMjA0LDYgKzIxMyw4IEBAIHZvaWQgc2VyaWFsX3Rlc3RfbWFwX2twdHIodm9pZClcbiBcdFx0dGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX0hBU0gpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ1cGRhdGVfaGFzaF9tYWxsb2NfbWFwX2twdHJcIikpXG4gXHRcdHRlc3RfbWFwX3VwZGF0ZV9rcHRyKE1BUF9VUERBVEVfS1BUUl9IQVNIX01BTExPQyk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInVwZGF0ZV9yaGFzaF9tYXBfa3B0clwiKSlcbitcdFx0dGVzdF9tYXBfdXBkYXRlX2twdHIoTUFQX1VQREFURV9LUFRSX1JIQVNIKTtcbiBcbiBcdHNrZWwgPSByY3VfdGFza3NfdHJhY2VfZ3BfX29wZW5fYW5kX2xvYWQoKTtcbiBcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInJjdV90YXNrc190cmFjZV9ncF9fb3Blbl9hbmRfbG9hZFwiKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXG5pbmRleCAwZDg3Yzk3ZGFjOTkxLi40NDIxMGRkM2MwZWM5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9rcHRyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfa3B0ci5jXG5AQCAtNTcsNiArNTcsMTQgQEAgc3RydWN0IGhhc2hfbWFsbG9jX21hcCB7XG4gXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4gfSBoYXNoX21hbGxvY19tYXAgU0VDKFwiLm1hcHNcIik7XG4gXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUkhBU0gpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuK30gcmhhc2hfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuIHN0cnVjdCBwY3B1X2hhc2hfbWFsbG9jX21hcCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIKTtcbiBcdF9fdHlwZShrZXksIGludCk7XG5AQCAtNDIxLDYgKzQyOSw3IEBAIGludCB0ZXN0X21hcF9rcHRyX3JlZjEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZoYXNoX21hcCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZoYXNoX21hbGxvY19tYXAsIFx1MDAyNmtleSwgXHUwMDI2dmFsLCAwKTtcbiBcdGJwZl9tYXBfdXBkYXRlX2VsZW0oXHUwMDI2bHJ1X2hhc2hfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4rXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnJoYXNoX21hcCwgXHUwMDI2a2V5LCBcdTAwMjZ2YWwsIDApO1xuIFxuIFx0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZwY3B1X2hhc2hfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG4gXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFx1MDAyNnBjcHVfaGFzaF9tYWxsb2NfbWFwLCBcdTAwMjZrZXksIFx1MDAyNnZhbCwgMCk7XG5AQCAtNDMwLDYgKzQzOSw3IEBAIGludCB0ZXN0X21hcF9rcHRyX3JlZjEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuIFx0VEVTVChoYXNoX21hcCk7XG4gXHRURVNUKGhhc2hfbWFsbG9jX21hcCk7XG4gXHRURVNUKGxydV9oYXNoX21hcCk7XG4rXHRURVNUKHJoYXNoX21hcCk7XG4gXG4gXHRURVNUX1BDUFUocGNwdV9hcnJheV9tYXApO1xuIFx0VEVTVF9QQ1BVKHBjcHVfaGFzaF9tYXApO1xuQEAgLTQ2OCw2ICs0NzgsNyBAQCBpbnQgdGVzdF9tYXBfa3B0cl9yZWYyKHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcbiBcdFRFU1QoaGFzaF9tYXApO1xuIFx0VEVTVChoYXNoX21hbGxvY19tYXApO1xuIFx0VEVTVChscnVfaGFzaF9tYXApO1xuK1x0VEVTVChyaGFzaF9tYXApO1xuIFxuIFx0VEVTVF9QQ1BVKHBjcHVfYXJyYXlfbWFwKTtcbiBcdFRFU1RfUENQVShwY3B1X2hhc2hfbWFwKTtcbkBAIC01OTksNiArNjEwLDcgQEAgaW50IG5hbWUodm9pZCAqY3R4KVx0XHRcdFx0XHRcdFxcXG4gXG4gREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X2hhc2hfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hcClcbiBERUZJTkVfSEFTSF9VUERBVEVfS1BUUl9URVNUKHRlc3RfaGFzaF9tYWxsb2NfbWFwX3VwZGF0ZV9rcHRyLCBoYXNoX21hbGxvY19tYXApXG4rREVGSU5FX0hBU0hfVVBEQVRFX0tQVFJfVEVTVCh0ZXN0X3JoYXNoX21hcF91cGRhdGVfa3B0ciwgcmhhc2hfbWFwKVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBpbnQgdGVzdF9sc19tYXBfa3B0cl9yZWYxKHZvaWQgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjMzOjAzLjI5ODgxMDAzN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg4NzIzMjQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBIYXNodGFibGUgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgc29tZSBzZWxmdGVzdHMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgaGFzaHRhYmxlIGVsZW1lbnRzIGFyZSBjbGVhbmVkIHVwLCBzcGVjaWZpY2FsbHkgd2l0aGluIGByaHRhYl9kZWxldGVfZWxlbWAgYW5kIGByaHRhYl9tYXBfdXBkYXRlX2V4aXN0aW5nYC4gSXQgbG9va3MgbGlrZSBgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzYCBpcyBiZWluZyByaXBwZWQgb3V0IGNvbXBsZXRlbHkuIFRoZSBpbXBvcnRhbnQgcGFydCBpcyB0aGF0IHRoZSBwYXRjaCByZXBsYWNlcyBjYWxscyB0byBgcmh0YWJfY2hlY2tfYW5kX2ZyZWVfZmllbGRzYCBpbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2Agd2l0aCBjYWxscyB0byBgYnBmX29ial9jYW5jZWxfZmllbGRzYC5cblxuTGV0J3MgZHJpbGwgZG93bjogYHJodGFiX2NoZWNrX2FuZF9mcmVlX2ZpZWxkc2Agd2FzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGBicGZfb2JqX2ZyZWVfZmllbGRzYC4gVGhlIGNvbW1lbnRzIG1ha2UgaXQgY2xlYXIgdGhhdCB0aGUgcHJvYmxlbSBpcyBjYWxsaW5nIGBicGZfb2JqX2ZyZWVfZmllbGRzYCAod2hpY2ggY2FuIGZyZWUga3B0cnMpIGluIGFuIE5NSSBjb250ZXh0IGlzIG5vdCBzYWZlLiBUaGUgZml4IGlzIHRvIHVzZSBgYnBmX29ial9jYW5jZWxfZmllbGRzYCBpbnN0ZWFkLiBUaGlzIGZ1bmN0aW9uIG9ubHkgY2FuY2VscyB0aW1lcnMsIHdvcmtxdWV1ZXMsIGFuZCB0YXNrX3dvcmsgZmllbGRzLCBsZWF2aW5nIHRoZSBrcHRyIGRlc3RydWN0aW9uIHRvIGJlIGhhbmRsZWQgbGF0ZXIsIHdpdGhpbiBgcmh0YWJfbWVtX2R0b3IoKWAsIGFmdGVyIHRoZSBSQ1UgZ3JhY2UgcGVyaW9kcy4gVGhpcyBpcyBhIGNsYXNzaWMgb2JqZWN0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IGlzc3VlLCBwcmV2ZW50aW5nIE5NSS11bnNhZmUgb3BlcmF0aW9ucy5cblxuVGhlIGtleSBxdWVzdGlvbjogRG9lcyB0aGlzIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGlzIGlzbid0IGFib3V0IEtNU0FOIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBvYmplY3QgbGlmZWN5Y2xlLCBhbmQgZW5zdXJpbmcgc2FmZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUga2VybmVsLCBlc3BlY2lhbGx5IGluIE5NSSBjb250ZXh0cy4gS0FTQU4vTE9DS0RFUCBhcmUgdGhlIHJlbGV2YW50IHRvb2xzIGZvciBjYXRjaGluZyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBvciBwb3RlbnRpYWwgZGVhZGxvY2tzIGludHJvZHVjZWQgYnkgY2hhbmdlcyBpbiBtZW1vcnkgbWFuYWdlbWVudC4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBub3Qgd2hhdCdzIGhhcHBlbmluZyBoZXJlLiBUaGUga3B0cnMgYXJlIHNpbXBseSBiZWluZyBmcmVlZCBhdCBhIGxhdGVyIHRpbWUuXG5cbkEgcXVpY2sgcmVjYXA6IGBicGZfb2JqX2NhbmNlbF9maWVsZHNgIGFuZCBgYnBmX29ial9mcmVlX2ZpZWxkc2AgYXJlIHRoZSBrZXlzLiBUaGUgZm9ybWVyIGNhbmNlbHMgdGhpbmdzIGxpa2UgdGltZXJzLCB3aGlsZSB0aGUgbGF0dGVyIGlzIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBmcmVlaW5nIHJlc291cmNlcyBpbmNsdWRpbmcga3B0cnMuIFRoZSBrcHRycyBhcmUgYXR0YWNoZWQgdG8gdGhlIGVsZW1lbnQgdmFsdWUgYW5kIGFyZSBmcmVlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGFjdHVhbGx5IGZyZWVkLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIGxpZmVjeWNsZSBvZiBCUEYgbWFwIGVsZW1lbnQgZmllbGRzLCBzcGVjaWZpY2FsbHkgZGVmZXJyaW5nIGtwdHIgZGVzdHJ1Y3Rpb24gaW4gYHJodGFiX2RlbGV0ZV9lbGVtYCBhbmQgYHJodGFiX21hcF91cGRhdGVfZXhpc3RpbmdgIHRvIGVuc3VyZSBOTUktc2FmZSBvcGVyYXRpb25zLiBUaGlzIHBhdGNoIGlzIHJlcGxhY2luZyBgYnBmX29ial9mcmVlX2ZpZWxkc2Agd2l0aCBgYnBmX29ial9jYW5jZWxfZmllbGRzYCB0byBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGludmFsaWQgY29udGV4dHMgZm9yIGZyZWVpbmcgbWVtb3J5LiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBiZWNhdXNlIHRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBuZXcgYWxsb2NhdGlvbnMsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG9iamVjdCBsaWZlY3ljbGVzLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSBpbmNvcnJlY3QgY29uY3VycmVuY3kgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB3b3VsZCBiZSBmbGFnZ2VkIGJ5IG90aGVyIHRvb2xzIGxpa2UgS0FTQU4vTE9DS0RFUC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM2MSwiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozMzoxNi4xODYwNDYwMDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgQlBGIG1hcCBlbGVtZW50IGZpZWxkcyAoc3VjaCBhcyBrcHRycywgdGltZXJzLCB3b3JrcXVldWVzKSBpbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgdG8gYXZvaWQgTk1JLXVuc2FmZSBvcGVyYXRpb25zLiBCeSByZXBsYWNpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgIHdpdGggYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2AsIGl0IGRlZmVycyBrcHRyIGRlc3RydWN0aW9uIHRvIGEgc2FmZXIgY29udGV4dCAoUkNVIGNhbGxiYWNrKS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBpbnZhbGlkIGNvbnRleHQgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgQlBGIG1hcCBlbGVtZW50IGZpZWxkcyAoc3VjaCBhcyBrcHRycywgdGltZXJzLCB3b3JrcXVldWVzKSBpbiBgcmh0YWJfZGVsZXRlX2VsZW1gIGFuZCBgcmh0YWJfbWFwX3VwZGF0ZV9leGlzdGluZ2AgdG8gYXZvaWQgTk1JLXVuc2FmZSBvcGVyYXRpb25zLiBCeSByZXBsYWNpbmcgYGJwZl9vYmpfZnJlZV9maWVsZHNgIHdpdGggYGJwZl9vYmpfY2FuY2VsX2ZpZWxkc2AsIGl0IGRlZmVycyBrcHRyIGRlc3RydWN0aW9uIHRvIGEgc2FmZXIgY29udGV4dCAoUkNVIGNhbGxiYWNrKS4gVGhpcyBhZGRyZXNzZXMgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBpbnZhbGlkIGNvbnRleHQgYnVncywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBBbnkgcmVzdWx0aW5nIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUgZnJlZSkgd291bGQgYmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow6v762[1] Phase: Succeeded StartedAt: 2026-08-24 13:33:27 +0000 UTC FinishedAt: 2026-08-24 13:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 13:33:27 +0000 UTC FinishedAt: 2026-08-24 13:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2] Phase: Succeeded StartedAt: 2026-08-24 13:33:27 +0000 UTC FinishedAt: 2026-08-24 17:23:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:33:27 +0000 UTC FinishedAt: 2026-08-24 17:23:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:33:27 +0000 UTC FinishedAt: 2026-08-24 13:33:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:33:27 +0000 UTC FinishedAt: 2026-08-24 13:33:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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-workflow6v762/series-workflow6v762-convert-artifact-1690260363/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:33:37 +0000 UTC FinishedAt: 2026-08-24 13:49:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:33:37 +0000 UTC FinishedAt: 2026-08-24 13:49:55 +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:*4b987af4-e292-4044-8ebf-fbda67249f4b,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-workflow6v762/series-workflow6v762-convert-artifact-1690260363/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": "9e074ccd-84bd-4adf-b32a-cb42e93633f2", "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-workflow6v762/series-workflow6v762-build-action-4194520713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:33:37 +0000 UTC FinishedAt: 2026-08-24 13:49:41 +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:*4b987af4-e292-4044-8ebf-fbda67249f4b,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-workflow6v762/series-workflow6v762-convert-artifact-1690260363/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": "9e074ccd-84bd-4adf-b32a-cb42e93633f2", "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-workflow6v762/series-workflow6v762-build-action-4194520713/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:49:55 +0000 UTC FinishedAt: 2026-08-24 13:49:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:49:55 +0000 UTC FinishedAt: 2026-08-24 13:49:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:49:55 +0000 UTC FinishedAt: 2026-08-24 13:50:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:49:55 +0000 UTC FinishedAt: 2026-08-24 13:50:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-workflow6v762/series-workflow6v762-convert-artifact-2095071202/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:50:07 +0000 UTC FinishedAt: 2026-08-24 13:52:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:50:07 +0000 UTC FinishedAt: 2026-08-24 13:51:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e074ccd-84bd-4adf-b32a-cb42e93633f2,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-workflow6v762/series-workflow6v762-build-action-4194520713/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-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:52:00 +0000 UTC FinishedAt: 2026-08-24 13:52:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:52:00 +0000 UTC FinishedAt: 2026-08-24 13:52:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:52:00 +0000 UTC FinishedAt: 2026-08-24 14:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:52:00 +0000 UTC FinishedAt: 2026-08-24 14:14:15 +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:*4b987af4-e292-4044-8ebf-fbda67249f4b,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-workflow6v762/series-workflow6v762-convert-artifact-2095071202/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": "5b44d719-4a49-413a-8d58-fc6adf8592f7", "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-workflow6v762/series-workflow6v762-build-action-3705842742/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 13:52:00 +0000 UTC FinishedAt: 2026-08-24 14:14:03 +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:*4b987af4-e292-4044-8ebf-fbda67249f4b,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-workflow6v762/series-workflow6v762-convert-artifact-2095071202/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": "5b44d719-4a49-413a-8d58-fc6adf8592f7", "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-workflow6v762/series-workflow6v762-build-action-3705842742/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 14:14:15 +0000 UTC FinishedAt: 2026-08-24 14:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 14:14:15 +0000 UTC FinishedAt: 2026-08-24 14:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 14:14:15 +0000 UTC FinishedAt: 2026-08-24 14:16:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 14:14:15 +0000 UTC FinishedAt: 2026-08-24 14:16:06 +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:*5b44d719-4a49-413a-8d58-fc6adf8592f7,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-workflow6v762/series-workflow6v762-build-action-3705842742/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-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 14:16:17 +0000 UTC FinishedAt: 2026-08-24 17:23:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 14:16:17 +0000 UTC FinishedAt: 2026-08-24 17:23:13 +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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"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:*9e074ccd-84bd-4adf-b32a-cb42e93633f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b44d719-4a49-413a-8d58-fc6adf8592f7,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-workflow6v762/series-workflow6v762-build-action-4194520713/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-workflow6v762/series-workflow6v762-build-action-3705842742/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 14:16:17 +0000 UTC FinishedAt: 2026-08-24 14:16:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 14:16:17 +0000 UTC FinishedAt: 2026-08-24 14:16:35 +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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"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-workflow6v762/series-workflow6v762-convert-artifact-1194095127/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 14:16:17 +0000 UTC FinishedAt: 2026-08-24 14:16:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 14:16:17 +0000 UTC FinishedAt: 2026-08-24 14:16:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 14:16:17 +0000 UTC FinishedAt: 2026-08-24 14:16:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 14:16:39 +0000 UTC FinishedAt: 2026-08-24 17:23:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6v762[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","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":["rhtab_map_delete_elem","rhtab_map_update_elem","rhtab_map_lookup_and_delete_elem","rhtab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"d6efc1ce-a42b-48e5-b04b-1891043d5a75","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-08-24 14:16:39 +0000 UTC FinishedAt: 2026-08-24 17:23:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e074ccd-84bd-4adf-b32a-cb42e93633f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b44d719-4a49-413a-8d58-fc6adf8592f7,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-workflow6v762/series-workflow6v762-build-action-4194520713/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-workflow6v762/series-workflow6v762-build-action-3705842742/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-workflow6v762/series-workflow6v762-convert-artifact-1194095127/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,}