Name: series-workflowgl6hb Phase: Succeeded StartedAt: 2026-08-07 03:36:25 +0000 UTC FinishedAt: 2026-08-07 07:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[0] Phase: Succeeded StartedAt: 2026-08-07 03:36:25 +0000 UTC FinishedAt: 2026-08-07 04:05:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 03:36:25 +0000 UTC FinishedAt: 2026-08-07 04:05:09 +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": "8c7f55d60aa3512fd3da7e9cf313723460e487b4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "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": "8c7f55d60aa3512fd3da7e9cf313723460e487b4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "e60f1501-c9d8-490c-97dd-2d3121def30a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "bpf_is_state_visited", "bpf_iter_task_new", "bpf_iter_task_next" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX3Rhc2tfbmV3JiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX3Rhc2tfbmV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgdHlwZSBjaGVjayBpbiB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGBzdGFja3NhZmUoKWAgZnVuY3Rpb24gZm9yIGBTVEFDS19JVEVSYCBzbG90cy4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgdmVyaWZpZXIgY291bGQgaW5jb3JyZWN0bHkgY29uc2lkZXIgdHdvIGl0ZXJhdG9yIHN0YXRlcyBhcyBlcXVpdmFsZW50IGV2ZW4gaWYgdGhlaXIgcmVnaXN0ZXIgdHlwZXMgZGlmZmVyZWQgKGUuZy4sIG9uZSBiZWluZyBSQ1UtcHJvdGVjdGVkIGFuZCB0aGUgb3RoZXIgYmVpbmcgdW50cnVzdGVkIGFmdGVyIGFuIFJDVSB1bmxvY2spLiBUaGlzIGNvdWxkIGxlYWQgdG8gdGhlIHZlcmlmaWVyIGFjY2VwdGluZyB1bnNhZmUgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgaXRlcmF0b3JzIG91dHNpZGUgb2YgUkNVIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGUgZml4IGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAzOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzUzMjkxMzQ5YmU4ZmY5YWExZTM4NzAwNmY0NGJkNDM3MzEyNmU0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDM6NTY6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IGVhMjE1M2NmMjhkMGEuLjRlNmFhZmFkMzNiZDIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtODEyLDcgJiM0Mzs4MTIsOCBAQCBzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4gXHRcdFx0ICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWVcbiBcdFx0XHQgKiBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKClcbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAob2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmIHx8XG4mIzQzO1x0XHRcdGlmIChvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlIHx8XG4mIzQzO1x0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGYgfHxcbiBcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmX2lkIHx8XG4gXHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5zdGF0ZSAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuc3RhdGUgfHxcbiBcdFx0XHQgICAgLyogaWdub3JlIHtvbGRfcmVnLGN1cl9yZWd9LVx1MDAzZWl0ZXIuZGVwdGgsIHNlZSBhYm92ZSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuaW5kZXggZmUzNjYzZGVkYmUxNC4uYmFjMzk0YWU3N2Y0NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXG5AQCAtNjEsNiAmIzQzOzYxLDMzIEBAIGludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX2xvY2tfYW5kX3VubG9jaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0Oz9mZW50cnkucy9cJiMzNDsgU1lTX1BSRUZJWCBcJiMzNDtzeXNfZ2V0cGdpZFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2V4cGVjdGVkIGFuIFJDVSBDUyB3aGVuIHVzaW5nIGJwZl9pdGVyX3Rhc2tfbmV4dFwmIzM0OylcbiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbiYjNDM7aW50IEJQRl9QUk9HKGl0ZXJfdGFza3NfcmN1X3N0YXRlX3BydW5pbmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFzayBpdDtcbiYjNDM7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRicGZfaXRlcl90YXNrX25ldyhcdTAwMjZpdCwgTlVMTCwgQlBGX1RBU0tfSVRFUl9BTExfUFJPQ1MpO1xuJiM0MztcbiYjNDM7XHRpZiAobGlrZWx5KGJwZl9nZXRfcHJhbmRvbV91MzIoKSkpIHtcbiYjNDM7XHRcdC8qIEtlZXAgdGhlIG91dGVyIFJDVSBsb2NrIGFjdGl2ZS4gKi9cbiYjNDM7XHRcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIENyZWF0ZSBhbiB1bnByb3RlY3RlZCBnYXAuICovXG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza19uZXh0KFx1MDAyNml0KTtcbiYjNDM7XHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXHUwMDI2aXQpO1xuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0Oz9mZW50cnkucy9cJiMzNDsgU1lTX1BSRUZJWCBcJiMzNDtzeXNfZ2V0cGdpZFwmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7ZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHRcJiMzNDspXG4gaW50IEJQRl9QUk9HKGl0ZXJfY3NzX2xvY2tfYW5kX3VubG9jaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMzo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OywKICAgICYjMzQ7YnBmX2l0ZXJfdGFza19uZXcmIzM0OywKICAgICYjMzQ7YnBmX2l0ZXJfdGFza19uZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyB0eXBlIGNoZWNrIGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgYHN0YWNrc2FmZSgpYCBmdW5jdGlvbiBmb3IgYFNUQUNLX0lURVJgIHNsb3RzLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSB2ZXJpZmllciBjb3VsZCBpbmNvcnJlY3RseSBjb25zaWRlciB0d28gaXRlcmF0b3Igc3RhdGVzIGFzIGVxdWl2YWxlbnQgZXZlbiBpZiB0aGVpciByZWdpc3RlciB0eXBlcyBkaWZmZXJlZCAoZS5nLiwgb25lIGJlaW5nIFJDVS1wcm90ZWN0ZWQgYW5kIHRoZSBvdGhlciBiZWluZyB1bnRydXN0ZWQgYWZ0ZXIgYW4gUkNVIHVubG9jaykuIFRoaXMgY291bGQgbGVhZCB0byB0aGUgdmVyaWZpZXIgYWNjZXB0aW5nIHVuc2FmZSBwcm9ncmFtcyB0aGF0IGFjY2VzcyBpdGVyYXRvcnMgb3V0c2lkZSBvZiBSQ1UgY3JpdGljYWwgc2VjdGlvbnMuIFRoZSBmaXggaXMgZnVuY3Rpb25hbCBhbmQgYWZmZWN0cyB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNTMyOTEzNDliZThmZjlhYTFlMzg3MDA2ZjQ0YmQ0MzczMTI2ZTQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAwMzo1Njo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCmluZGV4IGVhMjE1M2NmMjhkMGEuLjRlNmFhZmFkMzNiZDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zdGF0ZXMuYwpAQCAtODEyLDcgJiM0Mzs4MTIsOCBAQCBzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsCiAJCQkgKiBpbmZpbml0ZSBsb29wIGNoZWNrIHRyaWdnZXJpbmcsIHNlZQogCQkJICogaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpCiAJCQkgKi8KLQkJCWlmIChvbGRfcmVnLSZndDtpdGVyLmJ0ZiAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0ZiB8fAomIzQzOwkJCWlmIChvbGRfcmVnLSZndDt0eXBlICE9IGN1cl9yZWctJmd0O3R5cGUgfHwKJiM0MzsJCQkgICAgb2xkX3JlZy0mZ3Q7aXRlci5idGYgIT0gY3VyX3JlZy0mZ3Q7aXRlci5idGYgfHwKIAkJCSAgICBvbGRfcmVnLSZndDtpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0Zl9pZCB8fAogCQkJICAgIG9sZF9yZWctJmd0O2l0ZXIuc3RhdGUgIT0gY3VyX3JlZy0mZ3Q7aXRlci5zdGF0ZSB8fAogCQkJICAgIC8qIGlnbm9yZSB7b2xkX3JlZyxjdXJfcmVnfS0mZ3Q7aXRlci5kZXB0aCwgc2VlIGFib3ZlICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMKaW5kZXggZmUzNjYzZGVkYmUxNC4uYmFjMzk0YWU3N2Y0NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYwpAQCAtNjEsNiAmIzQzOzYxLDMzIEBAIGludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX2xvY2tfYW5kX3VubG9jaykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0Oz9mZW50cnkucy8mIzM0OyBTWVNfUFJFRklYICYjMzQ7c3lzX2dldHBnaWQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtleHBlY3RlZCBhbiBSQ1UgQ1Mgd2hlbiB1c2luZyBicGZfaXRlcl90YXNrX25leHQmIzM0OykKJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKQomIzQzO2ludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2sgaXQ7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfbmV3KCZhbXA7aXQsIE5VTEwsIEJQRl9UQVNLX0lURVJfQUxMX1BST0NTKTsKJiM0MzsKJiM0MzsJaWYgKGxpa2VseShicGZfZ2V0X3ByYW5kb21fdTMyKCkpKSB7CiYjNDM7CQkvKiBLZWVwIHRoZSBvdXRlciBSQ1UgbG9jayBhY3RpdmUuICovCiYjNDM7CQlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogQ3JlYXRlIGFuIHVucHJvdGVjdGVkIGdhcC4gKi8KJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza19uZXh0KCZhbXA7aXQpOwomIzQzOwlicGZfaXRlcl90YXNrX2Rlc3Ryb3koJmFtcDtpdCk7CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7P2ZlbnRyeS5zLyYjMzQ7IFNZU19QUkVGSVggJiMzNDtzeXNfZ2V0cGdpZCYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7ZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHQmIzM0OykKIGludCBCUEZfUFJPRyhpdGVyX2Nzc19sb2NrX2FuZF91bmxvY2spCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBoaXR0aW5nIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc3RhY2tzYWZlKClgIGZ1bmN0aW9uLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGEgY2hhbmdlIHRvIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgcmVnaXN0ZXIgdHlwZXMgd2hlbiBkZWFsaW5nIHdpdGggaXRlcmF0b3JzLiBJIHNlZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIGZvciByZWdpc3RlciB0eXBlIGVxdWFsaXR5IChgb2xkX3JlZy0mZ3Q7dHlwZSAhPSBjdXJfcmVnLSZndDt0eXBlYCkuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgdGhlIGNvbXBhcmlzb24gd2FzIHNvbGVseSBiYXNlZCBvbiB0aGUgYGJ0ZmAgZmllbGQgb2YgdGhlIGl0ZXJhdG9yLgoKVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGZ1bmN0aW9uYWxseSBmb2N1c2VkIGNoYW5nZSB0byB0aGUgQlBGIHZlcmlmaWVyLiBUaGlzIHNlZW1zIHJlbGF0ZWQgdG8gaW1wcm92aW5nIHRoZSBCUEYgdmVyaWZpZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHR5cGUgY2hlY2sgaXMgYmVpbmcgYWRkZWQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBga2VybmVsL2JwZi9zdGF0ZXMuY2AgYW5kIGdldCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBmb3IgYHN0YWNrc2FmZSgpYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgb2xkX3JlZ2AgYW5kIGBjdXJfcmVnYCByZXByZXNlbnQsIHdoYXQgc2l0dWF0aW9ucyB0cmlnZ2VyIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGdvYWwgb2YgYHN0YWNrc2FmZSgpYCBpcyB3aXRoaW4gdGhlIHZlcmlmaWVyJiMzOTtzIGxvZ2ljLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb24gdGhlIGludGVudCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gVGhlIHRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY2Agd2lsbCBiZSBpbXBvcnRhbnQgdG8gY2hlY2sgaWYgaXQgY292ZXJzIGEgYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YWNrc2FmZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz02OTA9c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzY2FsYXJfcmVnX2Zvcl9zdGFjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNzAxLVxua2VybmVsL2JwZi9zdGF0ZXMuYzo3MDI6c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MDMtXHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk0NT1zdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk2Mi1cbmtlcm5lbC9icGYvc3RhdGVzLmM6OTYzOlx0aWYgKCFzdGFja3NhZmUoZW52LCBvbGQsIGN1ciwgXHUwMDI2ZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2gsIGV4YWN0KSlcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTY0LVx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgQlBGIFZlcmlmaWVyJiMzOTtzIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHN0YWNrc2FmZWAuIFRoaXMgYHN0YWNrc2FmZWAgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgbG9jYWxpemVkIHdpdGhpbiB0aGF0IGZpbGUuIFRoZSBjYWxsIGNoYWluIGlzIHdoYXQmIzM5O3Mga2V5IGhlcmU6IGBzdGFja3NhZmVgIGlzICpjYWxsZWQgYnkqIGBmdW5jX3N0YXRlc19lcXVhbGAsIGFuZCBgZnVuY19zdGF0ZXNfZXF1YWxgIGlzICpjYWxsZWQgYnkqIGBzdGF0ZXNfZXF1YWxgLiBUaGlzIHN1Z2dlc3RzIGEgY2xlYXIgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHN0YXRlIGNvbXBhcmlzb24gd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIGBzdGF0ZXNfZXF1YWxgIGlzIHRoZSBuYXR1cmFsIGZvY2FsIHBvaW50IGZvciBpbnZlc3RpZ2F0aW5nIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgYW5kIGludGVyYWN0aW9ucy4gVGhlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBsb2NhdGUgdGhlICplbnRyeSBwb2ludHMqIHRvIHRoaXMgd2hvbGUgQlBGIHZlcmlmaWVyIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBleGVjdXRpb24gZmxvd3MgaW4gZnJvbS4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbHMgdG8gYHN0YXRlc19lcXVhbGAgaXRzZWxmLCBhbmQgZnJvbSAqdGhvc2UqLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHRyYWNlIGJhY2sgdG8gdGhlIGluaXRpYXRpbmcgY29udGV4dHMuIFRoaXMgaXMgbXkga2V5IHRvIHVubG9ja2luZyB0aGUgdmVyaWZpY2F0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnVuY19zdGF0ZXNfZXF1YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9ODY5PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDQtICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk0NTpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTQ2LVx0XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCB1MzIgaW5zbl9pZHgsIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz05ODA9c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDExLVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAxMjpcdFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cdTAwM2VmcmFtZVtpXSwgY3VyLVx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEzLVx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTkzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgaW4gdGhlIGZpZWxkLCBzcGVha2luZyBkaXJlY3RseSB0byBhbm90aGVyIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYHN0YXRlc19lcXVhbGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gYHN0YXRlc19lcXVhbGAgaXMgcG9wcGluZyB1cCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBhbnl0aW1lIEkgc2VlIHRoYXQgZnVuY3Rpb24gbmFtZSwgaXQmIzM5O3MgYWJvdXQgY29tcGFyaW5nIEJQRiBwcm9ncmFtIHN0YXRlcywgYW5kIHRoYXQmIzM5O3MgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSB2ZXJpZmljYXRpb24gcHV6emxlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGVyZSBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGl0JiMzOTtzIGJlaW5nIHVzZWQgdG8gZW5zdXJlIHByb2dyYW0gY29ycmVjdG5lc3MuIEkgd2FudCB0byBzZWUgaWYgaXQmIzM5O3MgZW1wbG95ZWQgd2hlcmUgSSYjMzk7ZCBleHBlY3Q6IGluIGp1bXAvYnJhbmNoIGFuYWx5c2lzLCBsb29wIHVucm9sbGluZywgb3Igc3RhdGUgbWVyZ2luZy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgZW1wbG95ZWQgaW4gYSBwYXJ0aWN1bGFybHkgcGVyZm9ybWFudCBtYW5uZXIsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcG9zc2libGUgZWZmaWNpZW5jeSBpc3N1ZS4gSSBhbHNvIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFyZWEgSSB3b3VsZCBoYXZlIGVtcGxveWVkIGl0IGluc3RlYWQsIGFuZCBmb3IgYSBkaWZmZXJlbnQgcHVycG9zZS4gV2l0aCBteSBiYWNrZ3JvdW5kLCBJIGNhbiBwcmVkaWN0IGl0cyB1c2UsIGFuZCBzaG91bGQgdmVyaWZ5IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGVtcGxveWVkIGFzIGl0IG91Z2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGVzX2VxdWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzAxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgc3RhdGVzX2VxdWFsYC4gTXkgZ3V0IHNheXMgaXQmIzM5O3MgbGlrZWx5IG5lc3RsZWQgd2l0aGluIHRoZSBga2VybmVsL2JwZi9zdGF0ZXMuY2AgZmlsZSBzaW5jZSBpdCBzb3VuZHMgbGlrZSBhIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCB0aGUgaW50ZXJuYWwgc3RhdGUgcmVwcmVzZW50YXRpb24uIEhvd2V2ZXIsIGl0JiMzOTtzIGFsc28gcXVpdGUgcG9zc2libGUgaXQmIzM5O3MgY2FsbGVkIGZyb20gc29tZXdoZXJlIGxpa2UgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEhtbW0sIGlzIGl0IHBvc3NpYmxlIHRoaXMgaXMgYSBzaGFyZWQgZnVuY3Rpb24/IE1heWJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIGV4cG9ydGVkLCBvciBwZXJoYXBzIGl0JiMzOTtzIGluIGEgcmVsZXZhbnQgaGVhZGVyIGZpbGUuIFJhdGhlciB0aGFuIGNoYXNpbmcgZG93biBhIGdvb3NlLCBJIHNob3VsZCBmaXJzdCBkaXJlY3RseSB2ZXJpZnkgaXQmIzM5O3MgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBCZXN0IHRvIHN0YXJ0IHRoZXJlIGFuZCBiZSBzdXJlLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgaW4gdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0ZXNfZXF1YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9ODY5PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDQtICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk0NTpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTQ2LVx0XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCB1MzIgaW5zbl9pZHgsIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz05NzI9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc5LVxua2VybmVsL2JwZi9zdGF0ZXMuYzo5ODA6c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk4MS1cdFx0XHQgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxMS1cdFx0XHRyZXR1cm4gZmFsc2U7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwMTI6XHRcdGlmICghZnVuY19zdGF0ZXNfZXF1YWwoZW52LCBvbGQtXHUwMDNlZnJhbWVbaV0sIGN1ci1cdTAwM2VmcmFtZVtpXSwgaW5zbl9pZHgsIGV4YWN0KSlcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxMy1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMjM5PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzMyLVx0XHRcdGlmIChpc19pdGVyX25leHRfaW5zbihlbnYsIGluc25faWR4KSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzMzOlx0XHRcdFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMzNC1cdFx0XHRcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXJfZnJhbWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQyLVx0XHRcdFx0XHRpdGVyX3JlZyA9IFx1MDAyNmN1cl9mcmFtZS1cdTAwM2VyZWdzW0JQRl9SRUdfMV07XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNDM6XHRcdFx0XHRcdC8qIGN1cnJlbnQgc3RhdGUgaXMgdmFsaWQgZHVlIHRvIHN0YXRlc19lcXVhbCgpLFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQ0LVx0XHRcdFx0XHQgKiBzbyB3ZSBjYW4gYXNzdW1lIHZhbGlkIGl0ZXIgYW5kIHJlZyBzdGF0ZSxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNTctXHRcdFx0XHRpZiAoc2wtXHUwMDNlc3RhdGUubWF5X2dvdG9fZGVwdGggIT0gY3VyLVx1MDAzZW1heV9nb3RvX2RlcHRoIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzU4Olx0XHRcdFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1OS1cdFx0XHRcdFx0bG9vcCA9IHRydWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzYzLVx0XHRcdGlmIChicGZfY2FsbHNfY2FsbGJhY2soZW52LCBpbnNuX2lkeCkpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM2NDpcdFx0XHRcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjUtXHRcdFx0XHRcdGxvb3AgPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM3MS1cdFx0XHRpZiAoc3RhdGVzX21heWJlX2xvb3BpbmcoXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1cikgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNzI6XHRcdFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIEVYQUNUKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM3My1cdFx0XHQgICAgIWl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1cikgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDA0LVx0XHRsb29wID0gaW5jb21wbGV0ZV9yZWFkX21hcmtzKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUpO1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDA1Olx0XHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgbG9vcCA/IFJBTkdFX1dJVEhJTiA6IE5PVF9FWEFDVCkpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwNi1oaXQ6XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDQ0LVx0XHRcdCAqXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0NDU6XHRcdFx0ICogLSBXaGVuIGEgdmVyaWZpY2F0aW9uIHBhdGggZW5jb3VudGVycyBhIGBzdGF0ZXNfZXF1YWwoLi4uLFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDQ2LVx0XHRcdCAqICAgUkFOR0VfV0lUSElOKWAgY29uZGl0aW9uLCB0aGVyZSBleGlzdHMgYSBjYWxsIGNoYWluIGRlc2NyaWJpbmcgdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmFjaW5nIHRoZSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIENhbGxzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgd2UgZGV0ZXJtaW5lIGlmIGEgQlBGIHN0YXRlIGhhcyBiZWVuIHZpc2l0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBnYXRld2F5IHRvIGNvbXBhcmluZyBzdGF0ZXMgdXNpbmcgYHN0YXRlc19lcXVhbGAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIHN5c3RlbSYjMzk7cyBsb2dpYyBpcyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodHMgaW50byB0aGUgZXhlY3V0aW9uIHBhdGhzIHdoZXJlIHN0YXRlIGNvbXBhcmlzb25zIGFyZSBjZW50cmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9MTIxND1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzgtXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzk6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTI0MC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NDU2PXN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0OTMtXHRcdGlmIChicGZfaXNfcHJ1bmVfcG9pbnQoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc0OTQ6XHRcdFx0ZXJyID0gYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NDk1LVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgZG9fY2hlY2tgIGZ1bmN0aW9uIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIEJQRiB2ZXJpZmllciwgY2FsbGVkIHRocm91Z2ggdGhlIGBicGZfY2hlY2tgIGZ1bmN0aW9uLCB3aGljaCBpcywgb2YgY291cnNlLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIHdob2xlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIGBicGZfY2hlY2tgIGl0c2VsZiBnZXRzIGNhbGxlZCBieSBgYnBmX3Byb2dfbG9hZGAsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kIGFzIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50IGZvciB0ZXN0aW5nLgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgdGVzdHMuIEFoLCBoZXJlJiMzOTtzIG9uZTogYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY2AuIFRoaXMgaXMgcmVsYXRlZCB0byBgYnBmX2l0ZXJfdGFza19uZXh0YCwgZ29vZC4KClRoZSBjb2RlIGZpeCByZWZlcmVuY2VzIGEgYHN0YWNrc2FmZWAgaXNzdWUuIFRoZSBjb21taXQgbG9va3MgbGlrZSB0aGlzOgoKYGBgYwotCQkJaWYgKG9sZF9yZWctJmd0O2l0ZXIuYnRmICE9IGN1cl9yZWctJmd0O2l0ZXIuYnRmIHx8CiYjNDM7CQkJaWYgKG9sZF9yZWctJmd0O3R5cGUgIT0gY3VyX3JlZy0mZ3Q7dHlwZSB8fAomIzQzOwkJCSAgICBvbGRfcmVnLSZndDtpdGVyLmJ0ZiAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0ZiB8fApgYGAKClJpZ2h0LCBpdCYjMzk7cyBhIGJ1ZyBmaXguIExvb2tzIGxpa2Ugd2Ugd2VyZSBtaXNzaW5nIGEgY2hlY2sgb24gYG9sZF9yZWctJmd0O3R5cGVgIGJlZm9yZSBhY2Nlc3NpbmcgYG9sZF9yZWctJmd0O2l0ZXIuYnRmYC4gVGhpcyBpbXBsaWVzIGBvbGRfcmVnLSZndDtpdGVyLmJ0ZmAgaXMgcGFydCBvZiBzb21lIGtpbmQgb2YgdW5pb24gb3Igc3RydWN0LCBvciBhIGZpZWxkIG9mIGEgZGlmZmVyZW50IHR5cGUuIEkgbmVlZCB0byBrbm93IGhvdyB0aGVzZSByZWdpc3RlcnMgYXJlIGRlZmluZWQuIEkgc2hvdWxkIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAuIEkgY2FuJiMzOTt0IGJlIHN1cmUgdGhlIGBpdGVyLmJ0ZmAgZmllbGQgaXMgb25seSB1c2VkIGlmIGB0eXBlYCBzYXlzIGl0IGlzLCBzbyBjaGVja2luZyB0aGF0IGB0eXBlYCBpcyBjb3JyZWN0IGlzIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGJwZl9yZWdfc3RhdGUgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTMyPWVudW0gYnBmX2l0ZXJfc3RhdGUge1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMzctXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjM4OnN0cnVjdCBicGZfcmVnX3N0YXRlIHtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMzktXHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODgyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCwgcmVmbGVjdGluZyBhIHNlYXNvbmVkIHVuZGVyc3RhbmRpbmc6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgUmVnaXN0ZXIgU3RhdGUgU3RydWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoZSBgc3RydWN0IGJwZl9yZWdfc3RhdGVgLiBJIG5lZWQgdG8gcmVhbGx5IGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiBhIEJQRiByZWdpc3Rlci4gSSBrbm93LCBmcm9tIGV4cGVyaWVuY2UsIHRoaXMgaXMgdGhlIGNydXggb2YgdW5kZXJzdGFuZGluZyBwcm9ncmFtIGFuYWx5c2lzIGFuZCB2ZXJpZmljYXRpb24sIGFuZCBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCBleGVjdXRpb24uCgpJIGV4cGVjdCB0byBzZWUgZmllbGRzIHRoYXQgaW5kaWNhdGUgdGhlIHBvc3NpYmxlIHZhbHVlcyB3aXRoaW4gYSByZWdpc3RlcjogaXMgaXQgYSBjb25zdGFudD8gSWYgc28sIHdoYXQgaXMgaXRzIHZhbHVlPyBEb2VzIGl0IGhvbGQgdGhlIGFkZHJlc3Mgb2YgYSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmUsIGFuZCBpZiBzbywgd2hpY2ggb25lPyBJcyBpdCBhIHBvaW50ZXIgdG8gdXNlciBtZW1vcnk/IElmIHNvLCBhcmUgdGhlcmUgYW55IGtub3duIGJvdW5kcyBvciBvZmZzZXRzPyBJJiMzOTttIGFudGljaXBhdGluZyBlbGVtZW50cyB0byBkZXNjcmliZSByYW5nZXMgYW5kIGNvbnN0cmFpbnRzIOKAkyB0aGluZ3MgbGlrZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcywgd2hldGhlciB0aGUgcmVnaXN0ZXIgaG9sZHMgYSB2YWxpZCBwb2ludGVyIG9yIGEgc2NhbGFyLCBtYXliZSBldmVuIGEgZmxhZyB0byBzaG93IGlmIHRoZSByZWdpc3RlciBjb250ZW50IGNhbiBiZSBkZXJpdmVkIGZyb20gb3RoZXIgcmVnaXN0ZXJzLgoKSeKAmW0gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHN5bWJvbGljIHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQuIEFyZSB0aGV5IGNvbmNyZXRlLCBvciBpcyB0aGlzIGFuIGFic3RyYWN0IGludGVycHJldGF0aW9uPyBJcyB0aGVyZSBhIG5vdGlvbiBvZiAmIzM0O3RhaW50aW5nJiMzNDsgb3IgJiMzNDtkZXBlbmRlbmN5JiMzNDsgdHJhY2tlZCwgbWVhbmluZyB3aGljaCBwcmlvciBpbnN0cnVjdGlvbihzKSBoYXZlIGluZmx1ZW5jZWQgd2hhdCBpcyBwcmVzZW50IGluIGEgcmVnaXN0ZXI/IEkmIzM5O20gaG9waW5nIHRvIHNlZSBhIHNvcGhpc3RpY2F0ZWQgZW5jb2Rpbmcgb2YgdGhlc2UgcmVsYXRpb25zaGlwcywgbWF5YmUgZXZlbiB0cmFja2luZyBob3cgdGhlIHZlcmlmaWVyICppbmZlcnMqIG5ldyBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlciBjb250ZW50cyB0aHJvdWdoIGJyYW5jaCBhbmFseXNpcyBhbmQgbG9vcCB1bnJvbGxpbmcuCgpVbHRpbWF0ZWx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBlbmNhcHN1bGF0ZXMgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gbW9kZWwgcmVnaXN0ZXIgdmFsdWVzIGFjcm9zcyBhbGwgcG9zc2libGUgZXhlY3V0aW9uIHBhdGhzLiBUaGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNvcGhpc3RpY2F0ZWQgdGVjaG5pcXVlcyB0aGF0IHRoZSBCUEYgdmVyaWZpZXIgZW1wbG95cyB0byBhY2hpZXZlIGl0cyBjb3JlIG1lbW9yeSBzYWZldHkgYW5kIHZhbGlkYXRpb24gZ29hbHMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGRvbmUgaXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzg6XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XG4gIDM5Olx0XHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xuICA0MDpcdFx0ZW51bSBicGZfcmVnX3R5cGUgdHlwZTtcbiAgNDE6XHRcdC8qXG4gIDQyOlx0XHQgKiBDb25zdGFudCBkZWx0YSBiZXR3ZWVuIFwmIzM0O2xpbmtlZFwmIzM0OyBzY2FsYXJzIHdpdGggdGhlIHNhbWUgSUQuXG4gIDQzOlx0XHQgKi9cbiAgNDQ6XHRcdHMzMiBkZWx0YTtcbiAgNDU6XHRcdHVuaW9uIHtcbiAgNDY6XHRcdFx0LyogdmFsaWQgd2hlbiB0eXBlID09IFBUUl9UT19QQUNLRVQgKi9cbiAgNDc6XHRcdFx0aW50IHJhbmdlO1xuICA0ODpcdFxuICA0OTpcdFx0XHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxuICA1MDpcdFx0XHQgKiAgIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTFxuICA1MTpcdFx0XHQgKi9cbiAgNTI6XHRcdFx0c3RydWN0IHtcbiAgNTM6XHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwX3B0cjtcbiAgNTQ6XHRcdFx0XHQvKiBUbyBkaXN0aW5ndWlzaCBtYXAgbG9va3VwcyBmcm9tIG91dGVyIG1hcFxuICA1NTpcdFx0XHRcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcbiAgNTY6XHRcdFx0XHQgKiBwb2ludGluZyB0byBpbm5lciBtYXBzLlxuICA1NzpcdFx0XHRcdCAqL1xuICA1ODpcdFx0XHRcdHUzMiBtYXBfdWlkO1xuICA1OTpcdFx0XHR9O1xuICA2MDpcdFxuICA2MTpcdFx0XHQvKiBmb3IgUFRSX1RPX0JURl9JRCAqL1xuICA2MjpcdFx0XHRzdHJ1Y3Qge1xuICA2MzpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAgNjQ6XHRcdFx0XHR1MzIgYnRmX2lkO1xuICA2NTpcdFx0XHR9O1xuICA2NjpcdFxuICA2NzpcdFx0XHRzdHJ1Y3QgeyAvKiBmb3IgUFRSX1RPX01FTSB8IFBUUl9UT19NRU1fT1JfTlVMTCAqL1xuICA2ODpcdFx0XHRcdHUzMiBtZW1fc2l6ZTtcbiAgNjk6XHRcdFx0fTtcbiAgNzA6XHRcbiAgNzE6XHRcdFx0LyogRm9yIGR5bnB0ciBzdGFjayBzbG90cyAqL1xuICA3MjpcdFx0XHRzdHJ1Y3Qge1xuICA3MzpcdFx0XHRcdGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGU7XG4gIDc0Olx0XHRcdFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cbiAgNzU6XHRcdFx0XHQgKiBXZSBuZWVkIHRvIHRyYWNrIHdoaWNoIHNsb3QgaXMgdGhlIGZpcnN0IHNsb3RcbiAgNzY6XHRcdFx0XHQgKiB0byBwcm90ZWN0IGFnYWluc3QgY2FzZXMgd2hlcmUgdGhlIHVzZXIgbWF5IHRyeSB0b1xuICA3NzpcdFx0XHRcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXG4gIDc4Olx0XHRcdFx0ICogZHlucHRyLlxuICA3OTpcdFx0XHRcdCAqL1xuICA4MDpcdFx0XHRcdGJvb2wgZmlyc3Rfc2xvdDtcbiAgODE6XHRcdFx0fSBkeW5wdHI7XG4gIDgyOlx0XG4gIDgzOlx0XHRcdC8qIEZvciBicGZfaXRlciBzdGFjayBzbG90cyAqL1xuICA4NDpcdFx0XHRzdHJ1Y3Qge1xuICA4NTpcdFx0XHRcdC8qIEJURiBjb250YWluZXIgYW5kIEJURiB0eXBlIElEIGRlc2NyaWJpbmdcbiAgODY6XHRcdFx0XHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXHUwMDNjdHlwZVx1MDAzZSBvZiBhbiBpdGVyYXRvciBzdGF0ZVxuICA4NzpcdFx0XHRcdCAqL1xuICA4ODpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAgODk6XHRcdFx0XHR1MzIgYnRmX2lkO1xuICA5MDpcdFx0XHRcdC8qIHBhY2tpbmcgZm9sbG93aW5nIHR3byBmaWVsZHMgdG8gZml0IGl0ZXIgc3RhdGUgaW50byAxNiBieXRlcyAqL1xuICA5MTpcdFx0XHRcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcbiAgOTI6XHRcdFx0XHRpbnQgZGVwdGg6MzA7XG4gIDkzOlx0XHRcdH0gaXRlcjtcbiAgOTQ6XHRcbiAgOTU6XHRcdFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xuICA5NjpcdFx0XHRzdHJ1Y3Qge1xuICA5NzpcdFx0XHRcdGVudW0ge1xuICA5ODpcdFx0XHRcdFx0SVJRX05BVElWRV9LRlVOQyxcbiAgOTk6XHRcdFx0XHRcdElSUV9MT0NLX0tGVU5DLFxuIDEwMDpcdFx0XHRcdH0ga2Z1bmNfY2xhc3M7XG4gMTAxOlx0XHRcdH0gaXJxO1xuIDEwMjpcdFxuIDEwMzpcdFx0XHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXG4gMTA0Olx0XHRcdHN0cnVjdCB7XG4gMTA1Olx0XHRcdFx0dW5zaWduZWQgbG9uZyByYXcxO1xuIDEwNjpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcmF3MjtcbiAxMDc6XHRcdFx0fSByYXc7XG4gMTA4Olx0XG4gMTA5Olx0XHRcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xuIDExMDpcdFx0fTtcbiAxMTE6XHRcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXG4gMTEyOlx0XHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxuIDExMzpcdFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XG4gMTE0Olx0XHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xuIDExNTpcdFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cbiAxMTY6XHRcdCAqL1xuIDExNzpcdFx0c3RydWN0IHRudW0gdmFyX29mZjtcbiAxMTg6XHRcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxuIDExOTpcdFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cbiAxMjA6XHRcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXG4gMTIxOlx0XHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXG4gMTIyOlx0XHQgKi9cbiAxMjM6XHRcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXG4gMTI0Olx0XHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xuIDEyNTpcdFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXG4gMTI2Olx0XHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cbiAxMjc6XHRcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxuIDEyODpcdFx0ICogY2FtZSBmcm9tLCB3aGVuIG9uZSBpcyB0ZXN0ZWQgZm9yICE9IE5VTEwuXG4gMTI5Olx0XHQgKiBGb3IgUFRSX1RPX01FTV9PUl9OVUxMIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBtZW1vcnkgYWxsb2NhdGlvblxuIDEzMDpcdFx0ICogZm9yIHRoZSBwdXJwb3NlIG9mIHRyYWNraW5nIHRoYXQgaXQmIzM5O3MgZnJlZWQuXG4gMTMxOlx0XHQgKiBGb3IgUFRSX1RPX1NPQ0tFVCB0aGlzIGlzIHVzZWQgdG8gc2hhcmUgd2hpY2ggcG9pbnRlcnMgcmV0YWluIHRoZVxuIDEzMjpcdFx0ICogc2FtZSByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCwgdG8gZGV0ZXJtaW5lIHByb3BlciByZWZlcmVuY2UgZnJlZWluZy5cbiAxMzM6XHRcdCAqIEZvciBzdGFjayBzbG90cyB0aGF0IGFyZSBkeW5wdHJzLCB0aGlzIGlzIHVzZWQgdG8gdHJhY2sgcmVmZXJlbmNlcyB0b1xuIDEzNDpcdFx0ICogdGhlIGR5bnB0ciB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxuIDEzNTpcdFx0ICogU2ltaWxhcmx5IHRvIGR5bnB0cnMsIHdlIHVzZSBJRCB0byB0cmFjayBcJiMzNDtiZWxvbmdpbmdcJiMzNDsgb2YgYSByZWZlcmVuY2VcbiAxMzY6XHRcdCAqIHRvIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgYnBmX2l0ZXIuXG4gMTM3Olx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODczNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIENvcnJ1cHRpb24gd2l0aCBJdGVyYXRvciBBY2Nlc3MqKgoKQWxyaWdodCwgc28gYGl0ZXJgIGlzIGhhbmdpbmcgb2ZmIGEgdW5pb24sIEkgc2VlLiBNeSBjb25jZXJuIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHBvdGVudGlhbCB0eXBlIGNvbmZ1c2lvbi4gSWYgYG9sZF9yZWctJmd0O3R5cGVgICppc24mIzM5O3QqIHRoZSBleHBlY3RlZCBpdGVyYXRvciB0eXBlIChsaWtlbHkgc29tZXRoaW5nIGxpa2UgYFBUUl9UT19TVEFDS2AsIHRob3VnaCBJIGRvbiYjMzk7dCByZWNhbGwgdGhlIGV4YWN0IG5hbWUgb2ZmLWhhbmQpLCB0aGVuIHdlJiMzOTtyZSBwb3RlbnRpYWxseSByZWFkaW5nIGdhcmJhZ2UgZGF0YSwgb3Igd29yc2UsIGFjY2Vzc2luZyBhIGNvbXBsZXRlbHkgdW5yZWxhdGVkIHVuaW9uIG1lbWJlciB3aGVuIHdlIHRyeSB0byBncmFiIGBvbGRfcmVnLSZndDtpdGVyLmJ0ZmAuIFRoaXMgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgdW5kZWZpbmVkIGJlaGF2aW9yLCBtZW1vcnkgY29ycnVwdGlvbiwgb3IgZXZlbiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaWYgd2UmIzM5O3JlIG5vdCBjYXJlZnVsLgoKVGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBpdGVyYXRvcnMgYXJlIHR5cGljYWxseSBzdG9yZWQgaW4gc3RhY2sgc2xvdHMuIFRoaXMgbWFrZXMgdGhlIHBvc3NpYmlsaXR5IG9mIHJlYWRpbmcgdGhlIHdyb25nIHVuaW9uIG1lbWJlciBldmVuIG1vcmUgbGlrZWx5IGlmIHRoZXJlJiMzOTtzIGFueSB0eXBlIGFtYmlndWl0eS4gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlIGNoZWNrIHRoZSBgc3RhY2tzYWZlYCBsb2dpYyBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIEl0JiMzOTtzIGxpa2VseSB0aGF0IHRoZSBjb3JlIGRhdGEgaW50ZWdyaXR5IGlzc3VlIGlzIGFkZHJlc3NlZCB0aGVyZSwgaWYgYW55d2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzkwOlx0XHRcdFx0ICogc3VjaCB2ZXJpZmllciBzdGF0ZXMgYXJlIG5vdCBlcXVpdmFsZW50LlxuIDc5MTpcdFx0XHRcdCAqIHJldHVybiBmYWxzZSB0byBjb250aW51ZSB2ZXJpZmljYXRpb24gb2YgdGhpcyBwYXRoXG4gNzkyOlx0XHRcdFx0ICovXG4gNzkzOlx0XHRcdFx0aWYgKCFyZWdzYWZlKGVudiwgXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXG4gNzk0Olx0XHRcdFx0XHQgICAgIFx1MDAyNmN1ci1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLCBpZG1hcCwgZXhhY3QpKVxuIDc5NTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDc5NjpcdFx0XHRcdGJyZWFrO1xuIDc5NzpcdFx0XHRjYXNlIFNUQUNLX0RZTlBUUjpcbiA3OTg6XHRcdFx0XHRvbGRfcmVnID0gXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gNzk5Olx0XHRcdFx0Y3VyX3JlZyA9IFx1MDAyNmN1ci1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuIDgwMDpcdFx0XHRcdGlmIChvbGRfcmVnLVx1MDAzZWR5bnB0ci50eXBlICE9IGN1cl9yZWctXHUwMDNlZHlucHRyLnR5cGUgfHxcbiA4MDE6XHRcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCAhPSBjdXJfcmVnLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XG4gODAyOlx0XHRcdFx0ICAgICFjaGVja19pZHMob2xkX3JlZy1cdTAwM2VpZCwgY3VyX3JlZy1cdTAwM2VpZCwgaWRtYXApIHx8XG4gODAzOlx0XHRcdFx0ICAgICFjaGVja19pZHMob2xkX3JlZy1cdTAwM2VwYXJlbnRfaWQsIGN1cl9yZWctXHUwMDNlcGFyZW50X2lkLCBpZG1hcCkpXG4gODA0Olx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODA1Olx0XHRcdFx0YnJlYWs7XG4gODA2Olx0XHRcdGNhc2UgU1RBQ0tfSVRFUjpcbiA4MDc6XHRcdFx0XHRvbGRfcmVnID0gXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gODA4Olx0XHRcdFx0Y3VyX3JlZyA9IFx1MDAyNmN1ci1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuIDgwOTpcdFx0XHRcdC8qIGl0ZXIuZGVwdGggaXMgbm90IGNvbXBhcmVkIGJldHdlZW4gc3RhdGVzIGFzIGl0XG4gODEwOlx0XHRcdFx0ICogZG9lc24mIzM5O3QgbWF0dGVyIGZvciBjb3JyZWN0bmVzcyBhbmQgd291bGQgb3RoZXJ3aXNlXG4gODExOlx0XHRcdFx0ICogcHJldmVudCBjb252ZXJnZW5jZTsgd2UgbWFpbnRhaW4gaXQgb25seSB0byBwcmV2ZW50XG4gODEyOlx0XHRcdFx0ICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWVcbiA4MTM6XHRcdFx0XHQgKiBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKClcbiA4MTQ6XHRcdFx0XHQgKi9cbiA4MTU6XHRcdFx0XHRpZiAob2xkX3JlZy1cdTAwM2V0eXBlICE9IGN1cl9yZWctXHUwMDNldHlwZSB8fFxuIDgxNjpcdFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGYgfHxcbiA4MTc6XHRcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmX2lkIHx8XG4gODE4Olx0XHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5zdGF0ZSAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuc3RhdGUgfHxcbiA4MTk6XHRcdFx0XHQgICAgLyogaWdub3JlIHtvbGRfcmVnLGN1cl9yZWd9LVx1MDAzZWl0ZXIuZGVwdGgsIHNlZSBhYm92ZSAqL1xuIDgyMDpcdFx0XHRcdCAgICAhY2hlY2tfaWRzKG9sZF9yZWctXHUwMDNlaWQsIGN1cl9yZWctXHUwMDNlaWQsIGlkbWFwKSlcbiA4MjE6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA4MjI6XHRcdFx0XHRicmVhaztcbiA4MjM6XHRcdFx0Y2FzZSBTVEFDS19JUlFfRkxBRzpcbiA4MjQ6XHRcdFx0XHRvbGRfcmVnID0gXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gODI1Olx0XHRcdFx0Y3VyX3JlZyA9IFx1MDAyNmN1ci1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuIDgyNjpcdFx0XHRcdGlmICghY2hlY2tfaWRzKG9sZF9yZWctXHUwMDNlaWQsIGN1cl9yZWctXHUwMDNlaWQsIGlkbWFwKSB8fFxuIDgyNzpcdFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWlycS5rZnVuY19jbGFzcyAhPSBjdXJfcmVnLVx1MDAzZWlycS5rZnVuY19jbGFzcylcbiA4Mjg6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA4Mjk6XHRcdFx0XHRicmVhaztcbiA4MzA6XHRcdFx0Y2FzZSBTVEFDS19NSVNDOlxuIDgzMTpcdFx0XHRjYXNlIFNUQUNLX1pFUk86XG4gODMyOlx0XHRcdGNhc2UgU1RBQ0tfSU5WQUxJRDpcbiA4MzM6XHRcdFx0Y2FzZSBTVEFDS19QT0lTT046XG4gODM0Olx0XHRcdFx0Y29udGludWU7XG4gODM1Olx0XHRcdC8qIEVuc3VyZSB0aGF0IG5ldyB1bmhhbmRsZWQgc2xvdCB0eXBlcyByZXR1cm4gZmFsc2UgYnkgZGVmYXVsdCAqL1xuIDgzNjpcdFx0XHRkZWZhdWx0OlxuIDgzNzpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA4Mzg6XHRcdFx0fVxuIDgzOTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWdpc3RlciBIYW5kbGluZyBpbiB0aGUgSXRlcmF0aW9uIFN0YWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWzBdYCBpcyBiZWluZyBjaGVja2VkIGJlZm9yZSB3ZSBldmVuIGhpdCB0aGlzIGBzd2l0Y2hgIHN0YXRlbWVudC4mIzM0OyBUaGF0JiMzOTtzIGdvb2QgcHJhY3RpY2UsIGtlZXBzIHRoaW5ncyBvcmdhbml6ZWQuIE5vdywgdGhlIGxvZ2ljLi4uIGlmIGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWzBdYCBpcyBhY3R1YWxseSBgU1RBQ0tfSVRFUmAsIHRoZW4gYG9sZF9yZWdgIGlzIHNldCB0byBwb2ludCB0byBgJmFtcDtvbGQtJmd0O3N0YWNrW3NwaV0uc3BpbGxlZF9wdHJgLiBNYWtlcyBzZW5zZSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgc3BpbGxlZCBwb2ludGVyIGluIHRoYXQgY2FzZS4gQW5kLCBpZiBJJiMzOTttIG5vdCBtaXN0YWtlbiwgYGN1cl9yZWdgIGlzIHBvaW50aW5nIHRvIHRoZSBlcXVpdmFsZW50IGAmYW1wO2N1ci0mZ3Q7c3RhY2tbc3BpXS5zcGlsbGVkX3B0cmAuIEhtbSwgbm93IEkmIzM5O20gZ2V0dGluZyBhIGxpdHRsZSBjdXJpb3VzLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGBjdXItJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWzBdYCBpcyBzb21ldGhpbmcgKm90aGVyKiB0aGFuIGBTVEFDS19JVEVSYD8gVGhhdCYjMzk7cyB0aGUgaW1wb3J0YW50IHBpZWNlIGhlcmUsIHRoZSBoYW5kbGluZyBmb3IgdGhlICpvdGhlciogdHlwZXMuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgdGhlIGNvZGUgYnJhbmNoZXMgYmVmb3JlIHRoaXMgYHN3aXRjaGAuIEkmIzM5O2xsIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvZGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjdXJyZW50IGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzUwOlx0XHRcdCAqIHJlZ3NhZmUoKSB0byBlbnN1cmUgc2NhbGFyIGlkcyBhcmUgY29tcGFyZWQuXG4gNzUxOlx0XHRcdCAqL1xuIDc1MjpcdFx0XHRpZiAoaW0gPT0gMCB8fCBpbSA9PSA0KSB7XG4gNzUzOlx0XHRcdFx0b2xkX3JlZyA9IHNjYWxhcl9yZWdfZm9yX3N0YWNrKGVudiwgXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0sIGltKTtcbiA3NTQ6XHRcdFx0XHRjdXJfcmVnID0gc2NhbGFyX3JlZ19mb3Jfc3RhY2soZW52LCBcdTAwMjZjdXItXHUwMDNlc3RhY2tbc3BpXSwgaW0pO1xuIDc1NTpcdFx0XHRcdGlmIChvbGRfcmVnIFx1MDAyNlx1MDAyNiBjdXJfcmVnKSB7XG4gNzU2Olx0XHRcdFx0XHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfcmVnLCBjdXJfcmVnLCBpZG1hcCwgZXhhY3QpKVxuIDc1NzpcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzU4Olx0XHRcdFx0XHRpICYjNDM7PSAoaW0gPT0gMCA/IEJQRl9SRUdfU0laRSAtIDEgOiAzKTtcbiA3NTk6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDc2MDpcdFx0XHRcdH1cbiA3NjE6XHRcdFx0fVxuIDc2MjpcdFxuIDc2MzpcdFx0XHQvKiBpZiBvbGQgc3RhdGUgd2FzIHNhZmUgd2l0aCBtaXNjIGRhdGEgaW4gdGhlIHN0YWNrXG4gNzY0Olx0XHRcdCAqIGl0IHdpbGwgYmUgc2FmZSB3aXRoIHplcm8taW5pdGlhbGl6ZWQgc3RhY2suXG4gNzY1Olx0XHRcdCAqIFRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZVxuIDc2NjpcdFx0XHQgKi9cbiA3Njc6XHRcdFx0aWYgKG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19NSVNDIFx1MDAyNlx1MDAyNlxuIDc2ODpcdFx0XHQgICAgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX1pFUk8pXG4gNzY5Olx0XHRcdFx0Y29udGludWU7XG4gNzcwOlx0XHRcdGlmIChvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gIT1cbiA3NzE6XHRcdFx0ICAgIGN1ci1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSlcbiA3NzI6XHRcdFx0XHQvKiBFeDogb2xkIGV4cGxvcmVkIChzYWZlKSBzdGF0ZSBoYXMgU1RBQ0tfU1BJTEwgaW5cbiA3NzM6XHRcdFx0XHQgKiB0aGlzIHN0YWNrIHNsb3QsIGJ1dCBjdXJyZW50IGhhcyBTVEFDS19NSVNDIC1cdTAwM2VcbiA3NzQ6XHRcdFx0XHQgKiB0aGlzIHZlcmlmaWVyIHN0YXRlcyBhcmUgbm90IGVxdWl2YWxlbnQsXG4gNzc1Olx0XHRcdFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcbiA3NzY6XHRcdFx0XHQgKi9cbiA3Nzc6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzc4Olx0XHRcdGlmIChpICUgQlBGX1JFR19TSVpFICE9IEJQRl9SRUdfU0laRSAtIDEpXG4gNzc5Olx0XHRcdFx0Y29udGludWU7XG4gNzgwOlx0XHRcdC8qIEJvdGggb2xkIGFuZCBjdXIgYXJlIGhhdmluZyBzYW1lIHNsb3RfdHlwZSAqL1xuIDc4MTpcdFx0XHRzd2l0Y2ggKG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtCUEZfUkVHX1NJWkUgLSAxXSkge1xuIDc4MjpcdFx0XHRjYXNlIFNUQUNLX1NQSUxMOlxuIDc4MzpcdFx0XHRcdC8qIHdoZW4gZXhwbG9yZWQgYW5kIGN1cnJlbnQgc3RhY2sgc2xvdCBhcmUgYm90aCBzdG9yaW5nXG4gNzg0Olx0XHRcdFx0ICogc3BpbGxlZCByZWdpc3RlcnMsIGNoZWNrIHRoYXQgc3RvcmVkIHBvaW50ZXJzIHR5cGVzXG4gNzg1Olx0XHRcdFx0ICogYXJlIHRoZSBzYW1lIGFzIHdlbGwuXG4gNzg2Olx0XHRcdFx0ICogRXg6IGV4cGxvcmVkIHNhZmUgcGF0aCBjb3VsZCBoYXZlIHN0b3JlZFxuIDc4NzpcdFx0XHRcdCAqIChicGZfcmVnX3N0YXRlKSB7LnR5cGUgPSBQVFJfVE9fU1RBQ0ssIC5vZmYgPSAtOH1cbiA3ODg6XHRcdFx0XHQgKiBidXQgY3VycmVudCBwYXRoIGhhcyBzdG9yZWQ6XG4gNzg5Olx0XHRcdFx0ICogKGJwZl9yZWdfc3RhdGUpIHsudHlwZSA9IFBUUl9UT19TVEFDSywgLm9mZiA9IC0xNn1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBEaXNjcmVwYW5jaWVzIGluIFN0YWNrIEl0ZXJhdGlvbioqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgcnVubmluZyB0aHJvdWdoIG15IGhlYWQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbXBhcmlzb246IGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlW0JQRl9SRUdfU0laRSAtIDFdYCBhbmQgYGN1ci0mZ3Q7c3RhY2tbc3BpXS5zbG90X3R5cGVbQlBGX1JFR19TSVpFIC0gMV1gLiBUaGV5JiMzOTtyZSBib3RoIHJlZmVyZW5jaW5nIHRoZSBzYW1lIHN0YWNrIHNsb3QsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBhbmQgdGhleSBib3RoIGV2YWx1YXRlIHRvIGBTVEFDS19JVEVSYC4gIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LgoKQnV0IGhvbGQgb24gYSBzZWNvbmQuIElmIGJvdGggaW5kaWNhdGUgc3RhY2sgaXRlcmF0aW9uLCB3aGljaCBpcyB3aGF0IGBTVEFDS19JVEVSYCBzaG91bGQgcmVwcmVzZW50LCB3aHkgYW0gSSBzZWVpbmcgYSBkaWZmZXJlbmNlIGluIGBvbGRfcmVnLSZndDt0eXBlYCB2ZXJzdXMgYGN1cl9yZWctJmd0O3R5cGVgPyBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLiBTb21ldGhpbmcmIzM5O3Mgbm90IHJpZ2h0LiBUaGUgdHlwZXMgKnNob3VsZCogYmUgdGhlIHNhbWUgaW4gdGhpcyBzaXR1YXRpb24uIEl0JiMzOTtzIGEgY29udHJhZGljdGlvbi4KCk5vdywgbXkgbmV4dCB0aG91Z2h0IGlzLCB3aGF0IGV4YWN0bHkgKmlzKiB0aGUgYHR5cGVgIGZpZWxkIGFzc29jaWF0ZWQgd2l0aCBgU1RBQ0tfSVRFUmA/IEkgbmVlZCB0byByZXZpZXcgaG93IGBTVEFDS19JVEVSYCBpcyBkZWZpbmVkIGFuZCB1c2VkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBgdHlwZWAgZmllbGQgc2lnbmlmaWVzIGluIHJlbGF0aW9uIHRvIHN0YWNrIGl0ZXJhdGlvbi4gTGV0JiMzOTtzIHRyYWNlIGJhY2sgdG8gd2hlcmUgdGhhdCBjb25zdGFudCBpcyBiZWluZyBzZXQgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzdGF0ZSBjb21wYXJpc29uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTVEFDS19JVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9sb2cuYz00OTc9c3RhdGljIGNoYXIgc2xvdF90eXBlX2NoYXJbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL2xvZy5jLTUwMi1cdFtTVEFDS19EWU5QVFJdXHQ9ICYjMzk7ZCYjMzk7LFxua2VybmVsL2JwZi9sb2cuYzo1MDM6XHRbU1RBQ0tfSVRFUl1cdD0gJiMzOTtpJiMzOTssXG5rZXJuZWwvYnBmL2xvZy5jLTUwNC1cdFtTVEFDS19JUlFfRkxBR10gPSAmIzM5O2YmIzM5Oyxcbi0tXG5rZXJuZWwvYnBmL2xvZy5jPTcxMT12b2lkIHByaW50X3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSxcbi0tXG5rZXJuZWwvYnBmL2xvZy5jLTc3NC1cdFx0XHRicmVhaztcbmtlcm5lbC9icGYvbG9nLmM6Nzc1Olx0XHRjYXNlIFNUQUNLX0lURVI6XG5rZXJuZWwvYnBmL2xvZy5jLTc3Ni1cdFx0XHQvKiBvbmx5IG1haW4gc2xvdCBoYXMgaWQgc2V0OyBza2lwIG90aGVycyAqL1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9Mzk4PXN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNDMzLVx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo0MzQ6XHRcdFx0aWYgKHN0eXBlID09IFNUQUNLX0RZTlBUUiB8fCBzdHlwZSA9PSBTVEFDS19JVEVSIHx8XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQzNS1cdFx0XHQgICAgc3R5cGUgPT0gU1RBQ0tfSVJRX0ZMQUcpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz03MDI9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtODA1LVx0XHRcdGJyZWFrO1xua2VybmVsL2JwZi9zdGF0ZXMuYzo4MDY6XHRcdGNhc2UgU1RBQ0tfSVRFUjpcbmtlcm5lbC9icGYvc3RhdGVzLmMtODA3LVx0XHRcdG9sZF9yZWcgPSBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTExOTA9c3RhdGljIGJvb2wgaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cilcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExOTgtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YXRlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTE5OTpcdFx0XHRpZiAoc3RhdGUtXHUwMDNlc3RhY2tbaV0uc2xvdF90eXBlWzBdICE9IFNUQUNLX0lURVIpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMDAtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTE1PXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0OS1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19TSVpFOyBqJiM0MzsmIzQzOylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTA6XHRcdFx0c2xvdC1cdTAwM2VzbG90X3R5cGVbal0gPSBTVEFDS19JVEVSO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTk1MS1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTg2PXN0YXRpYyBib29sIGlzX2l0ZXJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA1LVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBCUEZfUkVHX1NJWkU7IGomIzQzOyYjNDM7KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDY6XHRcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlW2pdID09IFNUQUNLX0lURVIpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwNy1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAxMz1zdGF0aWMgaW50IGlzX2l0ZXJfcmVnX3ZhbGlkX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNy1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19TSVpFOyBqJiM0MzsmIzQzOylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM4Olx0XHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVtqXSAhPSBTVEFDS19JVEVSKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzktXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE1NT1zdGF0aWMgaW50IGlzX2lycV9mbGFnX3JlZ192YWxpZF9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODAtICogICAtIGR5bnB0ciBzdGF0ZSAoU1RBQ0tfRFlOUFRSKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTgxOiAqICAgLSBpdGVyIHN0YXRlIChTVEFDS19JVEVSKS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgyLSAqICAgLSBpcnEgZmxhZyBzdGF0ZSAoU1RBQ0tfSVJRX0ZMQUcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExODQ9c3RhdGljIGJvb2wgaXNfc3RhY2tfc2xvdF9zcGVjaWFsKGNvbnN0IHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwLVx0Y2FzZSBTVEFDS19EWU5QVFI6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MTpcdGNhc2UgU1RBQ0tfSVRFUjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkyLVx0Y2FzZSBTVEFDS19JUlFfRkxBRzpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTE0MD1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MTQ0LVx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MTQ1Olx0dTMyIGNsZWFyX21hc2sgPSAoMSBcdTAwM2NcdTAwM2MgU1RBQ0tfU1BJTEwpIHwgKDEgXHUwMDNjXHUwMDNjIFNUQUNLX0lURVIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTkxNDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTMyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCoqCgpSaWdodCwgc28gSSBzZWUgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCBpbiB0aGUgY29kZSwgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGp1bXBzIHRvIGBTVEFDS19JVEVSYC4gIEl0JiMzOTtzIGxpa2VseSBjb25uZWN0ZWQ7IHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBjbGVhcmluZyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aG9zZSBzdGFjayBpdGVyYXRvcnMsIG1heWJlIHNvbWUgc29ydCBvZiBSQ1UtcHJvdGVjdGVkIHJlZmVyZW5jZXMuIExldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIGl0c2VsZiB0byBjb25maXJtIG15IGh1bmNoIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIGhvdyBpdOKAmXMgaGFuZGxpbmcgdGhvc2UgUkNVIHByb3RlY3RlZCByZWZlcmVuY2VzIGluIHJlbGF0aW9uIHRvIHRoZSBzdGFjayBpdGVyYXRvciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTE0MDpcdHN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG45MTQxOlx0e1xuOTE0MjpcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XG45MTQzOlx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuOTE0NDpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbjkxNDU6XHRcdHUzMiBjbGVhcl9tYXNrID0gKDEgXHUwMDNjXHUwMDNjIFNUQUNLX1NQSUxMKSB8ICgxIFx1MDAzY1x1MDAzYyBTVEFDS19JVEVSKTtcbjkxNDY6XHRcbjkxNDc6XHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlX21hc2soZW52LVx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgc3RhY2ssIGNsZWFyX21hc2ssICh7XG45MTQ4Olx0XHRcdGlmIChyZWctXHUwMDNldHlwZSBcdTAwMjYgTUVNX1JDVSkge1xuOTE0OTpcdFx0XHRcdHJlZy1cdTAwM2V0eXBlIFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpO1xuOTE1MDpcdFx0XHRcdHJlZy1cdTAwM2V0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XG45MTUxOlx0XHRcdH1cbjkxNTI6XHRcdH0pKTtcbjkxNTM6XHR9XG45MTU0Olx0XG45MTU1Olx0c3RhdGljIGludCByZWZfY29udmVydF9hbGxvY19yY3VfcHJvdGVjdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZClcbjkxNTY6XHR7XG45MTU3Olx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuOTE1ODpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbjkxNTk6XHRcdGludCBlcnI7XG45MTYwOlx0XG45MTYxOlx0XHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LVx1MDAzZWN1cl9zdGF0ZSwgaWQpO1xuOTE2MjpcdFxuOTE2MzpcdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoZW52LVx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgKHtcbjkxNjQ6XHRcdFx0aWYgKHJlZy1cdTAwM2VpZCAhPSBpZClcbjkxNjU6XHRcdFx0XHRjb250aW51ZTtcbjkxNjY6XHRcdFx0aWYgKChyZWctXHUwMDNldHlwZSBcdTAwMjYgTUVNX0FMTE9DKSBcdTAwMjZcdTAwMjYgKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUEVSQ1BVKSkge1xuOTE2NzpcdFx0XHRcdHJlZy1cdTAwM2VpZCA9IDA7XG45MTY4Olx0XHRcdFx0cmVnLVx1MDAzZXR5cGUgXHUwMDI2PSB+TUVNX0FMTE9DO1xuOTE2OTpcdFx0XHRcdHJlZy1cdTAwM2V0eXBlIHw9IE1FTV9SQ1U7XG45MTcwOlx0XHRcdH1cbjkxNzE6XHRcdH0pKTtcbjkxNzI6XHRcbjkxNzM6XHRcdHJldHVybiBlcnI7XG45MTc0Olx0fVxuOTE3NTpcdFxuOTE3NjpcdHN0YXRpYyB2b2lkIGNsZWFyX2NhbGxlcl9zYXZlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG45MTc3Olx0XHRcdFx0XHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MpXG45MTc4Olx0e1xuOTE3OTpcdFx0aW50IGk7XG45MTgwOlx0XG45MTgxOlx0XHQvKiBhZnRlciB0aGUgY2FsbCByZWdpc3RlcnMgcjAgLSByNSB3ZXJlIHNjcmF0Y2hlZCAqL1xuOTE4MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkmIzQzOyYjNDM7KSB7XG45MTgzOlx0XHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XG45MTg0Olx0XHRcdF9fY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ3MsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xuOTE4NTpcdFx0fVxuOTE4NjpcdH1cbjkxODc6XHRcbjkxODg6XHRzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjkxODk6XHRcdFx0XHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWdpc3RlciBJdGVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGBicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrYCBmdW5jdGlvbiDigJMgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCByZWdpc3RlciBhbmQgc3RhY2sgc2xvdCB1cGRhdGVzLiBSaWdodCwgaXQgaXRlcmF0ZXMgb3ZlciByZWdpc3RlcnMgKmFuZCogc3RhY2sgc2xvdHMuIFRoZSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGlzIGBjbGVhcl9tYXNrYCDigJMgaWYgaXQgaW5jbHVkZXMgYFNUQUNLX0lURVJgLCB0aGVuIHRoaXMgaXRlcmF0aW9uIGlzIG9wZXJhdGluZyBvbiBgU1RBQ0tfSVRFUmAgc2xvdHMuIE1ha2VzIHNlbnNlLgoKQW5kLCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCBjb25maXJtcyB0aGF0IGl0ICpkb2VzKiB0b3VjaCB0aGVzZSBgU1RBQ0tfSVRFUmAgc2xvdHMuIFRoZSBjb2RlIHNuaXBwZXQgaGVyZToKCmBgYGMKaWYgKHJlZy0mZ3Q7dHlwZSAmYW1wOyBNRU1fUkNVKSB7CglyZWctJmd0O3R5cGUgJmFtcDs9IH4oTUVNX1JDVSB8IFBUUl9NQVlCRV9OVUxMKTsKCXJlZy0mZ3Q7dHlwZSB8PSBQVFJfVU5UUlVTVEVEOwp9CmBgYAoKLi4udGhhdCYjMzk7cyBrZXkuIEl0JiMzOTtzIG1vZGlmeWluZyBgcmVnLSZndDt0eXBlYCAqaWYqIGByZWdgIGhhcyB0aGUgYE1FTV9SQ1VgIGZsYWcgc2V0LiBIb2xkIG9uLi4uIGlmIGByZWdgIGlzIGEgYFNUQUNLX0lURVJgIHNsb3QsIGl0cyBgdHlwZWAgaXMgYmVpbmcgY2hhbmdlZCEgVGhhdCYjMzk7cyB0aGUgcmVhbCBjcnV4IG9mIHRoaXMuCgpCdXQgd2hhdCAqaXMqIGByZWctJmd0O3R5cGVgIGZvciBgU1RBQ0tfSVRFUmA/IFdlIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGhvdyB0aGVzZSBzbG90cyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHdoYXQgdGhlaXIgaW5pdGlhbCB0eXBlcyBhcmUuIFRoZSBgbWFya19zdGFja19zbG90c19pdGVyYCBmdW5jdGlvbiBpcyB0aGUgbmV4dCBsb2dpY2FsIHBsYWNlIHRvIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3RhdGUgdGhpcyBmdW5jdGlvbiBpcyBsZWF2aW5nIHRoZXNlIHN0YWNrIHNsb3RzIGluLCBpZiBgU1RBQ0tfSVRFUmAgaXMgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MTU6XHRzdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIDkxNjpcdFx0XHRcdFx0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbiA5MTc6XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgaW5zbl9pZHgsXG4gOTE4Olx0XHRcdFx0XHQgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkLCBpbnQgbnJfc2xvdHMpXG4gOTE5Olx0e1xuIDkyMDpcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IGJwZl9mdW5jKGVudiwgcmVnKTtcbiA5MjE6XHRcdGludCBzcGksIGksIGosIGlkO1xuIDkyMjpcdFxuIDkyMzpcdFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XG4gOTI0Olx0XHRpZiAoc3BpIFx1MDAzYyAwKVxuIDkyNTpcdFx0XHRyZXR1cm4gc3BpO1xuIDkyNjpcdFxuIDkyNzpcdFx0aWQgPSBhY3F1aXJlX3JlZmVyZW5jZShlbnYsIGluc25faWR4LCAwKTtcbiA5Mjg6XHRcdGlmIChpZCBcdTAwM2MgMClcbiA5Mjk6XHRcdFx0cmV0dXJuIGlkO1xuIDkzMDpcdFxuIDkzMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfc2xvdHM7IGkmIzQzOyYjNDM7KSB7XG4gOTMyOlx0XHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGkgLSBpXTtcbiA5MzM6XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0ID0gXHUwMDI2c2xvdC1cdTAwM2VzcGlsbGVkX3B0cjtcbiA5MzQ6XHRcbiA5MzU6XHRcdFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKHN0KTtcbiA5MzY6XHRcdFx0c3QtXHUwMDNldHlwZSA9IFBUUl9UT19TVEFDSzsgLyogd2UgZG9uJiMzOTt0IGhhdmUgZGVkaWNhdGVkIHJlZyB0eXBlICovXG4gOTM3Olx0XHRcdGlmIChpc19rZnVuY19yY3VfcHJvdGVjdGVkKG1ldGEpKSB7XG4gOTM4Olx0XHRcdFx0aWYgKGluX3JjdV9jcyhlbnYpKVxuIDkzOTpcdFx0XHRcdFx0c3QtXHUwMDNldHlwZSB8PSBNRU1fUkNVO1xuIDk0MDpcdFx0XHRcdGVsc2VcbiA5NDE6XHRcdFx0XHRcdHN0LVx1MDAzZXR5cGUgfD0gUFRSX1VOVFJVU1RFRDtcbiA5NDI6XHRcdFx0fVxuIDk0MzpcdFx0XHRzdC1cdTAwM2VpZCA9IGkgPT0gMCA/IGlkIDogMDtcbiA5NDQ6XHRcdFx0c3QtXHUwMDNlaXRlci5idGYgPSBidGY7XG4gOTQ1Olx0XHRcdHN0LVx1MDAzZWl0ZXIuYnRmX2lkID0gYnRmX2lkO1xuIDk0NjpcdFx0XHRzdC1cdTAwM2VpdGVyLnN0YXRlID0gQlBGX0lURVJfU1RBVEVfQUNUSVZFO1xuIDk0NzpcdFx0XHRzdC1cdTAwM2VpdGVyLmRlcHRoID0gMDtcbiA5NDg6XHRcbiA5NDk6XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19TSVpFOyBqJiM0MzsmIzQzOylcbiA5NTA6XHRcdFx0XHRzbG90LVx1MDAzZXNsb3RfdHlwZVtqXSA9IFNUQUNLX0lURVI7XG4gOTUxOlx0XG4gOTUyOlx0XHRcdG1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBzcGkgLSBpKTtcbiA5NTM6XHRcdH1cbiA5NTQ6XHRcbiA5NTU6XHRcdHJldHVybiAwO1xuIDk1NjpcdH1cbiA5NTc6XHRcbiA5NTg6XHRzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gOTU5Olx0XHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgbnJfc2xvdHMpXG4gOTYwOlx0e1xuIDk2MTpcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IGJwZl9mdW5jKGVudiwgcmVnKTtcbiA5NjI6XHRcdGludCBzcGksIGksIGo7XG4gOTYzOlx0XG4gOTY0Olx0XHRzcGkgPSBpdGVyX2dldF9zcGkoZW52LCByZWcsIG5yX3Nsb3RzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQSBDcml0aWNhbCBCdWcgaW4gdGhlIEJQRiBWZXJpZmllcjogUkNVIFByb3RlY3Rpb24gVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzLCBhbmQgSSB0aGluayBJJiMzOTt2ZSBmb3VuZCBhIHByZXR0eSBuYXN0eSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllci4gSXQgYWxsIHN0YXJ0ZWQgd2hlbiBJIHdhcyBsb29raW5nIGF0IGhvdyBzdGFjayBwb2ludGVycyBhcmUgaGFuZGxlZCB3aXRoIFJDVSBwcm90ZWN0ZWQgbWVtb3J5IGFuZCB1bnRydXN0ZWQgcG9pbnRlcnMuIEkgcmVhbGl6ZWQgdGhhdCB0aGUgYHN0LSZndDt0eXBlYCBmaWVsZCBjYW4gYmUgc2V0IHRvIHRoaW5ncyBsaWtlIGBQVFJfVE9fU1RBQ0sgfCBNRU1fUkNVYCBvciBgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGAuIFRoZW4gSSByZWNhbGxlZCB0aGF0IGBzdGFja3NhZmVgIHdhcyBvbmx5IGNvbXBhcmluZyB0aGUgYGJ0ZmAgZmllbGQgKGBvbGRfcmVnLSZndDtpdGVyLmJ0ZiAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0ZmApIGJ1dCBjcnVjaWFsbHkgKm5vdCogdGhlIGB0eXBlYCBmaWVsZCAoYG9sZF9yZWctJmd0O3R5cGUgIT0gY3VyX3JlZy0mZ3Q7dHlwZWApLgoKVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgcHJldHR5IGFsYXJtaW5nLiBJZiBgb2xkX3JlZ2AgaXMsIHNheSwgYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgLCBtZWFuaW5nIGl0JiMzOTtzIFJDVSBwcm90ZWN0ZWQsIGFuZCBgY3VyX3JlZ2AgaXMgYFBUUl9UT19TVEFDSyB8IFBUUl9VTlRSVVNURURgLCB0aGUgdmVyaWZpZXIgd291bGQgaW5jb3JyZWN0bHkgY29uc2lkZXIgdGhlbSBlcXVpdmFsZW50IGJlY2F1c2UgaXQmIzM5O3Mgbm90IGxvb2tpbmcgYXQgdGhlIGB0eXBlYCBmbGFnLiBUaGlzIG1lYW5zIHRoZSB2ZXJpZmllciBjYW4gZXJyb25lb3VzbHkgYXNzdW1lIGEgc3RhdGUgaXMgc2FmZSB3aGVuIGl04oCZcyBhY3R1YWxseSBsb3N0IGl0cyBSQ1UgcHJvdGVjdGlvbi4KCkFuZCB0aGlzIGlzICpleGFjdGx5KiB3aGF0IHRoZSBgaXRlcnNfdGFza19mYWlsdXJlLmNgIHRlc3QgY2FzZSBpcyBkZW1vbnN0cmF0aW5nISBJIGNhbiBzZWUgaXQuIFdlJiMzOTtyZSBzZXR0aW5nIHVwIHRoZSBSQ1UgbG9jaywgdGhlbiBjb25kaXRpb25hbGx5IHJlbGVhc2luZyBpdCBhbmQgcmVhY3F1aXJpbmcgaXQuIElmIHdlIGhpdCB0aGUgYGVsc2VgIGJyYW5jaCwgYGJwZl9yY3VfcmVhZF91bmxvY2soKWAgZ2V0cyBjYWxsZWQuIFRoaXMgdGhlbiBjYWxscyBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIHdoaWNoIGNsZWFycyB0aGUgYE1FTV9SQ1VgIGZsYWcgYW5kIGFkZHMgdGhlIGBQVFJfVU5UUlVTVEVEYCBmbGFnIHRvIHRoZSBgU1RBQ0tfSVRFUmAgc2xvdC4KClRoZSBuZXh0IGNhbGwgdG8gYGJwZl9pdGVyX3Rhc2tfbmV4dCgmYW1wO2l0KWAgYW5kIHRoaXMgaXMgd2hlcmUgaXQmIzM5O3MgYWxsIGdvaW5nIHdyb25nLiBCZWNhdXNlIHRoZSB2ZXJpZmllciBkb2VzbiYjMzk7dCBjaGVjayB0aGUgYHR5cGVgIGZpZWxkLCBpdCYjMzk7cyBtZXJnaW5nIHRoZXNlIHBhdGhzLCBiZWxpZXZpbmcgdGhlIGl0ZXJhdG9yIGlzIHN0aWxsIHZhbGlkIChSQ1UgcHJvdGVjdGVkKSBldmVuIGluIHRoZSB1bnByb3RlY3RlZCBgZWxzZWAgYnJhbmNoISBUaGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhIGRhdGEgcmFjZSB2dWxuZXJhYmlsaXR5IG1hbmlmZXN0aW5nIGluIHRoZSB2ZXJpZmllciYjMzk7cyBsb2dpYy4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGlzIHdvcnRoIGZ1enppbmcuCgpNeSBndXQgc2F5cyB0aGlzIGlzIGEgY3JpdGljYWwgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBwcm9iYWJseSBgYnBmX2NoZWNrYCBvciBgZG9fY2hlY2tgIG9yIGV2ZW4gdGhlIHByb2JsZW1hdGljIHN0YXRpYyBgc3RhY2tzYWZlYC4gYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQsIGFsdGhvdWdoIGl0JiMzOTtzIHZlcnkgZ2VuZXJpYy4gTWF5YmUgYGJwZl9pdGVyX3Rhc2tfbmV3YCBidXQgdGhhdCYjMzk7cyBhIGhlbHBlci9rZnVuYy4gSSBuZWVkIHRvIGZpbmQgdGhlIGtmdW5jIGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXRlcl90YXNrX25ldyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTQ5MDI9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2Nzc19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTAzLSNlbmRpZlxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDkwNDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGFza19uZXcsIEtGX0lURVJfTkVXIHwgS0ZfUkNVX1BST1RFQ1RFRClcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MDUtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rhc2tfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz0xMTE0PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTExNS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTExNjpfX2JwZl9rZnVuYyBpbnQgYnBmX2l0ZXJfdGFza19uZXcoc3RydWN0IGJwZl9pdGVyX3Rhc2sgKml0LFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMTE3LVx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfX251bGxhYmxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzMDE4PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMzE3LVx0XHRcdFx0ICogSWYgdGhlIGl0ZXJhdG9yJiMzOTtzIGNvbnN0cnVjdG9yICh0aGUgX25ld1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMzE4Olx0XHRcdFx0ICogZnVuY3Rpb24gZS5nLiwgYnBmX2l0ZXJfdGFza19uZXcpIGhhcyBiZWVuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMzMTktXHRcdFx0XHQgKiBhbm5vdGF0ZWQgd2l0aCBCUEYga2Z1bmMgZmxhZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAyMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgdGhlIGJwZl9pdGVyX3Rhc2tfbmV3IEJ1ZyoqCgpPa2F5LCBzbyB0aGUga2Z1bmMgaW52b2x2ZWQgaGVyZSBpcyBgYnBmX2l0ZXJfdGFza19uZXdgLiBCdXQgaG9sZCBvbiwgdGhlIHJlYWwgY3VscHJpdCBzZWVtcyB0byBiZSB0aGUgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBzdGFja3NhZmVgIGxvZ2ljLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBkcmlsbCBkb3duLiBUaGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyIGlzLCBvZiBjb3Vyc2UsIGBicGZfY2hlY2tgLiBBcmUgdGhlcmUgYW55IG90aGVyIGNydWNpYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHZlcmlmaWVyIGJlc2lkZXMgdGhhdCBvbmU/IExldCBtZSBzZWXigKZBaCB5ZXMsIGBmdW5jX3N0YXRlc19lcXVhbGAsIGBzdGF0ZXNfZXF1YWxgLCBhbmQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4KClNpbmNlIGBzdGFja3NhZmVgIGlzIHN0YXRpYywgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0IGl0LiBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGlzICpub3QqIHN0YXRpYywgc28gaXQmIzM5O3MgYSBjYW5kaWRhdGUuIEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIGl0JiMzOTtzIGV4cG9ydGVkIG9yIGdsb2JhbC4gVGhhdCBtaWdodCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9MTIxND1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzgtXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzk6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTI0MC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NDU2PXN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0OTMtXHRcdGlmIChicGZfaXNfcHJ1bmVfcG9pbnQoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc0OTQ6XHRcdFx0ZXJyID0gYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NDk1LVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjQ3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmljYXRpb24gTG9naWMqKgoKQWxyaWdodCwgc28gYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyBhIGdsb2JhbGx5IGFjY2Vzc2libGUgdmFyaWFibGUuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHBsYXlpbmcgYSByb2xlIGluIHRoZSBzdGF0ZSBtYW5hZ2VtZW50IGFjcm9zcyB0aGUgKmVudGlyZSogQlBGIHZlcmlmaWVyIG9wZXJhdGlvbiwgcmF0aGVyIHRoYW4gYmVpbmcgY29uZmluZWQgdG8gYSBzaW5nbGUgZnVuY3Rpb24gb3IgbG9jYWwgY29udGV4dC4gVGhpcyBpbXBsaWVzIGEgcG90ZW50aWFsIGZvciBjb21wbGV4IGludGVyYWN0aW9ucyBhbmQsIHBlcmhhcHMsIG9wcG9ydHVuaXRpZXMgZm9yIHN1YnRsZSBidWdzIG9yIG9wdGltaXphdGlvbnMgcmVsYXRlZCB0byBob3cgdGhlIHZlcmlmaWVyIHRyYWNrcyB3aGF0JiMzOTtzIGJlZW4gYW5hbHl6ZWQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogYGJwZl9jaGVja2AuICBJdCYjMzk7cyBiZWVuIGZsYWdnZWQgYXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gdmVyaWZpY2F0aW9uLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMuIEtub3dpbmcgdGhpcywgbXkgZm9jdXMgaGFzIHRvIGJlIG9uIGZpZ3VyaW5nIG91dCB0aGUgKmluaXRpYWwqIGNvbnRyb2wgZmxvdyB0aHJvdWdoIGBicGZfY2hlY2tgIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgZnJvbSB0aGUgdmVyeSBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgb3BlcmF0aW9uLiBXaGF0IGlucHV0cyBkb2VzIGl0IHRha2U/IFdoYXQgZG9lcyBpdCBpbml0aWFsaXplPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBpdCB1c2VzPyBVbmRlcnN0YW5kaW5nIGBicGZfY2hlY2tgIGlzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwIHRvIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgdmVyaWZpY2F0aW9uIHN0cmF0ZWd5IGFuZCBpdHMgbGlrZWx5IGludGVyYWN0aW9ucyB3aXRoIHRoZSBnbG9iYWwgc3RhdGUgY29udHJvbGxlZCBieSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2l0ZXIuYz01MDQ9aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI1LVx0aWYgKCFicGZwdHJfaXNfbnVsbCh1bGluZm8pKSB7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NTI2Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWxpbmZvLCBzaXplb2YobGluZm8pLFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNy1cdFx0XHRcdFx0ICAgICAgIGxpbmZvX2xlbik7XG4tLVxua2VybmVsL2JwZi9idGYuYz02ODUwPWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy03MDI3LVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvYnRmLmM6NzAyODpcdFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xua2VybmVsL2JwZi9idGYuYy03MDI5LVx0XHR0bmFtZSAmIzQzOz0gc2l6ZW9mKFwmIzM0O2J0Zl90cmFjZV9cJiMzNDspIC0gMTtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQyNj1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy01NjEtICovXG5rZXJuZWwvYnBmL2NmZy5jOjU2MjppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy01NjMte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc3Nj1FWFBPUlRfU1lNQk9MKF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc3Ny1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc3ODppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc3OS1cdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNzAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZnVuY3M7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjcxOlx0XHRyZXQgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odXJlY29yZCwga3JlY19zaXplLCB1cmVjX3NpemUpO1xua2VybmVsL2JwZi9jaGVja19idGYuYy03Mi1cdFx0aWYgKHJldCkge1xuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MjEzPXN0YXRpYyBpbnQgY2hlY2tfYnRmX2xpbmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2xpbmZvOyBpJiM0MzsmIzQzOykge1xua2VybmVsL2JwZi9jaGVja19idGYuYzoyNTQ6XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMjU1LVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYz0zNDE9c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM3Ni1cdFx0LyogZnV0dXJlIHByb29maW5nIHdoZW4gc2l6ZW9mKGJwZl9jb3JlX3JlbG8pIGNoYW5nZXMgKi9cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6Mzc3Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odV9jb3JlX3JlbG8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMzc4LVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy00MDktXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQxMDppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQxMS1cdFx0XHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM3LVxua2VybmVsL2JwZi9jaGVja19idGYuYzo0Mzg6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzktXHRcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNi0gKiBBbmRpIEtsZWVuIC0gRml4IGEgZmV3IGJhZCBidWdzIGFuZCByYWNlcy5cbmtlcm5lbC9icGYvY29yZS5jOjE3OiAqIEtyaXMgS2F0dGVyam9obiAtIEFkZGVkIG1hbnkgYWRkaXRpb25hbCBjaGVja3MgaW4gYnBmX2NoZWNrX2NsYXNzaWMoKVxua2VybmVsL2JwZi9jb3JlLmMtMTgtICovXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjU3ND1ib29sIGJwZl9wcm9nX21hcF9jb21wYXRpYmxlKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjU4Ni1cbmtlcm5lbC9icGYvY29yZS5jOjI1ODc6c3RhdGljIGludCBicGZfY2hlY2tfdGFpbF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTg4LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQzLVx0XHQvKlxua2VybmVsL2JwZi9jb3JlLmM6MjY0NDpcdFx0ICogSWYgZW52IGlzIG5vdCBOVUxMLCB3ZSBhcmUgY2FsbGVkIGZyb20gdGhlIGVuZCBvZiBicGZfY2hlY2soKSwgYXQgdGhpc1xua2VybmVsL2JwZi9jb3JlLmMtMjY0NS1cdFx0ICogcG9pbnQsIG9ubHkgaW5zbl9hdXhfZGF0YSBpcyB1c2VkIGFmdGVyIGZhaWx1cmUsIHNvIGl0IHNob3VsZCBiZSByZXN0b3JlZFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI2ODA9c3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjcyNi1cdCAqL1xua2VybmVsL2JwZi9jb3JlLmM6MjcyNzpcdCplcnIgPSBicGZfY2hlY2tfdGFpbF9jYWxsKGZwKTtcbmtlcm5lbC9icGYvY29yZS5jLTI3MjgtXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzQxNS1cbmtlcm5lbC9icGYvY29yZS5jOjM0MTY6dTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICpwKVxua2VybmVsL2JwZi9jb3JlLmMtMzQxNy17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05MC0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cdFx0XHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MDY9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzEyMS1cdC8qIHJ1biBlQlBGIHZlcmlmaWVyICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTIyOlx0ZXJyID0gYnBmX2NoZWNrKFx1MDAyNnByb2csIGF0dHIsIHVhdHRyLCBhdHRyX2xvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTIzLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjI0PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NTYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzU3Olx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc1OC1cdFx0XHRcdFx0ICAgICAgXHUwMDI2dGd0X2luZm8pO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwODk9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MTAzLVx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NTEwNDpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIGxlbiwgaW5mb19sZW4pO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTEwNS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM3OT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM4OS1cdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MzkwOlx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MzkxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDUwPXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ1OTpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDYwLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDY2PXN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ3Ni1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0Nzc6XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzgtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU1MDk9c3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTE3LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTUxODpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTE5LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02Mjk0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzAyLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjMwMzpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0ciwgc2l6ZW9mKGF0dHIpLCBzaXplKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMDQtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTQtXHRpZiAoY21kIFx1MDAyNiBCUEZfQ09NTU9OX0FUVFJTKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzE1Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHJfY29tbW9uLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxNi1cdFx0XHRcdFx0ICAgICAgIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfY29tbW9uX2F0dHIsIGxvZ190cnVlX3NpemUpLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwODY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDk3Olx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTgtXHRcdFx0XHQgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MjI9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjM2Olx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShidGYsIHByb2csIGlkc1tpXSwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzNy1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTc9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5Oi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MC0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIwNTk9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fcmJ0cmVlX25vZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwNzAtICogTFNNIGhvb2tzIGFuZCBpdGVycyAoYm90aCBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUpIGFyZSBzYWZlLlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMDcxOiAqIEFueSBzbGVlcGFibGUgcHJvZ3MgYXJlIGFsc28gc2FmZSBzaW5jZSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCgpIGVuZm9yY2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjA3Mi0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MDk2PXN0YXRpYyBib29sIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTA5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MTEwOmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTExLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTIzPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU1My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTU1NDpcdHJldCA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIHByb2csIHRndF9wcm9nLCBidGZfaWQsIFx1MDAyNnRndF9pbmZvKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU1NS1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjIyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjIzOmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYyNC1cdFx0XHRcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDA1Nj1zdGF0aWMgZW51bSBicGZfc2lnX2tleXJpbmcgYnBmX2NsYXNzaWZ5X2tleXJpbmcoczMyIGtleXJpbmdfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDcwLS8qXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAwNzE6ICogVmVyaWZ5IHRoZSBQS0NTIzcgc2lnbmF0dXJlIG9mIGEgbG9hZGVkIHByb2dyYW0uIENhbGxlZCBmcm9tIGJwZl9jaGVjaygpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNzItICogb25jZSB0aGUgcHJvZ3JhbSYjMzk7cyBtZXRhZGF0YSBtYXBzIGhhdmUgYmVlbiByZXNvbHZlZCBpbnRvIHVzZWRfbWFwcywgc29cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwNzk9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTk1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTk2OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTk3LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjEwLVx0LyogJiMzOTtzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiYjMzk7IGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCYjMzk7cyBub3Qgc21hbGwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAyMTE6XHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyMTItXHQgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMDMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMDQ6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMDUtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMxNS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDMxNjpcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMxNy1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzI5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzMwOlx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzMxLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyOTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVmVyaWZpY2F0aW9uIEJ1ZyBIdW50aW5nIEpvdXJuZXkqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyB0aGlzIEJQRiB2ZXJpZmllciBidWcuIFRoZSBlbnRyeSBwb2ludCwgYXMgSSBzZWUgaXQsIGlzIGBicGZfY2hlY2tgIOKAkyB0aGF0JiMzOTtzIHRoZSBtYWluIGZ1bmN0aW9uIHRoZSBzeXN0ZW0gdXNlcywgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgYnBmX3Byb2dfbG9hZGAuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBgYnBmX2NoZWNrYCB3b3VsZCBiZSB0aGUgYmVzdCBmb2N1cywgYnV0IGl0JiMzOTtzIGEgdmVyeSBnZW5lcmljIGZ1bmN0aW9uLCBhbmQgSSBuZWVkIHRvIGJlIG1vcmUgc3BlY2lmaWMuCgpUaGVuLCBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGFuZCBsYW5kZWQgb24gYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gSSBzZWUgdGhhdCBgZG9fY2hlY2tgIHJ1bnMgdGhlIG1haW4gbG9vcCwgYW5kIGBmdW5jX3N0YXRlc19lcXVhbGAgaXMgY2FsbGVkIHRocm91Z2ggYHN0YXRlc19lcXVhbGAsIHdoaWNoIGlzIGNhbGxlZCBieSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciAtIG1vcmUgc3BlY2lmaWNpdHkuIFRoYXQmIzM5O3MgYSBzdHJvbmcgY2FuZGlkYXRlLgoKSSBhbHNvIG5vdGljZWQgYGJwZl9pdGVyX3Rhc2tfbmV3YCwgd2hpY2ggaXMgYSBrZnVuYyB0aGF0IGNyZWF0ZXMgdGhlIGl0ZXJhdG9yLCBpcyByZWxldmFudCB0byB0aGUgdGVzdCBjYXNlLiBCdXQsIGhhbmcgb24uLi4gaXQmIzM5O3MgYSBrZnVuYywgbWVhbmluZyBpdCYjMzk7cyBjYWxsZWQgYXQgcnVudGltZS4gU2luY2UgdGhlIGJ1ZyBpcyBpbiB0aGUgdmVyaWZpZXIsIEkgd2FudCB0byBmdXp6IHRoZSB2ZXJpZmllciwgbm90IHJ1bnRpbWUgY29kZS4gU28sIGxldCYjMzk7cyBrZWVwIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgb24gdGhlIGxpc3QuIGBicGZfY2hlY2tgIGlzIHN0aWxsIHJlbGV2YW50IHRvbywgZ2l2ZW4gaXQgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQsIGFuZCBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIGxldCYjMzk7cyBjaGVjayBmb3IgYW55IHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLCBJJiMzOTtsbCBuZWVkIHRoYXQuIFdoYXQgYWJvdXQgYENPTkZJR19CUEZfSklUYD8gQW5kLCBpcyB0aGVyZSBhbnl0aGluZyByZWxhdGVkIHRvIGBDT05GSUdfVEFTS1NfUkNVYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gVGhlIHRlc3QgY2FzZSB1c2VzIGBicGZfaXRlcl90YXNrX25ld2Agc28gbGV0JiMzOTtzIGNoZWNrIGl0IGluIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2l0ZXJfdGFza19uZXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3Rhc2tfaXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdGFza19pdGVyLmM9MTExND1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMTUtXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjExMTY6X19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfbmV3KHN0cnVjdCBicGZfaXRlcl90YXNrICppdCxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTExNy1cdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX19udWxsYWJsZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzIzMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gYHRhc2tfaXRlci5jYCBmb3IgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsJiMzOTtzIEJQRiBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0YXNrcywgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYW55IHRhc2stc3BlY2lmaWMgQlBGIGNvbmZpZ3VyYXRpb25zIGlzIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyBvciBjb25kaXRpb25zIGRlZmluZWQgaW4gdGhpcyBmaWxlLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIGlmIHRoZSBjb2RlIGhhcyBhbnl0aGluZyBvZiBub3RlLiBMZXQgbWUgdGFrZSBhIGxvb2sgaW5zaWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXNrX2l0ZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT05PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1OTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIEJQRiBUZXN0IENvbmZpZ3VyYXRpb24gYW5kIFJDVSBVc2FnZSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB0aGlzIGNvZGUmIzM5O3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBvYnZpb3VzIG9uZSwgYnV0IGFyZSB0aGVyZSBhbnkgKm90aGVyKiByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YgaGVyZT8gQ3J1Y2lhbCB0byBjaGVjaywgYmVjYXVzZSBkZXBlbmRlbmNpZXMgY2FuIGJlIHN1YnRsZSBpbiBCUEYuCgpOb3csIEkgc2VlIHRoZSB0ZXN0IGNvZGUgbWFrZXMgdXNlIG9mIGBicGZfcmN1X3JlYWRfbG9ja2AuIE9rYXksIHRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byBzb21lIHNoYXJlZCByZXNvdXJjZSwgYW5kIHRoZSBjb2RlIGlzIGNhcmVmdWxseSBhZGhlcmluZyB0byBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIHNlbWFudGljcy4gR290dGEgbWFrZSBzdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCAqd2h5KiB0aGV5JiMzOTtyZSB1c2luZyBSQ1UgaGVyZS4gV2hhdCYjMzk7cyB0aGUgY3JpdGljYWwgc2VjdGlvbj8gV2hhdCBkYXRhIGlzIGJlaW5nIHByb3RlY3RlZD8KCk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgYnBmX3JjdV9yZWFkX2xvY2tgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIHVzZSBoZXJlIGlzIGJvdGggY29ycmVjdCBhbmQgZWZmaWNpZW50LiBMb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGZvciBkZWFkbG9ja3MsIG1pc3NlZCB1cGRhdGVzLCBvciBpbmVmZmljaWVudCBjcml0aWNhbCBzZWN0aW9ucyB3aXRoIFJDVS4gR290dGEgZG91YmxlIGNoZWNrIHRoYXQgdGhlIHVubG9ja3MgYXJlIHByZXNlbnQgYW5kIGNvcnJlY3RseSBtYXRjaGVkIHdpdGggdGhlIGxvY2tzLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGFuZCBrZXJuZWwgYXJlIHBsYXlpbmcgbmljZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcmN1X3JlYWRfbG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTMzNDI9X19icGZfa2Z1bmMgdm9pZCAqYnBmX3Jkb25seV9jYXN0KGNvbnN0IHZvaWQgKm9ial9faWduLCB1MzIgYnRmX2lkX19rKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTMzNDYtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozMzQ3Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZClcbmtlcm5lbC9icGYvaGVscGVycy5jLTMzNDgte1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4ODU9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZG9ubHlfY2FzdCwgS0ZfRkFTVENBTEwpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODg2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmN1X3JlYWRfbG9jaylcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4ODctQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yY3VfcmVhZF91bmxvY2spXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ0NDQ9c3RhdGljIGJvb2wgaW5fc2xlZXBhYmxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ0NDgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDQ0OTovKiBUaGUgbm9uLXNsZWVwYWJsZSBwcm9ncmFtcyBhbmQgc2xlZXBhYmxlIHByb2dyYW1zIHdpdGggZXhwbGljaXQgYnBmX3JjdV9yZWFkX2xvY2soKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ0NTAtICogY2FuIGRlcmVmZXJlbmNlIFJDVSBwcm90ZWN0ZWQgcG9pbnRlcnMgYW5kIHJlc3VsdCBpcyBQVFJfVFJVU1RFRC5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTgyMD1zdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5MjktXHRcdCAqICYjMzk7Y2dyb3VwcyYjMzk7IHBvaW50ZXIgaXMgdW50cnVzdGVkIGlmIHRhc2stXHUwMDNlY2dyb3VwcyBkZXJlZmVyZW5jZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5MzA6XHRcdCAqIGhhcHBlbmVkIGluIGEgc2xlZXBhYmxlIHByb2dyYW0gb3V0c2lkZSBvZiBicGZfcmN1X3JlYWRfbG9jaygpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTkzMS1cdFx0ICogc2VjdGlvbi4gSW4gYSBub24tc2xlZXBhYmxlIHByb2dyYW0gaXQmIzM5O3MgdHJ1c3RlZCB3aGlsZSBpbiBSQ1UgQ1MgKGFrYSBNRU1fUkNVKS5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwOTc9c3RhdGljIGludCBjaGVja19yZXNvdXJjZV9sZWFrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgZXhjZXB0aW9uX2V4aXQsIGJvb2wgY2hlY2tfbG9jaywgY29uc3QgY2hhciAqcHJlZml4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDExNy1cdGlmIChjaGVja19sb2NrIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9yY3VfbG9ja3MpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDExODpcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIGNhbm5vdCBiZSB1c2VkIGluc2lkZSBicGZfcmN1X3JlYWRfbG9jay1lZCByZWdpb25cXG5cJiMzNDssIHByZWZpeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAxMTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTEzNz1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTU4LVx0S0ZfYnBmX3Jkb25seV9jYXN0LFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTU5Olx0S0ZfYnBmX3JjdV9yZWFkX2xvY2ssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNjAtXHRLRl9icGZfcmN1X3JlYWRfdW5sb2NrLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIzMT1CVEZfSUQoZnVuYywgYnBmX3Jkb25seV9jYXN0KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjMyOkJURl9JRChmdW5jLCBicGZfcmN1X3JlYWRfbG9jaylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIzMy1CVEZfSUQoZnVuYywgYnBmX3JjdV9yZWFkX3VubG9jaylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEzNTc9c3RhdGljIGJvb2wgaXNfa2Z1bmNfcmV0X251bGwoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM2NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTM2NTpzdGF0aWMgYm9vbCBpc19rZnVuY19icGZfcmN1X3JlYWRfbG9jayhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjYte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzY3Olx0cmV0dXJuIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JjdV9yZWFkX2xvY2tdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzY4LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTMwMTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxNTEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNTI6XHRyY3VfbG9jayA9IGlzX2tmdW5jX2JwZl9yY3VfcmVhZF9sb2NrKFx1MDAyNm1ldGEpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTUzLVx0cmN1X3VubG9jayA9IGlzX2tmdW5jX2JwZl9yY3VfcmVhZF91bmxvY2soXHUwMDI2bWV0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTUyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJQRiBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgYnBmX3JjdV9yZWFkX2xvY2tgLiBJIHNlZSBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGFuZCBjb21waWxlZCB1bmRlciB0aGUgdW1icmVsbGEgb2YgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbi4gSG93ZXZlciwgbXkgZ3V0IHRlbGxzIG1lIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBlbHNlIGF0IHBsYXksIGVzcGVjaWFsbHkgd2l0aCBteSBiYWNrZ3JvdW5kIGluIEJQRjsgSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBpcyBvZnRlbiBjcnVjaWFsLCBzcGVjaWZpY2FsbHkgZm9yIGtmdW5jcyBhbmQgYW55dGhpbmcgQlRGLWRlcGVuZGVudC4gTXkgZXhwZXJpZW5jZSBzaG93cyB0aGF0IEJURiBpcyBxdWl0ZSBwcmV2YWxlbnQgaGVyZS4gU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBpcyBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCAqcmVxdWlyZWQqIGhlcmU/IFRpbWUgdG8gZGlnIGRlZXBlciBhbmQgY29uZmlybSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfREVCVUdfSU5GT19CVEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTQwPWlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSBzeXNmc19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS00Mi1lbmRpZlxuLS1cbmtlcm5lbC9icGYvYnRmLmM9NjM4Nj1zdGF0aWMgc3RydWN0IGJ0ZiAqYnRmX3BhcnNlX2Jhc2Uoc3RydWN0IGJ0Zl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTYzOTEtXG5rZXJuZWwvYnBmL2J0Zi5jOjYzOTI6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSlcbmtlcm5lbC9icGYvYnRmLmMtNjM5My1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4tLVxua2VybmVsL2JwZi9idGYuYz02NDcyPXN0YXRpYyBfX3UzMiBidGZfcmVsb2NhdGVfaWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBfX3UzMiBpZClcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTY0NzgtXG5rZXJuZWwvYnBmL2J0Zi5jOjY0Nzk6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTY0ODAtXG5rZXJuZWwvYnBmL2J0Zi5jPTY0ODE9c3RhdGljIHN0cnVjdCBidGYgKmJ0Zl9wYXJzZV9tb2R1bGUoY29uc3QgY2hhciAqbW9kdWxlX25hbWUsIGNvbnN0IHZvaWQgKmRhdGEsXG4tLVxua2VybmVsL2JwZi9idGYuYy02NTc2LVxua2VybmVsL2JwZi9idGYuYzo2NTc3OiNlbmRpZiAvKiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUyAqL1xua2VybmVsL2JwZi9idGYuYy02NTc4LVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODQ2Mz1lbnVtIHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg0NjYtXG5rZXJuZWwvYnBmL2J0Zi5jOjg0Njc6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg0Njgtc3RydWN0IGJ0Zl9tb2R1bGUge1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODYwNT1mc19pbml0Y2FsbChidGZfbW9kdWxlX2luaXQpO1xua2VybmVsL2JwZi9idGYuYzo4NjA2OiNlbmRpZiAvKiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUyAqL1xua2VybmVsL2JwZi9idGYuYy04NjA3LVxua2VybmVsL2JwZi9idGYuYz04NjA4PXN0cnVjdCBtb2R1bGUgKmJ0Zl90cnlfZ2V0X21vZHVsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYpXG4tLVxua2VybmVsL2JwZi9idGYuYy04NjEwLVx0c3RydWN0IG1vZHVsZSAqcmVzID0gTlVMTDtcbmtlcm5lbC9icGYvYnRmLmM6ODYxMTojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODYxMi1cdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODYzOD1zdGF0aWMgc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcbmtlcm5lbC9icGYvYnRmLmMtODYzOS17XG5rZXJuZWwvYnBmL2J0Zi5jOjg2NDA6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NDEtXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NTEtXG5rZXJuZWwvYnBmL2J0Zi5jOjg2NTI6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NTMtXHRtdXRleF9sb2NrKFx1MDAyNmJ0Zl9tb2R1bGVfbXV0ZXgpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODY2OD1zdGF0aWMgaW50IGNoZWNrX2J0Zl9rY29uZmlncyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IGNoYXIgKmZlYXR1cmUpXG5rZXJuZWwvYnBmL2J0Zi5jLTg2Njkte1xua2VybmVsL2JwZi9idGYuYzo4NjcwOlx0aWYgKCFtb2R1bGUgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkge1xua2VybmVsL2JwZi9idGYuYy04NjcxLVx0XHRwcl9lcnIoXCYjMzQ7bWlzc2luZyB2bWxpbnV4IEJURiwgY2Fubm90IHJlZ2lzdGVyICVzXFxuXCYjMzQ7LCBmZWF0dXJlKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NzMtXHR9XG5rZXJuZWwvYnBmL2J0Zi5jOjg2NzQ6XHRpZiAobW9kdWxlIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSlcbmtlcm5lbC9icGYvYnRmLmMtODY3NS1cdFx0cHJfd2FybihcJiMzNDttaXNzaW5nIG1vZHVsZSBCVEYsIGNhbm5vdCByZWdpc3RlciAlc1xcblwmIzM0OywgZmVhdHVyZSk7XG4tLVxua2VybmVsL2JwZi9idGYuYz04ODE1PXN0YXRpYyBpbnQgYnRmX2NoZWNrX2tmdW5jX25hbWUoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICpmdW5jX25hbWUsIHUzMiBraW5kKVxua2VybmVsL2JwZi9idGYuYy04ODE2LXtcbmtlcm5lbC9icGYvYnRmLmM6ODgxNzojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODgxOC1cdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtODgzMS1cbmtlcm5lbC9icGYvYnRmLmM6ODgzMjojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODgzMy1cdGd1YXJkKG11dGV4KShcdTAwMjZidGZfbW9kdWxlX211dGV4KTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTk0ODA9c3RhdGljIHN0cnVjdCBicGZfY2FuZF9jYWNoZSAqcG9wdWxhdGVfY2FuZF9jYWNoZShzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKmNhbmRzLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTUwNy1cbmtlcm5lbC9icGYvYnRmLmM6OTUwODojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtOTUwOS1zdGF0aWMgdm9pZCBfX3B1cmdlX2NhbmRfY2FjaGUoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKipjYWNoZSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjcyOD1pbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzQ0LVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mjc0NTpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjc0Ni1cdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTg0PXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk5OC1cdGlmICghYnRmX3ZtbGludXgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTk5Olx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWFwX3B0ciBhY2Nlc3Mgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAwMC1cdFx0cmV0dXJuIC1FTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc4MDM9c3RhdGljIGludCBjaGVja19wc2V1ZG9fYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODE5LVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc4MjA6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2tlcm5lbCBpcyBtaXNzaW5nIEJURiwgbWFrZSBzdXJlIENPTkZJR19ERUJVR19JTkZPX0JURj15IGlzIHNwZWNpZmllZCBpbiBLY29uZmlnLlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc4MjEtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjgwPXN0cnVjdCBidGYgKmJwZl9nZXRfYnRmX3ZtbGludXgodm9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2ODU6XHRpZiAoIWJ0ZiBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODYtXHRcdG11dGV4X2xvY2soXHUwMDI2YnRmX3ZtbGludXhfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDEwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBCUEYgSXRlcmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBmb3IgdGhpcyBCUEYtYmFzZWQgdGFzayBpdGVyYXRpb24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLCBhbmQgSSBhbHNvIG5lZWQgdG8gZW5zdXJlIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuIEJ1dCwgeW91IGtub3cgaG93IGl0IGlzLCBsZXQmIzM5O3MganVzdCBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuCgpTcGVjaWZpY2FsbHksIHRoaXMgdGVzdCB1c2VzIGBicGZfaXRlcl90YXNrX25ld2AuIFNvLCBteSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvdGFza19pdGVyLmNgLCBhbmQgc2VlIGlmIGBicGZfaXRlcl90YXNrX25ld2AgaXRzZWxmIGlzIGdhdGVkIGJlaGluZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmbGFncy4gR290dGEgYmUgdGhvcm91Z2gsIGFuZCBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBjaGVjayBpcyBhbHdheXMgYSBnb29kIGlkZWEgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBtb3JlIGNvbXBsZXggc3R1ZmYuIEl0IHdvdWxkIGJlIGhlbHBmdWwgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcHJlY29uZGl0aW9ucyB0byBjb25zaWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2l0ZXJfdGFza19uZXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3Rhc2tfaXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdGFza19pdGVyLmM9MTExND1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMTUtXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjExMTY6X19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfbmV3KHN0cnVjdCBicGZfaXRlcl90YXNrICppdCxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTExNy1cdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX19udWxsYWJsZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg4NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgSXRlcmF0b3IgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGEgZnV6emluZyBzdHJhdGVneS4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBga2VybmVsL2JwZi90YXNrX2l0ZXIuY2AgaXMgYWx3YXlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kOyBpdCYjMzk7cyBhIHN0YWJsZSB0YXJnZXQuIEkgY29uZmlybWVkIHRoaXMgYnkgY2hlY2tpbmcgdGhlIGBNYWtlZmlsZWAuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGBicGZfY2hlY2tgIHNpbmNlIGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgdmVyaWZpZXIgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoYXQmIzM5O3MgYSAqdmVyeSogYnJvYWQgdGFyZ2V0LiBTbywgSSBkdWcgZGVlcGVyLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGhpZ2hsaWdodHMgdGhlIHByb2JsZW0gaW4gYHN0YWNrc2FmZWAsIHdpdGhpbiBgZnVuY19zdGF0ZXNfZXF1YWxgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHN0YXRlc19lcXVhbGAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIEJpbmdvISBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGxvb2tzIGxpa2UgYSBtb3JlIHByb21pc2luZyBmb2N1cyBiZWNhdXNlIGl0JiMzOTtzIG5vbi1zdGF0aWMgYW5kIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHN0YXRlIGNvbXBhcmlzb24gdGhhdCYjMzk7cyBhdCB0aGUgaGVhcnQgb2YgdGhpcyBidWcuIEkgY29uc2lkZXJlZCBgZG9fY2hlY2tgLCBidXQgdGhhdCYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCB0YXJnZXQuCgpTaW5jZSB0aGlzIGJ1ZyBpcyBhYm91dCBSQ1UtcHJvdGVjdGVkIGl0ZXJhdG9ycywgYW5kIGdpdmVuIHRoZSB0ZXN0IGNhc2VzLCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSBrZnVuY3MgYGJwZl9pdGVyX3Rhc2tfbmV3YCBhbmQgYGJwZl9pdGVyX3Rhc2tfbmV4dGAuIFRoZXNlIGFyZSB0aGUga2Z1bmNzICp1c2VkKiBieSB0aGUgaXRlcmF0b3IgZmVhdHVyZS4gYGJwZl9pdGVyX3Rhc2tfbmV3YCBpcyBkZWZpbmVkIGFzIGBub2lubGluZWAsIGJ1dCwgaW1wb3J0YW50bHksIGl0JiMzOTtzICpub3QqIHN0YXRpYywgc28gaXQmIzM5O3MgZ2xvYmFsbHkgdmlzaWJsZS4KCkluIHN1bW1hcnksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3Q6CgoqICAgKipXb3J0aEZ1enppbmc6KiogWWVzCiogICAqKkZvY3VzU3ltYm9sczoqKiBgYnBmX2NoZWNrYCwgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCwgYGJwZl9pdGVyX3Rhc2tfbmV3YCwgYGJwZl9pdGVyX3Rhc2tfbmV4dGAKKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgQlBGX1NZU0NBTExgLCBgREVCVUdfSU5GT19CVEZgCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIFJDVSBwcm90ZWN0aW9uIGlzc3VlIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGBzdGFja3NhZmVgIGZ1bmN0aW9uLiBUaGUgdmVyaWZpZXIgd2FzIGluY29ycmVjdGx5IG1lcmdpbmcgc3RhdGVzIHdpdGggZGlmZmVyZW50IFJDVSBwcm90ZWN0aW9uIHN0YXR1c2VzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1lbW9yeSB1bnNhZmV0eS4gYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBzdGF0ZSBjb21wYXJpc29ucywgd2hpbGUgYGJwZl9jaGVja2AgaXMgcmVsYXRlZCB0byB0aGUgbW9yZSBiYXNpYyBCUEYgdmVyaWZpY2F0aW9uLCBhbmQgYGJwZl9pdGVyX3Rhc2tfbmV3YCBhbmQgYGJwZl9pdGVyX3Rhc2tfbmV4dGAgYXJlIGltcG9ydGFudCBrZnVuY3MgdG8gZm9jdXMgb24gZm9yIEJQRiBpdGVyYXRvciBmZWF0dXJlIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3Rhc2tfbmV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdGFza19pdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90YXNrX2l0ZXIuYz0xMTE2PV9fYnBmX2tmdW5jIGludCBicGZfaXRlcl90YXNrX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFzayAqaXQsXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMTQ3LVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMTQ4Ol9fYnBmX2tmdW5jIHN0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX2l0ZXJfdGFza19uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrICppdClcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTE0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTc4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkdsb2JhbCBTY29wZSBDaGVjayoqCgpSaWdodCwgdGhpcyBmZWVscyBsaWtlIGl0IGhhcyBpbXBsaWNhdGlvbnMgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBnbG9iYWwuIFRpbWUgdG8gemVybyBpbiBvbiB0aGF0LiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIHdpdGggYSBnbG9iYWwgcmVhY2guCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgY29uZmlybSB0aGF0IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgYWN0dWFsbHkgb3BlcmF0ZXMgYXQgYSBnbG9iYWwgbGV2ZWwuIElzIGl0cyBpbmZsdWVuY2UgbGltaXRlZD8gT3IgaXMgaXQgdHJ1bHkgaW1wYWN0aW5nIHRoZSB3aG9sZSBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9MTIxND1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzgtXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzk6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTI0MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aGluZ3MgbXlzZWxmOgoKKipHbG9iYWwgU2NvcGUgVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIHllcCwgd2UmIzM5O3JlIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIGEgZ2xvYmFsIGNvbnRleHQgaGVyZS4gSW1wb3J0YW50IHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgZG9lcyBgYnBmX2NoZWNrYCBiZWhhdmUgYXMgYSBnbG9iYWxseSBzY29wZWQgZnVuY3Rpb24gb3IgdmFyaWFibGU/IFRpbWUgdG8gZGlnIGEgYml0IGRlZXBlciBhbmQgYXNjZXJ0YWluIGl0cyBzY29wZS4gV2UgbXVzdCBjbGFyaWZ5IHdoZXRoZXIgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGxvY2FsbHksIG9yIGdsb2JhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTU3PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTovKiBicGZfY2hlY2soKSBpcyBhIHN0YXRpYyBjb2RlIGFuYWx5emVyIHRoYXQgd2Fsa3MgZUJQRiBwcm9ncmFtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyMDU5PXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMDcwLSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjA3MTogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwNzItICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTA5Nj1zdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTEwOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTExMDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTExMS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTUyMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1NTMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk1NTQ6XHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1NTUtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYyMi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTYyMzppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MjQtXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwNTY9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3MC0vKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDcxOiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDcyLSAqIG9uY2UgdGhlIHByb2dyYW0mIzM5O3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMDc5PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5NS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDE5NjppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5Ny1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIxMC1cdC8qICYjMzk7c3RydWN0IGJwZl92ZXJpZmllcl9lbnYmIzM5OyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQmIzM5O3Mgbm90IHNtYWxsLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjExOlx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjEyLVx0ICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzAzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzA0Olx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzA1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMTUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMTY6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMTctXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMyOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDMzMDpcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMzMS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODM4CgkJCQkJCQlvdXRwdXQ6IDIwMgoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaW5hbCBUaG91Z2h0cyBvbiBUaGlzIEJQRiBWZXJpZmllciBGaXgqKgoKT2theSwgeWVzLCB0aGlzIGlzIGEgZ2xvYmFsbHkgcmVsZXZhbnQgcGF0Y2gsIG5vIHF1ZXN0aW9uIGFib3V0IGl0LiBJJiMzOTttIHNlZWluZyB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBoZXJlOiBgYnBmX2NoZWNrYCwgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCwgYGJwZl9pdGVyX3Rhc2tfbmV3YCwgYW5kIGBicGZfaXRlcl90YXNrX25leHRgLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAuIFRoZSBsb2dpYyBiZWhpbmQgdGhlIGNoYW5nZSBpcyBzdHJhaWdodGZvcndhcmQsIHRoYW5rZnVsbHkuCgpMZXQgbWUganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiB0aGF0IHJlYXNvbmluZy4gVGhlIGNydXggb2YgaXQgaXMgYWRkcmVzc2luZyBhIG1pc3NpbmcgdHlwZSBjaGVjayB3aXRoaW4gYHN0YWNrc2FmZSgpYCBmb3IgYFNUQUNLX0lURVJgIHNsb3RzLiBXaXRob3V0IHRoaXMsIHRoZSBCUEYgdmVyaWZpZXIgY291bGQgbWlzdGFrZW5seSBlcXVhdGUgaXRlcmF0b3Igc3RhdGVzIGV2ZW4gaWYgdGhlaXIgdW5kZXJseWluZyByZWdpc3RlciB0eXBlcyBkaWZmZXIg4oCTIGltYWdpbmUgb25lIGJlaW5nIFJDVS1wcm90ZWN0ZWQgYW5kIHRoZSBvdGhlciBiZWNvbWluZyB1bnRydXN0ZWQgYWZ0ZXIgYW4gUkNVIHVubG9jayEgVGhpcywgb2YgY291cnNlLCB3b3VsZCBvcGVuIHRoZSBkb29yIHRvIHVuc2FmZSBwcm9ncmFtcyBnYWluaW5nIGFjY2VwdGFuY2UsIGFsbG93aW5nIGFjY2VzcyB0byBpdGVyYXRvcnMgb3V0c2lkZSBsZWdpdGltYXRlIFJDVSBjcml0aWNhbCBzZWN0aW9ucy4KClRoZSBmaXggaXMgY2xlYXJseSBmdW5jdGlvbmFsLCBpbXBhY3RpbmcgdGhlIGNvcmUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciB0aGlzIGtpbmQgb2YgdnVsbmVyYWJpbGl0eSwgZnV6emluZyB0aGlzIGlzIGFic29sdXRlbHkgZXNzZW50aWFsLgoKUmlnaHQsIEkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGlzLiBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX3Rhc2tfbmV3JiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX3Rhc2tfbmV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgdHlwZSBjaGVjayBpbiB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGBzdGFja3NhZmUoKWAgZnVuY3Rpb24gZm9yIGBTVEFDS19JVEVSYCBzbG90cy4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgdmVyaWZpZXIgY291bGQgaW5jb3JyZWN0bHkgY29uc2lkZXIgdHdvIGl0ZXJhdG9yIHN0YXRlcyBhcyBlcXVpdmFsZW50IGV2ZW4gaWYgdGhlaXIgcmVnaXN0ZXIgdHlwZXMgZGlmZmVyZWQgKGUuZy4sIG9uZSBiZWluZyBSQ1UtcHJvdGVjdGVkIGFuZCB0aGUgb3RoZXIgYmVpbmcgdW50cnVzdGVkIGFmdGVyIGFuIFJDVSB1bmxvY2spLiBUaGlzIGNvdWxkIGxlYWQgdG8gdGhlIHZlcmlmaWVyIGFjY2VwdGluZyB1bnNhZmUgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgaXRlcmF0b3JzIG91dHNpZGUgb2YgUkNVIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGUgZml4IGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl90YXNrX25ldyYjMzQ7LAogICAgJiMzNDticGZfaXRlcl90YXNrX25leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIHR5cGUgY2hlY2sgaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBgc3RhY2tzYWZlKClgIGZ1bmN0aW9uIGZvciBgU1RBQ0tfSVRFUmAgc2xvdHMuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIHZlcmlmaWVyIGNvdWxkIGluY29ycmVjdGx5IGNvbnNpZGVyIHR3byBpdGVyYXRvciBzdGF0ZXMgYXMgZXF1aXZhbGVudCBldmVuIGlmIHRoZWlyIHJlZ2lzdGVyIHR5cGVzIGRpZmZlcmVkIChlLmcuLCBvbmUgYmVpbmcgUkNVLXByb3RlY3RlZCBhbmQgdGhlIG90aGVyIGJlaW5nIHVudHJ1c3RlZCBhZnRlciBhbiBSQ1UgdW5sb2NrKS4gVGhpcyBjb3VsZCBsZWFkIHRvIHRoZSB2ZXJpZmllciBhY2NlcHRpbmcgdW5zYWZlIHByb2dyYW1zIHRoYXQgYWNjZXNzIGl0ZXJhdG9ycyBvdXRzaWRlIG9mIFJDVSBjcml0aWNhbCBzZWN0aW9ucy4gVGhlIGZpeCBpcyBmdW5jdGlvbmFsIGFuZCBhZmZlY3RzIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAzOjU2OjU3LjAwODQxMDk3MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTQ0NDI4MjI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gICAgXCJicGZfaXRlcl90YXNrX25ld1wiLFxuICAgIFwiYnBmX2l0ZXJfdGFza19uZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIHR5cGUgY2hlY2sgaW4gdGhlIEJQRiB2ZXJpZmllcidzIGBzdGFja3NhZmUoKWAgZnVuY3Rpb24gZm9yIGBTVEFDS19JVEVSYCBzbG90cy4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgdmVyaWZpZXIgY291bGQgaW5jb3JyZWN0bHkgY29uc2lkZXIgdHdvIGl0ZXJhdG9yIHN0YXRlcyBhcyBlcXVpdmFsZW50IGV2ZW4gaWYgdGhlaXIgcmVnaXN0ZXIgdHlwZXMgZGlmZmVyZWQgKGUuZy4sIG9uZSBiZWluZyBSQ1UtcHJvdGVjdGVkIGFuZCB0aGUgb3RoZXIgYmVpbmcgdW50cnVzdGVkIGFmdGVyIGFuIFJDVSB1bmxvY2spLiBUaGlzIGNvdWxkIGxlYWQgdG8gdGhlIHZlcmlmaWVyIGFjY2VwdGluZyB1bnNhZmUgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgaXRlcmF0b3JzIG91dHNpZGUgb2YgUkNVIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGUgZml4IGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMzo1Njo1Ny4wMDg0MTYyNjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA0MzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM1MzI5MTM0OWJlOGZmOWFhMWUzODcwMDZmNDRiZDQzNzMxMjZlNDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAwMzo1Njo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xcbmluZGV4IGVhMjE1M2NmMjhkMGEuLjRlNmFhZmFkMzNiZDIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuY1xcbisrKyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcXG5AQCAtODEyLDcgKzgxMiw4IEBAIHN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG4gXFx0XFx0XFx0ICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWVcXG4gXFx0XFx0XFx0ICogaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAob2xkX3JlZy1cXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cXHUwMDNlaXRlci5idGYgfHxcXG4rXFx0XFx0XFx0aWYgKG9sZF9yZWctXFx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cXHUwMDNldHlwZSB8fFxcbitcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cXHUwMDNlaXRlci5idGYgfHxcXG4gXFx0XFx0XFx0ICAgIG9sZF9yZWctXFx1MDAzZWl0ZXIuYnRmX2lkICE9IGN1cl9yZWctXFx1MDAzZWl0ZXIuYnRmX2lkIHx8XFxuIFxcdFxcdFxcdCAgICBvbGRfcmVnLVxcdTAwM2VpdGVyLnN0YXRlICE9IGN1cl9yZWctXFx1MDAzZWl0ZXIuc3RhdGUgfHxcXG4gXFx0XFx0XFx0ICAgIC8qIGlnbm9yZSB7b2xkX3JlZyxjdXJfcmVnfS1cXHUwMDNlaXRlci5kZXB0aCwgc2VlIGFib3ZlICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xcbmluZGV4IGZlMzY2M2RlZGJlMTQuLmJhYzM5NGFlNzdmNDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXFxuQEAgLTYxLDYgKzYxLDMzIEBAIGludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX2xvY2tfYW5kX3VubG9jaylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiP2ZlbnRyeS5zL1xcXCIgU1lTX1BSRUZJWCBcXFwic3lzX2dldHBnaWRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImV4cGVjdGVkIGFuIFJDVSBDUyB3aGVuIHVzaW5nIGJwZl9pdGVyX3Rhc2tfbmV4dFxcXCIpXFxuK19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpXFxuK2ludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrIGl0O1xcbitcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0YnBmX2l0ZXJfdGFza19uZXcoXFx1MDAyNml0LCBOVUxMLCBCUEZfVEFTS19JVEVSX0FMTF9QUk9DUyk7XFxuK1xcbitcXHRpZiAobGlrZWx5KGJwZl9nZXRfcHJhbmRvbV91MzIoKSkpIHtcXG4rXFx0XFx0LyogS2VlcCB0aGUgb3V0ZXIgUkNVIGxvY2sgYWN0aXZlLiAqL1xcbitcXHRcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIENyZWF0ZSBhbiB1bnByb3RlY3RlZCBnYXAuICovXFxuK1xcdFxcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0fVxcbitcXG4rXFx0YnBmX2l0ZXJfdGFza19uZXh0KFxcdTAwMjZpdCk7XFxuK1xcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcXHUwMDI2aXQpO1xcbitcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCI/ZmVudHJ5LnMvXFxcIiBTWVNfUFJFRklYIFxcXCJzeXNfZ2V0cGdpZFxcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHRcXFwiKVxcbiBpbnQgQlBGX1BST0coaXRlcl9jc3NfbG9ja19hbmRfdW5sb2NrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMzo1Njo1Ny41MDEwOTIxNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0Njg5NTE1OTM3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiLFxuICAgIFwiYnBmX2l0ZXJfdGFza19uZXdcIixcbiAgICBcImJwZl9pdGVyX3Rhc2tfbmV4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyB0eXBlIGNoZWNrIGluIHRoZSBCUEYgdmVyaWZpZXIncyBgc3RhY2tzYWZlKClgIGZ1bmN0aW9uIGZvciBgU1RBQ0tfSVRFUmAgc2xvdHMuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIHZlcmlmaWVyIGNvdWxkIGluY29ycmVjdGx5IGNvbnNpZGVyIHR3byBpdGVyYXRvciBzdGF0ZXMgYXMgZXF1aXZhbGVudCBldmVuIGlmIHRoZWlyIHJlZ2lzdGVyIHR5cGVzIGRpZmZlcmVkIChlLmcuLCBvbmUgYmVpbmcgUkNVLXByb3RlY3RlZCBhbmQgdGhlIG90aGVyIGJlaW5nIHVudHJ1c3RlZCBhZnRlciBhbiBSQ1UgdW5sb2NrKS4gVGhpcyBjb3VsZCBsZWFkIHRvIHRoZSB2ZXJpZmllciBhY2NlcHRpbmcgdW5zYWZlIHByb2dyYW1zIHRoYXQgYWNjZXNzIGl0ZXJhdG9ycyBvdXRzaWRlIG9mIFJDVSBjcml0aWNhbCBzZWN0aW9ucy4gVGhlIGZpeCBpcyBmdW5jdGlvbmFsIGFuZCBhZmZlY3RzIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzUzMjkxMzQ5YmU4ZmY5YWExZTM4NzAwNmY0NGJkNDM3MzEyNmU0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDM6NTY6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuaW5kZXggZWEyMTUzY2YyOGQwYS4uNGU2YWFmYWQzM2JkMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmNcbisrKyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbkBAIC04MTIsNyArODEyLDggQEAgc3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxuIFx0XHRcdCAqIGluZmluaXRlIGxvb3AgY2hlY2sgdHJpZ2dlcmluZywgc2VlXG4gXHRcdFx0ICogaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZiB8fFxuK1x0XHRcdGlmIChvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlIHx8XG4rXHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZiB8fFxuIFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmX2lkICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGZfaWQgfHxcbiBcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLnN0YXRlICE9IGN1cl9yZWctXHUwMDNlaXRlci5zdGF0ZSB8fFxuIFx0XHRcdCAgICAvKiBpZ25vcmUge29sZF9yZWcsY3VyX3JlZ30tXHUwMDNlaXRlci5kZXB0aCwgc2VlIGFib3ZlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXG5pbmRleCBmZTM2NjNkZWRiZTE0Li5iYWMzOTRhZTc3ZjQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmNcbkBAIC02MSw2ICs2MSwzMyBAQCBpbnQgQlBGX1BST0coaXRlcl90YXNrc19sb2NrX2FuZF91bmxvY2spXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwiP2ZlbnRyeS5zL1wiIFNZU19QUkVGSVggXCJzeXNfZ2V0cGdpZFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImV4cGVjdGVkIGFuIFJDVSBDUyB3aGVuIHVzaW5nIGJwZl9pdGVyX3Rhc2tfbmV4dFwiKVxuK19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpXG4raW50IEJQRl9QUk9HKGl0ZXJfdGFza3NfcmN1X3N0YXRlX3BydW5pbmcpXG4re1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2sgaXQ7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0YnBmX2l0ZXJfdGFza19uZXcoXHUwMDI2aXQsIE5VTEwsIEJQRl9UQVNLX0lURVJfQUxMX1BST0NTKTtcbitcbitcdGlmIChsaWtlbHkoYnBmX2dldF9wcmFuZG9tX3UzMigpKSkge1xuK1x0XHQvKiBLZWVwIHRoZSBvdXRlciBSQ1UgbG9jayBhY3RpdmUuICovXG4rXHRcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIENyZWF0ZSBhbiB1bnByb3RlY3RlZCBnYXAuICovXG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdH1cbitcbitcdGJwZl9pdGVyX3Rhc2tfbmV4dChcdTAwMjZpdCk7XG4rXHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXHUwMDI2aXQpO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcIj9mZW50cnkucy9cIiBTWVNfUFJFRklYIFwic3lzX2dldHBnaWRcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJleHBlY3RlZCBhbiBSQ1UgQ1Mgd2hlbiB1c2luZyBicGZfaXRlcl9jc3NfbmV4dFwiKVxuIGludCBCUEZfUFJPRyhpdGVyX2Nzc19sb2NrX2FuZF91bmxvY2spXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMzo1Njo1Ny41MDEwOTMyMjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTU4NzY3Njk4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBoaXR0aW5nIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc3RhY2tzYWZlKClgIGZ1bmN0aW9uLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGEgY2hhbmdlIHRvIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgcmVnaXN0ZXIgdHlwZXMgd2hlbiBkZWFsaW5nIHdpdGggaXRlcmF0b3JzLiBJIHNlZSB0aGV5J3ZlIGFkZGVkIGEgY2hlY2sgZm9yIHJlZ2lzdGVyIHR5cGUgZXF1YWxpdHkgKGBvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlYCkuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgdGhlIGNvbXBhcmlzb24gd2FzIHNvbGVseSBiYXNlZCBvbiB0aGUgYGJ0ZmAgZmllbGQgb2YgdGhlIGl0ZXJhdG9yLlxuXG5UaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgZnVuY3Rpb25hbGx5IGZvY3VzZWQgY2hhbmdlIHRvIHRoZSBCUEYgdmVyaWZpZXIuIFRoaXMgc2VlbXMgcmVsYXRlZCB0byBpbXByb3ZpbmcgdGhlIEJQRiB2ZXJpZmllci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgdHlwZSBjaGVjayBpcyBiZWluZyBhZGRlZC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gYGtlcm5lbC9icGYvc3RhdGVzLmNgIGFuZCBnZXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgZm9yIGBzdGFja3NhZmUoKWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG9sZF9yZWdgIGFuZCBgY3VyX3JlZ2AgcmVwcmVzZW50LCB3aGF0IHNpdHVhdGlvbnMgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBnb2FsIG9mIGBzdGFja3NhZmUoKWAgaXMgd2l0aGluIHRoZSB2ZXJpZmllcidzIGxvZ2ljLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb24gdGhlIGludGVudCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gVGhlIHRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY2Agd2lsbCBiZSBpbXBvcnRhbnQgdG8gY2hlY2sgaWYgaXQgY292ZXJzIGEgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDA6MTMuMzc3ODY1NTk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjExNzMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFja3NhZmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTY5MD1zdGF0aWMgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNjYWxhcl9yZWdfZm9yX3N0YWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTcwMS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjcwMjpzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MDMtXFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz05NDU9c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk2Mi1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk2MzpcXHRpZiAoIXN0YWNrc2FmZShlbnYsIG9sZCwgY3VyLCBcXHUwMDI2ZW52LVxcdTAwM2VpZG1hcF9zY3JhdGNoLCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NjQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMDoxMy44NDM5ODc4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTAxOTUzNTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBCUEYgVmVyaWZpZXIncyBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc3RhY2tzYWZlYC4gVGhpcyBgc3RhY2tzYWZlYCBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhhdCdzIGltcG9ydGFudC4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBsb2NhbGl6ZWQgd2l0aGluIHRoYXQgZmlsZS4gVGhlIGNhbGwgY2hhaW4gaXMgd2hhdCdzIGtleSBoZXJlOiBgc3RhY2tzYWZlYCBpcyAqY2FsbGVkIGJ5KiBgZnVuY19zdGF0ZXNfZXF1YWxgLCBhbmQgYGZ1bmNfc3RhdGVzX2VxdWFsYCBpcyAqY2FsbGVkIGJ5KiBgc3RhdGVzX2VxdWFsYC4gVGhpcyBzdWdnZXN0cyBhIGNsZWFyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGFyb3VuZCBzdGF0ZSBjb21wYXJpc29uIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLiBgc3RhdGVzX2VxdWFsYCBpcyB0aGUgbmF0dXJhbCBmb2NhbCBwb2ludCBmb3IgaW52ZXN0aWdhdGluZyB0aGUgd2lkZXIgaW1wbGljYXRpb25zIGFuZCBpbnRlcmFjdGlvbnMuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgbG9jYXRlIHRoZSAqZW50cnkgcG9pbnRzKiB0byB0aGlzIHdob2xlIEJQRiB2ZXJpZmllciBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgZXhlY3V0aW9uIGZsb3dzIGluIGZyb20uIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbHMgdG8gYHN0YXRlc19lcXVhbGAgaXRzZWxmLCBhbmQgZnJvbSAqdGhvc2UqLCBJJ2xsIGJlIGFibGUgdG8gdHJhY2UgYmFjayB0byB0aGUgaW5pdGlhdGluZyBjb250ZXh0cy4gVGhpcyBpcyBteSBrZXkgdG8gdW5sb2NraW5nIHRoZSB2ZXJpZmljYXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM4OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAxOjU4Ljg2MzUyNzY0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA5MTEyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVuY19zdGF0ZXNfZXF1YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTg2OT1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDQtICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NDU6c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDYtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9OTgwPXN0YXRpYyBib29sIHN0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDExLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwMTI6XFx0XFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cXHUwMDNlZnJhbWVbaV0sIGN1ci1cXHUwMDNlZnJhbWVbaV0sIGluc25faWR4LCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEzLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDE6NTkuMzA0NDQ3NDQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxMTg4NTk4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbCBpbiB0aGUgZmllbGQsIHNwZWFraW5nIGRpcmVjdGx5IHRvIGFub3RoZXIgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBzdGF0ZXNfZXF1YWxgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gYHN0YXRlc19lcXVhbGAgaXMgcG9wcGluZyB1cCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBhbnl0aW1lIEkgc2VlIHRoYXQgZnVuY3Rpb24gbmFtZSwgaXQncyBhYm91dCBjb21wYXJpbmcgQlBGIHByb2dyYW0gc3RhdGVzLCBhbmQgdGhhdCdzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgdmVyaWZpY2F0aW9uIHB1enpsZS4gTGV0J3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGVyZSBpdCdzIGJlaW5nIGludm9rZWQuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggaXQncyBiZWluZyB1c2VkIHRvIGVuc3VyZSBwcm9ncmFtIGNvcnJlY3RuZXNzLiBJIHdhbnQgdG8gc2VlIGlmIGl0J3MgZW1wbG95ZWQgd2hlcmUgSSdkIGV4cGVjdDogaW4ganVtcC9icmFuY2ggYW5hbHlzaXMsIGxvb3AgdW5yb2xsaW5nLCBvciBzdGF0ZSBtZXJnaW5nLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGVtcGxveWVkIGluIGEgcGFydGljdWxhcmx5IHBlcmZvcm1hbnQgbWFubmVyLCBvciBpZiB0aGVyZSdzIGEgcG9zc2libGUgZWZmaWNpZW5jeSBpc3N1ZS4gSSBhbHNvIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFyZWEgSSB3b3VsZCBoYXZlIGVtcGxveWVkIGl0IGluc3RlYWQsIGFuZCBmb3IgYSBkaWZmZXJlbnQgcHVycG9zZS4gV2l0aCBteSBiYWNrZ3JvdW5kLCBJIGNhbiBwcmVkaWN0IGl0cyB1c2UsIGFuZCBzaG91bGQgdmVyaWZ5IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGVtcGxveWVkIGFzIGl0IG91Z2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTkzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDI6MTYuNDIzMzEwMDU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzEyNDY4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0ZXNfZXF1YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMjoxNi40OTEwMjg4ODNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAxNjAwNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBzdGF0ZXNfZXF1YWxgLiBNeSBndXQgc2F5cyBpdCdzIGxpa2VseSBuZXN0bGVkIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvc3RhdGVzLmNgIGZpbGUgc2luY2UgaXQgc291bmRzIGxpa2UgYSBmdW5jdGlvbiBkZWFsaW5nIHdpdGggdGhlIGludGVybmFsIHN0YXRlIHJlcHJlc2VudGF0aW9uLiBIb3dldmVyLCBpdCdzIGFsc28gcXVpdGUgcG9zc2libGUgaXQncyBjYWxsZWQgZnJvbSBzb21ld2hlcmUgbGlrZSBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSG1tbSwgaXMgaXQgcG9zc2libGUgdGhpcyBpcyBhIHNoYXJlZCBmdW5jdGlvbj8gTWF5YmUgaXQncyBkZWZpbmVkIGFuZCBleHBvcnRlZCwgb3IgcGVyaGFwcyBpdCdzIGluIGEgcmVsZXZhbnQgaGVhZGVyIGZpbGUuIFJhdGhlciB0aGFuIGNoYXNpbmcgZG93biBhIGdvb3NlLCBJIHNob3VsZCBmaXJzdCBkaXJlY3RseSB2ZXJpZnkgaXQncyBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIEJlc3QgdG8gc3RhcnQgdGhlcmUgYW5kIGJlIHN1cmUuIExldCBtZSBnbyB0YWtlIGEgbG9vayBpbiB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMjoyMC4xOTI2MzEzMDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjIwNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlc19lcXVhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9ODY5PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0NC0gKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk0NTpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0Ni1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgdTMyIGluc25faWR4LCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz05NzI9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzktXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5ODA6c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05ODEtXFx0XFx0XFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxMS1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMDEyOlxcdFxcdGlmICghZnVuY19zdGF0ZXNfZXF1YWwoZW52LCBvbGQtXFx1MDAzZWZyYW1lW2ldLCBjdXItXFx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxMy1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzk9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMzMi1cXHRcXHRcXHRpZiAoaXNfaXRlcl9uZXh0X2luc24oZW52LCBpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzMzM6XFx0XFx0XFx0XFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMzNC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1cl9mcmFtZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM0Mi1cXHRcXHRcXHRcXHRcXHRpdGVyX3JlZyA9IFxcdTAwMjZjdXJfZnJhbWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18xXTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNDM6XFx0XFx0XFx0XFx0XFx0LyogY3VycmVudCBzdGF0ZSBpcyB2YWxpZCBkdWUgdG8gc3RhdGVzX2VxdWFsKCksXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQ0LVxcdFxcdFxcdFxcdFxcdCAqIHNvIHdlIGNhbiBhc3N1bWUgdmFsaWQgaXRlciBhbmQgcmVnIHN0YXRlLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU3LVxcdFxcdFxcdFxcdGlmIChzbC1cXHUwMDNlc3RhdGUubWF5X2dvdG9fZGVwdGggIT0gY3VyLVxcdTAwM2VtYXlfZ290b19kZXB0aCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM1ODpcXHRcXHRcXHRcXHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU5LVxcdFxcdFxcdFxcdFxcdGxvb3AgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzYzLVxcdFxcdFxcdGlmIChicGZfY2FsbHNfY2FsbGJhY2soZW52LCBpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNjQ6XFx0XFx0XFx0XFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2NS1cXHRcXHRcXHRcXHRcXHRsb29wID0gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM3MS1cXHRcXHRcXHRpZiAoc3RhdGVzX21heWJlX2xvb3BpbmcoXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM3MjpcXHRcXHRcXHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBFWEFDVCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNzMtXFx0XFx0XFx0ICAgICFpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1cikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwNC1cXHRcXHRsb29wID0gaW5jb21wbGV0ZV9yZWFkX21hcmtzKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDA1OlxcdFxcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIGxvb3AgPyBSQU5HRV9XSVRISU4gOiBOT1RfRVhBQ1QpKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDA2LWhpdDpcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQ0NC1cXHRcXHRcXHQgKlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQ0NTpcXHRcXHRcXHQgKiAtIFdoZW4gYSB2ZXJpZmljYXRpb24gcGF0aCBlbmNvdW50ZXJzIGEgYHN0YXRlc19lcXVhbCguLi4sXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDQ2LVxcdFxcdFxcdCAqICAgUkFOR0VfV0lUSElOKWAgY29uZGl0aW9uLCB0aGVyZSBleGlzdHMgYSBjYWxsIGNoYWluIGRlc2NyaWJpbmcgdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAyOjIwLjI4MTg1ODU2M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU5ODE1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgQ2FsbHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgd2UgZGV0ZXJtaW5lIGlmIGEgQlBGIHN0YXRlIGhhcyBiZWVuIHZpc2l0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBnYXRld2F5IHRvIGNvbXBhcmluZyBzdGF0ZXMgdXNpbmcgYHN0YXRlc19lcXVhbGAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIHN5c3RlbSdzIGxvZ2ljIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBvZiBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBpbnNpZ2h0cyBpbnRvIHRoZSBleGVjdXRpb24gcGF0aHMgd2hlcmUgc3RhdGUgY29tcGFyaXNvbnMgYXJlIGNlbnRyYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1OTcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMjoyNC43NDE2ODM1NjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMTgwNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9MTIxND1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIzOC1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzk6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyNDAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NDU2PXN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzQ5My1cXHRcXHRpZiAoYnBmX2lzX3BydW5lX3BvaW50KGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc0OTQ6XFx0XFx0XFx0ZXJyID0gYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoZW52LCBlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0OTUtXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAyOjI0LjgwMzg2ODY4MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDkzMDEzNDgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgZG9fY2hlY2tgIGZ1bmN0aW9uIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQncyB0aGUgY29yZSBvZiB0aGUgQlBGIHZlcmlmaWVyLCBjYWxsZWQgdGhyb3VnaCB0aGUgYGJwZl9jaGVja2AgZnVuY3Rpb24sIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgd2hvbGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyB0aGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBgYnBmX2NoZWNrYCBpdHNlbGYgZ2V0cyBjYWxsZWQgYnkgYGJwZl9wcm9nX2xvYWRgLCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kIGFzIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50IGZvciB0ZXN0aW5nLlxuXG5Ob3csIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCB0ZXN0cy4gQWgsIGhlcmUncyBvbmU6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmNgLiBUaGlzIGlzIHJlbGF0ZWQgdG8gYGJwZl9pdGVyX3Rhc2tfbmV4dGAsIGdvb2QuXG5cblRoZSBjb2RlIGZpeCByZWZlcmVuY2VzIGEgYHN0YWNrc2FmZWAgaXNzdWUuIFRoZSBjb21taXQgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG4tXHRcdFx0aWYgKG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZiB8fFxuK1x0XHRcdGlmIChvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlIHx8XG4rXHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZiB8fFxuYGBgXG5cblJpZ2h0LCBpdCdzIGEgYnVnIGZpeC4gTG9va3MgbGlrZSB3ZSB3ZXJlIG1pc3NpbmcgYSBjaGVjayBvbiBgb2xkX3JlZy1cdTAwM2V0eXBlYCBiZWZvcmUgYWNjZXNzaW5nIGBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmYC4gVGhpcyBpbXBsaWVzIGBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmYCBpcyBwYXJ0IG9mIHNvbWUga2luZCBvZiB1bmlvbiBvciBzdHJ1Y3QsIG9yIGEgZmllbGQgb2YgYSBkaWZmZXJlbnQgdHlwZS4gSSBuZWVkIHRvIGtub3cgaG93IHRoZXNlIHJlZ2lzdGVycyBhcmUgZGVmaW5lZC4gSSBzaG91bGQgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBicGZfcmVnX3N0YXRlYC4gSSBjYW4ndCBiZSBzdXJlIHRoZSBgaXRlci5idGZgIGZpZWxkIGlzIG9ubHkgdXNlZCBpZiBgdHlwZWAgc2F5cyBpdCBpcywgc28gY2hlY2tpbmcgdGhhdCBgdHlwZWAgaXMgY29ycmVjdCBpcyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDI6NTkuNzM0MDA5NDY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM0Nzg3MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGJwZl9yZWdfc3RhdGUgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTMyPWVudW0gYnBmX2l0ZXJfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0zNy1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjM4OnN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTM5LVxcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjAwLjE4NzQ5NDUzMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTM5NjM1NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCwgcmVmbGVjdGluZyBhIHNlYXNvbmVkIHVuZGVyc3RhbmRpbmc6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBSZWdpc3RlciBTdGF0ZSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoZSBgc3RydWN0IGJwZl9yZWdfc3RhdGVgLiBJIG5lZWQgdG8gcmVhbGx5IGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiBhIEJQRiByZWdpc3Rlci4gSSBrbm93LCBmcm9tIGV4cGVyaWVuY2UsIHRoaXMgaXMgdGhlIGNydXggb2YgdW5kZXJzdGFuZGluZyBwcm9ncmFtIGFuYWx5c2lzIGFuZCB2ZXJpZmljYXRpb24sIGFuZCBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCBleGVjdXRpb24uXG5cbkkgZXhwZWN0IHRvIHNlZSBmaWVsZHMgdGhhdCBpbmRpY2F0ZSB0aGUgcG9zc2libGUgdmFsdWVzIHdpdGhpbiBhIHJlZ2lzdGVyOiBpcyBpdCBhIGNvbnN0YW50PyBJZiBzbywgd2hhdCBpcyBpdHMgdmFsdWU/IERvZXMgaXQgaG9sZCB0aGUgYWRkcmVzcyBvZiBhIGtlcm5lbCBkYXRhIHN0cnVjdHVyZSwgYW5kIGlmIHNvLCB3aGljaCBvbmU/IElzIGl0IGEgcG9pbnRlciB0byB1c2VyIG1lbW9yeT8gSWYgc28sIGFyZSB0aGVyZSBhbnkga25vd24gYm91bmRzIG9yIG9mZnNldHM/IEknbSBhbnRpY2lwYXRpbmcgZWxlbWVudHMgdG8gZGVzY3JpYmUgcmFuZ2VzIGFuZCBjb25zdHJhaW50cyDigJMgdGhpbmdzIGxpa2UgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMsIHdoZXRoZXIgdGhlIHJlZ2lzdGVyIGhvbGRzIGEgdmFsaWQgcG9pbnRlciBvciBhIHNjYWxhciwgbWF5YmUgZXZlbiBhIGZsYWcgdG8gc2hvdyBpZiB0aGUgcmVnaXN0ZXIgY29udGVudCBjYW4gYmUgZGVyaXZlZCBmcm9tIG90aGVyIHJlZ2lzdGVycy5cblxuSeKAmW0gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHN5bWJvbGljIHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQuIEFyZSB0aGV5IGNvbmNyZXRlLCBvciBpcyB0aGlzIGFuIGFic3RyYWN0IGludGVycHJldGF0aW9uPyBJcyB0aGVyZSBhIG5vdGlvbiBvZiBcInRhaW50aW5nXCIgb3IgXCJkZXBlbmRlbmN5XCIgdHJhY2tlZCwgbWVhbmluZyB3aGljaCBwcmlvciBpbnN0cnVjdGlvbihzKSBoYXZlIGluZmx1ZW5jZWQgd2hhdCBpcyBwcmVzZW50IGluIGEgcmVnaXN0ZXI/IEknbSBob3BpbmcgdG8gc2VlIGEgc29waGlzdGljYXRlZCBlbmNvZGluZyBvZiB0aGVzZSByZWxhdGlvbnNoaXBzLCBtYXliZSBldmVuIHRyYWNraW5nIGhvdyB0aGUgdmVyaWZpZXIgKmluZmVycyogbmV3IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyIGNvbnRlbnRzIHRocm91Z2ggYnJhbmNoIGFuYWx5c2lzIGFuZCBsb29wIHVucm9sbGluZy5cblxuVWx0aW1hdGVseSwgSSdtIGxvb2tpbmcgZm9yIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBlbmNhcHN1bGF0ZXMgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gbW9kZWwgcmVnaXN0ZXIgdmFsdWVzIGFjcm9zcyBhbGwgcG9zc2libGUgZXhlY3V0aW9uIHBhdGhzLiBUaGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNvcGhpc3RpY2F0ZWQgdGVjaG5pcXVlcyB0aGF0IHRoZSBCUEYgdmVyaWZpZXIgZW1wbG95cyB0byBhY2hpZXZlIGl0cyBjb3JlIG1lbW9yeSBzYWZldHkgYW5kIHZhbGlkYXRpb24gZ29hbHMuIExldCdzIHNlZSBob3cgdGhleSd2ZSBkb25lIGl0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4ODIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMzowNy4xMjcxMzI4NDFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzgsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM4OlxcdHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG4gIDM5OlxcdFxcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXFxuICA0MDpcXHRcXHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xcbiAgNDE6XFx0XFx0LypcXG4gIDQyOlxcdFxcdCAqIENvbnN0YW50IGRlbHRhIGJldHdlZW4gXFxcImxpbmtlZFxcXCIgc2NhbGFycyB3aXRoIHRoZSBzYW1lIElELlxcbiAgNDM6XFx0XFx0ICovXFxuICA0NDpcXHRcXHRzMzIgZGVsdGE7XFxuICA0NTpcXHRcXHR1bmlvbiB7XFxuICA0NjpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gUFRSX1RPX1BBQ0tFVCAqL1xcbiAgNDc6XFx0XFx0XFx0aW50IHJhbmdlO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxcbiAgNTA6XFx0XFx0XFx0ICogICBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTExcXG4gIDUxOlxcdFxcdFxcdCAqL1xcbiAgNTI6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDUzOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICptYXBfcHRyO1xcbiAgNTQ6XFx0XFx0XFx0XFx0LyogVG8gZGlzdGluZ3Vpc2ggbWFwIGxvb2t1cHMgZnJvbSBvdXRlciBtYXBcXG4gIDU1OlxcdFxcdFxcdFxcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcXG4gIDU2OlxcdFxcdFxcdFxcdCAqIHBvaW50aW5nIHRvIGlubmVyIG1hcHMuXFxuICA1NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDU4OlxcdFxcdFxcdFxcdHUzMiBtYXBfdWlkO1xcbiAgNTk6XFx0XFx0XFx0fTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0XFx0LyogZm9yIFBUUl9UT19CVEZfSUQgKi9cXG4gIDYyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA2MzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnRmICpidGY7XFxuICA2NDpcXHRcXHRcXHRcXHR1MzIgYnRmX2lkO1xcbiAgNjU6XFx0XFx0XFx0fTtcXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0XFx0c3RydWN0IHsgLyogZm9yIFBUUl9UT19NRU0gfCBQVFJfVE9fTUVNX09SX05VTEwgKi9cXG4gIDY4OlxcdFxcdFxcdFxcdHUzMiBtZW1fc2l6ZTtcXG4gIDY5OlxcdFxcdFxcdH07XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdC8qIEZvciBkeW5wdHIgc3RhY2sgc2xvdHMgKi9cXG4gIDcyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA3MzpcXHRcXHRcXHRcXHRlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlO1xcbiAgNzQ6XFx0XFx0XFx0XFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cXG4gIDc1OlxcdFxcdFxcdFxcdCAqIFdlIG5lZWQgdG8gdHJhY2sgd2hpY2ggc2xvdCBpcyB0aGUgZmlyc3Qgc2xvdFxcbiAgNzY6XFx0XFx0XFx0XFx0ICogdG8gcHJvdGVjdCBhZ2FpbnN0IGNhc2VzIHdoZXJlIHRoZSB1c2VyIG1heSB0cnkgdG9cXG4gIDc3OlxcdFxcdFxcdFxcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXFxuICA3ODpcXHRcXHRcXHRcXHQgKiBkeW5wdHIuXFxuICA3OTpcXHRcXHRcXHRcXHQgKi9cXG4gIDgwOlxcdFxcdFxcdFxcdGJvb2wgZmlyc3Rfc2xvdDtcXG4gIDgxOlxcdFxcdFxcdH0gZHlucHRyO1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRcXHQvKiBGb3IgYnBmX2l0ZXIgc3RhY2sgc2xvdHMgKi9cXG4gIDg0OlxcdFxcdFxcdHN0cnVjdCB7XFxuICA4NTpcXHRcXHRcXHRcXHQvKiBCVEYgY29udGFpbmVyIGFuZCBCVEYgdHlwZSBJRCBkZXNjcmliaW5nXFxuICA4NjpcXHRcXHRcXHRcXHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXFx1MDAzY3R5cGVcXHUwMDNlIG9mIGFuIGl0ZXJhdG9yIHN0YXRlXFxuICA4NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDg4OlxcdFxcdFxcdFxcdHN0cnVjdCBidGYgKmJ0ZjtcXG4gIDg5OlxcdFxcdFxcdFxcdHUzMiBidGZfaWQ7XFxuICA5MDpcXHRcXHRcXHRcXHQvKiBwYWNraW5nIGZvbGxvd2luZyB0d28gZmllbGRzIHRvIGZpdCBpdGVyIHN0YXRlIGludG8gMTYgYnl0ZXMgKi9cXG4gIDkxOlxcdFxcdFxcdFxcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcXG4gIDkyOlxcdFxcdFxcdFxcdGludCBkZXB0aDozMDtcXG4gIDkzOlxcdFxcdFxcdH0gaXRlcjtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0XFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xcbiAgOTY6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDk3OlxcdFxcdFxcdFxcdGVudW0ge1xcbiAgOTg6XFx0XFx0XFx0XFx0XFx0SVJRX05BVElWRV9LRlVOQyxcXG4gIDk5OlxcdFxcdFxcdFxcdFxcdElSUV9MT0NLX0tGVU5DLFxcbiAxMDA6XFx0XFx0XFx0XFx0fSBrZnVuY19jbGFzcztcXG4gMTAxOlxcdFxcdFxcdH0gaXJxO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRcXHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXFxuIDEwNDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAxMDU6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcxO1xcbiAxMDY6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcyO1xcbiAxMDc6XFx0XFx0XFx0fSByYXc7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdFxcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xcbiAxMTA6XFx0XFx0fTtcXG4gMTExOlxcdFxcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXFxuIDExMjpcXHRcXHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxcbiAxMTM6XFx0XFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XFxuIDExNDpcXHRcXHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xcbiAxMTU6XFx0XFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cXG4gMTE2OlxcdFxcdCAqL1xcbiAxMTc6XFx0XFx0c3RydWN0IHRudW0gdmFyX29mZjtcXG4gMTE4OlxcdFxcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxcbiAxMTk6XFx0XFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cXG4gMTIwOlxcdFxcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXFxuIDEyMTpcXHRcXHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXFxuIDEyMjpcXHRcXHQgKi9cXG4gMTIzOlxcdFxcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXFxuIDEyNDpcXHRcXHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xcbiAxMjU6XFx0XFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXFxuIDEyNjpcXHRcXHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cXG4gMTI3OlxcdFxcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxcbiAxMjg6XFx0XFx0ICogY2FtZSBmcm9tLCB3aGVuIG9uZSBpcyB0ZXN0ZWQgZm9yICE9IE5VTEwuXFxuIDEyOTpcXHRcXHQgKiBGb3IgUFRSX1RPX01FTV9PUl9OVUxMIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBtZW1vcnkgYWxsb2NhdGlvblxcbiAxMzA6XFx0XFx0ICogZm9yIHRoZSBwdXJwb3NlIG9mIHRyYWNraW5nIHRoYXQgaXQncyBmcmVlZC5cXG4gMTMxOlxcdFxcdCAqIEZvciBQVFJfVE9fU09DS0VUIHRoaXMgaXMgdXNlZCB0byBzaGFyZSB3aGljaCBwb2ludGVycyByZXRhaW4gdGhlXFxuIDEzMjpcXHRcXHQgKiBzYW1lIHJlZmVyZW5jZSB0byB0aGUgc29ja2V0LCB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxcbiAxMzM6XFx0XFx0ICogRm9yIHN0YWNrIHNsb3RzIHRoYXQgYXJlIGR5bnB0cnMsIHRoaXMgaXMgdXNlZCB0byB0cmFjayByZWZlcmVuY2VzIHRvXFxuIDEzNDpcXHRcXHQgKiB0aGUgZHlucHRyIHRvIGRldGVybWluZSBwcm9wZXIgcmVmZXJlbmNlIGZyZWVpbmcuXFxuIDEzNTpcXHRcXHQgKiBTaW1pbGFybHkgdG8gZHlucHRycywgd2UgdXNlIElEIHRvIHRyYWNrIFxcXCJiZWxvbmdpbmdcXFwiIG9mIGEgcmVmZXJlbmNlXFxuIDEzNjpcXHRcXHQgKiB0byBhIHNwZWNpZmljIGluc3RhbmNlIG9mIGJwZl9pdGVyLlxcbiAxMzc6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjA3LjEyNzM0NTQ5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzU5MjMwMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGF0YSBDb3JydXB0aW9uIHdpdGggSXRlcmF0b3IgQWNjZXNzKipcblxuQWxyaWdodCwgc28gYGl0ZXJgIGlzIGhhbmdpbmcgb2ZmIGEgdW5pb24sIEkgc2VlLiBNeSBjb25jZXJuIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHBvdGVudGlhbCB0eXBlIGNvbmZ1c2lvbi4gSWYgYG9sZF9yZWctXHUwMDNldHlwZWAgKmlzbid0KiB0aGUgZXhwZWN0ZWQgaXRlcmF0b3IgdHlwZSAobGlrZWx5IHNvbWV0aGluZyBsaWtlIGBQVFJfVE9fU1RBQ0tgLCB0aG91Z2ggSSBkb24ndCByZWNhbGwgdGhlIGV4YWN0IG5hbWUgb2ZmLWhhbmQpLCB0aGVuIHdlJ3JlIHBvdGVudGlhbGx5IHJlYWRpbmcgZ2FyYmFnZSBkYXRhLCBvciB3b3JzZSwgYWNjZXNzaW5nIGEgY29tcGxldGVseSB1bnJlbGF0ZWQgdW5pb24gbWVtYmVyIHdoZW4gd2UgdHJ5IHRvIGdyYWIgYG9sZF9yZWctXHUwMDNlaXRlci5idGZgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHVuZGVmaW5lZCBiZWhhdmlvciwgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIGV2ZW4gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGlmIHdlJ3JlIG5vdCBjYXJlZnVsLlxuXG5UaGVuIEkgcmVtZW1iZXJlZCB0aGF0IGl0ZXJhdG9ycyBhcmUgdHlwaWNhbGx5IHN0b3JlZCBpbiBzdGFjayBzbG90cy4gVGhpcyBtYWtlcyB0aGUgcG9zc2liaWxpdHkgb2YgcmVhZGluZyB0aGUgd3JvbmcgdW5pb24gbWVtYmVyIGV2ZW4gbW9yZSBsaWtlbHkgaWYgdGhlcmUncyBhbnkgdHlwZSBhbWJpZ3VpdHkuIEknZCBiZXR0ZXIgZG91YmxlIGNoZWNrIHRoZSBgc3RhY2tzYWZlYCBsb2dpYyBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIEl0J3MgbGlrZWx5IHRoYXQgdGhlIGNvcmUgZGF0YSBpbnRlZ3JpdHkgaXNzdWUgaXMgYWRkcmVzc2VkIHRoZXJlLCBpZiBhbnl3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODczNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDM6MTguODg2NTc3NzE5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODc5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc5MDpcXHRcXHRcXHRcXHQgKiBzdWNoIHZlcmlmaWVyIHN0YXRlcyBhcmUgbm90IGVxdWl2YWxlbnQuXFxuIDc5MTpcXHRcXHRcXHRcXHQgKiByZXR1cm4gZmFsc2UgdG8gY29udGludWUgdmVyaWZpY2F0aW9uIG9mIHRoaXMgcGF0aFxcbiA3OTI6XFx0XFx0XFx0XFx0ICovXFxuIDc5MzpcXHRcXHRcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLFxcbiA3OTQ6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLCBpZG1hcCwgZXhhY3QpKVxcbiA3OTU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3OTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDc5NzpcXHRcXHRcXHRjYXNlIFNUQUNLX0RZTlBUUjpcXG4gNzk4OlxcdFxcdFxcdFxcdG9sZF9yZWcgPSBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbiA3OTk6XFx0XFx0XFx0XFx0Y3VyX3JlZyA9IFxcdTAwMjZjdXItXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuIDgwMDpcXHRcXHRcXHRcXHRpZiAob2xkX3JlZy1cXHUwMDNlZHlucHRyLnR5cGUgIT0gY3VyX3JlZy1cXHUwMDNlZHlucHRyLnR5cGUgfHxcXG4gODAxOlxcdFxcdFxcdFxcdCAgICBvbGRfcmVnLVxcdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCAhPSBjdXJfcmVnLVxcdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCB8fFxcbiA4MDI6XFx0XFx0XFx0XFx0ICAgICFjaGVja19pZHMob2xkX3JlZy1cXHUwMDNlaWQsIGN1cl9yZWctXFx1MDAzZWlkLCBpZG1hcCkgfHxcXG4gODAzOlxcdFxcdFxcdFxcdCAgICAhY2hlY2tfaWRzKG9sZF9yZWctXFx1MDAzZXBhcmVudF9pZCwgY3VyX3JlZy1cXHUwMDNlcGFyZW50X2lkLCBpZG1hcCkpXFxuIDgwNDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDgwNTpcXHRcXHRcXHRcXHRicmVhaztcXG4gODA2OlxcdFxcdFxcdGNhc2UgU1RBQ0tfSVRFUjpcXG4gODA3OlxcdFxcdFxcdFxcdG9sZF9yZWcgPSBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbiA4MDg6XFx0XFx0XFx0XFx0Y3VyX3JlZyA9IFxcdTAwMjZjdXItXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuIDgwOTpcXHRcXHRcXHRcXHQvKiBpdGVyLmRlcHRoIGlzIG5vdCBjb21wYXJlZCBiZXR3ZWVuIHN0YXRlcyBhcyBpdFxcbiA4MTA6XFx0XFx0XFx0XFx0ICogZG9lc24ndCBtYXR0ZXIgZm9yIGNvcnJlY3RuZXNzIGFuZCB3b3VsZCBvdGhlcndpc2VcXG4gODExOlxcdFxcdFxcdFxcdCAqIHByZXZlbnQgY29udmVyZ2VuY2U7IHdlIG1haW50YWluIGl0IG9ubHkgdG8gcHJldmVudFxcbiA4MTI6XFx0XFx0XFx0XFx0ICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWVcXG4gODEzOlxcdFxcdFxcdFxcdCAqIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoKVxcbiA4MTQ6XFx0XFx0XFx0XFx0ICovXFxuIDgxNTpcXHRcXHRcXHRcXHRpZiAob2xkX3JlZy1cXHUwMDNldHlwZSAhPSBjdXJfcmVnLVxcdTAwM2V0eXBlIHx8XFxuIDgxNjpcXHRcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cXHUwMDNlaXRlci5idGYgfHxcXG4gODE3OlxcdFxcdFxcdFxcdCAgICBvbGRfcmVnLVxcdTAwM2VpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLVxcdTAwM2VpdGVyLmJ0Zl9pZCB8fFxcbiA4MTg6XFx0XFx0XFx0XFx0ICAgIG9sZF9yZWctXFx1MDAzZWl0ZXIuc3RhdGUgIT0gY3VyX3JlZy1cXHUwMDNlaXRlci5zdGF0ZSB8fFxcbiA4MTk6XFx0XFx0XFx0XFx0ICAgIC8qIGlnbm9yZSB7b2xkX3JlZyxjdXJfcmVnfS1cXHUwMDNlaXRlci5kZXB0aCwgc2VlIGFib3ZlICovXFxuIDgyMDpcXHRcXHRcXHRcXHQgICAgIWNoZWNrX2lkcyhvbGRfcmVnLVxcdTAwM2VpZCwgY3VyX3JlZy1cXHUwMDNlaWQsIGlkbWFwKSlcXG4gODIxOlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODIyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4MjM6XFx0XFx0XFx0Y2FzZSBTVEFDS19JUlFfRkxBRzpcXG4gODI0OlxcdFxcdFxcdFxcdG9sZF9yZWcgPSBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbiA4MjU6XFx0XFx0XFx0XFx0Y3VyX3JlZyA9IFxcdTAwMjZjdXItXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuIDgyNjpcXHRcXHRcXHRcXHRpZiAoIWNoZWNrX2lkcyhvbGRfcmVnLVxcdTAwM2VpZCwgY3VyX3JlZy1cXHUwMDNlaWQsIGlkbWFwKSB8fFxcbiA4Mjc6XFx0XFx0XFx0XFx0ICAgIG9sZF9yZWctXFx1MDAzZWlycS5rZnVuY19jbGFzcyAhPSBjdXJfcmVnLVxcdTAwM2VpcnEua2Z1bmNfY2xhc3MpXFxuIDgyODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDgyOTpcXHRcXHRcXHRcXHRicmVhaztcXG4gODMwOlxcdFxcdFxcdGNhc2UgU1RBQ0tfTUlTQzpcXG4gODMxOlxcdFxcdFxcdGNhc2UgU1RBQ0tfWkVSTzpcXG4gODMyOlxcdFxcdFxcdGNhc2UgU1RBQ0tfSU5WQUxJRDpcXG4gODMzOlxcdFxcdFxcdGNhc2UgU1RBQ0tfUE9JU09OOlxcbiA4MzQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgzNTpcXHRcXHRcXHQvKiBFbnN1cmUgdGhhdCBuZXcgdW5oYW5kbGVkIHNsb3QgdHlwZXMgcmV0dXJuIGZhbHNlIGJ5IGRlZmF1bHQgKi9cXG4gODM2OlxcdFxcdFxcdGRlZmF1bHQ6XFxuIDgzNzpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDgzODpcXHRcXHRcXHR9XFxuIDgzOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjE4Ljg4NjY5ODE5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODgwNTc2ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWdpc3RlciBIYW5kbGluZyBpbiB0aGUgSXRlcmF0aW9uIFN0YWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBgb2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWzBdYCBpcyBiZWluZyBjaGVja2VkIGJlZm9yZSB3ZSBldmVuIGhpdCB0aGlzIGBzd2l0Y2hgIHN0YXRlbWVudC5cIiBUaGF0J3MgZ29vZCBwcmFjdGljZSwga2VlcHMgdGhpbmdzIG9yZ2FuaXplZC4gTm93LCB0aGUgbG9naWMuLi4gaWYgYG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVswXWAgaXMgYWN0dWFsbHkgYFNUQUNLX0lURVJgLCB0aGVuIGBvbGRfcmVnYCBpcyBzZXQgdG8gcG9pbnQgdG8gYFx1MDAyNm9sZC1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyYC4gTWFrZXMgc2Vuc2UsIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgc3BpbGxlZCBwb2ludGVyIGluIHRoYXQgY2FzZS4gQW5kLCBpZiBJJ20gbm90IG1pc3Rha2VuLCBgY3VyX3JlZ2AgaXMgcG9pbnRpbmcgdG8gdGhlIGVxdWl2YWxlbnQgYFx1MDAyNmN1ci1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyYC4gSG1tLCBub3cgSSdtIGdldHRpbmcgYSBsaXR0bGUgY3VyaW91cy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWzBdYCBpcyBzb21ldGhpbmcgKm90aGVyKiB0aGFuIGBTVEFDS19JVEVSYD8gVGhhdCdzIHRoZSBpbXBvcnRhbnQgcGllY2UgaGVyZSwgdGhlIGhhbmRsaW5nIGZvciB0aGUgKm90aGVyKiB0eXBlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIGhvdyB0aGUgY29kZSBicmFuY2hlcyBiZWZvcmUgdGhpcyBgc3dpdGNoYC4gSSdsbCBnbyBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb2RlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY3VycmVudCBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDM6MjMuNzY3Mjc5MTQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc1MDpcXHRcXHRcXHQgKiByZWdzYWZlKCkgdG8gZW5zdXJlIHNjYWxhciBpZHMgYXJlIGNvbXBhcmVkLlxcbiA3NTE6XFx0XFx0XFx0ICovXFxuIDc1MjpcXHRcXHRcXHRpZiAoaW0gPT0gMCB8fCBpbSA9PSA0KSB7XFxuIDc1MzpcXHRcXHRcXHRcXHRvbGRfcmVnID0gc2NhbGFyX3JlZ19mb3Jfc3RhY2soZW52LCBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLCBpbSk7XFxuIDc1NDpcXHRcXHRcXHRcXHRjdXJfcmVnID0gc2NhbGFyX3JlZ19mb3Jfc3RhY2soZW52LCBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja1tzcGldLCBpbSk7XFxuIDc1NTpcXHRcXHRcXHRcXHRpZiAob2xkX3JlZyBcXHUwMDI2XFx1MDAyNiBjdXJfcmVnKSB7XFxuIDc1NjpcXHRcXHRcXHRcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfcmVnLCBjdXJfcmVnLCBpZG1hcCwgZXhhY3QpKVxcbiA3NTc6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3NTg6XFx0XFx0XFx0XFx0XFx0aSArPSAoaW0gPT0gMCA/IEJQRl9SRUdfU0laRSAtIDEgOiAzKTtcXG4gNzU5OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3NjA6XFx0XFx0XFx0XFx0fVxcbiA3NjE6XFx0XFx0XFx0fVxcbiA3NjI6XFx0XFxuIDc2MzpcXHRcXHRcXHQvKiBpZiBvbGQgc3RhdGUgd2FzIHNhZmUgd2l0aCBtaXNjIGRhdGEgaW4gdGhlIHN0YWNrXFxuIDc2NDpcXHRcXHRcXHQgKiBpdCB3aWxsIGJlIHNhZmUgd2l0aCB6ZXJvLWluaXRpYWxpemVkIHN0YWNrLlxcbiA3NjU6XFx0XFx0XFx0ICogVGhlIG9wcG9zaXRlIGlzIG5vdCB0cnVlXFxuIDc2NjpcXHRcXHRcXHQgKi9cXG4gNzY3OlxcdFxcdFxcdGlmIChvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX01JU0MgXFx1MDAyNlxcdTAwMjZcXG4gNzY4OlxcdFxcdFxcdCAgICBjdXItXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX1pFUk8pXFxuIDc2OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzcwOlxcdFxcdFxcdGlmIChvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdICE9XFxuIDc3MTpcXHRcXHRcXHQgICAgY3VyLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSlcXG4gNzcyOlxcdFxcdFxcdFxcdC8qIEV4OiBvbGQgZXhwbG9yZWQgKHNhZmUpIHN0YXRlIGhhcyBTVEFDS19TUElMTCBpblxcbiA3NzM6XFx0XFx0XFx0XFx0ICogdGhpcyBzdGFjayBzbG90LCBidXQgY3VycmVudCBoYXMgU1RBQ0tfTUlTQyAtXFx1MDAzZVxcbiA3NzQ6XFx0XFx0XFx0XFx0ICogdGhpcyB2ZXJpZmllciBzdGF0ZXMgYXJlIG5vdCBlcXVpdmFsZW50LFxcbiA3NzU6XFx0XFx0XFx0XFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcXG4gNzc2OlxcdFxcdFxcdFxcdCAqL1xcbiA3Nzc6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3Nzg6XFx0XFx0XFx0aWYgKGkgJSBCUEZfUkVHX1NJWkUgIT0gQlBGX1JFR19TSVpFIC0gMSlcXG4gNzc5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3ODA6XFx0XFx0XFx0LyogQm90aCBvbGQgYW5kIGN1ciBhcmUgaGF2aW5nIHNhbWUgc2xvdF90eXBlICovXFxuIDc4MTpcXHRcXHRcXHRzd2l0Y2ggKG9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbQlBGX1JFR19TSVpFIC0gMV0pIHtcXG4gNzgyOlxcdFxcdFxcdGNhc2UgU1RBQ0tfU1BJTEw6XFxuIDc4MzpcXHRcXHRcXHRcXHQvKiB3aGVuIGV4cGxvcmVkIGFuZCBjdXJyZW50IHN0YWNrIHNsb3QgYXJlIGJvdGggc3RvcmluZ1xcbiA3ODQ6XFx0XFx0XFx0XFx0ICogc3BpbGxlZCByZWdpc3RlcnMsIGNoZWNrIHRoYXQgc3RvcmVkIHBvaW50ZXJzIHR5cGVzXFxuIDc4NTpcXHRcXHRcXHRcXHQgKiBhcmUgdGhlIHNhbWUgYXMgd2VsbC5cXG4gNzg2OlxcdFxcdFxcdFxcdCAqIEV4OiBleHBsb3JlZCBzYWZlIHBhdGggY291bGQgaGF2ZSBzdG9yZWRcXG4gNzg3OlxcdFxcdFxcdFxcdCAqIChicGZfcmVnX3N0YXRlKSB7LnR5cGUgPSBQVFJfVE9fU1RBQ0ssIC5vZmYgPSAtOH1cXG4gNzg4OlxcdFxcdFxcdFxcdCAqIGJ1dCBjdXJyZW50IHBhdGggaGFzIHN0b3JlZDpcXG4gNzg5OlxcdFxcdFxcdFxcdCAqIChicGZfcmVnX3N0YXRlKSB7LnR5cGUgPSBQVFJfVE9fU1RBQ0ssIC5vZmYgPSAtMTZ9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjIzLjc2NzUxMDgxNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg4MDM2NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRGlzY3JlcGFuY2llcyBpbiBTdGFjayBJdGVyYXRpb24qKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCdzIHJ1bm5pbmcgdGhyb3VnaCBteSBoZWFkLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvbXBhcmlzb246IGBvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbQlBGX1JFR19TSVpFIC0gMV1gIGFuZCBgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW0JQRl9SRUdfU0laRSAtIDFdYC4gVGhleSdyZSBib3RoIHJlZmVyZW5jaW5nIHRoZSBzYW1lIHN0YWNrIHNsb3QsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBhbmQgdGhleSBib3RoIGV2YWx1YXRlIHRvIGBTVEFDS19JVEVSYC4gIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25kLiBJZiBib3RoIGluZGljYXRlIHN0YWNrIGl0ZXJhdGlvbiwgd2hpY2ggaXMgd2hhdCBgU1RBQ0tfSVRFUmAgc2hvdWxkIHJlcHJlc2VudCwgd2h5IGFtIEkgc2VlaW5nIGEgZGlmZmVyZW5jZSBpbiBgb2xkX3JlZy1cdTAwM2V0eXBlYCB2ZXJzdXMgYGN1cl9yZWctXHUwMDNldHlwZWA/IFRoYXQncyB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS4gU29tZXRoaW5nJ3Mgbm90IHJpZ2h0LiBUaGUgdHlwZXMgKnNob3VsZCogYmUgdGhlIHNhbWUgaW4gdGhpcyBzaXR1YXRpb24uIEl0J3MgYSBjb250cmFkaWN0aW9uLlxuXG5Ob3csIG15IG5leHQgdGhvdWdodCBpcywgd2hhdCBleGFjdGx5ICppcyogdGhlIGB0eXBlYCBmaWVsZCBhc3NvY2lhdGVkIHdpdGggYFNUQUNLX0lURVJgPyBJIG5lZWQgdG8gcmV2aWV3IGhvdyBgU1RBQ0tfSVRFUmAgaXMgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgYHR5cGVgIGZpZWxkIHNpZ25pZmllcyBpbiByZWxhdGlvbiB0byBzdGFjayBpdGVyYXRpb24uIExldCdzIHRyYWNlIGJhY2sgdG8gd2hlcmUgdGhhdCBjb25zdGFudCBpcyBiZWluZyBzZXQgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzdGF0ZSBjb21wYXJpc29uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE2NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjI4LjA1NTU1MTg2MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzODAzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1RBQ0tfSVRFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2xvZy5jPTQ5Nz1zdGF0aWMgY2hhciBzbG90X3R5cGVfY2hhcltdID0ge1xcbi0tXFxua2VybmVsL2JwZi9sb2cuYy01MDItXFx0W1NUQUNLX0RZTlBUUl1cXHQ9ICdkJyxcXG5rZXJuZWwvYnBmL2xvZy5jOjUwMzpcXHRbU1RBQ0tfSVRFUl1cXHQ9ICdpJyxcXG5rZXJuZWwvYnBmL2xvZy5jLTUwNC1cXHRbU1RBQ0tfSVJRX0ZMQUddID0gJ2YnLFxcbi0tXFxua2VybmVsL2JwZi9sb2cuYz03MTE9dm9pZCBwcmludF92ZXJpZmllcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jLTc3NC1cXHRcXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL2xvZy5jOjc3NTpcXHRcXHRjYXNlIFNUQUNLX0lURVI6XFxua2VybmVsL2JwZi9sb2cuYy03NzYtXFx0XFx0XFx0Lyogb25seSBtYWluIHNsb3QgaGFzIGlkIHNldDsgc2tpcCBvdGhlcnMgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9Mzk4PXN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MzMtXFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0MzQ6XFx0XFx0XFx0aWYgKHN0eXBlID09IFNUQUNLX0RZTlBUUiB8fCBzdHlwZSA9PSBTVEFDS19JVEVSIHx8XFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MzUtXFx0XFx0XFx0ICAgIHN0eXBlID09IFNUQUNLX0lSUV9GTEFHKVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz03MDI9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04MDUtXFx0XFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo4MDY6XFx0XFx0Y2FzZSBTVEFDS19JVEVSOlxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODA3LVxcdFxcdFxcdG9sZF9yZWcgPSBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMTkwPXN0YXRpYyBib29sIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExOTgtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN0YXRlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTE5OTpcXHRcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZXN0YWNrW2ldLnNsb3RfdHlwZVswXSAhPSBTVEFDS19JVEVSKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIwMC1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MTU9c3RhdGljIGludCBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDktXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEJQRl9SRUdfU0laRTsgaisrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTA6XFx0XFx0XFx0c2xvdC1cXHUwMDNlc2xvdF90eXBlW2pdID0gU1RBQ0tfSVRFUjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTUxLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk4Nj1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA1LVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBCUEZfUkVHX1NJWkU7IGorKylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAwNjpcXHRcXHRcXHRpZiAoc2xvdC1cXHUwMDNlc2xvdF90eXBlW2pdID09IFNUQUNLX0lURVIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDctXFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTM9c3RhdGljIGludCBpc19pdGVyX3JlZ192YWxpZF9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNy1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQlBGX1JFR19TSVpFOyBqKyspXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzg6XFx0XFx0XFx0aWYgKHNsb3QtXFx1MDAzZXNsb3RfdHlwZVtqXSAhPSBTVEFDS19JVEVSKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM5LVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNTU9c3RhdGljIGludCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODAtICogICAtIGR5bnB0ciBzdGF0ZSAoU1RBQ0tfRFlOUFRSKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MTogKiAgIC0gaXRlciBzdGF0ZSAoU1RBQ0tfSVRFUikuXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODItICogICAtIGlycSBmbGFnIHN0YXRlIChTVEFDS19JUlFfRkxBRylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg0PXN0YXRpYyBib29sIGlzX3N0YWNrX3Nsb3Rfc3BlY2lhbChjb25zdCBzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwLVxcdGNhc2UgU1RBQ0tfRFlOUFRSOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkxOlxcdGNhc2UgU1RBQ0tfSVRFUjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5Mi1cXHRjYXNlIFNUQUNLX0lSUV9GTEFHOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkxNDA9c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MTQ0LVxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkxNDU6XFx0dTMyIGNsZWFyX21hc2sgPSAoMSBcXHUwMDNjXFx1MDAzYyBTVEFDS19TUElMTCkgfCAoMSBcXHUwMDNjXFx1MDAzYyBTVEFDS19JVEVSKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTE0Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDM6MjguMTE0OTM3MDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNjYyMzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCoqXG5cblJpZ2h0LCBzbyBJIHNlZSBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIGluIHRoZSBjb2RlLCBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4ganVtcHMgdG8gYFNUQUNLX0lURVJgLiAgSXQncyBsaWtlbHkgY29ubmVjdGVkOyB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBjbGVhcmluZyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aG9zZSBzdGFjayBpdGVyYXRvcnMsIG1heWJlIHNvbWUgc29ydCBvZiBSQ1UtcHJvdGVjdGVkIHJlZmVyZW5jZXMuIExldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIGl0c2VsZiB0byBjb25maXJtIG15IGh1bmNoIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgaG93IGl04oCZcyBoYW5kbGluZyB0aG9zZSBSQ1UgcHJvdGVjdGVkIHJlZmVyZW5jZXMgaW4gcmVsYXRpb24gdG8gdGhlIHN0YWNrIGl0ZXJhdG9yIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTMyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDM6MzEuOTMxNTYzNjg5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDIyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxNDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjkxNDA6XFx0c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG45MTQxOlxcdHtcXG45MTQyOlxcdFxcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xcbjkxNDM6XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcXG45MTQ0OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxuOTE0NTpcXHRcXHR1MzIgY2xlYXJfbWFzayA9ICgxIFxcdTAwM2NcXHUwMDNjIFNUQUNLX1NQSUxMKSB8ICgxIFxcdTAwM2NcXHUwMDNjIFNUQUNLX0lURVIpO1xcbjkxNDY6XFx0XFxuOTE0NzpcXHRcXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrKGVudi1cXHUwMDNlY3VyX3N0YXRlLCBzdGF0ZSwgcmVnLCBzdGFjaywgY2xlYXJfbWFzaywgKHtcXG45MTQ4OlxcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUkNVKSB7XFxuOTE0OTpcXHRcXHRcXHRcXHRyZWctXFx1MDAzZXR5cGUgXFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpO1xcbjkxNTA6XFx0XFx0XFx0XFx0cmVnLVxcdTAwM2V0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XFxuOTE1MTpcXHRcXHRcXHR9XFxuOTE1MjpcXHRcXHR9KSk7XFxuOTE1MzpcXHR9XFxuOTE1NDpcXHRcXG45MTU1OlxcdHN0YXRpYyBpbnQgcmVmX2NvbnZlcnRfYWxsb2NfcmN1X3Byb3RlY3RlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaWQpXFxuOTE1NjpcXHR7XFxuOTE1NzpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xcbjkxNTg6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG45MTU5OlxcdFxcdGludCBlcnI7XFxuOTE2MDpcXHRcXG45MTYxOlxcdFxcdGVyciA9IHJlbGVhc2VfcmVmZXJlbmNlX25vbWFyayhlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgaWQpO1xcbjkxNjI6XFx0XFxuOTE2MzpcXHRcXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZShlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgKHtcXG45MTY0OlxcdFxcdFxcdGlmIChyZWctXFx1MDAzZWlkICE9IGlkKVxcbjkxNjU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuOTE2NjpcXHRcXHRcXHRpZiAoKHJlZy1cXHUwMDNldHlwZSBcXHUwMDI2IE1FTV9BTExPQykgXFx1MDAyNlxcdTAwMjYgKHJlZy1cXHUwMDNldHlwZSBcXHUwMDI2IE1FTV9QRVJDUFUpKSB7XFxuOTE2NzpcXHRcXHRcXHRcXHRyZWctXFx1MDAzZWlkID0gMDtcXG45MTY4OlxcdFxcdFxcdFxcdHJlZy1cXHUwMDNldHlwZSBcXHUwMDI2PSB+TUVNX0FMTE9DO1xcbjkxNjk6XFx0XFx0XFx0XFx0cmVnLVxcdTAwM2V0eXBlIHw9IE1FTV9SQ1U7XFxuOTE3MDpcXHRcXHRcXHR9XFxuOTE3MTpcXHRcXHR9KSk7XFxuOTE3MjpcXHRcXG45MTczOlxcdFxcdHJldHVybiBlcnI7XFxuOTE3NDpcXHR9XFxuOTE3NTpcXHRcXG45MTc2OlxcdHN0YXRpYyB2b2lkIGNsZWFyX2NhbGxlcl9zYXZlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuOTE3NzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MpXFxuOTE3ODpcXHR7XFxuOTE3OTpcXHRcXHRpbnQgaTtcXG45MTgwOlxcdFxcbjkxODE6XFx0XFx0LyogYWZ0ZXIgdGhlIGNhbGwgcmVnaXN0ZXJzIHIwIC0gcjUgd2VyZSBzY3JhdGNoZWQgKi9cXG45MTgyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKSB7XFxuOTE4MzpcXHRcXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcXG45MTg0OlxcdFxcdFxcdF9fY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ3MsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xcbjkxODU6XFx0XFx0fVxcbjkxODY6XFx0fVxcbjkxODc6XFx0XFxuOTE4ODpcXHRzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG45MTg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjMxLjkzNDY1NTM1OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTAwNzYyMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVnaXN0ZXIgSXRlcmF0aW9uKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoaXMgYGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlX21hc2tgIGZ1bmN0aW9uIOKAkyBpdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCByZWdpc3RlciBhbmQgc3RhY2sgc2xvdCB1cGRhdGVzLiBSaWdodCwgaXQgaXRlcmF0ZXMgb3ZlciByZWdpc3RlcnMgKmFuZCogc3RhY2sgc2xvdHMuIFRoZSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGlzIGBjbGVhcl9tYXNrYCDigJMgaWYgaXQgaW5jbHVkZXMgYFNUQUNLX0lURVJgLCB0aGVuIHRoaXMgaXRlcmF0aW9uIGlzIG9wZXJhdGluZyBvbiBgU1RBQ0tfSVRFUmAgc2xvdHMuIE1ha2VzIHNlbnNlLlxuXG5BbmQsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGNvbmZpcm1zIHRoYXQgaXQgKmRvZXMqIHRvdWNoIHRoZXNlIGBTVEFDS19JVEVSYCBzbG90cy4gVGhlIGNvZGUgc25pcHBldCBoZXJlOlxuXG5gYGBjXG5pZiAocmVnLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9SQ1UpIHtcblx0cmVnLVx1MDAzZXR5cGUgXHUwMDI2PSB+KE1FTV9SQ1UgfCBQVFJfTUFZQkVfTlVMTCk7XG5cdHJlZy1cdTAwM2V0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XG59XG5gYGBcblxuLi4udGhhdCdzIGtleS4gSXQncyBtb2RpZnlpbmcgYHJlZy1cdTAwM2V0eXBlYCAqaWYqIGByZWdgIGhhcyB0aGUgYE1FTV9SQ1VgIGZsYWcgc2V0LiBIb2xkIG9uLi4uIGlmIGByZWdgIGlzIGEgYFNUQUNLX0lURVJgIHNsb3QsIGl0cyBgdHlwZWAgaXMgYmVpbmcgY2hhbmdlZCEgVGhhdCdzIHRoZSByZWFsIGNydXggb2YgdGhpcy5cblxuQnV0IHdoYXQgKmlzKiBgcmVnLVx1MDAzZXR5cGVgIGZvciBgU1RBQ0tfSVRFUmA/IFdlIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGhvdyB0aGVzZSBzbG90cyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHdoYXQgdGhlaXIgaW5pdGlhbCB0eXBlcyBhcmUuIFRoZSBgbWFya19zdGFja19zbG90c19pdGVyYCBmdW5jdGlvbiBpcyB0aGUgbmV4dCBsb2dpY2FsIHBsYWNlIHRvIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3RhdGUgdGhpcyBmdW5jdGlvbiBpcyBsZWF2aW5nIHRoZXNlIHN0YWNrIHNsb3RzIGluLCBpZiBgU1RBQ0tfSVRFUmAgaXMgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDM6MzcuNDM1NDIxMzg4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODQ2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkxNTpcXHRzdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA5MTY6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4gOTE3OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgaW5zbl9pZHgsXFxuIDkxODpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkLCBpbnQgbnJfc2xvdHMpXFxuIDkxOTpcXHR7XFxuIDkyMDpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gYnBmX2Z1bmMoZW52LCByZWcpO1xcbiA5MjE6XFx0XFx0aW50IHNwaSwgaSwgaiwgaWQ7XFxuIDkyMjpcXHRcXG4gOTIzOlxcdFxcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xcbiA5MjQ6XFx0XFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuIDkyNTpcXHRcXHRcXHRyZXR1cm4gc3BpO1xcbiA5MjY6XFx0XFxuIDkyNzpcXHRcXHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xcbiA5Mjg6XFx0XFx0aWYgKGlkIFxcdTAwM2MgMClcXG4gOTI5OlxcdFxcdFxcdHJldHVybiBpZDtcXG4gOTMwOlxcdFxcbiA5MzE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3Nsb3RzOyBpKyspIHtcXG4gOTMyOlxcdFxcdFxcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaSAtIGldO1xcbiA5MzM6XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0ID0gXFx1MDAyNnNsb3QtXFx1MDAzZXNwaWxsZWRfcHRyO1xcbiA5MzQ6XFx0XFxuIDkzNTpcXHRcXHRcXHRfX21hcmtfcmVnX2tub3duX3plcm8oc3QpO1xcbiA5MzY6XFx0XFx0XFx0c3QtXFx1MDAzZXR5cGUgPSBQVFJfVE9fU1RBQ0s7IC8qIHdlIGRvbid0IGhhdmUgZGVkaWNhdGVkIHJlZyB0eXBlICovXFxuIDkzNzpcXHRcXHRcXHRpZiAoaXNfa2Z1bmNfcmN1X3Byb3RlY3RlZChtZXRhKSkge1xcbiA5Mzg6XFx0XFx0XFx0XFx0aWYgKGluX3JjdV9jcyhlbnYpKVxcbiA5Mzk6XFx0XFx0XFx0XFx0XFx0c3QtXFx1MDAzZXR5cGUgfD0gTUVNX1JDVTtcXG4gOTQwOlxcdFxcdFxcdFxcdGVsc2VcXG4gOTQxOlxcdFxcdFxcdFxcdFxcdHN0LVxcdTAwM2V0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XFxuIDk0MjpcXHRcXHRcXHR9XFxuIDk0MzpcXHRcXHRcXHRzdC1cXHUwMDNlaWQgPSBpID09IDAgPyBpZCA6IDA7XFxuIDk0NDpcXHRcXHRcXHRzdC1cXHUwMDNlaXRlci5idGYgPSBidGY7XFxuIDk0NTpcXHRcXHRcXHRzdC1cXHUwMDNlaXRlci5idGZfaWQgPSBidGZfaWQ7XFxuIDk0NjpcXHRcXHRcXHRzdC1cXHUwMDNlaXRlci5zdGF0ZSA9IEJQRl9JVEVSX1NUQVRFX0FDVElWRTtcXG4gOTQ3OlxcdFxcdFxcdHN0LVxcdTAwM2VpdGVyLmRlcHRoID0gMDtcXG4gOTQ4OlxcdFxcbiA5NDk6XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEJQRl9SRUdfU0laRTsgaisrKVxcbiA5NTA6XFx0XFx0XFx0XFx0c2xvdC1cXHUwMDNlc2xvdF90eXBlW2pdID0gU1RBQ0tfSVRFUjtcXG4gOTUxOlxcdFxcbiA5NTI6XFx0XFx0XFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSAtIGkpO1xcbiA5NTM6XFx0XFx0fVxcbiA5NTQ6XFx0XFxuIDk1NTpcXHRcXHRyZXR1cm4gMDtcXG4gOTU2OlxcdH1cXG4gOTU3OlxcdFxcbiA5NTg6XFx0c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA5NTk6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKVxcbiA5NjA6XFx0e1xcbiA5NjE6XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IGJwZl9mdW5jKGVudiwgcmVnKTtcXG4gOTYyOlxcdFxcdGludCBzcGksIGksIGo7XFxuIDk2MzpcXHRcXG4gOTY0OlxcdFxcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMzozNy40MzY1MDkwMDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMDQ2NjA2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQSBDcml0aWNhbCBCdWcgaW4gdGhlIEJQRiBWZXJpZmllcjogUkNVIFByb3RlY3Rpb24gVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcywgYW5kIEkgdGhpbmsgSSd2ZSBmb3VuZCBhIHByZXR0eSBuYXN0eSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllci4gSXQgYWxsIHN0YXJ0ZWQgd2hlbiBJIHdhcyBsb29raW5nIGF0IGhvdyBzdGFjayBwb2ludGVycyBhcmUgaGFuZGxlZCB3aXRoIFJDVSBwcm90ZWN0ZWQgbWVtb3J5IGFuZCB1bnRydXN0ZWQgcG9pbnRlcnMuIEkgcmVhbGl6ZWQgdGhhdCB0aGUgYHN0LVx1MDAzZXR5cGVgIGZpZWxkIGNhbiBiZSBzZXQgdG8gdGhpbmdzIGxpa2UgYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgIG9yIGBQVFJfVE9fU1RBQ0sgfCBQVFJfVU5UUlVTVEVEYC4gVGhlbiBJIHJlY2FsbGVkIHRoYXQgYHN0YWNrc2FmZWAgd2FzIG9ubHkgY29tcGFyaW5nIHRoZSBgYnRmYCBmaWVsZCAoYG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZmApIGJ1dCBjcnVjaWFsbHkgKm5vdCogdGhlIGB0eXBlYCBmaWVsZCAoYG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGVgKS5cblxuVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgcHJldHR5IGFsYXJtaW5nLiBJZiBgb2xkX3JlZ2AgaXMsIHNheSwgYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgLCBtZWFuaW5nIGl0J3MgUkNVIHByb3RlY3RlZCwgYW5kIGBjdXJfcmVnYCBpcyBgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGAsIHRoZSB2ZXJpZmllciB3b3VsZCBpbmNvcnJlY3RseSBjb25zaWRlciB0aGVtIGVxdWl2YWxlbnQgYmVjYXVzZSBpdCdzIG5vdCBsb29raW5nIGF0IHRoZSBgdHlwZWAgZmxhZy4gVGhpcyBtZWFucyB0aGUgdmVyaWZpZXIgY2FuIGVycm9uZW91c2x5IGFzc3VtZSBhIHN0YXRlIGlzIHNhZmUgd2hlbiBpdOKAmXMgYWN0dWFsbHkgbG9zdCBpdHMgUkNVIHByb3RlY3Rpb24uXG5cbkFuZCB0aGlzIGlzICpleGFjdGx5KiB3aGF0IHRoZSBgaXRlcnNfdGFza19mYWlsdXJlLmNgIHRlc3QgY2FzZSBpcyBkZW1vbnN0cmF0aW5nISBJIGNhbiBzZWUgaXQuIFdlJ3JlIHNldHRpbmcgdXAgdGhlIFJDVSBsb2NrLCB0aGVuIGNvbmRpdGlvbmFsbHkgcmVsZWFzaW5nIGl0IGFuZCByZWFjcXVpcmluZyBpdC4gSWYgd2UgaGl0IHRoZSBgZWxzZWAgYnJhbmNoLCBgYnBmX3JjdV9yZWFkX3VubG9jaygpYCBnZXRzIGNhbGxlZC4gVGhpcyB0aGVuIGNhbGxzIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2Agd2hpY2ggY2xlYXJzIHRoZSBgTUVNX1JDVWAgZmxhZyBhbmQgYWRkcyB0aGUgYFBUUl9VTlRSVVNURURgIGZsYWcgdG8gdGhlIGBTVEFDS19JVEVSYCBzbG90LlxuXG5UaGUgbmV4dCBjYWxsIHRvIGBicGZfaXRlcl90YXNrX25leHQoXHUwMDI2aXQpYCBhbmQgdGhpcyBpcyB3aGVyZSBpdCdzIGFsbCBnb2luZyB3cm9uZy4gQmVjYXVzZSB0aGUgdmVyaWZpZXIgZG9lc24ndCBjaGVjayB0aGUgYHR5cGVgIGZpZWxkLCBpdCdzIG1lcmdpbmcgdGhlc2UgcGF0aHMsIGJlbGlldmluZyB0aGUgaXRlcmF0b3IgaXMgc3RpbGwgdmFsaWQgKFJDVSBwcm90ZWN0ZWQpIGV2ZW4gaW4gdGhlIHVucHJvdGVjdGVkIGBlbHNlYCBicmFuY2ghIFRoaXMgaXMgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgZGF0YSByYWNlIHZ1bG5lcmFiaWxpdHkgbWFuaWZlc3RpbmcgaW4gdGhlIHZlcmlmaWVyJ3MgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLlxuXG5NeSBndXQgc2F5cyB0aGlzIGlzIGEgY3JpdGljYWwgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBwcm9iYWJseSBgYnBmX2NoZWNrYCBvciBgZG9fY2hlY2tgIG9yIGV2ZW4gdGhlIHByb2JsZW1hdGljIHN0YXRpYyBgc3RhY2tzYWZlYC4gYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQsIGFsdGhvdWdoIGl0J3MgdmVyeSBnZW5lcmljLiBNYXliZSBgYnBmX2l0ZXJfdGFza19uZXdgIGJ1dCB0aGF0J3MgYSBoZWxwZXIva2Z1bmMuIEkgbmVlZCB0byBmaW5kIHRoZSBrZnVuYyBmb3IgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMzo0Ny40NDExNzM1MzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzI4ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX3Rhc2tfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTQ5MDI9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2Nzc19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDkwMy0jZW5kaWZcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTA0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90YXNrX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9SQ1VfUFJPVEVDVEVEKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MDUtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rhc2tfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTExMTQ9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTExNS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjExMTY6X19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfbmV3KHN0cnVjdCBicGZfaXRlcl90YXNrICppdCxcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMTctXFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX19udWxsYWJsZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzMDE4PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMzMTctXFx0XFx0XFx0XFx0ICogSWYgdGhlIGl0ZXJhdG9yJ3MgY29uc3RydWN0b3IgKHRoZSBfbmV3XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMzE4OlxcdFxcdFxcdFxcdCAqIGZ1bmN0aW9uIGUuZy4sIGJwZl9pdGVyX3Rhc2tfbmV3KSBoYXMgYmVlblxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzMxOS1cXHRcXHRcXHRcXHQgKiBhbm5vdGF0ZWQgd2l0aCBCUEYga2Z1bmMgZmxhZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMzo0Ny41MDU1MDYzNzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyNTYzMDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgdGhlIGJwZl9pdGVyX3Rhc2tfbmV3IEJ1ZyoqXG5cbk9rYXksIHNvIHRoZSBrZnVuYyBpbnZvbHZlZCBoZXJlIGlzIGBicGZfaXRlcl90YXNrX25ld2AuIEJ1dCBob2xkIG9uLCB0aGUgcmVhbCBjdWxwcml0IHNlZW1zIHRvIGJlIHRoZSB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHN0YWNrc2FmZWAgbG9naWMuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZHJpbGwgZG93bi4gVGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciBpcywgb2YgY291cnNlLCBgYnBmX2NoZWNrYC4gQXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSB2ZXJpZmllciBiZXNpZGVzIHRoYXQgb25lPyBMZXQgbWUgc2Vl4oCmQWggeWVzLCBgZnVuY19zdGF0ZXNfZXF1YWxgLCBgc3RhdGVzX2VxdWFsYCwgYW5kIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuXG5cblNpbmNlIGBzdGFja3NhZmVgIGlzIHN0YXRpYywgSSBjYW4ndCBkaXJlY3RseSB0YXJnZXQgaXQuIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgKm5vdCogc3RhdGljLCBzbyBpdCdzIGEgY2FuZGlkYXRlLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBpdCdzIGV4cG9ydGVkIG9yIGdsb2JhbC4gVGhhdCBtaWdodCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAyMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMzo1My4wMzExNDAwMzVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTMzNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9MTIxND1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIzOC1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzk6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyNDAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NDU2PXN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzQ5My1cXHRcXHRpZiAoYnBmX2lzX3BydW5lX3BvaW50KGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc0OTQ6XFx0XFx0XFx0ZXJyID0gYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoZW52LCBlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0OTUtXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjUzLjA5MzA3ODA0NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTAyNDc4NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWNhdGlvbiBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgYSBnbG9iYWxseSBhY2Nlc3NpYmxlIHZhcmlhYmxlLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgbWVhbnMgaXQncyBsaWtlbHkgcGxheWluZyBhIHJvbGUgaW4gdGhlIHN0YXRlIG1hbmFnZW1lbnQgYWNyb3NzIHRoZSAqZW50aXJlKiBCUEYgdmVyaWZpZXIgb3BlcmF0aW9uLCByYXRoZXIgdGhhbiBiZWluZyBjb25maW5lZCB0byBhIHNpbmdsZSBmdW5jdGlvbiBvciBsb2NhbCBjb250ZXh0LiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWwgZm9yIGNvbXBsZXggaW50ZXJhY3Rpb25zIGFuZCwgcGVyaGFwcywgb3Bwb3J0dW5pdGllcyBmb3Igc3VidGxlIGJ1Z3Mgb3Igb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIGhvdyB0aGUgdmVyaWZpZXIgdHJhY2tzIHdoYXQncyBiZWVuIGFuYWx5emVkLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogYGJwZl9jaGVja2AuICBJdCdzIGJlZW4gZmxhZ2dlZCBhcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB2ZXJpZmljYXRpb24uIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgYmVnaW5zLiBLbm93aW5nIHRoaXMsIG15IGZvY3VzIGhhcyB0byBiZSBvbiBmaWd1cmluZyBvdXQgdGhlICppbml0aWFsKiBjb250cm9sIGZsb3cgdGhyb3VnaCBgYnBmX2NoZWNrYCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgZnJvbSB0aGUgdmVyeSBzdGFydC4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBvcGVyYXRpb24uIFdoYXQgaW5wdXRzIGRvZXMgaXQgdGFrZT8gV2hhdCBkb2VzIGl0IGluaXRpYWxpemU/IFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGl0IHVzZXM/IFVuZGVyc3RhbmRpbmcgYGJwZl9jaGVja2AgaXMgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAgdG8gZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCB2ZXJpZmljYXRpb24gc3RyYXRlZ3kgYW5kIGl0cyBsaWtlbHkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGdsb2JhbCBzdGF0ZSBjb250cm9sbGVkIGJ5IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIExldCdzIGRpZyBpbiBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY0NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjU2Ljk5NTU1OTI1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODcyNjgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9icGZfaXRlci5jPTUwND1pbnQgYnBmX2l0ZXJfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNS1cXHRpZiAoIWJwZnB0cl9pc19udWxsKHVsaW5mbykpIHtcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NTI2OlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIHNpemVvZihsaW5mbyksXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNy1cXHRcXHRcXHRcXHRcXHQgICAgICAgbGluZm9fbGVuKTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9Njg1MD1ib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MDI3LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjcwMjg6XFx0XFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xcbmtlcm5lbC9icGYvYnRmLmMtNzAyOS1cXHRcXHR0bmFtZSArPSBzaXplb2YoXFxcImJ0Zl90cmFjZV9cXFwiKSAtIDE7XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jPTQyNj1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTU2MS0gKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjU2MjppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvY2ZnLmMtNTYzLXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc3Nj1FWFBPUlRfU1lNQk9MKF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NzctXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzc4OmludCBfX2Nncm91cF9icGZfY2hlY2tfZGV2X3Blcm1pc3Npb24oc2hvcnQgZGV2X3R5cGUsIHUzMiBtYWpvciwgdTMyIG1pbm9yLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc3OS1cXHRcXHRcXHRcXHQgICAgICBzaG9ydCBhY2Nlc3MsIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy03MC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmZ1bmNzOyBpKyspIHtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjcxOlxcdFxcdHJldCA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1cmVjb3JkLCBrcmVjX3NpemUsIHVyZWNfc2l6ZSk7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy03Mi1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTIxMz1zdGF0aWMgaW50IGNoZWNrX2J0Zl9saW5lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1My1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfbGluZm87IGkrKykge1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6MjU0OlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1NS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTM0MT1zdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0zNzYtXFx0XFx0LyogZnV0dXJlIHByb29maW5nIHdoZW4gc2l6ZW9mKGJwZl9jb3JlX3JlbG8pIGNoYW5nZXMgKi9cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjM3NzpcXHRcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odV9jb3JlX3JlbG8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM3OC1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQwOS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQxMDppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MTEtXFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM3LVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NDM4OmludCBicGZfY2hlY2tfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzOS1cXHRcXHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNi0gKiBBbmRpIEtsZWVuIC0gRml4IGEgZmV3IGJhZCBidWdzIGFuZCByYWNlcy5cXG5rZXJuZWwvYnBmL2NvcmUuYzoxNzogKiBLcmlzIEthdHRlcmpvaG4gLSBBZGRlZCBtYW55IGFkZGl0aW9uYWwgY2hlY2tzIGluIGJwZl9jaGVja19jbGFzc2ljKClcXG5rZXJuZWwvYnBmL2NvcmUuYy0xOC0gKi9cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI1NzQ9Ym9vbCBicGZfcHJvZ19tYXBfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjU4Ni1cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTg3OnN0YXRpYyBpbnQgYnBmX2NoZWNrX3RhaWxfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbmtlcm5lbC9icGYvY29yZS5jLTI1ODgte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjYzMz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQzLVxcdFxcdC8qXFxua2VybmVsL2JwZi9jb3JlLmM6MjY0NDpcXHRcXHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXFxua2VybmVsL2JwZi9jb3JlLmMtMjY0NS1cXHRcXHQgKiBwb2ludCwgb25seSBpbnNuX2F1eF9kYXRhIGlzIHVzZWQgYWZ0ZXIgZmFpbHVyZSwgc28gaXQgc2hvdWxkIGJlIHJlc3RvcmVkXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjgwPXN0cnVjdCBicGZfcHJvZyAqX19icGZfcHJvZ19zZWxlY3RfcnVudGltZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjcyNi1cXHQgKi9cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNzI3OlxcdCplcnIgPSBicGZfY2hlY2tfdGFpbF9jYWxsKGZwKTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzI4LVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDE1LVxcbmtlcm5lbC9icGYvY29yZS5jOjM0MTY6dTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICpwKVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MTcte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkwLSAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTItXFx0XFx0XFx0ICAgICBzaXplX3QgZXhwZWN0ZWRfc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MDY9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTIxLVxcdC8qIHJ1biBlQlBGIHZlcmlmaWVyICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzEyMjpcXHRlcnIgPSBicGZfY2hlY2soXFx1MDAyNnByb2csIGF0dHIsIHVhdHRyLCBhdHRyX2xvZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzEyMy1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM2MjQ9c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzU2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM3NTc6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzU4LVxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ0Z3RfaW5mbyk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01MDg5PXN0YXRpYyBpbnQgYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MTAzLVxcdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfcHJvZ19pbmZvLCBhdHRhY2hfYnRmX2lkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MTA0OlxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIGxlbiwgaW5mb19sZW4pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxMDUtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUzNzk9c3RhdGljIGludCBicGZfbWFwX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM4OS1cXHRsZW4gPSBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX21hcF9pbmZvLCBoYXNoX3NpemUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUzOTA6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM5MS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTQ1MD1zdGF0aWMgaW50IGJwZl9idGZfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0NTk6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDYwLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDY2PXN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDc2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0Nzc6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKGluZm8pLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ3OC1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTUwOT1zdGF0aWMgaW50IHRva2VuX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUxNy1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTE4OlxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUxOS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjI5ND1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzAyLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzMDM6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVhdHRyLCBzaXplb2YoYXR0ciksIHNpemUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMDQtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTQtXFx0aWYgKGNtZCBcXHUwMDI2IEJQRl9DT01NT05fQVRUUlMpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzE1OlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0cl9jb21tb24sXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxNi1cXHRcXHRcXHRcXHRcXHQgICAgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9jb21tb25fYXR0ciwgbG9nX3RydWVfc2l6ZSksXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDg2PWludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTA5NzpcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCBOVUxMLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTgtXFx0XFx0XFx0XFx0ICAgICAgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfYnRmX2lkLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYyMj1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MzY6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoYnRmLCBwcm9nLCBpZHNbaV0sIFxcdTAwMjZ0Z3RfaW5mbyk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzNy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU3PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5Oi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIwNTk9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fcmJ0cmVlX25vZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjA3MC0gKiBMU00gaG9va3MgYW5kIGl0ZXJzIChib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSkgYXJlIHNhZmUuXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMDcxOiAqIEFueSBzbGVlcGFibGUgcHJvZ3MgYXJlIGFsc28gc2FmZSBzaW5jZSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCgpIGVuZm9yY2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwNzItICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MDk2PXN0YXRpYyBib29sIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkxMDktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MTEwOmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTExMS1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTIzPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTUzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTU1NDpcXHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIHByb2csIHRndF9wcm9nLCBidGZfaWQsIFxcdTAwMjZ0Z3RfaW5mbyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTU1LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MjItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjIzOmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MjQtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwNTY9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDcwLS8qXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDcxOiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3Mi0gKiBvbmNlIHRoZSBwcm9ncmFtJ3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwNzk9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxOTUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTk2OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5Ny1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIxMC1cXHQvKiAnc3RydWN0IGJwZl92ZXJpZmllcl9lbnYnIGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCdzIG5vdCBzbWFsbCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAyMTE6XFx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIxMi1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMwMy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMDQ6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMwNS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMxNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMTY6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMxNy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMyOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMzA6XFx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMzMS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDM6NTcuMDk0MjkzMDI3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MzczNTYyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVmVyaWZpY2F0aW9uIEJ1ZyBIdW50aW5nIEpvdXJuZXkqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgdGhpcyBCUEYgdmVyaWZpZXIgYnVnLiBUaGUgZW50cnkgcG9pbnQsIGFzIEkgc2VlIGl0LCBpcyBgYnBmX2NoZWNrYCDigJMgdGhhdCdzIHRoZSBtYWluIGZ1bmN0aW9uIHRoZSBzeXN0ZW0gdXNlcywgYW5kIGl0J3MgY2FsbGVkIGJ5IGBicGZfcHJvZ19sb2FkYC4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIGBicGZfY2hlY2tgIHdvdWxkIGJlIHRoZSBiZXN0IGZvY3VzLCBidXQgaXQncyBhIHZlcnkgZ2VuZXJpYyBmdW5jdGlvbiwgYW5kIEkgbmVlZCB0byBiZSBtb3JlIHNwZWNpZmljLlxuXG5UaGVuLCBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGFuZCBsYW5kZWQgb24gYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gSSBzZWUgdGhhdCBgZG9fY2hlY2tgIHJ1bnMgdGhlIG1haW4gbG9vcCwgYW5kIGBmdW5jX3N0YXRlc19lcXVhbGAgaXMgY2FsbGVkIHRocm91Z2ggYHN0YXRlc19lcXVhbGAsIHdoaWNoIGlzIGNhbGxlZCBieSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBhbmQgdGhhdCdzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IgLSBtb3JlIHNwZWNpZmljaXR5LiBUaGF0J3MgYSBzdHJvbmcgY2FuZGlkYXRlLlxuXG5JIGFsc28gbm90aWNlZCBgYnBmX2l0ZXJfdGFza19uZXdgLCB3aGljaCBpcyBhIGtmdW5jIHRoYXQgY3JlYXRlcyB0aGUgaXRlcmF0b3IsIGlzIHJlbGV2YW50IHRvIHRoZSB0ZXN0IGNhc2UuIEJ1dCwgaGFuZyBvbi4uLiBpdCdzIGEga2Z1bmMsIG1lYW5pbmcgaXQncyBjYWxsZWQgYXQgcnVudGltZS4gU2luY2UgdGhlIGJ1ZyBpcyBpbiB0aGUgdmVyaWZpZXIsIEkgd2FudCB0byBmdXp6IHRoZSB2ZXJpZmllciwgbm90IHJ1bnRpbWUgY29kZS4gU28sIGxldCdzIGtlZXAgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBvbiB0aGUgbGlzdC4gYGJwZl9jaGVja2AgaXMgc3RpbGwgcmVsZXZhbnQgdG9vLCBnaXZlbiBpdCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIGNvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBsZXQncyBjaGVjayBmb3IgYW55IHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLCBJJ2xsIG5lZWQgdGhhdC4gV2hhdCBhYm91dCBgQ09ORklHX0JQRl9KSVRgPyBBbmQsIGlzIHRoZXJlIGFueXRoaW5nIHJlbGF0ZWQgdG8gYENPTkZJR19UQVNLU19SQ1VgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBUaGUgdGVzdCBjYXNlIHVzZXMgYGJwZl9pdGVyX3Rhc2tfbmV3YCBzbyBsZXQncyBjaGVjayBpdCBpbiBga2VybmVsL2JwZi90YXNrX2l0ZXIuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjkzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjA0LjYzMTY1MjIxOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxOTM1MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX3Rhc2tfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdGFza19pdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90YXNrX2l0ZXIuYz0xMTE0PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMTUtXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMTE2Ol9fYnBmX2tmdW5jIGludCBicGZfaXRlcl90YXNrX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFzayAqaXQsXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMTE3LVxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19fbnVsbGFibGUsIHVuc2lnbmVkIGludCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDQ6MDUuMDkzNjAwMTY1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODU3NzM0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYHRhc2tfaXRlci5jYCBmb3IgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCdzIEJQRiBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0YXNrcywgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYW55IHRhc2stc3BlY2lmaWMgQlBGIGNvbmZpZ3VyYXRpb25zIGlzIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyBvciBjb25kaXRpb25zIGRlZmluZWQgaW4gdGhpcyBmaWxlLiBJdCdzIHRpbWUgdG8gY2hlY2sgaWYgdGhlIGNvZGUgaGFzIGFueXRoaW5nIG9mIG5vdGUuIExldCBtZSB0YWtlIGEgbG9vayBpbnNpZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjMyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDQ6MDguMDc5Mzc1ODk5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5NzUxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFza19pdGVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjA4LjE4MjM1NDc5NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzUzMDM4Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIEJQRiBUZXN0IENvbmZpZ3VyYXRpb24gYW5kIFJDVSBVc2FnZSoqXG5cblJpZ2h0LCBsZXQncyBzZWUuLi4gdGhpcyBjb2RlJ3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIG9idmlvdXMgb25lLCBidXQgYXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZiBoZXJlPyBDcnVjaWFsIHRvIGNoZWNrLCBiZWNhdXNlIGRlcGVuZGVuY2llcyBjYW4gYmUgc3VidGxlIGluIEJQRi5cblxuTm93LCBJIHNlZSB0aGUgdGVzdCBjb2RlIG1ha2VzIHVzZSBvZiBgYnBmX3JjdV9yZWFkX2xvY2tgLiBPa2F5LCB0aGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byBzb21lIHNoYXJlZCByZXNvdXJjZSwgYW5kIHRoZSBjb2RlIGlzIGNhcmVmdWxseSBhZGhlcmluZyB0byBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIHNlbWFudGljcy4gR290dGEgbWFrZSBzdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCAqd2h5KiB0aGV5J3JlIHVzaW5nIFJDVSBoZXJlLiBXaGF0J3MgdGhlIGNyaXRpY2FsIHNlY3Rpb24/IFdoYXQgZGF0YSBpcyBiZWluZyBwcm90ZWN0ZWQ/XG5cbk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgYnBmX3JjdV9yZWFkX2xvY2tgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIHVzZSBoZXJlIGlzIGJvdGggY29ycmVjdCBhbmQgZWZmaWNpZW50LiBMb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGZvciBkZWFkbG9ja3MsIG1pc3NlZCB1cGRhdGVzLCBvciBpbmVmZmljaWVudCBjcml0aWNhbCBzZWN0aW9ucyB3aXRoIFJDVS4gR290dGEgZG91YmxlIGNoZWNrIHRoYXQgdGhlIHVubG9ja3MgYXJlIHByZXNlbnQgYW5kIGNvcnJlY3RseSBtYXRjaGVkIHdpdGggdGhlIGxvY2tzLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGFuZCBrZXJuZWwgYXJlIHBsYXlpbmcgbmljZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjEzLjUzNTM5NjI2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjIzOTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmN1X3JlYWRfbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz0zMzQyPV9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZG9ubHlfY2FzdChjb25zdCB2b2lkICpvYmpfX2lnbiwgdTMyIGJ0Zl9pZF9faylcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTMzNDYtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MzM0NzpfX2JwZl9rZnVuYyB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzM0OC17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODg1PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmRvbmx5X2Nhc3QsIEtGX0ZBU1RDQUxMKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4ODY6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yY3VfcmVhZF9sb2NrKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4ODctQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yY3VfcmVhZF91bmxvY2spXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDQ0ND1zdGF0aWMgYm9vbCBpbl9zbGVlcGFibGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00NDQ4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0NDQ5Oi8qIFRoZSBub24tc2xlZXBhYmxlIHByb2dyYW1zIGFuZCBzbGVlcGFibGUgcHJvZ3JhbXMgd2l0aCBleHBsaWNpdCBicGZfcmN1X3JlYWRfbG9jaygpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ0NTAtICogY2FuIGRlcmVmZXJlbmNlIFJDVSBwcm90ZWN0ZWQgcG9pbnRlcnMgYW5kIHJlc3VsdCBpcyBQVFJfVFJVU1RFRC5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01ODIwPXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OTI5LVxcdFxcdCAqICdjZ3JvdXBzJyBwb2ludGVyIGlzIHVudHJ1c3RlZCBpZiB0YXNrLVxcdTAwM2VjZ3JvdXBzIGRlcmVmZXJlbmNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5MzA6XFx0XFx0ICogaGFwcGVuZWQgaW4gYSBzbGVlcGFibGUgcHJvZ3JhbSBvdXRzaWRlIG9mIGJwZl9yY3VfcmVhZF9sb2NrKClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTkzMS1cXHRcXHQgKiBzZWN0aW9uLiBJbiBhIG5vbi1zbGVlcGFibGUgcHJvZ3JhbSBpdCdzIHRydXN0ZWQgd2hpbGUgaW4gUkNVIENTIChha2EgTUVNX1JDVSkuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwOTc9c3RhdGljIGludCBjaGVja19yZXNvdXJjZV9sZWFrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgZXhjZXB0aW9uX2V4aXQsIGJvb2wgY2hlY2tfbG9jaywgY29uc3QgY2hhciAqcHJlZml4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMTE3LVxcdGlmIChjaGVja19sb2NrIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlY3VyX3N0YXRlLVxcdTAwM2VhY3RpdmVfcmN1X2xvY2tzKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMTE4OlxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgY2Fubm90IGJlIHVzZWQgaW5zaWRlIGJwZl9yY3VfcmVhZF9sb2NrLWVkIHJlZ2lvblxcXFxuXFxcIiwgcHJlZml4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAxMTktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExMzc9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTU4LVxcdEtGX2JwZl9yZG9ubHlfY2FzdCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNTk6XFx0S0ZfYnBmX3JjdV9yZWFkX2xvY2ssXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTYwLVxcdEtGX2JwZl9yY3VfcmVhZF91bmxvY2ssXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEyMzE9QlRGX0lEKGZ1bmMsIGJwZl9yZG9ubHlfY2FzdClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMzI6QlRGX0lEKGZ1bmMsIGJwZl9yY3VfcmVhZF9sb2NrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIzMy1CVEZfSUQoZnVuYywgYnBmX3JjdV9yZWFkX3VubG9jaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTM1Nz1zdGF0aWMgYm9vbCBpc19rZnVuY19yZXRfbnVsbChzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzY1OnN0YXRpYyBib29sIGlzX2tmdW5jX2JwZl9yY3VfcmVhZF9sb2NrKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjYte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTM2NzpcXHRyZXR1cm4gbWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JjdV9yZWFkX2xvY2tdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM2OC19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTMwMTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE1MS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNTI6XFx0cmN1X2xvY2sgPSBpc19rZnVuY19icGZfcmN1X3JlYWRfbG9jayhcXHUwMDI2bWV0YSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTUzLVxcdHJjdV91bmxvY2sgPSBpc19rZnVuY19icGZfcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZtZXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDQ6MTMuNjAxNjM5NzA4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTcwMzkwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEJQRiBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYGJwZl9yY3VfcmVhZF9sb2NrYC4gSSBzZWUgaXQncyBkZWZpbmVkIHdpdGhpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGFuZCBjb21waWxlZCB1bmRlciB0aGUgdW1icmVsbGEgb2YgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbi4gSG93ZXZlciwgbXkgZ3V0IHRlbGxzIG1lIHRoZXJlJ3Mgc29tZXRoaW5nIGVsc2UgYXQgcGxheSwgZXNwZWNpYWxseSB3aXRoIG15IGJhY2tncm91bmQgaW4gQlBGOyBJJ20gcHJldHR5IHN1cmUgYENPTkZJR19ERUJVR19JTkZPX0JURmAgaXMgb2Z0ZW4gY3J1Y2lhbCwgc3BlY2lmaWNhbGx5IGZvciBrZnVuY3MgYW5kIGFueXRoaW5nIEJURi1kZXBlbmRlbnQuIE15IGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBCVEYgaXMgcXVpdGUgcHJldmFsZW50IGhlcmUuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lczogaXMgYENPTkZJR19ERUJVR19JTkZPX0JURmAgKnJlcXVpcmVkKiBoZXJlPyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGNvbmZpcm0gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxNTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowNDoxNy45OTg2ODIwNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ4ODUwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0RFQlVHX0lORk9fQlRGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9NDA9aWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICs9IHN5c2ZzX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Mi1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9idGYuYz02Mzg2PXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfYmFzZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02MzkxLVxcbmtlcm5lbC9icGYvYnRmLmM6NjM5MjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSlcXG5rZXJuZWwvYnBmL2J0Zi5jLTYzOTMtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTY0NzI9c3RhdGljIF9fdTMyIGJ0Zl9yZWxvY2F0ZV9pZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIF9fdTMyIGlkKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NDc4LVxcbmtlcm5lbC9icGYvYnRmLmM6NjQ3OTojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTY0ODAtXFxua2VybmVsL2JwZi9idGYuYz02NDgxPXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCB2b2lkICpkYXRhLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NTc2LVxcbmtlcm5lbC9icGYvYnRmLmM6NjU3NzojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jLTY1NzgtXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg0NjM9ZW51bSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg0NjYtXFxua2VybmVsL2JwZi9idGYuYzo4NDY3OiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODQ2OC1zdHJ1Y3QgYnRmX21vZHVsZSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg2MDU9ZnNfaW5pdGNhbGwoYnRmX21vZHVsZV9pbml0KTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg2MDY6I2VuZGlmIC8qIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTICovXFxua2VybmVsL2JwZi9idGYuYy04NjA3LVxcbmtlcm5lbC9icGYvYnRmLmM9ODYwOD1zdHJ1Y3QgbW9kdWxlICpidGZfdHJ5X2dldF9tb2R1bGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04NjEwLVxcdHN0cnVjdCBtb2R1bGUgKnJlcyA9IE5VTEw7XFxua2VybmVsL2JwZi9idGYuYzo4NjExOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODYxMi1cXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODYzOD1zdGF0aWMgc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcXG5rZXJuZWwvYnBmL2J0Zi5jLTg2Mzkte1xcbmtlcm5lbC9icGYvYnRmLmM6ODY0MDojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NDEtXFx0c3RydWN0IGJ0Zl9tb2R1bGUgKmJ0Zl9tb2QsICp0bXA7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NTEtXFxua2VybmVsL2JwZi9idGYuYzo4NjUyOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODY1My1cXHRtdXRleF9sb2NrKFxcdTAwMjZidGZfbW9kdWxlX211dGV4KTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODY2OD1zdGF0aWMgaW50IGNoZWNrX2J0Zl9rY29uZmlncyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IGNoYXIgKmZlYXR1cmUpXFxua2VybmVsL2JwZi9idGYuYy04NjY5LXtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg2NzA6XFx0aWYgKCFtb2R1bGUgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB7XFxua2VybmVsL2JwZi9idGYuYy04NjcxLVxcdFxcdHByX2VycihcXFwibWlzc2luZyB2bWxpbnV4IEJURiwgY2Fubm90IHJlZ2lzdGVyICVzXFxcXG5cXFwiLCBmZWF0dXJlKTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODY3My1cXHR9XFxua2VybmVsL2JwZi9idGYuYzo4Njc0OlxcdGlmIChtb2R1bGUgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUykpXFxua2VybmVsL2JwZi9idGYuYy04Njc1LVxcdFxcdHByX3dhcm4oXFxcIm1pc3NpbmcgbW9kdWxlIEJURiwgY2Fubm90IHJlZ2lzdGVyICVzXFxcXG5cXFwiLCBmZWF0dXJlKTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODgxNT1zdGF0aWMgaW50IGJ0Zl9jaGVja19rZnVuY19uYW1lKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqZnVuY19uYW1lLCB1MzIga2luZClcXG5rZXJuZWwvYnBmL2J0Zi5jLTg4MTYte1xcbmtlcm5lbC9icGYvYnRmLmM6ODgxNzojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTg4MTgtXFx0c3RydWN0IGJ0Zl9tb2R1bGUgKmJ0Zl9tb2QsICp0bXA7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg4MzEtXFxua2VybmVsL2JwZi9idGYuYzo4ODMyOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODgzMy1cXHRndWFyZChtdXRleCkoXFx1MDAyNmJ0Zl9tb2R1bGVfbXV0ZXgpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz05NDgwPXN0YXRpYyBzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKnBvcHVsYXRlX2NhbmRfY2FjaGUoc3RydWN0IGJwZl9jYW5kX2NhY2hlICpjYW5kcyxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtOTUwNy1cXG5rZXJuZWwvYnBmL2J0Zi5jOjk1MDg6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy05NTA5LXN0YXRpYyB2b2lkIF9fcHVyZ2VfY2FuZF9jYWNoZShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfY2FuZF9jYWNoZSAqKmNhY2hlLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTI3Mjg9aW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzQ0LVxcdFxcdGlmICghYnRmX3ZtbGludXgpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mjc0NTpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfREVCVUdfSU5GT19CVEZcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzQ2LVxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTk4ND1zdGF0aWMgaW50IGNoZWNrX3B0cl90b19tYXBfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk5OC1cXHRpZiAoIWJ0Zl92bWxpbnV4KSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5OTk6XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtYXBfcHRyIGFjY2VzcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgQ09ORklHX0RFQlVHX0lORk9fQlRGXFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAwMC1cXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3ODAzPXN0YXRpYyBpbnQgY2hlY2tfcHNldWRvX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODE5LVxcdFxcdGlmICghYnRmX3ZtbGludXgpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc4MjA6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJrZXJuZWwgaXMgbWlzc2luZyBCVEYsIG1ha2Ugc3VyZSBDT05GSUdfREVCVUdfSU5GT19CVEY9eSBpcyBzcGVjaWZpZWQgaW4gS2NvbmZpZy5cXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzgyMS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTY4MD1zdHJ1Y3QgYnRmICpicGZfZ2V0X2J0Zl92bWxpbnV4KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Njg1OlxcdGlmICghYnRmIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4Ni1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZidGZfdm1saW51eF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDQ6MTguMDgzNTczMjA4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDMxMDM1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBCUEYgSXRlcmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGZvciB0aGlzIEJQRi1iYXNlZCB0YXNrIGl0ZXJhdGlvbi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBDT05GSUdfREVCVUdfSU5GT19CVEZgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQsIGFuZCBJIGFsc28gbmVlZCB0byBlbnN1cmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIHNvIGZhci4gQnV0LCB5b3Uga25vdyBob3cgaXQgaXMsIGxldCdzIGp1c3QgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuXG5cblNwZWNpZmljYWxseSwgdGhpcyB0ZXN0IHVzZXMgYGJwZl9pdGVyX3Rhc2tfbmV3YC4gU28sIG15IG5leHQgbW92ZSBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBga2VybmVsL2JwZi90YXNrX2l0ZXIuY2AsIGFuZCBzZWUgaWYgYGJwZl9pdGVyX3Rhc2tfbmV3YCBpdHNlbGYgaXMgZ2F0ZWQgYmVoaW5kIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGZsYWdzLiBHb3R0YSBiZSB0aG9yb3VnaCwgYW5kIGEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIGNoZWNrIGlzIGFsd2F5cyBhIGdvb2QgaWRlYSBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIG1vcmUgY29tcGxleCBzdHVmZi4gSXQgd291bGQgYmUgaGVscGZ1bCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwcmVjb25kaXRpb25zIHRvIGNvbnNpZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQxMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjIyLjg4NjY3ODgzOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NTAzNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX3Rhc2tfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdGFza19pdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90YXNrX2l0ZXIuYz0xMTE0PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMTUtXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMTE2Ol9fYnBmX2tmdW5jIGludCBicGZfaXRlcl90YXNrX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFzayAqaXQsXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMTE3LVxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19fbnVsbGFibGUsIHVuc2lnbmVkIGludCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDQ6MjIuOTkyMTg2MzA1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MjM4NjgyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQlBGIEl0ZXJhdG9yIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgYSBmdXp6aW5nIHN0cmF0ZWd5LiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYCBpcyBhbHdheXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0J3MgZ29vZDsgaXQncyBhIHN0YWJsZSB0YXJnZXQuIEkgY29uZmlybWVkIHRoaXMgYnkgY2hlY2tpbmcgdGhlIGBNYWtlZmlsZWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYGJwZl9jaGVja2Agc2luY2UgaXQncyBhIGZ1bmRhbWVudGFsIHZlcmlmaWVyIGZ1bmN0aW9uLiBIb3dldmVyLCB0aGF0J3MgYSAqdmVyeSogYnJvYWQgdGFyZ2V0LiBTbywgSSBkdWcgZGVlcGVyLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGhpZ2hsaWdodHMgdGhlIHByb2JsZW0gaW4gYHN0YWNrc2FmZWAsIHdpdGhpbiBgZnVuY19zdGF0ZXNfZXF1YWxgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHN0YXRlc19lcXVhbGAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIEJpbmdvISBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGxvb2tzIGxpa2UgYSBtb3JlIHByb21pc2luZyBmb2N1cyBiZWNhdXNlIGl0J3Mgbm9uLXN0YXRpYyBhbmQgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgc3RhdGUgY29tcGFyaXNvbiB0aGF0J3MgYXQgdGhlIGhlYXJ0IG9mIHRoaXMgYnVnLiBJIGNvbnNpZGVyZWQgYGRvX2NoZWNrYCwgYnV0IHRoYXQncyBzdGF0aWMsIHNvIGl0J3Mgbm90IGEgZGlyZWN0IHRhcmdldC5cblxuU2luY2UgdGhpcyBidWcgaXMgYWJvdXQgUkNVLXByb3RlY3RlZCBpdGVyYXRvcnMsIGFuZCBnaXZlbiB0aGUgdGVzdCBjYXNlcywgSSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUga2Z1bmNzIGBicGZfaXRlcl90YXNrX25ld2AgYW5kIGBicGZfaXRlcl90YXNrX25leHRgLiBUaGVzZSBhcmUgdGhlIGtmdW5jcyAqdXNlZCogYnkgdGhlIGl0ZXJhdG9yIGZlYXR1cmUuIGBicGZfaXRlcl90YXNrX25ld2AgaXMgZGVmaW5lZCBhcyBgbm9pbmxpbmVgLCBidXQsIGltcG9ydGFudGx5LCBpdCdzICpub3QqIHN0YXRpYywgc28gaXQncyBnbG9iYWxseSB2aXNpYmxlLlxuXG5JbiBzdW1tYXJ5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdDpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFllc1xuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBicGZfY2hlY2tgLCBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBgYnBmX2l0ZXJfdGFza19uZXdgLCBgYnBmX2l0ZXJfdGFza19uZXh0YFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgQlBGX1NZU0NBTExgLCBgREVCVUdfSU5GT19CVEZgXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBSQ1UgcHJvdGVjdGlvbiBpc3N1ZSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllcidzIGBzdGFja3NhZmVgIGZ1bmN0aW9uLiBUaGUgdmVyaWZpZXIgd2FzIGluY29ycmVjdGx5IG1lcmdpbmcgc3RhdGVzIHdpdGggZGlmZmVyZW50IFJDVSBwcm90ZWN0aW9uIHN0YXR1c2VzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1lbW9yeSB1bnNhZmV0eS4gYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBzdGF0ZSBjb21wYXJpc29ucywgd2hpbGUgYGJwZl9jaGVja2AgaXMgcmVsYXRlZCB0byB0aGUgbW9yZSBiYXNpYyBCUEYgdmVyaWZpY2F0aW9uLCBhbmQgYGJwZl9pdGVyX3Rhc2tfbmV3YCBhbmQgYGJwZl9pdGVyX3Rhc2tfbmV4dGAgYXJlIGltcG9ydGFudCBrZnVuY3MgdG8gZm9jdXMgb24gZm9yIEJQRiBpdGVyYXRvciBmZWF0dXJlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODg3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjMyLjgxNjA1Nzg2OVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwOTAwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXJfdGFza19uZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdGFza19pdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90YXNrX2l0ZXIuYz0xMTE2PV9fYnBmX2tmdW5jIGludCBicGZfaXRlcl90YXNrX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFzayAqaXQsXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExNDctXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMTQ4Ol9fYnBmX2tmdW5jIHN0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX2l0ZXJfdGFza19uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrICppdClcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExNDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowNDozMi44OTMxNTIxNjdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4OTc5NzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqR2xvYmFsIFNjb3BlIENoZWNrKipcblxuUmlnaHQsIHRoaXMgZmVlbHMgbGlrZSBpdCBoYXMgaW1wbGljYXRpb25zIGFjcm9zcyB0aGUgZW50aXJlIHN5c3RlbS4gV2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBnbG9iYWwuIFRpbWUgdG8gemVybyBpbiBvbiB0aGF0LiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgd2l0aCBhIGdsb2JhbCByZWFjaC5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogbGV0J3MgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gU3BlY2lmaWNhbGx5LCBsZXQncyBjb25maXJtIHRoYXQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBhY3R1YWxseSBvcGVyYXRlcyBhdCBhIGdsb2JhbCBsZXZlbC4gSXMgaXRzIGluZmx1ZW5jZSBsaW1pdGVkPyBPciBpcyBpdCB0cnVseSBpbXBhY3RpbmcgdGhlIHdob2xlIHN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE3OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjM2LjM4Mjk1MTk4NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NzA5NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz0xMjE0PXN0YXRpYyB2b2lkIG1hcmtfYWxsX3NjYWxhcnNfaW1wcmVjaXNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjM4LVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTIzOTppbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTI0MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjM2LjQ5MDY2NjAzM1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTYwODk5MDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSdtIHRoaW5raW5nIHRoZXNlIHRoaW5ncyBteXNlbGY6XG5cbioqR2xvYmFsIFNjb3BlIFZlcmlmaWNhdGlvbioqXG5cbkFscmlnaHQsIHllcCwgd2UncmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYSBnbG9iYWwgY29udGV4dCBoZXJlLiBJbXBvcnRhbnQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCBkb2VzIGBicGZfY2hlY2tgIGJlaGF2ZSBhcyBhIGdsb2JhbGx5IHNjb3BlZCBmdW5jdGlvbiBvciB2YXJpYWJsZT8gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyIGFuZCBhc2NlcnRhaW4gaXRzIHNjb3BlLiBXZSBtdXN0IGNsYXJpZnkgd2hldGhlciB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgbG9jYWxseSwgb3IgZ2xvYmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTAyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDQ6MzkuNDUxNTY4NDY3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM2Nzc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz01Nz1zdGF0aWMgYm9vbCBicGZfZ2xvYmFsX3BlcmNwdV9tYV9zZXQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTovKiBicGZfY2hlY2soKSBpcyBhIHN0YXRpYyBjb2RlIGFuYWx5emVyIHRoYXQgd2Fsa3MgZUJQRiBwcm9ncmFtXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwLSAqIGluc3RydWN0aW9uIGJ5IGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIHJlZ2lzdGVyL3N0YWNrIHN0YXRlLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyMDU5PXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwNzAtICogTFNNIGhvb2tzIGFuZCBpdGVycyAoYm90aCBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUpIGFyZSBzYWZlLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjA3MTogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMDcyLSAqIHRoZW0gY2FuIG9ubHkgYmUgYXR0YWNoZWQgdG8gc29tZSBzcGVjaWZpYyBob29rIHBvaW50cy5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTA5Nj1zdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTA5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTExMDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkxMTEtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTUyMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU1My1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk1NTQ6XFx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcXHUwMDI2dGd0X2luZm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU1NS1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjIyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTYyMzppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjI0LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMDU2PXN0YXRpYyBlbnVtIGJwZl9zaWdfa2V5cmluZyBicGZfY2xhc3NpZnlfa2V5cmluZyhzMzIga2V5cmluZ19pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3MC0vKlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDA3MTogKiBWZXJpZnkgdGhlIFBLQ1MjNyBzaWduYXR1cmUgb2YgYSBsb2FkZWQgcHJvZ3JhbS4gQ2FsbGVkIGZyb20gYnBmX2NoZWNrKClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNzItICogb25jZSB0aGUgcHJvZ3JhbSdzIG1ldGFkYXRhIG1hcHMgaGF2ZSBiZWVuIHJlc29sdmVkIGludG8gdXNlZF9tYXBzLCBzb1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMDc5PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTk1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDE5NjppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxOTctXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyMTAtXFx0LyogJ3N0cnVjdCBicGZfdmVyaWZpZXJfZW52JyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQncyBub3Qgc21hbGwsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjExOlxcdCAqIGFsbG9jYXRlL2ZyZWUgaXQgZXZlcnkgdGltZSBicGZfY2hlY2soKSBpcyBjYWxsZWRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyMTItXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMDMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzA0OlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mb19lYXJseShlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMDUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMTUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzE2OlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMTctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMjktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzMwOlxcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMzEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjM5LjQ5Nzk0NDc0NloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODc0OTE2NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpbmFsIFRob3VnaHRzIG9uIFRoaXMgQlBGIFZlcmlmaWVyIEZpeCoqXG5cbk9rYXksIHllcywgdGhpcyBpcyBhIGdsb2JhbGx5IHJlbGV2YW50IHBhdGNoLCBubyBxdWVzdGlvbiBhYm91dCBpdC4gSSdtIHNlZWluZyB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBoZXJlOiBgYnBmX2NoZWNrYCwgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCwgYGJwZl9pdGVyX3Rhc2tfbmV3YCwgYW5kIGBicGZfaXRlcl90YXNrX25leHRgLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAuIFRoZSBsb2dpYyBiZWhpbmQgdGhlIGNoYW5nZSBpcyBzdHJhaWdodGZvcndhcmQsIHRoYW5rZnVsbHkuXG5cbkxldCBtZSBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoYXQgcmVhc29uaW5nLiBUaGUgY3J1eCBvZiBpdCBpcyBhZGRyZXNzaW5nIGEgbWlzc2luZyB0eXBlIGNoZWNrIHdpdGhpbiBgc3RhY2tzYWZlKClgIGZvciBgU1RBQ0tfSVRFUmAgc2xvdHMuIFdpdGhvdXQgdGhpcywgdGhlIEJQRiB2ZXJpZmllciBjb3VsZCBtaXN0YWtlbmx5IGVxdWF0ZSBpdGVyYXRvciBzdGF0ZXMgZXZlbiBpZiB0aGVpciB1bmRlcmx5aW5nIHJlZ2lzdGVyIHR5cGVzIGRpZmZlciDigJMgaW1hZ2luZSBvbmUgYmVpbmcgUkNVLXByb3RlY3RlZCBhbmQgdGhlIG90aGVyIGJlY29taW5nIHVudHJ1c3RlZCBhZnRlciBhbiBSQ1UgdW5sb2NrISBUaGlzLCBvZiBjb3Vyc2UsIHdvdWxkIG9wZW4gdGhlIGRvb3IgdG8gdW5zYWZlIHByb2dyYW1zIGdhaW5pbmcgYWNjZXB0YW5jZSwgYWxsb3dpbmcgYWNjZXNzIHRvIGl0ZXJhdG9ycyBvdXRzaWRlIGxlZ2l0aW1hdGUgUkNVIGNyaXRpY2FsIHNlY3Rpb25zLlxuXG5UaGUgZml4IGlzIGNsZWFybHkgZnVuY3Rpb25hbCwgaW1wYWN0aW5nIHRoZSBjb3JlIEJQRiB2ZXJpZmllcidzIGxvZ2ljLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciB0aGlzIGtpbmQgb2YgdnVsbmVyYWJpbGl0eSwgZnV6emluZyB0aGlzIGlzIGFic29sdXRlbHkgZXNzZW50aWFsLlxuXG5SaWdodCwgSSdtIGNvbWZvcnRhYmxlIHdpdGggdGhpcy4gSSdsbCBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MzgsIk91dHB1dFRva2VucyI6MjAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjQ2LjM3Mjg2NDY5NloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODE4MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gICAgXCJicGZfaXRlcl90YXNrX25ld1wiLFxuICAgIFwiYnBmX2l0ZXJfdGFza19uZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIHR5cGUgY2hlY2sgaW4gdGhlIEJQRiB2ZXJpZmllcidzIGBzdGFja3NhZmUoKWAgZnVuY3Rpb24gZm9yIGBTVEFDS19JVEVSYCBzbG90cy4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgdmVyaWZpZXIgY291bGQgaW5jb3JyZWN0bHkgY29uc2lkZXIgdHdvIGl0ZXJhdG9yIHN0YXRlcyBhcyBlcXVpdmFsZW50IGV2ZW4gaWYgdGhlaXIgcmVnaXN0ZXIgdHlwZXMgZGlmZmVyZWQgKGUuZy4sIG9uZSBiZWluZyBSQ1UtcHJvdGVjdGVkIGFuZCB0aGUgb3RoZXIgYmVpbmcgdW50cnVzdGVkIGFmdGVyIGFuIFJDVSB1bmxvY2spLiBUaGlzIGNvdWxkIGxlYWQgdG8gdGhlIHZlcmlmaWVyIGFjY2VwdGluZyB1bnNhZmUgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgaXRlcmF0b3JzIG91dHNpZGUgb2YgUkNVIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGUgZml4IGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwiYnBmX2lzX3N0YXRlX3Zpc2l0ZWRcIixcbiAgICBcImJwZl9pdGVyX3Rhc2tfbmV3XCIsXG4gICAgXCJicGZfaXRlcl90YXNrX25leHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgdHlwZSBjaGVjayBpbiB0aGUgQlBGIHZlcmlmaWVyJ3MgYHN0YWNrc2FmZSgpYCBmdW5jdGlvbiBmb3IgYFNUQUNLX0lURVJgIHNsb3RzLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSB2ZXJpZmllciBjb3VsZCBpbmNvcnJlY3RseSBjb25zaWRlciB0d28gaXRlcmF0b3Igc3RhdGVzIGFzIGVxdWl2YWxlbnQgZXZlbiBpZiB0aGVpciByZWdpc3RlciB0eXBlcyBkaWZmZXJlZCAoZS5nLiwgb25lIGJlaW5nIFJDVS1wcm90ZWN0ZWQgYW5kIHRoZSBvdGhlciBiZWluZyB1bnRydXN0ZWQgYWZ0ZXIgYW4gUkNVIHVubG9jaykuIFRoaXMgY291bGQgbGVhZCB0byB0aGUgdmVyaWZpZXIgYWNjZXB0aW5nIHVuc2FmZSBwcm9ncmFtcyB0aGF0IGFjY2VzcyBpdGVyYXRvcnMgb3V0c2lkZSBvZiBSQ1UgY3JpdGljYWwgc2VjdGlvbnMuIFRoZSBmaXggaXMgZnVuY3Rpb25hbCBhbmQgYWZmZWN0cyB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowgl6hb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 03:36:25 +0000 UTC FinishedAt: 2026-08-07 04:04:48 +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": "8c7f55d60aa3512fd3da7e9cf313723460e487b4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "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": "8c7f55d60aa3512fd3da7e9cf313723460e487b4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "DEBUG_INFO_BTF" ], "series_id": "e60f1501-c9d8-490c-97dd-2d3121def30a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "bpf_is_state_visited", "bpf_iter_task_new", "bpf_iter_task_next" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX3Rhc2tfbmV3JiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX3Rhc2tfbmV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgdHlwZSBjaGVjayBpbiB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGBzdGFja3NhZmUoKWAgZnVuY3Rpb24gZm9yIGBTVEFDS19JVEVSYCBzbG90cy4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgdmVyaWZpZXIgY291bGQgaW5jb3JyZWN0bHkgY29uc2lkZXIgdHdvIGl0ZXJhdG9yIHN0YXRlcyBhcyBlcXVpdmFsZW50IGV2ZW4gaWYgdGhlaXIgcmVnaXN0ZXIgdHlwZXMgZGlmZmVyZWQgKGUuZy4sIG9uZSBiZWluZyBSQ1UtcHJvdGVjdGVkIGFuZCB0aGUgb3RoZXIgYmVpbmcgdW50cnVzdGVkIGFmdGVyIGFuIFJDVSB1bmxvY2spLiBUaGlzIGNvdWxkIGxlYWQgdG8gdGhlIHZlcmlmaWVyIGFjY2VwdGluZyB1bnNhZmUgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgaXRlcmF0b3JzIG91dHNpZGUgb2YgUkNVIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGUgZml4IGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAzOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzUzMjkxMzQ5YmU4ZmY5YWExZTM4NzAwNmY0NGJkNDM3MzEyNmU0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDM6NTY6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zdGF0ZXMuYyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbmluZGV4IGVhMjE1M2NmMjhkMGEuLjRlNmFhZmFkMzNiZDIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N0YXRlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N0YXRlcy5jXG5AQCAtODEyLDcgJiM0Mzs4MTIsOCBAQCBzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXG4gXHRcdFx0ICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWVcbiBcdFx0XHQgKiBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKClcbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAob2xkX3JlZy1cdTAwM2VpdGVyLmJ0ZiAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmIHx8XG4mIzQzO1x0XHRcdGlmIChvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlIHx8XG4mIzQzO1x0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGYgfHxcbiBcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmX2lkIHx8XG4gXHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5zdGF0ZSAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuc3RhdGUgfHxcbiBcdFx0XHQgICAgLyogaWdub3JlIHtvbGRfcmVnLGN1cl9yZWd9LVx1MDAzZWl0ZXIuZGVwdGgsIHNlZSBhYm92ZSAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuaW5kZXggZmUzNjYzZGVkYmUxNC4uYmFjMzk0YWU3N2Y0NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXG5AQCAtNjEsNiAmIzQzOzYxLDMzIEBAIGludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX2xvY2tfYW5kX3VubG9jaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0Oz9mZW50cnkucy9cJiMzNDsgU1lTX1BSRUZJWCBcJiMzNDtzeXNfZ2V0cGdpZFwmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2V4cGVjdGVkIGFuIFJDVSBDUyB3aGVuIHVzaW5nIGJwZl9pdGVyX3Rhc2tfbmV4dFwmIzM0OylcbiYjNDM7X19mbGFnKEJQRl9GX1RFU1RfU1RBVEVfRlJFUSlcbiYjNDM7aW50IEJQRl9QUk9HKGl0ZXJfdGFza3NfcmN1X3N0YXRlX3BydW5pbmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX2l0ZXJfdGFzayBpdDtcbiYjNDM7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRicGZfaXRlcl90YXNrX25ldyhcdTAwMjZpdCwgTlVMTCwgQlBGX1RBU0tfSVRFUl9BTExfUFJPQ1MpO1xuJiM0MztcbiYjNDM7XHRpZiAobGlrZWx5KGJwZl9nZXRfcHJhbmRvbV91MzIoKSkpIHtcbiYjNDM7XHRcdC8qIEtlZXAgdGhlIG91dGVyIFJDVSBsb2NrIGFjdGl2ZS4gKi9cbiYjNDM7XHRcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIENyZWF0ZSBhbiB1bnByb3RlY3RlZCBnYXAuICovXG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnBmX2l0ZXJfdGFza19uZXh0KFx1MDAyNml0KTtcbiYjNDM7XHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXHUwMDI2aXQpO1xuJiM0MztcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0Oz9mZW50cnkucy9cJiMzNDsgU1lTX1BSRUZJWCBcJiMzNDtzeXNfZ2V0cGdpZFwmIzM0OylcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7ZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHRcJiMzNDspXG4gaW50IEJQRl9QUk9HKGl0ZXJfY3NzX2xvY2tfYW5kX3VubG9jaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMzo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OywKICAgICYjMzQ7YnBmX2l0ZXJfdGFza19uZXcmIzM0OywKICAgICYjMzQ7YnBmX2l0ZXJfdGFza19uZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyB0eXBlIGNoZWNrIGluIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgYHN0YWNrc2FmZSgpYCBmdW5jdGlvbiBmb3IgYFNUQUNLX0lURVJgIHNsb3RzLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSB2ZXJpZmllciBjb3VsZCBpbmNvcnJlY3RseSBjb25zaWRlciB0d28gaXRlcmF0b3Igc3RhdGVzIGFzIGVxdWl2YWxlbnQgZXZlbiBpZiB0aGVpciByZWdpc3RlciB0eXBlcyBkaWZmZXJlZCAoZS5nLiwgb25lIGJlaW5nIFJDVS1wcm90ZWN0ZWQgYW5kIHRoZSBvdGhlciBiZWluZyB1bnRydXN0ZWQgYWZ0ZXIgYW4gUkNVIHVubG9jaykuIFRoaXMgY291bGQgbGVhZCB0byB0aGUgdmVyaWZpZXIgYWNjZXB0aW5nIHVuc2FmZSBwcm9ncmFtcyB0aGF0IGFjY2VzcyBpdGVyYXRvcnMgb3V0c2lkZSBvZiBSQ1UgY3JpdGljYWwgc2VjdGlvbnMuIFRoZSBmaXggaXMgZnVuY3Rpb25hbCBhbmQgYWZmZWN0cyB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNTMyOTEzNDliZThmZjlhYTFlMzg3MDA2ZjQ0YmQ0MzczMTI2ZTQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAwMzo1Njo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3RhdGVzLmMgYi9rZXJuZWwvYnBmL3N0YXRlcy5jCmluZGV4IGVhMjE1M2NmMjhkMGEuLjRlNmFhZmFkMzNiZDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zdGF0ZXMuYwpAQCAtODEyLDcgJiM0Mzs4MTIsOCBAQCBzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsCiAJCQkgKiBpbmZpbml0ZSBsb29wIGNoZWNrIHRyaWdnZXJpbmcsIHNlZQogCQkJICogaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpCiAJCQkgKi8KLQkJCWlmIChvbGRfcmVnLSZndDtpdGVyLmJ0ZiAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0ZiB8fAomIzQzOwkJCWlmIChvbGRfcmVnLSZndDt0eXBlICE9IGN1cl9yZWctJmd0O3R5cGUgfHwKJiM0MzsJCQkgICAgb2xkX3JlZy0mZ3Q7aXRlci5idGYgIT0gY3VyX3JlZy0mZ3Q7aXRlci5idGYgfHwKIAkJCSAgICBvbGRfcmVnLSZndDtpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0Zl9pZCB8fAogCQkJICAgIG9sZF9yZWctJmd0O2l0ZXIuc3RhdGUgIT0gY3VyX3JlZy0mZ3Q7aXRlci5zdGF0ZSB8fAogCQkJICAgIC8qIGlnbm9yZSB7b2xkX3JlZyxjdXJfcmVnfS0mZ3Q7aXRlci5kZXB0aCwgc2VlIGFib3ZlICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmMKaW5kZXggZmUzNjYzZGVkYmUxNC4uYmFjMzk0YWU3N2Y0NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYwpAQCAtNjEsNiAmIzQzOzYxLDMzIEBAIGludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX2xvY2tfYW5kX3VubG9jaykKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0Oz9mZW50cnkucy8mIzM0OyBTWVNfUFJFRklYICYjMzQ7c3lzX2dldHBnaWQmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtleHBlY3RlZCBhbiBSQ1UgQ1Mgd2hlbiB1c2luZyBicGZfaXRlcl90YXNrX25leHQmIzM0OykKJiM0MztfX2ZsYWcoQlBGX0ZfVEVTVF9TVEFURV9GUkVRKQomIzQzO2ludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pdGVyX3Rhc2sgaXQ7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWJwZl9pdGVyX3Rhc2tfbmV3KCZhbXA7aXQsIE5VTEwsIEJQRl9UQVNLX0lURVJfQUxMX1BST0NTKTsKJiM0MzsKJiM0MzsJaWYgKGxpa2VseShicGZfZ2V0X3ByYW5kb21fdTMyKCkpKSB7CiYjNDM7CQkvKiBLZWVwIHRoZSBvdXRlciBSQ1UgbG9jayBhY3RpdmUuICovCiYjNDM7CQlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogQ3JlYXRlIGFuIHVucHJvdGVjdGVkIGdhcC4gKi8KJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX2l0ZXJfdGFza19uZXh0KCZhbXA7aXQpOwomIzQzOwlicGZfaXRlcl90YXNrX2Rlc3Ryb3koJmFtcDtpdCk7CiYjNDM7CWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7P2ZlbnRyeS5zLyYjMzQ7IFNZU19QUkVGSVggJiMzNDtzeXNfZ2V0cGdpZCYjMzQ7KQogX19mYWlsdXJlIF9fbXNnKCYjMzQ7ZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHQmIzM0OykKIGludCBCUEZfUFJPRyhpdGVyX2Nzc19sb2NrX2FuZF91bmxvY2spCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBoaXR0aW5nIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc3RhY2tzYWZlKClgIGZ1bmN0aW9uLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGEgY2hhbmdlIHRvIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgcmVnaXN0ZXIgdHlwZXMgd2hlbiBkZWFsaW5nIHdpdGggaXRlcmF0b3JzLiBJIHNlZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIGZvciByZWdpc3RlciB0eXBlIGVxdWFsaXR5IChgb2xkX3JlZy0mZ3Q7dHlwZSAhPSBjdXJfcmVnLSZndDt0eXBlYCkuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgdGhlIGNvbXBhcmlzb24gd2FzIHNvbGVseSBiYXNlZCBvbiB0aGUgYGJ0ZmAgZmllbGQgb2YgdGhlIGl0ZXJhdG9yLgoKVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGZ1bmN0aW9uYWxseSBmb2N1c2VkIGNoYW5nZSB0byB0aGUgQlBGIHZlcmlmaWVyLiBUaGlzIHNlZW1zIHJlbGF0ZWQgdG8gaW1wcm92aW5nIHRoZSBCUEYgdmVyaWZpZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHR5cGUgY2hlY2sgaXMgYmVpbmcgYWRkZWQuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byBga2VybmVsL2JwZi9zdGF0ZXMuY2AgYW5kIGdldCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBmb3IgYHN0YWNrc2FmZSgpYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgb2xkX3JlZ2AgYW5kIGBjdXJfcmVnYCByZXByZXNlbnQsIHdoYXQgc2l0dWF0aW9ucyB0cmlnZ2VyIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGdvYWwgb2YgYHN0YWNrc2FmZSgpYCBpcyB3aXRoaW4gdGhlIHZlcmlmaWVyJiMzOTtzIGxvZ2ljLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb24gdGhlIGludGVudCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gVGhlIHRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY2Agd2lsbCBiZSBpbXBvcnRhbnQgdG8gY2hlY2sgaWYgaXQgY292ZXJzIGEgYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YWNrc2FmZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYz02OTA9c3RhdGljIHN0cnVjdCBicGZfcmVnX3N0YXRlICpzY2FsYXJfcmVnX2Zvcl9zdGFjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNzAxLVxua2VybmVsL2JwZi9zdGF0ZXMuYzo3MDI6c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MDMtXHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCBzdHJ1Y3QgYnBmX2lkbWFwICppZG1hcCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTk0NT1zdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk2Mi1cbmtlcm5lbC9icGYvc3RhdGVzLmM6OTYzOlx0aWYgKCFzdGFja3NhZmUoZW52LCBvbGQsIGN1ciwgXHUwMDI2ZW52LVx1MDAzZWlkbWFwX3NjcmF0Y2gsIGV4YWN0KSlcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTY0LVx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgQlBGIFZlcmlmaWVyJiMzOTtzIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHN0YWNrc2FmZWAuIFRoaXMgYHN0YWNrc2FmZWAgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgbG9jYWxpemVkIHdpdGhpbiB0aGF0IGZpbGUuIFRoZSBjYWxsIGNoYWluIGlzIHdoYXQmIzM5O3Mga2V5IGhlcmU6IGBzdGFja3NhZmVgIGlzICpjYWxsZWQgYnkqIGBmdW5jX3N0YXRlc19lcXVhbGAsIGFuZCBgZnVuY19zdGF0ZXNfZXF1YWxgIGlzICpjYWxsZWQgYnkqIGBzdGF0ZXNfZXF1YWxgLiBUaGlzIHN1Z2dlc3RzIGEgY2xlYXIgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHN0YXRlIGNvbXBhcmlzb24gd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIGBzdGF0ZXNfZXF1YWxgIGlzIHRoZSBuYXR1cmFsIGZvY2FsIHBvaW50IGZvciBpbnZlc3RpZ2F0aW5nIHRoZSB3aWRlciBpbXBsaWNhdGlvbnMgYW5kIGludGVyYWN0aW9ucy4gVGhlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBsb2NhdGUgdGhlICplbnRyeSBwb2ludHMqIHRvIHRoaXMgd2hvbGUgQlBGIHZlcmlmaWVyIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBleGVjdXRpb24gZmxvd3MgaW4gZnJvbS4gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbHMgdG8gYHN0YXRlc19lcXVhbGAgaXRzZWxmLCBhbmQgZnJvbSAqdGhvc2UqLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHRyYWNlIGJhY2sgdG8gdGhlIGluaXRpYXRpbmcgY29udGV4dHMuIFRoaXMgaXMgbXkga2V5IHRvIHVubG9ja2luZyB0aGUgdmVyaWZpY2F0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnVuY19zdGF0ZXNfZXF1YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9ODY5PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDQtICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk0NTpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTQ2LVx0XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCB1MzIgaW5zbl9pZHgsIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz05ODA9c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDExLVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTAxMjpcdFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cdTAwM2VmcmFtZVtpXSwgY3VyLVx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEzLVx0XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTkzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgaW4gdGhlIGZpZWxkLCBzcGVha2luZyBkaXJlY3RseSB0byBhbm90aGVyIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYHN0YXRlc19lcXVhbGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gYHN0YXRlc19lcXVhbGAgaXMgcG9wcGluZyB1cCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBhbnl0aW1lIEkgc2VlIHRoYXQgZnVuY3Rpb24gbmFtZSwgaXQmIzM5O3MgYWJvdXQgY29tcGFyaW5nIEJQRiBwcm9ncmFtIHN0YXRlcywgYW5kIHRoYXQmIzM5O3MgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSB2ZXJpZmljYXRpb24gcHV6emxlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGVyZSBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGl0JiMzOTtzIGJlaW5nIHVzZWQgdG8gZW5zdXJlIHByb2dyYW0gY29ycmVjdG5lc3MuIEkgd2FudCB0byBzZWUgaWYgaXQmIzM5O3MgZW1wbG95ZWQgd2hlcmUgSSYjMzk7ZCBleHBlY3Q6IGluIGp1bXAvYnJhbmNoIGFuYWx5c2lzLCBsb29wIHVucm9sbGluZywgb3Igc3RhdGUgbWVyZ2luZy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgZW1wbG95ZWQgaW4gYSBwYXJ0aWN1bGFybHkgcGVyZm9ybWFudCBtYW5uZXIsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcG9zc2libGUgZWZmaWNpZW5jeSBpc3N1ZS4gSSBhbHNvIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFyZWEgSSB3b3VsZCBoYXZlIGVtcGxveWVkIGl0IGluc3RlYWQsIGFuZCBmb3IgYSBkaWZmZXJlbnQgcHVycG9zZS4gV2l0aCBteSBiYWNrZ3JvdW5kLCBJIGNhbiBwcmVkaWN0IGl0cyB1c2UsIGFuZCBzaG91bGQgdmVyaWZ5IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGVtcGxveWVkIGFzIGl0IG91Z2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGVzX2VxdWFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzAxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgc3RhdGVzX2VxdWFsYC4gTXkgZ3V0IHNheXMgaXQmIzM5O3MgbGlrZWx5IG5lc3RsZWQgd2l0aGluIHRoZSBga2VybmVsL2JwZi9zdGF0ZXMuY2AgZmlsZSBzaW5jZSBpdCBzb3VuZHMgbGlrZSBhIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCB0aGUgaW50ZXJuYWwgc3RhdGUgcmVwcmVzZW50YXRpb24uIEhvd2V2ZXIsIGl0JiMzOTtzIGFsc28gcXVpdGUgcG9zc2libGUgaXQmIzM5O3MgY2FsbGVkIGZyb20gc29tZXdoZXJlIGxpa2UgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEhtbW0sIGlzIGl0IHBvc3NpYmxlIHRoaXMgaXMgYSBzaGFyZWQgZnVuY3Rpb24/IE1heWJlIGl0JiMzOTtzIGRlZmluZWQgYW5kIGV4cG9ydGVkLCBvciBwZXJoYXBzIGl0JiMzOTtzIGluIGEgcmVsZXZhbnQgaGVhZGVyIGZpbGUuIFJhdGhlciB0aGFuIGNoYXNpbmcgZG93biBhIGdvb3NlLCBJIHNob3VsZCBmaXJzdCBkaXJlY3RseSB2ZXJpZnkgaXQmIzM5O3MgaW4gYGtlcm5lbC9icGYvc3RhdGVzLmNgLiBCZXN0IHRvIHN0YXJ0IHRoZXJlIGFuZCBiZSBzdXJlLiBMZXQgbWUgZ28gdGFrZSBhIGxvb2sgaW4gdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0ZXNfZXF1YWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9ODY5PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDQtICovXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk0NTpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcbmtlcm5lbC9icGYvc3RhdGVzLmMtOTQ2LVx0XHRcdCAgICAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqY3VyLCB1MzIgaW5zbl9pZHgsIGVudW0gZXhhY3RfbGV2ZWwgZXhhY3QpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz05NzI9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtOTc5LVxua2VybmVsL2JwZi9zdGF0ZXMuYzo5ODA6c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk4MS1cdFx0XHQgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxMS1cdFx0XHRyZXR1cm4gZmFsc2U7XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwMTI6XHRcdGlmICghZnVuY19zdGF0ZXNfZXF1YWwoZW52LCBvbGQtXHUwMDNlZnJhbWVbaV0sIGN1ci1cdTAwM2VmcmFtZVtpXSwgaW5zbl9pZHgsIGV4YWN0KSlcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxMy1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMjM5PWludCBicGZfaXNfc3RhdGVfdmlzaXRlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzMyLVx0XHRcdGlmIChpc19pdGVyX25leHRfaW5zbihlbnYsIGluc25faWR4KSkge1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzMzOlx0XHRcdFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMzNC1cdFx0XHRcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXJfZnJhbWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQyLVx0XHRcdFx0XHRpdGVyX3JlZyA9IFx1MDAyNmN1cl9mcmFtZS1cdTAwM2VyZWdzW0JQRl9SRUdfMV07XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNDM6XHRcdFx0XHRcdC8qIGN1cnJlbnQgc3RhdGUgaXMgdmFsaWQgZHVlIHRvIHN0YXRlc19lcXVhbCgpLFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQ0LVx0XHRcdFx0XHQgKiBzbyB3ZSBjYW4gYXNzdW1lIHZhbGlkIGl0ZXIgYW5kIHJlZyBzdGF0ZSxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNTctXHRcdFx0XHRpZiAoc2wtXHUwMDNlc3RhdGUubWF5X2dvdG9fZGVwdGggIT0gY3VyLVx1MDAzZW1heV9nb3RvX2RlcHRoIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMzU4Olx0XHRcdFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIFJBTkdFX1dJVEhJTikpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM1OS1cdFx0XHRcdFx0bG9vcCA9IHRydWU7XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzYzLVx0XHRcdGlmIChicGZfY2FsbHNfY2FsbGJhY2soZW52LCBpbnNuX2lkeCkpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM2NDpcdFx0XHRcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcdTAwMjZzbC1cdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNjUtXHRcdFx0XHRcdGxvb3AgPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM3MS1cdFx0XHRpZiAoc3RhdGVzX21heWJlX2xvb3BpbmcoXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1cikgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNzI6XHRcdFx0ICAgIHN0YXRlc19lcXVhbChlbnYsIFx1MDAyNnNsLVx1MDAzZXN0YXRlLCBjdXIsIEVYQUNUKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM3My1cdFx0XHQgICAgIWl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1cikgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDA0LVx0XHRsb29wID0gaW5jb21wbGV0ZV9yZWFkX21hcmtzKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUpO1xua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDA1Olx0XHRpZiAoc3RhdGVzX2VxdWFsKGVudiwgXHUwMDI2c2wtXHUwMDNlc3RhdGUsIGN1ciwgbG9vcCA/IFJBTkdFX1dJVEhJTiA6IE5PVF9FWEFDVCkpIHtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwNi1oaXQ6XG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDQ0LVx0XHRcdCAqXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjE0NDU6XHRcdFx0ICogLSBXaGVuIGEgdmVyaWZpY2F0aW9uIHBhdGggZW5jb3VudGVycyBhIGBzdGF0ZXNfZXF1YWwoLi4uLFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDQ2LVx0XHRcdCAqICAgUkFOR0VfV0lUSElOKWAgY29uZGl0aW9uLCB0aGVyZSBleGlzdHMgYSBjYWxsIGNoYWluIGRlc2NyaWJpbmcgdGhlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUcmFjaW5nIHRoZSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIENhbGxzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgd2UgZGV0ZXJtaW5lIGlmIGEgQlBGIHN0YXRlIGhhcyBiZWVuIHZpc2l0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBnYXRld2F5IHRvIGNvbXBhcmluZyBzdGF0ZXMgdXNpbmcgYHN0YXRlc19lcXVhbGAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIHN5c3RlbSYjMzk7cyBsb2dpYyBpcyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodHMgaW50byB0aGUgZXhlY3V0aW9uIHBhdGhzIHdoZXJlIHN0YXRlIGNvbXBhcmlzb25zIGFyZSBjZW50cmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9MTIxND1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzgtXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzk6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTI0MC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NDU2PXN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0OTMtXHRcdGlmIChicGZfaXNfcHJ1bmVfcG9pbnQoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc0OTQ6XHRcdFx0ZXJyID0gYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NDk1LVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgZG9fY2hlY2tgIGZ1bmN0aW9uIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIEJQRiB2ZXJpZmllciwgY2FsbGVkIHRocm91Z2ggdGhlIGBicGZfY2hlY2tgIGZ1bmN0aW9uLCB3aGljaCBpcywgb2YgY291cnNlLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIHdob2xlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIGBicGZfY2hlY2tgIGl0c2VsZiBnZXRzIGNhbGxlZCBieSBgYnBmX3Byb2dfbG9hZGAsIHNvIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kIGFzIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50IGZvciB0ZXN0aW5nLgoKTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGF0ZWQgdGVzdHMuIEFoLCBoZXJlJiMzOTtzIG9uZTogYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY2AuIFRoaXMgaXMgcmVsYXRlZCB0byBgYnBmX2l0ZXJfdGFza19uZXh0YCwgZ29vZC4KClRoZSBjb2RlIGZpeCByZWZlcmVuY2VzIGEgYHN0YWNrc2FmZWAgaXNzdWUuIFRoZSBjb21taXQgbG9va3MgbGlrZSB0aGlzOgoKYGBgYwotCQkJaWYgKG9sZF9yZWctJmd0O2l0ZXIuYnRmICE9IGN1cl9yZWctJmd0O2l0ZXIuYnRmIHx8CiYjNDM7CQkJaWYgKG9sZF9yZWctJmd0O3R5cGUgIT0gY3VyX3JlZy0mZ3Q7dHlwZSB8fAomIzQzOwkJCSAgICBvbGRfcmVnLSZndDtpdGVyLmJ0ZiAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0ZiB8fApgYGAKClJpZ2h0LCBpdCYjMzk7cyBhIGJ1ZyBmaXguIExvb2tzIGxpa2Ugd2Ugd2VyZSBtaXNzaW5nIGEgY2hlY2sgb24gYG9sZF9yZWctJmd0O3R5cGVgIGJlZm9yZSBhY2Nlc3NpbmcgYG9sZF9yZWctJmd0O2l0ZXIuYnRmYC4gVGhpcyBpbXBsaWVzIGBvbGRfcmVnLSZndDtpdGVyLmJ0ZmAgaXMgcGFydCBvZiBzb21lIGtpbmQgb2YgdW5pb24gb3Igc3RydWN0LCBvciBhIGZpZWxkIG9mIGEgZGlmZmVyZW50IHR5cGUuIEkgbmVlZCB0byBrbm93IGhvdyB0aGVzZSByZWdpc3RlcnMgYXJlIGRlZmluZWQuIEkgc2hvdWxkIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZWAuIEkgY2FuJiMzOTt0IGJlIHN1cmUgdGhlIGBpdGVyLmJ0ZmAgZmllbGQgaXMgb25seSB1c2VkIGlmIGB0eXBlYCBzYXlzIGl0IGlzLCBzbyBjaGVja2luZyB0aGF0IGB0eXBlYCBpcyBjb3JyZWN0IGlzIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGJwZl9yZWdfc3RhdGUgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTMyPWVudW0gYnBmX2l0ZXJfc3RhdGUge1xuLS1cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMzctXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjM4OnN0cnVjdCBicGZfcmVnX3N0YXRlIHtcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMzktXHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODgyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCwgcmVmbGVjdGluZyBhIHNlYXNvbmVkIHVuZGVyc3RhbmRpbmc6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgUmVnaXN0ZXIgU3RhdGUgU3RydWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoZSBgc3RydWN0IGJwZl9yZWdfc3RhdGVgLiBJIG5lZWQgdG8gcmVhbGx5IGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiBhIEJQRiByZWdpc3Rlci4gSSBrbm93LCBmcm9tIGV4cGVyaWVuY2UsIHRoaXMgaXMgdGhlIGNydXggb2YgdW5kZXJzdGFuZGluZyBwcm9ncmFtIGFuYWx5c2lzIGFuZCB2ZXJpZmljYXRpb24sIGFuZCBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCBleGVjdXRpb24uCgpJIGV4cGVjdCB0byBzZWUgZmllbGRzIHRoYXQgaW5kaWNhdGUgdGhlIHBvc3NpYmxlIHZhbHVlcyB3aXRoaW4gYSByZWdpc3RlcjogaXMgaXQgYSBjb25zdGFudD8gSWYgc28sIHdoYXQgaXMgaXRzIHZhbHVlPyBEb2VzIGl0IGhvbGQgdGhlIGFkZHJlc3Mgb2YgYSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmUsIGFuZCBpZiBzbywgd2hpY2ggb25lPyBJcyBpdCBhIHBvaW50ZXIgdG8gdXNlciBtZW1vcnk/IElmIHNvLCBhcmUgdGhlcmUgYW55IGtub3duIGJvdW5kcyBvciBvZmZzZXRzPyBJJiMzOTttIGFudGljaXBhdGluZyBlbGVtZW50cyB0byBkZXNjcmliZSByYW5nZXMgYW5kIGNvbnN0cmFpbnRzIOKAkyB0aGluZ3MgbGlrZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcywgd2hldGhlciB0aGUgcmVnaXN0ZXIgaG9sZHMgYSB2YWxpZCBwb2ludGVyIG9yIGEgc2NhbGFyLCBtYXliZSBldmVuIGEgZmxhZyB0byBzaG93IGlmIHRoZSByZWdpc3RlciBjb250ZW50IGNhbiBiZSBkZXJpdmVkIGZyb20gb3RoZXIgcmVnaXN0ZXJzLgoKSeKAmW0gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHN5bWJvbGljIHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQuIEFyZSB0aGV5IGNvbmNyZXRlLCBvciBpcyB0aGlzIGFuIGFic3RyYWN0IGludGVycHJldGF0aW9uPyBJcyB0aGVyZSBhIG5vdGlvbiBvZiAmIzM0O3RhaW50aW5nJiMzNDsgb3IgJiMzNDtkZXBlbmRlbmN5JiMzNDsgdHJhY2tlZCwgbWVhbmluZyB3aGljaCBwcmlvciBpbnN0cnVjdGlvbihzKSBoYXZlIGluZmx1ZW5jZWQgd2hhdCBpcyBwcmVzZW50IGluIGEgcmVnaXN0ZXI/IEkmIzM5O20gaG9waW5nIHRvIHNlZSBhIHNvcGhpc3RpY2F0ZWQgZW5jb2Rpbmcgb2YgdGhlc2UgcmVsYXRpb25zaGlwcywgbWF5YmUgZXZlbiB0cmFja2luZyBob3cgdGhlIHZlcmlmaWVyICppbmZlcnMqIG5ldyBpbmZvcm1hdGlvbiBhYm91dCByZWdpc3RlciBjb250ZW50cyB0aHJvdWdoIGJyYW5jaCBhbmFseXNpcyBhbmQgbG9vcCB1bnJvbGxpbmcuCgpVbHRpbWF0ZWx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBlbmNhcHN1bGF0ZXMgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gbW9kZWwgcmVnaXN0ZXIgdmFsdWVzIGFjcm9zcyBhbGwgcG9zc2libGUgZXhlY3V0aW9uIHBhdGhzLiBUaGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNvcGhpc3RpY2F0ZWQgdGVjaG5pcXVlcyB0aGF0IHRoZSBCUEYgdmVyaWZpZXIgZW1wbG95cyB0byBhY2hpZXZlIGl0cyBjb3JlIG1lbW9yeSBzYWZldHkgYW5kIHZhbGlkYXRpb24gZ29hbHMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGRvbmUgaXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzg6XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSB7XG4gIDM5Olx0XHQvKiBPcmRlcmluZyBvZiBmaWVsZHMgbWF0dGVycy4gIFNlZSBzdGF0ZXNfZXF1YWwoKSAqL1xuICA0MDpcdFx0ZW51bSBicGZfcmVnX3R5cGUgdHlwZTtcbiAgNDE6XHRcdC8qXG4gIDQyOlx0XHQgKiBDb25zdGFudCBkZWx0YSBiZXR3ZWVuIFwmIzM0O2xpbmtlZFwmIzM0OyBzY2FsYXJzIHdpdGggdGhlIHNhbWUgSUQuXG4gIDQzOlx0XHQgKi9cbiAgNDQ6XHRcdHMzMiBkZWx0YTtcbiAgNDU6XHRcdHVuaW9uIHtcbiAgNDY6XHRcdFx0LyogdmFsaWQgd2hlbiB0eXBlID09IFBUUl9UT19QQUNLRVQgKi9cbiAgNDc6XHRcdFx0aW50IHJhbmdlO1xuICA0ODpcdFxuICA0OTpcdFx0XHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxuICA1MDpcdFx0XHQgKiAgIFBUUl9UT19NQVBfVkFMVUVfT1JfTlVMTFxuICA1MTpcdFx0XHQgKi9cbiAgNTI6XHRcdFx0c3RydWN0IHtcbiAgNTM6XHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwX3B0cjtcbiAgNTQ6XHRcdFx0XHQvKiBUbyBkaXN0aW5ndWlzaCBtYXAgbG9va3VwcyBmcm9tIG91dGVyIG1hcFxuICA1NTpcdFx0XHRcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcbiAgNTY6XHRcdFx0XHQgKiBwb2ludGluZyB0byBpbm5lciBtYXBzLlxuICA1NzpcdFx0XHRcdCAqL1xuICA1ODpcdFx0XHRcdHUzMiBtYXBfdWlkO1xuICA1OTpcdFx0XHR9O1xuICA2MDpcdFxuICA2MTpcdFx0XHQvKiBmb3IgUFRSX1RPX0JURl9JRCAqL1xuICA2MjpcdFx0XHRzdHJ1Y3Qge1xuICA2MzpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAgNjQ6XHRcdFx0XHR1MzIgYnRmX2lkO1xuICA2NTpcdFx0XHR9O1xuICA2NjpcdFxuICA2NzpcdFx0XHRzdHJ1Y3QgeyAvKiBmb3IgUFRSX1RPX01FTSB8IFBUUl9UT19NRU1fT1JfTlVMTCAqL1xuICA2ODpcdFx0XHRcdHUzMiBtZW1fc2l6ZTtcbiAgNjk6XHRcdFx0fTtcbiAgNzA6XHRcbiAgNzE6XHRcdFx0LyogRm9yIGR5bnB0ciBzdGFjayBzbG90cyAqL1xuICA3MjpcdFx0XHRzdHJ1Y3Qge1xuICA3MzpcdFx0XHRcdGVudW0gYnBmX2R5bnB0cl90eXBlIHR5cGU7XG4gIDc0Olx0XHRcdFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cbiAgNzU6XHRcdFx0XHQgKiBXZSBuZWVkIHRvIHRyYWNrIHdoaWNoIHNsb3QgaXMgdGhlIGZpcnN0IHNsb3RcbiAgNzY6XHRcdFx0XHQgKiB0byBwcm90ZWN0IGFnYWluc3QgY2FzZXMgd2hlcmUgdGhlIHVzZXIgbWF5IHRyeSB0b1xuICA3NzpcdFx0XHRcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXG4gIDc4Olx0XHRcdFx0ICogZHlucHRyLlxuICA3OTpcdFx0XHRcdCAqL1xuICA4MDpcdFx0XHRcdGJvb2wgZmlyc3Rfc2xvdDtcbiAgODE6XHRcdFx0fSBkeW5wdHI7XG4gIDgyOlx0XG4gIDgzOlx0XHRcdC8qIEZvciBicGZfaXRlciBzdGFjayBzbG90cyAqL1xuICA4NDpcdFx0XHRzdHJ1Y3Qge1xuICA4NTpcdFx0XHRcdC8qIEJURiBjb250YWluZXIgYW5kIEJURiB0eXBlIElEIGRlc2NyaWJpbmdcbiAgODY6XHRcdFx0XHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXHUwMDNjdHlwZVx1MDAzZSBvZiBhbiBpdGVyYXRvciBzdGF0ZVxuICA4NzpcdFx0XHRcdCAqL1xuICA4ODpcdFx0XHRcdHN0cnVjdCBidGYgKmJ0ZjtcbiAgODk6XHRcdFx0XHR1MzIgYnRmX2lkO1xuICA5MDpcdFx0XHRcdC8qIHBhY2tpbmcgZm9sbG93aW5nIHR3byBmaWVsZHMgdG8gZml0IGl0ZXIgc3RhdGUgaW50byAxNiBieXRlcyAqL1xuICA5MTpcdFx0XHRcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcbiAgOTI6XHRcdFx0XHRpbnQgZGVwdGg6MzA7XG4gIDkzOlx0XHRcdH0gaXRlcjtcbiAgOTQ6XHRcbiAgOTU6XHRcdFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xuICA5NjpcdFx0XHRzdHJ1Y3Qge1xuICA5NzpcdFx0XHRcdGVudW0ge1xuICA5ODpcdFx0XHRcdFx0SVJRX05BVElWRV9LRlVOQyxcbiAgOTk6XHRcdFx0XHRcdElSUV9MT0NLX0tGVU5DLFxuIDEwMDpcdFx0XHRcdH0ga2Z1bmNfY2xhc3M7XG4gMTAxOlx0XHRcdH0gaXJxO1xuIDEwMjpcdFxuIDEwMzpcdFx0XHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXG4gMTA0Olx0XHRcdHN0cnVjdCB7XG4gMTA1Olx0XHRcdFx0dW5zaWduZWQgbG9uZyByYXcxO1xuIDEwNjpcdFx0XHRcdHVuc2lnbmVkIGxvbmcgcmF3MjtcbiAxMDc6XHRcdFx0fSByYXc7XG4gMTA4Olx0XG4gMTA5Olx0XHRcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xuIDExMDpcdFx0fTtcbiAxMTE6XHRcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXG4gMTEyOlx0XHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxuIDExMzpcdFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XG4gMTE0Olx0XHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xuIDExNTpcdFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cbiAxMTY6XHRcdCAqL1xuIDExNzpcdFx0c3RydWN0IHRudW0gdmFyX29mZjtcbiAxMTg6XHRcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxuIDExOTpcdFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cbiAxMjA6XHRcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXG4gMTIxOlx0XHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXG4gMTIyOlx0XHQgKi9cbiAxMjM6XHRcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXG4gMTI0Olx0XHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xuIDEyNTpcdFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXG4gMTI2Olx0XHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cbiAxMjc6XHRcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxuIDEyODpcdFx0ICogY2FtZSBmcm9tLCB3aGVuIG9uZSBpcyB0ZXN0ZWQgZm9yICE9IE5VTEwuXG4gMTI5Olx0XHQgKiBGb3IgUFRSX1RPX01FTV9PUl9OVUxMIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBtZW1vcnkgYWxsb2NhdGlvblxuIDEzMDpcdFx0ICogZm9yIHRoZSBwdXJwb3NlIG9mIHRyYWNraW5nIHRoYXQgaXQmIzM5O3MgZnJlZWQuXG4gMTMxOlx0XHQgKiBGb3IgUFRSX1RPX1NPQ0tFVCB0aGlzIGlzIHVzZWQgdG8gc2hhcmUgd2hpY2ggcG9pbnRlcnMgcmV0YWluIHRoZVxuIDEzMjpcdFx0ICogc2FtZSByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCwgdG8gZGV0ZXJtaW5lIHByb3BlciByZWZlcmVuY2UgZnJlZWluZy5cbiAxMzM6XHRcdCAqIEZvciBzdGFjayBzbG90cyB0aGF0IGFyZSBkeW5wdHJzLCB0aGlzIGlzIHVzZWQgdG8gdHJhY2sgcmVmZXJlbmNlcyB0b1xuIDEzNDpcdFx0ICogdGhlIGR5bnB0ciB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxuIDEzNTpcdFx0ICogU2ltaWxhcmx5IHRvIGR5bnB0cnMsIHdlIHVzZSBJRCB0byB0cmFjayBcJiMzNDtiZWxvbmdpbmdcJiMzNDsgb2YgYSByZWZlcmVuY2VcbiAxMzY6XHRcdCAqIHRvIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgYnBmX2l0ZXIuXG4gMTM3Olx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODczNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBEYXRhIENvcnJ1cHRpb24gd2l0aCBJdGVyYXRvciBBY2Nlc3MqKgoKQWxyaWdodCwgc28gYGl0ZXJgIGlzIGhhbmdpbmcgb2ZmIGEgdW5pb24sIEkgc2VlLiBNeSBjb25jZXJuIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHBvdGVudGlhbCB0eXBlIGNvbmZ1c2lvbi4gSWYgYG9sZF9yZWctJmd0O3R5cGVgICppc24mIzM5O3QqIHRoZSBleHBlY3RlZCBpdGVyYXRvciB0eXBlIChsaWtlbHkgc29tZXRoaW5nIGxpa2UgYFBUUl9UT19TVEFDS2AsIHRob3VnaCBJIGRvbiYjMzk7dCByZWNhbGwgdGhlIGV4YWN0IG5hbWUgb2ZmLWhhbmQpLCB0aGVuIHdlJiMzOTtyZSBwb3RlbnRpYWxseSByZWFkaW5nIGdhcmJhZ2UgZGF0YSwgb3Igd29yc2UsIGFjY2Vzc2luZyBhIGNvbXBsZXRlbHkgdW5yZWxhdGVkIHVuaW9uIG1lbWJlciB3aGVuIHdlIHRyeSB0byBncmFiIGBvbGRfcmVnLSZndDtpdGVyLmJ0ZmAuIFRoaXMgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgdW5kZWZpbmVkIGJlaGF2aW9yLCBtZW1vcnkgY29ycnVwdGlvbiwgb3IgZXZlbiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaWYgd2UmIzM5O3JlIG5vdCBjYXJlZnVsLgoKVGhlbiBJIHJlbWVtYmVyZWQgdGhhdCBpdGVyYXRvcnMgYXJlIHR5cGljYWxseSBzdG9yZWQgaW4gc3RhY2sgc2xvdHMuIFRoaXMgbWFrZXMgdGhlIHBvc3NpYmlsaXR5IG9mIHJlYWRpbmcgdGhlIHdyb25nIHVuaW9uIG1lbWJlciBldmVuIG1vcmUgbGlrZWx5IGlmIHRoZXJlJiMzOTtzIGFueSB0eXBlIGFtYmlndWl0eS4gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlIGNoZWNrIHRoZSBgc3RhY2tzYWZlYCBsb2dpYyBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIEl0JiMzOTtzIGxpa2VseSB0aGF0IHRoZSBjb3JlIGRhdGEgaW50ZWdyaXR5IGlzc3VlIGlzIGFkZHJlc3NlZCB0aGVyZSwgaWYgYW55d2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzkwOlx0XHRcdFx0ICogc3VjaCB2ZXJpZmllciBzdGF0ZXMgYXJlIG5vdCBlcXVpdmFsZW50LlxuIDc5MTpcdFx0XHRcdCAqIHJldHVybiBmYWxzZSB0byBjb250aW51ZSB2ZXJpZmljYXRpb24gb2YgdGhpcyBwYXRoXG4gNzkyOlx0XHRcdFx0ICovXG4gNzkzOlx0XHRcdFx0aWYgKCFyZWdzYWZlKGVudiwgXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHIsXG4gNzk0Olx0XHRcdFx0XHQgICAgIFx1MDAyNmN1ci1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLCBpZG1hcCwgZXhhY3QpKVxuIDc5NTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDc5NjpcdFx0XHRcdGJyZWFrO1xuIDc5NzpcdFx0XHRjYXNlIFNUQUNLX0RZTlBUUjpcbiA3OTg6XHRcdFx0XHRvbGRfcmVnID0gXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gNzk5Olx0XHRcdFx0Y3VyX3JlZyA9IFx1MDAyNmN1ci1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuIDgwMDpcdFx0XHRcdGlmIChvbGRfcmVnLVx1MDAzZWR5bnB0ci50eXBlICE9IGN1cl9yZWctXHUwMDNlZHlucHRyLnR5cGUgfHxcbiA4MDE6XHRcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCAhPSBjdXJfcmVnLVx1MDAzZWR5bnB0ci5maXJzdF9zbG90IHx8XG4gODAyOlx0XHRcdFx0ICAgICFjaGVja19pZHMob2xkX3JlZy1cdTAwM2VpZCwgY3VyX3JlZy1cdTAwM2VpZCwgaWRtYXApIHx8XG4gODAzOlx0XHRcdFx0ICAgICFjaGVja19pZHMob2xkX3JlZy1cdTAwM2VwYXJlbnRfaWQsIGN1cl9yZWctXHUwMDNlcGFyZW50X2lkLCBpZG1hcCkpXG4gODA0Olx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODA1Olx0XHRcdFx0YnJlYWs7XG4gODA2Olx0XHRcdGNhc2UgU1RBQ0tfSVRFUjpcbiA4MDc6XHRcdFx0XHRvbGRfcmVnID0gXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gODA4Olx0XHRcdFx0Y3VyX3JlZyA9IFx1MDAyNmN1ci1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuIDgwOTpcdFx0XHRcdC8qIGl0ZXIuZGVwdGggaXMgbm90IGNvbXBhcmVkIGJldHdlZW4gc3RhdGVzIGFzIGl0XG4gODEwOlx0XHRcdFx0ICogZG9lc24mIzM5O3QgbWF0dGVyIGZvciBjb3JyZWN0bmVzcyBhbmQgd291bGQgb3RoZXJ3aXNlXG4gODExOlx0XHRcdFx0ICogcHJldmVudCBjb252ZXJnZW5jZTsgd2UgbWFpbnRhaW4gaXQgb25seSB0byBwcmV2ZW50XG4gODEyOlx0XHRcdFx0ICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWVcbiA4MTM6XHRcdFx0XHQgKiBpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKClcbiA4MTQ6XHRcdFx0XHQgKi9cbiA4MTU6XHRcdFx0XHRpZiAob2xkX3JlZy1cdTAwM2V0eXBlICE9IGN1cl9yZWctXHUwMDNldHlwZSB8fFxuIDgxNjpcdFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGYgfHxcbiA4MTc6XHRcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuYnRmX2lkIHx8XG4gODE4Olx0XHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5zdGF0ZSAhPSBjdXJfcmVnLVx1MDAzZWl0ZXIuc3RhdGUgfHxcbiA4MTk6XHRcdFx0XHQgICAgLyogaWdub3JlIHtvbGRfcmVnLGN1cl9yZWd9LVx1MDAzZWl0ZXIuZGVwdGgsIHNlZSBhYm92ZSAqL1xuIDgyMDpcdFx0XHRcdCAgICAhY2hlY2tfaWRzKG9sZF9yZWctXHUwMDNlaWQsIGN1cl9yZWctXHUwMDNlaWQsIGlkbWFwKSlcbiA4MjE6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA4MjI6XHRcdFx0XHRicmVhaztcbiA4MjM6XHRcdFx0Y2FzZSBTVEFDS19JUlFfRkxBRzpcbiA4MjQ6XHRcdFx0XHRvbGRfcmVnID0gXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XG4gODI1Olx0XHRcdFx0Y3VyX3JlZyA9IFx1MDAyNmN1ci1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xuIDgyNjpcdFx0XHRcdGlmICghY2hlY2tfaWRzKG9sZF9yZWctXHUwMDNlaWQsIGN1cl9yZWctXHUwMDNlaWQsIGlkbWFwKSB8fFxuIDgyNzpcdFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWlycS5rZnVuY19jbGFzcyAhPSBjdXJfcmVnLVx1MDAzZWlycS5rZnVuY19jbGFzcylcbiA4Mjg6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA4Mjk6XHRcdFx0XHRicmVhaztcbiA4MzA6XHRcdFx0Y2FzZSBTVEFDS19NSVNDOlxuIDgzMTpcdFx0XHRjYXNlIFNUQUNLX1pFUk86XG4gODMyOlx0XHRcdGNhc2UgU1RBQ0tfSU5WQUxJRDpcbiA4MzM6XHRcdFx0Y2FzZSBTVEFDS19QT0lTT046XG4gODM0Olx0XHRcdFx0Y29udGludWU7XG4gODM1Olx0XHRcdC8qIEVuc3VyZSB0aGF0IG5ldyB1bmhhbmRsZWQgc2xvdCB0eXBlcyByZXR1cm4gZmFsc2UgYnkgZGVmYXVsdCAqL1xuIDgzNjpcdFx0XHRkZWZhdWx0OlxuIDgzNzpcdFx0XHRcdHJldHVybiBmYWxzZTtcbiA4Mzg6XHRcdFx0fVxuIDgzOTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTkxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWdpc3RlciBIYW5kbGluZyBpbiB0aGUgSXRlcmF0aW9uIFN0YWNrKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWzBdYCBpcyBiZWluZyBjaGVja2VkIGJlZm9yZSB3ZSBldmVuIGhpdCB0aGlzIGBzd2l0Y2hgIHN0YXRlbWVudC4mIzM0OyBUaGF0JiMzOTtzIGdvb2QgcHJhY3RpY2UsIGtlZXBzIHRoaW5ncyBvcmdhbml6ZWQuIE5vdywgdGhlIGxvZ2ljLi4uIGlmIGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWzBdYCBpcyBhY3R1YWxseSBgU1RBQ0tfSVRFUmAsIHRoZW4gYG9sZF9yZWdgIGlzIHNldCB0byBwb2ludCB0byBgJmFtcDtvbGQtJmd0O3N0YWNrW3NwaV0uc3BpbGxlZF9wdHJgLiBNYWtlcyBzZW5zZSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgc3BpbGxlZCBwb2ludGVyIGluIHRoYXQgY2FzZS4gQW5kLCBpZiBJJiMzOTttIG5vdCBtaXN0YWtlbiwgYGN1cl9yZWdgIGlzIHBvaW50aW5nIHRvIHRoZSBlcXVpdmFsZW50IGAmYW1wO2N1ci0mZ3Q7c3RhY2tbc3BpXS5zcGlsbGVkX3B0cmAuIEhtbSwgbm93IEkmIzM5O20gZ2V0dGluZyBhIGxpdHRsZSBjdXJpb3VzLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGBjdXItJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWzBdYCBpcyBzb21ldGhpbmcgKm90aGVyKiB0aGFuIGBTVEFDS19JVEVSYD8gVGhhdCYjMzk7cyB0aGUgaW1wb3J0YW50IHBpZWNlIGhlcmUsIHRoZSBoYW5kbGluZyBmb3IgdGhlICpvdGhlciogdHlwZXMuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgdGhlIGNvZGUgYnJhbmNoZXMgYmVmb3JlIHRoaXMgYHN3aXRjaGAuIEkmIzM5O2xsIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhlIGNvZGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjdXJyZW50IGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zdGF0ZXMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzUwOlx0XHRcdCAqIHJlZ3NhZmUoKSB0byBlbnN1cmUgc2NhbGFyIGlkcyBhcmUgY29tcGFyZWQuXG4gNzUxOlx0XHRcdCAqL1xuIDc1MjpcdFx0XHRpZiAoaW0gPT0gMCB8fCBpbSA9PSA0KSB7XG4gNzUzOlx0XHRcdFx0b2xkX3JlZyA9IHNjYWxhcl9yZWdfZm9yX3N0YWNrKGVudiwgXHUwMDI2b2xkLVx1MDAzZXN0YWNrW3NwaV0sIGltKTtcbiA3NTQ6XHRcdFx0XHRjdXJfcmVnID0gc2NhbGFyX3JlZ19mb3Jfc3RhY2soZW52LCBcdTAwMjZjdXItXHUwMDNlc3RhY2tbc3BpXSwgaW0pO1xuIDc1NTpcdFx0XHRcdGlmIChvbGRfcmVnIFx1MDAyNlx1MDAyNiBjdXJfcmVnKSB7XG4gNzU2Olx0XHRcdFx0XHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfcmVnLCBjdXJfcmVnLCBpZG1hcCwgZXhhY3QpKVxuIDc1NzpcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzU4Olx0XHRcdFx0XHRpICYjNDM7PSAoaW0gPT0gMCA/IEJQRl9SRUdfU0laRSAtIDEgOiAzKTtcbiA3NTk6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDc2MDpcdFx0XHRcdH1cbiA3NjE6XHRcdFx0fVxuIDc2MjpcdFxuIDc2MzpcdFx0XHQvKiBpZiBvbGQgc3RhdGUgd2FzIHNhZmUgd2l0aCBtaXNjIGRhdGEgaW4gdGhlIHN0YWNrXG4gNzY0Olx0XHRcdCAqIGl0IHdpbGwgYmUgc2FmZSB3aXRoIHplcm8taW5pdGlhbGl6ZWQgc3RhY2suXG4gNzY1Olx0XHRcdCAqIFRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZVxuIDc2NjpcdFx0XHQgKi9cbiA3Njc6XHRcdFx0aWYgKG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSA9PSBTVEFDS19NSVNDIFx1MDAyNlx1MDAyNlxuIDc2ODpcdFx0XHQgICAgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX1pFUk8pXG4gNzY5Olx0XHRcdFx0Y29udGludWU7XG4gNzcwOlx0XHRcdGlmIChvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbaSAlIEJQRl9SRUdfU0laRV0gIT1cbiA3NzE6XHRcdFx0ICAgIGN1ci1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSlcbiA3NzI6XHRcdFx0XHQvKiBFeDogb2xkIGV4cGxvcmVkIChzYWZlKSBzdGF0ZSBoYXMgU1RBQ0tfU1BJTEwgaW5cbiA3NzM6XHRcdFx0XHQgKiB0aGlzIHN0YWNrIHNsb3QsIGJ1dCBjdXJyZW50IGhhcyBTVEFDS19NSVNDIC1cdTAwM2VcbiA3NzQ6XHRcdFx0XHQgKiB0aGlzIHZlcmlmaWVyIHN0YXRlcyBhcmUgbm90IGVxdWl2YWxlbnQsXG4gNzc1Olx0XHRcdFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcbiA3NzY6XHRcdFx0XHQgKi9cbiA3Nzc6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gNzc4Olx0XHRcdGlmIChpICUgQlBGX1JFR19TSVpFICE9IEJQRl9SRUdfU0laRSAtIDEpXG4gNzc5Olx0XHRcdFx0Y29udGludWU7XG4gNzgwOlx0XHRcdC8qIEJvdGggb2xkIGFuZCBjdXIgYXJlIGhhdmluZyBzYW1lIHNsb3RfdHlwZSAqL1xuIDc4MTpcdFx0XHRzd2l0Y2ggKG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtCUEZfUkVHX1NJWkUgLSAxXSkge1xuIDc4MjpcdFx0XHRjYXNlIFNUQUNLX1NQSUxMOlxuIDc4MzpcdFx0XHRcdC8qIHdoZW4gZXhwbG9yZWQgYW5kIGN1cnJlbnQgc3RhY2sgc2xvdCBhcmUgYm90aCBzdG9yaW5nXG4gNzg0Olx0XHRcdFx0ICogc3BpbGxlZCByZWdpc3RlcnMsIGNoZWNrIHRoYXQgc3RvcmVkIHBvaW50ZXJzIHR5cGVzXG4gNzg1Olx0XHRcdFx0ICogYXJlIHRoZSBzYW1lIGFzIHdlbGwuXG4gNzg2Olx0XHRcdFx0ICogRXg6IGV4cGxvcmVkIHNhZmUgcGF0aCBjb3VsZCBoYXZlIHN0b3JlZFxuIDc4NzpcdFx0XHRcdCAqIChicGZfcmVnX3N0YXRlKSB7LnR5cGUgPSBQVFJfVE9fU1RBQ0ssIC5vZmYgPSAtOH1cbiA3ODg6XHRcdFx0XHQgKiBidXQgY3VycmVudCBwYXRoIGhhcyBzdG9yZWQ6XG4gNzg5Olx0XHRcdFx0ICogKGJwZl9yZWdfc3RhdGUpIHsudHlwZSA9IFBUUl9UT19TVEFDSywgLm9mZiA9IC0xNn1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBEaXNjcmVwYW5jaWVzIGluIFN0YWNrIEl0ZXJhdGlvbioqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgcnVubmluZyB0aHJvdWdoIG15IGhlYWQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbXBhcmlzb246IGBvbGQtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlW0JQRl9SRUdfU0laRSAtIDFdYCBhbmQgYGN1ci0mZ3Q7c3RhY2tbc3BpXS5zbG90X3R5cGVbQlBGX1JFR19TSVpFIC0gMV1gLiBUaGV5JiMzOTtyZSBib3RoIHJlZmVyZW5jaW5nIHRoZSBzYW1lIHN0YWNrIHNsb3QsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBhbmQgdGhleSBib3RoIGV2YWx1YXRlIHRvIGBTVEFDS19JVEVSYC4gIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LgoKQnV0IGhvbGQgb24gYSBzZWNvbmQuIElmIGJvdGggaW5kaWNhdGUgc3RhY2sgaXRlcmF0aW9uLCB3aGljaCBpcyB3aGF0IGBTVEFDS19JVEVSYCBzaG91bGQgcmVwcmVzZW50LCB3aHkgYW0gSSBzZWVpbmcgYSBkaWZmZXJlbmNlIGluIGBvbGRfcmVnLSZndDt0eXBlYCB2ZXJzdXMgYGN1cl9yZWctJmd0O3R5cGVgPyBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLiBTb21ldGhpbmcmIzM5O3Mgbm90IHJpZ2h0LiBUaGUgdHlwZXMgKnNob3VsZCogYmUgdGhlIHNhbWUgaW4gdGhpcyBzaXR1YXRpb24uIEl0JiMzOTtzIGEgY29udHJhZGljdGlvbi4KCk5vdywgbXkgbmV4dCB0aG91Z2h0IGlzLCB3aGF0IGV4YWN0bHkgKmlzKiB0aGUgYHR5cGVgIGZpZWxkIGFzc29jaWF0ZWQgd2l0aCBgU1RBQ0tfSVRFUmA/IEkgbmVlZCB0byByZXZpZXcgaG93IGBTVEFDS19JVEVSYCBpcyBkZWZpbmVkIGFuZCB1c2VkIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBgdHlwZWAgZmllbGQgc2lnbmlmaWVzIGluIHJlbGF0aW9uIHRvIHN0YWNrIGl0ZXJhdGlvbi4gTGV0JiMzOTtzIHRyYWNlIGJhY2sgdG8gd2hlcmUgdGhhdCBjb25zdGFudCBpcyBiZWluZyBzZXQgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzdGF0ZSBjb21wYXJpc29uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTVEFDS19JVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9sb2cuYz00OTc9c3RhdGljIGNoYXIgc2xvdF90eXBlX2NoYXJbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL2xvZy5jLTUwMi1cdFtTVEFDS19EWU5QVFJdXHQ9ICYjMzk7ZCYjMzk7LFxua2VybmVsL2JwZi9sb2cuYzo1MDM6XHRbU1RBQ0tfSVRFUl1cdD0gJiMzOTtpJiMzOTssXG5rZXJuZWwvYnBmL2xvZy5jLTUwNC1cdFtTVEFDS19JUlFfRkxBR10gPSAmIzM5O2YmIzM5Oyxcbi0tXG5rZXJuZWwvYnBmL2xvZy5jPTcxMT12b2lkIHByaW50X3ZlcmlmaWVyX3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnZzdGF0ZSxcbi0tXG5rZXJuZWwvYnBmL2xvZy5jLTc3NC1cdFx0XHRicmVhaztcbmtlcm5lbC9icGYvbG9nLmM6Nzc1Olx0XHRjYXNlIFNUQUNLX0lURVI6XG5rZXJuZWwvYnBmL2xvZy5jLTc3Ni1cdFx0XHQvKiBvbmx5IG1haW4gc2xvdCBoYXMgaWQgc2V0OyBza2lwIG90aGVycyAqL1xuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmM9Mzk4PXN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtNDMzLVx0XHRcdCAqL1xua2VybmVsL2JwZi9zdGF0ZXMuYzo0MzQ6XHRcdFx0aWYgKHN0eXBlID09IFNUQUNLX0RZTlBUUiB8fCBzdHlwZSA9PSBTVEFDS19JVEVSIHx8XG5rZXJuZWwvYnBmL3N0YXRlcy5jLTQzNS1cdFx0XHQgICAgc3R5cGUgPT0gU1RBQ0tfSVJRX0ZMQUcpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz03MDI9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxuLS1cbmtlcm5lbC9icGYvc3RhdGVzLmMtODA1LVx0XHRcdGJyZWFrO1xua2VybmVsL2JwZi9zdGF0ZXMuYzo4MDY6XHRcdGNhc2UgU1RBQ0tfSVRFUjpcbmtlcm5lbC9icGYvc3RhdGVzLmMtODA3LVx0XHRcdG9sZF9yZWcgPSBcdTAwMjZvbGQtXHUwMDNlc3RhY2tbc3BpXS5zcGlsbGVkX3B0cjtcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTExOTA9c3RhdGljIGJvb2wgaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKmN1cilcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExOTgtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHN0YXRlLVx1MDAzZWFsbG9jYXRlZF9zdGFjayAvIEJQRl9SRUdfU0laRTsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTE5OTpcdFx0XHRpZiAoc3RhdGUtXHUwMDNlc3RhY2tbaV0uc2xvdF90eXBlWzBdICE9IFNUQUNLX0lURVIpXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMDAtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTE1PXN0YXRpYyBpbnQgbWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTk0OS1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19TSVpFOyBqJiM0MzsmIzQzOylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTA6XHRcdFx0c2xvdC1cdTAwM2VzbG90X3R5cGVbal0gPSBTVEFDS19JVEVSO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTk1MS1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTg2PXN0YXRpYyBib29sIGlzX2l0ZXJfcmVnX3ZhbGlkX3VuaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA1LVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBCUEZfUkVHX1NJWkU7IGomIzQzOyYjNDM7KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMDY6XHRcdFx0aWYgKHNsb3QtXHUwMDNlc2xvdF90eXBlW2pdID09IFNUQUNLX0lURVIpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAwNy1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAxMz1zdGF0aWMgaW50IGlzX2l0ZXJfcmVnX3ZhbGlkX2luaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNy1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19TSVpFOyBqJiM0MzsmIzQzOylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDM4Olx0XHRcdGlmIChzbG90LVx1MDAzZXNsb3RfdHlwZVtqXSAhPSBTVEFDS19JVEVSKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMzktXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE1NT1zdGF0aWMgaW50IGlzX2lycV9mbGFnX3JlZ192YWxpZF9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODAtICogICAtIGR5bnB0ciBzdGF0ZSAoU1RBQ0tfRFlOUFRSKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTgxOiAqICAgLSBpdGVyIHN0YXRlIChTVEFDS19JVEVSKS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTgyLSAqICAgLSBpcnEgZmxhZyBzdGF0ZSAoU1RBQ0tfSVJRX0ZMQUcpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExODQ9c3RhdGljIGJvb2wgaXNfc3RhY2tfc2xvdF9zcGVjaWFsKGNvbnN0IHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwLVx0Y2FzZSBTVEFDS19EWU5QVFI6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MTpcdGNhc2UgU1RBQ0tfSVRFUjpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkyLVx0Y2FzZSBTVEFDS19JUlFfRkxBRzpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTE0MD1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MTQ0LVx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MTQ1Olx0dTMyIGNsZWFyX21hc2sgPSAoMSBcdTAwM2NcdTAwM2MgU1RBQ0tfU1BJTEwpIHwgKDEgXHUwMDNjXHUwMDNjIFNUQUNLX0lURVIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTkxNDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTMyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCoqCgpSaWdodCwgc28gSSBzZWUgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCBpbiB0aGUgY29kZSwgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGp1bXBzIHRvIGBTVEFDS19JVEVSYC4gIEl0JiMzOTtzIGxpa2VseSBjb25uZWN0ZWQ7IHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBjbGVhcmluZyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aG9zZSBzdGFjayBpdGVyYXRvcnMsIG1heWJlIHNvbWUgc29ydCBvZiBSQ1UtcHJvdGVjdGVkIHJlZmVyZW5jZXMuIExldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIGl0c2VsZiB0byBjb25maXJtIG15IGh1bmNoIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIGhvdyBpdOKAmXMgaGFuZGxpbmcgdGhvc2UgUkNVIHByb3RlY3RlZCByZWZlcmVuY2VzIGluIHJlbGF0aW9uIHRvIHRoZSBzdGFjayBpdGVyYXRvciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTE0MDpcdHN0YXRpYyB2b2lkIGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG45MTQxOlx0e1xuOTE0MjpcdFx0c3RydWN0IGJwZl9zdGFja19zdGF0ZSAqc3RhY2s7XG45MTQzOlx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuOTE0NDpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbjkxNDU6XHRcdHUzMiBjbGVhcl9tYXNrID0gKDEgXHUwMDNjXHUwMDNjIFNUQUNLX1NQSUxMKSB8ICgxIFx1MDAzY1x1MDAzYyBTVEFDS19JVEVSKTtcbjkxNDY6XHRcbjkxNDc6XHRcdGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlX21hc2soZW52LVx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgc3RhY2ssIGNsZWFyX21hc2ssICh7XG45MTQ4Olx0XHRcdGlmIChyZWctXHUwMDNldHlwZSBcdTAwMjYgTUVNX1JDVSkge1xuOTE0OTpcdFx0XHRcdHJlZy1cdTAwM2V0eXBlIFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpO1xuOTE1MDpcdFx0XHRcdHJlZy1cdTAwM2V0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XG45MTUxOlx0XHRcdH1cbjkxNTI6XHRcdH0pKTtcbjkxNTM6XHR9XG45MTU0Olx0XG45MTU1Olx0c3RhdGljIGludCByZWZfY29udmVydF9hbGxvY19yY3VfcHJvdGVjdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZClcbjkxNTY6XHR7XG45MTU3Olx0XHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xuOTE1ODpcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcbjkxNTk6XHRcdGludCBlcnI7XG45MTYwOlx0XG45MTYxOlx0XHRlcnIgPSByZWxlYXNlX3JlZmVyZW5jZV9ub21hcmsoZW52LVx1MDAzZWN1cl9zdGF0ZSwgaWQpO1xuOTE2MjpcdFxuOTE2MzpcdFx0YnBmX2Zvcl9lYWNoX3JlZ19pbl92c3RhdGUoZW52LVx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgKHtcbjkxNjQ6XHRcdFx0aWYgKHJlZy1cdTAwM2VpZCAhPSBpZClcbjkxNjU6XHRcdFx0XHRjb250aW51ZTtcbjkxNjY6XHRcdFx0aWYgKChyZWctXHUwMDNldHlwZSBcdTAwMjYgTUVNX0FMTE9DKSBcdTAwMjZcdTAwMjYgKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBNRU1fUEVSQ1BVKSkge1xuOTE2NzpcdFx0XHRcdHJlZy1cdTAwM2VpZCA9IDA7XG45MTY4Olx0XHRcdFx0cmVnLVx1MDAzZXR5cGUgXHUwMDI2PSB+TUVNX0FMTE9DO1xuOTE2OTpcdFx0XHRcdHJlZy1cdTAwM2V0eXBlIHw9IE1FTV9SQ1U7XG45MTcwOlx0XHRcdH1cbjkxNzE6XHRcdH0pKTtcbjkxNzI6XHRcbjkxNzM6XHRcdHJldHVybiBlcnI7XG45MTc0Olx0fVxuOTE3NTpcdFxuOTE3NjpcdHN0YXRpYyB2b2lkIGNsZWFyX2NhbGxlcl9zYXZlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG45MTc3Olx0XHRcdFx0XHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MpXG45MTc4Olx0e1xuOTE3OTpcdFx0aW50IGk7XG45MTgwOlx0XG45MTgxOlx0XHQvKiBhZnRlciB0aGUgY2FsbCByZWdpc3RlcnMgcjAgLSByNSB3ZXJlIHNjcmF0Y2hlZCAqL1xuOTE4MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkmIzQzOyYjNDM7KSB7XG45MTgzOlx0XHRcdGJwZl9tYXJrX3JlZ19ub3RfaW5pdChlbnYsIFx1MDAyNnJlZ3NbY2FsbGVyX3NhdmVkW2ldXSk7XG45MTg0Olx0XHRcdF9fY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ3MsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xuOTE4NTpcdFx0fVxuOTE4NjpcdH1cbjkxODc6XHRcbjkxODg6XHRzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbjkxODk6XHRcdFx0XHRcdFx0ICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWdpc3RlciBJdGVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGBicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrYCBmdW5jdGlvbiDigJMgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCByZWdpc3RlciBhbmQgc3RhY2sgc2xvdCB1cGRhdGVzLiBSaWdodCwgaXQgaXRlcmF0ZXMgb3ZlciByZWdpc3RlcnMgKmFuZCogc3RhY2sgc2xvdHMuIFRoZSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGlzIGBjbGVhcl9tYXNrYCDigJMgaWYgaXQgaW5jbHVkZXMgYFNUQUNLX0lURVJgLCB0aGVuIHRoaXMgaXRlcmF0aW9uIGlzIG9wZXJhdGluZyBvbiBgU1RBQ0tfSVRFUmAgc2xvdHMuIE1ha2VzIHNlbnNlLgoKQW5kLCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCBjb25maXJtcyB0aGF0IGl0ICpkb2VzKiB0b3VjaCB0aGVzZSBgU1RBQ0tfSVRFUmAgc2xvdHMuIFRoZSBjb2RlIHNuaXBwZXQgaGVyZToKCmBgYGMKaWYgKHJlZy0mZ3Q7dHlwZSAmYW1wOyBNRU1fUkNVKSB7CglyZWctJmd0O3R5cGUgJmFtcDs9IH4oTUVNX1JDVSB8IFBUUl9NQVlCRV9OVUxMKTsKCXJlZy0mZ3Q7dHlwZSB8PSBQVFJfVU5UUlVTVEVEOwp9CmBgYAoKLi4udGhhdCYjMzk7cyBrZXkuIEl0JiMzOTtzIG1vZGlmeWluZyBgcmVnLSZndDt0eXBlYCAqaWYqIGByZWdgIGhhcyB0aGUgYE1FTV9SQ1VgIGZsYWcgc2V0LiBIb2xkIG9uLi4uIGlmIGByZWdgIGlzIGEgYFNUQUNLX0lURVJgIHNsb3QsIGl0cyBgdHlwZWAgaXMgYmVpbmcgY2hhbmdlZCEgVGhhdCYjMzk7cyB0aGUgcmVhbCBjcnV4IG9mIHRoaXMuCgpCdXQgd2hhdCAqaXMqIGByZWctJmd0O3R5cGVgIGZvciBgU1RBQ0tfSVRFUmA/IFdlIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGhvdyB0aGVzZSBzbG90cyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHdoYXQgdGhlaXIgaW5pdGlhbCB0eXBlcyBhcmUuIFRoZSBgbWFya19zdGFja19zbG90c19pdGVyYCBmdW5jdGlvbiBpcyB0aGUgbmV4dCBsb2dpY2FsIHBsYWNlIHRvIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3RhdGUgdGhpcyBmdW5jdGlvbiBpcyBsZWF2aW5nIHRoZXNlIHN0YWNrIHNsb3RzIGluLCBpZiBgU1RBQ0tfSVRFUmAgaXMgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MTU6XHRzdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIDkxNjpcdFx0XHRcdFx0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbiA5MTc6XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgaW5zbl9pZHgsXG4gOTE4Olx0XHRcdFx0XHQgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkLCBpbnQgbnJfc2xvdHMpXG4gOTE5Olx0e1xuIDkyMDpcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IGJwZl9mdW5jKGVudiwgcmVnKTtcbiA5MjE6XHRcdGludCBzcGksIGksIGosIGlkO1xuIDkyMjpcdFxuIDkyMzpcdFx0c3BpID0gaXRlcl9nZXRfc3BpKGVudiwgcmVnLCBucl9zbG90cyk7XG4gOTI0Olx0XHRpZiAoc3BpIFx1MDAzYyAwKVxuIDkyNTpcdFx0XHRyZXR1cm4gc3BpO1xuIDkyNjpcdFxuIDkyNzpcdFx0aWQgPSBhY3F1aXJlX3JlZmVyZW5jZShlbnYsIGluc25faWR4LCAwKTtcbiA5Mjg6XHRcdGlmIChpZCBcdTAwM2MgMClcbiA5Mjk6XHRcdFx0cmV0dXJuIGlkO1xuIDkzMDpcdFxuIDkzMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfc2xvdHM7IGkmIzQzOyYjNDM7KSB7XG4gOTMyOlx0XHRcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzdGFja1tzcGkgLSBpXTtcbiA5MzM6XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0ID0gXHUwMDI2c2xvdC1cdTAwM2VzcGlsbGVkX3B0cjtcbiA5MzQ6XHRcbiA5MzU6XHRcdFx0X19tYXJrX3JlZ19rbm93bl96ZXJvKHN0KTtcbiA5MzY6XHRcdFx0c3QtXHUwMDNldHlwZSA9IFBUUl9UT19TVEFDSzsgLyogd2UgZG9uJiMzOTt0IGhhdmUgZGVkaWNhdGVkIHJlZyB0eXBlICovXG4gOTM3Olx0XHRcdGlmIChpc19rZnVuY19yY3VfcHJvdGVjdGVkKG1ldGEpKSB7XG4gOTM4Olx0XHRcdFx0aWYgKGluX3JjdV9jcyhlbnYpKVxuIDkzOTpcdFx0XHRcdFx0c3QtXHUwMDNldHlwZSB8PSBNRU1fUkNVO1xuIDk0MDpcdFx0XHRcdGVsc2VcbiA5NDE6XHRcdFx0XHRcdHN0LVx1MDAzZXR5cGUgfD0gUFRSX1VOVFJVU1RFRDtcbiA5NDI6XHRcdFx0fVxuIDk0MzpcdFx0XHRzdC1cdTAwM2VpZCA9IGkgPT0gMCA/IGlkIDogMDtcbiA5NDQ6XHRcdFx0c3QtXHUwMDNlaXRlci5idGYgPSBidGY7XG4gOTQ1Olx0XHRcdHN0LVx1MDAzZWl0ZXIuYnRmX2lkID0gYnRmX2lkO1xuIDk0NjpcdFx0XHRzdC1cdTAwM2VpdGVyLnN0YXRlID0gQlBGX0lURVJfU1RBVEVfQUNUSVZFO1xuIDk0NzpcdFx0XHRzdC1cdTAwM2VpdGVyLmRlcHRoID0gMDtcbiA5NDg6XHRcbiA5NDk6XHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQlBGX1JFR19TSVpFOyBqJiM0MzsmIzQzOylcbiA5NTA6XHRcdFx0XHRzbG90LVx1MDAzZXNsb3RfdHlwZVtqXSA9IFNUQUNLX0lURVI7XG4gOTUxOlx0XG4gOTUyOlx0XHRcdG1hcmtfc3RhY2tfc2xvdF9zY3JhdGNoZWQoZW52LCBzcGkgLSBpKTtcbiA5NTM6XHRcdH1cbiA5NTQ6XHRcbiA5NTU6XHRcdHJldHVybiAwO1xuIDk1NjpcdH1cbiA5NTc6XHRcbiA5NTg6XHRzdGF0aWMgaW50IHVubWFya19zdGFja19zbG90c19pdGVyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gOTU5Olx0XHRcdFx0XHQgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgbnJfc2xvdHMpXG4gOTYwOlx0e1xuIDk2MTpcdFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IGJwZl9mdW5jKGVudiwgcmVnKTtcbiA5NjI6XHRcdGludCBzcGksIGksIGo7XG4gOTYzOlx0XG4gOTY0Olx0XHRzcGkgPSBpdGVyX2dldF9zcGkoZW52LCByZWcsIG5yX3Nsb3RzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQSBDcml0aWNhbCBCdWcgaW4gdGhlIEJQRiBWZXJpZmllcjogUkNVIFByb3RlY3Rpb24gVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzLCBhbmQgSSB0aGluayBJJiMzOTt2ZSBmb3VuZCBhIHByZXR0eSBuYXN0eSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllci4gSXQgYWxsIHN0YXJ0ZWQgd2hlbiBJIHdhcyBsb29raW5nIGF0IGhvdyBzdGFjayBwb2ludGVycyBhcmUgaGFuZGxlZCB3aXRoIFJDVSBwcm90ZWN0ZWQgbWVtb3J5IGFuZCB1bnRydXN0ZWQgcG9pbnRlcnMuIEkgcmVhbGl6ZWQgdGhhdCB0aGUgYHN0LSZndDt0eXBlYCBmaWVsZCBjYW4gYmUgc2V0IHRvIHRoaW5ncyBsaWtlIGBQVFJfVE9fU1RBQ0sgfCBNRU1fUkNVYCBvciBgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGAuIFRoZW4gSSByZWNhbGxlZCB0aGF0IGBzdGFja3NhZmVgIHdhcyBvbmx5IGNvbXBhcmluZyB0aGUgYGJ0ZmAgZmllbGQgKGBvbGRfcmVnLSZndDtpdGVyLmJ0ZiAhPSBjdXJfcmVnLSZndDtpdGVyLmJ0ZmApIGJ1dCBjcnVjaWFsbHkgKm5vdCogdGhlIGB0eXBlYCBmaWVsZCAoYG9sZF9yZWctJmd0O3R5cGUgIT0gY3VyX3JlZy0mZ3Q7dHlwZWApLgoKVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgcHJldHR5IGFsYXJtaW5nLiBJZiBgb2xkX3JlZ2AgaXMsIHNheSwgYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgLCBtZWFuaW5nIGl0JiMzOTtzIFJDVSBwcm90ZWN0ZWQsIGFuZCBgY3VyX3JlZ2AgaXMgYFBUUl9UT19TVEFDSyB8IFBUUl9VTlRSVVNURURgLCB0aGUgdmVyaWZpZXIgd291bGQgaW5jb3JyZWN0bHkgY29uc2lkZXIgdGhlbSBlcXVpdmFsZW50IGJlY2F1c2UgaXQmIzM5O3Mgbm90IGxvb2tpbmcgYXQgdGhlIGB0eXBlYCBmbGFnLiBUaGlzIG1lYW5zIHRoZSB2ZXJpZmllciBjYW4gZXJyb25lb3VzbHkgYXNzdW1lIGEgc3RhdGUgaXMgc2FmZSB3aGVuIGl04oCZcyBhY3R1YWxseSBsb3N0IGl0cyBSQ1UgcHJvdGVjdGlvbi4KCkFuZCB0aGlzIGlzICpleGFjdGx5KiB3aGF0IHRoZSBgaXRlcnNfdGFza19mYWlsdXJlLmNgIHRlc3QgY2FzZSBpcyBkZW1vbnN0cmF0aW5nISBJIGNhbiBzZWUgaXQuIFdlJiMzOTtyZSBzZXR0aW5nIHVwIHRoZSBSQ1UgbG9jaywgdGhlbiBjb25kaXRpb25hbGx5IHJlbGVhc2luZyBpdCBhbmQgcmVhY3F1aXJpbmcgaXQuIElmIHdlIGhpdCB0aGUgYGVsc2VgIGJyYW5jaCwgYGJwZl9yY3VfcmVhZF91bmxvY2soKWAgZ2V0cyBjYWxsZWQuIFRoaXMgdGhlbiBjYWxscyBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIHdoaWNoIGNsZWFycyB0aGUgYE1FTV9SQ1VgIGZsYWcgYW5kIGFkZHMgdGhlIGBQVFJfVU5UUlVTVEVEYCBmbGFnIHRvIHRoZSBgU1RBQ0tfSVRFUmAgc2xvdC4KClRoZSBuZXh0IGNhbGwgdG8gYGJwZl9pdGVyX3Rhc2tfbmV4dCgmYW1wO2l0KWAgYW5kIHRoaXMgaXMgd2hlcmUgaXQmIzM5O3MgYWxsIGdvaW5nIHdyb25nLiBCZWNhdXNlIHRoZSB2ZXJpZmllciBkb2VzbiYjMzk7dCBjaGVjayB0aGUgYHR5cGVgIGZpZWxkLCBpdCYjMzk7cyBtZXJnaW5nIHRoZXNlIHBhdGhzLCBiZWxpZXZpbmcgdGhlIGl0ZXJhdG9yIGlzIHN0aWxsIHZhbGlkIChSQ1UgcHJvdGVjdGVkKSBldmVuIGluIHRoZSB1bnByb3RlY3RlZCBgZWxzZWAgYnJhbmNoISBUaGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhIGRhdGEgcmFjZSB2dWxuZXJhYmlsaXR5IG1hbmlmZXN0aW5nIGluIHRoZSB2ZXJpZmllciYjMzk7cyBsb2dpYy4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGlzIHdvcnRoIGZ1enppbmcuCgpNeSBndXQgc2F5cyB0aGlzIGlzIGEgY3JpdGljYWwgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBwcm9iYWJseSBgYnBmX2NoZWNrYCBvciBgZG9fY2hlY2tgIG9yIGV2ZW4gdGhlIHByb2JsZW1hdGljIHN0YXRpYyBgc3RhY2tzYWZlYC4gYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQsIGFsdGhvdWdoIGl0JiMzOTtzIHZlcnkgZ2VuZXJpYy4gTWF5YmUgYGJwZl9pdGVyX3Rhc2tfbmV3YCBidXQgdGhhdCYjMzk7cyBhIGhlbHBlci9rZnVuYy4gSSBuZWVkIHRvIGZpbmQgdGhlIGtmdW5jIGZvciB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXRlcl90YXNrX25ldyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTQ5MDI9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2Nzc19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00OTAzLSNlbmRpZlxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDkwNDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfdGFza19uZXcsIEtGX0lURVJfTkVXIHwgS0ZfUkNVX1BST1RFQ1RFRClcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MDUtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rhc2tfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYz0xMTE0PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTExNS1cbmtlcm5lbC9icGYvdGFza19pdGVyLmM6MTExNjpfX2JwZl9rZnVuYyBpbnQgYnBmX2l0ZXJfdGFza19uZXcoc3RydWN0IGJwZl9pdGVyX3Rhc2sgKml0LFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMTE3LVx0XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2tfX251bGxhYmxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzMDE4PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMzE3LVx0XHRcdFx0ICogSWYgdGhlIGl0ZXJhdG9yJiMzOTtzIGNvbnN0cnVjdG9yICh0aGUgX25ld1xua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMzE4Olx0XHRcdFx0ICogZnVuY3Rpb24gZS5nLiwgYnBmX2l0ZXJfdGFza19uZXcpIGhhcyBiZWVuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMzMTktXHRcdFx0XHQgKiBhbm5vdGF0ZWQgd2l0aCBCUEYga2Z1bmMgZmxhZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAyMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgdGhlIGJwZl9pdGVyX3Rhc2tfbmV3IEJ1ZyoqCgpPa2F5LCBzbyB0aGUga2Z1bmMgaW52b2x2ZWQgaGVyZSBpcyBgYnBmX2l0ZXJfdGFza19uZXdgLiBCdXQgaG9sZCBvbiwgdGhlIHJlYWwgY3VscHJpdCBzZWVtcyB0byBiZSB0aGUgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBzdGFja3NhZmVgIGxvZ2ljLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBkcmlsbCBkb3duLiBUaGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyIGlzLCBvZiBjb3Vyc2UsIGBicGZfY2hlY2tgLiBBcmUgdGhlcmUgYW55IG90aGVyIGNydWNpYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHZlcmlmaWVyIGJlc2lkZXMgdGhhdCBvbmU/IExldCBtZSBzZWXigKZBaCB5ZXMsIGBmdW5jX3N0YXRlc19lcXVhbGAsIGBzdGF0ZXNfZXF1YWxgLCBhbmQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4KClNpbmNlIGBzdGFja3NhZmVgIGlzIHN0YXRpYywgSSBjYW4mIzM5O3QgZGlyZWN0bHkgdGFyZ2V0IGl0LiBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGlzICpub3QqIHN0YXRpYywgc28gaXQmIzM5O3MgYSBjYW5kaWRhdGUuIEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIGl0JiMzOTtzIGV4cG9ydGVkIG9yIGdsb2JhbC4gVGhhdCBtaWdodCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9MTIxND1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzgtXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzk6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTI0MC17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NDU2PXN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0OTMtXHRcdGlmIChicGZfaXNfcHJ1bmVfcG9pbnQoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc0OTQ6XHRcdFx0ZXJyID0gYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NDk1LVx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjQ3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmljYXRpb24gTG9naWMqKgoKQWxyaWdodCwgc28gYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyBhIGdsb2JhbGx5IGFjY2Vzc2libGUgdmFyaWFibGUuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHBsYXlpbmcgYSByb2xlIGluIHRoZSBzdGF0ZSBtYW5hZ2VtZW50IGFjcm9zcyB0aGUgKmVudGlyZSogQlBGIHZlcmlmaWVyIG9wZXJhdGlvbiwgcmF0aGVyIHRoYW4gYmVpbmcgY29uZmluZWQgdG8gYSBzaW5nbGUgZnVuY3Rpb24gb3IgbG9jYWwgY29udGV4dC4gVGhpcyBpbXBsaWVzIGEgcG90ZW50aWFsIGZvciBjb21wbGV4IGludGVyYWN0aW9ucyBhbmQsIHBlcmhhcHMsIG9wcG9ydHVuaXRpZXMgZm9yIHN1YnRsZSBidWdzIG9yIG9wdGltaXphdGlvbnMgcmVsYXRlZCB0byBob3cgdGhlIHZlcmlmaWVyIHRyYWNrcyB3aGF0JiMzOTtzIGJlZW4gYW5hbHl6ZWQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogYGJwZl9jaGVja2AuICBJdCYjMzk7cyBiZWVuIGZsYWdnZWQgYXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gdmVyaWZpY2F0aW9uLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMuIEtub3dpbmcgdGhpcywgbXkgZm9jdXMgaGFzIHRvIGJlIG9uIGZpZ3VyaW5nIG91dCB0aGUgKmluaXRpYWwqIGNvbnRyb2wgZmxvdyB0aHJvdWdoIGBicGZfY2hlY2tgIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgZnJvbSB0aGUgdmVyeSBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgb3BlcmF0aW9uLiBXaGF0IGlucHV0cyBkb2VzIGl0IHRha2U/IFdoYXQgZG9lcyBpdCBpbml0aWFsaXplPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBpdCB1c2VzPyBVbmRlcnN0YW5kaW5nIGBicGZfY2hlY2tgIGlzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwIHRvIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgdmVyaWZpY2F0aW9uIHN0cmF0ZWd5IGFuZCBpdHMgbGlrZWx5IGludGVyYWN0aW9ucyB3aXRoIHRoZSBnbG9iYWwgc3RhdGUgY29udHJvbGxlZCBieSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2l0ZXIuYz01MDQ9aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI1LVx0aWYgKCFicGZwdHJfaXNfbnVsbCh1bGluZm8pKSB7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NTI2Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWxpbmZvLCBzaXplb2YobGluZm8pLFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNy1cdFx0XHRcdFx0ICAgICAgIGxpbmZvX2xlbik7XG4tLVxua2VybmVsL2JwZi9idGYuYz02ODUwPWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy03MDI3LVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvYnRmLmM6NzAyODpcdFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xua2VybmVsL2JwZi9idGYuYy03MDI5LVx0XHR0bmFtZSAmIzQzOz0gc2l6ZW9mKFwmIzM0O2J0Zl90cmFjZV9cJiMzNDspIC0gMTtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQyNj1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy01NjEtICovXG5rZXJuZWwvYnBmL2NmZy5jOjU2MjppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy01NjMte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc3Nj1FWFBPUlRfU1lNQk9MKF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc3Ny1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc3ODppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc3OS1cdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNzAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuZnVuY3M7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjcxOlx0XHRyZXQgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odXJlY29yZCwga3JlY19zaXplLCB1cmVjX3NpemUpO1xua2VybmVsL2JwZi9jaGVja19idGYuYy03Mi1cdFx0aWYgKHJldCkge1xuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MjEzPXN0YXRpYyBpbnQgY2hlY2tfYnRmX2xpbmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2xpbmZvOyBpJiM0MzsmIzQzOykge1xua2VybmVsL2JwZi9jaGVja19idGYuYzoyNTQ6XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMjU1LVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYz0zNDE9c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM3Ni1cdFx0LyogZnV0dXJlIHByb29maW5nIHdoZW4gc2l6ZW9mKGJwZl9jb3JlX3JlbG8pIGNoYW5nZXMgKi9cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6Mzc3Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odV9jb3JlX3JlbG8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMzc4LVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy00MDktXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQxMDppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQxMS1cdFx0XHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM3LVxua2VybmVsL2JwZi9jaGVja19idGYuYzo0Mzg6aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzktXHRcdCAgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNi0gKiBBbmRpIEtsZWVuIC0gRml4IGEgZmV3IGJhZCBidWdzIGFuZCByYWNlcy5cbmtlcm5lbC9icGYvY29yZS5jOjE3OiAqIEtyaXMgS2F0dGVyam9obiAtIEFkZGVkIG1hbnkgYWRkaXRpb25hbCBjaGVja3MgaW4gYnBmX2NoZWNrX2NsYXNzaWMoKVxua2VybmVsL2JwZi9jb3JlLmMtMTgtICovXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjU3ND1ib29sIGJwZl9wcm9nX21hcF9jb21wYXRpYmxlKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjU4Ni1cbmtlcm5lbC9icGYvY29yZS5jOjI1ODc6c3RhdGljIGludCBicGZfY2hlY2tfdGFpbF9jYWxsKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqZnApXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTg4LXtcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjMzPXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQzLVx0XHQvKlxua2VybmVsL2JwZi9jb3JlLmM6MjY0NDpcdFx0ICogSWYgZW52IGlzIG5vdCBOVUxMLCB3ZSBhcmUgY2FsbGVkIGZyb20gdGhlIGVuZCBvZiBicGZfY2hlY2soKSwgYXQgdGhpc1xua2VybmVsL2JwZi9jb3JlLmMtMjY0NS1cdFx0ICogcG9pbnQsIG9ubHkgaW5zbl9hdXhfZGF0YSBpcyB1c2VkIGFmdGVyIGZhaWx1cmUsIHNvIGl0IHNob3VsZCBiZSByZXN0b3JlZFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI2ODA9c3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjcyNi1cdCAqL1xua2VybmVsL2JwZi9jb3JlLmM6MjcyNzpcdCplcnIgPSBicGZfY2hlY2tfdGFpbF9jYWxsKGZwKTtcbmtlcm5lbC9icGYvY29yZS5jLTI3MjgtXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzQwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMzQxNS1cbmtlcm5lbC9icGYvY29yZS5jOjM0MTY6dTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICpwKVxua2VybmVsL2JwZi9jb3JlLmMtMzQxNy17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05MC0gKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cdFx0XHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MDY9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzEyMS1cdC8qIHJ1biBlQlBGIHZlcmlmaWVyICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTIyOlx0ZXJyID0gYnBmX2NoZWNrKFx1MDAyNnByb2csIGF0dHIsIHVhdHRyLCBhdHRyX2xvZyk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTIzLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjI0PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NTYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNzU3Olx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc1OC1cdFx0XHRcdFx0ICAgICAgXHUwMDI2dGd0X2luZm8pO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwODk9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MTAzLVx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NTEwNDpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIGxlbiwgaW5mb19sZW4pO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTEwNS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM3OT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM4OS1cdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MzkwOlx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MzkxLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDUwPXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU4LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ1OTpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDYwLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDY2PXN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ3Ni1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0Nzc6XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzgtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU1MDk9c3RhdGljIGludCB0b2tlbl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTE3LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTUxODpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTE5LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02Mjk0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzAyLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjMwMzpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0ciwgc2l6ZW9mKGF0dHIpLCBzaXplKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMDQtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTQtXHRpZiAoY21kIFx1MDAyNiBCUEZfQ09NTU9OX0FUVFJTKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzE1Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHJfY29tbW9uLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxNi1cdFx0XHRcdFx0ICAgICAgIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfY29tbW9uX2F0dHIsIGxvZ190cnVlX3NpemUpLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwODY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDk3Olx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTgtXHRcdFx0XHQgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MjI9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MzUtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjM2Olx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShidGYsIHByb2csIGlkc1tpXSwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzNy1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTc9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU4LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5Oi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MC0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIwNTk9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fcmJ0cmVlX25vZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwNzAtICogTFNNIGhvb2tzIGFuZCBpdGVycyAoYm90aCBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUpIGFyZSBzYWZlLlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMDcxOiAqIEFueSBzbGVlcGFibGUgcHJvZ3MgYXJlIGFsc28gc2FmZSBzaW5jZSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCgpIGVuZm9yY2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjA3Mi0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MDk2PXN0YXRpYyBib29sIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTA5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MTEwOmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTExLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTIzPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU1My1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTU1NDpcdHJldCA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KFx1MDAyNmVudi1cdTAwM2Vsb2csIHByb2csIHRndF9wcm9nLCBidGZfaWQsIFx1MDAyNnRndF9pbmZvKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU1NS1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjIyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjIzOmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYyNC1cdFx0XHRcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDA1Nj1zdGF0aWMgZW51bSBicGZfc2lnX2tleXJpbmcgYnBmX2NsYXNzaWZ5X2tleXJpbmcoczMyIGtleXJpbmdfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDcwLS8qXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAwNzE6ICogVmVyaWZ5IHRoZSBQS0NTIzcgc2lnbmF0dXJlIG9mIGEgbG9hZGVkIHByb2dyYW0uIENhbGxlZCBmcm9tIGJwZl9jaGVjaygpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNzItICogb25jZSB0aGUgcHJvZ3JhbSYjMzk7cyBtZXRhZGF0YSBtYXBzIGhhdmUgYmVlbiByZXNvbHZlZCBpbnRvIHVzZWRfbWFwcywgc29cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwNzk9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTk1LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTk2OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTk3LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjEwLVx0LyogJiMzOTtzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiYjMzk7IGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCYjMzk7cyBub3Qgc21hbGwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAyMTE6XHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyMTItXHQgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMDMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMDQ6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMDUtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMxNS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDMxNjpcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMxNy1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzI5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzMwOlx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzMxLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyOTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVmVyaWZpY2F0aW9uIEJ1ZyBIdW50aW5nIEpvdXJuZXkqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyB0aGlzIEJQRiB2ZXJpZmllciBidWcuIFRoZSBlbnRyeSBwb2ludCwgYXMgSSBzZWUgaXQsIGlzIGBicGZfY2hlY2tgIOKAkyB0aGF0JiMzOTtzIHRoZSBtYWluIGZ1bmN0aW9uIHRoZSBzeXN0ZW0gdXNlcywgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgYnBmX3Byb2dfbG9hZGAuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyBgYnBmX2NoZWNrYCB3b3VsZCBiZSB0aGUgYmVzdCBmb2N1cywgYnV0IGl0JiMzOTtzIGEgdmVyeSBnZW5lcmljIGZ1bmN0aW9uLCBhbmQgSSBuZWVkIHRvIGJlIG1vcmUgc3BlY2lmaWMuCgpUaGVuLCBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGFuZCBsYW5kZWQgb24gYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gSSBzZWUgdGhhdCBgZG9fY2hlY2tgIHJ1bnMgdGhlIG1haW4gbG9vcCwgYW5kIGBmdW5jX3N0YXRlc19lcXVhbGAgaXMgY2FsbGVkIHRocm91Z2ggYHN0YXRlc19lcXVhbGAsIHdoaWNoIGlzIGNhbGxlZCBieSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciAtIG1vcmUgc3BlY2lmaWNpdHkuIFRoYXQmIzM5O3MgYSBzdHJvbmcgY2FuZGlkYXRlLgoKSSBhbHNvIG5vdGljZWQgYGJwZl9pdGVyX3Rhc2tfbmV3YCwgd2hpY2ggaXMgYSBrZnVuYyB0aGF0IGNyZWF0ZXMgdGhlIGl0ZXJhdG9yLCBpcyByZWxldmFudCB0byB0aGUgdGVzdCBjYXNlLiBCdXQsIGhhbmcgb24uLi4gaXQmIzM5O3MgYSBrZnVuYywgbWVhbmluZyBpdCYjMzk7cyBjYWxsZWQgYXQgcnVudGltZS4gU2luY2UgdGhlIGJ1ZyBpcyBpbiB0aGUgdmVyaWZpZXIsIEkgd2FudCB0byBmdXp6IHRoZSB2ZXJpZmllciwgbm90IHJ1bnRpbWUgY29kZS4gU28sIGxldCYjMzk7cyBrZWVwIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgb24gdGhlIGxpc3QuIGBicGZfY2hlY2tgIGlzIHN0aWxsIHJlbGV2YW50IHRvbywgZ2l2ZW4gaXQgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQsIGFuZCBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIGxldCYjMzk7cyBjaGVjayBmb3IgYW55IHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLCBJJiMzOTtsbCBuZWVkIHRoYXQuIFdoYXQgYWJvdXQgYENPTkZJR19CUEZfSklUYD8gQW5kLCBpcyB0aGVyZSBhbnl0aGluZyByZWxhdGVkIHRvIGBDT05GSUdfVEFTS1NfUkNVYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gVGhlIHRlc3QgY2FzZSB1c2VzIGBicGZfaXRlcl90YXNrX25ld2Agc28gbGV0JiMzOTtzIGNoZWNrIGl0IGluIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2l0ZXJfdGFza19uZXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3Rhc2tfaXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdGFza19pdGVyLmM9MTExND1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMTUtXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjExMTY6X19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfbmV3KHN0cnVjdCBicGZfaXRlcl90YXNrICppdCxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTExNy1cdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX19udWxsYWJsZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzIzMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gYHRhc2tfaXRlci5jYCBmb3IgQlBGIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsJiMzOTtzIEJQRiBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0YXNrcywgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYW55IHRhc2stc3BlY2lmaWMgQlBGIGNvbmZpZ3VyYXRpb25zIGlzIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyBvciBjb25kaXRpb25zIGRlZmluZWQgaW4gdGhpcyBmaWxlLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIGlmIHRoZSBjb2RlIGhhcyBhbnl0aGluZyBvZiBub3RlLiBMZXQgbWUgdGFrZSBhIGxvb2sgaW5zaWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXNrX2l0ZXIubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT05PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1OTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIEJQRiBUZXN0IENvbmZpZ3VyYXRpb24gYW5kIFJDVSBVc2FnZSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB0aGlzIGNvZGUmIzM5O3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBvYnZpb3VzIG9uZSwgYnV0IGFyZSB0aGVyZSBhbnkgKm90aGVyKiByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YgaGVyZT8gQ3J1Y2lhbCB0byBjaGVjaywgYmVjYXVzZSBkZXBlbmRlbmNpZXMgY2FuIGJlIHN1YnRsZSBpbiBCUEYuCgpOb3csIEkgc2VlIHRoZSB0ZXN0IGNvZGUgbWFrZXMgdXNlIG9mIGBicGZfcmN1X3JlYWRfbG9ja2AuIE9rYXksIHRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byBzb21lIHNoYXJlZCByZXNvdXJjZSwgYW5kIHRoZSBjb2RlIGlzIGNhcmVmdWxseSBhZGhlcmluZyB0byBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIHNlbWFudGljcy4gR290dGEgbWFrZSBzdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCAqd2h5KiB0aGV5JiMzOTtyZSB1c2luZyBSQ1UgaGVyZS4gV2hhdCYjMzk7cyB0aGUgY3JpdGljYWwgc2VjdGlvbj8gV2hhdCBkYXRhIGlzIGJlaW5nIHByb3RlY3RlZD8KCk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgYnBmX3JjdV9yZWFkX2xvY2tgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIHVzZSBoZXJlIGlzIGJvdGggY29ycmVjdCBhbmQgZWZmaWNpZW50LiBMb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGZvciBkZWFkbG9ja3MsIG1pc3NlZCB1cGRhdGVzLCBvciBpbmVmZmljaWVudCBjcml0aWNhbCBzZWN0aW9ucyB3aXRoIFJDVS4gR290dGEgZG91YmxlIGNoZWNrIHRoYXQgdGhlIHVubG9ja3MgYXJlIHByZXNlbnQgYW5kIGNvcnJlY3RseSBtYXRjaGVkIHdpdGggdGhlIGxvY2tzLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGFuZCBrZXJuZWwgYXJlIHBsYXlpbmcgbmljZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcmN1X3JlYWRfbG9jayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGVscGVycy5jPTMzNDI9X19icGZfa2Z1bmMgdm9pZCAqYnBmX3Jkb25seV9jYXN0KGNvbnN0IHZvaWQgKm9ial9faWduLCB1MzIgYnRmX2lkX19rKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTMzNDYtXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzozMzQ3Ol9fYnBmX2tmdW5jIHZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZClcbmtlcm5lbC9icGYvaGVscGVycy5jLTMzNDgte1xuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4ODU9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZG9ubHlfY2FzdCwgS0ZfRkFTVENBTEwpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODg2OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmN1X3JlYWRfbG9jaylcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4ODctQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yY3VfcmVhZF91bmxvY2spXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ0NDQ9c3RhdGljIGJvb2wgaW5fc2xlZXBhYmxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ0NDgtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDQ0OTovKiBUaGUgbm9uLXNsZWVwYWJsZSBwcm9ncmFtcyBhbmQgc2xlZXBhYmxlIHByb2dyYW1zIHdpdGggZXhwbGljaXQgYnBmX3JjdV9yZWFkX2xvY2soKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ0NTAtICogY2FuIGRlcmVmZXJlbmNlIFJDVSBwcm90ZWN0ZWQgcG9pbnRlcnMgYW5kIHJlc3VsdCBpcyBQVFJfVFJVU1RFRC5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTgyMD1zdGF0aWMgaW50IGNoZWNrX3B0cl90b19idGZfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5MjktXHRcdCAqICYjMzk7Y2dyb3VwcyYjMzk7IHBvaW50ZXIgaXMgdW50cnVzdGVkIGlmIHRhc2stXHUwMDNlY2dyb3VwcyBkZXJlZmVyZW5jZVxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5MzA6XHRcdCAqIGhhcHBlbmVkIGluIGEgc2xlZXBhYmxlIHByb2dyYW0gb3V0c2lkZSBvZiBicGZfcmN1X3JlYWRfbG9jaygpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTkzMS1cdFx0ICogc2VjdGlvbi4gSW4gYSBub24tc2xlZXBhYmxlIHByb2dyYW0gaXQmIzM5O3MgdHJ1c3RlZCB3aGlsZSBpbiBSQ1UgQ1MgKGFrYSBNRU1fUkNVKS5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwOTc9c3RhdGljIGludCBjaGVja19yZXNvdXJjZV9sZWFrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgZXhjZXB0aW9uX2V4aXQsIGJvb2wgY2hlY2tfbG9jaywgY29uc3QgY2hhciAqcHJlZml4KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDExNy1cdGlmIChjaGVja19sb2NrIFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlY3VyX3N0YXRlLVx1MDAzZWFjdGl2ZV9yY3VfbG9ja3MpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDExODpcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIGNhbm5vdCBiZSB1c2VkIGluc2lkZSBicGZfcmN1X3JlYWRfbG9jay1lZCByZWdpb25cXG5cJiMzNDssIHByZWZpeCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAxMTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTEzNz1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTU4LVx0S0ZfYnBmX3Jkb25seV9jYXN0LFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTU5Olx0S0ZfYnBmX3JjdV9yZWFkX2xvY2ssXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNjAtXHRLRl9icGZfcmN1X3JlYWRfdW5sb2NrLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIzMT1CVEZfSUQoZnVuYywgYnBmX3Jkb25seV9jYXN0KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjMyOkJURl9JRChmdW5jLCBicGZfcmN1X3JlYWRfbG9jaylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIzMy1CVEZfSUQoZnVuYywgYnBmX3JjdV9yZWFkX3VubG9jaylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEzNTc9c3RhdGljIGJvb2wgaXNfa2Z1bmNfcmV0X251bGwoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM2NC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTM2NTpzdGF0aWMgYm9vbCBpc19rZnVuY19icGZfcmN1X3JlYWRfbG9jayhzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjYte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzY3Olx0cmV0dXJuIG1ldGEtXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JjdV9yZWFkX2xvY2tdO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzY4LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTMwMTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxNTEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNTI6XHRyY3VfbG9jayA9IGlzX2tmdW5jX2JwZl9yY3VfcmVhZF9sb2NrKFx1MDAyNm1ldGEpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTUzLVx0cmN1X3VubG9jayA9IGlzX2tmdW5jX2JwZl9yY3VfcmVhZF91bmxvY2soXHUwMDI2bWV0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTUyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJQRiBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgYnBmX3JjdV9yZWFkX2xvY2tgLiBJIHNlZSBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGFuZCBjb21waWxlZCB1bmRlciB0aGUgdW1icmVsbGEgb2YgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbi4gSG93ZXZlciwgbXkgZ3V0IHRlbGxzIG1lIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBlbHNlIGF0IHBsYXksIGVzcGVjaWFsbHkgd2l0aCBteSBiYWNrZ3JvdW5kIGluIEJQRjsgSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBpcyBvZnRlbiBjcnVjaWFsLCBzcGVjaWZpY2FsbHkgZm9yIGtmdW5jcyBhbmQgYW55dGhpbmcgQlRGLWRlcGVuZGVudC4gTXkgZXhwZXJpZW5jZSBzaG93cyB0aGF0IEJURiBpcyBxdWl0ZSBwcmV2YWxlbnQgaGVyZS4gU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBpcyBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCAqcmVxdWlyZWQqIGhlcmU/IFRpbWUgdG8gZGlnIGRlZXBlciBhbmQgY29uZmlybSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfREVCVUdfSU5GT19CVEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTQwPWlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxua2VybmVsL2JwZi9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSBzeXNmc19idGYub1xua2VybmVsL2JwZi9NYWtlZmlsZS00Mi1lbmRpZlxuLS1cbmtlcm5lbC9icGYvYnRmLmM9NjM4Nj1zdGF0aWMgc3RydWN0IGJ0ZiAqYnRmX3BhcnNlX2Jhc2Uoc3RydWN0IGJ0Zl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTYzOTEtXG5rZXJuZWwvYnBmL2J0Zi5jOjYzOTI6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSlcbmtlcm5lbC9icGYvYnRmLmMtNjM5My1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4tLVxua2VybmVsL2JwZi9idGYuYz02NDcyPXN0YXRpYyBfX3UzMiBidGZfcmVsb2NhdGVfaWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBfX3UzMiBpZClcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTY0NzgtXG5rZXJuZWwvYnBmL2J0Zi5jOjY0Nzk6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTY0ODAtXG5rZXJuZWwvYnBmL2J0Zi5jPTY0ODE9c3RhdGljIHN0cnVjdCBidGYgKmJ0Zl9wYXJzZV9tb2R1bGUoY29uc3QgY2hhciAqbW9kdWxlX25hbWUsIGNvbnN0IHZvaWQgKmRhdGEsXG4tLVxua2VybmVsL2JwZi9idGYuYy02NTc2LVxua2VybmVsL2JwZi9idGYuYzo2NTc3OiNlbmRpZiAvKiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUyAqL1xua2VybmVsL2JwZi9idGYuYy02NTc4LVxuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODQ2Mz1lbnVtIHtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg0NjYtXG5rZXJuZWwvYnBmL2J0Zi5jOjg0Njc6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg0Njgtc3RydWN0IGJ0Zl9tb2R1bGUge1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODYwNT1mc19pbml0Y2FsbChidGZfbW9kdWxlX2luaXQpO1xua2VybmVsL2JwZi9idGYuYzo4NjA2OiNlbmRpZiAvKiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUyAqL1xua2VybmVsL2JwZi9idGYuYy04NjA3LVxua2VybmVsL2JwZi9idGYuYz04NjA4PXN0cnVjdCBtb2R1bGUgKmJ0Zl90cnlfZ2V0X21vZHVsZShjb25zdCBzdHJ1Y3QgYnRmICpidGYpXG4tLVxua2VybmVsL2JwZi9idGYuYy04NjEwLVx0c3RydWN0IG1vZHVsZSAqcmVzID0gTlVMTDtcbmtlcm5lbC9icGYvYnRmLmM6ODYxMTojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODYxMi1cdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODYzOD1zdGF0aWMgc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcbmtlcm5lbC9icGYvYnRmLmMtODYzOS17XG5rZXJuZWwvYnBmL2J0Zi5jOjg2NDA6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NDEtXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NTEtXG5rZXJuZWwvYnBmL2J0Zi5jOjg2NTI6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NTMtXHRtdXRleF9sb2NrKFx1MDAyNmJ0Zl9tb2R1bGVfbXV0ZXgpO1xuLS1cbmtlcm5lbC9icGYvYnRmLmM9ODY2OD1zdGF0aWMgaW50IGNoZWNrX2J0Zl9rY29uZmlncyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IGNoYXIgKmZlYXR1cmUpXG5rZXJuZWwvYnBmL2J0Zi5jLTg2Njkte1xua2VybmVsL2JwZi9idGYuYzo4NjcwOlx0aWYgKCFtb2R1bGUgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkge1xua2VybmVsL2JwZi9idGYuYy04NjcxLVx0XHRwcl9lcnIoXCYjMzQ7bWlzc2luZyB2bWxpbnV4IEJURiwgY2Fubm90IHJlZ2lzdGVyICVzXFxuXCYjMzQ7LCBmZWF0dXJlKTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NzMtXHR9XG5rZXJuZWwvYnBmL2J0Zi5jOjg2NzQ6XHRpZiAobW9kdWxlIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTKSlcbmtlcm5lbC9icGYvYnRmLmMtODY3NS1cdFx0cHJfd2FybihcJiMzNDttaXNzaW5nIG1vZHVsZSBCVEYsIGNhbm5vdCByZWdpc3RlciAlc1xcblwmIzM0OywgZmVhdHVyZSk7XG4tLVxua2VybmVsL2JwZi9idGYuYz04ODE1PXN0YXRpYyBpbnQgYnRmX2NoZWNrX2tmdW5jX25hbWUoc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBjaGFyICpmdW5jX25hbWUsIHUzMiBraW5kKVxua2VybmVsL2JwZi9idGYuYy04ODE2LXtcbmtlcm5lbC9icGYvYnRmLmM6ODgxNzojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODgxOC1cdHN0cnVjdCBidGZfbW9kdWxlICpidGZfbW9kLCAqdG1wO1xuLS1cbmtlcm5lbC9icGYvYnRmLmMtODgzMS1cbmtlcm5lbC9icGYvYnRmLmM6ODgzMjojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtODgzMy1cdGd1YXJkKG11dGV4KShcdTAwMjZidGZfbW9kdWxlX211dGV4KTtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTk0ODA9c3RhdGljIHN0cnVjdCBicGZfY2FuZF9jYWNoZSAqcG9wdWxhdGVfY2FuZF9jYWNoZShzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKmNhbmRzLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTUwNy1cbmtlcm5lbC9icGYvYnRmLmM6OTUwODojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcbmtlcm5lbC9icGYvYnRmLmMtOTUwOS1zdGF0aWMgdm9pZCBfX3B1cmdlX2NhbmRfY2FjaGUoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKipjYWNoZSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjcyOD1pbnQgYnBmX2FkZF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBmdW5jX2lkLCB1MTYgb2Zmc2V0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzQ0LVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mjc0NTpcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjc0Ni1cdFx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTg0PXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk5OC1cdGlmICghYnRmX3ZtbGludXgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTk5Olx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWFwX3B0ciBhY2Nlc3Mgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAwMC1cdFx0cmV0dXJuIC1FTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc4MDM9c3RhdGljIGludCBjaGVja19wc2V1ZG9fYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODE5LVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc4MjA6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2tlcm5lbCBpcyBtaXNzaW5nIEJURiwgbWFrZSBzdXJlIENPTkZJR19ERUJVR19JTkZPX0JURj15IGlzIHNwZWNpZmllZCBpbiBLY29uZmlnLlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc4MjEtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjgwPXN0cnVjdCBidGYgKmJwZl9nZXRfYnRmX3ZtbGludXgodm9pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2ODU6XHRpZiAoIWJ0ZiBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODYtXHRcdG11dGV4X2xvY2soXHUwMDI2YnRmX3ZtbGludXhfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDEwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBCUEYgSXRlcmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBmb3IgdGhpcyBCUEYtYmFzZWQgdGFzayBpdGVyYXRpb24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgQ09ORklHX0RFQlVHX0lORk9fQlRGYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLCBhbmQgSSBhbHNvIG5lZWQgdG8gZW5zdXJlIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuIEJ1dCwgeW91IGtub3cgaG93IGl0IGlzLCBsZXQmIzM5O3MganVzdCBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuCgpTcGVjaWZpY2FsbHksIHRoaXMgdGVzdCB1c2VzIGBicGZfaXRlcl90YXNrX25ld2AuIFNvLCBteSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvdGFza19pdGVyLmNgLCBhbmQgc2VlIGlmIGBicGZfaXRlcl90YXNrX25ld2AgaXRzZWxmIGlzIGdhdGVkIGJlaGluZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmbGFncy4gR290dGEgYmUgdGhvcm91Z2gsIGFuZCBhIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBjaGVjayBpcyBhbHdheXMgYSBnb29kIGlkZWEgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBtb3JlIGNvbXBsZXggc3R1ZmYuIEl0IHdvdWxkIGJlIGhlbHBmdWwgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcHJlY29uZGl0aW9ucyB0byBjb25zaWRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2l0ZXJfdGFza19uZXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3Rhc2tfaXRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdGFza19pdGVyLmM9MTExND1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMTUtXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjExMTY6X19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfbmV3KHN0cnVjdCBicGZfaXRlcl90YXNrICppdCxcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTExNy1cdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX19udWxsYWJsZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg4NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgSXRlcmF0b3IgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGEgZnV6emluZyBzdHJhdGVneS4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBga2VybmVsL2JwZi90YXNrX2l0ZXIuY2AgaXMgYWx3YXlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBnb29kOyBpdCYjMzk7cyBhIHN0YWJsZSB0YXJnZXQuIEkgY29uZmlybWVkIHRoaXMgYnkgY2hlY2tpbmcgdGhlIGBNYWtlZmlsZWAuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGBicGZfY2hlY2tgIHNpbmNlIGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgdmVyaWZpZXIgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoYXQmIzM5O3MgYSAqdmVyeSogYnJvYWQgdGFyZ2V0LiBTbywgSSBkdWcgZGVlcGVyLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGhpZ2hsaWdodHMgdGhlIHByb2JsZW0gaW4gYHN0YWNrc2FmZWAsIHdpdGhpbiBgZnVuY19zdGF0ZXNfZXF1YWxgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHN0YXRlc19lcXVhbGAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIEJpbmdvISBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGxvb2tzIGxpa2UgYSBtb3JlIHByb21pc2luZyBmb2N1cyBiZWNhdXNlIGl0JiMzOTtzIG5vbi1zdGF0aWMgYW5kIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHN0YXRlIGNvbXBhcmlzb24gdGhhdCYjMzk7cyBhdCB0aGUgaGVhcnQgb2YgdGhpcyBidWcuIEkgY29uc2lkZXJlZCBgZG9fY2hlY2tgLCBidXQgdGhhdCYjMzk7cyBzdGF0aWMsIHNvIGl0JiMzOTtzIG5vdCBhIGRpcmVjdCB0YXJnZXQuCgpTaW5jZSB0aGlzIGJ1ZyBpcyBhYm91dCBSQ1UtcHJvdGVjdGVkIGl0ZXJhdG9ycywgYW5kIGdpdmVuIHRoZSB0ZXN0IGNhc2VzLCBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSBrZnVuY3MgYGJwZl9pdGVyX3Rhc2tfbmV3YCBhbmQgYGJwZl9pdGVyX3Rhc2tfbmV4dGAuIFRoZXNlIGFyZSB0aGUga2Z1bmNzICp1c2VkKiBieSB0aGUgaXRlcmF0b3IgZmVhdHVyZS4gYGJwZl9pdGVyX3Rhc2tfbmV3YCBpcyBkZWZpbmVkIGFzIGBub2lubGluZWAsIGJ1dCwgaW1wb3J0YW50bHksIGl0JiMzOTtzICpub3QqIHN0YXRpYywgc28gaXQmIzM5O3MgZ2xvYmFsbHkgdmlzaWJsZS4KCkluIHN1bW1hcnksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3Q6CgoqICAgKipXb3J0aEZ1enppbmc6KiogWWVzCiogICAqKkZvY3VzU3ltYm9sczoqKiBgYnBmX2NoZWNrYCwgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCwgYGJwZl9pdGVyX3Rhc2tfbmV3YCwgYGJwZl9pdGVyX3Rhc2tfbmV4dGAKKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgQlBGX1NZU0NBTExgLCBgREVCVUdfSU5GT19CVEZgCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIFJDVSBwcm90ZWN0aW9uIGlzc3VlIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGBzdGFja3NhZmVgIGZ1bmN0aW9uLiBUaGUgdmVyaWZpZXIgd2FzIGluY29ycmVjdGx5IG1lcmdpbmcgc3RhdGVzIHdpdGggZGlmZmVyZW50IFJDVSBwcm90ZWN0aW9uIHN0YXR1c2VzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1lbW9yeSB1bnNhZmV0eS4gYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBzdGF0ZSBjb21wYXJpc29ucywgd2hpbGUgYGJwZl9jaGVja2AgaXMgcmVsYXRlZCB0byB0aGUgbW9yZSBiYXNpYyBCUEYgdmVyaWZpY2F0aW9uLCBhbmQgYGJwZl9pdGVyX3Rhc2tfbmV3YCBhbmQgYGJwZl9pdGVyX3Rhc2tfbmV4dGAgYXJlIGltcG9ydGFudCBrZnVuY3MgdG8gZm9jdXMgb24gZm9yIEJQRiBpdGVyYXRvciBmZWF0dXJlIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX3Rhc2tfbmV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdGFza19pdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi90YXNrX2l0ZXIuYz0xMTE2PV9fYnBmX2tmdW5jIGludCBicGZfaXRlcl90YXNrX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFzayAqaXQsXG4tLVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMTQ3LVxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMTQ4Ol9fYnBmX2tmdW5jIHN0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX2l0ZXJfdGFza19uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrICppdClcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTE0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MTc4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkdsb2JhbCBTY29wZSBDaGVjayoqCgpSaWdodCwgdGhpcyBmZWVscyBsaWtlIGl0IGhhcyBpbXBsaWNhdGlvbnMgYWNyb3NzIHRoZSBlbnRpcmUgc3lzdGVtLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBnbG9iYWwuIFRpbWUgdG8gemVybyBpbiBvbiB0aGF0LiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc29tZXRoaW5nIHdpdGggYSBnbG9iYWwgcmVhY2guCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgY29uZmlybSB0aGF0IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgYWN0dWFsbHkgb3BlcmF0ZXMgYXQgYSBnbG9iYWwgbGV2ZWwuIElzIGl0cyBpbmZsdWVuY2UgbGltaXRlZD8gT3IgaXMgaXQgdHJ1bHkgaW1wYWN0aW5nIHRoZSB3aG9sZSBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2lzX3N0YXRlX3Zpc2l0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N0YXRlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3RhdGVzLmM9MTIxND1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyMzgtXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzk6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTI0MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aGluZ3MgbXlzZWxmOgoKKipHbG9iYWwgU2NvcGUgVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIHllcCwgd2UmIzM5O3JlIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIGEgZ2xvYmFsIGNvbnRleHQgaGVyZS4gSW1wb3J0YW50IHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgZG9lcyBgYnBmX2NoZWNrYCBiZWhhdmUgYXMgYSBnbG9iYWxseSBzY29wZWQgZnVuY3Rpb24gb3IgdmFyaWFibGU/IFRpbWUgdG8gZGlnIGEgYml0IGRlZXBlciBhbmQgYXNjZXJ0YWluIGl0cyBzY29wZS4gV2UgbXVzdCBjbGFyaWZ5IHdoZXRoZXIgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIGxvY2FsbHksIG9yIGdsb2JhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTU3PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTovKiBicGZfY2hlY2soKSBpcyBhIHN0YXRpYyBjb2RlIGFuYWx5emVyIHRoYXQgd2Fsa3MgZUJQRiBwcm9ncmFtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyMDU5PXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMDcwLSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjA3MTogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwNzItICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTA5Nj1zdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTEwOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTExMDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTExMS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTUyMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1NTMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk1NTQ6XHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1NTUtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTYyMi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTYyMzppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MjQtXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwNTY9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3MC0vKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDcxOiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDcyLSAqIG9uY2UgdGhlIHByb2dyYW0mIzM5O3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMDc5PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5NS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDE5NjppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5Ny1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIxMC1cdC8qICYjMzk7c3RydWN0IGJwZl92ZXJpZmllcl9lbnYmIzM5OyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQmIzM5O3Mgbm90IHNtYWxsLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjExOlx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjEyLVx0ICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzAzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzA0Olx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzA1LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMTUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMTY6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMTctXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMyOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDMzMDpcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMzMS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODM4CgkJCQkJCQlvdXRwdXQ6IDIwMgoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaW5hbCBUaG91Z2h0cyBvbiBUaGlzIEJQRiBWZXJpZmllciBGaXgqKgoKT2theSwgeWVzLCB0aGlzIGlzIGEgZ2xvYmFsbHkgcmVsZXZhbnQgcGF0Y2gsIG5vIHF1ZXN0aW9uIGFib3V0IGl0LiBJJiMzOTttIHNlZWluZyB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBoZXJlOiBgYnBmX2NoZWNrYCwgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCwgYGJwZl9pdGVyX3Rhc2tfbmV3YCwgYW5kIGBicGZfaXRlcl90YXNrX25leHRgLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAuIFRoZSBsb2dpYyBiZWhpbmQgdGhlIGNoYW5nZSBpcyBzdHJhaWdodGZvcndhcmQsIHRoYW5rZnVsbHkuCgpMZXQgbWUganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiB0aGF0IHJlYXNvbmluZy4gVGhlIGNydXggb2YgaXQgaXMgYWRkcmVzc2luZyBhIG1pc3NpbmcgdHlwZSBjaGVjayB3aXRoaW4gYHN0YWNrc2FmZSgpYCBmb3IgYFNUQUNLX0lURVJgIHNsb3RzLiBXaXRob3V0IHRoaXMsIHRoZSBCUEYgdmVyaWZpZXIgY291bGQgbWlzdGFrZW5seSBlcXVhdGUgaXRlcmF0b3Igc3RhdGVzIGV2ZW4gaWYgdGhlaXIgdW5kZXJseWluZyByZWdpc3RlciB0eXBlcyBkaWZmZXIg4oCTIGltYWdpbmUgb25lIGJlaW5nIFJDVS1wcm90ZWN0ZWQgYW5kIHRoZSBvdGhlciBiZWNvbWluZyB1bnRydXN0ZWQgYWZ0ZXIgYW4gUkNVIHVubG9jayEgVGhpcywgb2YgY291cnNlLCB3b3VsZCBvcGVuIHRoZSBkb29yIHRvIHVuc2FmZSBwcm9ncmFtcyBnYWluaW5nIGFjY2VwdGFuY2UsIGFsbG93aW5nIGFjY2VzcyB0byBpdGVyYXRvcnMgb3V0c2lkZSBsZWdpdGltYXRlIFJDVSBjcml0aWNhbCBzZWN0aW9ucy4KClRoZSBmaXggaXMgY2xlYXJseSBmdW5jdGlvbmFsLCBpbXBhY3RpbmcgdGhlIGNvcmUgQlBGIHZlcmlmaWVyJiMzOTtzIGxvZ2ljLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciB0aGlzIGtpbmQgb2YgdnVsbmVyYWJpbGl0eSwgZnV6emluZyB0aGlzIGlzIGFic29sdXRlbHkgZXNzZW50aWFsLgoKUmlnaHQsIEkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGlzLiBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2JwZl9pc19zdGF0ZV92aXNpdGVkJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX3Rhc2tfbmV3JiMzNDssCiAgICAmIzM0O2JwZl9pdGVyX3Rhc2tfbmV4dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgdHlwZSBjaGVjayBpbiB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGBzdGFja3NhZmUoKWAgZnVuY3Rpb24gZm9yIGBTVEFDS19JVEVSYCBzbG90cy4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgdmVyaWZpZXIgY291bGQgaW5jb3JyZWN0bHkgY29uc2lkZXIgdHdvIGl0ZXJhdG9yIHN0YXRlcyBhcyBlcXVpdmFsZW50IGV2ZW4gaWYgdGhlaXIgcmVnaXN0ZXIgdHlwZXMgZGlmZmVyZWQgKGUuZy4sIG9uZSBiZWluZyBSQ1UtcHJvdGVjdGVkIGFuZCB0aGUgb3RoZXIgYmVpbmcgdW50cnVzdGVkIGFmdGVyIGFuIFJDVSB1bmxvY2spLiBUaGlzIGNvdWxkIGxlYWQgdG8gdGhlIHZlcmlmaWVyIGFjY2VwdGluZyB1bnNhZmUgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgaXRlcmF0b3JzIG91dHNpZGUgb2YgUkNVIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGUgZml4IGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDticGZfaXNfc3RhdGVfdmlzaXRlZCYjMzQ7LAogICAgJiMzNDticGZfaXRlcl90YXNrX25ldyYjMzQ7LAogICAgJiMzNDticGZfaXRlcl90YXNrX25leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIHR5cGUgY2hlY2sgaW4gdGhlIEJQRiB2ZXJpZmllciYjMzk7cyBgc3RhY2tzYWZlKClgIGZ1bmN0aW9uIGZvciBgU1RBQ0tfSVRFUmAgc2xvdHMuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIHZlcmlmaWVyIGNvdWxkIGluY29ycmVjdGx5IGNvbnNpZGVyIHR3byBpdGVyYXRvciBzdGF0ZXMgYXMgZXF1aXZhbGVudCBldmVuIGlmIHRoZWlyIHJlZ2lzdGVyIHR5cGVzIGRpZmZlcmVkIChlLmcuLCBvbmUgYmVpbmcgUkNVLXByb3RlY3RlZCBhbmQgdGhlIG90aGVyIGJlaW5nIHVudHJ1c3RlZCBhZnRlciBhbiBSQ1UgdW5sb2NrKS4gVGhpcyBjb3VsZCBsZWFkIHRvIHRoZSB2ZXJpZmllciBhY2NlcHRpbmcgdW5zYWZlIHByb2dyYW1zIHRoYXQgYWNjZXNzIGl0ZXJhdG9ycyBvdXRzaWRlIG9mIFJDVSBjcml0aWNhbCBzZWN0aW9ucy4gVGhlIGZpeCBpcyBmdW5jdGlvbmFsIGFuZCBhZmZlY3RzIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAzOjU2OjU3LjAwODQxMDk3MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTQ0NDI4MjI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gICAgXCJicGZfaXRlcl90YXNrX25ld1wiLFxuICAgIFwiYnBmX2l0ZXJfdGFza19uZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIHR5cGUgY2hlY2sgaW4gdGhlIEJQRiB2ZXJpZmllcidzIGBzdGFja3NhZmUoKWAgZnVuY3Rpb24gZm9yIGBTVEFDS19JVEVSYCBzbG90cy4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgdmVyaWZpZXIgY291bGQgaW5jb3JyZWN0bHkgY29uc2lkZXIgdHdvIGl0ZXJhdG9yIHN0YXRlcyBhcyBlcXVpdmFsZW50IGV2ZW4gaWYgdGhlaXIgcmVnaXN0ZXIgdHlwZXMgZGlmZmVyZWQgKGUuZy4sIG9uZSBiZWluZyBSQ1UtcHJvdGVjdGVkIGFuZCB0aGUgb3RoZXIgYmVpbmcgdW50cnVzdGVkIGFmdGVyIGFuIFJDVSB1bmxvY2spLiBUaGlzIGNvdWxkIGxlYWQgdG8gdGhlIHZlcmlmaWVyIGFjY2VwdGluZyB1bnNhZmUgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgaXRlcmF0b3JzIG91dHNpZGUgb2YgUkNVIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGUgZml4IGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMzo1Njo1Ny4wMDg0MTYyNjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA0MzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM1MzI5MTM0OWJlOGZmOWFhMWUzODcwMDZmNDRiZDQzNzMxMjZlNDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAwMzo1Njo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xcbmluZGV4IGVhMjE1M2NmMjhkMGEuLjRlNmFhZmFkMzNiZDIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zdGF0ZXMuY1xcbisrKyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcXG5AQCAtODEyLDcgKzgxMiw4IEBAIHN0YXRpYyBib29sIHN0YWNrc2FmZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG4gXFx0XFx0XFx0ICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWVcXG4gXFx0XFx0XFx0ICogaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAob2xkX3JlZy1cXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cXHUwMDNlaXRlci5idGYgfHxcXG4rXFx0XFx0XFx0aWYgKG9sZF9yZWctXFx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cXHUwMDNldHlwZSB8fFxcbitcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cXHUwMDNlaXRlci5idGYgfHxcXG4gXFx0XFx0XFx0ICAgIG9sZF9yZWctXFx1MDAzZWl0ZXIuYnRmX2lkICE9IGN1cl9yZWctXFx1MDAzZWl0ZXIuYnRmX2lkIHx8XFxuIFxcdFxcdFxcdCAgICBvbGRfcmVnLVxcdTAwM2VpdGVyLnN0YXRlICE9IGN1cl9yZWctXFx1MDAzZWl0ZXIuc3RhdGUgfHxcXG4gXFx0XFx0XFx0ICAgIC8qIGlnbm9yZSB7b2xkX3JlZyxjdXJfcmVnfS1cXHUwMDNlaXRlci5kZXB0aCwgc2VlIGFib3ZlICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY1xcbmluZGV4IGZlMzY2M2RlZGJlMTQuLmJhYzM5NGFlNzdmNDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXFxuQEAgLTYxLDYgKzYxLDMzIEBAIGludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX2xvY2tfYW5kX3VubG9jaylcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiP2ZlbnRyeS5zL1xcXCIgU1lTX1BSRUZJWCBcXFwic3lzX2dldHBnaWRcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImV4cGVjdGVkIGFuIFJDVSBDUyB3aGVuIHVzaW5nIGJwZl9pdGVyX3Rhc2tfbmV4dFxcXCIpXFxuK19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpXFxuK2ludCBCUEZfUFJPRyhpdGVyX3Rhc2tzX3JjdV9zdGF0ZV9wcnVuaW5nKVxcbit7XFxuK1xcdHN0cnVjdCBicGZfaXRlcl90YXNrIGl0O1xcbitcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0YnBmX2l0ZXJfdGFza19uZXcoXFx1MDAyNml0LCBOVUxMLCBCUEZfVEFTS19JVEVSX0FMTF9QUk9DUyk7XFxuK1xcbitcXHRpZiAobGlrZWx5KGJwZl9nZXRfcHJhbmRvbV91MzIoKSkpIHtcXG4rXFx0XFx0LyogS2VlcCB0aGUgb3V0ZXIgUkNVIGxvY2sgYWN0aXZlLiAqL1xcbitcXHRcXHRicGZfcmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIENyZWF0ZSBhbiB1bnByb3RlY3RlZCBnYXAuICovXFxuK1xcdFxcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0fVxcbitcXG4rXFx0YnBmX2l0ZXJfdGFza19uZXh0KFxcdTAwMjZpdCk7XFxuK1xcdGJwZl9pdGVyX3Rhc2tfZGVzdHJveShcXHUwMDI2aXQpO1xcbitcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCI/ZmVudHJ5LnMvXFxcIiBTWVNfUFJFRklYIFxcXCJzeXNfZ2V0cGdpZFxcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiZXhwZWN0ZWQgYW4gUkNVIENTIHdoZW4gdXNpbmcgYnBmX2l0ZXJfY3NzX25leHRcXFwiKVxcbiBpbnQgQlBGX1BST0coaXRlcl9jc3NfbG9ja19hbmRfdW5sb2NrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMzo1Njo1Ny41MDEwOTIxNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0Njg5NTE1OTM3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJicGZfaXNfc3RhdGVfdmlzaXRlZFwiLFxuICAgIFwiYnBmX2l0ZXJfdGFza19uZXdcIixcbiAgICBcImJwZl9pdGVyX3Rhc2tfbmV4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyB0eXBlIGNoZWNrIGluIHRoZSBCUEYgdmVyaWZpZXIncyBgc3RhY2tzYWZlKClgIGZ1bmN0aW9uIGZvciBgU1RBQ0tfSVRFUmAgc2xvdHMuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIHZlcmlmaWVyIGNvdWxkIGluY29ycmVjdGx5IGNvbnNpZGVyIHR3byBpdGVyYXRvciBzdGF0ZXMgYXMgZXF1aXZhbGVudCBldmVuIGlmIHRoZWlyIHJlZ2lzdGVyIHR5cGVzIGRpZmZlcmVkIChlLmcuLCBvbmUgYmVpbmcgUkNVLXByb3RlY3RlZCBhbmQgdGhlIG90aGVyIGJlaW5nIHVudHJ1c3RlZCBhZnRlciBhbiBSQ1UgdW5sb2NrKS4gVGhpcyBjb3VsZCBsZWFkIHRvIHRoZSB2ZXJpZmllciBhY2NlcHRpbmcgdW5zYWZlIHByb2dyYW1zIHRoYXQgYWNjZXNzIGl0ZXJhdG9ycyBvdXRzaWRlIG9mIFJDVSBjcml0aWNhbCBzZWN0aW9ucy4gVGhlIGZpeCBpcyBmdW5jdGlvbmFsIGFuZCBhZmZlY3RzIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzUzMjkxMzQ5YmU4ZmY5YWExZTM4NzAwNmY0NGJkNDM3MzEyNmU0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDM6NTY6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N0YXRlcy5jIGIva2VybmVsL2JwZi9zdGF0ZXMuY1xuaW5kZXggZWEyMTUzY2YyOGQwYS4uNGU2YWFmYWQzM2JkMiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3RhdGVzLmNcbisrKyBiL2tlcm5lbC9icGYvc3RhdGVzLmNcbkBAIC04MTIsNyArODEyLDggQEAgc3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxuIFx0XHRcdCAqIGluZmluaXRlIGxvb3AgY2hlY2sgdHJpZ2dlcmluZywgc2VlXG4gXHRcdFx0ICogaXRlcl9hY3RpdmVfZGVwdGhzX2RpZmZlcigpXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZiB8fFxuK1x0XHRcdGlmIChvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlIHx8XG4rXHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZiB8fFxuIFx0XHRcdCAgICBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmX2lkICE9IGN1cl9yZWctXHUwMDNlaXRlci5idGZfaWQgfHxcbiBcdFx0XHQgICAgb2xkX3JlZy1cdTAwM2VpdGVyLnN0YXRlICE9IGN1cl9yZWctXHUwMDNlaXRlci5zdGF0ZSB8fFxuIFx0XHRcdCAgICAvKiBpZ25vcmUge29sZF9yZWcsY3VyX3JlZ30tXHUwMDNlaXRlci5kZXB0aCwgc2VlIGFib3ZlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXG5pbmRleCBmZTM2NjNkZWRiZTE0Li5iYWMzOTRhZTc3ZjQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzX3Rhc2tfZmFpbHVyZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmNcbkBAIC02MSw2ICs2MSwzMyBAQCBpbnQgQlBGX1BST0coaXRlcl90YXNrc19sb2NrX2FuZF91bmxvY2spXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwiP2ZlbnRyeS5zL1wiIFNZU19QUkVGSVggXCJzeXNfZ2V0cGdpZFwiKVxuK19fZmFpbHVyZSBfX21zZyhcImV4cGVjdGVkIGFuIFJDVSBDUyB3aGVuIHVzaW5nIGJwZl9pdGVyX3Rhc2tfbmV4dFwiKVxuK19fZmxhZyhCUEZfRl9URVNUX1NUQVRFX0ZSRVEpXG4raW50IEJQRl9QUk9HKGl0ZXJfdGFza3NfcmN1X3N0YXRlX3BydW5pbmcpXG4re1xuK1x0c3RydWN0IGJwZl9pdGVyX3Rhc2sgaXQ7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0YnBmX2l0ZXJfdGFza19uZXcoXHUwMDI2aXQsIE5VTEwsIEJQRl9UQVNLX0lURVJfQUxMX1BST0NTKTtcbitcbitcdGlmIChsaWtlbHkoYnBmX2dldF9wcmFuZG9tX3UzMigpKSkge1xuK1x0XHQvKiBLZWVwIHRoZSBvdXRlciBSQ1UgbG9jayBhY3RpdmUuICovXG4rXHRcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIENyZWF0ZSBhbiB1bnByb3RlY3RlZCBnYXAuICovXG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdH1cbitcbitcdGJwZl9pdGVyX3Rhc2tfbmV4dChcdTAwMjZpdCk7XG4rXHRicGZfaXRlcl90YXNrX2Rlc3Ryb3koXHUwMDI2aXQpO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcIj9mZW50cnkucy9cIiBTWVNfUFJFRklYIFwic3lzX2dldHBnaWRcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJleHBlY3RlZCBhbiBSQ1UgQ1Mgd2hlbiB1c2luZyBicGZfaXRlcl9jc3NfbmV4dFwiKVxuIGludCBCUEZfUFJPRyhpdGVyX2Nzc19sb2NrX2FuZF91bmxvY2spXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMzo1Njo1Ny41MDEwOTMyMjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTU4NzY3Njk4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBoaXR0aW5nIGBrZXJuZWwvYnBmL3N0YXRlcy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc3RhY2tzYWZlKClgIGZ1bmN0aW9uLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGEgY2hhbmdlIHRvIGhvdyB0aGUgQlBGIHZlcmlmaWVyIGhhbmRsZXMgcmVnaXN0ZXIgdHlwZXMgd2hlbiBkZWFsaW5nIHdpdGggaXRlcmF0b3JzLiBJIHNlZSB0aGV5J3ZlIGFkZGVkIGEgY2hlY2sgZm9yIHJlZ2lzdGVyIHR5cGUgZXF1YWxpdHkgKGBvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlYCkuIFByZXZpb3VzbHksIGl0IGxvb2tzIGxpa2UgdGhlIGNvbXBhcmlzb24gd2FzIHNvbGVseSBiYXNlZCBvbiB0aGUgYGJ0ZmAgZmllbGQgb2YgdGhlIGl0ZXJhdG9yLlxuXG5UaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgZnVuY3Rpb25hbGx5IGZvY3VzZWQgY2hhbmdlIHRvIHRoZSBCUEYgdmVyaWZpZXIuIFRoaXMgc2VlbXMgcmVsYXRlZCB0byBpbXByb3ZpbmcgdGhlIEJQRiB2ZXJpZmllci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgdHlwZSBjaGVjayBpcyBiZWluZyBhZGRlZC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gYGtlcm5lbC9icGYvc3RhdGVzLmNgIGFuZCBnZXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgZm9yIGBzdGFja3NhZmUoKWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG9sZF9yZWdgIGFuZCBgY3VyX3JlZ2AgcmVwcmVzZW50LCB3aGF0IHNpdHVhdGlvbnMgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBnb2FsIG9mIGBzdGFja3NhZmUoKWAgaXMgd2l0aGluIHRoZSB2ZXJpZmllcidzIGxvZ2ljLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZ3Jhc3Agb24gdGhlIGludGVudCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gVGhlIHRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVyc190YXNrX2ZhaWx1cmUuY2Agd2lsbCBiZSBpbXBvcnRhbnQgdG8gY2hlY2sgaWYgaXQgY292ZXJzIGEgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDA6MTMuMzc3ODY1NTk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjExNzMxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGFja3NhZmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTY5MD1zdGF0aWMgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnNjYWxhcl9yZWdfZm9yX3N0YWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTcwMS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjcwMjpzdGF0aWMgYm9vbCBzdGFja3NhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy03MDMtXFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHN0cnVjdCBicGZfaWRtYXAgKmlkbWFwLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz05NDU9c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk2Mi1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk2MzpcXHRpZiAoIXN0YWNrc2FmZShlbnYsIG9sZCwgY3VyLCBcXHUwMDI2ZW52LVxcdTAwM2VpZG1hcF9zY3JhdGNoLCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NjQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMDoxMy44NDM5ODc4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTAxOTUzNTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBCUEYgVmVyaWZpZXIncyBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc3RhY2tzYWZlYC4gVGhpcyBgc3RhY2tzYWZlYCBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIGBrZXJuZWwvYnBmL3N0YXRlcy5jYC4gVGhhdCdzIGltcG9ydGFudC4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBsb2NhbGl6ZWQgd2l0aGluIHRoYXQgZmlsZS4gVGhlIGNhbGwgY2hhaW4gaXMgd2hhdCdzIGtleSBoZXJlOiBgc3RhY2tzYWZlYCBpcyAqY2FsbGVkIGJ5KiBgZnVuY19zdGF0ZXNfZXF1YWxgLCBhbmQgYGZ1bmNfc3RhdGVzX2VxdWFsYCBpcyAqY2FsbGVkIGJ5KiBgc3RhdGVzX2VxdWFsYC4gVGhpcyBzdWdnZXN0cyBhIGNsZWFyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IGFyb3VuZCBzdGF0ZSBjb21wYXJpc29uIHdpdGhpbiB0aGUgQlBGIHZlcmlmaWVyLiBgc3RhdGVzX2VxdWFsYCBpcyB0aGUgbmF0dXJhbCBmb2NhbCBwb2ludCBmb3IgaW52ZXN0aWdhdGluZyB0aGUgd2lkZXIgaW1wbGljYXRpb25zIGFuZCBpbnRlcmFjdGlvbnMuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBhbmQgbG9jYXRlIHRoZSAqZW50cnkgcG9pbnRzKiB0byB0aGlzIHdob2xlIEJQRiB2ZXJpZmllciBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgZXhlY3V0aW9uIGZsb3dzIGluIGZyb20uIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbHMgdG8gYHN0YXRlc19lcXVhbGAgaXRzZWxmLCBhbmQgZnJvbSAqdGhvc2UqLCBJJ2xsIGJlIGFibGUgdG8gdHJhY2UgYmFjayB0byB0aGUgaW5pdGlhdGluZyBjb250ZXh0cy4gVGhpcyBpcyBteSBrZXkgdG8gdW5sb2NraW5nIHRoZSB2ZXJpZmljYXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM4OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAxOjU4Ljg2MzUyNzY0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA5MTEyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnVuY19zdGF0ZXNfZXF1YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jPTg2OT1zdGF0aWMgYm9vbCByZWZzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCwgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqY3VyLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDQtICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5NDU6c3RhdGljIGJvb2wgZnVuY19zdGF0ZXNfZXF1YWwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpvbGQsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NDYtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9mdW5jX3N0YXRlICpjdXIsIHUzMiBpbnNuX2lkeCwgZW51bSBleGFjdF9sZXZlbCBleGFjdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9OTgwPXN0YXRpYyBib29sIHN0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDExLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEwMTI6XFx0XFx0aWYgKCFmdW5jX3N0YXRlc19lcXVhbChlbnYsIG9sZC1cXHUwMDNlZnJhbWVbaV0sIGN1ci1cXHUwMDNlZnJhbWVbaV0sIGluc25faWR4LCBleGFjdCkpXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMDEzLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDE6NTkuMzA0NDQ3NDQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxMTg4NTk4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbCBpbiB0aGUgZmllbGQsIHNwZWFraW5nIGRpcmVjdGx5IHRvIGFub3RoZXIgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBzdGF0ZXNfZXF1YWxgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gYHN0YXRlc19lcXVhbGAgaXMgcG9wcGluZyB1cCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gTXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyBhbnl0aW1lIEkgc2VlIHRoYXQgZnVuY3Rpb24gbmFtZSwgaXQncyBhYm91dCBjb21wYXJpbmcgQlBGIHByb2dyYW0gc3RhdGVzLCBhbmQgdGhhdCdzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgdmVyaWZpY2F0aW9uIHB1enpsZS4gTGV0J3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGVyZSBpdCdzIGJlaW5nIGludm9rZWQuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggaXQncyBiZWluZyB1c2VkIHRvIGVuc3VyZSBwcm9ncmFtIGNvcnJlY3RuZXNzLiBJIHdhbnQgdG8gc2VlIGlmIGl0J3MgZW1wbG95ZWQgd2hlcmUgSSdkIGV4cGVjdDogaW4ganVtcC9icmFuY2ggYW5hbHlzaXMsIGxvb3AgdW5yb2xsaW5nLCBvciBzdGF0ZSBtZXJnaW5nLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGVtcGxveWVkIGluIGEgcGFydGljdWxhcmx5IHBlcmZvcm1hbnQgbWFubmVyLCBvciBpZiB0aGVyZSdzIGEgcG9zc2libGUgZWZmaWNpZW5jeSBpc3N1ZS4gSSBhbHNvIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFyZWEgSSB3b3VsZCBoYXZlIGVtcGxveWVkIGl0IGluc3RlYWQsIGFuZCBmb3IgYSBkaWZmZXJlbnQgcHVycG9zZS4gV2l0aCBteSBiYWNrZ3JvdW5kLCBJIGNhbiBwcmVkaWN0IGl0cyB1c2UsIGFuZCBzaG91bGQgdmVyaWZ5IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGVtcGxveWVkIGFzIGl0IG91Z2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTkzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDI6MTYuNDIzMzEwMDU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzEyNDY4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0ZXNfZXF1YWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMjoxNi40OTEwMjg4ODNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAxNjAwNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBzdGF0ZXNfZXF1YWxgLiBNeSBndXQgc2F5cyBpdCdzIGxpa2VseSBuZXN0bGVkIHdpdGhpbiB0aGUgYGtlcm5lbC9icGYvc3RhdGVzLmNgIGZpbGUgc2luY2UgaXQgc291bmRzIGxpa2UgYSBmdW5jdGlvbiBkZWFsaW5nIHdpdGggdGhlIGludGVybmFsIHN0YXRlIHJlcHJlc2VudGF0aW9uLiBIb3dldmVyLCBpdCdzIGFsc28gcXVpdGUgcG9zc2libGUgaXQncyBjYWxsZWQgZnJvbSBzb21ld2hlcmUgbGlrZSBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSG1tbSwgaXMgaXQgcG9zc2libGUgdGhpcyBpcyBhIHNoYXJlZCBmdW5jdGlvbj8gTWF5YmUgaXQncyBkZWZpbmVkIGFuZCBleHBvcnRlZCwgb3IgcGVyaGFwcyBpdCdzIGluIGEgcmVsZXZhbnQgaGVhZGVyIGZpbGUuIFJhdGhlciB0aGFuIGNoYXNpbmcgZG93biBhIGdvb3NlLCBJIHNob3VsZCBmaXJzdCBkaXJlY3RseSB2ZXJpZnkgaXQncyBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIEJlc3QgdG8gc3RhcnQgdGhlcmUgYW5kIGJlIHN1cmUuIExldCBtZSBnbyB0YWtlIGEgbG9vayBpbiB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMjoyMC4xOTI2MzEzMDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjIwNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRlc19lcXVhbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9ODY5PXN0YXRpYyBib29sIHJlZnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0NC0gKi9cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjk0NTpzdGF0aWMgYm9vbCBmdW5jX3N0YXRlc19lcXVhbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKm9sZCxcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTk0Ni1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1ciwgdTMyIGluc25faWR4LCBlbnVtIGV4YWN0X2xldmVsIGV4YWN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz05NzI9c3RhdGljIHZvaWQgcmVzZXRfaWRtYXBfc2NyYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05NzktXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo5ODA6c3RhdGljIGJvb2wgc3RhdGVzX2VxdWFsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9zdGF0ZXMuYy05ODEtXFx0XFx0XFx0IHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCxcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxMS1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxMDEyOlxcdFxcdGlmICghZnVuY19zdGF0ZXNfZXF1YWwoZW52LCBvbGQtXFx1MDAzZWZyYW1lW2ldLCBjdXItXFx1MDAzZWZyYW1lW2ldLCBpbnNuX2lkeCwgZXhhY3QpKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTAxMy1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jPTEyMzk9aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMzMi1cXHRcXHRcXHRpZiAoaXNfaXRlcl9uZXh0X2luc24oZW52LCBpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzMzM6XFx0XFx0XFx0XFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTMzNC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKmN1cl9mcmFtZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM0Mi1cXHRcXHRcXHRcXHRcXHRpdGVyX3JlZyA9IFxcdTAwMjZjdXJfZnJhbWUtXFx1MDAzZXJlZ3NbQlBGX1JFR18xXTtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNDM6XFx0XFx0XFx0XFx0XFx0LyogY3VycmVudCBzdGF0ZSBpcyB2YWxpZCBkdWUgdG8gc3RhdGVzX2VxdWFsKCksXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzQ0LVxcdFxcdFxcdFxcdFxcdCAqIHNvIHdlIGNhbiBhc3N1bWUgdmFsaWQgaXRlciBhbmQgcmVnIHN0YXRlLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU3LVxcdFxcdFxcdFxcdGlmIChzbC1cXHUwMDNlc3RhdGUubWF5X2dvdG9fZGVwdGggIT0gY3VyLVxcdTAwM2VtYXlfZ290b19kZXB0aCBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM1ODpcXHRcXHRcXHRcXHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBSQU5HRV9XSVRISU4pKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzU5LVxcdFxcdFxcdFxcdFxcdGxvb3AgPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMzYzLVxcdFxcdFxcdGlmIChicGZfY2FsbHNfY2FsbGJhY2soZW52LCBpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEzNjQ6XFx0XFx0XFx0XFx0aWYgKHN0YXRlc19lcXVhbChlbnYsIFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1ciwgUkFOR0VfV0lUSElOKSkge1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM2NS1cXHRcXHRcXHRcXHRcXHRsb29wID0gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTM3MS1cXHRcXHRcXHRpZiAoc3RhdGVzX21heWJlX2xvb3BpbmcoXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTM3MjpcXHRcXHRcXHQgICAgc3RhdGVzX2VxdWFsKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSwgY3VyLCBFWEFDVCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEzNzMtXFx0XFx0XFx0ICAgICFpdGVyX2FjdGl2ZV9kZXB0aHNfZGlmZmVyKFxcdTAwMjZzbC1cXHUwMDNlc3RhdGUsIGN1cikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQwNC1cXHRcXHRsb29wID0gaW5jb21wbGV0ZV9yZWFkX21hcmtzKGVudiwgXFx1MDAyNnNsLVxcdTAwM2VzdGF0ZSk7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzoxNDA1OlxcdFxcdGlmIChzdGF0ZXNfZXF1YWwoZW52LCBcXHUwMDI2c2wtXFx1MDAzZXN0YXRlLCBjdXIsIGxvb3AgPyBSQU5HRV9XSVRISU4gOiBOT1RfRVhBQ1QpKSB7XFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDA2LWhpdDpcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTQ0NC1cXHRcXHRcXHQgKlxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTQ0NTpcXHRcXHRcXHQgKiAtIFdoZW4gYSB2ZXJpZmljYXRpb24gcGF0aCBlbmNvdW50ZXJzIGEgYHN0YXRlc19lcXVhbCguLi4sXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xNDQ2LVxcdFxcdFxcdCAqICAgUkFOR0VfV0lUSElOKWAgY29uZGl0aW9uLCB0aGVyZSBleGlzdHMgYSBjYWxsIGNoYWluIGRlc2NyaWJpbmcgdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAyOjIwLjI4MTg1ODU2M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU5ODE1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyYWNpbmcgdGhlIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgQ2FsbHMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgd2UgZGV0ZXJtaW5lIGlmIGEgQlBGIHN0YXRlIGhhcyBiZWVuIHZpc2l0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBnYXRld2F5IHRvIGNvbXBhcmluZyBzdGF0ZXMgdXNpbmcgYHN0YXRlc19lcXVhbGAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIHN5c3RlbSdzIGxvZ2ljIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBvZiBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBpbnNpZ2h0cyBpbnRvIHRoZSBleGVjdXRpb24gcGF0aHMgd2hlcmUgc3RhdGUgY29tcGFyaXNvbnMgYXJlIGNlbnRyYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1OTcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMjoyNC43NDE2ODM1NjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMTgwNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9MTIxND1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIzOC1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzk6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyNDAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NDU2PXN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzQ5My1cXHRcXHRpZiAoYnBmX2lzX3BydW5lX3BvaW50KGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc0OTQ6XFx0XFx0XFx0ZXJyID0gYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoZW52LCBlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0OTUtXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAyOjI0LjgwMzg2ODY4MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDkzMDEzNDgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgZG9fY2hlY2tgIGZ1bmN0aW9uIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQncyB0aGUgY29yZSBvZiB0aGUgQlBGIHZlcmlmaWVyLCBjYWxsZWQgdGhyb3VnaCB0aGUgYGJwZl9jaGVja2AgZnVuY3Rpb24sIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgd2hvbGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyB0aGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBgYnBmX2NoZWNrYCBpdHNlbGYgZ2V0cyBjYWxsZWQgYnkgYGJwZl9wcm9nX2xvYWRgLCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kIGFzIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50IGZvciB0ZXN0aW5nLlxuXG5Ob3csIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCB0ZXN0cy4gQWgsIGhlcmUncyBvbmU6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnNfdGFza19mYWlsdXJlLmNgLiBUaGlzIGlzIHJlbGF0ZWQgdG8gYGJwZl9pdGVyX3Rhc2tfbmV4dGAsIGdvb2QuXG5cblRoZSBjb2RlIGZpeCByZWZlcmVuY2VzIGEgYHN0YWNrc2FmZWAgaXNzdWUuIFRoZSBjb21taXQgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG4tXHRcdFx0aWYgKG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZiB8fFxuK1x0XHRcdGlmIChvbGRfcmVnLVx1MDAzZXR5cGUgIT0gY3VyX3JlZy1cdTAwM2V0eXBlIHx8XG4rXHRcdFx0ICAgIG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZiB8fFxuYGBgXG5cblJpZ2h0LCBpdCdzIGEgYnVnIGZpeC4gTG9va3MgbGlrZSB3ZSB3ZXJlIG1pc3NpbmcgYSBjaGVjayBvbiBgb2xkX3JlZy1cdTAwM2V0eXBlYCBiZWZvcmUgYWNjZXNzaW5nIGBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmYC4gVGhpcyBpbXBsaWVzIGBvbGRfcmVnLVx1MDAzZWl0ZXIuYnRmYCBpcyBwYXJ0IG9mIHNvbWUga2luZCBvZiB1bmlvbiBvciBzdHJ1Y3QsIG9yIGEgZmllbGQgb2YgYSBkaWZmZXJlbnQgdHlwZS4gSSBuZWVkIHRvIGtub3cgaG93IHRoZXNlIHJlZ2lzdGVycyBhcmUgZGVmaW5lZC4gSSBzaG91bGQgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBicGZfcmVnX3N0YXRlYC4gSSBjYW4ndCBiZSBzdXJlIHRoZSBgaXRlci5idGZgIGZpZWxkIGlzIG9ubHkgdXNlZCBpZiBgdHlwZWAgc2F5cyBpdCBpcywgc28gY2hlY2tpbmcgdGhhdCBgdHlwZWAgaXMgY29ycmVjdCBpcyBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDI6NTkuNzM0MDA5NDY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM0Nzg3MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGJwZl9yZWdfc3RhdGUgXFxcXHtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTMyPWVudW0gYnBmX2l0ZXJfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0zNy1cXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oOjM4OnN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTM5LVxcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjAwLjE4NzQ5NDUzMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTM5NjM1NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYHN0cnVjdCBicGZfcmVnX3N0YXRlYCwgcmVmbGVjdGluZyBhIHNlYXNvbmVkIHVuZGVyc3RhbmRpbmc6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBSZWdpc3RlciBTdGF0ZSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoZSBgc3RydWN0IGJwZl9yZWdfc3RhdGVgLiBJIG5lZWQgdG8gcmVhbGx5IGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiBhIEJQRiByZWdpc3Rlci4gSSBrbm93LCBmcm9tIGV4cGVyaWVuY2UsIHRoaXMgaXMgdGhlIGNydXggb2YgdW5kZXJzdGFuZGluZyBwcm9ncmFtIGFuYWx5c2lzIGFuZCB2ZXJpZmljYXRpb24sIGFuZCBob3cgdGhlIHZlcmlmaWVyIGVuc3VyZXMgbWVtb3J5IHNhZmV0eSBhbmQgY29ycmVjdCBleGVjdXRpb24uXG5cbkkgZXhwZWN0IHRvIHNlZSBmaWVsZHMgdGhhdCBpbmRpY2F0ZSB0aGUgcG9zc2libGUgdmFsdWVzIHdpdGhpbiBhIHJlZ2lzdGVyOiBpcyBpdCBhIGNvbnN0YW50PyBJZiBzbywgd2hhdCBpcyBpdHMgdmFsdWU/IERvZXMgaXQgaG9sZCB0aGUgYWRkcmVzcyBvZiBhIGtlcm5lbCBkYXRhIHN0cnVjdHVyZSwgYW5kIGlmIHNvLCB3aGljaCBvbmU/IElzIGl0IGEgcG9pbnRlciB0byB1c2VyIG1lbW9yeT8gSWYgc28sIGFyZSB0aGVyZSBhbnkga25vd24gYm91bmRzIG9yIG9mZnNldHM/IEknbSBhbnRpY2lwYXRpbmcgZWxlbWVudHMgdG8gZGVzY3JpYmUgcmFuZ2VzIGFuZCBjb25zdHJhaW50cyDigJMgdGhpbmdzIGxpa2UgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMsIHdoZXRoZXIgdGhlIHJlZ2lzdGVyIGhvbGRzIGEgdmFsaWQgcG9pbnRlciBvciBhIHNjYWxhciwgbWF5YmUgZXZlbiBhIGZsYWcgdG8gc2hvdyBpZiB0aGUgcmVnaXN0ZXIgY29udGVudCBjYW4gYmUgZGVyaXZlZCBmcm9tIG90aGVyIHJlZ2lzdGVycy5cblxuSeKAmW0gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHN5bWJvbGljIHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQuIEFyZSB0aGV5IGNvbmNyZXRlLCBvciBpcyB0aGlzIGFuIGFic3RyYWN0IGludGVycHJldGF0aW9uPyBJcyB0aGVyZSBhIG5vdGlvbiBvZiBcInRhaW50aW5nXCIgb3IgXCJkZXBlbmRlbmN5XCIgdHJhY2tlZCwgbWVhbmluZyB3aGljaCBwcmlvciBpbnN0cnVjdGlvbihzKSBoYXZlIGluZmx1ZW5jZWQgd2hhdCBpcyBwcmVzZW50IGluIGEgcmVnaXN0ZXI/IEknbSBob3BpbmcgdG8gc2VlIGEgc29waGlzdGljYXRlZCBlbmNvZGluZyBvZiB0aGVzZSByZWxhdGlvbnNoaXBzLCBtYXliZSBldmVuIHRyYWNraW5nIGhvdyB0aGUgdmVyaWZpZXIgKmluZmVycyogbmV3IGluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyIGNvbnRlbnRzIHRocm91Z2ggYnJhbmNoIGFuYWx5c2lzIGFuZCBsb29wIHVucm9sbGluZy5cblxuVWx0aW1hdGVseSwgSSdtIGxvb2tpbmcgZm9yIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBlbmNhcHN1bGF0ZXMgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gbW9kZWwgcmVnaXN0ZXIgdmFsdWVzIGFjcm9zcyBhbGwgcG9zc2libGUgZXhlY3V0aW9uIHBhdGhzLiBUaGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNvcGhpc3RpY2F0ZWQgdGVjaG5pcXVlcyB0aGF0IHRoZSBCUEYgdmVyaWZpZXIgZW1wbG95cyB0byBhY2hpZXZlIGl0cyBjb3JlIG1lbW9yeSBzYWZldHkgYW5kIHZhbGlkYXRpb24gZ29hbHMuIExldCdzIHNlZSBob3cgdGhleSd2ZSBkb25lIGl0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4ODIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMzowNy4xMjcxMzI4NDFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzgsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM4OlxcdHN0cnVjdCBicGZfcmVnX3N0YXRlIHtcXG4gIDM5OlxcdFxcdC8qIE9yZGVyaW5nIG9mIGZpZWxkcyBtYXR0ZXJzLiAgU2VlIHN0YXRlc19lcXVhbCgpICovXFxuICA0MDpcXHRcXHRlbnVtIGJwZl9yZWdfdHlwZSB0eXBlO1xcbiAgNDE6XFx0XFx0LypcXG4gIDQyOlxcdFxcdCAqIENvbnN0YW50IGRlbHRhIGJldHdlZW4gXFxcImxpbmtlZFxcXCIgc2NhbGFycyB3aXRoIHRoZSBzYW1lIElELlxcbiAgNDM6XFx0XFx0ICovXFxuICA0NDpcXHRcXHRzMzIgZGVsdGE7XFxuICA0NTpcXHRcXHR1bmlvbiB7XFxuICA0NjpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gUFRSX1RPX1BBQ0tFVCAqL1xcbiAgNDc6XFx0XFx0XFx0aW50IHJhbmdlO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRcXHQvKiB2YWxpZCB3aGVuIHR5cGUgPT0gQ09OU1RfUFRSX1RPX01BUCB8IFBUUl9UT19NQVBfVkFMVUUgfFxcbiAgNTA6XFx0XFx0XFx0ICogICBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTExcXG4gIDUxOlxcdFxcdFxcdCAqL1xcbiAgNTI6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDUzOlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICptYXBfcHRyO1xcbiAgNTQ6XFx0XFx0XFx0XFx0LyogVG8gZGlzdGluZ3Vpc2ggbWFwIGxvb2t1cHMgZnJvbSBvdXRlciBtYXBcXG4gIDU1OlxcdFxcdFxcdFxcdCAqIHRoZSBtYXBfdWlkIGlzIG5vbi16ZXJvIGZvciByZWdpc3RlcnNcXG4gIDU2OlxcdFxcdFxcdFxcdCAqIHBvaW50aW5nIHRvIGlubmVyIG1hcHMuXFxuICA1NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDU4OlxcdFxcdFxcdFxcdHUzMiBtYXBfdWlkO1xcbiAgNTk6XFx0XFx0XFx0fTtcXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0XFx0LyogZm9yIFBUUl9UT19CVEZfSUQgKi9cXG4gIDYyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA2MzpcXHRcXHRcXHRcXHRzdHJ1Y3QgYnRmICpidGY7XFxuICA2NDpcXHRcXHRcXHRcXHR1MzIgYnRmX2lkO1xcbiAgNjU6XFx0XFx0XFx0fTtcXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0XFx0c3RydWN0IHsgLyogZm9yIFBUUl9UT19NRU0gfCBQVFJfVE9fTUVNX09SX05VTEwgKi9cXG4gIDY4OlxcdFxcdFxcdFxcdHUzMiBtZW1fc2l6ZTtcXG4gIDY5OlxcdFxcdFxcdH07XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdC8qIEZvciBkeW5wdHIgc3RhY2sgc2xvdHMgKi9cXG4gIDcyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA3MzpcXHRcXHRcXHRcXHRlbnVtIGJwZl9keW5wdHJfdHlwZSB0eXBlO1xcbiAgNzQ6XFx0XFx0XFx0XFx0LyogQSBkeW5wdHIgaXMgMTYgYnl0ZXMgc28gaXQgdGFrZXMgdXAgMiBzdGFjayBzbG90cy5cXG4gIDc1OlxcdFxcdFxcdFxcdCAqIFdlIG5lZWQgdG8gdHJhY2sgd2hpY2ggc2xvdCBpcyB0aGUgZmlyc3Qgc2xvdFxcbiAgNzY6XFx0XFx0XFx0XFx0ICogdG8gcHJvdGVjdCBhZ2FpbnN0IGNhc2VzIHdoZXJlIHRoZSB1c2VyIG1heSB0cnkgdG9cXG4gIDc3OlxcdFxcdFxcdFxcdCAqIHBhc3MgaW4gYW4gYWRkcmVzcyBzdGFydGluZyBhdCB0aGUgc2Vjb25kIHNsb3Qgb2YgdGhlXFxuICA3ODpcXHRcXHRcXHRcXHQgKiBkeW5wdHIuXFxuICA3OTpcXHRcXHRcXHRcXHQgKi9cXG4gIDgwOlxcdFxcdFxcdFxcdGJvb2wgZmlyc3Rfc2xvdDtcXG4gIDgxOlxcdFxcdFxcdH0gZHlucHRyO1xcbiAgODI6XFx0XFxuICA4MzpcXHRcXHRcXHQvKiBGb3IgYnBmX2l0ZXIgc3RhY2sgc2xvdHMgKi9cXG4gIDg0OlxcdFxcdFxcdHN0cnVjdCB7XFxuICA4NTpcXHRcXHRcXHRcXHQvKiBCVEYgY29udGFpbmVyIGFuZCBCVEYgdHlwZSBJRCBkZXNjcmliaW5nXFxuICA4NjpcXHRcXHRcXHRcXHQgKiBzdHJ1Y3QgYnBmX2l0ZXJfXFx1MDAzY3R5cGVcXHUwMDNlIG9mIGFuIGl0ZXJhdG9yIHN0YXRlXFxuICA4NzpcXHRcXHRcXHRcXHQgKi9cXG4gIDg4OlxcdFxcdFxcdFxcdHN0cnVjdCBidGYgKmJ0ZjtcXG4gIDg5OlxcdFxcdFxcdFxcdHUzMiBidGZfaWQ7XFxuICA5MDpcXHRcXHRcXHRcXHQvKiBwYWNraW5nIGZvbGxvd2luZyB0d28gZmllbGRzIHRvIGZpdCBpdGVyIHN0YXRlIGludG8gMTYgYnl0ZXMgKi9cXG4gIDkxOlxcdFxcdFxcdFxcdGVudW0gYnBmX2l0ZXJfc3RhdGUgc3RhdGU6MjtcXG4gIDkyOlxcdFxcdFxcdFxcdGludCBkZXB0aDozMDtcXG4gIDkzOlxcdFxcdFxcdH0gaXRlcjtcXG4gIDk0OlxcdFxcbiAgOTU6XFx0XFx0XFx0LyogRm9yIGlycSBzdGFjayBzbG90cyAqL1xcbiAgOTY6XFx0XFx0XFx0c3RydWN0IHtcXG4gIDk3OlxcdFxcdFxcdFxcdGVudW0ge1xcbiAgOTg6XFx0XFx0XFx0XFx0XFx0SVJRX05BVElWRV9LRlVOQyxcXG4gIDk5OlxcdFxcdFxcdFxcdFxcdElSUV9MT0NLX0tGVU5DLFxcbiAxMDA6XFx0XFx0XFx0XFx0fSBrZnVuY19jbGFzcztcXG4gMTAxOlxcdFxcdFxcdH0gaXJxO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRcXHQvKiBNYXggc2l6ZSBmcm9tIGFueSBvZiB0aGUgYWJvdmUuICovXFxuIDEwNDpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAxMDU6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcxO1xcbiAxMDY6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyByYXcyO1xcbiAxMDc6XFx0XFx0XFx0fSByYXc7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdFxcdHUzMiBzdWJwcm9nbm87IC8qIGZvciBQVFJfVE9fRlVOQyAqL1xcbiAxMTA6XFx0XFx0fTtcXG4gMTExOlxcdFxcdC8qIEZvciBzY2FsYXIgdHlwZXMgKFNDQUxBUl9WQUxVRSksIHRoaXMgcmVwcmVzZW50cyBvdXIga25vd2xlZGdlIG9mXFxuIDExMjpcXHRcXHQgKiB0aGUgYWN0dWFsIHZhbHVlLlxcbiAxMTM6XFx0XFx0ICogRm9yIHBvaW50ZXIgdHlwZXMsIHRoaXMgcmVwcmVzZW50cyB0aGUgdmFyaWFibGUgcGFydCBvZiB0aGUgb2Zmc2V0XFxuIDExNDpcXHRcXHQgKiBmcm9tIHRoZSBwb2ludGVkLXRvIG9iamVjdCwgYW5kIGlzIHNoYXJlZCB3aXRoIGFsbCBicGZfcmVnX3N0YXRlc1xcbiAxMTU6XFx0XFx0ICogd2l0aCB0aGUgc2FtZSBpZCBhcyB1cy5cXG4gMTE2OlxcdFxcdCAqL1xcbiAxMTc6XFx0XFx0c3RydWN0IHRudW0gdmFyX29mZjtcXG4gMTE4OlxcdFxcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBtZW1vcnkgYWNjZXNzIHVzaW5nIHRoaXMgcmVnaXN0ZXIgd2lsbFxcbiAxMTk6XFx0XFx0ICogcmVzdWx0IGluIGEgYmFkIGFjY2Vzcy5cXG4gMTIwOlxcdFxcdCAqIFRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHZhbHVlIGFzIHZhcl9vZmYsIG5vdCBuZWNlc3NhcmlseSB0aGUgYWN0dWFsXFxuIDEyMTpcXHRcXHQgKiBjb250ZW50cyBvZiB0aGUgcmVnaXN0ZXIuXFxuIDEyMjpcXHRcXHQgKi9cXG4gMTIzOlxcdFxcdHN0cnVjdCBjbnVtNjQgcjY0OyAvKiA2NC1iaXQgcmFuZ2UgYXMgY2lyY3VsYXIgbnVtYmVyICovXFxuIDEyNDpcXHRcXHRzdHJ1Y3QgY251bTMyIHIzMjsgLyogMzItYml0IHJhbmdlIGFzIGNpcmN1bGFyIG51bWJlciAqL1xcbiAxMjU6XFx0XFx0LyogRm9yIFBUUl9UT19QQUNLRVQsIHVzZWQgdG8gZmluZCBvdGhlciBwb2ludGVycyB3aXRoIHRoZSBzYW1lIHZhcmlhYmxlXFxuIDEyNjpcXHRcXHQgKiBvZmZzZXQsIHNvIHRoZXkgY2FuIHNoYXJlIHJhbmdlIGtub3dsZWRnZS5cXG4gMTI3OlxcdFxcdCAqIEZvciBQVFJfVE9fTUFQX1ZBTFVFX09SX05VTEwgdGhpcyBpcyB1c2VkIHRvIHNoYXJlIHdoaWNoIG1hcCB2YWx1ZSB3ZVxcbiAxMjg6XFx0XFx0ICogY2FtZSBmcm9tLCB3aGVuIG9uZSBpcyB0ZXN0ZWQgZm9yICE9IE5VTEwuXFxuIDEyOTpcXHRcXHQgKiBGb3IgUFRSX1RPX01FTV9PUl9OVUxMIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBtZW1vcnkgYWxsb2NhdGlvblxcbiAxMzA6XFx0XFx0ICogZm9yIHRoZSBwdXJwb3NlIG9mIHRyYWNraW5nIHRoYXQgaXQncyBmcmVlZC5cXG4gMTMxOlxcdFxcdCAqIEZvciBQVFJfVE9fU09DS0VUIHRoaXMgaXMgdXNlZCB0byBzaGFyZSB3aGljaCBwb2ludGVycyByZXRhaW4gdGhlXFxuIDEzMjpcXHRcXHQgKiBzYW1lIHJlZmVyZW5jZSB0byB0aGUgc29ja2V0LCB0byBkZXRlcm1pbmUgcHJvcGVyIHJlZmVyZW5jZSBmcmVlaW5nLlxcbiAxMzM6XFx0XFx0ICogRm9yIHN0YWNrIHNsb3RzIHRoYXQgYXJlIGR5bnB0cnMsIHRoaXMgaXMgdXNlZCB0byB0cmFjayByZWZlcmVuY2VzIHRvXFxuIDEzNDpcXHRcXHQgKiB0aGUgZHlucHRyIHRvIGRldGVybWluZSBwcm9wZXIgcmVmZXJlbmNlIGZyZWVpbmcuXFxuIDEzNTpcXHRcXHQgKiBTaW1pbGFybHkgdG8gZHlucHRycywgd2UgdXNlIElEIHRvIHRyYWNrIFxcXCJiZWxvbmdpbmdcXFwiIG9mIGEgcmVmZXJlbmNlXFxuIDEzNjpcXHRcXHQgKiB0byBhIHNwZWNpZmljIGluc3RhbmNlIG9mIGJwZl9pdGVyLlxcbiAxMzc6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjA3LjEyNzM0NTQ5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNzU5MjMwMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRGF0YSBDb3JydXB0aW9uIHdpdGggSXRlcmF0b3IgQWNjZXNzKipcblxuQWxyaWdodCwgc28gYGl0ZXJgIGlzIGhhbmdpbmcgb2ZmIGEgdW5pb24sIEkgc2VlLiBNeSBjb25jZXJuIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHBvdGVudGlhbCB0eXBlIGNvbmZ1c2lvbi4gSWYgYG9sZF9yZWctXHUwMDNldHlwZWAgKmlzbid0KiB0aGUgZXhwZWN0ZWQgaXRlcmF0b3IgdHlwZSAobGlrZWx5IHNvbWV0aGluZyBsaWtlIGBQVFJfVE9fU1RBQ0tgLCB0aG91Z2ggSSBkb24ndCByZWNhbGwgdGhlIGV4YWN0IG5hbWUgb2ZmLWhhbmQpLCB0aGVuIHdlJ3JlIHBvdGVudGlhbGx5IHJlYWRpbmcgZ2FyYmFnZSBkYXRhLCBvciB3b3JzZSwgYWNjZXNzaW5nIGEgY29tcGxldGVseSB1bnJlbGF0ZWQgdW5pb24gbWVtYmVyIHdoZW4gd2UgdHJ5IHRvIGdyYWIgYG9sZF9yZWctXHUwMDNlaXRlci5idGZgLiBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIHVuZGVmaW5lZCBiZWhhdmlvciwgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIGV2ZW4gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGlmIHdlJ3JlIG5vdCBjYXJlZnVsLlxuXG5UaGVuIEkgcmVtZW1iZXJlZCB0aGF0IGl0ZXJhdG9ycyBhcmUgdHlwaWNhbGx5IHN0b3JlZCBpbiBzdGFjayBzbG90cy4gVGhpcyBtYWtlcyB0aGUgcG9zc2liaWxpdHkgb2YgcmVhZGluZyB0aGUgd3JvbmcgdW5pb24gbWVtYmVyIGV2ZW4gbW9yZSBsaWtlbHkgaWYgdGhlcmUncyBhbnkgdHlwZSBhbWJpZ3VpdHkuIEknZCBiZXR0ZXIgZG91YmxlIGNoZWNrIHRoZSBgc3RhY2tzYWZlYCBsb2dpYyBpbiBga2VybmVsL2JwZi9zdGF0ZXMuY2AuIEl0J3MgbGlrZWx5IHRoYXQgdGhlIGNvcmUgZGF0YSBpbnRlZ3JpdHkgaXNzdWUgaXMgYWRkcmVzc2VkIHRoZXJlLCBpZiBhbnl3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODczNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDM6MTguODg2NTc3NzE5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODc5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc5MDpcXHRcXHRcXHRcXHQgKiBzdWNoIHZlcmlmaWVyIHN0YXRlcyBhcmUgbm90IGVxdWl2YWxlbnQuXFxuIDc5MTpcXHRcXHRcXHRcXHQgKiByZXR1cm4gZmFsc2UgdG8gY29udGludWUgdmVyaWZpY2F0aW9uIG9mIHRoaXMgcGF0aFxcbiA3OTI6XFx0XFx0XFx0XFx0ICovXFxuIDc5MzpcXHRcXHRcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLFxcbiA3OTQ6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyLCBpZG1hcCwgZXhhY3QpKVxcbiA3OTU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3OTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDc5NzpcXHRcXHRcXHRjYXNlIFNUQUNLX0RZTlBUUjpcXG4gNzk4OlxcdFxcdFxcdFxcdG9sZF9yZWcgPSBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbiA3OTk6XFx0XFx0XFx0XFx0Y3VyX3JlZyA9IFxcdTAwMjZjdXItXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuIDgwMDpcXHRcXHRcXHRcXHRpZiAob2xkX3JlZy1cXHUwMDNlZHlucHRyLnR5cGUgIT0gY3VyX3JlZy1cXHUwMDNlZHlucHRyLnR5cGUgfHxcXG4gODAxOlxcdFxcdFxcdFxcdCAgICBvbGRfcmVnLVxcdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCAhPSBjdXJfcmVnLVxcdTAwM2VkeW5wdHIuZmlyc3Rfc2xvdCB8fFxcbiA4MDI6XFx0XFx0XFx0XFx0ICAgICFjaGVja19pZHMob2xkX3JlZy1cXHUwMDNlaWQsIGN1cl9yZWctXFx1MDAzZWlkLCBpZG1hcCkgfHxcXG4gODAzOlxcdFxcdFxcdFxcdCAgICAhY2hlY2tfaWRzKG9sZF9yZWctXFx1MDAzZXBhcmVudF9pZCwgY3VyX3JlZy1cXHUwMDNlcGFyZW50X2lkLCBpZG1hcCkpXFxuIDgwNDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDgwNTpcXHRcXHRcXHRcXHRicmVhaztcXG4gODA2OlxcdFxcdFxcdGNhc2UgU1RBQ0tfSVRFUjpcXG4gODA3OlxcdFxcdFxcdFxcdG9sZF9yZWcgPSBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbiA4MDg6XFx0XFx0XFx0XFx0Y3VyX3JlZyA9IFxcdTAwMjZjdXItXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuIDgwOTpcXHRcXHRcXHRcXHQvKiBpdGVyLmRlcHRoIGlzIG5vdCBjb21wYXJlZCBiZXR3ZWVuIHN0YXRlcyBhcyBpdFxcbiA4MTA6XFx0XFx0XFx0XFx0ICogZG9lc24ndCBtYXR0ZXIgZm9yIGNvcnJlY3RuZXNzIGFuZCB3b3VsZCBvdGhlcndpc2VcXG4gODExOlxcdFxcdFxcdFxcdCAqIHByZXZlbnQgY29udmVyZ2VuY2U7IHdlIG1haW50YWluIGl0IG9ubHkgdG8gcHJldmVudFxcbiA4MTI6XFx0XFx0XFx0XFx0ICogaW5maW5pdGUgbG9vcCBjaGVjayB0cmlnZ2VyaW5nLCBzZWVcXG4gODEzOlxcdFxcdFxcdFxcdCAqIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoKVxcbiA4MTQ6XFx0XFx0XFx0XFx0ICovXFxuIDgxNTpcXHRcXHRcXHRcXHRpZiAob2xkX3JlZy1cXHUwMDNldHlwZSAhPSBjdXJfcmVnLVxcdTAwM2V0eXBlIHx8XFxuIDgxNjpcXHRcXHRcXHRcXHQgICAgb2xkX3JlZy1cXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cXHUwMDNlaXRlci5idGYgfHxcXG4gODE3OlxcdFxcdFxcdFxcdCAgICBvbGRfcmVnLVxcdTAwM2VpdGVyLmJ0Zl9pZCAhPSBjdXJfcmVnLVxcdTAwM2VpdGVyLmJ0Zl9pZCB8fFxcbiA4MTg6XFx0XFx0XFx0XFx0ICAgIG9sZF9yZWctXFx1MDAzZWl0ZXIuc3RhdGUgIT0gY3VyX3JlZy1cXHUwMDNlaXRlci5zdGF0ZSB8fFxcbiA4MTk6XFx0XFx0XFx0XFx0ICAgIC8qIGlnbm9yZSB7b2xkX3JlZyxjdXJfcmVnfS1cXHUwMDNlaXRlci5kZXB0aCwgc2VlIGFib3ZlICovXFxuIDgyMDpcXHRcXHRcXHRcXHQgICAgIWNoZWNrX2lkcyhvbGRfcmVnLVxcdTAwM2VpZCwgY3VyX3JlZy1cXHUwMDNlaWQsIGlkbWFwKSlcXG4gODIxOlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODIyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4MjM6XFx0XFx0XFx0Y2FzZSBTVEFDS19JUlFfRkxBRzpcXG4gODI0OlxcdFxcdFxcdFxcdG9sZF9yZWcgPSBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbiA4MjU6XFx0XFx0XFx0XFx0Y3VyX3JlZyA9IFxcdTAwMjZjdXItXFx1MDAzZXN0YWNrW3NwaV0uc3BpbGxlZF9wdHI7XFxuIDgyNjpcXHRcXHRcXHRcXHRpZiAoIWNoZWNrX2lkcyhvbGRfcmVnLVxcdTAwM2VpZCwgY3VyX3JlZy1cXHUwMDNlaWQsIGlkbWFwKSB8fFxcbiA4Mjc6XFx0XFx0XFx0XFx0ICAgIG9sZF9yZWctXFx1MDAzZWlycS5rZnVuY19jbGFzcyAhPSBjdXJfcmVnLVxcdTAwM2VpcnEua2Z1bmNfY2xhc3MpXFxuIDgyODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDgyOTpcXHRcXHRcXHRcXHRicmVhaztcXG4gODMwOlxcdFxcdFxcdGNhc2UgU1RBQ0tfTUlTQzpcXG4gODMxOlxcdFxcdFxcdGNhc2UgU1RBQ0tfWkVSTzpcXG4gODMyOlxcdFxcdFxcdGNhc2UgU1RBQ0tfSU5WQUxJRDpcXG4gODMzOlxcdFxcdFxcdGNhc2UgU1RBQ0tfUE9JU09OOlxcbiA4MzQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDgzNTpcXHRcXHRcXHQvKiBFbnN1cmUgdGhhdCBuZXcgdW5oYW5kbGVkIHNsb3QgdHlwZXMgcmV0dXJuIGZhbHNlIGJ5IGRlZmF1bHQgKi9cXG4gODM2OlxcdFxcdFxcdGRlZmF1bHQ6XFxuIDgzNzpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDgzODpcXHRcXHRcXHR9XFxuIDgzOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjE4Ljg4NjY5ODE5OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODgwNTc2ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWdpc3RlciBIYW5kbGluZyBpbiB0aGUgSXRlcmF0aW9uIFN0YWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBgb2xkLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWzBdYCBpcyBiZWluZyBjaGVja2VkIGJlZm9yZSB3ZSBldmVuIGhpdCB0aGlzIGBzd2l0Y2hgIHN0YXRlbWVudC5cIiBUaGF0J3MgZ29vZCBwcmFjdGljZSwga2VlcHMgdGhpbmdzIG9yZ2FuaXplZC4gTm93LCB0aGUgbG9naWMuLi4gaWYgYG9sZC1cdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVswXWAgaXMgYWN0dWFsbHkgYFNUQUNLX0lURVJgLCB0aGVuIGBvbGRfcmVnYCBpcyBzZXQgdG8gcG9pbnQgdG8gYFx1MDAyNm9sZC1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyYC4gTWFrZXMgc2Vuc2UsIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgc3BpbGxlZCBwb2ludGVyIGluIHRoYXQgY2FzZS4gQW5kLCBpZiBJJ20gbm90IG1pc3Rha2VuLCBgY3VyX3JlZ2AgaXMgcG9pbnRpbmcgdG8gdGhlIGVxdWl2YWxlbnQgYFx1MDAyNmN1ci1cdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyYC4gSG1tLCBub3cgSSdtIGdldHRpbmcgYSBsaXR0bGUgY3VyaW91cy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWzBdYCBpcyBzb21ldGhpbmcgKm90aGVyKiB0aGFuIGBTVEFDS19JVEVSYD8gVGhhdCdzIHRoZSBpbXBvcnRhbnQgcGllY2UgaGVyZSwgdGhlIGhhbmRsaW5nIGZvciB0aGUgKm90aGVyKiB0eXBlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXlzZWxmIG9uIGhvdyB0aGUgY29kZSBicmFuY2hlcyBiZWZvcmUgdGhpcyBgc3dpdGNoYC4gSSdsbCBnbyBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb2RlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY3VycmVudCBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTkxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDM6MjMuNzY3Mjc5MTQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N0YXRlcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc1MDpcXHRcXHRcXHQgKiByZWdzYWZlKCkgdG8gZW5zdXJlIHNjYWxhciBpZHMgYXJlIGNvbXBhcmVkLlxcbiA3NTE6XFx0XFx0XFx0ICovXFxuIDc1MjpcXHRcXHRcXHRpZiAoaW0gPT0gMCB8fCBpbSA9PSA0KSB7XFxuIDc1MzpcXHRcXHRcXHRcXHRvbGRfcmVnID0gc2NhbGFyX3JlZ19mb3Jfc3RhY2soZW52LCBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLCBpbSk7XFxuIDc1NDpcXHRcXHRcXHRcXHRjdXJfcmVnID0gc2NhbGFyX3JlZ19mb3Jfc3RhY2soZW52LCBcXHUwMDI2Y3VyLVxcdTAwM2VzdGFja1tzcGldLCBpbSk7XFxuIDc1NTpcXHRcXHRcXHRcXHRpZiAob2xkX3JlZyBcXHUwMDI2XFx1MDAyNiBjdXJfcmVnKSB7XFxuIDc1NjpcXHRcXHRcXHRcXHRcXHRpZiAoIXJlZ3NhZmUoZW52LCBvbGRfcmVnLCBjdXJfcmVnLCBpZG1hcCwgZXhhY3QpKVxcbiA3NTc6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3NTg6XFx0XFx0XFx0XFx0XFx0aSArPSAoaW0gPT0gMCA/IEJQRl9SRUdfU0laRSAtIDEgOiAzKTtcXG4gNzU5OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3NjA6XFx0XFx0XFx0XFx0fVxcbiA3NjE6XFx0XFx0XFx0fVxcbiA3NjI6XFx0XFxuIDc2MzpcXHRcXHRcXHQvKiBpZiBvbGQgc3RhdGUgd2FzIHNhZmUgd2l0aCBtaXNjIGRhdGEgaW4gdGhlIHN0YWNrXFxuIDc2NDpcXHRcXHRcXHQgKiBpdCB3aWxsIGJlIHNhZmUgd2l0aCB6ZXJvLWluaXRpYWxpemVkIHN0YWNrLlxcbiA3NjU6XFx0XFx0XFx0ICogVGhlIG9wcG9zaXRlIGlzIG5vdCB0cnVlXFxuIDc2NjpcXHRcXHRcXHQgKi9cXG4gNzY3OlxcdFxcdFxcdGlmIChvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX01JU0MgXFx1MDAyNlxcdTAwMjZcXG4gNzY4OlxcdFxcdFxcdCAgICBjdXItXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdID09IFNUQUNLX1pFUk8pXFxuIDc2OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzcwOlxcdFxcdFxcdGlmIChvbGQtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW2kgJSBCUEZfUkVHX1NJWkVdICE9XFxuIDc3MTpcXHRcXHRcXHQgICAgY3VyLVxcdTAwM2VzdGFja1tzcGldLnNsb3RfdHlwZVtpICUgQlBGX1JFR19TSVpFXSlcXG4gNzcyOlxcdFxcdFxcdFxcdC8qIEV4OiBvbGQgZXhwbG9yZWQgKHNhZmUpIHN0YXRlIGhhcyBTVEFDS19TUElMTCBpblxcbiA3NzM6XFx0XFx0XFx0XFx0ICogdGhpcyBzdGFjayBzbG90LCBidXQgY3VycmVudCBoYXMgU1RBQ0tfTUlTQyAtXFx1MDAzZVxcbiA3NzQ6XFx0XFx0XFx0XFx0ICogdGhpcyB2ZXJpZmllciBzdGF0ZXMgYXJlIG5vdCBlcXVpdmFsZW50LFxcbiA3NzU6XFx0XFx0XFx0XFx0ICogcmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHZlcmlmaWNhdGlvbiBvZiB0aGlzIHBhdGhcXG4gNzc2OlxcdFxcdFxcdFxcdCAqL1xcbiA3Nzc6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3Nzg6XFx0XFx0XFx0aWYgKGkgJSBCUEZfUkVHX1NJWkUgIT0gQlBGX1JFR19TSVpFIC0gMSlcXG4gNzc5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA3ODA6XFx0XFx0XFx0LyogQm90aCBvbGQgYW5kIGN1ciBhcmUgaGF2aW5nIHNhbWUgc2xvdF90eXBlICovXFxuIDc4MTpcXHRcXHRcXHRzd2l0Y2ggKG9sZC1cXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbQlBGX1JFR19TSVpFIC0gMV0pIHtcXG4gNzgyOlxcdFxcdFxcdGNhc2UgU1RBQ0tfU1BJTEw6XFxuIDc4MzpcXHRcXHRcXHRcXHQvKiB3aGVuIGV4cGxvcmVkIGFuZCBjdXJyZW50IHN0YWNrIHNsb3QgYXJlIGJvdGggc3RvcmluZ1xcbiA3ODQ6XFx0XFx0XFx0XFx0ICogc3BpbGxlZCByZWdpc3RlcnMsIGNoZWNrIHRoYXQgc3RvcmVkIHBvaW50ZXJzIHR5cGVzXFxuIDc4NTpcXHRcXHRcXHRcXHQgKiBhcmUgdGhlIHNhbWUgYXMgd2VsbC5cXG4gNzg2OlxcdFxcdFxcdFxcdCAqIEV4OiBleHBsb3JlZCBzYWZlIHBhdGggY291bGQgaGF2ZSBzdG9yZWRcXG4gNzg3OlxcdFxcdFxcdFxcdCAqIChicGZfcmVnX3N0YXRlKSB7LnR5cGUgPSBQVFJfVE9fU1RBQ0ssIC5vZmYgPSAtOH1cXG4gNzg4OlxcdFxcdFxcdFxcdCAqIGJ1dCBjdXJyZW50IHBhdGggaGFzIHN0b3JlZDpcXG4gNzg5OlxcdFxcdFxcdFxcdCAqIChicGZfcmVnX3N0YXRlKSB7LnR5cGUgPSBQVFJfVE9fU1RBQ0ssIC5vZmYgPSAtMTZ9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjIzLjc2NzUxMDgxNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg4MDM2NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRGlzY3JlcGFuY2llcyBpbiBTdGFjayBJdGVyYXRpb24qKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCdzIHJ1bm5pbmcgdGhyb3VnaCBteSBoZWFkLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvbXBhcmlzb246IGBvbGQtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbQlBGX1JFR19TSVpFIC0gMV1gIGFuZCBgY3VyLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlW0JQRl9SRUdfU0laRSAtIDFdYC4gVGhleSdyZSBib3RoIHJlZmVyZW5jaW5nIHRoZSBzYW1lIHN0YWNrIHNsb3QsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBhbmQgdGhleSBib3RoIGV2YWx1YXRlIHRvIGBTVEFDS19JVEVSYC4gIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuXG5cbkJ1dCBob2xkIG9uIGEgc2Vjb25kLiBJZiBib3RoIGluZGljYXRlIHN0YWNrIGl0ZXJhdGlvbiwgd2hpY2ggaXMgd2hhdCBgU1RBQ0tfSVRFUmAgc2hvdWxkIHJlcHJlc2VudCwgd2h5IGFtIEkgc2VlaW5nIGEgZGlmZmVyZW5jZSBpbiBgb2xkX3JlZy1cdTAwM2V0eXBlYCB2ZXJzdXMgYGN1cl9yZWctXHUwMDNldHlwZWA/IFRoYXQncyB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS4gU29tZXRoaW5nJ3Mgbm90IHJpZ2h0LiBUaGUgdHlwZXMgKnNob3VsZCogYmUgdGhlIHNhbWUgaW4gdGhpcyBzaXR1YXRpb24uIEl0J3MgYSBjb250cmFkaWN0aW9uLlxuXG5Ob3csIG15IG5leHQgdGhvdWdodCBpcywgd2hhdCBleGFjdGx5ICppcyogdGhlIGB0eXBlYCBmaWVsZCBhc3NvY2lhdGVkIHdpdGggYFNUQUNLX0lURVJgPyBJIG5lZWQgdG8gcmV2aWV3IGhvdyBgU1RBQ0tfSVRFUmAgaXMgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgYHR5cGVgIGZpZWxkIHNpZ25pZmllcyBpbiByZWxhdGlvbiB0byBzdGFjayBpdGVyYXRpb24uIExldCdzIHRyYWNlIGJhY2sgdG8gd2hlcmUgdGhhdCBjb25zdGFudCBpcyBiZWluZyBzZXQgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzdGF0ZSBjb21wYXJpc29uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE2NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjI4LjA1NTU1MTg2MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzODAzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1RBQ0tfSVRFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2xvZy5jPTQ5Nz1zdGF0aWMgY2hhciBzbG90X3R5cGVfY2hhcltdID0ge1xcbi0tXFxua2VybmVsL2JwZi9sb2cuYy01MDItXFx0W1NUQUNLX0RZTlBUUl1cXHQ9ICdkJyxcXG5rZXJuZWwvYnBmL2xvZy5jOjUwMzpcXHRbU1RBQ0tfSVRFUl1cXHQ9ICdpJyxcXG5rZXJuZWwvYnBmL2xvZy5jLTUwNC1cXHRbU1RBQ0tfSVJRX0ZMQUddID0gJ2YnLFxcbi0tXFxua2VybmVsL2JwZi9sb2cuYz03MTE9dm9pZCBwcmludF92ZXJpZmllcl9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICp2c3RhdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2xvZy5jLTc3NC1cXHRcXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL2xvZy5jOjc3NTpcXHRcXHRjYXNlIFNUQUNLX0lURVI6XFxua2VybmVsL2JwZi9sb2cuYy03NzYtXFx0XFx0XFx0Lyogb25seSBtYWluIHNsb3QgaGFzIGlkIHNldDsgc2tpcCBvdGhlcnMgKi9cXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9Mzk4PXN0YXRpYyB2b2lkIF9fY2xlYW5fZnVuY19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MzMtXFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi9zdGF0ZXMuYzo0MzQ6XFx0XFx0XFx0aWYgKHN0eXBlID09IFNUQUNLX0RZTlBUUiB8fCBzdHlwZSA9PSBTVEFDS19JVEVSIHx8XFxua2VybmVsL2JwZi9zdGF0ZXMuYy00MzUtXFx0XFx0XFx0ICAgIHN0eXBlID09IFNUQUNLX0lSUV9GTEFHKVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz03MDI9c3RhdGljIGJvb2wgc3RhY2tzYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqb2xkLFxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy04MDUtXFx0XFx0XFx0YnJlYWs7XFxua2VybmVsL2JwZi9zdGF0ZXMuYzo4MDY6XFx0XFx0Y2FzZSBTVEFDS19JVEVSOlxcbmtlcm5lbC9icGYvc3RhdGVzLmMtODA3LVxcdFxcdFxcdG9sZF9yZWcgPSBcXHUwMDI2b2xkLVxcdTAwM2VzdGFja1tzcGldLnNwaWxsZWRfcHRyO1xcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMTkwPXN0YXRpYyBib29sIGl0ZXJfYWN0aXZlX2RlcHRoc19kaWZmZXIoc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqb2xkLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXIpXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExOTgtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN0YXRlLVxcdTAwM2VhbGxvY2F0ZWRfc3RhY2sgLyBCUEZfUkVHX1NJWkU7IGkrKykge1xcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTE5OTpcXHRcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZXN0YWNrW2ldLnNsb3RfdHlwZVswXSAhPSBTVEFDS19JVEVSKVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIwMC1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MTU9c3RhdGljIGludCBtYXJrX3N0YWNrX3Nsb3RzX2l0ZXIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05NDktXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEJQRl9SRUdfU0laRTsgaisrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5NTA6XFx0XFx0XFx0c2xvdC1cXHUwMDNlc2xvdF90eXBlW2pdID0gU1RBQ0tfSVRFUjtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTUxLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTk4Nj1zdGF0aWMgYm9vbCBpc19pdGVyX3JlZ192YWxpZF91bmluaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDA1LVxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBCUEZfUkVHX1NJWkU7IGorKylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTAwNjpcXHRcXHRcXHRpZiAoc2xvdC1cXHUwMDNlc2xvdF90eXBlW2pdID09IFNUQUNLX0lURVIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMDctXFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTM9c3RhdGljIGludCBpc19pdGVyX3JlZ192YWxpZF9pbml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAzNy1cXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQlBGX1JFR19TSVpFOyBqKyspXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMzg6XFx0XFx0XFx0aWYgKHNsb3QtXFx1MDAzZXNsb3RfdHlwZVtqXSAhPSBTVEFDS19JVEVSKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDM5LVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNTU9c3RhdGljIGludCBpc19pcnFfZmxhZ19yZWdfdmFsaWRfaW5pdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODAtICogICAtIGR5bnB0ciBzdGF0ZSAoU1RBQ0tfRFlOUFRSKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE4MTogKiAgIC0gaXRlciBzdGF0ZSAoU1RBQ0tfSVRFUikuXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODItICogICAtIGlycSBmbGFnIHN0YXRlIChTVEFDS19JUlFfRkxBRylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg0PXN0YXRpYyBib29sIGlzX3N0YWNrX3Nsb3Rfc3BlY2lhbChjb25zdCBzdHJ1Y3QgYnBmX3N0YWNrX3N0YXRlICpzdGFjaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwLVxcdGNhc2UgU1RBQ0tfRFlOUFRSOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkxOlxcdGNhc2UgU1RBQ0tfSVRFUjpcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5Mi1cXHRjYXNlIFNUQUNLX0lSUV9GTEFHOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTkxNDA9c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MTQ0LVxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjkxNDU6XFx0dTMyIGNsZWFyX21hc2sgPSAoMSBcXHUwMDNjXFx1MDAzYyBTVEFDS19TUElMTCkgfCAoMSBcXHUwMDNjXFx1MDAzYyBTVEFDS19JVEVSKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTE0Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDM6MjguMTE0OTM3MDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNjYyMzQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgYGludmFsaWRhdGVfcmN1X3Byb3RlY3RlZF9yZWZzYCoqXG5cblJpZ2h0LCBzbyBJIHNlZSBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIGluIHRoZSBjb2RlLCBhbmQgaW1tZWRpYXRlbHkgbXkgYnJhaW4ganVtcHMgdG8gYFNUQUNLX0lURVJgLiAgSXQncyBsaWtlbHkgY29ubmVjdGVkOyB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBjbGVhcmluZyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aG9zZSBzdGFjayBpdGVyYXRvcnMsIG1heWJlIHNvbWUgc29ydCBvZiBSQ1UtcHJvdGVjdGVkIHJlZmVyZW5jZXMuIExldCBtZSB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnNgIGl0c2VsZiB0byBjb25maXJtIG15IGh1bmNoIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgaG93IGl04oCZcyBoYW5kbGluZyB0aG9zZSBSQ1UgcHJvdGVjdGVkIHJlZmVyZW5jZXMgaW4gcmVsYXRpb24gdG8gdGhlIHN0YWNrIGl0ZXJhdG9yIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTMyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDM6MzEuOTMxNTYzNjg5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDIyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxNDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjkxNDA6XFx0c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9yY3VfcHJvdGVjdGVkX3JlZnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG45MTQxOlxcdHtcXG45MTQyOlxcdFxcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnN0YWNrO1xcbjkxNDM6XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZTtcXG45MTQ0OlxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWc7XFxuOTE0NTpcXHRcXHR1MzIgY2xlYXJfbWFzayA9ICgxIFxcdTAwM2NcXHUwMDNjIFNUQUNLX1NQSUxMKSB8ICgxIFxcdTAwM2NcXHUwMDNjIFNUQUNLX0lURVIpO1xcbjkxNDY6XFx0XFxuOTE0NzpcXHRcXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZV9tYXNrKGVudi1cXHUwMDNlY3VyX3N0YXRlLCBzdGF0ZSwgcmVnLCBzdGFjaywgY2xlYXJfbWFzaywgKHtcXG45MTQ4OlxcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBNRU1fUkNVKSB7XFxuOTE0OTpcXHRcXHRcXHRcXHRyZWctXFx1MDAzZXR5cGUgXFx1MDAyNj0gfihNRU1fUkNVIHwgUFRSX01BWUJFX05VTEwpO1xcbjkxNTA6XFx0XFx0XFx0XFx0cmVnLVxcdTAwM2V0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XFxuOTE1MTpcXHRcXHRcXHR9XFxuOTE1MjpcXHRcXHR9KSk7XFxuOTE1MzpcXHR9XFxuOTE1NDpcXHRcXG45MTU1OlxcdHN0YXRpYyBpbnQgcmVmX2NvbnZlcnRfYWxsb2NfcmN1X3Byb3RlY3RlZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaWQpXFxuOTE1NjpcXHR7XFxuOTE1NzpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlO1xcbjkxNTg6XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZztcXG45MTU5OlxcdFxcdGludCBlcnI7XFxuOTE2MDpcXHRcXG45MTYxOlxcdFxcdGVyciA9IHJlbGVhc2VfcmVmZXJlbmNlX25vbWFyayhlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgaWQpO1xcbjkxNjI6XFx0XFxuOTE2MzpcXHRcXHRicGZfZm9yX2VhY2hfcmVnX2luX3ZzdGF0ZShlbnYtXFx1MDAzZWN1cl9zdGF0ZSwgc3RhdGUsIHJlZywgKHtcXG45MTY0OlxcdFxcdFxcdGlmIChyZWctXFx1MDAzZWlkICE9IGlkKVxcbjkxNjU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuOTE2NjpcXHRcXHRcXHRpZiAoKHJlZy1cXHUwMDNldHlwZSBcXHUwMDI2IE1FTV9BTExPQykgXFx1MDAyNlxcdTAwMjYgKHJlZy1cXHUwMDNldHlwZSBcXHUwMDI2IE1FTV9QRVJDUFUpKSB7XFxuOTE2NzpcXHRcXHRcXHRcXHRyZWctXFx1MDAzZWlkID0gMDtcXG45MTY4OlxcdFxcdFxcdFxcdHJlZy1cXHUwMDNldHlwZSBcXHUwMDI2PSB+TUVNX0FMTE9DO1xcbjkxNjk6XFx0XFx0XFx0XFx0cmVnLVxcdTAwM2V0eXBlIHw9IE1FTV9SQ1U7XFxuOTE3MDpcXHRcXHRcXHR9XFxuOTE3MTpcXHRcXHR9KSk7XFxuOTE3MjpcXHRcXG45MTczOlxcdFxcdHJldHVybiBlcnI7XFxuOTE3NDpcXHR9XFxuOTE3NTpcXHRcXG45MTc2OlxcdHN0YXRpYyB2b2lkIGNsZWFyX2NhbGxlcl9zYXZlZF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuOTE3NzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MpXFxuOTE3ODpcXHR7XFxuOTE3OTpcXHRcXHRpbnQgaTtcXG45MTgwOlxcdFxcbjkxODE6XFx0XFx0LyogYWZ0ZXIgdGhlIGNhbGwgcmVnaXN0ZXJzIHIwIC0gcjUgd2VyZSBzY3JhdGNoZWQgKi9cXG45MTgyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMRVJfU0FWRURfUkVHUzsgaSsrKSB7XFxuOTE4MzpcXHRcXHRcXHRicGZfbWFya19yZWdfbm90X2luaXQoZW52LCBcXHUwMDI2cmVnc1tjYWxsZXJfc2F2ZWRbaV1dKTtcXG45MTg0OlxcdFxcdFxcdF9fY2hlY2tfcmVnX2FyZyhlbnYsIHJlZ3MsIGNhbGxlcl9zYXZlZFtpXSwgRFNUX09QX05PX01BUkspO1xcbjkxODU6XFx0XFx0fVxcbjkxODY6XFx0fVxcbjkxODc6XFx0XFxuOTE4ODpcXHRzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX291dGdvaW5nX3N0YWNrX2FyZ3MoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG45MTg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicGZfZnVuY19zdGF0ZSAqc3RhdGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjMxLjkzNDY1NTM1OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTAwNzYyMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVnaXN0ZXIgSXRlcmF0aW9uKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoaXMgYGJwZl9mb3JfZWFjaF9yZWdfaW5fdnN0YXRlX21hc2tgIGZ1bmN0aW9uIOKAkyBpdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCByZWdpc3RlciBhbmQgc3RhY2sgc2xvdCB1cGRhdGVzLiBSaWdodCwgaXQgaXRlcmF0ZXMgb3ZlciByZWdpc3RlcnMgKmFuZCogc3RhY2sgc2xvdHMuIFRoZSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGlzIGBjbGVhcl9tYXNrYCDigJMgaWYgaXQgaW5jbHVkZXMgYFNUQUNLX0lURVJgLCB0aGVuIHRoaXMgaXRlcmF0aW9uIGlzIG9wZXJhdGluZyBvbiBgU1RBQ0tfSVRFUmAgc2xvdHMuIE1ha2VzIHNlbnNlLlxuXG5BbmQsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGNvbmZpcm1zIHRoYXQgaXQgKmRvZXMqIHRvdWNoIHRoZXNlIGBTVEFDS19JVEVSYCBzbG90cy4gVGhlIGNvZGUgc25pcHBldCBoZXJlOlxuXG5gYGBjXG5pZiAocmVnLVx1MDAzZXR5cGUgXHUwMDI2IE1FTV9SQ1UpIHtcblx0cmVnLVx1MDAzZXR5cGUgXHUwMDI2PSB+KE1FTV9SQ1UgfCBQVFJfTUFZQkVfTlVMTCk7XG5cdHJlZy1cdTAwM2V0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XG59XG5gYGBcblxuLi4udGhhdCdzIGtleS4gSXQncyBtb2RpZnlpbmcgYHJlZy1cdTAwM2V0eXBlYCAqaWYqIGByZWdgIGhhcyB0aGUgYE1FTV9SQ1VgIGZsYWcgc2V0LiBIb2xkIG9uLi4uIGlmIGByZWdgIGlzIGEgYFNUQUNLX0lURVJgIHNsb3QsIGl0cyBgdHlwZWAgaXMgYmVpbmcgY2hhbmdlZCEgVGhhdCdzIHRoZSByZWFsIGNydXggb2YgdGhpcy5cblxuQnV0IHdoYXQgKmlzKiBgcmVnLVx1MDAzZXR5cGVgIGZvciBgU1RBQ0tfSVRFUmA/IFdlIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGhvdyB0aGVzZSBzbG90cyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHdoYXQgdGhlaXIgaW5pdGlhbCB0eXBlcyBhcmUuIFRoZSBgbWFya19zdGFja19zbG90c19pdGVyYCBmdW5jdGlvbiBpcyB0aGUgbmV4dCBsb2dpY2FsIHBsYWNlIHRvIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3RhdGUgdGhpcyBmdW5jdGlvbiBpcyBsZWF2aW5nIHRoZXNlIHN0YWNrIHNsb3RzIGluLCBpZiBgU1RBQ0tfSVRFUmAgaXMgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDM6MzcuNDM1NDIxMzg4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODQ2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkxNTpcXHRzdGF0aWMgaW50IG1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA5MTY6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4gOTE3OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBpbnQgaW5zbl9pZHgsXFxuIDkxODpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkLCBpbnQgbnJfc2xvdHMpXFxuIDkxOTpcXHR7XFxuIDkyMDpcXHRcXHRzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlID0gYnBmX2Z1bmMoZW52LCByZWcpO1xcbiA5MjE6XFx0XFx0aW50IHNwaSwgaSwgaiwgaWQ7XFxuIDkyMjpcXHRcXG4gOTIzOlxcdFxcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xcbiA5MjQ6XFx0XFx0aWYgKHNwaSBcXHUwMDNjIDApXFxuIDkyNTpcXHRcXHRcXHRyZXR1cm4gc3BpO1xcbiA5MjY6XFx0XFxuIDkyNzpcXHRcXHRpZCA9IGFjcXVpcmVfcmVmZXJlbmNlKGVudiwgaW5zbl9pZHgsIDApO1xcbiA5Mjg6XFx0XFx0aWYgKGlkIFxcdTAwM2MgMClcXG4gOTI5OlxcdFxcdFxcdHJldHVybiBpZDtcXG4gOTMwOlxcdFxcbiA5MzE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3Nsb3RzOyBpKyspIHtcXG4gOTMyOlxcdFxcdFxcdHN0cnVjdCBicGZfc3RhY2tfc3RhdGUgKnNsb3QgPSBcXHUwMDI2c3RhdGUtXFx1MDAzZXN0YWNrW3NwaSAtIGldO1xcbiA5MzM6XFx0XFx0XFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0ID0gXFx1MDAyNnNsb3QtXFx1MDAzZXNwaWxsZWRfcHRyO1xcbiA5MzQ6XFx0XFxuIDkzNTpcXHRcXHRcXHRfX21hcmtfcmVnX2tub3duX3plcm8oc3QpO1xcbiA5MzY6XFx0XFx0XFx0c3QtXFx1MDAzZXR5cGUgPSBQVFJfVE9fU1RBQ0s7IC8qIHdlIGRvbid0IGhhdmUgZGVkaWNhdGVkIHJlZyB0eXBlICovXFxuIDkzNzpcXHRcXHRcXHRpZiAoaXNfa2Z1bmNfcmN1X3Byb3RlY3RlZChtZXRhKSkge1xcbiA5Mzg6XFx0XFx0XFx0XFx0aWYgKGluX3JjdV9jcyhlbnYpKVxcbiA5Mzk6XFx0XFx0XFx0XFx0XFx0c3QtXFx1MDAzZXR5cGUgfD0gTUVNX1JDVTtcXG4gOTQwOlxcdFxcdFxcdFxcdGVsc2VcXG4gOTQxOlxcdFxcdFxcdFxcdFxcdHN0LVxcdTAwM2V0eXBlIHw9IFBUUl9VTlRSVVNURUQ7XFxuIDk0MjpcXHRcXHRcXHR9XFxuIDk0MzpcXHRcXHRcXHRzdC1cXHUwMDNlaWQgPSBpID09IDAgPyBpZCA6IDA7XFxuIDk0NDpcXHRcXHRcXHRzdC1cXHUwMDNlaXRlci5idGYgPSBidGY7XFxuIDk0NTpcXHRcXHRcXHRzdC1cXHUwMDNlaXRlci5idGZfaWQgPSBidGZfaWQ7XFxuIDk0NjpcXHRcXHRcXHRzdC1cXHUwMDNlaXRlci5zdGF0ZSA9IEJQRl9JVEVSX1NUQVRFX0FDVElWRTtcXG4gOTQ3OlxcdFxcdFxcdHN0LVxcdTAwM2VpdGVyLmRlcHRoID0gMDtcXG4gOTQ4OlxcdFxcbiA5NDk6XFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEJQRl9SRUdfU0laRTsgaisrKVxcbiA5NTA6XFx0XFx0XFx0XFx0c2xvdC1cXHUwMDNlc2xvdF90eXBlW2pdID0gU1RBQ0tfSVRFUjtcXG4gOTUxOlxcdFxcbiA5NTI6XFx0XFx0XFx0bWFya19zdGFja19zbG90X3NjcmF0Y2hlZChlbnYsIHNwaSAtIGkpO1xcbiA5NTM6XFx0XFx0fVxcbiA5NTQ6XFx0XFxuIDk1NTpcXHRcXHRyZXR1cm4gMDtcXG4gOTU2OlxcdH1cXG4gOTU3OlxcdFxcbiA5NTg6XFx0c3RhdGljIGludCB1bm1hcmtfc3RhY2tfc2xvdHNfaXRlcihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiA5NTk6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG5yX3Nsb3RzKVxcbiA5NjA6XFx0e1xcbiA5NjE6XFx0XFx0c3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSA9IGJwZl9mdW5jKGVudiwgcmVnKTtcXG4gOTYyOlxcdFxcdGludCBzcGksIGksIGo7XFxuIDk2MzpcXHRcXG4gOTY0OlxcdFxcdHNwaSA9IGl0ZXJfZ2V0X3NwaShlbnYsIHJlZywgbnJfc2xvdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMzozNy40MzY1MDkwMDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwMDQ2NjA2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQSBDcml0aWNhbCBCdWcgaW4gdGhlIEJQRiBWZXJpZmllcjogUkNVIFByb3RlY3Rpb24gVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcywgYW5kIEkgdGhpbmsgSSd2ZSBmb3VuZCBhIHByZXR0eSBuYXN0eSBidWcgaW4gdGhlIEJQRiB2ZXJpZmllci4gSXQgYWxsIHN0YXJ0ZWQgd2hlbiBJIHdhcyBsb29raW5nIGF0IGhvdyBzdGFjayBwb2ludGVycyBhcmUgaGFuZGxlZCB3aXRoIFJDVSBwcm90ZWN0ZWQgbWVtb3J5IGFuZCB1bnRydXN0ZWQgcG9pbnRlcnMuIEkgcmVhbGl6ZWQgdGhhdCB0aGUgYHN0LVx1MDAzZXR5cGVgIGZpZWxkIGNhbiBiZSBzZXQgdG8gdGhpbmdzIGxpa2UgYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgIG9yIGBQVFJfVE9fU1RBQ0sgfCBQVFJfVU5UUlVTVEVEYC4gVGhlbiBJIHJlY2FsbGVkIHRoYXQgYHN0YWNrc2FmZWAgd2FzIG9ubHkgY29tcGFyaW5nIHRoZSBgYnRmYCBmaWVsZCAoYG9sZF9yZWctXHUwMDNlaXRlci5idGYgIT0gY3VyX3JlZy1cdTAwM2VpdGVyLmJ0ZmApIGJ1dCBjcnVjaWFsbHkgKm5vdCogdGhlIGB0eXBlYCBmaWVsZCAoYG9sZF9yZWctXHUwMDNldHlwZSAhPSBjdXJfcmVnLVx1MDAzZXR5cGVgKS5cblxuVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgcHJldHR5IGFsYXJtaW5nLiBJZiBgb2xkX3JlZ2AgaXMsIHNheSwgYFBUUl9UT19TVEFDSyB8IE1FTV9SQ1VgLCBtZWFuaW5nIGl0J3MgUkNVIHByb3RlY3RlZCwgYW5kIGBjdXJfcmVnYCBpcyBgUFRSX1RPX1NUQUNLIHwgUFRSX1VOVFJVU1RFRGAsIHRoZSB2ZXJpZmllciB3b3VsZCBpbmNvcnJlY3RseSBjb25zaWRlciB0aGVtIGVxdWl2YWxlbnQgYmVjYXVzZSBpdCdzIG5vdCBsb29raW5nIGF0IHRoZSBgdHlwZWAgZmxhZy4gVGhpcyBtZWFucyB0aGUgdmVyaWZpZXIgY2FuIGVycm9uZW91c2x5IGFzc3VtZSBhIHN0YXRlIGlzIHNhZmUgd2hlbiBpdOKAmXMgYWN0dWFsbHkgbG9zdCBpdHMgUkNVIHByb3RlY3Rpb24uXG5cbkFuZCB0aGlzIGlzICpleGFjdGx5KiB3aGF0IHRoZSBgaXRlcnNfdGFza19mYWlsdXJlLmNgIHRlc3QgY2FzZSBpcyBkZW1vbnN0cmF0aW5nISBJIGNhbiBzZWUgaXQuIFdlJ3JlIHNldHRpbmcgdXAgdGhlIFJDVSBsb2NrLCB0aGVuIGNvbmRpdGlvbmFsbHkgcmVsZWFzaW5nIGl0IGFuZCByZWFjcXVpcmluZyBpdC4gSWYgd2UgaGl0IHRoZSBgZWxzZWAgYnJhbmNoLCBgYnBmX3JjdV9yZWFkX3VubG9jaygpYCBnZXRzIGNhbGxlZC4gVGhpcyB0aGVuIGNhbGxzIGBpbnZhbGlkYXRlX3JjdV9wcm90ZWN0ZWRfcmVmc2Agd2hpY2ggY2xlYXJzIHRoZSBgTUVNX1JDVWAgZmxhZyBhbmQgYWRkcyB0aGUgYFBUUl9VTlRSVVNURURgIGZsYWcgdG8gdGhlIGBTVEFDS19JVEVSYCBzbG90LlxuXG5UaGUgbmV4dCBjYWxsIHRvIGBicGZfaXRlcl90YXNrX25leHQoXHUwMDI2aXQpYCBhbmQgdGhpcyBpcyB3aGVyZSBpdCdzIGFsbCBnb2luZyB3cm9uZy4gQmVjYXVzZSB0aGUgdmVyaWZpZXIgZG9lc24ndCBjaGVjayB0aGUgYHR5cGVgIGZpZWxkLCBpdCdzIG1lcmdpbmcgdGhlc2UgcGF0aHMsIGJlbGlldmluZyB0aGUgaXRlcmF0b3IgaXMgc3RpbGwgdmFsaWQgKFJDVSBwcm90ZWN0ZWQpIGV2ZW4gaW4gdGhlIHVucHJvdGVjdGVkIGBlbHNlYCBicmFuY2ghIFRoaXMgaXMgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgZGF0YSByYWNlIHZ1bG5lcmFiaWxpdHkgbWFuaWZlc3RpbmcgaW4gdGhlIHZlcmlmaWVyJ3MgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBpcyB3b3J0aCBmdXp6aW5nLlxuXG5NeSBndXQgc2F5cyB0aGlzIGlzIGEgY3JpdGljYWwgYnVnIGluIHRoZSBCUEYgdmVyaWZpZXIuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBwcm9iYWJseSBgYnBmX2NoZWNrYCBvciBgZG9fY2hlY2tgIG9yIGV2ZW4gdGhlIHByb2JsZW1hdGljIHN0YXRpYyBgc3RhY2tzYWZlYC4gYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQsIGFsdGhvdWdoIGl0J3MgdmVyeSBnZW5lcmljLiBNYXliZSBgYnBmX2l0ZXJfdGFza19uZXdgIGJ1dCB0aGF0J3MgYSBoZWxwZXIva2Z1bmMuIEkgbmVlZCB0byBmaW5kIHRoZSBrZnVuYyBmb3IgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMzo0Ny40NDExNzM1MzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzI4ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX3Rhc2tfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTQ5MDI9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX2Nzc19kZXN0cm95LCBLRl9JVEVSX0RFU1RST1kpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDkwMy0jZW5kaWZcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0OTA0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl90YXNrX25ldywgS0ZfSVRFUl9ORVcgfCBLRl9SQ1VfUFJPVEVDVEVEKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ5MDUtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX3Rhc2tfbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jPTExMTQ9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbmtlcm5lbC9icGYvdGFza19pdGVyLmMtMTExNS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jOjExMTY6X19icGZfa2Z1bmMgaW50IGJwZl9pdGVyX3Rhc2tfbmV3KHN0cnVjdCBicGZfaXRlcl90YXNrICppdCxcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMTctXFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX19udWxsYWJsZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEzMDE4PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMzMTctXFx0XFx0XFx0XFx0ICogSWYgdGhlIGl0ZXJhdG9yJ3MgY29uc3RydWN0b3IgKHRoZSBfbmV3XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMzE4OlxcdFxcdFxcdFxcdCAqIGZ1bmN0aW9uIGUuZy4sIGJwZl9pdGVyX3Rhc2tfbmV3KSBoYXMgYmVlblxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzMxOS1cXHRcXHRcXHRcXHQgKiBhbm5vdGF0ZWQgd2l0aCBCUEYga2Z1bmMgZmxhZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMzo0Ny41MDU1MDYzNzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyNTYzMDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgdGhlIGJwZl9pdGVyX3Rhc2tfbmV3IEJ1ZyoqXG5cbk9rYXksIHNvIHRoZSBrZnVuYyBpbnZvbHZlZCBoZXJlIGlzIGBicGZfaXRlcl90YXNrX25ld2AuIEJ1dCBob2xkIG9uLCB0aGUgcmVhbCBjdWxwcml0IHNlZW1zIHRvIGJlIHRoZSB2ZXJpZmllciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHN0YWNrc2FmZWAgbG9naWMuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZHJpbGwgZG93bi4gVGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciBpcywgb2YgY291cnNlLCBgYnBmX2NoZWNrYC4gQXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSB2ZXJpZmllciBiZXNpZGVzIHRoYXQgb25lPyBMZXQgbWUgc2Vl4oCmQWggeWVzLCBgZnVuY19zdGF0ZXNfZXF1YWxgLCBgc3RhdGVzX2VxdWFsYCwgYW5kIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuXG5cblNpbmNlIGBzdGFja3NhZmVgIGlzIHN0YXRpYywgSSBjYW4ndCBkaXJlY3RseSB0YXJnZXQgaXQuIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgKm5vdCogc3RhdGljLCBzbyBpdCdzIGEgY2FuZGlkYXRlLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBpdCdzIGV4cG9ydGVkIG9yIGdsb2JhbC4gVGhhdCBtaWdodCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAyMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowMzo1My4wMzExNDAwMzVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTMzNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmM9MTIxND1zdGF0aWMgdm9pZCBtYXJrX2FsbF9zY2FsYXJzX2ltcHJlY2lzZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpzdClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTIzOC1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjEyMzk6aW50IGJwZl9pc19zdGF0ZV92aXNpdGVkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeClcXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTEyNDAte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3NDU2PXN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzQ5My1cXHRcXHRpZiAoYnBmX2lzX3BydW5lX3BvaW50KGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc0OTQ6XFx0XFx0XFx0ZXJyID0gYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoZW52LCBlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc0OTUtXFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjUzLjA5MzA3ODA0NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTAyNDc4NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWNhdGlvbiBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIGBicGZfaXNfc3RhdGVfdmlzaXRlZGAgaXMgYSBnbG9iYWxseSBhY2Nlc3NpYmxlIHZhcmlhYmxlLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgbWVhbnMgaXQncyBsaWtlbHkgcGxheWluZyBhIHJvbGUgaW4gdGhlIHN0YXRlIG1hbmFnZW1lbnQgYWNyb3NzIHRoZSAqZW50aXJlKiBCUEYgdmVyaWZpZXIgb3BlcmF0aW9uLCByYXRoZXIgdGhhbiBiZWluZyBjb25maW5lZCB0byBhIHNpbmdsZSBmdW5jdGlvbiBvciBsb2NhbCBjb250ZXh0LiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWwgZm9yIGNvbXBsZXggaW50ZXJhY3Rpb25zIGFuZCwgcGVyaGFwcywgb3Bwb3J0dW5pdGllcyBmb3Igc3VidGxlIGJ1Z3Mgb3Igb3B0aW1pemF0aW9ucyByZWxhdGVkIHRvIGhvdyB0aGUgdmVyaWZpZXIgdHJhY2tzIHdoYXQncyBiZWVuIGFuYWx5emVkLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogYGJwZl9jaGVja2AuICBJdCdzIGJlZW4gZmxhZ2dlZCBhcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB2ZXJpZmljYXRpb24uIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgYmVnaW5zLiBLbm93aW5nIHRoaXMsIG15IGZvY3VzIGhhcyB0byBiZSBvbiBmaWd1cmluZyBvdXQgdGhlICppbml0aWFsKiBjb250cm9sIGZsb3cgdGhyb3VnaCBgYnBmX2NoZWNrYCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgZnJvbSB0aGUgdmVyeSBzdGFydC4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBvcGVyYXRpb24uIFdoYXQgaW5wdXRzIGRvZXMgaXQgdGFrZT8gV2hhdCBkb2VzIGl0IGluaXRpYWxpemU/IFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGl0IHVzZXM/IFVuZGVyc3RhbmRpbmcgYGJwZl9jaGVja2AgaXMgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAgdG8gZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCB2ZXJpZmljYXRpb24gc3RyYXRlZ3kgYW5kIGl0cyBsaWtlbHkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGdsb2JhbCBzdGF0ZSBjb250cm9sbGVkIGJ5IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIExldCdzIGRpZyBpbiBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY0NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjAzOjU2Ljk5NTU1OTI1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODcyNjgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9icGZfaXRlci5jPTUwND1pbnQgYnBmX2l0ZXJfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNS1cXHRpZiAoIWJwZnB0cl9pc19udWxsKHVsaW5mbykpIHtcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NTI2OlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIHNpemVvZihsaW5mbyksXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNy1cXHRcXHRcXHRcXHRcXHQgICAgICAgbGluZm9fbGVuKTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9Njg1MD1ib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MDI3LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjcwMjg6XFx0XFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xcbmtlcm5lbC9icGYvYnRmLmMtNzAyOS1cXHRcXHR0bmFtZSArPSBzaXplb2YoXFxcImJ0Zl90cmFjZV9cXFwiKSAtIDE7XFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jPTQyNj1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2NmZy5jLTU2MS0gKi9cXG5rZXJuZWwvYnBmL2NmZy5jOjU2MjppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvY2ZnLmMtNTYzLXtcXG4tLVxcbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc3Nj1FWFBPUlRfU1lNQk9MKF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKTtcXG5rZXJuZWwvYnBmL2Nncm91cC5jLTE3NzctXFxua2VybmVsL2JwZi9jZ3JvdXAuYzoxNzc4OmludCBfX2Nncm91cF9icGZfY2hlY2tfZGV2X3Blcm1pc3Npb24oc2hvcnQgZGV2X3R5cGUsIHUzMiBtYWpvciwgdTMyIG1pbm9yLFxcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc3OS1cXHRcXHRcXHRcXHQgICAgICBzaG9ydCBhY2Nlc3MsIGVudW0gY2dyb3VwX2JwZl9hdHRhY2hfdHlwZSBhdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBjaGVja19idGZfZnVuY19lYXJseShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy03MC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmZ1bmNzOyBpKyspIHtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjcxOlxcdFxcdHJldCA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1cmVjb3JkLCBrcmVjX3NpemUsIHVyZWNfc2l6ZSk7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy03Mi1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTIxMz1zdGF0aWMgaW50IGNoZWNrX2J0Zl9saW5lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1My1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfbGluZm87IGkrKykge1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6MjU0OlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1bGluZm8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTI1NS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTM0MT1zdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0zNzYtXFx0XFx0LyogZnV0dXJlIHByb29maW5nIHdoZW4gc2l6ZW9mKGJwZl9jb3JlX3JlbG8pIGNoYW5nZXMgKi9cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjM3NzpcXHRcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odV9jb3JlX3JlbG8sIGV4cGVjdGVkX3NpemUsIHJlY19zaXplKTtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTM3OC1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQwOS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQxMDppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MTEtXFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM3LVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NDM4OmludCBicGZfY2hlY2tfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzOS1cXHRcXHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNi0gKiBBbmRpIEtsZWVuIC0gRml4IGEgZmV3IGJhZCBidWdzIGFuZCByYWNlcy5cXG5rZXJuZWwvYnBmL2NvcmUuYzoxNzogKiBLcmlzIEthdHRlcmpvaG4gLSBBZGRlZCBtYW55IGFkZGl0aW9uYWwgY2hlY2tzIGluIGJwZl9jaGVja19jbGFzc2ljKClcXG5rZXJuZWwvYnBmL2NvcmUuYy0xOC0gKi9cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI1NzQ9Ym9vbCBicGZfcHJvZ19tYXBfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjU4Ni1cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTg3OnN0YXRpYyBpbnQgYnBmX2NoZWNrX3RhaWxfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbmtlcm5lbC9icGYvY29yZS5jLTI1ODgte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MjYzMz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQzLVxcdFxcdC8qXFxua2VybmVsL2JwZi9jb3JlLmM6MjY0NDpcXHRcXHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXFxua2VybmVsL2JwZi9jb3JlLmMtMjY0NS1cXHRcXHQgKiBwb2ludCwgb25seSBpbnNuX2F1eF9kYXRhIGlzIHVzZWQgYWZ0ZXIgZmFpbHVyZSwgc28gaXQgc2hvdWxkIGJlIHJlc3RvcmVkXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjgwPXN0cnVjdCBicGZfcHJvZyAqX19icGZfcHJvZ19zZWxlY3RfcnVudGltZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjcyNi1cXHQgKi9cXG5rZXJuZWwvYnBmL2NvcmUuYzoyNzI3OlxcdCplcnIgPSBicGZfY2hlY2tfdGFpbF9jYWxsKGZwKTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzI4LVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzQwMD1zdGF0aWMgbm9pbmxpbmUgdm9pZCBicGZfcHJvZ19yZXBvcnRfbWF5X2dvdG9fdmlvbGF0aW9uKHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDE1LVxcbmtlcm5lbC9icGYvY29yZS5jOjM0MTY6dTY0IGJwZl9jaGVja190aW1lZF9tYXlfZ290byhzdHJ1Y3QgYnBmX3RpbWVkX21heV9nb3RvICpwKVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MTcte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NzE9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyAqIGNvbnN0IGJwZl9tYXBfdHlwZXNbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkwLSAqL1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjkxOmludCBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oYnBmcHRyX3QgdWFkZHIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTItXFx0XFx0XFx0ICAgICBzaXplX3QgZXhwZWN0ZWRfc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MDY9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTIxLVxcdC8qIHJ1biBlQlBGIHZlcmlmaWVyICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzEyMjpcXHRlcnIgPSBicGZfY2hlY2soXFx1MDAyNnByb2csIGF0dHIsIHVhdHRyLCBhdHRyX2xvZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzEyMy1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM2MjQ9c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzU2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM3NTc6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzU4LVxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZ0Z3RfaW5mbyk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01MDg5PXN0YXRpYyBpbnQgYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MTAzLVxcdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfcHJvZ19pbmZvLCBhdHRhY2hfYnRmX2lkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MTA0OlxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIGxlbiwgaW5mb19sZW4pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxMDUtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUzNzk9c3RhdGljIGludCBicGZfbWFwX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM4OS1cXHRsZW4gPSBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX21hcF9pbmZvLCBoYXNoX3NpemUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUzOTA6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTM5MS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTQ1MD1zdGF0aWMgaW50IGJwZl9idGZfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDU4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0NTk6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDYwLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDY2PXN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDc2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0Nzc6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKGluZm8pLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ3OC1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTUwOT1zdGF0aWMgaW50IHRva2VuX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUxNy1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTE4OlxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZigqdWluZm8pLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUxOS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjI5ND1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzAyLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzMDM6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVhdHRyLCBzaXplb2YoYXR0ciksIHNpemUpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMDQtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTQtXFx0aWYgKGNtZCBcXHUwMDI2IEJQRl9DT01NT05fQVRUUlMpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzE1OlxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0cl9jb21tb24sXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxNi1cXHRcXHRcXHRcXHRcXHQgICAgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9jb21tb25fYXR0ciwgbG9nX3RydWVfc2l6ZSksXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDg2PWludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTYtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTA5NzpcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCBOVUxMLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwOTgtXFx0XFx0XFx0XFx0ICAgICAgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VhdHRhY2hfYnRmX2lkLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYyMj1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjM1LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MzY6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoYnRmLCBwcm9nLCBpZHNbaV0sIFxcdTAwMjZ0Z3RfaW5mbyk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYzNy1cXHRcXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTU3PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTgtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5Oi8qIGJwZl9jaGVjaygpIGlzIGEgc3RhdGljIGNvZGUgYW5hbHl6ZXIgdGhhdCB3YWxrcyBlQlBGIHByb2dyYW1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTIwNTk9c3RhdGljIGludCBwcm9jZXNzX2tmX2FyZ19wdHJfdG9fcmJ0cmVlX25vZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjA3MC0gKiBMU00gaG9va3MgYW5kIGl0ZXJzIChib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSkgYXJlIHNhZmUuXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyMDcxOiAqIEFueSBzbGVlcGFibGUgcHJvZ3MgYXJlIGFsc28gc2FmZSBzaW5jZSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCgpIGVuZm9yY2VcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwNzItICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MDk2PXN0YXRpYyBib29sIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkxMDktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MTEwOmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTExMS1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTIzPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTUzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTU1NDpcXHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIHByb2csIHRndF9wcm9nLCBidGZfaWQsIFxcdTAwMjZ0Z3RfaW5mbyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NTU1LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MjItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjIzOmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2MjQtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwNTY9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDcwLS8qXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDcxOiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3Mi0gKiBvbmNlIHRoZSBwcm9ncmFtJ3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAwNzk9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxOTUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTk2OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5Ny1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIxMC1cXHQvKiAnc3RydWN0IGJwZl92ZXJpZmllcl9lbnYnIGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCdzIG5vdCBzbWFsbCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAyMTE6XFx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIxMi1cXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMwMy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMDQ6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvX2Vhcmx5KGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMwNS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMxNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMTY6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMxNy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMyOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMzA6XFx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMzMS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDM6NTcuMDk0MjkzMDI3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MzczNTYyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVmVyaWZpY2F0aW9uIEJ1ZyBIdW50aW5nIEpvdXJuZXkqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgdGhpcyBCUEYgdmVyaWZpZXIgYnVnLiBUaGUgZW50cnkgcG9pbnQsIGFzIEkgc2VlIGl0LCBpcyBgYnBmX2NoZWNrYCDigJMgdGhhdCdzIHRoZSBtYWluIGZ1bmN0aW9uIHRoZSBzeXN0ZW0gdXNlcywgYW5kIGl0J3MgY2FsbGVkIGJ5IGBicGZfcHJvZ19sb2FkYC4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIGBicGZfY2hlY2tgIHdvdWxkIGJlIHRoZSBiZXN0IGZvY3VzLCBidXQgaXQncyBhIHZlcnkgZ2VuZXJpYyBmdW5jdGlvbiwgYW5kIEkgbmVlZCB0byBiZSBtb3JlIHNwZWNpZmljLlxuXG5UaGVuLCBJIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGFuZCBsYW5kZWQgb24gYGJwZl9pc19zdGF0ZV92aXNpdGVkYC4gSSBzZWUgdGhhdCBgZG9fY2hlY2tgIHJ1bnMgdGhlIG1haW4gbG9vcCwgYW5kIGBmdW5jX3N0YXRlc19lcXVhbGAgaXMgY2FsbGVkIHRocm91Z2ggYHN0YXRlc19lcXVhbGAsIHdoaWNoIGlzIGNhbGxlZCBieSBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBhbmQgdGhhdCdzIGV4YWN0bHkgd2hhdCBJJ20gbG9va2luZyBmb3IgLSBtb3JlIHNwZWNpZmljaXR5LiBUaGF0J3MgYSBzdHJvbmcgY2FuZGlkYXRlLlxuXG5JIGFsc28gbm90aWNlZCBgYnBmX2l0ZXJfdGFza19uZXdgLCB3aGljaCBpcyBhIGtmdW5jIHRoYXQgY3JlYXRlcyB0aGUgaXRlcmF0b3IsIGlzIHJlbGV2YW50IHRvIHRoZSB0ZXN0IGNhc2UuIEJ1dCwgaGFuZyBvbi4uLiBpdCdzIGEga2Z1bmMsIG1lYW5pbmcgaXQncyBjYWxsZWQgYXQgcnVudGltZS4gU2luY2UgdGhlIGJ1ZyBpcyBpbiB0aGUgdmVyaWZpZXIsIEkgd2FudCB0byBmdXp6IHRoZSB2ZXJpZmllciwgbm90IHJ1bnRpbWUgY29kZS4gU28sIGxldCdzIGtlZXAgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBvbiB0aGUgbGlzdC4gYGJwZl9jaGVja2AgaXMgc3RpbGwgcmVsZXZhbnQgdG9vLCBnaXZlbiBpdCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIGNvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBjb2RlLCBsZXQncyBjaGVjayBmb3IgYW55IHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLCBJJ2xsIG5lZWQgdGhhdC4gV2hhdCBhYm91dCBgQ09ORklHX0JQRl9KSVRgPyBBbmQsIGlzIHRoZXJlIGFueXRoaW5nIHJlbGF0ZWQgdG8gYENPTkZJR19UQVNLU19SQ1VgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBUaGUgdGVzdCBjYXNlIHVzZXMgYGJwZl9pdGVyX3Rhc2tfbmV3YCBzbyBsZXQncyBjaGVjayBpdCBpbiBga2VybmVsL2JwZi90YXNrX2l0ZXIuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjkzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjA0LjYzMTY1MjIxOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxOTM1MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX3Rhc2tfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdGFza19pdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90YXNrX2l0ZXIuYz0xMTE0PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMTUtXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMTE2Ol9fYnBmX2tmdW5jIGludCBicGZfaXRlcl90YXNrX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFzayAqaXQsXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMTE3LVxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19fbnVsbGFibGUsIHVuc2lnbmVkIGludCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDQ6MDUuMDkzNjAwMTY1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODU3NzM0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gYHRhc2tfaXRlci5jYCBmb3IgQlBGIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCdzIEJQRiBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0YXNrcywgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYW55IHRhc2stc3BlY2lmaWMgQlBGIGNvbmZpZ3VyYXRpb25zIGlzIGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzZXR0aW5ncyBvciBjb25kaXRpb25zIGRlZmluZWQgaW4gdGhpcyBmaWxlLiBJdCdzIHRpbWUgdG8gY2hlY2sgaWYgdGhlIGNvZGUgaGFzIGFueXRoaW5nIG9mIG5vdGUuIExldCBtZSB0YWtlIGEgbG9vayBpbnNpZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjMyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDQ6MDguMDc5Mzc1ODk5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI5NzUxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFza19pdGVyLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjA4LjE4MjM1NDc5NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzUzMDM4Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIEJQRiBUZXN0IENvbmZpZ3VyYXRpb24gYW5kIFJDVSBVc2FnZSoqXG5cblJpZ2h0LCBsZXQncyBzZWUuLi4gdGhpcyBjb2RlJ3MgY29tcGlsZWQgd2l0aCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIG9idmlvdXMgb25lLCBidXQgYXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZiBoZXJlPyBDcnVjaWFsIHRvIGNoZWNrLCBiZWNhdXNlIGRlcGVuZGVuY2llcyBjYW4gYmUgc3VidGxlIGluIEJQRi5cblxuTm93LCBJIHNlZSB0aGUgdGVzdCBjb2RlIG1ha2VzIHVzZSBvZiBgYnBmX3JjdV9yZWFkX2xvY2tgLiBPa2F5LCB0aGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byBzb21lIHNoYXJlZCByZXNvdXJjZSwgYW5kIHRoZSBjb2RlIGlzIGNhcmVmdWxseSBhZGhlcmluZyB0byBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIHNlbWFudGljcy4gR290dGEgbWFrZSBzdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCAqd2h5KiB0aGV5J3JlIHVzaW5nIFJDVSBoZXJlLiBXaGF0J3MgdGhlIGNyaXRpY2FsIHNlY3Rpb24/IFdoYXQgZGF0YSBpcyBiZWluZyBwcm90ZWN0ZWQ/XG5cbk15IG5leHQgaW1tZWRpYXRlIHN0ZXAgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgYnBmX3JjdV9yZWFkX2xvY2tgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIHVzZSBoZXJlIGlzIGJvdGggY29ycmVjdCBhbmQgZWZmaWNpZW50LiBMb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGZvciBkZWFkbG9ja3MsIG1pc3NlZCB1cGRhdGVzLCBvciBpbmVmZmljaWVudCBjcml0aWNhbCBzZWN0aW9ucyB3aXRoIFJDVS4gR290dGEgZG91YmxlIGNoZWNrIHRoYXQgdGhlIHVubG9ja3MgYXJlIHByZXNlbnQgYW5kIGNvcnJlY3RseSBtYXRjaGVkIHdpdGggdGhlIGxvY2tzLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGFuZCBrZXJuZWwgYXJlIHBsYXlpbmcgbmljZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjEzLjUzNTM5NjI2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjIzOTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmN1X3JlYWRfbG9ja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz0zMzQyPV9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZG9ubHlfY2FzdChjb25zdCB2b2lkICpvYmpfX2lnbiwgdTMyIGJ0Zl9pZF9faylcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTMzNDYtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MzM0NzpfX2JwZl9rZnVuYyB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMzM0OC17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODg1PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmRvbmx5X2Nhc3QsIEtGX0ZBU1RDQUxMKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4ODY6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yY3VfcmVhZF9sb2NrKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4ODctQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yY3VfcmVhZF91bmxvY2spXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDQ0ND1zdGF0aWMgYm9vbCBpbl9zbGVlcGFibGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00NDQ4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0NDQ5Oi8qIFRoZSBub24tc2xlZXBhYmxlIHByb2dyYW1zIGFuZCBzbGVlcGFibGUgcHJvZ3JhbXMgd2l0aCBleHBsaWNpdCBicGZfcmN1X3JlYWRfbG9jaygpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ0NTAtICogY2FuIGRlcmVmZXJlbmNlIFJDVSBwcm90ZWN0ZWQgcG9pbnRlcnMgYW5kIHJlc3VsdCBpcyBQVFJfVFJVU1RFRC5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01ODIwPXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX2J0Zl9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OTI5LVxcdFxcdCAqICdjZ3JvdXBzJyBwb2ludGVyIGlzIHVudHJ1c3RlZCBpZiB0YXNrLVxcdTAwM2VjZ3JvdXBzIGRlcmVmZXJlbmNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5MzA6XFx0XFx0ICogaGFwcGVuZWQgaW4gYSBzbGVlcGFibGUgcHJvZ3JhbSBvdXRzaWRlIG9mIGJwZl9yY3VfcmVhZF9sb2NrKClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTkzMS1cXHRcXHQgKiBzZWN0aW9uLiBJbiBhIG5vbi1zbGVlcGFibGUgcHJvZ3JhbSBpdCdzIHRydXN0ZWQgd2hpbGUgaW4gUkNVIENTIChha2EgTUVNX1JDVSkuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAwOTc9c3RhdGljIGludCBjaGVja19yZXNvdXJjZV9sZWFrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgZXhjZXB0aW9uX2V4aXQsIGJvb2wgY2hlY2tfbG9jaywgY29uc3QgY2hhciAqcHJlZml4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwMTE3LVxcdGlmIChjaGVja19sb2NrIFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlY3VyX3N0YXRlLVxcdTAwM2VhY3RpdmVfcmN1X2xvY2tzKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwMTE4OlxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgY2Fubm90IGJlIHVzZWQgaW5zaWRlIGJwZl9yY3VfcmVhZF9sb2NrLWVkIHJlZ2lvblxcXFxuXFxcIiwgcHJlZml4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTAxMTktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExMzc9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTU4LVxcdEtGX2JwZl9yZG9ubHlfY2FzdCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNTk6XFx0S0ZfYnBmX3JjdV9yZWFkX2xvY2ssXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTYwLVxcdEtGX2JwZl9yY3VfcmVhZF91bmxvY2ssXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEyMzE9QlRGX0lEKGZ1bmMsIGJwZl9yZG9ubHlfY2FzdClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMzI6QlRGX0lEKGZ1bmMsIGJwZl9yY3VfcmVhZF9sb2NrKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIzMy1CVEZfSUQoZnVuYywgYnBmX3JjdV9yZWFkX3VubG9jaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTM1Nz1zdGF0aWMgYm9vbCBpc19rZnVuY19yZXRfbnVsbChzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzY1OnN0YXRpYyBib29sIGlzX2tmdW5jX2JwZl9yY3VfcmVhZF9sb2NrKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjYte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTM2NzpcXHRyZXR1cm4gbWV0YS1cXHUwMDNlZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JjdV9yZWFkX2xvY2tdO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM2OC19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTMwMTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE1MS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxNTI6XFx0cmN1X2xvY2sgPSBpc19rZnVuY19icGZfcmN1X3JlYWRfbG9jayhcXHUwMDI2bWV0YSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTUzLVxcdHJjdV91bmxvY2sgPSBpc19rZnVuY19icGZfcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZtZXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDQ6MTMuNjAxNjM5NzA4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTcwMzkwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEJQRiBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYGJwZl9yY3VfcmVhZF9sb2NrYC4gSSBzZWUgaXQncyBkZWZpbmVkIHdpdGhpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgIGFuZCBjb21waWxlZCB1bmRlciB0aGUgdW1icmVsbGEgb2YgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbi4gSG93ZXZlciwgbXkgZ3V0IHRlbGxzIG1lIHRoZXJlJ3Mgc29tZXRoaW5nIGVsc2UgYXQgcGxheSwgZXNwZWNpYWxseSB3aXRoIG15IGJhY2tncm91bmQgaW4gQlBGOyBJJ20gcHJldHR5IHN1cmUgYENPTkZJR19ERUJVR19JTkZPX0JURmAgaXMgb2Z0ZW4gY3J1Y2lhbCwgc3BlY2lmaWNhbGx5IGZvciBrZnVuY3MgYW5kIGFueXRoaW5nIEJURi1kZXBlbmRlbnQuIE15IGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBCVEYgaXMgcXVpdGUgcHJldmFsZW50IGhlcmUuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lczogaXMgYENPTkZJR19ERUJVR19JTkZPX0JURmAgKnJlcXVpcmVkKiBoZXJlPyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIGNvbmZpcm0gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxNTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowNDoxNy45OTg2ODIwNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ4ODUwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0RFQlVHX0lORk9fQlRGXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9NDA9aWZlcSAoJChDT05GSUdfU1lTRlMpLHkpXFxua2VybmVsL2JwZi9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICs9IHN5c2ZzX2J0Zi5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS00Mi1lbmRpZlxcbi0tXFxua2VybmVsL2JwZi9idGYuYz02Mzg2PXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfYmFzZShzdHJ1Y3QgYnRmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02MzkxLVxcbmtlcm5lbC9icGYvYnRmLmM6NjM5MjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSlcXG5rZXJuZWwvYnBmL2J0Zi5jLTYzOTMtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTY0NzI9c3RhdGljIF9fdTMyIGJ0Zl9yZWxvY2F0ZV9pZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIF9fdTMyIGlkKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NDc4LVxcbmtlcm5lbC9icGYvYnRmLmM6NjQ3OTojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTY0ODAtXFxua2VybmVsL2JwZi9idGYuYz02NDgxPXN0YXRpYyBzdHJ1Y3QgYnRmICpidGZfcGFyc2VfbW9kdWxlKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lLCBjb25zdCB2b2lkICpkYXRhLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy02NTc2LVxcbmtlcm5lbC9icGYvYnRmLmM6NjU3NzojZW5kaWYgLyogQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVMgKi9cXG5rZXJuZWwvYnBmL2J0Zi5jLTY1NzgtXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg0NjM9ZW51bSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg0NjYtXFxua2VybmVsL2JwZi9idGYuYzo4NDY3OiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODQ2OC1zdHJ1Y3QgYnRmX21vZHVsZSB7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTg2MDU9ZnNfaW5pdGNhbGwoYnRmX21vZHVsZV9pbml0KTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg2MDY6I2VuZGlmIC8qIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTICovXFxua2VybmVsL2JwZi9idGYuYy04NjA3LVxcbmtlcm5lbC9icGYvYnRmLmM9ODYwOD1zdHJ1Y3QgbW9kdWxlICpidGZfdHJ5X2dldF9tb2R1bGUoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy04NjEwLVxcdHN0cnVjdCBtb2R1bGUgKnJlcyA9IE5VTEw7XFxua2VybmVsL2JwZi9idGYuYzo4NjExOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODYxMi1cXHRzdHJ1Y3QgYnRmX21vZHVsZSAqYnRmX21vZCwgKnRtcDtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODYzOD1zdGF0aWMgc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSlcXG5rZXJuZWwvYnBmL2J0Zi5jLTg2Mzkte1xcbmtlcm5lbC9icGYvYnRmLmM6ODY0MDojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NDEtXFx0c3RydWN0IGJ0Zl9tb2R1bGUgKmJ0Zl9tb2QsICp0bXA7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg2NTEtXFxua2VybmVsL2JwZi9idGYuYzo4NjUyOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODY1My1cXHRtdXRleF9sb2NrKFxcdTAwMjZidGZfbW9kdWxlX211dGV4KTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODY2OD1zdGF0aWMgaW50IGNoZWNrX2J0Zl9rY29uZmlncyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGNvbnN0IGNoYXIgKmZlYXR1cmUpXFxua2VybmVsL2JwZi9idGYuYy04NjY5LXtcXG5rZXJuZWwvYnBmL2J0Zi5jOjg2NzA6XFx0aWYgKCFtb2R1bGUgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEYpKSB7XFxua2VybmVsL2JwZi9idGYuYy04NjcxLVxcdFxcdHByX2VycihcXFwibWlzc2luZyB2bWxpbnV4IEJURiwgY2Fubm90IHJlZ2lzdGVyICVzXFxcXG5cXFwiLCBmZWF0dXJlKTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtODY3My1cXHR9XFxua2VybmVsL2JwZi9idGYuYzo4Njc0OlxcdGlmIChtb2R1bGUgXFx1MDAyNlxcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFUykpXFxua2VybmVsL2JwZi9idGYuYy04Njc1LVxcdFxcdHByX3dhcm4oXFxcIm1pc3NpbmcgbW9kdWxlIEJURiwgY2Fubm90IHJlZ2lzdGVyICVzXFxcXG5cXFwiLCBmZWF0dXJlKTtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9ODgxNT1zdGF0aWMgaW50IGJ0Zl9jaGVja19rZnVuY19uYW1lKHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqZnVuY19uYW1lLCB1MzIga2luZClcXG5rZXJuZWwvYnBmL2J0Zi5jLTg4MTYte1xcbmtlcm5lbC9icGYvYnRmLmM6ODgxNzojaWZkZWYgQ09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVNcXG5rZXJuZWwvYnBmL2J0Zi5jLTg4MTgtXFx0c3RydWN0IGJ0Zl9tb2R1bGUgKmJ0Zl9tb2QsICp0bXA7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTg4MzEtXFxua2VybmVsL2JwZi9idGYuYzo4ODMyOiNpZmRlZiBDT05GSUdfREVCVUdfSU5GT19CVEZfTU9EVUxFU1xcbmtlcm5lbC9icGYvYnRmLmMtODgzMy1cXHRndWFyZChtdXRleCkoXFx1MDAyNmJ0Zl9tb2R1bGVfbXV0ZXgpO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz05NDgwPXN0YXRpYyBzdHJ1Y3QgYnBmX2NhbmRfY2FjaGUgKnBvcHVsYXRlX2NhbmRfY2FjaGUoc3RydWN0IGJwZl9jYW5kX2NhY2hlICpjYW5kcyxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtOTUwNy1cXG5rZXJuZWwvYnBmL2J0Zi5jOjk1MDg6I2lmZGVmIENPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTXFxua2VybmVsL2JwZi9idGYuYy05NTA5LXN0YXRpYyB2b2lkIF9fcHVyZ2VfY2FuZF9jYWNoZShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfY2FuZF9jYWNoZSAqKmNhY2hlLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTI3Mjg9aW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzQ0LVxcdFxcdGlmICghYnRmX3ZtbGludXgpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mjc0NTpcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfREVCVUdfSU5GT19CVEZcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yNzQ2LVxcdFxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTk4ND1zdGF0aWMgaW50IGNoZWNrX3B0cl90b19tYXBfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTk5OC1cXHRpZiAoIWJ0Zl92bWxpbnV4KSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjU5OTk6XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtYXBfcHRyIGFjY2VzcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgQ09ORklHX0RFQlVHX0lORk9fQlRGXFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjAwMC1cXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3ODAzPXN0YXRpYyBpbnQgY2hlY2tfcHNldWRvX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODE5LVxcdFxcdGlmICghYnRmX3ZtbGludXgpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc4MjA6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJrZXJuZWwgaXMgbWlzc2luZyBCVEYsIG1ha2Ugc3VyZSBDT05GSUdfREVCVUdfSU5GT19CVEY9eSBpcyBzcGVjaWZpZWQgaW4gS2NvbmZpZy5cXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzgyMS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTY4MD1zdHJ1Y3QgYnRmICpicGZfZ2V0X2J0Zl92bWxpbnV4KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Njg1OlxcdGlmICghYnRmIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4Ni1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZidGZfdm1saW51eF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDQ6MTguMDgzNTczMjA4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDMxMDM1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBCUEYgSXRlcmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGZvciB0aGlzIEJQRi1iYXNlZCB0YXNrIGl0ZXJhdGlvbi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBDT05GSUdfREVCVUdfSU5GT19CVEZgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQsIGFuZCBJIGFsc28gbmVlZCB0byBlbnN1cmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIHNvIGZhci4gQnV0LCB5b3Uga25vdyBob3cgaXQgaXMsIGxldCdzIGp1c3QgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuXG5cblNwZWNpZmljYWxseSwgdGhpcyB0ZXN0IHVzZXMgYGJwZl9pdGVyX3Rhc2tfbmV3YC4gU28sIG15IG5leHQgbW92ZSBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBga2VybmVsL2JwZi90YXNrX2l0ZXIuY2AsIGFuZCBzZWUgaWYgYGJwZl9pdGVyX3Rhc2tfbmV3YCBpdHNlbGYgaXMgZ2F0ZWQgYmVoaW5kIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGZsYWdzLiBHb3R0YSBiZSB0aG9yb3VnaCwgYW5kIGEgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIGNoZWNrIGlzIGFsd2F5cyBhIGdvb2QgaWRlYSBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIG1vcmUgY29tcGxleCBzdHVmZi4gSXQgd291bGQgYmUgaGVscGZ1bCB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwcmVjb25kaXRpb25zIHRvIGNvbnNpZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQxMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjIyLjg4NjY3ODgzOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NTAzNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX3Rhc2tfbmV3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdGFza19pdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90YXNrX2l0ZXIuYz0xMTE0PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExMTUtXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMTE2Ol9fYnBmX2tmdW5jIGludCBicGZfaXRlcl90YXNrX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFzayAqaXQsXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYy0xMTE3LVxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFza19fbnVsbGFibGUsIHVuc2lnbmVkIGludCBmbGFncylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDQ6MjIuOTkyMTg2MzA1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MjM4NjgyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQlBGIEl0ZXJhdG9yIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgYSBmdXp6aW5nIHN0cmF0ZWd5LiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IGBrZXJuZWwvYnBmL3Rhc2tfaXRlci5jYCBpcyBhbHdheXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0J3MgZ29vZDsgaXQncyBhIHN0YWJsZSB0YXJnZXQuIEkgY29uZmlybWVkIHRoaXMgYnkgY2hlY2tpbmcgdGhlIGBNYWtlZmlsZWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYGJwZl9jaGVja2Agc2luY2UgaXQncyBhIGZ1bmRhbWVudGFsIHZlcmlmaWVyIGZ1bmN0aW9uLiBIb3dldmVyLCB0aGF0J3MgYSAqdmVyeSogYnJvYWQgdGFyZ2V0LiBTbywgSSBkdWcgZGVlcGVyLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGhpZ2hsaWdodHMgdGhlIHByb2JsZW0gaW4gYHN0YWNrc2FmZWAsIHdpdGhpbiBgZnVuY19zdGF0ZXNfZXF1YWxgLCB3aGljaCBpcyBjYWxsZWQgYnkgYHN0YXRlc19lcXVhbGAsIHdoaWNoIGlzIHRoZW4gY2FsbGVkIGJ5IGBicGZfaXNfc3RhdGVfdmlzaXRlZGAuIEJpbmdvISBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgIGxvb2tzIGxpa2UgYSBtb3JlIHByb21pc2luZyBmb2N1cyBiZWNhdXNlIGl0J3Mgbm9uLXN0YXRpYyBhbmQgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgc3RhdGUgY29tcGFyaXNvbiB0aGF0J3MgYXQgdGhlIGhlYXJ0IG9mIHRoaXMgYnVnLiBJIGNvbnNpZGVyZWQgYGRvX2NoZWNrYCwgYnV0IHRoYXQncyBzdGF0aWMsIHNvIGl0J3Mgbm90IGEgZGlyZWN0IHRhcmdldC5cblxuU2luY2UgdGhpcyBidWcgaXMgYWJvdXQgUkNVLXByb3RlY3RlZCBpdGVyYXRvcnMsIGFuZCBnaXZlbiB0aGUgdGVzdCBjYXNlcywgSSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUga2Z1bmNzIGBicGZfaXRlcl90YXNrX25ld2AgYW5kIGBicGZfaXRlcl90YXNrX25leHRgLiBUaGVzZSBhcmUgdGhlIGtmdW5jcyAqdXNlZCogYnkgdGhlIGl0ZXJhdG9yIGZlYXR1cmUuIGBicGZfaXRlcl90YXNrX25ld2AgaXMgZGVmaW5lZCBhcyBgbm9pbmxpbmVgLCBidXQsIGltcG9ydGFudGx5LCBpdCdzICpub3QqIHN0YXRpYywgc28gaXQncyBnbG9iYWxseSB2aXNpYmxlLlxuXG5JbiBzdW1tYXJ5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdDpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFllc1xuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBicGZfY2hlY2tgLCBgYnBmX2lzX3N0YXRlX3Zpc2l0ZWRgLCBgYnBmX2l0ZXJfdGFza19uZXdgLCBgYnBmX2l0ZXJfdGFza19uZXh0YFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgQlBGX1NZU0NBTExgLCBgREVCVUdfSU5GT19CVEZgXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBSQ1UgcHJvdGVjdGlvbiBpc3N1ZSB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllcidzIGBzdGFja3NhZmVgIGZ1bmN0aW9uLiBUaGUgdmVyaWZpZXIgd2FzIGluY29ycmVjdGx5IG1lcmdpbmcgc3RhdGVzIHdpdGggZGlmZmVyZW50IFJDVSBwcm90ZWN0aW9uIHN0YXR1c2VzLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIG1lbW9yeSB1bnNhZmV0eS4gYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBzdGF0ZSBjb21wYXJpc29ucywgd2hpbGUgYGJwZl9jaGVja2AgaXMgcmVsYXRlZCB0byB0aGUgbW9yZSBiYXNpYyBCUEYgdmVyaWZpY2F0aW9uLCBhbmQgYGJwZl9pdGVyX3Rhc2tfbmV3YCBhbmQgYGJwZl9pdGVyX3Rhc2tfbmV4dGAgYXJlIGltcG9ydGFudCBrZnVuY3MgdG8gZm9jdXMgb24gZm9yIEJQRiBpdGVyYXRvciBmZWF0dXJlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODg3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjMyLjgxNjA1Nzg2OVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwOTAwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXJfdGFza19uZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdGFza19pdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi90YXNrX2l0ZXIuYz0xMTE2PV9fYnBmX2tmdW5jIGludCBicGZfaXRlcl90YXNrX25ldyhzdHJ1Y3QgYnBmX2l0ZXJfdGFzayAqaXQsXFxuLS1cXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExNDctXFxua2VybmVsL2JwZi90YXNrX2l0ZXIuYzoxMTQ4Ol9fYnBmX2tmdW5jIHN0cnVjdCB0YXNrX3N0cnVjdCAqYnBmX2l0ZXJfdGFza19uZXh0KHN0cnVjdCBicGZfaXRlcl90YXNrICppdClcXG5rZXJuZWwvYnBmL3Rhc2tfaXRlci5jLTExNDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNDowNDozMi44OTMxNTIxNjdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4OTc5NzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqR2xvYmFsIFNjb3BlIENoZWNrKipcblxuUmlnaHQsIHRoaXMgZmVlbHMgbGlrZSBpdCBoYXMgaW1wbGljYXRpb25zIGFjcm9zcyB0aGUgZW50aXJlIHN5c3RlbS4gV2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBnbG9iYWwuIFRpbWUgdG8gemVybyBpbiBvbiB0aGF0LiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgd2l0aCBhIGdsb2JhbCByZWFjaC5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogbGV0J3MgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gU3BlY2lmaWNhbGx5LCBsZXQncyBjb25maXJtIHRoYXQgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCBhY3R1YWxseSBvcGVyYXRlcyBhdCBhIGdsb2JhbCBsZXZlbC4gSXMgaXRzIGluZmx1ZW5jZSBsaW1pdGVkPyBPciBpcyBpdCB0cnVseSBpbXBhY3RpbmcgdGhlIHdob2xlIHN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE3OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjM2LjM4Mjk1MTk4NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NzA5NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3RhdGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zdGF0ZXMuYz0xMjE0PXN0YXRpYyB2b2lkIG1hcmtfYWxsX3NjYWxhcnNfaW1wcmVjaXNlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKnN0KVxcbi0tXFxua2VybmVsL2JwZi9zdGF0ZXMuYy0xMjM4LVxcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTIzOTppbnQgYnBmX2lzX3N0YXRlX3Zpc2l0ZWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4KVxcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTI0MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjM2LjQ5MDY2NjAzM1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTYwODk5MDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgSSdtIHRoaW5raW5nIHRoZXNlIHRoaW5ncyBteXNlbGY6XG5cbioqR2xvYmFsIFNjb3BlIFZlcmlmaWNhdGlvbioqXG5cbkFscmlnaHQsIHllcCwgd2UncmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYSBnbG9iYWwgY29udGV4dCBoZXJlLiBJbXBvcnRhbnQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCBkb2VzIGBicGZfY2hlY2tgIGJlaGF2ZSBhcyBhIGdsb2JhbGx5IHNjb3BlZCBmdW5jdGlvbiBvciB2YXJpYWJsZT8gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyIGFuZCBhc2NlcnRhaW4gaXRzIHNjb3BlLiBXZSBtdXN0IGNsYXJpZnkgd2hldGhlciB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgbG9jYWxseSwgb3IgZ2xvYmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTAyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDQ6MDQ6MzkuNDUxNTY4NDY3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM2Nzc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz01Nz1zdGF0aWMgYm9vbCBicGZfZ2xvYmFsX3BlcmNwdV9tYV9zZXQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTovKiBicGZfY2hlY2soKSBpcyBhIHN0YXRpYyBjb2RlIGFuYWx5emVyIHRoYXQgd2Fsa3MgZUJQRiBwcm9ncmFtXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYwLSAqIGluc3RydWN0aW9uIGJ5IGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIHJlZ2lzdGVyL3N0YWNrIHN0YXRlLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyMDU5PXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTIwNzAtICogTFNNIGhvb2tzIGFuZCBpdGVycyAoYm90aCBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUpIGFyZSBzYWZlLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjA3MTogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyMDcyLSAqIHRoZW0gY2FuIG9ubHkgYmUgYXR0YWNoZWQgdG8gc29tZSBzcGVjaWZpYyBob29rIHBvaW50cy5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTA5Nj1zdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTA5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTExMDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkxMTEtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTUyMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU1My1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk1NTQ6XFx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcXHUwMDI2dGd0X2luZm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU1NS1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjIyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTYyMzppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjI0LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMDU2PXN0YXRpYyBlbnVtIGJwZl9zaWdfa2V5cmluZyBicGZfY2xhc3NpZnlfa2V5cmluZyhzMzIga2V5cmluZ19pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA3MC0vKlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDA3MTogKiBWZXJpZnkgdGhlIFBLQ1MjNyBzaWduYXR1cmUgb2YgYSBsb2FkZWQgcHJvZ3JhbS4gQ2FsbGVkIGZyb20gYnBmX2NoZWNrKClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNzItICogb25jZSB0aGUgcHJvZ3JhbSdzIG1ldGFkYXRhIG1hcHMgaGF2ZSBiZWVuIHJlc29sdmVkIGludG8gdXNlZF9tYXBzLCBzb1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMDc5PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTk1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDE5NjppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAxOTctXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyMTAtXFx0LyogJ3N0cnVjdCBicGZfdmVyaWZpZXJfZW52JyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQncyBub3Qgc21hbGwsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMjExOlxcdCAqIGFsbG9jYXRlL2ZyZWUgaXQgZXZlcnkgdGltZSBicGZfY2hlY2soKSBpcyBjYWxsZWRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyMTItXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMDMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzA0OlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mb19lYXJseShlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMDUtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMTUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzE2OlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMTctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMjktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzMwOlxcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMzEtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjM5LjQ5Nzk0NDc0NloiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODc0OTE2NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpbmFsIFRob3VnaHRzIG9uIFRoaXMgQlBGIFZlcmlmaWVyIEZpeCoqXG5cbk9rYXksIHllcywgdGhpcyBpcyBhIGdsb2JhbGx5IHJlbGV2YW50IHBhdGNoLCBubyBxdWVzdGlvbiBhYm91dCBpdC4gSSdtIHNlZWluZyB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBoZXJlOiBgYnBmX2NoZWNrYCwgYGJwZl9pc19zdGF0ZV92aXNpdGVkYCwgYGJwZl9pdGVyX3Rhc2tfbmV3YCwgYW5kIGBicGZfaXRlcl90YXNrX25leHRgLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBCUEZfU1lTQ0FMTGAgYW5kIGBERUJVR19JTkZPX0JURmAuIFRoZSBsb2dpYyBiZWhpbmQgdGhlIGNoYW5nZSBpcyBzdHJhaWdodGZvcndhcmQsIHRoYW5rZnVsbHkuXG5cbkxldCBtZSBqdXN0IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoYXQgcmVhc29uaW5nLiBUaGUgY3J1eCBvZiBpdCBpcyBhZGRyZXNzaW5nIGEgbWlzc2luZyB0eXBlIGNoZWNrIHdpdGhpbiBgc3RhY2tzYWZlKClgIGZvciBgU1RBQ0tfSVRFUmAgc2xvdHMuIFdpdGhvdXQgdGhpcywgdGhlIEJQRiB2ZXJpZmllciBjb3VsZCBtaXN0YWtlbmx5IGVxdWF0ZSBpdGVyYXRvciBzdGF0ZXMgZXZlbiBpZiB0aGVpciB1bmRlcmx5aW5nIHJlZ2lzdGVyIHR5cGVzIGRpZmZlciDigJMgaW1hZ2luZSBvbmUgYmVpbmcgUkNVLXByb3RlY3RlZCBhbmQgdGhlIG90aGVyIGJlY29taW5nIHVudHJ1c3RlZCBhZnRlciBhbiBSQ1UgdW5sb2NrISBUaGlzLCBvZiBjb3Vyc2UsIHdvdWxkIG9wZW4gdGhlIGRvb3IgdG8gdW5zYWZlIHByb2dyYW1zIGdhaW5pbmcgYWNjZXB0YW5jZSwgYWxsb3dpbmcgYWNjZXNzIHRvIGl0ZXJhdG9ycyBvdXRzaWRlIGxlZ2l0aW1hdGUgUkNVIGNyaXRpY2FsIHNlY3Rpb25zLlxuXG5UaGUgZml4IGlzIGNsZWFybHkgZnVuY3Rpb25hbCwgaW1wYWN0aW5nIHRoZSBjb3JlIEJQRiB2ZXJpZmllcidzIGxvZ2ljLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciB0aGlzIGtpbmQgb2YgdnVsbmVyYWJpbGl0eSwgZnV6emluZyB0aGlzIGlzIGFic29sdXRlbHkgZXNzZW50aWFsLlxuXG5SaWdodCwgSSdtIGNvbWZvcnRhYmxlIHdpdGggdGhpcy4gSSdsbCBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MzgsIk91dHB1dFRva2VucyI6MjAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA0OjA0OjQ2LjM3Mjg2NDY5NloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODE4MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImJwZl9pc19zdGF0ZV92aXNpdGVkXCIsXG4gICAgXCJicGZfaXRlcl90YXNrX25ld1wiLFxuICAgIFwiYnBmX2l0ZXJfdGFza19uZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIHR5cGUgY2hlY2sgaW4gdGhlIEJQRiB2ZXJpZmllcidzIGBzdGFja3NhZmUoKWAgZnVuY3Rpb24gZm9yIGBTVEFDS19JVEVSYCBzbG90cy4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgdmVyaWZpZXIgY291bGQgaW5jb3JyZWN0bHkgY29uc2lkZXIgdHdvIGl0ZXJhdG9yIHN0YXRlcyBhcyBlcXVpdmFsZW50IGV2ZW4gaWYgdGhlaXIgcmVnaXN0ZXIgdHlwZXMgZGlmZmVyZWQgKGUuZy4sIG9uZSBiZWluZyBSQ1UtcHJvdGVjdGVkIGFuZCB0aGUgb3RoZXIgYmVpbmcgdW50cnVzdGVkIGFmdGVyIGFuIFJDVSB1bmxvY2spLiBUaGlzIGNvdWxkIGxlYWQgdG8gdGhlIHZlcmlmaWVyIGFjY2VwdGluZyB1bnNhZmUgcHJvZ3JhbXMgdGhhdCBhY2Nlc3MgaXRlcmF0b3JzIG91dHNpZGUgb2YgUkNVIGNyaXRpY2FsIHNlY3Rpb25zLiBUaGUgZml4IGlzIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdHMgdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwiYnBmX2lzX3N0YXRlX3Zpc2l0ZWRcIixcbiAgICBcImJwZl9pdGVyX3Rhc2tfbmV3XCIsXG4gICAgXCJicGZfaXRlcl90YXNrX25leHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgdHlwZSBjaGVjayBpbiB0aGUgQlBGIHZlcmlmaWVyJ3MgYHN0YWNrc2FmZSgpYCBmdW5jdGlvbiBmb3IgYFNUQUNLX0lURVJgIHNsb3RzLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSB2ZXJpZmllciBjb3VsZCBpbmNvcnJlY3RseSBjb25zaWRlciB0d28gaXRlcmF0b3Igc3RhdGVzIGFzIGVxdWl2YWxlbnQgZXZlbiBpZiB0aGVpciByZWdpc3RlciB0eXBlcyBkaWZmZXJlZCAoZS5nLiwgb25lIGJlaW5nIFJDVS1wcm90ZWN0ZWQgYW5kIHRoZSBvdGhlciBiZWluZyB1bnRydXN0ZWQgYWZ0ZXIgYW4gUkNVIHVubG9jaykuIFRoaXMgY291bGQgbGVhZCB0byB0aGUgdmVyaWZpZXIgYWNjZXB0aW5nIHVuc2FmZSBwcm9ncmFtcyB0aGF0IGFjY2VzcyBpdGVyYXRvcnMgb3V0c2lkZSBvZiBSQ1UgY3JpdGljYWwgc2VjdGlvbnMuIFRoZSBmaXggaXMgZnVuY3Rpb25hbCBhbmQgYWZmZWN0cyB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowgl6hb[1] Phase: Succeeded StartedAt: 2026-08-07 04:05:09 +0000 UTC FinishedAt: 2026-08-07 04:05:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 04:05:09 +0000 UTC FinishedAt: 2026-08-07 04:05:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2] Phase: Succeeded StartedAt: 2026-08-07 04:05:09 +0000 UTC FinishedAt: 2026-08-07 07:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:05:09 +0000 UTC FinishedAt: 2026-08-07 07:54:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:05:09 +0000 UTC FinishedAt: 2026-08-07 04:05:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:05:09 +0000 UTC FinishedAt: 2026-08-07 04:05:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"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-workflowgl6hb/series-workflowgl6hb-convert-artifact-3839574676/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:05:19 +0000 UTC FinishedAt: 2026-08-07 04:26:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:05:19 +0000 UTC FinishedAt: 2026-08-07 04:26:33 +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:*7590478d-e3ac-4678-959a-ccdf447edffe,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-workflowgl6hb/series-workflowgl6hb-convert-artifact-3839574676/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": "d4d2dab2-d1c4-49b7-8539-ad4ec16868e1", "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-workflowgl6hb/series-workflowgl6hb-build-action-1413402386/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:05:19 +0000 UTC FinishedAt: 2026-08-07 04:26:11 +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:*7590478d-e3ac-4678-959a-ccdf447edffe,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-workflowgl6hb/series-workflowgl6hb-convert-artifact-3839574676/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": "d4d2dab2-d1c4-49b7-8539-ad4ec16868e1", "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-workflowgl6hb/series-workflowgl6hb-build-action-1413402386/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:26:33 +0000 UTC FinishedAt: 2026-08-07 04:26:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:26:33 +0000 UTC FinishedAt: 2026-08-07 04:26:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:26:33 +0000 UTC FinishedAt: 2026-08-07 04:26:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:26:33 +0000 UTC FinishedAt: 2026-08-07 04:26:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-workflowgl6hb/series-workflowgl6hb-convert-artifact-2319568723/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:26:43 +0000 UTC FinishedAt: 2026-08-07 04:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:26:43 +0000 UTC FinishedAt: 2026-08-07 04:28:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d4d2dab2-d1c4-49b7-8539-ad4ec16868e1,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-workflowgl6hb/series-workflowgl6hb-build-action-1413402386/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-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:28:41 +0000 UTC FinishedAt: 2026-08-07 04:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:28:41 +0000 UTC FinishedAt: 2026-08-07 04:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:28:41 +0000 UTC FinishedAt: 2026-08-07 04:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:28:41 +0000 UTC FinishedAt: 2026-08-07 04:49:51 +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:*7590478d-e3ac-4678-959a-ccdf447edffe,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-workflowgl6hb/series-workflowgl6hb-convert-artifact-2319568723/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": "750dae7f-fee1-48fe-a699-f62663f651c8", "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-workflowgl6hb/series-workflowgl6hb-build-action-3208119431/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:28:41 +0000 UTC FinishedAt: 2026-08-07 04:49:41 +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:*7590478d-e3ac-4678-959a-ccdf447edffe,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-workflowgl6hb/series-workflowgl6hb-convert-artifact-2319568723/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": "750dae7f-fee1-48fe-a699-f62663f651c8", "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-workflowgl6hb/series-workflowgl6hb-build-action-3208119431/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:49:51 +0000 UTC FinishedAt: 2026-08-07 04:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:49:51 +0000 UTC FinishedAt: 2026-08-07 04:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:49:51 +0000 UTC FinishedAt: 2026-08-07 04:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:49:51 +0000 UTC FinishedAt: 2026-08-07 04:51:47 +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:*750dae7f-fee1-48fe-a699-f62663f651c8,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-workflowgl6hb/series-workflowgl6hb-build-action-3208119431/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-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:51:57 +0000 UTC FinishedAt: 2026-08-07 07:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:51:57 +0000 UTC FinishedAt: 2026-08-07 07:54:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"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:*d4d2dab2-d1c4-49b7-8539-ad4ec16868e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*750dae7f-fee1-48fe-a699-f62663f651c8,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-workflowgl6hb/series-workflowgl6hb-build-action-1413402386/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-workflowgl6hb/series-workflowgl6hb-build-action-3208119431/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:51:57 +0000 UTC FinishedAt: 2026-08-07 04:52:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:51:57 +0000 UTC FinishedAt: 2026-08-07 04:52:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"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-workflowgl6hb/series-workflowgl6hb-convert-artifact-3300218828/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:51:57 +0000 UTC FinishedAt: 2026-08-07 04:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:51:57 +0000 UTC FinishedAt: 2026-08-07 04:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:51:57 +0000 UTC FinishedAt: 2026-08-07 04:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:52:07 +0000 UTC FinishedAt: 2026-08-07 07:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl6hb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_is_state_visited","bpf_iter_task_new","bpf_iter_task_next"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","DEBUG_INFO_BTF"],"series_id":"e60f1501-c9d8-490c-97dd-2d3121def30a","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-07 04:52:07 +0000 UTC FinishedAt: 2026-08-07 07:54:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d4d2dab2-d1c4-49b7-8539-ad4ec16868e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*750dae7f-fee1-48fe-a699-f62663f651c8,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-workflowgl6hb/series-workflowgl6hb-build-action-1413402386/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-workflowgl6hb/series-workflowgl6hb-build-action-3208119431/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-workflowgl6hb/series-workflowgl6hb-convert-artifact-3300218828/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,}