Name: series-workflowq9cdg Phase: Succeeded StartedAt: 2026-07-01 09:27:25 +0000 UTC FinishedAt: 2026-07-01 10:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9cdg[0] Phase: Succeeded StartedAt: 2026-07-01 09:27:25 +0000 UTC FinishedAt: 2026-07-01 09:41:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9cdg[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 09:27:25 +0000 UTC FinishedAt: 2026-07-01 09:41:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "be5c93fa674f0fc3c8f359c2143abce6bbb422e6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "be5c93fa674f0fc3c8f359c2143abce6bbb422e6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT" ], "series_id": "33aec87f-677e-43f2-af4d-e6ea93bf5531" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_jit_emit_insn", "bpf_int_jit_compile" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBhcmNoaXRlY3R1cmUgY29kZSB0byBvcHRpbWl6ZSBwZXItQ1BVIHZhcmlhYmxlIGFjY2Vzcy4gSXQgaW50cm9kdWNlcyBhIG5ldyBwZXJjcHUuaCBoZWFkZXIgd2l0aCBvcHRpbWl6ZWQgaW5saW5lIG9wZXJhdGlvbnMsIHVwZGF0ZXMgY29udGV4dCBzd2l0Y2ggbG9naWMsIGFuZCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byB1c2UgdGhlIG5ldyBwZXItQ1BVIG9mZnNldC4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBtYWtpbmcgdGhlbSBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NGUzMTMwN2Q5N2RkMjYyZmFmNDQxMjY2ZWZiYzNlZmIwMTk4ZTA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwOTozOTowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaFxuaW5kZXggZTllOGJhODNlNjMyZjkuLjEzN2E0OTQ4ODMyNWU0IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaFxuQEAgLTkxLDExICYjNDM7OTEsNyBAQFxuIFxuICNpZmRlZiBDT05GSUdfU01QXG4gLm1hY3JvIGFzbV9wZXJfY3B1IGRzdCBzeW0gdG1wXG4tXHRsdyAgICBcXHRtcCwgVEFTS19USV9DUFVfTlVNKHRwKVxuLVx0c2xsaSAgXFx0bXAsIFxcdG1wLCBSSVNDVl9MR1BUUlxuLVx0bGEgICAgXFxkc3QsIF9fcGVyX2NwdV9vZmZzZXRcbi1cdGFkZCAgIFxcZHN0LCBcXGRzdCwgXFx0bXBcbi1cdFJFR19MIFxcdG1wLCAwKFxcZHN0KVxuJiM0MztcdFJFR19MIFxcdG1wLCBUQVNLX1RJX1BDUFVfT0ZGU0VUKHRwKVxuIFx0bGEgICAgXFxkc3QsIFxcc3ltXG4gXHRhZGQgICBcXGRzdCwgXFxkc3QsIFxcdG1wXG4gLmVuZG1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmhcbmluZGV4IDA5YmI1ZjU3YTlkMzQ2Li42ZjVkNzAzMTNjODNlZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9pby5oXG5AQCAtNTYsNiAmIzQzOzU2LDggQEBcbiAjZGVmaW5lIF9faW9fcGJ3KClcdFJJU0NWX0ZFTkNFKGlvdywgbylcbiAjZGVmaW5lIF9faW9fcGF3KClcdFJJU0NWX0ZFTkNFKG8sIGlvKVxuIFxuJiM0MzsjZGVmaW5lIFBDSV9JT19BRERSKGFkZHIpXHQoKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZylQQ0lfSU9CQVNFICYjNDM7IChhZGRyKSkpXG4mIzQzO1xuIC8qXG4gICogQWNjZXNzZXMgZnJvbSBhIHNpbmdsZSBoYXJ0IHRvIGEgc2luZ2xlIEkvTyBhZGRyZXNzIG11c3QgYmUgb3JkZXJlZC4gIFRoaXNcbiAgKiBhbGxvd3MgdXMgdG8gdXNlIHRoZSByYXcgcmVhZCBtYWNyb3MsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGZlbmNlIGJlZm9yZSBhbmRcbkBAIC0xMDIsMTIgJiM0MzsxMDQsMTQgQEAgX19pb19yZWFkc19pbnMocmVhZHMsIHUzMiwgbCwgX19pb19icigpLCBfX2lvX2FyKGFkZHIpKVxuICNkZWZpbmUgcmVhZHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fcmVhZHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpXG4gI2RlZmluZSByZWFkc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19yZWFkc2woYWRkciwgYnVmZmVyLCBjb3VudClcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVNfSU9QT1JUXG4gX19pb19yZWFkc19pbnMoaW5zLCAgdTgsIGIsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKVxuIF9faW9fcmVhZHNfaW5zKGlucywgdTE2LCB3LCBfX2lvX3BicigpLCBfX2lvX3BhcihhZGRyKSlcbiBfX2lvX3JlYWRzX2lucyhpbnMsIHUzMiwgbCwgX19pb19wYnIoKSwgX19pb19wYXIoYWRkcikpXG4tI2RlZmluZSBpbnNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zYihQQ0lfSU9CQVNFICYjNDM7IChhZGRyKSwgYnVmZmVyLCBjb3VudClcbi0jZGVmaW5lIGluc3coYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnN3KFBDSV9JT0JBU0UgJiM0MzsgKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuLSNkZWZpbmUgaW5zbChhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc2woUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpXG4mIzQzOyNkZWZpbmUgaW5zYihhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc2IoUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4mIzQzOyNkZWZpbmUgaW5zdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3coUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4mIzQzOyNkZWZpbmUgaW5zbChhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc2woUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4mIzQzOyNlbmRpZlxuIFxuIF9faW9fd3JpdGVzX291dHMod3JpdGVzLCAgdTgsIGIsIF9faW9fYncoKSwgX19pb19hdygpKVxuIF9faW9fd3JpdGVzX291dHMod3JpdGVzLCB1MTYsIHcsIF9faW9fYncoKSwgX19pb19hdygpKVxuQEAgLTExNiwyNSAmIzQzOzEyMCwzMSBAQCBfX2lvX3dyaXRlc19vdXRzKHdyaXRlcywgdTMyLCBsLCBfX2lvX2J3KCksIF9faW9fYXcoKSlcbiAjZGVmaW5lIHdyaXRlc3coYWRkciwgYnVmZmVyLCBjb3VudCkgX193cml0ZXN3KGFkZHIsIGJ1ZmZlciwgY291bnQpXG4gI2RlZmluZSB3cml0ZXNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fd3JpdGVzbChhZGRyLCBidWZmZXIsIGNvdW50KVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0hBU19JT1BPUlRcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsICB1OCwgYiwgX19pb19wYncoKSwgX19pb19wYXcoKSlcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHUxNiwgdywgX19pb19wYncoKSwgX19pb19wYXcoKSlcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHUzMiwgbCwgX19pb19wYncoKSwgX19pb19wYXcoKSlcbi0jZGVmaW5lIG91dHNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2IoUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpXG4tI2RlZmluZSBvdXRzdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHN3KFBDSV9JT0JBU0UgJiM0MzsgKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuLSNkZWZpbmUgb3V0c2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzbChQQ0lfSU9CQVNFICYjNDM7IChhZGRyKSwgYnVmZmVyLCBjb3VudClcbiYjNDM7I2RlZmluZSBvdXRzYihhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHNiKFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuJiM0MzsjZGVmaW5lIG91dHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3coUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4mIzQzOyNkZWZpbmUgb3V0c2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzbChQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcbiYjNDM7I2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR182NEJJVFxuIF9faW9fcmVhZHNfaW5zKHJlYWRzLCB1NjQsIHEsIF9faW9fYnIoKSwgX19pb19hcihhZGRyKSlcbiAjZGVmaW5lIHJlYWRzcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX3JlYWRzcShhZGRyLCBidWZmZXIsIGNvdW50KVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0hBU19JT1BPUlRcbiBfX2lvX3JlYWRzX2lucyhpbnMsIHU2NCwgcSwgX19pb19wYnIoKSwgX19pb19wYXIoYWRkcikpXG4tI2RlZmluZSBpbnNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zcShQQ0lfSU9CQVNFICYjNDM7IChhZGRyKSwgYnVmZmVyLCBjb3VudClcbiYjNDM7I2RlZmluZSBpbnNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zcShQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcbiYjNDM7I2VuZGlmXG4gXG4gX19pb193cml0ZXNfb3V0cyh3cml0ZXMsIHU2NCwgcSwgX19pb19idygpLCBfX2lvX2F3KCkpXG4gI2RlZmluZSB3cml0ZXNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fd3JpdGVzcShhZGRyLCBidWZmZXIsIGNvdW50KVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0hBU19JT1BPUlRcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHU2NCwgcSwgX19pb19wYnIoKSwgX19pb19wYXcoKSlcbi0jZGVmaW5lIG91dHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3EoUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpXG4mIzQzOyNkZWZpbmUgb3V0c3EoYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzcShQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcbiYjNDM7I2VuZGlmXG4gI2VuZGlmXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtLWdlbmVyaWMvaW8uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmRhZDk3NWI1NWQwYzMxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oXG5AQCAtMCwwICYjNDM7MSwyODcgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19BU01fUEVSQ1BVX0hcbiYjNDM7I2RlZmluZSBfX0FTTV9QRVJDUFVfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWVtcHQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2FsdGVybmF0aXZlLW1hY3Jvcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9jcHVmZWF0dXJlLW1hY3Jvcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9jdXJyZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2h3Y2FwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3RocmVhZF9pbmZvLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUEVSQ1BVX1JXX09QUyhzeilcdFx0XHRcdFx0XHRcXFxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19wZXJjcHVfcmVhZF8jI3N6KHZvaWQgKnB0cilcdFx0XFxcbiYjNDM7e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRSgqKHUjI3N6ICopcHRyKTtcdFx0XHRcdFxcXG4mIzQzO31cdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHVfd3JpdGVfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVx0XFxcbiYjNDM7e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0V1JJVEVfT05DRSgqKHUjI3N6ICopcHRyLCAodSMjc3opdmFsKTtcdFx0XHRcdFxcXG4mIzQzO31cbiYjNDM7XG4mIzQzO1BFUkNQVV9SV19PUFMoOClcbiYjNDM7UEVSQ1BVX1JXX09QUygxNilcbiYjNDM7UEVSQ1BVX1JXX09QUygzMilcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfNjRCSVRcbiYjNDM7UEVSQ1BVX1JXX09QUyg2NClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9fUEVSQ1BVX0FNT19PUF9DQVNFKHNmeCwgbmFtZSwgc3osIGFtb19pbnNuKVx0XHRcdFxcXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7X19wZXJjcHVfIyNuYW1lIyNfYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVx0XHRcXFxuJiM0Mzt7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFwmIzM0O2Ftb1wmIzM0OyAjYW1vX2luc24gI3NmeCBcJiMzNDsgemVybywgJVt2YWxdLCAlW3B0cl1cJiMzNDtcdFx0XFxcbiYjNDM7XHRcdDogW3B0cl0gXCYjMzQ7JiM0MztBXCYjMzQ7ICgqKHUjI3N6ICopcHRyKVx0XHRcdFx0XFxcbiYjNDM7XHRcdDogW3ZhbF0gXCYjMzQ7clwmIzM0OyAoKHUjI3N6KSh2YWwpKVx0XHRcdFx0XFxcbiYjNDM7XHRcdDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcdFx0XHRcdFx0XHRcXFxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUXG4mIzQzOyNkZWZpbmUgUEVSQ1BVX09QKG5hbWUsIGFtb19pbnNuKVx0XHRcdFx0XHRcXFxuJiM0MztcdF9fUEVSQ1BVX0FNT19PUF9DQVNFKC53LCBuYW1lLCAzMiwgYW1vX2luc24pXHRcdFx0XFxcbiYjNDM7XHRfX1BFUkNQVV9BTU9fT1BfQ0FTRSguZCwgbmFtZSwgNjQsIGFtb19pbnNuKVxuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIFBFUkNQVV9PUChuYW1lLCBhbW9faW5zbilcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX1BFUkNQVV9BTU9fT1BfQ0FTRSgudywgbmFtZSwgMzIsIGFtb19pbnNuKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1BFUkNQVV9PUChhZGQsIGFkZClcbiYjNDM7UEVSQ1BVX09QKGFuZG5vdCwgYW5kKVxuJiM0MztQRVJDUFVfT1Aob3IsIG9yKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ3VycmVudGx5LCBvbmx5IHRoaXNfY3B1X2FkZF9yZXR1cm5feHh4KCkgcmVxdWlyZXMgYSByZXR1cm4gdmFsdWUsXG4mIzQzOyAqIGFuZCB0aGUgUEVSQ1BVX1JFVF9PUCgpIGRvZXMgbm90IGFjY291bnQgZm9yIG90aGVyIG9wZXJhdGlvbnMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9fUEVSQ1BVX0FNT19SRVRfT1BfQ0FTRShzZngsIG5hbWUsIHN6LCBhbW9faW5zbilcdFx0XFxcbiYjNDM7c3RhdGljIGlubGluZSB1IyNzelx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7X19wZXJjcHVfIyNuYW1lIyNfcmV0dXJuX2Ftb19jYXNlXyMjc3oodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbClcdFxcXG4mIzQzO3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHJlZ2lzdGVyIHUjI3N6IHJldDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGFzbSB2b2xhdGlsZSAoXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XCYjMzQ7YW1vXCYjMzQ7ICNhbW9faW5zbiAjc2Z4IFwmIzM0OyAlW3JldF0sICVbdmFsXSwgJVtwdHJdXCYjMzQ7XHRcdFxcXG4mIzQzO1x0XHQ6IFtwdHJdIFwmIzM0OyYjNDM7QVwmIzM0OyAoKih1IyNzeiAqKXB0ciksIFtyZXRdIFwmIzM0Oz1yXCYjMzQ7IChyZXQpXHRcdFxcXG4mIzQzO1x0XHQ6IFt2YWxdIFwmIzM0O3JcJiMzNDsgKCh1IyNzeikodmFsKSlcdFx0XHRcdFxcXG4mIzQzO1x0XHQ6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyZXR1cm4gcmV0ICYjNDM7IHZhbDtcdFx0XHRcdFx0XHRcXFxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUXG4mIzQzOyNkZWZpbmUgUEVSQ1BVX1JFVF9PUChuYW1lLCBhbW9faW5zbilcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbilcdFx0XFxcbiYjNDM7XHRfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0UoLmQsIG5hbWUsIDY0LCBhbW9faW5zbilcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBQRVJDUFVfUkVUX09QKG5hbWUsIGFtb19pbnNuKVx0XHRcdFx0XHRcXFxuJiM0MztcdF9fUEVSQ1BVX0FNT19SRVRfT1BfQ0FTRSgudywgbmFtZSwgMzIsIGFtb19pbnNuKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1BFUkNQVV9SRVRfT1AoYWRkLCBhZGQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBFUkNQVV84XzE2X0dFVF9TSElGVChwdHIpXHQoKCh1bnNpZ25lZCBsb25nKShwdHIpIFx1MDAyNiAweDMpICogQklUU19QRVJfQllURSlcbiYjNDM7I2RlZmluZSBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeilcdEdFTk1BU0soKHN6KSAtIDEsIDApXG4mIzQzOyNkZWZpbmUgUEVSQ1BVXzhfMTZfR0VUX1BUUjMyKHB0cilcdCgodTMyICopKCh1bnNpZ25lZCBsb25nKShwdHIpIFx1MDAyNiB+MHgzKSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUEVSQ1BVXzhfMTZfT1AobmFtZSwgYW1vX2luc24sIHN6LCBzZngsIHZhbF90eXBlLCBuZXdfdmFsX2V4cHIsIGFzbV9vcClcdFx0XHRcXFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHVfIyNuYW1lIyNfYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVx0XHRcXFxuJiM0Mzt7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUklTQ1ZfSVNBX1pBQkhBKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0cmlzY3ZfaGFzX2V4dGVuc2lvbl91bmxpa2VseShSSVNDVl9JU0FfRVhUX1pBQkhBKSkge1x0XHRcdFx0XFxcbiYjNDM7XHRcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7YW1vXCYjMzQ7ICNhbW9faW5zbiAjc2Z4IFwmIzM0OyB6ZXJvLCAlW3ZhbF0sICVbcHRyXVwmIzM0O1x0XHRcdFxcXG4mIzQzO1x0XHRcdDogW3B0cl0gXCYjMzQ7JiM0MztBXCYjMzQ7KCoodmFsX3R5cGUgKilwdHIpXHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0OiBbdmFsXSBcJiMzNDtyXCYjMzQ7KCh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikgXHUwMDI2IFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSkpXHRcXFxuJiM0MztcdFx0XHQ6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0fSBlbHNlIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHR1MzIgKnB0cjMyID0gUEVSQ1BVXzhfMTZfR0VUX1BUUjMyKHB0cik7XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRjb25zdCB1bnNpZ25lZCBsb25nIHNoaWZ0ID0gUEVSQ1BVXzhfMTZfR0VUX1NISUZUKHB0cik7XHRcdFx0XHRcXFxuJiM0MztcdFx0Y29uc3QgdTMyIG1hc2sgPSBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikgXHUwMDNjXHUwMDNjIHNoaWZ0O1x0XHRcdFx0XFxcbiYjNDM7XHRcdGNvbnN0IHZhbF90eXBlIHZhbF90cnVuYyA9ICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcilcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjYgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKTtcdFx0XHRcdFxcXG4mIzQzO1x0XHR1MzIgcmV0eCwgcmM7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHZhbF90eXBlIG5ld192YWxfdHlwZTtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGFzbSB2b2xhdGlsZSAoXHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7MDogbHIudyAlMCwgJTJcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O2FuZCAlMywgJTAsICU0XFxuXCYjMzQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcJiMzNDtzcmwgJTMsICUzLCAlNVxcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0I2FzbV9vcCBcJiMzNDsgJTMsICUzLCAlNlxcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7YW5kICUzLCAlMywgJThcXG5cJiMzNDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcJiMzNDtzbGwgJTMsICUzLCAlNVxcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7YW5kICUxLCAlMCwgJTdcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O29yICUxLCAlMSwgJTNcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O3NjLncgJTEsICUxLCAlMlxcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7Ym5leiAlMSwgMGJcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0OiBcJiMzNDs9XHUwMDI2clwmIzM0OyhyZXR4KSwgXCYjMzQ7PVx1MDAyNnJcJiMzNDsocmMpLCBcJiMzNDsmIzQzO0FcJiMzNDsoKnB0cjMyKSwgXCYjMzQ7PVx1MDAyNnJcJiMzNDsobmV3X3ZhbF90eXBlKVx0XHRcXFxuJiM0MztcdFx0XHQ6IFwmIzM0O3JcJiMzNDsobWFzayksIFwmIzM0O3JcJiMzNDsoc2hpZnQpLCBcJiMzNDtyXCYjMzQ7KHZhbF90cnVuYyksIFwmIzM0O3JcJiMzNDsofm1hc2spLFx0XHRcdFxcXG4mIzQzO1x0XHRcdCAgXCYjMzQ7clwmIzM0OyhQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpXHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0OiBcJiMzNDttZW1vcnlcJiMzNDspO1x0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0fVx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBQRVJDUFVfT1BfOF8xNihvcF9uYW1lLCBvcCwgZXhwciwgZmluYWxfb3ApXHRcdFx0XFxcbiYjNDM7XHRQRVJDUFVfOF8xNl9PUChvcF9uYW1lLCBvcCwgOCwgLmIsIHU4LCBleHByLCBmaW5hbF9vcCk7XHRcdFxcXG4mIzQzO1x0UEVSQ1BVXzhfMTZfT1Aob3BfbmFtZSwgb3AsIDE2LCAuaCwgdTE2LCBleHByLCBmaW5hbF9vcClcbiYjNDM7XG4mIzQzO1BFUkNQVV9PUF84XzE2KGFkZCwgYWRkLCB2YWwsIGFkZClcbiYjNDM7UEVSQ1BVX09QXzhfMTYoYW5kbm90LCBhbmQsIH4odmFsKSwgYW5kKVxuJiM0MztQRVJDUFVfT1BfOF8xNihvciwgb3IsIHZhbCwgb3IpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBFUkNQVV84XzE2X1JFVF9PUChuYW1lLCBhbW9faW5zbiwgc3osIHNmeCwgdmFsX3R5cGUsIG5ld192YWxfZXhwcilcdFx0XHRcXFxuJiM0MztzdGF0aWMgaW5saW5lIHZhbF90eXBlIF9fcGVyY3B1XyMjbmFtZSMjX3JldHVybl9hbW9fY2FzZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpXHRcXFxuJiM0Mzt7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUklTQ1ZfSVNBX1pBQkhBKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0cmlzY3ZfaGFzX2V4dGVuc2lvbl91bmxpa2VseShSSVNDVl9JU0FfRVhUX1pBQkhBKSkge1x0XHRcdFx0XFxcbiYjNDM7XHRcdHJlZ2lzdGVyIHZhbF90eXBlIHJldDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7YW1vXCYjMzQ7ICNhbW9faW5zbiAjc2Z4IFwmIzM0OyAlW3JldF0sICVbdmFsXSwgJVtwdHJdXCYjMzQ7XHRcdFx0XFxcbiYjNDM7XHRcdFx0OiBbcHRyXSBcJiMzNDsmIzQzO0FcJiMzNDsoKih2YWxfdHlwZSAqKXB0ciksIFtyZXRdIFwmIzM0Oz1yXCYjMzQ7KHJldClcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdDogW3ZhbF0gXCYjMzQ7clwmIzM0OygodmFsX3R5cGUpKChuZXdfdmFsX2V4cHIpIFx1MDAyNiBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpKVx0XFxcbiYjNDM7XHRcdFx0OiBcJiMzNDttZW1vcnlcJiMzNDspO1x0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0cmV0dXJuIHJldCAmIzQzOyAodmFsX3R5cGUpKChuZXdfdmFsX2V4cHIpIFx1MDAyNiBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpO1x0XHRcXFxuJiM0MztcdH0gZWxzZSB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0dTMyICpwdHIzMiA9IFBFUkNQVV84XzE2X0dFVF9QVFIzMihwdHIpO1x0XHRcdFx0XHRcXFxuJiM0MztcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaGlmdCA9IFBFUkNQVV84XzE2X0dFVF9TSElGVChwdHIpO1x0XHRcdFx0XFxcbiYjNDM7XHRcdGNvbnN0IHUzMiBtYXNrID0gKFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSBcdTAwM2NcdTAwM2Mgc2hpZnQpO1x0XHRcdFx0XFxcbiYjNDM7XHRcdGNvbnN0IHUzMiBpbnZfbWFzayA9IH5tYXNrO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGNvbnN0IHZhbF90eXBlIHZhbF90cnVuYyA9ICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcilcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjYgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKTtcdFx0XHRcdFxcXG4mIzQzO1x0XHR1MzIgb2xkLCBuZXcsIHRtcDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGFzbSB2b2xhdGlsZSAoXHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7MDogbHIudyAlMCwgJTNcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O2FuZCAlMSwgJTAsICU0XFxuXCYjMzQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcJiMzNDtzcmwgJTEsICUxLCAlNVxcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7YWRkICUxLCAlMSwgJTZcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O2FuZCAlMSwgJTEsICU3XFxuXCYjMzQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcJiMzNDtzbGwgJTEsICUxLCAlNVxcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7YW5kICUyLCAlMCwgJThcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O29yICUyLCAlMiwgJTFcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O3NjLncgJTIsICUyLCAlM1xcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7Ym5leiAlMiwgMGJcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0OiBcJiMzNDs9XHUwMDI2clwmIzM0OyhvbGQpLCBcJiMzNDs9XHUwMDI2clwmIzM0Oyh0bXApLCBcJiMzNDs9XHUwMDI2clwmIzM0OyhuZXcpLCBcJiMzNDsmIzQzO0FcJiMzNDsoKnB0cjMyKVx0XHRcdFxcXG4mIzQzO1x0XHRcdDogXCYjMzQ7clwmIzM0OyhtYXNrKSwgXCYjMzQ7clwmIzM0OyhzaGlmdCksIFwmIzM0O3JcJiMzNDsodmFsX3RydW5jKSwgXCYjMzQ7clwmIzM0OyhQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpLCBcXFxuJiM0MztcdFx0XHRcJiMzNDtyXCYjMzQ7KGludl9tYXNrKVx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHQ6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRyZXR1cm4gKHZhbF90eXBlKSh0bXAgXHUwMDNlXHUwMDNlIHNoaWZ0KTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdH1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fVxuJiM0MztcbiYjNDM7UEVSQ1BVXzhfMTZfUkVUX09QKGFkZCwgYWRkLCA4LCAuYiwgdTgsIHZhbClcbiYjNDM7UEVSQ1BVXzhfMTZfUkVUX09QKGFkZCwgYWRkLCAxNiwgLmgsIHUxNiwgdmFsKVxuJiM0MztcbiYjNDM7I2RlZmluZSBfcGNwX3Byb3RlY3Qob3AsIHBjcCwgLi4uKVx0XHRcdFx0XHRcXFxuJiM0Mzsoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRvcChyYXdfY3B1X3B0cihcdTAwMjYocGNwKSksIF9fVkFfQVJHU19fKTtcdFx0XHRcdFxcXG4mIzQzO1x0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuJiM0Mzt9KVxuJiM0MztcbiYjNDM7I2RlZmluZSBfcGNwX3Byb3RlY3RfcmV0dXJuKG9wLCBwY3AsIGFyZ3MuLi4pXHRcdFx0XHRcXFxuJiM0Mzsoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0dHlwZW9mKHBjcCkgX19yZXR2YWw7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuJiM0MztcdF9fcmV0dmFsID0gKHR5cGVvZihwY3ApKW9wKHJhd19jcHVfcHRyKFx1MDAyNihwY3ApKSwgIyNhcmdzKTtcdFxcXG4mIzQzO1x0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuJiM0MztcdF9fcmV0dmFsO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfcmVhZF8xKHBjcClcdFx0X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9yZWFkXzgsIHBjcClcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9yZWFkXzIocGNwKVx0XHRfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfMTYsIHBjcClcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9yZWFkXzQocGNwKVx0XHRfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfMzIsIHBjcClcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfNjRCSVRcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9yZWFkXzgocGNwKVx0XHRfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfNjQsIHBjcClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzEocGNwLCB2YWwpXHRfcGNwX3Byb3RlY3QoX19wZXJjcHVfd3JpdGVfOCwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfMihwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV8xNiwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfNChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV8zMiwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfOChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV82NCwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfMShwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hZGRfYW1vX2Nhc2VfOCwgcGNwLCB2YWwpXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfYWRkXzIocGNwLCB2YWwpXHRfcGNwX3Byb3RlY3QoX19wZXJjcHVfYWRkX2Ftb19jYXNlXzE2LCBwY3AsIHZhbClcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfNChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hZGRfYW1vX2Nhc2VfMzIsIHBjcCwgdmFsKVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2FkZF84KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV82NCwgcGNwLCB2YWwpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzEocGNwLCB2YWwpXHRcdFxcXG4mIzQzO19wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfYWRkX3JldHVybl9hbW9fY2FzZV84LCBwY3AsIHZhbClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfYWRkX3JldHVybl8yKHBjcCwgdmFsKVx0XHRcXFxuJiM0MztfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X2FkZF9yZXR1cm5fYW1vX2Nhc2VfMTYsIHBjcCwgdmFsKVxuJiM0MztcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzQocGNwLCB2YWwpXHRcdFxcXG4mIzQzO19wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfYWRkX3JldHVybl9hbW9fY2FzZV8zMiwgcGNwLCB2YWwpXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfYWRkX3JldHVybl84KHBjcCwgdmFsKVx0XHRcXFxuJiM0MztfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X2FkZF9yZXR1cm5fYW1vX2Nhc2VfNjQsIHBjcCwgdmFsKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfYW5kXzEocGNwLCB2YWwpXHRfcGNwX3Byb3RlY3QoX19wZXJjcHVfYW5kbm90X2Ftb19jYXNlXzgsIHBjcCwgfih2YWwpKVxuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2FuZF8yKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV8xNiwgcGNwLCB+KHZhbCkpXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfYW5kXzQocGNwLCB2YWwpXHRfcGNwX3Byb3RlY3QoX19wZXJjcHVfYW5kbm90X2Ftb19jYXNlXzMyLCBwY3AsIHZhbClcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfNjRCSVRcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hbmRfOChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hbmRub3RfYW1vX2Nhc2VfNjQsIHBjcCwgdmFsKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfb3JfMShwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV84LCBwY3AsIHZhbClcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9vcl8yKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzE2LCBwY3AsIHZhbClcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9vcl80KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzMyLCBwY3AsIHZhbClcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfNjRCSVRcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9vcl84KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzY0LCBwY3AsIHZhbClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3hjaGdfMShwY3AsIHZhbClcdF9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbClcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV94Y2hnXzIocGNwLCB2YWwpXHRfcGNwX3Byb3RlY3RfcmV0dXJuKHhjaGdfcmVsYXhlZCwgcGNwLCB2YWwpXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfeGNoZ180KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0X3JldHVybih4Y2hnX3JlbGF4ZWQsIHBjcCwgdmFsKVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3hjaGdfOChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfMShwY3AsIG8sIG4pXHRfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKVxuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfMihwY3AsIG8sIG4pXHRfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKVxuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfNChwY3AsIG8sIG4pXHRfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfOChwY3AsIG8sIG4pXHRfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKVxuJiM0MztcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnNjQocGNwLCBvLCBuKVx0dGhpc19jcHVfY21weGNoZ184KHBjcCwgbywgbilcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZkZWYgc3lzdGVtX2hhc19jbXB4Y2hnMTI4XG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfY21weGNoZzEyOChwY3AsIG8sIG4pXHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR1MTI4IHJldF9fO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR0eXBlb2YocGNwKSAqcHRyX187XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuJiM0MztcdHB0cl9fID0gcmF3X2NwdV9wdHIoXHUwMDI2KHBjcCkpO1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIChzeXN0ZW1faGFzX2NtcHhjaGcxMjgoKSlcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHJldF9fID0gY21weGNoZzEyOF9sb2NhbChwdHJfXywgKG8pLCAobikpO1x0XHRcXFxuJiM0MztcdGVsc2VcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHJldF9fID0gdGhpc19jcHVfZ2VuZXJpY19jbXB4Y2hnKHBjcCwgKG8pLCAobikpO1x0XFxcbiYjNDM7XHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cmV0X187XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO30pXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSBfX215X2NwdV9vZmZzZXQgKCgoc3RydWN0IHRocmVhZF9pbmZvICopY3VycmVudCktXHUwMDNlcGNwdV9vZmZzZXQpXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20tZ2VuZXJpYy9wZXJjcHUuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fQVNNX1BFUkNQVV9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcbmluZGV4IDBlNzFlYjgyZjkyMGNhLi43MzNiNmNkMzA2ZTQwZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcbkBAIC04OCw2ICYjNDM7ODgsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fc3dpdGNoX3RvX2VudmNmZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpXG4gXHRcdFx0OjogXCYjMzQ7clwmIzM0OyAobmV4dC1cdTAwM2V0aHJlYWQuZW52Y2ZnKSA6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19zd2l0Y2hfdG9fcGNwdV9vZmZzZXQoc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfU01QXG4mIzQzO1x0bmV4dC1cdTAwM2V0aHJlYWRfaW5mby5wY3B1X29mZnNldCA9IF9fbXlfY3B1X29mZnNldDtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICosXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICopO1xuIFxuQEAgLTEyMiw2ICYjNDM7MTI5LDcgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XFxcbiBcdGlmIChzd2l0Y2hfdG9fc2hvdWxkX2ZsdXNoX2ljYWNoZShfX25leHQpKVx0XFxcbiBcdFx0bG9jYWxfZmx1c2hfaWNhY2hlX2FsbCgpO1x0XHRcXFxuIFx0X19zd2l0Y2hfdG9fZW52Y2ZnKF9fbmV4dCk7XHRcdFx0XFxcbiYjNDM7XHRfX3N3aXRjaF90b19wY3B1X29mZnNldChfX25leHQpO1x0XHRcXFxuIFx0KChsYXN0KSA9IF9fc3dpdGNoX3RvKF9fcHJldiwgX19uZXh0KSk7XHRcdFxcXG4gfSB3aGlsZSAoMClcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmhcbmluZGV4IDU1MDE5ZmRmYTllY2FhLi5mMTBiYTYyYjYxMDE2NCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXG5AQCAtNTMsNiAmIzQzOzUzLDcgQEBcbiBzdHJ1Y3QgdGhyZWFkX2luZm8ge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRmbGFncztcdFx0LyogbG93IGxldmVsIGZsYWdzICovXG4gXHRpbnQgICAgICAgICAgICAgICAgICAgICBwcmVlbXB0X2NvdW50OyAgLyogMD1cdTAwM2VwcmVlbXB0aWJsZSwgXHUwMDNjMD1cdTAwM2VCVUcgKi9cbiYjNDM7XHRpbnRcdFx0XHRjcHU7XG4gXHQvKlxuIFx0ICogVGhlc2Ugc3RhY2sgcG9pbnRlcnMgYXJlIG92ZXJ3cml0dGVuIG9uIGV2ZXJ5IHN5c3RlbSBjYWxsIG9yXG4gXHQgKiBleGNlcHRpb24uICBTUCBpcyBhbHNvIHNhdmVkIHRvIHRoZSBzdGFjayBpdCBjYW4gYmUgcmVjb3ZlcmVkIHdoZW5cbkBAIC02MCw4ICYjNDM7NjEsOCBAQCBzdHJ1Y3QgdGhyZWFkX2luZm8ge1xuIFx0ICovXG4gXHRsb25nXHRcdFx0a2VybmVsX3NwO1x0LyogS2VybmVsIHN0YWNrIHBvaW50ZXIgKi9cbiBcdGxvbmdcdFx0XHR1c2VyX3NwO1x0LyogVXNlciBzdGFjayBwb2ludGVyICovXG4tXHRpbnRcdFx0XHRjcHU7XG4gXHR1bnNpZ25lZCBsb25nXHRcdHN5c2NhbGxfd29yaztcdC8qIFNZU0NBTExfV09SS18gZmxhZ3MgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdHBjcHVfb2Zmc2V0O1xuICNpZmRlZiBDT05GSUdfU0hBRE9XX0NBTExfU1RBQ0tcbiBcdHZvaWRcdFx0XHQqc2NzX2Jhc2U7XG4gXHR2b2lkXHRcdFx0KnNjc19zcDtcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xuaW5kZXggYTc1ZjBjZmVhMWU5ZmEuLjIwZDQ2YzI4ZmRkZTk3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xuQEAgLTM4LDYgJiM0MzszOCw3IEBAIHZvaWQgYXNtX29mZnNldHModm9pZClcbiBcdE9GRlNFVChUQVNLX1RIUkVBRF9TVU0sIHRhc2tfc3RydWN0LCB0aHJlYWQuc3VtKTtcbiBcbiBcdE9GRlNFVChUQVNLX1RJX0NQVSwgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvLmNwdSk7XG4mIzQzO1x0T0ZGU0VUKFRBU0tfVElfUENQVV9PRkZTRVQsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby5wY3B1X29mZnNldCk7XG4gXHRPRkZTRVQoVEFTS19USV9QUkVFTVBUX0NPVU5ULCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8ucHJlZW1wdF9jb3VudCk7XG4gXHRPRkZTRVQoVEFTS19USV9LRVJORUxfU1AsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby5rZXJuZWxfc3ApO1xuIFx0T0ZGU0VUKFRBU0tfVElfVVNFUl9TUCwgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvLnVzZXJfc3ApO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuY1xuaW5kZXggZjZlZjU3OTMwYjUwYTguLjc4NzY4NTRkMTYyNzkwIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvc21wYm9vdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zbXBib290LmNcbkBAIC0xOTEsNiAmIzQzOzE5MSw3IEBAIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRpZGxlKVxuIHtcbiBcdGludCByZXQ7XG4gXHR0aWRsZS1cdTAwM2V0aHJlYWRfaW5mby5jcHUgPSBjcHU7XG4mIzQzO1x0dGlkbGUtXHUwMDNldGhyZWFkX2luZm8ucGNwdV9vZmZzZXQgPSBwZXJfY3B1X29mZnNldChjcHUpO1xuIFxuIFx0cmV0ID0gc3RhcnRfc2Vjb25kYXJ5X2NwdShjcHUsIHRpZGxlKTtcbiBcdGlmICghcmV0KSB7XG5AQCAtMjA4LDYgJiM0MzsyMDksMTEgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXG4gfVxuICNlbmRpZlxuIFxuJiM0Mzt2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0X19teV9jcHVfb2Zmc2V0ID0gcGVyX2NwdV9vZmZzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIF9faW5pdCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cylcbiB7XG4gfVxuQEAgLTIzMyw2ICYjNDM7MjM5LDggQEAgYXNtbGlua2FnZSBfX3Zpc2libGUgdm9pZCBzbXBfY2FsbGluKHZvaWQpXG4gXHRtbWdyYWIobW0pO1xuIFx0Y3VycmVudC1cdTAwM2VhY3RpdmVfbW0gPSBtbTtcbiBcbiYjNDM7XHRfX215X2NwdV9vZmZzZXQgPSBwZXJfY3B1X29mZnNldChzbXBfcHJvY2Vzc29yX2lkKCkpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfUEFSQUxMRUxcbiBcdGNwdWhwX2FwX3N5bmNfYWxpdmUoKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggYzAzYzFkZTE2Yjc5YWMuLmVhYjkzZDUyNThlOWU0IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuQEAgLTEzOTUsMTUgJiM0MzsxMzk1LDggQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXHRcdFx0aWYgKHJkICE9IHJzKVxuIFx0XHRcdFx0ZW1pdF9tdihyZCwgcnMsIGN0eCk7XG4gI2lmZGVmIENPTkZJR19TTVBcbi1cdFx0XHQvKiBMb2FkIGN1cnJlbnQgQ1BVIG51bWJlciBpbiBUMSAqL1xuLVx0XHRcdGVtaXRfbHcoUlZfUkVHX1QxLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGNwdSksXG4mIzQzO1x0XHRcdGVtaXRfbGQoUlZfUkVHX1QxLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHBjcHVfb2Zmc2V0KSxcbiBcdFx0XHRcdFJWX1JFR19UUCwgY3R4KTtcbi1cdFx0XHQvKiBMb2FkIGFkZHJlc3Mgb2YgX19wZXJfY3B1X29mZnNldCBhcnJheSBpbiBUMiAqL1xuLVx0XHRcdGVtaXRfYWRkcihSVl9SRUdfVDIsICh1NjQpXHUwMDI2X19wZXJfY3B1X29mZnNldCwgZXh0cmFfcGFzcywgY3R4KTtcbi1cdFx0XHQvKiBHZXQgYWRkcmVzcyBvZiBfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gaW4gVDEgKi9cbi1cdFx0XHRlbWl0X3NoM2FkZChSVl9SRUdfVDEsIFJWX1JFR19UMSwgUlZfUkVHX1QyLCBjdHgpO1xuLVx0XHRcdC8qIExvYWQgX19wZXJfY3B1X29mZnNldFtjcHVdIGluIFQxICovXG4tXHRcdFx0ZW1pdF9sZChSVl9SRUdfVDEsIDAsIFJWX1JFR19UMSwgY3R4KTtcbiBcdFx0XHQvKiBBZGQgdGhlIG9mZnNldCB0byBSZCAqL1xuIFx0XHRcdGVtaXRfYWRkKHJkLCByZCwgUlZfUkVHX1QxLCBjdHgpO1xuICNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBhcmNoaXRlY3R1cmUgY29kZSB0byBvcHRpbWl6ZSBwZXItQ1BVIHZhcmlhYmxlIGFjY2Vzcy4gSXQgaW50cm9kdWNlcyBhIG5ldyBwZXJjcHUuaCBoZWFkZXIgd2l0aCBvcHRpbWl6ZWQgaW5saW5lIG9wZXJhdGlvbnMsIHVwZGF0ZXMgY29udGV4dCBzd2l0Y2ggbG9naWMsIGFuZCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byB1c2UgdGhlIG5ldyBwZXItQ1BVIG9mZnNldC4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBtYWtpbmcgdGhlbSBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0ZTMxMzA3ZDk3ZGQyNjJmYWY0NDEyNjZlZmJjM2VmYjAxOThlMDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDA5OjM5OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vYXNtLmgKaW5kZXggZTllOGJhODNlNjMyZjkuLjEzN2E0OTQ4ODMyNWU0IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vYXNtLmgKQEAgLTkxLDExICYjNDM7OTEsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogLm1hY3JvIGFzbV9wZXJfY3B1IGRzdCBzeW0gdG1wCi0JbHcgICAgXHRtcCwgVEFTS19USV9DUFVfTlVNKHRwKQotCXNsbGkgIFx0bXAsIFx0bXAsIFJJU0NWX0xHUFRSCi0JbGEgICAgXGRzdCwgX19wZXJfY3B1X29mZnNldAotCWFkZCAgIFxkc3QsIFxkc3QsIFx0bXAKLQlSRUdfTCBcdG1wLCAwKFxkc3QpCiYjNDM7CVJFR19MIFx0bXAsIFRBU0tfVElfUENQVV9PRkZTRVQodHApCiAJbGEgICAgXGRzdCwgXHN5bQogCWFkZCAgIFxkc3QsIFxkc3QsIFx0bXAKIC5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMDliYjVmNTdhOWQzNDYuLjZmNWQ3MDMxM2M4M2VmIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9pby5oCkBAIC01Niw2ICYjNDM7NTYsOCBAQAogI2RlZmluZSBfX2lvX3BidygpCVJJU0NWX0ZFTkNFKGlvdywgbykKICNkZWZpbmUgX19pb19wYXcoKQlSSVNDVl9GRU5DRShvLCBpbykKIAomIzQzOyNkZWZpbmUgUENJX0lPX0FERFIoYWRkcikJKCh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpUENJX0lPQkFTRSAmIzQzOyAoYWRkcikpKQomIzQzOwogLyoKICAqIEFjY2Vzc2VzIGZyb20gYSBzaW5nbGUgaGFydCB0byBhIHNpbmdsZSBJL08gYWRkcmVzcyBtdXN0IGJlIG9yZGVyZWQuICBUaGlzCiAgKiBhbGxvd3MgdXMgdG8gdXNlIHRoZSByYXcgcmVhZCBtYWNyb3MsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGZlbmNlIGJlZm9yZSBhbmQKQEAgLTEwMiwxMiAmIzQzOzEwNCwxNCBAQCBfX2lvX3JlYWRzX2lucyhyZWFkcywgdTMyLCBsLCBfX2lvX2JyKCksIF9faW9fYXIoYWRkcikpCiAjZGVmaW5lIHJlYWRzdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX3JlYWRzdyhhZGRyLCBidWZmZXIsIGNvdW50KQogI2RlZmluZSByZWFkc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19yZWFkc2woYWRkciwgYnVmZmVyLCBjb3VudCkKIAomIzQzOyNpZmRlZiBDT05GSUdfSEFTX0lPUE9SVAogX19pb19yZWFkc19pbnMoaW5zLCAgdTgsIGIsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKQogX19pb19yZWFkc19pbnMoaW5zLCB1MTYsIHcsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKQogX19pb19yZWFkc19pbnMoaW5zLCB1MzIsIGwsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKQotI2RlZmluZSBpbnNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zYihQQ0lfSU9CQVNFICYjNDM7IChhZGRyKSwgYnVmZmVyLCBjb3VudCkKLSNkZWZpbmUgaW5zdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3coUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpCi0jZGVmaW5lIGluc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNsKFBDSV9JT0JBU0UgJiM0MzsgKGFkZHIpLCBidWZmZXIsIGNvdW50KQomIzQzOyNkZWZpbmUgaW5zYihhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc2IoUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpCiYjNDM7I2RlZmluZSBpbnN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zdyhQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudCkKJiM0MzsjZGVmaW5lIGluc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNsKFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KQomIzQzOyNlbmRpZgogCiBfX2lvX3dyaXRlc19vdXRzKHdyaXRlcywgIHU4LCBiLCBfX2lvX2J3KCksIF9faW9fYXcoKSkKIF9faW9fd3JpdGVzX291dHMod3JpdGVzLCB1MTYsIHcsIF9faW9fYncoKSwgX19pb19hdygpKQpAQCAtMTE2LDI1ICYjNDM7MTIwLDMxIEBAIF9faW9fd3JpdGVzX291dHMod3JpdGVzLCB1MzIsIGwsIF9faW9fYncoKSwgX19pb19hdygpKQogI2RlZmluZSB3cml0ZXN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fd3JpdGVzdyhhZGRyLCBidWZmZXIsIGNvdW50KQogI2RlZmluZSB3cml0ZXNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fd3JpdGVzbChhZGRyLCBidWZmZXIsIGNvdW50KQogCiYjNDM7I2lmZGVmIENPTkZJR19IQVNfSU9QT1JUCiBfX2lvX3dyaXRlc19vdXRzKG91dHMsICB1OCwgYiwgX19pb19wYncoKSwgX19pb19wYXcoKSkKIF9faW9fd3JpdGVzX291dHMob3V0cywgdTE2LCB3LCBfX2lvX3BidygpLCBfX2lvX3BhdygpKQogX19pb193cml0ZXNfb3V0cyhvdXRzLCB1MzIsIGwsIF9faW9fcGJ3KCksIF9faW9fcGF3KCkpCi0jZGVmaW5lIG91dHNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2IoUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpCi0jZGVmaW5lIG91dHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3coUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpCi0jZGVmaW5lIG91dHNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2woUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpCiYjNDM7I2RlZmluZSBvdXRzYihhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHNiKFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KQomIzQzOyNkZWZpbmUgb3V0c3coYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzdyhQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudCkKJiM0MzsjZGVmaW5lIG91dHNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2woUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpCiYjNDM7I2VuZGlmCiAKICNpZmRlZiBDT05GSUdfNjRCSVQKIF9faW9fcmVhZHNfaW5zKHJlYWRzLCB1NjQsIHEsIF9faW9fYnIoKSwgX19pb19hcihhZGRyKSkKICNkZWZpbmUgcmVhZHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fcmVhZHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpCiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBU19JT1BPUlQKIF9faW9fcmVhZHNfaW5zKGlucywgdTY0LCBxLCBfX2lvX3BicigpLCBfX2lvX3BhcihhZGRyKSkKLSNkZWZpbmUgaW5zcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3EoUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpCiYjNDM7I2RlZmluZSBpbnNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zcShQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudCkKJiM0MzsjZW5kaWYKIAogX19pb193cml0ZXNfb3V0cyh3cml0ZXMsIHU2NCwgcSwgX19pb19idygpLCBfX2lvX2F3KCkpCiAjZGVmaW5lIHdyaXRlc3EoYWRkciwgYnVmZmVyLCBjb3VudCkgX193cml0ZXNxKGFkZHIsIGJ1ZmZlciwgY291bnQpCiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBU19JT1BPUlQKIF9faW9fd3JpdGVzX291dHMob3V0cywgdTY0LCBxLCBfX2lvX3BicigpLCBfX2lvX3BhdygpKQotI2RlZmluZSBvdXRzcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHNxKFBDSV9JT0JBU0UgJiM0MzsgKGFkZHIpLCBidWZmZXIsIGNvdW50KQomIzQzOyNkZWZpbmUgb3V0c3EoYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzcShQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudCkKJiM0MzsjZW5kaWYKICNlbmRpZgogCiAjaW5jbHVkZSAmbHQ7YXNtLWdlbmVyaWMvaW8uaCZndDsKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kYWQ5NzViNTVkMGMzMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTAsMCAmIzQzOzEsMjg3IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fQVNNX1BFUkNQVV9ICiYjNDM7I2RlZmluZSBfX0FTTV9QRVJDUFVfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ByZWVtcHQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2FsdGVybmF0aXZlLW1hY3Jvcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vY3B1ZmVhdHVyZS1tYWNyb3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2N1cnJlbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2h3Y2FwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS90aHJlYWRfaW5mby5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgUEVSQ1BVX1JXX09QUyhzeikJCQkJCQlcCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcGVyY3B1X3JlYWRfIyNzeih2b2lkICpwdHIpCQlcCiYjNDM7ewkJCQkJCQkJCVwKJiM0MzsJcmV0dXJuIFJFQURfT05DRSgqKHUjI3N6ICopcHRyKTsJCQkJXAomIzQzO30JCQkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdV93cml0ZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpCVwKJiM0Mzt7CQkJCQkJCQkJXAomIzQzOwlXUklURV9PTkNFKCoodSMjc3ogKilwdHIsICh1IyNzeil2YWwpOwkJCQlcCiYjNDM7fQomIzQzOwomIzQzO1BFUkNQVV9SV19PUFMoOCkKJiM0MztQRVJDUFVfUldfT1BTKDE2KQomIzQzO1BFUkNQVV9SV19PUFMoMzIpCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR182NEJJVAomIzQzO1BFUkNQVV9SV19PUFMoNjQpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSBfX1BFUkNQVV9BTU9fT1BfQ0FTRShzZngsIG5hbWUsIHN6LCBhbW9faW5zbikJCQlcCiYjNDM7c3RhdGljIGlubGluZSB2b2lkCQkJCQkJCVwKJiM0MztfX3BlcmNwdV8jI25hbWUjI19hbW9fY2FzZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpCQlcCiYjNDM7ewkJCQkJCQkJCVwKJiM0MzsJYXNtIHZvbGF0aWxlICgJCQkJCQkJXAomIzQzOwkJJiMzNDthbW8mIzM0OyAjYW1vX2luc24gI3NmeCAmIzM0OyB6ZXJvLCAlW3ZhbF0sICVbcHRyXSYjMzQ7CQlcCiYjNDM7CQk6IFtwdHJdICYjMzQ7JiM0MztBJiMzNDsgKCoodSMjc3ogKilwdHIpCQkJCVwKJiM0MzsJCTogW3ZhbF0gJiMzNDtyJiMzNDsgKCh1IyNzeikodmFsKSkJCQkJXAomIzQzOwkJOiAmIzM0O21lbW9yeSYjMzQ7KTsJCQkJCQlcCiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsjZGVmaW5lIFBFUkNQVV9PUChuYW1lLCBhbW9faW5zbikJCQkJCVwKJiM0MzsJX19QRVJDUFVfQU1PX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbikJCQlcCiYjNDM7CV9fUEVSQ1BVX0FNT19PUF9DQVNFKC5kLCBuYW1lLCA2NCwgYW1vX2luc24pCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFBFUkNQVV9PUChuYW1lLCBhbW9faW5zbikJCQkJCVwKJiM0MzsJX19QRVJDUFVfQU1PX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbikKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztQRVJDUFVfT1AoYWRkLCBhZGQpCiYjNDM7UEVSQ1BVX09QKGFuZG5vdCwgYW5kKQomIzQzO1BFUkNQVV9PUChvciwgb3IpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDdXJyZW50bHksIG9ubHkgdGhpc19jcHVfYWRkX3JldHVybl94eHgoKSByZXF1aXJlcyBhIHJldHVybiB2YWx1ZSwKJiM0MzsgKiBhbmQgdGhlIFBFUkNQVV9SRVRfT1AoKSBkb2VzIG5vdCBhY2NvdW50IGZvciBvdGhlciBvcGVyYXRpb25zLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX19QRVJDUFVfQU1PX1JFVF9PUF9DQVNFKHNmeCwgbmFtZSwgc3osIGFtb19pbnNuKQkJXAomIzQzO3N0YXRpYyBpbmxpbmUgdSMjc3oJCQkJCQkJXAomIzQzO19fcGVyY3B1XyMjbmFtZSMjX3JldHVybl9hbW9fY2FzZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpCVwKJiM0Mzt7CQkJCQkJCQkJXAomIzQzOwlyZWdpc3RlciB1IyNzeiByZXQ7CQkJCQkJXAomIzQzOwkJCQkJCQkJCVwKJiM0MzsJYXNtIHZvbGF0aWxlICgJCQkJCQkJXAomIzQzOwkJJiMzNDthbW8mIzM0OyAjYW1vX2luc24gI3NmeCAmIzM0OyAlW3JldF0sICVbdmFsXSwgJVtwdHJdJiMzNDsJCVwKJiM0MzsJCTogW3B0cl0gJiMzNDsmIzQzO0EmIzM0OyAoKih1IyNzeiAqKXB0ciksIFtyZXRdICYjMzQ7PXImIzM0OyAocmV0KQkJXAomIzQzOwkJOiBbdmFsXSAmIzM0O3ImIzM0OyAoKHUjI3N6KSh2YWwpKQkJCQlcCiYjNDM7CQk6ICYjMzQ7bWVtb3J5JiMzNDspOwkJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CXJldHVybiByZXQgJiM0MzsgdmFsOwkJCQkJCVwKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR182NEJJVAomIzQzOyNkZWZpbmUgUEVSQ1BVX1JFVF9PUChuYW1lLCBhbW9faW5zbikJCQkJCVwKJiM0MzsJX19QRVJDUFVfQU1PX1JFVF9PUF9DQVNFKC53LCBuYW1lLCAzMiwgYW1vX2luc24pCQlcCiYjNDM7CV9fUEVSQ1BVX0FNT19SRVRfT1BfQ0FTRSguZCwgbmFtZSwgNjQsIGFtb19pbnNuKQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBQRVJDUFVfUkVUX09QKG5hbWUsIGFtb19pbnNuKQkJCQkJXAomIzQzOwlfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbikKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztQRVJDUFVfUkVUX09QKGFkZCwgYWRkKQomIzQzOwomIzQzOyNkZWZpbmUgUEVSQ1BVXzhfMTZfR0VUX1NISUZUKHB0cikJKCgodW5zaWduZWQgbG9uZykocHRyKSAmYW1wOyAweDMpICogQklUU19QRVJfQllURSkKJiM0MzsjZGVmaW5lIFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KQlHRU5NQVNLKChzeikgLSAxLCAwKQomIzQzOyNkZWZpbmUgUEVSQ1BVXzhfMTZfR0VUX1BUUjMyKHB0cikJKCh1MzIgKikoKHVuc2lnbmVkIGxvbmcpKHB0cikgJmFtcDsgfjB4MykpCiYjNDM7CiYjNDM7I2RlZmluZSBQRVJDUFVfOF8xNl9PUChuYW1lLCBhbW9faW5zbiwgc3osIHNmeCwgdmFsX3R5cGUsIG5ld192YWxfZXhwciwgYXNtX29wKQkJCVwKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHVfIyNuYW1lIyNfYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKQkJXAomIzQzO3sJCQkJCQkJCQkJCQlcCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19SSVNDVl9JU0FfWkFCSEEpICZhbXA7JmFtcDsJCQkJCQlcCiYjNDM7CQlyaXNjdl9oYXNfZXh0ZW5zaW9uX3VubGlrZWx5KFJJU0NWX0lTQV9FWFRfWkFCSEEpKSB7CQkJCVwKJiM0MzsJCWFzbSB2b2xhdGlsZSAoJiMzNDthbW8mIzM0OyAjYW1vX2luc24gI3NmeCAmIzM0OyB6ZXJvLCAlW3ZhbF0sICVbcHRyXSYjMzQ7CQkJXAomIzQzOwkJCTogW3B0cl0gJiMzNDsmIzQzO0EmIzM0OygqKHZhbF90eXBlICopcHRyKQkJCQkJCVwKJiM0MzsJCQk6IFt2YWxdICYjMzQ7ciYjMzQ7KCh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikgJmFtcDsgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSkJXAomIzQzOwkJCTogJiMzNDttZW1vcnkmIzM0Oyk7CQkJCQkJCQlcCiYjNDM7CX0gZWxzZSB7CQkJCQkJCQkJCVwKJiM0MzsJCXUzMiAqcHRyMzIgPSBQRVJDUFVfOF8xNl9HRVRfUFRSMzIocHRyKTsJCQkJCVwKJiM0MzsJCWNvbnN0IHVuc2lnbmVkIGxvbmcgc2hpZnQgPSBQRVJDUFVfOF8xNl9HRVRfU0hJRlQocHRyKTsJCQkJXAomIzQzOwkJY29uc3QgdTMyIG1hc2sgPSBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikgJmx0OyZsdDsgc2hpZnQ7CQkJCVwKJiM0MzsJCWNvbnN0IHZhbF90eXBlIHZhbF90cnVuYyA9ICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikJCQkJXAomIzQzOwkJCQkJICAgJmFtcDsgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKTsJCQkJXAomIzQzOwkJdTMyIHJldHgsIHJjOwkJCQkJCQkJCVwKJiM0MzsJCXZhbF90eXBlIG5ld192YWxfdHlwZTsJCQkJCQkJCVwKJiM0MzsJCQkJCQkJCQkJCQlcCiYjNDM7CQlhc20gdm9sYXRpbGUgKAkJCQkJCQkJCVwKJiM0MzsJCQkmIzM0OzA6IGxyLncgJTAsICUyXG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDthbmQgJTMsICUwLCAlNFxuJiMzNDsJCQkJCQkJXAomIzQzOwkJCSYjMzQ7c3JsICUzLCAlMywgJTVcbiYjMzQ7CQkJCQkJCVwKJiM0MzsJCQkjYXNtX29wICYjMzQ7ICUzLCAlMywgJTZcbiYjMzQ7CQkJCQkJCVwKJiM0MzsJCQkmIzM0O2FuZCAlMywgJTMsICU4XG4mIzM0OwkJCQkJCVwKJiM0MzsJCQkmIzM0O3NsbCAlMywgJTMsICU1XG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDthbmQgJTEsICUwLCAlN1xuJiMzNDsJCQkJCQkJXAomIzQzOwkJCSYjMzQ7b3IgJTEsICUxLCAlM1xuJiMzNDsJCQkJCQkJXAomIzQzOwkJCSYjMzQ7c2MudyAlMSwgJTEsICUyXG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDtibmV6ICUxLCAwYlxuJiMzNDsJCQkJCQkJCVwKJiM0MzsJCQk6ICYjMzQ7PSZhbXA7ciYjMzQ7KHJldHgpLCAmIzM0Oz0mYW1wO3ImIzM0OyhyYyksICYjMzQ7JiM0MztBJiMzNDsoKnB0cjMyKSwgJiMzNDs9JmFtcDtyJiMzNDsobmV3X3ZhbF90eXBlKQkJXAomIzQzOwkJCTogJiMzNDtyJiMzNDsobWFzayksICYjMzQ7ciYjMzQ7KHNoaWZ0KSwgJiMzNDtyJiMzNDsodmFsX3RydW5jKSwgJiMzNDtyJiMzNDsofm1hc2spLAkJCVwKJiM0MzsJCQkgICYjMzQ7ciYjMzQ7KFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSkJCQkJCQlcCiYjNDM7CQkJOiAmIzM0O21lbW9yeSYjMzQ7KTsJCQkJCQkJCVwKJiM0MzsJCX0JCQkJCQkJCQkJXAomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIFBFUkNQVV9PUF84XzE2KG9wX25hbWUsIG9wLCBleHByLCBmaW5hbF9vcCkJCQlcCiYjNDM7CVBFUkNQVV84XzE2X09QKG9wX25hbWUsIG9wLCA4LCAuYiwgdTgsIGV4cHIsIGZpbmFsX29wKTsJCVwKJiM0MzsJUEVSQ1BVXzhfMTZfT1Aob3BfbmFtZSwgb3AsIDE2LCAuaCwgdTE2LCBleHByLCBmaW5hbF9vcCkKJiM0MzsKJiM0MztQRVJDUFVfT1BfOF8xNihhZGQsIGFkZCwgdmFsLCBhZGQpCiYjNDM7UEVSQ1BVX09QXzhfMTYoYW5kbm90LCBhbmQsIH4odmFsKSwgYW5kKQomIzQzO1BFUkNQVV9PUF84XzE2KG9yLCBvciwgdmFsLCBvcikKJiM0MzsKJiM0MzsjZGVmaW5lIFBFUkNQVV84XzE2X1JFVF9PUChuYW1lLCBhbW9faW5zbiwgc3osIHNmeCwgdmFsX3R5cGUsIG5ld192YWxfZXhwcikJCQlcCiYjNDM7c3RhdGljIGlubGluZSB2YWxfdHlwZSBfX3BlcmNwdV8jI25hbWUjI19yZXR1cm5fYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKQlcCiYjNDM7ewkJCQkJCQkJCQkJCVwKJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX1JJU0NWX0lTQV9aQUJIQSkgJmFtcDsmYW1wOwkJCQkJCVwKJiM0MzsJCXJpc2N2X2hhc19leHRlbnNpb25fdW5saWtlbHkoUklTQ1ZfSVNBX0VYVF9aQUJIQSkpIHsJCQkJXAomIzQzOwkJcmVnaXN0ZXIgdmFsX3R5cGUgcmV0OwkJCQkJCQkJXAomIzQzOwkJYXNtIHZvbGF0aWxlICgmIzM0O2FtbyYjMzQ7ICNhbW9faW5zbiAjc2Z4ICYjMzQ7ICVbcmV0XSwgJVt2YWxdLCAlW3B0cl0mIzM0OwkJCVwKJiM0MzsJCQk6IFtwdHJdICYjMzQ7JiM0MztBJiMzNDsoKih2YWxfdHlwZSAqKXB0ciksIFtyZXRdICYjMzQ7PXImIzM0OyhyZXQpCQkJCVwKJiM0MzsJCQk6IFt2YWxdICYjMzQ7ciYjMzQ7KCh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikgJmFtcDsgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSkJXAomIzQzOwkJCTogJiMzNDttZW1vcnkmIzM0Oyk7CQkJCQkJCQlcCiYjNDM7CQlyZXR1cm4gcmV0ICYjNDM7ICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikgJmFtcDsgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKTsJCVwKJiM0MzsJfSBlbHNlIHsJCQkJCQkJCQkJXAomIzQzOwkJdTMyICpwdHIzMiA9IFBFUkNQVV84XzE2X0dFVF9QVFIzMihwdHIpOwkJCQkJXAomIzQzOwkJY29uc3QgdW5zaWduZWQgbG9uZyBzaGlmdCA9IFBFUkNQVV84XzE2X0dFVF9TSElGVChwdHIpOwkJCQlcCiYjNDM7CQljb25zdCB1MzIgbWFzayA9IChQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikgJmx0OyZsdDsgc2hpZnQpOwkJCQlcCiYjNDM7CQljb25zdCB1MzIgaW52X21hc2sgPSB+bWFzazsJCQkJCQkJXAomIzQzOwkJY29uc3QgdmFsX3R5cGUgdmFsX3RydW5jID0gKHZhbF90eXBlKSgobmV3X3ZhbF9leHByKQkJCQlcCiYjNDM7CQkJCQkgICAmYW1wOyBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpOwkJCQlcCiYjNDM7CQl1MzIgb2xkLCBuZXcsIHRtcDsJCQkJCQkJCVwKJiM0MzsJCQkJCQkJCQkJCQlcCiYjNDM7CQlhc20gdm9sYXRpbGUgKAkJCQkJCQkJCVwKJiM0MzsJCQkmIzM0OzA6IGxyLncgJTAsICUzXG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDthbmQgJTEsICUwLCAlNFxuJiMzNDsJCQkJCQkJXAomIzQzOwkJCSYjMzQ7c3JsICUxLCAlMSwgJTVcbiYjMzQ7CQkJCQkJCVwKJiM0MzsJCQkmIzM0O2FkZCAlMSwgJTEsICU2XG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDthbmQgJTEsICUxLCAlN1xuJiMzNDsJCQkJCQkJXAomIzQzOwkJCSYjMzQ7c2xsICUxLCAlMSwgJTVcbiYjMzQ7CQkJCQkJCVwKJiM0MzsJCQkmIzM0O2FuZCAlMiwgJTAsICU4XG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDtvciAlMiwgJTIsICUxXG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDtzYy53ICUyLCAlMiwgJTNcbiYjMzQ7CQkJCQkJCVwKJiM0MzsJCQkmIzM0O2JuZXogJTIsIDBiXG4mIzM0OwkJCQkJCQkJXAomIzQzOwkJCTogJiMzNDs9JmFtcDtyJiMzNDsob2xkKSwgJiMzNDs9JmFtcDtyJiMzNDsodG1wKSwgJiMzNDs9JmFtcDtyJiMzNDsobmV3KSwgJiMzNDsmIzQzO0EmIzM0OygqcHRyMzIpCQkJXAomIzQzOwkJCTogJiMzNDtyJiMzNDsobWFzayksICYjMzQ7ciYjMzQ7KHNoaWZ0KSwgJiMzNDtyJiMzNDsodmFsX3RydW5jKSwgJiMzNDtyJiMzNDsoUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSwgXAomIzQzOwkJCSYjMzQ7ciYjMzQ7KGludl9tYXNrKQkJCQkJCQkJXAomIzQzOwkJCTogJiMzNDttZW1vcnkmIzM0Oyk7CQkJCQkJCQlcCiYjNDM7CQlyZXR1cm4gKHZhbF90eXBlKSh0bXAgJmd0OyZndDsgc2hpZnQpOwkJCQkJCVwKJiM0MzsJfQkJCQkJCQkJCQkJXAomIzQzO30KJiM0MzsKJiM0MztQRVJDUFVfOF8xNl9SRVRfT1AoYWRkLCBhZGQsIDgsIC5iLCB1OCwgdmFsKQomIzQzO1BFUkNQVV84XzE2X1JFVF9PUChhZGQsIGFkZCwgMTYsIC5oLCB1MTYsIHZhbCkKJiM0MzsKJiM0MzsjZGVmaW5lIF9wY3BfcHJvdGVjdChvcCwgcGNwLCAuLi4pCQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CQkJCQlcCiYjNDM7CW9wKHJhd19jcHVfcHRyKCZhbXA7KHBjcCkpLCBfX1ZBX0FSR1NfXyk7CQkJCVwKJiM0MzsJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwkJCQkJXAomIzQzO30pCiYjNDM7CiYjNDM7I2RlZmluZSBfcGNwX3Byb3RlY3RfcmV0dXJuKG9wLCBwY3AsIGFyZ3MuLi4pCQkJCVwKJiM0MzsoewkJCQkJCQkJCVwKJiM0MzsJdHlwZW9mKHBjcCkgX19yZXR2YWw7CQkJCQkJXAomIzQzOwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwkJCQkJXAomIzQzOwlfX3JldHZhbCA9ICh0eXBlb2YocGNwKSlvcChyYXdfY3B1X3B0cigmYW1wOyhwY3ApKSwgIyNhcmdzKTsJXAomIzQzOwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CQkJCQlcCiYjNDM7CV9fcmV0dmFsOwkJCQkJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApCQlfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfOCwgcGNwKQomIzQzOyNkZWZpbmUgdGhpc19jcHVfcmVhZF8yKHBjcCkJCV9wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfcmVhZF8xNiwgcGNwKQomIzQzOyNkZWZpbmUgdGhpc19jcHVfcmVhZF80KHBjcCkJCV9wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfcmVhZF8zMiwgcGNwKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3JlYWRfOChwY3ApCQlfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfNjQsIHBjcCkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzEocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV84LCBwY3AsICh1bnNpZ25lZCBsb25nKXZhbCkKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzIocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV8xNiwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpCiYjNDM7I2RlZmluZSB0aGlzX2NwdV93cml0ZV80KHBjcCwgdmFsKQlfcGNwX3Byb3RlY3QoX19wZXJjcHVfd3JpdGVfMzIsIHBjcCwgKHVuc2lnbmVkIGxvbmcpdmFsKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzgocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV82NCwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfMShwY3AsIHZhbCkJX3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV84LCBwY3AsIHZhbCkKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2FkZF8yKHBjcCwgdmFsKQlfcGNwX3Byb3RlY3QoX19wZXJjcHVfYWRkX2Ftb19jYXNlXzE2LCBwY3AsIHZhbCkKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2FkZF80KHBjcCwgdmFsKQlfcGNwX3Byb3RlY3QoX19wZXJjcHVfYWRkX2Ftb19jYXNlXzMyLCBwY3AsIHZhbCkKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUCiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfOChwY3AsIHZhbCkJX3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV82NCwgcGNwLCB2YWwpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzEocGNwLCB2YWwpCQlcCiYjNDM7X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzgsIHBjcCwgdmFsKQomIzQzOwomIzQzOyNkZWZpbmUgdGhpc19jcHVfYWRkX3JldHVybl8yKHBjcCwgdmFsKQkJXAomIzQzO19wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfYWRkX3JldHVybl9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpCiYjNDM7CiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzQocGNwLCB2YWwpCQlcCiYjNDM7X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzMyLCBwY3AsIHZhbCkKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUCiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzgocGNwLCB2YWwpCQlcCiYjNDM7X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzY0LCBwY3AsIHZhbCkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2FuZF8xKHBjcCwgdmFsKQlfcGNwX3Byb3RlY3QoX19wZXJjcHVfYW5kbm90X2Ftb19jYXNlXzgsIHBjcCwgfih2YWwpKQomIzQzOyNkZWZpbmUgdGhpc19jcHVfYW5kXzIocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV9hbmRub3RfYW1vX2Nhc2VfMTYsIHBjcCwgfih2YWwpKQomIzQzOyNkZWZpbmUgdGhpc19jcHVfYW5kXzQocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV9hbmRub3RfYW1vX2Nhc2VfMzIsIHBjcCwgdmFsKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2FuZF84KHBjcCwgdmFsKQlfcGNwX3Byb3RlY3QoX19wZXJjcHVfYW5kbm90X2Ftb19jYXNlXzY0LCBwY3AsIHZhbCkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X29yXzEocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV84LCBwY3AsIHZhbCkKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X29yXzIocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpCiYjNDM7I2RlZmluZSB0aGlzX2NwdV9vcl80KHBjcCwgdmFsKQlfcGNwX3Byb3RlY3QoX19wZXJjcHVfb3JfYW1vX2Nhc2VfMzIsIHBjcCwgdmFsKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X29yXzgocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV82NCwgcGNwLCB2YWwpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSB0aGlzX2NwdV94Y2hnXzEocGNwLCB2YWwpCV9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbCkKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3hjaGdfMihwY3AsIHZhbCkJX3BjcF9wcm90ZWN0X3JldHVybih4Y2hnX3JlbGF4ZWQsIHBjcCwgdmFsKQomIzQzOyNkZWZpbmUgdGhpc19jcHVfeGNoZ180KHBjcCwgdmFsKQlfcGNwX3Byb3RlY3RfcmV0dXJuKHhjaGdfcmVsYXhlZCwgcGNwLCB2YWwpCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR182NEJJVAomIzQzOyNkZWZpbmUgdGhpc19jcHVfeGNoZ184KHBjcCwgdmFsKQlfcGNwX3Byb3RlY3RfcmV0dXJuKHhjaGdfcmVsYXhlZCwgcGNwLCB2YWwpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzEocGNwLCBvLCBuKQlfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKQomIzQzOyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ18yKHBjcCwgbywgbikJX3BjcF9wcm90ZWN0X3JldHVybihjbXB4Y2hnX3JlbGF4ZWQsIHBjcCwgbywgbikKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfNChwY3AsIG8sIG4pCV9wY3BfcHJvdGVjdF9yZXR1cm4oY21weGNoZ19yZWxheGVkLCBwY3AsIG8sIG4pCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR182NEJJVAomIzQzOyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ184KHBjcCwgbywgbikJX3BjcF9wcm90ZWN0X3JldHVybihjbXB4Y2hnX3JlbGF4ZWQsIHBjcCwgbywgbikKJiM0MzsKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGc2NChwY3AsIG8sIG4pCXRoaXNfY3B1X2NtcHhjaGdfOChwY3AsIG8sIG4pCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmZGVmIHN5c3RlbV9oYXNfY21weGNoZzEyOAomIzQzOyNkZWZpbmUgdGhpc19jcHVfY21weGNoZzEyOChwY3AsIG8sIG4pCQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CXUxMjggcmV0X187CQkJCQkJCVwKJiM0MzsJdHlwZW9mKHBjcCkgKnB0cl9fOwkJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CQkJCQlcCiYjNDM7CXB0cl9fID0gcmF3X2NwdV9wdHIoJmFtcDsocGNwKSk7CQkJCQlcCiYjNDM7CWlmIChzeXN0ZW1faGFzX2NtcHhjaGcxMjgoKSkJCQkJCVwKJiM0MzsJCXJldF9fID0gY21weGNoZzEyOF9sb2NhbChwdHJfXywgKG8pLCAobikpOwkJXAomIzQzOwllbHNlCQkJCQkJCQlcCiYjNDM7CQlyZXRfXyA9IHRoaXNfY3B1X2dlbmVyaWNfY21weGNoZyhwY3AsIChvKSwgKG4pKTsJXAomIzQzOwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CQkJCQlcCiYjNDM7CXJldF9fOwkJCQkJCQkJXAomIzQzO30pCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSBfX215X2NwdV9vZmZzZXQgKCgoc3RydWN0IHRocmVhZF9pbmZvICopY3VycmVudCktJmd0O3BjcHVfb2Zmc2V0KQomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthc20tZ2VuZXJpYy9wZXJjcHUuaCZndDsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19BU01fUEVSQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oCmluZGV4IDBlNzFlYjgyZjkyMGNhLi43MzNiNmNkMzA2ZTQwZiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oCkBAIC04OCw2ICYjNDM7ODgsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fc3dpdGNoX3RvX2VudmNmZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiAJCQk6OiAmIzM0O3ImIzM0OyAobmV4dC0mZ3Q7dGhyZWFkLmVudmNmZykgOiAmIzM0O21lbW9yeSYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3N3aXRjaF90b19wY3B1X29mZnNldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfU01QCiYjNDM7CW5leHQtJmd0O3RocmVhZF9pbmZvLnBjcHVfb2Zmc2V0ID0gX19teV9jcHVfb2Zmc2V0OwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIGV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqLAogCQkJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKQEAgLTEyMiw2ICYjNDM7MTI5LDcgQEAgZG8gewkJCQkJCQlcCiAJaWYgKHN3aXRjaF90b19zaG91bGRfZmx1c2hfaWNhY2hlKF9fbmV4dCkpCVwKIAkJbG9jYWxfZmx1c2hfaWNhY2hlX2FsbCgpOwkJXAogCV9fc3dpdGNoX3RvX2VudmNmZyhfX25leHQpOwkJCVwKJiM0MzsJX19zd2l0Y2hfdG9fcGNwdV9vZmZzZXQoX19uZXh0KTsJCVwKIAkoKGxhc3QpID0gX19zd2l0Y2hfdG8oX19wcmV2LCBfX25leHQpKTsJCVwKIH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCA1NTAxOWZkZmE5ZWNhYS4uZjEwYmE2MmI2MTAxNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTUzLDYgJiM0Mzs1Myw3IEBACiBzdHJ1Y3QgdGhyZWFkX2luZm8gewogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogbG93IGxldmVsIGZsYWdzICovCiAJaW50ICAgICAgICAgICAgICAgICAgICAgcHJlZW1wdF9jb3VudDsgIC8qIDA9Jmd0O3ByZWVtcHRpYmxlLCAmbHQ7MD0mZ3Q7QlVHICovCiYjNDM7CWludAkJCWNwdTsKIAkvKgogCSAqIFRoZXNlIHN0YWNrIHBvaW50ZXJzIGFyZSBvdmVyd3JpdHRlbiBvbiBldmVyeSBzeXN0ZW0gY2FsbCBvcgogCSAqIGV4Y2VwdGlvbi4gIFNQIGlzIGFsc28gc2F2ZWQgdG8gdGhlIHN0YWNrIGl0IGNhbiBiZSByZWNvdmVyZWQgd2hlbgpAQCAtNjAsOCAmIzQzOzYxLDggQEAgc3RydWN0IHRocmVhZF9pbmZvIHsKIAkgKi8KIAlsb25nCQkJa2VybmVsX3NwOwkvKiBLZXJuZWwgc3RhY2sgcG9pbnRlciAqLwogCWxvbmcJCQl1c2VyX3NwOwkvKiBVc2VyIHN0YWNrIHBvaW50ZXIgKi8KLQlpbnQJCQljcHU7CiAJdW5zaWduZWQgbG9uZwkJc3lzY2FsbF93b3JrOwkvKiBTWVNDQUxMX1dPUktfIGZsYWdzICovCiYjNDM7CXVuc2lnbmVkIGxvbmcJCXBjcHVfb2Zmc2V0OwogI2lmZGVmIENPTkZJR19TSEFET1dfQ0FMTF9TVEFDSwogCXZvaWQJCQkqc2NzX2Jhc2U7CiAJdm9pZAkJCSpzY3Nfc3A7CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBhNzVmMGNmZWExZTlmYS4uMjBkNDZjMjhmZGRlOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL2FzbS1vZmZzZXRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMzgsNiAmIzQzOzM4LDcgQEAgdm9pZCBhc21fb2Zmc2V0cyh2b2lkKQogCU9GRlNFVChUQVNLX1RIUkVBRF9TVU0sIHRhc2tfc3RydWN0LCB0aHJlYWQuc3VtKTsKIAogCU9GRlNFVChUQVNLX1RJX0NQVSwgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvLmNwdSk7CiYjNDM7CU9GRlNFVChUQVNLX1RJX1BDUFVfT0ZGU0VULCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8ucGNwdV9vZmZzZXQpOwogCU9GRlNFVChUQVNLX1RJX1BSRUVNUFRfQ09VTlQsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby5wcmVlbXB0X2NvdW50KTsKIAlPRkZTRVQoVEFTS19USV9LRVJORUxfU1AsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby5rZXJuZWxfc3ApOwogCU9GRlNFVChUQVNLX1RJX1VTRVJfU1AsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby51c2VyX3NwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuYwppbmRleCBmNmVmNTc5MzBiNTBhOC4uNzg3Njg1NGQxNjI3OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zbXBib290LmMKQEAgLTE5MSw2ICYjNDM7MTkxLDcgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpCiB7CiAJaW50IHJldDsKIAl0aWRsZS0mZ3Q7dGhyZWFkX2luZm8uY3B1ID0gY3B1OwomIzQzOwl0aWRsZS0mZ3Q7dGhyZWFkX2luZm8ucGNwdV9vZmZzZXQgPSBwZXJfY3B1X29mZnNldChjcHUpOwogCiAJcmV0ID0gc3RhcnRfc2Vjb25kYXJ5X2NwdShjcHUsIHRpZGxlKTsKIAlpZiAoIXJldCkgewpAQCAtMjA4LDYgJiM0MzsyMDksMTEgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpCiB9CiAjZW5kaWYKIAomIzQzO3ZvaWQgX19pbml0IHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCiYjNDM7ewomIzQzOwlfX215X2NwdV9vZmZzZXQgPSBwZXJfY3B1X29mZnNldChzbXBfcHJvY2Vzc29yX2lkKCkpOwomIzQzO30KJiM0MzsKIHZvaWQgX19pbml0IHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKQogewogfQpAQCAtMjMzLDYgJiM0MzsyMzksOCBAQCBhc21saW5rYWdlIF9fdmlzaWJsZSB2b2lkIHNtcF9jYWxsaW4odm9pZCkKIAltbWdyYWIobW0pOwogCWN1cnJlbnQtJmd0O2FjdGl2ZV9tbSA9IG1tOwogCiYjNDM7CV9fbXlfY3B1X29mZnNldCA9IHBlcl9jcHVfb2Zmc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfUEFSQUxMRUwKIAljcHVocF9hcF9zeW5jX2FsaXZlKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCmluZGV4IGMwM2MxZGUxNmI3OWFjLi5lYWI5M2Q1MjU4ZTllNCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCkBAIC0xMzk1LDE1ICYjNDM7MTM5NSw4IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCQkJaWYgKHJkICE9IHJzKQogCQkJCWVtaXRfbXYocmQsIHJzLCBjdHgpOwogI2lmZGVmIENPTkZJR19TTVAKLQkJCS8qIExvYWQgY3VycmVudCBDUFUgbnVtYmVyIGluIFQxICovCi0JCQllbWl0X2x3KFJWX1JFR19UMSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBjcHUpLAomIzQzOwkJCWVtaXRfbGQoUlZfUkVHX1QxLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHBjcHVfb2Zmc2V0KSwKIAkJCQlSVl9SRUdfVFAsIGN0eCk7Ci0JCQkvKiBMb2FkIGFkZHJlc3Mgb2YgX19wZXJfY3B1X29mZnNldCBhcnJheSBpbiBUMiAqLwotCQkJZW1pdF9hZGRyKFJWX1JFR19UMiwgKHU2NCkmYW1wO19fcGVyX2NwdV9vZmZzZXQsIGV4dHJhX3Bhc3MsIGN0eCk7Ci0JCQkvKiBHZXQgYWRkcmVzcyBvZiBfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gaW4gVDEgKi8KLQkJCWVtaXRfc2gzYWRkKFJWX1JFR19UMSwgUlZfUkVHX1QxLCBSVl9SRUdfVDIsIGN0eCk7Ci0JCQkvKiBMb2FkIF9fcGVyX2NwdV9vZmZzZXRbY3B1XSBpbiBUMSAqLwotCQkJZW1pdF9sZChSVl9SRUdfVDEsIDAsIFJWX1JFR19UMSwgY3R4KTsKIAkJCS8qIEFkZCB0aGUgb2Zmc2V0IHRvIFJkICovCiAJCQllbWl0X2FkZChyZCwgcmQsIFJWX1JFR19UMSwgY3R4KTsKICNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODI2CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNjIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJJU0MtViBBcmNoaXRlY3R1cmUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgdG91Y2hpbmcgb24gaG93IHBlci1DUFUgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgaW50ZXJlc3QgYmVjYXVzZSB0aGF0JiMzOTtzIG9mdGVuIGEgc291cmNlIG9mIHN1YnRsZSwgaGFyZC10by1maW5kIGJ1Z3MgYW5kIHJhY2UgY29uZGl0aW9ucy4gSSBzZWUgaXQmIzM5O3MgaW50cm9kdWNpbmcgdGhpcyBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZXJjcHUuaGAgZmlsZSwgb3B0aW1pemluZyB0aGUgcGVyLUNQVSBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduIHRoZXkmIzM5O3JlIHRyeWluZyB0byBpbXByb3ZlIHRoaW5ncywgYnV0IGl0IGFsc28gbWVhbnMgdGhlcmUmIzM5O3MgYSBoaWdoZXIgY2hhbmNlIG9mIGludHJvZHVjaW5nIGlzc3VlcyBkdXJpbmcgdGhlIG9wdGltaXphdGlvbi4KClRoZSBwYXRjaCBzZWVtcyB0byBiZSB1cGRhdGluZyBzZXZlcmFsIGluY2x1ZGUgZmlsZXMsIGxpa2UgYGFzbS5oYCwgYGlvLmhgLCBgc3dpdGNoX3RvLmhgLCBhbmQgYHRocmVhZF9pbmZvLmhgLCBhbG9uZyB3aXRoIGtlcm5lbCBjb2RlIGluIGBhc20tb2Zmc2V0cy5jYCBhbmQgYHNtcGJvb3QuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmV3b3JraW5nIHRoZSBvZmZzZXRzIHVzZWQgdG8gYWNjZXNzIHBlci1DUFUgZGF0YSwgcmVwbGFjaW5nIHNvbWUgY2FsY3VsYXRpb25zIHdpdGggYFRBU0tfVElfUENQVV9PRkZTRVQodHApYC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgY2hhbmdlcyBmb3IgSS9PIHBvcnQgYWNjZXNzIHdpdGggYFBDSV9JT19BRERSKGFkZHIpYCBhbmQgZ3VhcmRlZCBJL08gZnVuY3Rpb25zLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLCBvcHRpbWl6aW5nIGhvdyB0aGVzZSBwZXItQ1BVIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQgYW5kIHBvdGVudGlhbGx5IEkvTyBoYW5kbGluZyBhcyB3ZWxsLgoKVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhbHRlcmluZyBjb3JlIGFyY2hpdGVjdHVyZSBsb2dpYyByZWxhdGVkIHRvIHBlci1DUFUgb3BlcmF0aW9ucywgSS9PIGFjY2VzcywgYW5kIGV2ZW4gdGhlIEJQRiBKSVQgY29tcGlsZXIgaXMgZW5vdWdoIHRvIHdhcnJhbnQgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbi4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBhcmVhcyB0aGF0IGFyZSBrZXkgdG8gdGhlIHN5c3RlbSYjMzk7cyBwZXJmb3JtYW5jZSwgc3RhYmlsaXR5LCBhbmQgc2VjdXJpdHkuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIGNvZGUgcGF0aHMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZSB0aG91Z2guIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGVuYWJsZWQgdG8gcnVuIHRoaXMgY29kZSBhbmQgdmVyaWZ5IHRoaXMgY29kZSBjYW4gYmUgZXhlY3V0ZWQuIExvb2tpbmcgYXQgdGhlIGNvbmZpZ3MsIEkgc2VlIHRoYXQgdGhpcyBjb2RlIGlzIHVzaW5nIGBDT05GSUdfSEFTX0lPUE9SVGAsIGBDT05GSUdfUklTQ1ZfSVNBX1pBQkhBYCwgYENPTkZJR19TTVBgIGFuZCBgQ09ORklHXzY0QklUYC4KCk5vdywgZGlnZ2luZyBkZWVwZXIsIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoYXQgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgIGZpbGUuIEl0JiMzOTtzIHRoZSBCUEYgSklUIGZvciBSSVNDLVYgNjQtYml0LCBhbmQgaWYgdGhleSBhcmUgbW9kaWZ5aW5nIGl0LCB0aGVyZSYjMzk7cyB0aGUgcG90ZW50aWFsIGZvciBzb21lIGludGVyZXN0aW5nIHRoaW5ncyB0byB0dXJuIHVwLCB3aGljaCBjb3VsZCBhZmZlY3QgdGhlIHN5c3RlbSBwZXJmb3JtYW5jZSBvciBwb3NzaWJseSBldmVuIHNlY3VyaXR5LiBHaXZlbiB0aGF0LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgQlBGIEpJVCBjb2RlIGZvciBSSVNDLVYgYW5kIHBlci1DUFUgb3BlcmF0aW9ucy4gT2theSwgc28gSSBzZWUgaXQgbW9kaWZpZXMgYGJwZl9qaXRfZW1pdF9pbnNuYC4gVG8gYmUgY2VydGFpbiwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgZXhpc3RzIHdpdGhpbiB0aGUgZmlsZSB3aXRoIGEgc2ltcGxlIGBncmVwYCBjb21tYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzI9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzY4LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzY5OmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzcwLVx0XHQgICAgICBib29sIGV4dHJhX3Bhc3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyODMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExhdGVzdCBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgc29tZSBrZXkgbW9kaWZpY2F0aW9ucyBpbiB0aGlzIHBhdGNoLiBUaGUgYGJwZl9qaXRfZW1pdF9pbnNuYCBmdW5jdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcgZnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBvcHRpbWl6YXRpb24gcGVyc3BlY3RpdmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhvc2UgY2hhbmdlcyB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYW5kIGltcGFjdCBvbiB0aGUgQlBGIEpJVCBjb21waWxlci4gQSBjbG9zZXIgbG9vayBhdCBob3cgaW5zdHJ1Y3Rpb24gZW1pc3Npb24gaXMgYmVpbmcgaGFuZGxlZCBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4KClRoZW4gdGhlcmUmIzM5O3MgdGhlIGluY2x1c2lvbiBvZiBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZXJjcHUuaGAuIEltcGxlbWVudGluZyBgdGhpc19jcHVfYWRkXzFgLCBgdGhpc19jcHVfcmVhZF8xYCwgYW5kIHRoZSBsaWtlIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24uIFRoZXNlIGlubGluZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIGVmZmljaWVudCBwZXItQ1BVIGRhdGEgYWNjZXNzLCBhbmQgdGhlaXIgcHJlc2VuY2Ugc3VnZ2VzdHMgYSBkZWxpYmVyYXRlIGVmZm9ydCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBjb25zaXN0ZW5jeSB3aXRoaW4gdGhlIFJJU0MtViBrZXJuZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbnNpZGVyIHRoZSB1c2UgY2FzZSAtIGlzIGl0IGZvciBCUEYgZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlIGluaGVyZW50bHkgaW52b2x2ZXMgZGlmZmVyZW5jZXMgZnJvbSBvdGhlciBhcmNoaXRlY3R1cmVzLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgd2VsbCB0aGVzZSBmdW5jdGlvbnMgZml0IGluLCBjb21wYXJlZCB0byBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkgaW4gb3RoZXIgYXJjaGl0ZWN0dXJlcy4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgYENPTkZJR19SSVNDVl9JU0FfWkFCSEFgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSB0YXJnZXQgSVNBLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgcmVsYXRlcyB0byB0aGUgbmV3IGluc3RydWN0aW9ucywgb3IgYXQgbGVhc3QgaG93IHRoZSBwYXRjaCBpcyBpbnRlbmRlZCB0byB3b3JrLiBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGNvZGUgZGVhbHMgd2l0aCB0aGUgcG90ZW50aWFsIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyBJU0EgZXh0ZW5zaW9uLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBwYXJ0cyBvZiB0aGUgbmV3IGNvZGUgcGF0aHMgYXJlIG9ubHkgYWN0aXZlIGlmIHRoaXMgaXMgZW5hYmxlZCwgd2hpY2ggaW1wbGllcyBzb21lIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyB0aGlzIHBhdGNoIGludGVncmF0ZXMgd2l0aCB0aGUgd2lkZXIgUklTQy1WIGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUklTQ1ZfSVNBX1pBQkhBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZz02Nzc9Y29uZmlnIFRPT0xDSEFJTl9IQVNfWkFCSEFcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctNjgzLVxuYXJjaC9yaXNjdi9LY29uZmlnOjY4NDpjb25maWcgUklTQ1ZfSVNBX1pBQkhBXG5hcmNoL3Jpc2N2L0tjb25maWctNjg1LVx0Ym9vbCBcJiMzNDtaYWJoYSBleHRlbnNpb24gc3VwcG9ydCBmb3IgYXRvbWljIGJ5dGUvaGFsZndvcmQgb3BlcmF0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODM0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRXZhbHVhdGluZyBSSVNDLVYgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGl0IGxvb2tzIGxpa2UgYFJJU0NWX0lTQV9aQUJIQWAgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBsZWFuaW5nIHRvd2FyZHMgZW5hYmxpbmcgaXQ7IGl0JiMzOTtzIGxpa2VseSBhZGRpbmcgc29tZSBhcmNoaXRlY3R1cmFsIHN1cHBvcnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMsIGJ1dCB1c3VhbGx5LCB0aGVzZSBJU0EgZXh0ZW5zaW9ucyBhcmUgdGhlcmUgZm9yIGEgcmVhc29uIGFuZCBsaWtlbHkgcmVwcmVzZW50IGEgcGVyZm9ybWFuY2Ugb3IgZnVuY3Rpb25hbGl0eSBpbXByb3ZlbWVudC4gCgpBbmQgSSBzZWUgYENPTkZJR19IQVNfSU9QT1JUYCBsaXN0ZWQgYXMgd2VsbC4gSG1tLCB0aGF0IHN1Z2dlc3RzIHNvbWUga2luZCBvZiBJL08gcG9ydCBzdXBwb3J0IGlzIGJlaW5nIHVzZWQgc29tZXdoZXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgaXMgc29tZXRoaW5nIHdlIGNhbiwgYW5kIHNob3VsZCwgZW5hYmxlIGFzIHdlbGwuIEl0IGNvdWxkIGJlIGNydWNpYWwgZm9yIG91ciBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSEFTX0lPUE9SVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZz0zNzU9Y29uZmlnIEhBU19JT01FTVxuLS1cbmxpYi9LY29uZmlnLTM3OS1cbmxpYi9LY29uZmlnOjM4MDpjb25maWcgSEFTX0lPUE9SVFxubGliL0tjb25maWctMzgxLVx0Ym9vbFxubGliL0tjb25maWctMzgyLVxubGliL0tjb25maWc6MzgzOmNvbmZpZyBIQVNfSU9QT1JUX01BUFxubGliL0tjb25maWctMzg0LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYEhBU19JT1BPUlRgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBIQVNfSU9QT1JUYCBmbGFnLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBhIGJvb2xlYW4gd2l0aG91dCBhIGRpcmVjdCBwcm9tcHQuIFRoYXQgbWVhbnMgaXQmIzM5O3MgcHJvYmFibHkgZ2V0dGluZyBzZXQgYnkgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIEkgZG9uJiMzOTt0IHJlYWxseSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0IG15c2VsZi4gQWN0dWFsbHksIHRoZSB3YXkgSSB1bmRlcnN0YW5kIGl0LCBgSEFTX0lPUE9SVGAgdXN1YWxseSB0aWVzIGluIHdpdGggc29tZXRoaW5nIGxpa2UgUENJIG9yIGEgc2ltaWxhciBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBzbyBpdCYjMzk7cyBsaWtlbHkgYmVpbmcgc2VsZWN0ZWQgYXMgYSBkZXBlbmRlbmN5LiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhlIGBhcmNoL3Jpc2N2L0tjb25maWdgIGZpbGUgdG8gY29uZmlybS4gTGV0IG1lIGdvIHRha2UgYSBsb29rIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgSEFTX0lPUE9SVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xMjgtXHRzZWxlY3QgSEFSRElSUVNfU1dfUkVTRU5EXG5hcmNoL3Jpc2N2L0tjb25maWc6MTI5Olx0c2VsZWN0IEhBU19JT1BPUlQgaWYgTU1VXG5hcmNoL3Jpc2N2L0tjb25maWctMTMwLVx0c2VsZWN0IEhBVkVfQUxJR05FRF9TVFJVQ1RfUEFHRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDEzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyB0aGUgQlBGIEpJVCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBKSVQgY29tcGlsYXRpb24gZm9yIFJJU0MtVi4gRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgaWYgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKE1NVSkgaXMgYWN0aXZlLCBiZWNhdXNlIHRoYXQmIzM5O3MgYSBrZXkgY29uZGl0aW9uIGhlcmUuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYENPTkZJR19SSVNDVl9JU0FfWkFCSEFgIGVuYWJsZWQg4oCTIHRoYXQmIzM5O3MgbGlrZWx5IGltcG9ydGFudC4gSG1tLCB3aGF0IGFib3V0IGBDT05GSUdfU01QYCBhbmQgYENPTkZJR182NEJJVGA/IFRoZXkgYXJlIHVzdWFsbHkgZW5hYmxlZCwgYW5kIEkmIzM5O2QgYmUgc3VycHJpc2VkIGlmIHRoZXkgd2VyZW4mIzM5O3QgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgaG9uaW5nIGluIG9uIGBicGZfaml0X2VtaXRfaW5zbmAsIHdoaWNoIGlzIGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYC4gSSBhbHJlYWR5IGtub3cgdGhhdCBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEkgY2FuIHByb2JhYmx5IGRpcmVjdCBteSBlZmZvcnRzIHRoZXJlLCBvciBwZXJoYXBzIEkgY291bGQgbG9vayBhdCBgYnBmX2ludF9qaXRfY29tcGlsZWAgd2hpY2ggbGlrZWx5IGNhbGxzIGBicGZfaml0X2VtaXRfaW5zbmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk4NgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipGaW5kaW5nIHRoZSBCUEYgSklUIEVudHJ5IFBvaW50IGluIFJJU0MtVioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSBKdXN0LUluLVRpbWUgKEpJVCkgY29tcGlsZXIgZ2V0cyBpdHMgaG9va3MgaW50byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gVGhpcyBsaWtlbHkgbWVhbnMgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29yZSBmdW5jdGlvbiBvciBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHRha2luZyBCUEYgYnl0ZWNvZGUgYW5kIHRyYW5zbGF0aW5nIGl0IGludG8gbmF0aXZlIFJJU0MtViBpbnN0cnVjdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIHR5cGljYWwgSklUIGludGVncmF0aW9uIHBvaW50cy4gVGhlcmUmIzM5O3MgcHJvYmFibHkgYSBkcml2ZXIgb3IgbW9kdWxlIGludm9sdmVkLCBhbmQgdGhhdCYjMzk7cyBsaWtlbHkgdGhlIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gc3lzdGVtIGNhbGwgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBob3cgZUJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkLCB2ZXJpZmllZCwgYW5kIGV2ZW50dWFsbHkgZXhlY3V0ZWQuIEkgc3VzcGVjdCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBtZW1vcnkgbWFwcGluZyBvciBjb2RlIGdlbmVyYXRpb24gYW5kIGV4ZWN1dGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZi4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHNwZWNpZmljIFJJU0MtVi1yZWxhdGVkIGltcGxlbWVudGF0aW9ucyB3aXRoaW4gdGhhdCBjb2RlIHRvbywgaW4gY2FzZSB0aGVyZSBhcmUgdW5pcXVlIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIE15IGdvYWwgaXMgdG8gZmluZCB0aGUgZnVuY3Rpb24sIGFuZCBhbHNvIGdldCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdXJyb3VuZGluZyBjb250cm9sIGZsb3csIHdoaWNoIHdpbGwgaW52b2x2ZSBzb21lIHNlcmlvdXMgY29kZSBkaXZpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmXy4qX2NvbXBpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMDIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTG9jYXRpbmcgdGhlIEpJVCBDb21waWxhdGlvbiBGdW5jdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIHNob3VsZCBwcm9iYWJseSBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciB0aGUgYGJwZl9qaXRfY29tcGlsZWAgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgd2l0aGluIHRoZSBmaWxlLiBUaGlzIGlzIGEgY29tbW9uIHN0YXJ0aW5nIHBvaW50IHdoZW4gaW52ZXN0aWdhdGluZyBCUEYgSklUIGNvbXBpbGF0aW9uIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHByb2Nlc3MuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmFzZSB0byBtb3ZlIGZvcndhcmQgZnJvbSBhbmQgZ2l2ZSBtZSBhbiBpbW1lZGlhdGUgc2Vuc2Ugb2YgdGhlIGVudmlyb25tZW50IEkmIzM5O20gbG9va2luZyBhdC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgYmUgYSBzdHJhaWdodGZvcndhcmQgZmlyc3Qgc3RlcCBhbmQgbm90IGEgd2lsZCBnb29zZSBjaGFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMzMj1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjgtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNjk6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNzAtXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE4MTEtXHRcdG1hcmtfY2FsbChjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxODEyOlx0XHRyZXQgPSBicGZfaml0X2dldF9mdW5jX2FkZHIoY3R4LVx1MDAzZXByb2csIGluc24sIGV4dHJhX3Bhc3MsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE4MTMtXHRcdFx0XHRcdCAgICBcdTAwMjZhZGRyLCBcdTAwMjZmaXhlZF9hZGRyKTtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE4MjAtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjE4MjE6XHRcdFx0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LVx1MDAzZXByb2csIGluc24pO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xODIyLVx0XHRcdGlmICghZm0pXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTk0LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxOTk1OnZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgYm9vbCBpc19zdWJwcm9nKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTk2LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwOTItXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIwOTM6dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDk0LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwOTctXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIwOTg6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjA5OS17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTAyLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTAzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZyh2b2lkKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTA0LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMDctXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxMDg6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hKHZvaWQpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMDkte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjExMi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjExMzpib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMTQte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzMS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjEzMjpib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzMy17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTM2LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTM3OmJvb2wgYnBmX2ppdF9pbmxpbmVzX2hlbHBlcl9jYWxsKHMzMiBpbW0pXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMzgte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE0OC1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE0OTpib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgQlBGIEpJVCBDb21waWxhdGlvbiBQYXRoKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgaG9tZXMgaW4gb24gYGJwZl9qaXRfZW1pdF9pbnNuYCBhcyB0aGUgbGlrZWx5IGNvcmUgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgd29ya2hvcnNlIGluIHRoZXNlIEJQRiBKSVQgaW1wbGVtZW50YXRpb25zIOKAkyB0aGUgb25lIHdoZXJlIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYW5kIGVtaXNzaW9uIGhhcHBlbnMuCgpCdXQgaG9sZCBvbiwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGluIHRoYXQsIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gaW4gdGhlIHJpZ2h0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb250ZXh0LiBJIGhhdmUgYSBodW5jaCBpdCBtaWdodCBiZSBuZXN0bGVkIGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuY2AuIEkmIzM5O2xsIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhlIHByaW1hcnkgY29tcGlsYXRpb24gZnVuY3Rpb24sIHdoaWNoIEkgc3VzcGVjdCBpcyBgYnBmX2ppdF9jb21waWxlYCwgaXMgYWN0dWFsbHkgdGhlcmUsIG9yIGlmIHRoaXMgaXMgYW4gYWJzdHJhY3Rpb24gb3IgYW4gaW5kaXJlY3Rpb24gdmlhIGEgZGlmZmVyZW50IGZpbGUgb3IgaW5jbHVkZSBzdGF0ZW1lbnQuIEtub3dpbmcgdGhhdCBpbml0aWFsIGNhbGwgaXMgY3JpdGljYWwgdG8gdHJhY2luZyB0aGUgd2hvbGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0zOT1ib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTQzLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6NDQ6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTQ1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNTMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJJU0MtViBCUEYgSklUIE9wdGltaXphdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhlIFJJU0MtViBrZXJuZWwgY29kZSwgdHJ5aW5nIHRvIGlkZW50aWZ5IHByaW1lIGFyZWFzIGZvciBmdXp6aW5nIHJlbGF0ZWQgdG8gcmVjZW50IGNoYW5nZXMuIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG15IGVmZm9ydHMgZWZmZWN0aXZlbHksIHRhcmdldGluZyBuZXcgY29kZSBvciBzaWduaWZpY2FudGx5IG1vZGlmaWVkIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgaHVuY2ggd2FzIGNvcnJlY3Q6IHRoZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb24sIGxvY2F0ZWQgd2l0aGluIGBicGZfaml0X2NvcmUuY2AsIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBvciBwZXJoYXBzIGV2ZW4gYGJwZl9qaXRfZW1pdF9pbnNuYCBkaXJlY3RseSwgc2luY2UgaXQgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIGNvcmUgY2hhbmdlcyBhcmUgbWFkZS4KCkkgdGhlbiBzdGFydGVkIGV4cGxvcmluZyB3aGVyZSB0aGVzZSBKSVQgaW5zdHJ1Y3Rpb25zIGFyZSB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIHRvb2sgYSBsb29rIGF0IGBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oYCBiZWNhdXNlIGl0IHNlZW1lZCByZWxldmFudCB0byB0aGUgcGVyLUNQVSBvcHRpbWl6YXRpb25zIEkgc3VzcGVjdCBhcmUgaGFwcGVuaW5nIGluIHRoZSBKSVQuIFN1cmUgZW5vdWdoLCB0aGlzIGZpbGUgaW50cm9kdWNlcyBhIHNsZXcgb2YgaW5saW5lIGZ1bmN0aW9ucyBsaWtlIGBfX3BlcmNwdV9hZGRfYW1vX2Nhc2VfOGAgYW5kIGB0aGlzX2NwdV9hZGRfMWAsIGFsbCBkZXBlbmRlbnQgb24gYENPTkZJR19SSVNDVl9JU0FfWkFCSEFgLiBXYWl0IGEgbWludXRlLCBgdGhpc19jcHVfYWRkXzFgIGlzIGEgbWFjcm8uIFNpbmNlIGl0JiMzOTtzIGEgbWFjcm8gSSYjMzk7bSBsZXNzIGludGVyZXN0ZWQsIGJ1dCB0aGUgcGVyLUNQVSBjb2RlIGlzIGNsZWFybHkgdGhlIHBvaW50IG9mIGludGVyZXN0LiBUaGUgdXNlIG9mIHBlci1DUFUgdmFyaWFibGVzIGlzIGxpa2VseSB3aWRlc3ByZWFkLCB3aGljaCBwcmVzZW50cyBhIHNpZ25pZmljYW50IGF0dGFjayBzdXJmYWNlLgoKSSBhbHNvIGNoZWNrZWQgb3RoZXIgQyBmaWxlcyB0aGF0IHdlcmUgbW9kaWZpZWQuIGBhcmNoL3Jpc2N2L2tlcm5lbC9zbXBib290LmNgIHNob3dlZCBjaGFuZ2VzIHRvIGBfX2NwdV91cGAsIGBzbXBfcHJlcGFyZV9ib290X2NwdWAsIGFuZCBgc21wX2NhbGxpbmAgYnV0IHRob3NlIGFyZSBtb3JlIGJvb3QtcmVsYXRlZCwgc28gdGhleSYjMzk7cmUgbGVzcyBjb21wZWxsaW5nIGZvciBmb2N1c2VkIGZ1enppbmcuIFNpbWlsYXJseSwgYGFyY2gvcmlzY3Yva2VybmVsL2FzbS1vZmZzZXRzLmNgIHRvdWNoZXMgYGFzbV9vZmZzZXRzYCBidXQgdGhpcyBkb2VzbiYjMzk7dCBzZWVtIGRpcmVjdGx5IHJlbGV2YW50IHRvIG15IGdvYWwuCgpOb3csIHpvb21pbmcgYmFjayBpbiwgdGhlIGtleSBmdW5jdGlvbmFsIGNoYW5nZSBzZWVtcyB0byBiZSBjZW50ZXJlZCBhcm91bmQgaG93IHRoZSBCUEYgSklUIGhhbmRsZXMgcGVyLUNQVSBpbnN0cnVjdGlvbnMuIFNwZWNpZmljYWxseSwgdGhpcyBibG9jayBvZiBjb2RlOgpgYGBjCiNpZmRlZiBDT05GSUdfU01QCi0JCQkvKiBMb2FkIGN1cnJlbnQgQ1BVIG51bWJlciBpbiBUMSAqLwotCQkJZW1pdF9sdyhSVl9SRUdfVDEsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgY3B1KSwKJiM0MzsJCQllbWl0X2xkKFJWX1JFR19UMSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBwY3B1X29mZnNldCksCiAJCQkJUlZfUkVHX1RQLCBjdHgpOwotCQkJLyogTG9hZCBhZGRyZXNzIG9mIF9fcGVyX2NwdV9vZmZzZXQgYXJyYXkgaW4gVDIgKi8KLQkJCWVtaXRfYWRkcihSVl9SRUdfVDIsICh1NjQpJmFtcDtfX3Blcl9jcHVfb2Zmc2V0LCBleHRyYV9wYXNzLCBjdHgpOwotCQkJLyogR2V0IGFkZHJlc3Mgb2YgX19wZXJfY3B1X29mZnNldFtjcHVdIGluIFQxICovCi0JCQllbWl0X3NoM2FkZChSVl9SRUdfVDEsIFJWX1JFR19UMSwgUlZfUkVHX1QyLCBjdHgpOwotCQkJLyogTG9hZCBfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gaW4gVDEgKi8KLQkJCWVtaXRfbGQoUlZfUkVHX1QxLCAwLCBSVl9SRUdfVDEsIGN0eCk7CiAJCQkvKiBBZGQgdGhlIG9mZnNldCB0byBSZCAqLwogCQkJZW1pdF9hZGQocmQsIHJkLCBSVl9SRUdfVDEsIGN0eCk7CiAjZW5kaWYKYGBgClRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIGZvciBwZXItQ1BVIHZhcmlhYmxlcyBpbiB0aGUgQlBGIEpJVCwgcmVwbGFjaW5nIGEgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zIHdpdGggYSBwb3RlbnRpYWxseSBtb3JlIGVmZmljaWVudCBvbmUuIERlZmluaXRlbHkgcHJvbWlzaW5nISBUaGlzIGhpZ2hsaWdodHMgdGhlIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJwZl9qaXRfZW1pdF9pbnNuYCBmdW5jdGlvbnMgZm9yIG15IGZ1enppbmcgY2FtcGFpZ24uCgpGaW5hbGx5LCBJIGNoZWNrZWQgYENPTkZJR19SSVNDVl9JU0FfWkFCSEFgIHRvIHNlZSBpZiBpdCYjMzk7cyB0aGUgb25seSBjb25maWcsIGFuZCB0aGVuIGNoZWNrZWQgYENPTkZJR19CUEZfSklUYC4gVGhlIEJQRiBKSVQgbmVlZHMgdG8gYmUgZW5hYmxlZCwgYnV0IHRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZGVmYXVsdC4gSXQmIzM5O3MgdGltZSB0byBzdGFydCBjcmFmdGluZyBzb21lIGZ1enogdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk0MwoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiA0NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZ1enppbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgd2UgbmVlZCB0byBlbmFibGUgYFJJU0NWX0lTQV9aQUJIQWAgYW5kIGBCUEZfSklUYC4gSG9sZCBvbiwgYEhBU19JT1BPUlRgIGlzbiYjMzk7dCBzb21ldGhpbmcgd2UgZGlyZWN0bHkgZW5hYmxlLCBzbyB3ZSBjYW4gaWdub3JlIHRoYXQuIEkgcXVpY2tseSBjaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlncyBidXQgYENPTkZJR19TTVBgIGFuZCBgQ09ORklHXzY0QklUYCBhcmUgYWxyZWFkeSBnb29kIHRvIGdvLgoKTm93LCBsZXQmIzM5O3MgcmV2aXNpdCB0aGUgY29yZSByZXF1aXJlbWVudHM6IGBXb3J0aEZ1enppbmc9dHJ1ZWAsIHRoZSBgRm9jdXNTeW1ib2xzYCAoYGJwZl9qaXRfZW1pdF9pbnNuYCwgYGJwZl9pbnRfaml0X2NvbXBpbGVgKSwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgKGBSSVNDVl9JU0FfWkFCSEFgLCBgQlBGX0pJVGApLgoKYGJwZl9qaXRfZW1pdF9pbnNuYCBsb29rcyBsaWtlIGEgc29saWQgZm9jdXMgc3ltYm9sLiBJIHF1aWNrbHkgc2NhbiB0aGUgcGF0Y2ggdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQuIEl0IHRvdWNoZXMgYGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmhgIGFuZCBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaGAuIFRoZXNlIGFyZSBoZWFkZXIgZmlsZXMgd2l0aCBpbmxpbmUgZnVuY3Rpb25zLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBgYXJjaC9yaXNjdi9rZXJuZWwvc21wYm9vdC5jYCwgd2hpY2ggaGFzIGJvb3QvaG90cGx1ZyBmdW5jdGlvbnMgKGBfX2NwdV91cGAsIGBzbXBfcHJlcGFyZV9ib290X2NwdWAsIGBzbXBfY2FsbGluYCkuIEJ1dCBgYnBmX2ppdF9lbWl0X2luc25gIHN0aWxsIHNlZW1zIGxpa2UgdGhlIG1vc3QgcmVsZXZhbnQuCgpJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhhdCBgUklTQ1ZfSVNBX1pBQkhBYCBpcyB0aGUgY29ycmVjdCBjb25maWcsIGFuZCB5ZXAsIGBjb25maWcgUklTQ1ZfSVNBX1pBQkhBYCBjb25maXJtcyBpdC4KClRoZW4sIEkgbWFrZSBzdXJlIHRoZSBmdW5jdGlvbiBuYW1lcyBhcmUgY29ycmVjdDogYGJwZl9qaXRfZW1pdF9pbnNuYCBpcyBjb25maXJtZWQgYnkgYGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGV4dHJhX3Bhc3MpYCwgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyBjb25maXJtZWQgYnkgYHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpYC4KCkFscmlnaHQsIHdpdGggdGhhdCBjb25maXJtZWQsIEkmIzM5O20gcmVhZHkgdG8gc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IFJJU0NWX0lTQV9aQUJIQTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSSVNDVl9JU0FfWkFCSEEmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUklTQy1WIGFyY2hpdGVjdHVyZSBjb2RlIHRvIG9wdGltaXplIHBlci1DUFUgdmFyaWFibGUgYWNjZXNzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHBlcmNwdS5oIGhlYWRlciB3aXRoIG9wdGltaXplZCBpbmxpbmUgb3BlcmF0aW9ucywgdXBkYXRlcyBjb250ZXh0IHN3aXRjaCBsb2dpYywgYW5kIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIHVzZSB0aGUgbmV3IHBlci1DUFUgb2Zmc2V0LiBUaGUgQlBGIEpJVCBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIG1ha2luZyB0aGVtIGdvb2QgdGFyZ2V0cyBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBSSVNDVl9JU0FfWkFCSEEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDU2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIE1pc3NpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGEgYml0IHB1enpsZWQuIEkgaW5pdGlhbGx5IHRob3VnaHQgYFJJU0NWX0lTQV9aQUJIQWAgd2FzbiYjMzk7dCBwYXJ0IG9mIHRoZSBrZXJuZWwgdHJlZSwgYW5kIHRoYXQmIzM5O3Mgd2hhdCBgc2V0LXJlc3VsdHNgIHNlZW1lZCB0byBpbmRpY2F0ZS4gQnV0IGEgcXVpY2sgYGdyZXBgIHNlYXJjaCBicm91Z2h0IHVwIGEgbWF0Y2ggaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2AuIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0IGBncmVwYCBvdXRwdXQ7IG1ha2Ugc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBzb21ldGhpbmcuIFllcCwgdGhlcmUgaXQgaXM6IGBhcmNoL3Jpc2N2L0tjb25maWc6Njg0OmNvbmZpZyBSSVNDVl9JU0FfWkFCSEFgLiBOb3csIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2h5IHRoZSBwcmV2aW91cyBjb21tYW5kIHJlcG9ydGVkIGl0IGFzIG5vbi1leGlzdGVudC4KCkNvdWxkIGl0IGJlIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGludHJvZHVjZWQgYnkgYSBwYXRjaCB0aGF0IGhhcyBub3QgeWV0IGJlZW4gYXBwbGllZD8gTm8sIHRoZSBwcm9tcHQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgYWxyZWFkeSBhcHBsaWVkLiBUaGVyZWZvcmUsIHRoZXkgc2hvdWxkIGJlIGF2YWlsYWJsZSBpbiB0aGUgSEVBRCBjb21taXQuIFNvLCBsb2dpY2FsbHksIHNpbmNlIGl0JiMzOTtzIGluIGBLY29uZmlnYCwgaXQgKnNob3VsZCogZXhpc3QuIEkgbmVlZCB0byBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IG9mIGEgY29uZmlndXJhdGlvbiBlcnJvci4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBwcmVzZW50IGluIGBhcmNoL3Jpc2N2L0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUklTQ1ZfSVNBX1pBQkhBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZz02Nzc9Y29uZmlnIFRPT0xDSEFJTl9IQVNfWkFCSEFcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctNjgzLVxuYXJjaC9yaXNjdi9LY29uZmlnOjY4NDpjb25maWcgUklTQ1ZfSVNBX1pBQkhBXG5hcmNoL3Jpc2N2L0tjb25maWctNjg1LVx0Ym9vbCBcJiMzNDtaYWJoYSBleHRlbnNpb24gc3VwcG9ydCBmb3IgYXRvbWljIGJ5dGUvaGFsZndvcmQgb3BlcmF0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU5MQoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gSXNzdWUqKgoKT2theSwgc28gYHNldC1yZXN1bHRzYCBpcyBmYWlsaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IG11c3QgYmUgY2hlY2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMmIzM5OyBleGlzdGVuY2Ugd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBoaWVyYXJjaHksIHBvc3NpYmx5IGRpcmVjdGx5IHBhcnNpbmcgYEtjb25maWdgIGZpbGVzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGVycm9yIG1lc3NhZ2UuIEFoLCBoZXJlIGl0IGlzOiAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBSSVNDVl9JU0FfWkFCSEEuJiMzNDsKCkhtbSwgaXMgdGhpcyBiZWNhdXNlIGBSSVNDVl9JU0FfWkFCSEFgIGlzIGRlZmluZWQgdW5kZXIgYGFyY2gvcmlzY3YvS2NvbmZpZ2AsIGJ1dCB0aGUgdG9vbCBpcyBhc3N1bWluZyBhIGRpZmZlcmVudCBkZWZhdWx0IGFyY2hpdGVjdHVyZT8gTW9zdCBsaWtlbHksIHRoZSB0b29sIGlzIGVpdGhlciBjaGVja2luZyB0aGUgZGVmYXVsdCBhcmNoaXRlY3R1cmUmIzM5O3MgS2NvbmZpZyBmaWxlcywgc3VjaCBhcyB4ODZfNjQsIHdoaWNoIGlzIGEgY29tbW9uIGRlZmF1bHQsIG9yLCB0aGVyZSBpcyBhbiBhY3R1YWwgYnVnLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBlaXRoZXIgcmVtb3ZlIGBSSVNDVl9JU0FfWkFCSEFgIGVudGlyZWx5IGZyb20gdGhlIGlucHV0IG9yIGlnbm9yZSB0aGUgZXJyb3IgaWYgdGhhdCYjMzk7cyBhbiBvcHRpb24uCgpXYWl0IGEgbWludXRlLCBgc2V0LXJlc3VsdHNgIGRpZCBhY3R1YWxseSBmYWlsLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNhbGwgaXQgYWdhaW4sIHRoaXMgdGltZSB3aXRob3V0IGBSSVNDVl9JU0FfWkFCSEFgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUklTQy1WIGFyY2hpdGVjdHVyZSBjb2RlIHRvIG9wdGltaXplIHBlci1DUFUgdmFyaWFibGUgYWNjZXNzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHBlcmNwdS5oIGhlYWRlciB3aXRoIG9wdGltaXplZCBpbmxpbmUgb3BlcmF0aW9ucywgdXBkYXRlcyBjb250ZXh0IHN3aXRjaCBsb2dpYywgYW5kIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIHVzZSB0aGUgbmV3IHBlci1DUFUgb2Zmc2V0LiBUaGUgQlBGIEpJVCBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIG1ha2luZyB0aGVtIGdvb2QgdGFyZ2V0cyBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUklTQy1WIGFyY2hpdGVjdHVyZSBjb2RlIHRvIG9wdGltaXplIHBlci1DUFUgdmFyaWFibGUgYWNjZXNzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHBlcmNwdS5oIGhlYWRlciB3aXRoIG9wdGltaXplZCBpbmxpbmUgb3BlcmF0aW9ucywgdXBkYXRlcyBjb250ZXh0IHN3aXRjaCBsb2dpYywgYW5kIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIHVzZSB0aGUgbmV3IHBlci1DUFUgb2Zmc2V0LiBUaGUgQlBGIEpJVCBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIG1ha2luZyB0aGVtIGdvb2QgdGFyZ2V0cyBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjAzLjQ4NjQ3ODIwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDE5MjE1NTE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSSVNDLVYgYXJjaGl0ZWN0dXJlIGNvZGUgdG8gb3B0aW1pemUgcGVyLUNQVSB2YXJpYWJsZSBhY2Nlc3MuIEl0IGludHJvZHVjZXMgYSBuZXcgcGVyY3B1LmggaGVhZGVyIHdpdGggb3B0aW1pemVkIGlubGluZSBvcGVyYXRpb25zLCB1cGRhdGVzIGNvbnRleHQgc3dpdGNoIGxvZ2ljLCBhbmQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gdXNlIHRoZSBuZXcgcGVyLUNQVSBvZmZzZXQuIFRoZSBCUEYgSklUIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgbWFraW5nIHRoZW0gZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTozOTowMy40ODY0OTAyMTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMjc0NzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0ZTMxMzA3ZDk3ZGQyNjJmYWY0NDEyNjZlZmJjM2VmYjAxOThlMDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAwOTozOTowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaFxcbmluZGV4IGU5ZThiYTgzZTYzMmY5Li4xMzdhNDk0ODgzMjVlNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaFxcbkBAIC05MSwxMSArOTEsNyBAQFxcbiBcXG4gI2lmZGVmIENPTkZJR19TTVBcXG4gLm1hY3JvIGFzbV9wZXJfY3B1IGRzdCBzeW0gdG1wXFxuLVxcdGx3ICAgIFxcXFx0bXAsIFRBU0tfVElfQ1BVX05VTSh0cClcXG4tXFx0c2xsaSAgXFxcXHRtcCwgXFxcXHRtcCwgUklTQ1ZfTEdQVFJcXG4tXFx0bGEgICAgXFxcXGRzdCwgX19wZXJfY3B1X29mZnNldFxcbi1cXHRhZGQgICBcXFxcZHN0LCBcXFxcZHN0LCBcXFxcdG1wXFxuLVxcdFJFR19MIFxcXFx0bXAsIDAoXFxcXGRzdClcXG4rXFx0UkVHX0wgXFxcXHRtcCwgVEFTS19USV9QQ1BVX09GRlNFVCh0cClcXG4gXFx0bGEgICAgXFxcXGRzdCwgXFxcXHN5bVxcbiBcXHRhZGQgICBcXFxcZHN0LCBcXFxcZHN0LCBcXFxcdG1wXFxuIC5lbmRtXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW8uaFxcbmluZGV4IDA5YmI1ZjU3YTlkMzQ2Li42ZjVkNzAzMTNjODNlZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmhcXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmhcXG5AQCAtNTYsNiArNTYsOCBAQFxcbiAjZGVmaW5lIF9faW9fcGJ3KClcXHRSSVNDVl9GRU5DRShpb3csIG8pXFxuICNkZWZpbmUgX19pb19wYXcoKVxcdFJJU0NWX0ZFTkNFKG8sIGlvKVxcbiBcXG4rI2RlZmluZSBQQ0lfSU9fQUREUihhZGRyKVxcdCgodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKVBDSV9JT0JBU0UgKyAoYWRkcikpKVxcbitcXG4gLypcXG4gICogQWNjZXNzZXMgZnJvbSBhIHNpbmdsZSBoYXJ0IHRvIGEgc2luZ2xlIEkvTyBhZGRyZXNzIG11c3QgYmUgb3JkZXJlZC4gIFRoaXNcXG4gICogYWxsb3dzIHVzIHRvIHVzZSB0aGUgcmF3IHJlYWQgbWFjcm9zLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBmZW5jZSBiZWZvcmUgYW5kXFxuQEAgLTEwMiwxMiArMTA0LDE0IEBAIF9faW9fcmVhZHNfaW5zKHJlYWRzLCB1MzIsIGwsIF9faW9fYnIoKSwgX19pb19hcihhZGRyKSlcXG4gI2RlZmluZSByZWFkc3coYWRkciwgYnVmZmVyLCBjb3VudCkgX19yZWFkc3coYWRkciwgYnVmZmVyLCBjb3VudClcXG4gI2RlZmluZSByZWFkc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19yZWFkc2woYWRkciwgYnVmZmVyLCBjb3VudClcXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFTX0lPUE9SVFxcbiBfX2lvX3JlYWRzX2lucyhpbnMsICB1OCwgYiwgX19pb19wYnIoKSwgX19pb19wYXIoYWRkcikpXFxuIF9faW9fcmVhZHNfaW5zKGlucywgdTE2LCB3LCBfX2lvX3BicigpLCBfX2lvX3BhcihhZGRyKSlcXG4gX19pb19yZWFkc19pbnMoaW5zLCB1MzIsIGwsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKVxcbi0jZGVmaW5lIGluc2IoYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNiKFBDSV9JT0JBU0UgKyAoYWRkciksIGJ1ZmZlciwgY291bnQpXFxuLSNkZWZpbmUgaW5zdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3coUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcXG4tI2RlZmluZSBpbnNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zbChQQ0lfSU9CQVNFICsgKGFkZHIpLCBidWZmZXIsIGNvdW50KVxcbisjZGVmaW5lIGluc2IoYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNiKFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxcbisjZGVmaW5lIGluc3coYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnN3KFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxcbisjZGVmaW5lIGluc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNsKFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxcbisjZW5kaWZcXG4gXFxuIF9faW9fd3JpdGVzX291dHMod3JpdGVzLCAgdTgsIGIsIF9faW9fYncoKSwgX19pb19hdygpKVxcbiBfX2lvX3dyaXRlc19vdXRzKHdyaXRlcywgdTE2LCB3LCBfX2lvX2J3KCksIF9faW9fYXcoKSlcXG5AQCAtMTE2LDI1ICsxMjAsMzEgQEAgX19pb193cml0ZXNfb3V0cyh3cml0ZXMsIHUzMiwgbCwgX19pb19idygpLCBfX2lvX2F3KCkpXFxuICNkZWZpbmUgd3JpdGVzdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX3dyaXRlc3coYWRkciwgYnVmZmVyLCBjb3VudClcXG4gI2RlZmluZSB3cml0ZXNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fd3JpdGVzbChhZGRyLCBidWZmZXIsIGNvdW50KVxcbiBcXG4rI2lmZGVmIENPTkZJR19IQVNfSU9QT1JUXFxuIF9faW9fd3JpdGVzX291dHMob3V0cywgIHU4LCBiLCBfX2lvX3BidygpLCBfX2lvX3BhdygpKVxcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHUxNiwgdywgX19pb19wYncoKSwgX19pb19wYXcoKSlcXG4gX19pb193cml0ZXNfb3V0cyhvdXRzLCB1MzIsIGwsIF9faW9fcGJ3KCksIF9faW9fcGF3KCkpXFxuLSNkZWZpbmUgb3V0c2IoYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzYihQQ0lfSU9CQVNFICsgKGFkZHIpLCBidWZmZXIsIGNvdW50KVxcbi0jZGVmaW5lIG91dHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3coUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcXG4tI2RlZmluZSBvdXRzbChhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHNsKFBDSV9JT0JBU0UgKyAoYWRkciksIGJ1ZmZlciwgY291bnQpXFxuKyNkZWZpbmUgb3V0c2IoYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzYihQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcXG4rI2RlZmluZSBvdXRzdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHN3KFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxcbisjZGVmaW5lIG91dHNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2woUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXFxuKyNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR182NEJJVFxcbiBfX2lvX3JlYWRzX2lucyhyZWFkcywgdTY0LCBxLCBfX2lvX2JyKCksIF9faW9fYXIoYWRkcikpXFxuICNkZWZpbmUgcmVhZHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fcmVhZHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpXFxuIFxcbisjaWZkZWYgQ09ORklHX0hBU19JT1BPUlRcXG4gX19pb19yZWFkc19pbnMoaW5zLCB1NjQsIHEsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKVxcbi0jZGVmaW5lIGluc3EoYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNxKFBDSV9JT0JBU0UgKyAoYWRkciksIGJ1ZmZlciwgY291bnQpXFxuKyNkZWZpbmUgaW5zcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3EoUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXFxuKyNlbmRpZlxcbiBcXG4gX19pb193cml0ZXNfb3V0cyh3cml0ZXMsIHU2NCwgcSwgX19pb19idygpLCBfX2lvX2F3KCkpXFxuICNkZWZpbmUgd3JpdGVzcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX3dyaXRlc3EoYWRkciwgYnVmZmVyLCBjb3VudClcXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFTX0lPUE9SVFxcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHU2NCwgcSwgX19pb19wYnIoKSwgX19pb19wYXcoKSlcXG4tI2RlZmluZSBvdXRzcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHNxKFBDSV9JT0JBU0UgKyAoYWRkciksIGJ1ZmZlciwgY291bnQpXFxuKyNkZWZpbmUgb3V0c3EoYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzcShQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcXG4rI2VuZGlmXFxuICNlbmRpZlxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS1nZW5lcmljL2lvLmhcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZGFkOTc1YjU1ZDBjMzFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZXJjcHUuaFxcbkBAIC0wLDAgKzEsMjg3IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuK1xcbisjaWZuZGVmIF9fQVNNX1BFUkNQVV9IXFxuKyNkZWZpbmUgX19BU01fUEVSQ1BVX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmVlbXB0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2FsdGVybmF0aXZlLW1hY3Jvcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2NwdWZlYXR1cmUtbWFjcm9zLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vY3VycmVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2h3Y2FwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vdGhyZWFkX2luZm8uaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgUEVSQ1BVX1JXX09QUyhzeilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3BlcmNwdV9yZWFkXyMjc3oodm9pZCAqcHRyKVxcdFxcdFxcXFxcXG4re1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cmV0dXJuIFJFQURfT05DRSgqKHUjI3N6ICopcHRyKTtcXHRcXHRcXHRcXHRcXFxcXFxuK31cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1X3dyaXRlXyMjc3oodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbClcXHRcXFxcXFxuK3tcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFdSSVRFX09OQ0UoKih1IyNzeiAqKXB0ciwgKHUjI3N6KXZhbCk7XFx0XFx0XFx0XFx0XFxcXFxcbit9XFxuK1xcbitQRVJDUFVfUldfT1BTKDgpXFxuK1BFUkNQVV9SV19PUFMoMTYpXFxuK1BFUkNQVV9SV19PUFMoMzIpXFxuK1xcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuK1BFUkNQVV9SV19PUFMoNjQpXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSBfX1BFUkNQVV9BTU9fT1BfQ0FTRShzZngsIG5hbWUsIHN6LCBhbW9faW5zbilcXHRcXHRcXHRcXFxcXFxuK3N0YXRpYyBpbmxpbmUgdm9pZFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rX19wZXJjcHVfIyNuYW1lIyNfYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVxcdFxcdFxcXFxcXG4re1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0YXNtIHZvbGF0aWxlIChcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcXCJhbW9cXFwiICNhbW9faW5zbiAjc2Z4IFxcXCIgemVybywgJVt2YWxdLCAlW3B0cl1cXFwiXFx0XFx0XFxcXFxcbitcXHRcXHQ6IFtwdHJdIFxcXCIrQVxcXCIgKCoodSMjc3ogKilwdHIpXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQ6IFt2YWxdIFxcXCJyXFxcIiAoKHUjI3N6KSh2YWwpKVxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0OiBcXFwibWVtb3J5XFxcIik7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9XFxuK1xcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuKyNkZWZpbmUgUEVSQ1BVX09QKG5hbWUsIGFtb19pbnNuKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19QRVJDUFVfQU1PX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbilcXHRcXHRcXHRcXFxcXFxuK1xcdF9fUEVSQ1BVX0FNT19PUF9DQVNFKC5kLCBuYW1lLCA2NCwgYW1vX2luc24pXFxuKyNlbHNlXFxuKyNkZWZpbmUgUEVSQ1BVX09QKG5hbWUsIGFtb19pbnNuKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19QRVJDUFVfQU1PX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbilcXG4rI2VuZGlmXFxuK1xcbitQRVJDUFVfT1AoYWRkLCBhZGQpXFxuK1BFUkNQVV9PUChhbmRub3QsIGFuZClcXG4rUEVSQ1BVX09QKG9yLCBvcilcXG4rXFxuKy8qXFxuKyAqIEN1cnJlbnRseSwgb25seSB0aGlzX2NwdV9hZGRfcmV0dXJuX3h4eCgpIHJlcXVpcmVzIGEgcmV0dXJuIHZhbHVlLFxcbisgKiBhbmQgdGhlIFBFUkNQVV9SRVRfT1AoKSBkb2VzIG5vdCBhY2NvdW50IGZvciBvdGhlciBvcGVyYXRpb25zLlxcbisgKi9cXG4rI2RlZmluZSBfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0Uoc2Z4LCBuYW1lLCBzeiwgYW1vX2luc24pXFx0XFx0XFxcXFxcbitzdGF0aWMgaW5saW5lIHUjI3N6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitfX3BlcmNwdV8jI25hbWUjI19yZXR1cm5fYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVxcdFxcXFxcXG4re1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cmVnaXN0ZXIgdSMjc3ogcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRhc20gdm9sYXRpbGUgKFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFxcImFtb1xcXCIgI2Ftb19pbnNuICNzZnggXFxcIiAlW3JldF0sICVbdmFsXSwgJVtwdHJdXFxcIlxcdFxcdFxcXFxcXG4rXFx0XFx0OiBbcHRyXSBcXFwiK0FcXFwiICgqKHUjI3N6ICopcHRyKSwgW3JldF0gXFxcIj1yXFxcIiAocmV0KVxcdFxcdFxcXFxcXG4rXFx0XFx0OiBbdmFsXSBcXFwiclxcXCIgKCh1IyNzeikodmFsKSlcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdDogXFxcIm1lbW9yeVxcXCIpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyZXR1cm4gcmV0ICsgdmFsO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfVxcbitcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbisjZGVmaW5lIFBFUkNQVV9SRVRfT1AobmFtZSwgYW1vX2luc24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbilcXHRcXHRcXFxcXFxuK1xcdF9fUEVSQ1BVX0FNT19SRVRfT1BfQ0FTRSguZCwgbmFtZSwgNjQsIGFtb19pbnNuKVxcbisjZWxzZVxcbisjZGVmaW5lIFBFUkNQVV9SRVRfT1AobmFtZSwgYW1vX2luc24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbilcXG4rI2VuZGlmXFxuK1xcbitQRVJDUFVfUkVUX09QKGFkZCwgYWRkKVxcbitcXG4rI2RlZmluZSBQRVJDUFVfOF8xNl9HRVRfU0hJRlQocHRyKVxcdCgoKHVuc2lnbmVkIGxvbmcpKHB0cikgXFx1MDAyNiAweDMpICogQklUU19QRVJfQllURSlcXG4rI2RlZmluZSBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeilcXHRHRU5NQVNLKChzeikgLSAxLCAwKVxcbisjZGVmaW5lIFBFUkNQVV84XzE2X0dFVF9QVFIzMihwdHIpXFx0KCh1MzIgKikoKHVuc2lnbmVkIGxvbmcpKHB0cikgXFx1MDAyNiB+MHgzKSlcXG4rXFxuKyNkZWZpbmUgUEVSQ1BVXzhfMTZfT1AobmFtZSwgYW1vX2luc24sIHN6LCBzZngsIHZhbF90eXBlLCBuZXdfdmFsX2V4cHIsIGFzbV9vcClcXHRcXHRcXHRcXFxcXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdV8jI25hbWUjI19hbW9fY2FzZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpXFx0XFx0XFxcXFxcbit7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUklTQ1ZfSVNBX1pBQkhBKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cmlzY3ZfaGFzX2V4dGVuc2lvbl91bmxpa2VseShSSVNDVl9JU0FfRVhUX1pBQkhBKSkge1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0YXNtIHZvbGF0aWxlIChcXFwiYW1vXFxcIiAjYW1vX2luc24gI3NmeCBcXFwiIHplcm8sICVbdmFsXSwgJVtwdHJdXFxcIlxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0OiBbcHRyXSBcXFwiK0FcXFwiKCoodmFsX3R5cGUgKilwdHIpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQ6IFt2YWxdIFxcXCJyXFxcIigodmFsX3R5cGUpKChuZXdfdmFsX2V4cHIpIFxcdTAwMjYgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSlcXHRcXFxcXFxuK1xcdFxcdFxcdDogXFxcIm1lbW9yeVxcXCIpO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0fSBlbHNlIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHUzMiAqcHRyMzIgPSBQRVJDUFVfOF8xNl9HRVRfUFRSMzIocHRyKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgc2hpZnQgPSBQRVJDUFVfOF8xNl9HRVRfU0hJRlQocHRyKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGNvbnN0IHUzMiBtYXNrID0gUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opIFxcdTAwM2NcXHUwMDNjIHNoaWZ0O1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0Y29uc3QgdmFsX3R5cGUgdmFsX3RydW5jID0gKHZhbF90eXBlKSgobmV3X3ZhbF9leHByKVxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNiBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0dTMyIHJldHgsIHJjO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0dmFsX3R5cGUgbmV3X3ZhbF90eXBlO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRhc20gdm9sYXRpbGUgKFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcIjA6IGxyLncgJTAsICUyXFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwiYW5kICUzLCAlMCwgJTRcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcXCJzcmwgJTMsICUzLCAlNVxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0I2FzbV9vcCBcXFwiICUzLCAlMywgJTZcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcXCJhbmQgJTMsICUzLCAlOFxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcInNsbCAlMywgJTMsICU1XFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwiYW5kICUxLCAlMCwgJTdcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcXCJvciAlMSwgJTEsICUzXFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwic2MudyAlMSwgJTEsICUyXFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwiYm5leiAlMSwgMGJcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdDogXFxcIj1cXHUwMDI2clxcXCIocmV0eCksIFxcXCI9XFx1MDAyNnJcXFwiKHJjKSwgXFxcIitBXFxcIigqcHRyMzIpLCBcXFwiPVxcdTAwMjZyXFxcIihuZXdfdmFsX3R5cGUpXFx0XFx0XFxcXFxcbitcXHRcXHRcXHQ6IFxcXCJyXFxcIihtYXNrKSwgXFxcInJcXFwiKHNoaWZ0KSwgXFxcInJcXFwiKHZhbF90cnVuYyksIFxcXCJyXFxcIih+bWFzayksXFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgIFxcXCJyXFxcIihQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQ6IFxcXCJtZW1vcnlcXFwiKTtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK31cXG4rXFxuKyNkZWZpbmUgUEVSQ1BVX09QXzhfMTYob3BfbmFtZSwgb3AsIGV4cHIsIGZpbmFsX29wKVxcdFxcdFxcdFxcXFxcXG4rXFx0UEVSQ1BVXzhfMTZfT1Aob3BfbmFtZSwgb3AsIDgsIC5iLCB1OCwgZXhwciwgZmluYWxfb3ApO1xcdFxcdFxcXFxcXG4rXFx0UEVSQ1BVXzhfMTZfT1Aob3BfbmFtZSwgb3AsIDE2LCAuaCwgdTE2LCBleHByLCBmaW5hbF9vcClcXG4rXFxuK1BFUkNQVV9PUF84XzE2KGFkZCwgYWRkLCB2YWwsIGFkZClcXG4rUEVSQ1BVX09QXzhfMTYoYW5kbm90LCBhbmQsIH4odmFsKSwgYW5kKVxcbitQRVJDUFVfT1BfOF8xNihvciwgb3IsIHZhbCwgb3IpXFxuK1xcbisjZGVmaW5lIFBFUkNQVV84XzE2X1JFVF9PUChuYW1lLCBhbW9faW5zbiwgc3osIHNmeCwgdmFsX3R5cGUsIG5ld192YWxfZXhwcilcXHRcXHRcXHRcXFxcXFxuK3N0YXRpYyBpbmxpbmUgdmFsX3R5cGUgX19wZXJjcHVfIyNuYW1lIyNfcmV0dXJuX2Ftb19jYXNlXyMjc3oodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbClcXHRcXFxcXFxuK3tcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19SSVNDVl9JU0FfWkFCSEEpIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRyaXNjdl9oYXNfZXh0ZW5zaW9uX3VubGlrZWx5KFJJU0NWX0lTQV9FWFRfWkFCSEEpKSB7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRyZWdpc3RlciB2YWxfdHlwZSByZXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRhc20gdm9sYXRpbGUgKFxcXCJhbW9cXFwiICNhbW9faW5zbiAjc2Z4IFxcXCIgJVtyZXRdLCAlW3ZhbF0sICVbcHRyXVxcXCJcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdDogW3B0cl0gXFxcIitBXFxcIigqKHZhbF90eXBlICopcHRyKSwgW3JldF0gXFxcIj1yXFxcIihyZXQpXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQ6IFt2YWxdIFxcXCJyXFxcIigodmFsX3R5cGUpKChuZXdfdmFsX2V4cHIpIFxcdTAwMjYgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSlcXHRcXFxcXFxuK1xcdFxcdFxcdDogXFxcIm1lbW9yeVxcXCIpO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cmV0dXJuIHJldCArICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikgXFx1MDAyNiBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpO1xcdFxcdFxcXFxcXG4rXFx0fSBlbHNlIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHUzMiAqcHRyMzIgPSBQRVJDUFVfOF8xNl9HRVRfUFRSMzIocHRyKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgc2hpZnQgPSBQRVJDUFVfOF8xNl9HRVRfU0hJRlQocHRyKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGNvbnN0IHUzMiBtYXNrID0gKFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSBcXHUwMDNjXFx1MDAzYyBzaGlmdCk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRjb25zdCB1MzIgaW52X21hc2sgPSB+bWFzaztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGNvbnN0IHZhbF90eXBlIHZhbF90cnVuYyA9ICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcilcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjYgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHUzMiBvbGQsIG5ldywgdG1wO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRhc20gdm9sYXRpbGUgKFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcIjA6IGxyLncgJTAsICUzXFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwiYW5kICUxLCAlMCwgJTRcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcXCJzcmwgJTEsICUxLCAlNVxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcImFkZCAlMSwgJTEsICU2XFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwiYW5kICUxLCAlMSwgJTdcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcXCJzbGwgJTEsICUxLCAlNVxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcImFuZCAlMiwgJTAsICU4XFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwib3IgJTIsICUyLCAlMVxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcInNjLncgJTIsICUyLCAlM1xcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcImJuZXogJTIsIDBiXFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQ6IFxcXCI9XFx1MDAyNnJcXFwiKG9sZCksIFxcXCI9XFx1MDAyNnJcXFwiKHRtcCksIFxcXCI9XFx1MDAyNnJcXFwiKG5ldyksIFxcXCIrQVxcXCIoKnB0cjMyKVxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0OiBcXFwiclxcXCIobWFzayksIFxcXCJyXFxcIihzaGlmdCksIFxcXCJyXFxcIih2YWxfdHJ1bmMpLCBcXFwiclxcXCIoUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSwgXFxcXFxcbitcXHRcXHRcXHRcXFwiclxcXCIoaW52X21hc2spXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQ6IFxcXCJtZW1vcnlcXFwiKTtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHJldHVybiAodmFsX3R5cGUpKHRtcCBcXHUwMDNlXFx1MDAzZSBzaGlmdCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9XFxuK1xcbitQRVJDUFVfOF8xNl9SRVRfT1AoYWRkLCBhZGQsIDgsIC5iLCB1OCwgdmFsKVxcbitQRVJDUFVfOF8xNl9SRVRfT1AoYWRkLCBhZGQsIDE2LCAuaCwgdTE2LCB2YWwpXFxuK1xcbisjZGVmaW5lIF9wY3BfcHJvdGVjdChvcCwgcGNwLCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbisoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdG9wKHJhd19jcHVfcHRyKFxcdTAwMjYocGNwKSksIF9fVkFfQVJHU19fKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK30pXFxuK1xcbisjZGVmaW5lIF9wY3BfcHJvdGVjdF9yZXR1cm4ob3AsIHBjcCwgYXJncy4uLilcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR0eXBlb2YocGNwKSBfX3JldHZhbDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3JldHZhbCA9ICh0eXBlb2YocGNwKSlvcChyYXdfY3B1X3B0cihcXHUwMDI2KHBjcCkpLCAjI2FyZ3MpO1xcdFxcXFxcXG4rXFx0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19yZXR2YWw7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rI2RlZmluZSB0aGlzX2NwdV9yZWFkXzEocGNwKVxcdFxcdF9wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfcmVhZF84LCBwY3ApXFxuKyNkZWZpbmUgdGhpc19jcHVfcmVhZF8yKHBjcClcXHRcXHRfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfMTYsIHBjcClcXG4rI2RlZmluZSB0aGlzX2NwdV9yZWFkXzQocGNwKVxcdFxcdF9wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfcmVhZF8zMiwgcGNwKVxcbitcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfOChwY3ApXFx0XFx0X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9yZWFkXzY0LCBwY3ApXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSB0aGlzX2NwdV93cml0ZV8xKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV84LCBwY3AsICh1bnNpZ25lZCBsb25nKXZhbClcXG4rI2RlZmluZSB0aGlzX2NwdV93cml0ZV8yKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV8xNiwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpXFxuKyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfNChwY3AsIHZhbClcXHRfcGNwX3Byb3RlY3QoX19wZXJjcHVfd3JpdGVfMzIsIHBjcCwgKHVuc2lnbmVkIGxvbmcpdmFsKVxcbitcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbisjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzgocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X3dyaXRlXzY0LCBwY3AsICh1bnNpZ25lZCBsb25nKXZhbClcXG4rI2VuZGlmXFxuK1xcbisjZGVmaW5lIHRoaXNfY3B1X2FkZF8xKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hZGRfYW1vX2Nhc2VfOCwgcGNwLCB2YWwpXFxuKyNkZWZpbmUgdGhpc19jcHVfYWRkXzIocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpXFxuKyNkZWZpbmUgdGhpc19jcHVfYWRkXzQocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV8zMiwgcGNwLCB2YWwpXFxuK1xcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuKyNkZWZpbmUgdGhpc19jcHVfYWRkXzgocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV82NCwgcGNwLCB2YWwpXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzEocGNwLCB2YWwpXFx0XFx0XFxcXFxcbitfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X2FkZF9yZXR1cm5fYW1vX2Nhc2VfOCwgcGNwLCB2YWwpXFxuK1xcbisjZGVmaW5lIHRoaXNfY3B1X2FkZF9yZXR1cm5fMihwY3AsIHZhbClcXHRcXHRcXFxcXFxuK19wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfYWRkX3JldHVybl9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpXFxuK1xcbisjZGVmaW5lIHRoaXNfY3B1X2FkZF9yZXR1cm5fNChwY3AsIHZhbClcXHRcXHRcXFxcXFxuK19wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfYWRkX3JldHVybl9hbW9fY2FzZV8zMiwgcGNwLCB2YWwpXFxuK1xcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuKyNkZWZpbmUgdGhpc19jcHVfYWRkX3JldHVybl84KHBjcCwgdmFsKVxcdFxcdFxcXFxcXG4rX3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzY0LCBwY3AsIHZhbClcXG4rI2VuZGlmXFxuK1xcbisjZGVmaW5lIHRoaXNfY3B1X2FuZF8xKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hbmRub3RfYW1vX2Nhc2VfOCwgcGNwLCB+KHZhbCkpXFxuKyNkZWZpbmUgdGhpc19jcHVfYW5kXzIocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV8xNiwgcGNwLCB+KHZhbCkpXFxuKyNkZWZpbmUgdGhpc19jcHVfYW5kXzQocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV8zMiwgcGNwLCB2YWwpXFxuK1xcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuKyNkZWZpbmUgdGhpc19jcHVfYW5kXzgocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV82NCwgcGNwLCB2YWwpXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSB0aGlzX2NwdV9vcl8xKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV84LCBwY3AsIHZhbClcXG4rI2RlZmluZSB0aGlzX2NwdV9vcl8yKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpXFxuKyNkZWZpbmUgdGhpc19jcHVfb3JfNChwY3AsIHZhbClcXHRfcGNwX3Byb3RlY3QoX19wZXJjcHVfb3JfYW1vX2Nhc2VfMzIsIHBjcCwgdmFsKVxcbitcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbisjZGVmaW5lIHRoaXNfY3B1X29yXzgocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzY0LCBwY3AsIHZhbClcXG4rI2VuZGlmXFxuK1xcbisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfMShwY3AsIHZhbClcXHRfcGNwX3Byb3RlY3RfcmV0dXJuKHhjaGdfcmVsYXhlZCwgcGNwLCB2YWwpXFxuKyNkZWZpbmUgdGhpc19jcHVfeGNoZ18yKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbClcXG4rI2RlZmluZSB0aGlzX2NwdV94Y2hnXzQocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0X3JldHVybih4Y2hnX3JlbGF4ZWQsIHBjcCwgdmFsKVxcbitcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfOChwY3AsIHZhbClcXHRfcGNwX3Byb3RlY3RfcmV0dXJuKHhjaGdfcmVsYXhlZCwgcGNwLCB2YWwpXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzEocGNwLCBvLCBuKVxcdF9wY3BfcHJvdGVjdF9yZXR1cm4oY21weGNoZ19yZWxheGVkLCBwY3AsIG8sIG4pXFxuKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ18yKHBjcCwgbywgbilcXHRfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKVxcbisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfNChwY3AsIG8sIG4pXFx0X3BjcF9wcm90ZWN0X3JldHVybihjbXB4Y2hnX3JlbGF4ZWQsIHBjcCwgbywgbilcXG4rXFxuKyNpZmRlZiBDT05GSUdfNjRCSVRcXG4rI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzgocGNwLCBvLCBuKVxcdF9wY3BfcHJvdGVjdF9yZXR1cm4oY21weGNoZ19yZWxheGVkLCBwY3AsIG8sIG4pXFxuK1xcbisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGc2NChwY3AsIG8sIG4pXFx0dGhpc19jcHVfY21weGNoZ184KHBjcCwgbywgbilcXG4rI2VuZGlmXFxuK1xcbisjaWZkZWYgc3lzdGVtX2hhc19jbXB4Y2hnMTI4XFxuKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZzEyOChwY3AsIG8sIG4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbisoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dTEyOCByZXRfXztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHR5cGVvZihwY3ApICpwdHJfXztcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHB0cl9fID0gcmF3X2NwdV9wdHIoXFx1MDAyNihwY3ApKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIChzeXN0ZW1faGFzX2NtcHhjaGcxMjgoKSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHJldF9fID0gY21weGNoZzEyOF9sb2NhbChwdHJfXywgKG8pLCAobikpO1xcdFxcdFxcXFxcXG4rXFx0ZWxzZVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cmV0X18gPSB0aGlzX2NwdV9nZW5lcmljX2NtcHhjaGcocGNwLCAobyksIChuKSk7XFx0XFxcXFxcbitcXHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyZXRfXztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK30pXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSBfX215X2NwdV9vZmZzZXQgKCgoc3RydWN0IHRocmVhZF9pbmZvICopY3VycmVudCktXFx1MDAzZXBjcHVfb2Zmc2V0KVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS1nZW5lcmljL3BlcmNwdS5oXFx1MDAzZVxcbitcXG4rI2VuZGlmIC8qIF9fQVNNX1BFUkNQVV9IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oXFxuaW5kZXggMGU3MWViODJmOTIwY2EuLjczM2I2Y2QzMDZlNDBmIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oXFxuQEAgLTg4LDYgKzg4LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3aXRjaF90b19lbnZjZmcoc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxcbiBcXHRcXHRcXHQ6OiBcXFwiclxcXCIgKG5leHQtXFx1MDAzZXRocmVhZC5lbnZjZmcpIDogXFxcIm1lbW9yeVxcXCIpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgX19zd2l0Y2hfdG9fcGNwdV9vZmZzZXQoc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxcbit7XFxuKyNpZmRlZiBDT05GSUdfU01QXFxuK1xcdG5leHQtXFx1MDAzZXRocmVhZF9pbmZvLnBjcHVfb2Zmc2V0ID0gX19teV9jcHVfb2Zmc2V0O1xcbisjZW5kaWZcXG4rfVxcbitcXG4gZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICosXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7XFxuIFxcbkBAIC0xMjIsNiArMTI5LDcgQEAgZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0aWYgKHN3aXRjaF90b19zaG91bGRfZmx1c2hfaWNhY2hlKF9fbmV4dCkpXFx0XFxcXFxcbiBcXHRcXHRsb2NhbF9mbHVzaF9pY2FjaGVfYWxsKCk7XFx0XFx0XFxcXFxcbiBcXHRfX3N3aXRjaF90b19lbnZjZmcoX19uZXh0KTtcXHRcXHRcXHRcXFxcXFxuK1xcdF9fc3dpdGNoX3RvX3BjcHVfb2Zmc2V0KF9fbmV4dCk7XFx0XFx0XFxcXFxcbiBcXHQoKGxhc3QpID0gX19zd2l0Y2hfdG8oX19wcmV2LCBfX25leHQpKTtcXHRcXHRcXFxcXFxuIH0gd2hpbGUgKDApXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmhcXG5pbmRleCA1NTAxOWZkZmE5ZWNhYS4uZjEwYmE2MmI2MTAxNjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXFxuQEAgLTUzLDYgKzUzLDcgQEBcXG4gc3RydWN0IHRocmVhZF9pbmZvIHtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGZsYWdzO1xcdFxcdC8qIGxvdyBsZXZlbCBmbGFncyAqL1xcbiBcXHRpbnQgICAgICAgICAgICAgICAgICAgICBwcmVlbXB0X2NvdW50OyAgLyogMD1cXHUwMDNlcHJlZW1wdGlibGUsIFxcdTAwM2MwPVxcdTAwM2VCVUcgKi9cXG4rXFx0aW50XFx0XFx0XFx0Y3B1O1xcbiBcXHQvKlxcbiBcXHQgKiBUaGVzZSBzdGFjayBwb2ludGVycyBhcmUgb3ZlcndyaXR0ZW4gb24gZXZlcnkgc3lzdGVtIGNhbGwgb3JcXG4gXFx0ICogZXhjZXB0aW9uLiAgU1AgaXMgYWxzbyBzYXZlZCB0byB0aGUgc3RhY2sgaXQgY2FuIGJlIHJlY292ZXJlZCB3aGVuXFxuQEAgLTYwLDggKzYxLDggQEAgc3RydWN0IHRocmVhZF9pbmZvIHtcXG4gXFx0ICovXFxuIFxcdGxvbmdcXHRcXHRcXHRrZXJuZWxfc3A7XFx0LyogS2VybmVsIHN0YWNrIHBvaW50ZXIgKi9cXG4gXFx0bG9uZ1xcdFxcdFxcdHVzZXJfc3A7XFx0LyogVXNlciBzdGFjayBwb2ludGVyICovXFxuLVxcdGludFxcdFxcdFxcdGNwdTtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHN5c2NhbGxfd29yaztcXHQvKiBTWVNDQUxMX1dPUktfIGZsYWdzICovXFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRwY3B1X29mZnNldDtcXG4gI2lmZGVmIENPTkZJR19TSEFET1dfQ0FMTF9TVEFDS1xcbiBcXHR2b2lkXFx0XFx0XFx0KnNjc19iYXNlO1xcbiBcXHR2b2lkXFx0XFx0XFx0KnNjc19zcDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcmlzY3Yva2VybmVsL2FzbS1vZmZzZXRzLmNcXG5pbmRleCBhNzVmMGNmZWExZTlmYS4uMjBkNDZjMjhmZGRlOTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xcbisrKyBiL2FyY2gvcmlzY3Yva2VybmVsL2FzbS1vZmZzZXRzLmNcXG5AQCAtMzgsNiArMzgsNyBAQCB2b2lkIGFzbV9vZmZzZXRzKHZvaWQpXFxuIFxcdE9GRlNFVChUQVNLX1RIUkVBRF9TVU0sIHRhc2tfc3RydWN0LCB0aHJlYWQuc3VtKTtcXG4gXFxuIFxcdE9GRlNFVChUQVNLX1RJX0NQVSwgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvLmNwdSk7XFxuK1xcdE9GRlNFVChUQVNLX1RJX1BDUFVfT0ZGU0VULCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8ucGNwdV9vZmZzZXQpO1xcbiBcXHRPRkZTRVQoVEFTS19USV9QUkVFTVBUX0NPVU5ULCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8ucHJlZW1wdF9jb3VudCk7XFxuIFxcdE9GRlNFVChUQVNLX1RJX0tFUk5FTF9TUCwgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvLmtlcm5lbF9zcCk7XFxuIFxcdE9GRlNFVChUQVNLX1RJX1VTRVJfU1AsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby51c2VyX3NwKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc21wYm9vdC5jXFxuaW5kZXggZjZlZjU3OTMwYjUwYTguLjc4NzY4NTRkMTYyNzkwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuY1xcbisrKyBiL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuY1xcbkBAIC0xOTEsNiArMTkxLDcgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFx0dGlkbGUtXFx1MDAzZXRocmVhZF9pbmZvLmNwdSA9IGNwdTtcXG4rXFx0dGlkbGUtXFx1MDAzZXRocmVhZF9pbmZvLnBjcHVfb2Zmc2V0ID0gcGVyX2NwdV9vZmZzZXQoY3B1KTtcXG4gXFxuIFxcdHJldCA9IHN0YXJ0X3NlY29uZGFyeV9jcHUoY3B1LCB0aWRsZSk7XFxuIFxcdGlmICghcmV0KSB7XFxuQEAgLTIwOCw2ICsyMDksMTEgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbit2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKVxcbit7XFxuK1xcdF9fbXlfY3B1X29mZnNldCA9IHBlcl9jcHVfb2Zmc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7XFxuK31cXG4rXFxuIHZvaWQgX19pbml0IHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKVxcbiB7XFxuIH1cXG5AQCAtMjMzLDYgKzIzOSw4IEBAIGFzbWxpbmthZ2UgX192aXNpYmxlIHZvaWQgc21wX2NhbGxpbih2b2lkKVxcbiBcXHRtbWdyYWIobW0pO1xcbiBcXHRjdXJyZW50LVxcdTAwM2VhY3RpdmVfbW0gPSBtbTtcXG4gXFxuK1xcdF9fbXlfY3B1X29mZnNldCA9IHBlcl9jcHVfb2Zmc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7XFxuK1xcbiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfUEFSQUxMRUxcXG4gXFx0Y3B1aHBfYXBfc3luY19hbGl2ZSgpO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG5pbmRleCBjMDNjMWRlMTZiNzlhYy4uZWFiOTNkNTI1OGU5ZTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG5AQCAtMTM5NSwxNSArMTM5NSw4IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbiBcXHRcXHRcXHRpZiAocmQgIT0gcnMpXFxuIFxcdFxcdFxcdFxcdGVtaXRfbXYocmQsIHJzLCBjdHgpO1xcbiAjaWZkZWYgQ09ORklHX1NNUFxcbi1cXHRcXHRcXHQvKiBMb2FkIGN1cnJlbnQgQ1BVIG51bWJlciBpbiBUMSAqL1xcbi1cXHRcXHRcXHRlbWl0X2x3KFJWX1JFR19UMSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBjcHUpLFxcbitcXHRcXHRcXHRlbWl0X2xkKFJWX1JFR19UMSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBwY3B1X29mZnNldCksXFxuIFxcdFxcdFxcdFxcdFJWX1JFR19UUCwgY3R4KTtcXG4tXFx0XFx0XFx0LyogTG9hZCBhZGRyZXNzIG9mIF9fcGVyX2NwdV9vZmZzZXQgYXJyYXkgaW4gVDIgKi9cXG4tXFx0XFx0XFx0ZW1pdF9hZGRyKFJWX1JFR19UMiwgKHU2NClcXHUwMDI2X19wZXJfY3B1X29mZnNldCwgZXh0cmFfcGFzcywgY3R4KTtcXG4tXFx0XFx0XFx0LyogR2V0IGFkZHJlc3Mgb2YgX19wZXJfY3B1X29mZnNldFtjcHVdIGluIFQxICovXFxuLVxcdFxcdFxcdGVtaXRfc2gzYWRkKFJWX1JFR19UMSwgUlZfUkVHX1QxLCBSVl9SRUdfVDIsIGN0eCk7XFxuLVxcdFxcdFxcdC8qIExvYWQgX19wZXJfY3B1X29mZnNldFtjcHVdIGluIFQxICovXFxuLVxcdFxcdFxcdGVtaXRfbGQoUlZfUkVHX1QxLCAwLCBSVl9SRUdfVDEsIGN0eCk7XFxuIFxcdFxcdFxcdC8qIEFkZCB0aGUgb2Zmc2V0IHRvIFJkICovXFxuIFxcdFxcdFxcdGVtaXRfYWRkKHJkLCByZCwgUlZfUkVHX1QxLCBjdHgpO1xcbiAjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6Mzk6MDQuMjEyMzkzODY3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM0NjYyMjEyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9qaXRfZW1pdF9pbnNuXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUklTQy1WIGFyY2hpdGVjdHVyZSBjb2RlIHRvIG9wdGltaXplIHBlci1DUFUgdmFyaWFibGUgYWNjZXNzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHBlcmNwdS5oIGhlYWRlciB3aXRoIG9wdGltaXplZCBpbmxpbmUgb3BlcmF0aW9ucywgdXBkYXRlcyBjb250ZXh0IHN3aXRjaCBsb2dpYywgYW5kIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIHVzZSB0aGUgbmV3IHBlci1DUFUgb2Zmc2V0LiBUaGUgQlBGIEpJVCBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIG1ha2luZyB0aGVtIGdvb2QgdGFyZ2V0cyBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NGUzMTMwN2Q5N2RkMjYyZmFmNDQxMjY2ZWZiYzNlZmIwMTk4ZTA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwOTozOTowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vYXNtLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oXG5pbmRleCBlOWU4YmE4M2U2MzJmOS4uMTM3YTQ5NDg4MzI1ZTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oXG5AQCAtOTEsMTEgKzkxLDcgQEBcbiBcbiAjaWZkZWYgQ09ORklHX1NNUFxuIC5tYWNybyBhc21fcGVyX2NwdSBkc3Qgc3ltIHRtcFxuLVx0bHcgICAgXFx0bXAsIFRBU0tfVElfQ1BVX05VTSh0cClcbi1cdHNsbGkgIFxcdG1wLCBcXHRtcCwgUklTQ1ZfTEdQVFJcbi1cdGxhICAgIFxcZHN0LCBfX3Blcl9jcHVfb2Zmc2V0XG4tXHRhZGQgICBcXGRzdCwgXFxkc3QsIFxcdG1wXG4tXHRSRUdfTCBcXHRtcCwgMChcXGRzdClcbitcdFJFR19MIFxcdG1wLCBUQVNLX1RJX1BDUFVfT0ZGU0VUKHRwKVxuIFx0bGEgICAgXFxkc3QsIFxcc3ltXG4gXHRhZGQgICBcXGRzdCwgXFxkc3QsIFxcdG1wXG4gLmVuZG1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmhcbmluZGV4IDA5YmI1ZjU3YTlkMzQ2Li42ZjVkNzAzMTNjODNlZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW8uaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9pby5oXG5AQCAtNTYsNiArNTYsOCBAQFxuICNkZWZpbmUgX19pb19wYncoKVx0UklTQ1ZfRkVOQ0UoaW93LCBvKVxuICNkZWZpbmUgX19pb19wYXcoKVx0UklTQ1ZfRkVOQ0UobywgaW8pXG4gXG4rI2RlZmluZSBQQ0lfSU9fQUREUihhZGRyKVx0KCh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpUENJX0lPQkFTRSArIChhZGRyKSkpXG4rXG4gLypcbiAgKiBBY2Nlc3NlcyBmcm9tIGEgc2luZ2xlIGhhcnQgdG8gYSBzaW5nbGUgSS9PIGFkZHJlc3MgbXVzdCBiZSBvcmRlcmVkLiAgVGhpc1xuICAqIGFsbG93cyB1cyB0byB1c2UgdGhlIHJhdyByZWFkIG1hY3JvcywgYnV0IHdlIHN0aWxsIG5lZWQgdG8gZmVuY2UgYmVmb3JlIGFuZFxuQEAgLTEwMiwxMiArMTA0LDE0IEBAIF9faW9fcmVhZHNfaW5zKHJlYWRzLCB1MzIsIGwsIF9faW9fYnIoKSwgX19pb19hcihhZGRyKSlcbiAjZGVmaW5lIHJlYWRzdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX3JlYWRzdyhhZGRyLCBidWZmZXIsIGNvdW50KVxuICNkZWZpbmUgcmVhZHNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fcmVhZHNsKGFkZHIsIGJ1ZmZlciwgY291bnQpXG4gXG4rI2lmZGVmIENPTkZJR19IQVNfSU9QT1JUXG4gX19pb19yZWFkc19pbnMoaW5zLCAgdTgsIGIsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKVxuIF9faW9fcmVhZHNfaW5zKGlucywgdTE2LCB3LCBfX2lvX3BicigpLCBfX2lvX3BhcihhZGRyKSlcbiBfX2lvX3JlYWRzX2lucyhpbnMsIHUzMiwgbCwgX19pb19wYnIoKSwgX19pb19wYXIoYWRkcikpXG4tI2RlZmluZSBpbnNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zYihQQ0lfSU9CQVNFICsgKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuLSNkZWZpbmUgaW5zdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3coUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcbi0jZGVmaW5lIGluc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNsKFBDSV9JT0JBU0UgKyAoYWRkciksIGJ1ZmZlciwgY291bnQpXG4rI2RlZmluZSBpbnNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zYihQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcbisjZGVmaW5lIGluc3coYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnN3KFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuKyNkZWZpbmUgaW5zbChhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc2woUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4rI2VuZGlmXG4gXG4gX19pb193cml0ZXNfb3V0cyh3cml0ZXMsICB1OCwgYiwgX19pb19idygpLCBfX2lvX2F3KCkpXG4gX19pb193cml0ZXNfb3V0cyh3cml0ZXMsIHUxNiwgdywgX19pb19idygpLCBfX2lvX2F3KCkpXG5AQCAtMTE2LDI1ICsxMjAsMzEgQEAgX19pb193cml0ZXNfb3V0cyh3cml0ZXMsIHUzMiwgbCwgX19pb19idygpLCBfX2lvX2F3KCkpXG4gI2RlZmluZSB3cml0ZXN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fd3JpdGVzdyhhZGRyLCBidWZmZXIsIGNvdW50KVxuICNkZWZpbmUgd3JpdGVzbChhZGRyLCBidWZmZXIsIGNvdW50KSBfX3dyaXRlc2woYWRkciwgYnVmZmVyLCBjb3VudClcbiBcbisjaWZkZWYgQ09ORklHX0hBU19JT1BPUlRcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsICB1OCwgYiwgX19pb19wYncoKSwgX19pb19wYXcoKSlcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHUxNiwgdywgX19pb19wYncoKSwgX19pb19wYXcoKSlcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHUzMiwgbCwgX19pb19wYncoKSwgX19pb19wYXcoKSlcbi0jZGVmaW5lIG91dHNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2IoUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcbi0jZGVmaW5lIG91dHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3coUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcbi0jZGVmaW5lIG91dHNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2woUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcbisjZGVmaW5lIG91dHNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2IoUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4rI2RlZmluZSBvdXRzdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHN3KFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuKyNkZWZpbmUgb3V0c2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzbChQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcbisjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHXzY0QklUXG4gX19pb19yZWFkc19pbnMocmVhZHMsIHU2NCwgcSwgX19pb19icigpLCBfX2lvX2FyKGFkZHIpKVxuICNkZWZpbmUgcmVhZHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fcmVhZHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpXG4gXG4rI2lmZGVmIENPTkZJR19IQVNfSU9QT1JUXG4gX19pb19yZWFkc19pbnMoaW5zLCB1NjQsIHEsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKVxuLSNkZWZpbmUgaW5zcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3EoUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcbisjZGVmaW5lIGluc3EoYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNxKFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuKyNlbmRpZlxuIFxuIF9faW9fd3JpdGVzX291dHMod3JpdGVzLCB1NjQsIHEsIF9faW9fYncoKSwgX19pb19hdygpKVxuICNkZWZpbmUgd3JpdGVzcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX3dyaXRlc3EoYWRkciwgYnVmZmVyLCBjb3VudClcbiBcbisjaWZkZWYgQ09ORklHX0hBU19JT1BPUlRcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHU2NCwgcSwgX19pb19wYnIoKSwgX19pb19wYXcoKSlcbi0jZGVmaW5lIG91dHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3EoUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcbisjZGVmaW5lIG91dHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3EoUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4rI2VuZGlmXG4gI2VuZGlmXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtLWdlbmVyaWMvaW8uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmRhZDk3NWI1NWQwYzMxXG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oXG5AQCAtMCwwICsxLDI4NyBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4rXG4rI2lmbmRlZiBfX0FTTV9QRVJDUFVfSFxuKyNkZWZpbmUgX19BU01fUEVSQ1BVX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVlbXB0LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2Nhc20vYWx0ZXJuYXRpdmUtbWFjcm9zLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vY3B1ZmVhdHVyZS1tYWNyb3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9jdXJyZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vaHdjYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS90aHJlYWRfaW5mby5oXHUwMDNlXG4rXG4rI2RlZmluZSBQRVJDUFVfUldfT1BTKHN6KVx0XHRcdFx0XHRcdFxcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcGVyY3B1X3JlYWRfIyNzeih2b2lkICpwdHIpXHRcdFxcXG4re1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyZXR1cm4gUkVBRF9PTkNFKCoodSMjc3ogKilwdHIpO1x0XHRcdFx0XFxcbit9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdV93cml0ZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpXHRcXFxuK3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0V1JJVEVfT05DRSgqKHUjI3N6ICopcHRyLCAodSMjc3opdmFsKTtcdFx0XHRcdFxcXG4rfVxuK1xuK1BFUkNQVV9SV19PUFMoOClcbitQRVJDUFVfUldfT1BTKDE2KVxuK1BFUkNQVV9SV19PUFMoMzIpXG4rXG4rI2lmZGVmIENPTkZJR182NEJJVFxuK1BFUkNQVV9SV19PUFMoNjQpXG4rI2VuZGlmXG4rXG4rI2RlZmluZSBfX1BFUkNQVV9BTU9fT1BfQ0FTRShzZngsIG5hbWUsIHN6LCBhbW9faW5zbilcdFx0XHRcXFxuK3N0YXRpYyBpbmxpbmUgdm9pZFx0XHRcdFx0XHRcdFx0XFxcbitfX3BlcmNwdV8jI25hbWUjI19hbW9fY2FzZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpXHRcdFxcXG4re1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRhc20gdm9sYXRpbGUgKFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XCJhbW9cIiAjYW1vX2luc24gI3NmeCBcIiB6ZXJvLCAlW3ZhbF0sICVbcHRyXVwiXHRcdFxcXG4rXHRcdDogW3B0cl0gXCIrQVwiICgqKHUjI3N6ICopcHRyKVx0XHRcdFx0XFxcbitcdFx0OiBbdmFsXSBcInJcIiAoKHUjI3N6KSh2YWwpKVx0XHRcdFx0XFxcbitcdFx0OiBcIm1lbW9yeVwiKTtcdFx0XHRcdFx0XHRcXFxuK31cbitcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rI2RlZmluZSBQRVJDUFVfT1AobmFtZSwgYW1vX2luc24pXHRcdFx0XHRcdFxcXG4rXHRfX1BFUkNQVV9BTU9fT1BfQ0FTRSgudywgbmFtZSwgMzIsIGFtb19pbnNuKVx0XHRcdFxcXG4rXHRfX1BFUkNQVV9BTU9fT1BfQ0FTRSguZCwgbmFtZSwgNjQsIGFtb19pbnNuKVxuKyNlbHNlXG4rI2RlZmluZSBQRVJDUFVfT1AobmFtZSwgYW1vX2luc24pXHRcdFx0XHRcdFxcXG4rXHRfX1BFUkNQVV9BTU9fT1BfQ0FTRSgudywgbmFtZSwgMzIsIGFtb19pbnNuKVxuKyNlbmRpZlxuK1xuK1BFUkNQVV9PUChhZGQsIGFkZClcbitQRVJDUFVfT1AoYW5kbm90LCBhbmQpXG4rUEVSQ1BVX09QKG9yLCBvcilcbitcbisvKlxuKyAqIEN1cnJlbnRseSwgb25seSB0aGlzX2NwdV9hZGRfcmV0dXJuX3h4eCgpIHJlcXVpcmVzIGEgcmV0dXJuIHZhbHVlLFxuKyAqIGFuZCB0aGUgUEVSQ1BVX1JFVF9PUCgpIGRvZXMgbm90IGFjY291bnQgZm9yIG90aGVyIG9wZXJhdGlvbnMuXG4rICovXG4rI2RlZmluZSBfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0Uoc2Z4LCBuYW1lLCBzeiwgYW1vX2luc24pXHRcdFxcXG4rc3RhdGljIGlubGluZSB1IyNzelx0XHRcdFx0XHRcdFx0XFxcbitfX3BlcmNwdV8jI25hbWUjI19yZXR1cm5fYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVx0XFxcbit7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHJlZ2lzdGVyIHUjI3N6IHJldDtcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRhc20gdm9sYXRpbGUgKFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XCJhbW9cIiAjYW1vX2luc24gI3NmeCBcIiAlW3JldF0sICVbdmFsXSwgJVtwdHJdXCJcdFx0XFxcbitcdFx0OiBbcHRyXSBcIitBXCIgKCoodSMjc3ogKilwdHIpLCBbcmV0XSBcIj1yXCIgKHJldClcdFx0XFxcbitcdFx0OiBbdmFsXSBcInJcIiAoKHUjI3N6KSh2YWwpKVx0XHRcdFx0XFxcbitcdFx0OiBcIm1lbW9yeVwiKTtcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyZXR1cm4gcmV0ICsgdmFsO1x0XHRcdFx0XHRcdFxcXG4rfVxuK1xuKyNpZmRlZiBDT05GSUdfNjRCSVRcbisjZGVmaW5lIFBFUkNQVV9SRVRfT1AobmFtZSwgYW1vX2luc24pXHRcdFx0XHRcdFxcXG4rXHRfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbilcdFx0XFxcbitcdF9fUEVSQ1BVX0FNT19SRVRfT1BfQ0FTRSguZCwgbmFtZSwgNjQsIGFtb19pbnNuKVxuKyNlbHNlXG4rI2RlZmluZSBQRVJDUFVfUkVUX09QKG5hbWUsIGFtb19pbnNuKVx0XHRcdFx0XHRcXFxuK1x0X19QRVJDUFVfQU1PX1JFVF9PUF9DQVNFKC53LCBuYW1lLCAzMiwgYW1vX2luc24pXG4rI2VuZGlmXG4rXG4rUEVSQ1BVX1JFVF9PUChhZGQsIGFkZClcbitcbisjZGVmaW5lIFBFUkNQVV84XzE2X0dFVF9TSElGVChwdHIpXHQoKCh1bnNpZ25lZCBsb25nKShwdHIpIFx1MDAyNiAweDMpICogQklUU19QRVJfQllURSlcbisjZGVmaW5lIFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KVx0R0VOTUFTSygoc3opIC0gMSwgMClcbisjZGVmaW5lIFBFUkNQVV84XzE2X0dFVF9QVFIzMihwdHIpXHQoKHUzMiAqKSgodW5zaWduZWQgbG9uZykocHRyKSBcdTAwMjYgfjB4MykpXG4rXG4rI2RlZmluZSBQRVJDUFVfOF8xNl9PUChuYW1lLCBhbW9faW5zbiwgc3osIHNmeCwgdmFsX3R5cGUsIG5ld192YWxfZXhwciwgYXNtX29wKVx0XHRcdFxcXG4rc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1XyMjbmFtZSMjX2Ftb19jYXNlXyMjc3oodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbClcdFx0XFxcbit7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19SSVNDVl9JU0FfWkFCSEEpIFx1MDAyNlx1MDAyNlx0XHRcdFx0XHRcdFxcXG4rXHRcdHJpc2N2X2hhc19leHRlbnNpb25fdW5saWtlbHkoUklTQ1ZfSVNBX0VYVF9aQUJIQSkpIHtcdFx0XHRcdFxcXG4rXHRcdGFzbSB2b2xhdGlsZSAoXCJhbW9cIiAjYW1vX2luc24gI3NmeCBcIiB6ZXJvLCAlW3ZhbF0sICVbcHRyXVwiXHRcdFx0XFxcbitcdFx0XHQ6IFtwdHJdIFwiK0FcIigqKHZhbF90eXBlICopcHRyKVx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0OiBbdmFsXSBcInJcIigodmFsX3R5cGUpKChuZXdfdmFsX2V4cHIpIFx1MDAyNiBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpKVx0XFxcbitcdFx0XHQ6IFwibWVtb3J5XCIpO1x0XHRcdFx0XHRcdFx0XHRcXFxuK1x0fSBlbHNlIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdHUzMiAqcHRyMzIgPSBQRVJDUFVfOF8xNl9HRVRfUFRSMzIocHRyKTtcdFx0XHRcdFx0XFxcbitcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaGlmdCA9IFBFUkNQVV84XzE2X0dFVF9TSElGVChwdHIpO1x0XHRcdFx0XFxcbitcdFx0Y29uc3QgdTMyIG1hc2sgPSBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikgXHUwMDNjXHUwMDNjIHNoaWZ0O1x0XHRcdFx0XFxcbitcdFx0Y29uc3QgdmFsX3R5cGUgdmFsX3RydW5jID0gKHZhbF90eXBlKSgobmV3X3ZhbF9leHByKVx0XHRcdFx0XFxcbitcdFx0XHRcdFx0ICAgXHUwMDI2IFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSk7XHRcdFx0XHRcXFxuK1x0XHR1MzIgcmV0eCwgcmM7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0dmFsX3R5cGUgbmV3X3ZhbF90eXBlO1x0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdGFzbSB2b2xhdGlsZSAoXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcIjA6IGxyLncgJTAsICUyXFxuXCJcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCJhbmQgJTMsICUwLCAlNFxcblwiXHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFwic3JsICUzLCAlMywgJTVcXG5cIlx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHQjYXNtX29wIFwiICUzLCAlMywgJTZcXG5cIlx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcImFuZCAlMywgJTMsICU4XFxuXCJcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFwic2xsICUzLCAlMywgJTVcXG5cIlx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcImFuZCAlMSwgJTAsICU3XFxuXCJcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCJvciAlMSwgJTEsICUzXFxuXCJcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCJzYy53ICUxLCAlMSwgJTJcXG5cIlx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcImJuZXogJTEsIDBiXFxuXCJcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHQ6IFwiPVx1MDAyNnJcIihyZXR4KSwgXCI9XHUwMDI2clwiKHJjKSwgXCIrQVwiKCpwdHIzMiksIFwiPVx1MDAyNnJcIihuZXdfdmFsX3R5cGUpXHRcdFxcXG4rXHRcdFx0OiBcInJcIihtYXNrKSwgXCJyXCIoc2hpZnQpLCBcInJcIih2YWxfdHJ1bmMpLCBcInJcIih+bWFzayksXHRcdFx0XFxcbitcdFx0XHQgIFwiclwiKFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSlcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdDogXCJtZW1vcnlcIik7XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rfVxuK1xuKyNkZWZpbmUgUEVSQ1BVX09QXzhfMTYob3BfbmFtZSwgb3AsIGV4cHIsIGZpbmFsX29wKVx0XHRcdFxcXG4rXHRQRVJDUFVfOF8xNl9PUChvcF9uYW1lLCBvcCwgOCwgLmIsIHU4LCBleHByLCBmaW5hbF9vcCk7XHRcdFxcXG4rXHRQRVJDUFVfOF8xNl9PUChvcF9uYW1lLCBvcCwgMTYsIC5oLCB1MTYsIGV4cHIsIGZpbmFsX29wKVxuK1xuK1BFUkNQVV9PUF84XzE2KGFkZCwgYWRkLCB2YWwsIGFkZClcbitQRVJDUFVfT1BfOF8xNihhbmRub3QsIGFuZCwgfih2YWwpLCBhbmQpXG4rUEVSQ1BVX09QXzhfMTYob3IsIG9yLCB2YWwsIG9yKVxuK1xuKyNkZWZpbmUgUEVSQ1BVXzhfMTZfUkVUX09QKG5hbWUsIGFtb19pbnNuLCBzeiwgc2Z4LCB2YWxfdHlwZSwgbmV3X3ZhbF9leHByKVx0XHRcdFxcXG4rc3RhdGljIGlubGluZSB2YWxfdHlwZSBfX3BlcmNwdV8jI25hbWUjI19yZXR1cm5fYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVx0XFxcbit7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19SSVNDVl9JU0FfWkFCSEEpIFx1MDAyNlx1MDAyNlx0XHRcdFx0XHRcdFxcXG4rXHRcdHJpc2N2X2hhc19leHRlbnNpb25fdW5saWtlbHkoUklTQ1ZfSVNBX0VYVF9aQUJIQSkpIHtcdFx0XHRcdFxcXG4rXHRcdHJlZ2lzdGVyIHZhbF90eXBlIHJldDtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0YXNtIHZvbGF0aWxlIChcImFtb1wiICNhbW9faW5zbiAjc2Z4IFwiICVbcmV0XSwgJVt2YWxdLCAlW3B0cl1cIlx0XHRcdFxcXG4rXHRcdFx0OiBbcHRyXSBcIitBXCIoKih2YWxfdHlwZSAqKXB0ciksIFtyZXRdIFwiPXJcIihyZXQpXHRcdFx0XHRcXFxuK1x0XHRcdDogW3ZhbF0gXCJyXCIoKHZhbF90eXBlKSgobmV3X3ZhbF9leHByKSBcdTAwMjYgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSlcdFxcXG4rXHRcdFx0OiBcIm1lbW9yeVwiKTtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0cmV0dXJuIHJldCArICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikgXHUwMDI2IFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSk7XHRcdFxcXG4rXHR9IGVsc2Uge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0dTMyICpwdHIzMiA9IFBFUkNQVV84XzE2X0dFVF9QVFIzMihwdHIpO1x0XHRcdFx0XHRcXFxuK1x0XHRjb25zdCB1bnNpZ25lZCBsb25nIHNoaWZ0ID0gUEVSQ1BVXzhfMTZfR0VUX1NISUZUKHB0cik7XHRcdFx0XHRcXFxuK1x0XHRjb25zdCB1MzIgbWFzayA9IChQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikgXHUwMDNjXHUwMDNjIHNoaWZ0KTtcdFx0XHRcdFxcXG4rXHRcdGNvbnN0IHUzMiBpbnZfbWFzayA9IH5tYXNrO1x0XHRcdFx0XHRcdFx0XFxcbitcdFx0Y29uc3QgdmFsX3R5cGUgdmFsX3RydW5jID0gKHZhbF90eXBlKSgobmV3X3ZhbF9leHByKVx0XHRcdFx0XFxcbitcdFx0XHRcdFx0ICAgXHUwMDI2IFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSk7XHRcdFx0XHRcXFxuK1x0XHR1MzIgb2xkLCBuZXcsIHRtcDtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRhc20gdm9sYXRpbGUgKFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCIwOiBsci53ICUwLCAlM1xcblwiXHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFwiYW5kICUxLCAlMCwgJTRcXG5cIlx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcInNybCAlMSwgJTEsICU1XFxuXCJcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCJhZGQgJTEsICUxLCAlNlxcblwiXHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFwiYW5kICUxLCAlMSwgJTdcXG5cIlx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcInNsbCAlMSwgJTEsICU1XFxuXCJcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCJhbmQgJTIsICUwLCAlOFxcblwiXHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFwib3IgJTIsICUyLCAlMVxcblwiXHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFwic2MudyAlMiwgJTIsICUzXFxuXCJcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCJibmV6ICUyLCAwYlxcblwiXHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0OiBcIj1cdTAwMjZyXCIob2xkKSwgXCI9XHUwMDI2clwiKHRtcCksIFwiPVx1MDAyNnJcIihuZXcpLCBcIitBXCIoKnB0cjMyKVx0XHRcdFxcXG4rXHRcdFx0OiBcInJcIihtYXNrKSwgXCJyXCIoc2hpZnQpLCBcInJcIih2YWxfdHJ1bmMpLCBcInJcIihQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpLCBcXFxuK1x0XHRcdFwiclwiKGludl9tYXNrKVx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdDogXCJtZW1vcnlcIik7XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdHJldHVybiAodmFsX3R5cGUpKHRtcCBcdTAwM2VcdTAwM2Ugc2hpZnQpO1x0XHRcdFx0XHRcdFxcXG4rXHR9XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rfVxuK1xuK1BFUkNQVV84XzE2X1JFVF9PUChhZGQsIGFkZCwgOCwgLmIsIHU4LCB2YWwpXG4rUEVSQ1BVXzhfMTZfUkVUX09QKGFkZCwgYWRkLCAxNiwgLmgsIHUxNiwgdmFsKVxuK1xuKyNkZWZpbmUgX3BjcF9wcm90ZWN0KG9wLCBwY3AsIC4uLilcdFx0XHRcdFx0XFxcbisoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuK1x0b3AocmF3X2NwdV9wdHIoXHUwMDI2KHBjcCkpLCBfX1ZBX0FSR1NfXyk7XHRcdFx0XHRcXFxuK1x0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuK30pXG4rXG4rI2RlZmluZSBfcGNwX3Byb3RlY3RfcmV0dXJuKG9wLCBwY3AsIGFyZ3MuLi4pXHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHR5cGVvZihwY3ApIF9fcmV0dmFsO1x0XHRcdFx0XHRcdFxcXG4rXHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuK1x0X19yZXR2YWwgPSAodHlwZW9mKHBjcCkpb3AocmF3X2NwdV9wdHIoXHUwMDI2KHBjcCkpLCAjI2FyZ3MpO1x0XFxcbitcdHByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTtcdFx0XHRcdFx0XFxcbitcdF9fcmV0dmFsO1x0XHRcdFx0XHRcdFx0XFxcbit9KVxuK1xuKyNkZWZpbmUgdGhpc19jcHVfcmVhZF8xKHBjcClcdFx0X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9yZWFkXzgsIHBjcClcbisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMihwY3ApXHRcdF9wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfcmVhZF8xNiwgcGNwKVxuKyNkZWZpbmUgdGhpc19jcHVfcmVhZF80KHBjcClcdFx0X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9yZWFkXzMyLCBwY3ApXG4rXG4rI2lmZGVmIENPTkZJR182NEJJVFxuKyNkZWZpbmUgdGhpc19jcHVfcmVhZF84KHBjcClcdFx0X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9yZWFkXzY0LCBwY3ApXG4rI2VuZGlmXG4rXG4rI2RlZmluZSB0aGlzX2NwdV93cml0ZV8xKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X3dyaXRlXzgsIHBjcCwgKHVuc2lnbmVkIGxvbmcpdmFsKVxuKyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfMihwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV8xNiwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpXG4rI2RlZmluZSB0aGlzX2NwdV93cml0ZV80KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X3dyaXRlXzMyLCBwY3AsICh1bnNpZ25lZCBsb25nKXZhbClcbitcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rI2RlZmluZSB0aGlzX2NwdV93cml0ZV84KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X3dyaXRlXzY0LCBwY3AsICh1bnNpZ25lZCBsb25nKXZhbClcbisjZW5kaWZcbitcbisjZGVmaW5lIHRoaXNfY3B1X2FkZF8xKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV84LCBwY3AsIHZhbClcbisjZGVmaW5lIHRoaXNfY3B1X2FkZF8yKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpXG4rI2RlZmluZSB0aGlzX2NwdV9hZGRfNChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hZGRfYW1vX2Nhc2VfMzIsIHBjcCwgdmFsKVxuK1xuKyNpZmRlZiBDT05GSUdfNjRCSVRcbisjZGVmaW5lIHRoaXNfY3B1X2FkZF84KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV82NCwgcGNwLCB2YWwpXG4rI2VuZGlmXG4rXG4rI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzEocGNwLCB2YWwpXHRcdFxcXG4rX3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzgsIHBjcCwgdmFsKVxuK1xuKyNkZWZpbmUgdGhpc19jcHVfYWRkX3JldHVybl8yKHBjcCwgdmFsKVx0XHRcXFxuK19wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfYWRkX3JldHVybl9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpXG4rXG4rI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzQocGNwLCB2YWwpXHRcdFxcXG4rX3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzMyLCBwY3AsIHZhbClcbitcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzgocGNwLCB2YWwpXHRcdFxcXG4rX3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzY0LCBwY3AsIHZhbClcbisjZW5kaWZcbitcbisjZGVmaW5lIHRoaXNfY3B1X2FuZF8xKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV84LCBwY3AsIH4odmFsKSlcbisjZGVmaW5lIHRoaXNfY3B1X2FuZF8yKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV8xNiwgcGNwLCB+KHZhbCkpXG4rI2RlZmluZSB0aGlzX2NwdV9hbmRfNChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hbmRub3RfYW1vX2Nhc2VfMzIsIHBjcCwgdmFsKVxuK1xuKyNpZmRlZiBDT05GSUdfNjRCSVRcbisjZGVmaW5lIHRoaXNfY3B1X2FuZF84KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV82NCwgcGNwLCB2YWwpXG4rI2VuZGlmXG4rXG4rI2RlZmluZSB0aGlzX2NwdV9vcl8xKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzgsIHBjcCwgdmFsKVxuKyNkZWZpbmUgdGhpc19jcHVfb3JfMihwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpXG4rI2RlZmluZSB0aGlzX2NwdV9vcl80KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzMyLCBwY3AsIHZhbClcbitcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rI2RlZmluZSB0aGlzX2NwdV9vcl84KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzY0LCBwY3AsIHZhbClcbisjZW5kaWZcbitcbisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfMShwY3AsIHZhbClcdF9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbClcbisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfMihwY3AsIHZhbClcdF9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbClcbisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfNChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbClcbitcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rI2RlZmluZSB0aGlzX2NwdV94Y2hnXzgocGNwLCB2YWwpXHRfcGNwX3Byb3RlY3RfcmV0dXJuKHhjaGdfcmVsYXhlZCwgcGNwLCB2YWwpXG4rI2VuZGlmXG4rXG4rI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzEocGNwLCBvLCBuKVx0X3BjcF9wcm90ZWN0X3JldHVybihjbXB4Y2hnX3JlbGF4ZWQsIHBjcCwgbywgbilcbisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfMihwY3AsIG8sIG4pXHRfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKVxuKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ180KHBjcCwgbywgbilcdF9wY3BfcHJvdGVjdF9yZXR1cm4oY21weGNoZ19yZWxheGVkLCBwY3AsIG8sIG4pXG4rXG4rI2lmZGVmIENPTkZJR182NEJJVFxuKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ184KHBjcCwgbywgbilcdF9wY3BfcHJvdGVjdF9yZXR1cm4oY21weGNoZ19yZWxheGVkLCBwY3AsIG8sIG4pXG4rXG4rI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnNjQocGNwLCBvLCBuKVx0dGhpc19jcHVfY21weGNoZ184KHBjcCwgbywgbilcbisjZW5kaWZcbitcbisjaWZkZWYgc3lzdGVtX2hhc19jbXB4Y2hnMTI4XG4rI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnMTI4KHBjcCwgbywgbilcdFx0XHRcdFx0XFxcbisoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHR1MTI4IHJldF9fO1x0XHRcdFx0XHRcdFx0XFxcbitcdHR5cGVvZihwY3ApICpwdHJfXztcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuK1x0cHRyX18gPSByYXdfY3B1X3B0cihcdTAwMjYocGNwKSk7XHRcdFx0XHRcdFxcXG4rXHRpZiAoc3lzdGVtX2hhc19jbXB4Y2hnMTI4KCkpXHRcdFx0XHRcdFxcXG4rXHRcdHJldF9fID0gY21weGNoZzEyOF9sb2NhbChwdHJfXywgKG8pLCAobikpO1x0XHRcXFxuK1x0ZWxzZVx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRyZXRfXyA9IHRoaXNfY3B1X2dlbmVyaWNfY21weGNoZyhwY3AsIChvKSwgKG4pKTtcdFxcXG4rXHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XHRcdFx0XHRcdFxcXG4rXHRyZXRfXztcdFx0XHRcdFx0XHRcdFx0XFxcbit9KVxuKyNlbmRpZlxuK1xuKyNkZWZpbmUgX19teV9jcHVfb2Zmc2V0ICgoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKWN1cnJlbnQpLVx1MDAzZXBjcHVfb2Zmc2V0KVxuK1xuKyNpbmNsdWRlIFx1MDAzY2FzbS1nZW5lcmljL3BlcmNwdS5oXHUwMDNlXG4rXG4rI2VuZGlmIC8qIF9fQVNNX1BFUkNQVV9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcbmluZGV4IDBlNzFlYjgyZjkyMGNhLi43MzNiNmNkMzA2ZTQwZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcbkBAIC04OCw2ICs4OCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2l0Y2hfdG9fZW52Y2ZnKHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dClcbiBcdFx0XHQ6OiBcInJcIiAobmV4dC1cdTAwM2V0aHJlYWQuZW52Y2ZnKSA6IFwibWVtb3J5XCIpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgX19zd2l0Y2hfdG9fcGNwdV9vZmZzZXQoc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxuK3tcbisjaWZkZWYgQ09ORklHX1NNUFxuK1x0bmV4dC1cdTAwM2V0aHJlYWRfaW5mby5wY3B1X29mZnNldCA9IF9fbXlfY3B1X29mZnNldDtcbisjZW5kaWZcbit9XG4rXG4gZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICosXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICopO1xuIFxuQEAgLTEyMiw2ICsxMjksNyBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKHN3aXRjaF90b19zaG91bGRfZmx1c2hfaWNhY2hlKF9fbmV4dCkpXHRcXFxuIFx0XHRsb2NhbF9mbHVzaF9pY2FjaGVfYWxsKCk7XHRcdFxcXG4gXHRfX3N3aXRjaF90b19lbnZjZmcoX19uZXh0KTtcdFx0XHRcXFxuK1x0X19zd2l0Y2hfdG9fcGNwdV9vZmZzZXQoX19uZXh0KTtcdFx0XFxcbiBcdCgobGFzdCkgPSBfX3N3aXRjaF90byhfX3ByZXYsIF9fbmV4dCkpO1x0XHRcXFxuIH0gd2hpbGUgKDApXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXG5pbmRleCA1NTAxOWZkZmE5ZWNhYS4uZjEwYmE2MmI2MTAxNjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaFxuQEAgLTUzLDYgKzUzLDcgQEBcbiBzdHJ1Y3QgdGhyZWFkX2luZm8ge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRmbGFncztcdFx0LyogbG93IGxldmVsIGZsYWdzICovXG4gXHRpbnQgICAgICAgICAgICAgICAgICAgICBwcmVlbXB0X2NvdW50OyAgLyogMD1cdTAwM2VwcmVlbXB0aWJsZSwgXHUwMDNjMD1cdTAwM2VCVUcgKi9cbitcdGludFx0XHRcdGNwdTtcbiBcdC8qXG4gXHQgKiBUaGVzZSBzdGFjayBwb2ludGVycyBhcmUgb3ZlcndyaXR0ZW4gb24gZXZlcnkgc3lzdGVtIGNhbGwgb3JcbiBcdCAqIGV4Y2VwdGlvbi4gIFNQIGlzIGFsc28gc2F2ZWQgdG8gdGhlIHN0YWNrIGl0IGNhbiBiZSByZWNvdmVyZWQgd2hlblxuQEAgLTYwLDggKzYxLDggQEAgc3RydWN0IHRocmVhZF9pbmZvIHtcbiBcdCAqL1xuIFx0bG9uZ1x0XHRcdGtlcm5lbF9zcDtcdC8qIEtlcm5lbCBzdGFjayBwb2ludGVyICovXG4gXHRsb25nXHRcdFx0dXNlcl9zcDtcdC8qIFVzZXIgc3RhY2sgcG9pbnRlciAqL1xuLVx0aW50XHRcdFx0Y3B1O1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRzeXNjYWxsX3dvcms7XHQvKiBTWVNDQUxMX1dPUktfIGZsYWdzICovXG4rXHR1bnNpZ25lZCBsb25nXHRcdHBjcHVfb2Zmc2V0O1xuICNpZmRlZiBDT05GSUdfU0hBRE9XX0NBTExfU1RBQ0tcbiBcdHZvaWRcdFx0XHQqc2NzX2Jhc2U7XG4gXHR2b2lkXHRcdFx0KnNjc19zcDtcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xuaW5kZXggYTc1ZjBjZmVhMWU5ZmEuLjIwZDQ2YzI4ZmRkZTk3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xuKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xuQEAgLTM4LDYgKzM4LDcgQEAgdm9pZCBhc21fb2Zmc2V0cyh2b2lkKVxuIFx0T0ZGU0VUKFRBU0tfVEhSRUFEX1NVTSwgdGFza19zdHJ1Y3QsIHRocmVhZC5zdW0pO1xuIFxuIFx0T0ZGU0VUKFRBU0tfVElfQ1BVLCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8uY3B1KTtcbitcdE9GRlNFVChUQVNLX1RJX1BDUFVfT0ZGU0VULCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8ucGNwdV9vZmZzZXQpO1xuIFx0T0ZGU0VUKFRBU0tfVElfUFJFRU1QVF9DT1VOVCwgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvLnByZWVtcHRfY291bnQpO1xuIFx0T0ZGU0VUKFRBU0tfVElfS0VSTkVMX1NQLCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8ua2VybmVsX3NwKTtcbiBcdE9GRlNFVChUQVNLX1RJX1VTRVJfU1AsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby51c2VyX3NwKTtcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zbXBib290LmNcbmluZGV4IGY2ZWY1NzkzMGI1MGE4Li43ODc2ODU0ZDE2Mjc5MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuY1xuKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvc21wYm9vdC5jXG5AQCAtMTkxLDYgKzE5MSw3IEBAIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRpZGxlKVxuIHtcbiBcdGludCByZXQ7XG4gXHR0aWRsZS1cdTAwM2V0aHJlYWRfaW5mby5jcHUgPSBjcHU7XG4rXHR0aWRsZS1cdTAwM2V0aHJlYWRfaW5mby5wY3B1X29mZnNldCA9IHBlcl9jcHVfb2Zmc2V0KGNwdSk7XG4gXG4gXHRyZXQgPSBzdGFydF9zZWNvbmRhcnlfY3B1KGNwdSwgdGlkbGUpO1xuIFx0aWYgKCFyZXQpIHtcbkBAIC0yMDgsNiArMjA5LDExIEBAIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRpZGxlKVxuIH1cbiAjZW5kaWZcbiBcbit2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKVxuK3tcbitcdF9fbXlfY3B1X29mZnNldCA9IHBlcl9jcHVfb2Zmc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7XG4rfVxuK1xuIHZvaWQgX19pbml0IHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKVxuIHtcbiB9XG5AQCAtMjMzLDYgKzIzOSw4IEBAIGFzbWxpbmthZ2UgX192aXNpYmxlIHZvaWQgc21wX2NhbGxpbih2b2lkKVxuIFx0bW1ncmFiKG1tKTtcbiBcdGN1cnJlbnQtXHUwMDNlYWN0aXZlX21tID0gbW07XG4gXG4rXHRfX215X2NwdV9vZmZzZXQgPSBwZXJfY3B1X29mZnNldChzbXBfcHJvY2Vzc29yX2lkKCkpO1xuK1xuICNpZmRlZiBDT05GSUdfSE9UUExVR19QQVJBTExFTFxuIFx0Y3B1aHBfYXBfc3luY19hbGl2ZSgpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5pbmRleCBjMDNjMWRlMTZiNzlhYy4uZWFiOTNkNTI1OGU5ZTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG4rKysgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtMTM5NSwxNSArMTM5NSw4IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHRcdGlmIChyZCAhPSBycylcbiBcdFx0XHRcdGVtaXRfbXYocmQsIHJzLCBjdHgpO1xuICNpZmRlZiBDT05GSUdfU01QXG4tXHRcdFx0LyogTG9hZCBjdXJyZW50IENQVSBudW1iZXIgaW4gVDEgKi9cbi1cdFx0XHRlbWl0X2x3KFJWX1JFR19UMSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBjcHUpLFxuK1x0XHRcdGVtaXRfbGQoUlZfUkVHX1QxLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHBjcHVfb2Zmc2V0KSxcbiBcdFx0XHRcdFJWX1JFR19UUCwgY3R4KTtcbi1cdFx0XHQvKiBMb2FkIGFkZHJlc3Mgb2YgX19wZXJfY3B1X29mZnNldCBhcnJheSBpbiBUMiAqL1xuLVx0XHRcdGVtaXRfYWRkcihSVl9SRUdfVDIsICh1NjQpXHUwMDI2X19wZXJfY3B1X29mZnNldCwgZXh0cmFfcGFzcywgY3R4KTtcbi1cdFx0XHQvKiBHZXQgYWRkcmVzcyBvZiBfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gaW4gVDEgKi9cbi1cdFx0XHRlbWl0X3NoM2FkZChSVl9SRUdfVDEsIFJWX1JFR19UMSwgUlZfUkVHX1QyLCBjdHgpO1xuLVx0XHRcdC8qIExvYWQgX19wZXJfY3B1X29mZnNldFtjcHVdIGluIFQxICovXG4tXHRcdFx0ZW1pdF9sZChSVl9SRUdfVDEsIDAsIFJWX1JFR19UMSwgY3R4KTtcbiBcdFx0XHQvKiBBZGQgdGhlIG9mZnNldCB0byBSZCAqL1xuIFx0XHRcdGVtaXRfYWRkKHJkLCByZCwgUlZfUkVHX1QxLCBjdHgpO1xuICNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6Mzk6MDQuMjEyMzk4MjY3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyNzAzMTAzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUklTQy1WIEFyY2hpdGVjdHVyZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLiBJdCdzIHRvdWNoaW5nIG9uIGhvdyBwZXItQ1BVIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGludGVyZXN0IGJlY2F1c2UgdGhhdCdzIG9mdGVuIGEgc291cmNlIG9mIHN1YnRsZSwgaGFyZC10by1maW5kIGJ1Z3MgYW5kIHJhY2UgY29uZGl0aW9ucy4gSSBzZWUgaXQncyBpbnRyb2R1Y2luZyB0aGlzIGBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oYCBmaWxlLCBvcHRpbWl6aW5nIHRoZSBwZXItQ1BVIG9wZXJhdGlvbnMuIFRoYXQncyBhIGdvb2Qgc2lnbiB0aGV5J3JlIHRyeWluZyB0byBpbXByb3ZlIHRoaW5ncywgYnV0IGl0IGFsc28gbWVhbnMgdGhlcmUncyBhIGhpZ2hlciBjaGFuY2Ugb2YgaW50cm9kdWNpbmcgaXNzdWVzIGR1cmluZyB0aGUgb3B0aW1pemF0aW9uLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgdXBkYXRpbmcgc2V2ZXJhbCBpbmNsdWRlIGZpbGVzLCBsaWtlIGBhc20uaGAsIGBpby5oYCwgYHN3aXRjaF90by5oYCwgYW5kIGB0aHJlYWRfaW5mby5oYCwgYWxvbmcgd2l0aCBrZXJuZWwgY29kZSBpbiBgYXNtLW9mZnNldHMuY2AgYW5kIGBzbXBib290LmNgLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgcmV3b3JraW5nIHRoZSBvZmZzZXRzIHVzZWQgdG8gYWNjZXNzIHBlci1DUFUgZGF0YSwgcmVwbGFjaW5nIHNvbWUgY2FsY3VsYXRpb25zIHdpdGggYFRBU0tfVElfUENQVV9PRkZTRVQodHApYC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgY2hhbmdlcyBmb3IgSS9PIHBvcnQgYWNjZXNzIHdpdGggYFBDSV9JT19BRERSKGFkZHIpYCBhbmQgZ3VhcmRlZCBJL08gZnVuY3Rpb25zLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLCBvcHRpbWl6aW5nIGhvdyB0aGVzZSBwZXItQ1BVIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQgYW5kIHBvdGVudGlhbGx5IEkvTyBoYW5kbGluZyBhcyB3ZWxsLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgZmFjdCB0aGF0IGl0J3MgYWx0ZXJpbmcgY29yZSBhcmNoaXRlY3R1cmUgbG9naWMgcmVsYXRlZCB0byBwZXItQ1BVIG9wZXJhdGlvbnMsIEkvTyBhY2Nlc3MsIGFuZCBldmVuIHRoZSBCUEYgSklUIGNvbXBpbGVyIGlzIGVub3VnaCB0byB3YXJyYW50IHRob3JvdWdoIGludmVzdGlnYXRpb24uIEl0J3MgdG91Y2hpbmcgc29tZSBhcmVhcyB0aGF0IGFyZSBrZXkgdG8gdGhlIHN5c3RlbSdzIHBlcmZvcm1hbmNlLCBzdGFiaWxpdHksIGFuZCBzZWN1cml0eS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBhY3R1YWxseSByZWFjaGFibGUgdGhvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBlbmFibGVkIHRvIHJ1biB0aGlzIGNvZGUgYW5kIHZlcmlmeSB0aGlzIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLiBMb29raW5nIGF0IHRoZSBjb25maWdzLCBJIHNlZSB0aGF0IHRoaXMgY29kZSBpcyB1c2luZyBgQ09ORklHX0hBU19JT1BPUlRgLCBgQ09ORklHX1JJU0NWX0lTQV9aQUJIQWAsIGBDT05GSUdfU01QYCBhbmQgYENPTkZJR182NEJJVGAuXG5cbk5vdywgZGlnZ2luZyBkZWVwZXIsIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhhdCBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AgZmlsZS4gSXQncyB0aGUgQlBGIEpJVCBmb3IgUklTQy1WIDY0LWJpdCwgYW5kIGlmIHRoZXkgYXJlIG1vZGlmeWluZyBpdCwgdGhlcmUncyB0aGUgcG90ZW50aWFsIGZvciBzb21lIGludGVyZXN0aW5nIHRoaW5ncyB0byB0dXJuIHVwLCB3aGljaCBjb3VsZCBhZmZlY3QgdGhlIHN5c3RlbSBwZXJmb3JtYW5jZSBvciBwb3NzaWJseSBldmVuIHNlY3VyaXR5LiBHaXZlbiB0aGF0LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBCUEYgSklUIGNvZGUgZm9yIFJJU0MtViBhbmQgcGVyLUNQVSBvcGVyYXRpb25zLiBPa2F5LCBzbyBJIHNlZSBpdCBtb2RpZmllcyBgYnBmX2ppdF9lbWl0X2luc25gLiBUbyBiZSBjZXJ0YWluLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhhdCBgYnBmX2ppdF9lbWl0X2luc25gIGV4aXN0cyB3aXRoaW4gdGhlIGZpbGUgd2l0aCBhIHNpbXBsZSBgZ3JlcGAgY29tbWFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyNiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjE0LjQ4MjcxMzYwMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQyMjIwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzI9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjgtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzY5OmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM3MC1cXHRcXHQgICAgICBib29sIGV4dHJhX3Bhc3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjE0LjczNjk0NTU5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTYyMDQ1NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGF0ZXN0IENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgc29tZSBrZXkgbW9kaWZpY2F0aW9ucyBpbiB0aGlzIHBhdGNoLiBUaGUgYGJwZl9qaXRfZW1pdF9pbnNuYCBmdW5jdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcgZnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBvcHRpbWl6YXRpb24gcGVyc3BlY3RpdmUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aG9zZSBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBhbmQgaW1wYWN0IG9uIHRoZSBCUEYgSklUIGNvbXBpbGVyLiBBIGNsb3NlciBsb29rIGF0IGhvdyBpbnN0cnVjdGlvbiBlbWlzc2lvbiBpcyBiZWluZyBoYW5kbGVkIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIGluY2x1c2lvbiBvZiBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZXJjcHUuaGAuIEltcGxlbWVudGluZyBgdGhpc19jcHVfYWRkXzFgLCBgdGhpc19jcHVfcmVhZF8xYCwgYW5kIHRoZSBsaWtlIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24uIFRoZXNlIGlubGluZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIGVmZmljaWVudCBwZXItQ1BVIGRhdGEgYWNjZXNzLCBhbmQgdGhlaXIgcHJlc2VuY2Ugc3VnZ2VzdHMgYSBkZWxpYmVyYXRlIGVmZm9ydCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBjb25zaXN0ZW5jeSB3aXRoaW4gdGhlIFJJU0MtViBrZXJuZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbnNpZGVyIHRoZSB1c2UgY2FzZSAtIGlzIGl0IGZvciBCUEYgZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlIGluaGVyZW50bHkgaW52b2x2ZXMgZGlmZmVyZW5jZXMgZnJvbSBvdGhlciBhcmNoaXRlY3R1cmVzLCBzbyBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB3ZWxsIHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW4sIGNvbXBhcmVkIHRvIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSBpbiBvdGhlciBhcmNoaXRlY3R1cmVzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBDT05GSUdfUklTQ1ZfSVNBX1pBQkhBYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdGFyZ2V0IElTQS4gSSdtIGFzc3VtaW5nIHRoaXMgcmVsYXRlcyB0byB0aGUgbmV3IGluc3RydWN0aW9ucywgb3IgYXQgbGVhc3QgaG93IHRoZSBwYXRjaCBpcyBpbnRlbmRlZCB0byB3b3JrLiBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGNvZGUgZGVhbHMgd2l0aCB0aGUgcG90ZW50aWFsIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyBJU0EgZXh0ZW5zaW9uLiBJdCdzIGxpa2VseSB0aGF0IHBhcnRzIG9mIHRoZSBuZXcgY29kZSBwYXRocyBhcmUgb25seSBhY3RpdmUgaWYgdGhpcyBpcyBlbmFibGVkLCB3aGljaCBpbXBsaWVzIHNvbWUgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucy4gVGhpcyB3aWxsIGNsYXJpZnkgaG93IHRoaXMgcGF0Y2ggaW50ZWdyYXRlcyB3aXRoIHRoZSB3aWRlciBSSVNDLVYgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI4MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjI2LjY5ODk5NTEzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI0Mjc3MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSSVNDVl9JU0FfWkFCSEFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZz02Nzc9Y29uZmlnIFRPT0xDSEFJTl9IQVNfWkFCSEFcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy02ODMtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjY4NDpjb25maWcgUklTQ1ZfSVNBX1pBQkhBXFxuYXJjaC9yaXNjdi9LY29uZmlnLTY4NS1cXHRib29sIFxcXCJaYWJoYSBleHRlbnNpb24gc3VwcG9ydCBmb3IgYXRvbWljIGJ5dGUvaGFsZndvcmQgb3BlcmF0aW9uc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6Mzk6MzEuNjIzMjg1OTc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM5OTQ4MzYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRXZhbHVhdGluZyBSSVNDLVYgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBpdCBsb29rcyBsaWtlIGBSSVNDVl9JU0FfWkFCSEFgIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbSBpbW1lZGlhdGVseSBsZWFuaW5nIHRvd2FyZHMgZW5hYmxpbmcgaXQ7IGl0J3MgbGlrZWx5IGFkZGluZyBzb21lIGFyY2hpdGVjdHVyYWwgc3VwcG9ydC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zLCBidXQgdXN1YWxseSwgdGhlc2UgSVNBIGV4dGVuc2lvbnMgYXJlIHRoZXJlIGZvciBhIHJlYXNvbiBhbmQgbGlrZWx5IHJlcHJlc2VudCBhIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uYWxpdHkgaW1wcm92ZW1lbnQuIFxuXG5BbmQgSSBzZWUgYENPTkZJR19IQVNfSU9QT1JUYCBsaXN0ZWQgYXMgd2VsbC4gSG1tLCB0aGF0IHN1Z2dlc3RzIHNvbWUga2luZCBvZiBJL08gcG9ydCBzdXBwb3J0IGlzIGJlaW5nIHVzZWQgc29tZXdoZXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgaXMgc29tZXRoaW5nIHdlIGNhbiwgYW5kIHNob3VsZCwgZW5hYmxlIGFzIHdlbGwuIEl0IGNvdWxkIGJlIGNydWNpYWwgZm9yIG91ciBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTozOTozOC4wMjI3NzYyNDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNDc5Njk1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEFTX0lPUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWc9Mzc1PWNvbmZpZyBIQVNfSU9NRU1cXG4tLVxcbmxpYi9LY29uZmlnLTM3OS1cXG5saWIvS2NvbmZpZzozODA6Y29uZmlnIEhBU19JT1BPUlRcXG5saWIvS2NvbmZpZy0zODEtXFx0Ym9vbFxcbmxpYi9LY29uZmlnLTM4Mi1cXG5saWIvS2NvbmZpZzozODM6Y29uZmlnIEhBU19JT1BPUlRfTUFQXFxubGliL0tjb25maWctMzg0LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6Mzk6NDIuNzQ3NTgzMTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njg1ODc4NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBIQVNfSU9QT1JUYCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEhBU19JT1BPUlRgIGZsYWcsIGFuZCBpdCdzIGZsYWdnZWQgYXMgYSBib29sZWFuIHdpdGhvdXQgYSBkaXJlY3QgcHJvbXB0LiBUaGF0IG1lYW5zIGl0J3MgcHJvYmFibHkgZ2V0dGluZyBzZXQgYnkgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIEkgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQgbXlzZWxmLiBBY3R1YWxseSwgdGhlIHdheSBJIHVuZGVyc3RhbmQgaXQsIGBIQVNfSU9QT1JUYCB1c3VhbGx5IHRpZXMgaW4gd2l0aCBzb21ldGhpbmcgbGlrZSBQQ0kgb3IgYSBzaW1pbGFyIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIHNvIGl0J3MgbGlrZWx5IGJlaW5nIHNlbGVjdGVkIGFzIGEgZGVwZW5kZW5jeS4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBgYXJjaC9yaXNjdi9LY29uZmlnYCBmaWxlIHRvIGNvbmZpcm0uIExldCBtZSBnbyB0YWtlIGEgbG9vayB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTozOTo0Ny40MzM0NjY5NjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzE4NjgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSEFTX0lPUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMjgtXFx0c2VsZWN0IEhBUkRJUlFTX1NXX1JFU0VORFxcbmFyY2gvcmlzY3YvS2NvbmZpZzoxMjk6XFx0c2VsZWN0IEhBU19JT1BPUlQgaWYgTU1VXFxuYXJjaC9yaXNjdi9LY29uZmlnLTEzMC1cXHRzZWxlY3QgSEFWRV9BTElHTkVEX1NUUlVDVF9QQUdFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjQ3LjY1MDY3MDE2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDcxMTU3MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyB0aGUgQlBGIEpJVCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBCUEYgSklUIGNvbXBpbGF0aW9uIGZvciBSSVNDLVYuIEZpcnN0LCBJJ20gY2hlY2tpbmcgaWYgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKE1NVSkgaXMgYWN0aXZlLCBiZWNhdXNlIHRoYXQncyBhIGtleSBjb25kaXRpb24gaGVyZS4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgd2UndmUgZ290IGBDT05GSUdfUklTQ1ZfSVNBX1pBQkhBYCBlbmFibGVkIOKAkyB0aGF0J3MgbGlrZWx5IGltcG9ydGFudC4gSG1tLCB3aGF0IGFib3V0IGBDT05GSUdfU01QYCBhbmQgYENPTkZJR182NEJJVGA/IFRoZXkgYXJlIHVzdWFsbHkgZW5hYmxlZCwgYW5kIEknZCBiZSBzdXJwcmlzZWQgaWYgdGhleSB3ZXJlbid0IGluIHRoaXMgY29udGV4dC5cblxuTm93LCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgaG9uaW5nIGluIG9uIGBicGZfaml0X2VtaXRfaW5zbmAsIHdoaWNoIGlzIGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYC4gSSBhbHJlYWR5IGtub3cgdGhhdCBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEkgY2FuIHByb2JhYmx5IGRpcmVjdCBteSBlZmZvcnRzIHRoZXJlLCBvciBwZXJoYXBzIEkgY291bGQgbG9vayBhdCBgYnBmX2ludF9qaXRfY29tcGlsZWAgd2hpY2ggbGlrZWx5IGNhbGxzIGBicGZfaml0X2VtaXRfaW5zbmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTQ2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjUyLjcyMTgzMTAzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4MTg1MjcxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjUzLjAzMDAzMjk3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDc2NjY2MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6XG5cbioqRmluZGluZyB0aGUgQlBGIEpJVCBFbnRyeSBQb2ludCBpbiBSSVNDLVYqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSBKdXN0LUluLVRpbWUgKEpJVCkgY29tcGlsZXIgZ2V0cyBpdHMgaG9va3MgaW50byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gVGhpcyBsaWtlbHkgbWVhbnMgSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGZ1bmN0aW9uIG9yIGZ1bmN0aW9ucyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgdGFraW5nIEJQRiBieXRlY29kZSBhbmQgdHJhbnNsYXRpbmcgaXQgaW50byBuYXRpdmUgUklTQy1WIGluc3RydWN0aW9ucy4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSB0eXBpY2FsIEpJVCBpbnRlZ3JhdGlvbiBwb2ludHMuIFRoZXJlJ3MgcHJvYmFibHkgYSBkcml2ZXIgb3IgbW9kdWxlIGludm9sdmVkLCBhbmQgdGhhdCdzIGxpa2VseSB0aGUgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHN5c3RlbSBjYWxsIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgaG93IGVCUEYgcHJvZ3JhbXMgYXJlIGxvYWRlZCwgdmVyaWZpZWQsIGFuZCBldmVudHVhbGx5IGV4ZWN1dGVkLiBJIHN1c3BlY3QgSSdsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBtZW1vcnkgbWFwcGluZyBvciBjb2RlIGdlbmVyYXRpb24gYW5kIGV4ZWN1dGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZi4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHNwZWNpZmljIFJJU0MtVi1yZWxhdGVkIGltcGxlbWVudGF0aW9ucyB3aXRoaW4gdGhhdCBjb2RlIHRvbywgaW4gY2FzZSB0aGVyZSBhcmUgdW5pcXVlIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIE15IGdvYWwgaXMgdG8gZmluZCB0aGUgZnVuY3Rpb24sIGFuZCBhbHNvIGdldCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdXJyb3VuZGluZyBjb250cm9sIGZsb3csIHdoaWNoIHdpbGwgaW52b2x2ZSBzb21lIHNlcmlvdXMgY29kZSBkaXZpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTg2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6Mzk6NTkuMTA2NzA0MjQzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY1MTkzODIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl8uKl9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjU5LjI5MzIzNjY0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE1MjE3MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTG9jYXRpbmcgdGhlIEpJVCBDb21waWxhdGlvbiBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgc2hvdWxkIHByb2JhYmx5IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIGBicGZfaml0X2NvbXBpbGVgIGZ1bmN0aW9uLCBvciBzb21ldGhpbmcgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIHdpdGhpbiB0aGUgZmlsZS4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCB3aGVuIGludmVzdGlnYXRpbmcgQlBGIEpJVCBjb21waWxhdGlvbiBiZWNhdXNlIGl0J3MgdGhlIGNvcmUgb2YgdGhlIHByb2Nlc3MuIEknbSBleHBlY3RpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlIHRvIG1vdmUgZm9yd2FyZCBmcm9tIGFuZCBnaXZlIG1lIGFuIGltbWVkaWF0ZSBzZW5zZSBvZiB0aGUgZW52aXJvbm1lbnQgSSdtIGxvb2tpbmcgYXQuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGZpcnN0IHN0ZXAgYW5kIG5vdCBhIHdpbGQgZ29vc2UgY2hhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzAyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NDA6MDIuNzA4NDU3MzE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA3MTU4MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzI9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjgtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzY5OmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM3MC1cXHRcXHQgICAgICBib29sIGV4dHJhX3Bhc3MpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE4MTEtXFx0XFx0bWFya19jYWxsKGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxODEyOlxcdFxcdHJldCA9IGJwZl9qaXRfZ2V0X2Z1bmNfYWRkcihjdHgtXFx1MDAzZXByb2csIGluc24sIGV4dHJhX3Bhc3MsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xODEzLVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2YWRkciwgXFx1MDAyNmZpeGVkX2FkZHIpO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xODIwLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTgyMTpcXHRcXHRcXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChjdHgtXFx1MDAzZXByb2csIGluc24pO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTgyMi1cXHRcXHRcXHRpZiAoIWZtKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTk0LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTk5NTp2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZylcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5OTYte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDkyLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjA5Mzp2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDk0LXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjA5Ny1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIwOTg6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwOTkte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTAyLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjEwMzpib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMDQte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTA3LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjEwODpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmEodm9pZClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMDkte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTEyLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjExMzpib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTE0LXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzMS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxMzI6Ym9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTMzLXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxMzc6Ym9vbCBicGZfaml0X2lubGluZXNfaGVscGVyX2NhbGwoczMyIGltbSlcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMzgte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTQ4LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE0OTpib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo0MDowMi44ODkxODE2NjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NjA2NjQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgQlBGIEpJVCBDb21waWxhdGlvbiBQYXRoKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBNeSBtZW50YWwgbWFwIGltbWVkaWF0ZWx5IGhvbWVzIGluIG9uIGBicGZfaml0X2VtaXRfaW5zbmAgYXMgdGhlIGxpa2VseSBjb3JlIGZ1bmN0aW9uLiBUaGF0J3MgdXN1YWxseSB0aGUgd29ya2hvcnNlIGluIHRoZXNlIEJQRiBKSVQgaW1wbGVtZW50YXRpb25zIOKAkyB0aGUgb25lIHdoZXJlIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYW5kIGVtaXNzaW9uIGhhcHBlbnMuXG5cbkJ1dCBob2xkIG9uLCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhhdCwgYSBxdWljayBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGluIHRoZSByaWdodCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29udGV4dC4gSSBoYXZlIGEgaHVuY2ggaXQgbWlnaHQgYmUgbmVzdGxlZCBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmNgLiBJJ2xsIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhlIHByaW1hcnkgY29tcGlsYXRpb24gZnVuY3Rpb24sIHdoaWNoIEkgc3VzcGVjdCBpcyBgYnBmX2ppdF9jb21waWxlYCwgaXMgYWN0dWFsbHkgdGhlcmUsIG9yIGlmIHRoaXMgaXMgYW4gYWJzdHJhY3Rpb24gb3IgYW4gaW5kaXJlY3Rpb24gdmlhIGEgZGlmZmVyZW50IGZpbGUgb3IgaW5jbHVkZSBzdGF0ZW1lbnQuIEtub3dpbmcgdGhhdCBpbml0aWFsIGNhbGwgaXMgY3JpdGljYWwgdG8gdHJhY2luZyB0aGUgd2hvbGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo0MDowNi41NzUyNTgwOTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNjg0NzgxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0zOT1ib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtNDMtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6NDQ6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy00NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjQwOjA2LjkxMjEyNDczNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTUwNjY3NzM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUklTQy1WIEJQRiBKSVQgT3B0aW1pemF0aW9ucyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhlIFJJU0MtViBrZXJuZWwgY29kZSwgdHJ5aW5nIHRvIGlkZW50aWZ5IHByaW1lIGFyZWFzIGZvciBmdXp6aW5nIHJlbGF0ZWQgdG8gcmVjZW50IGNoYW5nZXMuIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG15IGVmZm9ydHMgZWZmZWN0aXZlbHksIHRhcmdldGluZyBuZXcgY29kZSBvciBzaWduaWZpY2FudGx5IG1vZGlmaWVkIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgaHVuY2ggd2FzIGNvcnJlY3Q6IHRoZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb24sIGxvY2F0ZWQgd2l0aGluIGBicGZfaml0X2NvcmUuY2AsIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBvciBwZXJoYXBzIGV2ZW4gYGJwZl9qaXRfZW1pdF9pbnNuYCBkaXJlY3RseSwgc2luY2UgaXQgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIGNvcmUgY2hhbmdlcyBhcmUgbWFkZS5cblxuSSB0aGVuIHN0YXJ0ZWQgZXhwbG9yaW5nIHdoZXJlIHRoZXNlIEpJVCBpbnN0cnVjdGlvbnMgYXJlIHVzZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEkgdG9vayBhIGxvb2sgYXQgYGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmhgIGJlY2F1c2UgaXQgc2VlbWVkIHJlbGV2YW50IHRvIHRoZSBwZXItQ1BVIG9wdGltaXphdGlvbnMgSSBzdXNwZWN0IGFyZSBoYXBwZW5pbmcgaW4gdGhlIEpJVC4gU3VyZSBlbm91Z2gsIHRoaXMgZmlsZSBpbnRyb2R1Y2VzIGEgc2xldyBvZiBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYF9fcGVyY3B1X2FkZF9hbW9fY2FzZV84YCBhbmQgYHRoaXNfY3B1X2FkZF8xYCwgYWxsIGRlcGVuZGVudCBvbiBgQ09ORklHX1JJU0NWX0lTQV9aQUJIQWAuIFdhaXQgYSBtaW51dGUsIGB0aGlzX2NwdV9hZGRfMWAgaXMgYSBtYWNyby4gU2luY2UgaXQncyBhIG1hY3JvIEknbSBsZXNzIGludGVyZXN0ZWQsIGJ1dCB0aGUgcGVyLUNQVSBjb2RlIGlzIGNsZWFybHkgdGhlIHBvaW50IG9mIGludGVyZXN0LiBUaGUgdXNlIG9mIHBlci1DUFUgdmFyaWFibGVzIGlzIGxpa2VseSB3aWRlc3ByZWFkLCB3aGljaCBwcmVzZW50cyBhIHNpZ25pZmljYW50IGF0dGFjayBzdXJmYWNlLlxuXG5JIGFsc28gY2hlY2tlZCBvdGhlciBDIGZpbGVzIHRoYXQgd2VyZSBtb2RpZmllZC4gYGFyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuY2Agc2hvd2VkIGNoYW5nZXMgdG8gYF9fY3B1X3VwYCwgYHNtcF9wcmVwYXJlX2Jvb3RfY3B1YCwgYW5kIGBzbXBfY2FsbGluYCBidXQgdGhvc2UgYXJlIG1vcmUgYm9vdC1yZWxhdGVkLCBzbyB0aGV5J3JlIGxlc3MgY29tcGVsbGluZyBmb3IgZm9jdXNlZCBmdXp6aW5nLiBTaW1pbGFybHksIGBhcmNoL3Jpc2N2L2tlcm5lbC9hc20tb2Zmc2V0cy5jYCB0b3VjaGVzIGBhc21fb2Zmc2V0c2AgYnV0IHRoaXMgZG9lc24ndCBzZWVtIGRpcmVjdGx5IHJlbGV2YW50IHRvIG15IGdvYWwuXG5cbk5vdywgem9vbWluZyBiYWNrIGluLCB0aGUga2V5IGZ1bmN0aW9uYWwgY2hhbmdlIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBob3cgdGhlIEJQRiBKSVQgaGFuZGxlcyBwZXItQ1BVIGluc3RydWN0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGlzIGJsb2NrIG9mIGNvZGU6XG5gYGBjXG4jaWZkZWYgQ09ORklHX1NNUFxuLVx0XHRcdC8qIExvYWQgY3VycmVudCBDUFUgbnVtYmVyIGluIFQxICovXG4tXHRcdFx0ZW1pdF9sdyhSVl9SRUdfVDEsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgY3B1KSxcbitcdFx0XHRlbWl0X2xkKFJWX1JFR19UMSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBwY3B1X29mZnNldCksXG4gXHRcdFx0XHRSVl9SRUdfVFAsIGN0eCk7XG4tXHRcdFx0LyogTG9hZCBhZGRyZXNzIG9mIF9fcGVyX2NwdV9vZmZzZXQgYXJyYXkgaW4gVDIgKi9cbi1cdFx0XHRlbWl0X2FkZHIoUlZfUkVHX1QyLCAodTY0KVx1MDAyNl9fcGVyX2NwdV9vZmZzZXQsIGV4dHJhX3Bhc3MsIGN0eCk7XG4tXHRcdFx0LyogR2V0IGFkZHJlc3Mgb2YgX19wZXJfY3B1X29mZnNldFtjcHVdIGluIFQxICovXG4tXHRcdFx0ZW1pdF9zaDNhZGQoUlZfUkVHX1QxLCBSVl9SRUdfVDEsIFJWX1JFR19UMiwgY3R4KTtcbi1cdFx0XHQvKiBMb2FkIF9fcGVyX2NwdV9vZmZzZXRbY3B1XSBpbiBUMSAqL1xuLVx0XHRcdGVtaXRfbGQoUlZfUkVHX1QxLCAwLCBSVl9SRUdfVDEsIGN0eCk7XG4gXHRcdFx0LyogQWRkIHRoZSBvZmZzZXQgdG8gUmQgKi9cbiBcdFx0XHRlbWl0X2FkZChyZCwgcmQsIFJWX1JFR19UMSwgY3R4KTtcbiAjZW5kaWZcbmBgYFxuVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gZm9yIHBlci1DUFUgdmFyaWFibGVzIGluIHRoZSBCUEYgSklULCByZXBsYWNpbmcgYSBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnMgd2l0aCBhIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IG9uZS4gRGVmaW5pdGVseSBwcm9taXNpbmchIFRoaXMgaGlnaGxpZ2h0cyB0aGUgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2ppdF9lbWl0X2luc25gIGZ1bmN0aW9ucyBmb3IgbXkgZnV6emluZyBjYW1wYWlnbi5cblxuRmluYWxseSwgSSBjaGVja2VkIGBDT05GSUdfUklTQ1ZfSVNBX1pBQkhBYCB0byBzZWUgaWYgaXQncyB0aGUgb25seSBjb25maWcsIGFuZCB0aGVuIGNoZWNrZWQgYENPTkZJR19CUEZfSklUYC4gVGhlIEJQRiBKSVQgbmVlZHMgdG8gYmUgZW5hYmxlZCwgYnV0IHRoYXQncyB1c3VhbGx5IHRoZSBkZWZhdWx0LiBJdCdzIHRpbWUgdG8gc3RhcnQgY3JhZnRpbmcgc29tZSBmdXp6IHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTUzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjQwOjE4LjQxODgwODA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTc5MzM1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo0MDoyMy45OTgxNTI1MzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI2OTM0MzcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRnV6emluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgd2UgbmVlZCB0byBlbmFibGUgYFJJU0NWX0lTQV9aQUJIQWAgYW5kIGBCUEZfSklUYC4gSG9sZCBvbiwgYEhBU19JT1BPUlRgIGlzbid0IHNvbWV0aGluZyB3ZSBkaXJlY3RseSBlbmFibGUsIHNvIHdlIGNhbiBpZ25vcmUgdGhhdC4gSSBxdWlja2x5IGNoZWNrIGZvciBvdGhlciByZWxldmFudCBjb25maWdzIGJ1dCBgQ09ORklHX1NNUGAgYW5kIGBDT05GSUdfNjRCSVRgIGFyZSBhbHJlYWR5IGdvb2QgdG8gZ28uXG5cbk5vdywgbGV0J3MgcmV2aXNpdCB0aGUgY29yZSByZXF1aXJlbWVudHM6IGBXb3J0aEZ1enppbmc9dHJ1ZWAsIHRoZSBgRm9jdXNTeW1ib2xzYCAoYGJwZl9qaXRfZW1pdF9pbnNuYCwgYGJwZl9pbnRfaml0X2NvbXBpbGVgKSwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgKGBSSVNDVl9JU0FfWkFCSEFgLCBgQlBGX0pJVGApLlxuXG5gYnBmX2ppdF9lbWl0X2luc25gIGxvb2tzIGxpa2UgYSBzb2xpZCBmb2N1cyBzeW1ib2wuIEkgcXVpY2tseSBzY2FuIHRoZSBwYXRjaCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSXQgdG91Y2hlcyBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZXJjcHUuaGAgYW5kIGBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oYC4gVGhlc2UgYXJlIGhlYWRlciBmaWxlcyB3aXRoIGlubGluZSBmdW5jdGlvbnMuIFRoZSBwYXRjaCBhbHNvIGluY2x1ZGVzIGBhcmNoL3Jpc2N2L2tlcm5lbC9zbXBib290LmNgLCB3aGljaCBoYXMgYm9vdC9ob3RwbHVnIGZ1bmN0aW9ucyAoYF9fY3B1X3VwYCwgYHNtcF9wcmVwYXJlX2Jvb3RfY3B1YCwgYHNtcF9jYWxsaW5gKS4gQnV0IGBicGZfaml0X2VtaXRfaW5zbmAgc3RpbGwgc2VlbXMgbGlrZSB0aGUgbW9zdCByZWxldmFudC5cblxuSSdsbCBkb3VibGUtY2hlY2sgdGhhdCBgUklTQ1ZfSVNBX1pBQkhBYCBpcyB0aGUgY29ycmVjdCBjb25maWcsIGFuZCB5ZXAsIGBjb25maWcgUklTQ1ZfSVNBX1pBQkhBYCBjb25maXJtcyBpdC5cblxuVGhlbiwgSSBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIG5hbWVzIGFyZSBjb3JyZWN0OiBgYnBmX2ppdF9lbWl0X2luc25gIGlzIGNvbmZpcm1lZCBieSBgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylgLCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGNvbmZpcm1lZCBieSBgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylgLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJJ20gcmVhZHkgdG8gc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk0MywiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NDA6MzMuMjY3NTAyMzAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4Nzc3MjU5LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBSSVNDVl9JU0FfWkFCSEEiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUklTQ1ZfSVNBX1pBQkhBXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSSVNDLVYgYXJjaGl0ZWN0dXJlIGNvZGUgdG8gb3B0aW1pemUgcGVyLUNQVSB2YXJpYWJsZSBhY2Nlc3MuIEl0IGludHJvZHVjZXMgYSBuZXcgcGVyY3B1LmggaGVhZGVyIHdpdGggb3B0aW1pemVkIGlubGluZSBvcGVyYXRpb25zLCB1cGRhdGVzIGNvbnRleHQgc3dpdGNoIGxvZ2ljLCBhbmQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gdXNlIHRoZSBuZXcgcGVyLUNQVSBvZmZzZXQuIFRoZSBCUEYgSklUIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgbWFraW5nIHRoZW0gZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBSSVNDVl9JU0FfWkFCSEFcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NDA6MzMuNDc2MzA5OThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIwNjkzMzU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gYSBiaXQgcHV6emxlZC4gSSBpbml0aWFsbHkgdGhvdWdodCBgUklTQ1ZfSVNBX1pBQkhBYCB3YXNuJ3QgcGFydCBvZiB0aGUga2VybmVsIHRyZWUsIGFuZCB0aGF0J3Mgd2hhdCBgc2V0LXJlc3VsdHNgIHNlZW1lZCB0byBpbmRpY2F0ZS4gQnV0IGEgcXVpY2sgYGdyZXBgIHNlYXJjaCBicm91Z2h0IHVwIGEgbWF0Y2ggaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2AuIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQgYGdyZXBgIG91dHB1dDsgbWFrZSBzdXJlIEkgZGlkbid0IG1pc3Mgc29tZXRoaW5nLiBZZXAsIHRoZXJlIGl0IGlzOiBgYXJjaC9yaXNjdi9LY29uZmlnOjY4NDpjb25maWcgUklTQ1ZfSVNBX1pBQkhBYC4gTm93LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2h5IHRoZSBwcmV2aW91cyBjb21tYW5kIHJlcG9ydGVkIGl0IGFzIG5vbi1leGlzdGVudC5cblxuQ291bGQgaXQgYmUgdGhhdCB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgaW50cm9kdWNlZCBieSBhIHBhdGNoIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBhcHBsaWVkPyBObywgdGhlIHByb21wdCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBhbHJlYWR5IGFwcGxpZWQuIFRoZXJlZm9yZSwgdGhleSBzaG91bGQgYmUgYXZhaWxhYmxlIGluIHRoZSBIRUFEIGNvbW1pdC4gU28sIGxvZ2ljYWxseSwgc2luY2UgaXQncyBpbiBgS2NvbmZpZ2AsIGl0ICpzaG91bGQqIGV4aXN0LiBJIG5lZWQgdG8gZWxpbWluYXRlIHRoZSBwb3NzaWJpbGl0eSBvZiBhIGNvbmZpZ3VyYXRpb24gZXJyb3IuIExldCdzIGNvbmZpcm0gdGhhdCBpdCdzIHByZXNlbnQgaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDU2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5LCJUb29sQ2FsbHMiOlsic2V0LXJlc3VsdHMiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo0MDozOC42ODMyNDc4MjZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDQ4OTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUklTQ1ZfSVNBX1pBQkhBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L0tjb25maWc9Njc3PWNvbmZpZyBUT09MQ0hBSU5fSEFTX1pBQkhBXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctNjgzLVxcbmFyY2gvcmlzY3YvS2NvbmZpZzo2ODQ6Y29uZmlnIFJJU0NWX0lTQV9aQUJIQVxcbmFyY2gvcmlzY3YvS2NvbmZpZy02ODUtXFx0Ym9vbCBcXFwiWmFiaGEgZXh0ZW5zaW9uIHN1cHBvcnQgZm9yIGF0b21pYyBieXRlL2hhbGZ3b3JkIG9wZXJhdGlvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjQwOjM5LjIwNzc1MzY4NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjc5ODY2MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIElzc3VlKipcblxuT2theSwgc28gYHNldC1yZXN1bHRzYCBpcyBmYWlsaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IG11c3QgYmUgY2hlY2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMnIGV4aXN0ZW5jZSB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gaGllcmFyY2h5LCBwb3NzaWJseSBkaXJlY3RseSBwYXJzaW5nIGBLY29uZmlnYCBmaWxlcy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBlcnJvciBtZXNzYWdlLiBBaCwgaGVyZSBpdCBpczogXCJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogUklTQ1ZfSVNBX1pBQkhBLlwiXG5cbkhtbSwgaXMgdGhpcyBiZWNhdXNlIGBSSVNDVl9JU0FfWkFCSEFgIGlzIGRlZmluZWQgdW5kZXIgYGFyY2gvcmlzY3YvS2NvbmZpZ2AsIGJ1dCB0aGUgdG9vbCBpcyBhc3N1bWluZyBhIGRpZmZlcmVudCBkZWZhdWx0IGFyY2hpdGVjdHVyZT8gTW9zdCBsaWtlbHksIHRoZSB0b29sIGlzIGVpdGhlciBjaGVja2luZyB0aGUgZGVmYXVsdCBhcmNoaXRlY3R1cmUncyBLY29uZmlnIGZpbGVzLCBzdWNoIGFzIHg4Nl82NCwgd2hpY2ggaXMgYSBjb21tb24gZGVmYXVsdCwgb3IsIHRoZXJlIGlzIGFuIGFjdHVhbCBidWcuXG5cblRoZXJlZm9yZSwgSSdsbCBlaXRoZXIgcmVtb3ZlIGBSSVNDVl9JU0FfWkFCSEFgIGVudGlyZWx5IGZyb20gdGhlIGlucHV0IG9yIGlnbm9yZSB0aGUgZXJyb3IgaWYgdGhhdCdzIGFuIG9wdGlvbi5cblxuV2FpdCBhIG1pbnV0ZSwgYHNldC1yZXN1bHRzYCBkaWQgYWN0dWFsbHkgZmFpbCwgc28gSSdsbCBuZWVkIHRvIGNhbGwgaXQgYWdhaW4sIHRoaXMgdGltZSB3aXRob3V0IGBSSVNDVl9JU0FfWkFCSEFgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU5MSwiT3V0cHV0VG9rZW5zIjoxMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NDA6NDcuNDg3NjI0MDQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwOTgxNTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSSVNDLVYgYXJjaGl0ZWN0dXJlIGNvZGUgdG8gb3B0aW1pemUgcGVyLUNQVSB2YXJpYWJsZSBhY2Nlc3MuIEl0IGludHJvZHVjZXMgYSBuZXcgcGVyY3B1LmggaGVhZGVyIHdpdGggb3B0aW1pemVkIGlubGluZSBvcGVyYXRpb25zLCB1cGRhdGVzIGNvbnRleHQgc3dpdGNoIGxvZ2ljLCBhbmQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gdXNlIHRoZSBuZXcgcGVyLUNQVSBvZmZzZXQuIFRoZSBCUEYgSklUIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgbWFraW5nIHRoZW0gZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBhcmNoaXRlY3R1cmUgY29kZSB0byBvcHRpbWl6ZSBwZXItQ1BVIHZhcmlhYmxlIGFjY2Vzcy4gSXQgaW50cm9kdWNlcyBhIG5ldyBwZXJjcHUuaCBoZWFkZXIgd2l0aCBvcHRpbWl6ZWQgaW5saW5lIG9wZXJhdGlvbnMsIHVwZGF0ZXMgY29udGV4dCBzd2l0Y2ggbG9naWMsIGFuZCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byB1c2UgdGhlIG5ldyBwZXItQ1BVIG9mZnNldC4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBtYWtpbmcgdGhlbSBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowq9cdg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 09:27:25 +0000 UTC FinishedAt: 2026-07-01 09:40:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "be5c93fa674f0fc3c8f359c2143abce6bbb422e6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "be5c93fa674f0fc3c8f359c2143abce6bbb422e6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT" ], "series_id": "33aec87f-677e-43f2-af4d-e6ea93bf5531" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_jit_emit_insn", "bpf_int_jit_compile" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBhcmNoaXRlY3R1cmUgY29kZSB0byBvcHRpbWl6ZSBwZXItQ1BVIHZhcmlhYmxlIGFjY2Vzcy4gSXQgaW50cm9kdWNlcyBhIG5ldyBwZXJjcHUuaCBoZWFkZXIgd2l0aCBvcHRpbWl6ZWQgaW5saW5lIG9wZXJhdGlvbnMsIHVwZGF0ZXMgY29udGV4dCBzd2l0Y2ggbG9naWMsIGFuZCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byB1c2UgdGhlIG5ldyBwZXItQ1BVIG9mZnNldC4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBtYWtpbmcgdGhlbSBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NGUzMTMwN2Q5N2RkMjYyZmFmNDQxMjY2ZWZiYzNlZmIwMTk4ZTA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwOTozOTowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaFxuaW5kZXggZTllOGJhODNlNjMyZjkuLjEzN2E0OTQ4ODMyNWU0IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaFxuQEAgLTkxLDExICYjNDM7OTEsNyBAQFxuIFxuICNpZmRlZiBDT05GSUdfU01QXG4gLm1hY3JvIGFzbV9wZXJfY3B1IGRzdCBzeW0gdG1wXG4tXHRsdyAgICBcXHRtcCwgVEFTS19USV9DUFVfTlVNKHRwKVxuLVx0c2xsaSAgXFx0bXAsIFxcdG1wLCBSSVNDVl9MR1BUUlxuLVx0bGEgICAgXFxkc3QsIF9fcGVyX2NwdV9vZmZzZXRcbi1cdGFkZCAgIFxcZHN0LCBcXGRzdCwgXFx0bXBcbi1cdFJFR19MIFxcdG1wLCAwKFxcZHN0KVxuJiM0MztcdFJFR19MIFxcdG1wLCBUQVNLX1RJX1BDUFVfT0ZGU0VUKHRwKVxuIFx0bGEgICAgXFxkc3QsIFxcc3ltXG4gXHRhZGQgICBcXGRzdCwgXFxkc3QsIFxcdG1wXG4gLmVuZG1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmhcbmluZGV4IDA5YmI1ZjU3YTlkMzQ2Li42ZjVkNzAzMTNjODNlZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9pby5oXG5AQCAtNTYsNiAmIzQzOzU2LDggQEBcbiAjZGVmaW5lIF9faW9fcGJ3KClcdFJJU0NWX0ZFTkNFKGlvdywgbylcbiAjZGVmaW5lIF9faW9fcGF3KClcdFJJU0NWX0ZFTkNFKG8sIGlvKVxuIFxuJiM0MzsjZGVmaW5lIFBDSV9JT19BRERSKGFkZHIpXHQoKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZylQQ0lfSU9CQVNFICYjNDM7IChhZGRyKSkpXG4mIzQzO1xuIC8qXG4gICogQWNjZXNzZXMgZnJvbSBhIHNpbmdsZSBoYXJ0IHRvIGEgc2luZ2xlIEkvTyBhZGRyZXNzIG11c3QgYmUgb3JkZXJlZC4gIFRoaXNcbiAgKiBhbGxvd3MgdXMgdG8gdXNlIHRoZSByYXcgcmVhZCBtYWNyb3MsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGZlbmNlIGJlZm9yZSBhbmRcbkBAIC0xMDIsMTIgJiM0MzsxMDQsMTQgQEAgX19pb19yZWFkc19pbnMocmVhZHMsIHUzMiwgbCwgX19pb19icigpLCBfX2lvX2FyKGFkZHIpKVxuICNkZWZpbmUgcmVhZHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fcmVhZHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpXG4gI2RlZmluZSByZWFkc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19yZWFkc2woYWRkciwgYnVmZmVyLCBjb3VudClcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVNfSU9QT1JUXG4gX19pb19yZWFkc19pbnMoaW5zLCAgdTgsIGIsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKVxuIF9faW9fcmVhZHNfaW5zKGlucywgdTE2LCB3LCBfX2lvX3BicigpLCBfX2lvX3BhcihhZGRyKSlcbiBfX2lvX3JlYWRzX2lucyhpbnMsIHUzMiwgbCwgX19pb19wYnIoKSwgX19pb19wYXIoYWRkcikpXG4tI2RlZmluZSBpbnNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zYihQQ0lfSU9CQVNFICYjNDM7IChhZGRyKSwgYnVmZmVyLCBjb3VudClcbi0jZGVmaW5lIGluc3coYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnN3KFBDSV9JT0JBU0UgJiM0MzsgKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuLSNkZWZpbmUgaW5zbChhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc2woUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpXG4mIzQzOyNkZWZpbmUgaW5zYihhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc2IoUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4mIzQzOyNkZWZpbmUgaW5zdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3coUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4mIzQzOyNkZWZpbmUgaW5zbChhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc2woUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4mIzQzOyNlbmRpZlxuIFxuIF9faW9fd3JpdGVzX291dHMod3JpdGVzLCAgdTgsIGIsIF9faW9fYncoKSwgX19pb19hdygpKVxuIF9faW9fd3JpdGVzX291dHMod3JpdGVzLCB1MTYsIHcsIF9faW9fYncoKSwgX19pb19hdygpKVxuQEAgLTExNiwyNSAmIzQzOzEyMCwzMSBAQCBfX2lvX3dyaXRlc19vdXRzKHdyaXRlcywgdTMyLCBsLCBfX2lvX2J3KCksIF9faW9fYXcoKSlcbiAjZGVmaW5lIHdyaXRlc3coYWRkciwgYnVmZmVyLCBjb3VudCkgX193cml0ZXN3KGFkZHIsIGJ1ZmZlciwgY291bnQpXG4gI2RlZmluZSB3cml0ZXNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fd3JpdGVzbChhZGRyLCBidWZmZXIsIGNvdW50KVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0hBU19JT1BPUlRcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsICB1OCwgYiwgX19pb19wYncoKSwgX19pb19wYXcoKSlcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHUxNiwgdywgX19pb19wYncoKSwgX19pb19wYXcoKSlcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHUzMiwgbCwgX19pb19wYncoKSwgX19pb19wYXcoKSlcbi0jZGVmaW5lIG91dHNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2IoUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpXG4tI2RlZmluZSBvdXRzdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHN3KFBDSV9JT0JBU0UgJiM0MzsgKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuLSNkZWZpbmUgb3V0c2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzbChQQ0lfSU9CQVNFICYjNDM7IChhZGRyKSwgYnVmZmVyLCBjb3VudClcbiYjNDM7I2RlZmluZSBvdXRzYihhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHNiKFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuJiM0MzsjZGVmaW5lIG91dHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3coUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4mIzQzOyNkZWZpbmUgb3V0c2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzbChQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcbiYjNDM7I2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR182NEJJVFxuIF9faW9fcmVhZHNfaW5zKHJlYWRzLCB1NjQsIHEsIF9faW9fYnIoKSwgX19pb19hcihhZGRyKSlcbiAjZGVmaW5lIHJlYWRzcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX3JlYWRzcShhZGRyLCBidWZmZXIsIGNvdW50KVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0hBU19JT1BPUlRcbiBfX2lvX3JlYWRzX2lucyhpbnMsIHU2NCwgcSwgX19pb19wYnIoKSwgX19pb19wYXIoYWRkcikpXG4tI2RlZmluZSBpbnNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zcShQQ0lfSU9CQVNFICYjNDM7IChhZGRyKSwgYnVmZmVyLCBjb3VudClcbiYjNDM7I2RlZmluZSBpbnNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zcShQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcbiYjNDM7I2VuZGlmXG4gXG4gX19pb193cml0ZXNfb3V0cyh3cml0ZXMsIHU2NCwgcSwgX19pb19idygpLCBfX2lvX2F3KCkpXG4gI2RlZmluZSB3cml0ZXNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fd3JpdGVzcShhZGRyLCBidWZmZXIsIGNvdW50KVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0hBU19JT1BPUlRcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHU2NCwgcSwgX19pb19wYnIoKSwgX19pb19wYXcoKSlcbi0jZGVmaW5lIG91dHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3EoUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpXG4mIzQzOyNkZWZpbmUgb3V0c3EoYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzcShQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcbiYjNDM7I2VuZGlmXG4gI2VuZGlmXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtLWdlbmVyaWMvaW8uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmRhZDk3NWI1NWQwYzMxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oXG5AQCAtMCwwICYjNDM7MSwyODcgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19BU01fUEVSQ1BVX0hcbiYjNDM7I2RlZmluZSBfX0FTTV9QRVJDUFVfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWVtcHQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2FsdGVybmF0aXZlLW1hY3Jvcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9jcHVmZWF0dXJlLW1hY3Jvcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9jdXJyZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2h3Y2FwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3RocmVhZF9pbmZvLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUEVSQ1BVX1JXX09QUyhzeilcdFx0XHRcdFx0XHRcXFxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19wZXJjcHVfcmVhZF8jI3N6KHZvaWQgKnB0cilcdFx0XFxcbiYjNDM7e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRSgqKHUjI3N6ICopcHRyKTtcdFx0XHRcdFxcXG4mIzQzO31cdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHVfd3JpdGVfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVx0XFxcbiYjNDM7e1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0V1JJVEVfT05DRSgqKHUjI3N6ICopcHRyLCAodSMjc3opdmFsKTtcdFx0XHRcdFxcXG4mIzQzO31cbiYjNDM7XG4mIzQzO1BFUkNQVV9SV19PUFMoOClcbiYjNDM7UEVSQ1BVX1JXX09QUygxNilcbiYjNDM7UEVSQ1BVX1JXX09QUygzMilcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfNjRCSVRcbiYjNDM7UEVSQ1BVX1JXX09QUyg2NClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9fUEVSQ1BVX0FNT19PUF9DQVNFKHNmeCwgbmFtZSwgc3osIGFtb19pbnNuKVx0XHRcdFxcXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7X19wZXJjcHVfIyNuYW1lIyNfYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVx0XHRcXFxuJiM0Mzt7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFwmIzM0O2Ftb1wmIzM0OyAjYW1vX2luc24gI3NmeCBcJiMzNDsgemVybywgJVt2YWxdLCAlW3B0cl1cJiMzNDtcdFx0XFxcbiYjNDM7XHRcdDogW3B0cl0gXCYjMzQ7JiM0MztBXCYjMzQ7ICgqKHUjI3N6ICopcHRyKVx0XHRcdFx0XFxcbiYjNDM7XHRcdDogW3ZhbF0gXCYjMzQ7clwmIzM0OyAoKHUjI3N6KSh2YWwpKVx0XHRcdFx0XFxcbiYjNDM7XHRcdDogXCYjMzQ7bWVtb3J5XCYjMzQ7KTtcdFx0XHRcdFx0XHRcXFxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUXG4mIzQzOyNkZWZpbmUgUEVSQ1BVX09QKG5hbWUsIGFtb19pbnNuKVx0XHRcdFx0XHRcXFxuJiM0MztcdF9fUEVSQ1BVX0FNT19PUF9DQVNFKC53LCBuYW1lLCAzMiwgYW1vX2luc24pXHRcdFx0XFxcbiYjNDM7XHRfX1BFUkNQVV9BTU9fT1BfQ0FTRSguZCwgbmFtZSwgNjQsIGFtb19pbnNuKVxuJiM0MzsjZWxzZVxuJiM0MzsjZGVmaW5lIFBFUkNQVV9PUChuYW1lLCBhbW9faW5zbilcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX1BFUkNQVV9BTU9fT1BfQ0FTRSgudywgbmFtZSwgMzIsIGFtb19pbnNuKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1BFUkNQVV9PUChhZGQsIGFkZClcbiYjNDM7UEVSQ1BVX09QKGFuZG5vdCwgYW5kKVxuJiM0MztQRVJDUFVfT1Aob3IsIG9yKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ3VycmVudGx5LCBvbmx5IHRoaXNfY3B1X2FkZF9yZXR1cm5feHh4KCkgcmVxdWlyZXMgYSByZXR1cm4gdmFsdWUsXG4mIzQzOyAqIGFuZCB0aGUgUEVSQ1BVX1JFVF9PUCgpIGRvZXMgbm90IGFjY291bnQgZm9yIG90aGVyIG9wZXJhdGlvbnMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9fUEVSQ1BVX0FNT19SRVRfT1BfQ0FTRShzZngsIG5hbWUsIHN6LCBhbW9faW5zbilcdFx0XFxcbiYjNDM7c3RhdGljIGlubGluZSB1IyNzelx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7X19wZXJjcHVfIyNuYW1lIyNfcmV0dXJuX2Ftb19jYXNlXyMjc3oodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbClcdFxcXG4mIzQzO3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHJlZ2lzdGVyIHUjI3N6IHJldDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdGFzbSB2b2xhdGlsZSAoXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XCYjMzQ7YW1vXCYjMzQ7ICNhbW9faW5zbiAjc2Z4IFwmIzM0OyAlW3JldF0sICVbdmFsXSwgJVtwdHJdXCYjMzQ7XHRcdFxcXG4mIzQzO1x0XHQ6IFtwdHJdIFwmIzM0OyYjNDM7QVwmIzM0OyAoKih1IyNzeiAqKXB0ciksIFtyZXRdIFwmIzM0Oz1yXCYjMzQ7IChyZXQpXHRcdFxcXG4mIzQzO1x0XHQ6IFt2YWxdIFwmIzM0O3JcJiMzNDsgKCh1IyNzeikodmFsKSlcdFx0XHRcdFxcXG4mIzQzO1x0XHQ6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRyZXR1cm4gcmV0ICYjNDM7IHZhbDtcdFx0XHRcdFx0XHRcXFxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUXG4mIzQzOyNkZWZpbmUgUEVSQ1BVX1JFVF9PUChuYW1lLCBhbW9faW5zbilcdFx0XHRcdFx0XFxcbiYjNDM7XHRfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbilcdFx0XFxcbiYjNDM7XHRfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0UoLmQsIG5hbWUsIDY0LCBhbW9faW5zbilcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBQRVJDUFVfUkVUX09QKG5hbWUsIGFtb19pbnNuKVx0XHRcdFx0XHRcXFxuJiM0MztcdF9fUEVSQ1BVX0FNT19SRVRfT1BfQ0FTRSgudywgbmFtZSwgMzIsIGFtb19pbnNuKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1BFUkNQVV9SRVRfT1AoYWRkLCBhZGQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBFUkNQVV84XzE2X0dFVF9TSElGVChwdHIpXHQoKCh1bnNpZ25lZCBsb25nKShwdHIpIFx1MDAyNiAweDMpICogQklUU19QRVJfQllURSlcbiYjNDM7I2RlZmluZSBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeilcdEdFTk1BU0soKHN6KSAtIDEsIDApXG4mIzQzOyNkZWZpbmUgUEVSQ1BVXzhfMTZfR0VUX1BUUjMyKHB0cilcdCgodTMyICopKCh1bnNpZ25lZCBsb25nKShwdHIpIFx1MDAyNiB+MHgzKSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUEVSQ1BVXzhfMTZfT1AobmFtZSwgYW1vX2luc24sIHN6LCBzZngsIHZhbF90eXBlLCBuZXdfdmFsX2V4cHIsIGFzbV9vcClcdFx0XHRcXFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHVfIyNuYW1lIyNfYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVx0XHRcXFxuJiM0Mzt7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUklTQ1ZfSVNBX1pBQkhBKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0cmlzY3ZfaGFzX2V4dGVuc2lvbl91bmxpa2VseShSSVNDVl9JU0FfRVhUX1pBQkhBKSkge1x0XHRcdFx0XFxcbiYjNDM7XHRcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7YW1vXCYjMzQ7ICNhbW9faW5zbiAjc2Z4IFwmIzM0OyB6ZXJvLCAlW3ZhbF0sICVbcHRyXVwmIzM0O1x0XHRcdFxcXG4mIzQzO1x0XHRcdDogW3B0cl0gXCYjMzQ7JiM0MztBXCYjMzQ7KCoodmFsX3R5cGUgKilwdHIpXHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0OiBbdmFsXSBcJiMzNDtyXCYjMzQ7KCh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikgXHUwMDI2IFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSkpXHRcXFxuJiM0MztcdFx0XHQ6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0fSBlbHNlIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHR1MzIgKnB0cjMyID0gUEVSQ1BVXzhfMTZfR0VUX1BUUjMyKHB0cik7XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRjb25zdCB1bnNpZ25lZCBsb25nIHNoaWZ0ID0gUEVSQ1BVXzhfMTZfR0VUX1NISUZUKHB0cik7XHRcdFx0XHRcXFxuJiM0MztcdFx0Y29uc3QgdTMyIG1hc2sgPSBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikgXHUwMDNjXHUwMDNjIHNoaWZ0O1x0XHRcdFx0XFxcbiYjNDM7XHRcdGNvbnN0IHZhbF90eXBlIHZhbF90cnVuYyA9ICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcilcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjYgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKTtcdFx0XHRcdFxcXG4mIzQzO1x0XHR1MzIgcmV0eCwgcmM7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHZhbF90eXBlIG5ld192YWxfdHlwZTtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGFzbSB2b2xhdGlsZSAoXHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7MDogbHIudyAlMCwgJTJcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O2FuZCAlMywgJTAsICU0XFxuXCYjMzQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcJiMzNDtzcmwgJTMsICUzLCAlNVxcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0I2FzbV9vcCBcJiMzNDsgJTMsICUzLCAlNlxcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7YW5kICUzLCAlMywgJThcXG5cJiMzNDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcJiMzNDtzbGwgJTMsICUzLCAlNVxcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7YW5kICUxLCAlMCwgJTdcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O29yICUxLCAlMSwgJTNcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O3NjLncgJTEsICUxLCAlMlxcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7Ym5leiAlMSwgMGJcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0OiBcJiMzNDs9XHUwMDI2clwmIzM0OyhyZXR4KSwgXCYjMzQ7PVx1MDAyNnJcJiMzNDsocmMpLCBcJiMzNDsmIzQzO0FcJiMzNDsoKnB0cjMyKSwgXCYjMzQ7PVx1MDAyNnJcJiMzNDsobmV3X3ZhbF90eXBlKVx0XHRcXFxuJiM0MztcdFx0XHQ6IFwmIzM0O3JcJiMzNDsobWFzayksIFwmIzM0O3JcJiMzNDsoc2hpZnQpLCBcJiMzNDtyXCYjMzQ7KHZhbF90cnVuYyksIFwmIzM0O3JcJiMzNDsofm1hc2spLFx0XHRcdFxcXG4mIzQzO1x0XHRcdCAgXCYjMzQ7clwmIzM0OyhQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpXHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0OiBcJiMzNDttZW1vcnlcJiMzNDspO1x0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0fVx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBQRVJDUFVfT1BfOF8xNihvcF9uYW1lLCBvcCwgZXhwciwgZmluYWxfb3ApXHRcdFx0XFxcbiYjNDM7XHRQRVJDUFVfOF8xNl9PUChvcF9uYW1lLCBvcCwgOCwgLmIsIHU4LCBleHByLCBmaW5hbF9vcCk7XHRcdFxcXG4mIzQzO1x0UEVSQ1BVXzhfMTZfT1Aob3BfbmFtZSwgb3AsIDE2LCAuaCwgdTE2LCBleHByLCBmaW5hbF9vcClcbiYjNDM7XG4mIzQzO1BFUkNQVV9PUF84XzE2KGFkZCwgYWRkLCB2YWwsIGFkZClcbiYjNDM7UEVSQ1BVX09QXzhfMTYoYW5kbm90LCBhbmQsIH4odmFsKSwgYW5kKVxuJiM0MztQRVJDUFVfT1BfOF8xNihvciwgb3IsIHZhbCwgb3IpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBFUkNQVV84XzE2X1JFVF9PUChuYW1lLCBhbW9faW5zbiwgc3osIHNmeCwgdmFsX3R5cGUsIG5ld192YWxfZXhwcilcdFx0XHRcXFxuJiM0MztzdGF0aWMgaW5saW5lIHZhbF90eXBlIF9fcGVyY3B1XyMjbmFtZSMjX3JldHVybl9hbW9fY2FzZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpXHRcXFxuJiM0Mzt7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUklTQ1ZfSVNBX1pBQkhBKSBcdTAwMjZcdTAwMjZcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0cmlzY3ZfaGFzX2V4dGVuc2lvbl91bmxpa2VseShSSVNDVl9JU0FfRVhUX1pBQkhBKSkge1x0XHRcdFx0XFxcbiYjNDM7XHRcdHJlZ2lzdGVyIHZhbF90eXBlIHJldDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7YW1vXCYjMzQ7ICNhbW9faW5zbiAjc2Z4IFwmIzM0OyAlW3JldF0sICVbdmFsXSwgJVtwdHJdXCYjMzQ7XHRcdFx0XFxcbiYjNDM7XHRcdFx0OiBbcHRyXSBcJiMzNDsmIzQzO0FcJiMzNDsoKih2YWxfdHlwZSAqKXB0ciksIFtyZXRdIFwmIzM0Oz1yXCYjMzQ7KHJldClcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdDogW3ZhbF0gXCYjMzQ7clwmIzM0OygodmFsX3R5cGUpKChuZXdfdmFsX2V4cHIpIFx1MDAyNiBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpKVx0XFxcbiYjNDM7XHRcdFx0OiBcJiMzNDttZW1vcnlcJiMzNDspO1x0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0cmV0dXJuIHJldCAmIzQzOyAodmFsX3R5cGUpKChuZXdfdmFsX2V4cHIpIFx1MDAyNiBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpO1x0XHRcXFxuJiM0MztcdH0gZWxzZSB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0dTMyICpwdHIzMiA9IFBFUkNQVV84XzE2X0dFVF9QVFIzMihwdHIpO1x0XHRcdFx0XHRcXFxuJiM0MztcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaGlmdCA9IFBFUkNQVV84XzE2X0dFVF9TSElGVChwdHIpO1x0XHRcdFx0XFxcbiYjNDM7XHRcdGNvbnN0IHUzMiBtYXNrID0gKFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSBcdTAwM2NcdTAwM2Mgc2hpZnQpO1x0XHRcdFx0XFxcbiYjNDM7XHRcdGNvbnN0IHUzMiBpbnZfbWFzayA9IH5tYXNrO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGNvbnN0IHZhbF90eXBlIHZhbF90cnVuYyA9ICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcilcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjYgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKTtcdFx0XHRcdFxcXG4mIzQzO1x0XHR1MzIgb2xkLCBuZXcsIHRtcDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdGFzbSB2b2xhdGlsZSAoXHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7MDogbHIudyAlMCwgJTNcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O2FuZCAlMSwgJTAsICU0XFxuXCYjMzQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcJiMzNDtzcmwgJTEsICUxLCAlNVxcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7YWRkICUxLCAlMSwgJTZcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O2FuZCAlMSwgJTEsICU3XFxuXCYjMzQ7XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHRcJiMzNDtzbGwgJTEsICUxLCAlNVxcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7YW5kICUyLCAlMCwgJThcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O29yICUyLCAlMiwgJTFcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRcdFwmIzM0O3NjLncgJTIsICUyLCAlM1xcblwmIzM0O1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XCYjMzQ7Ym5leiAlMiwgMGJcXG5cJiMzNDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0OiBcJiMzNDs9XHUwMDI2clwmIzM0OyhvbGQpLCBcJiMzNDs9XHUwMDI2clwmIzM0Oyh0bXApLCBcJiMzNDs9XHUwMDI2clwmIzM0OyhuZXcpLCBcJiMzNDsmIzQzO0FcJiMzNDsoKnB0cjMyKVx0XHRcdFxcXG4mIzQzO1x0XHRcdDogXCYjMzQ7clwmIzM0OyhtYXNrKSwgXCYjMzQ7clwmIzM0OyhzaGlmdCksIFwmIzM0O3JcJiMzNDsodmFsX3RydW5jKSwgXCYjMzQ7clwmIzM0OyhQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpLCBcXFxuJiM0MztcdFx0XHRcJiMzNDtyXCYjMzQ7KGludl9tYXNrKVx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdFx0XHQ6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0XHRyZXR1cm4gKHZhbF90eXBlKSh0bXAgXHUwMDNlXHUwMDNlIHNoaWZ0KTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdH1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fVxuJiM0MztcbiYjNDM7UEVSQ1BVXzhfMTZfUkVUX09QKGFkZCwgYWRkLCA4LCAuYiwgdTgsIHZhbClcbiYjNDM7UEVSQ1BVXzhfMTZfUkVUX09QKGFkZCwgYWRkLCAxNiwgLmgsIHUxNiwgdmFsKVxuJiM0MztcbiYjNDM7I2RlZmluZSBfcGNwX3Byb3RlY3Qob3AsIHBjcCwgLi4uKVx0XHRcdFx0XHRcXFxuJiM0Mzsoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRvcChyYXdfY3B1X3B0cihcdTAwMjYocGNwKSksIF9fVkFfQVJHU19fKTtcdFx0XHRcdFxcXG4mIzQzO1x0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuJiM0Mzt9KVxuJiM0MztcbiYjNDM7I2RlZmluZSBfcGNwX3Byb3RlY3RfcmV0dXJuKG9wLCBwY3AsIGFyZ3MuLi4pXHRcdFx0XHRcXFxuJiM0Mzsoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0dHlwZW9mKHBjcCkgX19yZXR2YWw7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuJiM0MztcdF9fcmV0dmFsID0gKHR5cGVvZihwY3ApKW9wKHJhd19jcHVfcHRyKFx1MDAyNihwY3ApKSwgIyNhcmdzKTtcdFxcXG4mIzQzO1x0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuJiM0MztcdF9fcmV0dmFsO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfcmVhZF8xKHBjcClcdFx0X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9yZWFkXzgsIHBjcClcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9yZWFkXzIocGNwKVx0XHRfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfMTYsIHBjcClcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9yZWFkXzQocGNwKVx0XHRfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfMzIsIHBjcClcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfNjRCSVRcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9yZWFkXzgocGNwKVx0XHRfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfNjQsIHBjcClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzEocGNwLCB2YWwpXHRfcGNwX3Byb3RlY3QoX19wZXJjcHVfd3JpdGVfOCwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfMihwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV8xNiwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfNChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV8zMiwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfOChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV82NCwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfMShwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hZGRfYW1vX2Nhc2VfOCwgcGNwLCB2YWwpXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfYWRkXzIocGNwLCB2YWwpXHRfcGNwX3Byb3RlY3QoX19wZXJjcHVfYWRkX2Ftb19jYXNlXzE2LCBwY3AsIHZhbClcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfNChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hZGRfYW1vX2Nhc2VfMzIsIHBjcCwgdmFsKVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2FkZF84KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV82NCwgcGNwLCB2YWwpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzEocGNwLCB2YWwpXHRcdFxcXG4mIzQzO19wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfYWRkX3JldHVybl9hbW9fY2FzZV84LCBwY3AsIHZhbClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfYWRkX3JldHVybl8yKHBjcCwgdmFsKVx0XHRcXFxuJiM0MztfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X2FkZF9yZXR1cm5fYW1vX2Nhc2VfMTYsIHBjcCwgdmFsKVxuJiM0MztcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzQocGNwLCB2YWwpXHRcdFxcXG4mIzQzO19wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfYWRkX3JldHVybl9hbW9fY2FzZV8zMiwgcGNwLCB2YWwpXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfYWRkX3JldHVybl84KHBjcCwgdmFsKVx0XHRcXFxuJiM0MztfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X2FkZF9yZXR1cm5fYW1vX2Nhc2VfNjQsIHBjcCwgdmFsKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfYW5kXzEocGNwLCB2YWwpXHRfcGNwX3Byb3RlY3QoX19wZXJjcHVfYW5kbm90X2Ftb19jYXNlXzgsIHBjcCwgfih2YWwpKVxuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2FuZF8yKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV8xNiwgcGNwLCB+KHZhbCkpXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfYW5kXzQocGNwLCB2YWwpXHRfcGNwX3Byb3RlY3QoX19wZXJjcHVfYW5kbm90X2Ftb19jYXNlXzMyLCBwY3AsIHZhbClcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfNjRCSVRcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hbmRfOChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hbmRub3RfYW1vX2Nhc2VfNjQsIHBjcCwgdmFsKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfb3JfMShwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV84LCBwY3AsIHZhbClcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9vcl8yKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzE2LCBwY3AsIHZhbClcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9vcl80KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzMyLCBwY3AsIHZhbClcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfNjRCSVRcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9vcl84KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzY0LCBwY3AsIHZhbClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3hjaGdfMShwY3AsIHZhbClcdF9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbClcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV94Y2hnXzIocGNwLCB2YWwpXHRfcGNwX3Byb3RlY3RfcmV0dXJuKHhjaGdfcmVsYXhlZCwgcGNwLCB2YWwpXG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfeGNoZ180KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0X3JldHVybih4Y2hnX3JlbGF4ZWQsIHBjcCwgdmFsKVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3hjaGdfOChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfMShwY3AsIG8sIG4pXHRfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKVxuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfMihwY3AsIG8sIG4pXHRfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKVxuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfNChwY3AsIG8sIG4pXHRfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR182NEJJVFxuJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfOChwY3AsIG8sIG4pXHRfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKVxuJiM0MztcbiYjNDM7I2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnNjQocGNwLCBvLCBuKVx0dGhpc19jcHVfY21weGNoZ184KHBjcCwgbywgbilcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaWZkZWYgc3lzdGVtX2hhc19jbXB4Y2hnMTI4XG4mIzQzOyNkZWZpbmUgdGhpc19jcHVfY21weGNoZzEyOChwY3AsIG8sIG4pXHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR1MTI4IHJldF9fO1x0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHR0eXBlb2YocGNwKSAqcHRyX187XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuJiM0MztcdHB0cl9fID0gcmF3X2NwdV9wdHIoXHUwMDI2KHBjcCkpO1x0XHRcdFx0XHRcXFxuJiM0MztcdGlmIChzeXN0ZW1faGFzX2NtcHhjaGcxMjgoKSlcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHJldF9fID0gY21weGNoZzEyOF9sb2NhbChwdHJfXywgKG8pLCAobikpO1x0XHRcXFxuJiM0MztcdGVsc2VcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRcdHJldF9fID0gdGhpc19jcHVfZ2VuZXJpY19jbXB4Y2hnKHBjcCwgKG8pLCAobikpO1x0XFxcbiYjNDM7XHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cmV0X187XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO30pXG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2RlZmluZSBfX215X2NwdV9vZmZzZXQgKCgoc3RydWN0IHRocmVhZF9pbmZvICopY3VycmVudCktXHUwMDNlcGNwdV9vZmZzZXQpXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20tZ2VuZXJpYy9wZXJjcHUuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fQVNNX1BFUkNQVV9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcbmluZGV4IDBlNzFlYjgyZjkyMGNhLi43MzNiNmNkMzA2ZTQwZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcbkBAIC04OCw2ICYjNDM7ODgsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fc3dpdGNoX3RvX2VudmNmZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpXG4gXHRcdFx0OjogXCYjMzQ7clwmIzM0OyAobmV4dC1cdTAwM2V0aHJlYWQuZW52Y2ZnKSA6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19zd2l0Y2hfdG9fcGNwdV9vZmZzZXQoc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfU01QXG4mIzQzO1x0bmV4dC1cdTAwM2V0aHJlYWRfaW5mby5wY3B1X29mZnNldCA9IF9fbXlfY3B1X29mZnNldDtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICosXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICopO1xuIFxuQEAgLTEyMiw2ICYjNDM7MTI5LDcgQEAgZG8ge1x0XHRcdFx0XHRcdFx0XFxcbiBcdGlmIChzd2l0Y2hfdG9fc2hvdWxkX2ZsdXNoX2ljYWNoZShfX25leHQpKVx0XFxcbiBcdFx0bG9jYWxfZmx1c2hfaWNhY2hlX2FsbCgpO1x0XHRcXFxuIFx0X19zd2l0Y2hfdG9fZW52Y2ZnKF9fbmV4dCk7XHRcdFx0XFxcbiYjNDM7XHRfX3N3aXRjaF90b19wY3B1X29mZnNldChfX25leHQpO1x0XHRcXFxuIFx0KChsYXN0KSA9IF9fc3dpdGNoX3RvKF9fcHJldiwgX19uZXh0KSk7XHRcdFxcXG4gfSB3aGlsZSAoMClcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmhcbmluZGV4IDU1MDE5ZmRmYTllY2FhLi5mMTBiYTYyYjYxMDE2NCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXG5AQCAtNTMsNiAmIzQzOzUzLDcgQEBcbiBzdHJ1Y3QgdGhyZWFkX2luZm8ge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRmbGFncztcdFx0LyogbG93IGxldmVsIGZsYWdzICovXG4gXHRpbnQgICAgICAgICAgICAgICAgICAgICBwcmVlbXB0X2NvdW50OyAgLyogMD1cdTAwM2VwcmVlbXB0aWJsZSwgXHUwMDNjMD1cdTAwM2VCVUcgKi9cbiYjNDM7XHRpbnRcdFx0XHRjcHU7XG4gXHQvKlxuIFx0ICogVGhlc2Ugc3RhY2sgcG9pbnRlcnMgYXJlIG92ZXJ3cml0dGVuIG9uIGV2ZXJ5IHN5c3RlbSBjYWxsIG9yXG4gXHQgKiBleGNlcHRpb24uICBTUCBpcyBhbHNvIHNhdmVkIHRvIHRoZSBzdGFjayBpdCBjYW4gYmUgcmVjb3ZlcmVkIHdoZW5cbkBAIC02MCw4ICYjNDM7NjEsOCBAQCBzdHJ1Y3QgdGhyZWFkX2luZm8ge1xuIFx0ICovXG4gXHRsb25nXHRcdFx0a2VybmVsX3NwO1x0LyogS2VybmVsIHN0YWNrIHBvaW50ZXIgKi9cbiBcdGxvbmdcdFx0XHR1c2VyX3NwO1x0LyogVXNlciBzdGFjayBwb2ludGVyICovXG4tXHRpbnRcdFx0XHRjcHU7XG4gXHR1bnNpZ25lZCBsb25nXHRcdHN5c2NhbGxfd29yaztcdC8qIFNZU0NBTExfV09SS18gZmxhZ3MgKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdHBjcHVfb2Zmc2V0O1xuICNpZmRlZiBDT05GSUdfU0hBRE9XX0NBTExfU1RBQ0tcbiBcdHZvaWRcdFx0XHQqc2NzX2Jhc2U7XG4gXHR2b2lkXHRcdFx0KnNjc19zcDtcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xuaW5kZXggYTc1ZjBjZmVhMWU5ZmEuLjIwZDQ2YzI4ZmRkZTk3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xuQEAgLTM4LDYgJiM0MzszOCw3IEBAIHZvaWQgYXNtX29mZnNldHModm9pZClcbiBcdE9GRlNFVChUQVNLX1RIUkVBRF9TVU0sIHRhc2tfc3RydWN0LCB0aHJlYWQuc3VtKTtcbiBcbiBcdE9GRlNFVChUQVNLX1RJX0NQVSwgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvLmNwdSk7XG4mIzQzO1x0T0ZGU0VUKFRBU0tfVElfUENQVV9PRkZTRVQsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby5wY3B1X29mZnNldCk7XG4gXHRPRkZTRVQoVEFTS19USV9QUkVFTVBUX0NPVU5ULCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8ucHJlZW1wdF9jb3VudCk7XG4gXHRPRkZTRVQoVEFTS19USV9LRVJORUxfU1AsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby5rZXJuZWxfc3ApO1xuIFx0T0ZGU0VUKFRBU0tfVElfVVNFUl9TUCwgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvLnVzZXJfc3ApO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuY1xuaW5kZXggZjZlZjU3OTMwYjUwYTguLjc4NzY4NTRkMTYyNzkwIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvc21wYm9vdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zbXBib290LmNcbkBAIC0xOTEsNiAmIzQzOzE5MSw3IEBAIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRpZGxlKVxuIHtcbiBcdGludCByZXQ7XG4gXHR0aWRsZS1cdTAwM2V0aHJlYWRfaW5mby5jcHUgPSBjcHU7XG4mIzQzO1x0dGlkbGUtXHUwMDNldGhyZWFkX2luZm8ucGNwdV9vZmZzZXQgPSBwZXJfY3B1X29mZnNldChjcHUpO1xuIFxuIFx0cmV0ID0gc3RhcnRfc2Vjb25kYXJ5X2NwdShjcHUsIHRpZGxlKTtcbiBcdGlmICghcmV0KSB7XG5AQCAtMjA4LDYgJiM0MzsyMDksMTEgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXG4gfVxuICNlbmRpZlxuIFxuJiM0Mzt2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0X19teV9jcHVfb2Zmc2V0ID0gcGVyX2NwdV9vZmZzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIF9faW5pdCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cylcbiB7XG4gfVxuQEAgLTIzMyw2ICYjNDM7MjM5LDggQEAgYXNtbGlua2FnZSBfX3Zpc2libGUgdm9pZCBzbXBfY2FsbGluKHZvaWQpXG4gXHRtbWdyYWIobW0pO1xuIFx0Y3VycmVudC1cdTAwM2VhY3RpdmVfbW0gPSBtbTtcbiBcbiYjNDM7XHRfX215X2NwdV9vZmZzZXQgPSBwZXJfY3B1X29mZnNldChzbXBfcHJvY2Vzc29yX2lkKCkpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfUEFSQUxMRUxcbiBcdGNwdWhwX2FwX3N5bmNfYWxpdmUoKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuaW5kZXggYzAzYzFkZTE2Yjc5YWMuLmVhYjkzZDUyNThlOWU0IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuQEAgLTEzOTUsMTUgJiM0MzsxMzk1LDggQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4gXHRcdFx0aWYgKHJkICE9IHJzKVxuIFx0XHRcdFx0ZW1pdF9tdihyZCwgcnMsIGN0eCk7XG4gI2lmZGVmIENPTkZJR19TTVBcbi1cdFx0XHQvKiBMb2FkIGN1cnJlbnQgQ1BVIG51bWJlciBpbiBUMSAqL1xuLVx0XHRcdGVtaXRfbHcoUlZfUkVHX1QxLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGNwdSksXG4mIzQzO1x0XHRcdGVtaXRfbGQoUlZfUkVHX1QxLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHBjcHVfb2Zmc2V0KSxcbiBcdFx0XHRcdFJWX1JFR19UUCwgY3R4KTtcbi1cdFx0XHQvKiBMb2FkIGFkZHJlc3Mgb2YgX19wZXJfY3B1X29mZnNldCBhcnJheSBpbiBUMiAqL1xuLVx0XHRcdGVtaXRfYWRkcihSVl9SRUdfVDIsICh1NjQpXHUwMDI2X19wZXJfY3B1X29mZnNldCwgZXh0cmFfcGFzcywgY3R4KTtcbi1cdFx0XHQvKiBHZXQgYWRkcmVzcyBvZiBfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gaW4gVDEgKi9cbi1cdFx0XHRlbWl0X3NoM2FkZChSVl9SRUdfVDEsIFJWX1JFR19UMSwgUlZfUkVHX1QyLCBjdHgpO1xuLVx0XHRcdC8qIExvYWQgX19wZXJfY3B1X29mZnNldFtjcHVdIGluIFQxICovXG4tXHRcdFx0ZW1pdF9sZChSVl9SRUdfVDEsIDAsIFJWX1JFR19UMSwgY3R4KTtcbiBcdFx0XHQvKiBBZGQgdGhlIG9mZnNldCB0byBSZCAqL1xuIFx0XHRcdGVtaXRfYWRkKHJkLCByZCwgUlZfUkVHX1QxLCBjdHgpO1xuICNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2VtaXRfaW5zbiYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBhcmNoaXRlY3R1cmUgY29kZSB0byBvcHRpbWl6ZSBwZXItQ1BVIHZhcmlhYmxlIGFjY2Vzcy4gSXQgaW50cm9kdWNlcyBhIG5ldyBwZXJjcHUuaCBoZWFkZXIgd2l0aCBvcHRpbWl6ZWQgaW5saW5lIG9wZXJhdGlvbnMsIHVwZGF0ZXMgY29udGV4dCBzd2l0Y2ggbG9naWMsIGFuZCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byB1c2UgdGhlIG5ldyBwZXItQ1BVIG9mZnNldC4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBtYWtpbmcgdGhlbSBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ0ZTMxMzA3ZDk3ZGQyNjJmYWY0NDEyNjZlZmJjM2VmYjAxOThlMDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDA5OjM5OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vYXNtLmgKaW5kZXggZTllOGJhODNlNjMyZjkuLjEzN2E0OTQ4ODMyNWU0IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vYXNtLmgKQEAgLTkxLDExICYjNDM7OTEsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogLm1hY3JvIGFzbV9wZXJfY3B1IGRzdCBzeW0gdG1wCi0JbHcgICAgXHRtcCwgVEFTS19USV9DUFVfTlVNKHRwKQotCXNsbGkgIFx0bXAsIFx0bXAsIFJJU0NWX0xHUFRSCi0JbGEgICAgXGRzdCwgX19wZXJfY3B1X29mZnNldAotCWFkZCAgIFxkc3QsIFxkc3QsIFx0bXAKLQlSRUdfTCBcdG1wLCAwKFxkc3QpCiYjNDM7CVJFR19MIFx0bXAsIFRBU0tfVElfUENQVV9PRkZTRVQodHApCiAJbGEgICAgXGRzdCwgXHN5bQogCWFkZCAgIFxkc3QsIFxkc3QsIFx0bXAKIC5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMDliYjVmNTdhOWQzNDYuLjZmNWQ3MDMxM2M4M2VmIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9pby5oCkBAIC01Niw2ICYjNDM7NTYsOCBAQAogI2RlZmluZSBfX2lvX3BidygpCVJJU0NWX0ZFTkNFKGlvdywgbykKICNkZWZpbmUgX19pb19wYXcoKQlSSVNDVl9GRU5DRShvLCBpbykKIAomIzQzOyNkZWZpbmUgUENJX0lPX0FERFIoYWRkcikJKCh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpUENJX0lPQkFTRSAmIzQzOyAoYWRkcikpKQomIzQzOwogLyoKICAqIEFjY2Vzc2VzIGZyb20gYSBzaW5nbGUgaGFydCB0byBhIHNpbmdsZSBJL08gYWRkcmVzcyBtdXN0IGJlIG9yZGVyZWQuICBUaGlzCiAgKiBhbGxvd3MgdXMgdG8gdXNlIHRoZSByYXcgcmVhZCBtYWNyb3MsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGZlbmNlIGJlZm9yZSBhbmQKQEAgLTEwMiwxMiAmIzQzOzEwNCwxNCBAQCBfX2lvX3JlYWRzX2lucyhyZWFkcywgdTMyLCBsLCBfX2lvX2JyKCksIF9faW9fYXIoYWRkcikpCiAjZGVmaW5lIHJlYWRzdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX3JlYWRzdyhhZGRyLCBidWZmZXIsIGNvdW50KQogI2RlZmluZSByZWFkc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19yZWFkc2woYWRkciwgYnVmZmVyLCBjb3VudCkKIAomIzQzOyNpZmRlZiBDT05GSUdfSEFTX0lPUE9SVAogX19pb19yZWFkc19pbnMoaW5zLCAgdTgsIGIsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKQogX19pb19yZWFkc19pbnMoaW5zLCB1MTYsIHcsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKQogX19pb19yZWFkc19pbnMoaW5zLCB1MzIsIGwsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKQotI2RlZmluZSBpbnNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zYihQQ0lfSU9CQVNFICYjNDM7IChhZGRyKSwgYnVmZmVyLCBjb3VudCkKLSNkZWZpbmUgaW5zdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3coUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpCi0jZGVmaW5lIGluc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNsKFBDSV9JT0JBU0UgJiM0MzsgKGFkZHIpLCBidWZmZXIsIGNvdW50KQomIzQzOyNkZWZpbmUgaW5zYihhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc2IoUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpCiYjNDM7I2RlZmluZSBpbnN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zdyhQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudCkKJiM0MzsjZGVmaW5lIGluc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNsKFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KQomIzQzOyNlbmRpZgogCiBfX2lvX3dyaXRlc19vdXRzKHdyaXRlcywgIHU4LCBiLCBfX2lvX2J3KCksIF9faW9fYXcoKSkKIF9faW9fd3JpdGVzX291dHMod3JpdGVzLCB1MTYsIHcsIF9faW9fYncoKSwgX19pb19hdygpKQpAQCAtMTE2LDI1ICYjNDM7MTIwLDMxIEBAIF9faW9fd3JpdGVzX291dHMod3JpdGVzLCB1MzIsIGwsIF9faW9fYncoKSwgX19pb19hdygpKQogI2RlZmluZSB3cml0ZXN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fd3JpdGVzdyhhZGRyLCBidWZmZXIsIGNvdW50KQogI2RlZmluZSB3cml0ZXNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fd3JpdGVzbChhZGRyLCBidWZmZXIsIGNvdW50KQogCiYjNDM7I2lmZGVmIENPTkZJR19IQVNfSU9QT1JUCiBfX2lvX3dyaXRlc19vdXRzKG91dHMsICB1OCwgYiwgX19pb19wYncoKSwgX19pb19wYXcoKSkKIF9faW9fd3JpdGVzX291dHMob3V0cywgdTE2LCB3LCBfX2lvX3BidygpLCBfX2lvX3BhdygpKQogX19pb193cml0ZXNfb3V0cyhvdXRzLCB1MzIsIGwsIF9faW9fcGJ3KCksIF9faW9fcGF3KCkpCi0jZGVmaW5lIG91dHNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2IoUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpCi0jZGVmaW5lIG91dHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3coUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpCi0jZGVmaW5lIG91dHNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2woUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpCiYjNDM7I2RlZmluZSBvdXRzYihhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHNiKFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KQomIzQzOyNkZWZpbmUgb3V0c3coYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzdyhQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudCkKJiM0MzsjZGVmaW5lIG91dHNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2woUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpCiYjNDM7I2VuZGlmCiAKICNpZmRlZiBDT05GSUdfNjRCSVQKIF9faW9fcmVhZHNfaW5zKHJlYWRzLCB1NjQsIHEsIF9faW9fYnIoKSwgX19pb19hcihhZGRyKSkKICNkZWZpbmUgcmVhZHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fcmVhZHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpCiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBU19JT1BPUlQKIF9faW9fcmVhZHNfaW5zKGlucywgdTY0LCBxLCBfX2lvX3BicigpLCBfX2lvX3BhcihhZGRyKSkKLSNkZWZpbmUgaW5zcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3EoUENJX0lPQkFTRSAmIzQzOyAoYWRkciksIGJ1ZmZlciwgY291bnQpCiYjNDM7I2RlZmluZSBpbnNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zcShQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudCkKJiM0MzsjZW5kaWYKIAogX19pb193cml0ZXNfb3V0cyh3cml0ZXMsIHU2NCwgcSwgX19pb19idygpLCBfX2lvX2F3KCkpCiAjZGVmaW5lIHdyaXRlc3EoYWRkciwgYnVmZmVyLCBjb3VudCkgX193cml0ZXNxKGFkZHIsIGJ1ZmZlciwgY291bnQpCiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBU19JT1BPUlQKIF9faW9fd3JpdGVzX291dHMob3V0cywgdTY0LCBxLCBfX2lvX3BicigpLCBfX2lvX3BhdygpKQotI2RlZmluZSBvdXRzcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHNxKFBDSV9JT0JBU0UgJiM0MzsgKGFkZHIpLCBidWZmZXIsIGNvdW50KQomIzQzOyNkZWZpbmUgb3V0c3EoYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzcShQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudCkKJiM0MzsjZW5kaWYKICNlbmRpZgogCiAjaW5jbHVkZSAmbHQ7YXNtLWdlbmVyaWMvaW8uaCZndDsKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kYWQ5NzViNTVkMGMzMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTAsMCAmIzQzOzEsMjg3IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fQVNNX1BFUkNQVV9ICiYjNDM7I2RlZmluZSBfX0FTTV9QRVJDUFVfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ByZWVtcHQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2FsdGVybmF0aXZlLW1hY3Jvcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vY3B1ZmVhdHVyZS1tYWNyb3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2N1cnJlbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2h3Y2FwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS90aHJlYWRfaW5mby5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgUEVSQ1BVX1JXX09QUyhzeikJCQkJCQlcCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcGVyY3B1X3JlYWRfIyNzeih2b2lkICpwdHIpCQlcCiYjNDM7ewkJCQkJCQkJCVwKJiM0MzsJcmV0dXJuIFJFQURfT05DRSgqKHUjI3N6ICopcHRyKTsJCQkJXAomIzQzO30JCQkJCQkJCQlcCiYjNDM7CQkJCQkJCQkJXAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdV93cml0ZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpCVwKJiM0Mzt7CQkJCQkJCQkJXAomIzQzOwlXUklURV9PTkNFKCoodSMjc3ogKilwdHIsICh1IyNzeil2YWwpOwkJCQlcCiYjNDM7fQomIzQzOwomIzQzO1BFUkNQVV9SV19PUFMoOCkKJiM0MztQRVJDUFVfUldfT1BTKDE2KQomIzQzO1BFUkNQVV9SV19PUFMoMzIpCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR182NEJJVAomIzQzO1BFUkNQVV9SV19PUFMoNjQpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSBfX1BFUkNQVV9BTU9fT1BfQ0FTRShzZngsIG5hbWUsIHN6LCBhbW9faW5zbikJCQlcCiYjNDM7c3RhdGljIGlubGluZSB2b2lkCQkJCQkJCVwKJiM0MztfX3BlcmNwdV8jI25hbWUjI19hbW9fY2FzZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpCQlcCiYjNDM7ewkJCQkJCQkJCVwKJiM0MzsJYXNtIHZvbGF0aWxlICgJCQkJCQkJXAomIzQzOwkJJiMzNDthbW8mIzM0OyAjYW1vX2luc24gI3NmeCAmIzM0OyB6ZXJvLCAlW3ZhbF0sICVbcHRyXSYjMzQ7CQlcCiYjNDM7CQk6IFtwdHJdICYjMzQ7JiM0MztBJiMzNDsgKCoodSMjc3ogKilwdHIpCQkJCVwKJiM0MzsJCTogW3ZhbF0gJiMzNDtyJiMzNDsgKCh1IyNzeikodmFsKSkJCQkJXAomIzQzOwkJOiAmIzM0O21lbW9yeSYjMzQ7KTsJCQkJCQlcCiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsjZGVmaW5lIFBFUkNQVV9PUChuYW1lLCBhbW9faW5zbikJCQkJCVwKJiM0MzsJX19QRVJDUFVfQU1PX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbikJCQlcCiYjNDM7CV9fUEVSQ1BVX0FNT19PUF9DQVNFKC5kLCBuYW1lLCA2NCwgYW1vX2luc24pCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIFBFUkNQVV9PUChuYW1lLCBhbW9faW5zbikJCQkJCVwKJiM0MzsJX19QRVJDUFVfQU1PX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbikKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztQRVJDUFVfT1AoYWRkLCBhZGQpCiYjNDM7UEVSQ1BVX09QKGFuZG5vdCwgYW5kKQomIzQzO1BFUkNQVV9PUChvciwgb3IpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDdXJyZW50bHksIG9ubHkgdGhpc19jcHVfYWRkX3JldHVybl94eHgoKSByZXF1aXJlcyBhIHJldHVybiB2YWx1ZSwKJiM0MzsgKiBhbmQgdGhlIFBFUkNQVV9SRVRfT1AoKSBkb2VzIG5vdCBhY2NvdW50IGZvciBvdGhlciBvcGVyYXRpb25zLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX19QRVJDUFVfQU1PX1JFVF9PUF9DQVNFKHNmeCwgbmFtZSwgc3osIGFtb19pbnNuKQkJXAomIzQzO3N0YXRpYyBpbmxpbmUgdSMjc3oJCQkJCQkJXAomIzQzO19fcGVyY3B1XyMjbmFtZSMjX3JldHVybl9hbW9fY2FzZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpCVwKJiM0Mzt7CQkJCQkJCQkJXAomIzQzOwlyZWdpc3RlciB1IyNzeiByZXQ7CQkJCQkJXAomIzQzOwkJCQkJCQkJCVwKJiM0MzsJYXNtIHZvbGF0aWxlICgJCQkJCQkJXAomIzQzOwkJJiMzNDthbW8mIzM0OyAjYW1vX2luc24gI3NmeCAmIzM0OyAlW3JldF0sICVbdmFsXSwgJVtwdHJdJiMzNDsJCVwKJiM0MzsJCTogW3B0cl0gJiMzNDsmIzQzO0EmIzM0OyAoKih1IyNzeiAqKXB0ciksIFtyZXRdICYjMzQ7PXImIzM0OyAocmV0KQkJXAomIzQzOwkJOiBbdmFsXSAmIzM0O3ImIzM0OyAoKHUjI3N6KSh2YWwpKQkJCQlcCiYjNDM7CQk6ICYjMzQ7bWVtb3J5JiMzNDspOwkJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CXJldHVybiByZXQgJiM0MzsgdmFsOwkJCQkJCVwKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR182NEJJVAomIzQzOyNkZWZpbmUgUEVSQ1BVX1JFVF9PUChuYW1lLCBhbW9faW5zbikJCQkJCVwKJiM0MzsJX19QRVJDUFVfQU1PX1JFVF9PUF9DQVNFKC53LCBuYW1lLCAzMiwgYW1vX2luc24pCQlcCiYjNDM7CV9fUEVSQ1BVX0FNT19SRVRfT1BfQ0FTRSguZCwgbmFtZSwgNjQsIGFtb19pbnNuKQomIzQzOyNlbHNlCiYjNDM7I2RlZmluZSBQRVJDUFVfUkVUX09QKG5hbWUsIGFtb19pbnNuKQkJCQkJXAomIzQzOwlfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbikKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztQRVJDUFVfUkVUX09QKGFkZCwgYWRkKQomIzQzOwomIzQzOyNkZWZpbmUgUEVSQ1BVXzhfMTZfR0VUX1NISUZUKHB0cikJKCgodW5zaWduZWQgbG9uZykocHRyKSAmYW1wOyAweDMpICogQklUU19QRVJfQllURSkKJiM0MzsjZGVmaW5lIFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KQlHRU5NQVNLKChzeikgLSAxLCAwKQomIzQzOyNkZWZpbmUgUEVSQ1BVXzhfMTZfR0VUX1BUUjMyKHB0cikJKCh1MzIgKikoKHVuc2lnbmVkIGxvbmcpKHB0cikgJmFtcDsgfjB4MykpCiYjNDM7CiYjNDM7I2RlZmluZSBQRVJDUFVfOF8xNl9PUChuYW1lLCBhbW9faW5zbiwgc3osIHNmeCwgdmFsX3R5cGUsIG5ld192YWxfZXhwciwgYXNtX29wKQkJCVwKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHVfIyNuYW1lIyNfYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKQkJXAomIzQzO3sJCQkJCQkJCQkJCQlcCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19SSVNDVl9JU0FfWkFCSEEpICZhbXA7JmFtcDsJCQkJCQlcCiYjNDM7CQlyaXNjdl9oYXNfZXh0ZW5zaW9uX3VubGlrZWx5KFJJU0NWX0lTQV9FWFRfWkFCSEEpKSB7CQkJCVwKJiM0MzsJCWFzbSB2b2xhdGlsZSAoJiMzNDthbW8mIzM0OyAjYW1vX2luc24gI3NmeCAmIzM0OyB6ZXJvLCAlW3ZhbF0sICVbcHRyXSYjMzQ7CQkJXAomIzQzOwkJCTogW3B0cl0gJiMzNDsmIzQzO0EmIzM0OygqKHZhbF90eXBlICopcHRyKQkJCQkJCVwKJiM0MzsJCQk6IFt2YWxdICYjMzQ7ciYjMzQ7KCh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikgJmFtcDsgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSkJXAomIzQzOwkJCTogJiMzNDttZW1vcnkmIzM0Oyk7CQkJCQkJCQlcCiYjNDM7CX0gZWxzZSB7CQkJCQkJCQkJCVwKJiM0MzsJCXUzMiAqcHRyMzIgPSBQRVJDUFVfOF8xNl9HRVRfUFRSMzIocHRyKTsJCQkJCVwKJiM0MzsJCWNvbnN0IHVuc2lnbmVkIGxvbmcgc2hpZnQgPSBQRVJDUFVfOF8xNl9HRVRfU0hJRlQocHRyKTsJCQkJXAomIzQzOwkJY29uc3QgdTMyIG1hc2sgPSBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikgJmx0OyZsdDsgc2hpZnQ7CQkJCVwKJiM0MzsJCWNvbnN0IHZhbF90eXBlIHZhbF90cnVuYyA9ICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikJCQkJXAomIzQzOwkJCQkJICAgJmFtcDsgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKTsJCQkJXAomIzQzOwkJdTMyIHJldHgsIHJjOwkJCQkJCQkJCVwKJiM0MzsJCXZhbF90eXBlIG5ld192YWxfdHlwZTsJCQkJCQkJCVwKJiM0MzsJCQkJCQkJCQkJCQlcCiYjNDM7CQlhc20gdm9sYXRpbGUgKAkJCQkJCQkJCVwKJiM0MzsJCQkmIzM0OzA6IGxyLncgJTAsICUyXG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDthbmQgJTMsICUwLCAlNFxuJiMzNDsJCQkJCQkJXAomIzQzOwkJCSYjMzQ7c3JsICUzLCAlMywgJTVcbiYjMzQ7CQkJCQkJCVwKJiM0MzsJCQkjYXNtX29wICYjMzQ7ICUzLCAlMywgJTZcbiYjMzQ7CQkJCQkJCVwKJiM0MzsJCQkmIzM0O2FuZCAlMywgJTMsICU4XG4mIzM0OwkJCQkJCVwKJiM0MzsJCQkmIzM0O3NsbCAlMywgJTMsICU1XG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDthbmQgJTEsICUwLCAlN1xuJiMzNDsJCQkJCQkJXAomIzQzOwkJCSYjMzQ7b3IgJTEsICUxLCAlM1xuJiMzNDsJCQkJCQkJXAomIzQzOwkJCSYjMzQ7c2MudyAlMSwgJTEsICUyXG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDtibmV6ICUxLCAwYlxuJiMzNDsJCQkJCQkJCVwKJiM0MzsJCQk6ICYjMzQ7PSZhbXA7ciYjMzQ7KHJldHgpLCAmIzM0Oz0mYW1wO3ImIzM0OyhyYyksICYjMzQ7JiM0MztBJiMzNDsoKnB0cjMyKSwgJiMzNDs9JmFtcDtyJiMzNDsobmV3X3ZhbF90eXBlKQkJXAomIzQzOwkJCTogJiMzNDtyJiMzNDsobWFzayksICYjMzQ7ciYjMzQ7KHNoaWZ0KSwgJiMzNDtyJiMzNDsodmFsX3RydW5jKSwgJiMzNDtyJiMzNDsofm1hc2spLAkJCVwKJiM0MzsJCQkgICYjMzQ7ciYjMzQ7KFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSkJCQkJCQlcCiYjNDM7CQkJOiAmIzM0O21lbW9yeSYjMzQ7KTsJCQkJCQkJCVwKJiM0MzsJCX0JCQkJCQkJCQkJXAomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIFBFUkNQVV9PUF84XzE2KG9wX25hbWUsIG9wLCBleHByLCBmaW5hbF9vcCkJCQlcCiYjNDM7CVBFUkNQVV84XzE2X09QKG9wX25hbWUsIG9wLCA4LCAuYiwgdTgsIGV4cHIsIGZpbmFsX29wKTsJCVwKJiM0MzsJUEVSQ1BVXzhfMTZfT1Aob3BfbmFtZSwgb3AsIDE2LCAuaCwgdTE2LCBleHByLCBmaW5hbF9vcCkKJiM0MzsKJiM0MztQRVJDUFVfT1BfOF8xNihhZGQsIGFkZCwgdmFsLCBhZGQpCiYjNDM7UEVSQ1BVX09QXzhfMTYoYW5kbm90LCBhbmQsIH4odmFsKSwgYW5kKQomIzQzO1BFUkNQVV9PUF84XzE2KG9yLCBvciwgdmFsLCBvcikKJiM0MzsKJiM0MzsjZGVmaW5lIFBFUkNQVV84XzE2X1JFVF9PUChuYW1lLCBhbW9faW5zbiwgc3osIHNmeCwgdmFsX3R5cGUsIG5ld192YWxfZXhwcikJCQlcCiYjNDM7c3RhdGljIGlubGluZSB2YWxfdHlwZSBfX3BlcmNwdV8jI25hbWUjI19yZXR1cm5fYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKQlcCiYjNDM7ewkJCQkJCQkJCQkJCVwKJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX1JJU0NWX0lTQV9aQUJIQSkgJmFtcDsmYW1wOwkJCQkJCVwKJiM0MzsJCXJpc2N2X2hhc19leHRlbnNpb25fdW5saWtlbHkoUklTQ1ZfSVNBX0VYVF9aQUJIQSkpIHsJCQkJXAomIzQzOwkJcmVnaXN0ZXIgdmFsX3R5cGUgcmV0OwkJCQkJCQkJXAomIzQzOwkJYXNtIHZvbGF0aWxlICgmIzM0O2FtbyYjMzQ7ICNhbW9faW5zbiAjc2Z4ICYjMzQ7ICVbcmV0XSwgJVt2YWxdLCAlW3B0cl0mIzM0OwkJCVwKJiM0MzsJCQk6IFtwdHJdICYjMzQ7JiM0MztBJiMzNDsoKih2YWxfdHlwZSAqKXB0ciksIFtyZXRdICYjMzQ7PXImIzM0OyhyZXQpCQkJCVwKJiM0MzsJCQk6IFt2YWxdICYjMzQ7ciYjMzQ7KCh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikgJmFtcDsgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSkJXAomIzQzOwkJCTogJiMzNDttZW1vcnkmIzM0Oyk7CQkJCQkJCQlcCiYjNDM7CQlyZXR1cm4gcmV0ICYjNDM7ICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikgJmFtcDsgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKTsJCVwKJiM0MzsJfSBlbHNlIHsJCQkJCQkJCQkJXAomIzQzOwkJdTMyICpwdHIzMiA9IFBFUkNQVV84XzE2X0dFVF9QVFIzMihwdHIpOwkJCQkJXAomIzQzOwkJY29uc3QgdW5zaWduZWQgbG9uZyBzaGlmdCA9IFBFUkNQVV84XzE2X0dFVF9TSElGVChwdHIpOwkJCQlcCiYjNDM7CQljb25zdCB1MzIgbWFzayA9IChQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikgJmx0OyZsdDsgc2hpZnQpOwkJCQlcCiYjNDM7CQljb25zdCB1MzIgaW52X21hc2sgPSB+bWFzazsJCQkJCQkJXAomIzQzOwkJY29uc3QgdmFsX3R5cGUgdmFsX3RydW5jID0gKHZhbF90eXBlKSgobmV3X3ZhbF9leHByKQkJCQlcCiYjNDM7CQkJCQkgICAmYW1wOyBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpOwkJCQlcCiYjNDM7CQl1MzIgb2xkLCBuZXcsIHRtcDsJCQkJCQkJCVwKJiM0MzsJCQkJCQkJCQkJCQlcCiYjNDM7CQlhc20gdm9sYXRpbGUgKAkJCQkJCQkJCVwKJiM0MzsJCQkmIzM0OzA6IGxyLncgJTAsICUzXG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDthbmQgJTEsICUwLCAlNFxuJiMzNDsJCQkJCQkJXAomIzQzOwkJCSYjMzQ7c3JsICUxLCAlMSwgJTVcbiYjMzQ7CQkJCQkJCVwKJiM0MzsJCQkmIzM0O2FkZCAlMSwgJTEsICU2XG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDthbmQgJTEsICUxLCAlN1xuJiMzNDsJCQkJCQkJXAomIzQzOwkJCSYjMzQ7c2xsICUxLCAlMSwgJTVcbiYjMzQ7CQkJCQkJCVwKJiM0MzsJCQkmIzM0O2FuZCAlMiwgJTAsICU4XG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDtvciAlMiwgJTIsICUxXG4mIzM0OwkJCQkJCQlcCiYjNDM7CQkJJiMzNDtzYy53ICUyLCAlMiwgJTNcbiYjMzQ7CQkJCQkJCVwKJiM0MzsJCQkmIzM0O2JuZXogJTIsIDBiXG4mIzM0OwkJCQkJCQkJXAomIzQzOwkJCTogJiMzNDs9JmFtcDtyJiMzNDsob2xkKSwgJiMzNDs9JmFtcDtyJiMzNDsodG1wKSwgJiMzNDs9JmFtcDtyJiMzNDsobmV3KSwgJiMzNDsmIzQzO0EmIzM0OygqcHRyMzIpCQkJXAomIzQzOwkJCTogJiMzNDtyJiMzNDsobWFzayksICYjMzQ7ciYjMzQ7KHNoaWZ0KSwgJiMzNDtyJiMzNDsodmFsX3RydW5jKSwgJiMzNDtyJiMzNDsoUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSwgXAomIzQzOwkJCSYjMzQ7ciYjMzQ7KGludl9tYXNrKQkJCQkJCQkJXAomIzQzOwkJCTogJiMzNDttZW1vcnkmIzM0Oyk7CQkJCQkJCQlcCiYjNDM7CQlyZXR1cm4gKHZhbF90eXBlKSh0bXAgJmd0OyZndDsgc2hpZnQpOwkJCQkJCVwKJiM0MzsJfQkJCQkJCQkJCQkJXAomIzQzO30KJiM0MzsKJiM0MztQRVJDUFVfOF8xNl9SRVRfT1AoYWRkLCBhZGQsIDgsIC5iLCB1OCwgdmFsKQomIzQzO1BFUkNQVV84XzE2X1JFVF9PUChhZGQsIGFkZCwgMTYsIC5oLCB1MTYsIHZhbCkKJiM0MzsKJiM0MzsjZGVmaW5lIF9wY3BfcHJvdGVjdChvcCwgcGNwLCAuLi4pCQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CQkJCQlcCiYjNDM7CW9wKHJhd19jcHVfcHRyKCZhbXA7KHBjcCkpLCBfX1ZBX0FSR1NfXyk7CQkJCVwKJiM0MzsJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwkJCQkJXAomIzQzO30pCiYjNDM7CiYjNDM7I2RlZmluZSBfcGNwX3Byb3RlY3RfcmV0dXJuKG9wLCBwY3AsIGFyZ3MuLi4pCQkJCVwKJiM0MzsoewkJCQkJCQkJCVwKJiM0MzsJdHlwZW9mKHBjcCkgX19yZXR2YWw7CQkJCQkJXAomIzQzOwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwkJCQkJXAomIzQzOwlfX3JldHZhbCA9ICh0eXBlb2YocGNwKSlvcChyYXdfY3B1X3B0cigmYW1wOyhwY3ApKSwgIyNhcmdzKTsJXAomIzQzOwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CQkJCQlcCiYjNDM7CV9fcmV0dmFsOwkJCQkJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMShwY3ApCQlfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfOCwgcGNwKQomIzQzOyNkZWZpbmUgdGhpc19jcHVfcmVhZF8yKHBjcCkJCV9wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfcmVhZF8xNiwgcGNwKQomIzQzOyNkZWZpbmUgdGhpc19jcHVfcmVhZF80KHBjcCkJCV9wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfcmVhZF8zMiwgcGNwKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3JlYWRfOChwY3ApCQlfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfNjQsIHBjcCkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzEocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV84LCBwY3AsICh1bnNpZ25lZCBsb25nKXZhbCkKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzIocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV8xNiwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpCiYjNDM7I2RlZmluZSB0aGlzX2NwdV93cml0ZV80KHBjcCwgdmFsKQlfcGNwX3Byb3RlY3QoX19wZXJjcHVfd3JpdGVfMzIsIHBjcCwgKHVuc2lnbmVkIGxvbmcpdmFsKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzgocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV82NCwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfMShwY3AsIHZhbCkJX3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV84LCBwY3AsIHZhbCkKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2FkZF8yKHBjcCwgdmFsKQlfcGNwX3Byb3RlY3QoX19wZXJjcHVfYWRkX2Ftb19jYXNlXzE2LCBwY3AsIHZhbCkKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2FkZF80KHBjcCwgdmFsKQlfcGNwX3Byb3RlY3QoX19wZXJjcHVfYWRkX2Ftb19jYXNlXzMyLCBwY3AsIHZhbCkKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUCiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfOChwY3AsIHZhbCkJX3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV82NCwgcGNwLCB2YWwpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzEocGNwLCB2YWwpCQlcCiYjNDM7X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzgsIHBjcCwgdmFsKQomIzQzOwomIzQzOyNkZWZpbmUgdGhpc19jcHVfYWRkX3JldHVybl8yKHBjcCwgdmFsKQkJXAomIzQzO19wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfYWRkX3JldHVybl9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpCiYjNDM7CiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzQocGNwLCB2YWwpCQlcCiYjNDM7X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzMyLCBwY3AsIHZhbCkKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHXzY0QklUCiYjNDM7I2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzgocGNwLCB2YWwpCQlcCiYjNDM7X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzY0LCBwY3AsIHZhbCkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2FuZF8xKHBjcCwgdmFsKQlfcGNwX3Byb3RlY3QoX19wZXJjcHVfYW5kbm90X2Ftb19jYXNlXzgsIHBjcCwgfih2YWwpKQomIzQzOyNkZWZpbmUgdGhpc19jcHVfYW5kXzIocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV9hbmRub3RfYW1vX2Nhc2VfMTYsIHBjcCwgfih2YWwpKQomIzQzOyNkZWZpbmUgdGhpc19jcHVfYW5kXzQocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV9hbmRub3RfYW1vX2Nhc2VfMzIsIHBjcCwgdmFsKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2FuZF84KHBjcCwgdmFsKQlfcGNwX3Byb3RlY3QoX19wZXJjcHVfYW5kbm90X2Ftb19jYXNlXzY0LCBwY3AsIHZhbCkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X29yXzEocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV84LCBwY3AsIHZhbCkKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X29yXzIocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpCiYjNDM7I2RlZmluZSB0aGlzX2NwdV9vcl80KHBjcCwgdmFsKQlfcGNwX3Byb3RlY3QoX19wZXJjcHVfb3JfYW1vX2Nhc2VfMzIsIHBjcCwgdmFsKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfNjRCSVQKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X29yXzgocGNwLCB2YWwpCV9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV82NCwgcGNwLCB2YWwpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSB0aGlzX2NwdV94Y2hnXzEocGNwLCB2YWwpCV9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbCkKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X3hjaGdfMihwY3AsIHZhbCkJX3BjcF9wcm90ZWN0X3JldHVybih4Y2hnX3JlbGF4ZWQsIHBjcCwgdmFsKQomIzQzOyNkZWZpbmUgdGhpc19jcHVfeGNoZ180KHBjcCwgdmFsKQlfcGNwX3Byb3RlY3RfcmV0dXJuKHhjaGdfcmVsYXhlZCwgcGNwLCB2YWwpCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR182NEJJVAomIzQzOyNkZWZpbmUgdGhpc19jcHVfeGNoZ184KHBjcCwgdmFsKQlfcGNwX3Byb3RlY3RfcmV0dXJuKHhjaGdfcmVsYXhlZCwgcGNwLCB2YWwpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzEocGNwLCBvLCBuKQlfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKQomIzQzOyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ18yKHBjcCwgbywgbikJX3BjcF9wcm90ZWN0X3JldHVybihjbXB4Y2hnX3JlbGF4ZWQsIHBjcCwgbywgbikKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfNChwY3AsIG8sIG4pCV9wY3BfcHJvdGVjdF9yZXR1cm4oY21weGNoZ19yZWxheGVkLCBwY3AsIG8sIG4pCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR182NEJJVAomIzQzOyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ184KHBjcCwgbywgbikJX3BjcF9wcm90ZWN0X3JldHVybihjbXB4Y2hnX3JlbGF4ZWQsIHBjcCwgbywgbikKJiM0MzsKJiM0MzsjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGc2NChwY3AsIG8sIG4pCXRoaXNfY3B1X2NtcHhjaGdfOChwY3AsIG8sIG4pCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmZGVmIHN5c3RlbV9oYXNfY21weGNoZzEyOAomIzQzOyNkZWZpbmUgdGhpc19jcHVfY21weGNoZzEyOChwY3AsIG8sIG4pCQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CXUxMjggcmV0X187CQkJCQkJCVwKJiM0MzsJdHlwZW9mKHBjcCkgKnB0cl9fOwkJCQkJCVwKJiM0MzsJCQkJCQkJCQlcCiYjNDM7CXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CQkJCQlcCiYjNDM7CXB0cl9fID0gcmF3X2NwdV9wdHIoJmFtcDsocGNwKSk7CQkJCQlcCiYjNDM7CWlmIChzeXN0ZW1faGFzX2NtcHhjaGcxMjgoKSkJCQkJCVwKJiM0MzsJCXJldF9fID0gY21weGNoZzEyOF9sb2NhbChwdHJfXywgKG8pLCAobikpOwkJXAomIzQzOwllbHNlCQkJCQkJCQlcCiYjNDM7CQlyZXRfXyA9IHRoaXNfY3B1X2dlbmVyaWNfY21weGNoZyhwY3AsIChvKSwgKG4pKTsJXAomIzQzOwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CQkJCQlcCiYjNDM7CXJldF9fOwkJCQkJCQkJXAomIzQzO30pCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2RlZmluZSBfX215X2NwdV9vZmZzZXQgKCgoc3RydWN0IHRocmVhZF9pbmZvICopY3VycmVudCktJmd0O3BjcHVfb2Zmc2V0KQomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthc20tZ2VuZXJpYy9wZXJjcHUuaCZndDsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19BU01fUEVSQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oCmluZGV4IDBlNzFlYjgyZjkyMGNhLi43MzNiNmNkMzA2ZTQwZiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oCkBAIC04OCw2ICYjNDM7ODgsMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fc3dpdGNoX3RvX2VudmNmZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiAJCQk6OiAmIzM0O3ImIzM0OyAobmV4dC0mZ3Q7dGhyZWFkLmVudmNmZykgOiAmIzM0O21lbW9yeSYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3N3aXRjaF90b19wY3B1X29mZnNldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfU01QCiYjNDM7CW5leHQtJmd0O3RocmVhZF9pbmZvLnBjcHVfb2Zmc2V0ID0gX19teV9jcHVfb2Zmc2V0OwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIGV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqLAogCQkJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKQEAgLTEyMiw2ICYjNDM7MTI5LDcgQEAgZG8gewkJCQkJCQlcCiAJaWYgKHN3aXRjaF90b19zaG91bGRfZmx1c2hfaWNhY2hlKF9fbmV4dCkpCVwKIAkJbG9jYWxfZmx1c2hfaWNhY2hlX2FsbCgpOwkJXAogCV9fc3dpdGNoX3RvX2VudmNmZyhfX25leHQpOwkJCVwKJiM0MzsJX19zd2l0Y2hfdG9fcGNwdV9vZmZzZXQoX19uZXh0KTsJCVwKIAkoKGxhc3QpID0gX19zd2l0Y2hfdG8oX19wcmV2LCBfX25leHQpKTsJCVwKIH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCA1NTAxOWZkZmE5ZWNhYS4uZjEwYmE2MmI2MTAxNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTUzLDYgJiM0Mzs1Myw3IEBACiBzdHJ1Y3QgdGhyZWFkX2luZm8gewogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwkJLyogbG93IGxldmVsIGZsYWdzICovCiAJaW50ICAgICAgICAgICAgICAgICAgICAgcHJlZW1wdF9jb3VudDsgIC8qIDA9Jmd0O3ByZWVtcHRpYmxlLCAmbHQ7MD0mZ3Q7QlVHICovCiYjNDM7CWludAkJCWNwdTsKIAkvKgogCSAqIFRoZXNlIHN0YWNrIHBvaW50ZXJzIGFyZSBvdmVyd3JpdHRlbiBvbiBldmVyeSBzeXN0ZW0gY2FsbCBvcgogCSAqIGV4Y2VwdGlvbi4gIFNQIGlzIGFsc28gc2F2ZWQgdG8gdGhlIHN0YWNrIGl0IGNhbiBiZSByZWNvdmVyZWQgd2hlbgpAQCAtNjAsOCAmIzQzOzYxLDggQEAgc3RydWN0IHRocmVhZF9pbmZvIHsKIAkgKi8KIAlsb25nCQkJa2VybmVsX3NwOwkvKiBLZXJuZWwgc3RhY2sgcG9pbnRlciAqLwogCWxvbmcJCQl1c2VyX3NwOwkvKiBVc2VyIHN0YWNrIHBvaW50ZXIgKi8KLQlpbnQJCQljcHU7CiAJdW5zaWduZWQgbG9uZwkJc3lzY2FsbF93b3JrOwkvKiBTWVNDQUxMX1dPUktfIGZsYWdzICovCiYjNDM7CXVuc2lnbmVkIGxvbmcJCXBjcHVfb2Zmc2V0OwogI2lmZGVmIENPTkZJR19TSEFET1dfQ0FMTF9TVEFDSwogCXZvaWQJCQkqc2NzX2Jhc2U7CiAJdm9pZAkJCSpzY3Nfc3A7CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBhNzVmMGNmZWExZTlmYS4uMjBkNDZjMjhmZGRlOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL2FzbS1vZmZzZXRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMzgsNiAmIzQzOzM4LDcgQEAgdm9pZCBhc21fb2Zmc2V0cyh2b2lkKQogCU9GRlNFVChUQVNLX1RIUkVBRF9TVU0sIHRhc2tfc3RydWN0LCB0aHJlYWQuc3VtKTsKIAogCU9GRlNFVChUQVNLX1RJX0NQVSwgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvLmNwdSk7CiYjNDM7CU9GRlNFVChUQVNLX1RJX1BDUFVfT0ZGU0VULCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8ucGNwdV9vZmZzZXQpOwogCU9GRlNFVChUQVNLX1RJX1BSRUVNUFRfQ09VTlQsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby5wcmVlbXB0X2NvdW50KTsKIAlPRkZTRVQoVEFTS19USV9LRVJORUxfU1AsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby5rZXJuZWxfc3ApOwogCU9GRlNFVChUQVNLX1RJX1VTRVJfU1AsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby51c2VyX3NwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuYwppbmRleCBmNmVmNTc5MzBiNTBhOC4uNzg3Njg1NGQxNjI3OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zbXBib290LmMKQEAgLTE5MSw2ICYjNDM7MTkxLDcgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpCiB7CiAJaW50IHJldDsKIAl0aWRsZS0mZ3Q7dGhyZWFkX2luZm8uY3B1ID0gY3B1OwomIzQzOwl0aWRsZS0mZ3Q7dGhyZWFkX2luZm8ucGNwdV9vZmZzZXQgPSBwZXJfY3B1X29mZnNldChjcHUpOwogCiAJcmV0ID0gc3RhcnRfc2Vjb25kYXJ5X2NwdShjcHUsIHRpZGxlKTsKIAlpZiAoIXJldCkgewpAQCAtMjA4LDYgJiM0MzsyMDksMTEgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpCiB9CiAjZW5kaWYKIAomIzQzO3ZvaWQgX19pbml0IHNtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCiYjNDM7ewomIzQzOwlfX215X2NwdV9vZmZzZXQgPSBwZXJfY3B1X29mZnNldChzbXBfcHJvY2Vzc29yX2lkKCkpOwomIzQzO30KJiM0MzsKIHZvaWQgX19pbml0IHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKQogewogfQpAQCAtMjMzLDYgJiM0MzsyMzksOCBAQCBhc21saW5rYWdlIF9fdmlzaWJsZSB2b2lkIHNtcF9jYWxsaW4odm9pZCkKIAltbWdyYWIobW0pOwogCWN1cnJlbnQtJmd0O2FjdGl2ZV9tbSA9IG1tOwogCiYjNDM7CV9fbXlfY3B1X29mZnNldCA9IHBlcl9jcHVfb2Zmc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfUEFSQUxMRUwKIAljcHVocF9hcF9zeW5jX2FsaXZlKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCmluZGV4IGMwM2MxZGUxNmI3OWFjLi5lYWI5M2Q1MjU4ZTllNCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCkBAIC0xMzk1LDE1ICYjNDM7MTM5NSw4IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCQkJaWYgKHJkICE9IHJzKQogCQkJCWVtaXRfbXYocmQsIHJzLCBjdHgpOwogI2lmZGVmIENPTkZJR19TTVAKLQkJCS8qIExvYWQgY3VycmVudCBDUFUgbnVtYmVyIGluIFQxICovCi0JCQllbWl0X2x3KFJWX1JFR19UMSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBjcHUpLAomIzQzOwkJCWVtaXRfbGQoUlZfUkVHX1QxLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHBjcHVfb2Zmc2V0KSwKIAkJCQlSVl9SRUdfVFAsIGN0eCk7Ci0JCQkvKiBMb2FkIGFkZHJlc3Mgb2YgX19wZXJfY3B1X29mZnNldCBhcnJheSBpbiBUMiAqLwotCQkJZW1pdF9hZGRyKFJWX1JFR19UMiwgKHU2NCkmYW1wO19fcGVyX2NwdV9vZmZzZXQsIGV4dHJhX3Bhc3MsIGN0eCk7Ci0JCQkvKiBHZXQgYWRkcmVzcyBvZiBfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gaW4gVDEgKi8KLQkJCWVtaXRfc2gzYWRkKFJWX1JFR19UMSwgUlZfUkVHX1QxLCBSVl9SRUdfVDIsIGN0eCk7Ci0JCQkvKiBMb2FkIF9fcGVyX2NwdV9vZmZzZXRbY3B1XSBpbiBUMSAqLwotCQkJZW1pdF9sZChSVl9SRUdfVDEsIDAsIFJWX1JFR19UMSwgY3R4KTsKIAkJCS8qIEFkZCB0aGUgb2Zmc2V0IHRvIFJkICovCiAJCQllbWl0X2FkZChyZCwgcmQsIFJWX1JFR19UMSwgY3R4KTsKICNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODI2CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNjIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJJU0MtViBBcmNoaXRlY3R1cmUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgdG91Y2hpbmcgb24gaG93IHBlci1DUFUgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgaW50ZXJlc3QgYmVjYXVzZSB0aGF0JiMzOTtzIG9mdGVuIGEgc291cmNlIG9mIHN1YnRsZSwgaGFyZC10by1maW5kIGJ1Z3MgYW5kIHJhY2UgY29uZGl0aW9ucy4gSSBzZWUgaXQmIzM5O3MgaW50cm9kdWNpbmcgdGhpcyBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZXJjcHUuaGAgZmlsZSwgb3B0aW1pemluZyB0aGUgcGVyLUNQVSBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduIHRoZXkmIzM5O3JlIHRyeWluZyB0byBpbXByb3ZlIHRoaW5ncywgYnV0IGl0IGFsc28gbWVhbnMgdGhlcmUmIzM5O3MgYSBoaWdoZXIgY2hhbmNlIG9mIGludHJvZHVjaW5nIGlzc3VlcyBkdXJpbmcgdGhlIG9wdGltaXphdGlvbi4KClRoZSBwYXRjaCBzZWVtcyB0byBiZSB1cGRhdGluZyBzZXZlcmFsIGluY2x1ZGUgZmlsZXMsIGxpa2UgYGFzbS5oYCwgYGlvLmhgLCBgc3dpdGNoX3RvLmhgLCBhbmQgYHRocmVhZF9pbmZvLmhgLCBhbG9uZyB3aXRoIGtlcm5lbCBjb2RlIGluIGBhc20tb2Zmc2V0cy5jYCBhbmQgYHNtcGJvb3QuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgcmV3b3JraW5nIHRoZSBvZmZzZXRzIHVzZWQgdG8gYWNjZXNzIHBlci1DUFUgZGF0YSwgcmVwbGFjaW5nIHNvbWUgY2FsY3VsYXRpb25zIHdpdGggYFRBU0tfVElfUENQVV9PRkZTRVQodHApYC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgY2hhbmdlcyBmb3IgSS9PIHBvcnQgYWNjZXNzIHdpdGggYFBDSV9JT19BRERSKGFkZHIpYCBhbmQgZ3VhcmRlZCBJL08gZnVuY3Rpb25zLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLCBvcHRpbWl6aW5nIGhvdyB0aGVzZSBwZXItQ1BVIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQgYW5kIHBvdGVudGlhbGx5IEkvTyBoYW5kbGluZyBhcyB3ZWxsLgoKVGhlIHF1ZXN0aW9uIHRoZW4gaXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhbHRlcmluZyBjb3JlIGFyY2hpdGVjdHVyZSBsb2dpYyByZWxhdGVkIHRvIHBlci1DUFUgb3BlcmF0aW9ucywgSS9PIGFjY2VzcywgYW5kIGV2ZW4gdGhlIEJQRiBKSVQgY29tcGlsZXIgaXMgZW5vdWdoIHRvIHdhcnJhbnQgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbi4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBhcmVhcyB0aGF0IGFyZSBrZXkgdG8gdGhlIHN5c3RlbSYjMzk7cyBwZXJmb3JtYW5jZSwgc3RhYmlsaXR5LCBhbmQgc2VjdXJpdHkuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIGNvZGUgcGF0aHMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZSB0aG91Z2guIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGVuYWJsZWQgdG8gcnVuIHRoaXMgY29kZSBhbmQgdmVyaWZ5IHRoaXMgY29kZSBjYW4gYmUgZXhlY3V0ZWQuIExvb2tpbmcgYXQgdGhlIGNvbmZpZ3MsIEkgc2VlIHRoYXQgdGhpcyBjb2RlIGlzIHVzaW5nIGBDT05GSUdfSEFTX0lPUE9SVGAsIGBDT05GSUdfUklTQ1ZfSVNBX1pBQkhBYCwgYENPTkZJR19TTVBgIGFuZCBgQ09ORklHXzY0QklUYC4KCk5vdywgZGlnZ2luZyBkZWVwZXIsIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoYXQgYGFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNgIGZpbGUuIEl0JiMzOTtzIHRoZSBCUEYgSklUIGZvciBSSVNDLVYgNjQtYml0LCBhbmQgaWYgdGhleSBhcmUgbW9kaWZ5aW5nIGl0LCB0aGVyZSYjMzk7cyB0aGUgcG90ZW50aWFsIGZvciBzb21lIGludGVyZXN0aW5nIHRoaW5ncyB0byB0dXJuIHVwLCB3aGljaCBjb3VsZCBhZmZlY3QgdGhlIHN5c3RlbSBwZXJmb3JtYW5jZSBvciBwb3NzaWJseSBldmVuIHNlY3VyaXR5LiBHaXZlbiB0aGF0LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgQlBGIEpJVCBjb2RlIGZvciBSSVNDLVYgYW5kIHBlci1DUFUgb3BlcmF0aW9ucy4gT2theSwgc28gSSBzZWUgaXQgbW9kaWZpZXMgYGJwZl9qaXRfZW1pdF9pbnNuYC4gVG8gYmUgY2VydGFpbiwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgZXhpc3RzIHdpdGhpbiB0aGUgZmlsZSB3aXRoIGEgc2ltcGxlIGBncmVwYCBjb21tYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzI9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzY4LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzY5OmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzcwLVx0XHQgICAgICBib29sIGV4dHJhX3Bhc3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyODMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExhdGVzdCBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgc29tZSBrZXkgbW9kaWZpY2F0aW9ucyBpbiB0aGlzIHBhdGNoLiBUaGUgYGJwZl9qaXRfZW1pdF9pbnNuYCBmdW5jdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcgZnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBvcHRpbWl6YXRpb24gcGVyc3BlY3RpdmUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhvc2UgY2hhbmdlcyB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYW5kIGltcGFjdCBvbiB0aGUgQlBGIEpJVCBjb21waWxlci4gQSBjbG9zZXIgbG9vayBhdCBob3cgaW5zdHJ1Y3Rpb24gZW1pc3Npb24gaXMgYmVpbmcgaGFuZGxlZCBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC4KClRoZW4gdGhlcmUmIzM5O3MgdGhlIGluY2x1c2lvbiBvZiBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZXJjcHUuaGAuIEltcGxlbWVudGluZyBgdGhpc19jcHVfYWRkXzFgLCBgdGhpc19jcHVfcmVhZF8xYCwgYW5kIHRoZSBsaWtlIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24uIFRoZXNlIGlubGluZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIGVmZmljaWVudCBwZXItQ1BVIGRhdGEgYWNjZXNzLCBhbmQgdGhlaXIgcHJlc2VuY2Ugc3VnZ2VzdHMgYSBkZWxpYmVyYXRlIGVmZm9ydCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBjb25zaXN0ZW5jeSB3aXRoaW4gdGhlIFJJU0MtViBrZXJuZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbnNpZGVyIHRoZSB1c2UgY2FzZSAtIGlzIGl0IGZvciBCUEYgZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlIGluaGVyZW50bHkgaW52b2x2ZXMgZGlmZmVyZW5jZXMgZnJvbSBvdGhlciBhcmNoaXRlY3R1cmVzLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgd2VsbCB0aGVzZSBmdW5jdGlvbnMgZml0IGluLCBjb21wYXJlZCB0byBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkgaW4gb3RoZXIgYXJjaGl0ZWN0dXJlcy4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgYENPTkZJR19SSVNDVl9JU0FfWkFCSEFgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSB0YXJnZXQgSVNBLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgcmVsYXRlcyB0byB0aGUgbmV3IGluc3RydWN0aW9ucywgb3IgYXQgbGVhc3QgaG93IHRoZSBwYXRjaCBpcyBpbnRlbmRlZCB0byB3b3JrLiBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGNvZGUgZGVhbHMgd2l0aCB0aGUgcG90ZW50aWFsIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyBJU0EgZXh0ZW5zaW9uLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBwYXJ0cyBvZiB0aGUgbmV3IGNvZGUgcGF0aHMgYXJlIG9ubHkgYWN0aXZlIGlmIHRoaXMgaXMgZW5hYmxlZCwgd2hpY2ggaW1wbGllcyBzb21lIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIFRoaXMgd2lsbCBjbGFyaWZ5IGhvdyB0aGlzIHBhdGNoIGludGVncmF0ZXMgd2l0aCB0aGUgd2lkZXIgUklTQy1WIGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUklTQ1ZfSVNBX1pBQkhBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZz02Nzc9Y29uZmlnIFRPT0xDSEFJTl9IQVNfWkFCSEFcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctNjgzLVxuYXJjaC9yaXNjdi9LY29uZmlnOjY4NDpjb25maWcgUklTQ1ZfSVNBX1pBQkhBXG5hcmNoL3Jpc2N2L0tjb25maWctNjg1LVx0Ym9vbCBcJiMzNDtaYWJoYSBleHRlbnNpb24gc3VwcG9ydCBmb3IgYXRvbWljIGJ5dGUvaGFsZndvcmQgb3BlcmF0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODM0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRXZhbHVhdGluZyBSSVNDLVYgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGl0IGxvb2tzIGxpa2UgYFJJU0NWX0lTQV9aQUJIQWAgaXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBsZWFuaW5nIHRvd2FyZHMgZW5hYmxpbmcgaXQ7IGl0JiMzOTtzIGxpa2VseSBhZGRpbmcgc29tZSBhcmNoaXRlY3R1cmFsIHN1cHBvcnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMsIGJ1dCB1c3VhbGx5LCB0aGVzZSBJU0EgZXh0ZW5zaW9ucyBhcmUgdGhlcmUgZm9yIGEgcmVhc29uIGFuZCBsaWtlbHkgcmVwcmVzZW50IGEgcGVyZm9ybWFuY2Ugb3IgZnVuY3Rpb25hbGl0eSBpbXByb3ZlbWVudC4gCgpBbmQgSSBzZWUgYENPTkZJR19IQVNfSU9QT1JUYCBsaXN0ZWQgYXMgd2VsbC4gSG1tLCB0aGF0IHN1Z2dlc3RzIHNvbWUga2luZCBvZiBJL08gcG9ydCBzdXBwb3J0IGlzIGJlaW5nIHVzZWQgc29tZXdoZXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgaXMgc29tZXRoaW5nIHdlIGNhbiwgYW5kIHNob3VsZCwgZW5hYmxlIGFzIHdlbGwuIEl0IGNvdWxkIGJlIGNydWNpYWwgZm9yIG91ciBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSEFTX0lPUE9SVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZz0zNzU9Y29uZmlnIEhBU19JT01FTVxuLS1cbmxpYi9LY29uZmlnLTM3OS1cbmxpYi9LY29uZmlnOjM4MDpjb25maWcgSEFTX0lPUE9SVFxubGliL0tjb25maWctMzgxLVx0Ym9vbFxubGliL0tjb25maWctMzgyLVxubGliL0tjb25maWc6MzgzOmNvbmZpZyBIQVNfSU9QT1JUX01BUFxubGliL0tjb25maWctMzg0LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYEhBU19JT1BPUlRgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBIQVNfSU9QT1JUYCBmbGFnLCBhbmQgaXQmIzM5O3MgZmxhZ2dlZCBhcyBhIGJvb2xlYW4gd2l0aG91dCBhIGRpcmVjdCBwcm9tcHQuIFRoYXQgbWVhbnMgaXQmIzM5O3MgcHJvYmFibHkgZ2V0dGluZyBzZXQgYnkgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIEkgZG9uJiMzOTt0IHJlYWxseSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0IG15c2VsZi4gQWN0dWFsbHksIHRoZSB3YXkgSSB1bmRlcnN0YW5kIGl0LCBgSEFTX0lPUE9SVGAgdXN1YWxseSB0aWVzIGluIHdpdGggc29tZXRoaW5nIGxpa2UgUENJIG9yIGEgc2ltaWxhciBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBzbyBpdCYjMzk7cyBsaWtlbHkgYmVpbmcgc2VsZWN0ZWQgYXMgYSBkZXBlbmRlbmN5LiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhlIGBhcmNoL3Jpc2N2L0tjb25maWdgIGZpbGUgdG8gY29uZmlybS4gTGV0IG1lIGdvIHRha2UgYSBsb29rIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgSEFTX0lPUE9SVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xMjgtXHRzZWxlY3QgSEFSRElSUVNfU1dfUkVTRU5EXG5hcmNoL3Jpc2N2L0tjb25maWc6MTI5Olx0c2VsZWN0IEhBU19JT1BPUlQgaWYgTU1VXG5hcmNoL3Jpc2N2L0tjb25maWctMTMwLVx0c2VsZWN0IEhBVkVfQUxJR05FRF9TVFJVQ1RfUEFHRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0NgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDEzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyB0aGUgQlBGIEpJVCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBKSVQgY29tcGlsYXRpb24gZm9yIFJJU0MtVi4gRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgaWYgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKE1NVSkgaXMgYWN0aXZlLCBiZWNhdXNlIHRoYXQmIzM5O3MgYSBrZXkgY29uZGl0aW9uIGhlcmUuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYENPTkZJR19SSVNDVl9JU0FfWkFCSEFgIGVuYWJsZWQg4oCTIHRoYXQmIzM5O3MgbGlrZWx5IGltcG9ydGFudC4gSG1tLCB3aGF0IGFib3V0IGBDT05GSUdfU01QYCBhbmQgYENPTkZJR182NEJJVGA/IFRoZXkgYXJlIHVzdWFsbHkgZW5hYmxlZCwgYW5kIEkmIzM5O2QgYmUgc3VycHJpc2VkIGlmIHRoZXkgd2VyZW4mIzM5O3QgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgaG9uaW5nIGluIG9uIGBicGZfaml0X2VtaXRfaW5zbmAsIHdoaWNoIGlzIGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYC4gSSBhbHJlYWR5IGtub3cgdGhhdCBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEkgY2FuIHByb2JhYmx5IGRpcmVjdCBteSBlZmZvcnRzIHRoZXJlLCBvciBwZXJoYXBzIEkgY291bGQgbG9vayBhdCBgYnBmX2ludF9qaXRfY29tcGlsZWAgd2hpY2ggbGlrZWx5IGNhbGxzIGBicGZfaml0X2VtaXRfaW5zbmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk4NgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipGaW5kaW5nIHRoZSBCUEYgSklUIEVudHJ5IFBvaW50IGluIFJJU0MtVioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSBKdXN0LUluLVRpbWUgKEpJVCkgY29tcGlsZXIgZ2V0cyBpdHMgaG9va3MgaW50byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gVGhpcyBsaWtlbHkgbWVhbnMgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29yZSBmdW5jdGlvbiBvciBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHRha2luZyBCUEYgYnl0ZWNvZGUgYW5kIHRyYW5zbGF0aW5nIGl0IGludG8gbmF0aXZlIFJJU0MtViBpbnN0cnVjdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIHR5cGljYWwgSklUIGludGVncmF0aW9uIHBvaW50cy4gVGhlcmUmIzM5O3MgcHJvYmFibHkgYSBkcml2ZXIgb3IgbW9kdWxlIGludm9sdmVkLCBhbmQgdGhhdCYjMzk7cyBsaWtlbHkgdGhlIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gc3lzdGVtIGNhbGwgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBob3cgZUJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkLCB2ZXJpZmllZCwgYW5kIGV2ZW50dWFsbHkgZXhlY3V0ZWQuIEkgc3VzcGVjdCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBtZW1vcnkgbWFwcGluZyBvciBjb2RlIGdlbmVyYXRpb24gYW5kIGV4ZWN1dGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZi4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHNwZWNpZmljIFJJU0MtVi1yZWxhdGVkIGltcGxlbWVudGF0aW9ucyB3aXRoaW4gdGhhdCBjb2RlIHRvbywgaW4gY2FzZSB0aGVyZSBhcmUgdW5pcXVlIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIE15IGdvYWwgaXMgdG8gZmluZCB0aGUgZnVuY3Rpb24sIGFuZCBhbHNvIGdldCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdXJyb3VuZGluZyBjb250cm9sIGZsb3csIHdoaWNoIHdpbGwgaW52b2x2ZSBzb21lIHNlcmlvdXMgY29kZSBkaXZpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmXy4qX2NvbXBpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMDIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogTG9jYXRpbmcgdGhlIEpJVCBDb21waWxhdGlvbiBGdW5jdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwLCBJIHNob3VsZCBwcm9iYWJseSBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciB0aGUgYGJwZl9qaXRfY29tcGlsZWAgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCwgd2l0aGluIHRoZSBmaWxlLiBUaGlzIGlzIGEgY29tbW9uIHN0YXJ0aW5nIHBvaW50IHdoZW4gaW52ZXN0aWdhdGluZyBCUEYgSklUIGNvbXBpbGF0aW9uIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHByb2Nlc3MuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmFzZSB0byBtb3ZlIGZvcndhcmQgZnJvbSBhbmQgZ2l2ZSBtZSBhbiBpbW1lZGlhdGUgc2Vuc2Ugb2YgdGhlIGVudmlyb25tZW50IEkmIzM5O20gbG9va2luZyBhdC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgYmUgYSBzdHJhaWdodGZvcndhcmQgZmlyc3Qgc3RlcCBhbmQgbm90IGEgd2lsZCBnb29zZSBjaGFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMzMj1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjgtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNjk6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNzAtXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE4MTEtXHRcdG1hcmtfY2FsbChjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxODEyOlx0XHRyZXQgPSBicGZfaml0X2dldF9mdW5jX2FkZHIoY3R4LVx1MDAzZXByb2csIGluc24sIGV4dHJhX3Bhc3MsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE4MTMtXHRcdFx0XHRcdCAgICBcdTAwMjZhZGRyLCBcdTAwMjZmaXhlZF9hZGRyKTtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE4MjAtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjE4MjE6XHRcdFx0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LVx1MDAzZXByb2csIGluc24pO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xODIyLVx0XHRcdGlmICghZm0pXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTk0LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxOTk1OnZvaWQgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgYm9vbCBpc19zdWJwcm9nKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTk2LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwOTItXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIwOTM6dm9pZCBicGZfaml0X2J1aWxkX2VwaWxvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDk0LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwOTctXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIwOTg6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjA5OS17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTAyLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTAzOmJvb2wgYnBmX2ppdF9zdXBwb3J0c19wdHJfeGNoZyh2b2lkKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTA0LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMDctXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxMDg6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hKHZvaWQpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMDkte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjExMi1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjExMzpib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMTQte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzMS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjEzMjpib29sIGJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24odm9pZClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzMy17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTM2LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoyMTM3OmJvb2wgYnBmX2ppdF9pbmxpbmVzX2hlbHBlcl9jYWxsKHMzMiBpbW0pXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMzgte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE0OC1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE0OTpib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjE1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgQlBGIEpJVCBDb21waWxhdGlvbiBQYXRoKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBtYXAgaW1tZWRpYXRlbHkgaG9tZXMgaW4gb24gYGJwZl9qaXRfZW1pdF9pbnNuYCBhcyB0aGUgbGlrZWx5IGNvcmUgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgd29ya2hvcnNlIGluIHRoZXNlIEJQRiBKSVQgaW1wbGVtZW50YXRpb25zIOKAkyB0aGUgb25lIHdoZXJlIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYW5kIGVtaXNzaW9uIGhhcHBlbnMuCgpCdXQgaG9sZCBvbiwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGluIHRoYXQsIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gaW4gdGhlIHJpZ2h0IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb250ZXh0LiBJIGhhdmUgYSBodW5jaCBpdCBtaWdodCBiZSBuZXN0bGVkIGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuY2AuIEkmIzM5O2xsIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhlIHByaW1hcnkgY29tcGlsYXRpb24gZnVuY3Rpb24sIHdoaWNoIEkgc3VzcGVjdCBpcyBgYnBmX2ppdF9jb21waWxlYCwgaXMgYWN0dWFsbHkgdGhlcmUsIG9yIGlmIHRoaXMgaXMgYW4gYWJzdHJhY3Rpb24gb3IgYW4gaW5kaXJlY3Rpb24gdmlhIGEgZGlmZmVyZW50IGZpbGUgb3IgaW5jbHVkZSBzdGF0ZW1lbnQuIEtub3dpbmcgdGhhdCBpbml0aWFsIGNhbGwgaXMgY3JpdGljYWwgdG8gdHJhY2luZyB0aGUgd2hvbGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0zOT1ib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTQzLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6NDQ6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29yZS5jLTQ1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNTMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJJU0MtViBCUEYgSklUIE9wdGltaXphdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhlIFJJU0MtViBrZXJuZWwgY29kZSwgdHJ5aW5nIHRvIGlkZW50aWZ5IHByaW1lIGFyZWFzIGZvciBmdXp6aW5nIHJlbGF0ZWQgdG8gcmVjZW50IGNoYW5nZXMuIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG15IGVmZm9ydHMgZWZmZWN0aXZlbHksIHRhcmdldGluZyBuZXcgY29kZSBvciBzaWduaWZpY2FudGx5IG1vZGlmaWVkIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgaHVuY2ggd2FzIGNvcnJlY3Q6IHRoZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb24sIGxvY2F0ZWQgd2l0aGluIGBicGZfaml0X2NvcmUuY2AsIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBvciBwZXJoYXBzIGV2ZW4gYGJwZl9qaXRfZW1pdF9pbnNuYCBkaXJlY3RseSwgc2luY2UgaXQgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIGNvcmUgY2hhbmdlcyBhcmUgbWFkZS4KCkkgdGhlbiBzdGFydGVkIGV4cGxvcmluZyB3aGVyZSB0aGVzZSBKSVQgaW5zdHJ1Y3Rpb25zIGFyZSB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBJIHRvb2sgYSBsb29rIGF0IGBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oYCBiZWNhdXNlIGl0IHNlZW1lZCByZWxldmFudCB0byB0aGUgcGVyLUNQVSBvcHRpbWl6YXRpb25zIEkgc3VzcGVjdCBhcmUgaGFwcGVuaW5nIGluIHRoZSBKSVQuIFN1cmUgZW5vdWdoLCB0aGlzIGZpbGUgaW50cm9kdWNlcyBhIHNsZXcgb2YgaW5saW5lIGZ1bmN0aW9ucyBsaWtlIGBfX3BlcmNwdV9hZGRfYW1vX2Nhc2VfOGAgYW5kIGB0aGlzX2NwdV9hZGRfMWAsIGFsbCBkZXBlbmRlbnQgb24gYENPTkZJR19SSVNDVl9JU0FfWkFCSEFgLiBXYWl0IGEgbWludXRlLCBgdGhpc19jcHVfYWRkXzFgIGlzIGEgbWFjcm8uIFNpbmNlIGl0JiMzOTtzIGEgbWFjcm8gSSYjMzk7bSBsZXNzIGludGVyZXN0ZWQsIGJ1dCB0aGUgcGVyLUNQVSBjb2RlIGlzIGNsZWFybHkgdGhlIHBvaW50IG9mIGludGVyZXN0LiBUaGUgdXNlIG9mIHBlci1DUFUgdmFyaWFibGVzIGlzIGxpa2VseSB3aWRlc3ByZWFkLCB3aGljaCBwcmVzZW50cyBhIHNpZ25pZmljYW50IGF0dGFjayBzdXJmYWNlLgoKSSBhbHNvIGNoZWNrZWQgb3RoZXIgQyBmaWxlcyB0aGF0IHdlcmUgbW9kaWZpZWQuIGBhcmNoL3Jpc2N2L2tlcm5lbC9zbXBib290LmNgIHNob3dlZCBjaGFuZ2VzIHRvIGBfX2NwdV91cGAsIGBzbXBfcHJlcGFyZV9ib290X2NwdWAsIGFuZCBgc21wX2NhbGxpbmAgYnV0IHRob3NlIGFyZSBtb3JlIGJvb3QtcmVsYXRlZCwgc28gdGhleSYjMzk7cmUgbGVzcyBjb21wZWxsaW5nIGZvciBmb2N1c2VkIGZ1enppbmcuIFNpbWlsYXJseSwgYGFyY2gvcmlzY3Yva2VybmVsL2FzbS1vZmZzZXRzLmNgIHRvdWNoZXMgYGFzbV9vZmZzZXRzYCBidXQgdGhpcyBkb2VzbiYjMzk7dCBzZWVtIGRpcmVjdGx5IHJlbGV2YW50IHRvIG15IGdvYWwuCgpOb3csIHpvb21pbmcgYmFjayBpbiwgdGhlIGtleSBmdW5jdGlvbmFsIGNoYW5nZSBzZWVtcyB0byBiZSBjZW50ZXJlZCBhcm91bmQgaG93IHRoZSBCUEYgSklUIGhhbmRsZXMgcGVyLUNQVSBpbnN0cnVjdGlvbnMuIFNwZWNpZmljYWxseSwgdGhpcyBibG9jayBvZiBjb2RlOgpgYGBjCiNpZmRlZiBDT05GSUdfU01QCi0JCQkvKiBMb2FkIGN1cnJlbnQgQ1BVIG51bWJlciBpbiBUMSAqLwotCQkJZW1pdF9sdyhSVl9SRUdfVDEsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgY3B1KSwKJiM0MzsJCQllbWl0X2xkKFJWX1JFR19UMSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBwY3B1X29mZnNldCksCiAJCQkJUlZfUkVHX1RQLCBjdHgpOwotCQkJLyogTG9hZCBhZGRyZXNzIG9mIF9fcGVyX2NwdV9vZmZzZXQgYXJyYXkgaW4gVDIgKi8KLQkJCWVtaXRfYWRkcihSVl9SRUdfVDIsICh1NjQpJmFtcDtfX3Blcl9jcHVfb2Zmc2V0LCBleHRyYV9wYXNzLCBjdHgpOwotCQkJLyogR2V0IGFkZHJlc3Mgb2YgX19wZXJfY3B1X29mZnNldFtjcHVdIGluIFQxICovCi0JCQllbWl0X3NoM2FkZChSVl9SRUdfVDEsIFJWX1JFR19UMSwgUlZfUkVHX1QyLCBjdHgpOwotCQkJLyogTG9hZCBfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gaW4gVDEgKi8KLQkJCWVtaXRfbGQoUlZfUkVHX1QxLCAwLCBSVl9SRUdfVDEsIGN0eCk7CiAJCQkvKiBBZGQgdGhlIG9mZnNldCB0byBSZCAqLwogCQkJZW1pdF9hZGQocmQsIHJkLCBSVl9SRUdfVDEsIGN0eCk7CiAjZW5kaWYKYGBgClRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIGZvciBwZXItQ1BVIHZhcmlhYmxlcyBpbiB0aGUgQlBGIEpJVCwgcmVwbGFjaW5nIGEgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zIHdpdGggYSBwb3RlbnRpYWxseSBtb3JlIGVmZmljaWVudCBvbmUuIERlZmluaXRlbHkgcHJvbWlzaW5nISBUaGlzIGhpZ2hsaWdodHMgdGhlIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJwZl9qaXRfZW1pdF9pbnNuYCBmdW5jdGlvbnMgZm9yIG15IGZ1enppbmcgY2FtcGFpZ24uCgpGaW5hbGx5LCBJIGNoZWNrZWQgYENPTkZJR19SSVNDVl9JU0FfWkFCSEFgIHRvIHNlZSBpZiBpdCYjMzk7cyB0aGUgb25seSBjb25maWcsIGFuZCB0aGVuIGNoZWNrZWQgYENPTkZJR19CUEZfSklUYC4gVGhlIEJQRiBKSVQgbmVlZHMgdG8gYmUgZW5hYmxlZCwgYnV0IHRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZGVmYXVsdC4gSXQmIzM5O3MgdGltZSB0byBzdGFydCBjcmFmdGluZyBzb21lIGZ1enogdGFyZ2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9KSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cdGJvb2wgXCYjMzQ7UGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxua2VybmVsL2JwZi9LY29uZmlnLTcwLVx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk0MwoJCQkJCQkJb3V0cHV0OiAxNDMKCQkJCQkJCXRob3VnaHRzOiA0NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEZ1enppbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgd2UgbmVlZCB0byBlbmFibGUgYFJJU0NWX0lTQV9aQUJIQWAgYW5kIGBCUEZfSklUYC4gSG9sZCBvbiwgYEhBU19JT1BPUlRgIGlzbiYjMzk7dCBzb21ldGhpbmcgd2UgZGlyZWN0bHkgZW5hYmxlLCBzbyB3ZSBjYW4gaWdub3JlIHRoYXQuIEkgcXVpY2tseSBjaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlncyBidXQgYENPTkZJR19TTVBgIGFuZCBgQ09ORklHXzY0QklUYCBhcmUgYWxyZWFkeSBnb29kIHRvIGdvLgoKTm93LCBsZXQmIzM5O3MgcmV2aXNpdCB0aGUgY29yZSByZXF1aXJlbWVudHM6IGBXb3J0aEZ1enppbmc9dHJ1ZWAsIHRoZSBgRm9jdXNTeW1ib2xzYCAoYGJwZl9qaXRfZW1pdF9pbnNuYCwgYGJwZl9pbnRfaml0X2NvbXBpbGVgKSwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgKGBSSVNDVl9JU0FfWkFCSEFgLCBgQlBGX0pJVGApLgoKYGJwZl9qaXRfZW1pdF9pbnNuYCBsb29rcyBsaWtlIGEgc29saWQgZm9jdXMgc3ltYm9sLiBJIHF1aWNrbHkgc2NhbiB0aGUgcGF0Y2ggdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQuIEl0IHRvdWNoZXMgYGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmhgIGFuZCBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaGAuIFRoZXNlIGFyZSBoZWFkZXIgZmlsZXMgd2l0aCBpbmxpbmUgZnVuY3Rpb25zLiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBgYXJjaC9yaXNjdi9rZXJuZWwvc21wYm9vdC5jYCwgd2hpY2ggaGFzIGJvb3QvaG90cGx1ZyBmdW5jdGlvbnMgKGBfX2NwdV91cGAsIGBzbXBfcHJlcGFyZV9ib290X2NwdWAsIGBzbXBfY2FsbGluYCkuIEJ1dCBgYnBmX2ppdF9lbWl0X2luc25gIHN0aWxsIHNlZW1zIGxpa2UgdGhlIG1vc3QgcmVsZXZhbnQuCgpJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhhdCBgUklTQ1ZfSVNBX1pBQkhBYCBpcyB0aGUgY29ycmVjdCBjb25maWcsIGFuZCB5ZXAsIGBjb25maWcgUklTQ1ZfSVNBX1pBQkhBYCBjb25maXJtcyBpdC4KClRoZW4sIEkgbWFrZSBzdXJlIHRoZSBmdW5jdGlvbiBuYW1lcyBhcmUgY29ycmVjdDogYGJwZl9qaXRfZW1pdF9pbnNuYCBpcyBjb25maXJtZWQgYnkgYGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGV4dHJhX3Bhc3MpYCwgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYCBpcyBjb25maXJtZWQgYnkgYHN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpYC4KCkFscmlnaHQsIHdpdGggdGhhdCBjb25maXJtZWQsIEkmIzM5O20gcmVhZHkgdG8gc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+dGhlIGZvbGxvd2luZyBjb25maWdzIGRvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWU6IFJJU0NWX0lTQV9aQUJIQTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSSVNDVl9JU0FfWkFCSEEmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUklTQy1WIGFyY2hpdGVjdHVyZSBjb2RlIHRvIG9wdGltaXplIHBlci1DUFUgdmFyaWFibGUgYWNjZXNzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHBlcmNwdS5oIGhlYWRlciB3aXRoIG9wdGltaXplZCBpbmxpbmUgb3BlcmF0aW9ucywgdXBkYXRlcyBjb250ZXh0IHN3aXRjaCBsb2dpYywgYW5kIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIHVzZSB0aGUgbmV3IHBlci1DUFUgb2Zmc2V0LiBUaGUgQlBGIEpJVCBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIG1ha2luZyB0aGVtIGdvb2QgdGFyZ2V0cyBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBSSVNDVl9JU0FfWkFCSEEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDU2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIE1pc3NpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGEgYml0IHB1enpsZWQuIEkgaW5pdGlhbGx5IHRob3VnaHQgYFJJU0NWX0lTQV9aQUJIQWAgd2FzbiYjMzk7dCBwYXJ0IG9mIHRoZSBrZXJuZWwgdHJlZSwgYW5kIHRoYXQmIzM5O3Mgd2hhdCBgc2V0LXJlc3VsdHNgIHNlZW1lZCB0byBpbmRpY2F0ZS4gQnV0IGEgcXVpY2sgYGdyZXBgIHNlYXJjaCBicm91Z2h0IHVwIGEgbWF0Y2ggaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2AuIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0IGBncmVwYCBvdXRwdXQ7IG1ha2Ugc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBzb21ldGhpbmcuIFllcCwgdGhlcmUgaXQgaXM6IGBhcmNoL3Jpc2N2L0tjb25maWc6Njg0OmNvbmZpZyBSSVNDVl9JU0FfWkFCSEFgLiBOb3csIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2h5IHRoZSBwcmV2aW91cyBjb21tYW5kIHJlcG9ydGVkIGl0IGFzIG5vbi1leGlzdGVudC4KCkNvdWxkIGl0IGJlIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGludHJvZHVjZWQgYnkgYSBwYXRjaCB0aGF0IGhhcyBub3QgeWV0IGJlZW4gYXBwbGllZD8gTm8sIHRoZSBwcm9tcHQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCB0aGUgY2hhbmdlcyBhcmUgYWxyZWFkeSBhcHBsaWVkLiBUaGVyZWZvcmUsIHRoZXkgc2hvdWxkIGJlIGF2YWlsYWJsZSBpbiB0aGUgSEVBRCBjb21taXQuIFNvLCBsb2dpY2FsbHksIHNpbmNlIGl0JiMzOTtzIGluIGBLY29uZmlnYCwgaXQgKnNob3VsZCogZXhpc3QuIEkgbmVlZCB0byBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IG9mIGEgY29uZmlndXJhdGlvbiBlcnJvci4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBwcmVzZW50IGluIGBhcmNoL3Jpc2N2L0tjb25maWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUklTQ1ZfSVNBX1pBQkhBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvS2NvbmZpZz02Nzc9Y29uZmlnIFRPT0xDSEFJTl9IQVNfWkFCSEFcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctNjgzLVxuYXJjaC9yaXNjdi9LY29uZmlnOjY4NDpjb25maWcgUklTQ1ZfSVNBX1pBQkhBXG5hcmNoL3Jpc2N2L0tjb25maWctNjg1LVx0Ym9vbCBcJiMzNDtaYWJoYSBleHRlbnNpb24gc3VwcG9ydCBmb3IgYXRvbWljIGJ5dGUvaGFsZndvcmQgb3BlcmF0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU5MQoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gSXNzdWUqKgoKT2theSwgc28gYHNldC1yZXN1bHRzYCBpcyBmYWlsaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IG11c3QgYmUgY2hlY2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMmIzM5OyBleGlzdGVuY2Ugd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBoaWVyYXJjaHksIHBvc3NpYmx5IGRpcmVjdGx5IHBhcnNpbmcgYEtjb25maWdgIGZpbGVzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGVycm9yIG1lc3NhZ2UuIEFoLCBoZXJlIGl0IGlzOiAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBSSVNDVl9JU0FfWkFCSEEuJiMzNDsKCkhtbSwgaXMgdGhpcyBiZWNhdXNlIGBSSVNDVl9JU0FfWkFCSEFgIGlzIGRlZmluZWQgdW5kZXIgYGFyY2gvcmlzY3YvS2NvbmZpZ2AsIGJ1dCB0aGUgdG9vbCBpcyBhc3N1bWluZyBhIGRpZmZlcmVudCBkZWZhdWx0IGFyY2hpdGVjdHVyZT8gTW9zdCBsaWtlbHksIHRoZSB0b29sIGlzIGVpdGhlciBjaGVja2luZyB0aGUgZGVmYXVsdCBhcmNoaXRlY3R1cmUmIzM5O3MgS2NvbmZpZyBmaWxlcywgc3VjaCBhcyB4ODZfNjQsIHdoaWNoIGlzIGEgY29tbW9uIGRlZmF1bHQsIG9yLCB0aGVyZSBpcyBhbiBhY3R1YWwgYnVnLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBlaXRoZXIgcmVtb3ZlIGBSSVNDVl9JU0FfWkFCSEFgIGVudGlyZWx5IGZyb20gdGhlIGlucHV0IG9yIGlnbm9yZSB0aGUgZXJyb3IgaWYgdGhhdCYjMzk7cyBhbiBvcHRpb24uCgpXYWl0IGEgbWludXRlLCBgc2V0LXJlc3VsdHNgIGRpZCBhY3R1YWxseSBmYWlsLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNhbGwgaXQgYWdhaW4sIHRoaXMgdGltZSB3aXRob3V0IGBSSVNDVl9JU0FfWkFCSEFgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUklTQy1WIGFyY2hpdGVjdHVyZSBjb2RlIHRvIG9wdGltaXplIHBlci1DUFUgdmFyaWFibGUgYWNjZXNzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHBlcmNwdS5oIGhlYWRlciB3aXRoIG9wdGltaXplZCBpbmxpbmUgb3BlcmF0aW9ucywgdXBkYXRlcyBjb250ZXh0IHN3aXRjaCBsb2dpYywgYW5kIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIHVzZSB0aGUgbmV3IHBlci1DUFUgb2Zmc2V0LiBUaGUgQlBGIEpJVCBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIG1ha2luZyB0aGVtIGdvb2QgdGFyZ2V0cyBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfZW1pdF9pbnNuJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUklTQy1WIGFyY2hpdGVjdHVyZSBjb2RlIHRvIG9wdGltaXplIHBlci1DUFUgdmFyaWFibGUgYWNjZXNzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHBlcmNwdS5oIGhlYWRlciB3aXRoIG9wdGltaXplZCBpbmxpbmUgb3BlcmF0aW9ucywgdXBkYXRlcyBjb250ZXh0IHN3aXRjaCBsb2dpYywgYW5kIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIHVzZSB0aGUgbmV3IHBlci1DUFUgb2Zmc2V0LiBUaGUgQlBGIEpJVCBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIG1ha2luZyB0aGVtIGdvb2QgdGFyZ2V0cyBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjAzLjQ4NjQ3ODIwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDE5MjE1NTE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSSVNDLVYgYXJjaGl0ZWN0dXJlIGNvZGUgdG8gb3B0aW1pemUgcGVyLUNQVSB2YXJpYWJsZSBhY2Nlc3MuIEl0IGludHJvZHVjZXMgYSBuZXcgcGVyY3B1LmggaGVhZGVyIHdpdGggb3B0aW1pemVkIGlubGluZSBvcGVyYXRpb25zLCB1cGRhdGVzIGNvbnRleHQgc3dpdGNoIGxvZ2ljLCBhbmQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gdXNlIHRoZSBuZXcgcGVyLUNQVSBvZmZzZXQuIFRoZSBCUEYgSklUIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgbWFraW5nIHRoZW0gZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTozOTowMy40ODY0OTAyMTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMjc0NzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0ZTMxMzA3ZDk3ZGQyNjJmYWY0NDEyNjZlZmJjM2VmYjAxOThlMDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAwOTozOTowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaFxcbmluZGV4IGU5ZThiYTgzZTYzMmY5Li4xMzdhNDk0ODgzMjVlNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hc20uaFxcbkBAIC05MSwxMSArOTEsNyBAQFxcbiBcXG4gI2lmZGVmIENPTkZJR19TTVBcXG4gLm1hY3JvIGFzbV9wZXJfY3B1IGRzdCBzeW0gdG1wXFxuLVxcdGx3ICAgIFxcXFx0bXAsIFRBU0tfVElfQ1BVX05VTSh0cClcXG4tXFx0c2xsaSAgXFxcXHRtcCwgXFxcXHRtcCwgUklTQ1ZfTEdQVFJcXG4tXFx0bGEgICAgXFxcXGRzdCwgX19wZXJfY3B1X29mZnNldFxcbi1cXHRhZGQgICBcXFxcZHN0LCBcXFxcZHN0LCBcXFxcdG1wXFxuLVxcdFJFR19MIFxcXFx0bXAsIDAoXFxcXGRzdClcXG4rXFx0UkVHX0wgXFxcXHRtcCwgVEFTS19USV9QQ1BVX09GRlNFVCh0cClcXG4gXFx0bGEgICAgXFxcXGRzdCwgXFxcXHN5bVxcbiBcXHRhZGQgICBcXFxcZHN0LCBcXFxcZHN0LCBcXFxcdG1wXFxuIC5lbmRtXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW8uaFxcbmluZGV4IDA5YmI1ZjU3YTlkMzQ2Li42ZjVkNzAzMTNjODNlZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmhcXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmhcXG5AQCAtNTYsNiArNTYsOCBAQFxcbiAjZGVmaW5lIF9faW9fcGJ3KClcXHRSSVNDVl9GRU5DRShpb3csIG8pXFxuICNkZWZpbmUgX19pb19wYXcoKVxcdFJJU0NWX0ZFTkNFKG8sIGlvKVxcbiBcXG4rI2RlZmluZSBQQ0lfSU9fQUREUihhZGRyKVxcdCgodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKVBDSV9JT0JBU0UgKyAoYWRkcikpKVxcbitcXG4gLypcXG4gICogQWNjZXNzZXMgZnJvbSBhIHNpbmdsZSBoYXJ0IHRvIGEgc2luZ2xlIEkvTyBhZGRyZXNzIG11c3QgYmUgb3JkZXJlZC4gIFRoaXNcXG4gICogYWxsb3dzIHVzIHRvIHVzZSB0aGUgcmF3IHJlYWQgbWFjcm9zLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBmZW5jZSBiZWZvcmUgYW5kXFxuQEAgLTEwMiwxMiArMTA0LDE0IEBAIF9faW9fcmVhZHNfaW5zKHJlYWRzLCB1MzIsIGwsIF9faW9fYnIoKSwgX19pb19hcihhZGRyKSlcXG4gI2RlZmluZSByZWFkc3coYWRkciwgYnVmZmVyLCBjb3VudCkgX19yZWFkc3coYWRkciwgYnVmZmVyLCBjb3VudClcXG4gI2RlZmluZSByZWFkc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19yZWFkc2woYWRkciwgYnVmZmVyLCBjb3VudClcXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFTX0lPUE9SVFxcbiBfX2lvX3JlYWRzX2lucyhpbnMsICB1OCwgYiwgX19pb19wYnIoKSwgX19pb19wYXIoYWRkcikpXFxuIF9faW9fcmVhZHNfaW5zKGlucywgdTE2LCB3LCBfX2lvX3BicigpLCBfX2lvX3BhcihhZGRyKSlcXG4gX19pb19yZWFkc19pbnMoaW5zLCB1MzIsIGwsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKVxcbi0jZGVmaW5lIGluc2IoYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNiKFBDSV9JT0JBU0UgKyAoYWRkciksIGJ1ZmZlciwgY291bnQpXFxuLSNkZWZpbmUgaW5zdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3coUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcXG4tI2RlZmluZSBpbnNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zbChQQ0lfSU9CQVNFICsgKGFkZHIpLCBidWZmZXIsIGNvdW50KVxcbisjZGVmaW5lIGluc2IoYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNiKFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxcbisjZGVmaW5lIGluc3coYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnN3KFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxcbisjZGVmaW5lIGluc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNsKFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxcbisjZW5kaWZcXG4gXFxuIF9faW9fd3JpdGVzX291dHMod3JpdGVzLCAgdTgsIGIsIF9faW9fYncoKSwgX19pb19hdygpKVxcbiBfX2lvX3dyaXRlc19vdXRzKHdyaXRlcywgdTE2LCB3LCBfX2lvX2J3KCksIF9faW9fYXcoKSlcXG5AQCAtMTE2LDI1ICsxMjAsMzEgQEAgX19pb193cml0ZXNfb3V0cyh3cml0ZXMsIHUzMiwgbCwgX19pb19idygpLCBfX2lvX2F3KCkpXFxuICNkZWZpbmUgd3JpdGVzdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX3dyaXRlc3coYWRkciwgYnVmZmVyLCBjb3VudClcXG4gI2RlZmluZSB3cml0ZXNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fd3JpdGVzbChhZGRyLCBidWZmZXIsIGNvdW50KVxcbiBcXG4rI2lmZGVmIENPTkZJR19IQVNfSU9QT1JUXFxuIF9faW9fd3JpdGVzX291dHMob3V0cywgIHU4LCBiLCBfX2lvX3BidygpLCBfX2lvX3BhdygpKVxcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHUxNiwgdywgX19pb19wYncoKSwgX19pb19wYXcoKSlcXG4gX19pb193cml0ZXNfb3V0cyhvdXRzLCB1MzIsIGwsIF9faW9fcGJ3KCksIF9faW9fcGF3KCkpXFxuLSNkZWZpbmUgb3V0c2IoYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzYihQQ0lfSU9CQVNFICsgKGFkZHIpLCBidWZmZXIsIGNvdW50KVxcbi0jZGVmaW5lIG91dHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3coUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcXG4tI2RlZmluZSBvdXRzbChhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHNsKFBDSV9JT0JBU0UgKyAoYWRkciksIGJ1ZmZlciwgY291bnQpXFxuKyNkZWZpbmUgb3V0c2IoYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzYihQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcXG4rI2RlZmluZSBvdXRzdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHN3KFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxcbisjZGVmaW5lIG91dHNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2woUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXFxuKyNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR182NEJJVFxcbiBfX2lvX3JlYWRzX2lucyhyZWFkcywgdTY0LCBxLCBfX2lvX2JyKCksIF9faW9fYXIoYWRkcikpXFxuICNkZWZpbmUgcmVhZHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fcmVhZHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpXFxuIFxcbisjaWZkZWYgQ09ORklHX0hBU19JT1BPUlRcXG4gX19pb19yZWFkc19pbnMoaW5zLCB1NjQsIHEsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKVxcbi0jZGVmaW5lIGluc3EoYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNxKFBDSV9JT0JBU0UgKyAoYWRkciksIGJ1ZmZlciwgY291bnQpXFxuKyNkZWZpbmUgaW5zcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3EoUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXFxuKyNlbmRpZlxcbiBcXG4gX19pb193cml0ZXNfb3V0cyh3cml0ZXMsIHU2NCwgcSwgX19pb19idygpLCBfX2lvX2F3KCkpXFxuICNkZWZpbmUgd3JpdGVzcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX3dyaXRlc3EoYWRkciwgYnVmZmVyLCBjb3VudClcXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFTX0lPUE9SVFxcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHU2NCwgcSwgX19pb19wYnIoKSwgX19pb19wYXcoKSlcXG4tI2RlZmluZSBvdXRzcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHNxKFBDSV9JT0JBU0UgKyAoYWRkciksIGJ1ZmZlciwgY291bnQpXFxuKyNkZWZpbmUgb3V0c3EoYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzcShQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcXG4rI2VuZGlmXFxuICNlbmRpZlxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS1nZW5lcmljL2lvLmhcXHUwMDNlXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZGFkOTc1YjU1ZDBjMzFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZXJjcHUuaFxcbkBAIC0wLDAgKzEsMjg3IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuK1xcbisjaWZuZGVmIF9fQVNNX1BFUkNQVV9IXFxuKyNkZWZpbmUgX19BU01fUEVSQ1BVX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmVlbXB0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2FsdGVybmF0aXZlLW1hY3Jvcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2NwdWZlYXR1cmUtbWFjcm9zLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vY3VycmVudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2h3Y2FwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vdGhyZWFkX2luZm8uaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgUEVSQ1BVX1JXX09QUyhzeilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3BlcmNwdV9yZWFkXyMjc3oodm9pZCAqcHRyKVxcdFxcdFxcXFxcXG4re1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cmV0dXJuIFJFQURfT05DRSgqKHUjI3N6ICopcHRyKTtcXHRcXHRcXHRcXHRcXFxcXFxuK31cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1X3dyaXRlXyMjc3oodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbClcXHRcXFxcXFxuK3tcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFdSSVRFX09OQ0UoKih1IyNzeiAqKXB0ciwgKHUjI3N6KXZhbCk7XFx0XFx0XFx0XFx0XFxcXFxcbit9XFxuK1xcbitQRVJDUFVfUldfT1BTKDgpXFxuK1BFUkNQVV9SV19PUFMoMTYpXFxuK1BFUkNQVV9SV19PUFMoMzIpXFxuK1xcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuK1BFUkNQVV9SV19PUFMoNjQpXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSBfX1BFUkNQVV9BTU9fT1BfQ0FTRShzZngsIG5hbWUsIHN6LCBhbW9faW5zbilcXHRcXHRcXHRcXFxcXFxuK3N0YXRpYyBpbmxpbmUgdm9pZFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rX19wZXJjcHVfIyNuYW1lIyNfYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVxcdFxcdFxcXFxcXG4re1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0YXNtIHZvbGF0aWxlIChcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcXCJhbW9cXFwiICNhbW9faW5zbiAjc2Z4IFxcXCIgemVybywgJVt2YWxdLCAlW3B0cl1cXFwiXFx0XFx0XFxcXFxcbitcXHRcXHQ6IFtwdHJdIFxcXCIrQVxcXCIgKCoodSMjc3ogKilwdHIpXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQ6IFt2YWxdIFxcXCJyXFxcIiAoKHUjI3N6KSh2YWwpKVxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0OiBcXFwibWVtb3J5XFxcIik7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9XFxuK1xcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuKyNkZWZpbmUgUEVSQ1BVX09QKG5hbWUsIGFtb19pbnNuKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19QRVJDUFVfQU1PX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbilcXHRcXHRcXHRcXFxcXFxuK1xcdF9fUEVSQ1BVX0FNT19PUF9DQVNFKC5kLCBuYW1lLCA2NCwgYW1vX2luc24pXFxuKyNlbHNlXFxuKyNkZWZpbmUgUEVSQ1BVX09QKG5hbWUsIGFtb19pbnNuKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19QRVJDUFVfQU1PX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbilcXG4rI2VuZGlmXFxuK1xcbitQRVJDUFVfT1AoYWRkLCBhZGQpXFxuK1BFUkNQVV9PUChhbmRub3QsIGFuZClcXG4rUEVSQ1BVX09QKG9yLCBvcilcXG4rXFxuKy8qXFxuKyAqIEN1cnJlbnRseSwgb25seSB0aGlzX2NwdV9hZGRfcmV0dXJuX3h4eCgpIHJlcXVpcmVzIGEgcmV0dXJuIHZhbHVlLFxcbisgKiBhbmQgdGhlIFBFUkNQVV9SRVRfT1AoKSBkb2VzIG5vdCBhY2NvdW50IGZvciBvdGhlciBvcGVyYXRpb25zLlxcbisgKi9cXG4rI2RlZmluZSBfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0Uoc2Z4LCBuYW1lLCBzeiwgYW1vX2luc24pXFx0XFx0XFxcXFxcbitzdGF0aWMgaW5saW5lIHUjI3N6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitfX3BlcmNwdV8jI25hbWUjI19yZXR1cm5fYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVxcdFxcXFxcXG4re1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cmVnaXN0ZXIgdSMjc3ogcmV0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRhc20gdm9sYXRpbGUgKFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFxcImFtb1xcXCIgI2Ftb19pbnNuICNzZnggXFxcIiAlW3JldF0sICVbdmFsXSwgJVtwdHJdXFxcIlxcdFxcdFxcXFxcXG4rXFx0XFx0OiBbcHRyXSBcXFwiK0FcXFwiICgqKHUjI3N6ICopcHRyKSwgW3JldF0gXFxcIj1yXFxcIiAocmV0KVxcdFxcdFxcXFxcXG4rXFx0XFx0OiBbdmFsXSBcXFwiclxcXCIgKCh1IyNzeikodmFsKSlcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdDogXFxcIm1lbW9yeVxcXCIpO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyZXR1cm4gcmV0ICsgdmFsO1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfVxcbitcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbisjZGVmaW5lIFBFUkNQVV9SRVRfT1AobmFtZSwgYW1vX2luc24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbilcXHRcXHRcXFxcXFxuK1xcdF9fUEVSQ1BVX0FNT19SRVRfT1BfQ0FTRSguZCwgbmFtZSwgNjQsIGFtb19pbnNuKVxcbisjZWxzZVxcbisjZGVmaW5lIFBFUkNQVV9SRVRfT1AobmFtZSwgYW1vX2luc24pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbilcXG4rI2VuZGlmXFxuK1xcbitQRVJDUFVfUkVUX09QKGFkZCwgYWRkKVxcbitcXG4rI2RlZmluZSBQRVJDUFVfOF8xNl9HRVRfU0hJRlQocHRyKVxcdCgoKHVuc2lnbmVkIGxvbmcpKHB0cikgXFx1MDAyNiAweDMpICogQklUU19QRVJfQllURSlcXG4rI2RlZmluZSBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeilcXHRHRU5NQVNLKChzeikgLSAxLCAwKVxcbisjZGVmaW5lIFBFUkNQVV84XzE2X0dFVF9QVFIzMihwdHIpXFx0KCh1MzIgKikoKHVuc2lnbmVkIGxvbmcpKHB0cikgXFx1MDAyNiB+MHgzKSlcXG4rXFxuKyNkZWZpbmUgUEVSQ1BVXzhfMTZfT1AobmFtZSwgYW1vX2luc24sIHN6LCBzZngsIHZhbF90eXBlLCBuZXdfdmFsX2V4cHIsIGFzbV9vcClcXHRcXHRcXHRcXFxcXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdV8jI25hbWUjI19hbW9fY2FzZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpXFx0XFx0XFxcXFxcbit7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUklTQ1ZfSVNBX1pBQkhBKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cmlzY3ZfaGFzX2V4dGVuc2lvbl91bmxpa2VseShSSVNDVl9JU0FfRVhUX1pBQkhBKSkge1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0YXNtIHZvbGF0aWxlIChcXFwiYW1vXFxcIiAjYW1vX2luc24gI3NmeCBcXFwiIHplcm8sICVbdmFsXSwgJVtwdHJdXFxcIlxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0OiBbcHRyXSBcXFwiK0FcXFwiKCoodmFsX3R5cGUgKilwdHIpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQ6IFt2YWxdIFxcXCJyXFxcIigodmFsX3R5cGUpKChuZXdfdmFsX2V4cHIpIFxcdTAwMjYgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSlcXHRcXFxcXFxuK1xcdFxcdFxcdDogXFxcIm1lbW9yeVxcXCIpO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0fSBlbHNlIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHUzMiAqcHRyMzIgPSBQRVJDUFVfOF8xNl9HRVRfUFRSMzIocHRyKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgc2hpZnQgPSBQRVJDUFVfOF8xNl9HRVRfU0hJRlQocHRyKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGNvbnN0IHUzMiBtYXNrID0gUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opIFxcdTAwM2NcXHUwMDNjIHNoaWZ0O1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0Y29uc3QgdmFsX3R5cGUgdmFsX3RydW5jID0gKHZhbF90eXBlKSgobmV3X3ZhbF9leHByKVxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNiBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0dTMyIHJldHgsIHJjO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0dmFsX3R5cGUgbmV3X3ZhbF90eXBlO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRhc20gdm9sYXRpbGUgKFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcIjA6IGxyLncgJTAsICUyXFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwiYW5kICUzLCAlMCwgJTRcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcXCJzcmwgJTMsICUzLCAlNVxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0I2FzbV9vcCBcXFwiICUzLCAlMywgJTZcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcXCJhbmQgJTMsICUzLCAlOFxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcInNsbCAlMywgJTMsICU1XFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwiYW5kICUxLCAlMCwgJTdcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcXCJvciAlMSwgJTEsICUzXFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwic2MudyAlMSwgJTEsICUyXFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwiYm5leiAlMSwgMGJcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdDogXFxcIj1cXHUwMDI2clxcXCIocmV0eCksIFxcXCI9XFx1MDAyNnJcXFwiKHJjKSwgXFxcIitBXFxcIigqcHRyMzIpLCBcXFwiPVxcdTAwMjZyXFxcIihuZXdfdmFsX3R5cGUpXFx0XFx0XFxcXFxcbitcXHRcXHRcXHQ6IFxcXCJyXFxcIihtYXNrKSwgXFxcInJcXFwiKHNoaWZ0KSwgXFxcInJcXFwiKHZhbF90cnVuYyksIFxcXCJyXFxcIih+bWFzayksXFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgIFxcXCJyXFxcIihQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQ6IFxcXCJtZW1vcnlcXFwiKTtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdH1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK31cXG4rXFxuKyNkZWZpbmUgUEVSQ1BVX09QXzhfMTYob3BfbmFtZSwgb3AsIGV4cHIsIGZpbmFsX29wKVxcdFxcdFxcdFxcXFxcXG4rXFx0UEVSQ1BVXzhfMTZfT1Aob3BfbmFtZSwgb3AsIDgsIC5iLCB1OCwgZXhwciwgZmluYWxfb3ApO1xcdFxcdFxcXFxcXG4rXFx0UEVSQ1BVXzhfMTZfT1Aob3BfbmFtZSwgb3AsIDE2LCAuaCwgdTE2LCBleHByLCBmaW5hbF9vcClcXG4rXFxuK1BFUkNQVV9PUF84XzE2KGFkZCwgYWRkLCB2YWwsIGFkZClcXG4rUEVSQ1BVX09QXzhfMTYoYW5kbm90LCBhbmQsIH4odmFsKSwgYW5kKVxcbitQRVJDUFVfT1BfOF8xNihvciwgb3IsIHZhbCwgb3IpXFxuK1xcbisjZGVmaW5lIFBFUkNQVV84XzE2X1JFVF9PUChuYW1lLCBhbW9faW5zbiwgc3osIHNmeCwgdmFsX3R5cGUsIG5ld192YWxfZXhwcilcXHRcXHRcXHRcXFxcXFxuK3N0YXRpYyBpbmxpbmUgdmFsX3R5cGUgX19wZXJjcHVfIyNuYW1lIyNfcmV0dXJuX2Ftb19jYXNlXyMjc3oodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbClcXHRcXFxcXFxuK3tcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19SSVNDVl9JU0FfWkFCSEEpIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRyaXNjdl9oYXNfZXh0ZW5zaW9uX3VubGlrZWx5KFJJU0NWX0lTQV9FWFRfWkFCSEEpKSB7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRyZWdpc3RlciB2YWxfdHlwZSByZXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRhc20gdm9sYXRpbGUgKFxcXCJhbW9cXFwiICNhbW9faW5zbiAjc2Z4IFxcXCIgJVtyZXRdLCAlW3ZhbF0sICVbcHRyXVxcXCJcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdDogW3B0cl0gXFxcIitBXFxcIigqKHZhbF90eXBlICopcHRyKSwgW3JldF0gXFxcIj1yXFxcIihyZXQpXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQ6IFt2YWxdIFxcXCJyXFxcIigodmFsX3R5cGUpKChuZXdfdmFsX2V4cHIpIFxcdTAwMjYgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSlcXHRcXFxcXFxuK1xcdFxcdFxcdDogXFxcIm1lbW9yeVxcXCIpO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cmV0dXJuIHJldCArICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikgXFx1MDAyNiBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpO1xcdFxcdFxcXFxcXG4rXFx0fSBlbHNlIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHUzMiAqcHRyMzIgPSBQRVJDUFVfOF8xNl9HRVRfUFRSMzIocHRyKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgc2hpZnQgPSBQRVJDUFVfOF8xNl9HRVRfU0hJRlQocHRyKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGNvbnN0IHUzMiBtYXNrID0gKFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSBcXHUwMDNjXFx1MDAzYyBzaGlmdCk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRjb25zdCB1MzIgaW52X21hc2sgPSB+bWFzaztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdGNvbnN0IHZhbF90eXBlIHZhbF90cnVuYyA9ICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcilcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjYgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHUzMiBvbGQsIG5ldywgdG1wO1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRhc20gdm9sYXRpbGUgKFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcIjA6IGxyLncgJTAsICUzXFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwiYW5kICUxLCAlMCwgJTRcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcXCJzcmwgJTEsICUxLCAlNVxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcImFkZCAlMSwgJTEsICU2XFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwiYW5kICUxLCAlMSwgJTdcXFxcblxcXCJcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcXCJzbGwgJTEsICUxLCAlNVxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcImFuZCAlMiwgJTAsICU4XFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHRcXFwib3IgJTIsICUyLCAlMVxcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcInNjLncgJTIsICUyLCAlM1xcXFxuXFxcIlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0XFxcImJuZXogJTIsIDBiXFxcXG5cXFwiXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQ6IFxcXCI9XFx1MDAyNnJcXFwiKG9sZCksIFxcXCI9XFx1MDAyNnJcXFwiKHRtcCksIFxcXCI9XFx1MDAyNnJcXFwiKG5ldyksIFxcXCIrQVxcXCIoKnB0cjMyKVxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0OiBcXFwiclxcXCIobWFzayksIFxcXCJyXFxcIihzaGlmdCksIFxcXCJyXFxcIih2YWxfdHJ1bmMpLCBcXFwiclxcXCIoUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSwgXFxcXFxcbitcXHRcXHRcXHRcXFwiclxcXCIoaW52X21hc2spXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQ6IFxcXCJtZW1vcnlcXFwiKTtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHJldHVybiAodmFsX3R5cGUpKHRtcCBcXHUwMDNlXFx1MDAzZSBzaGlmdCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9XFxuK1xcbitQRVJDUFVfOF8xNl9SRVRfT1AoYWRkLCBhZGQsIDgsIC5iLCB1OCwgdmFsKVxcbitQRVJDUFVfOF8xNl9SRVRfT1AoYWRkLCBhZGQsIDE2LCAuaCwgdTE2LCB2YWwpXFxuK1xcbisjZGVmaW5lIF9wY3BfcHJvdGVjdChvcCwgcGNwLCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbisoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdG9wKHJhd19jcHVfcHRyKFxcdTAwMjYocGNwKSksIF9fVkFfQVJHU19fKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK30pXFxuK1xcbisjZGVmaW5lIF9wY3BfcHJvdGVjdF9yZXR1cm4ob3AsIHBjcCwgYXJncy4uLilcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR0eXBlb2YocGNwKSBfX3JldHZhbDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3JldHZhbCA9ICh0eXBlb2YocGNwKSlvcChyYXdfY3B1X3B0cihcXHUwMDI2KHBjcCkpLCAjI2FyZ3MpO1xcdFxcXFxcXG4rXFx0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19yZXR2YWw7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rI2RlZmluZSB0aGlzX2NwdV9yZWFkXzEocGNwKVxcdFxcdF9wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfcmVhZF84LCBwY3ApXFxuKyNkZWZpbmUgdGhpc19jcHVfcmVhZF8yKHBjcClcXHRcXHRfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X3JlYWRfMTYsIHBjcClcXG4rI2RlZmluZSB0aGlzX2NwdV9yZWFkXzQocGNwKVxcdFxcdF9wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfcmVhZF8zMiwgcGNwKVxcbitcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfOChwY3ApXFx0XFx0X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9yZWFkXzY0LCBwY3ApXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSB0aGlzX2NwdV93cml0ZV8xKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV84LCBwY3AsICh1bnNpZ25lZCBsb25nKXZhbClcXG4rI2RlZmluZSB0aGlzX2NwdV93cml0ZV8yKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV8xNiwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpXFxuKyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfNChwY3AsIHZhbClcXHRfcGNwX3Byb3RlY3QoX19wZXJjcHVfd3JpdGVfMzIsIHBjcCwgKHVuc2lnbmVkIGxvbmcpdmFsKVxcbitcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbisjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzgocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X3dyaXRlXzY0LCBwY3AsICh1bnNpZ25lZCBsb25nKXZhbClcXG4rI2VuZGlmXFxuK1xcbisjZGVmaW5lIHRoaXNfY3B1X2FkZF8xKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hZGRfYW1vX2Nhc2VfOCwgcGNwLCB2YWwpXFxuKyNkZWZpbmUgdGhpc19jcHVfYWRkXzIocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpXFxuKyNkZWZpbmUgdGhpc19jcHVfYWRkXzQocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV8zMiwgcGNwLCB2YWwpXFxuK1xcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuKyNkZWZpbmUgdGhpc19jcHVfYWRkXzgocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV82NCwgcGNwLCB2YWwpXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzEocGNwLCB2YWwpXFx0XFx0XFxcXFxcbitfcGNwX3Byb3RlY3RfcmV0dXJuKF9fcGVyY3B1X2FkZF9yZXR1cm5fYW1vX2Nhc2VfOCwgcGNwLCB2YWwpXFxuK1xcbisjZGVmaW5lIHRoaXNfY3B1X2FkZF9yZXR1cm5fMihwY3AsIHZhbClcXHRcXHRcXFxcXFxuK19wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfYWRkX3JldHVybl9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpXFxuK1xcbisjZGVmaW5lIHRoaXNfY3B1X2FkZF9yZXR1cm5fNChwY3AsIHZhbClcXHRcXHRcXFxcXFxuK19wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfYWRkX3JldHVybl9hbW9fY2FzZV8zMiwgcGNwLCB2YWwpXFxuK1xcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuKyNkZWZpbmUgdGhpc19jcHVfYWRkX3JldHVybl84KHBjcCwgdmFsKVxcdFxcdFxcXFxcXG4rX3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzY0LCBwY3AsIHZhbClcXG4rI2VuZGlmXFxuK1xcbisjZGVmaW5lIHRoaXNfY3B1X2FuZF8xKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hbmRub3RfYW1vX2Nhc2VfOCwgcGNwLCB+KHZhbCkpXFxuKyNkZWZpbmUgdGhpc19jcHVfYW5kXzIocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV8xNiwgcGNwLCB+KHZhbCkpXFxuKyNkZWZpbmUgdGhpc19jcHVfYW5kXzQocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV8zMiwgcGNwLCB2YWwpXFxuK1xcbisjaWZkZWYgQ09ORklHXzY0QklUXFxuKyNkZWZpbmUgdGhpc19jcHVfYW5kXzgocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV82NCwgcGNwLCB2YWwpXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSB0aGlzX2NwdV9vcl8xKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV84LCBwY3AsIHZhbClcXG4rI2RlZmluZSB0aGlzX2NwdV9vcl8yKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpXFxuKyNkZWZpbmUgdGhpc19jcHVfb3JfNChwY3AsIHZhbClcXHRfcGNwX3Byb3RlY3QoX19wZXJjcHVfb3JfYW1vX2Nhc2VfMzIsIHBjcCwgdmFsKVxcbitcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbisjZGVmaW5lIHRoaXNfY3B1X29yXzgocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzY0LCBwY3AsIHZhbClcXG4rI2VuZGlmXFxuK1xcbisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfMShwY3AsIHZhbClcXHRfcGNwX3Byb3RlY3RfcmV0dXJuKHhjaGdfcmVsYXhlZCwgcGNwLCB2YWwpXFxuKyNkZWZpbmUgdGhpc19jcHVfeGNoZ18yKHBjcCwgdmFsKVxcdF9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbClcXG4rI2RlZmluZSB0aGlzX2NwdV94Y2hnXzQocGNwLCB2YWwpXFx0X3BjcF9wcm90ZWN0X3JldHVybih4Y2hnX3JlbGF4ZWQsIHBjcCwgdmFsKVxcbitcXG4rI2lmZGVmIENPTkZJR182NEJJVFxcbisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfOChwY3AsIHZhbClcXHRfcGNwX3Byb3RlY3RfcmV0dXJuKHhjaGdfcmVsYXhlZCwgcGNwLCB2YWwpXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzEocGNwLCBvLCBuKVxcdF9wY3BfcHJvdGVjdF9yZXR1cm4oY21weGNoZ19yZWxheGVkLCBwY3AsIG8sIG4pXFxuKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ18yKHBjcCwgbywgbilcXHRfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKVxcbisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfNChwY3AsIG8sIG4pXFx0X3BjcF9wcm90ZWN0X3JldHVybihjbXB4Y2hnX3JlbGF4ZWQsIHBjcCwgbywgbilcXG4rXFxuKyNpZmRlZiBDT05GSUdfNjRCSVRcXG4rI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzgocGNwLCBvLCBuKVxcdF9wY3BfcHJvdGVjdF9yZXR1cm4oY21weGNoZ19yZWxheGVkLCBwY3AsIG8sIG4pXFxuK1xcbisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGc2NChwY3AsIG8sIG4pXFx0dGhpc19jcHVfY21weGNoZ184KHBjcCwgbywgbilcXG4rI2VuZGlmXFxuK1xcbisjaWZkZWYgc3lzdGVtX2hhc19jbXB4Y2hnMTI4XFxuKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZzEyOChwY3AsIG8sIG4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbisoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0dTEyOCByZXRfXztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHR5cGVvZihwY3ApICpwdHJfXztcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHB0cl9fID0gcmF3X2NwdV9wdHIoXFx1MDAyNihwY3ApKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGlmIChzeXN0ZW1faGFzX2NtcHhjaGcxMjgoKSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdHJldF9fID0gY21weGNoZzEyOF9sb2NhbChwdHJfXywgKG8pLCAobikpO1xcdFxcdFxcXFxcXG4rXFx0ZWxzZVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0cmV0X18gPSB0aGlzX2NwdV9nZW5lcmljX2NtcHhjaGcocGNwLCAobyksIChuKSk7XFx0XFxcXFxcbitcXHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyZXRfXztcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK30pXFxuKyNlbmRpZlxcbitcXG4rI2RlZmluZSBfX215X2NwdV9vZmZzZXQgKCgoc3RydWN0IHRocmVhZF9pbmZvICopY3VycmVudCktXFx1MDAzZXBjcHVfb2Zmc2V0KVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS1nZW5lcmljL3BlcmNwdS5oXFx1MDAzZVxcbitcXG4rI2VuZGlmIC8qIF9fQVNNX1BFUkNQVV9IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oXFxuaW5kZXggMGU3MWViODJmOTIwY2EuLjczM2I2Y2QzMDZlNDBmIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oXFxuQEAgLTg4LDYgKzg4LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3aXRjaF90b19lbnZjZmcoc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxcbiBcXHRcXHRcXHQ6OiBcXFwiclxcXCIgKG5leHQtXFx1MDAzZXRocmVhZC5lbnZjZmcpIDogXFxcIm1lbW9yeVxcXCIpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgX19zd2l0Y2hfdG9fcGNwdV9vZmZzZXQoc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxcbit7XFxuKyNpZmRlZiBDT05GSUdfU01QXFxuK1xcdG5leHQtXFx1MDAzZXRocmVhZF9pbmZvLnBjcHVfb2Zmc2V0ID0gX19teV9jcHVfb2Zmc2V0O1xcbisjZW5kaWZcXG4rfVxcbitcXG4gZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICosXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7XFxuIFxcbkBAIC0xMjIsNiArMTI5LDcgQEAgZG8ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0aWYgKHN3aXRjaF90b19zaG91bGRfZmx1c2hfaWNhY2hlKF9fbmV4dCkpXFx0XFxcXFxcbiBcXHRcXHRsb2NhbF9mbHVzaF9pY2FjaGVfYWxsKCk7XFx0XFx0XFxcXFxcbiBcXHRfX3N3aXRjaF90b19lbnZjZmcoX19uZXh0KTtcXHRcXHRcXHRcXFxcXFxuK1xcdF9fc3dpdGNoX3RvX3BjcHVfb2Zmc2V0KF9fbmV4dCk7XFx0XFx0XFxcXFxcbiBcXHQoKGxhc3QpID0gX19zd2l0Y2hfdG8oX19wcmV2LCBfX25leHQpKTtcXHRcXHRcXFxcXFxuIH0gd2hpbGUgKDApXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmhcXG5pbmRleCA1NTAxOWZkZmE5ZWNhYS4uZjEwYmE2MmI2MTAxNjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXFxuQEAgLTUzLDYgKzUzLDcgQEBcXG4gc3RydWN0IHRocmVhZF9pbmZvIHtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGZsYWdzO1xcdFxcdC8qIGxvdyBsZXZlbCBmbGFncyAqL1xcbiBcXHRpbnQgICAgICAgICAgICAgICAgICAgICBwcmVlbXB0X2NvdW50OyAgLyogMD1cXHUwMDNlcHJlZW1wdGlibGUsIFxcdTAwM2MwPVxcdTAwM2VCVUcgKi9cXG4rXFx0aW50XFx0XFx0XFx0Y3B1O1xcbiBcXHQvKlxcbiBcXHQgKiBUaGVzZSBzdGFjayBwb2ludGVycyBhcmUgb3ZlcndyaXR0ZW4gb24gZXZlcnkgc3lzdGVtIGNhbGwgb3JcXG4gXFx0ICogZXhjZXB0aW9uLiAgU1AgaXMgYWxzbyBzYXZlZCB0byB0aGUgc3RhY2sgaXQgY2FuIGJlIHJlY292ZXJlZCB3aGVuXFxuQEAgLTYwLDggKzYxLDggQEAgc3RydWN0IHRocmVhZF9pbmZvIHtcXG4gXFx0ICovXFxuIFxcdGxvbmdcXHRcXHRcXHRrZXJuZWxfc3A7XFx0LyogS2VybmVsIHN0YWNrIHBvaW50ZXIgKi9cXG4gXFx0bG9uZ1xcdFxcdFxcdHVzZXJfc3A7XFx0LyogVXNlciBzdGFjayBwb2ludGVyICovXFxuLVxcdGludFxcdFxcdFxcdGNwdTtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHN5c2NhbGxfd29yaztcXHQvKiBTWVNDQUxMX1dPUktfIGZsYWdzICovXFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRwY3B1X29mZnNldDtcXG4gI2lmZGVmIENPTkZJR19TSEFET1dfQ0FMTF9TVEFDS1xcbiBcXHR2b2lkXFx0XFx0XFx0KnNjc19iYXNlO1xcbiBcXHR2b2lkXFx0XFx0XFx0KnNjc19zcDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcmlzY3Yva2VybmVsL2FzbS1vZmZzZXRzLmNcXG5pbmRleCBhNzVmMGNmZWExZTlmYS4uMjBkNDZjMjhmZGRlOTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xcbisrKyBiL2FyY2gvcmlzY3Yva2VybmVsL2FzbS1vZmZzZXRzLmNcXG5AQCAtMzgsNiArMzgsNyBAQCB2b2lkIGFzbV9vZmZzZXRzKHZvaWQpXFxuIFxcdE9GRlNFVChUQVNLX1RIUkVBRF9TVU0sIHRhc2tfc3RydWN0LCB0aHJlYWQuc3VtKTtcXG4gXFxuIFxcdE9GRlNFVChUQVNLX1RJX0NQVSwgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvLmNwdSk7XFxuK1xcdE9GRlNFVChUQVNLX1RJX1BDUFVfT0ZGU0VULCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8ucGNwdV9vZmZzZXQpO1xcbiBcXHRPRkZTRVQoVEFTS19USV9QUkVFTVBUX0NPVU5ULCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8ucHJlZW1wdF9jb3VudCk7XFxuIFxcdE9GRlNFVChUQVNLX1RJX0tFUk5FTF9TUCwgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvLmtlcm5lbF9zcCk7XFxuIFxcdE9GRlNFVChUQVNLX1RJX1VTRVJfU1AsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby51c2VyX3NwKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc21wYm9vdC5jXFxuaW5kZXggZjZlZjU3OTMwYjUwYTguLjc4NzY4NTRkMTYyNzkwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuY1xcbisrKyBiL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuY1xcbkBAIC0xOTEsNiArMTkxLDcgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFx0dGlkbGUtXFx1MDAzZXRocmVhZF9pbmZvLmNwdSA9IGNwdTtcXG4rXFx0dGlkbGUtXFx1MDAzZXRocmVhZF9pbmZvLnBjcHVfb2Zmc2V0ID0gcGVyX2NwdV9vZmZzZXQoY3B1KTtcXG4gXFxuIFxcdHJldCA9IHN0YXJ0X3NlY29uZGFyeV9jcHUoY3B1LCB0aWRsZSk7XFxuIFxcdGlmICghcmV0KSB7XFxuQEAgLTIwOCw2ICsyMDksMTEgQEAgaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbit2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKVxcbit7XFxuK1xcdF9fbXlfY3B1X29mZnNldCA9IHBlcl9jcHVfb2Zmc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7XFxuK31cXG4rXFxuIHZvaWQgX19pbml0IHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKVxcbiB7XFxuIH1cXG5AQCAtMjMzLDYgKzIzOSw4IEBAIGFzbWxpbmthZ2UgX192aXNpYmxlIHZvaWQgc21wX2NhbGxpbih2b2lkKVxcbiBcXHRtbWdyYWIobW0pO1xcbiBcXHRjdXJyZW50LVxcdTAwM2VhY3RpdmVfbW0gPSBtbTtcXG4gXFxuK1xcdF9fbXlfY3B1X29mZnNldCA9IHBlcl9jcHVfb2Zmc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7XFxuK1xcbiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfUEFSQUxMRUxcXG4gXFx0Y3B1aHBfYXBfc3luY19hbGl2ZSgpO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG5pbmRleCBjMDNjMWRlMTZiNzlhYy4uZWFiOTNkNTI1OGU5ZTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG5AQCAtMTM5NSwxNSArMTM5NSw4IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbiBcXHRcXHRcXHRpZiAocmQgIT0gcnMpXFxuIFxcdFxcdFxcdFxcdGVtaXRfbXYocmQsIHJzLCBjdHgpO1xcbiAjaWZkZWYgQ09ORklHX1NNUFxcbi1cXHRcXHRcXHQvKiBMb2FkIGN1cnJlbnQgQ1BVIG51bWJlciBpbiBUMSAqL1xcbi1cXHRcXHRcXHRlbWl0X2x3KFJWX1JFR19UMSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBjcHUpLFxcbitcXHRcXHRcXHRlbWl0X2xkKFJWX1JFR19UMSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBwY3B1X29mZnNldCksXFxuIFxcdFxcdFxcdFxcdFJWX1JFR19UUCwgY3R4KTtcXG4tXFx0XFx0XFx0LyogTG9hZCBhZGRyZXNzIG9mIF9fcGVyX2NwdV9vZmZzZXQgYXJyYXkgaW4gVDIgKi9cXG4tXFx0XFx0XFx0ZW1pdF9hZGRyKFJWX1JFR19UMiwgKHU2NClcXHUwMDI2X19wZXJfY3B1X29mZnNldCwgZXh0cmFfcGFzcywgY3R4KTtcXG4tXFx0XFx0XFx0LyogR2V0IGFkZHJlc3Mgb2YgX19wZXJfY3B1X29mZnNldFtjcHVdIGluIFQxICovXFxuLVxcdFxcdFxcdGVtaXRfc2gzYWRkKFJWX1JFR19UMSwgUlZfUkVHX1QxLCBSVl9SRUdfVDIsIGN0eCk7XFxuLVxcdFxcdFxcdC8qIExvYWQgX19wZXJfY3B1X29mZnNldFtjcHVdIGluIFQxICovXFxuLVxcdFxcdFxcdGVtaXRfbGQoUlZfUkVHX1QxLCAwLCBSVl9SRUdfVDEsIGN0eCk7XFxuIFxcdFxcdFxcdC8qIEFkZCB0aGUgb2Zmc2V0IHRvIFJkICovXFxuIFxcdFxcdFxcdGVtaXRfYWRkKHJkLCByZCwgUlZfUkVHX1QxLCBjdHgpO1xcbiAjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6Mzk6MDQuMjEyMzkzODY3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM0NjYyMjEyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9qaXRfZW1pdF9pbnNuXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUklTQy1WIGFyY2hpdGVjdHVyZSBjb2RlIHRvIG9wdGltaXplIHBlci1DUFUgdmFyaWFibGUgYWNjZXNzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHBlcmNwdS5oIGhlYWRlciB3aXRoIG9wdGltaXplZCBpbmxpbmUgb3BlcmF0aW9ucywgdXBkYXRlcyBjb250ZXh0IHN3aXRjaCBsb2dpYywgYW5kIG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIHVzZSB0aGUgbmV3IHBlci1DUFUgb2Zmc2V0LiBUaGUgQlBGIEpJVCBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIG1ha2luZyB0aGVtIGdvb2QgdGFyZ2V0cyBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NGUzMTMwN2Q5N2RkMjYyZmFmNDQxMjY2ZWZiYzNlZmIwMTk4ZTA5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwOTozOTowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vYXNtLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oXG5pbmRleCBlOWU4YmE4M2U2MzJmOS4uMTM3YTQ5NDg4MzI1ZTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2FzbS5oXG5AQCAtOTEsMTEgKzkxLDcgQEBcbiBcbiAjaWZkZWYgQ09ORklHX1NNUFxuIC5tYWNybyBhc21fcGVyX2NwdSBkc3Qgc3ltIHRtcFxuLVx0bHcgICAgXFx0bXAsIFRBU0tfVElfQ1BVX05VTSh0cClcbi1cdHNsbGkgIFxcdG1wLCBcXHRtcCwgUklTQ1ZfTEdQVFJcbi1cdGxhICAgIFxcZHN0LCBfX3Blcl9jcHVfb2Zmc2V0XG4tXHRhZGQgICBcXGRzdCwgXFxkc3QsIFxcdG1wXG4tXHRSRUdfTCBcXHRtcCwgMChcXGRzdClcbitcdFJFR19MIFxcdG1wLCBUQVNLX1RJX1BDUFVfT0ZGU0VUKHRwKVxuIFx0bGEgICAgXFxkc3QsIFxcc3ltXG4gXHRhZGQgICBcXGRzdCwgXFxkc3QsIFxcdG1wXG4gLmVuZG1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2lvLmhcbmluZGV4IDA5YmI1ZjU3YTlkMzQ2Li42ZjVkNzAzMTNjODNlZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW8uaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9pby5oXG5AQCAtNTYsNiArNTYsOCBAQFxuICNkZWZpbmUgX19pb19wYncoKVx0UklTQ1ZfRkVOQ0UoaW93LCBvKVxuICNkZWZpbmUgX19pb19wYXcoKVx0UklTQ1ZfRkVOQ0UobywgaW8pXG4gXG4rI2RlZmluZSBQQ0lfSU9fQUREUihhZGRyKVx0KCh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpUENJX0lPQkFTRSArIChhZGRyKSkpXG4rXG4gLypcbiAgKiBBY2Nlc3NlcyBmcm9tIGEgc2luZ2xlIGhhcnQgdG8gYSBzaW5nbGUgSS9PIGFkZHJlc3MgbXVzdCBiZSBvcmRlcmVkLiAgVGhpc1xuICAqIGFsbG93cyB1cyB0byB1c2UgdGhlIHJhdyByZWFkIG1hY3JvcywgYnV0IHdlIHN0aWxsIG5lZWQgdG8gZmVuY2UgYmVmb3JlIGFuZFxuQEAgLTEwMiwxMiArMTA0LDE0IEBAIF9faW9fcmVhZHNfaW5zKHJlYWRzLCB1MzIsIGwsIF9faW9fYnIoKSwgX19pb19hcihhZGRyKSlcbiAjZGVmaW5lIHJlYWRzdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX3JlYWRzdyhhZGRyLCBidWZmZXIsIGNvdW50KVxuICNkZWZpbmUgcmVhZHNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fcmVhZHNsKGFkZHIsIGJ1ZmZlciwgY291bnQpXG4gXG4rI2lmZGVmIENPTkZJR19IQVNfSU9QT1JUXG4gX19pb19yZWFkc19pbnMoaW5zLCAgdTgsIGIsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKVxuIF9faW9fcmVhZHNfaW5zKGlucywgdTE2LCB3LCBfX2lvX3BicigpLCBfX2lvX3BhcihhZGRyKSlcbiBfX2lvX3JlYWRzX2lucyhpbnMsIHUzMiwgbCwgX19pb19wYnIoKSwgX19pb19wYXIoYWRkcikpXG4tI2RlZmluZSBpbnNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zYihQQ0lfSU9CQVNFICsgKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuLSNkZWZpbmUgaW5zdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3coUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcbi0jZGVmaW5lIGluc2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNsKFBDSV9JT0JBU0UgKyAoYWRkciksIGJ1ZmZlciwgY291bnQpXG4rI2RlZmluZSBpbnNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9faW5zYihQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcbisjZGVmaW5lIGluc3coYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnN3KFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuKyNkZWZpbmUgaW5zbChhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc2woUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4rI2VuZGlmXG4gXG4gX19pb193cml0ZXNfb3V0cyh3cml0ZXMsICB1OCwgYiwgX19pb19idygpLCBfX2lvX2F3KCkpXG4gX19pb193cml0ZXNfb3V0cyh3cml0ZXMsIHUxNiwgdywgX19pb19idygpLCBfX2lvX2F3KCkpXG5AQCAtMTE2LDI1ICsxMjAsMzEgQEAgX19pb193cml0ZXNfb3V0cyh3cml0ZXMsIHUzMiwgbCwgX19pb19idygpLCBfX2lvX2F3KCkpXG4gI2RlZmluZSB3cml0ZXN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fd3JpdGVzdyhhZGRyLCBidWZmZXIsIGNvdW50KVxuICNkZWZpbmUgd3JpdGVzbChhZGRyLCBidWZmZXIsIGNvdW50KSBfX3dyaXRlc2woYWRkciwgYnVmZmVyLCBjb3VudClcbiBcbisjaWZkZWYgQ09ORklHX0hBU19JT1BPUlRcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsICB1OCwgYiwgX19pb19wYncoKSwgX19pb19wYXcoKSlcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHUxNiwgdywgX19pb19wYncoKSwgX19pb19wYXcoKSlcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHUzMiwgbCwgX19pb19wYncoKSwgX19pb19wYXcoKSlcbi0jZGVmaW5lIG91dHNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2IoUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcbi0jZGVmaW5lIG91dHN3KGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3coUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcbi0jZGVmaW5lIG91dHNsKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2woUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcbisjZGVmaW5lIG91dHNiKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c2IoUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4rI2RlZmluZSBvdXRzdyhhZGRyLCBidWZmZXIsIGNvdW50KSBfX291dHN3KFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuKyNkZWZpbmUgb3V0c2woYWRkciwgYnVmZmVyLCBjb3VudCkgX19vdXRzbChQQ0lfSU9fQUREUihhZGRyKSwgYnVmZmVyLCBjb3VudClcbisjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHXzY0QklUXG4gX19pb19yZWFkc19pbnMocmVhZHMsIHU2NCwgcSwgX19pb19icigpLCBfX2lvX2FyKGFkZHIpKVxuICNkZWZpbmUgcmVhZHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fcmVhZHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpXG4gXG4rI2lmZGVmIENPTkZJR19IQVNfSU9QT1JUXG4gX19pb19yZWFkc19pbnMoaW5zLCB1NjQsIHEsIF9faW9fcGJyKCksIF9faW9fcGFyKGFkZHIpKVxuLSNkZWZpbmUgaW5zcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX2luc3EoUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcbisjZGVmaW5lIGluc3EoYWRkciwgYnVmZmVyLCBjb3VudCkgX19pbnNxKFBDSV9JT19BRERSKGFkZHIpLCBidWZmZXIsIGNvdW50KVxuKyNlbmRpZlxuIFxuIF9faW9fd3JpdGVzX291dHMod3JpdGVzLCB1NjQsIHEsIF9faW9fYncoKSwgX19pb19hdygpKVxuICNkZWZpbmUgd3JpdGVzcShhZGRyLCBidWZmZXIsIGNvdW50KSBfX3dyaXRlc3EoYWRkciwgYnVmZmVyLCBjb3VudClcbiBcbisjaWZkZWYgQ09ORklHX0hBU19JT1BPUlRcbiBfX2lvX3dyaXRlc19vdXRzKG91dHMsIHU2NCwgcSwgX19pb19wYnIoKSwgX19pb19wYXcoKSlcbi0jZGVmaW5lIG91dHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3EoUENJX0lPQkFTRSArIChhZGRyKSwgYnVmZmVyLCBjb3VudClcbisjZGVmaW5lIG91dHNxKGFkZHIsIGJ1ZmZlciwgY291bnQpIF9fb3V0c3EoUENJX0lPX0FERFIoYWRkciksIGJ1ZmZlciwgY291bnQpXG4rI2VuZGlmXG4gI2VuZGlmXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtLWdlbmVyaWMvaW8uaFx1MDAzZVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmRhZDk3NWI1NWQwYzMxXG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oXG5AQCAtMCwwICsxLDI4NyBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4rXG4rI2lmbmRlZiBfX0FTTV9QRVJDUFVfSFxuKyNkZWZpbmUgX19BU01fUEVSQ1BVX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVlbXB0LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2Nhc20vYWx0ZXJuYXRpdmUtbWFjcm9zLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vY3B1ZmVhdHVyZS1tYWNyb3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS9jdXJyZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vaHdjYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FzbS90aHJlYWRfaW5mby5oXHUwMDNlXG4rXG4rI2RlZmluZSBQRVJDUFVfUldfT1BTKHN6KVx0XHRcdFx0XHRcdFxcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fcGVyY3B1X3JlYWRfIyNzeih2b2lkICpwdHIpXHRcdFxcXG4re1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyZXR1cm4gUkVBRF9PTkNFKCoodSMjc3ogKilwdHIpO1x0XHRcdFx0XFxcbit9XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdV93cml0ZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpXHRcXFxuK3tcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0V1JJVEVfT05DRSgqKHUjI3N6ICopcHRyLCAodSMjc3opdmFsKTtcdFx0XHRcdFxcXG4rfVxuK1xuK1BFUkNQVV9SV19PUFMoOClcbitQRVJDUFVfUldfT1BTKDE2KVxuK1BFUkNQVV9SV19PUFMoMzIpXG4rXG4rI2lmZGVmIENPTkZJR182NEJJVFxuK1BFUkNQVV9SV19PUFMoNjQpXG4rI2VuZGlmXG4rXG4rI2RlZmluZSBfX1BFUkNQVV9BTU9fT1BfQ0FTRShzZngsIG5hbWUsIHN6LCBhbW9faW5zbilcdFx0XHRcXFxuK3N0YXRpYyBpbmxpbmUgdm9pZFx0XHRcdFx0XHRcdFx0XFxcbitfX3BlcmNwdV8jI25hbWUjI19hbW9fY2FzZV8jI3N6KHZvaWQgKnB0ciwgdW5zaWduZWQgbG9uZyB2YWwpXHRcdFxcXG4re1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRhc20gdm9sYXRpbGUgKFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XCJhbW9cIiAjYW1vX2luc24gI3NmeCBcIiB6ZXJvLCAlW3ZhbF0sICVbcHRyXVwiXHRcdFxcXG4rXHRcdDogW3B0cl0gXCIrQVwiICgqKHUjI3N6ICopcHRyKVx0XHRcdFx0XFxcbitcdFx0OiBbdmFsXSBcInJcIiAoKHUjI3N6KSh2YWwpKVx0XHRcdFx0XFxcbitcdFx0OiBcIm1lbW9yeVwiKTtcdFx0XHRcdFx0XHRcXFxuK31cbitcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rI2RlZmluZSBQRVJDUFVfT1AobmFtZSwgYW1vX2luc24pXHRcdFx0XHRcdFxcXG4rXHRfX1BFUkNQVV9BTU9fT1BfQ0FTRSgudywgbmFtZSwgMzIsIGFtb19pbnNuKVx0XHRcdFxcXG4rXHRfX1BFUkNQVV9BTU9fT1BfQ0FTRSguZCwgbmFtZSwgNjQsIGFtb19pbnNuKVxuKyNlbHNlXG4rI2RlZmluZSBQRVJDUFVfT1AobmFtZSwgYW1vX2luc24pXHRcdFx0XHRcdFxcXG4rXHRfX1BFUkNQVV9BTU9fT1BfQ0FTRSgudywgbmFtZSwgMzIsIGFtb19pbnNuKVxuKyNlbmRpZlxuK1xuK1BFUkNQVV9PUChhZGQsIGFkZClcbitQRVJDUFVfT1AoYW5kbm90LCBhbmQpXG4rUEVSQ1BVX09QKG9yLCBvcilcbitcbisvKlxuKyAqIEN1cnJlbnRseSwgb25seSB0aGlzX2NwdV9hZGRfcmV0dXJuX3h4eCgpIHJlcXVpcmVzIGEgcmV0dXJuIHZhbHVlLFxuKyAqIGFuZCB0aGUgUEVSQ1BVX1JFVF9PUCgpIGRvZXMgbm90IGFjY291bnQgZm9yIG90aGVyIG9wZXJhdGlvbnMuXG4rICovXG4rI2RlZmluZSBfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0Uoc2Z4LCBuYW1lLCBzeiwgYW1vX2luc24pXHRcdFxcXG4rc3RhdGljIGlubGluZSB1IyNzelx0XHRcdFx0XHRcdFx0XFxcbitfX3BlcmNwdV8jI25hbWUjI19yZXR1cm5fYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVx0XFxcbit7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHJlZ2lzdGVyIHUjI3N6IHJldDtcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRhc20gdm9sYXRpbGUgKFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XCJhbW9cIiAjYW1vX2luc24gI3NmeCBcIiAlW3JldF0sICVbdmFsXSwgJVtwdHJdXCJcdFx0XFxcbitcdFx0OiBbcHRyXSBcIitBXCIgKCoodSMjc3ogKilwdHIpLCBbcmV0XSBcIj1yXCIgKHJldClcdFx0XFxcbitcdFx0OiBbdmFsXSBcInJcIiAoKHUjI3N6KSh2YWwpKVx0XHRcdFx0XFxcbitcdFx0OiBcIm1lbW9yeVwiKTtcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRyZXR1cm4gcmV0ICsgdmFsO1x0XHRcdFx0XHRcdFxcXG4rfVxuK1xuKyNpZmRlZiBDT05GSUdfNjRCSVRcbisjZGVmaW5lIFBFUkNQVV9SRVRfT1AobmFtZSwgYW1vX2luc24pXHRcdFx0XHRcdFxcXG4rXHRfX1BFUkNQVV9BTU9fUkVUX09QX0NBU0UoLncsIG5hbWUsIDMyLCBhbW9faW5zbilcdFx0XFxcbitcdF9fUEVSQ1BVX0FNT19SRVRfT1BfQ0FTRSguZCwgbmFtZSwgNjQsIGFtb19pbnNuKVxuKyNlbHNlXG4rI2RlZmluZSBQRVJDUFVfUkVUX09QKG5hbWUsIGFtb19pbnNuKVx0XHRcdFx0XHRcXFxuK1x0X19QRVJDUFVfQU1PX1JFVF9PUF9DQVNFKC53LCBuYW1lLCAzMiwgYW1vX2luc24pXG4rI2VuZGlmXG4rXG4rUEVSQ1BVX1JFVF9PUChhZGQsIGFkZClcbitcbisjZGVmaW5lIFBFUkNQVV84XzE2X0dFVF9TSElGVChwdHIpXHQoKCh1bnNpZ25lZCBsb25nKShwdHIpIFx1MDAyNiAweDMpICogQklUU19QRVJfQllURSlcbisjZGVmaW5lIFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KVx0R0VOTUFTSygoc3opIC0gMSwgMClcbisjZGVmaW5lIFBFUkNQVV84XzE2X0dFVF9QVFIzMihwdHIpXHQoKHUzMiAqKSgodW5zaWduZWQgbG9uZykocHRyKSBcdTAwMjYgfjB4MykpXG4rXG4rI2RlZmluZSBQRVJDUFVfOF8xNl9PUChuYW1lLCBhbW9faW5zbiwgc3osIHNmeCwgdmFsX3R5cGUsIG5ld192YWxfZXhwciwgYXNtX29wKVx0XHRcdFxcXG4rc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1XyMjbmFtZSMjX2Ftb19jYXNlXyMjc3oodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbClcdFx0XFxcbit7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19SSVNDVl9JU0FfWkFCSEEpIFx1MDAyNlx1MDAyNlx0XHRcdFx0XHRcdFxcXG4rXHRcdHJpc2N2X2hhc19leHRlbnNpb25fdW5saWtlbHkoUklTQ1ZfSVNBX0VYVF9aQUJIQSkpIHtcdFx0XHRcdFxcXG4rXHRcdGFzbSB2b2xhdGlsZSAoXCJhbW9cIiAjYW1vX2luc24gI3NmeCBcIiB6ZXJvLCAlW3ZhbF0sICVbcHRyXVwiXHRcdFx0XFxcbitcdFx0XHQ6IFtwdHJdIFwiK0FcIigqKHZhbF90eXBlICopcHRyKVx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0OiBbdmFsXSBcInJcIigodmFsX3R5cGUpKChuZXdfdmFsX2V4cHIpIFx1MDAyNiBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpKVx0XFxcbitcdFx0XHQ6IFwibWVtb3J5XCIpO1x0XHRcdFx0XHRcdFx0XHRcXFxuK1x0fSBlbHNlIHtcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdHUzMiAqcHRyMzIgPSBQRVJDUFVfOF8xNl9HRVRfUFRSMzIocHRyKTtcdFx0XHRcdFx0XFxcbitcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaGlmdCA9IFBFUkNQVV84XzE2X0dFVF9TSElGVChwdHIpO1x0XHRcdFx0XFxcbitcdFx0Y29uc3QgdTMyIG1hc2sgPSBQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikgXHUwMDNjXHUwMDNjIHNoaWZ0O1x0XHRcdFx0XFxcbitcdFx0Y29uc3QgdmFsX3R5cGUgdmFsX3RydW5jID0gKHZhbF90eXBlKSgobmV3X3ZhbF9leHByKVx0XHRcdFx0XFxcbitcdFx0XHRcdFx0ICAgXHUwMDI2IFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSk7XHRcdFx0XHRcXFxuK1x0XHR1MzIgcmV0eCwgcmM7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0dmFsX3R5cGUgbmV3X3ZhbF90eXBlO1x0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdGFzbSB2b2xhdGlsZSAoXHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcIjA6IGxyLncgJTAsICUyXFxuXCJcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCJhbmQgJTMsICUwLCAlNFxcblwiXHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFwic3JsICUzLCAlMywgJTVcXG5cIlx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHQjYXNtX29wIFwiICUzLCAlMywgJTZcXG5cIlx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcImFuZCAlMywgJTMsICU4XFxuXCJcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFwic2xsICUzLCAlMywgJTVcXG5cIlx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcImFuZCAlMSwgJTAsICU3XFxuXCJcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCJvciAlMSwgJTEsICUzXFxuXCJcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCJzYy53ICUxLCAlMSwgJTJcXG5cIlx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcImJuZXogJTEsIDBiXFxuXCJcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHQ6IFwiPVx1MDAyNnJcIihyZXR4KSwgXCI9XHUwMDI2clwiKHJjKSwgXCIrQVwiKCpwdHIzMiksIFwiPVx1MDAyNnJcIihuZXdfdmFsX3R5cGUpXHRcdFxcXG4rXHRcdFx0OiBcInJcIihtYXNrKSwgXCJyXCIoc2hpZnQpLCBcInJcIih2YWxfdHJ1bmMpLCBcInJcIih+bWFzayksXHRcdFx0XFxcbitcdFx0XHQgIFwiclwiKFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSlcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdDogXCJtZW1vcnlcIik7XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rfVxuK1xuKyNkZWZpbmUgUEVSQ1BVX09QXzhfMTYob3BfbmFtZSwgb3AsIGV4cHIsIGZpbmFsX29wKVx0XHRcdFxcXG4rXHRQRVJDUFVfOF8xNl9PUChvcF9uYW1lLCBvcCwgOCwgLmIsIHU4LCBleHByLCBmaW5hbF9vcCk7XHRcdFxcXG4rXHRQRVJDUFVfOF8xNl9PUChvcF9uYW1lLCBvcCwgMTYsIC5oLCB1MTYsIGV4cHIsIGZpbmFsX29wKVxuK1xuK1BFUkNQVV9PUF84XzE2KGFkZCwgYWRkLCB2YWwsIGFkZClcbitQRVJDUFVfT1BfOF8xNihhbmRub3QsIGFuZCwgfih2YWwpLCBhbmQpXG4rUEVSQ1BVX09QXzhfMTYob3IsIG9yLCB2YWwsIG9yKVxuK1xuKyNkZWZpbmUgUEVSQ1BVXzhfMTZfUkVUX09QKG5hbWUsIGFtb19pbnNuLCBzeiwgc2Z4LCB2YWxfdHlwZSwgbmV3X3ZhbF9leHByKVx0XHRcdFxcXG4rc3RhdGljIGlubGluZSB2YWxfdHlwZSBfX3BlcmNwdV8jI25hbWUjI19yZXR1cm5fYW1vX2Nhc2VfIyNzeih2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgdmFsKVx0XFxcbit7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19SSVNDVl9JU0FfWkFCSEEpIFx1MDAyNlx1MDAyNlx0XHRcdFx0XHRcdFxcXG4rXHRcdHJpc2N2X2hhc19leHRlbnNpb25fdW5saWtlbHkoUklTQ1ZfSVNBX0VYVF9aQUJIQSkpIHtcdFx0XHRcdFxcXG4rXHRcdHJlZ2lzdGVyIHZhbF90eXBlIHJldDtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0YXNtIHZvbGF0aWxlIChcImFtb1wiICNhbW9faW5zbiAjc2Z4IFwiICVbcmV0XSwgJVt2YWxdLCAlW3B0cl1cIlx0XHRcdFxcXG4rXHRcdFx0OiBbcHRyXSBcIitBXCIoKih2YWxfdHlwZSAqKXB0ciksIFtyZXRdIFwiPXJcIihyZXQpXHRcdFx0XHRcXFxuK1x0XHRcdDogW3ZhbF0gXCJyXCIoKHZhbF90eXBlKSgobmV3X3ZhbF9leHByKSBcdTAwMjYgUEVSQ1BVXzhfMTZfR0VUX01BU0soc3opKSlcdFxcXG4rXHRcdFx0OiBcIm1lbW9yeVwiKTtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0cmV0dXJuIHJldCArICh2YWxfdHlwZSkoKG5ld192YWxfZXhwcikgXHUwMDI2IFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSk7XHRcdFxcXG4rXHR9IGVsc2Uge1x0XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0dTMyICpwdHIzMiA9IFBFUkNQVV84XzE2X0dFVF9QVFIzMihwdHIpO1x0XHRcdFx0XHRcXFxuK1x0XHRjb25zdCB1bnNpZ25lZCBsb25nIHNoaWZ0ID0gUEVSQ1BVXzhfMTZfR0VUX1NISUZUKHB0cik7XHRcdFx0XHRcXFxuK1x0XHRjb25zdCB1MzIgbWFzayA9IChQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikgXHUwMDNjXHUwMDNjIHNoaWZ0KTtcdFx0XHRcdFxcXG4rXHRcdGNvbnN0IHUzMiBpbnZfbWFzayA9IH5tYXNrO1x0XHRcdFx0XHRcdFx0XFxcbitcdFx0Y29uc3QgdmFsX3R5cGUgdmFsX3RydW5jID0gKHZhbF90eXBlKSgobmV3X3ZhbF9leHByKVx0XHRcdFx0XFxcbitcdFx0XHRcdFx0ICAgXHUwMDI2IFBFUkNQVV84XzE2X0dFVF9NQVNLKHN6KSk7XHRcdFx0XHRcXFxuK1x0XHR1MzIgb2xkLCBuZXcsIHRtcDtcdFx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRhc20gdm9sYXRpbGUgKFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCIwOiBsci53ICUwLCAlM1xcblwiXHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFwiYW5kICUxLCAlMCwgJTRcXG5cIlx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcInNybCAlMSwgJTEsICU1XFxuXCJcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCJhZGQgJTEsICUxLCAlNlxcblwiXHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFwiYW5kICUxLCAlMSwgJTdcXG5cIlx0XHRcdFx0XHRcdFx0XFxcbitcdFx0XHRcInNsbCAlMSwgJTEsICU1XFxuXCJcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCJhbmQgJTIsICUwLCAlOFxcblwiXHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFwib3IgJTIsICUyLCAlMVxcblwiXHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFwic2MudyAlMiwgJTIsICUzXFxuXCJcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0XCJibmV6ICUyLCAwYlxcblwiXHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdFx0OiBcIj1cdTAwMjZyXCIob2xkKSwgXCI9XHUwMDI2clwiKHRtcCksIFwiPVx1MDAyNnJcIihuZXcpLCBcIitBXCIoKnB0cjMyKVx0XHRcdFxcXG4rXHRcdFx0OiBcInJcIihtYXNrKSwgXCJyXCIoc2hpZnQpLCBcInJcIih2YWxfdHJ1bmMpLCBcInJcIihQRVJDUFVfOF8xNl9HRVRfTUFTSyhzeikpLCBcXFxuK1x0XHRcdFwiclwiKGludl9tYXNrKVx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdDogXCJtZW1vcnlcIik7XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRcdHJldHVybiAodmFsX3R5cGUpKHRtcCBcdTAwM2VcdTAwM2Ugc2hpZnQpO1x0XHRcdFx0XHRcdFxcXG4rXHR9XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxcXG4rfVxuK1xuK1BFUkNQVV84XzE2X1JFVF9PUChhZGQsIGFkZCwgOCwgLmIsIHU4LCB2YWwpXG4rUEVSQ1BVXzhfMTZfUkVUX09QKGFkZCwgYWRkLCAxNiwgLmgsIHUxNiwgdmFsKVxuK1xuKyNkZWZpbmUgX3BjcF9wcm90ZWN0KG9wLCBwY3AsIC4uLilcdFx0XHRcdFx0XFxcbisoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuK1x0b3AocmF3X2NwdV9wdHIoXHUwMDI2KHBjcCkpLCBfX1ZBX0FSR1NfXyk7XHRcdFx0XHRcXFxuK1x0cHJlZW1wdF9lbmFibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuK30pXG4rXG4rI2RlZmluZSBfcGNwX3Byb3RlY3RfcmV0dXJuKG9wLCBwY3AsIGFyZ3MuLi4pXHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHR5cGVvZihwY3ApIF9fcmV0dmFsO1x0XHRcdFx0XHRcdFxcXG4rXHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuK1x0X19yZXR2YWwgPSAodHlwZW9mKHBjcCkpb3AocmF3X2NwdV9wdHIoXHUwMDI2KHBjcCkpLCAjI2FyZ3MpO1x0XFxcbitcdHByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTtcdFx0XHRcdFx0XFxcbitcdF9fcmV0dmFsO1x0XHRcdFx0XHRcdFx0XFxcbit9KVxuK1xuKyNkZWZpbmUgdGhpc19jcHVfcmVhZF8xKHBjcClcdFx0X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9yZWFkXzgsIHBjcClcbisjZGVmaW5lIHRoaXNfY3B1X3JlYWRfMihwY3ApXHRcdF9wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfcmVhZF8xNiwgcGNwKVxuKyNkZWZpbmUgdGhpc19jcHVfcmVhZF80KHBjcClcdFx0X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9yZWFkXzMyLCBwY3ApXG4rXG4rI2lmZGVmIENPTkZJR182NEJJVFxuKyNkZWZpbmUgdGhpc19jcHVfcmVhZF84KHBjcClcdFx0X3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9yZWFkXzY0LCBwY3ApXG4rI2VuZGlmXG4rXG4rI2RlZmluZSB0aGlzX2NwdV93cml0ZV8xKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X3dyaXRlXzgsIHBjcCwgKHVuc2lnbmVkIGxvbmcpdmFsKVxuKyNkZWZpbmUgdGhpc19jcHVfd3JpdGVfMihwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV93cml0ZV8xNiwgcGNwLCAodW5zaWduZWQgbG9uZyl2YWwpXG4rI2RlZmluZSB0aGlzX2NwdV93cml0ZV80KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X3dyaXRlXzMyLCBwY3AsICh1bnNpZ25lZCBsb25nKXZhbClcbitcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rI2RlZmluZSB0aGlzX2NwdV93cml0ZV84KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X3dyaXRlXzY0LCBwY3AsICh1bnNpZ25lZCBsb25nKXZhbClcbisjZW5kaWZcbitcbisjZGVmaW5lIHRoaXNfY3B1X2FkZF8xKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV84LCBwY3AsIHZhbClcbisjZGVmaW5lIHRoaXNfY3B1X2FkZF8yKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpXG4rI2RlZmluZSB0aGlzX2NwdV9hZGRfNChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hZGRfYW1vX2Nhc2VfMzIsIHBjcCwgdmFsKVxuK1xuKyNpZmRlZiBDT05GSUdfNjRCSVRcbisjZGVmaW5lIHRoaXNfY3B1X2FkZF84KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FkZF9hbW9fY2FzZV82NCwgcGNwLCB2YWwpXG4rI2VuZGlmXG4rXG4rI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzEocGNwLCB2YWwpXHRcdFxcXG4rX3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzgsIHBjcCwgdmFsKVxuK1xuKyNkZWZpbmUgdGhpc19jcHVfYWRkX3JldHVybl8yKHBjcCwgdmFsKVx0XHRcXFxuK19wY3BfcHJvdGVjdF9yZXR1cm4oX19wZXJjcHVfYWRkX3JldHVybl9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpXG4rXG4rI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzQocGNwLCB2YWwpXHRcdFxcXG4rX3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzMyLCBwY3AsIHZhbClcbitcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rI2RlZmluZSB0aGlzX2NwdV9hZGRfcmV0dXJuXzgocGNwLCB2YWwpXHRcdFxcXG4rX3BjcF9wcm90ZWN0X3JldHVybihfX3BlcmNwdV9hZGRfcmV0dXJuX2Ftb19jYXNlXzY0LCBwY3AsIHZhbClcbisjZW5kaWZcbitcbisjZGVmaW5lIHRoaXNfY3B1X2FuZF8xKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV84LCBwY3AsIH4odmFsKSlcbisjZGVmaW5lIHRoaXNfY3B1X2FuZF8yKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV8xNiwgcGNwLCB+KHZhbCkpXG4rI2RlZmluZSB0aGlzX2NwdV9hbmRfNChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9hbmRub3RfYW1vX2Nhc2VfMzIsIHBjcCwgdmFsKVxuK1xuKyNpZmRlZiBDT05GSUdfNjRCSVRcbisjZGVmaW5lIHRoaXNfY3B1X2FuZF84KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X2FuZG5vdF9hbW9fY2FzZV82NCwgcGNwLCB2YWwpXG4rI2VuZGlmXG4rXG4rI2RlZmluZSB0aGlzX2NwdV9vcl8xKHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzgsIHBjcCwgdmFsKVxuKyNkZWZpbmUgdGhpc19jcHVfb3JfMihwY3AsIHZhbClcdF9wY3BfcHJvdGVjdChfX3BlcmNwdV9vcl9hbW9fY2FzZV8xNiwgcGNwLCB2YWwpXG4rI2RlZmluZSB0aGlzX2NwdV9vcl80KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzMyLCBwY3AsIHZhbClcbitcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rI2RlZmluZSB0aGlzX2NwdV9vcl84KHBjcCwgdmFsKVx0X3BjcF9wcm90ZWN0KF9fcGVyY3B1X29yX2Ftb19jYXNlXzY0LCBwY3AsIHZhbClcbisjZW5kaWZcbitcbisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfMShwY3AsIHZhbClcdF9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbClcbisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfMihwY3AsIHZhbClcdF9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbClcbisjZGVmaW5lIHRoaXNfY3B1X3hjaGdfNChwY3AsIHZhbClcdF9wY3BfcHJvdGVjdF9yZXR1cm4oeGNoZ19yZWxheGVkLCBwY3AsIHZhbClcbitcbisjaWZkZWYgQ09ORklHXzY0QklUXG4rI2RlZmluZSB0aGlzX2NwdV94Y2hnXzgocGNwLCB2YWwpXHRfcGNwX3Byb3RlY3RfcmV0dXJuKHhjaGdfcmVsYXhlZCwgcGNwLCB2YWwpXG4rI2VuZGlmXG4rXG4rI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnXzEocGNwLCBvLCBuKVx0X3BjcF9wcm90ZWN0X3JldHVybihjbXB4Y2hnX3JlbGF4ZWQsIHBjcCwgbywgbilcbisjZGVmaW5lIHRoaXNfY3B1X2NtcHhjaGdfMihwY3AsIG8sIG4pXHRfcGNwX3Byb3RlY3RfcmV0dXJuKGNtcHhjaGdfcmVsYXhlZCwgcGNwLCBvLCBuKVxuKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ180KHBjcCwgbywgbilcdF9wY3BfcHJvdGVjdF9yZXR1cm4oY21weGNoZ19yZWxheGVkLCBwY3AsIG8sIG4pXG4rXG4rI2lmZGVmIENPTkZJR182NEJJVFxuKyNkZWZpbmUgdGhpc19jcHVfY21weGNoZ184KHBjcCwgbywgbilcdF9wY3BfcHJvdGVjdF9yZXR1cm4oY21weGNoZ19yZWxheGVkLCBwY3AsIG8sIG4pXG4rXG4rI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnNjQocGNwLCBvLCBuKVx0dGhpc19jcHVfY21weGNoZ184KHBjcCwgbywgbilcbisjZW5kaWZcbitcbisjaWZkZWYgc3lzdGVtX2hhc19jbXB4Y2hnMTI4XG4rI2RlZmluZSB0aGlzX2NwdV9jbXB4Y2hnMTI4KHBjcCwgbywgbilcdFx0XHRcdFx0XFxcbisoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHR1MTI4IHJldF9fO1x0XHRcdFx0XHRcdFx0XFxcbitcdHR5cGVvZihwY3ApICpwdHJfXztcdFx0XHRcdFx0XHRcXFxuK1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpO1x0XHRcdFx0XHRcXFxuK1x0cHRyX18gPSByYXdfY3B1X3B0cihcdTAwMjYocGNwKSk7XHRcdFx0XHRcdFxcXG4rXHRpZiAoc3lzdGVtX2hhc19jbXB4Y2hnMTI4KCkpXHRcdFx0XHRcdFxcXG4rXHRcdHJldF9fID0gY21weGNoZzEyOF9sb2NhbChwdHJfXywgKG8pLCAobikpO1x0XHRcXFxuK1x0ZWxzZVx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0XHRyZXRfXyA9IHRoaXNfY3B1X2dlbmVyaWNfY21weGNoZyhwY3AsIChvKSwgKG4pKTtcdFxcXG4rXHRwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7XHRcdFx0XHRcdFxcXG4rXHRyZXRfXztcdFx0XHRcdFx0XHRcdFx0XFxcbit9KVxuKyNlbmRpZlxuK1xuKyNkZWZpbmUgX19teV9jcHVfb2Zmc2V0ICgoKHN0cnVjdCB0aHJlYWRfaW5mbyAqKWN1cnJlbnQpLVx1MDAzZXBjcHVfb2Zmc2V0KVxuK1xuKyNpbmNsdWRlIFx1MDAzY2FzbS1nZW5lcmljL3BlcmNwdS5oXHUwMDNlXG4rXG4rI2VuZGlmIC8qIF9fQVNNX1BFUkNQVV9IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcbmluZGV4IDBlNzFlYjgyZjkyMGNhLi43MzNiNmNkMzA2ZTQwZiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmhcbkBAIC04OCw2ICs4OCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2l0Y2hfdG9fZW52Y2ZnKHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dClcbiBcdFx0XHQ6OiBcInJcIiAobmV4dC1cdTAwM2V0aHJlYWQuZW52Y2ZnKSA6IFwibWVtb3J5XCIpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgX19zd2l0Y2hfdG9fcGNwdV9vZmZzZXQoc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxuK3tcbisjaWZkZWYgQ09ORklHX1NNUFxuK1x0bmV4dC1cdTAwM2V0aHJlYWRfaW5mby5wY3B1X29mZnNldCA9IF9fbXlfY3B1X29mZnNldDtcbisjZW5kaWZcbit9XG4rXG4gZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICosXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICopO1xuIFxuQEAgLTEyMiw2ICsxMjksNyBAQCBkbyB7XHRcdFx0XHRcdFx0XHRcXFxuIFx0aWYgKHN3aXRjaF90b19zaG91bGRfZmx1c2hfaWNhY2hlKF9fbmV4dCkpXHRcXFxuIFx0XHRsb2NhbF9mbHVzaF9pY2FjaGVfYWxsKCk7XHRcdFxcXG4gXHRfX3N3aXRjaF90b19lbnZjZmcoX19uZXh0KTtcdFx0XHRcXFxuK1x0X19zd2l0Y2hfdG9fcGNwdV9vZmZzZXQoX19uZXh0KTtcdFx0XFxcbiBcdCgobGFzdCkgPSBfX3N3aXRjaF90byhfX3ByZXYsIF9fbmV4dCkpO1x0XHRcXFxuIH0gd2hpbGUgKDApXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oXG5pbmRleCA1NTAxOWZkZmE5ZWNhYS4uZjEwYmE2MmI2MTAxNjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaFxuQEAgLTUzLDYgKzUzLDcgQEBcbiBzdHJ1Y3QgdGhyZWFkX2luZm8ge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRmbGFncztcdFx0LyogbG93IGxldmVsIGZsYWdzICovXG4gXHRpbnQgICAgICAgICAgICAgICAgICAgICBwcmVlbXB0X2NvdW50OyAgLyogMD1cdTAwM2VwcmVlbXB0aWJsZSwgXHUwMDNjMD1cdTAwM2VCVUcgKi9cbitcdGludFx0XHRcdGNwdTtcbiBcdC8qXG4gXHQgKiBUaGVzZSBzdGFjayBwb2ludGVycyBhcmUgb3ZlcndyaXR0ZW4gb24gZXZlcnkgc3lzdGVtIGNhbGwgb3JcbiBcdCAqIGV4Y2VwdGlvbi4gIFNQIGlzIGFsc28gc2F2ZWQgdG8gdGhlIHN0YWNrIGl0IGNhbiBiZSByZWNvdmVyZWQgd2hlblxuQEAgLTYwLDggKzYxLDggQEAgc3RydWN0IHRocmVhZF9pbmZvIHtcbiBcdCAqL1xuIFx0bG9uZ1x0XHRcdGtlcm5lbF9zcDtcdC8qIEtlcm5lbCBzdGFjayBwb2ludGVyICovXG4gXHRsb25nXHRcdFx0dXNlcl9zcDtcdC8qIFVzZXIgc3RhY2sgcG9pbnRlciAqL1xuLVx0aW50XHRcdFx0Y3B1O1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRzeXNjYWxsX3dvcms7XHQvKiBTWVNDQUxMX1dPUktfIGZsYWdzICovXG4rXHR1bnNpZ25lZCBsb25nXHRcdHBjcHVfb2Zmc2V0O1xuICNpZmRlZiBDT05GSUdfU0hBRE9XX0NBTExfU1RBQ0tcbiBcdHZvaWRcdFx0XHQqc2NzX2Jhc2U7XG4gXHR2b2lkXHRcdFx0KnNjc19zcDtcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xuaW5kZXggYTc1ZjBjZmVhMWU5ZmEuLjIwZDQ2YzI4ZmRkZTk3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xuKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvYXNtLW9mZnNldHMuY1xuQEAgLTM4LDYgKzM4LDcgQEAgdm9pZCBhc21fb2Zmc2V0cyh2b2lkKVxuIFx0T0ZGU0VUKFRBU0tfVEhSRUFEX1NVTSwgdGFza19zdHJ1Y3QsIHRocmVhZC5zdW0pO1xuIFxuIFx0T0ZGU0VUKFRBU0tfVElfQ1BVLCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8uY3B1KTtcbitcdE9GRlNFVChUQVNLX1RJX1BDUFVfT0ZGU0VULCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8ucGNwdV9vZmZzZXQpO1xuIFx0T0ZGU0VUKFRBU0tfVElfUFJFRU1QVF9DT1VOVCwgdGFza19zdHJ1Y3QsIHRocmVhZF9pbmZvLnByZWVtcHRfY291bnQpO1xuIFx0T0ZGU0VUKFRBU0tfVElfS0VSTkVMX1NQLCB0YXNrX3N0cnVjdCwgdGhyZWFkX2luZm8ua2VybmVsX3NwKTtcbiBcdE9GRlNFVChUQVNLX1RJX1VTRVJfU1AsIHRhc2tfc3RydWN0LCB0aHJlYWRfaW5mby51c2VyX3NwKTtcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zbXBib290LmNcbmluZGV4IGY2ZWY1NzkzMGI1MGE4Li43ODc2ODU0ZDE2Mjc5MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuY1xuKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvc21wYm9vdC5jXG5AQCAtMTkxLDYgKzE5MSw3IEBAIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRpZGxlKVxuIHtcbiBcdGludCByZXQ7XG4gXHR0aWRsZS1cdTAwM2V0aHJlYWRfaW5mby5jcHUgPSBjcHU7XG4rXHR0aWRsZS1cdTAwM2V0aHJlYWRfaW5mby5wY3B1X29mZnNldCA9IHBlcl9jcHVfb2Zmc2V0KGNwdSk7XG4gXG4gXHRyZXQgPSBzdGFydF9zZWNvbmRhcnlfY3B1KGNwdSwgdGlkbGUpO1xuIFx0aWYgKCFyZXQpIHtcbkBAIC0yMDgsNiArMjA5LDExIEBAIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRpZGxlKVxuIH1cbiAjZW5kaWZcbiBcbit2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKVxuK3tcbitcdF9fbXlfY3B1X29mZnNldCA9IHBlcl9jcHVfb2Zmc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSk7XG4rfVxuK1xuIHZvaWQgX19pbml0IHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKVxuIHtcbiB9XG5AQCAtMjMzLDYgKzIzOSw4IEBAIGFzbWxpbmthZ2UgX192aXNpYmxlIHZvaWQgc21wX2NhbGxpbih2b2lkKVxuIFx0bW1ncmFiKG1tKTtcbiBcdGN1cnJlbnQtXHUwMDNlYWN0aXZlX21tID0gbW07XG4gXG4rXHRfX215X2NwdV9vZmZzZXQgPSBwZXJfY3B1X29mZnNldChzbXBfcHJvY2Vzc29yX2lkKCkpO1xuK1xuICNpZmRlZiBDT05GSUdfSE9UUExVR19QQVJBTExFTFxuIFx0Y3B1aHBfYXBfc3luY19hbGl2ZSgpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5pbmRleCBjMDNjMWRlMTZiNzlhYy4uZWFiOTNkNTI1OGU5ZTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG4rKysgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtMTM5NSwxNSArMTM5NSw4IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHRcdGlmIChyZCAhPSBycylcbiBcdFx0XHRcdGVtaXRfbXYocmQsIHJzLCBjdHgpO1xuICNpZmRlZiBDT05GSUdfU01QXG4tXHRcdFx0LyogTG9hZCBjdXJyZW50IENQVSBudW1iZXIgaW4gVDEgKi9cbi1cdFx0XHRlbWl0X2x3KFJWX1JFR19UMSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBjcHUpLFxuK1x0XHRcdGVtaXRfbGQoUlZfUkVHX1QxLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHBjcHVfb2Zmc2V0KSxcbiBcdFx0XHRcdFJWX1JFR19UUCwgY3R4KTtcbi1cdFx0XHQvKiBMb2FkIGFkZHJlc3Mgb2YgX19wZXJfY3B1X29mZnNldCBhcnJheSBpbiBUMiAqL1xuLVx0XHRcdGVtaXRfYWRkcihSVl9SRUdfVDIsICh1NjQpXHUwMDI2X19wZXJfY3B1X29mZnNldCwgZXh0cmFfcGFzcywgY3R4KTtcbi1cdFx0XHQvKiBHZXQgYWRkcmVzcyBvZiBfX3Blcl9jcHVfb2Zmc2V0W2NwdV0gaW4gVDEgKi9cbi1cdFx0XHRlbWl0X3NoM2FkZChSVl9SRUdfVDEsIFJWX1JFR19UMSwgUlZfUkVHX1QyLCBjdHgpO1xuLVx0XHRcdC8qIExvYWQgX19wZXJfY3B1X29mZnNldFtjcHVdIGluIFQxICovXG4tXHRcdFx0ZW1pdF9sZChSVl9SRUdfVDEsIDAsIFJWX1JFR19UMSwgY3R4KTtcbiBcdFx0XHQvKiBBZGQgdGhlIG9mZnNldCB0byBSZCAqL1xuIFx0XHRcdGVtaXRfYWRkKHJkLCByZCwgUlZfUkVHX1QxLCBjdHgpO1xuICNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6Mzk6MDQuMjEyMzk4MjY3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyNzAzMTAzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUklTQy1WIEFyY2hpdGVjdHVyZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLiBJdCdzIHRvdWNoaW5nIG9uIGhvdyBwZXItQ1BVIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGludGVyZXN0IGJlY2F1c2UgdGhhdCdzIG9mdGVuIGEgc291cmNlIG9mIHN1YnRsZSwgaGFyZC10by1maW5kIGJ1Z3MgYW5kIHJhY2UgY29uZGl0aW9ucy4gSSBzZWUgaXQncyBpbnRyb2R1Y2luZyB0aGlzIGBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BlcmNwdS5oYCBmaWxlLCBvcHRpbWl6aW5nIHRoZSBwZXItQ1BVIG9wZXJhdGlvbnMuIFRoYXQncyBhIGdvb2Qgc2lnbiB0aGV5J3JlIHRyeWluZyB0byBpbXByb3ZlIHRoaW5ncywgYnV0IGl0IGFsc28gbWVhbnMgdGhlcmUncyBhIGhpZ2hlciBjaGFuY2Ugb2YgaW50cm9kdWNpbmcgaXNzdWVzIGR1cmluZyB0aGUgb3B0aW1pemF0aW9uLlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgdXBkYXRpbmcgc2V2ZXJhbCBpbmNsdWRlIGZpbGVzLCBsaWtlIGBhc20uaGAsIGBpby5oYCwgYHN3aXRjaF90by5oYCwgYW5kIGB0aHJlYWRfaW5mby5oYCwgYWxvbmcgd2l0aCBrZXJuZWwgY29kZSBpbiBgYXNtLW9mZnNldHMuY2AgYW5kIGBzbXBib290LmNgLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgcmV3b3JraW5nIHRoZSBvZmZzZXRzIHVzZWQgdG8gYWNjZXNzIHBlci1DUFUgZGF0YSwgcmVwbGFjaW5nIHNvbWUgY2FsY3VsYXRpb25zIHdpdGggYFRBU0tfVElfUENQVV9PRkZTRVQodHApYC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgY2hhbmdlcyBmb3IgSS9PIHBvcnQgYWNjZXNzIHdpdGggYFBDSV9JT19BRERSKGFkZHIpYCBhbmQgZ3VhcmRlZCBJL08gZnVuY3Rpb25zLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLCBvcHRpbWl6aW5nIGhvdyB0aGVzZSBwZXItQ1BVIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQgYW5kIHBvdGVudGlhbGx5IEkvTyBoYW5kbGluZyBhcyB3ZWxsLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgZmFjdCB0aGF0IGl0J3MgYWx0ZXJpbmcgY29yZSBhcmNoaXRlY3R1cmUgbG9naWMgcmVsYXRlZCB0byBwZXItQ1BVIG9wZXJhdGlvbnMsIEkvTyBhY2Nlc3MsIGFuZCBldmVuIHRoZSBCUEYgSklUIGNvbXBpbGVyIGlzIGVub3VnaCB0byB3YXJyYW50IHRob3JvdWdoIGludmVzdGlnYXRpb24uIEl0J3MgdG91Y2hpbmcgc29tZSBhcmVhcyB0aGF0IGFyZSBrZXkgdG8gdGhlIHN5c3RlbSdzIHBlcmZvcm1hbmNlLCBzdGFiaWxpdHksIGFuZCBzZWN1cml0eS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBhY3R1YWxseSByZWFjaGFibGUgdGhvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBlbmFibGVkIHRvIHJ1biB0aGlzIGNvZGUgYW5kIHZlcmlmeSB0aGlzIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLiBMb29raW5nIGF0IHRoZSBjb25maWdzLCBJIHNlZSB0aGF0IHRoaXMgY29kZSBpcyB1c2luZyBgQ09ORklHX0hBU19JT1BPUlRgLCBgQ09ORklHX1JJU0NWX0lTQV9aQUJIQWAsIGBDT05GSUdfU01QYCBhbmQgYENPTkZJR182NEJJVGAuXG5cbk5vdywgZGlnZ2luZyBkZWVwZXIsIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhhdCBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AgZmlsZS4gSXQncyB0aGUgQlBGIEpJVCBmb3IgUklTQy1WIDY0LWJpdCwgYW5kIGlmIHRoZXkgYXJlIG1vZGlmeWluZyBpdCwgdGhlcmUncyB0aGUgcG90ZW50aWFsIGZvciBzb21lIGludGVyZXN0aW5nIHRoaW5ncyB0byB0dXJuIHVwLCB3aGljaCBjb3VsZCBhZmZlY3QgdGhlIHN5c3RlbSBwZXJmb3JtYW5jZSBvciBwb3NzaWJseSBldmVuIHNlY3VyaXR5LiBHaXZlbiB0aGF0LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBCUEYgSklUIGNvZGUgZm9yIFJJU0MtViBhbmQgcGVyLUNQVSBvcGVyYXRpb25zLiBPa2F5LCBzbyBJIHNlZSBpdCBtb2RpZmllcyBgYnBmX2ppdF9lbWl0X2luc25gLiBUbyBiZSBjZXJ0YWluLCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhhdCBgYnBmX2ppdF9lbWl0X2luc25gIGV4aXN0cyB3aXRoaW4gdGhlIGZpbGUgd2l0aCBhIHNpbXBsZSBgZ3JlcGAgY29tbWFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyNiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjE0LjQ4MjcxMzYwMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQyMjIwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzI9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjgtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzY5OmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM3MC1cXHRcXHQgICAgICBib29sIGV4dHJhX3Bhc3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjE0LjczNjk0NTU5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExOTYyMDQ1NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTGF0ZXN0IENvZGUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgc29tZSBrZXkgbW9kaWZpY2F0aW9ucyBpbiB0aGlzIHBhdGNoLiBUaGUgYGJwZl9qaXRfZW1pdF9pbnNuYCBmdW5jdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcgZnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBvcHRpbWl6YXRpb24gcGVyc3BlY3RpdmUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aG9zZSBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBhbmQgaW1wYWN0IG9uIHRoZSBCUEYgSklUIGNvbXBpbGVyLiBBIGNsb3NlciBsb29rIGF0IGhvdyBpbnN0cnVjdGlvbiBlbWlzc2lvbiBpcyBiZWluZyBoYW5kbGVkIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIGluY2x1c2lvbiBvZiBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZXJjcHUuaGAuIEltcGxlbWVudGluZyBgdGhpc19jcHVfYWRkXzFgLCBgdGhpc19jcHVfcmVhZF8xYCwgYW5kIHRoZSBsaWtlIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24uIFRoZXNlIGlubGluZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgZm9yIGVmZmljaWVudCBwZXItQ1BVIGRhdGEgYWNjZXNzLCBhbmQgdGhlaXIgcHJlc2VuY2Ugc3VnZ2VzdHMgYSBkZWxpYmVyYXRlIGVmZm9ydCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBjb25zaXN0ZW5jeSB3aXRoaW4gdGhlIFJJU0MtViBrZXJuZWwuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbnNpZGVyIHRoZSB1c2UgY2FzZSAtIGlzIGl0IGZvciBCUEYgZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlIGluaGVyZW50bHkgaW52b2x2ZXMgZGlmZmVyZW5jZXMgZnJvbSBvdGhlciBhcmNoaXRlY3R1cmVzLCBzbyBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB3ZWxsIHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW4sIGNvbXBhcmVkIHRvIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSBpbiBvdGhlciBhcmNoaXRlY3R1cmVzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBDT05GSUdfUklTQ1ZfSVNBX1pBQkhBYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdGFyZ2V0IElTQS4gSSdtIGFzc3VtaW5nIHRoaXMgcmVsYXRlcyB0byB0aGUgbmV3IGluc3RydWN0aW9ucywgb3IgYXQgbGVhc3QgaG93IHRoZSBwYXRjaCBpcyBpbnRlbmRlZCB0byB3b3JrLiBJIG5lZWQgdG8ga25vdyBob3cgdGhlIGNvZGUgZGVhbHMgd2l0aCB0aGUgcG90ZW50aWFsIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhpcyBJU0EgZXh0ZW5zaW9uLiBJdCdzIGxpa2VseSB0aGF0IHBhcnRzIG9mIHRoZSBuZXcgY29kZSBwYXRocyBhcmUgb25seSBhY3RpdmUgaWYgdGhpcyBpcyBlbmFibGVkLCB3aGljaCBpbXBsaWVzIHNvbWUgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucy4gVGhpcyB3aWxsIGNsYXJpZnkgaG93IHRoaXMgcGF0Y2ggaW50ZWdyYXRlcyB3aXRoIHRoZSB3aWRlciBSSVNDLVYgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI4MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjI2LjY5ODk5NTEzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI0Mjc3MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSSVNDVl9JU0FfWkFCSEFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZz02Nzc9Y29uZmlnIFRPT0xDSEFJTl9IQVNfWkFCSEFcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy02ODMtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjY4NDpjb25maWcgUklTQ1ZfSVNBX1pBQkhBXFxuYXJjaC9yaXNjdi9LY29uZmlnLTY4NS1cXHRib29sIFxcXCJaYWJoYSBleHRlbnNpb24gc3VwcG9ydCBmb3IgYXRvbWljIGJ5dGUvaGFsZndvcmQgb3BlcmF0aW9uc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6Mzk6MzEuNjIzMjg1OTc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM5OTQ4MzYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRXZhbHVhdGluZyBSSVNDLVYgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBpdCBsb29rcyBsaWtlIGBSSVNDVl9JU0FfWkFCSEFgIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbSBpbW1lZGlhdGVseSBsZWFuaW5nIHRvd2FyZHMgZW5hYmxpbmcgaXQ7IGl0J3MgbGlrZWx5IGFkZGluZyBzb21lIGFyY2hpdGVjdHVyYWwgc3VwcG9ydC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zLCBidXQgdXN1YWxseSwgdGhlc2UgSVNBIGV4dGVuc2lvbnMgYXJlIHRoZXJlIGZvciBhIHJlYXNvbiBhbmQgbGlrZWx5IHJlcHJlc2VudCBhIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uYWxpdHkgaW1wcm92ZW1lbnQuIFxuXG5BbmQgSSBzZWUgYENPTkZJR19IQVNfSU9QT1JUYCBsaXN0ZWQgYXMgd2VsbC4gSG1tLCB0aGF0IHN1Z2dlc3RzIHNvbWUga2luZCBvZiBJL08gcG9ydCBzdXBwb3J0IGlzIGJlaW5nIHVzZWQgc29tZXdoZXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgaXMgc29tZXRoaW5nIHdlIGNhbiwgYW5kIHNob3VsZCwgZW5hYmxlIGFzIHdlbGwuIEl0IGNvdWxkIGJlIGNydWNpYWwgZm9yIG91ciBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSByZWxldmFudCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTozOTozOC4wMjI3NzYyNDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNDc5Njk1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEFTX0lPUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWc9Mzc1PWNvbmZpZyBIQVNfSU9NRU1cXG4tLVxcbmxpYi9LY29uZmlnLTM3OS1cXG5saWIvS2NvbmZpZzozODA6Y29uZmlnIEhBU19JT1BPUlRcXG5saWIvS2NvbmZpZy0zODEtXFx0Ym9vbFxcbmxpYi9LY29uZmlnLTM4Mi1cXG5saWIvS2NvbmZpZzozODM6Y29uZmlnIEhBU19JT1BPUlRfTUFQXFxubGliL0tjb25maWctMzg0LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6Mzk6NDIuNzQ3NTgzMTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njg1ODc4NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBIQVNfSU9QT1JUYCBDb25maWd1cmF0aW9uIE9wdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEhBU19JT1BPUlRgIGZsYWcsIGFuZCBpdCdzIGZsYWdnZWQgYXMgYSBib29sZWFuIHdpdGhvdXQgYSBkaXJlY3QgcHJvbXB0LiBUaGF0IG1lYW5zIGl0J3MgcHJvYmFibHkgZ2V0dGluZyBzZXQgYnkgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIEkgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQgbXlzZWxmLiBBY3R1YWxseSwgdGhlIHdheSBJIHVuZGVyc3RhbmQgaXQsIGBIQVNfSU9QT1JUYCB1c3VhbGx5IHRpZXMgaW4gd2l0aCBzb21ldGhpbmcgbGlrZSBQQ0kgb3IgYSBzaW1pbGFyIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIHNvIGl0J3MgbGlrZWx5IGJlaW5nIHNlbGVjdGVkIGFzIGEgZGVwZW5kZW5jeS4gSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBgYXJjaC9yaXNjdi9LY29uZmlnYCBmaWxlIHRvIGNvbmZpcm0uIExldCBtZSBnbyB0YWtlIGEgbG9vayB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTozOTo0Ny40MzM0NjY5NjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzE4NjgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSEFTX0lPUE9SVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMjgtXFx0c2VsZWN0IEhBUkRJUlFTX1NXX1JFU0VORFxcbmFyY2gvcmlzY3YvS2NvbmZpZzoxMjk6XFx0c2VsZWN0IEhBU19JT1BPUlQgaWYgTU1VXFxuYXJjaC9yaXNjdi9LY29uZmlnLTEzMC1cXHRzZWxlY3QgSEFWRV9BTElHTkVEX1NUUlVDVF9QQUdFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjQ3LjY1MDY3MDE2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDcxMTU3MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyB0aGUgQlBGIEpJVCBDb21waWxhdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBCUEYgSklUIGNvbXBpbGF0aW9uIGZvciBSSVNDLVYuIEZpcnN0LCBJJ20gY2hlY2tpbmcgaWYgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKE1NVSkgaXMgYWN0aXZlLCBiZWNhdXNlIHRoYXQncyBhIGtleSBjb25kaXRpb24gaGVyZS4gTm93LCBJIHNob3VsZCBtYWtlIHN1cmUgd2UndmUgZ290IGBDT05GSUdfUklTQ1ZfSVNBX1pBQkhBYCBlbmFibGVkIOKAkyB0aGF0J3MgbGlrZWx5IGltcG9ydGFudC4gSG1tLCB3aGF0IGFib3V0IGBDT05GSUdfU01QYCBhbmQgYENPTkZJR182NEJJVGA/IFRoZXkgYXJlIHVzdWFsbHkgZW5hYmxlZCwgYW5kIEknZCBiZSBzdXJwcmlzZWQgaWYgdGhleSB3ZXJlbid0IGluIHRoaXMgY29udGV4dC5cblxuTm93LCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgaG9uaW5nIGluIG9uIGBicGZfaml0X2VtaXRfaW5zbmAsIHdoaWNoIGlzIGluIGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYC4gSSBhbHJlYWR5IGtub3cgdGhhdCBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEkgY2FuIHByb2JhYmx5IGRpcmVjdCBteSBlZmZvcnRzIHRoZXJlLCBvciBwZXJoYXBzIEkgY291bGQgbG9vayBhdCBgYnBmX2ludF9qaXRfY29tcGlsZWAgd2hpY2ggbGlrZWx5IGNhbGxzIGBicGZfaml0X2VtaXRfaW5zbmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTQ2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjUyLjcyMTgzMTAzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4MTg1MjcxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjUzLjAzMDAzMjk3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDc2NjY2MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6XG5cbioqRmluZGluZyB0aGUgQlBGIEpJVCBFbnRyeSBQb2ludCBpbiBSSVNDLVYqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlciAoQlBGKSBKdXN0LUluLVRpbWUgKEpJVCkgY29tcGlsZXIgZ2V0cyBpdHMgaG9va3MgaW50byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gVGhpcyBsaWtlbHkgbWVhbnMgSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGZ1bmN0aW9uIG9yIGZ1bmN0aW9ucyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgdGFraW5nIEJQRiBieXRlY29kZSBhbmQgdHJhbnNsYXRpbmcgaXQgaW50byBuYXRpdmUgUklTQy1WIGluc3RydWN0aW9ucy4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSB0eXBpY2FsIEpJVCBpbnRlZ3JhdGlvbiBwb2ludHMuIFRoZXJlJ3MgcHJvYmFibHkgYSBkcml2ZXIgb3IgbW9kdWxlIGludm9sdmVkLCBhbmQgdGhhdCdzIGxpa2VseSB0aGUgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHN5c3RlbSBjYWxsIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgaG93IGVCUEYgcHJvZ3JhbXMgYXJlIGxvYWRlZCwgdmVyaWZpZWQsIGFuZCBldmVudHVhbGx5IGV4ZWN1dGVkLiBJIHN1c3BlY3QgSSdsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBtZW1vcnkgbWFwcGluZyBvciBjb2RlIGdlbmVyYXRpb24gYW5kIGV4ZWN1dGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZi4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHNwZWNpZmljIFJJU0MtVi1yZWxhdGVkIGltcGxlbWVudGF0aW9ucyB3aXRoaW4gdGhhdCBjb2RlIHRvbywgaW4gY2FzZSB0aGVyZSBhcmUgdW5pcXVlIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuIE15IGdvYWwgaXMgdG8gZmluZCB0aGUgZnVuY3Rpb24sIGFuZCBhbHNvIGdldCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdXJyb3VuZGluZyBjb250cm9sIGZsb3csIHdoaWNoIHdpbGwgaW52b2x2ZSBzb21lIHNlcmlvdXMgY29kZSBkaXZpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTg2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6Mzk6NTkuMTA2NzA0MjQzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY1MTkzODIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl8uKl9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjM5OjU5LjI5MzIzNjY0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE1MjE3MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTG9jYXRpbmcgdGhlIEpJVCBDb21waWxhdGlvbiBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgc2hvdWxkIHByb2JhYmx5IGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgbG9va2luZyBmb3IgdGhlIGBicGZfaml0X2NvbXBpbGVgIGZ1bmN0aW9uLCBvciBzb21ldGhpbmcgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIHdpdGhpbiB0aGUgZmlsZS4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCB3aGVuIGludmVzdGlnYXRpbmcgQlBGIEpJVCBjb21waWxhdGlvbiBiZWNhdXNlIGl0J3MgdGhlIGNvcmUgb2YgdGhlIHByb2Nlc3MuIEknbSBleHBlY3RpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlIHRvIG1vdmUgZm9yd2FyZCBmcm9tIGFuZCBnaXZlIG1lIGFuIGltbWVkaWF0ZSBzZW5zZSBvZiB0aGUgZW52aXJvbm1lbnQgSSdtIGxvb2tpbmcgYXQuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGZpcnN0IHN0ZXAgYW5kIG5vdCBhIHdpbGQgZ29vc2UgY2hhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzAyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NDA6MDIuNzA4NDU3MzE0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA3MTU4MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzI9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjgtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzY5OmludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM3MC1cXHRcXHQgICAgICBib29sIGV4dHJhX3Bhc3MpXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE4MTEtXFx0XFx0bWFya19jYWxsKGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxODEyOlxcdFxcdHJldCA9IGJwZl9qaXRfZ2V0X2Z1bmNfYWRkcihjdHgtXFx1MDAzZXByb2csIGluc24sIGV4dHJhX3Bhc3MsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xODEzLVxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2YWRkciwgXFx1MDAyNmZpeGVkX2FkZHIpO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xODIwLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTgyMTpcXHRcXHRcXHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChjdHgtXFx1MDAzZXByb2csIGluc24pO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTgyMi1cXHRcXHRcXHRpZiAoIWZtKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTk0LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTk5NTp2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZylcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5OTYte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDkyLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjA5Mzp2b2lkIGJwZl9qaXRfYnVpbGRfZXBpbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMDk0LXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjA5Ny1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIwOTg6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2tmdW5jX2NhbGwodm9pZClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIwOTkte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTAyLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjEwMzpib29sIGJwZl9qaXRfc3VwcG9ydHNfcHRyX3hjaGcodm9pZClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMDQte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTA3LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjEwODpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmEodm9pZClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMDkte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTEyLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjExMzpib29sIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihzdHJ1Y3QgYnBmX2luc24gKmluc24sIGJvb2wgaW5fYXJlbmEpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTE0LXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzMS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxMzI6Ym9vbCBicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKHZvaWQpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTMzLXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMjEzNi1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjIxMzc6Ym9vbCBicGZfaml0X2lubGluZXNfaGVscGVyX2NhbGwoczMyIGltbSlcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxMzgte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0yMTQ4LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MjE0OTpib29sIGJwZl9qaXRfc3VwcG9ydHNfZnNlc3Npb24odm9pZClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTIxNTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo0MDowMi44ODkxODE2NjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NjA2NjQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgQlBGIEpJVCBDb21waWxhdGlvbiBQYXRoKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBNeSBtZW50YWwgbWFwIGltbWVkaWF0ZWx5IGhvbWVzIGluIG9uIGBicGZfaml0X2VtaXRfaW5zbmAgYXMgdGhlIGxpa2VseSBjb3JlIGZ1bmN0aW9uLiBUaGF0J3MgdXN1YWxseSB0aGUgd29ya2hvcnNlIGluIHRoZXNlIEJQRiBKSVQgaW1wbGVtZW50YXRpb25zIOKAkyB0aGUgb25lIHdoZXJlIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYW5kIGVtaXNzaW9uIGhhcHBlbnMuXG5cbkJ1dCBob2xkIG9uLCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhhdCwgYSBxdWljayBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGluIHRoZSByaWdodCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29udGV4dC4gSSBoYXZlIGEgaHVuY2ggaXQgbWlnaHQgYmUgbmVzdGxlZCBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmNgLiBJJ2xsIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhlIHByaW1hcnkgY29tcGlsYXRpb24gZnVuY3Rpb24sIHdoaWNoIEkgc3VzcGVjdCBpcyBgYnBmX2ppdF9jb21waWxlYCwgaXMgYWN0dWFsbHkgdGhlcmUsIG9yIGlmIHRoaXMgaXMgYW4gYWJzdHJhY3Rpb24gb3IgYW4gaW5kaXJlY3Rpb24gdmlhIGEgZGlmZmVyZW50IGZpbGUgb3IgaW5jbHVkZSBzdGF0ZW1lbnQuIEtub3dpbmcgdGhhdCBpbml0aWFsIGNhbGwgaXMgY3JpdGljYWwgdG8gdHJhY2luZyB0aGUgd2hvbGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo0MDowNi41NzUyNTgwOTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNjg0NzgxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaW50X2ppdF9jb21waWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYz0zOT1ib29sIGJwZl9qaXRfbmVlZHNfemV4dCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmMtNDMtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb3JlLmM6NDQ6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvcmUuYy00NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjQwOjA2LjkxMjEyNDczNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTUwNjY3NzM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUklTQy1WIEJQRiBKSVQgT3B0aW1pemF0aW9ucyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhlIFJJU0MtViBrZXJuZWwgY29kZSwgdHJ5aW5nIHRvIGlkZW50aWZ5IHByaW1lIGFyZWFzIGZvciBmdXp6aW5nIHJlbGF0ZWQgdG8gcmVjZW50IGNoYW5nZXMuIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG15IGVmZm9ydHMgZWZmZWN0aXZlbHksIHRhcmdldGluZyBuZXcgY29kZSBvciBzaWduaWZpY2FudGx5IG1vZGlmaWVkIGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgaHVuY2ggd2FzIGNvcnJlY3Q6IHRoZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgZnVuY3Rpb24sIGxvY2F0ZWQgd2l0aGluIGBicGZfaml0X2NvcmUuY2AsIGxvb2tzIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBvciBwZXJoYXBzIGV2ZW4gYGJwZl9qaXRfZW1pdF9pbnNuYCBkaXJlY3RseSwgc2luY2UgaXQgc2VlbXMgdG8gYmUgd2hlcmUgdGhlIGNvcmUgY2hhbmdlcyBhcmUgbWFkZS5cblxuSSB0aGVuIHN0YXJ0ZWQgZXhwbG9yaW5nIHdoZXJlIHRoZXNlIEpJVCBpbnN0cnVjdGlvbnMgYXJlIHVzZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBTcGVjaWZpY2FsbHksIEkgdG9vayBhIGxvb2sgYXQgYGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGVyY3B1LmhgIGJlY2F1c2UgaXQgc2VlbWVkIHJlbGV2YW50IHRvIHRoZSBwZXItQ1BVIG9wdGltaXphdGlvbnMgSSBzdXNwZWN0IGFyZSBoYXBwZW5pbmcgaW4gdGhlIEpJVC4gU3VyZSBlbm91Z2gsIHRoaXMgZmlsZSBpbnRyb2R1Y2VzIGEgc2xldyBvZiBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYF9fcGVyY3B1X2FkZF9hbW9fY2FzZV84YCBhbmQgYHRoaXNfY3B1X2FkZF8xYCwgYWxsIGRlcGVuZGVudCBvbiBgQ09ORklHX1JJU0NWX0lTQV9aQUJIQWAuIFdhaXQgYSBtaW51dGUsIGB0aGlzX2NwdV9hZGRfMWAgaXMgYSBtYWNyby4gU2luY2UgaXQncyBhIG1hY3JvIEknbSBsZXNzIGludGVyZXN0ZWQsIGJ1dCB0aGUgcGVyLUNQVSBjb2RlIGlzIGNsZWFybHkgdGhlIHBvaW50IG9mIGludGVyZXN0LiBUaGUgdXNlIG9mIHBlci1DUFUgdmFyaWFibGVzIGlzIGxpa2VseSB3aWRlc3ByZWFkLCB3aGljaCBwcmVzZW50cyBhIHNpZ25pZmljYW50IGF0dGFjayBzdXJmYWNlLlxuXG5JIGFsc28gY2hlY2tlZCBvdGhlciBDIGZpbGVzIHRoYXQgd2VyZSBtb2RpZmllZC4gYGFyY2gvcmlzY3Yva2VybmVsL3NtcGJvb3QuY2Agc2hvd2VkIGNoYW5nZXMgdG8gYF9fY3B1X3VwYCwgYHNtcF9wcmVwYXJlX2Jvb3RfY3B1YCwgYW5kIGBzbXBfY2FsbGluYCBidXQgdGhvc2UgYXJlIG1vcmUgYm9vdC1yZWxhdGVkLCBzbyB0aGV5J3JlIGxlc3MgY29tcGVsbGluZyBmb3IgZm9jdXNlZCBmdXp6aW5nLiBTaW1pbGFybHksIGBhcmNoL3Jpc2N2L2tlcm5lbC9hc20tb2Zmc2V0cy5jYCB0b3VjaGVzIGBhc21fb2Zmc2V0c2AgYnV0IHRoaXMgZG9lc24ndCBzZWVtIGRpcmVjdGx5IHJlbGV2YW50IHRvIG15IGdvYWwuXG5cbk5vdywgem9vbWluZyBiYWNrIGluLCB0aGUga2V5IGZ1bmN0aW9uYWwgY2hhbmdlIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBob3cgdGhlIEJQRiBKSVQgaGFuZGxlcyBwZXItQ1BVIGluc3RydWN0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGlzIGJsb2NrIG9mIGNvZGU6XG5gYGBjXG4jaWZkZWYgQ09ORklHX1NNUFxuLVx0XHRcdC8qIExvYWQgY3VycmVudCBDUFUgbnVtYmVyIGluIFQxICovXG4tXHRcdFx0ZW1pdF9sdyhSVl9SRUdfVDEsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgY3B1KSxcbitcdFx0XHRlbWl0X2xkKFJWX1JFR19UMSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBwY3B1X29mZnNldCksXG4gXHRcdFx0XHRSVl9SRUdfVFAsIGN0eCk7XG4tXHRcdFx0LyogTG9hZCBhZGRyZXNzIG9mIF9fcGVyX2NwdV9vZmZzZXQgYXJyYXkgaW4gVDIgKi9cbi1cdFx0XHRlbWl0X2FkZHIoUlZfUkVHX1QyLCAodTY0KVx1MDAyNl9fcGVyX2NwdV9vZmZzZXQsIGV4dHJhX3Bhc3MsIGN0eCk7XG4tXHRcdFx0LyogR2V0IGFkZHJlc3Mgb2YgX19wZXJfY3B1X29mZnNldFtjcHVdIGluIFQxICovXG4tXHRcdFx0ZW1pdF9zaDNhZGQoUlZfUkVHX1QxLCBSVl9SRUdfVDEsIFJWX1JFR19UMiwgY3R4KTtcbi1cdFx0XHQvKiBMb2FkIF9fcGVyX2NwdV9vZmZzZXRbY3B1XSBpbiBUMSAqL1xuLVx0XHRcdGVtaXRfbGQoUlZfUkVHX1QxLCAwLCBSVl9SRUdfVDEsIGN0eCk7XG4gXHRcdFx0LyogQWRkIHRoZSBvZmZzZXQgdG8gUmQgKi9cbiBcdFx0XHRlbWl0X2FkZChyZCwgcmQsIFJWX1JFR19UMSwgY3R4KTtcbiAjZW5kaWZcbmBgYFxuVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gZm9yIHBlci1DUFUgdmFyaWFibGVzIGluIHRoZSBCUEYgSklULCByZXBsYWNpbmcgYSBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnMgd2l0aCBhIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IG9uZS4gRGVmaW5pdGVseSBwcm9taXNpbmchIFRoaXMgaGlnaGxpZ2h0cyB0aGUgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2ppdF9lbWl0X2luc25gIGZ1bmN0aW9ucyBmb3IgbXkgZnV6emluZyBjYW1wYWlnbi5cblxuRmluYWxseSwgSSBjaGVja2VkIGBDT05GSUdfUklTQ1ZfSVNBX1pBQkhBYCB0byBzZWUgaWYgaXQncyB0aGUgb25seSBjb25maWcsIGFuZCB0aGVuIGNoZWNrZWQgYENPTkZJR19CUEZfSklUYC4gVGhlIEJQRiBKSVQgbmVlZHMgdG8gYmUgZW5hYmxlZCwgYnV0IHRoYXQncyB1c3VhbGx5IHRoZSBkZWZhdWx0LiBJdCdzIHRpbWUgdG8gc3RhcnQgY3JhZnRpbmcgc29tZSBmdXp6IHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTUzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjQwOjE4LjQxODgwODA0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTc5MzM1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo0MDoyMy45OTgxNTI1MzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI2OTM0MzcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRnV6emluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgd2UgbmVlZCB0byBlbmFibGUgYFJJU0NWX0lTQV9aQUJIQWAgYW5kIGBCUEZfSklUYC4gSG9sZCBvbiwgYEhBU19JT1BPUlRgIGlzbid0IHNvbWV0aGluZyB3ZSBkaXJlY3RseSBlbmFibGUsIHNvIHdlIGNhbiBpZ25vcmUgdGhhdC4gSSBxdWlja2x5IGNoZWNrIGZvciBvdGhlciByZWxldmFudCBjb25maWdzIGJ1dCBgQ09ORklHX1NNUGAgYW5kIGBDT05GSUdfNjRCSVRgIGFyZSBhbHJlYWR5IGdvb2QgdG8gZ28uXG5cbk5vdywgbGV0J3MgcmV2aXNpdCB0aGUgY29yZSByZXF1aXJlbWVudHM6IGBXb3J0aEZ1enppbmc9dHJ1ZWAsIHRoZSBgRm9jdXNTeW1ib2xzYCAoYGJwZl9qaXRfZW1pdF9pbnNuYCwgYGJwZl9pbnRfaml0X2NvbXBpbGVgKSwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgKGBSSVNDVl9JU0FfWkFCSEFgLCBgQlBGX0pJVGApLlxuXG5gYnBmX2ppdF9lbWl0X2luc25gIGxvb2tzIGxpa2UgYSBzb2xpZCBmb2N1cyBzeW1ib2wuIEkgcXVpY2tseSBzY2FuIHRoZSBwYXRjaCB0byBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSXQgdG91Y2hlcyBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZXJjcHUuaGAgYW5kIGBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oYC4gVGhlc2UgYXJlIGhlYWRlciBmaWxlcyB3aXRoIGlubGluZSBmdW5jdGlvbnMuIFRoZSBwYXRjaCBhbHNvIGluY2x1ZGVzIGBhcmNoL3Jpc2N2L2tlcm5lbC9zbXBib290LmNgLCB3aGljaCBoYXMgYm9vdC9ob3RwbHVnIGZ1bmN0aW9ucyAoYF9fY3B1X3VwYCwgYHNtcF9wcmVwYXJlX2Jvb3RfY3B1YCwgYHNtcF9jYWxsaW5gKS4gQnV0IGBicGZfaml0X2VtaXRfaW5zbmAgc3RpbGwgc2VlbXMgbGlrZSB0aGUgbW9zdCByZWxldmFudC5cblxuSSdsbCBkb3VibGUtY2hlY2sgdGhhdCBgUklTQ1ZfSVNBX1pBQkhBYCBpcyB0aGUgY29ycmVjdCBjb25maWcsIGFuZCB5ZXAsIGBjb25maWcgUklTQ1ZfSVNBX1pBQkhBYCBjb25maXJtcyBpdC5cblxuVGhlbiwgSSBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIG5hbWVzIGFyZSBjb3JyZWN0OiBgYnBmX2ppdF9lbWl0X2luc25gIGlzIGNvbmZpcm1lZCBieSBgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgZXh0cmFfcGFzcylgLCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGNvbmZpcm1lZCBieSBgc3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylgLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJJ20gcmVhZHkgdG8gc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk0MywiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NDA6MzMuMjY3NTAyMzAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4Nzc3MjU5LCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBSSVNDVl9JU0FfWkFCSEEiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUklTQ1ZfSVNBX1pBQkhBXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSSVNDLVYgYXJjaGl0ZWN0dXJlIGNvZGUgdG8gb3B0aW1pemUgcGVyLUNQVSB2YXJpYWJsZSBhY2Nlc3MuIEl0IGludHJvZHVjZXMgYSBuZXcgcGVyY3B1LmggaGVhZGVyIHdpdGggb3B0aW1pemVkIGlubGluZSBvcGVyYXRpb25zLCB1cGRhdGVzIGNvbnRleHQgc3dpdGNoIGxvZ2ljLCBhbmQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gdXNlIHRoZSBuZXcgcGVyLUNQVSBvZmZzZXQuIFRoZSBCUEYgSklUIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgbWFraW5nIHRoZW0gZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBSSVNDVl9JU0FfWkFCSEFcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NDA6MzMuNDc2MzA5OThaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIwNjkzMzU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gYSBiaXQgcHV6emxlZC4gSSBpbml0aWFsbHkgdGhvdWdodCBgUklTQ1ZfSVNBX1pBQkhBYCB3YXNuJ3QgcGFydCBvZiB0aGUga2VybmVsIHRyZWUsIGFuZCB0aGF0J3Mgd2hhdCBgc2V0LXJlc3VsdHNgIHNlZW1lZCB0byBpbmRpY2F0ZS4gQnV0IGEgcXVpY2sgYGdyZXBgIHNlYXJjaCBicm91Z2h0IHVwIGEgbWF0Y2ggaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2AuIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQgYGdyZXBgIG91dHB1dDsgbWFrZSBzdXJlIEkgZGlkbid0IG1pc3Mgc29tZXRoaW5nLiBZZXAsIHRoZXJlIGl0IGlzOiBgYXJjaC9yaXNjdi9LY29uZmlnOjY4NDpjb25maWcgUklTQ1ZfSVNBX1pBQkhBYC4gTm93LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2h5IHRoZSBwcmV2aW91cyBjb21tYW5kIHJlcG9ydGVkIGl0IGFzIG5vbi1leGlzdGVudC5cblxuQ291bGQgaXQgYmUgdGhhdCB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgaW50cm9kdWNlZCBieSBhIHBhdGNoIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBhcHBsaWVkPyBObywgdGhlIHByb21wdCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBhbHJlYWR5IGFwcGxpZWQuIFRoZXJlZm9yZSwgdGhleSBzaG91bGQgYmUgYXZhaWxhYmxlIGluIHRoZSBIRUFEIGNvbW1pdC4gU28sIGxvZ2ljYWxseSwgc2luY2UgaXQncyBpbiBgS2NvbmZpZ2AsIGl0ICpzaG91bGQqIGV4aXN0LiBJIG5lZWQgdG8gZWxpbWluYXRlIHRoZSBwb3NzaWJpbGl0eSBvZiBhIGNvbmZpZ3VyYXRpb24gZXJyb3IuIExldCdzIGNvbmZpcm0gdGhhdCBpdCdzIHByZXNlbnQgaW4gYGFyY2gvcmlzY3YvS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDU2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5LCJUb29sQ2FsbHMiOlsic2V0LXJlc3VsdHMiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo0MDozOC42ODMyNDc4MjZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDQ4OTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUklTQ1ZfSVNBX1pBQkhBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L0tjb25maWc9Njc3PWNvbmZpZyBUT09MQ0hBSU5fSEFTX1pBQkhBXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctNjgzLVxcbmFyY2gvcmlzY3YvS2NvbmZpZzo2ODQ6Y29uZmlnIFJJU0NWX0lTQV9aQUJIQVxcbmFyY2gvcmlzY3YvS2NvbmZpZy02ODUtXFx0Ym9vbCBcXFwiWmFiaGEgZXh0ZW5zaW9uIHN1cHBvcnQgZm9yIGF0b21pYyBieXRlL2hhbGZ3b3JkIG9wZXJhdGlvbnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjQwOjM5LjIwNzc1MzY4NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjc5ODY2MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIElzc3VlKipcblxuT2theSwgc28gYHNldC1yZXN1bHRzYCBpcyBmYWlsaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IG11c3QgYmUgY2hlY2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMnIGV4aXN0ZW5jZSB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gaGllcmFyY2h5LCBwb3NzaWJseSBkaXJlY3RseSBwYXJzaW5nIGBLY29uZmlnYCBmaWxlcy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBlcnJvciBtZXNzYWdlLiBBaCwgaGVyZSBpdCBpczogXCJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogUklTQ1ZfSVNBX1pBQkhBLlwiXG5cbkhtbSwgaXMgdGhpcyBiZWNhdXNlIGBSSVNDVl9JU0FfWkFCSEFgIGlzIGRlZmluZWQgdW5kZXIgYGFyY2gvcmlzY3YvS2NvbmZpZ2AsIGJ1dCB0aGUgdG9vbCBpcyBhc3N1bWluZyBhIGRpZmZlcmVudCBkZWZhdWx0IGFyY2hpdGVjdHVyZT8gTW9zdCBsaWtlbHksIHRoZSB0b29sIGlzIGVpdGhlciBjaGVja2luZyB0aGUgZGVmYXVsdCBhcmNoaXRlY3R1cmUncyBLY29uZmlnIGZpbGVzLCBzdWNoIGFzIHg4Nl82NCwgd2hpY2ggaXMgYSBjb21tb24gZGVmYXVsdCwgb3IsIHRoZXJlIGlzIGFuIGFjdHVhbCBidWcuXG5cblRoZXJlZm9yZSwgSSdsbCBlaXRoZXIgcmVtb3ZlIGBSSVNDVl9JU0FfWkFCSEFgIGVudGlyZWx5IGZyb20gdGhlIGlucHV0IG9yIGlnbm9yZSB0aGUgZXJyb3IgaWYgdGhhdCdzIGFuIG9wdGlvbi5cblxuV2FpdCBhIG1pbnV0ZSwgYHNldC1yZXN1bHRzYCBkaWQgYWN0dWFsbHkgZmFpbCwgc28gSSdsbCBuZWVkIHRvIGNhbGwgaXQgYWdhaW4sIHRoaXMgdGltZSB3aXRob3V0IGBSSVNDVl9JU0FfWkFCSEFgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU5MSwiT3V0cHV0VG9rZW5zIjoxMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NDA6NDcuNDg3NjI0MDQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwOTgxNTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9lbWl0X2luc25cIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSSVNDLVYgYXJjaGl0ZWN0dXJlIGNvZGUgdG8gb3B0aW1pemUgcGVyLUNQVSB2YXJpYWJsZSBhY2Nlc3MuIEl0IGludHJvZHVjZXMgYSBuZXcgcGVyY3B1LmggaGVhZGVyIHdpdGggb3B0aW1pemVkIGlubGluZSBvcGVyYXRpb25zLCB1cGRhdGVzIGNvbnRleHQgc3dpdGNoIGxvZ2ljLCBhbmQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gdXNlIHRoZSBuZXcgcGVyLUNQVSBvZmZzZXQuIFRoZSBCUEYgSklUIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgbWFraW5nIHRoZW0gZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2VtaXRfaW5zblwiLFxuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBhcmNoaXRlY3R1cmUgY29kZSB0byBvcHRpbWl6ZSBwZXItQ1BVIHZhcmlhYmxlIGFjY2Vzcy4gSXQgaW50cm9kdWNlcyBhIG5ldyBwZXJjcHUuaCBoZWFkZXIgd2l0aCBvcHRpbWl6ZWQgaW5saW5lIG9wZXJhdGlvbnMsIHVwZGF0ZXMgY29udGV4dCBzd2l0Y2ggbG9naWMsIGFuZCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciB0byB1c2UgdGhlIG5ldyBwZXItQ1BVIG9mZnNldC4gVGhlIEJQRiBKSVQgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBtYWtpbmcgdGhlbSBnb29kIHRhcmdldHMgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowq9cdg[1] Phase: Succeeded StartedAt: 2026-07-01 09:41:00 +0000 UTC FinishedAt: 2026-07-01 09:41:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9cdg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 09:41:00 +0000 UTC FinishedAt: 2026-07-01 09:41:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9cdg[2] Phase: Succeeded StartedAt: 2026-07-01 09:41:00 +0000 UTC FinishedAt: 2026-07-01 10:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9cdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"33aec87f-677e-43f2-af4d-e6ea93bf5531","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-01 09:41:00 +0000 UTC FinishedAt: 2026-07-01 10:05:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"33aec87f-677e-43f2-af4d-e6ea93bf5531","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowq9cdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"33aec87f-677e-43f2-af4d-e6ea93bf5531","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-01 09:41:01 +0000 UTC FinishedAt: 2026-07-01 09:41:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9cdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"33aec87f-677e-43f2-af4d-e6ea93bf5531","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-01 09:41:01 +0000 UTC FinishedAt: 2026-07-01 09:41:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowq9cdg/series-workflowq9cdg-convert-artifact-701750311/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq9cdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"33aec87f-677e-43f2-af4d-e6ea93bf5531","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-01 09:41:40 +0000 UTC FinishedAt: 2026-07-01 10:05:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9cdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"33aec87f-677e-43f2-af4d-e6ea93bf5531","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-01 09:41:40 +0000 UTC FinishedAt: 2026-07-01 10:05:07 +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:*f2daf46b-86f9-4300-9747-200184d6b3b4,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-workflowq9cdg/series-workflowq9cdg-convert-artifact-701750311/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": "c8b730d7-ff1b-45d6-a0af-ebaf9021b7c7", "success": false },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-workflowq9cdg/series-workflowq9cdg-build-action-4174130109/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq9cdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"33aec87f-677e-43f2-af4d-e6ea93bf5531","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-01 09:41:40 +0000 UTC FinishedAt: 2026-07-01 10:04:57 +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:*f2daf46b-86f9-4300-9747-200184d6b3b4,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-workflowq9cdg/series-workflowq9cdg-convert-artifact-701750311/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": "c8b730d7-ff1b-45d6-a0af-ebaf9021b7c7", "success": false },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-workflowq9cdg/series-workflowq9cdg-build-action-4174130109/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq9cdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"33aec87f-677e-43f2-af4d-e6ea93bf5531","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Failed StartedAt: 2026-07-01 10:05:07 +0000 UTC FinishedAt: 2026-07-01 10:05:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq9cdg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_emit_insn","bpf_int_jit_compile"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"be5c93fa674f0fc3c8f359c2143abce6bbb422e6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT"],"series_id":"33aec87f-677e-43f2-af4d-e6ea93bf5531","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Failed StartedAt: 2026-07-01 10:05:07 +0000 UTC FinishedAt: 2026-07-01 10:05:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}