Name: series-workflowc5wjl Phase: Succeeded StartedAt: 2026-07-25 16:44:39 +0000 UTC FinishedAt: 2026-07-25 21:48:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[0] Phase: Succeeded StartedAt: 2026-07-25 16:44:39 +0000 UTC FinishedAt: 2026-07-25 17:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 16:44:39 +0000 UTC FinishedAt: 2026-07-25 17:07:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VSOCK", "VHOST_NET", "VHOST_SCSI", "VHOST_VDPA", "VSOCKETS", "EVENTFD", "VDPA", "TARGET_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VSOCK", "VHOST_NET", "VHOST_SCSI", "VHOST_VDPA", "VSOCKETS", "EVENTFD", "VDPA", "TARGET_CORE" ], "series_id": "0fcfaaad-c0d1-430c-b5fa-83085ed06bf5" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_dev_cleanup", "vhost_dev_reset_owner", "vhost_vsock_dev_ioctl", "vhost_net_ioctl", "vhost_vdpa_unlocked_ioctl", "vhost_scsi_ioctl", "vhost_vsock_dev_release", "vhost_net_release", "vhost_scsi_release", "vhost_vdpa_release" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDssCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7LAogICAgJiMzNDtWSE9TVF9TQ1NJJiMzNDssCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7RVZFTlRGRCYjMzQ7LAogICAgJiMzNDtWRFBBJiMzNDssCiAgICAmIzM0O1RBUkdFVF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfZGV2X2NsZWFudXAmIzM0OywKICAgICYjMzQ7dmhvc3RfZGV2X3Jlc2V0X293bmVyJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX2Rldl9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF9uZXRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX2Rldl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IHN1YnN5c3RlbSB0byBzeW5jaHJvbml6ZSBSQ1UgcmVhZGVycyBkdXJpbmcgVkhPU1RfUkVTRVRfT1dORVIgYW5kIGRldmljZSBjbGVhbnVwLiBJdCBpbnRyb2R1Y2VzIGEgYHN5bmNgIHBhcmFtZXRlciB0byBgdmhvc3RfZGV2X2NsZWFudXBgIGFuZCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCB0byB3YWl0IGZvciBsb2NrbGVzcyB3b3JrZXJzIHRvIGZpbmlzaC4gSXQgYWxzbyBhZGRzIGEgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBmdW5jdGlvbiB0byBoYW5kbGUgVkhPU1RfUkVTRVRfT1dORVIgZm9yIHZzb2NrLCBhbmQgbW9kaWZpZXMgdnNvY2sgc3RhcnQvc3RvcCBsb2dpYyB0byBoYW5kbGUgYmFja2VuZHMgY29ycmVjdGx5IGFjcm9zcyByZXNldHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgdmhvc3QgbG9naWMgYW5kIG11bHRpcGxlIHZob3N0IGRyaXZlcnMgKG5ldCwgc2NzaSwgdmRwYSwgdnNvY2spLCBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9jdGxzIGFuZCBmaWxlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlN2U2MDMwMjFiNjdiZGNhZThhNGZkYTdjZDQ2MDk3ODM3ZDZlNzM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTc6MDM6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbmluZGV4IDNlNzJiOWM2YWYwY2E0Li5mZDA4OTQxMmMwMjA5MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbkBAIC0xNDUyLDcgJiM0MzsxNDUyLDcgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbiBcdHZob3N0X25ldF9zdG9wKG4sIFx1MDAyNnR4X3NvY2ssIFx1MDAyNnJ4X3NvY2spO1xuIFx0dmhvc3RfbmV0X2ZsdXNoKG4pO1xuIFx0dmhvc3RfZGV2X3N0b3AoXHUwMDI2bi1cdTAwM2VkZXYpO1xuLVx0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2bi1cdTAwM2VkZXYpO1xuJiM0MztcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNm4tXHUwMDNlZGV2LCBmYWxzZSk7XG4gXHR2aG9zdF9uZXRfdnFfcmVzZXQobik7XG4gXHRpZiAodHhfc29jaylcbiBcdFx0c29ja2ZkX3B1dCh0eF9zb2NrKTtcbkBAIC0xNjYxLDcgJiM0MzsxNjYxLDcgQEAgc3RhdGljIGxvbmcgdmhvc3RfbmV0X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF9uZXQgKm4pXG4gXHR2aG9zdF9uZXRfc3RvcChuLCBcdTAwMjZ0eF9zb2NrLCBcdTAwMjZyeF9zb2NrKTtcbiBcdHZob3N0X25ldF9mbHVzaChuKTtcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNm4tXHUwMDNlZGV2KTtcbi1cdHZob3N0X2Rldl9yZXNldF9vd25lcihcdTAwMjZuLVx1MDAzZWRldiwgdW1lbSk7XG4mIzQzO1x0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFx1MDAyNm4tXHUwMDNlZGV2LCB1bWVtLCBmYWxzZSk7XG4gXHR2aG9zdF9uZXRfdnFfcmVzZXQobik7XG4gZG9uZTpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuLVx1MDAzZWRldi5tdXRleCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuaW5kZXggOWExMjUzYjlkOGM1MGUuLmI2MDAyYjY0Y2Y0Mjg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtMjM1MCw3ICYjNDM7MjM1MCw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzLVx1MDAzZWRldi5tdXRleCk7XG4gXHR2aG9zdF9zY3NpX2NsZWFyX2VuZHBvaW50KHZzLCBcdTAwMjZ0KTtcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNnZzLVx1MDAzZWRldik7XG4tXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZ2cy1cdTAwM2VkZXYpO1xuJiM0MztcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNnZzLVx1MDAzZWRldiwgZmFsc2UpO1xuIFx0a2ZyZWUodnMtXHUwMDNlZGV2LnZxcyk7XG4gXHRrZnJlZSh2cy1cdTAwM2V2cXMpO1xuIFx0a2ZyZWUodnMtXHUwMDNlb2xkX2luZmxpZ2h0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Rlc3QuYyBiL2RyaXZlcnMvdmhvc3QvdGVzdC5jXG5pbmRleCAyNDUxNGM4ZmRlZTQ5NC4uODRlZDllYTgxMjE5ZDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC90ZXN0LmNcbkBAIC0xNjMsNyAmIzQzOzE2Myw3IEBAIHN0YXRpYyBpbnQgdmhvc3RfdGVzdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0dmhvc3RfdGVzdF9zdG9wKG4sIFx1MDAyNnByaXZhdGUpO1xuIFx0dmhvc3RfdGVzdF9mbHVzaChuKTtcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNm4tXHUwMDNlZGV2KTtcbi1cdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNm4tXHUwMDNlZGV2KTtcbiYjNDM7XHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZuLVx1MDAzZWRldiwgZmFsc2UpO1xuIFx0a2ZyZWUobi1cdTAwM2VkZXYudnFzKTtcbiBcdGtmcmVlKG4pO1xuIFx0cmV0dXJuIDA7XG5AQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCBzdGF0aWMgbG9uZyB2aG9zdF90ZXN0X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxuIFx0dmhvc3RfdGVzdF9zdG9wKG4sIFx1MDAyNnByaXYpO1xuIFx0dmhvc3RfdGVzdF9mbHVzaChuKTtcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNm4tXHUwMDNlZGV2KTtcbi1cdHZob3N0X2Rldl9yZXNldF9vd25lcihcdTAwMjZuLVx1MDAzZWRldiwgdW1lbSk7XG4mIzQzO1x0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFx1MDAyNm4tXHUwMDNlZGV2LCB1bWVtLCBmYWxzZSk7XG4gZG9uZTpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jIGIvZHJpdmVycy92aG9zdC92ZHBhLmNcbmluZGV4IGFjNTUyNzVmYTBkMGFlLi40MjdjNGEzNGRiMmM0ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTg5OCw3ICYjNDM7ODk4LDcgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4gXHRjYXNlIFZIT1NUX1NFVF9PV05FUjpcbiBcdFx0ciA9IHZob3N0X3ZkcGFfYmluZF9tbSh2KTtcbiBcdFx0aWYgKHIpXG4tXHRcdFx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKGQsIE5VTEwpO1xuJiM0MztcdFx0XHR2aG9zdF9kZXZfcmVzZXRfb3duZXIoZCwgTlVMTCwgZmFsc2UpO1xuIFx0XHRicmVhaztcbiBcdH1cbiBvdXQ6XG5AQCAtMTM5Niw3ICYjNDM7MTM5Niw3IEBAIHN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfY2xlYW51cChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbiBcdH1cbiBcbiBcdHZob3N0X3ZkcGFfZnJlZV9kb21haW4odik7XG4tXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZ2LVx1MDAzZXZkZXYpO1xuJiM0MztcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNnYtXHUwMDNldmRldiwgZmFsc2UpO1xuIFx0a2ZyZWUodi1cdTAwM2V2ZGV2LnZxcyk7XG4gXHR2LVx1MDAzZXZkZXYudnFzID0gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXG5pbmRleCA0YzUyNWIzZTE2ZWFkOC4uYjE4NDI5YjE1ZDMyMmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuQEAgLTcxOSw3ICYjNDM7NzE5LDcgQEAgc3RhdGljIHZvaWQgdmhvc3Rfd29ya2VyX2Rlc3Ryb3koc3RydWN0IHZob3N0X2RldiAqZGV2LFxuIFx0a2ZyZWUod29ya2VyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdmhvc3Rfd29ya2Vyc19mcmVlKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3Rfd29ya2Vyc19mcmVlKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF93b3JrZXIgKndvcmtlcjtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbkBAIC03MjksNiAmIzQzOzcyOSwyMSBAQCBzdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJzX2ZyZWUoc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZW52cXM7IGkmIzQzOyYjNDM7KVxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZXZxc1tpXS1cdTAwM2V3b3JrZXIsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoaXMgcGF0aCBjYW4gYmUgcmVhY2hlZCBieSBsb2NrbGVzcyB3b3JrIHF1ZXVlcnMuICBJbiB0aGlzIGNhc2VcbiYjNDM7XHQgKiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgcmVhZHMgdnEtXHUwMDNld29ya2VyIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc28gYVxuJiM0MztcdCAqIFJDVSByZWFkZXIgdGhhdCBmZXRjaGVkIGEgd29ya2VyIGJlZm9yZSB3ZSBjbGVhcmVkIHRoZSBwb2ludGVycyBhYm92ZVxuJiM0MztcdCAqIG1heSBzdGlsbCBiZSBxdWV1ZWluZyB3b3JrIG9uIGl0LiAgV2FpdCBmb3IgdGhvc2UgcmVhZGVycyB0byBmaW5pc2gsXG4mIzQzO1x0ICogdGhlbiBmbHVzaCBzbyBhbnkgd29yayB0aGV5IHF1ZXVlZCBydW5zIChjbGVhcmluZyBWSE9TVF9XT1JLX1FVRVVFRClcbiYjNDM7XHQgKiBiZWZvcmUgdGhlIHdvcmtlcnMgYXJlIGZyZWVkLiAgTm90YWJseSwgdGhhdCBpcyB0aGUgY2FzZSBmb3IgdGhlXG4mIzQzO1x0ICogdnNvY2sgUkVTRVRfT1dORVIgcGF0aC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3luYykge1xuJiM0MztcdFx0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0XHR2aG9zdF9kZXZfZmx1c2goZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIEZyZWUgdGhlIGRlZmF1bHQgd29ya2VyIHdlIGNyZWF0ZWQgYW5kIGNsZWFudXAgd29ya2VycyB1c2Vyc3BhY2VcbiBcdCAqIGNyZWF0ZWQgYnV0IGNvdWxkbiYjMzk7dCBjbGVhbiB1cCAoaXQgZm9yZ290IG9yIGNyYXNoZWQpLlxuQEAgLTExNDgsMTEgJiM0MzsxMTYzLDEyIEBAIHN0cnVjdCB2aG9zdF9pb3RsYiAqdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUodm9pZClcbiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSk7XG4gXG4gLyogQ2FsbGVyIHNob3VsZCBoYXZlIGRldmljZSBtdXRleCAqL1xuLXZvaWQgdmhvc3RfZGV2X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IHZob3N0X2lvdGxiICp1bWVtKVxuJiM0Mzt2b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbSxcbiYjNDM7XHRcdFx0ICAgYm9vbCBzeW5jKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0dmhvc3RfZGV2X2NsZWFudXAoZGV2KTtcbiYjNDM7XHR2aG9zdF9kZXZfY2xlYW51cChkZXYsIHN5bmMpO1xuIFxuIFx0ZGV2LVx1MDAzZWZvcmtfb3duZXIgPSBmb3JrX2Zyb21fb3duZXJfZGVmYXVsdDtcbiBcdGRldi1cdTAwM2V1bWVtID0gdW1lbTtcbkBAIC0xMTk3LDcgJiM0MzsxMjEzLDcgQEAgdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9jbGVhcl9tc2cpO1xuIFxuLXZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqZGV2KVxuJiM0Mzt2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKVxuIHtcbiBcdGludCBpO1xuIFxuQEAgLTEyMjEsNyAmIzQzOzEyMzcsNyBAQCB2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbiBcdGRldi1cdTAwM2Vpb3RsYiA9IE5VTEw7XG4gXHR2aG9zdF9jbGVhcl9tc2coZGV2KTtcbiBcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xuLVx0dmhvc3Rfd29ya2Vyc19mcmVlKGRldik7XG4mIzQzO1x0dmhvc3Rfd29ya2Vyc19mcmVlKGRldiwgc3luYyk7XG4gXHR2aG9zdF9kZXRhY2hfbW0oZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X2NsZWFudXApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaCBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxuaW5kZXggMDE5MmFkZTZlNzQ5MTAuLjI5ZmIxZjUxMGEzNGRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmhcbkBAIC0yMTYsOCAmIzQzOzIxNiw5IEBAIGxvbmcgdmhvc3RfZGV2X3NldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpO1xuIGJvb2wgdmhvc3RfZGV2X2hhc19vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpO1xuIGxvbmcgdmhvc3RfZGV2X2NoZWNrX293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKik7XG4gc3RydWN0IHZob3N0X2lvdGxiICp2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSh2b2lkKTtcbi12b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGIpO1xuLXZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqKTtcbiYjNDM7dm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiLFxuJiM0MztcdFx0XHQgICBib29sIHN5bmMpO1xuJiM0Mzt2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKTtcbiB2b2lkIHZob3N0X2Rldl9zdG9wKHN0cnVjdCB2aG9zdF9kZXYgKik7XG4gbG9uZyB2aG9zdF9kZXZfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdwKTtcbiBsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdnNvY2suYyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuaW5kZXggOWFhYWI2YmI4MDYxYzEuLjkwNmNlYzdiNWFmZDkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbkBAIC02MSw2ICYjNDM7NjEsNyBAQCBzdHJ1Y3Qgdmhvc3RfdnNvY2sge1xuIFxuIFx0dTMyIGd1ZXN0X2NpZDtcbiBcdGJvb2wgc2VxcGFja2V0X2FsbG93O1xuJiM0MztcdGJvb2wgZXZlcl9zdGFydGVkOyAvKiBzZXQgb24gZmlyc3QgU0VUX1JVTk5JTkcoMSk7IG5ldmVyIGNsZWFyZWQgKi9cbiB9O1xuIFxuIHN0YXRpYyB1MzIgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQodm9pZClcbkBAIC0zMDIsMTcgJiM0MzszMDMsMTIgQEAgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXG4tXHQvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24mIzM5O3QgZW5hYmxlZCB0aGUgUlggdnEgeWV0LiBRdWV1aW5nIHRoZSBwYWNrZXRcbi1cdCAqIGFuZCBtYWtpbmcgdGhlIGNhbGxlciB3YWl0IGlzIHBvaW50bGVzczogZXZlbiBpZiB0aGUgZ3Vlc3QgbWFuYWdlcyB0byBpbml0XG4tXHQgKiB3aXRoaW4gdGhlIHRpbWVvdXQsIGl0JiMzOTtsbCBpbW1lZGlhdGVseSByZXBseSB3aXRoIFJTVCwgYmVjYXVzZSB0aGVyZSYjMzk7cyBub1xuLVx0ICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0LlxuLVx0ICpcbi1cdCAqIHZob3N0X3ZxX2dldF9iYWNrZW5kKCkgd2l0aG91dCB2cS1cdTAwM2VtdXRleCBpcyBhY2NlcHRhYmxlIGhlcmU6IGxvY2tpbmdcbi1cdCAqIHRoZSBtdXRleCB3b3VsZCBiZSB0b28gZXhwZW5zaXZlIGluIHRoaXMgaG90IHBhdGgsIGFuZCB3ZSBhbHJlYWR5IGhhdmVcbi1cdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcbi1cdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cbiYjNDM7XHQvKiBGYXN0LWZhaWwgdW50aWwgdGhlIGd1ZXN0IGZpcnN0IGVuYWJsZXMgdGhlIGRldmljZSAoU0VUX1JVTk5JTkcoMSkpLlxuJiM0MztcdCAqIEJlZm9yZSB0aGF0IHRoZXJlIGlzIG5vIGxpc3RlbmVyLCBzbyBxdWV1aW5nIGlzIHBvaW50bGVzcy5cbiYjNDM7XHQgKiAmIzM5O2V2ZXJfc3RhcnRlZCYjMzk7IGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UmIzM5O3JlIHVwIHdlIGtlZXAgcXVldWluZ1xuJiM0MztcdCAqIGFjcm9zcyBsYXRlciBzdG9wIC8gQ1BSLXBhdXNlIHdpbmRvd3MuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseSghZGF0YV9yYWNlKHZob3N0X3ZxX2dldF9iYWNrZW5kKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF0pKSkpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkoIVJFQURfT05DRSh2c29jay1cdTAwM2VldmVyX3N0YXJ0ZWQpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiAtRUhPU1RVTlJFQUNIO1xuQEAgLTY0MCwxMSAmIzQzOzYzNiwyMyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0YXJ0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHR9XG4gXG4mIzQzO1x0LyogU2V0ICYjMzk7ZXZlcl9zdGFydGVkJiMzOTsgZmxhZyBvbiB0aGUgZmlyc3Qgc3RhcnQ7IG5ldmVyIGNsZWFyZWQsIHNvIHNlbmRfcGt0XG4mIzQzO1x0ICoga2VlcHMgcXVldWluZyAoaW5zdGVhZCBvZiBmYXN0LWZhaWxpbmcpIG9uIGxhdGVyIHN0b3AgLyBDUFIgcGF1c2VzLlxuJiM0MztcdCAqL1xuJiM0MztcdFdSSVRFX09OQ0UodnNvY2stXHUwMDNlZXZlcl9zdGFydGVkLCB0cnVlKTtcbiYjNDM7XG4gXHQvKiBTb21lIHBhY2tldHMgbWF5IGhhdmUgYmVlbiBxdWV1ZWQgYmVmb3JlIHRoZSBkZXZpY2Ugd2FzIHN0YXJ0ZWQsXG4gXHQgKiBsZXQmIzM5O3Mga2ljayB0aGUgc2VuZCB3b3JrZXIgdG8gc2VuZCB0aGVtLlxuIFx0ICovXG4gXHR2aG9zdF92cV93b3JrX3F1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF0sIFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3dvcmspO1xuIFxuJiM0MztcdC8qIFRoZSBndWVzdCBtYXkgaGF2ZSBhZGRlZCBUWCBidWZmZXJzIHdoaWxlIHRoZSBkZXZpY2Ugd2FzIHN0b3BwZWRcbiYjNDM7XHQgKiAoZS5nLiBhY3Jvc3MgVkhPU1RfUkVTRVRfT1dORVIpIGFuZCB0aGVpciBraWNrcyBnb3QgY29uc3VtZWQgYnlcbiYjNDM7XHQgKiB0aGUgTlVMTC1iYWNrZW5kIHdpbmRvdy4gIFJlLXNjYW4gdGhlIFRYIFZRLCBtaXJyb3JpbmcgdGhlIFJYXG4mIzQzO1x0ICogc2VuZC13b3JrZXIga2ljayBhYm92ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2aG9zdF9wb2xsX3F1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9UWF0ucG9sbCk7XG4mIzQzO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gMDtcbiBcbkBAIC02NjQsOSAmIzQzOzY3MiwyNCBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0YXJ0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuIHtcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcbiBcdHNpemVfdCBpO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXHUwMDNldnFzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW2ldO1xuJiM0MztcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdFx0dmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKVxuJiM0Mzt7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbkBAIC02NzcsMTQgJiM0Mzs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcbiBcdFx0XHRnb3RvIGVycjtcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXHUwMDNldnFzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbaV07XG4tXG4tXHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuLVx0XHR2aG9zdF92cV9zZXRfYmFja2VuZCh2cSwgTlVMTCk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4tXHR9XG4tXG4mIzQzO1x0dmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyh2c29jayk7XG4gZXJyOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTcyMCw2ICYjNDM7NzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcbiBcdHZzb2NrLVx1MDAzZWd1ZXN0X2NpZCA9IDA7IC8qIG5vIENJRCBhc3NpZ25lZCB5ZXQgKi9cbiBcdHZzb2NrLVx1MDAzZXNlcXBhY2tldF9hbGxvdyA9IGZhbHNlO1xuJiM0MztcdHZzb2NrLVx1MDAzZWV2ZXJfc3RhcnRlZCA9IGZhbHNlO1xuIFxuIFx0YXRvbWljX3NldChcdTAwMjZ2c29jay1cdTAwM2VxdWV1ZWRfcmVwbGllcywgMCk7XG4gXG5AQCAtODA3LDcgJiM0Mzs4MjQsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFxuIFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF9xdWV1ZSk7XG4gXG4tXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZ2c29jay1cdTAwM2VkZXYpO1xuJiM0MztcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgZmFsc2UpO1xuIFx0cHV0X25ldF90cmFjayh2c29jay1cdTAwM2VuZXQsIFx1MDAyNnZzb2NrLVx1MDAzZW5zX3RyYWNrZXIpO1xuIFx0a2ZyZWUodnNvY2stXHUwMDNlZGV2LnZxcyk7XG4gXHR2aG9zdF92c29ja19mcmVlKHZzb2NrKTtcbkBAIC04ODYsNiAmIzQzOzkwMywzNiBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCB1NjQgZmVhdHVyZXMpXG4gXHRyZXR1cm4gLUVGQVVMVDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBsb25nIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW07XG4mIzQzO1x0bG9uZyBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbiYjNDM7XHRlcnIgPSB2aG9zdF9kZXZfY2hlY2tfb3duZXIoXHUwMDI2dnNvY2stXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBkb25lO1xuJiM0MztcdHVtZW0gPSB2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSgpO1xuJiM0MztcdGlmICghdW1lbSkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHR9XG4mIzQzO1x0dmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyh2c29jayk7XG4mIzQzO1x0dmhvc3RfdnNvY2tfZmx1c2godnNvY2spO1xuJiM0MztcdHZob3N0X2Rldl9zdG9wKFx1MDAyNnZzb2NrLVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogdnNvY2sga2VlcHMgdGhlIENJRCBoYXNoZWQgYWNyb3NzIFJFU0VUX09XTkVSLCBzbyBhIGxvY2tsZXNzIHNlbmRlclxuJiM0MztcdCAqIGNhbiBzdGlsbCByZWFjaCB0aGUgZGV2aWNlIHdoaWxlIGl0cyB3b3JrZXJzIGFyZSBmcmVlZC4gIFBhc3NcbiYjNDM7XHQgKiBzeW5jPXRydWUgc28gdmhvc3Rfd29ya2Vyc19mcmVlKCkgZmVuY2VzIFJDVSByZWFkZXJzIGFuZCBmbHVzaGVzXG4mIzQzO1x0ICogYmVmb3JlIGZyZWVpbmcgdGhlbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2aG9zdF9kZXZfcmVzZXRfb3duZXIoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB1bWVtLCB0cnVlKTtcbiYjNDM7ZG9uZTpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG5AQCAtOTI5LDYgJiM0Mzs5NzYsOCBAQCBzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHRcdHZob3N0X3NldF9iYWNrZW5kX2ZlYXR1cmVzKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgZmVhdHVyZXMpO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRjYXNlIFZIT1NUX1JFU0VUX09XTkVSOlxuJiM0MztcdFx0cmV0dXJuIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHZzb2NrKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbiBcdFx0ciA9IHZob3N0X2Rldl9pb2N0bChcdTAwMjZ2c29jay1cdTAwM2VkZXYsIGlvY3RsLCBhcmdwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VkhPU1RfTkVUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9kZXZfY2xlYW51cCYjMzQ7LAogICAgJiMzNDt2aG9zdF9kZXZfcmVzZXRfb3duZXImIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZGV2X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZGV2X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3ZkcGFfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3Qgc3Vic3lzdGVtIHRvIHN5bmNocm9uaXplIFJDVSByZWFkZXJzIGR1cmluZyBWSE9TVF9SRVNFVF9PV05FUiBhbmQgZGV2aWNlIGNsZWFudXAuIEl0IGludHJvZHVjZXMgYSBgc3luY2AgcGFyYW1ldGVyIHRvIGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIHRvIHdhaXQgZm9yIGxvY2tsZXNzIHdvcmtlcnMgdG8gZmluaXNoLiBJdCBhbHNvIGFkZHMgYSBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGZ1bmN0aW9uIHRvIGhhbmRsZSBWSE9TVF9SRVNFVF9PV05FUiBmb3IgdnNvY2ssIGFuZCBtb2RpZmllcyB2c29jayBzdGFydC9zdG9wIGxvZ2ljIHRvIGhhbmRsZSBiYWNrZW5kcyBjb3JyZWN0bHkgYWNyb3NzIHJlc2V0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSB2aG9zdCBsb2dpYyBhbmQgbXVsdGlwbGUgdmhvc3QgZHJpdmVycyAobmV0LCBzY3NpLCB2ZHBhLCB2c29jayksIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb2N0bHMgYW5kIGZpbGUgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU3ZTYwMzAyMWI2N2JkY2FlOGE0ZmRhN2NkNDYwOTc4MzdkNmU3MzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAxNzowMzo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvbmV0LmMgYi9kcml2ZXJzL3Zob3N0L25ldC5jCmluZGV4IDNlNzJiOWM2YWYwY2E0Li5mZDA4OTQxMmMwMjA5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC0xNDUyLDcgJiM0MzsxNDUyLDcgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZikKIAl2aG9zdF9uZXRfc3RvcChuLCAmYW1wO3R4X3NvY2ssICZhbXA7cnhfc29jayk7CiAJdmhvc3RfbmV0X2ZsdXNoKG4pOwogCXZob3N0X2Rldl9zdG9wKCZhbXA7bi0mZ3Q7ZGV2KTsKLQl2aG9zdF9kZXZfY2xlYW51cCgmYW1wO24tJmd0O2Rldik7CiYjNDM7CXZob3N0X2Rldl9jbGVhbnVwKCZhbXA7bi0mZ3Q7ZGV2LCBmYWxzZSk7CiAJdmhvc3RfbmV0X3ZxX3Jlc2V0KG4pOwogCWlmICh0eF9zb2NrKQogCQlzb2NrZmRfcHV0KHR4X3NvY2spOwpAQCAtMTY2MSw3ICYjNDM7MTY2MSw3IEBAIHN0YXRpYyBsb25nIHZob3N0X25ldF9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfbmV0ICpuKQogCXZob3N0X25ldF9zdG9wKG4sICZhbXA7dHhfc29jaywgJmFtcDtyeF9zb2NrKTsKIAl2aG9zdF9uZXRfZmx1c2gobik7CiAJdmhvc3RfZGV2X3N0b3AoJmFtcDtuLSZndDtkZXYpOwotCXZob3N0X2Rldl9yZXNldF9vd25lcigmYW1wO24tJmd0O2RldiwgdW1lbSk7CiYjNDM7CXZob3N0X2Rldl9yZXNldF9vd25lcigmYW1wO24tJmd0O2RldiwgdW1lbSwgZmFsc2UpOwogCXZob3N0X25ldF92cV9yZXNldChuKTsKIGRvbmU6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bi0mZ3Q7ZGV2Lm11dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmMKaW5kZXggOWExMjUzYjlkOGM1MGUuLmI2MDAyYjY0Y2Y0Mjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwpAQCAtMjM1MCw3ICYjNDM7MjM1MCw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKQogCW11dGV4X3VubG9jaygmYW1wO3ZzLSZndDtkZXYubXV0ZXgpOwogCXZob3N0X3Njc2lfY2xlYXJfZW5kcG9pbnQodnMsICZhbXA7dCk7CiAJdmhvc3RfZGV2X3N0b3AoJmFtcDt2cy0mZ3Q7ZGV2KTsKLQl2aG9zdF9kZXZfY2xlYW51cCgmYW1wO3ZzLSZndDtkZXYpOwomIzQzOwl2aG9zdF9kZXZfY2xlYW51cCgmYW1wO3ZzLSZndDtkZXYsIGZhbHNlKTsKIAlrZnJlZSh2cy0mZ3Q7ZGV2LnZxcyk7CiAJa2ZyZWUodnMtJmd0O3Zxcyk7CiAJa2ZyZWUodnMtJmd0O29sZF9pbmZsaWdodCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Rlc3QuYyBiL2RyaXZlcnMvdmhvc3QvdGVzdC5jCmluZGV4IDI0NTE0YzhmZGVlNDk0Li44NGVkOWVhODEyMTlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC90ZXN0LmMKQEAgLTE2Myw3ICYjNDM7MTYzLDcgQEAgc3RhdGljIGludCB2aG9zdF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpCiAJdmhvc3RfdGVzdF9zdG9wKG4sICZhbXA7cHJpdmF0ZSk7CiAJdmhvc3RfdGVzdF9mbHVzaChuKTsKIAl2aG9zdF9kZXZfc3RvcCgmYW1wO24tJmd0O2Rldik7Ci0Jdmhvc3RfZGV2X2NsZWFudXAoJmFtcDtuLSZndDtkZXYpOwomIzQzOwl2aG9zdF9kZXZfY2xlYW51cCgmYW1wO24tJmd0O2RldiwgZmFsc2UpOwogCWtmcmVlKG4tJmd0O2Rldi52cXMpOwogCWtmcmVlKG4pOwogCXJldHVybiAwOwpAQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCBzdGF0aWMgbG9uZyB2aG9zdF90ZXN0X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF90ZXN0ICpuKQogCXZob3N0X3Rlc3Rfc3RvcChuLCAmYW1wO3ByaXYpOwogCXZob3N0X3Rlc3RfZmx1c2gobik7CiAJdmhvc3RfZGV2X3N0b3AoJmFtcDtuLSZndDtkZXYpOwotCXZob3N0X2Rldl9yZXNldF9vd25lcigmYW1wO24tJmd0O2RldiwgdW1lbSk7CiYjNDM7CXZob3N0X2Rldl9yZXNldF9vd25lcigmYW1wO24tJmd0O2RldiwgdW1lbSwgZmFsc2UpOwogZG9uZToKIAltdXRleF91bmxvY2soJmFtcDtuLSZndDtkZXYubXV0ZXgpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jCmluZGV4IGFjNTUyNzVmYTBkMGFlLi40MjdjNGEzNGRiMmM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92ZHBhLmMKQEAgLTg5OCw3ICYjNDM7ODk4LDcgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJY2FzZSBWSE9TVF9TRVRfT1dORVI6CiAJCXIgPSB2aG9zdF92ZHBhX2JpbmRfbW0odik7CiAJCWlmIChyKQotCQkJdmhvc3RfZGV2X3Jlc2V0X293bmVyKGQsIE5VTEwpOwomIzQzOwkJCXZob3N0X2Rldl9yZXNldF9vd25lcihkLCBOVUxMLCBmYWxzZSk7CiAJCWJyZWFrOwogCX0KIG91dDoKQEAgLTEzOTYsNyAmIzQzOzEzOTYsNyBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NsZWFudXAoc3RydWN0IHZob3N0X3ZkcGEgKnYpCiAJfQogCiAJdmhvc3RfdmRwYV9mcmVlX2RvbWFpbih2KTsKLQl2aG9zdF9kZXZfY2xlYW51cCgmYW1wO3YtJmd0O3ZkZXYpOwomIzQzOwl2aG9zdF9kZXZfY2xlYW51cCgmYW1wO3YtJmd0O3ZkZXYsIGZhbHNlKTsKIAlrZnJlZSh2LSZndDt2ZGV2LnZxcyk7CiAJdi0mZ3Q7dmRldi52cXMgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jCmluZGV4IDRjNTI1YjNlMTZlYWQ4Li5iMTg0MjliMTVkMzIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwpAQCAtNzE5LDcgJiM0Mzs3MTksNyBAQCBzdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJfZGVzdHJveShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsCiAJa2ZyZWUod29ya2VyKTsKIH0KIAotc3RhdGljIHZvaWQgdmhvc3Rfd29ya2Vyc19mcmVlKHN0cnVjdCB2aG9zdF9kZXYgKmRldikKJiM0MztzdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJzX2ZyZWUoc3RydWN0IHZob3N0X2RldiAqZGV2LCBib29sIHN5bmMpCiB7CiAJc3RydWN0IHZob3N0X3dvcmtlciAqd29ya2VyOwogCXVuc2lnbmVkIGxvbmcgaTsKQEAgLTcyOSw2ICYjNDM7NzI5LDIxIEBAIHN0YXRpYyB2b2lkIHZob3N0X3dvcmtlcnNfZnJlZShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgZGV2LSZndDtudnFzOyBpJiM0MzsmIzQzOykKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0mZ3Q7dnFzW2ldLSZndDt3b3JrZXIsIE5VTEwpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIHBhdGggY2FuIGJlIHJlYWNoZWQgYnkgbG9ja2xlc3Mgd29yayBxdWV1ZXJzLiAgSW4gdGhpcyBjYXNlCiYjNDM7CSAqIHZob3N0X3ZxX3dvcmtfcXVldWUoKSByZWFkcyB2cS0mZ3Q7d29ya2VyIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc28gYQomIzQzOwkgKiBSQ1UgcmVhZGVyIHRoYXQgZmV0Y2hlZCBhIHdvcmtlciBiZWZvcmUgd2UgY2xlYXJlZCB0aGUgcG9pbnRlcnMgYWJvdmUKJiM0MzsJICogbWF5IHN0aWxsIGJlIHF1ZXVlaW5nIHdvcmsgb24gaXQuICBXYWl0IGZvciB0aG9zZSByZWFkZXJzIHRvIGZpbmlzaCwKJiM0MzsJICogdGhlbiBmbHVzaCBzbyBhbnkgd29yayB0aGV5IHF1ZXVlZCBydW5zIChjbGVhcmluZyBWSE9TVF9XT1JLX1FVRVVFRCkKJiM0MzsJICogYmVmb3JlIHRoZSB3b3JrZXJzIGFyZSBmcmVlZC4gIE5vdGFibHksIHRoYXQgaXMgdGhlIGNhc2UgZm9yIHRoZQomIzQzOwkgKiB2c29jayBSRVNFVF9PV05FUiBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKHN5bmMpIHsKJiM0MzsJCXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwkJdmhvc3RfZGV2X2ZsdXNoKGRldik7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIEZyZWUgdGhlIGRlZmF1bHQgd29ya2VyIHdlIGNyZWF0ZWQgYW5kIGNsZWFudXAgd29ya2VycyB1c2Vyc3BhY2UKIAkgKiBjcmVhdGVkIGJ1dCBjb3VsZG4mIzM5O3QgY2xlYW4gdXAgKGl0IGZvcmdvdCBvciBjcmFzaGVkKS4KQEAgLTExNDgsMTEgJiM0MzsxMTYzLDEyIEBAIHN0cnVjdCB2aG9zdF9pb3RsYiAqdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUodm9pZCkKIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Rldl9yZXNldF9vd25lcl9wcmVwYXJlKTsKIAogLyogQ2FsbGVyIHNob3VsZCBoYXZlIGRldmljZSBtdXRleCAqLwotdm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW0pCiYjNDM7dm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW0sCiYjNDM7CQkJICAgYm9vbCBzeW5jKQogewogCWludCBpOwogCi0Jdmhvc3RfZGV2X2NsZWFudXAoZGV2KTsKJiM0MzsJdmhvc3RfZGV2X2NsZWFudXAoZGV2LCBzeW5jKTsKIAogCWRldi0mZ3Q7Zm9ya19vd25lciA9IGZvcmtfZnJvbV9vd25lcl9kZWZhdWx0OwogCWRldi0mZ3Q7dW1lbSA9IHVtZW07CkBAIC0xMTk3LDcgJiM0MzsxMjEzLDcgQEAgdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2xlYXJfbXNnKTsKIAotdm9pZCB2aG9zdF9kZXZfY2xlYW51cChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCiYjNDM7dm9pZCB2aG9zdF9kZXZfY2xlYW51cChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIGJvb2wgc3luYykKIHsKIAlpbnQgaTsKIApAQCAtMTIyMSw3ICYjNDM7MTIzNyw3IEBAIHZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqZGV2KQogCWRldi0mZ3Q7aW90bGIgPSBOVUxMOwogCXZob3N0X2NsZWFyX21zZyhkZXYpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKCZhbXA7ZGV2LSZndDt3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pOwotCXZob3N0X3dvcmtlcnNfZnJlZShkZXYpOwomIzQzOwl2aG9zdF93b3JrZXJzX2ZyZWUoZGV2LCBzeW5jKTsKIAl2aG9zdF9kZXRhY2hfbW0oZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Rldl9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaCBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAppbmRleCAwMTkyYWRlNmU3NDkxMC4uMjlmYjFmNTEwYTM0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKQEAgLTIxNiw4ICYjNDM7MjE2LDkgQEAgbG9uZyB2aG9zdF9kZXZfc2V0X293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldik7CiBib29sIHZob3N0X2Rldl9oYXNfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2KTsKIGxvbmcgdmhvc3RfZGV2X2NoZWNrX293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKik7CiBzdHJ1Y3Qgdmhvc3RfaW90bGIgKnZob3N0X2Rldl9yZXNldF9vd25lcl9wcmVwYXJlKHZvaWQpOwotdm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiKTsKLXZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqKTsKJiM0Mzt2b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGIsCiYjNDM7CQkJICAgYm9vbCBzeW5jKTsKJiM0Mzt2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKTsKIHZvaWQgdmhvc3RfZGV2X3N0b3Aoc3RydWN0IHZob3N0X2RldiAqKTsKIGxvbmcgdmhvc3RfZGV2X2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKiwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncCk7CiBsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jCmluZGV4IDlhYWFiNmJiODA2MWMxLi45MDZjZWM3YjVhZmQ5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suYwpAQCAtNjEsNiAmIzQzOzYxLDcgQEAgc3RydWN0IHZob3N0X3Zzb2NrIHsKIAogCXUzMiBndWVzdF9jaWQ7CiAJYm9vbCBzZXFwYWNrZXRfYWxsb3c7CiYjNDM7CWJvb2wgZXZlcl9zdGFydGVkOyAvKiBzZXQgb24gZmlyc3QgU0VUX1JVTk5JTkcoMSk7IG5ldmVyIGNsZWFyZWQgKi8KIH07CiAKIHN0YXRpYyB1MzIgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQodm9pZCkKQEAgLTMwMiwxNyAmIzQzOzMwMywxMiBAQCB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KQogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24mIzM5O3QgZW5hYmxlZCB0aGUgUlggdnEgeWV0LiBRdWV1aW5nIHRoZSBwYWNrZXQKLQkgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdAotCSAqIHdpdGhpbiB0aGUgdGltZW91dCwgaXQmIzM5O2xsIGltbWVkaWF0ZWx5IHJlcGx5IHdpdGggUlNULCBiZWNhdXNlIHRoZXJlJiMzOTtzIG5vCi0JICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0LgotCSAqCi0JICogdmhvc3RfdnFfZ2V0X2JhY2tlbmQoKSB3aXRob3V0IHZxLSZndDttdXRleCBpcyBhY2NlcHRhYmxlIGhlcmU6IGxvY2tpbmcKLQkgKiB0aGUgbXV0ZXggd291bGQgYmUgdG9vIGV4cGVuc2l2ZSBpbiB0aGlzIGhvdCBwYXRoLCBhbmQgd2UgYWxyZWFkeSBoYXZlCi0JICogYWxsIHRoZSBvdXRjb21lcyBjb3ZlcmVkOiBpZiB0aGUgYmFja2VuZCBiZWNvbWVzIE5VTEwgcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLAotCSAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS4KJiM0MzsJLyogRmFzdC1mYWlsIHVudGlsIHRoZSBndWVzdCBmaXJzdCBlbmFibGVzIHRoZSBkZXZpY2UgKFNFVF9SVU5OSU5HKDEpKS4KJiM0MzsJICogQmVmb3JlIHRoYXQgdGhlcmUgaXMgbm8gbGlzdGVuZXIsIHNvIHF1ZXVpbmcgaXMgcG9pbnRsZXNzLgomIzQzOwkgKiAmIzM5O2V2ZXJfc3RhcnRlZCYjMzk7IGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UmIzM5O3JlIHVwIHdlIGtlZXAgcXVldWluZwomIzQzOwkgKiBhY3Jvc3MgbGF0ZXIgc3RvcCAvIENQUi1wYXVzZSB3aW5kb3dzLgogCSAqLwotCWlmICh1bmxpa2VseSghZGF0YV9yYWNlKHZob3N0X3ZxX2dldF9iYWNrZW5kKCZhbXA7dnNvY2stJmd0O3Zxc1tWU09DS19WUV9SWF0pKSkpIHsKJiM0MzsJaWYgKHVubGlrZWx5KCFSRUFEX09OQ0UodnNvY2stJmd0O2V2ZXJfc3RhcnRlZCkpKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CkBAIC02NDAsMTEgJiM0Mzs2MzYsMjMgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKQogCQltdXRleF91bmxvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwogCX0KIAomIzQzOwkvKiBTZXQgJiMzOTtldmVyX3N0YXJ0ZWQmIzM5OyBmbGFnIG9uIHRoZSBmaXJzdCBzdGFydDsgbmV2ZXIgY2xlYXJlZCwgc28gc2VuZF9wa3QKJiM0MzsJICoga2VlcHMgcXVldWluZyAoaW5zdGVhZCBvZiBmYXN0LWZhaWxpbmcpIG9uIGxhdGVyIHN0b3AgLyBDUFIgcGF1c2VzLgomIzQzOwkgKi8KJiM0MzsJV1JJVEVfT05DRSh2c29jay0mZ3Q7ZXZlcl9zdGFydGVkLCB0cnVlKTsKJiM0MzsKIAkvKiBTb21lIHBhY2tldHMgbWF5IGhhdmUgYmVlbiBxdWV1ZWQgYmVmb3JlIHRoZSBkZXZpY2Ugd2FzIHN0YXJ0ZWQsCiAJICogbGV0JiMzOTtzIGtpY2sgdGhlIHNlbmQgd29ya2VyIHRvIHNlbmQgdGhlbS4KIAkgKi8KIAl2aG9zdF92cV93b3JrX3F1ZXVlKCZhbXA7dnNvY2stJmd0O3Zxc1tWU09DS19WUV9SWF0sICZhbXA7dnNvY2stJmd0O3NlbmRfcGt0X3dvcmspOwogCiYjNDM7CS8qIFRoZSBndWVzdCBtYXkgaGF2ZSBhZGRlZCBUWCBidWZmZXJzIHdoaWxlIHRoZSBkZXZpY2Ugd2FzIHN0b3BwZWQKJiM0MzsJICogKGUuZy4gYWNyb3NzIFZIT1NUX1JFU0VUX09XTkVSKSBhbmQgdGhlaXIga2lja3MgZ290IGNvbnN1bWVkIGJ5CiYjNDM7CSAqIHRoZSBOVUxMLWJhY2tlbmQgd2luZG93LiAgUmUtc2NhbiB0aGUgVFggVlEsIG1pcnJvcmluZyB0aGUgUlgKJiM0MzsJICogc2VuZC13b3JrZXIga2ljayBhYm92ZS4KJiM0MzsJICovCiYjNDM7CXZob3N0X3BvbGxfcXVldWUoJmFtcDt2c29jay0mZ3Q7dnFzW1ZTT0NLX1ZRX1RYXS5wb2xsKTsKJiM0MzsKIAltdXRleF91bmxvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKIAlyZXR1cm4gMDsKIApAQCAtNjY0LDkgJiM0Mzs2NzIsMjQgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKQomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaykKIHsKJiM0MzsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7CiAJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodnNvY2stJmd0O3Zxcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl2cSA9ICZhbXA7dnNvY2stJmd0O3Zxc1tpXTsKJiM0MzsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwomIzQzOwkJdmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcikKJiM0Mzt7CiAJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZhbXA7dnNvY2stJmd0O2Rldi5tdXRleCk7CkBAIC02NzcsMTQgJiM0Mzs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcikKIAkJCWdvdG8gZXJyOwogCX0KIAotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHZzb2NrLSZndDt2cXMpOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZhbXA7dnNvY2stJmd0O3Zxc1tpXTsKLQotCQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKLQkJdmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpOwotCQltdXRleF91bmxvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwotCX0KLQomIzQzOwl2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzKHZzb2NrKTsKIGVycjoKIAltdXRleF91bmxvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtNzIwLDYgJiM0Mzs3MzYsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCiAJdnNvY2stJmd0O2d1ZXN0X2NpZCA9IDA7IC8qIG5vIENJRCBhc3NpZ25lZCB5ZXQgKi8KIAl2c29jay0mZ3Q7c2VxcGFja2V0X2FsbG93ID0gZmFsc2U7CiYjNDM7CXZzb2NrLSZndDtldmVyX3N0YXJ0ZWQgPSBmYWxzZTsKIAogCWF0b21pY19zZXQoJmFtcDt2c29jay0mZ3Q7cXVldWVkX3JlcGxpZXMsIDApOwogCkBAIC04MDcsNyAmIzQzOzgyNCw3IEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAKIAl2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX3B1cmdlKCZhbXA7dnNvY2stJmd0O3NlbmRfcGt0X3F1ZXVlKTsKIAotCXZob3N0X2Rldl9jbGVhbnVwKCZhbXA7dnNvY2stJmd0O2Rldik7CiYjNDM7CXZob3N0X2Rldl9jbGVhbnVwKCZhbXA7dnNvY2stJmd0O2RldiwgZmFsc2UpOwogCXB1dF9uZXRfdHJhY2sodnNvY2stJmd0O25ldCwgJmFtcDt2c29jay0mZ3Q7bnNfdHJhY2tlcik7CiAJa2ZyZWUodnNvY2stJmd0O2Rldi52cXMpOwogCXZob3N0X3Zzb2NrX2ZyZWUodnNvY2spOwpAQCAtODg2LDYgJiM0Mzs5MDMsMzYgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgdTY0IGZlYXR1cmVzKQogCXJldHVybiAtRUZBVUxUOwogfQogCiYjNDM7c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbTsKJiM0MzsJbG9uZyBlcnI7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKJiM0MzsJZXJyID0gdmhvc3RfZGV2X2NoZWNrX293bmVyKCZhbXA7dnNvY2stJmd0O2Rldik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGRvbmU7CiYjNDM7CXVtZW0gPSB2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSgpOwomIzQzOwlpZiAoIXVtZW0pIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGRvbmU7CiYjNDM7CX0KJiM0MzsJdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyh2c29jayk7CiYjNDM7CXZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTsKJiM0MzsJdmhvc3RfZGV2X3N0b3AoJmFtcDt2c29jay0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogdnNvY2sga2VlcHMgdGhlIENJRCBoYXNoZWQgYWNyb3NzIFJFU0VUX09XTkVSLCBzbyBhIGxvY2tsZXNzIHNlbmRlcgomIzQzOwkgKiBjYW4gc3RpbGwgcmVhY2ggdGhlIGRldmljZSB3aGlsZSBpdHMgd29ya2VycyBhcmUgZnJlZWQuICBQYXNzCiYjNDM7CSAqIHN5bmM9dHJ1ZSBzbyB2aG9zdF93b3JrZXJzX2ZyZWUoKSBmZW5jZXMgUkNVIHJlYWRlcnMgYW5kIGZsdXNoZXMKJiM0MzsJICogYmVmb3JlIGZyZWVpbmcgdGhlbS4KJiM0MzsJICovCiYjNDM7CXZob3N0X2Rldl9yZXNldF9vd25lcigmYW1wO3Zzb2NrLSZndDtkZXYsIHVtZW0sIHRydWUpOwomIzQzO2RvbmU6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3Zzb2NrLSZndDtkZXYubXV0ZXgpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLAogCQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC05MjksNiAmIzQzOzk3Niw4IEBAIHN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLAogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQl2aG9zdF9zZXRfYmFja2VuZF9mZWF0dXJlcygmYW1wO3Zzb2NrLSZndDtkZXYsIGZlYXR1cmVzKTsKIAkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgVkhPU1RfUkVTRVRfT1dORVI6CiYjNDM7CQlyZXR1cm4gdmhvc3RfdnNvY2tfcmVzZXRfb3duZXIodnNvY2spOwogCWRlZmF1bHQ6CiAJCW11dGV4X2xvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKIAkJciA9IHZob3N0X2Rldl9pb2N0bCgmYW1wO3Zzb2NrLSZndDtkZXYsIGlvY3RsLCBhcmdwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogdmhvc3QgU3Vic3lzdGVtIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBzb21lIHRhcmdldGVkIGNoYW5nZXMgd2l0aGluIHRoZSB2aG9zdCBzdWJzeXN0ZW0uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0IHNlZW1zIGxpa2UgYSBmYWlybHkgZm9jdXNlZCBzZXQgb2YgdXBkYXRlcywgc28gbGV0JiMzOTtzIGRpZyBpbi4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3Qgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgYSBgYm9vbCBzeW5jYCBwYXJhbWV0ZXIgdG8gYHZob3N0X2Rldl9jbGVhbnVwYCBhbmQgYHZob3N0X2Rldl9yZXNldF9vd25lcmAsIGFuZCB0aGVuIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAsIHdoaWNoIGxldmVyYWdlcyBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCB3aXRoIGBzeW5jPXRydWVgLiBJdCYjMzk7cyBhbHNvIHRvdWNoaW5nIGB2aG9zdF92c29ja19zdGFydGAgYW5kIGB2aG9zdF92c29ja19zdG9wYCBhbmQgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAuCgpJIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2Ygdmhvc3QtcmVsYXRlZCBmaWxlczogYG5ldC5jYCwgYHNjc2kuY2AsIGB0ZXN0LmNgLCBgdmRwYS5jYCwgYHZob3N0LmNgLCBgdmhvc3QuaGAsIGFuZCBgdnNvY2suY2AuIFRoYXQmIzM5O3MgYSBnb29kIGJyZWFkdGggb2YgY292ZXJhZ2UsIHdoaWNoIHN1Z2dlc3RzIHRoZSBzY29wZSBpcyBwb3RlbnRpYWxseSBicm9hZGVyIHRoYW4ganVzdCBvbmUgc3BlY2lmaWMgYXJlYS4gTm93LCBpdCBkYXducyBvbiBtZSB3aGF0IGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgaXMgZG9pbmcuIFRoaXMgbmV3IGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGhhbmRsaW5nIHRoZSBgVkhPU1RfUkVTRVRfT1dORVJgIGlvY3RsIHNwZWNpZmljYWxseSBmb3IgdnNvY2suIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgaW9jdGwgdXNlZCB0byBiZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IGB2aG9zdF9kZXZfaW9jdGxgLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQuLi4gWWVzLCBhIHF1aWNrIGxvb2sgYXQgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgdmVyaWZpZXMgdGhhdDogdGhlIGlvY3RsIGNhc2UgaGFzIGJlZW4gcmVwbGFjZWQuCgpPaCwgYW5kIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIGluIGB2c29jay5jYC4gVGhhdCBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBzdWJ0bGUgbG9naWMgdXBkYXRlOiB0aGV5JiMzOTt2ZSByZXBsYWNlZCBhIGNoZWNrIHdpdGggYW4gYXRvbWljIGNoZWNrLiBJIHRoaW5rIEkgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZSAtIHRoaXMgKmlzKiByZWFjaGFibGUgd2l0aGluIGEgVk0uIFRoaXMgZGVmaW5pdGVseSBtYWtlcyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmcsIHNvIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLgoKT2theSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBoZXJlLiBJJiMzOTttIGZvY3VzaW5nIG9uOgoKKiAgIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAKKiAgIGB2aG9zdF92c29ja19zdGFydGAKKiAgIGB2aG9zdF92c29ja19zdG9wYAoqICAgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAKKiAgIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgCiogICBgdmhvc3RfZGV2X2NsZWFudXBgCiogICBgdmhvc3Rfd29ya2Vyc19mcmVlYAoKRmluYWxseSwgbGV0JiMzOTtzIHNlZSBhYm91dCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEJhc2VkIG9uIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYENPTkZJR19WSE9TVF9WU09DS2AsIGBDT05GSUdfVkhPU1RfTkVUYCwgYENPTkZJR19WSE9TVF9TQ1NJYCwgYW5kIGBDT05GSUdfVkhPU1RfVkRQQWAgYXJlIG5lZWRlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGJ5IGdyZXBwaW5nIEtjb25maWcgZm9yIGBWSE9TVF9WU09DS2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX1ZTT0NLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz00Nj1jb25maWcgVkhPU1RfU0NTSVxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1Njpjb25maWcgVkhPU1RfVlNPQ0tcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01Ny1cdHRyaXN0YXRlIFwmIzM0O3Zob3N0IHZpcnRpby12c29jayBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTg2CgkJCQkJCQlvdXRwdXQ6IDY3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBWSE9TVF9WU09DSyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiB0aGUgYFZIT1NUX1ZTT0NLYCBsYW5kc2NhcGUuIEl0JiMzOTtzIHRvbyBlYXN5IHRvIGp1bXAgaW4gYW5kIGFzc3VtZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBjb3ZlcmVkLCBlc3BlY2lhbGx5IHdpdGggdGhlc2UgdmlydHVhbCBuZXR3b3JraW5nIHN0YWNrcy4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgKnZlcmlmeSogdGhvc2UgZGVwZW5kZW5jaWVzLiYjMzQ7IFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBtZW50YWwgbm90ZTsgaXQmIzM5O3MgYSAqcHJvYWN0aXZlKiBzdGVwLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgb3Zlcmxvb2tpbmcgZXZlbiBhIHNlZW1pbmdseSBtaW5vciBkZXBlbmRlbmN5IGNhbiBsZWFkIHRvIGhvdXJzIG9mIGRlYnVnZ2luZyBsYXRlciBvbi4gVGhpcyBjaGVjayBzaG91bGQgZW5jb21wYXNzIHRoZSBrZXJuZWwgbW9kdWxlcywgdGhlIHVzZXJzcGFjZSBsaWJyYXJpZXMsIGV2ZW4gdGhlIGh5cGVydmlzb3Igc2lkZSBvZiB0aGluZ3MgaWYgdGhpcyBpcyByZWxldmFudCB0byB0aGUgc3lzdGVtIGNvbnRleHQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBidWlsZGluZyBibG9ja3MsIHRoZSBsYXllcnMgaW52b2x2ZWQsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9WU09DSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU2Olx0Y29uZmlnIFZIT1NUX1ZTT0NLXG4gIDU3Olx0XHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG4gIDU4Olx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG4gIDU5Olx0XHRzZWxlY3QgVkhPU1RcbiAgNjA6XHRcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4gIDYxOlx0XHRkZWZhdWx0IG5cbiAgNjI6XHRcdGhlbHBcbiAgNjM6XHRcdFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIHRoZSBob3N0IGtlcm5lbCB0byBwcm92aWRlIEFGX1ZTT0NLXG4gIDY0Olx0XHRzb2NrZXRzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggZ3Vlc3RzLiAgVGhlIGd1ZXN0cyBtdXN0IGhhdmUgdGhlXG4gIDY1Olx0XHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSB0ZWNobm9sb2dpZXM6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBWaXJ0dWFsaXphdGlvbiBJbmZyYXN0cnVjdHVyZSBDb21wb25lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb21wb25lbnRzOiBgVkhPU1RfVlNPQ0tgLCBgVlNPQ0tFVFNgLCBhbmQgYEVWRU5URkRgLiBJIGtub3cgdGhlbSwgYnV0IGxldCBtZSBxdWlja2x5IGpvZyBteSBtZW1vcnkgYW5kIHNlZSBob3cgdGhleSBhcmUgcmVsYXRlZC4gR2l2ZW4gdGhhdCBjb250ZXh0LCBsZXQmIzM5O3Mgbm93IGNvbnNpZGVyIHRoZSByb2xlIG9mIGBWSE9TVF9ORVRgIGluIHRoaXMgbGFuZHNjYXBlLiBUaGlzIGlzIGxpa2VseSByZWxhdGVkLCBhbmQgSSBuZWVkIHRvIHNvbGlkaWZ5IHRoZSBhcmNoaXRlY3R1cmUgSSYjMzk7bSBpbWFnaW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgVkhPU1RfSU9UTEJcbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XHRoZWxwXG4gICA1Olx0XHQgIEdlbmVyaWMgSU9UTEIgaW1wbGVtZW50YXRpb24gZm9yIHZob3N0IGFuZCB2cmluZ2guXG4gICA2Olx0XHQgIFRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGFueSBkcml2ZXIgd2hpY2ggbmVlZHMgdG8gc3VwcG9ydFxuICAgNzpcdFx0ICBhbiBJT01NVSBpbiBzb2Z0d2FyZS5cbiAgIDg6XHRcbiAgIDk6XHRjb25maWcgVkhPU1RfUklOR1xuICAxMDpcdFx0dHJpc3RhdGVcbiAgMTE6XHRcdHNlbGVjdCBWSE9TVF9JT1RMQlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBpcyBzZWxlY3RlZCBieSBhbnkgZHJpdmVyIHdoaWNoIG5lZWRzIHRvIGFjY2Vzc1xuICAxNDpcdFx0ICB0aGUgaG9zdCBzaWRlIG9mIGEgdmlydGlvIHJpbmcuXG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIFZIT1NUX1RBU0tcbiAgMTc6XHRcdGJvb2xcbiAgMTg6XHRcdGRlZmF1bHQgblxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBWSE9TVFxuICAyMTpcdFx0dHJpc3RhdGVcbiAgMjI6XHRcdHNlbGVjdCBWSE9TVF9JT1RMQlxuICAyMzpcdFx0c2VsZWN0IFZIT1NUX1RBU0tcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYW55IGRyaXZlciB3aGljaCBuZWVkcyB0byBhY2Nlc3NcbiAgMjY6XHRcdCAgdGhlIGNvcmUgb2Ygdmhvc3QuXG4gIDI3Olx0XG4gIDI4Olx0bWVudWNvbmZpZyBWSE9TVF9NRU5VXG4gIDI5Olx0XHRib29sIFwmIzM0O1ZIT1NUIGRyaXZlcnNcJiMzNDtcbiAgMzA6XHRcdGRlZmF1bHQgeVxuICAzMTpcdFxuICAzMjpcdGlmIFZIT1NUX01FTlVcbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgVkhPU1RfTkVUXG4gIDM1Olx0XHR0cmlzdGF0ZSBcJiMzNDtIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFwmIzM0O1xuICAzNjpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IEVWRU5URkQgXHUwMDI2XHUwMDI2IChUVU4gfHwgIVRVTikgXHUwMDI2XHUwMDI2IChUQVAgfHwgIVRBUClcbiAgMzc6XHRcdHNlbGVjdCBWSE9TVFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXG4gIDQwOlx0XHQgIGd1ZXN0IG5ldHdvcmtpbmcgd2l0aCB2aXJ0aW9fbmV0LiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB2aXJ0aW9fbmV0XG4gIDQxOlx0XHQgIG1vZHVsZSBpdHNlbGYgd2hpY2ggbmVlZHMgdG8gYmUgbG9hZGVkIGluIGd1ZXN0IGtlcm5lbC5cbiAgNDI6XHRcbiAgNDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDQ0Olx0XHQgIGJlIGNhbGxlZCB2aG9zdF9uZXQuXG4gIDQ1Olx0XG4gIDQ2Olx0Y29uZmlnIFZIT1NUX1NDU0lcbiAgNDc6XHRcdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXHUwMDI2XHUwMDI2IEVWRU5URkRcbiAgNDk6XHRcdHNlbGVjdCBWSE9TVFxuICA1MDpcdFx0c2VsZWN0IFNHX1BPT0xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFZIT1NUX1ZEUEEgQ2hlY2sqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgaW1wdWxzZSBoZXJlIGlzIHRvIHplcm8gaW4gb24gYFZIT1NUX1ZEUEFgLiBJdCYjMzk7cyBhIGtleSBhcmVhIHRvIGV4YW1pbmUsIGxpa2VseSByZWxhdGVkIHRvIHZpcnR1YWxpemVkIGRldmljZXMgYW5kIHRoZSB2RFBBIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgbGV0JiMzOTtzIGVzdGFibGlzaCBhIGJhc2VsaW5lOiB3aGF0JiMzOTtzIHByb21wdGluZyB0aGlzIGNoZWNrPyYjMzQ7IElzIGl0IHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLCBhIHN1c3BlY3RlZCBidWcsIGEgbmV3IGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgYSBzZWN1cml0eSBhdWRpdD8KClRoZSBwcmVzZW5jZSBvZiBgVkhPU1RfVkRQQWAgaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdmlydHVhbCBtYWNoaW5lIGVudmlyb25tZW50cyB1c2luZyB2RFBBIOKAkyBsaWtlbHkgaW4gYSBkYXRhIGNlbnRlciBvciBjbG91ZCBzZXR0aW5nLiBXZSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgdmhvc3QgZGV2aWNlIGlzIGNvbmZpZ3VyZWQsIHRoZSB2aXJ0aW8gdHJhbnNwb3J0IGFuZCB0aGUgb3ZlcmFsbCByZXNvdXJjZSBhbGxvY2F0aW9uLiBJcyB0aGVyZSBhIHNwZWNpZmljIHZpcnR1YWwgZnVuY3Rpb24gSSBzaG91bGQgYmUgbG9va2luZyBhdCBmaXJzdCwgb3Igc3BlY2lmaWMgZHJpdmVycyBiZWluZyBlbXBsb3llZD8gQXJlIHdlIHBvdGVudGlhbGx5IGJ1bXBpbmcgaW50byBhbiBpc3N1ZSB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGlvbj8gT3IgYW0gSSBzaW1wbHkgdmVyaWZ5aW5nIHRoYXQgdkRQQSBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgYWNjb3JkaW5nIHRvIGJlc3QgcHJhY3RpY2VzPwoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb250ZXh0OiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLCB0aGUgaHlwZXJ2aXNvciwgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGFuZCB0aGUgc3BlY2lmaWMgdmlydHVhbCBtYWNoaW5lcyBpbnZvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25zIHRvIGRldGVybWluZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjY6XHRcbiAgNjc6XHRcdFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgNjg6XHRcdHZob3N0X3Zzb2NrLlxuICA2OTpcdFxuICA3MDpcdGNvbmZpZyBWSE9TVF9WRFBBXG4gIDcxOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFwmIzM0O1xuICA3MjpcdFx0ZGVwZW5kcyBvbiBFVkVOVEZEXG4gIDczOlx0XHRzZWxlY3QgVkhPU1RcbiAgNzQ6XHRcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcbiAgNzU6XHRcdGRlcGVuZHMgb24gVkRQQVxuICA3NjpcdFx0aGVscFxuICA3NzpcdFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXG4gIDc4Olx0XHQgIGd1ZXN0IHZpcnRpbyBkZXZpY2VzIHdpdGggdGhlIHZEUEEtYmFzZWQgYmFja2VuZHMuXG4gIDc5Olx0XG4gIDgwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgODE6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdmhvc3RfdmRwYS5cbiAgODI6XHRcbiAgODM6XHRjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxuICA4NDpcdFx0Ym9vbCBcJiMzNDtDcm9zcy1lbmRpYW4gc3VwcG9ydCBmb3Igdmhvc3RcJiMzNDtcbiAgODU6XHRcdGRlZmF1bHQgblxuICA4NjpcdFx0aGVscFxuICA4NzpcdFx0ICBUaGlzIG9wdGlvbiBhbGxvd3Mgdmhvc3QgdG8gc3VwcG9ydCBndWVzdHMgd2l0aCBhIGRpZmZlcmVudCBieXRlXG4gIDg4Olx0XHQgIG9yZGVyaW5nIGZyb20gaG9zdCB3aGlsZSB1c2luZyBsZWdhY3kgdmlydGlvLlxuICA4OTpcdFxuICA5MDpcdFx0ICBVc2Vyc3BhY2UgcHJvZ3JhbXMgY2FuIGNvbnRyb2wgdGhlIGZlYXR1cmUgdXNpbmcgdGhlXG4gIDkxOlx0XHQgIFZIT1NUX1NFVF9WUklOR19FTkRJQU4gYW5kIFZIT1NUX0dFVF9WUklOR19FTkRJQU4gaW9jdGxzLlxuICA5MjpcdFxuICA5MzpcdFx0ICBUaGlzIGlzIG9ubHkgdXNlZnVsIG9uIGEgZmV3IHBsYXRmb3JtcyAocHBjNjQgYW5kIGFybTY0KS4gU2luY2UgaXRcbiAgOTQ6XHRcdCAgYWRkcyBzb21lIG92ZXJoZWFkLCBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LlxuICA5NTpcdFxuICA5NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBcJiMzNDtOXCYjMzQ7LlxuICA5NzpcdFxuICA5ODpcdGNvbmZpZyBWSE9TVF9FTkFCTEVfRk9SS19PV05FUl9DT05UUk9MXG4gIDk5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBWSE9TVF9FTkFCTEVfRk9SS19PV05FUl9DT05UUk9MXCYjMzQ7XG4gMTAwOlx0XHRkZWZhdWx0IHlcbiAxMDE6XHRcdGhlbHBcbiAxMDI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0d28gSU9DVExzOiBWSE9TVF9TRVRfRk9SS19GUk9NX09XTkVSIGFuZFxuIDEwMzpcdFx0ICBWSE9TVF9HRVRfRk9SS19GUk9NX09XTkVSLiBUaGVzZSBhbGxvdyB1c2Vyc3BhY2UgYXBwbGljYXRpb25zXG4gMTA0Olx0XHQgIHRvIG1vZGlmeSB0aGUgdmhvc3Qgd29ya2VyIG1vZGUgZm9yIHZob3N0IGRldmljZXMuXG4gMTA1Olx0XG4gMTA2Olx0XHQgIEFsc28gZXhwb3NlIG1vZHVsZSBwYXJhbWV0ZXIgJiMzOTtmb3JrX2Zyb21fb3duZXJfZGVmYXVsdCYjMzk7IHRvIGFsbG93IHVzZXJzXG4gMTA3Olx0XHQgIHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBtb2RlIGZvciB2aG9zdCB3b3JrZXJzLlxuIDEwODpcdFxuIDEwOTpcdFx0ICBCeSBkZWZhdWx0LCBgVkhPU1RfRU5BQkxFX0ZPUktfT1dORVJfQ09OVFJPTGAgaXMgc2V0IHRvIGB5YCxcbiAxMTA6XHRcdCAgdXNlcnMgY2FuIGNoYW5nZSB0aGUgd29ya2VyIHRocmVhZCBtb2RlIGFzIG5lZWRlZC5cbiAxMTE6XHRcdCAgSWYgdGhpcyBjb25maWcgaXMgZGlzYWJsZWQgKG4pLHRoZSByZWxhdGVkIElPQ1RMcyBhbmQgcGFyYW1ldGVycyB3aWxsXG4gMTEyOlx0XHQgIGJlIHVuYXZhaWxhYmxlLlxuIDExMzpcdFxuIDExNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBcJiMzNDtZXCYjMzQ7LlxuIDExNTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM1NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0IFBhdGNoIGZvciBFbmhhbmNlZCBUZXN0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBzb21lIHByZXR0eSBrZXkgYXJlYXM6IGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgIOKAkyBzcGVjaWZpY2FsbHkgYHZob3N0X2Rldl9jbGVhbnVwYCBhbmQgYHZob3N0X2Rldl9yZXNldF9vd25lcmAg4oCTIGFuZCB0aGVuIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIHdpdGggYSBtb2RpZmljYXRpb24gdG8gYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYC4gVGhpcyBzY3JlYW1zIGBWSE9TVF9WU09DS2AgYXMgdGhlIHByaW1hcnkgZm9jdXMsIGJ1dCB0aGUgY2hhbmdlcyBpbiB0aGUgY29yZSB2aG9zdCBmaWxlIG1lYW4gd2UgYWxzbyBoYXZlIHRvIGNvbnNpZGVyIGBWSE9TVF9ORVRgLCBgVkhPU1RfU0NTSWAsIGFuZCBgVkhPU1RfVkRQQWAuIFRoZXNlIGFsbCBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSBFbmFibGVDb25maWdzLiBJJiMzOTtsbCBhbHNvIGFkZCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAgYXMgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBzZWxlY3Rpbmcgc29tZSBhcHByb3ByaWF0ZSBmb2N1cyBzeW1ib2xzIGZvciB0ZXN0aW5nLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGB2aG9zdF92c29ja19yZXNldF9vd25lcmAsIGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19zdG9wYCwgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLCBgdmhvc3RfZGV2X2NsZWFudXBgLCBgdmhvc3Rfd29ya2Vyc19mcmVlYCwgYW5kIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRoaW5rIGNyaXRpY2FsbHkgYWJvdXQgdGhlc2UuIEZpcnN0LCBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YC4gSG1tLCBpdCYjMzk7cyBhbiBBUEkgZW50cnkgcG9pbnQgZm9yIHZzb2NrIHRyYW5zcG9ydCwgc28gaW5pdGlhbGx5IGl0IGxvb2tzIGdvb2QuIEJ1dCB3YWl0LCBpdCYjMzk7cyBhIGhvdC1wYXRoIGZ1bmN0aW9uISBBbmQgSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdCBkaXN0cmlidXRpb24gZnJvbSBiZWluZyBza2V3ZWQuIFNjcmF0Y2ggdGhhdC4KClNvLCBJJiMzOTttIGxpa2luZyBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGFzIGEgc29saWQgY2FuZGlkYXRlLiBBbHNvLCBgdmhvc3RfdnNvY2tfc3RhcnRgIGFuZCBgdmhvc3RfdnNvY2tfc3RvcGAgYXJlIHByb21pc2luZy4gVGhlbiB0aGUgY29yZSB2aG9zdCBmdW5jdGlvbnMsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIGFuZCBgdmhvc3RfZGV2X2NsZWFudXBgLCBhcmUgZGVmaW5pdGVseSB3b3J0aCBjb25zaWRlcmluZy4gTm93LCBgdmhvc3Rfd29ya2Vyc19mcmVlYCBpcyBzdGF0aWMuLi4gdGhhdCYjMzk7cyBhIG5vLWdvLiBObyBuZWVkIHRvIGdvIHRoZXJlLgoKT2theSwgbGV0JiMzOTtzIGp1c3QgZG91YmxlLWNoZWNrLCBmb3IgZ29vZCBtZWFzdXJlLCB0aGF0IGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgYW5kIGB2aG9zdF92c29ja19zdGFydGAgYXJlIHRoZSByaWdodCBjaG9pY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92c29ja19yZXNldF9vd25lciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9ODcxPXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIHU2NCBmZWF0dXJlcylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTA1LVxuZHJpdmVycy92aG9zdC92c29jay5jOjkwNjpzdGF0aWMgbG9uZyB2aG9zdF92c29ja19yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuZHJpdmVycy92aG9zdC92c29jay5jLTkwNy17XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTkzNj1zdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTc5LVx0Y2FzZSBWSE9TVF9SRVNFVF9PV05FUjpcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5ODA6XHRcdHJldHVybiB2aG9zdF92c29ja19yZXNldF9vd25lcih2c29jayk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTgxLVx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqRXhhbWluaW5nIHZob3N0LXZzb2NrIEFQSSBEZXNpZ24qKgoKT2theSwgc28gYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSByZWNhbGwgYSBwcmVmZXJlbmNlIGZvciBtb3JlIGZsZXhpYmxlIEFQSSBkZXNpZ24sIGFuZCBhIHN0eWxlIGd1aWRlIGl0ZW0gb2Z0ZW4gc3VyZmFjZXMgaW4gbXkgbWVtb3J5LCBzcGVjaWZpY2FsbHk6ICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIHdheSBJIHVzdWFsbHkgYXBwcm9hY2ggdGhlc2UgdGhpbmdzLiBJIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhIGdvb2QgcmVhc29uIGZvciB0aGlzLgoKV2FpdCBhIG1pbnV0ZSwgSSBqdXN0IHJlYWxpemVkIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIGlzICphbHNvKiBzdGF0aWMuIFRoaXMgaXMgYmVjb21pbmcgYSBwYXR0ZXJuLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgYW5kIHNlZSBpZiB0aGUgcmVhc29uaW5nIGJlaGluZCBpdHMgc3RhdGljIG5hdHVyZSBiZWNvbWVzIGFwcGFyZW50LCBhcyBpdCBjb3VsZCBpbmZsdWVuY2UgdGhlIGRlc2lnbiBvZiB0aGUgb3RoZXIgc3RhdGljIGZ1bmN0aW9ucyB0b28uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGVyZS4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBpbnRlcm5hbCByZWFzb24gZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Zzb2NrX2Rldl9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9OTA2PXN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTkzNS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5MzY6c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTM3LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTAyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF92c29ja19mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDI1LVx0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMjY6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF92c29ja19kZXZfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyNy1cdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTUzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdmhvc3RfdnNvY2tfZGV2X2lvY3RsIEFQSSBFbnRyeXBvaW50KioKCk9rYXksIHNvIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIGlzIHRoZSBgdW5sb2NrZWRfaW9jdGxgIGhhbmRsZXIsIHdoaWNoIG1ha2VzIGl0IGEgY3J1Y2lhbCBBUEkgZW50cnlwb2ludCwgZXZlbiBpZiBpdCYjMzk7cyB0ZWNobmljYWxseSBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCBhIGNvbmNlcm4gYXJpc2VzOiBTeXprYWxsZXIsIGluIG15IGV4cGVyaWVuY2UsIHN0cnVnZ2xlcyB0byBkaXJlY3RseSByZXNvbHZlIHN0YXRpYyBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBhcmUgaW5saW5lZC4gQnV0LCB0aGUgZ29vZCBuZXdzIGlzIHRoYXQgYHVubG9ja2VkX2lvY3RsYCBpc24mIzM5O3QgaW5saW5lZCwgc28gdGhhdCBzaG91bGRuJiMzOTt0IGJlIGEgcHJvYmxlbSBpbiB0aGlzIGluc3RhbmNlLgoKSG93ZXZlciwgSSBub3RlIHRoYXQgYm90aCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCBhbmQgYHZob3N0X2Rldl9jbGVhbnVwYCBhcmUgZXhwb3J0ZWQgc3ltYm9scy4gVGhpcyBpcyBpbnRyaWd1aW5nLiBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfZGV2X3Jlc2V0X293bmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYz0xMTUzPXN0YXRpYyBzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiX2FsbG9jKHZvaWQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTExNTgtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTE1OTpzdHJ1Y3Qgdmhvc3RfaW90bGIgKnZob3N0X2Rldl9yZXNldF9vd25lcl9wcmVwYXJlKHZvaWQpXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE2MC17XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTExNjItfVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjExNjM6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTExNjQtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE2NS0vKiBDYWxsZXIgc2hvdWxkIGhhdmUgZGV2aWNlIG11dGV4ICovXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTE2Njp2b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbSxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMTY3LVx0XHRcdCAgIGJvb2wgc3luYylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE4MC19XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTE4MTpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXZfcmVzZXRfb3duZXIpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTExODItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODEzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZGluZyBLZXkgVmhvc3QgdnNvY2sgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZXhwb3J0ZWQgc3ltYm9scywgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYHZob3N0X2Rldl9yZXNldF9vd25lcmAgYW5kIGB2aG9zdF9kZXZfY2xlYW51cGAgYXJlIGltcG9ydGFudCBwaWVjZXMuIEkmIzM5O2xsIGFkZCB0aG9zZSByaWdodCBhd2F5LCBhcyB0aGV5IHNlZW0gZnVuZGFtZW50YWwgdG8gdGhlIGRldmljZSBtYW5hZ2VtZW50LiBBbmQsIG9mIGNvdXJzZSwgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgaXMgdGhlIGlvY3RsIGhhbmRsZXIsIHNvIHRoYXQmIzM5O3MgYSBkZWZpbml0ZSBhZGQg4oCTIGNydWNpYWwgZm9yIHRoZSBpbnRlcmZhY2UuCgpIbW0sIEkgc2VlIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgaXMgc3RhdGljIGJ1dCBub3QgaW5saW5lZC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYSBzd2l0Y2ggc3RhdGVtZW50IGluIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLiBJdCYjMzk7cyB0ZWNobmljYWxseSBva2F5IHRvIGluY2x1ZGUgaXQsIGJ1dCBnaXZlbiBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBpb2N0bCBoYW5kbGVyLCBJIHRoaW5rIGl0JiMzOTtzIG1vcmUgaW5mb3JtYXRpdmUgYW5kIGxlc3MgcmVkdW5kYW50IHRvIHNpbXBseSBhZGQgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgaW5zdGVhZC4gSXQgY2FwdHVyZXMgdGhlIGNvbnRleHQgYmV0dGVyLgoKQWxyaWdodCwgdGhlIGxpc3QgaXM6IGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLCBgdmhvc3RfZGV2X2NsZWFudXBgLCBhbmQgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAuCgpOb3csIGJlZm9yZSBJIGZpbmFsaXplIHRoaXMsIGxldCBtZSBxdWlja2x5IGdsYW5jZSBhdCBgdmhvc3RfdnNvY2tfc3RhcnRgIGFuZCBgdmhvc3RfdnNvY2tfc3RvcGAgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgaW4gdGhhdCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92c29ja19zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NTk3PXN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MDYtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NjA3OnN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RhcnQoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MDgte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05MzY9c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTk1NC1cdFx0aWYgKHN0YXJ0KVxuZHJpdmVycy92aG9zdC92c29jay5jOjk1NTpcdFx0XHRyZXR1cm4gdmhvc3RfdnNvY2tfc3RhcnQodnNvY2spO1xuZHJpdmVycy92aG9zdC92c29jay5jLTk1Ni1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKlN0cmVhbWxpbmluZyBWaG9zdC1WU29jayBNYW5hZ2VtZW50KioKCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgdmhvc3QtdnNvY2sgc2V0dXAuIEkgc2VlIHRoYXQgYHZob3N0X3Zzb2NrX3N0YXJ0YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEhtbSwgdGhhdCBzdWdnZXN0cyBpdCBtaWdodCBiZSBpbnRlcm5hbCB0byB0aGUgbW9kdWxlLCBhbmQgdGhlcmVmb3JlIHdlJiMzOTtyZSBub3QgbmVjZXNzYXJpbHkgcmVsaWFudCBvbiBpdCBhcyB0aGUgY2VudHJhbCBwb2ludCBvZiBjb250cm9sLiBUaGF0IG9wZW5zIHVwIHNvbWUgaW50ZXJlc3RpbmcgcG9zc2liaWxpdGllcyBmb3IgcmVmYWN0b3JpbmcuCgpUaGlua2luZyBpdCB0aHJvdWdoLCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhpcyBvbmUgc3RhdGljIGZ1bmN0aW9uLCB3aHkgZG9uJiMzOTt0IHdlIGp1c3QgbGVhbiBvbiB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmU/IFdlJiMzOTt2ZSBnb3QgYHZob3N0X2Rldl9yZXNldF9vd25lcmAsIGB2aG9zdF9kZXZfY2xlYW51cGAsIGFuZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCByZWFkaWx5IGF2YWlsYWJsZS4gVGhleSBzaG91bGQgZ2l2ZSB1cyBhbGwgdGhlIG5lY2Vzc2FyeSBob29rcyBhbmQgcG9pbnRzIG9mIGludGVyYWN0aW9uIHdlIG5lZWQuIFRoaXMgc2hvdWxkIHNpbXBsaWZ5IHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgbWFrZSB0aGluZ3MgZWFzaWVyIHRvIG1haW50YWluIGxvbmctdGVybS4KCkJlZm9yZSBjb21taXR0aW5nIHRvIHRoYXQsIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBwcmluY2lwbGUgaXMgY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgZG8gYSBxdWljayBzY2FuIG9mIGB2aG9zdF9uZXRfcmVzZXRfb3duZXJgIGFuZCBgdmhvc3RfdGVzdF9yZXNldF9vd25lcmAgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBzb21lIGltcG9ydGFudCBudWFuY2UuIEp1c3Qgd2FudCB0byBtYWtlIHN1cmUgdGhlIGdlbmVyYWwgZGVzaWduIHBhdHRlcm4gb2Ygb3duZXIgcmVzZXQgaXMgY29uc2lzdGVudCBhY3Jvc3MgYWxsIHZob3N0IGltcGxlbWVudGF0aW9ucy4gT2theSwgZ29vZC4gVGhhdCBzaG91bGQgYmUgYSBzb2xpZCBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfbmV0X3Jlc2V0X293bmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jPTE1NDQ9c3RhdGljIGxvbmcgdmhvc3RfbmV0X3NldF9iYWNrZW5kKHN0cnVjdCB2aG9zdF9uZXQgKm4sIHVuc2lnbmVkIGluZGV4LCBpbnQgZmQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNjQ0LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxNjQ1OnN0YXRpYyBsb25nIHZob3N0X25ldF9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfbmV0ICpuKVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNjQ2LXtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE3NDc9c3RhdGljIGxvbmcgdmhvc3RfbmV0X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xODMxLVx0Y2FzZSBWSE9TVF9SRVNFVF9PV05FUjpcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTgzMjpcdFx0cmV0dXJuIHZob3N0X25ldF9yZXNldF9vd25lcihuKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTgzMy1cdGNhc2UgVkhPU1RfU0VUX09XTkVSOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgdkhvc3QgSU9DVEwgSGFuZGxlciBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgdkhvc3QgY29kZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBpbnRlZ3JhdGUgdGhlc2UgbmV3IElPQ1RMIGhhbmRsZXJzLiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIGFib3V0IGFkZGluZyBgdmhvc3RfbmV0X2lvY3RsYCBkaXJlY3RseSwgYnV0IHRoZW4gSSBzYXcgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIHJlc2V0IGFuZCByZWxlYXNlLCBhbmQgSSByZWFsaXplZCB0aGlzIGlzIG1vcmUgY29tcGxleC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gbW9kaWZ5IHRob3NlIHNwZWNpZmljIGhhbmRsZXJzLCBidXQgbG9va2luZyBkZWVwZXIsIGl0JiMzOTtzIGNsZWFyIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgaGluZ2VzIGFyb3VuZCBgdmhvc3RfZGV2X2NsZWFudXBgIGFuZCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYC4gU28sIEkmIzM5O2xsIGZvY3VzIHRoZXJlLgoKSSYjMzk7bGwgY29uc29saWRhdGUgdGhlIGltcG9ydGFudCBJT0NUTCBoYW5kbGVycywgZm9jdXNpbmcgb24gYSBjbGVhbiBhbmQgbWFpbnRhaW5hYmxlIHNvbHV0aW9uLiBTbyB0aGUgZmluYWwgbGlzdCBvZiBmdW5jdGlvbnMgSSB3aWxsIGFkZCBhcmU6IGB2aG9zdF9kZXZfY2xlYW51cGAsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCwgYHZob3N0X25ldF9pb2N0bGAsIGFuZCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuCgpUaGVuIEkgbmVlZCB0byBjb25zaWRlciB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQuIFRoZSBjb3JlIGNvbmZpZ3MgSSYjMzk7bSBkZWFsaW5nIHdpdGggaW5jbHVkZTogYFZIT1NUX1ZTT0NLYCwgYFZIT1NUX05FVGAsIGBWSE9TVF9TQ1NJYCwgYFZIT1NUX1ZEUEFgLCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAuIEkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIHdoZXRoZXIgdGhlIGBWSE9TVF9URVNUYCBjb25maWcgZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9URVNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBhIHZob3N0IFRlc3QgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBJIGhhdmUgaXMsIHVuZGVyIHdoaWNoIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyB0aGlzIHRlc3QgY29kZSBhY3R1YWxseSBjb21waWxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29udGV4dCB0byBrbm93IHdoZW4gYW5kIGhvdyB0aGlzIGNvZGUgaXMgZXhlY3V0ZWQuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBnaXZlIG1lIHRoZSBwcm9wZXIgY29udGV4dCB0byByZXZpZXcgdGhlIGNvZGUgb3IgYXR0ZW1wdCBkZWJ1Z2dpbmcuIEkgY2FuJiMzOTt0IGp1c3QgZGl2ZSBpbiB3aXRob3V0IGtub3dpbmcgdGhlIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZXN0XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBWaG9zdCBEcml2ZXIgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1hZ2ljIGZvciB0aGUgdmhvc3QgZHJpdmVyIGlzIGRlZmluZWQsIGFuZCBpdCYjMzk7cyB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgaWYgSSB3YW50IHRvIHVuZGVyc3RhbmQgb3IgbW9kaWZ5IGl0cyBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIGhvdyB0aGlzIHRoaW5nIGFzc2VtYmxlcywgaXRzIGRlcGVuZGVuY2llcywgYW5kIGFueSBjdXN0b20gYnVpbGQgc3RlcHMuIEl0JiMzOTtzIHRpbWUgdG8gcGFyc2UgdGhlIHJ1bGVzIGFuZCB2YXJpYWJsZXMgaW4gdGhlcmUgYW5kIHNlZSBob3cgdGhpbmdzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19WSE9TVF9ORVQpICYjNDM7PSB2aG9zdF9uZXQub1xuICAgMzpcdHZob3N0X25ldC15IDo9IG5ldC5vXG4gICA0Olx0XG4gICA1Olx0b2JqLSQoQ09ORklHX1ZIT1NUX1NDU0kpICYjNDM7PSB2aG9zdF9zY3NpLm9cbiAgIDY6XHR2aG9zdF9zY3NpLXkgOj0gc2NzaS5vXG4gICA3Olx0XG4gICA4Olx0b2JqLSQoQ09ORklHX1ZIT1NUX1ZTT0NLKSAmIzQzOz0gdmhvc3RfdnNvY2sub1xuICAgOTpcdHZob3N0X3Zzb2NrLXkgOj0gdnNvY2sub1xuICAxMDpcdFxuICAxMTpcdG9iai0kKENPTkZJR19WSE9TVF9SSU5HKSAmIzQzOz0gdnJpbmdoLm9cbiAgMTI6XHRcbiAgMTM6XHRvYmotJChDT05GSUdfVkhPU1RfVkRQQSkgJiM0Mzs9IHZob3N0X3ZkcGEub1xuICAxNDpcdHZob3N0X3ZkcGEteSA6PSB2ZHBhLm9cbiAgMTU6XHRcbiAgMTY6XHRvYmotJChDT05GSUdfVkhPU1QpXHQmIzQzOz0gdmhvc3Qub1xuICAxNzpcdFxuICAxODpcdG9iai0kKENPTkZJR19WSE9TVF9JT1RMQikgJiM0Mzs9IHZob3N0X2lvdGxiLm9cbiAgMTk6XHR2aG9zdF9pb3RsYi15IDo9IGlvdGxiLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEJ1aWxkIENvbmZpZ3VyYXRpb24gRGlzY3JlcGFuY3kqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy92aG9zdC90ZXN0LmNgLiBUaGUgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQgKnNob3VsZCogYmUgcGFydCBvZiB0aGUgYGRyaXZlcnMvdmhvc3RgIGJ1aWxkIHByb2Nlc3MuIEhvd2V2ZXIsIGEgcXVpY2sgc2NhbiBzdWdnZXN0cyBpdCYjMzk7cyAqbm90KiBkaXJlY3RseSBsaXN0ZWQgaW4gdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gZG91YmxlLWNoZWNrIHRoZSBNYWtlZmlsZSBtb3JlIHRob3JvdWdobHkuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZSBpbmNsdXNpb24gaGFwcGVucyBsYXRlciBvbiwgcGVyaGFwcyB0aHJvdWdoIGEgdmFyaWFibGUgZXhwYW5zaW9uIG9yIGFuIGluZGlyZWN0IGluY2x1ZGUuIEkgbmVlZCB0byBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IG9mIGEgc2ltcGxlIG92ZXJzaWdodCBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gbW9yZSBjb21wbGV4IGJ1aWxkIHN5c3RlbSBsb2dpYyBvciBtYWtlIGFzc3VtcHRpb25zIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBmaWxlIGlzIGluY2x1ZGVkIGZ1cnRoZXIgZG93biBpbiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ZmlsZSBkcml2ZXJzL3Zob3N0L01ha2VmaWxlIGRvZXMgbm90IGhhdmUgbGluZSAyMCwgaXQgaGFzIG9ubHkgMTkgbGluZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2ZpbGUgZHJpdmVycy92aG9zdC9NYWtlZmlsZSBkb2VzIG5vdCBoYXZlIGxpbmUgMjAsIGl0IGhhcyBvbmx5IDE5IGxpbmVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk2MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgZHJpdmVycy92aG9zdC90ZXN0LmNgKioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBgZHJpdmVycy92aG9zdC90ZXN0LmNgLCBhbmQgSSYjMzk7dmUgaGl0IGEgbWVudGFsIHJvYWRibG9jay4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqV2hlcmUqIGV4YWN0bHkgZG9lcyB0aGUgYnVpbGQgc3lzdGVtIGNvbXBpbGUgdGhpcyBmaWxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0ZXN0IGNvZGUgaXMgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIGJ1aWxkIHByb2Nlc3MuIElzIGl0IHBhcnQgb2YgdGhlIG1haW4ga2VybmVsIGJ1aWxkPyBJcyBpdCBhIHNlcGFyYXRlIG1vZHVsZT8gSXMgaXQgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZmlndXJpbmcgb3V0IGhvdyB0aGUgdGVzdCBzdWl0ZSBpcyBydW4sIGFuZCBob3cgdG8gcG90ZW50aWFsbHkgbW9kaWZ5IG9yIGV4dGVuZCBpdC4gSSBuZWVkIHRvIGZpbmQgdGhlIHJlbGV2YW50IGBNYWtlZmlsZWAsIGBLY29uZmlnYCBvcHRpb25zLCBvciBidWlsZCBzY3JpcHRzIHRvIHRyYWNlIHRoaXMuIEl0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyB0ZXN0IGZpbGUuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGVzdFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjE4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBmb3IgYSBUZXN0IFZpcnR1YWwgSG9zdCBGaWxlKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzLCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBzdGFydCB3aXRoIGEgc2FuaXR5IGNoZWNrLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgc2ltcGxlLCByZWFkaWx5IGF2YWlsYWJsZSB0ZXN0IGZpbGUuIFNvLCBJIG5lZWQgdG8gbG9vayBmb3Igc29tZXRoaW5nIHRoYXQgbWlnaHQgYmUgbmFtZWQgYHZob3N0X3Rlc3QuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIuIEl0JiMzOTtzIGEgcXVpY2sgd2F5IHRvIGdhdWdlIHRoZSBleGlzdGluZyBzdHJ1Y3R1cmUgYW5kIHBvdGVudGlhbGx5IGlkZW50aWZ5IGFueSBwcmUtYnVpbHQgZXhhbXBsZXMgb3IgY29uZmlndXJhdGlvbnMgSSBjYW4gbGV2ZXJhZ2UuIEl04oCZcyB0aGUgc3RhcnRpbmcgcG9pbnQgb2YgYW55IGdvb2QgaW52ZXN0aWdhdGlvbiwgZmluZCB0aGUga25vd24gZ29vZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF90ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC90ZXN0LmMtMzAtXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMTpzdGF0aWMgY29uc3QgaW50IHZob3N0X3Rlc3RfYml0c1tdID0ge1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMzItXHRWSE9TVF9GRUFUVVJFU1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0LVxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzU6I2RlZmluZSBWSE9TVF9URVNUX0ZFQVRVUkVTIFZIT1NUX0ZFQVRVUkVTX1U2NCh2aG9zdF90ZXN0X2JpdHMsIDApXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNi1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTM3PWVudW0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTQxLVxuZHJpdmVycy92aG9zdC90ZXN0LmM6NDI6c3RydWN0IHZob3N0X3Rlc3Qge1xuZHJpdmVycy92aG9zdC90ZXN0LmMtNDMtXHRzdHJ1Y3Qgdmhvc3RfZGV2IGRldjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy00OC0gKiByZWFkLXNpemUgY3JpdGljYWwgc2VjdGlvbiBmb3Igb3VyIGtpbmQgb2YgUkNVLiAqL1xuZHJpdmVycy92aG9zdC90ZXN0LmM6NDk6c3RhdGljIHZvaWQgaGFuZGxlX3ZxKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxuZHJpdmVycy92aG9zdC90ZXN0LmMtNTAte1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTEwMj1zdGF0aWMgdm9pZCBoYW5kbGVfdnFfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMDUtXHRcdFx0XHRcdFx0ICBwb2xsLndvcmspO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTA2Olx0c3RydWN0IHZob3N0X3Rlc3QgKm4gPSBjb250YWluZXJfb2YodnEtXHUwMDNlZGV2LCBzdHJ1Y3Qgdmhvc3RfdGVzdCwgZGV2KTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTEwNy1cbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMTAtXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMTE6c3RhdGljIGludCB2aG9zdF90ZXN0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMTIte1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTEzOlx0c3RydWN0IHZob3N0X3Rlc3QgKm4gPSBrbWFsbG9jX29iaigqbik7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMTQtXHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXY7XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTM1LVxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTM2OnN0YXRpYyB2b2lkICp2aG9zdF90ZXN0X3N0b3BfdnEoc3RydWN0IHZob3N0X3Rlc3QgKm4sXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMzctXHRcdFx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNDctXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxNDg6c3RhdGljIHZvaWQgdmhvc3RfdGVzdF9zdG9wKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB2b2lkICoqcHJpdmF0ZXApXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNDkte1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTUwOlx0KnByaXZhdGVwID0gdmhvc3RfdGVzdF9zdG9wX3ZxKG4sIG4tXHUwMDNldnFzICYjNDM7IFZIT1NUX1RFU1RfVlEpO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMTUxLX1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE1Mi1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjE1MzpzdGF0aWMgdm9pZCB2aG9zdF90ZXN0X2ZsdXNoKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTU0LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNTctXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxNTg6c3RhdGljIGludCB2aG9zdF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNTkte1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTYwOlx0c3RydWN0IHZob3N0X3Rlc3QgKm4gPSBmLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE2MS1cdHZvaWQgICpwcml2YXRlO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMTYyLVxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTYzOlx0dmhvc3RfdGVzdF9zdG9wKG4sIFx1MDAyNnByaXZhdGUpO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTY0Olx0dmhvc3RfdGVzdF9mbHVzaChuKTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE2NS1cdHZob3N0X2Rldl9zdG9wKFx1MDAyNm4tXHUwMDNlZGV2KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNzEtXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxNzI6c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9ydW4oc3RydWN0IHZob3N0X3Rlc3QgKm4sIGludCB0ZXN0KVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTczLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yMTAtXHRcdGlmIChvbGRwcml2KSB7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoyMTE6XHRcdFx0dmhvc3RfdGVzdF9mbHVzaChuKTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTIxMi1cdFx0fVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTIyMi1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjIyMzpzdGF0aWMgbG9uZyB2aG9zdF90ZXN0X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjI0LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yMzctXHR9XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoyMzg6XHR2aG9zdF90ZXN0X3N0b3AobiwgXHUwMDI2cHJpdik7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoyMzk6XHR2aG9zdF90ZXN0X2ZsdXNoKG4pO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMjQwLVx0dmhvc3RfZGV2X3N0b3AoXHUwMDI2bi1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI0Ni1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjI0NzpzdGF0aWMgaW50IHZob3N0X3Rlc3Rfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB1NjQgZmVhdHVyZXMpXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yNDgte1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI2NC1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjI2NTpzdGF0aWMgbG9uZyB2aG9zdF90ZXN0X3NldF9iYWNrZW5kKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB1bnNpZ25lZCBpbmRleCwgaW50IGZkKVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjY2LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMDMtXHRpZiAoZW5hYmxlKSB7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMDQ6XHRcdHZob3N0X3Rlc3RfZmx1c2gobik7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMDUtXHR9XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzE2LVxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzE3OnN0YXRpYyBsb25nIHZob3N0X3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMxOC1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMyMC1cdHN0cnVjdCB2aG9zdF92cmluZ19maWxlIGJhY2tlbmQ7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMjE6XHRzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiA9IGYtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMzIyLVx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzMwLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MzMxOlx0XHRyZXR1cm4gdmhvc3RfdGVzdF9ydW4obiwgdGVzdCk7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMzItXHRjYXNlIFZIT1NUX1RFU1RfU0VUX0JBQ0tFTkQ6XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzM0LVx0XHRcdHJldHVybiAtRUZBVUxUO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MzM1Olx0XHRyZXR1cm4gdmhvc3RfdGVzdF9zZXRfYmFja2VuZChuLCBiYWNrZW5kLmluZGV4LCBiYWNrZW5kLmZkKTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzNi1cdGNhc2UgVkhPU1RfR0VUX0ZFQVRVUkVTOlxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0NS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNDY6XHRcdHJldHVybiB2aG9zdF90ZXN0X3NldF9mZWF0dXJlcyhuLCBmZWF0dXJlcyk7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNDctXHRjYXNlIFZIT1NUX1JFU0VUX09XTkVSOlxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzQ4Olx0XHRyZXR1cm4gdmhvc3RfdGVzdF9yZXNldF9vd25lcihuKTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0OS1cdGRlZmF1bHQ6XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzUzLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSB2aG9zdF92cmluZ19pb2N0bChcdTAwMjZuLVx1MDAzZWRldiwgaW9jdGwsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MzU0Olx0XHR2aG9zdF90ZXN0X2ZsdXNoKG4pO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMzU1LVx0XHRtdXRleF91bmxvY2soXHUwMDI2bi1cdTAwM2VkZXYubXV0ZXgpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM1OS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2MDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF90ZXN0X2ZvcHMgPSB7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNjEtXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2MjpcdC5yZWxlYXNlICAgICAgICA9IHZob3N0X3Rlc3RfcmVsZWFzZSxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2MzpcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Rlc3RfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNjQtXHQuY29tcGF0X2lvY3RsICAgPSBjb21wYXRfcHRyX2lvY3RsLFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzY1Olx0Lm9wZW4gICAgICAgICAgID0gdmhvc3RfdGVzdF9vcGVuLFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzY2LVx0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM2OC1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2OTpzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugdmhvc3RfdGVzdF9taXNjID0ge1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMzcwLVx0TUlTQ19EWU5BTUlDX01JTk9SLFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzcxLVx0XCYjMzQ7dmhvc3QtdGVzdFwmIzM0OyxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM3MjpcdFx1MDAyNnZob3N0X3Rlc3RfZm9wcyxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM3My19O1xuZHJpdmVycy92aG9zdC90ZXN0LmM6Mzc0Om1vZHVsZV9taXNjX2RldmljZSh2aG9zdF90ZXN0X21pc2MpO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMzc1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcyNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyB0aGUgdmhvc3RfdGVzdCBEcml2ZXIqKgoKQWxyaWdodCwgc28gYHZob3N0X3Rlc3RgLi4uIHJpZ2h0LCB0aGF0JiMzOTtzIGEgbWlzYyBkZXZpY2UsIGlzbiYjMzk7dCBpdD8gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQuIE5vdywgaXMgaXQgYWN0dWFsbHkgKmNvbXBpbGVkKiBpbnRvIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBiYWNrIGludG8gdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgYnVpbGQgZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzIHRoYXQgSSYjMzk7bSBtaXNzaW5nLiBOZWVkIHRvIGVsaW1pbmF0ZSB0aGF0IHBvdGVudGlhbCBjYXVzZSBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3RcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkzMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5IG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQnVpbGQgU3lzdGVtKioKClJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGBkcml2ZXJzL3Zob3N0L3Rlc3QuY2AgaXMgYWN0dWFsbHkgYnVpbHQuIEl0IGZlZWxzIGxpa2UgSSYjMzk7dmUgc2VlbiBzb21ldGhpbmcgc2ltaWxhciBjb21waWxlZCBpbiB0aGUgYHRvb2xzL3ZpcnRpby9gIGRpcmVjdG9yeSBiZWZvcmUsIG1heWJlIGFzIHBhcnQgb2Ygc29tZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGUgZGVwZW5kZW5jeSBncmFwaCBpc24mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cywgYW5kIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBidWlsZCBydWxlcyBmb3IgdGhpcyBzcGVjaWZpYyB0ZXN0IGNhc2UuCgpUaGVyZWZvcmUsIGxldCYjMzk7cyBqdXN0IGdvIGFoZWFkIGFuZCBkaXZlIGRpcmVjdGx5IGludG8gYHRvb2xzL3ZpcnRpby9NYWtlZmlsZWAuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgcmVsZXZhbnQgZGlyZWN0aXZlcywgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgcG9pbnRlciB0byB3aGVyZSB0aG9zZSBydWxlcyBtaWdodCBiZSBsb2NhdGVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWZlcmVuY2VzIHRvIGB2aG9zdGAgYW5kIHBvdGVudGlhbGx5IHRoYXQgZmlsZW5hbWUgc3BlY2lmaWNhbGx5LiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgYnVpbHQgdGhlcmUgZGlyZWN0bHksIGluY2x1ZGVkIGZyb20gdGhlcmUsIG9yIGlmIGl0IGxldmVyYWdlcyBhIHNoYXJlZCBidWlsZCBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBtYWtlZmlsZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZXN0XFwuYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3ZpcnRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dG9vbHMvdmlydGlvL3Zob3N0X3Rlc3Qvdmhvc3RfdGVzdC5jOjE6I2luY2x1ZGUgXCYjMzQ7dGVzdC5jXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjU2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZToKCioqVW5yYXZlbGluZyB0aGUgVmhvc3QgVGVzdCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgdG9vbHMvdmlydGlvL3Zob3N0X3Rlc3Qvdmhvc3RfdGVzdC5jYCBwdWxscyBpbiBgdGVzdC5jYC4gTm90aGluZyB1bnVzdWFsIHRoZXJlLCBzdGFuZGFyZCBwcmFjdGljZSBmb3Igb3JnYW5pemluZyB0ZXN0IGNvZGUuIEJ1dCB3YWl0LCBJJiMzOTttIGp1c3Qgbm90aWNpbmcgc29tZXRoaW5nIG1vcmUgaW50cmlndWluZy4gVGhhdCBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGlzIGJ1aWx0IGFzIGEga2VybmVsIG1vZHVsZSwgYHZob3N0X3Rlc3Qua29gLiBUaGF0JiMzOTtzIG5vdCB0aGUgdHlwaWNhbCBzZXR1cC4gVXN1YWxseSwgSSYjMzk7ZCBleHBlY3QgdGhlIGNvcmUgdmhvc3QgdGVzdCBjb2RlIHRvIGJlIGludGVncmF0ZWQgd2l0aGluIHRoZSBkcml2ZXIgaXRzZWxmIG9yIGEgdXRpbGl0eS4gVGhpcyBpbmRpY2F0ZXMgaXQgaXMgaW50ZW50aW9uYWxseSBzZXBhcmF0ZWQuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGUsIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgLiBJJiMzOTtsbCBsb29rIGZvciBgVkhPU1RfVEVTVGAgYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQuIFRoYXQmIzM5O2xsIHRlbGwgbWUgaWYgaXQmIzM5O3MgbWVhbnQgdG8gYmUgbW9kdWxhciBhbmQgaG93IGl0JiMzOTtzIGFjdGl2YXRlZCwgb3IgaWYgaXQmIzM5O3MgaW50ZWdyYXRlZCBkaWZmZXJlbnRseSBhbmQgd2h5LiBJJiMzOTtsbCBnZXQgdGhlIHJlYWwgc3RvcnkgZnJvbSB0aGF0IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1ZIT1NUX1RFU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Rlc3QuYy0yMi0gKiBVc2luZyB0aGlzIGxpbWl0IHByZXZlbnRzIG9uZSB2aXJ0cXVldWUgZnJvbSBzdGFydmluZyBvdGhlcnMuICovXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoyMzojZGVmaW5lIFZIT1NUX1RFU1RfV0VJR0hUIDB4ODAwMDBcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI0LVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI4LSAqL1xuZHJpdmVycy92aG9zdC90ZXN0LmM6Mjk6I2RlZmluZSBWSE9TVF9URVNUX1BLVF9XRUlHSFQgMjU2XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMC1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTMxPXN0YXRpYyBjb25zdCBpbnQgdmhvc3RfdGVzdF9iaXRzW10gPSB7XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzQtXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNTojZGVmaW5lIFZIT1NUX1RFU1RfRkVBVFVSRVMgVkhPU1RfRkVBVFVSRVNfVTY0KHZob3N0X3Rlc3RfYml0cywgMClcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM2LVxuZHJpdmVycy92aG9zdC90ZXN0LmM9Mzc9ZW51bSB7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozODpcdFZIT1NUX1RFU1RfVlEgPSAwLFxuZHJpdmVycy92aG9zdC90ZXN0LmM6Mzk6XHRWSE9TVF9URVNUX1ZRX01BWCA9IDEsXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy00MC19O1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTQyPXN0cnVjdCB2aG9zdF90ZXN0IHtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTQzLVx0c3RydWN0IHZob3N0X2RldiBkZXY7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzo0NDpcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgdnFzW1ZIT1NUX1RFU1RfVlFfTUFYXTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTQ1LX07XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmM9NDk9c3RhdGljIHZvaWQgaGFuZGxlX3ZxKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxuZHJpdmVycy92aG9zdC90ZXN0LmMtNTAte1xuZHJpdmVycy92aG9zdC90ZXN0LmM6NTE6XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNm4tXHUwMDNldnFzW1ZIT1NUX1RFU1RfVlFdO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtNTItXHR1bnNpZ25lZCBvdXQsIGluO1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTExMT1zdGF0aWMgaW50IHZob3N0X3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMTgtXHRcdHJldHVybiAtRU5PTUVNO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTE5Olx0dnFzID0ga21hbGxvY19vYmpzKCp2cXMsIFZIT1NUX1RFU1RfVlFfTUFYKTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTEyMC1cdGlmICghdnFzKSB7XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTI1LVx0ZGV2ID0gXHUwMDI2bi1cdTAwM2VkZXY7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMjY6XHR2cXNbVkhPU1RfVEVTVF9WUV0gPSBcdTAwMjZuLVx1MDAzZXZxc1tWSE9TVF9URVNUX1ZRXTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjEyNzpcdG4tXHUwMDNldnFzW1ZIT1NUX1RFU1RfVlFdLmhhbmRsZV9raWNrID0gaGFuZGxlX3ZxX2tpY2s7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMjg6XHR2aG9zdF9kZXZfaW5pdChkZXYsIHZxcywgVkhPU1RfVEVTVF9WUV9NQVgsIFVJT19NQVhJT1YsXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMjk6XHRcdCAgICAgICBWSE9TVF9URVNUX1BLVF9XRUlHSFQsIFZIT1NUX1RFU1RfV0VJR0hULCB0cnVlLCBOVUxMKTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTEzMC1cbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYz0xNDg9c3RhdGljIHZvaWQgdmhvc3RfdGVzdF9zdG9wKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB2b2lkICoqcHJpdmF0ZXApXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNDkte1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTUwOlx0KnByaXZhdGVwID0gdmhvc3RfdGVzdF9zdG9wX3ZxKG4sIG4tXHUwMDNldnFzICYjNDM7IFZIT1NUX1RFU1RfVlEpO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMTUxLX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYz0yNDc9c3RhdGljIGludCB2aG9zdF90ZXN0X3NldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgdTY0IGZlYXR1cmVzKVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI1Ni1cdH1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjI1NzpcdHZxID0gXHUwMDI2bi1cdTAwM2V2cXNbVkhPU1RfVEVTVF9WUV07XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yNTgtXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYz0yNjU9c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9zZXRfYmFja2VuZChzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgdW5zaWduZWQgaW5kZXgsIGludCBmZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yNzctXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoyNzg6XHRpZiAoaW5kZXggXHUwMDNlPSBWSE9TVF9URVNUX1ZRX01BWCkge1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMjc5LVx0XHRyID0gLUVOT0JVRlM7XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzE3PXN0YXRpYyBsb25nIHZob3N0X3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMjctXHRzd2l0Y2ggKGlvY3RsKSB7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMjg6XHRjYXNlIFZIT1NUX1RFU1RfUlVOOlxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzI5LVx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dGVzdCwgYXJncCwgc2l6ZW9mIHRlc3QpKVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzMS1cdFx0cmV0dXJuIHZob3N0X3Rlc3RfcnVuKG4sIHRlc3QpO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MzMyOlx0Y2FzZSBWSE9TVF9URVNUX1NFVF9CQUNLRU5EOlxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzMzLVx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YmFja2VuZCwgYXJncCwgc2l6ZW9mIGJhY2tlbmQpKVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzNi1cdGNhc2UgVkhPU1RfR0VUX0ZFQVRVUkVTOlxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzM3Olx0XHRmZWF0dXJlcyA9IFZIT1NUX1RFU1RfRkVBVFVSRVM7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMzgtXHRcdGlmIChjb3B5X3RvX3VzZXIoZmVhdHVyZXAsIFx1MDAyNmZlYXR1cmVzLCBzaXplb2YgZmVhdHVyZXMpKVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0My1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM0NDpcdFx0aWYgKGZlYXR1cmVzIFx1MDAyNiB+VkhPU1RfVEVTVF9GRUFUVVJFUylcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0NS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuZHJpdmVycy92aG9zdC90ZXN0Lmg6MjojaWZuZGVmIExJTlVYX1ZIT1NUX1RFU1RfSFxuZHJpdmVycy92aG9zdC90ZXN0Lmg6MzojZGVmaW5lIExJTlVYX1ZIT1NUX1RFU1RfSFxuZHJpdmVycy92aG9zdC90ZXN0LmgtNC1cbmRyaXZlcnMvdmhvc3QvdGVzdC5oLTUtLyogU3RhcnQgYSBnaXZlbiB0ZXN0IG9uIHRoZSB2aXJ0aW8gbnVsbCBkZXZpY2UuIDAgc3RvcHMgYWxsIHRlc3RzLiAqL1xuZHJpdmVycy92aG9zdC90ZXN0Lmg6NjojZGVmaW5lIFZIT1NUX1RFU1RfUlVOIF9JT1coVkhPU1RfVklSVElPLCAweDMxLCBpbnQpXG5kcml2ZXJzL3Zob3N0L3Rlc3QuaDo3OiNkZWZpbmUgVkhPU1RfVEVTVF9TRVRfQkFDS0VORCBfSU9XKFZIT1NUX1ZJUlRJTywgMHgzMiwgaW50KVxuZHJpdmVycy92aG9zdC90ZXN0LmgtOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyNjMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgZHJpdmVycy92aG9zdC90ZXN0LmNgKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBkb2VzbiYjMzk7dCBmZWVsIHJpZ2h0LiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGZpbGUgd2FzIHBhcnQgb2YgdGhlIGNvcmUgdmhvc3QgZHJpdmVyLCBidXQgdGhlIGJ1aWxkIHN5c3RlbSBzZWVtcyB0byBiZSB0cmVhdGluZyBpdCBkaWZmZXJlbnRseS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBiZWluZyBjb21waWxlZCBhcyBhIGtlcm5lbCBtb2R1bGUgd2l0aGluIGB0b29scy92aXJ0aW8vdmhvc3RfdGVzdC9gLCB3aGljaCBzdHJpa2VzIG1lIGFzIHVudXN1YWwuIFRoYXQgY29uZmlndXJhdGlvbiBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBhbGlnbiB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcGFydGljdWxhciB0ZXN0IGlzIHR5cGljYWxseSBoYW5kbGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5LiBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgYHRvb2xzL3ZpcnRpby9NYWtlZmlsZWAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBtb3N0IGRpcmVjdCBpbnNpZ2h0IGludG8gaG93IHRoaXMgZmlsZSBpcyBiZWluZyBidWlsdCBhbmQgbGlua2VkLCBhbmQgaG9wZWZ1bGx5IGNsYXJpZnkgd2h5IGl0JiMzOTtzIGJlaW5nIHRyZWF0ZWQgYXMgYSBzZXBhcmF0ZSBtb2R1bGUgaW4gdGhhdCBzcGVjaWZpYyBkaXJlY3RvcnkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgTWFrZWZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdGVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3ZpcnRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dG9vbHMvdmlydGlvL01ha2VmaWxlPTI0PW1vZDpcbnRvb2xzL3ZpcnRpby9NYWtlZmlsZToyNTpcdCR7QlVJTER9IE09YHB3ZGAvdmhvc3RfdGVzdFxudG9vbHMvdmlydGlvL01ha2VmaWxlLTI2LVxuLS1cbnRvb2xzL3ZpcnRpby9NYWtlZmlsZT00ND1vb3QtYnVpbGQ6XG50b29scy92aXJ0aW8vTWFrZWZpbGUtNDUtXHRlY2hvIFwmIzM0O1VOU1VQUE9SVEVEISBEb24mIzM5O3QgdXNlIHRoZSByZXN1bHRpbmcgbW9kdWxlcyBpbiBwcm9kdWN0aW9uIVwmIzM0O1xudG9vbHMvdmlydGlvL01ha2VmaWxlOjQ2Olx0JHtPT1RfQlVJTER9IE09YHB3ZGAvdmhvc3RfdGVzdFxudG9vbHMvdmlydGlvL01ha2VmaWxlLTQ3LVx0JHtPT1RfQlVJTER9IE09JHtPT1RfVkhPU1R9ICR7T09UX0NPTkZJR1N9XG4tLVxudG9vbHMvdmlydGlvL01ha2VmaWxlPTU0PWNsZWFuOlxudG9vbHMvdmlydGlvL01ha2VmaWxlOjU1Olx0JHtSTX0gKi5vIHZyaW5naF90ZXN0IHZpcnRpb190ZXN0IHZob3N0X25ldF90ZXN0IHZob3N0X3Rlc3QvKi5vIFxcXG50b29scy92aXJ0aW8vTWFrZWZpbGU6NTY6ICAgICAgICAgICAgICB2aG9zdF90ZXN0Ly4qLmNtZCB2aG9zdF90ZXN0L01vZHVsZS5zeW12ZXJzIFxcXG50b29scy92aXJ0aW8vTWFrZWZpbGU6NTc6ICAgICAgICAgICAgICB2aG9zdF90ZXN0L21vZHVsZXMub3JkZXIgKi5kXG50b29scy92aXJ0aW8vTWFrZWZpbGUtNTgtLWluY2x1ZGUgKi5kXG4tLVxudG9vbHMvdmlydGlvL3Zob3N0X3Rlc3QvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbnRvb2xzL3ZpcnRpby92aG9zdF90ZXN0L01ha2VmaWxlOjI6b2JqLW0gJiM0Mzs9IHZob3N0X3Rlc3Qub1xudG9vbHMvdmlydGlvL3Zob3N0X3Rlc3QvTWFrZWZpbGUtMy1FWFRSQV9DRkxBR1MgJiM0Mzs9IC1JZHJpdmVycy92aG9zdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg4OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBgdmhvc3RgIE1vZHVsZSBUZXN0aW5nIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYHZob3N0X3Rlc3RgIGlzIGEgdGVzdGluZyBtb2R1bGUuIEl0JiMzOTtzIGJ1aWx0IHNwZWNpZmljYWxseSBmb3Igb3V0LW9mLXRyZWUgdGVzdGluZyBzY2VuYXJpb3MsIHdoaWNoIG1lYW5zIGl0cyBmdW5jdGlvbnMgbGlrZSBgdmhvc3RfdGVzdF9pb2N0bGAgYW5kIGB2aG9zdF90ZXN0X3JlbGVhc2VgIGFyZW4mIzM5O3QgYmFrZWQgaW50byB0aGUga2VybmVsIGluIHRoZSB0eXBpY2FsLCBkZXBsb3lhYmxlIGJ1aWxkLiBUaGF0IGltbWVkaWF0ZWx5IHNoaWZ0cyBteSBhdHRlbnRpb24uIEkgZG9uJiMzOTt0IG5lZWQgdG8gZ2V0IGJvZ2dlZCBkb3duIGluIHRob3NlLiBUaGV5JiMzOTtyZSBpcnJlbGV2YW50IHRvIHRoZSBjb3JlIGB2aG9zdGAgbW9kdWxlLgoKSW5zdGVhZCwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSB0cnVseSBpbXBvcnRhbnQgc3R1ZmYsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgcHJlc2VudCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UmIzM5O3JlIGluIGEgdGVzdCBvciBwcm9kdWN0aW9uIGVudmlyb25tZW50LiBUaGUga2V5IHN5bWJvbHMsIGFzIEkgc2VlIGl0LCBhcmU6IGB2aG9zdF9kZXZfY2xlYW51cGAsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCwgYHZob3N0X25ldF9pb2N0bGAsIGFuZCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIFRoZXNlIGZlZWwgbGlrZSB0aGV5JiMzOTtyZSBjcml0aWNhbCBmb3IgdGhlIGNvcmUgb3BlcmF0aW9uLgoKT25lIHF1aWNrIG5vdGUgb24gdGhlIGxpc3QsIGxldCBtZSBqdXN0IGRvdWJsZSBjaGVjaywgaXMgdGhhdCBgdmhvc3Rfc2NzaV9pb2N0bGAgZXhpc3RzLiBJdCBtYXkgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgb3IgbW92ZWQsIHNvIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaXQgaXMgc3RpbGwgYSB2YWxpZCBzeW1ib2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2lfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0xOTE5PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXR1cF92cV9jbWRzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgbWF4X2NtZHMpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTk3My0vKlxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTk3NDogKiBDYWxsZWQgZnJvbSB2aG9zdF9zY3NpX2lvY3RsKCkgY29udGV4dCB0byB3YWxrIHRoZSBsaXN0IG9mIGF2YWlsYWJsZVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTk3NS0gKiB2aG9zdF9zY3NpX3RwZyB3aXRoIGFuIGFjdGl2ZSBzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1c1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzNjE9c3RhdGljIGxvbmdcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzNjI6dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzNjMtXHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQzOS1cdC5yZWxlYXNlICAgICAgICA9IHZob3N0X3Njc2lfcmVsZWFzZSxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NDA6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9zY3NpX2lvY3RsLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ0MS1cdC5jb21wYXRfaW9jdGxcdD0gY29tcGF0X3B0cl9pb2N0bCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2OTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gQ2xlYW51cDogRXhwYW5kaW5nIHRoZSBTY29wZSoqCgpPa2F5LCBzbyBJIHNlZSBgdmhvc3Rfc2NzaV9pb2N0bGAgaXMgZGVmaW5pdGVseSBpbiB0aGUgbWl4LiBCdXQgaG9sZCBvbiwgSSYjMzk7bSBub3RpY2luZyBhIGZldyBvdGhlciBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBhcyB3ZWxsOiBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgYHZob3N0X25ldF9yZWxlYXNlYCwgYW5kIGB2aG9zdF92ZHBhX2NsZWFudXBgLiBIbW0sIGFyZSB0aGVzZSBwb3RlbnRpYWxseSBiZXR0ZXIgcGxhY2VzIHRvIGZvY3VzIG15IGVmZm9ydHM/IEkgdGhpbmsgc28uCgpUaGlua2luZyBhYm91dCBpdCwgYHZob3N0X3Njc2lfcmVsZWFzZWAgbG9va3MgcHJvbWlzaW5nIGJlY2F1c2UgaXQmIzM5O3MgdGhlIHJlbGVhc2UgaGFuZGxlci4gVGhhdCBtZWFucyBpdCYjMzk7cyB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjbG9zZWQsIG1ha2luZyBpdCBhIG5hdHVyYWwgZml0IGZvciB0ZXN0aW5nIHRoZSBgdmhvc3RfZGV2X2NsZWFudXBgIHByb2Nlc3MuIEkmIzM5O20gZ29pbmcgdG8gYWRkIGB2aG9zdF9zY3NpX3JlbGVhc2VgLCBgdmhvc3RfbmV0X3JlbGVhc2VgLCBgdmhvc3RfdnNvY2tfZGV2X3JlbGVhc2VgLCBhbmQgYHZob3N0X3ZkcGFfY2xlYW51cGAgdG8gbXkgbGlzdCBvZiBrZXkgZnVuY3Rpb25zLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYHZob3N0X3ZkcGFfY2xlYW51cGAgaXMgYmVoYXZpbmcgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92ZHBhX2NsZWFudXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYz0xMzcwPXN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfc2V0X2lvdmFfcmFuZ2Uoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTM4Ni1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEzODc6c3RhdGljIHZvaWQgdmhvc3RfdmRwYV9jbGVhbnVwKHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTM4OC17XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTQwND1zdGF0aWMgaW50IHZob3N0X3ZkcGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQ0OC1lcnJfYWxsb2NfZG9tYWluOlxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTQ0OTpcdHZob3N0X3ZkcGFfY2xlYW51cCh2KTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0NTAtZXJyOlxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE0NjM9c3RhdGljIGludCB2aG9zdF92ZHBhX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0NzQtXHR2aG9zdF92ZHBhX2NvbmZpZ19wdXQodik7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNDc1Olx0dmhvc3RfdmRwYV9jbGVhbnVwKHYpO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQ3Ni1cdG11dGV4X3VubG9jayhcdTAwMjZkLVx1MDAzZW11dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVmhvc3QgTW9kdWxlIEVudHJ5IFBvaW50cyBhbmQgQ29yZSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIHZob3N0IG1vZHVsZSBoYW5ncyB0b2dldGhlci4gVGhlIHByaW1hcnkgcmVsZWFzZSBoYW5kbGVyIGhlcmUgaXMgYHZob3N0X3ZkcGFfcmVsZWFzZWAsIGFuZCBpdCBjYWxscyBgdmhvc3RfdmRwYV9jbGVhbnVwYCB1bmRlciB0aGUgaG9vZC4gU28sIHdoZW4gSSYjMzk7bSBhZGRpbmcgYHZob3N0X3ZkcGFfcmVsZWFzZWAgaXQgbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGF0IGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgc3ltYm9scyBhbmQgY29uc2lkZXIgd2hpY2ggdG8gaGlnaGxpZ2h0LiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGB2aG9zdF9kZXZfY2xlYW51cGAsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCwgYHZob3N0X25ldF9pb2N0bGAsIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCwgYHZob3N0X3Njc2lfaW9jdGxgLCBgdmhvc3RfdnNvY2tfZGV2X3JlbGVhc2VgLCBgdmhvc3RfbmV0X3JlbGVhc2VgLCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgYW5kIG9mIGNvdXJzZSwgYHZob3N0X3ZkcGFfcmVsZWFzZWAuCgpXYWl0LCBob2xkIG9uLiBgdmhvc3RfZGV2X2NsZWFudXBgIGFuZCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCBhcmUgY29yZSBmdW5jdGlvbnMsIHJpZ2h0PyBBY3R1YWxseSwgdGhleSBhcmUgcHJvYmFibHkgbW9yZSB1c2VmdWwgdG8gaW5jbHVkZSwgYXMgdGhleSBhcmUgcGFydCBvZiB0aGUgY3JpdGljYWwgcGF0aCBhbmQgYXJlIGV4cG9ydGVkIHN5bWJvbHMuIEl0JiMzOTtzIHByb2JhYmx5IGJldHRlciB0byBqdXN0IGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBjb3JlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhleSBhcmUgdGhlIGFjdHVhbCBlbnRyeSBwb2ludHMsIGJ1dCB0aGUgb3RoZXJzIGFyZSBpbXBvcnRhbnQgdG9vLgoKSSBxdWlja2x5IGNoZWNrZWQgdGhlIHJlbGF0aW9uc2hpcCB0byBzdGF0aWMgZnVuY3Rpb25zLCBsaWtlIGB2aG9zdF92c29ja19zdGFydGAgYW5kIGB2aG9zdF92c29ja19zdG9wYCwgd2hpY2ggYXJlIGNhbGxlZCBmcm9tIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLiBJbiB0aGlzIGNhc2UsIEkmIzM5O2xsIHN0aWNrIHdpdGggdGhlIGVudHJ5IHBvaW50cyBhbmQgY29yZSBmdW5jdGlvbnMgZm9yIHRoZSBzdW1tYXJ5LgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJpZ2h0LiBJIG5lZWQgYFZIT1NUX1ZTT0NLYCwgYFZIT1NUX05FVGAsIGBWSE9TVF9TQ1NJYCwgYFZIT1NUX1ZEUEFgLCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0IGBUQVJHRVRfQ09SRWAgbmFtZSB0byBtYWtlIHN1cmUgaXQmIzM5O3MgZXhhY3RseSByaWdodCwgb2YgY291cnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEFSR0VUX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3RhcmdldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGFyZ2V0L0tjb25maWctMi1cbmRyaXZlcnMvdGFyZ2V0L0tjb25maWc6MzptZW51Y29uZmlnIFRBUkdFVF9DT1JFXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFRhcmdldCBDb3JlIE1vZCAoVENNKSBhbmQgQ29uZmlnRlMgSW5mcmFzdHJ1Y3R1cmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzOTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KioKCkFscmlnaHQsIHRoZSBjb3JlIHRhcmdldCBpcyBjb25maXJtZWQ6IGBUQVJHRVRfQ09SRWAuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgcG9pbnQgb2YgZm9jdXMuIE5vdywgbGV0JiMzOTtzIHBpdm90IHRvIHRoZSByZWxldmFudCBkYXRhIHBhY2thZ2UgLSBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgZXZhbHVhdGUgYFZEUEFgLiBHaXZlbiB3aGF0IEkmIzM5O20gZXhwZWN0aW5nIHdpdGhpbiB0aGUgc2NvcGUgb2YgVEFSR0VUX0NPUkUsIHRoaXMgaXMgdGhlIG1vc3QgbG9naWNhbCBuZXh0IHN0ZXAuIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBkZXRlcm1pbmUgaXRzIHN0YXR1cyBhbmQgaWYgaXQmIzM5O3Mgb3BlcmF0aW5nIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gYW5hbHl6ZSBhbnkgZGlzY3JlcGFuY2llcyBiZXR3ZWVuIGl0cyBiZWhhdmlvciBhbmQgbXkgbW9kZWwgZm9yIGBUQVJHRVRfQ09SRWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRFBBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkcml2ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxuZHJpdmVycy92ZHBhL0tjb25maWctMTEtXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoxMjpjb25maWcgVkRQQV9TSU1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkZXZpY2Ugc2ltdWxhdG9yIGNvcmVcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMC1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyODpjb25maWcgVkRQQV9TSU1fQkxPQ0tcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBzaW11bGF0b3IgZm9yIGJsb2NrIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTM0LVxuZHJpdmVycy92ZHBhL0tjb25maWc6MzU6Y29uZmlnIFZEUEFfVVNFUlxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXHR0cmlzdGF0ZSBcJiMzNDtWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODk2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGVzZSBjb25jZXB0cyB3aXRoaW4gbXkgYXJlYSBvZiBleHBlcnRpc2U6CgoqKkNoZWNraW5nIE15IE1lbnRhbCBMYW5kc2NhcGUqKgoKT2theSwgZGVmaW5pdGVseS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBgVkRQQWAuIFRoYXQmIzM5O3MgYSBrZXkgYXJlYSB0byBjb25zaWRlciBpbiB0aGlzIGNvbnRleHQuIEJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGltcGxpY2F0aW9ucyBvZiBgVkRQQWAsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gZG8gYSBxdWljayBtZW50YWwgY2hlY2sgb24gYFZTT0NLRVRTYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIGhvbGRpbmcgYWxsIHRoZSByZWxldmFudCBwaWVjZXMgaW4gbXkgbWluZCBhdCB0aGUgc2FtZSB0aW1lIGFuZCBub3QgZ2V0dGluZyB0dW5uZWwgdmlzaW9uIG9uIGp1c3Qgb25lLiBJJiMzOTtsbCBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgYW5kIHRoZW4gSSBjYW4gcmVmaW5lIG15IGN1cnJlbnQgYXJlYSBvZiBmb2N1cywgYW5kIHRoZW4gSSBjYW4gY29uc2lkZXIgaG93IHRoZXkgaW50ZXJhY3Qgb3IgY29udHJhc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWU09DS0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWctNS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2OmNvbmZpZyBWU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0xOC1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzoxOTpjb25maWcgVlNPQ0tFVFNfRElBR1xubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTI4LVxubmV0L3Ztd192c29jay9LY29uZmlnOjI5OmNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xubmV0L3Ztd192c29jay9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIGxvb3BiYWNrIHRyYW5zcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI4NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgeWVwLCBJJiMzOTttIGRlZmluaXRlbHkgdGhpbmtpbmcgYWJvdXQgYFZTT0NLRVRTYCByaWdodCBub3cuIFRoYXQmIzM5O3MgYXQgdGhlIGZvcmVmcm9udCBvZiBteSBtaW5kIGZvciB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIE5vdywgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwsIGl0JiMzOTtzIHdvcnRoIGNyb3NzLXJlZmVyZW5jaW5nIGFuZCBnaXZpbmcgYSBxdWljayBsb29rIGF0IGBFVkVOVEZEYCBhbmQgc2VlIGlmIGl0IGlzIGEgYmV0dGVyIGZpdC4gQWx3YXlzIGltcG9ydGFudCB0byBxdWlja2x5IHJ1bGUgb3V0IG90aGVyIHBvdGVudGlhbGx5IGJldHRlciBvciBtb3JlIGFwcHJvcHJpYXRlIHRvb2xzIGJlZm9yZSBjb21taXR0aW5nIHRvIGEgZGVzaWduLiBUaGlzIHJlcXVpcmVzIGNvbnNpZGVyaW5nIHZhcmlvdXMgZmFjdG9ycyBhbmQgdXNlLWNhc2VzLiBHb3QgdG8ga2VlcCBhbiBvcGVuIG1pbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFVkVOVEZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODc4PWNvbmZpZyBUSU1FUkZEXG4tLVxuaW5pdC9LY29uZmlnLTE4ODYtXG5pbml0L0tjb25maWc6MTg4Nzpjb25maWcgRVZFTlRGRFxuaW5pdC9LY29uZmlnLTE4ODgtXHRib29sIFwmIzM0O0VuYWJsZSBldmVudGZkKCkgc3lzdGVtIGNhbGxcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTQwCgkJCQkJCQlvdXRwdXQ6IDMzMAoJCQkJCQkJdGhvdWdodHM6IDk2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWaG9zdCBTdWJzeXN0ZW0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGBFVkVOVEZEYCBpcyBkZWZpbml0ZWx5IGluIHRoZSBtaXguIExldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgdmhvc3QgZHJpdmVyIGRlcGVuZGVuY2llcyBhZ2FpbiB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uCgoqICAgYFZIT1NUX05FVGAgcmVsaWVzIG9uIGBORVRgLCBgRVZFTlRGRGAsIGFuZCBlaXRoZXIgYFRVTmAgb3Igbm90IGBUVU5gLCBhbmQgZWl0aGVyIGBUQVBgIG9yIG5vdCBgVEFQYC4gU2luY2UgU3l6a2FsbGVyIHR5cGljYWxseSBlbmFibGVzIGBUVU5gIGFuZCBgVEFQYCwgYFZIT1NUX05FVGAgd2lsbCBuZWVkIHRvIGJlIGEgbW9kdWxlIGlmIGBUVU5gIG9yIGBUQVBgIGFyZSBhbHNvIG1vZHVsZXMuCiogICBgVkhPU1RfU0NTSWAgZGVwZW5kcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAsIHNlbGVjdGluZyBib3RoIGBWSE9TVGAgYW5kIGBTR19QT09MYC4KKiAgIGBWSE9TVF9WRFBBYCBoaW5nZXMgb24gYEVWRU5URkRgLCBhbmQgaXQgc2VsZWN0cyBgVkhPU1RgLCBgSVJRX0JZUEFTU19NQU5BR0VSYCwgYW5kIGFsc28gZGVwZW5kcyBvbiBgVkRQQWAuCiogICBgVkhPU1RfVlNPQ0tgIHJlcXVpcmVzIGBWU09DS0VUU2AgYW5kIGBFVkVOVEZEYCBhbmQgc2VsZWN0cyBgVkhPU1RgLCBhbmQgYFZJUlRJT19WU09DS0VUU19DT01NT05gLgoKU28gbXkgRW5hYmxlQ29uZmlncyBsaXN0IGlzIHN0YXJ0aW5nIHRvIHRha2Ugc2hhcGU6IGBWSE9TVF9WU09DS2AsIGBWSE9TVF9ORVRgLCBgVkhPU1RfU0NTSWAsIGBWSE9TVF9WRFBBYCwgYFZTT0NLRVRTYCwgYEVWRU5URkRgLCBgVkRQQWAsIGFuZCBgVEFSR0VUX0NPUkVgLgoKSG1tLCBkbyBJIG5lZWQgYFZIT1NUX01FTlVgPyBMZXQmIzM5O3MgY2hlY2sgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AuIEFoLCBpdCYjMzk7cyBhIG1lbnUgY29uZmlnIHdpdGggYSBkZWZhdWx0IG9mICYjMzk7eSYjMzk7LiBJIGRvbiYjMzk7dCAqbmVlZCogdG8gZXhwbGljaXRseSBhZGQgaXQsIGJ1dCBpdCBkb2VzbiYjMzk7dCBodXJ0LiBTaW5jZSBpdCYjMzk7cyB0aGUgZGVmYXVsdCwgSSYjMzk7bGwganVzdCBvbWl0IGl0LCB0aG91Z2guCgpBbmQgYFZIT1NUYCBpdHNlbGY/IFRoYXQmIzM5O3MgaW1wbGljaXRseSBzZWxlY3RlZCBieSB0aGUgb3RoZXIgZHJpdmVycy4gU28sIEkgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSBpdC4KCkxldCYjMzk7cyByZXZpZXcgdGhlIGtlcm5lbCBzeW1ib2xzIGFnYWluLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gc29saWQgb24gdGhlc2UuCgpIZXJlJiMzOTtzIHRoZSBsaXN0OgoqICAgYHZob3N0X2Rldl9jbGVhbnVwYAoqICAgYHZob3N0X2Rldl9yZXNldF9vd25lcmAKKiAgIGB2aG9zdF92c29ja19kZXZfaW9jdGxgCiogICBgdmhvc3RfbmV0X2lvY3RsYAoqICAgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgCiogICBgdmhvc3Rfc2NzaV9pb2N0bGAKKiAgIGB2aG9zdF92c29ja19kZXZfcmVsZWFzZWAKKiAgIGB2aG9zdF9uZXRfcmVsZWFzZWAKKiAgIGB2aG9zdF9zY3NpX3JlbGVhc2VgCiogICBgdmhvc3RfdmRwYV9yZWxlYXNlYAoKSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0JiMzOTtzIG1vZGlmaWVkPyBMZXQgbWUgc2VlLgoKT2gsIG9rYXksIEkgc2VlIGEgZmV3IHN0YXRpYyBmdW5jdGlvbnMgdG9vOiBgdmhvc3Rfd29ya2Vyc19mcmVlYCwgYHZob3N0X3Zzb2NrX3N0YXJ0YCwgYHZob3N0X3Zzb2NrX3N0b3BgLCBgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kc2AsIGFuZCBgdmhvc3RfdmRwYV9jbGVhbnVwYC4gIEkmIzM5O3ZlIGdvdCB0aGUgdGVzdCBtb2R1bGUgZnVuY3Rpb25zIGFzIHdlbGwgLSBgdmhvc3RfdGVzdF9yZWxlYXNlYCBhbmQgYHZob3N0X3Rlc3RfcmVzZXRfb3duZXJgLgoKVGhlIGV4cG9ydGVkIGZ1bmN0aW9uIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIGxvb2tzIGltcG9ydGFudCwgYnV0IHRoZSBwYXRjaCBtb2RpZmllcyBpdCwgYW5kIHRoZSBzdGF0ZWQgZ29hbCBpcyB0byBhdm9pZCB0aG9zZS4gU28sIGl0JiMzOTtzIG5vdCBnb2luZyB0byBiZSBvbiB0aGUgbGlzdC4KCk9rYXksIEkgdGhpbmsgSSYjMzk7bSBzb2xpZCBvbiB0aGUgZnVuY3Rpb24gbGlzdC4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCBhbmQgd2h5IEkmIzM5O20gc2tpcHBpbmcgaXQuIEl0JiMzOTtzIHRoZSB2c29jayB0cmFuc3BvcnQgQVBJIGVudHJ5IHBvaW50IGNhbGxlZCB3aGVuIGEgcGFja2V0IGlzIHNlbnQsIHNvIGl0IGRvZXMgbWF0dGVyLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgdnNvY2stJmd0O2V2ZXJfc3RhcnRlZGAgd2l0aGluIGl0LCBhbmQgaXQmIzM5O3MgYSBob3QgcGF0aC4gU2luY2UgdGhlIGV4cGxpY2l0IGdvYWwgaXMgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLCBldmVuIHRob3VnaCB0aGlzIG9uZSBpcyBkaXJlY3RseSBtb2RpZmllZCwgSSYjMzk7bSBnb2luZyB0byBvbWl0IGl0LgoKQWxyaWdodCwgdGltZSB0byBkaXN0aWxsIHRoZSByZWFzb25pbmcuIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHN5bmNocm9uaXppbmcgUkNVIHJlYWRlcnMgZHVyaW5nIGBWSE9TVF9SRVNFVF9PV05FUmAgYW5kIGRldmljZSBjbGVhbnVwIGluIHRoZSB2aG9zdCBzdWJzeXN0ZW0uIEl0IHVzZXMgYSBgc3luY2AgcGFyYW1ldGVyIGluIGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIHRvIHdhaXQgZm9yIGxvY2tsZXNzIHdvcmtlcnMgdG8gY29tcGxldGUuIFRoZSB2c29jayBzaWRlIGdldHMgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCB0byBoYW5kbGUgcmVzZXRzLCBwbHVzIHN0YXJ0L3N0b3AgY2hhbmdlcyBmb3IgY29ycmVjdCBiYWNrZW5kIGhhbmRsaW5nLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIGNvcmUgdmhvc3QgbG9naWMgYW5kIHNldmVyYWwgZHJpdmVycyAobmV0LCBzY3NpLCB2ZHBhLCB2c29jaykuIFRoZXkmIzM5O3JlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBpb2N0bHMgYW5kIGZpbGUgb3BlcmF0aW9ucy4KClRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VkhPU1RfTkVUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9kZXZfY2xlYW51cCYjMzQ7LAogICAgJiMzNDt2aG9zdF9kZXZfcmVzZXRfb3duZXImIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZGV2X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZGV2X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3ZkcGFfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3Qgc3Vic3lzdGVtIHRvIHN5bmNocm9uaXplIFJDVSByZWFkZXJzIGR1cmluZyBWSE9TVF9SRVNFVF9PV05FUiBhbmQgZGV2aWNlIGNsZWFudXAuIEl0IGludHJvZHVjZXMgYSBgc3luY2AgcGFyYW1ldGVyIHRvIGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIHRvIHdhaXQgZm9yIGxvY2tsZXNzIHdvcmtlcnMgdG8gZmluaXNoLiBJdCBhbHNvIGFkZHMgYSBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGZ1bmN0aW9uIHRvIGhhbmRsZSBWSE9TVF9SRVNFVF9PV05FUiBmb3IgdnNvY2ssIGFuZCBtb2RpZmllcyB2c29jayBzdGFydC9zdG9wIGxvZ2ljIHRvIGhhbmRsZSBiYWNrZW5kcyBjb3JyZWN0bHkgYWNyb3NzIHJlc2V0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSB2aG9zdCBsb2dpYyBhbmQgbXVsdGlwbGUgdmhvc3QgZHJpdmVycyAobmV0LCBzY3NpLCB2ZHBhLCB2c29jayksIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb2N0bHMgYW5kIGZpbGUgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VkhPU1RfTkVUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9kZXZfY2xlYW51cCYjMzQ7LAogICAgJiMzNDt2aG9zdF9kZXZfcmVzZXRfb3duZXImIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZGV2X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZGV2X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3ZkcGFfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3Qgc3Vic3lzdGVtIHRvIHN5bmNocm9uaXplIFJDVSByZWFkZXJzIGR1cmluZyBWSE9TVF9SRVNFVF9PV05FUiBhbmQgZGV2aWNlIGNsZWFudXAuIEl0IGludHJvZHVjZXMgYSBgc3luY2AgcGFyYW1ldGVyIHRvIGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIHRvIHdhaXQgZm9yIGxvY2tsZXNzIHdvcmtlcnMgdG8gZmluaXNoLiBJdCBhbHNvIGFkZHMgYSBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGZ1bmN0aW9uIHRvIGhhbmRsZSBWSE9TVF9SRVNFVF9PV05FUiBmb3IgdnNvY2ssIGFuZCBtb2RpZmllcyB2c29jayBzdGFydC9zdG9wIGxvZ2ljIHRvIGhhbmRsZSBiYWNrZW5kcyBjb3JyZWN0bHkgYWNyb3NzIHJlc2V0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSB2aG9zdCBsb2dpYyBhbmQgbXVsdGlwbGUgdmhvc3QgZHJpdmVycyAobmV0LCBzY3NpLCB2ZHBhLCB2c29jayksIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb2N0bHMgYW5kIGZpbGUgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjAzOjU2LjE1ODkzNTUwNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODY1NDY5ODIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVkhPU1RfTkVUXCIsXG4gICAgXCJWSE9TVF9TQ1NJXCIsXG4gICAgXCJWSE9TVF9WRFBBXCIsXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiRVZFTlRGRFwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9kZXZfY2xlYW51cFwiLFxuICAgIFwidmhvc3RfZGV2X3Jlc2V0X293bmVyXCIsXG4gICAgXCJ2aG9zdF92c29ja19kZXZfaW9jdGxcIixcbiAgICBcInZob3N0X25ldF9pb2N0bFwiLFxuICAgIFwidmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwidmhvc3Rfc2NzaV9pb2N0bFwiLFxuICAgIFwidmhvc3RfdnNvY2tfZGV2X3JlbGVhc2VcIixcbiAgICBcInZob3N0X25ldF9yZWxlYXNlXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3JlbGVhc2VcIixcbiAgICBcInZob3N0X3ZkcGFfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aG9zdCBzdWJzeXN0ZW0gdG8gc3luY2hyb25pemUgUkNVIHJlYWRlcnMgZHVyaW5nIFZIT1NUX1JFU0VUX09XTkVSIGFuZCBkZXZpY2UgY2xlYW51cC4gSXQgaW50cm9kdWNlcyBhIGBzeW5jYCBwYXJhbWV0ZXIgdG8gYHZob3N0X2Rldl9jbGVhbnVwYCBhbmQgYHZob3N0X2Rldl9yZXNldF9vd25lcmAgdG8gd2FpdCBmb3IgbG9ja2xlc3Mgd29ya2VycyB0byBmaW5pc2guIEl0IGFsc28gYWRkcyBhIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgZnVuY3Rpb24gdG8gaGFuZGxlIFZIT1NUX1JFU0VUX09XTkVSIGZvciB2c29jaywgYW5kIG1vZGlmaWVzIHZzb2NrIHN0YXJ0L3N0b3AgbG9naWMgdG8gaGFuZGxlIGJhY2tlbmRzIGNvcnJlY3RseSBhY3Jvc3MgcmVzZXRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHZob3N0IGxvZ2ljIGFuZCBtdWx0aXBsZSB2aG9zdCBkcml2ZXJzIChuZXQsIHNjc2ksIHZkcGEsIHZzb2NrKSwgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvY3RscyBhbmQgZmlsZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowMzo1Ni4xNTg5NDE5NzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDU2NDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU3ZTYwMzAyMWI2N2JkY2FlOGE0ZmRhN2NkNDYwOTc4MzdkNmU3MzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTc6MDM6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcXG5pbmRleCAzZTcyYjljNmFmMGNhNC4uZmQwODk0MTJjMDIwOTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcXG5AQCAtMTQ1Miw3ICsxNDUyLDcgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4gXFx0dmhvc3RfbmV0X3N0b3AobiwgXFx1MDAyNnR4X3NvY2ssIFxcdTAwMjZyeF9zb2NrKTtcXG4gXFx0dmhvc3RfbmV0X2ZsdXNoKG4pO1xcbiBcXHR2aG9zdF9kZXZfc3RvcChcXHUwMDI2bi1cXHUwMDNlZGV2KTtcXG4tXFx0dmhvc3RfZGV2X2NsZWFudXAoXFx1MDAyNm4tXFx1MDAzZWRldik7XFxuK1xcdHZob3N0X2Rldl9jbGVhbnVwKFxcdTAwMjZuLVxcdTAwM2VkZXYsIGZhbHNlKTtcXG4gXFx0dmhvc3RfbmV0X3ZxX3Jlc2V0KG4pO1xcbiBcXHRpZiAodHhfc29jaylcXG4gXFx0XFx0c29ja2ZkX3B1dCh0eF9zb2NrKTtcXG5AQCAtMTY2MSw3ICsxNjYxLDcgQEAgc3RhdGljIGxvbmcgdmhvc3RfbmV0X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF9uZXQgKm4pXFxuIFxcdHZob3N0X25ldF9zdG9wKG4sIFxcdTAwMjZ0eF9zb2NrLCBcXHUwMDI2cnhfc29jayk7XFxuIFxcdHZob3N0X25ldF9mbHVzaChuKTtcXG4gXFx0dmhvc3RfZGV2X3N0b3AoXFx1MDAyNm4tXFx1MDAzZWRldik7XFxuLVxcdHZob3N0X2Rldl9yZXNldF9vd25lcihcXHUwMDI2bi1cXHUwMDNlZGV2LCB1bWVtKTtcXG4rXFx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFxcdTAwMjZuLVxcdTAwM2VkZXYsIHVtZW0sIGZhbHNlKTtcXG4gXFx0dmhvc3RfbmV0X3ZxX3Jlc2V0KG4pO1xcbiBkb25lOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm4tXFx1MDAzZWRldi5tdXRleCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcXG5pbmRleCA5YTEyNTNiOWQ4YzUwZS4uYjYwMDJiNjRjZjQyODQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xcbkBAIC0yMzUwLDcgKzIzNTAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cy1cXHUwMDNlZGV2Lm11dGV4KTtcXG4gXFx0dmhvc3Rfc2NzaV9jbGVhcl9lbmRwb2ludCh2cywgXFx1MDAyNnQpO1xcbiBcXHR2aG9zdF9kZXZfc3RvcChcXHUwMDI2dnMtXFx1MDAzZWRldik7XFxuLVxcdHZob3N0X2Rldl9jbGVhbnVwKFxcdTAwMjZ2cy1cXHUwMDNlZGV2KTtcXG4rXFx0dmhvc3RfZGV2X2NsZWFudXAoXFx1MDAyNnZzLVxcdTAwM2VkZXYsIGZhbHNlKTtcXG4gXFx0a2ZyZWUodnMtXFx1MDAzZWRldi52cXMpO1xcbiBcXHRrZnJlZSh2cy1cXHUwMDNldnFzKTtcXG4gXFx0a2ZyZWUodnMtXFx1MDAzZW9sZF9pbmZsaWdodCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdGVzdC5jIGIvZHJpdmVycy92aG9zdC90ZXN0LmNcXG5pbmRleCAyNDUxNGM4ZmRlZTQ5NC4uODRlZDllYTgxMjE5ZDMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC90ZXN0LmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Rlc3QuY1xcbkBAIC0xNjMsNyArMTYzLDcgQEAgc3RhdGljIGludCB2aG9zdF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuIFxcdHZob3N0X3Rlc3Rfc3RvcChuLCBcXHUwMDI2cHJpdmF0ZSk7XFxuIFxcdHZob3N0X3Rlc3RfZmx1c2gobik7XFxuIFxcdHZob3N0X2Rldl9zdG9wKFxcdTAwMjZuLVxcdTAwM2VkZXYpO1xcbi1cXHR2aG9zdF9kZXZfY2xlYW51cChcXHUwMDI2bi1cXHUwMDNlZGV2KTtcXG4rXFx0dmhvc3RfZGV2X2NsZWFudXAoXFx1MDAyNm4tXFx1MDAzZWRldiwgZmFsc2UpO1xcbiBcXHRrZnJlZShuLVxcdTAwM2VkZXYudnFzKTtcXG4gXFx0a2ZyZWUobik7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0yMzgsNyArMjM4LDcgQEAgc3RhdGljIGxvbmcgdmhvc3RfdGVzdF9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfdGVzdCAqbilcXG4gXFx0dmhvc3RfdGVzdF9zdG9wKG4sIFxcdTAwMjZwcml2KTtcXG4gXFx0dmhvc3RfdGVzdF9mbHVzaChuKTtcXG4gXFx0dmhvc3RfZGV2X3N0b3AoXFx1MDAyNm4tXFx1MDAzZWRldik7XFxuLVxcdHZob3N0X2Rldl9yZXNldF9vd25lcihcXHUwMDI2bi1cXHUwMDNlZGV2LCB1bWVtKTtcXG4rXFx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFxcdTAwMjZuLVxcdTAwM2VkZXYsIHVtZW0sIGZhbHNlKTtcXG4gZG9uZTpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuaW5kZXggYWM1NTI3NWZhMGQwYWUuLjQyN2M0YTM0ZGIyYzRmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuKysrIGIvZHJpdmVycy92aG9zdC92ZHBhLmNcXG5AQCAtODk4LDcgKzg5OCw3IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxcbiBcXHRjYXNlIFZIT1NUX1NFVF9PV05FUjpcXG4gXFx0XFx0ciA9IHZob3N0X3ZkcGFfYmluZF9tbSh2KTtcXG4gXFx0XFx0aWYgKHIpXFxuLVxcdFxcdFxcdHZob3N0X2Rldl9yZXNldF9vd25lcihkLCBOVUxMKTtcXG4rXFx0XFx0XFx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKGQsIE5VTEwsIGZhbHNlKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gb3V0OlxcbkBAIC0xMzk2LDcgKzEzOTYsNyBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NsZWFudXAoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuIFxcdH1cXG4gXFxuIFxcdHZob3N0X3ZkcGFfZnJlZV9kb21haW4odik7XFxuLVxcdHZob3N0X2Rldl9jbGVhbnVwKFxcdTAwMjZ2LVxcdTAwM2V2ZGV2KTtcXG4rXFx0dmhvc3RfZGV2X2NsZWFudXAoXFx1MDAyNnYtXFx1MDAzZXZkZXYsIGZhbHNlKTtcXG4gXFx0a2ZyZWUodi1cXHUwMDNldmRldi52cXMpO1xcbiBcXHR2LVxcdTAwM2V2ZGV2LnZxcyA9IE5VTEw7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXFxuaW5kZXggNGM1MjViM2UxNmVhZDguLmIxODQyOWIxNWQzMjJkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xcbkBAIC03MTksNyArNzE5LDcgQEAgc3RhdGljIHZvaWQgdmhvc3Rfd29ya2VyX2Rlc3Ryb3koc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbiBcXHRrZnJlZSh3b3JrZXIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJzX2ZyZWUoc3RydWN0IHZob3N0X2RldiAqZGV2KVxcbitzdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJzX2ZyZWUoc3RydWN0IHZob3N0X2RldiAqZGV2LCBib29sIHN5bmMpXFxuIHtcXG4gXFx0c3RydWN0IHZob3N0X3dvcmtlciAqd29ya2VyO1xcbiBcXHR1bnNpZ25lZCBsb25nIGk7XFxuQEAgLTcyOSw2ICs3MjksMjEgQEAgc3RhdGljIHZvaWQgdmhvc3Rfd29ya2Vyc19mcmVlKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXYtXFx1MDAzZW52cXM7IGkrKylcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cXHUwMDNldnFzW2ldLVxcdTAwM2V3b3JrZXIsIE5VTEwpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBwYXRoIGNhbiBiZSByZWFjaGVkIGJ5IGxvY2tsZXNzIHdvcmsgcXVldWVycy4gIEluIHRoaXMgY2FzZVxcbitcXHQgKiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgcmVhZHMgdnEtXFx1MDAzZXdvcmtlciB1bmRlciByY3VfcmVhZF9sb2NrKCksIHNvIGFcXG4rXFx0ICogUkNVIHJlYWRlciB0aGF0IGZldGNoZWQgYSB3b3JrZXIgYmVmb3JlIHdlIGNsZWFyZWQgdGhlIHBvaW50ZXJzIGFib3ZlXFxuK1xcdCAqIG1heSBzdGlsbCBiZSBxdWV1ZWluZyB3b3JrIG9uIGl0LiAgV2FpdCBmb3IgdGhvc2UgcmVhZGVycyB0byBmaW5pc2gsXFxuK1xcdCAqIHRoZW4gZmx1c2ggc28gYW55IHdvcmsgdGhleSBxdWV1ZWQgcnVucyAoY2xlYXJpbmcgVkhPU1RfV09SS19RVUVVRUQpXFxuK1xcdCAqIGJlZm9yZSB0aGUgd29ya2VycyBhcmUgZnJlZWQuICBOb3RhYmx5LCB0aGF0IGlzIHRoZSBjYXNlIGZvciB0aGVcXG4rXFx0ICogdnNvY2sgUkVTRVRfT1dORVIgcGF0aC5cXG4rXFx0ICovXFxuK1xcdGlmIChzeW5jKSB7XFxuK1xcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbitcXHRcXHR2aG9zdF9kZXZfZmx1c2goZGV2KTtcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogRnJlZSB0aGUgZGVmYXVsdCB3b3JrZXIgd2UgY3JlYXRlZCBhbmQgY2xlYW51cCB3b3JrZXJzIHVzZXJzcGFjZVxcbiBcXHQgKiBjcmVhdGVkIGJ1dCBjb3VsZG4ndCBjbGVhbiB1cCAoaXQgZm9yZ290IG9yIGNyYXNoZWQpLlxcbkBAIC0xMTQ4LDExICsxMTYzLDEyIEBAIHN0cnVjdCB2aG9zdF9pb3RsYiAqdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUodm9pZClcXG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUpO1xcbiBcXG4gLyogQ2FsbGVyIHNob3VsZCBoYXZlIGRldmljZSBtdXRleCAqL1xcbi12b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbSlcXG4rdm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW0sXFxuK1xcdFxcdFxcdCAgIGJvb2wgc3luYylcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdHZob3N0X2Rldl9jbGVhbnVwKGRldik7XFxuK1xcdHZob3N0X2Rldl9jbGVhbnVwKGRldiwgc3luYyk7XFxuIFxcbiBcXHRkZXYtXFx1MDAzZWZvcmtfb3duZXIgPSBmb3JrX2Zyb21fb3duZXJfZGVmYXVsdDtcXG4gXFx0ZGV2LVxcdTAwM2V1bWVtID0gdW1lbTtcXG5AQCAtMTE5Nyw3ICsxMjEzLDcgQEAgdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2NsZWFyX21zZyk7XFxuIFxcbi12b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4rdm9pZCB2aG9zdF9kZXZfY2xlYW51cChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIGJvb2wgc3luYylcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuQEAgLTEyMjEsNyArMTIzNyw3IEBAIHZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqZGV2KVxcbiBcXHRkZXYtXFx1MDAzZWlvdGxiID0gTlVMTDtcXG4gXFx0dmhvc3RfY2xlYXJfbXNnKGRldik7XFxuIFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFxcdTAwMjZkZXYtXFx1MDAzZXdhaXQsIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XFxuLVxcdHZob3N0X3dvcmtlcnNfZnJlZShkZXYpO1xcbitcXHR2aG9zdF93b3JrZXJzX2ZyZWUoZGV2LCBzeW5jKTtcXG4gXFx0dmhvc3RfZGV0YWNoX21tKGRldik7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X2NsZWFudXApO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmggYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmhcXG5pbmRleCAwMTkyYWRlNmU3NDkxMC4uMjlmYjFmNTEwYTM0ZGMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5oXFxuKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5oXFxuQEAgLTIxNiw4ICsyMTYsOSBAQCBsb25nIHZob3N0X2Rldl9zZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2KTtcXG4gYm9vbCB2aG9zdF9kZXZfaGFzX293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldik7XFxuIGxvbmcgdmhvc3RfZGV2X2NoZWNrX293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKik7XFxuIHN0cnVjdCB2aG9zdF9pb3RsYiAqdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUodm9pZCk7XFxuLXZvaWQgdmhvc3RfZGV2X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IHZob3N0X2lvdGxiICppb3RsYik7XFxuLXZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqKTtcXG4rdm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiLFxcbitcXHRcXHRcXHQgICBib29sIHN5bmMpO1xcbit2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKTtcXG4gdm9pZCB2aG9zdF9kZXZfc3RvcChzdHJ1Y3Qgdmhvc3RfZGV2ICopO1xcbiBsb25nIHZob3N0X2Rldl9pb2N0bChzdHJ1Y3Qgdmhvc3RfZGV2ICosIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xcbiBsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcXG5pbmRleCA5YWFhYjZiYjgwNjFjMS4uOTA2Y2VjN2I1YWZkOTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXFxuKysrIGIvZHJpdmVycy92aG9zdC92c29jay5jXFxuQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IHZob3N0X3Zzb2NrIHtcXG4gXFxuIFxcdHUzMiBndWVzdF9jaWQ7XFxuIFxcdGJvb2wgc2VxcGFja2V0X2FsbG93O1xcbitcXHRib29sIGV2ZXJfc3RhcnRlZDsgLyogc2V0IG9uIGZpcnN0IFNFVF9SVU5OSU5HKDEpOyBuZXZlciBjbGVhcmVkICovXFxuIH07XFxuIFxcbiBzdGF0aWMgdTMyIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKHZvaWQpXFxuQEAgLTMwMiwxNyArMzAzLDEyIEBAIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24ndCBlbmFibGVkIHRoZSBSWCB2cSB5ZXQuIFF1ZXVpbmcgdGhlIHBhY2tldFxcbi1cXHQgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdFxcbi1cXHQgKiB3aXRoaW4gdGhlIHRpbWVvdXQsIGl0J2xsIGltbWVkaWF0ZWx5IHJlcGx5IHdpdGggUlNULCBiZWNhdXNlIHRoZXJlJ3Mgbm9cXG4tXFx0ICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0Llxcbi1cXHQgKlxcbi1cXHQgKiB2aG9zdF92cV9nZXRfYmFja2VuZCgpIHdpdGhvdXQgdnEtXFx1MDAzZW11dGV4IGlzIGFjY2VwdGFibGUgaGVyZTogbG9ja2luZ1xcbi1cXHQgKiB0aGUgbXV0ZXggd291bGQgYmUgdG9vIGV4cGVuc2l2ZSBpbiB0aGlzIGhvdCBwYXRoLCBhbmQgd2UgYWxyZWFkeSBoYXZlXFxuLVxcdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcXG4tXFx0ICogdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KCkgd2lsbCBjaGVjayBpdCB1bmRlciB0aGUgbXV0ZXggYW55d2F5LlxcbitcXHQvKiBGYXN0LWZhaWwgdW50aWwgdGhlIGd1ZXN0IGZpcnN0IGVuYWJsZXMgdGhlIGRldmljZSAoU0VUX1JVTk5JTkcoMSkpLlxcbitcXHQgKiBCZWZvcmUgdGhhdCB0aGVyZSBpcyBubyBsaXN0ZW5lciwgc28gcXVldWluZyBpcyBwb2ludGxlc3MuXFxuK1xcdCAqICdldmVyX3N0YXJ0ZWQnIGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UncmUgdXAgd2Uga2VlcCBxdWV1aW5nXFxuK1xcdCAqIGFjcm9zcyBsYXRlciBzdG9wIC8gQ1BSLXBhdXNlIHdpbmRvd3MuXFxuIFxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoIWRhdGFfcmFjZSh2aG9zdF92cV9nZXRfYmFja2VuZChcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9SWF0pKSkpIHtcXG4rXFx0aWYgKHVubGlrZWx5KCFSRUFEX09OQ0UodnNvY2stXFx1MDAzZWV2ZXJfc3RhcnRlZCkpKSB7XFxuIFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XFxuQEAgLTY0MCwxMSArNjM2LDIzIEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RhcnQoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBTZXQgJ2V2ZXJfc3RhcnRlZCcgZmxhZyBvbiB0aGUgZmlyc3Qgc3RhcnQ7IG5ldmVyIGNsZWFyZWQsIHNvIHNlbmRfcGt0XFxuK1xcdCAqIGtlZXBzIHF1ZXVpbmcgKGluc3RlYWQgb2YgZmFzdC1mYWlsaW5nKSBvbiBsYXRlciBzdG9wIC8gQ1BSIHBhdXNlcy5cXG4rXFx0ICovXFxuK1xcdFdSSVRFX09OQ0UodnNvY2stXFx1MDAzZWV2ZXJfc3RhcnRlZCwgdHJ1ZSk7XFxuK1xcbiBcXHQvKiBTb21lIHBhY2tldHMgbWF5IGhhdmUgYmVlbiBxdWV1ZWQgYmVmb3JlIHRoZSBkZXZpY2Ugd2FzIHN0YXJ0ZWQsXFxuIFxcdCAqIGxldCdzIGtpY2sgdGhlIHNlbmQgd29ya2VyIHRvIHNlbmQgdGhlbS5cXG4gXFx0ICovXFxuIFxcdHZob3N0X3ZxX3dvcmtfcXVldWUoXFx1MDAyNnZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdLCBcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3dvcmspO1xcbiBcXG4rXFx0LyogVGhlIGd1ZXN0IG1heSBoYXZlIGFkZGVkIFRYIGJ1ZmZlcnMgd2hpbGUgdGhlIGRldmljZSB3YXMgc3RvcHBlZFxcbitcXHQgKiAoZS5nLiBhY3Jvc3MgVkhPU1RfUkVTRVRfT1dORVIpIGFuZCB0aGVpciBraWNrcyBnb3QgY29uc3VtZWQgYnlcXG4rXFx0ICogdGhlIE5VTEwtYmFja2VuZCB3aW5kb3cuICBSZS1zY2FuIHRoZSBUWCBWUSwgbWlycm9yaW5nIHRoZSBSWFxcbitcXHQgKiBzZW5kLXdvcmtlciBraWNrIGFib3ZlLlxcbitcXHQgKi9cXG4rXFx0dmhvc3RfcG9sbF9xdWV1ZShcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9UWF0ucG9sbCk7XFxuK1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTY2NCw5ICs2NzIsMjQgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcXG4rc3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbiB7XFxuK1xcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xcbiBcXHRzaXplX3QgaTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXFx1MDAzZXZxcyk7IGkrKykge1xcbitcXHRcXHR2cSA9IFxcdTAwMjZ2c29jay1cXHUwMDNldnFzW2ldO1xcbitcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4rXFx0XFx0dmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCB2aG9zdF92c29ja19zdG9wKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIGJvb2wgY2hlY2tfb3duZXIpXFxuK3tcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2Lm11dGV4KTtcXG5AQCAtNjc3LDE0ICs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrLVxcdTAwM2V2cXMpOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tpXTtcXG4tXFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuLVxcdFxcdHZob3N0X3ZxX3NldF9iYWNrZW5kKHZxLCBOVUxMKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbi1cXHR9XFxuLVxcbitcXHR2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzKHZzb2NrKTtcXG4gZXJyOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC03MjAsNiArNzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFxuIFxcdHZzb2NrLVxcdTAwM2VndWVzdF9jaWQgPSAwOyAvKiBubyBDSUQgYXNzaWduZWQgeWV0ICovXFxuIFxcdHZzb2NrLVxcdTAwM2VzZXFwYWNrZXRfYWxsb3cgPSBmYWxzZTtcXG4rXFx0dnNvY2stXFx1MDAzZWV2ZXJfc3RhcnRlZCA9IGZhbHNlO1xcbiBcXG4gXFx0YXRvbWljX3NldChcXHUwMDI2dnNvY2stXFx1MDAzZXF1ZXVlZF9yZXBsaWVzLCAwKTtcXG4gXFxuQEAgLTgwNyw3ICs4MjQsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXG4gXFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV9wdXJnZShcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcXG4gXFxuLVxcdHZob3N0X2Rldl9jbGVhbnVwKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2KTtcXG4rXFx0dmhvc3RfZGV2X2NsZWFudXAoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIGZhbHNlKTtcXG4gXFx0cHV0X25ldF90cmFjayh2c29jay1cXHUwMDNlbmV0LCBcXHUwMDI2dnNvY2stXFx1MDAzZW5zX3RyYWNrZXIpO1xcbiBcXHRrZnJlZSh2c29jay1cXHUwMDNlZGV2LnZxcyk7XFxuIFxcdHZob3N0X3Zzb2NrX2ZyZWUodnNvY2spO1xcbkBAIC04ODYsNiArOTAzLDM2IEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIHU2NCBmZWF0dXJlcylcXG4gXFx0cmV0dXJuIC1FRkFVTFQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBsb25nIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXFxuK3tcXG4rXFx0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xcbitcXHRsb25nIGVycjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbitcXHRlcnIgPSB2aG9zdF9kZXZfY2hlY2tfb3duZXIoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGRvbmU7XFxuK1xcdHVtZW0gPSB2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSgpO1xcbitcXHRpZiAoIXVtZW0pIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBkb25lO1xcbitcXHR9XFxuK1xcdHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHModnNvY2spO1xcbitcXHR2aG9zdF92c29ja19mbHVzaCh2c29jayk7XFxuK1xcdHZob3N0X2Rldl9zdG9wKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHZzb2NrIGtlZXBzIHRoZSBDSUQgaGFzaGVkIGFjcm9zcyBSRVNFVF9PV05FUiwgc28gYSBsb2NrbGVzcyBzZW5kZXJcXG4rXFx0ICogY2FuIHN0aWxsIHJlYWNoIHRoZSBkZXZpY2Ugd2hpbGUgaXRzIHdvcmtlcnMgYXJlIGZyZWVkLiAgUGFzc1xcbitcXHQgKiBzeW5jPXRydWUgc28gdmhvc3Rfd29ya2Vyc19mcmVlKCkgZmVuY2VzIFJDVSByZWFkZXJzIGFuZCBmbHVzaGVzXFxuK1xcdCAqIGJlZm9yZSBmcmVlaW5nIHRoZW0uXFxuK1xcdCAqL1xcbitcXHR2aG9zdF9kZXZfcmVzZXRfb3duZXIoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHVtZW0sIHRydWUpO1xcbitkb25lOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4gXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbkBAIC05MjksNiArOTc2LDggQEAgc3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuIFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0XFx0dmhvc3Rfc2V0X2JhY2tlbmRfZmVhdHVyZXMoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIGZlYXR1cmVzKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGNhc2UgVkhPU1RfUkVTRVRfT1dORVI6XFxuK1xcdFxcdHJldHVybiB2aG9zdF92c29ja19yZXNldF9vd25lcih2c29jayk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRcXHRyID0gdmhvc3RfZGV2X2lvY3RsKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2LCBpb2N0bCwgYXJncCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjAzOjU2LjkyNDI5NjkwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNzg4OTMyNzE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVkhPU1RfTkVUXCIsXG4gICAgXCJWSE9TVF9TQ1NJXCIsXG4gICAgXCJWSE9TVF9WRFBBXCIsXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiRVZFTlRGRFwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9kZXZfY2xlYW51cFwiLFxuICAgIFwidmhvc3RfZGV2X3Jlc2V0X293bmVyXCIsXG4gICAgXCJ2aG9zdF92c29ja19kZXZfaW9jdGxcIixcbiAgICBcInZob3N0X25ldF9pb2N0bFwiLFxuICAgIFwidmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwidmhvc3Rfc2NzaV9pb2N0bFwiLFxuICAgIFwidmhvc3RfdnNvY2tfZGV2X3JlbGVhc2VcIixcbiAgICBcInZob3N0X25ldF9yZWxlYXNlXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3JlbGVhc2VcIixcbiAgICBcInZob3N0X3ZkcGFfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aG9zdCBzdWJzeXN0ZW0gdG8gc3luY2hyb25pemUgUkNVIHJlYWRlcnMgZHVyaW5nIFZIT1NUX1JFU0VUX09XTkVSIGFuZCBkZXZpY2UgY2xlYW51cC4gSXQgaW50cm9kdWNlcyBhIGBzeW5jYCBwYXJhbWV0ZXIgdG8gYHZob3N0X2Rldl9jbGVhbnVwYCBhbmQgYHZob3N0X2Rldl9yZXNldF9vd25lcmAgdG8gd2FpdCBmb3IgbG9ja2xlc3Mgd29ya2VycyB0byBmaW5pc2guIEl0IGFsc28gYWRkcyBhIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgZnVuY3Rpb24gdG8gaGFuZGxlIFZIT1NUX1JFU0VUX09XTkVSIGZvciB2c29jaywgYW5kIG1vZGlmaWVzIHZzb2NrIHN0YXJ0L3N0b3AgbG9naWMgdG8gaGFuZGxlIGJhY2tlbmRzIGNvcnJlY3RseSBhY3Jvc3MgcmVzZXRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHZob3N0IGxvZ2ljIGFuZCBtdWx0aXBsZSB2aG9zdCBkcml2ZXJzIChuZXQsIHNjc2ksIHZkcGEsIHZzb2NrKSwgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvY3RscyBhbmQgZmlsZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlN2U2MDMwMjFiNjdiZGNhZThhNGZkYTdjZDQ2MDk3ODM3ZDZlNzM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTc6MDM6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L25ldC5jIGIvZHJpdmVycy92aG9zdC9uZXQuY1xuaW5kZXggM2U3MmI5YzZhZjBjYTQuLmZkMDg5NDEyYzAyMDkyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuY1xuKysrIGIvZHJpdmVycy92aG9zdC9uZXQuY1xuQEAgLTE0NTIsNyArMTQ1Miw3IEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHR2aG9zdF9uZXRfc3RvcChuLCBcdTAwMjZ0eF9zb2NrLCBcdTAwMjZyeF9zb2NrKTtcbiBcdHZob3N0X25ldF9mbHVzaChuKTtcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNm4tXHUwMDNlZGV2KTtcbi1cdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNm4tXHUwMDNlZGV2KTtcbitcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNm4tXHUwMDNlZGV2LCBmYWxzZSk7XG4gXHR2aG9zdF9uZXRfdnFfcmVzZXQobik7XG4gXHRpZiAodHhfc29jaylcbiBcdFx0c29ja2ZkX3B1dCh0eF9zb2NrKTtcbkBAIC0xNjYxLDcgKzE2NjEsNyBAQCBzdGF0aWMgbG9uZyB2aG9zdF9uZXRfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X25ldCAqbilcbiBcdHZob3N0X25ldF9zdG9wKG4sIFx1MDAyNnR4X3NvY2ssIFx1MDAyNnJ4X3NvY2spO1xuIFx0dmhvc3RfbmV0X2ZsdXNoKG4pO1xuIFx0dmhvc3RfZGV2X3N0b3AoXHUwMDI2bi1cdTAwM2VkZXYpO1xuLVx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFx1MDAyNm4tXHUwMDNlZGV2LCB1bWVtKTtcbitcdHZob3N0X2Rldl9yZXNldF9vd25lcihcdTAwMjZuLVx1MDAzZWRldiwgdW1lbSwgZmFsc2UpO1xuIFx0dmhvc3RfbmV0X3ZxX3Jlc2V0KG4pO1xuIGRvbmU6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bi1cdTAwM2VkZXYubXV0ZXgpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbmluZGV4IDlhMTI1M2I5ZDhjNTBlLi5iNjAwMmI2NGNmNDI4NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuQEAgLTIzNTAsNyArMjM1MCw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzLVx1MDAzZWRldi5tdXRleCk7XG4gXHR2aG9zdF9zY3NpX2NsZWFyX2VuZHBvaW50KHZzLCBcdTAwMjZ0KTtcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNnZzLVx1MDAzZWRldik7XG4tXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZ2cy1cdTAwM2VkZXYpO1xuK1x0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2dnMtXHUwMDNlZGV2LCBmYWxzZSk7XG4gXHRrZnJlZSh2cy1cdTAwM2VkZXYudnFzKTtcbiBcdGtmcmVlKHZzLVx1MDAzZXZxcyk7XG4gXHRrZnJlZSh2cy1cdTAwM2VvbGRfaW5mbGlnaHQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdGVzdC5jIGIvZHJpdmVycy92aG9zdC90ZXN0LmNcbmluZGV4IDI0NTE0YzhmZGVlNDk0Li44NGVkOWVhODEyMTlkMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdGVzdC5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Rlc3QuY1xuQEAgLTE2Myw3ICsxNjMsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Rlc3RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbiBcdHZob3N0X3Rlc3Rfc3RvcChuLCBcdTAwMjZwcml2YXRlKTtcbiBcdHZob3N0X3Rlc3RfZmx1c2gobik7XG4gXHR2aG9zdF9kZXZfc3RvcChcdTAwMjZuLVx1MDAzZWRldik7XG4tXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZuLVx1MDAzZWRldik7XG4rXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZuLVx1MDAzZWRldiwgZmFsc2UpO1xuIFx0a2ZyZWUobi1cdTAwM2VkZXYudnFzKTtcbiBcdGtmcmVlKG4pO1xuIFx0cmV0dXJuIDA7XG5AQCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRpYyBsb25nIHZob3N0X3Rlc3RfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X3Rlc3QgKm4pXG4gXHR2aG9zdF90ZXN0X3N0b3AobiwgXHUwMDI2cHJpdik7XG4gXHR2aG9zdF90ZXN0X2ZsdXNoKG4pO1xuIFx0dmhvc3RfZGV2X3N0b3AoXHUwMDI2bi1cdTAwM2VkZXYpO1xuLVx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFx1MDAyNm4tXHUwMDNlZGV2LCB1bWVtKTtcbitcdHZob3N0X2Rldl9yZXNldF9vd25lcihcdTAwMjZuLVx1MDAzZWRldiwgdW1lbSwgZmFsc2UpO1xuIGRvbmU6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bi1cdTAwM2VkZXYubXV0ZXgpO1xuIFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5pbmRleCBhYzU1Mjc1ZmEwZDBhZS4uNDI3YzRhMzRkYjJjNGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuKysrIGIvZHJpdmVycy92aG9zdC92ZHBhLmNcbkBAIC04OTgsNyArODk4LDcgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4gXHRjYXNlIFZIT1NUX1NFVF9PV05FUjpcbiBcdFx0ciA9IHZob3N0X3ZkcGFfYmluZF9tbSh2KTtcbiBcdFx0aWYgKHIpXG4tXHRcdFx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKGQsIE5VTEwpO1xuK1x0XHRcdHZob3N0X2Rldl9yZXNldF9vd25lcihkLCBOVUxMLCBmYWxzZSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIG91dDpcbkBAIC0xMzk2LDcgKzEzOTYsNyBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NsZWFudXAoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4gXHR9XG4gXG4gXHR2aG9zdF92ZHBhX2ZyZWVfZG9tYWluKHYpO1xuLVx0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2di1cdTAwM2V2ZGV2KTtcbitcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNnYtXHUwMDNldmRldiwgZmFsc2UpO1xuIFx0a2ZyZWUodi1cdTAwM2V2ZGV2LnZxcyk7XG4gXHR2LVx1MDAzZXZkZXYudnFzID0gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXG5pbmRleCA0YzUyNWIzZTE2ZWFkOC4uYjE4NDI5YjE1ZDMyMmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuQEAgLTcxOSw3ICs3MTksNyBAQCBzdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJfZGVzdHJveShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4gXHRrZnJlZSh3b3JrZXIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJzX2ZyZWUoc3RydWN0IHZob3N0X2RldiAqZGV2KVxuK3N0YXRpYyB2b2lkIHZob3N0X3dvcmtlcnNfZnJlZShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIGJvb2wgc3luYylcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3Rfd29ya2VyICp3b3JrZXI7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG5AQCAtNzI5LDYgKzcyOSwyMSBAQCBzdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJzX2ZyZWUoc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZW52cXM7IGkrKylcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2V2cXNbaV0tXHUwMDNld29ya2VyLCBOVUxMKTtcbitcbitcdC8qXG4rXHQgKiBUaGlzIHBhdGggY2FuIGJlIHJlYWNoZWQgYnkgbG9ja2xlc3Mgd29yayBxdWV1ZXJzLiAgSW4gdGhpcyBjYXNlXG4rXHQgKiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgcmVhZHMgdnEtXHUwMDNld29ya2VyIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc28gYVxuK1x0ICogUkNVIHJlYWRlciB0aGF0IGZldGNoZWQgYSB3b3JrZXIgYmVmb3JlIHdlIGNsZWFyZWQgdGhlIHBvaW50ZXJzIGFib3ZlXG4rXHQgKiBtYXkgc3RpbGwgYmUgcXVldWVpbmcgd29yayBvbiBpdC4gIFdhaXQgZm9yIHRob3NlIHJlYWRlcnMgdG8gZmluaXNoLFxuK1x0ICogdGhlbiBmbHVzaCBzbyBhbnkgd29yayB0aGV5IHF1ZXVlZCBydW5zIChjbGVhcmluZyBWSE9TVF9XT1JLX1FVRVVFRClcbitcdCAqIGJlZm9yZSB0aGUgd29ya2VycyBhcmUgZnJlZWQuICBOb3RhYmx5LCB0aGF0IGlzIHRoZSBjYXNlIGZvciB0aGVcbitcdCAqIHZzb2NrIFJFU0VUX09XTkVSIHBhdGguXG4rXHQgKi9cbitcdGlmIChzeW5jKSB7XG4rXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0XHR2aG9zdF9kZXZfZmx1c2goZGV2KTtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBGcmVlIHRoZSBkZWZhdWx0IHdvcmtlciB3ZSBjcmVhdGVkIGFuZCBjbGVhbnVwIHdvcmtlcnMgdXNlcnNwYWNlXG4gXHQgKiBjcmVhdGVkIGJ1dCBjb3VsZG4ndCBjbGVhbiB1cCAoaXQgZm9yZ290IG9yIGNyYXNoZWQpLlxuQEAgLTExNDgsMTEgKzExNjMsMTIgQEAgc3RydWN0IHZob3N0X2lvdGxiICp2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSh2b2lkKVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Rldl9yZXNldF9vd25lcl9wcmVwYXJlKTtcbiBcbiAvKiBDYWxsZXIgc2hvdWxkIGhhdmUgZGV2aWNlIG11dGV4ICovXG4tdm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW0pXG4rdm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW0sXG4rXHRcdFx0ICAgYm9vbCBzeW5jKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0dmhvc3RfZGV2X2NsZWFudXAoZGV2KTtcbitcdHZob3N0X2Rldl9jbGVhbnVwKGRldiwgc3luYyk7XG4gXG4gXHRkZXYtXHUwMDNlZm9ya19vd25lciA9IGZvcmtfZnJvbV9vd25lcl9kZWZhdWx0O1xuIFx0ZGV2LVx1MDAzZXVtZW0gPSB1bWVtO1xuQEAgLTExOTcsNyArMTIxMyw3IEBAIHZvaWQgdmhvc3RfY2xlYXJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2xlYXJfbXNnKTtcbiBcbi12b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbit2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKVxuIHtcbiBcdGludCBpO1xuIFxuQEAgLTEyMjEsNyArMTIzNyw3IEBAIHZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIFx0ZGV2LVx1MDAzZWlvdGxiID0gTlVMTDtcbiBcdHZob3N0X2NsZWFyX21zZyhkZXYpO1xuIFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoXHUwMDI2ZGV2LVx1MDAzZXdhaXQsIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XG4tXHR2aG9zdF93b3JrZXJzX2ZyZWUoZGV2KTtcbitcdHZob3N0X3dvcmtlcnNfZnJlZShkZXYsIHN5bmMpO1xuIFx0dmhvc3RfZGV0YWNoX21tKGRldik7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Rldl9jbGVhbnVwKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmggYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmhcbmluZGV4IDAxOTJhZGU2ZTc0OTEwLi4yOWZiMWY1MTBhMzRkYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxuKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5oXG5AQCAtMjE2LDggKzIxNiw5IEBAIGxvbmcgdmhvc3RfZGV2X3NldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpO1xuIGJvb2wgdmhvc3RfZGV2X2hhc19vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpO1xuIGxvbmcgdmhvc3RfZGV2X2NoZWNrX293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKik7XG4gc3RydWN0IHZob3N0X2lvdGxiICp2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSh2b2lkKTtcbi12b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGIpO1xuLXZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqKTtcbit2b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGIsXG4rXHRcdFx0ICAgYm9vbCBzeW5jKTtcbit2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKTtcbiB2b2lkIHZob3N0X2Rldl9zdG9wKHN0cnVjdCB2aG9zdF9kZXYgKik7XG4gbG9uZyB2aG9zdF9kZXZfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdwKTtcbiBsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdnNvY2suYyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuaW5kZXggOWFhYWI2YmI4MDYxYzEuLjkwNmNlYzdiNWFmZDkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbkBAIC02MSw2ICs2MSw3IEBAIHN0cnVjdCB2aG9zdF92c29jayB7XG4gXG4gXHR1MzIgZ3Vlc3RfY2lkO1xuIFx0Ym9vbCBzZXFwYWNrZXRfYWxsb3c7XG4rXHRib29sIGV2ZXJfc3RhcnRlZDsgLyogc2V0IG9uIGZpcnN0IFNFVF9SVU5OSU5HKDEpOyBuZXZlciBjbGVhcmVkICovXG4gfTtcbiBcbiBzdGF0aWMgdTMyIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKHZvaWQpXG5AQCAtMzAyLDE3ICszMDMsMTIgQEAgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXG4tXHQvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24ndCBlbmFibGVkIHRoZSBSWCB2cSB5ZXQuIFF1ZXVpbmcgdGhlIHBhY2tldFxuLVx0ICogYW5kIG1ha2luZyB0aGUgY2FsbGVyIHdhaXQgaXMgcG9pbnRsZXNzOiBldmVuIGlmIHRoZSBndWVzdCBtYW5hZ2VzIHRvIGluaXRcbi1cdCAqIHdpdGhpbiB0aGUgdGltZW91dCwgaXQnbGwgaW1tZWRpYXRlbHkgcmVwbHkgd2l0aCBSU1QsIGJlY2F1c2UgdGhlcmUncyBub1xuLVx0ICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0LlxuLVx0ICpcbi1cdCAqIHZob3N0X3ZxX2dldF9iYWNrZW5kKCkgd2l0aG91dCB2cS1cdTAwM2VtdXRleCBpcyBhY2NlcHRhYmxlIGhlcmU6IGxvY2tpbmdcbi1cdCAqIHRoZSBtdXRleCB3b3VsZCBiZSB0b28gZXhwZW5zaXZlIGluIHRoaXMgaG90IHBhdGgsIGFuZCB3ZSBhbHJlYWR5IGhhdmVcbi1cdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcbi1cdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cbitcdC8qIEZhc3QtZmFpbCB1bnRpbCB0aGUgZ3Vlc3QgZmlyc3QgZW5hYmxlcyB0aGUgZGV2aWNlIChTRVRfUlVOTklORygxKSkuXG4rXHQgKiBCZWZvcmUgdGhhdCB0aGVyZSBpcyBubyBsaXN0ZW5lciwgc28gcXVldWluZyBpcyBwb2ludGxlc3MuXG4rXHQgKiAnZXZlcl9zdGFydGVkJyBpcyBuZXZlciBjbGVhcmVkLCBzbyBvbmNlIHdlJ3JlIHVwIHdlIGtlZXAgcXVldWluZ1xuK1x0ICogYWNyb3NzIGxhdGVyIHN0b3AgLyBDUFItcGF1c2Ugd2luZG93cy5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KCFkYXRhX3JhY2Uodmhvc3RfdnFfZ2V0X2JhY2tlbmQoXHUwMDI2dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXSkpKSkge1xuK1x0aWYgKHVubGlrZWx5KCFSRUFEX09OQ0UodnNvY2stXHUwMDNlZXZlcl9zdGFydGVkKSkpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcbkBAIC02NDAsMTEgKzYzNiwyMyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0YXJ0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHR9XG4gXG4rXHQvKiBTZXQgJ2V2ZXJfc3RhcnRlZCcgZmxhZyBvbiB0aGUgZmlyc3Qgc3RhcnQ7IG5ldmVyIGNsZWFyZWQsIHNvIHNlbmRfcGt0XG4rXHQgKiBrZWVwcyBxdWV1aW5nIChpbnN0ZWFkIG9mIGZhc3QtZmFpbGluZykgb24gbGF0ZXIgc3RvcCAvIENQUiBwYXVzZXMuXG4rXHQgKi9cbitcdFdSSVRFX09OQ0UodnNvY2stXHUwMDNlZXZlcl9zdGFydGVkLCB0cnVlKTtcbitcbiBcdC8qIFNvbWUgcGFja2V0cyBtYXkgaGF2ZSBiZWVuIHF1ZXVlZCBiZWZvcmUgdGhlIGRldmljZSB3YXMgc3RhcnRlZCxcbiBcdCAqIGxldCdzIGtpY2sgdGhlIHNlbmQgd29ya2VyIHRvIHNlbmQgdGhlbS5cbiBcdCAqL1xuIFx0dmhvc3RfdnFfd29ya19xdWV1ZShcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdLCBcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF93b3JrKTtcbiBcbitcdC8qIFRoZSBndWVzdCBtYXkgaGF2ZSBhZGRlZCBUWCBidWZmZXJzIHdoaWxlIHRoZSBkZXZpY2Ugd2FzIHN0b3BwZWRcbitcdCAqIChlLmcuIGFjcm9zcyBWSE9TVF9SRVNFVF9PV05FUikgYW5kIHRoZWlyIGtpY2tzIGdvdCBjb25zdW1lZCBieVxuK1x0ICogdGhlIE5VTEwtYmFja2VuZCB3aW5kb3cuICBSZS1zY2FuIHRoZSBUWCBWUSwgbWlycm9yaW5nIHRoZSBSWFxuK1x0ICogc2VuZC13b3JrZXIga2ljayBhYm92ZS5cbitcdCAqL1xuK1x0dmhvc3RfcG9sbF9xdWV1ZShcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdLnBvbGwpO1xuK1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gMDtcbiBcbkBAIC02NjQsOSArNjcyLDI0IEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RhcnQoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKVxuK3N0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcbiB7XG4rXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcbiBcdHNpemVfdCBpO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh2c29jay1cdTAwM2V2cXMpOyBpKyspIHtcbitcdFx0dnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbaV07XG4rXG4rXHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuK1x0XHR2aG9zdF92cV9zZXRfYmFja2VuZCh2cSwgTlVMTCk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKVxuK3tcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuQEAgLTY3NywxNCArNzAwLDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdG9wKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIGJvb2wgY2hlY2tfb3duZXIpXG4gXHRcdFx0Z290byBlcnI7XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrLVx1MDAzZXZxcyk7IGkrKykge1xuLVx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tpXTtcbi1cbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4tXHRcdHZob3N0X3ZxX3NldF9iYWNrZW5kKHZxLCBOVUxMKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbi1cdH1cbi1cbitcdHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHModnNvY2spO1xuIGVycjpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuIFx0cmV0dXJuIHJldDtcbkBAIC03MjAsNiArNzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcbiBcdHZzb2NrLVx1MDAzZWd1ZXN0X2NpZCA9IDA7IC8qIG5vIENJRCBhc3NpZ25lZCB5ZXQgKi9cbiBcdHZzb2NrLVx1MDAzZXNlcXBhY2tldF9hbGxvdyA9IGZhbHNlO1xuK1x0dnNvY2stXHUwMDNlZXZlcl9zdGFydGVkID0gZmFsc2U7XG4gXG4gXHRhdG9taWNfc2V0KFx1MDAyNnZzb2NrLVx1MDAzZXF1ZXVlZF9yZXBsaWVzLCAwKTtcbiBcbkBAIC04MDcsNyArODI0LDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcbiBcdHZpcnRpb192c29ja19za2JfcXVldWVfcHVyZ2UoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xuIFxuLVx0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2dnNvY2stXHUwMDNlZGV2KTtcbitcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgZmFsc2UpO1xuIFx0cHV0X25ldF90cmFjayh2c29jay1cdTAwM2VuZXQsIFx1MDAyNnZzb2NrLVx1MDAzZW5zX3RyYWNrZXIpO1xuIFx0a2ZyZWUodnNvY2stXHUwMDNlZGV2LnZxcyk7XG4gXHR2aG9zdF92c29ja19mcmVlKHZzb2NrKTtcbkBAIC04ODYsNiArOTAzLDM2IEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIHU2NCBmZWF0dXJlcylcbiBcdHJldHVybiAtRUZBVUxUO1xuIH1cbiBcbitzdGF0aWMgbG9uZyB2aG9zdF92c29ja19yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuK3tcbitcdHN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbTtcbitcdGxvbmcgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuK1x0ZXJyID0gdmhvc3RfZGV2X2NoZWNrX293bmVyKFx1MDAyNnZzb2NrLVx1MDAzZWRldik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGRvbmU7XG4rXHR1bWVtID0gdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUoKTtcbitcdGlmICghdW1lbSkge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGRvbmU7XG4rXHR9XG4rXHR2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzKHZzb2NrKTtcbitcdHZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTtcbitcdHZob3N0X2Rldl9zdG9wKFx1MDAyNnZzb2NrLVx1MDAzZWRldik7XG4rXG4rXHQvKlxuK1x0ICogdnNvY2sga2VlcHMgdGhlIENJRCBoYXNoZWQgYWNyb3NzIFJFU0VUX09XTkVSLCBzbyBhIGxvY2tsZXNzIHNlbmRlclxuK1x0ICogY2FuIHN0aWxsIHJlYWNoIHRoZSBkZXZpY2Ugd2hpbGUgaXRzIHdvcmtlcnMgYXJlIGZyZWVkLiAgUGFzc1xuK1x0ICogc3luYz10cnVlIHNvIHZob3N0X3dvcmtlcnNfZnJlZSgpIGZlbmNlcyBSQ1UgcmVhZGVycyBhbmQgZmx1c2hlc1xuK1x0ICogYmVmb3JlIGZyZWVpbmcgdGhlbS5cbitcdCAqL1xuK1x0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdW1lbSwgdHJ1ZSk7XG4rZG9uZTpcbitcdG11dGV4X3VubG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbkBAIC05MjksNiArOTc2LDggQEAgc3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4gXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0XHR2aG9zdF9zZXRfYmFja2VuZF9mZWF0dXJlcyhcdTAwMjZ2c29jay1cdTAwM2VkZXYsIGZlYXR1cmVzKTtcbiBcdFx0cmV0dXJuIDA7XG4rXHRjYXNlIFZIT1NUX1JFU0VUX09XTkVSOlxuK1x0XHRyZXR1cm4gdmhvc3RfdnNvY2tfcmVzZXRfb3duZXIodnNvY2spO1xuIFx0ZGVmYXVsdDpcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuIFx0XHRyID0gdmhvc3RfZGV2X2lvY3RsKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgaW9jdGwsIGFyZ3ApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDM6NTYuOTI0Mjk3OTQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcwNzIyNjUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogdmhvc3QgU3Vic3lzdGVtIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBzb21lIHRhcmdldGVkIGNoYW5nZXMgd2l0aGluIHRoZSB2aG9zdCBzdWJzeXN0ZW0uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0IHNlZW1zIGxpa2UgYSBmYWlybHkgZm9jdXNlZCBzZXQgb2YgdXBkYXRlcywgc28gbGV0J3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIGFkZGluZyBhIGBib29sIHN5bmNgIHBhcmFtZXRlciB0byBgdmhvc3RfZGV2X2NsZWFudXBgIGFuZCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCwgYW5kIHRoZW4gaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCwgd2hpY2ggbGV2ZXJhZ2VzIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIHdpdGggYHN5bmM9dHJ1ZWAuIEl0J3MgYWxzbyB0b3VjaGluZyBgdmhvc3RfdnNvY2tfc3RhcnRgIGFuZCBgdmhvc3RfdnNvY2tfc3RvcGAgYW5kIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgLlxuXG5JIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2Ygdmhvc3QtcmVsYXRlZCBmaWxlczogYG5ldC5jYCwgYHNjc2kuY2AsIGB0ZXN0LmNgLCBgdmRwYS5jYCwgYHZob3N0LmNgLCBgdmhvc3QuaGAsIGFuZCBgdnNvY2suY2AuIFRoYXQncyBhIGdvb2QgYnJlYWR0aCBvZiBjb3ZlcmFnZSwgd2hpY2ggc3VnZ2VzdHMgdGhlIHNjb3BlIGlzIHBvdGVudGlhbGx5IGJyb2FkZXIgdGhhbiBqdXN0IG9uZSBzcGVjaWZpYyBhcmVhLiBOb3csIGl0IGRhd25zIG9uIG1lIHdoYXQgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBpcyBkb2luZy4gVGhpcyBuZXcgZnVuY3Rpb24gc2VlbXMgdG8gYmUgaGFuZGxpbmcgdGhlIGBWSE9TVF9SRVNFVF9PV05FUmAgaW9jdGwgc3BlY2lmaWNhbGx5IGZvciB2c29jay4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoZSBpb2N0bCB1c2VkIHRvIGJlIGhhbmRsZWQgZGlyZWN0bHkgYnkgYHZob3N0X2Rldl9pb2N0bGAuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdC4uLiBZZXMsIGEgcXVpY2sgbG9vayBhdCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCB2ZXJpZmllcyB0aGF0OiB0aGUgaW9jdGwgY2FzZSBoYXMgYmVlbiByZXBsYWNlZC5cblxuT2gsIGFuZCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIGluIGB2c29jay5jYC4gVGhhdCBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBzdWJ0bGUgbG9naWMgdXBkYXRlOiB0aGV5J3ZlIHJlcGxhY2VkIGEgY2hlY2sgd2l0aCBhbiBhdG9taWMgY2hlY2suIEkgdGhpbmsgSSBzZWUgd2hhdCdzIGdvaW5nIG9uIGhlcmUgLSB0aGlzICppcyogcmVhY2hhYmxlIHdpdGhpbiBhIFZNLiBUaGlzIGRlZmluaXRlbHkgbWFrZXMgdGhpcyBwYXRjaCB3b3J0aCBmdXp6aW5nLCBzbyBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC5cblxuT2theSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBoZXJlLiBJJ20gZm9jdXNpbmcgb246XG5cbiogICBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgXG4qICAgYHZob3N0X3Zzb2NrX3N0YXJ0YFxuKiAgIGB2aG9zdF92c29ja19zdG9wYFxuKiAgIGB2aG9zdF92c29ja19kZXZfaW9jdGxgXG4qICAgYHZob3N0X2Rldl9yZXNldF9vd25lcmBcbiogICBgdmhvc3RfZGV2X2NsZWFudXBgXG4qICAgYHZob3N0X3dvcmtlcnNfZnJlZWBcblxuRmluYWxseSwgbGV0J3Mgc2VlIGFib3V0IGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gQmFzZWQgb24gdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgaXQgbG9va3MgbGlrZSBgQ09ORklHX1ZIT1NUX1ZTT0NLYCwgYENPTkZJR19WSE9TVF9ORVRgLCBgQ09ORklHX1ZIT1NUX1NDU0lgLCBhbmQgYENPTkZJR19WSE9TVF9WRFBBYCBhcmUgbmVlZGVkLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYnkgZ3JlcHBpbmcgS2NvbmZpZyBmb3IgYFZIT1NUX1ZTT0NLYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjA1LjYzMTUyNzE1NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM5OTY5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX1ZTT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDowNS44OTU1MzQyNjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM5NzMzMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBWSE9TVF9WU09DSyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gdGhlIGBWSE9TVF9WU09DS2AgbGFuZHNjYXBlLiBJdCdzIHRvbyBlYXN5IHRvIGp1bXAgaW4gYW5kIGFzc3VtZSBJJ3ZlIGdvdCBldmVyeXRoaW5nIGNvdmVyZWQsIGVzcGVjaWFsbHkgd2l0aCB0aGVzZSB2aXJ0dWFsIG5ldHdvcmtpbmcgc3RhY2tzLiBTbywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkxldCdzICp2ZXJpZnkqIHRob3NlIGRlcGVuZGVuY2llcy5cIiBUaGlzIGlzbid0IGp1c3QgYSBtZW50YWwgbm90ZTsgaXQncyBhICpwcm9hY3RpdmUqIHN0ZXAuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBvdmVybG9va2luZyBldmVuIGEgc2VlbWluZ2x5IG1pbm9yIGRlcGVuZGVuY3kgY2FuIGxlYWQgdG8gaG91cnMgb2YgZGVidWdnaW5nIGxhdGVyIG9uLiBUaGlzIGNoZWNrIHNob3VsZCBlbmNvbXBhc3MgdGhlIGtlcm5lbCBtb2R1bGVzLCB0aGUgdXNlcnNwYWNlIGxpYnJhcmllcywgZXZlbiB0aGUgaHlwZXJ2aXNvciBzaWRlIG9mIHRoaW5ncyBpZiB0aGlzIGlzIHJlbGV2YW50IHRvIHRoZSBzeXN0ZW0gY29udGV4dC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgYnVpbGRpbmcgYmxvY2tzLCB0aGUgbGF5ZXJzIGludm9sdmVkLCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4NiwiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjA5LjAzNTI3MDEwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg2NDcwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX1ZTT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDowOS4zMjM5MjIxNTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU2OlxcdGNvbmZpZyBWSE9TVF9WU09DS1xcbiAgNTc6XFx0XFx0dHJpc3RhdGUgXFxcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcXFwiXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG4gIDU5OlxcdFxcdHNlbGVjdCBWSE9TVFxcbiAgNjA6XFx0XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG4gIDYxOlxcdFxcdGRlZmF1bHQgblxcbiAgNjI6XFx0XFx0aGVscFxcbiAgNjM6XFx0XFx0VGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgQUZfVlNPQ0tcXG4gIDY0OlxcdFxcdHNvY2tldHMgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBndWVzdHMuICBUaGUgZ3Vlc3RzIG11c3QgaGF2ZSB0aGVcXG4gIDY1OlxcdFxcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjA5LjMyNDAzMzkwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODY5MzA1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSB0ZWNobm9sb2dpZXM6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFZpcnR1YWxpemF0aW9uIEluZnJhc3RydWN0dXJlIENvbXBvbmVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb21wb25lbnRzOiBgVkhPU1RfVlNPQ0tgLCBgVlNPQ0tFVFNgLCBhbmQgYEVWRU5URkRgLiBJIGtub3cgdGhlbSwgYnV0IGxldCBtZSBxdWlja2x5IGpvZyBteSBtZW1vcnkgYW5kIHNlZSBob3cgdGhleSBhcmUgcmVsYXRlZC4gR2l2ZW4gdGhhdCBjb250ZXh0LCBsZXQncyBub3cgY29uc2lkZXIgdGhlIHJvbGUgb2YgYFZIT1NUX05FVGAgaW4gdGhpcyBsYW5kc2NhcGUuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQsIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgdGhlIGFyY2hpdGVjdHVyZSBJJ20gaW1hZ2luaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTExLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDQ6MTEuOTEwOTY4Nzk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgVkhPU1RfSU9UTEJcXG4gICAzOlxcdFxcdHRyaXN0YXRlXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIEdlbmVyaWMgSU9UTEIgaW1wbGVtZW50YXRpb24gZm9yIHZob3N0IGFuZCB2cmluZ2guXFxuICAgNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGFueSBkcml2ZXIgd2hpY2ggbmVlZHMgdG8gc3VwcG9ydFxcbiAgIDc6XFx0XFx0ICBhbiBJT01NVSBpbiBzb2Z0d2FyZS5cXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIFZIT1NUX1JJTkdcXG4gIDEwOlxcdFxcdHRyaXN0YXRlXFxuICAxMTpcXHRcXHRzZWxlY3QgVkhPU1RfSU9UTEJcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYW55IGRyaXZlciB3aGljaCBuZWVkcyB0byBhY2Nlc3NcXG4gIDE0OlxcdFxcdCAgdGhlIGhvc3Qgc2lkZSBvZiBhIHZpcnRpbyByaW5nLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRjb25maWcgVkhPU1RfVEFTS1xcbiAgMTc6XFx0XFx0Ym9vbFxcbiAgMTg6XFx0XFx0ZGVmYXVsdCBuXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBWSE9TVFxcbiAgMjE6XFx0XFx0dHJpc3RhdGVcXG4gIDIyOlxcdFxcdHNlbGVjdCBWSE9TVF9JT1RMQlxcbiAgMjM6XFx0XFx0c2VsZWN0IFZIT1NUX1RBU0tcXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYW55IGRyaXZlciB3aGljaCBuZWVkcyB0byBhY2Nlc3NcXG4gIDI2OlxcdFxcdCAgdGhlIGNvcmUgb2Ygdmhvc3QuXFxuICAyNzpcXHRcXG4gIDI4OlxcdG1lbnVjb25maWcgVkhPU1RfTUVOVVxcbiAgMjk6XFx0XFx0Ym9vbCBcXFwiVkhPU1QgZHJpdmVyc1xcXCJcXG4gIDMwOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzE6XFx0XFxuICAzMjpcXHRpZiBWSE9TVF9NRU5VXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBWSE9TVF9ORVRcXG4gIDM1OlxcdFxcdHRyaXN0YXRlIFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCJcXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IEVWRU5URkQgXFx1MDAyNlxcdTAwMjYgKFRVTiB8fCAhVFVOKSBcXHUwMDI2XFx1MDAyNiAoVEFQIHx8ICFUQVApXFxuICAzNzpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxcbiAgNDA6XFx0XFx0ICBndWVzdCBuZXR3b3JraW5nIHdpdGggdmlydGlvX25ldC4gTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdmlydGlvX25ldFxcbiAgNDE6XFx0XFx0ICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuXFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICA0NDpcXHRcXHQgIGJlIGNhbGxlZCB2aG9zdF9uZXQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBWSE9TVF9TQ1NJXFxuICA0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbiAgNDk6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA1MDpcXHRcXHRzZWxlY3QgU0dfUE9PTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDoxMS45MTEwNDI0NDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyNjMwODczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogVkhPU1RfVkRQQSBDaGVjayoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIGltcHVsc2UgaGVyZSBpcyB0byB6ZXJvIGluIG9uIGBWSE9TVF9WRFBBYC4gSXQncyBhIGtleSBhcmVhIHRvIGV4YW1pbmUsIGxpa2VseSByZWxhdGVkIHRvIHZpcnR1YWxpemVkIGRldmljZXMgYW5kIHRoZSB2RFBBIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgZXN0YWJsaXNoIGEgYmFzZWxpbmU6IHdoYXQncyBwcm9tcHRpbmcgdGhpcyBjaGVjaz9cIiBJcyBpdCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgYSBzdXNwZWN0ZWQgYnVnLCBhIG5ldyBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIGEgc2VjdXJpdHkgYXVkaXQ/XG5cblRoZSBwcmVzZW5jZSBvZiBgVkhPU1RfVkRQQWAgaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUuIFdlJ3JlIGRlYWxpbmcgd2l0aCB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnRzIHVzaW5nIHZEUEEg4oCTIGxpa2VseSBpbiBhIGRhdGEgY2VudGVyIG9yIGNsb3VkIHNldHRpbmcuIFdlIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSB2aG9zdCBkZXZpY2UgaXMgY29uZmlndXJlZCwgdGhlIHZpcnRpbyB0cmFuc3BvcnQgYW5kIHRoZSBvdmVyYWxsIHJlc291cmNlIGFsbG9jYXRpb24uIElzIHRoZXJlIGEgc3BlY2lmaWMgdmlydHVhbCBmdW5jdGlvbiBJIHNob3VsZCBiZSBsb29raW5nIGF0IGZpcnN0LCBvciBzcGVjaWZpYyBkcml2ZXJzIGJlaW5nIGVtcGxveWVkPyBBcmUgd2UgcG90ZW50aWFsbHkgYnVtcGluZyBpbnRvIGFuIGlzc3VlIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0aW9uPyBPciBhbSBJIHNpbXBseSB2ZXJpZnlpbmcgdGhhdCB2RFBBIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBhY2NvcmRpbmcgdG8gYmVzdCBwcmFjdGljZXM/XG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29udGV4dDogdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSwgdGhlIGh5cGVydmlzb3IsIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbmQgdGhlIHNwZWNpZmljIHZpcnR1YWwgbWFjaGluZXMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25zIHRvIGRldGVybWluZSB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjE1LjgzNzM2MDgyMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjY6XFx0XFxuICA2NzpcXHRcXHRUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICA2ODpcXHRcXHR2aG9zdF92c29jay5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0Y29uZmlnIFZIT1NUX1ZEUEFcXG4gIDcxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFxcXCJcXG4gIDcyOlxcdFxcdGRlcGVuZHMgb24gRVZFTlRGRFxcbiAgNzM6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA3NDpcXHRcXHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXFxuICA3NTpcXHRcXHRkZXBlbmRzIG9uIFZEUEFcXG4gIDc2OlxcdFxcdGhlbHBcXG4gIDc3OlxcdFxcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxcbiAgNzg6XFx0XFx0ICBndWVzdCB2aXJ0aW8gZGV2aWNlcyB3aXRoIHRoZSB2RFBBLWJhc2VkIGJhY2tlbmRzLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDgxOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdmhvc3RfdmRwYS5cXG4gIDgyOlxcdFxcbiAgODM6XFx0Y29uZmlnIFZIT1NUX0NST1NTX0VORElBTl9MRUdBQ1lcXG4gIDg0OlxcdFxcdGJvb2wgXFxcIkNyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFxcXCJcXG4gIDg1OlxcdFxcdGRlZmF1bHQgblxcbiAgODY6XFx0XFx0aGVscFxcbiAgODc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhbGxvd3Mgdmhvc3QgdG8gc3VwcG9ydCBndWVzdHMgd2l0aCBhIGRpZmZlcmVudCBieXRlXFxuICA4ODpcXHRcXHQgIG9yZGVyaW5nIGZyb20gaG9zdCB3aGlsZSB1c2luZyBsZWdhY3kgdmlydGlvLlxcbiAgODk6XFx0XFxuICA5MDpcXHRcXHQgIFVzZXJzcGFjZSBwcm9ncmFtcyBjYW4gY29udHJvbCB0aGUgZmVhdHVyZSB1c2luZyB0aGVcXG4gIDkxOlxcdFxcdCAgVkhPU1RfU0VUX1ZSSU5HX0VORElBTiBhbmQgVkhPU1RfR0VUX1ZSSU5HX0VORElBTiBpb2N0bHMuXFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdCAgVGhpcyBpcyBvbmx5IHVzZWZ1bCBvbiBhIGZldyBwbGF0Zm9ybXMgKHBwYzY0IGFuZCBhcm02NCkuIFNpbmNlIGl0XFxuICA5NDpcXHRcXHQgIGFkZHMgc29tZSBvdmVyaGVhZCwgaXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiTlxcXCIuXFxuICA5NzpcXHRcXG4gIDk4OlxcdGNvbmZpZyBWSE9TVF9FTkFCTEVfRk9SS19PV05FUl9DT05UUk9MXFxuICA5OTpcXHRcXHRib29sIFxcXCJFbmFibGUgVkhPU1RfRU5BQkxFX0ZPUktfT1dORVJfQ09OVFJPTFxcXCJcXG4gMTAwOlxcdFxcdGRlZmF1bHQgeVxcbiAxMDE6XFx0XFx0aGVscFxcbiAxMDI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHR3byBJT0NUTHM6IFZIT1NUX1NFVF9GT1JLX0ZST01fT1dORVIgYW5kXFxuIDEwMzpcXHRcXHQgIFZIT1NUX0dFVF9GT1JLX0ZST01fT1dORVIuIFRoZXNlIGFsbG93IHVzZXJzcGFjZSBhcHBsaWNhdGlvbnNcXG4gMTA0OlxcdFxcdCAgdG8gbW9kaWZ5IHRoZSB2aG9zdCB3b3JrZXIgbW9kZSBmb3Igdmhvc3QgZGV2aWNlcy5cXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0ICBBbHNvIGV4cG9zZSBtb2R1bGUgcGFyYW1ldGVyICdmb3JrX2Zyb21fb3duZXJfZGVmYXVsdCcgdG8gYWxsb3cgdXNlcnNcXG4gMTA3OlxcdFxcdCAgdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IG1vZGUgZm9yIHZob3N0IHdvcmtlcnMuXFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdCAgQnkgZGVmYXVsdCwgYFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xgIGlzIHNldCB0byBgeWAsXFxuIDExMDpcXHRcXHQgIHVzZXJzIGNhbiBjaGFuZ2UgdGhlIHdvcmtlciB0aHJlYWQgbW9kZSBhcyBuZWVkZWQuXFxuIDExMTpcXHRcXHQgIElmIHRoaXMgY29uZmlnIGlzIGRpc2FibGVkIChuKSx0aGUgcmVsYXRlZCBJT0NUTHMgYW5kIHBhcmFtZXRlcnMgd2lsbFxcbiAxMTI6XFx0XFx0ICBiZSB1bmF2YWlsYWJsZS5cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiWVxcXCIuXFxuIDExNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDQ6MTUuODM3NDM2NzEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwOTc4NDgxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdCBQYXRjaCBmb3IgRW5oYW5jZWQgVGVzdGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgdG91Y2hpbmcgc29tZSBwcmV0dHkga2V5IGFyZWFzOiBgZHJpdmVycy92aG9zdC92aG9zdC5jYCDigJMgc3BlY2lmaWNhbGx5IGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIOKAkyBhbmQgdGhlbiBgZHJpdmVycy92aG9zdC92c29jay5jYCB3aXRoIGEgbW9kaWZpY2F0aW9uIHRvIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAuIFRoaXMgc2NyZWFtcyBgVkhPU1RfVlNPQ0tgIGFzIHRoZSBwcmltYXJ5IGZvY3VzLCBidXQgdGhlIGNoYW5nZXMgaW4gdGhlIGNvcmUgdmhvc3QgZmlsZSBtZWFuIHdlIGFsc28gaGF2ZSB0byBjb25zaWRlciBgVkhPU1RfTkVUYCwgYFZIT1NUX1NDU0lgLCBhbmQgYFZIT1NUX1ZEUEFgLiBUaGVzZSBhbGwgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgRW5hYmxlQ29uZmlncy4gSSdsbCBhbHNvIGFkZCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAgYXMgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gc2VsZWN0aW5nIHNvbWUgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9scyBmb3IgdGVzdGluZy4gSSd2ZSBnb3QgYSBsaXN0IGhlcmU6IGB2aG9zdF92c29ja19yZXNldF9vd25lcmAsIGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19zdG9wYCwgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLCBgdmhvc3RfZGV2X2NsZWFudXBgLCBgdmhvc3Rfd29ya2Vyc19mcmVlYCwgYW5kIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgLlxuXG5BbHJpZ2h0LCBsZXQncyB0aGluayBjcml0aWNhbGx5IGFib3V0IHRoZXNlLiBGaXJzdCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAuIEhtbSwgaXQncyBhbiBBUEkgZW50cnkgcG9pbnQgZm9yIHZzb2NrIHRyYW5zcG9ydCwgc28gaW5pdGlhbGx5IGl0IGxvb2tzIGdvb2QuIEJ1dCB3YWl0LCBpdCdzIGEgaG90LXBhdGggZnVuY3Rpb24hIEFuZCBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBrZWVwIHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbiBmcm9tIGJlaW5nIHNrZXdlZC4gU2NyYXRjaCB0aGF0LlxuXG5TbywgSSdtIGxpa2luZyBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGFzIGEgc29saWQgY2FuZGlkYXRlLiBBbHNvLCBgdmhvc3RfdnNvY2tfc3RhcnRgIGFuZCBgdmhvc3RfdnNvY2tfc3RvcGAgYXJlIHByb21pc2luZy4gVGhlbiB0aGUgY29yZSB2aG9zdCBmdW5jdGlvbnMsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIGFuZCBgdmhvc3RfZGV2X2NsZWFudXBgLCBhcmUgZGVmaW5pdGVseSB3b3J0aCBjb25zaWRlcmluZy4gTm93LCBgdmhvc3Rfd29ya2Vyc19mcmVlYCBpcyBzdGF0aWMuLi4gdGhhdCdzIGEgbm8tZ28uIE5vIG5lZWQgdG8gZ28gdGhlcmUuXG5cbk9rYXksIGxldCdzIGp1c3QgZG91YmxlLWNoZWNrLCBmb3IgZ29vZCBtZWFzdXJlLCB0aGF0IGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgYW5kIGB2aG9zdF92c29ja19zdGFydGAgYXJlIHRoZSByaWdodCBjaG9pY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjIyLjkzNTI4NzczNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3NTAwMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3Zzb2NrX3Jlc2V0X293bmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9ODcxPXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIHU2NCBmZWF0dXJlcylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05MDUtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjkwNjpzdGF0aWMgbG9uZyB2aG9zdF92c29ja19yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05MDcte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTkzNj1zdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NzktXFx0Y2FzZSBWSE9TVF9SRVNFVF9PV05FUjpcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTgwOlxcdFxcdHJldHVybiB2aG9zdF92c29ja19yZXNldF9vd25lcih2c29jayk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTk4MS1cXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDoyMy4yMTI3OTM0NTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NTkwMzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRXhhbWluaW5nIHZob3N0LXZzb2NrIEFQSSBEZXNpZ24qKlxuXG5Pa2F5LCBzbyBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgcmVjYWxsIGEgcHJlZmVyZW5jZSBmb3IgbW9yZSBmbGV4aWJsZSBBUEkgZGVzaWduLCBhbmQgYSBzdHlsZSBndWlkZSBpdGVtIG9mdGVuIHN1cmZhY2VzIGluIG15IG1lbW9yeSwgc3BlY2lmaWNhbGx5OiBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy5cIiBUaGF0J3MgdGhlIHdheSBJIHVzdWFsbHkgYXBwcm9hY2ggdGhlc2UgdGhpbmdzLiBJIHdvbmRlciBpZiB0aGVyZSdzIGEgZ29vZCByZWFzb24gZm9yIHRoaXMuXG5cbldhaXQgYSBtaW51dGUsIEkganVzdCByZWFsaXplZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCBpcyAqYWxzbyogc3RhdGljLiBUaGlzIGlzIGJlY29taW5nIGEgcGF0dGVybi4gTGV0IG1lIHRha2UgYSBsb29rIGF0IGB2aG9zdF92c29ja19kZXZfaW9jdGxgIGFuZCBzZWUgaWYgdGhlIHJlYXNvbmluZyBiZWhpbmQgaXRzIHN0YXRpYyBuYXR1cmUgYmVjb21lcyBhcHBhcmVudCwgYXMgaXQgY291bGQgaW5mbHVlbmNlIHRoZSBkZXNpZ24gb2YgdGhlIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgdG9vLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlLiBQZXJoYXBzIHRoZXJlJ3MgYW4gaW50ZXJuYWwgcmVhc29uIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjI2Ljc4ODcwMDM1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUwMzY4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdnNvY2tfZGV2X2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9OTA2PXN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTM1LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5MzY6c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuZHJpdmVycy92aG9zdC92c29jay5jLTkzNy1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTEwMjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdnNvY2tfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDI1LVxcdC5sbHNlZWtcXHRcXHQ9IG5vb3BfbGxzZWVrLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDI2OlxcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Zzb2NrX2Rldl9pb2N0bCxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyNy1cXHQuY29tcGF0X2lvY3RsICAgPSBjb21wYXRfcHRyX2lvY3RsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDoyNi44NTM3NDMwOTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3MzEyMzQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0X3Zzb2NrX2Rldl9pb2N0bCBBUEkgRW50cnlwb2ludCoqXG5cbk9rYXksIHNvIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIGlzIHRoZSBgdW5sb2NrZWRfaW9jdGxgIGhhbmRsZXIsIHdoaWNoIG1ha2VzIGl0IGEgY3J1Y2lhbCBBUEkgZW50cnlwb2ludCwgZXZlbiBpZiBpdCdzIHRlY2huaWNhbGx5IGEgc3RhdGljIGZ1bmN0aW9uLiBOb3csIGEgY29uY2VybiBhcmlzZXM6IFN5emthbGxlciwgaW4gbXkgZXhwZXJpZW5jZSwgc3RydWdnbGVzIHRvIGRpcmVjdGx5IHJlc29sdmUgc3RhdGljIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGFyZSBpbmxpbmVkLiBCdXQsIHRoZSBnb29kIG5ld3MgaXMgdGhhdCBgdW5sb2NrZWRfaW9jdGxgIGlzbid0IGlubGluZWQsIHNvIHRoYXQgc2hvdWxkbid0IGJlIGEgcHJvYmxlbSBpbiB0aGlzIGluc3RhbmNlLlxuXG5Ib3dldmVyLCBJIG5vdGUgdGhhdCBib3RoIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIGFuZCBgdmhvc3RfZGV2X2NsZWFudXBgIGFyZSBleHBvcnRlZCBzeW1ib2xzLiBUaGlzIGlzIGludHJpZ3VpbmcuIEkgdGhpbmsgaXQncyB0aW1lIHRvIGRpdmUgaW50byBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTUzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjMzLjIyNjg2OTYzN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3NTAwNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2Rldl9yZXNldF9vd25lclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jPTExNTM9c3RhdGljIHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGJfYWxsb2Modm9pZClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMTU4LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoxMTU5OnN0cnVjdCB2aG9zdF9pb3RsYiAqdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUodm9pZClcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE2MC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE2Mi19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjExNjM6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMTY0LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMTY1LS8qIENhbGxlciBzaG91bGQgaGF2ZSBkZXZpY2UgbXV0ZXggKi9cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTE2Njp2b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbSxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE2Ny1cXHRcXHRcXHQgICBib29sIHN5bmMpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE4MC19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjExODE6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X3Jlc2V0X293bmVyKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE4Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDQ6MzMuNTA0Mzc3ODM1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDMzMjMyNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQWRkaW5nIEtleSBWaG9zdCB2c29jayBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZXhwb3J0ZWQgc3ltYm9scywgYW5kIGl0J3MgY2xlYXIgdGhhdCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCBhbmQgYHZob3N0X2Rldl9jbGVhbnVwYCBhcmUgaW1wb3J0YW50IHBpZWNlcy4gSSdsbCBhZGQgdGhvc2UgcmlnaHQgYXdheSwgYXMgdGhleSBzZWVtIGZ1bmRhbWVudGFsIHRvIHRoZSBkZXZpY2UgbWFuYWdlbWVudC4gQW5kLCBvZiBjb3Vyc2UsIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIGlzIHRoZSBpb2N0bCBoYW5kbGVyLCBzbyB0aGF0J3MgYSBkZWZpbml0ZSBhZGQg4oCTIGNydWNpYWwgZm9yIHRoZSBpbnRlcmZhY2UuXG5cbkhtbSwgSSBzZWUgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBpcyBzdGF0aWMgYnV0IG5vdCBpbmxpbmVkLiBJdCdzIGNhbGxlZCBmcm9tIGEgc3dpdGNoIHN0YXRlbWVudCBpbiBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYC4gSXQncyB0ZWNobmljYWxseSBva2F5IHRvIGluY2x1ZGUgaXQsIGJ1dCBnaXZlbiBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBpb2N0bCBoYW5kbGVyLCBJIHRoaW5rIGl0J3MgbW9yZSBpbmZvcm1hdGl2ZSBhbmQgbGVzcyByZWR1bmRhbnQgdG8gc2ltcGx5IGFkZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCBpbnN0ZWFkLiBJdCBjYXB0dXJlcyB0aGUgY29udGV4dCBiZXR0ZXIuXG5cbkFscmlnaHQsIHRoZSBsaXN0IGlzOiBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCwgYHZob3N0X2Rldl9jbGVhbnVwYCwgYW5kIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLlxuXG5Ob3csIGJlZm9yZSBJIGZpbmFsaXplIHRoaXMsIGxldCBtZSBxdWlja2x5IGdsYW5jZSBhdCBgdmhvc3RfdnNvY2tfc3RhcnRgIGFuZCBgdmhvc3RfdnNvY2tfc3RvcGAgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCBpbiB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjM3LjkwNzcwMzg2MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExMTI2MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdnNvY2tfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92c29jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suYz01OTc9c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjA2LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2MDc6c3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MDgte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTkzNj1zdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NTQtXFx0XFx0aWYgKHN0YXJ0KVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5NTU6XFx0XFx0XFx0cmV0dXJuIHZob3N0X3Zzb2NrX3N0YXJ0KHZzb2NrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTU2LVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDQ6MzcuOTY4ODI2OTU2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODI2MjU3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKlN0cmVhbWxpbmluZyBWaG9zdC1WU29jayBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0IHNlZW1zIGxpa2Ugd2UncmUgaGFuZGxpbmcgdGhlIHZob3N0LXZzb2NrIHNldHVwLiBJIHNlZSB0aGF0IGB2aG9zdF92c29ja19zdGFydGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBIbW0sIHRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgYW5kIHRoZXJlZm9yZSB3ZSdyZSBub3QgbmVjZXNzYXJpbHkgcmVsaWFudCBvbiBpdCBhcyB0aGUgY2VudHJhbCBwb2ludCBvZiBjb250cm9sLiBUaGF0IG9wZW5zIHVwIHNvbWUgaW50ZXJlc3RpbmcgcG9zc2liaWxpdGllcyBmb3IgcmVmYWN0b3JpbmcuXG5cblRoaW5raW5nIGl0IHRocm91Z2gsIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGlzIG9uZSBzdGF0aWMgZnVuY3Rpb24sIHdoeSBkb24ndCB3ZSBqdXN0IGxlYW4gb24gdGhlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlPyBXZSd2ZSBnb3QgYHZob3N0X2Rldl9yZXNldF9vd25lcmAsIGB2aG9zdF9kZXZfY2xlYW51cGAsIGFuZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCByZWFkaWx5IGF2YWlsYWJsZS4gVGhleSBzaG91bGQgZ2l2ZSB1cyBhbGwgdGhlIG5lY2Vzc2FyeSBob29rcyBhbmQgcG9pbnRzIG9mIGludGVyYWN0aW9uIHdlIG5lZWQuIFRoaXMgc2hvdWxkIHNpbXBsaWZ5IHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgbWFrZSB0aGluZ3MgZWFzaWVyIHRvIG1haW50YWluIGxvbmctdGVybS5cblxuQmVmb3JlIGNvbW1pdHRpbmcgdG8gdGhhdCwgbGV0J3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGUgcHJpbmNpcGxlIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29kZS4gTGV0J3MgZG8gYSBxdWljayBzY2FuIG9mIGB2aG9zdF9uZXRfcmVzZXRfb3duZXJgIGFuZCBgdmhvc3RfdGVzdF9yZXNldF9vd25lcmAgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIHNvbWUgaW1wb3J0YW50IG51YW5jZS4gSnVzdCB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZ2VuZXJhbCBkZXNpZ24gcGF0dGVybiBvZiBvd25lciByZXNldCBpcyBjb25zaXN0ZW50IGFjcm9zcyBhbGwgdmhvc3QgaW1wbGVtZW50YXRpb25zLiBPa2F5LCBnb29kLiBUaGF0IHNob3VsZCBiZSBhIHNvbGlkIGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjQxLjY1MTQ1NTU0MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2MzM0NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfbmV0X3Jlc2V0X293bmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuYz0xNTQ0PXN0YXRpYyBsb25nIHZob3N0X25ldF9zZXRfYmFja2VuZChzdHJ1Y3Qgdmhvc3RfbmV0ICpuLCB1bnNpZ25lZCBpbmRleCwgaW50IGZkKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xNjQ0LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTY0NTpzdGF0aWMgbG9uZyB2aG9zdF9uZXRfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X25ldCAqbilcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE2NDYte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xNzQ3PXN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODMxLVxcdGNhc2UgVkhPU1RfUkVTRVRfT1dORVI6XFxuZHJpdmVycy92aG9zdC9uZXQuYzoxODMyOlxcdFxcdHJldHVybiB2aG9zdF9uZXRfcmVzZXRfb3duZXIobik7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODMzLVxcdGNhc2UgVkhPU1RfU0VUX09XTkVSOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDo0MS43MTYwOTY3MzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMyNDI5MzA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgdkhvc3QgSU9DVEwgSGFuZGxlciBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHZIb3N0IGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gaW50ZWdyYXRlIHRoZXNlIG5ldyBJT0NUTCBoYW5kbGVycy4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBhYm91dCBhZGRpbmcgYHZob3N0X25ldF9pb2N0bGAgZGlyZWN0bHksIGJ1dCB0aGVuIEkgc2F3IHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSByZXNldCBhbmQgcmVsZWFzZSwgYW5kIEkgcmVhbGl6ZWQgdGhpcyBpcyBtb3JlIGNvbXBsZXguXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gbW9kaWZ5IHRob3NlIHNwZWNpZmljIGhhbmRsZXJzLCBidXQgbG9va2luZyBkZWVwZXIsIGl0J3MgY2xlYXIgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgYXJvdW5kIGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLiBTbywgSSdsbCBmb2N1cyB0aGVyZS5cblxuSSdsbCBjb25zb2xpZGF0ZSB0aGUgaW1wb3J0YW50IElPQ1RMIGhhbmRsZXJzLCBmb2N1c2luZyBvbiBhIGNsZWFuIGFuZCBtYWludGFpbmFibGUgc29sdXRpb24uIFNvIHRoZSBmaW5hbCBsaXN0IG9mIGZ1bmN0aW9ucyBJIHdpbGwgYWRkIGFyZTogYHZob3N0X2Rldl9jbGVhbnVwYCwgYHZob3N0X2Rldl9yZXNldF9vd25lcmAsIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLCBgdmhvc3RfbmV0X2lvY3RsYCwgYW5kIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYC5cblxuVGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50LiBUaGUgY29yZSBjb25maWdzIEknbSBkZWFsaW5nIHdpdGggaW5jbHVkZTogYFZIT1NUX1ZTT0NLYCwgYFZIT1NUX05FVGAsIGBWSE9TVF9TQ1NJYCwgYFZIT1NUX1ZEUEFgLCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgd2hldGhlciB0aGUgYFZIT1NUX1RFU1RgIGNvbmZpZyBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjUwLjA0MDM5MjE2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM1NjYwODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9URVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDQ6NTAuMzAzOTY4OTA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MTE4NDEzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgdmhvc3QgVGVzdCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBJIGhhdmUgaXMsIHVuZGVyIHdoaWNoIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyB0aGlzIHRlc3QgY29kZSBhY3R1YWxseSBjb21waWxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29udGV4dCB0byBrbm93IHdoZW4gYW5kIGhvdyB0aGlzIGNvZGUgaXMgZXhlY3V0ZWQuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBnaXZlIG1lIHRoZSBwcm9wZXIgY29udGV4dCB0byByZXZpZXcgdGhlIGNvZGUgb3IgYXR0ZW1wdCBkZWJ1Z2dpbmcuIEkgY2FuJ3QganVzdCBkaXZlIGluIHdpdGhvdXQga25vd2luZyB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAxMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjUzLjAxNTgxNDE0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyODYxNzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRlc3RcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDQ6NTMuMDc4MTEwMTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxMjE2MTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIFZob3N0IERyaXZlciBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWFnaWMgZm9yIHRoZSB2aG9zdCBkcml2ZXIgaXMgZGVmaW5lZCwgYW5kIGl0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGlmIEkgd2FudCB0byB1bmRlcnN0YW5kIG9yIG1vZGlmeSBpdHMgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhpcyB0aGluZyBhc3NlbWJsZXMsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY3VzdG9tIGJ1aWxkIHN0ZXBzLiBJdCdzIHRpbWUgdG8gcGFyc2UgdGhlIHJ1bGVzIGFuZCB2YXJpYWJsZXMgaW4gdGhlcmUgYW5kIHNlZSBob3cgdGhpbmdzIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxODQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDo1Ny42OTAyNzQ5MTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai0kKENPTkZJR19WSE9TVF9ORVQpICs9IHZob3N0X25ldC5vXFxuICAgMzpcXHR2aG9zdF9uZXQteSA6PSBuZXQub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRvYmotJChDT05GSUdfVkhPU1RfU0NTSSkgKz0gdmhvc3Rfc2NzaS5vXFxuICAgNjpcXHR2aG9zdF9zY3NpLXkgOj0gc2NzaS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai0kKENPTkZJR19WSE9TVF9WU09DSykgKz0gdmhvc3RfdnNvY2sub1xcbiAgIDk6XFx0dmhvc3RfdnNvY2steSA6PSB2c29jay5vXFxuICAxMDpcXHRcXG4gIDExOlxcdG9iai0kKENPTkZJR19WSE9TVF9SSU5HKSArPSB2cmluZ2gub1xcbiAgMTI6XFx0XFxuICAxMzpcXHRvYmotJChDT05GSUdfVkhPU1RfVkRQQSkgKz0gdmhvc3RfdmRwYS5vXFxuICAxNDpcXHR2aG9zdF92ZHBhLXkgOj0gdmRwYS5vXFxuICAxNTpcXHRcXG4gIDE2OlxcdG9iai0kKENPTkZJR19WSE9TVClcXHQrPSB2aG9zdC5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdG9iai0kKENPTkZJR19WSE9TVF9JT1RMQikgKz0gdmhvc3RfaW90bGIub1xcbiAgMTk6XFx0dmhvc3RfaW90bGIteSA6PSBpb3RsYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjU3LjY5MDM0MDI3OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU0NzkxMzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEJ1aWxkIENvbmZpZ3VyYXRpb24gRGlzY3JlcGFuY3kqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYC4gVGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0ICpzaG91bGQqIGJlIHBhcnQgb2YgdGhlIGBkcml2ZXJzL3Zob3N0YCBidWlsZCBwcm9jZXNzLiBIb3dldmVyLCBhIHF1aWNrIHNjYW4gc3VnZ2VzdHMgaXQncyAqbm90KiBkaXJlY3RseSBsaXN0ZWQgaW4gdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gVGhhdCdzIHVuZXhwZWN0ZWQuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBkb3VibGUtY2hlY2sgdGhlIE1ha2VmaWxlIG1vcmUgdGhvcm91Z2hseS4gSXQncyBwb3NzaWJsZSB0aGUgaW5jbHVzaW9uIGhhcHBlbnMgbGF0ZXIgb24sIHBlcmhhcHMgdGhyb3VnaCBhIHZhcmlhYmxlIGV4cGFuc2lvbiBvciBhbiBpbmRpcmVjdCBpbmNsdWRlLiBJIG5lZWQgdG8gZWxpbWluYXRlIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHNpbXBsZSBvdmVyc2lnaHQgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIG1vcmUgY29tcGxleCBidWlsZCBzeXN0ZW0gbG9naWMgb3IgbWFrZSBhc3N1bXB0aW9ucyBhYm91dCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gTGV0J3Mgc2VlIGlmIHRoZSBmaWxlIGlzIGluY2x1ZGVkIGZ1cnRoZXIgZG93biBpbiB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjczLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTowMS4wNDUxMzM5NzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2MDAsIkVycm9yIjoiZmlsZSBkcml2ZXJzL3Zob3N0L01ha2VmaWxlIGRvZXMgbm90IGhhdmUgbGluZSAyMCwgaXQgaGFzIG9ubHkgMTkgbGluZXMiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJmaWxlIGRyaXZlcnMvdmhvc3QvTWFrZWZpbGUgZG9lcyBub3QgaGF2ZSBsaW5lIDIwLCBpdCBoYXMgb25seSAxOSBsaW5lc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTowMS4wNDUxOTcwMjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNDQxMTE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIG9mIGBkcml2ZXJzL3Zob3N0L3Rlc3QuY2AqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBgZHJpdmVycy92aG9zdC90ZXN0LmNgLCBhbmQgSSd2ZSBoaXQgYSBtZW50YWwgcm9hZGJsb2NrLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICpXaGVyZSogZXhhY3RseSBkb2VzIHRoZSBidWlsZCBzeXN0ZW0gY29tcGlsZSB0aGlzIGZpbGU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHRlc3QgY29kZSBpcyBiZWluZyBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgYnVpbGQgcHJvY2Vzcy4gSXMgaXQgcGFydCBvZiB0aGUgbWFpbiBrZXJuZWwgYnVpbGQ/IElzIGl0IGEgc2VwYXJhdGUgbW9kdWxlPyBJcyBpdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24/IEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBmaWd1cmluZyBvdXQgaG93IHRoZSB0ZXN0IHN1aXRlIGlzIHJ1biwgYW5kIGhvdyB0byBwb3RlbnRpYWxseSBtb2RpZnkgb3IgZXh0ZW5kIGl0LiBJIG5lZWQgdG8gZmluZCB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCwgYEtjb25maWdgIG9wdGlvbnMsIG9yIGJ1aWxkIHNjcmlwdHMgdG8gdHJhY2UgdGhpcy4gSXQncyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgdGVzdCBmaWxlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTYyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTowNC4yNzk2MTEyNTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDg1NDc0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZXN0XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTowNC4zNDQ3MDQ1NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE3Nzc5NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIGZvciBhIFRlc3QgVmlydHVhbCBIb3N0IEZpbGUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcywgaXQncyBhbHdheXMgZ29vZCB0byBzdGFydCB3aXRoIGEgc2FuaXR5IGNoZWNrLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoZXJlJ3MgYSBzaW1wbGUsIHJlYWRpbHkgYXZhaWxhYmxlIHRlc3QgZmlsZS4gU28sIEkgbmVlZCB0byBsb29rIGZvciBzb21ldGhpbmcgdGhhdCBtaWdodCBiZSBuYW1lZCBgdmhvc3RfdGVzdC5jYCBvciBzb21ldGhpbmcgc2ltaWxhci4gSXQncyBhIHF1aWNrIHdheSB0byBnYXVnZSB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhbnkgcHJlLWJ1aWx0IGV4YW1wbGVzIG9yIGNvbmZpZ3VyYXRpb25zIEkgY2FuIGxldmVyYWdlLiBJdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIGFueSBnb29kIGludmVzdGlnYXRpb24sIGZpbmQgdGhlIGtub3duIGdvb2QuIExldCdzIHNlZSB3aGF0IHR1cm5zIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIxOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA1OjA3LjI2MjQ4NzQ0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDUzMjAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF90ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdGVzdC5jLTMwLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjMxOnN0YXRpYyBjb25zdCBpbnQgdmhvc3RfdGVzdF9iaXRzW10gPSB7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzItXFx0VkhPU1RfRkVBVFVSRVNcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM1OiNkZWZpbmUgVkhPU1RfVEVTVF9GRUFUVVJFUyBWSE9TVF9GRUFUVVJFU19VNjQodmhvc3RfdGVzdF9iaXRzLCAwKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM2LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTM3PWVudW0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtNDEtXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6NDI6c3RydWN0IHZob3N0X3Rlc3Qge1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTQzLVxcdHN0cnVjdCB2aG9zdF9kZXYgZGV2O1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtNDgtICogcmVhZC1zaXplIGNyaXRpY2FsIHNlY3Rpb24gZm9yIG91ciBraW5kIG9mIFJDVS4gKi9cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzo0OTpzdGF0aWMgdm9pZCBoYW5kbGVfdnEoc3RydWN0IHZob3N0X3Rlc3QgKm4pXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtNTAte1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MTAyPXN0YXRpYyB2b2lkIGhhbmRsZV92cV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTA1LVxcdFxcdFxcdFxcdFxcdFxcdCAgcG9sbC53b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMDY6XFx0c3RydWN0IHZob3N0X3Rlc3QgKm4gPSBjb250YWluZXJfb2YodnEtXFx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Rlc3QsIGRldik7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTA3LVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTEwLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjExMTpzdGF0aWMgaW50IHZob3N0X3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMTIte1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjExMzpcXHRzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiA9IGttYWxsb2Nfb2JqKCpuKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMTQtXFx0c3RydWN0IHZob3N0X2RldiAqZGV2O1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTM1LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjEzNjpzdGF0aWMgdm9pZCAqdmhvc3RfdGVzdF9zdG9wX3ZxKHN0cnVjdCB2aG9zdF90ZXN0ICpuLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTEzNy1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE0Ny1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxNDg6c3RhdGljIHZvaWQgdmhvc3RfdGVzdF9zdG9wKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB2b2lkICoqcHJpdmF0ZXApXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTQ5LXtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxNTA6XFx0KnByaXZhdGVwID0gdmhvc3RfdGVzdF9zdG9wX3ZxKG4sIG4tXFx1MDAzZXZxcyArIFZIT1NUX1RFU1RfVlEpO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE1MS19XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTUyLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjE1MzpzdGF0aWMgdm9pZCB2aG9zdF90ZXN0X2ZsdXNoKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE1NC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNTctXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTU4OnN0YXRpYyBpbnQgdmhvc3RfdGVzdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE1OS17XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTYwOlxcdHN0cnVjdCB2aG9zdF90ZXN0ICpuID0gZi1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE2MS1cXHR2b2lkICAqcHJpdmF0ZTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNjItXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTYzOlxcdHZob3N0X3Rlc3Rfc3RvcChuLCBcXHUwMDI2cHJpdmF0ZSk7XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTY0OlxcdHZob3N0X3Rlc3RfZmx1c2gobik7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTY1LVxcdHZob3N0X2Rldl9zdG9wKFxcdTAwMjZuLVxcdTAwM2VkZXYpO1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTcxLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjE3MjpzdGF0aWMgbG9uZyB2aG9zdF90ZXN0X3J1bihzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgaW50IHRlc3QpXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTczLXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTIxMC1cXHRcXHRpZiAob2xkcHJpdikge1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjIxMTpcXHRcXHRcXHR2aG9zdF90ZXN0X2ZsdXNoKG4pO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTIxMi1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yMjItXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MjIzOnN0YXRpYyBsb25nIHZob3N0X3Rlc3RfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X3Rlc3QgKm4pXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjI0LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTIzNy1cXHR9XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MjM4OlxcdHZob3N0X3Rlc3Rfc3RvcChuLCBcXHUwMDI2cHJpdik7XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MjM5OlxcdHZob3N0X3Rlc3RfZmx1c2gobik7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjQwLVxcdHZob3N0X2Rldl9zdG9wKFxcdTAwMjZuLVxcdTAwM2VkZXYpO1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjQ2LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjI0NzpzdGF0aWMgaW50IHZob3N0X3Rlc3Rfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB1NjQgZmVhdHVyZXMpXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjQ4LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI2NC1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoyNjU6c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9zZXRfYmFja2VuZChzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgdW5zaWduZWQgaW5kZXgsIGludCBmZClcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yNjYte1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzAzLVxcdGlmIChlbmFibGUpIHtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMDQ6XFx0XFx0dmhvc3RfdGVzdF9mbHVzaChuKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMDUtXFx0fVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzE2LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjMxNzpzdGF0aWMgbG9uZyB2aG9zdF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzE4LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMjAtXFx0c3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUgYmFja2VuZDtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMjE6XFx0c3RydWN0IHZob3N0X3Rlc3QgKm4gPSBmLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzIyLVxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzMwLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjMzMTpcXHRcXHRyZXR1cm4gdmhvc3RfdGVzdF9ydW4obiwgdGVzdCk7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzMyLVxcdGNhc2UgVkhPU1RfVEVTVF9TRVRfQkFDS0VORDpcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzNC1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMzU6XFx0XFx0cmV0dXJuIHZob3N0X3Rlc3Rfc2V0X2JhY2tlbmQobiwgYmFja2VuZC5pbmRleCwgYmFja2VuZC5mZCk7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzM2LVxcdGNhc2UgVkhPU1RfR0VUX0ZFQVRVUkVTOlxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzQ1LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNDY6XFx0XFx0cmV0dXJuIHZob3N0X3Rlc3Rfc2V0X2ZlYXR1cmVzKG4sIGZlYXR1cmVzKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNDctXFx0Y2FzZSBWSE9TVF9SRVNFVF9PV05FUjpcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNDg6XFx0XFx0cmV0dXJuIHZob3N0X3Rlc3RfcmVzZXRfb3duZXIobik7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzQ5LVxcdGRlZmF1bHQ6XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNTMtICAgICAgICAgICAgICAgICAgICAgICAgciA9IHZob3N0X3ZyaW5nX2lvY3RsKFxcdTAwMjZuLVxcdTAwM2VkZXYsIGlvY3RsLCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNTQ6XFx0XFx0dmhvc3RfdGVzdF9mbHVzaChuKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNTUtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuLVxcdTAwM2VkZXYubXV0ZXgpO1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzU5LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2MDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF90ZXN0X2ZvcHMgPSB7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzYxLVxcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2MjpcXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF90ZXN0X3JlbGVhc2UsXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzYzOlxcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Rlc3RfaW9jdGwsXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzY0LVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzY1OlxcdC5vcGVuICAgICAgICAgICA9IHZob3N0X3Rlc3Rfb3BlbixcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNjYtXFx0Lmxsc2Vla1xcdFxcdD0gbm9vcF9sbHNlZWssXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNjgtXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzY5OnN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB2aG9zdF90ZXN0X21pc2MgPSB7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzcwLVxcdE1JU0NfRFlOQU1JQ19NSU5PUixcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNzEtXFx0XFxcInZob3N0LXRlc3RcXFwiLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM3MjpcXHRcXHUwMDI2dmhvc3RfdGVzdF9mb3BzLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM3My19O1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM3NDptb2R1bGVfbWlzY19kZXZpY2Uodmhvc3RfdGVzdF9taXNjKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA1OjA3LjMyMzAyNTQ2NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODAzNjM5MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgdGhlIHZob3N0X3Rlc3QgRHJpdmVyKipcblxuQWxyaWdodCwgc28gYHZob3N0X3Rlc3RgLi4uIHJpZ2h0LCB0aGF0J3MgYSBtaXNjIGRldmljZSwgaXNuJ3QgaXQ/IExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0LiBOb3csIGlzIGl0IGFjdHVhbGx5ICpjb21waWxlZCogaW50byB0aGUga2VybmVsPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgaXQncyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEknbSBnb2luZyB0byBqdW1wIGJhY2sgaW50byB0aGUgYGRyaXZlcnMvdmhvc3QvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb2J2aW91cyBidWlsZCBmbGFncyBvciBkZXBlbmRlbmNpZXMgdGhhdCBJJ20gbWlzc2luZy4gTmVlZCB0byBlbGltaW5hdGUgdGhhdCBwb3RlbnRpYWwgY2F1c2UgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MjUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNToxMC4xMjY2Njc5NzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjIzNTc1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZXN0XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNToxMC4xOTQ5MDM3MDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNzkxMjYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5IG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBCdWlsZCBTeXN0ZW0qKlxuXG5SaWdodCwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGBkcml2ZXJzL3Zob3N0L3Rlc3QuY2AgaXMgYWN0dWFsbHkgYnVpbHQuIEl0IGZlZWxzIGxpa2UgSSd2ZSBzZWVuIHNvbWV0aGluZyBzaW1pbGFyIGNvbXBpbGVkIGluIHRoZSBgdG9vbHMvdmlydGlvL2AgZGlyZWN0b3J5IGJlZm9yZSwgbWF5YmUgYXMgcGFydCBvZiBzb21lIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBkZXBlbmRlbmN5IGdyYXBoIGlzbid0IGltbWVkaWF0ZWx5IG9idmlvdXMsIGFuZCBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgYnVpbGQgcnVsZXMgZm9yIHRoaXMgc3BlY2lmaWMgdGVzdCBjYXNlLlxuXG5UaGVyZWZvcmUsIGxldCdzIGp1c3QgZ28gYWhlYWQgYW5kIGRpdmUgZGlyZWN0bHkgaW50byBgdG9vbHMvdmlydGlvL01ha2VmaWxlYC4gSXQncyBhbG1vc3QgY2VydGFpbiB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSByZWxldmFudCBkaXJlY3RpdmVzLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgYSBwb2ludGVyIHRvIHdoZXJlIHRob3NlIHJ1bGVzIG1pZ2h0IGJlIGxvY2F0ZWQuIEknbGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBgdmhvc3RgIGFuZCBwb3RlbnRpYWxseSB0aGF0IGZpbGVuYW1lIHNwZWNpZmljYWxseS4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgYnVpbHQgdGhlcmUgZGlyZWN0bHksIGluY2x1ZGVkIGZyb20gdGhlcmUsIG9yIGlmIGl0IGxldmVyYWdlcyBhIHNoYXJlZCBidWlsZCBlbnZpcm9ubWVudC4gTGV0J3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTMxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6MTQuMjMyODIwNTU1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg2MzczOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVzdFxcXFwuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy92aXJ0aW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInRvb2xzL3ZpcnRpby92aG9zdF90ZXN0L3Zob3N0X3Rlc3QuYzoxOiNpbmNsdWRlIFxcXCJ0ZXN0LmNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA1OjE0LjM0MTQ2Mzk4NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM0Mjg0MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZTpcblxuKipVbnJhdmVsaW5nIHRoZSBWaG9zdCBUZXN0IFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHRvb2xzL3ZpcnRpby92aG9zdF90ZXN0L3Zob3N0X3Rlc3QuY2AgcHVsbHMgaW4gYHRlc3QuY2AuIE5vdGhpbmcgdW51c3VhbCB0aGVyZSwgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIG9yZ2FuaXppbmcgdGVzdCBjb2RlLiBCdXQgd2FpdCwgSSdtIGp1c3Qgbm90aWNpbmcgc29tZXRoaW5nIG1vcmUgaW50cmlndWluZy4gVGhhdCBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGlzIGJ1aWx0IGFzIGEga2VybmVsIG1vZHVsZSwgYHZob3N0X3Rlc3Qua29gLiBUaGF0J3Mgbm90IHRoZSB0eXBpY2FsIHNldHVwLiBVc3VhbGx5LCBJJ2QgZXhwZWN0IHRoZSBjb3JlIHZob3N0IHRlc3QgY29kZSB0byBiZSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgZHJpdmVyIGl0c2VsZiBvciBhIHV0aWxpdHkuIFRoaXMgaW5kaWNhdGVzIGl0IGlzIGludGVudGlvbmFsbHkgc2VwYXJhdGVkLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlLCBgZHJpdmVycy92aG9zdC9LY29uZmlnYC4gSSdsbCBsb29rIGZvciBgVkhPU1RfVEVTVGAgYW5kIHNlZSB3aGF0J3MgYmVpbmcgY29uZmlndXJlZC4gVGhhdCdsbCB0ZWxsIG1lIGlmIGl0J3MgbWVhbnQgdG8gYmUgbW9kdWxhciBhbmQgaG93IGl0J3MgYWN0aXZhdGVkLCBvciBpZiBpdCdzIGludGVncmF0ZWQgZGlmZmVyZW50bHkgYW5kIHdoeS4gSSdsbCBnZXQgdGhlIHJlYWwgc3RvcnkgZnJvbSB0aGF0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjU2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6MTcuNjc1NzUyNDcxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzcxNDQ5MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZIT1NUX1RFU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC90ZXN0LmMtMjItICogVXNpbmcgdGhpcyBsaW1pdCBwcmV2ZW50cyBvbmUgdmlydHF1ZXVlIGZyb20gc3RhcnZpbmcgb3RoZXJzLiAqL1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjIzOiNkZWZpbmUgVkhPU1RfVEVTVF9XRUlHSFQgMHg4MDAwMFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI0LVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjgtICovXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6Mjk6I2RlZmluZSBWSE9TVF9URVNUX1BLVF9XRUlHSFQgMjU2XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzAtXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzE9c3RhdGljIGNvbnN0IGludCB2aG9zdF90ZXN0X2JpdHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM1OiNkZWZpbmUgVkhPU1RfVEVTVF9GRUFUVVJFUyBWSE9TVF9GRUFUVVJFU19VNjQodmhvc3RfdGVzdF9iaXRzLCAwKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM2LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTM3PWVudW0ge1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM4OlxcdFZIT1NUX1RFU1RfVlEgPSAwLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM5OlxcdFZIT1NUX1RFU1RfVlFfTUFYID0gMSxcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy00MC19O1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9NDI9c3RydWN0IHZob3N0X3Rlc3Qge1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTQzLVxcdHN0cnVjdCB2aG9zdF9kZXYgZGV2O1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjQ0OlxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgdnFzW1ZIT1NUX1RFU1RfVlFfTUFYXTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy00NS19O1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9NDk9c3RhdGljIHZvaWQgaGFuZGxlX3ZxKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTUwLXtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzo1MTpcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFxcdTAwMjZuLVxcdTAwM2V2cXNbVkhPU1RfVEVTVF9WUV07XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtNTItXFx0dW5zaWduZWQgb3V0LCBpbjtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTExMT1zdGF0aWMgaW50IHZob3N0X3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTExOC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMTk6XFx0dnFzID0ga21hbGxvY19vYmpzKCp2cXMsIFZIT1NUX1RFU1RfVlFfTUFYKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMjAtXFx0aWYgKCF2cXMpIHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTEyNS1cXHRkZXYgPSBcXHUwMDI2bi1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjEyNjpcXHR2cXNbVkhPU1RfVEVTVF9WUV0gPSBcXHUwMDI2bi1cXHUwMDNldnFzW1ZIT1NUX1RFU1RfVlFdO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjEyNzpcXHRuLVxcdTAwM2V2cXNbVkhPU1RfVEVTVF9WUV0uaGFuZGxlX2tpY2sgPSBoYW5kbGVfdnFfa2ljaztcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMjg6XFx0dmhvc3RfZGV2X2luaXQoZGV2LCB2cXMsIFZIT1NUX1RFU1RfVlFfTUFYLCBVSU9fTUFYSU9WLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjEyOTpcXHRcXHQgICAgICAgVkhPU1RfVEVTVF9QS1RfV0VJR0hULCBWSE9TVF9URVNUX1dFSUdIVCwgdHJ1ZSwgTlVMTCk7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTMwLVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MTQ4PXN0YXRpYyB2b2lkIHZob3N0X3Rlc3Rfc3RvcChzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgdm9pZCAqKnByaXZhdGVwKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE0OS17XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTUwOlxcdCpwcml2YXRlcCA9IHZob3N0X3Rlc3Rfc3RvcF92cShuLCBuLVxcdTAwM2V2cXMgKyBWSE9TVF9URVNUX1ZRKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNTEtfVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MjQ3PXN0YXRpYyBpbnQgdmhvc3RfdGVzdF9zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Rlc3QgKm4sIHU2NCBmZWF0dXJlcylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI1Ni1cXHR9XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MjU3OlxcdHZxID0gXFx1MDAyNm4tXFx1MDAzZXZxc1tWSE9TVF9URVNUX1ZRXTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yNTgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTI2NT1zdGF0aWMgbG9uZyB2aG9zdF90ZXN0X3NldF9iYWNrZW5kKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB1bnNpZ25lZCBpbmRleCwgaW50IGZkKVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjc3LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjI3ODpcXHRpZiAoaW5kZXggXFx1MDAzZT0gVkhPU1RfVEVTVF9WUV9NQVgpIHtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yNzktXFx0XFx0ciA9IC1FTk9CVUZTO1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzE3PXN0YXRpYyBsb25nIHZob3N0X3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMyNy1cXHRzd2l0Y2ggKGlvY3RsKSB7XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzI4OlxcdGNhc2UgVkhPU1RfVEVTVF9SVU46XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzI5LVxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2dGVzdCwgYXJncCwgc2l6ZW9mIHRlc3QpKVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzMxLVxcdFxcdHJldHVybiB2aG9zdF90ZXN0X3J1bihuLCB0ZXN0KTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMzI6XFx0Y2FzZSBWSE9TVF9URVNUX1NFVF9CQUNLRU5EOlxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzMy1cXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmJhY2tlbmQsIGFyZ3AsIHNpemVvZiBiYWNrZW5kKSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzNi1cXHRjYXNlIFZIT1NUX0dFVF9GRUFUVVJFUzpcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMzc6XFx0XFx0ZmVhdHVyZXMgPSBWSE9TVF9URVNUX0ZFQVRVUkVTO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzOC1cXHRcXHRpZiAoY29weV90b191c2VyKGZlYXR1cmVwLCBcXHUwMDI2ZmVhdHVyZXMsIHNpemVvZiBmZWF0dXJlcykpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNDMtXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzQ0OlxcdFxcdGlmIChmZWF0dXJlcyBcXHUwMDI2IH5WSE9TVF9URVNUX0ZFQVRVUkVTKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0NS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuZHJpdmVycy92aG9zdC90ZXN0Lmg6MjojaWZuZGVmIExJTlVYX1ZIT1NUX1RFU1RfSFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5oOjM6I2RlZmluZSBMSU5VWF9WSE9TVF9URVNUX0hcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuaC00LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5oLTUtLyogU3RhcnQgYSBnaXZlbiB0ZXN0IG9uIHRoZSB2aXJ0aW8gbnVsbCBkZXZpY2UuIDAgc3RvcHMgYWxsIHRlc3RzLiAqL1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5oOjY6I2RlZmluZSBWSE9TVF9URVNUX1JVTiBfSU9XKFZIT1NUX1ZJUlRJTywgMHgzMSwgaW50KVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5oOjc6I2RlZmluZSBWSE9TVF9URVNUX1NFVF9CQUNLRU5EIF9JT1coVkhPU1RfVklSVElPLCAweDMyLCBpbnQpXFxuZHJpdmVycy92aG9zdC90ZXN0LmgtOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6MTkuNDQ3MjA5ODc0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDI4ODM2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gb2YgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBkb2Vzbid0IGZlZWwgcmlnaHQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGBkcml2ZXJzL3Zob3N0L3Rlc3QuY2AgZmlsZSB3YXMgcGFydCBvZiB0aGUgY29yZSB2aG9zdCBkcml2ZXIsIGJ1dCB0aGUgYnVpbGQgc3lzdGVtIHNlZW1zIHRvIGJlIHRyZWF0aW5nIGl0IGRpZmZlcmVudGx5LiBJdCBsb29rcyBsaWtlIGl0J3MgYmVpbmcgY29tcGlsZWQgYXMgYSBrZXJuZWwgbW9kdWxlIHdpdGhpbiBgdG9vbHMvdmlydGlvL3Zob3N0X3Rlc3QvYCwgd2hpY2ggc3RyaWtlcyBtZSBhcyB1bnVzdWFsLiBUaGF0IGNvbmZpZ3VyYXRpb24gZG9lc24ndCBpbW1lZGlhdGVseSBhbGlnbiB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcGFydGljdWxhciB0ZXN0IGlzIHR5cGljYWxseSBoYW5kbGVkLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkuIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBgdG9vbHMvdmlydGlvL01ha2VmaWxlYC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgZGlyZWN0IGluc2lnaHQgaW50byBob3cgdGhpcyBmaWxlIGlzIGJlaW5nIGJ1aWx0IGFuZCBsaW5rZWQsIGFuZCBob3BlZnVsbHkgY2xhcmlmeSB3aHkgaXQncyBiZWluZyB0cmVhdGVkIGFzIGEgc2VwYXJhdGUgbW9kdWxlIGluIHRoYXQgc3BlY2lmaWMgZGlyZWN0b3J5LiBMZXQncyBzZWUgd2hhdCB0aGUgTWFrZWZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyNjMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNToyMi43NTAwOTU5ODJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTcxNzEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF90ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3ZpcnRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdmlydGlvL01ha2VmaWxlPTI0PW1vZDpcXG50b29scy92aXJ0aW8vTWFrZWZpbGU6MjU6XFx0JHtCVUlMRH0gTT1gcHdkYC92aG9zdF90ZXN0XFxudG9vbHMvdmlydGlvL01ha2VmaWxlLTI2LVxcbi0tXFxudG9vbHMvdmlydGlvL01ha2VmaWxlPTQ0PW9vdC1idWlsZDpcXG50b29scy92aXJ0aW8vTWFrZWZpbGUtNDUtXFx0ZWNobyBcXFwiVU5TVVBQT1JURUQhIERvbid0IHVzZSB0aGUgcmVzdWx0aW5nIG1vZHVsZXMgaW4gcHJvZHVjdGlvbiFcXFwiXFxudG9vbHMvdmlydGlvL01ha2VmaWxlOjQ2OlxcdCR7T09UX0JVSUxEfSBNPWBwd2RgL3Zob3N0X3Rlc3RcXG50b29scy92aXJ0aW8vTWFrZWZpbGUtNDctXFx0JHtPT1RfQlVJTER9IE09JHtPT1RfVkhPU1R9ICR7T09UX0NPTkZJR1N9XFxuLS1cXG50b29scy92aXJ0aW8vTWFrZWZpbGU9NTQ9Y2xlYW46XFxudG9vbHMvdmlydGlvL01ha2VmaWxlOjU1OlxcdCR7Uk19ICoubyB2cmluZ2hfdGVzdCB2aXJ0aW9fdGVzdCB2aG9zdF9uZXRfdGVzdCB2aG9zdF90ZXN0LyoubyBcXFxcXFxudG9vbHMvdmlydGlvL01ha2VmaWxlOjU2OiAgICAgICAgICAgICAgdmhvc3RfdGVzdC8uKi5jbWQgdmhvc3RfdGVzdC9Nb2R1bGUuc3ltdmVycyBcXFxcXFxudG9vbHMvdmlydGlvL01ha2VmaWxlOjU3OiAgICAgICAgICAgICAgdmhvc3RfdGVzdC9tb2R1bGVzLm9yZGVyICouZFxcbnRvb2xzL3ZpcnRpby9NYWtlZmlsZS01OC0taW5jbHVkZSAqLmRcXG4tLVxcbnRvb2xzL3ZpcnRpby92aG9zdF90ZXN0L01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxudG9vbHMvdmlydGlvL3Zob3N0X3Rlc3QvTWFrZWZpbGU6MjpvYmotbSArPSB2aG9zdF90ZXN0Lm9cXG50b29scy92aXJ0aW8vdmhvc3RfdGVzdC9NYWtlZmlsZS0zLUVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvdmhvc3RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6MjMuMTQxODE3NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDEzOTQ2Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgdGhlIGB2aG9zdGAgTW9kdWxlIFRlc3RpbmcgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgdmhvc3RfdGVzdGAgaXMgYSB0ZXN0aW5nIG1vZHVsZS4gSXQncyBidWlsdCBzcGVjaWZpY2FsbHkgZm9yIG91dC1vZi10cmVlIHRlc3Rpbmcgc2NlbmFyaW9zLCB3aGljaCBtZWFucyBpdHMgZnVuY3Rpb25zIGxpa2UgYHZob3N0X3Rlc3RfaW9jdGxgIGFuZCBgdmhvc3RfdGVzdF9yZWxlYXNlYCBhcmVuJ3QgYmFrZWQgaW50byB0aGUga2VybmVsIGluIHRoZSB0eXBpY2FsLCBkZXBsb3lhYmxlIGJ1aWxkLiBUaGF0IGltbWVkaWF0ZWx5IHNoaWZ0cyBteSBhdHRlbnRpb24uIEkgZG9uJ3QgbmVlZCB0byBnZXQgYm9nZ2VkIGRvd24gaW4gdGhvc2UuIFRoZXkncmUgaXJyZWxldmFudCB0byB0aGUgY29yZSBgdmhvc3RgIG1vZHVsZS5cblxuSW5zdGVhZCwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSB0cnVseSBpbXBvcnRhbnQgc3R1ZmYsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgcHJlc2VudCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UncmUgaW4gYSB0ZXN0IG9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQuIFRoZSBrZXkgc3ltYm9scywgYXMgSSBzZWUgaXQsIGFyZTogYHZob3N0X2Rldl9jbGVhbnVwYCwgYHZob3N0X2Rldl9yZXNldF9vd25lcmAsIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLCBgdmhvc3RfbmV0X2lvY3RsYCwgYW5kIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYC4gVGhlc2UgZmVlbCBsaWtlIHRoZXkncmUgY3JpdGljYWwgZm9yIHRoZSBjb3JlIG9wZXJhdGlvbi5cblxuT25lIHF1aWNrIG5vdGUgb24gdGhlIGxpc3QsIGxldCBtZSBqdXN0IGRvdWJsZSBjaGVjaywgaXMgdGhhdCBgdmhvc3Rfc2NzaV9pb2N0bGAgZXhpc3RzLiBJdCBtYXkgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgb3IgbW92ZWQsIHNvIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBpdCBpcyBzdGlsbCBhIHZhbGlkIHN5bWJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4ODksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6MjcuNTU1NzY4NTE2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA3ODI0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0xOTE5PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXR1cF92cV9jbWRzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgbWF4X2NtZHMpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xOTczLS8qXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTk3NDogKiBDYWxsZWQgZnJvbSB2aG9zdF9zY3NpX2lvY3RsKCkgY29udGV4dCB0byB3YWxrIHRoZSBsaXN0IG9mIGF2YWlsYWJsZVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE5NzUtICogdmhvc3Rfc2NzaV90cGcgd2l0aCBhbiBhY3RpdmUgc3RydWN0IHZob3N0X3Njc2lfbmV4dXNcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzNjE9c3RhdGljIGxvbmdcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzYyOnZob3N0X3Njc2lfaW9jdGwoc3RydWN0IGZpbGUgKmYsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM2My1cXHRcXHQgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDM5LVxcdC5yZWxlYXNlICAgICAgICA9IHZob3N0X3Njc2lfcmVsZWFzZSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDQwOlxcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Njc2lfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ0MS1cXHQuY29tcGF0X2lvY3RsXFx0PSBjb21wYXRfcHRyX2lvY3RsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNToyNy43MDY1NTcwMjNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MDkzNDMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBDbGVhbnVwOiBFeHBhbmRpbmcgdGhlIFNjb3BlKipcblxuT2theSwgc28gSSBzZWUgYHZob3N0X3Njc2lfaW9jdGxgIGlzIGRlZmluaXRlbHkgaW4gdGhlIG1peC4gQnV0IGhvbGQgb24sIEknbSBub3RpY2luZyBhIGZldyBvdGhlciBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBhcyB3ZWxsOiBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgYHZob3N0X25ldF9yZWxlYXNlYCwgYW5kIGB2aG9zdF92ZHBhX2NsZWFudXBgLiBIbW0sIGFyZSB0aGVzZSBwb3RlbnRpYWxseSBiZXR0ZXIgcGxhY2VzIHRvIGZvY3VzIG15IGVmZm9ydHM/IEkgdGhpbmsgc28uXG5cblRoaW5raW5nIGFib3V0IGl0LCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCBsb29rcyBwcm9taXNpbmcgYmVjYXVzZSBpdCdzIHRoZSByZWxlYXNlIGhhbmRsZXIuIFRoYXQgbWVhbnMgaXQncyB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjbG9zZWQsIG1ha2luZyBpdCBhIG5hdHVyYWwgZml0IGZvciB0ZXN0aW5nIHRoZSBgdmhvc3RfZGV2X2NsZWFudXBgIHByb2Nlc3MuIEknbSBnb2luZyB0byBhZGQgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGB2aG9zdF9uZXRfcmVsZWFzZWAsIGB2aG9zdF92c29ja19kZXZfcmVsZWFzZWAsIGFuZCBgdmhvc3RfdmRwYV9jbGVhbnVwYCB0byBteSBsaXN0IG9mIGtleSBmdW5jdGlvbnMuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGB2aG9zdF92ZHBhX2NsZWFudXBgIGlzIGJlaGF2aW5nIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2OTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6MzEuNzQ3NDk0NTFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTQyOTY2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF92ZHBhX2NsZWFudXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmM9MTM3MD1zdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3NldF9pb3ZhX3JhbmdlKHN0cnVjdCB2aG9zdF92ZHBhICp2KVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTM4Ni1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxMzg3OnN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfY2xlYW51cChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMzg4LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE0MDQ9c3RhdGljIGludCB2aG9zdF92ZHBhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQ0OC1lcnJfYWxsb2NfZG9tYWluOlxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE0NDk6XFx0dmhvc3RfdmRwYV9jbGVhbnVwKHYpO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0NTAtZXJyOlxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTQ2Mz1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDc0LVxcdHZob3N0X3ZkcGFfY29uZmlnX3B1dCh2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNDc1OlxcdHZob3N0X3ZkcGFfY2xlYW51cCh2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDc2LVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZC1cXHUwMDNlbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTozMi4xNTY5MzcxNDZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ4NDk4MzUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBWaG9zdCBNb2R1bGUgRW50cnkgUG9pbnRzIGFuZCBDb3JlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIHZob3N0IG1vZHVsZSBoYW5ncyB0b2dldGhlci4gVGhlIHByaW1hcnkgcmVsZWFzZSBoYW5kbGVyIGhlcmUgaXMgYHZob3N0X3ZkcGFfcmVsZWFzZWAsIGFuZCBpdCBjYWxscyBgdmhvc3RfdmRwYV9jbGVhbnVwYCB1bmRlciB0aGUgaG9vZC4gU28sIHdoZW4gSSdtIGFkZGluZyBgdmhvc3RfdmRwYV9yZWxlYXNlYCBpdCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRoYXQgZnVuY3Rpb24uXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgc3ltYm9scyBhbmQgY29uc2lkZXIgd2hpY2ggdG8gaGlnaGxpZ2h0LiBJJ3ZlIGdvdCBhIGxpc3QgaGVyZTogYHZob3N0X2Rldl9jbGVhbnVwYCwgYHZob3N0X2Rldl9yZXNldF9vd25lcmAsIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLCBgdmhvc3RfbmV0X2lvY3RsYCwgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLCBgdmhvc3Rfc2NzaV9pb2N0bGAsIGB2aG9zdF92c29ja19kZXZfcmVsZWFzZWAsIGB2aG9zdF9uZXRfcmVsZWFzZWAsIGB2aG9zdF9zY3NpX3JlbGVhc2VgLCBhbmQgb2YgY291cnNlLCBgdmhvc3RfdmRwYV9yZWxlYXNlYC5cblxuV2FpdCwgaG9sZCBvbi4gYHZob3N0X2Rldl9jbGVhbnVwYCBhbmQgYHZob3N0X2Rldl9yZXNldF9vd25lcmAgYXJlIGNvcmUgZnVuY3Rpb25zLCByaWdodD8gQWN0dWFsbHksIHRoZXkgYXJlIHByb2JhYmx5IG1vcmUgdXNlZnVsIHRvIGluY2x1ZGUsIGFzIHRoZXkgYXJlIHBhcnQgb2YgdGhlIGNyaXRpY2FsIHBhdGggYW5kIGFyZSBleHBvcnRlZCBzeW1ib2xzLiBJdCdzIHByb2JhYmx5IGJldHRlciB0byBqdXN0IGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBjb3JlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhleSBhcmUgdGhlIGFjdHVhbCBlbnRyeSBwb2ludHMsIGJ1dCB0aGUgb3RoZXJzIGFyZSBpbXBvcnRhbnQgdG9vLlxuXG5JIHF1aWNrbHkgY2hlY2tlZCB0aGUgcmVsYXRpb25zaGlwIHRvIHN0YXRpYyBmdW5jdGlvbnMsIGxpa2UgYHZob3N0X3Zzb2NrX3N0YXJ0YCBhbmQgYHZob3N0X3Zzb2NrX3N0b3BgLCB3aGljaCBhcmUgY2FsbGVkIGZyb20gYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAuIEluIHRoaXMgY2FzZSwgSSdsbCBzdGljayB3aXRoIHRoZSBlbnRyeSBwb2ludHMgYW5kIGNvcmUgZnVuY3Rpb25zIGZvciB0aGUgc3VtbWFyeS5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJpZ2h0LiBJIG5lZWQgYFZIT1NUX1ZTT0NLYCwgYFZIT1NUX05FVGAsIGBWSE9TVF9TQ1NJYCwgYFZIT1NUX1ZEUEFgLCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAuIEknbGwgZG91YmxlLWNoZWNrIHRoYXQgYFRBUkdFVF9DT1JFYCBuYW1lIHRvIG1ha2Ugc3VyZSBpdCdzIGV4YWN0bHkgcmlnaHQsIG9mIGNvdXJzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6NDEuNjQxOTI0OTM0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1OTgzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRBUkdFVF9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdGFyZ2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90YXJnZXQvS2NvbmZpZy0yLVxcbmRyaXZlcnMvdGFyZ2V0L0tjb25maWc6MzptZW51Y29uZmlnIFRBUkdFVF9DT1JFXFxuZHJpdmVycy90YXJnZXQvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFRhcmdldCBDb3JlIE1vZCAoVENNKSBhbmQgQ29uZmlnRlMgSW5mcmFzdHJ1Y3R1cmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA1OjQxLjgwNjUyOTE4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTIyNTQ0OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSB0YXJnZXQgaXMgY29uZmlybWVkOiBgVEFSR0VUX0NPUkVgLiBUaGF0J3MgdGhlIHByaW1hcnkgcG9pbnQgb2YgZm9jdXMuIE5vdywgbGV0J3MgcGl2b3QgdG8gdGhlIHJlbGV2YW50IGRhdGEgcGFja2FnZSAtIEkgbmVlZCB0byBpbW1lZGlhdGVseSBldmFsdWF0ZSBgVkRQQWAuIEdpdmVuIHdoYXQgSSdtIGV4cGVjdGluZyB3aXRoaW4gdGhlIHNjb3BlIG9mIFRBUkdFVF9DT1JFLCB0aGlzIGlzIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwLiBJJ2xsIG5lZWQgdG8gcmFwaWRseSBkZXRlcm1pbmUgaXRzIHN0YXR1cyBhbmQgaWYgaXQncyBvcGVyYXRpbmcgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBhbmFseXplIGFueSBkaXNjcmVwYW5jaWVzIGJldHdlZW4gaXRzIGJlaGF2aW9yIGFuZCBteSBtb2RlbCBmb3IgYFRBUkdFVF9DT1JFYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzOTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTo0NC42OTg3ODcwOTFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MTYxMTA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkRQQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXFxuZHJpdmVycy92ZHBhL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwidkRQQSBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTExLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjEyOmNvbmZpZyBWRFBBX1NJTVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJ2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIwLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXFxuZHJpdmVycy92ZHBhL0tjb25maWc6Mjg6Y29uZmlnIFZEUEFfU0lNX0JMT0NLXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzozNTpjb25maWcgVkRQQV9VU0VSXFxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXFx0dHJpc3RhdGUgXFxcIlZEVVNFICh2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA1OjQ1LjA2MDQwMzg3MloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE2MjQ0NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGVzZSBjb25jZXB0cyB3aXRoaW4gbXkgYXJlYSBvZiBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgTXkgTWVudGFsIExhbmRzY2FwZSoqXG5cbk9rYXksIGRlZmluaXRlbHkuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBgVkRQQWAuIFRoYXQncyBhIGtleSBhcmVhIHRvIGNvbnNpZGVyIGluIHRoaXMgY29udGV4dC4gQnV0IGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgaW1wbGljYXRpb25zIG9mIGBWRFBBYCwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBkbyBhIHF1aWNrIG1lbnRhbCBjaGVjayBvbiBgVlNPQ0tFVFNgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBob2xkaW5nIGFsbCB0aGUgcmVsZXZhbnQgcGllY2VzIGluIG15IG1pbmQgYXQgdGhlIHNhbWUgdGltZSBhbmQgbm90IGdldHRpbmcgdHVubmVsIHZpc2lvbiBvbiBqdXN0IG9uZS4gSSdsbCBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgYW5kIHRoZW4gSSBjYW4gcmVmaW5lIG15IGN1cnJlbnQgYXJlYSBvZiBmb2N1cywgYW5kIHRoZW4gSSBjYW4gY29uc2lkZXIgaG93IHRoZXkgaW50ZXJhY3Qgb3IgY29udHJhc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODk2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6NDcuOTc2NjUxNTExWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njk0NDcwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVlNPQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC92bXdfdnNvY2svS2NvbmZpZy01LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2OmNvbmZpZyBWU09DS0VUU1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0xOC1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MTk6Y29uZmlnIFZTT0NLRVRTX0RJQUdcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yOC1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Mjk6Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXFxubmV0L3Ztd192c29jay9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTo0OC4wNDM2MDE4MjVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NDk4NTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHllcCwgSSdtIGRlZmluaXRlbHkgdGhpbmtpbmcgYWJvdXQgYFZTT0NLRVRTYCByaWdodCBub3cuIFRoYXQncyBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gTm93LCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsLCBpdCdzIHdvcnRoIGNyb3NzLXJlZmVyZW5jaW5nIGFuZCBnaXZpbmcgYSBxdWljayBsb29rIGF0IGBFVkVOVEZEYCBhbmQgc2VlIGlmIGl0IGlzIGEgYmV0dGVyIGZpdC4gQWx3YXlzIGltcG9ydGFudCB0byBxdWlja2x5IHJ1bGUgb3V0IG90aGVyIHBvdGVudGlhbGx5IGJldHRlciBvciBtb3JlIGFwcHJvcHJpYXRlIHRvb2xzIGJlZm9yZSBjb21taXR0aW5nIHRvIGEgZGVzaWduLiBUaGlzIHJlcXVpcmVzIGNvbnNpZGVyaW5nIHZhcmlvdXMgZmFjdG9ycyBhbmQgdXNlLWNhc2VzLiBHb3QgdG8ga2VlcCBhbiBvcGVuIG1pbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Mjg3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6NTAuOTg4NTkxNDAyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTkyNTg0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVZFTlRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4Nzg9Y29uZmlnIFRJTUVSRkRcXG4tLVxcbmluaXQvS2NvbmZpZy0xODg2LVxcbmluaXQvS2NvbmZpZzoxODg3OmNvbmZpZyBFVkVOVEZEXFxuaW5pdC9LY29uZmlnLTE4ODgtXFx0Ym9vbCBcXFwiRW5hYmxlIGV2ZW50ZmQoKSBzeXN0ZW0gY2FsbFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA1OjUxLjA1NDUyNTEwN1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzU2ODgzNzgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipWaG9zdCBTdWJzeXN0ZW0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgYEVWRU5URkRgIGlzIGRlZmluaXRlbHkgaW4gdGhlIG1peC4gTGV0J3MgcnVuIHRocm91Z2ggdGhlIHZob3N0IGRyaXZlciBkZXBlbmRlbmNpZXMgYWdhaW4gdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLlxuXG4qICAgYFZIT1NUX05FVGAgcmVsaWVzIG9uIGBORVRgLCBgRVZFTlRGRGAsIGFuZCBlaXRoZXIgYFRVTmAgb3Igbm90IGBUVU5gLCBhbmQgZWl0aGVyIGBUQVBgIG9yIG5vdCBgVEFQYC4gU2luY2UgU3l6a2FsbGVyIHR5cGljYWxseSBlbmFibGVzIGBUVU5gIGFuZCBgVEFQYCwgYFZIT1NUX05FVGAgd2lsbCBuZWVkIHRvIGJlIGEgbW9kdWxlIGlmIGBUVU5gIG9yIGBUQVBgIGFyZSBhbHNvIG1vZHVsZXMuXG4qICAgYFZIT1NUX1NDU0lgIGRlcGVuZHMgb24gYFRBUkdFVF9DT1JFYCBhbmQgYEVWRU5URkRgLCBzZWxlY3RpbmcgYm90aCBgVkhPU1RgIGFuZCBgU0dfUE9PTGAuXG4qICAgYFZIT1NUX1ZEUEFgIGhpbmdlcyBvbiBgRVZFTlRGRGAsIGFuZCBpdCBzZWxlY3RzIGBWSE9TVGAsIGBJUlFfQllQQVNTX01BTkFHRVJgLCBhbmQgYWxzbyBkZXBlbmRzIG9uIGBWRFBBYC5cbiogICBgVkhPU1RfVlNPQ0tgIHJlcXVpcmVzIGBWU09DS0VUU2AgYW5kIGBFVkVOVEZEYCBhbmQgc2VsZWN0cyBgVkhPU1RgLCBhbmQgYFZJUlRJT19WU09DS0VUU19DT01NT05gLlxuXG5TbyBteSBFbmFibGVDb25maWdzIGxpc3QgaXMgc3RhcnRpbmcgdG8gdGFrZSBzaGFwZTogYFZIT1NUX1ZTT0NLYCwgYFZIT1NUX05FVGAsIGBWSE9TVF9TQ1NJYCwgYFZIT1NUX1ZEUEFgLCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAuXG5cbkhtbSwgZG8gSSBuZWVkIGBWSE9TVF9NRU5VYD8gTGV0J3MgY2hlY2sgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AuIEFoLCBpdCdzIGEgbWVudSBjb25maWcgd2l0aCBhIGRlZmF1bHQgb2YgJ3knLiBJIGRvbid0ICpuZWVkKiB0byBleHBsaWNpdGx5IGFkZCBpdCwgYnV0IGl0IGRvZXNuJ3QgaHVydC4gU2luY2UgaXQncyB0aGUgZGVmYXVsdCwgSSdsbCBqdXN0IG9taXQgaXQsIHRob3VnaC5cblxuQW5kIGBWSE9TVGAgaXRzZWxmPyBUaGF0J3MgaW1wbGljaXRseSBzZWxlY3RlZCBieSB0aGUgb3RoZXIgZHJpdmVycy4gU28sIEkgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGl0LlxuXG5MZXQncyByZXZpZXcgdGhlIGtlcm5lbCBzeW1ib2xzIGFnYWluLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBzb2xpZCBvbiB0aGVzZS5cblxuSGVyZSdzIHRoZSBsaXN0OlxuKiAgIGB2aG9zdF9kZXZfY2xlYW51cGBcbiogICBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYFxuKiAgIGB2aG9zdF92c29ja19kZXZfaW9jdGxgXG4qICAgYHZob3N0X25ldF9pb2N0bGBcbiogICBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGBcbiogICBgdmhvc3Rfc2NzaV9pb2N0bGBcbiogICBgdmhvc3RfdnNvY2tfZGV2X3JlbGVhc2VgXG4qICAgYHZob3N0X25ldF9yZWxlYXNlYFxuKiAgIGB2aG9zdF9zY3NpX3JlbGVhc2VgXG4qICAgYHZob3N0X3ZkcGFfcmVsZWFzZWBcblxuSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0J3MgbW9kaWZpZWQ/IExldCBtZSBzZWUuXG5cbk9oLCBva2F5LCBJIHNlZSBhIGZldyBzdGF0aWMgZnVuY3Rpb25zIHRvbzogYHZob3N0X3dvcmtlcnNfZnJlZWAsIGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19zdG9wYCwgYHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHNgLCBhbmQgYHZob3N0X3ZkcGFfY2xlYW51cGAuICBJJ3ZlIGdvdCB0aGUgdGVzdCBtb2R1bGUgZnVuY3Rpb25zIGFzIHdlbGwgLSBgdmhvc3RfdGVzdF9yZWxlYXNlYCBhbmQgYHZob3N0X3Rlc3RfcmVzZXRfb3duZXJgLlxuXG5UaGUgZXhwb3J0ZWQgZnVuY3Rpb24gYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgbG9va3MgaW1wb3J0YW50LCBidXQgdGhlIHBhdGNoIG1vZGlmaWVzIGl0LCBhbmQgdGhlIHN0YXRlZCBnb2FsIGlzIHRvIGF2b2lkIHRob3NlLiBTbywgaXQncyBub3QgZ29pbmcgdG8gYmUgb24gdGhlIGxpc3QuXG5cbk9rYXksIEkgdGhpbmsgSSdtIHNvbGlkIG9uIHRoZSBmdW5jdGlvbiBsaXN0LlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgYW5kIHdoeSBJJ20gc2tpcHBpbmcgaXQuIEl0J3MgdGhlIHZzb2NrIHRyYW5zcG9ydCBBUEkgZW50cnkgcG9pbnQgY2FsbGVkIHdoZW4gYSBwYWNrZXQgaXMgc2VudCwgc28gaXQgZG9lcyBtYXR0ZXIuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIGB2c29jay1cdTAwM2VldmVyX3N0YXJ0ZWRgIHdpdGhpbiBpdCwgYW5kIGl0J3MgYSBob3QgcGF0aC4gU2luY2UgdGhlIGV4cGxpY2l0IGdvYWwgaXMgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLCBldmVuIHRob3VnaCB0aGlzIG9uZSBpcyBkaXJlY3RseSBtb2RpZmllZCwgSSdtIGdvaW5nIHRvIG9taXQgaXQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlzdGlsbCB0aGUgcmVhc29uaW5nLiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBzeW5jaHJvbml6aW5nIFJDVSByZWFkZXJzIGR1cmluZyBgVkhPU1RfUkVTRVRfT1dORVJgIGFuZCBkZXZpY2UgY2xlYW51cCBpbiB0aGUgdmhvc3Qgc3Vic3lzdGVtLiBJdCB1c2VzIGEgYHN5bmNgIHBhcmFtZXRlciBpbiBgdmhvc3RfZGV2X2NsZWFudXBgIGFuZCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCB0byB3YWl0IGZvciBsb2NrbGVzcyB3b3JrZXJzIHRvIGNvbXBsZXRlLiBUaGUgdnNvY2sgc2lkZSBnZXRzIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgdG8gaGFuZGxlIHJlc2V0cywgcGx1cyBzdGFydC9zdG9wIGNoYW5nZXMgZm9yIGNvcnJlY3QgYmFja2VuZCBoYW5kbGluZy4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIHZob3N0IGxvZ2ljIGFuZCBzZXZlcmFsIGRyaXZlcnMgKG5ldCwgc2NzaSwgdmRwYSwgdnNvY2spLiBUaGV5J3JlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBpb2N0bHMgYW5kIGZpbGUgb3BlcmF0aW9ucy5cblxuVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTQwLCJPdXRwdXRUb2tlbnMiOjMzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNjowNC42MjMzNjcyMDdaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAyNTI5MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWSE9TVF9ORVRcIixcbiAgICBcIlZIT1NUX1NDU0lcIixcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJFVkVOVEZEXCIsXG4gICAgXCJWRFBBXCIsXG4gICAgXCJUQVJHRVRfQ09SRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X2Rldl9jbGVhbnVwXCIsXG4gICAgXCJ2aG9zdF9kZXZfcmVzZXRfb3duZXJcIixcbiAgICBcInZob3N0X3Zzb2NrX2Rldl9pb2N0bFwiLFxuICAgIFwidmhvc3RfbmV0X2lvY3RsXCIsXG4gICAgXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF92c29ja19kZXZfcmVsZWFzZVwiLFxuICAgIFwidmhvc3RfbmV0X3JlbGVhc2VcIixcbiAgICBcInZob3N0X3Njc2lfcmVsZWFzZVwiLFxuICAgIFwidmhvc3RfdmRwYV9yZWxlYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IHN1YnN5c3RlbSB0byBzeW5jaHJvbml6ZSBSQ1UgcmVhZGVycyBkdXJpbmcgVkhPU1RfUkVTRVRfT1dORVIgYW5kIGRldmljZSBjbGVhbnVwLiBJdCBpbnRyb2R1Y2VzIGEgYHN5bmNgIHBhcmFtZXRlciB0byBgdmhvc3RfZGV2X2NsZWFudXBgIGFuZCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCB0byB3YWl0IGZvciBsb2NrbGVzcyB3b3JrZXJzIHRvIGZpbmlzaC4gSXQgYWxzbyBhZGRzIGEgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBmdW5jdGlvbiB0byBoYW5kbGUgVkhPU1RfUkVTRVRfT1dORVIgZm9yIHZzb2NrLCBhbmQgbW9kaWZpZXMgdnNvY2sgc3RhcnQvc3RvcCBsb2dpYyB0byBoYW5kbGUgYmFja2VuZHMgY29ycmVjdGx5IGFjcm9zcyByZXNldHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgdmhvc3QgbG9naWMgYW5kIG11bHRpcGxlIHZob3N0IGRyaXZlcnMgKG5ldCwgc2NzaSwgdmRwYSwgdnNvY2spLCBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9jdGxzIGFuZCBmaWxlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVlNPQ0tcIixcbiAgICBcIlZIT1NUX05FVFwiLFxuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIkVWRU5URkRcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlRBUkdFVF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfZGV2X2NsZWFudXBcIixcbiAgICBcInZob3N0X2Rldl9yZXNldF9vd25lclwiLFxuICAgIFwidmhvc3RfdnNvY2tfZGV2X2lvY3RsXCIsXG4gICAgXCJ2aG9zdF9uZXRfaW9jdGxcIixcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcInZob3N0X3Njc2lfaW9jdGxcIixcbiAgICBcInZob3N0X3Zzb2NrX2Rldl9yZWxlYXNlXCIsXG4gICAgXCJ2aG9zdF9uZXRfcmVsZWFzZVwiLFxuICAgIFwidmhvc3Rfc2NzaV9yZWxlYXNlXCIsXG4gICAgXCJ2aG9zdF92ZHBhX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3Qgc3Vic3lzdGVtIHRvIHN5bmNocm9uaXplIFJDVSByZWFkZXJzIGR1cmluZyBWSE9TVF9SRVNFVF9PV05FUiBhbmQgZGV2aWNlIGNsZWFudXAuIEl0IGludHJvZHVjZXMgYSBgc3luY2AgcGFyYW1ldGVyIHRvIGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIHRvIHdhaXQgZm9yIGxvY2tsZXNzIHdvcmtlcnMgdG8gZmluaXNoLiBJdCBhbHNvIGFkZHMgYSBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGZ1bmN0aW9uIHRvIGhhbmRsZSBWSE9TVF9SRVNFVF9PV05FUiBmb3IgdnNvY2ssIGFuZCBtb2RpZmllcyB2c29jayBzdGFydC9zdG9wIGxvZ2ljIHRvIGhhbmRsZSBiYWNrZW5kcyBjb3JyZWN0bHkgYWNyb3NzIHJlc2V0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSB2aG9zdCBsb2dpYyBhbmQgbXVsdGlwbGUgdmhvc3QgZHJpdmVycyAobmV0LCBzY3NpLCB2ZHBhLCB2c29jayksIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb2N0bHMgYW5kIGZpbGUgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5wjl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 16:44:39 +0000 UTC FinishedAt: 2026-07-25 17:06:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VSOCK", "VHOST_NET", "VHOST_SCSI", "VHOST_VDPA", "VSOCKETS", "EVENTFD", "VDPA", "TARGET_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VSOCK", "VHOST_NET", "VHOST_SCSI", "VHOST_VDPA", "VSOCKETS", "EVENTFD", "VDPA", "TARGET_CORE" ], "series_id": "0fcfaaad-c0d1-430c-b5fa-83085ed06bf5" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_dev_cleanup", "vhost_dev_reset_owner", "vhost_vsock_dev_ioctl", "vhost_net_ioctl", "vhost_vdpa_unlocked_ioctl", "vhost_scsi_ioctl", "vhost_vsock_dev_release", "vhost_net_release", "vhost_scsi_release", "vhost_vdpa_release" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDssCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7LAogICAgJiMzNDtWSE9TVF9TQ1NJJiMzNDssCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7RVZFTlRGRCYjMzQ7LAogICAgJiMzNDtWRFBBJiMzNDssCiAgICAmIzM0O1RBUkdFVF9DT1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfZGV2X2NsZWFudXAmIzM0OywKICAgICYjMzQ7dmhvc3RfZGV2X3Jlc2V0X293bmVyJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX2Rldl9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF9uZXRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX2Rldl9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IHN1YnN5c3RlbSB0byBzeW5jaHJvbml6ZSBSQ1UgcmVhZGVycyBkdXJpbmcgVkhPU1RfUkVTRVRfT1dORVIgYW5kIGRldmljZSBjbGVhbnVwLiBJdCBpbnRyb2R1Y2VzIGEgYHN5bmNgIHBhcmFtZXRlciB0byBgdmhvc3RfZGV2X2NsZWFudXBgIGFuZCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCB0byB3YWl0IGZvciBsb2NrbGVzcyB3b3JrZXJzIHRvIGZpbmlzaC4gSXQgYWxzbyBhZGRzIGEgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBmdW5jdGlvbiB0byBoYW5kbGUgVkhPU1RfUkVTRVRfT1dORVIgZm9yIHZzb2NrLCBhbmQgbW9kaWZpZXMgdnNvY2sgc3RhcnQvc3RvcCBsb2dpYyB0byBoYW5kbGUgYmFja2VuZHMgY29ycmVjdGx5IGFjcm9zcyByZXNldHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgdmhvc3QgbG9naWMgYW5kIG11bHRpcGxlIHZob3N0IGRyaXZlcnMgKG5ldCwgc2NzaSwgdmRwYSwgdnNvY2spLCBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9jdGxzIGFuZCBmaWxlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlN2U2MDMwMjFiNjdiZGNhZThhNGZkYTdjZDQ2MDk3ODM3ZDZlNzM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTc6MDM6NTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbmluZGV4IDNlNzJiOWM2YWYwY2E0Li5mZDA4OTQxMmMwMjA5MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbkBAIC0xNDUyLDcgJiM0MzsxNDUyLDcgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbiBcdHZob3N0X25ldF9zdG9wKG4sIFx1MDAyNnR4X3NvY2ssIFx1MDAyNnJ4X3NvY2spO1xuIFx0dmhvc3RfbmV0X2ZsdXNoKG4pO1xuIFx0dmhvc3RfZGV2X3N0b3AoXHUwMDI2bi1cdTAwM2VkZXYpO1xuLVx0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2bi1cdTAwM2VkZXYpO1xuJiM0MztcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNm4tXHUwMDNlZGV2LCBmYWxzZSk7XG4gXHR2aG9zdF9uZXRfdnFfcmVzZXQobik7XG4gXHRpZiAodHhfc29jaylcbiBcdFx0c29ja2ZkX3B1dCh0eF9zb2NrKTtcbkBAIC0xNjYxLDcgJiM0MzsxNjYxLDcgQEAgc3RhdGljIGxvbmcgdmhvc3RfbmV0X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF9uZXQgKm4pXG4gXHR2aG9zdF9uZXRfc3RvcChuLCBcdTAwMjZ0eF9zb2NrLCBcdTAwMjZyeF9zb2NrKTtcbiBcdHZob3N0X25ldF9mbHVzaChuKTtcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNm4tXHUwMDNlZGV2KTtcbi1cdHZob3N0X2Rldl9yZXNldF9vd25lcihcdTAwMjZuLVx1MDAzZWRldiwgdW1lbSk7XG4mIzQzO1x0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFx1MDAyNm4tXHUwMDNlZGV2LCB1bWVtLCBmYWxzZSk7XG4gXHR2aG9zdF9uZXRfdnFfcmVzZXQobik7XG4gZG9uZTpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuLVx1MDAzZWRldi5tdXRleCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuaW5kZXggOWExMjUzYjlkOGM1MGUuLmI2MDAyYjY0Y2Y0Mjg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtMjM1MCw3ICYjNDM7MjM1MCw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzLVx1MDAzZWRldi5tdXRleCk7XG4gXHR2aG9zdF9zY3NpX2NsZWFyX2VuZHBvaW50KHZzLCBcdTAwMjZ0KTtcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNnZzLVx1MDAzZWRldik7XG4tXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZ2cy1cdTAwM2VkZXYpO1xuJiM0MztcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNnZzLVx1MDAzZWRldiwgZmFsc2UpO1xuIFx0a2ZyZWUodnMtXHUwMDNlZGV2LnZxcyk7XG4gXHRrZnJlZSh2cy1cdTAwM2V2cXMpO1xuIFx0a2ZyZWUodnMtXHUwMDNlb2xkX2luZmxpZ2h0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Rlc3QuYyBiL2RyaXZlcnMvdmhvc3QvdGVzdC5jXG5pbmRleCAyNDUxNGM4ZmRlZTQ5NC4uODRlZDllYTgxMjE5ZDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC90ZXN0LmNcbkBAIC0xNjMsNyAmIzQzOzE2Myw3IEBAIHN0YXRpYyBpbnQgdmhvc3RfdGVzdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0dmhvc3RfdGVzdF9zdG9wKG4sIFx1MDAyNnByaXZhdGUpO1xuIFx0dmhvc3RfdGVzdF9mbHVzaChuKTtcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNm4tXHUwMDNlZGV2KTtcbi1cdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNm4tXHUwMDNlZGV2KTtcbiYjNDM7XHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZuLVx1MDAzZWRldiwgZmFsc2UpO1xuIFx0a2ZyZWUobi1cdTAwM2VkZXYudnFzKTtcbiBcdGtmcmVlKG4pO1xuIFx0cmV0dXJuIDA7XG5AQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCBzdGF0aWMgbG9uZyB2aG9zdF90ZXN0X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxuIFx0dmhvc3RfdGVzdF9zdG9wKG4sIFx1MDAyNnByaXYpO1xuIFx0dmhvc3RfdGVzdF9mbHVzaChuKTtcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNm4tXHUwMDNlZGV2KTtcbi1cdHZob3N0X2Rldl9yZXNldF9vd25lcihcdTAwMjZuLVx1MDAzZWRldiwgdW1lbSk7XG4mIzQzO1x0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFx1MDAyNm4tXHUwMDNlZGV2LCB1bWVtLCBmYWxzZSk7XG4gZG9uZTpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZuLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jIGIvZHJpdmVycy92aG9zdC92ZHBhLmNcbmluZGV4IGFjNTUyNzVmYTBkMGFlLi40MjdjNGEzNGRiMmM0ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTg5OCw3ICYjNDM7ODk4LDcgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4gXHRjYXNlIFZIT1NUX1NFVF9PV05FUjpcbiBcdFx0ciA9IHZob3N0X3ZkcGFfYmluZF9tbSh2KTtcbiBcdFx0aWYgKHIpXG4tXHRcdFx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKGQsIE5VTEwpO1xuJiM0MztcdFx0XHR2aG9zdF9kZXZfcmVzZXRfb3duZXIoZCwgTlVMTCwgZmFsc2UpO1xuIFx0XHRicmVhaztcbiBcdH1cbiBvdXQ6XG5AQCAtMTM5Niw3ICYjNDM7MTM5Niw3IEBAIHN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfY2xlYW51cChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcbiBcdH1cbiBcbiBcdHZob3N0X3ZkcGFfZnJlZV9kb21haW4odik7XG4tXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZ2LVx1MDAzZXZkZXYpO1xuJiM0MztcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNnYtXHUwMDNldmRldiwgZmFsc2UpO1xuIFx0a2ZyZWUodi1cdTAwM2V2ZGV2LnZxcyk7XG4gXHR2LVx1MDAzZXZkZXYudnFzID0gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXG5pbmRleCA0YzUyNWIzZTE2ZWFkOC4uYjE4NDI5YjE1ZDMyMmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuQEAgLTcxOSw3ICYjNDM7NzE5LDcgQEAgc3RhdGljIHZvaWQgdmhvc3Rfd29ya2VyX2Rlc3Ryb3koc3RydWN0IHZob3N0X2RldiAqZGV2LFxuIFx0a2ZyZWUod29ya2VyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdmhvc3Rfd29ya2Vyc19mcmVlKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3Rfd29ya2Vyc19mcmVlKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF93b3JrZXIgKndvcmtlcjtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbkBAIC03MjksNiAmIzQzOzcyOSwyMSBAQCBzdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJzX2ZyZWUoc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZW52cXM7IGkmIzQzOyYjNDM7KVxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZXZxc1tpXS1cdTAwM2V3b3JrZXIsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoaXMgcGF0aCBjYW4gYmUgcmVhY2hlZCBieSBsb2NrbGVzcyB3b3JrIHF1ZXVlcnMuICBJbiB0aGlzIGNhc2VcbiYjNDM7XHQgKiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgcmVhZHMgdnEtXHUwMDNld29ya2VyIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc28gYVxuJiM0MztcdCAqIFJDVSByZWFkZXIgdGhhdCBmZXRjaGVkIGEgd29ya2VyIGJlZm9yZSB3ZSBjbGVhcmVkIHRoZSBwb2ludGVycyBhYm92ZVxuJiM0MztcdCAqIG1heSBzdGlsbCBiZSBxdWV1ZWluZyB3b3JrIG9uIGl0LiAgV2FpdCBmb3IgdGhvc2UgcmVhZGVycyB0byBmaW5pc2gsXG4mIzQzO1x0ICogdGhlbiBmbHVzaCBzbyBhbnkgd29yayB0aGV5IHF1ZXVlZCBydW5zIChjbGVhcmluZyBWSE9TVF9XT1JLX1FVRVVFRClcbiYjNDM7XHQgKiBiZWZvcmUgdGhlIHdvcmtlcnMgYXJlIGZyZWVkLiAgTm90YWJseSwgdGhhdCBpcyB0aGUgY2FzZSBmb3IgdGhlXG4mIzQzO1x0ICogdnNvY2sgUkVTRVRfT1dORVIgcGF0aC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3luYykge1xuJiM0MztcdFx0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0XHR2aG9zdF9kZXZfZmx1c2goZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LypcbiBcdCAqIEZyZWUgdGhlIGRlZmF1bHQgd29ya2VyIHdlIGNyZWF0ZWQgYW5kIGNsZWFudXAgd29ya2VycyB1c2Vyc3BhY2VcbiBcdCAqIGNyZWF0ZWQgYnV0IGNvdWxkbiYjMzk7dCBjbGVhbiB1cCAoaXQgZm9yZ290IG9yIGNyYXNoZWQpLlxuQEAgLTExNDgsMTEgJiM0MzsxMTYzLDEyIEBAIHN0cnVjdCB2aG9zdF9pb3RsYiAqdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUodm9pZClcbiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSk7XG4gXG4gLyogQ2FsbGVyIHNob3VsZCBoYXZlIGRldmljZSBtdXRleCAqL1xuLXZvaWQgdmhvc3RfZGV2X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IHZob3N0X2lvdGxiICp1bWVtKVxuJiM0Mzt2b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbSxcbiYjNDM7XHRcdFx0ICAgYm9vbCBzeW5jKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0dmhvc3RfZGV2X2NsZWFudXAoZGV2KTtcbiYjNDM7XHR2aG9zdF9kZXZfY2xlYW51cChkZXYsIHN5bmMpO1xuIFxuIFx0ZGV2LVx1MDAzZWZvcmtfb3duZXIgPSBmb3JrX2Zyb21fb3duZXJfZGVmYXVsdDtcbiBcdGRldi1cdTAwM2V1bWVtID0gdW1lbTtcbkBAIC0xMTk3LDcgJiM0MzsxMjEzLDcgQEAgdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9jbGVhcl9tc2cpO1xuIFxuLXZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqZGV2KVxuJiM0Mzt2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKVxuIHtcbiBcdGludCBpO1xuIFxuQEAgLTEyMjEsNyAmIzQzOzEyMzcsNyBAQCB2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbiBcdGRldi1cdTAwM2Vpb3RsYiA9IE5VTEw7XG4gXHR2aG9zdF9jbGVhcl9tc2coZGV2KTtcbiBcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFx1MDAyNmRldi1cdTAwM2V3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pO1xuLVx0dmhvc3Rfd29ya2Vyc19mcmVlKGRldik7XG4mIzQzO1x0dmhvc3Rfd29ya2Vyc19mcmVlKGRldiwgc3luYyk7XG4gXHR2aG9zdF9kZXRhY2hfbW0oZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X2NsZWFudXApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaCBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxuaW5kZXggMDE5MmFkZTZlNzQ5MTAuLjI5ZmIxZjUxMGEzNGRjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmhcbkBAIC0yMTYsOCAmIzQzOzIxNiw5IEBAIGxvbmcgdmhvc3RfZGV2X3NldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpO1xuIGJvb2wgdmhvc3RfZGV2X2hhc19vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpO1xuIGxvbmcgdmhvc3RfZGV2X2NoZWNrX293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKik7XG4gc3RydWN0IHZob3N0X2lvdGxiICp2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSh2b2lkKTtcbi12b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGIpO1xuLXZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqKTtcbiYjNDM7dm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiLFxuJiM0MztcdFx0XHQgICBib29sIHN5bmMpO1xuJiM0Mzt2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKTtcbiB2b2lkIHZob3N0X2Rldl9zdG9wKHN0cnVjdCB2aG9zdF9kZXYgKik7XG4gbG9uZyB2aG9zdF9kZXZfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdwKTtcbiBsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdnNvY2suYyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuaW5kZXggOWFhYWI2YmI4MDYxYzEuLjkwNmNlYzdiNWFmZDkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbkBAIC02MSw2ICYjNDM7NjEsNyBAQCBzdHJ1Y3Qgdmhvc3RfdnNvY2sge1xuIFxuIFx0dTMyIGd1ZXN0X2NpZDtcbiBcdGJvb2wgc2VxcGFja2V0X2FsbG93O1xuJiM0MztcdGJvb2wgZXZlcl9zdGFydGVkOyAvKiBzZXQgb24gZmlyc3QgU0VUX1JVTk5JTkcoMSk7IG5ldmVyIGNsZWFyZWQgKi9cbiB9O1xuIFxuIHN0YXRpYyB1MzIgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQodm9pZClcbkBAIC0zMDIsMTcgJiM0MzszMDMsMTIgQEAgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXG4tXHQvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24mIzM5O3QgZW5hYmxlZCB0aGUgUlggdnEgeWV0LiBRdWV1aW5nIHRoZSBwYWNrZXRcbi1cdCAqIGFuZCBtYWtpbmcgdGhlIGNhbGxlciB3YWl0IGlzIHBvaW50bGVzczogZXZlbiBpZiB0aGUgZ3Vlc3QgbWFuYWdlcyB0byBpbml0XG4tXHQgKiB3aXRoaW4gdGhlIHRpbWVvdXQsIGl0JiMzOTtsbCBpbW1lZGlhdGVseSByZXBseSB3aXRoIFJTVCwgYmVjYXVzZSB0aGVyZSYjMzk7cyBub1xuLVx0ICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0LlxuLVx0ICpcbi1cdCAqIHZob3N0X3ZxX2dldF9iYWNrZW5kKCkgd2l0aG91dCB2cS1cdTAwM2VtdXRleCBpcyBhY2NlcHRhYmxlIGhlcmU6IGxvY2tpbmdcbi1cdCAqIHRoZSBtdXRleCB3b3VsZCBiZSB0b28gZXhwZW5zaXZlIGluIHRoaXMgaG90IHBhdGgsIGFuZCB3ZSBhbHJlYWR5IGhhdmVcbi1cdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcbi1cdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cbiYjNDM7XHQvKiBGYXN0LWZhaWwgdW50aWwgdGhlIGd1ZXN0IGZpcnN0IGVuYWJsZXMgdGhlIGRldmljZSAoU0VUX1JVTk5JTkcoMSkpLlxuJiM0MztcdCAqIEJlZm9yZSB0aGF0IHRoZXJlIGlzIG5vIGxpc3RlbmVyLCBzbyBxdWV1aW5nIGlzIHBvaW50bGVzcy5cbiYjNDM7XHQgKiAmIzM5O2V2ZXJfc3RhcnRlZCYjMzk7IGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UmIzM5O3JlIHVwIHdlIGtlZXAgcXVldWluZ1xuJiM0MztcdCAqIGFjcm9zcyBsYXRlciBzdG9wIC8gQ1BSLXBhdXNlIHdpbmRvd3MuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseSghZGF0YV9yYWNlKHZob3N0X3ZxX2dldF9iYWNrZW5kKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF0pKSkpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkoIVJFQURfT05DRSh2c29jay1cdTAwM2VldmVyX3N0YXJ0ZWQpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiAtRUhPU1RVTlJFQUNIO1xuQEAgLTY0MCwxMSAmIzQzOzYzNiwyMyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0YXJ0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHR9XG4gXG4mIzQzO1x0LyogU2V0ICYjMzk7ZXZlcl9zdGFydGVkJiMzOTsgZmxhZyBvbiB0aGUgZmlyc3Qgc3RhcnQ7IG5ldmVyIGNsZWFyZWQsIHNvIHNlbmRfcGt0XG4mIzQzO1x0ICoga2VlcHMgcXVldWluZyAoaW5zdGVhZCBvZiBmYXN0LWZhaWxpbmcpIG9uIGxhdGVyIHN0b3AgLyBDUFIgcGF1c2VzLlxuJiM0MztcdCAqL1xuJiM0MztcdFdSSVRFX09OQ0UodnNvY2stXHUwMDNlZXZlcl9zdGFydGVkLCB0cnVlKTtcbiYjNDM7XG4gXHQvKiBTb21lIHBhY2tldHMgbWF5IGhhdmUgYmVlbiBxdWV1ZWQgYmVmb3JlIHRoZSBkZXZpY2Ugd2FzIHN0YXJ0ZWQsXG4gXHQgKiBsZXQmIzM5O3Mga2ljayB0aGUgc2VuZCB3b3JrZXIgdG8gc2VuZCB0aGVtLlxuIFx0ICovXG4gXHR2aG9zdF92cV93b3JrX3F1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF0sIFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3dvcmspO1xuIFxuJiM0MztcdC8qIFRoZSBndWVzdCBtYXkgaGF2ZSBhZGRlZCBUWCBidWZmZXJzIHdoaWxlIHRoZSBkZXZpY2Ugd2FzIHN0b3BwZWRcbiYjNDM7XHQgKiAoZS5nLiBhY3Jvc3MgVkhPU1RfUkVTRVRfT1dORVIpIGFuZCB0aGVpciBraWNrcyBnb3QgY29uc3VtZWQgYnlcbiYjNDM7XHQgKiB0aGUgTlVMTC1iYWNrZW5kIHdpbmRvdy4gIFJlLXNjYW4gdGhlIFRYIFZRLCBtaXJyb3JpbmcgdGhlIFJYXG4mIzQzO1x0ICogc2VuZC13b3JrZXIga2ljayBhYm92ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2aG9zdF9wb2xsX3F1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9UWF0ucG9sbCk7XG4mIzQzO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gMDtcbiBcbkBAIC02NjQsOSAmIzQzOzY3MiwyNCBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0YXJ0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuIHtcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcbiBcdHNpemVfdCBpO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXHUwMDNldnFzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW2ldO1xuJiM0MztcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdFx0dmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKVxuJiM0Mzt7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbkBAIC02NzcsMTQgJiM0Mzs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcbiBcdFx0XHRnb3RvIGVycjtcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXHUwMDNldnFzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbaV07XG4tXG4tXHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuLVx0XHR2aG9zdF92cV9zZXRfYmFja2VuZCh2cSwgTlVMTCk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4tXHR9XG4tXG4mIzQzO1x0dmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyh2c29jayk7XG4gZXJyOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTcyMCw2ICYjNDM7NzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcbiBcdHZzb2NrLVx1MDAzZWd1ZXN0X2NpZCA9IDA7IC8qIG5vIENJRCBhc3NpZ25lZCB5ZXQgKi9cbiBcdHZzb2NrLVx1MDAzZXNlcXBhY2tldF9hbGxvdyA9IGZhbHNlO1xuJiM0MztcdHZzb2NrLVx1MDAzZWV2ZXJfc3RhcnRlZCA9IGZhbHNlO1xuIFxuIFx0YXRvbWljX3NldChcdTAwMjZ2c29jay1cdTAwM2VxdWV1ZWRfcmVwbGllcywgMCk7XG4gXG5AQCAtODA3LDcgJiM0Mzs4MjQsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFxuIFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV9wdXJnZShcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF9xdWV1ZSk7XG4gXG4tXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZ2c29jay1cdTAwM2VkZXYpO1xuJiM0MztcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgZmFsc2UpO1xuIFx0cHV0X25ldF90cmFjayh2c29jay1cdTAwM2VuZXQsIFx1MDAyNnZzb2NrLVx1MDAzZW5zX3RyYWNrZXIpO1xuIFx0a2ZyZWUodnNvY2stXHUwMDNlZGV2LnZxcyk7XG4gXHR2aG9zdF92c29ja19mcmVlKHZzb2NrKTtcbkBAIC04ODYsNiAmIzQzOzkwMywzNiBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCB1NjQgZmVhdHVyZXMpXG4gXHRyZXR1cm4gLUVGQVVMVDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBsb25nIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW07XG4mIzQzO1x0bG9uZyBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbiYjNDM7XHRlcnIgPSB2aG9zdF9kZXZfY2hlY2tfb3duZXIoXHUwMDI2dnNvY2stXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBkb25lO1xuJiM0MztcdHVtZW0gPSB2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSgpO1xuJiM0MztcdGlmICghdW1lbSkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHR9XG4mIzQzO1x0dmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyh2c29jayk7XG4mIzQzO1x0dmhvc3RfdnNvY2tfZmx1c2godnNvY2spO1xuJiM0MztcdHZob3N0X2Rldl9zdG9wKFx1MDAyNnZzb2NrLVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogdnNvY2sga2VlcHMgdGhlIENJRCBoYXNoZWQgYWNyb3NzIFJFU0VUX09XTkVSLCBzbyBhIGxvY2tsZXNzIHNlbmRlclxuJiM0MztcdCAqIGNhbiBzdGlsbCByZWFjaCB0aGUgZGV2aWNlIHdoaWxlIGl0cyB3b3JrZXJzIGFyZSBmcmVlZC4gIFBhc3NcbiYjNDM7XHQgKiBzeW5jPXRydWUgc28gdmhvc3Rfd29ya2Vyc19mcmVlKCkgZmVuY2VzIFJDVSByZWFkZXJzIGFuZCBmbHVzaGVzXG4mIzQzO1x0ICogYmVmb3JlIGZyZWVpbmcgdGhlbS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2aG9zdF9kZXZfcmVzZXRfb3duZXIoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB1bWVtLCB0cnVlKTtcbiYjNDM7ZG9uZTpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG5AQCAtOTI5LDYgJiM0Mzs5NzYsOCBAQCBzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbiBcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHRcdHZob3N0X3NldF9iYWNrZW5kX2ZlYXR1cmVzKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgZmVhdHVyZXMpO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRjYXNlIFZIT1NUX1JFU0VUX09XTkVSOlxuJiM0MztcdFx0cmV0dXJuIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHZzb2NrKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbiBcdFx0ciA9IHZob3N0X2Rldl9pb2N0bChcdTAwMjZ2c29jay1cdTAwM2VkZXYsIGlvY3RsLCBhcmdwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VkhPU1RfTkVUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9kZXZfY2xlYW51cCYjMzQ7LAogICAgJiMzNDt2aG9zdF9kZXZfcmVzZXRfb3duZXImIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZGV2X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZGV2X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3ZkcGFfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3Qgc3Vic3lzdGVtIHRvIHN5bmNocm9uaXplIFJDVSByZWFkZXJzIGR1cmluZyBWSE9TVF9SRVNFVF9PV05FUiBhbmQgZGV2aWNlIGNsZWFudXAuIEl0IGludHJvZHVjZXMgYSBgc3luY2AgcGFyYW1ldGVyIHRvIGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIHRvIHdhaXQgZm9yIGxvY2tsZXNzIHdvcmtlcnMgdG8gZmluaXNoLiBJdCBhbHNvIGFkZHMgYSBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGZ1bmN0aW9uIHRvIGhhbmRsZSBWSE9TVF9SRVNFVF9PV05FUiBmb3IgdnNvY2ssIGFuZCBtb2RpZmllcyB2c29jayBzdGFydC9zdG9wIGxvZ2ljIHRvIGhhbmRsZSBiYWNrZW5kcyBjb3JyZWN0bHkgYWNyb3NzIHJlc2V0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSB2aG9zdCBsb2dpYyBhbmQgbXVsdGlwbGUgdmhvc3QgZHJpdmVycyAobmV0LCBzY3NpLCB2ZHBhLCB2c29jayksIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb2N0bHMgYW5kIGZpbGUgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU3ZTYwMzAyMWI2N2JkY2FlOGE0ZmRhN2NkNDYwOTc4MzdkNmU3MzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAxNzowMzo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvbmV0LmMgYi9kcml2ZXJzL3Zob3N0L25ldC5jCmluZGV4IDNlNzJiOWM2YWYwY2E0Li5mZDA4OTQxMmMwMjA5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC0xNDUyLDcgJiM0MzsxNDUyLDcgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZikKIAl2aG9zdF9uZXRfc3RvcChuLCAmYW1wO3R4X3NvY2ssICZhbXA7cnhfc29jayk7CiAJdmhvc3RfbmV0X2ZsdXNoKG4pOwogCXZob3N0X2Rldl9zdG9wKCZhbXA7bi0mZ3Q7ZGV2KTsKLQl2aG9zdF9kZXZfY2xlYW51cCgmYW1wO24tJmd0O2Rldik7CiYjNDM7CXZob3N0X2Rldl9jbGVhbnVwKCZhbXA7bi0mZ3Q7ZGV2LCBmYWxzZSk7CiAJdmhvc3RfbmV0X3ZxX3Jlc2V0KG4pOwogCWlmICh0eF9zb2NrKQogCQlzb2NrZmRfcHV0KHR4X3NvY2spOwpAQCAtMTY2MSw3ICYjNDM7MTY2MSw3IEBAIHN0YXRpYyBsb25nIHZob3N0X25ldF9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfbmV0ICpuKQogCXZob3N0X25ldF9zdG9wKG4sICZhbXA7dHhfc29jaywgJmFtcDtyeF9zb2NrKTsKIAl2aG9zdF9uZXRfZmx1c2gobik7CiAJdmhvc3RfZGV2X3N0b3AoJmFtcDtuLSZndDtkZXYpOwotCXZob3N0X2Rldl9yZXNldF9vd25lcigmYW1wO24tJmd0O2RldiwgdW1lbSk7CiYjNDM7CXZob3N0X2Rldl9yZXNldF9vd25lcigmYW1wO24tJmd0O2RldiwgdW1lbSwgZmFsc2UpOwogCXZob3N0X25ldF92cV9yZXNldChuKTsKIGRvbmU6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7bi0mZ3Q7ZGV2Lm11dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmMKaW5kZXggOWExMjUzYjlkOGM1MGUuLmI2MDAyYjY0Y2Y0Mjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwpAQCAtMjM1MCw3ICYjNDM7MjM1MCw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKQogCW11dGV4X3VubG9jaygmYW1wO3ZzLSZndDtkZXYubXV0ZXgpOwogCXZob3N0X3Njc2lfY2xlYXJfZW5kcG9pbnQodnMsICZhbXA7dCk7CiAJdmhvc3RfZGV2X3N0b3AoJmFtcDt2cy0mZ3Q7ZGV2KTsKLQl2aG9zdF9kZXZfY2xlYW51cCgmYW1wO3ZzLSZndDtkZXYpOwomIzQzOwl2aG9zdF9kZXZfY2xlYW51cCgmYW1wO3ZzLSZndDtkZXYsIGZhbHNlKTsKIAlrZnJlZSh2cy0mZ3Q7ZGV2LnZxcyk7CiAJa2ZyZWUodnMtJmd0O3Zxcyk7CiAJa2ZyZWUodnMtJmd0O29sZF9pbmZsaWdodCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Rlc3QuYyBiL2RyaXZlcnMvdmhvc3QvdGVzdC5jCmluZGV4IDI0NTE0YzhmZGVlNDk0Li44NGVkOWVhODEyMTlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC90ZXN0LmMKQEAgLTE2Myw3ICYjNDM7MTYzLDcgQEAgc3RhdGljIGludCB2aG9zdF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpCiAJdmhvc3RfdGVzdF9zdG9wKG4sICZhbXA7cHJpdmF0ZSk7CiAJdmhvc3RfdGVzdF9mbHVzaChuKTsKIAl2aG9zdF9kZXZfc3RvcCgmYW1wO24tJmd0O2Rldik7Ci0Jdmhvc3RfZGV2X2NsZWFudXAoJmFtcDtuLSZndDtkZXYpOwomIzQzOwl2aG9zdF9kZXZfY2xlYW51cCgmYW1wO24tJmd0O2RldiwgZmFsc2UpOwogCWtmcmVlKG4tJmd0O2Rldi52cXMpOwogCWtmcmVlKG4pOwogCXJldHVybiAwOwpAQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCBzdGF0aWMgbG9uZyB2aG9zdF90ZXN0X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF90ZXN0ICpuKQogCXZob3N0X3Rlc3Rfc3RvcChuLCAmYW1wO3ByaXYpOwogCXZob3N0X3Rlc3RfZmx1c2gobik7CiAJdmhvc3RfZGV2X3N0b3AoJmFtcDtuLSZndDtkZXYpOwotCXZob3N0X2Rldl9yZXNldF9vd25lcigmYW1wO24tJmd0O2RldiwgdW1lbSk7CiYjNDM7CXZob3N0X2Rldl9yZXNldF9vd25lcigmYW1wO24tJmd0O2RldiwgdW1lbSwgZmFsc2UpOwogZG9uZToKIAltdXRleF91bmxvY2soJmFtcDtuLSZndDtkZXYubXV0ZXgpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jCmluZGV4IGFjNTUyNzVmYTBkMGFlLi40MjdjNGEzNGRiMmM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92ZHBhLmMKQEAgLTg5OCw3ICYjNDM7ODk4LDcgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJY2FzZSBWSE9TVF9TRVRfT1dORVI6CiAJCXIgPSB2aG9zdF92ZHBhX2JpbmRfbW0odik7CiAJCWlmIChyKQotCQkJdmhvc3RfZGV2X3Jlc2V0X293bmVyKGQsIE5VTEwpOwomIzQzOwkJCXZob3N0X2Rldl9yZXNldF9vd25lcihkLCBOVUxMLCBmYWxzZSk7CiAJCWJyZWFrOwogCX0KIG91dDoKQEAgLTEzOTYsNyAmIzQzOzEzOTYsNyBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NsZWFudXAoc3RydWN0IHZob3N0X3ZkcGEgKnYpCiAJfQogCiAJdmhvc3RfdmRwYV9mcmVlX2RvbWFpbih2KTsKLQl2aG9zdF9kZXZfY2xlYW51cCgmYW1wO3YtJmd0O3ZkZXYpOwomIzQzOwl2aG9zdF9kZXZfY2xlYW51cCgmYW1wO3YtJmd0O3ZkZXYsIGZhbHNlKTsKIAlrZnJlZSh2LSZndDt2ZGV2LnZxcyk7CiAJdi0mZ3Q7dmRldi52cXMgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jCmluZGV4IDRjNTI1YjNlMTZlYWQ4Li5iMTg0MjliMTVkMzIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwpAQCAtNzE5LDcgJiM0Mzs3MTksNyBAQCBzdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJfZGVzdHJveShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsCiAJa2ZyZWUod29ya2VyKTsKIH0KIAotc3RhdGljIHZvaWQgdmhvc3Rfd29ya2Vyc19mcmVlKHN0cnVjdCB2aG9zdF9kZXYgKmRldikKJiM0MztzdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJzX2ZyZWUoc3RydWN0IHZob3N0X2RldiAqZGV2LCBib29sIHN5bmMpCiB7CiAJc3RydWN0IHZob3N0X3dvcmtlciAqd29ya2VyOwogCXVuc2lnbmVkIGxvbmcgaTsKQEAgLTcyOSw2ICYjNDM7NzI5LDIxIEBAIHN0YXRpYyB2b2lkIHZob3N0X3dvcmtlcnNfZnJlZShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgZGV2LSZndDtudnFzOyBpJiM0MzsmIzQzOykKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0mZ3Q7dnFzW2ldLSZndDt3b3JrZXIsIE5VTEwpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIHBhdGggY2FuIGJlIHJlYWNoZWQgYnkgbG9ja2xlc3Mgd29yayBxdWV1ZXJzLiAgSW4gdGhpcyBjYXNlCiYjNDM7CSAqIHZob3N0X3ZxX3dvcmtfcXVldWUoKSByZWFkcyB2cS0mZ3Q7d29ya2VyIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc28gYQomIzQzOwkgKiBSQ1UgcmVhZGVyIHRoYXQgZmV0Y2hlZCBhIHdvcmtlciBiZWZvcmUgd2UgY2xlYXJlZCB0aGUgcG9pbnRlcnMgYWJvdmUKJiM0MzsJICogbWF5IHN0aWxsIGJlIHF1ZXVlaW5nIHdvcmsgb24gaXQuICBXYWl0IGZvciB0aG9zZSByZWFkZXJzIHRvIGZpbmlzaCwKJiM0MzsJICogdGhlbiBmbHVzaCBzbyBhbnkgd29yayB0aGV5IHF1ZXVlZCBydW5zIChjbGVhcmluZyBWSE9TVF9XT1JLX1FVRVVFRCkKJiM0MzsJICogYmVmb3JlIHRoZSB3b3JrZXJzIGFyZSBmcmVlZC4gIE5vdGFibHksIHRoYXQgaXMgdGhlIGNhc2UgZm9yIHRoZQomIzQzOwkgKiB2c29jayBSRVNFVF9PV05FUiBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKHN5bmMpIHsKJiM0MzsJCXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwkJdmhvc3RfZGV2X2ZsdXNoKGRldik7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIEZyZWUgdGhlIGRlZmF1bHQgd29ya2VyIHdlIGNyZWF0ZWQgYW5kIGNsZWFudXAgd29ya2VycyB1c2Vyc3BhY2UKIAkgKiBjcmVhdGVkIGJ1dCBjb3VsZG4mIzM5O3QgY2xlYW4gdXAgKGl0IGZvcmdvdCBvciBjcmFzaGVkKS4KQEAgLTExNDgsMTEgJiM0MzsxMTYzLDEyIEBAIHN0cnVjdCB2aG9zdF9pb3RsYiAqdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUodm9pZCkKIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Rldl9yZXNldF9vd25lcl9wcmVwYXJlKTsKIAogLyogQ2FsbGVyIHNob3VsZCBoYXZlIGRldmljZSBtdXRleCAqLwotdm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW0pCiYjNDM7dm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW0sCiYjNDM7CQkJICAgYm9vbCBzeW5jKQogewogCWludCBpOwogCi0Jdmhvc3RfZGV2X2NsZWFudXAoZGV2KTsKJiM0MzsJdmhvc3RfZGV2X2NsZWFudXAoZGV2LCBzeW5jKTsKIAogCWRldi0mZ3Q7Zm9ya19vd25lciA9IGZvcmtfZnJvbV9vd25lcl9kZWZhdWx0OwogCWRldi0mZ3Q7dW1lbSA9IHVtZW07CkBAIC0xMTk3LDcgJiM0MzsxMjEzLDcgQEAgdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2xlYXJfbXNnKTsKIAotdm9pZCB2aG9zdF9kZXZfY2xlYW51cChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCiYjNDM7dm9pZCB2aG9zdF9kZXZfY2xlYW51cChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIGJvb2wgc3luYykKIHsKIAlpbnQgaTsKIApAQCAtMTIyMSw3ICYjNDM7MTIzNyw3IEBAIHZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqZGV2KQogCWRldi0mZ3Q7aW90bGIgPSBOVUxMOwogCXZob3N0X2NsZWFyX21zZyhkZXYpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKCZhbXA7ZGV2LSZndDt3YWl0LCBFUE9MTElOIHwgRVBPTExSRE5PUk0pOwotCXZob3N0X3dvcmtlcnNfZnJlZShkZXYpOwomIzQzOwl2aG9zdF93b3JrZXJzX2ZyZWUoZGV2LCBzeW5jKTsKIAl2aG9zdF9kZXRhY2hfbW0oZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Rldl9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaCBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAppbmRleCAwMTkyYWRlNmU3NDkxMC4uMjlmYjFmNTEwYTM0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKQEAgLTIxNiw4ICYjNDM7MjE2LDkgQEAgbG9uZyB2aG9zdF9kZXZfc2V0X293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldik7CiBib29sIHZob3N0X2Rldl9oYXNfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2KTsKIGxvbmcgdmhvc3RfZGV2X2NoZWNrX293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKik7CiBzdHJ1Y3Qgdmhvc3RfaW90bGIgKnZob3N0X2Rldl9yZXNldF9vd25lcl9wcmVwYXJlKHZvaWQpOwotdm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiKTsKLXZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqKTsKJiM0Mzt2b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGIsCiYjNDM7CQkJICAgYm9vbCBzeW5jKTsKJiM0Mzt2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKTsKIHZvaWQgdmhvc3RfZGV2X3N0b3Aoc3RydWN0IHZob3N0X2RldiAqKTsKIGxvbmcgdmhvc3RfZGV2X2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKiwgdW5zaWduZWQgaW50IGlvY3RsLCB2b2lkIF9fdXNlciAqYXJncCk7CiBsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jCmluZGV4IDlhYWFiNmJiODA2MWMxLi45MDZjZWM3YjVhZmQ5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suYwpAQCAtNjEsNiAmIzQzOzYxLDcgQEAgc3RydWN0IHZob3N0X3Zzb2NrIHsKIAogCXUzMiBndWVzdF9jaWQ7CiAJYm9vbCBzZXFwYWNrZXRfYWxsb3c7CiYjNDM7CWJvb2wgZXZlcl9zdGFydGVkOyAvKiBzZXQgb24gZmlyc3QgU0VUX1JVTk5JTkcoMSk7IG5ldmVyIGNsZWFyZWQgKi8KIH07CiAKIHN0YXRpYyB1MzIgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQodm9pZCkKQEAgLTMwMiwxNyAmIzQzOzMwMywxMiBAQCB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KQogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24mIzM5O3QgZW5hYmxlZCB0aGUgUlggdnEgeWV0LiBRdWV1aW5nIHRoZSBwYWNrZXQKLQkgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdAotCSAqIHdpdGhpbiB0aGUgdGltZW91dCwgaXQmIzM5O2xsIGltbWVkaWF0ZWx5IHJlcGx5IHdpdGggUlNULCBiZWNhdXNlIHRoZXJlJiMzOTtzIG5vCi0JICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0LgotCSAqCi0JICogdmhvc3RfdnFfZ2V0X2JhY2tlbmQoKSB3aXRob3V0IHZxLSZndDttdXRleCBpcyBhY2NlcHRhYmxlIGhlcmU6IGxvY2tpbmcKLQkgKiB0aGUgbXV0ZXggd291bGQgYmUgdG9vIGV4cGVuc2l2ZSBpbiB0aGlzIGhvdCBwYXRoLCBhbmQgd2UgYWxyZWFkeSBoYXZlCi0JICogYWxsIHRoZSBvdXRjb21lcyBjb3ZlcmVkOiBpZiB0aGUgYmFja2VuZCBiZWNvbWVzIE5VTEwgcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLAotCSAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS4KJiM0MzsJLyogRmFzdC1mYWlsIHVudGlsIHRoZSBndWVzdCBmaXJzdCBlbmFibGVzIHRoZSBkZXZpY2UgKFNFVF9SVU5OSU5HKDEpKS4KJiM0MzsJICogQmVmb3JlIHRoYXQgdGhlcmUgaXMgbm8gbGlzdGVuZXIsIHNvIHF1ZXVpbmcgaXMgcG9pbnRsZXNzLgomIzQzOwkgKiAmIzM5O2V2ZXJfc3RhcnRlZCYjMzk7IGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UmIzM5O3JlIHVwIHdlIGtlZXAgcXVldWluZwomIzQzOwkgKiBhY3Jvc3MgbGF0ZXIgc3RvcCAvIENQUi1wYXVzZSB3aW5kb3dzLgogCSAqLwotCWlmICh1bmxpa2VseSghZGF0YV9yYWNlKHZob3N0X3ZxX2dldF9iYWNrZW5kKCZhbXA7dnNvY2stJmd0O3Zxc1tWU09DS19WUV9SWF0pKSkpIHsKJiM0MzsJaWYgKHVubGlrZWx5KCFSRUFEX09OQ0UodnNvY2stJmd0O2V2ZXJfc3RhcnRlZCkpKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CkBAIC02NDAsMTEgJiM0Mzs2MzYsMjMgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKQogCQltdXRleF91bmxvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwogCX0KIAomIzQzOwkvKiBTZXQgJiMzOTtldmVyX3N0YXJ0ZWQmIzM5OyBmbGFnIG9uIHRoZSBmaXJzdCBzdGFydDsgbmV2ZXIgY2xlYXJlZCwgc28gc2VuZF9wa3QKJiM0MzsJICoga2VlcHMgcXVldWluZyAoaW5zdGVhZCBvZiBmYXN0LWZhaWxpbmcpIG9uIGxhdGVyIHN0b3AgLyBDUFIgcGF1c2VzLgomIzQzOwkgKi8KJiM0MzsJV1JJVEVfT05DRSh2c29jay0mZ3Q7ZXZlcl9zdGFydGVkLCB0cnVlKTsKJiM0MzsKIAkvKiBTb21lIHBhY2tldHMgbWF5IGhhdmUgYmVlbiBxdWV1ZWQgYmVmb3JlIHRoZSBkZXZpY2Ugd2FzIHN0YXJ0ZWQsCiAJICogbGV0JiMzOTtzIGtpY2sgdGhlIHNlbmQgd29ya2VyIHRvIHNlbmQgdGhlbS4KIAkgKi8KIAl2aG9zdF92cV93b3JrX3F1ZXVlKCZhbXA7dnNvY2stJmd0O3Zxc1tWU09DS19WUV9SWF0sICZhbXA7dnNvY2stJmd0O3NlbmRfcGt0X3dvcmspOwogCiYjNDM7CS8qIFRoZSBndWVzdCBtYXkgaGF2ZSBhZGRlZCBUWCBidWZmZXJzIHdoaWxlIHRoZSBkZXZpY2Ugd2FzIHN0b3BwZWQKJiM0MzsJICogKGUuZy4gYWNyb3NzIFZIT1NUX1JFU0VUX09XTkVSKSBhbmQgdGhlaXIga2lja3MgZ290IGNvbnN1bWVkIGJ5CiYjNDM7CSAqIHRoZSBOVUxMLWJhY2tlbmQgd2luZG93LiAgUmUtc2NhbiB0aGUgVFggVlEsIG1pcnJvcmluZyB0aGUgUlgKJiM0MzsJICogc2VuZC13b3JrZXIga2ljayBhYm92ZS4KJiM0MzsJICovCiYjNDM7CXZob3N0X3BvbGxfcXVldWUoJmFtcDt2c29jay0mZ3Q7dnFzW1ZTT0NLX1ZRX1RYXS5wb2xsKTsKJiM0MzsKIAltdXRleF91bmxvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKIAlyZXR1cm4gMDsKIApAQCAtNjY0LDkgJiM0Mzs2NzIsMjQgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKQomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaykKIHsKJiM0MzsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7CiAJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodnNvY2stJmd0O3Zxcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl2cSA9ICZhbXA7dnNvY2stJmd0O3Zxc1tpXTsKJiM0MzsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwomIzQzOwkJdmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcikKJiM0Mzt7CiAJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZhbXA7dnNvY2stJmd0O2Rldi5tdXRleCk7CkBAIC02NzcsMTQgJiM0Mzs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcikKIAkJCWdvdG8gZXJyOwogCX0KIAotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHZzb2NrLSZndDt2cXMpOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZhbXA7dnNvY2stJmd0O3Zxc1tpXTsKLQotCQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKLQkJdmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpOwotCQltdXRleF91bmxvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwotCX0KLQomIzQzOwl2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzKHZzb2NrKTsKIGVycjoKIAltdXRleF91bmxvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtNzIwLDYgJiM0Mzs3MzYsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCiAJdnNvY2stJmd0O2d1ZXN0X2NpZCA9IDA7IC8qIG5vIENJRCBhc3NpZ25lZCB5ZXQgKi8KIAl2c29jay0mZ3Q7c2VxcGFja2V0X2FsbG93ID0gZmFsc2U7CiYjNDM7CXZzb2NrLSZndDtldmVyX3N0YXJ0ZWQgPSBmYWxzZTsKIAogCWF0b21pY19zZXQoJmFtcDt2c29jay0mZ3Q7cXVldWVkX3JlcGxpZXMsIDApOwogCkBAIC04MDcsNyAmIzQzOzgyNCw3IEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAKIAl2aXJ0aW9fdnNvY2tfc2tiX3F1ZXVlX3B1cmdlKCZhbXA7dnNvY2stJmd0O3NlbmRfcGt0X3F1ZXVlKTsKIAotCXZob3N0X2Rldl9jbGVhbnVwKCZhbXA7dnNvY2stJmd0O2Rldik7CiYjNDM7CXZob3N0X2Rldl9jbGVhbnVwKCZhbXA7dnNvY2stJmd0O2RldiwgZmFsc2UpOwogCXB1dF9uZXRfdHJhY2sodnNvY2stJmd0O25ldCwgJmFtcDt2c29jay0mZ3Q7bnNfdHJhY2tlcik7CiAJa2ZyZWUodnNvY2stJmd0O2Rldi52cXMpOwogCXZob3N0X3Zzb2NrX2ZyZWUodnNvY2spOwpAQCAtODg2LDYgJiM0Mzs5MDMsMzYgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgdTY0IGZlYXR1cmVzKQogCXJldHVybiAtRUZBVUxUOwogfQogCiYjNDM7c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbTsKJiM0MzsJbG9uZyBlcnI7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKJiM0MzsJZXJyID0gdmhvc3RfZGV2X2NoZWNrX293bmVyKCZhbXA7dnNvY2stJmd0O2Rldik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGRvbmU7CiYjNDM7CXVtZW0gPSB2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSgpOwomIzQzOwlpZiAoIXVtZW0pIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGRvbmU7CiYjNDM7CX0KJiM0MzsJdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyh2c29jayk7CiYjNDM7CXZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTsKJiM0MzsJdmhvc3RfZGV2X3N0b3AoJmFtcDt2c29jay0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogdnNvY2sga2VlcHMgdGhlIENJRCBoYXNoZWQgYWNyb3NzIFJFU0VUX09XTkVSLCBzbyBhIGxvY2tsZXNzIHNlbmRlcgomIzQzOwkgKiBjYW4gc3RpbGwgcmVhY2ggdGhlIGRldmljZSB3aGlsZSBpdHMgd29ya2VycyBhcmUgZnJlZWQuICBQYXNzCiYjNDM7CSAqIHN5bmM9dHJ1ZSBzbyB2aG9zdF93b3JrZXJzX2ZyZWUoKSBmZW5jZXMgUkNVIHJlYWRlcnMgYW5kIGZsdXNoZXMKJiM0MzsJICogYmVmb3JlIGZyZWVpbmcgdGhlbS4KJiM0MzsJICovCiYjNDM7CXZob3N0X2Rldl9yZXNldF9vd25lcigmYW1wO3Zzb2NrLSZndDtkZXYsIHVtZW0sIHRydWUpOwomIzQzO2RvbmU6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3Zzb2NrLSZndDtkZXYubXV0ZXgpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLAogCQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC05MjksNiAmIzQzOzk3Niw4IEBAIHN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLAogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQl2aG9zdF9zZXRfYmFja2VuZF9mZWF0dXJlcygmYW1wO3Zzb2NrLSZndDtkZXYsIGZlYXR1cmVzKTsKIAkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgVkhPU1RfUkVTRVRfT1dORVI6CiYjNDM7CQlyZXR1cm4gdmhvc3RfdnNvY2tfcmVzZXRfb3duZXIodnNvY2spOwogCWRlZmF1bHQ6CiAJCW11dGV4X2xvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKIAkJciA9IHZob3N0X2Rldl9pb2N0bCgmYW1wO3Zzb2NrLSZndDtkZXYsIGlvY3RsLCBhcmdwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogdmhvc3QgU3Vic3lzdGVtIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBzb21lIHRhcmdldGVkIGNoYW5nZXMgd2l0aGluIHRoZSB2aG9zdCBzdWJzeXN0ZW0uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0IHNlZW1zIGxpa2UgYSBmYWlybHkgZm9jdXNlZCBzZXQgb2YgdXBkYXRlcywgc28gbGV0JiMzOTtzIGRpZyBpbi4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3Qgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgYSBgYm9vbCBzeW5jYCBwYXJhbWV0ZXIgdG8gYHZob3N0X2Rldl9jbGVhbnVwYCBhbmQgYHZob3N0X2Rldl9yZXNldF9vd25lcmAsIGFuZCB0aGVuIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAsIHdoaWNoIGxldmVyYWdlcyBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCB3aXRoIGBzeW5jPXRydWVgLiBJdCYjMzk7cyBhbHNvIHRvdWNoaW5nIGB2aG9zdF92c29ja19zdGFydGAgYW5kIGB2aG9zdF92c29ja19zdG9wYCBhbmQgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAuCgpJIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2Ygdmhvc3QtcmVsYXRlZCBmaWxlczogYG5ldC5jYCwgYHNjc2kuY2AsIGB0ZXN0LmNgLCBgdmRwYS5jYCwgYHZob3N0LmNgLCBgdmhvc3QuaGAsIGFuZCBgdnNvY2suY2AuIFRoYXQmIzM5O3MgYSBnb29kIGJyZWFkdGggb2YgY292ZXJhZ2UsIHdoaWNoIHN1Z2dlc3RzIHRoZSBzY29wZSBpcyBwb3RlbnRpYWxseSBicm9hZGVyIHRoYW4ganVzdCBvbmUgc3BlY2lmaWMgYXJlYS4gTm93LCBpdCBkYXducyBvbiBtZSB3aGF0IGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgaXMgZG9pbmcuIFRoaXMgbmV3IGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGhhbmRsaW5nIHRoZSBgVkhPU1RfUkVTRVRfT1dORVJgIGlvY3RsIHNwZWNpZmljYWxseSBmb3IgdnNvY2suIEkgc2VlbSB0byByZWNhbGwgdGhhdCB0aGUgaW9jdGwgdXNlZCB0byBiZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IGB2aG9zdF9kZXZfaW9jdGxgLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQuLi4gWWVzLCBhIHF1aWNrIGxvb2sgYXQgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgdmVyaWZpZXMgdGhhdDogdGhlIGlvY3RsIGNhc2UgaGFzIGJlZW4gcmVwbGFjZWQuCgpPaCwgYW5kIHRoZXJlJiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIGluIGB2c29jay5jYC4gVGhhdCBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBzdWJ0bGUgbG9naWMgdXBkYXRlOiB0aGV5JiMzOTt2ZSByZXBsYWNlZCBhIGNoZWNrIHdpdGggYW4gYXRvbWljIGNoZWNrLiBJIHRoaW5rIEkgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZSAtIHRoaXMgKmlzKiByZWFjaGFibGUgd2l0aGluIGEgVk0uIFRoaXMgZGVmaW5pdGVseSBtYWtlcyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmcsIHNvIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLgoKT2theSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBoZXJlLiBJJiMzOTttIGZvY3VzaW5nIG9uOgoKKiAgIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAKKiAgIGB2aG9zdF92c29ja19zdGFydGAKKiAgIGB2aG9zdF92c29ja19zdG9wYAoqICAgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAKKiAgIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgCiogICBgdmhvc3RfZGV2X2NsZWFudXBgCiogICBgdmhvc3Rfd29ya2Vyc19mcmVlYAoKRmluYWxseSwgbGV0JiMzOTtzIHNlZSBhYm91dCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEJhc2VkIG9uIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYENPTkZJR19WSE9TVF9WU09DS2AsIGBDT05GSUdfVkhPU1RfTkVUYCwgYENPTkZJR19WSE9TVF9TQ1NJYCwgYW5kIGBDT05GSUdfVkhPU1RfVkRQQWAgYXJlIG5lZWRlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGJ5IGdyZXBwaW5nIEtjb25maWcgZm9yIGBWSE9TVF9WU09DS2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX1ZTT0NLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz00Nj1jb25maWcgVkhPU1RfU0NTSVxuLS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1Njpjb25maWcgVkhPU1RfVlNPQ0tcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01Ny1cdHRyaXN0YXRlIFwmIzM0O3Zob3N0IHZpcnRpby12c29jayBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTg2CgkJCQkJCQlvdXRwdXQ6IDY3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBWSE9TVF9WU09DSyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiB0aGUgYFZIT1NUX1ZTT0NLYCBsYW5kc2NhcGUuIEl0JiMzOTtzIHRvbyBlYXN5IHRvIGp1bXAgaW4gYW5kIGFzc3VtZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBjb3ZlcmVkLCBlc3BlY2lhbGx5IHdpdGggdGhlc2UgdmlydHVhbCBuZXR3b3JraW5nIHN0YWNrcy4gU28sIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgKnZlcmlmeSogdGhvc2UgZGVwZW5kZW5jaWVzLiYjMzQ7IFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBtZW50YWwgbm90ZTsgaXQmIzM5O3MgYSAqcHJvYWN0aXZlKiBzdGVwLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgb3Zlcmxvb2tpbmcgZXZlbiBhIHNlZW1pbmdseSBtaW5vciBkZXBlbmRlbmN5IGNhbiBsZWFkIHRvIGhvdXJzIG9mIGRlYnVnZ2luZyBsYXRlciBvbi4gVGhpcyBjaGVjayBzaG91bGQgZW5jb21wYXNzIHRoZSBrZXJuZWwgbW9kdWxlcywgdGhlIHVzZXJzcGFjZSBsaWJyYXJpZXMsIGV2ZW4gdGhlIGh5cGVydmlzb3Igc2lkZSBvZiB0aGluZ3MgaWYgdGhpcyBpcyByZWxldmFudCB0byB0aGUgc3lzdGVtIGNvbnRleHQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBidWlsZGluZyBibG9ja3MsIHRoZSBsYXllcnMgaW52b2x2ZWQsIGFuZCBwb3RlbnRpYWwgY29uZmxpY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9WU09DSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU2Olx0Y29uZmlnIFZIT1NUX1ZTT0NLXG4gIDU3Olx0XHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG4gIDU4Olx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG4gIDU5Olx0XHRzZWxlY3QgVkhPU1RcbiAgNjA6XHRcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4gIDYxOlx0XHRkZWZhdWx0IG5cbiAgNjI6XHRcdGhlbHBcbiAgNjM6XHRcdFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIHRoZSBob3N0IGtlcm5lbCB0byBwcm92aWRlIEFGX1ZTT0NLXG4gIDY0Olx0XHRzb2NrZXRzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggZ3Vlc3RzLiAgVGhlIGd1ZXN0cyBtdXN0IGhhdmUgdGhlXG4gIDY1Olx0XHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSB0ZWNobm9sb2dpZXM6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBWaXJ0dWFsaXphdGlvbiBJbmZyYXN0cnVjdHVyZSBDb21wb25lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb21wb25lbnRzOiBgVkhPU1RfVlNPQ0tgLCBgVlNPQ0tFVFNgLCBhbmQgYEVWRU5URkRgLiBJIGtub3cgdGhlbSwgYnV0IGxldCBtZSBxdWlja2x5IGpvZyBteSBtZW1vcnkgYW5kIHNlZSBob3cgdGhleSBhcmUgcmVsYXRlZC4gR2l2ZW4gdGhhdCBjb250ZXh0LCBsZXQmIzM5O3Mgbm93IGNvbnNpZGVyIHRoZSByb2xlIG9mIGBWSE9TVF9ORVRgIGluIHRoaXMgbGFuZHNjYXBlLiBUaGlzIGlzIGxpa2VseSByZWxhdGVkLCBhbmQgSSBuZWVkIHRvIHNvbGlkaWZ5IHRoZSBhcmNoaXRlY3R1cmUgSSYjMzk7bSBpbWFnaW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgVkhPU1RfSU9UTEJcbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XHRoZWxwXG4gICA1Olx0XHQgIEdlbmVyaWMgSU9UTEIgaW1wbGVtZW50YXRpb24gZm9yIHZob3N0IGFuZCB2cmluZ2guXG4gICA2Olx0XHQgIFRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGFueSBkcml2ZXIgd2hpY2ggbmVlZHMgdG8gc3VwcG9ydFxuICAgNzpcdFx0ICBhbiBJT01NVSBpbiBzb2Z0d2FyZS5cbiAgIDg6XHRcbiAgIDk6XHRjb25maWcgVkhPU1RfUklOR1xuICAxMDpcdFx0dHJpc3RhdGVcbiAgMTE6XHRcdHNlbGVjdCBWSE9TVF9JT1RMQlxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBpcyBzZWxlY3RlZCBieSBhbnkgZHJpdmVyIHdoaWNoIG5lZWRzIHRvIGFjY2Vzc1xuICAxNDpcdFx0ICB0aGUgaG9zdCBzaWRlIG9mIGEgdmlydGlvIHJpbmcuXG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIFZIT1NUX1RBU0tcbiAgMTc6XHRcdGJvb2xcbiAgMTg6XHRcdGRlZmF1bHQgblxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBWSE9TVFxuICAyMTpcdFx0dHJpc3RhdGVcbiAgMjI6XHRcdHNlbGVjdCBWSE9TVF9JT1RMQlxuICAyMzpcdFx0c2VsZWN0IFZIT1NUX1RBU0tcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYW55IGRyaXZlciB3aGljaCBuZWVkcyB0byBhY2Nlc3NcbiAgMjY6XHRcdCAgdGhlIGNvcmUgb2Ygdmhvc3QuXG4gIDI3Olx0XG4gIDI4Olx0bWVudWNvbmZpZyBWSE9TVF9NRU5VXG4gIDI5Olx0XHRib29sIFwmIzM0O1ZIT1NUIGRyaXZlcnNcJiMzNDtcbiAgMzA6XHRcdGRlZmF1bHQgeVxuICAzMTpcdFxuICAzMjpcdGlmIFZIT1NUX01FTlVcbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgVkhPU1RfTkVUXG4gIDM1Olx0XHR0cmlzdGF0ZSBcJiMzNDtIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFwmIzM0O1xuICAzNjpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IEVWRU5URkQgXHUwMDI2XHUwMDI2IChUVU4gfHwgIVRVTikgXHUwMDI2XHUwMDI2IChUQVAgfHwgIVRBUClcbiAgMzc6XHRcdHNlbGVjdCBWSE9TVFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXG4gIDQwOlx0XHQgIGd1ZXN0IG5ldHdvcmtpbmcgd2l0aCB2aXJ0aW9fbmV0LiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB2aXJ0aW9fbmV0XG4gIDQxOlx0XHQgIG1vZHVsZSBpdHNlbGYgd2hpY2ggbmVlZHMgdG8gYmUgbG9hZGVkIGluIGd1ZXN0IGtlcm5lbC5cbiAgNDI6XHRcbiAgNDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDQ0Olx0XHQgIGJlIGNhbGxlZCB2aG9zdF9uZXQuXG4gIDQ1Olx0XG4gIDQ2Olx0Y29uZmlnIFZIT1NUX1NDU0lcbiAgNDc6XHRcdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXHUwMDI2XHUwMDI2IEVWRU5URkRcbiAgNDk6XHRcdHNlbGVjdCBWSE9TVFxuICA1MDpcdFx0c2VsZWN0IFNHX1BPT0xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IFZIT1NUX1ZEUEEgQ2hlY2sqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgaW1wdWxzZSBoZXJlIGlzIHRvIHplcm8gaW4gb24gYFZIT1NUX1ZEUEFgLiBJdCYjMzk7cyBhIGtleSBhcmVhIHRvIGV4YW1pbmUsIGxpa2VseSByZWxhdGVkIHRvIHZpcnR1YWxpemVkIGRldmljZXMgYW5kIHRoZSB2RFBBIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgbGV0JiMzOTtzIGVzdGFibGlzaCBhIGJhc2VsaW5lOiB3aGF0JiMzOTtzIHByb21wdGluZyB0aGlzIGNoZWNrPyYjMzQ7IElzIGl0IHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLCBhIHN1c3BlY3RlZCBidWcsIGEgbmV3IGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgYSBzZWN1cml0eSBhdWRpdD8KClRoZSBwcmVzZW5jZSBvZiBgVkhPU1RfVkRQQWAgaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdmlydHVhbCBtYWNoaW5lIGVudmlyb25tZW50cyB1c2luZyB2RFBBIOKAkyBsaWtlbHkgaW4gYSBkYXRhIGNlbnRlciBvciBjbG91ZCBzZXR0aW5nLiBXZSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgdmhvc3QgZGV2aWNlIGlzIGNvbmZpZ3VyZWQsIHRoZSB2aXJ0aW8gdHJhbnNwb3J0IGFuZCB0aGUgb3ZlcmFsbCByZXNvdXJjZSBhbGxvY2F0aW9uLiBJcyB0aGVyZSBhIHNwZWNpZmljIHZpcnR1YWwgZnVuY3Rpb24gSSBzaG91bGQgYmUgbG9va2luZyBhdCBmaXJzdCwgb3Igc3BlY2lmaWMgZHJpdmVycyBiZWluZyBlbXBsb3llZD8gQXJlIHdlIHBvdGVudGlhbGx5IGJ1bXBpbmcgaW50byBhbiBpc3N1ZSB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGlvbj8gT3IgYW0gSSBzaW1wbHkgdmVyaWZ5aW5nIHRoYXQgdkRQQSBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgYWNjb3JkaW5nIHRvIGJlc3QgcHJhY3RpY2VzPwoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb250ZXh0OiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLCB0aGUgaHlwZXJ2aXNvciwgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGFuZCB0aGUgc3BlY2lmaWMgdmlydHVhbCBtYWNoaW5lcyBpbnZvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25zIHRvIGRldGVybWluZSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjY6XHRcbiAgNjc6XHRcdFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgNjg6XHRcdHZob3N0X3Zzb2NrLlxuICA2OTpcdFxuICA3MDpcdGNvbmZpZyBWSE9TVF9WRFBBXG4gIDcxOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFwmIzM0O1xuICA3MjpcdFx0ZGVwZW5kcyBvbiBFVkVOVEZEXG4gIDczOlx0XHRzZWxlY3QgVkhPU1RcbiAgNzQ6XHRcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcbiAgNzU6XHRcdGRlcGVuZHMgb24gVkRQQVxuICA3NjpcdFx0aGVscFxuICA3NzpcdFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXG4gIDc4Olx0XHQgIGd1ZXN0IHZpcnRpbyBkZXZpY2VzIHdpdGggdGhlIHZEUEEtYmFzZWQgYmFja2VuZHMuXG4gIDc5Olx0XG4gIDgwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgODE6XHRcdCAgd2lsbCBiZSBjYWxsZWQgdmhvc3RfdmRwYS5cbiAgODI6XHRcbiAgODM6XHRjb25maWcgVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWVxuICA4NDpcdFx0Ym9vbCBcJiMzNDtDcm9zcy1lbmRpYW4gc3VwcG9ydCBmb3Igdmhvc3RcJiMzNDtcbiAgODU6XHRcdGRlZmF1bHQgblxuICA4NjpcdFx0aGVscFxuICA4NzpcdFx0ICBUaGlzIG9wdGlvbiBhbGxvd3Mgdmhvc3QgdG8gc3VwcG9ydCBndWVzdHMgd2l0aCBhIGRpZmZlcmVudCBieXRlXG4gIDg4Olx0XHQgIG9yZGVyaW5nIGZyb20gaG9zdCB3aGlsZSB1c2luZyBsZWdhY3kgdmlydGlvLlxuICA4OTpcdFxuICA5MDpcdFx0ICBVc2Vyc3BhY2UgcHJvZ3JhbXMgY2FuIGNvbnRyb2wgdGhlIGZlYXR1cmUgdXNpbmcgdGhlXG4gIDkxOlx0XHQgIFZIT1NUX1NFVF9WUklOR19FTkRJQU4gYW5kIFZIT1NUX0dFVF9WUklOR19FTkRJQU4gaW9jdGxzLlxuICA5MjpcdFxuICA5MzpcdFx0ICBUaGlzIGlzIG9ubHkgdXNlZnVsIG9uIGEgZmV3IHBsYXRmb3JtcyAocHBjNjQgYW5kIGFybTY0KS4gU2luY2UgaXRcbiAgOTQ6XHRcdCAgYWRkcyBzb21lIG92ZXJoZWFkLCBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LlxuICA5NTpcdFxuICA5NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBcJiMzNDtOXCYjMzQ7LlxuICA5NzpcdFxuICA5ODpcdGNvbmZpZyBWSE9TVF9FTkFCTEVfRk9SS19PV05FUl9DT05UUk9MXG4gIDk5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBWSE9TVF9FTkFCTEVfRk9SS19PV05FUl9DT05UUk9MXCYjMzQ7XG4gMTAwOlx0XHRkZWZhdWx0IHlcbiAxMDE6XHRcdGhlbHBcbiAxMDI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0d28gSU9DVExzOiBWSE9TVF9TRVRfRk9SS19GUk9NX09XTkVSIGFuZFxuIDEwMzpcdFx0ICBWSE9TVF9HRVRfRk9SS19GUk9NX09XTkVSLiBUaGVzZSBhbGxvdyB1c2Vyc3BhY2UgYXBwbGljYXRpb25zXG4gMTA0Olx0XHQgIHRvIG1vZGlmeSB0aGUgdmhvc3Qgd29ya2VyIG1vZGUgZm9yIHZob3N0IGRldmljZXMuXG4gMTA1Olx0XG4gMTA2Olx0XHQgIEFsc28gZXhwb3NlIG1vZHVsZSBwYXJhbWV0ZXIgJiMzOTtmb3JrX2Zyb21fb3duZXJfZGVmYXVsdCYjMzk7IHRvIGFsbG93IHVzZXJzXG4gMTA3Olx0XHQgIHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBtb2RlIGZvciB2aG9zdCB3b3JrZXJzLlxuIDEwODpcdFxuIDEwOTpcdFx0ICBCeSBkZWZhdWx0LCBgVkhPU1RfRU5BQkxFX0ZPUktfT1dORVJfQ09OVFJPTGAgaXMgc2V0IHRvIGB5YCxcbiAxMTA6XHRcdCAgdXNlcnMgY2FuIGNoYW5nZSB0aGUgd29ya2VyIHRocmVhZCBtb2RlIGFzIG5lZWRlZC5cbiAxMTE6XHRcdCAgSWYgdGhpcyBjb25maWcgaXMgZGlzYWJsZWQgKG4pLHRoZSByZWxhdGVkIElPQ1RMcyBhbmQgcGFyYW1ldGVycyB3aWxsXG4gMTEyOlx0XHQgIGJlIHVuYXZhaWxhYmxlLlxuIDExMzpcdFxuIDExNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBcJiMzNDtZXCYjMzQ7LlxuIDExNTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM1NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZob3N0IFBhdGNoIGZvciBFbmhhbmNlZCBUZXN0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBzb21lIHByZXR0eSBrZXkgYXJlYXM6IGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgIOKAkyBzcGVjaWZpY2FsbHkgYHZob3N0X2Rldl9jbGVhbnVwYCBhbmQgYHZob3N0X2Rldl9yZXNldF9vd25lcmAg4oCTIGFuZCB0aGVuIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIHdpdGggYSBtb2RpZmljYXRpb24gdG8gYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYC4gVGhpcyBzY3JlYW1zIGBWSE9TVF9WU09DS2AgYXMgdGhlIHByaW1hcnkgZm9jdXMsIGJ1dCB0aGUgY2hhbmdlcyBpbiB0aGUgY29yZSB2aG9zdCBmaWxlIG1lYW4gd2UgYWxzbyBoYXZlIHRvIGNvbnNpZGVyIGBWSE9TVF9ORVRgLCBgVkhPU1RfU0NTSWAsIGFuZCBgVkhPU1RfVkRQQWAuIFRoZXNlIGFsbCBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSBFbmFibGVDb25maWdzLiBJJiMzOTtsbCBhbHNvIGFkZCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAgYXMgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBzZWxlY3Rpbmcgc29tZSBhcHByb3ByaWF0ZSBmb2N1cyBzeW1ib2xzIGZvciB0ZXN0aW5nLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGB2aG9zdF92c29ja19yZXNldF9vd25lcmAsIGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19zdG9wYCwgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLCBgdmhvc3RfZGV2X2NsZWFudXBgLCBgdmhvc3Rfd29ya2Vyc19mcmVlYCwgYW5kIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRoaW5rIGNyaXRpY2FsbHkgYWJvdXQgdGhlc2UuIEZpcnN0LCBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YC4gSG1tLCBpdCYjMzk7cyBhbiBBUEkgZW50cnkgcG9pbnQgZm9yIHZzb2NrIHRyYW5zcG9ydCwgc28gaW5pdGlhbGx5IGl0IGxvb2tzIGdvb2QuIEJ1dCB3YWl0LCBpdCYjMzk7cyBhIGhvdC1wYXRoIGZ1bmN0aW9uISBBbmQgSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdCBkaXN0cmlidXRpb24gZnJvbSBiZWluZyBza2V3ZWQuIFNjcmF0Y2ggdGhhdC4KClNvLCBJJiMzOTttIGxpa2luZyBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGFzIGEgc29saWQgY2FuZGlkYXRlLiBBbHNvLCBgdmhvc3RfdnNvY2tfc3RhcnRgIGFuZCBgdmhvc3RfdnNvY2tfc3RvcGAgYXJlIHByb21pc2luZy4gVGhlbiB0aGUgY29yZSB2aG9zdCBmdW5jdGlvbnMsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIGFuZCBgdmhvc3RfZGV2X2NsZWFudXBgLCBhcmUgZGVmaW5pdGVseSB3b3J0aCBjb25zaWRlcmluZy4gTm93LCBgdmhvc3Rfd29ya2Vyc19mcmVlYCBpcyBzdGF0aWMuLi4gdGhhdCYjMzk7cyBhIG5vLWdvLiBObyBuZWVkIHRvIGdvIHRoZXJlLgoKT2theSwgbGV0JiMzOTtzIGp1c3QgZG91YmxlLWNoZWNrLCBmb3IgZ29vZCBtZWFzdXJlLCB0aGF0IGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgYW5kIGB2aG9zdF92c29ja19zdGFydGAgYXJlIHRoZSByaWdodCBjaG9pY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92c29ja19yZXNldF9vd25lciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9ODcxPXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIHU2NCBmZWF0dXJlcylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTA1LVxuZHJpdmVycy92aG9zdC92c29jay5jOjkwNjpzdGF0aWMgbG9uZyB2aG9zdF92c29ja19yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuZHJpdmVycy92aG9zdC92c29jay5jLTkwNy17XG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTkzNj1zdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTc5LVx0Y2FzZSBWSE9TVF9SRVNFVF9PV05FUjpcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5ODA6XHRcdHJldHVybiB2aG9zdF92c29ja19yZXNldF9vd25lcih2c29jayk7XG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTgxLVx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqRXhhbWluaW5nIHZob3N0LXZzb2NrIEFQSSBEZXNpZ24qKgoKT2theSwgc28gYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSByZWNhbGwgYSBwcmVmZXJlbmNlIGZvciBtb3JlIGZsZXhpYmxlIEFQSSBkZXNpZ24sIGFuZCBhIHN0eWxlIGd1aWRlIGl0ZW0gb2Z0ZW4gc3VyZmFjZXMgaW4gbXkgbWVtb3J5LCBzcGVjaWZpY2FsbHk6ICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIHdheSBJIHVzdWFsbHkgYXBwcm9hY2ggdGhlc2UgdGhpbmdzLiBJIHdvbmRlciBpZiB0aGVyZSYjMzk7cyBhIGdvb2QgcmVhc29uIGZvciB0aGlzLgoKV2FpdCBhIG1pbnV0ZSwgSSBqdXN0IHJlYWxpemVkIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIGlzICphbHNvKiBzdGF0aWMuIFRoaXMgaXMgYmVjb21pbmcgYSBwYXR0ZXJuLiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgYW5kIHNlZSBpZiB0aGUgcmVhc29uaW5nIGJlaGluZCBpdHMgc3RhdGljIG5hdHVyZSBiZWNvbWVzIGFwcGFyZW50LCBhcyBpdCBjb3VsZCBpbmZsdWVuY2UgdGhlIGRlc2lnbiBvZiB0aGUgb3RoZXIgc3RhdGljIGZ1bmN0aW9ucyB0b28uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGVyZS4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBpbnRlcm5hbCByZWFzb24gZm9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Zzb2NrX2Rldl9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9OTA2PXN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTkzNS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5MzY6c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTM3LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTAyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF92c29ja19mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDI1LVx0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMjY6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF92c29ja19kZXZfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyNy1cdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTUzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdmhvc3RfdnNvY2tfZGV2X2lvY3RsIEFQSSBFbnRyeXBvaW50KioKCk9rYXksIHNvIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIGlzIHRoZSBgdW5sb2NrZWRfaW9jdGxgIGhhbmRsZXIsIHdoaWNoIG1ha2VzIGl0IGEgY3J1Y2lhbCBBUEkgZW50cnlwb2ludCwgZXZlbiBpZiBpdCYjMzk7cyB0ZWNobmljYWxseSBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCBhIGNvbmNlcm4gYXJpc2VzOiBTeXprYWxsZXIsIGluIG15IGV4cGVyaWVuY2UsIHN0cnVnZ2xlcyB0byBkaXJlY3RseSByZXNvbHZlIHN0YXRpYyBmdW5jdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBhcmUgaW5saW5lZC4gQnV0LCB0aGUgZ29vZCBuZXdzIGlzIHRoYXQgYHVubG9ja2VkX2lvY3RsYCBpc24mIzM5O3QgaW5saW5lZCwgc28gdGhhdCBzaG91bGRuJiMzOTt0IGJlIGEgcHJvYmxlbSBpbiB0aGlzIGluc3RhbmNlLgoKSG93ZXZlciwgSSBub3RlIHRoYXQgYm90aCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCBhbmQgYHZob3N0X2Rldl9jbGVhbnVwYCBhcmUgZXhwb3J0ZWQgc3ltYm9scy4gVGhpcyBpcyBpbnRyaWd1aW5nLiBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfZGV2X3Jlc2V0X293bmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92aG9zdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3Qvdmhvc3QuYz0xMTUzPXN0YXRpYyBzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiX2FsbG9jKHZvaWQpXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTExNTgtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTE1OTpzdHJ1Y3Qgdmhvc3RfaW90bGIgKnZob3N0X2Rldl9yZXNldF9vd25lcl9wcmVwYXJlKHZvaWQpXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE2MC17XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTExNjItfVxuZHJpdmVycy92aG9zdC92aG9zdC5jOjExNjM6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTExNjQtXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE2NS0vKiBDYWxsZXIgc2hvdWxkIGhhdmUgZGV2aWNlIG11dGV4ICovXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTE2Njp2b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbSxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMTY3LVx0XHRcdCAgIGJvb2wgc3luYylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE4MC19XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTE4MTpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXZfcmVzZXRfb3duZXIpO1xuZHJpdmVycy92aG9zdC92aG9zdC5jLTExODItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODEzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFkZGluZyBLZXkgVmhvc3QgdnNvY2sgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZXhwb3J0ZWQgc3ltYm9scywgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYHZob3N0X2Rldl9yZXNldF9vd25lcmAgYW5kIGB2aG9zdF9kZXZfY2xlYW51cGAgYXJlIGltcG9ydGFudCBwaWVjZXMuIEkmIzM5O2xsIGFkZCB0aG9zZSByaWdodCBhd2F5LCBhcyB0aGV5IHNlZW0gZnVuZGFtZW50YWwgdG8gdGhlIGRldmljZSBtYW5hZ2VtZW50LiBBbmQsIG9mIGNvdXJzZSwgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgaXMgdGhlIGlvY3RsIGhhbmRsZXIsIHNvIHRoYXQmIzM5O3MgYSBkZWZpbml0ZSBhZGQg4oCTIGNydWNpYWwgZm9yIHRoZSBpbnRlcmZhY2UuCgpIbW0sIEkgc2VlIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgaXMgc3RhdGljIGJ1dCBub3QgaW5saW5lZC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYSBzd2l0Y2ggc3RhdGVtZW50IGluIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLiBJdCYjMzk7cyB0ZWNobmljYWxseSBva2F5IHRvIGluY2x1ZGUgaXQsIGJ1dCBnaXZlbiBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBpb2N0bCBoYW5kbGVyLCBJIHRoaW5rIGl0JiMzOTtzIG1vcmUgaW5mb3JtYXRpdmUgYW5kIGxlc3MgcmVkdW5kYW50IHRvIHNpbXBseSBhZGQgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgaW5zdGVhZC4gSXQgY2FwdHVyZXMgdGhlIGNvbnRleHQgYmV0dGVyLgoKQWxyaWdodCwgdGhlIGxpc3QgaXM6IGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLCBgdmhvc3RfZGV2X2NsZWFudXBgLCBhbmQgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAuCgpOb3csIGJlZm9yZSBJIGZpbmFsaXplIHRoaXMsIGxldCBtZSBxdWlja2x5IGdsYW5jZSBhdCBgdmhvc3RfdnNvY2tfc3RhcnRgIGFuZCBgdmhvc3RfdnNvY2tfc3RvcGAgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgaW4gdGhhdCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92c29ja19zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9NTk3PXN0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2hhbmRsZV9yeF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MDYtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NjA3OnN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RhcnQoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MDgte1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYz05MzY9c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTk1NC1cdFx0aWYgKHN0YXJ0KVxuZHJpdmVycy92aG9zdC92c29jay5jOjk1NTpcdFx0XHRyZXR1cm4gdmhvc3RfdnNvY2tfc3RhcnQodnNvY2spO1xuZHJpdmVycy92aG9zdC92c29jay5jLTk1Ni1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKlN0cmVhbWxpbmluZyBWaG9zdC1WU29jayBNYW5hZ2VtZW50KioKCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBoYW5kbGluZyB0aGUgdmhvc3QtdnNvY2sgc2V0dXAuIEkgc2VlIHRoYXQgYHZob3N0X3Zzb2NrX3N0YXJ0YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEhtbSwgdGhhdCBzdWdnZXN0cyBpdCBtaWdodCBiZSBpbnRlcm5hbCB0byB0aGUgbW9kdWxlLCBhbmQgdGhlcmVmb3JlIHdlJiMzOTtyZSBub3QgbmVjZXNzYXJpbHkgcmVsaWFudCBvbiBpdCBhcyB0aGUgY2VudHJhbCBwb2ludCBvZiBjb250cm9sLiBUaGF0IG9wZW5zIHVwIHNvbWUgaW50ZXJlc3RpbmcgcG9zc2liaWxpdGllcyBmb3IgcmVmYWN0b3JpbmcuCgpUaGlua2luZyBpdCB0aHJvdWdoLCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhpcyBvbmUgc3RhdGljIGZ1bmN0aW9uLCB3aHkgZG9uJiMzOTt0IHdlIGp1c3QgbGVhbiBvbiB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmU/IFdlJiMzOTt2ZSBnb3QgYHZob3N0X2Rldl9yZXNldF9vd25lcmAsIGB2aG9zdF9kZXZfY2xlYW51cGAsIGFuZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCByZWFkaWx5IGF2YWlsYWJsZS4gVGhleSBzaG91bGQgZ2l2ZSB1cyBhbGwgdGhlIG5lY2Vzc2FyeSBob29rcyBhbmQgcG9pbnRzIG9mIGludGVyYWN0aW9uIHdlIG5lZWQuIFRoaXMgc2hvdWxkIHNpbXBsaWZ5IHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgbWFrZSB0aGluZ3MgZWFzaWVyIHRvIG1haW50YWluIGxvbmctdGVybS4KCkJlZm9yZSBjb21taXR0aW5nIHRvIHRoYXQsIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBwcmluY2lwbGUgaXMgY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBMZXQmIzM5O3MgZG8gYSBxdWljayBzY2FuIG9mIGB2aG9zdF9uZXRfcmVzZXRfb3duZXJgIGFuZCBgdmhvc3RfdGVzdF9yZXNldF9vd25lcmAgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBzb21lIGltcG9ydGFudCBudWFuY2UuIEp1c3Qgd2FudCB0byBtYWtlIHN1cmUgdGhlIGdlbmVyYWwgZGVzaWduIHBhdHRlcm4gb2Ygb3duZXIgcmVzZXQgaXMgY29uc2lzdGVudCBhY3Jvc3MgYWxsIHZob3N0IGltcGxlbWVudGF0aW9ucy4gT2theSwgZ29vZC4gVGhhdCBzaG91bGQgYmUgYSBzb2xpZCBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfbmV0X3Jlc2V0X293bmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jPTE1NDQ9c3RhdGljIGxvbmcgdmhvc3RfbmV0X3NldF9iYWNrZW5kKHN0cnVjdCB2aG9zdF9uZXQgKm4sIHVuc2lnbmVkIGluZGV4LCBpbnQgZmQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNjQ0LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxNjQ1OnN0YXRpYyBsb25nIHZob3N0X25ldF9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfbmV0ICpuKVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNjQ2LXtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE3NDc9c3RhdGljIGxvbmcgdmhvc3RfbmV0X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xODMxLVx0Y2FzZSBWSE9TVF9SRVNFVF9PV05FUjpcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTgzMjpcdFx0cmV0dXJuIHZob3N0X25ldF9yZXNldF9vd25lcihuKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTgzMy1cdGNhc2UgVkhPU1RfU0VUX09XTkVSOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgdkhvc3QgSU9DVEwgSGFuZGxlciBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgdkhvc3QgY29kZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBpbnRlZ3JhdGUgdGhlc2UgbmV3IElPQ1RMIGhhbmRsZXJzLiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIGFib3V0IGFkZGluZyBgdmhvc3RfbmV0X2lvY3RsYCBkaXJlY3RseSwgYnV0IHRoZW4gSSBzYXcgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIHJlc2V0IGFuZCByZWxlYXNlLCBhbmQgSSByZWFsaXplZCB0aGlzIGlzIG1vcmUgY29tcGxleC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gbW9kaWZ5IHRob3NlIHNwZWNpZmljIGhhbmRsZXJzLCBidXQgbG9va2luZyBkZWVwZXIsIGl0JiMzOTtzIGNsZWFyIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgaGluZ2VzIGFyb3VuZCBgdmhvc3RfZGV2X2NsZWFudXBgIGFuZCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYC4gU28sIEkmIzM5O2xsIGZvY3VzIHRoZXJlLgoKSSYjMzk7bGwgY29uc29saWRhdGUgdGhlIGltcG9ydGFudCBJT0NUTCBoYW5kbGVycywgZm9jdXNpbmcgb24gYSBjbGVhbiBhbmQgbWFpbnRhaW5hYmxlIHNvbHV0aW9uLiBTbyB0aGUgZmluYWwgbGlzdCBvZiBmdW5jdGlvbnMgSSB3aWxsIGFkZCBhcmU6IGB2aG9zdF9kZXZfY2xlYW51cGAsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCwgYHZob3N0X25ldF9pb2N0bGAsIGFuZCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuCgpUaGVuIEkgbmVlZCB0byBjb25zaWRlciB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQuIFRoZSBjb3JlIGNvbmZpZ3MgSSYjMzk7bSBkZWFsaW5nIHdpdGggaW5jbHVkZTogYFZIT1NUX1ZTT0NLYCwgYFZIT1NUX05FVGAsIGBWSE9TVF9TQ1NJYCwgYFZIT1NUX1ZEUEFgLCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAuIEkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIHdoZXRoZXIgdGhlIGBWSE9TVF9URVNUYCBjb25maWcgZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9URVNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBhIHZob3N0IFRlc3QgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBJIGhhdmUgaXMsIHVuZGVyIHdoaWNoIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyB0aGlzIHRlc3QgY29kZSBhY3R1YWxseSBjb21waWxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29udGV4dCB0byBrbm93IHdoZW4gYW5kIGhvdyB0aGlzIGNvZGUgaXMgZXhlY3V0ZWQuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBnaXZlIG1lIHRoZSBwcm9wZXIgY29udGV4dCB0byByZXZpZXcgdGhlIGNvZGUgb3IgYXR0ZW1wdCBkZWJ1Z2dpbmcuIEkgY2FuJiMzOTt0IGp1c3QgZGl2ZSBpbiB3aXRob3V0IGtub3dpbmcgdGhlIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZXN0XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBWaG9zdCBEcml2ZXIgTWFrZWZpbGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1hZ2ljIGZvciB0aGUgdmhvc3QgZHJpdmVyIGlzIGRlZmluZWQsIGFuZCBpdCYjMzk7cyB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgaWYgSSB3YW50IHRvIHVuZGVyc3RhbmQgb3IgbW9kaWZ5IGl0cyBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW50YWwgbWFwIG9mIGhvdyB0aGlzIHRoaW5nIGFzc2VtYmxlcywgaXRzIGRlcGVuZGVuY2llcywgYW5kIGFueSBjdXN0b20gYnVpbGQgc3RlcHMuIEl0JiMzOTtzIHRpbWUgdG8gcGFyc2UgdGhlIHJ1bGVzIGFuZCB2YXJpYWJsZXMgaW4gdGhlcmUgYW5kIHNlZSBob3cgdGhpbmdzIGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai0kKENPTkZJR19WSE9TVF9ORVQpICYjNDM7PSB2aG9zdF9uZXQub1xuICAgMzpcdHZob3N0X25ldC15IDo9IG5ldC5vXG4gICA0Olx0XG4gICA1Olx0b2JqLSQoQ09ORklHX1ZIT1NUX1NDU0kpICYjNDM7PSB2aG9zdF9zY3NpLm9cbiAgIDY6XHR2aG9zdF9zY3NpLXkgOj0gc2NzaS5vXG4gICA3Olx0XG4gICA4Olx0b2JqLSQoQ09ORklHX1ZIT1NUX1ZTT0NLKSAmIzQzOz0gdmhvc3RfdnNvY2sub1xuICAgOTpcdHZob3N0X3Zzb2NrLXkgOj0gdnNvY2sub1xuICAxMDpcdFxuICAxMTpcdG9iai0kKENPTkZJR19WSE9TVF9SSU5HKSAmIzQzOz0gdnJpbmdoLm9cbiAgMTI6XHRcbiAgMTM6XHRvYmotJChDT05GSUdfVkhPU1RfVkRQQSkgJiM0Mzs9IHZob3N0X3ZkcGEub1xuICAxNDpcdHZob3N0X3ZkcGEteSA6PSB2ZHBhLm9cbiAgMTU6XHRcbiAgMTY6XHRvYmotJChDT05GSUdfVkhPU1QpXHQmIzQzOz0gdmhvc3Qub1xuICAxNzpcdFxuICAxODpcdG9iai0kKENPTkZJR19WSE9TVF9JT1RMQikgJiM0Mzs9IHZob3N0X2lvdGxiLm9cbiAgMTk6XHR2aG9zdF9pb3RsYi15IDo9IGlvdGxiLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEJ1aWxkIENvbmZpZ3VyYXRpb24gRGlzY3JlcGFuY3kqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZHJpdmVycy92aG9zdC90ZXN0LmNgLiBUaGUgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQgKnNob3VsZCogYmUgcGFydCBvZiB0aGUgYGRyaXZlcnMvdmhvc3RgIGJ1aWxkIHByb2Nlc3MuIEhvd2V2ZXIsIGEgcXVpY2sgc2NhbiBzdWdnZXN0cyBpdCYjMzk7cyAqbm90KiBkaXJlY3RseSBsaXN0ZWQgaW4gdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gZG91YmxlLWNoZWNrIHRoZSBNYWtlZmlsZSBtb3JlIHRob3JvdWdobHkuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZSBpbmNsdXNpb24gaGFwcGVucyBsYXRlciBvbiwgcGVyaGFwcyB0aHJvdWdoIGEgdmFyaWFibGUgZXhwYW5zaW9uIG9yIGFuIGluZGlyZWN0IGluY2x1ZGUuIEkgbmVlZCB0byBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IG9mIGEgc2ltcGxlIG92ZXJzaWdodCBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gbW9yZSBjb21wbGV4IGJ1aWxkIHN5c3RlbSBsb2dpYyBvciBtYWtlIGFzc3VtcHRpb25zIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBmaWxlIGlzIGluY2x1ZGVkIGZ1cnRoZXIgZG93biBpbiB0aGF0IGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ZmlsZSBkcml2ZXJzL3Zob3N0L01ha2VmaWxlIGRvZXMgbm90IGhhdmUgbGluZSAyMCwgaXQgaGFzIG9ubHkgMTkgbGluZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2ZpbGUgZHJpdmVycy92aG9zdC9NYWtlZmlsZSBkb2VzIG5vdCBoYXZlIGxpbmUgMjAsIGl0IGhhcyBvbmx5IDE5IGxpbmVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTk2MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgZHJpdmVycy92aG9zdC90ZXN0LmNgKioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBgZHJpdmVycy92aG9zdC90ZXN0LmNgLCBhbmQgSSYjMzk7dmUgaGl0IGEgbWVudGFsIHJvYWRibG9jay4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqV2hlcmUqIGV4YWN0bHkgZG9lcyB0aGUgYnVpbGQgc3lzdGVtIGNvbXBpbGUgdGhpcyBmaWxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0ZXN0IGNvZGUgaXMgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIGJ1aWxkIHByb2Nlc3MuIElzIGl0IHBhcnQgb2YgdGhlIG1haW4ga2VybmVsIGJ1aWxkPyBJcyBpdCBhIHNlcGFyYXRlIG1vZHVsZT8gSXMgaXQgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZmlndXJpbmcgb3V0IGhvdyB0aGUgdGVzdCBzdWl0ZSBpcyBydW4sIGFuZCBob3cgdG8gcG90ZW50aWFsbHkgbW9kaWZ5IG9yIGV4dGVuZCBpdC4gSSBuZWVkIHRvIGZpbmQgdGhlIHJlbGV2YW50IGBNYWtlZmlsZWAsIGBLY29uZmlnYCBvcHRpb25zLCBvciBidWlsZCBzY3JpcHRzIHRvIHRyYWNlIHRoaXMuIEl0JiMzOTtzIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyB0ZXN0IGZpbGUuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGVzdFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjE4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBmb3IgYSBUZXN0IFZpcnR1YWwgSG9zdCBGaWxlKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzLCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBzdGFydCB3aXRoIGEgc2FuaXR5IGNoZWNrLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgc2ltcGxlLCByZWFkaWx5IGF2YWlsYWJsZSB0ZXN0IGZpbGUuIFNvLCBJIG5lZWQgdG8gbG9vayBmb3Igc29tZXRoaW5nIHRoYXQgbWlnaHQgYmUgbmFtZWQgYHZob3N0X3Rlc3QuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXIuIEl0JiMzOTtzIGEgcXVpY2sgd2F5IHRvIGdhdWdlIHRoZSBleGlzdGluZyBzdHJ1Y3R1cmUgYW5kIHBvdGVudGlhbGx5IGlkZW50aWZ5IGFueSBwcmUtYnVpbHQgZXhhbXBsZXMgb3IgY29uZmlndXJhdGlvbnMgSSBjYW4gbGV2ZXJhZ2UuIEl04oCZcyB0aGUgc3RhcnRpbmcgcG9pbnQgb2YgYW55IGdvb2QgaW52ZXN0aWdhdGlvbiwgZmluZCB0aGUga25vd24gZ29vZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF90ZXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC90ZXN0LmMtMzAtXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMTpzdGF0aWMgY29uc3QgaW50IHZob3N0X3Rlc3RfYml0c1tdID0ge1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMzItXHRWSE9TVF9GRUFUVVJFU1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0LVxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzU6I2RlZmluZSBWSE9TVF9URVNUX0ZFQVRVUkVTIFZIT1NUX0ZFQVRVUkVTX1U2NCh2aG9zdF90ZXN0X2JpdHMsIDApXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNi1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTM3PWVudW0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTQxLVxuZHJpdmVycy92aG9zdC90ZXN0LmM6NDI6c3RydWN0IHZob3N0X3Rlc3Qge1xuZHJpdmVycy92aG9zdC90ZXN0LmMtNDMtXHRzdHJ1Y3Qgdmhvc3RfZGV2IGRldjtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy00OC0gKiByZWFkLXNpemUgY3JpdGljYWwgc2VjdGlvbiBmb3Igb3VyIGtpbmQgb2YgUkNVLiAqL1xuZHJpdmVycy92aG9zdC90ZXN0LmM6NDk6c3RhdGljIHZvaWQgaGFuZGxlX3ZxKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxuZHJpdmVycy92aG9zdC90ZXN0LmMtNTAte1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTEwMj1zdGF0aWMgdm9pZCBoYW5kbGVfdnFfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMDUtXHRcdFx0XHRcdFx0ICBwb2xsLndvcmspO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTA2Olx0c3RydWN0IHZob3N0X3Rlc3QgKm4gPSBjb250YWluZXJfb2YodnEtXHUwMDNlZGV2LCBzdHJ1Y3Qgdmhvc3RfdGVzdCwgZGV2KTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTEwNy1cbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMTAtXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMTE6c3RhdGljIGludCB2aG9zdF90ZXN0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMTIte1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTEzOlx0c3RydWN0IHZob3N0X3Rlc3QgKm4gPSBrbWFsbG9jX29iaigqbik7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMTQtXHRzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXY7XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTM1LVxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTM2OnN0YXRpYyB2b2lkICp2aG9zdF90ZXN0X3N0b3BfdnEoc3RydWN0IHZob3N0X3Rlc3QgKm4sXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMzctXHRcdFx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNDctXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxNDg6c3RhdGljIHZvaWQgdmhvc3RfdGVzdF9zdG9wKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB2b2lkICoqcHJpdmF0ZXApXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNDkte1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTUwOlx0KnByaXZhdGVwID0gdmhvc3RfdGVzdF9zdG9wX3ZxKG4sIG4tXHUwMDNldnFzICYjNDM7IFZIT1NUX1RFU1RfVlEpO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMTUxLX1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE1Mi1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjE1MzpzdGF0aWMgdm9pZCB2aG9zdF90ZXN0X2ZsdXNoKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTU0LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNTctXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxNTg6c3RhdGljIGludCB2aG9zdF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNTkte1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTYwOlx0c3RydWN0IHZob3N0X3Rlc3QgKm4gPSBmLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE2MS1cdHZvaWQgICpwcml2YXRlO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMTYyLVxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTYzOlx0dmhvc3RfdGVzdF9zdG9wKG4sIFx1MDAyNnByaXZhdGUpO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTY0Olx0dmhvc3RfdGVzdF9mbHVzaChuKTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE2NS1cdHZob3N0X2Rldl9zdG9wKFx1MDAyNm4tXHUwMDNlZGV2KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNzEtXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxNzI6c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9ydW4oc3RydWN0IHZob3N0X3Rlc3QgKm4sIGludCB0ZXN0KVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTczLXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yMTAtXHRcdGlmIChvbGRwcml2KSB7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoyMTE6XHRcdFx0dmhvc3RfdGVzdF9mbHVzaChuKTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTIxMi1cdFx0fVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTIyMi1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjIyMzpzdGF0aWMgbG9uZyB2aG9zdF90ZXN0X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjI0LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yMzctXHR9XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoyMzg6XHR2aG9zdF90ZXN0X3N0b3AobiwgXHUwMDI2cHJpdik7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoyMzk6XHR2aG9zdF90ZXN0X2ZsdXNoKG4pO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMjQwLVx0dmhvc3RfZGV2X3N0b3AoXHUwMDI2bi1cdTAwM2VkZXYpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI0Ni1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjI0NzpzdGF0aWMgaW50IHZob3N0X3Rlc3Rfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB1NjQgZmVhdHVyZXMpXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yNDgte1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI2NC1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjI2NTpzdGF0aWMgbG9uZyB2aG9zdF90ZXN0X3NldF9iYWNrZW5kKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB1bnNpZ25lZCBpbmRleCwgaW50IGZkKVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjY2LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMDMtXHRpZiAoZW5hYmxlKSB7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMDQ6XHRcdHZob3N0X3Rlc3RfZmx1c2gobik7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMDUtXHR9XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzE2LVxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzE3OnN0YXRpYyBsb25nIHZob3N0X3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMxOC1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMyMC1cdHN0cnVjdCB2aG9zdF92cmluZ19maWxlIGJhY2tlbmQ7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMjE6XHRzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiA9IGYtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMzIyLVx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzMwLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MzMxOlx0XHRyZXR1cm4gdmhvc3RfdGVzdF9ydW4obiwgdGVzdCk7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMzItXHRjYXNlIFZIT1NUX1RFU1RfU0VUX0JBQ0tFTkQ6XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzM0LVx0XHRcdHJldHVybiAtRUZBVUxUO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MzM1Olx0XHRyZXR1cm4gdmhvc3RfdGVzdF9zZXRfYmFja2VuZChuLCBiYWNrZW5kLmluZGV4LCBiYWNrZW5kLmZkKTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzNi1cdGNhc2UgVkhPU1RfR0VUX0ZFQVRVUkVTOlxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0NS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNDY6XHRcdHJldHVybiB2aG9zdF90ZXN0X3NldF9mZWF0dXJlcyhuLCBmZWF0dXJlcyk7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNDctXHRjYXNlIFZIT1NUX1JFU0VUX09XTkVSOlxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzQ4Olx0XHRyZXR1cm4gdmhvc3RfdGVzdF9yZXNldF9vd25lcihuKTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0OS1cdGRlZmF1bHQ6XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzUzLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSB2aG9zdF92cmluZ19pb2N0bChcdTAwMjZuLVx1MDAzZWRldiwgaW9jdGwsIGFyZ3ApO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MzU0Olx0XHR2aG9zdF90ZXN0X2ZsdXNoKG4pO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMzU1LVx0XHRtdXRleF91bmxvY2soXHUwMDI2bi1cdTAwM2VkZXYubXV0ZXgpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM1OS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2MDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF90ZXN0X2ZvcHMgPSB7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNjEtXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2MjpcdC5yZWxlYXNlICAgICAgICA9IHZob3N0X3Rlc3RfcmVsZWFzZSxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2MzpcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Rlc3RfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNjQtXHQuY29tcGF0X2lvY3RsICAgPSBjb21wYXRfcHRyX2lvY3RsLFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzY1Olx0Lm9wZW4gICAgICAgICAgID0gdmhvc3RfdGVzdF9vcGVuLFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzY2LVx0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM2OC1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2OTpzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugdmhvc3RfdGVzdF9taXNjID0ge1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMzcwLVx0TUlTQ19EWU5BTUlDX01JTk9SLFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzcxLVx0XCYjMzQ7dmhvc3QtdGVzdFwmIzM0OyxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM3MjpcdFx1MDAyNnZob3N0X3Rlc3RfZm9wcyxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM3My19O1xuZHJpdmVycy92aG9zdC90ZXN0LmM6Mzc0Om1vZHVsZV9taXNjX2RldmljZSh2aG9zdF90ZXN0X21pc2MpO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMzc1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcyNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyB0aGUgdmhvc3RfdGVzdCBEcml2ZXIqKgoKQWxyaWdodCwgc28gYHZob3N0X3Rlc3RgLi4uIHJpZ2h0LCB0aGF0JiMzOTtzIGEgbWlzYyBkZXZpY2UsIGlzbiYjMzk7dCBpdD8gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQuIE5vdywgaXMgaXQgYWN0dWFsbHkgKmNvbXBpbGVkKiBpbnRvIHRoZSBrZXJuZWw/IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBiYWNrIGludG8gdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgYnVpbGQgZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzIHRoYXQgSSYjMzk7bSBtaXNzaW5nLiBOZWVkIHRvIGVsaW1pbmF0ZSB0aGF0IHBvdGVudGlhbCBjYXVzZSBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3RcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODkzMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5IG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQnVpbGQgU3lzdGVtKioKClJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGBkcml2ZXJzL3Zob3N0L3Rlc3QuY2AgaXMgYWN0dWFsbHkgYnVpbHQuIEl0IGZlZWxzIGxpa2UgSSYjMzk7dmUgc2VlbiBzb21ldGhpbmcgc2ltaWxhciBjb21waWxlZCBpbiB0aGUgYHRvb2xzL3ZpcnRpby9gIGRpcmVjdG9yeSBiZWZvcmUsIG1heWJlIGFzIHBhcnQgb2Ygc29tZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGUgZGVwZW5kZW5jeSBncmFwaCBpc24mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cywgYW5kIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBidWlsZCBydWxlcyBmb3IgdGhpcyBzcGVjaWZpYyB0ZXN0IGNhc2UuCgpUaGVyZWZvcmUsIGxldCYjMzk7cyBqdXN0IGdvIGFoZWFkIGFuZCBkaXZlIGRpcmVjdGx5IGludG8gYHRvb2xzL3ZpcnRpby9NYWtlZmlsZWAuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgcmVsZXZhbnQgZGlyZWN0aXZlcywgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgcG9pbnRlciB0byB3aGVyZSB0aG9zZSBydWxlcyBtaWdodCBiZSBsb2NhdGVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWZlcmVuY2VzIHRvIGB2aG9zdGAgYW5kIHBvdGVudGlhbGx5IHRoYXQgZmlsZW5hbWUgc3BlY2lmaWNhbGx5LiBUaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgYnVpbHQgdGhlcmUgZGlyZWN0bHksIGluY2x1ZGVkIGZyb20gdGhlcmUsIG9yIGlmIGl0IGxldmVyYWdlcyBhIHNoYXJlZCBidWlsZCBlbnZpcm9ubWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBtYWtlZmlsZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0ZXN0XFwuYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3ZpcnRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dG9vbHMvdmlydGlvL3Zob3N0X3Rlc3Qvdmhvc3RfdGVzdC5jOjE6I2luY2x1ZGUgXCYjMzQ7dGVzdC5jXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjU2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZToKCioqVW5yYXZlbGluZyB0aGUgVmhvc3QgVGVzdCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgdG9vbHMvdmlydGlvL3Zob3N0X3Rlc3Qvdmhvc3RfdGVzdC5jYCBwdWxscyBpbiBgdGVzdC5jYC4gTm90aGluZyB1bnVzdWFsIHRoZXJlLCBzdGFuZGFyZCBwcmFjdGljZSBmb3Igb3JnYW5pemluZyB0ZXN0IGNvZGUuIEJ1dCB3YWl0LCBJJiMzOTttIGp1c3Qgbm90aWNpbmcgc29tZXRoaW5nIG1vcmUgaW50cmlndWluZy4gVGhhdCBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGlzIGJ1aWx0IGFzIGEga2VybmVsIG1vZHVsZSwgYHZob3N0X3Rlc3Qua29gLiBUaGF0JiMzOTtzIG5vdCB0aGUgdHlwaWNhbCBzZXR1cC4gVXN1YWxseSwgSSYjMzk7ZCBleHBlY3QgdGhlIGNvcmUgdmhvc3QgdGVzdCBjb2RlIHRvIGJlIGludGVncmF0ZWQgd2l0aGluIHRoZSBkcml2ZXIgaXRzZWxmIG9yIGEgdXRpbGl0eS4gVGhpcyBpbmRpY2F0ZXMgaXQgaXMgaW50ZW50aW9uYWxseSBzZXBhcmF0ZWQuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGUsIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgLiBJJiMzOTtsbCBsb29rIGZvciBgVkhPU1RfVEVTVGAgYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNvbmZpZ3VyZWQuIFRoYXQmIzM5O2xsIHRlbGwgbWUgaWYgaXQmIzM5O3MgbWVhbnQgdG8gYmUgbW9kdWxhciBhbmQgaG93IGl0JiMzOTtzIGFjdGl2YXRlZCwgb3IgaWYgaXQmIzM5O3MgaW50ZWdyYXRlZCBkaWZmZXJlbnRseSBhbmQgd2h5LiBJJiMzOTtsbCBnZXQgdGhlIHJlYWwgc3RvcnkgZnJvbSB0aGF0IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1ZIT1NUX1RFU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Rlc3QuYy0yMi0gKiBVc2luZyB0aGlzIGxpbWl0IHByZXZlbnRzIG9uZSB2aXJ0cXVldWUgZnJvbSBzdGFydmluZyBvdGhlcnMuICovXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoyMzojZGVmaW5lIFZIT1NUX1RFU1RfV0VJR0hUIDB4ODAwMDBcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI0LVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI4LSAqL1xuZHJpdmVycy92aG9zdC90ZXN0LmM6Mjk6I2RlZmluZSBWSE9TVF9URVNUX1BLVF9XRUlHSFQgMjU2XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMC1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTMxPXN0YXRpYyBjb25zdCBpbnQgdmhvc3RfdGVzdF9iaXRzW10gPSB7XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzQtXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNTojZGVmaW5lIFZIT1NUX1RFU1RfRkVBVFVSRVMgVkhPU1RfRkVBVFVSRVNfVTY0KHZob3N0X3Rlc3RfYml0cywgMClcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM2LVxuZHJpdmVycy92aG9zdC90ZXN0LmM9Mzc9ZW51bSB7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozODpcdFZIT1NUX1RFU1RfVlEgPSAwLFxuZHJpdmVycy92aG9zdC90ZXN0LmM6Mzk6XHRWSE9TVF9URVNUX1ZRX01BWCA9IDEsXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy00MC19O1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTQyPXN0cnVjdCB2aG9zdF90ZXN0IHtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTQzLVx0c3RydWN0IHZob3N0X2RldiBkZXY7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzo0NDpcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgdnFzW1ZIT1NUX1RFU1RfVlFfTUFYXTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTQ1LX07XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmM9NDk9c3RhdGljIHZvaWQgaGFuZGxlX3ZxKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxuZHJpdmVycy92aG9zdC90ZXN0LmMtNTAte1xuZHJpdmVycy92aG9zdC90ZXN0LmM6NTE6XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNm4tXHUwMDNldnFzW1ZIT1NUX1RFU1RfVlFdO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtNTItXHR1bnNpZ25lZCBvdXQsIGluO1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTExMT1zdGF0aWMgaW50IHZob3N0X3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMTgtXHRcdHJldHVybiAtRU5PTUVNO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTE5Olx0dnFzID0ga21hbGxvY19vYmpzKCp2cXMsIFZIT1NUX1RFU1RfVlFfTUFYKTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTEyMC1cdGlmICghdnFzKSB7XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTI1LVx0ZGV2ID0gXHUwMDI2bi1cdTAwM2VkZXY7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMjY6XHR2cXNbVkhPU1RfVEVTVF9WUV0gPSBcdTAwMjZuLVx1MDAzZXZxc1tWSE9TVF9URVNUX1ZRXTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjEyNzpcdG4tXHUwMDNldnFzW1ZIT1NUX1RFU1RfVlFdLmhhbmRsZV9raWNrID0gaGFuZGxlX3ZxX2tpY2s7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMjg6XHR2aG9zdF9kZXZfaW5pdChkZXYsIHZxcywgVkhPU1RfVEVTVF9WUV9NQVgsIFVJT19NQVhJT1YsXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMjk6XHRcdCAgICAgICBWSE9TVF9URVNUX1BLVF9XRUlHSFQsIFZIT1NUX1RFU1RfV0VJR0hULCB0cnVlLCBOVUxMKTtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTEzMC1cbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYz0xNDg9c3RhdGljIHZvaWQgdmhvc3RfdGVzdF9zdG9wKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB2b2lkICoqcHJpdmF0ZXApXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNDkte1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTUwOlx0KnByaXZhdGVwID0gdmhvc3RfdGVzdF9zdG9wX3ZxKG4sIG4tXHUwMDNldnFzICYjNDM7IFZIT1NUX1RFU1RfVlEpO1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMTUxLX1cbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYz0yNDc9c3RhdGljIGludCB2aG9zdF90ZXN0X3NldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgdTY0IGZlYXR1cmVzKVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI1Ni1cdH1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjI1NzpcdHZxID0gXHUwMDI2bi1cdTAwM2V2cXNbVkhPU1RfVEVTVF9WUV07XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yNTgtXHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYz0yNjU9c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9zZXRfYmFja2VuZChzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgdW5zaWduZWQgaW5kZXgsIGludCBmZClcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yNzctXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoyNzg6XHRpZiAoaW5kZXggXHUwMDNlPSBWSE9TVF9URVNUX1ZRX01BWCkge1xuZHJpdmVycy92aG9zdC90ZXN0LmMtMjc5LVx0XHRyID0gLUVOT0JVRlM7XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzE3PXN0YXRpYyBsb25nIHZob3N0X3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMjctXHRzd2l0Y2ggKGlvY3RsKSB7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMjg6XHRjYXNlIFZIT1NUX1RFU1RfUlVOOlxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzI5LVx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dGVzdCwgYXJncCwgc2l6ZW9mIHRlc3QpKVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzMS1cdFx0cmV0dXJuIHZob3N0X3Rlc3RfcnVuKG4sIHRlc3QpO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MzMyOlx0Y2FzZSBWSE9TVF9URVNUX1NFVF9CQUNLRU5EOlxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzMzLVx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2YmFja2VuZCwgYXJncCwgc2l6ZW9mIGJhY2tlbmQpKVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzNi1cdGNhc2UgVkhPU1RfR0VUX0ZFQVRVUkVTOlxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzM3Olx0XHRmZWF0dXJlcyA9IFZIT1NUX1RFU1RfRkVBVFVSRVM7XG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMzgtXHRcdGlmIChjb3B5X3RvX3VzZXIoZmVhdHVyZXAsIFx1MDAyNmZlYXR1cmVzLCBzaXplb2YgZmVhdHVyZXMpKVxuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0My1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM0NDpcdFx0aWYgKGZlYXR1cmVzIFx1MDAyNiB+VkhPU1RfVEVTVF9GRUFUVVJFUylcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0NS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZHJpdmVycy92aG9zdC90ZXN0LmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuZHJpdmVycy92aG9zdC90ZXN0Lmg6MjojaWZuZGVmIExJTlVYX1ZIT1NUX1RFU1RfSFxuZHJpdmVycy92aG9zdC90ZXN0Lmg6MzojZGVmaW5lIExJTlVYX1ZIT1NUX1RFU1RfSFxuZHJpdmVycy92aG9zdC90ZXN0LmgtNC1cbmRyaXZlcnMvdmhvc3QvdGVzdC5oLTUtLyogU3RhcnQgYSBnaXZlbiB0ZXN0IG9uIHRoZSB2aXJ0aW8gbnVsbCBkZXZpY2UuIDAgc3RvcHMgYWxsIHRlc3RzLiAqL1xuZHJpdmVycy92aG9zdC90ZXN0Lmg6NjojZGVmaW5lIFZIT1NUX1RFU1RfUlVOIF9JT1coVkhPU1RfVklSVElPLCAweDMxLCBpbnQpXG5kcml2ZXJzL3Zob3N0L3Rlc3QuaDo3OiNkZWZpbmUgVkhPU1RfVEVTVF9TRVRfQkFDS0VORCBfSU9XKFZIT1NUX1ZJUlRJTywgMHgzMiwgaW50KVxuZHJpdmVycy92aG9zdC90ZXN0LmgtOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyNjMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgZHJpdmVycy92aG9zdC90ZXN0LmNgKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBkb2VzbiYjMzk7dCBmZWVsIHJpZ2h0LiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGZpbGUgd2FzIHBhcnQgb2YgdGhlIGNvcmUgdmhvc3QgZHJpdmVyLCBidXQgdGhlIGJ1aWxkIHN5c3RlbSBzZWVtcyB0byBiZSB0cmVhdGluZyBpdCBkaWZmZXJlbnRseS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBiZWluZyBjb21waWxlZCBhcyBhIGtlcm5lbCBtb2R1bGUgd2l0aGluIGB0b29scy92aXJ0aW8vdmhvc3RfdGVzdC9gLCB3aGljaCBzdHJpa2VzIG1lIGFzIHVudXN1YWwuIFRoYXQgY29uZmlndXJhdGlvbiBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBhbGlnbiB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcGFydGljdWxhciB0ZXN0IGlzIHR5cGljYWxseSBoYW5kbGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5LiBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgYHRvb2xzL3ZpcnRpby9NYWtlZmlsZWAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBtb3N0IGRpcmVjdCBpbnNpZ2h0IGludG8gaG93IHRoaXMgZmlsZSBpcyBiZWluZyBidWlsdCBhbmQgbGlua2VkLCBhbmQgaG9wZWZ1bGx5IGNsYXJpZnkgd2h5IGl0JiMzOTtzIGJlaW5nIHRyZWF0ZWQgYXMgYSBzZXBhcmF0ZSBtb2R1bGUgaW4gdGhhdCBzcGVjaWZpYyBkaXJlY3RvcnkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgTWFrZWZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdGVzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3ZpcnRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dG9vbHMvdmlydGlvL01ha2VmaWxlPTI0PW1vZDpcbnRvb2xzL3ZpcnRpby9NYWtlZmlsZToyNTpcdCR7QlVJTER9IE09YHB3ZGAvdmhvc3RfdGVzdFxudG9vbHMvdmlydGlvL01ha2VmaWxlLTI2LVxuLS1cbnRvb2xzL3ZpcnRpby9NYWtlZmlsZT00ND1vb3QtYnVpbGQ6XG50b29scy92aXJ0aW8vTWFrZWZpbGUtNDUtXHRlY2hvIFwmIzM0O1VOU1VQUE9SVEVEISBEb24mIzM5O3QgdXNlIHRoZSByZXN1bHRpbmcgbW9kdWxlcyBpbiBwcm9kdWN0aW9uIVwmIzM0O1xudG9vbHMvdmlydGlvL01ha2VmaWxlOjQ2Olx0JHtPT1RfQlVJTER9IE09YHB3ZGAvdmhvc3RfdGVzdFxudG9vbHMvdmlydGlvL01ha2VmaWxlLTQ3LVx0JHtPT1RfQlVJTER9IE09JHtPT1RfVkhPU1R9ICR7T09UX0NPTkZJR1N9XG4tLVxudG9vbHMvdmlydGlvL01ha2VmaWxlPTU0PWNsZWFuOlxudG9vbHMvdmlydGlvL01ha2VmaWxlOjU1Olx0JHtSTX0gKi5vIHZyaW5naF90ZXN0IHZpcnRpb190ZXN0IHZob3N0X25ldF90ZXN0IHZob3N0X3Rlc3QvKi5vIFxcXG50b29scy92aXJ0aW8vTWFrZWZpbGU6NTY6ICAgICAgICAgICAgICB2aG9zdF90ZXN0Ly4qLmNtZCB2aG9zdF90ZXN0L01vZHVsZS5zeW12ZXJzIFxcXG50b29scy92aXJ0aW8vTWFrZWZpbGU6NTc6ICAgICAgICAgICAgICB2aG9zdF90ZXN0L21vZHVsZXMub3JkZXIgKi5kXG50b29scy92aXJ0aW8vTWFrZWZpbGUtNTgtLWluY2x1ZGUgKi5kXG4tLVxudG9vbHMvdmlydGlvL3Zob3N0X3Rlc3QvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbnRvb2xzL3ZpcnRpby92aG9zdF90ZXN0L01ha2VmaWxlOjI6b2JqLW0gJiM0Mzs9IHZob3N0X3Rlc3Qub1xudG9vbHMvdmlydGlvL3Zob3N0X3Rlc3QvTWFrZWZpbGUtMy1FWFRSQV9DRkxBR1MgJiM0Mzs9IC1JZHJpdmVycy92aG9zdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTg4OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBgdmhvc3RgIE1vZHVsZSBUZXN0aW5nIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYHZob3N0X3Rlc3RgIGlzIGEgdGVzdGluZyBtb2R1bGUuIEl0JiMzOTtzIGJ1aWx0IHNwZWNpZmljYWxseSBmb3Igb3V0LW9mLXRyZWUgdGVzdGluZyBzY2VuYXJpb3MsIHdoaWNoIG1lYW5zIGl0cyBmdW5jdGlvbnMgbGlrZSBgdmhvc3RfdGVzdF9pb2N0bGAgYW5kIGB2aG9zdF90ZXN0X3JlbGVhc2VgIGFyZW4mIzM5O3QgYmFrZWQgaW50byB0aGUga2VybmVsIGluIHRoZSB0eXBpY2FsLCBkZXBsb3lhYmxlIGJ1aWxkLiBUaGF0IGltbWVkaWF0ZWx5IHNoaWZ0cyBteSBhdHRlbnRpb24uIEkgZG9uJiMzOTt0IG5lZWQgdG8gZ2V0IGJvZ2dlZCBkb3duIGluIHRob3NlLiBUaGV5JiMzOTtyZSBpcnJlbGV2YW50IHRvIHRoZSBjb3JlIGB2aG9zdGAgbW9kdWxlLgoKSW5zdGVhZCwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSB0cnVseSBpbXBvcnRhbnQgc3R1ZmYsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgcHJlc2VudCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UmIzM5O3JlIGluIGEgdGVzdCBvciBwcm9kdWN0aW9uIGVudmlyb25tZW50LiBUaGUga2V5IHN5bWJvbHMsIGFzIEkgc2VlIGl0LCBhcmU6IGB2aG9zdF9kZXZfY2xlYW51cGAsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCwgYHZob3N0X25ldF9pb2N0bGAsIGFuZCBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGAuIFRoZXNlIGZlZWwgbGlrZSB0aGV5JiMzOTtyZSBjcml0aWNhbCBmb3IgdGhlIGNvcmUgb3BlcmF0aW9uLgoKT25lIHF1aWNrIG5vdGUgb24gdGhlIGxpc3QsIGxldCBtZSBqdXN0IGRvdWJsZSBjaGVjaywgaXMgdGhhdCBgdmhvc3Rfc2NzaV9pb2N0bGAgZXhpc3RzLiBJdCBtYXkgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgb3IgbW92ZWQsIHNvIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaXQgaXMgc3RpbGwgYSB2YWxpZCBzeW1ib2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Njc2lfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0xOTE5PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXR1cF92cV9jbWRzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgbWF4X2NtZHMpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTk3My0vKlxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTk3NDogKiBDYWxsZWQgZnJvbSB2aG9zdF9zY3NpX2lvY3RsKCkgY29udGV4dCB0byB3YWxrIHRoZSBsaXN0IG9mIGF2YWlsYWJsZVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTk3NS0gKiB2aG9zdF9zY3NpX3RwZyB3aXRoIGFuIGFjdGl2ZSBzdHJ1Y3Qgdmhvc3Rfc2NzaV9uZXh1c1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzNjE9c3RhdGljIGxvbmdcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzNjI6dmhvc3Rfc2NzaV9pb2N0bChzdHJ1Y3QgZmlsZSAqZixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzNjMtXHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQzOS1cdC5yZWxlYXNlICAgICAgICA9IHZob3N0X3Njc2lfcmVsZWFzZSxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NDA6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9zY3NpX2lvY3RsLFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ0MS1cdC5jb21wYXRfaW9jdGxcdD0gY29tcGF0X3B0cl9pb2N0bCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2OTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gQ2xlYW51cDogRXhwYW5kaW5nIHRoZSBTY29wZSoqCgpPa2F5LCBzbyBJIHNlZSBgdmhvc3Rfc2NzaV9pb2N0bGAgaXMgZGVmaW5pdGVseSBpbiB0aGUgbWl4LiBCdXQgaG9sZCBvbiwgSSYjMzk7bSBub3RpY2luZyBhIGZldyBvdGhlciBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBhcyB3ZWxsOiBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgYHZob3N0X25ldF9yZWxlYXNlYCwgYW5kIGB2aG9zdF92ZHBhX2NsZWFudXBgLiBIbW0sIGFyZSB0aGVzZSBwb3RlbnRpYWxseSBiZXR0ZXIgcGxhY2VzIHRvIGZvY3VzIG15IGVmZm9ydHM/IEkgdGhpbmsgc28uCgpUaGlua2luZyBhYm91dCBpdCwgYHZob3N0X3Njc2lfcmVsZWFzZWAgbG9va3MgcHJvbWlzaW5nIGJlY2F1c2UgaXQmIzM5O3MgdGhlIHJlbGVhc2UgaGFuZGxlci4gVGhhdCBtZWFucyBpdCYjMzk7cyB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjbG9zZWQsIG1ha2luZyBpdCBhIG5hdHVyYWwgZml0IGZvciB0ZXN0aW5nIHRoZSBgdmhvc3RfZGV2X2NsZWFudXBgIHByb2Nlc3MuIEkmIzM5O20gZ29pbmcgdG8gYWRkIGB2aG9zdF9zY3NpX3JlbGVhc2VgLCBgdmhvc3RfbmV0X3JlbGVhc2VgLCBgdmhvc3RfdnNvY2tfZGV2X3JlbGVhc2VgLCBhbmQgYHZob3N0X3ZkcGFfY2xlYW51cGAgdG8gbXkgbGlzdCBvZiBrZXkgZnVuY3Rpb25zLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYHZob3N0X3ZkcGFfY2xlYW51cGAgaXMgYmVoYXZpbmcgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF92ZHBhX2NsZWFudXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYz0xMzcwPXN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfc2V0X2lvdmFfcmFuZ2Uoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTM4Ni1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEzODc6c3RhdGljIHZvaWQgdmhvc3RfdmRwYV9jbGVhbnVwKHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTM4OC17XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTQwND1zdGF0aWMgaW50IHZob3N0X3ZkcGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQ0OC1lcnJfYWxsb2NfZG9tYWluOlxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTQ0OTpcdHZob3N0X3ZkcGFfY2xlYW51cCh2KTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0NTAtZXJyOlxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE0NjM9c3RhdGljIGludCB2aG9zdF92ZHBhX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0NzQtXHR2aG9zdF92ZHBhX2NvbmZpZ19wdXQodik7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNDc1Olx0dmhvc3RfdmRwYV9jbGVhbnVwKHYpO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQ3Ni1cdG11dGV4X3VubG9jayhcdTAwMjZkLVx1MDAzZW11dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVmhvc3QgTW9kdWxlIEVudHJ5IFBvaW50cyBhbmQgQ29yZSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIHZob3N0IG1vZHVsZSBoYW5ncyB0b2dldGhlci4gVGhlIHByaW1hcnkgcmVsZWFzZSBoYW5kbGVyIGhlcmUgaXMgYHZob3N0X3ZkcGFfcmVsZWFzZWAsIGFuZCBpdCBjYWxscyBgdmhvc3RfdmRwYV9jbGVhbnVwYCB1bmRlciB0aGUgaG9vZC4gU28sIHdoZW4gSSYjMzk7bSBhZGRpbmcgYHZob3N0X3ZkcGFfcmVsZWFzZWAgaXQgbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGF0IGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgc3ltYm9scyBhbmQgY29uc2lkZXIgd2hpY2ggdG8gaGlnaGxpZ2h0LiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGB2aG9zdF9kZXZfY2xlYW51cGAsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCwgYHZob3N0X25ldF9pb2N0bGAsIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYCwgYHZob3N0X3Njc2lfaW9jdGxgLCBgdmhvc3RfdnNvY2tfZGV2X3JlbGVhc2VgLCBgdmhvc3RfbmV0X3JlbGVhc2VgLCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgYW5kIG9mIGNvdXJzZSwgYHZob3N0X3ZkcGFfcmVsZWFzZWAuCgpXYWl0LCBob2xkIG9uLiBgdmhvc3RfZGV2X2NsZWFudXBgIGFuZCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCBhcmUgY29yZSBmdW5jdGlvbnMsIHJpZ2h0PyBBY3R1YWxseSwgdGhleSBhcmUgcHJvYmFibHkgbW9yZSB1c2VmdWwgdG8gaW5jbHVkZSwgYXMgdGhleSBhcmUgcGFydCBvZiB0aGUgY3JpdGljYWwgcGF0aCBhbmQgYXJlIGV4cG9ydGVkIHN5bWJvbHMuIEl0JiMzOTtzIHByb2JhYmx5IGJldHRlciB0byBqdXN0IGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBjb3JlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhleSBhcmUgdGhlIGFjdHVhbCBlbnRyeSBwb2ludHMsIGJ1dCB0aGUgb3RoZXJzIGFyZSBpbXBvcnRhbnQgdG9vLgoKSSBxdWlja2x5IGNoZWNrZWQgdGhlIHJlbGF0aW9uc2hpcCB0byBzdGF0aWMgZnVuY3Rpb25zLCBsaWtlIGB2aG9zdF92c29ja19zdGFydGAgYW5kIGB2aG9zdF92c29ja19zdG9wYCwgd2hpY2ggYXJlIGNhbGxlZCBmcm9tIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLiBJbiB0aGlzIGNhc2UsIEkmIzM5O2xsIHN0aWNrIHdpdGggdGhlIGVudHJ5IHBvaW50cyBhbmQgY29yZSBmdW5jdGlvbnMgZm9yIHRoZSBzdW1tYXJ5LgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJpZ2h0LiBJIG5lZWQgYFZIT1NUX1ZTT0NLYCwgYFZIT1NUX05FVGAsIGBWSE9TVF9TQ1NJYCwgYFZIT1NUX1ZEUEFgLCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0IGBUQVJHRVRfQ09SRWAgbmFtZSB0byBtYWtlIHN1cmUgaXQmIzM5O3MgZXhhY3RseSByaWdodCwgb2YgY291cnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEFSR0VUX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3RhcmdldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGFyZ2V0L0tjb25maWctMi1cbmRyaXZlcnMvdGFyZ2V0L0tjb25maWc6MzptZW51Y29uZmlnIFRBUkdFVF9DT1JFXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFRhcmdldCBDb3JlIE1vZCAoVENNKSBhbmQgQ29uZmlnRlMgSW5mcmFzdHJ1Y3R1cmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTc6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzOTgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KioKCkFscmlnaHQsIHRoZSBjb3JlIHRhcmdldCBpcyBjb25maXJtZWQ6IGBUQVJHRVRfQ09SRWAuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgcG9pbnQgb2YgZm9jdXMuIE5vdywgbGV0JiMzOTtzIHBpdm90IHRvIHRoZSByZWxldmFudCBkYXRhIHBhY2thZ2UgLSBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgZXZhbHVhdGUgYFZEUEFgLiBHaXZlbiB3aGF0IEkmIzM5O20gZXhwZWN0aW5nIHdpdGhpbiB0aGUgc2NvcGUgb2YgVEFSR0VUX0NPUkUsIHRoaXMgaXMgdGhlIG1vc3QgbG9naWNhbCBuZXh0IHN0ZXAuIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBkZXRlcm1pbmUgaXRzIHN0YXR1cyBhbmQgaWYgaXQmIzM5O3Mgb3BlcmF0aW5nIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gYW5hbHl6ZSBhbnkgZGlzY3JlcGFuY2llcyBiZXR3ZWVuIGl0cyBiZWhhdmlvciBhbmQgbXkgbW9kZWwgZm9yIGBUQVJHRVRfQ09SRWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRFBBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZHBhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkcml2ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxuZHJpdmVycy92ZHBhL0tjb25maWctMTEtXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoxMjpjb25maWcgVkRQQV9TSU1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBkZXZpY2Ugc2ltdWxhdG9yIGNvcmVcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMC1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyODpjb25maWcgVkRQQV9TSU1fQkxPQ0tcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7dkRQQSBzaW11bGF0b3IgZm9yIGJsb2NrIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTM0LVxuZHJpdmVycy92ZHBhL0tjb25maWc6MzU6Y29uZmlnIFZEUEFfVVNFUlxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXHR0cmlzdGF0ZSBcJiMzNDtWRFVTRSAodkRQQSBEZXZpY2UgaW4gVXNlcnNwYWNlKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODk2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGVzZSBjb25jZXB0cyB3aXRoaW4gbXkgYXJlYSBvZiBleHBlcnRpc2U6CgoqKkNoZWNraW5nIE15IE1lbnRhbCBMYW5kc2NhcGUqKgoKT2theSwgZGVmaW5pdGVseS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBgVkRQQWAuIFRoYXQmIzM5O3MgYSBrZXkgYXJlYSB0byBjb25zaWRlciBpbiB0aGlzIGNvbnRleHQuIEJ1dCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGltcGxpY2F0aW9ucyBvZiBgVkRQQWAsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gZG8gYSBxdWljayBtZW50YWwgY2hlY2sgb24gYFZTT0NLRVRTYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIGhvbGRpbmcgYWxsIHRoZSByZWxldmFudCBwaWVjZXMgaW4gbXkgbWluZCBhdCB0aGUgc2FtZSB0aW1lIGFuZCBub3QgZ2V0dGluZyB0dW5uZWwgdmlzaW9uIG9uIGp1c3Qgb25lLiBJJiMzOTtsbCBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgYW5kIHRoZW4gSSBjYW4gcmVmaW5lIG15IGN1cnJlbnQgYXJlYSBvZiBmb2N1cywgYW5kIHRoZW4gSSBjYW4gY29uc2lkZXIgaG93IHRoZXkgaW50ZXJhY3Qgb3IgY29udHJhc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWU09DS0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWctNS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2OmNvbmZpZyBWU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy0xOC1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzoxOTpjb25maWcgVlNPQ0tFVFNfRElBR1xubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTI4LVxubmV0L3Ztd192c29jay9LY29uZmlnOjI5OmNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xubmV0L3Ztd192c29jay9LY29uZmlnLTMwLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIGxvb3BiYWNrIHRyYW5zcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI4NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgeWVwLCBJJiMzOTttIGRlZmluaXRlbHkgdGhpbmtpbmcgYWJvdXQgYFZTT0NLRVRTYCByaWdodCBub3cuIFRoYXQmIzM5O3MgYXQgdGhlIGZvcmVmcm9udCBvZiBteSBtaW5kIGZvciB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIE5vdywgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwsIGl0JiMzOTtzIHdvcnRoIGNyb3NzLXJlZmVyZW5jaW5nIGFuZCBnaXZpbmcgYSBxdWljayBsb29rIGF0IGBFVkVOVEZEYCBhbmQgc2VlIGlmIGl0IGlzIGEgYmV0dGVyIGZpdC4gQWx3YXlzIGltcG9ydGFudCB0byBxdWlja2x5IHJ1bGUgb3V0IG90aGVyIHBvdGVudGlhbGx5IGJldHRlciBvciBtb3JlIGFwcHJvcHJpYXRlIHRvb2xzIGJlZm9yZSBjb21taXR0aW5nIHRvIGEgZGVzaWduLiBUaGlzIHJlcXVpcmVzIGNvbnNpZGVyaW5nIHZhcmlvdXMgZmFjdG9ycyBhbmQgdXNlLWNhc2VzLiBHb3QgdG8ga2VlcCBhbiBvcGVuIG1pbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFVkVOVEZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODc4PWNvbmZpZyBUSU1FUkZEXG4tLVxuaW5pdC9LY29uZmlnLTE4ODYtXG5pbml0L0tjb25maWc6MTg4Nzpjb25maWcgRVZFTlRGRFxuaW5pdC9LY29uZmlnLTE4ODgtXHRib29sIFwmIzM0O0VuYWJsZSBldmVudGZkKCkgc3lzdGVtIGNhbGxcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTQwCgkJCQkJCQlvdXRwdXQ6IDMzMAoJCQkJCQkJdGhvdWdodHM6IDk2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWaG9zdCBTdWJzeXN0ZW0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGBFVkVOVEZEYCBpcyBkZWZpbml0ZWx5IGluIHRoZSBtaXguIExldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgdmhvc3QgZHJpdmVyIGRlcGVuZGVuY2llcyBhZ2FpbiB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uCgoqICAgYFZIT1NUX05FVGAgcmVsaWVzIG9uIGBORVRgLCBgRVZFTlRGRGAsIGFuZCBlaXRoZXIgYFRVTmAgb3Igbm90IGBUVU5gLCBhbmQgZWl0aGVyIGBUQVBgIG9yIG5vdCBgVEFQYC4gU2luY2UgU3l6a2FsbGVyIHR5cGljYWxseSBlbmFibGVzIGBUVU5gIGFuZCBgVEFQYCwgYFZIT1NUX05FVGAgd2lsbCBuZWVkIHRvIGJlIGEgbW9kdWxlIGlmIGBUVU5gIG9yIGBUQVBgIGFyZSBhbHNvIG1vZHVsZXMuCiogICBgVkhPU1RfU0NTSWAgZGVwZW5kcyBvbiBgVEFSR0VUX0NPUkVgIGFuZCBgRVZFTlRGRGAsIHNlbGVjdGluZyBib3RoIGBWSE9TVGAgYW5kIGBTR19QT09MYC4KKiAgIGBWSE9TVF9WRFBBYCBoaW5nZXMgb24gYEVWRU5URkRgLCBhbmQgaXQgc2VsZWN0cyBgVkhPU1RgLCBgSVJRX0JZUEFTU19NQU5BR0VSYCwgYW5kIGFsc28gZGVwZW5kcyBvbiBgVkRQQWAuCiogICBgVkhPU1RfVlNPQ0tgIHJlcXVpcmVzIGBWU09DS0VUU2AgYW5kIGBFVkVOVEZEYCBhbmQgc2VsZWN0cyBgVkhPU1RgLCBhbmQgYFZJUlRJT19WU09DS0VUU19DT01NT05gLgoKU28gbXkgRW5hYmxlQ29uZmlncyBsaXN0IGlzIHN0YXJ0aW5nIHRvIHRha2Ugc2hhcGU6IGBWSE9TVF9WU09DS2AsIGBWSE9TVF9ORVRgLCBgVkhPU1RfU0NTSWAsIGBWSE9TVF9WRFBBYCwgYFZTT0NLRVRTYCwgYEVWRU5URkRgLCBgVkRQQWAsIGFuZCBgVEFSR0VUX0NPUkVgLgoKSG1tLCBkbyBJIG5lZWQgYFZIT1NUX01FTlVgPyBMZXQmIzM5O3MgY2hlY2sgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AuIEFoLCBpdCYjMzk7cyBhIG1lbnUgY29uZmlnIHdpdGggYSBkZWZhdWx0IG9mICYjMzk7eSYjMzk7LiBJIGRvbiYjMzk7dCAqbmVlZCogdG8gZXhwbGljaXRseSBhZGQgaXQsIGJ1dCBpdCBkb2VzbiYjMzk7dCBodXJ0LiBTaW5jZSBpdCYjMzk7cyB0aGUgZGVmYXVsdCwgSSYjMzk7bGwganVzdCBvbWl0IGl0LCB0aG91Z2guCgpBbmQgYFZIT1NUYCBpdHNlbGY/IFRoYXQmIzM5O3MgaW1wbGljaXRseSBzZWxlY3RlZCBieSB0aGUgb3RoZXIgZHJpdmVycy4gU28sIEkgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSBpdC4KCkxldCYjMzk7cyByZXZpZXcgdGhlIGtlcm5lbCBzeW1ib2xzIGFnYWluLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gc29saWQgb24gdGhlc2UuCgpIZXJlJiMzOTtzIHRoZSBsaXN0OgoqICAgYHZob3N0X2Rldl9jbGVhbnVwYAoqICAgYHZob3N0X2Rldl9yZXNldF9vd25lcmAKKiAgIGB2aG9zdF92c29ja19kZXZfaW9jdGxgCiogICBgdmhvc3RfbmV0X2lvY3RsYAoqICAgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgCiogICBgdmhvc3Rfc2NzaV9pb2N0bGAKKiAgIGB2aG9zdF92c29ja19kZXZfcmVsZWFzZWAKKiAgIGB2aG9zdF9uZXRfcmVsZWFzZWAKKiAgIGB2aG9zdF9zY3NpX3JlbGVhc2VgCiogICBgdmhvc3RfdmRwYV9yZWxlYXNlYAoKSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0JiMzOTtzIG1vZGlmaWVkPyBMZXQgbWUgc2VlLgoKT2gsIG9rYXksIEkgc2VlIGEgZmV3IHN0YXRpYyBmdW5jdGlvbnMgdG9vOiBgdmhvc3Rfd29ya2Vyc19mcmVlYCwgYHZob3N0X3Zzb2NrX3N0YXJ0YCwgYHZob3N0X3Zzb2NrX3N0b3BgLCBgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kc2AsIGFuZCBgdmhvc3RfdmRwYV9jbGVhbnVwYC4gIEkmIzM5O3ZlIGdvdCB0aGUgdGVzdCBtb2R1bGUgZnVuY3Rpb25zIGFzIHdlbGwgLSBgdmhvc3RfdGVzdF9yZWxlYXNlYCBhbmQgYHZob3N0X3Rlc3RfcmVzZXRfb3duZXJgLgoKVGhlIGV4cG9ydGVkIGZ1bmN0aW9uIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIGxvb2tzIGltcG9ydGFudCwgYnV0IHRoZSBwYXRjaCBtb2RpZmllcyBpdCwgYW5kIHRoZSBzdGF0ZWQgZ29hbCBpcyB0byBhdm9pZCB0aG9zZS4gU28sIGl0JiMzOTtzIG5vdCBnb2luZyB0byBiZSBvbiB0aGUgbGlzdC4KCk9rYXksIEkgdGhpbmsgSSYjMzk7bSBzb2xpZCBvbiB0aGUgZnVuY3Rpb24gbGlzdC4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCBhbmQgd2h5IEkmIzM5O20gc2tpcHBpbmcgaXQuIEl0JiMzOTtzIHRoZSB2c29jayB0cmFuc3BvcnQgQVBJIGVudHJ5IHBvaW50IGNhbGxlZCB3aGVuIGEgcGFja2V0IGlzIHNlbnQsIHNvIGl0IGRvZXMgbWF0dGVyLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgdnNvY2stJmd0O2V2ZXJfc3RhcnRlZGAgd2l0aGluIGl0LCBhbmQgaXQmIzM5O3MgYSBob3QgcGF0aC4gU2luY2UgdGhlIGV4cGxpY2l0IGdvYWwgaXMgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLCBldmVuIHRob3VnaCB0aGlzIG9uZSBpcyBkaXJlY3RseSBtb2RpZmllZCwgSSYjMzk7bSBnb2luZyB0byBvbWl0IGl0LgoKQWxyaWdodCwgdGltZSB0byBkaXN0aWxsIHRoZSByZWFzb25pbmcuIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHN5bmNocm9uaXppbmcgUkNVIHJlYWRlcnMgZHVyaW5nIGBWSE9TVF9SRVNFVF9PV05FUmAgYW5kIGRldmljZSBjbGVhbnVwIGluIHRoZSB2aG9zdCBzdWJzeXN0ZW0uIEl0IHVzZXMgYSBgc3luY2AgcGFyYW1ldGVyIGluIGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIHRvIHdhaXQgZm9yIGxvY2tsZXNzIHdvcmtlcnMgdG8gY29tcGxldGUuIFRoZSB2c29jayBzaWRlIGdldHMgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCB0byBoYW5kbGUgcmVzZXRzLCBwbHVzIHN0YXJ0L3N0b3AgY2hhbmdlcyBmb3IgY29ycmVjdCBiYWNrZW5kIGhhbmRsaW5nLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIGNvcmUgdmhvc3QgbG9naWMgYW5kIHNldmVyYWwgZHJpdmVycyAobmV0LCBzY3NpLCB2ZHBhLCB2c29jaykuIFRoZXkmIzM5O3JlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBpb2N0bHMgYW5kIGZpbGUgb3BlcmF0aW9ucy4KClRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VkhPU1RfTkVUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9kZXZfY2xlYW51cCYjMzQ7LAogICAgJiMzNDt2aG9zdF9kZXZfcmVzZXRfb3duZXImIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZGV2X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZGV2X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3ZkcGFfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3Qgc3Vic3lzdGVtIHRvIHN5bmNocm9uaXplIFJDVSByZWFkZXJzIGR1cmluZyBWSE9TVF9SRVNFVF9PV05FUiBhbmQgZGV2aWNlIGNsZWFudXAuIEl0IGludHJvZHVjZXMgYSBgc3luY2AgcGFyYW1ldGVyIHRvIGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIHRvIHdhaXQgZm9yIGxvY2tsZXNzIHdvcmtlcnMgdG8gZmluaXNoLiBJdCBhbHNvIGFkZHMgYSBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGZ1bmN0aW9uIHRvIGhhbmRsZSBWSE9TVF9SRVNFVF9PV05FUiBmb3IgdnNvY2ssIGFuZCBtb2RpZmllcyB2c29jayBzdGFydC9zdG9wIGxvZ2ljIHRvIGhhbmRsZSBiYWNrZW5kcyBjb3JyZWN0bHkgYWNyb3NzIHJlc2V0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSB2aG9zdCBsb2dpYyBhbmQgbXVsdGlwbGUgdmhvc3QgZHJpdmVycyAobmV0LCBzY3NpLCB2ZHBhLCB2c29jayksIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb2N0bHMgYW5kIGZpbGUgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VkhPU1RfTkVUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7LAogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtFVkVOVEZEJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9kZXZfY2xlYW51cCYjMzQ7LAogICAgJiMzNDt2aG9zdF9kZXZfcmVzZXRfb3duZXImIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZGV2X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfZGV2X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3ZkcGFfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3Qgc3Vic3lzdGVtIHRvIHN5bmNocm9uaXplIFJDVSByZWFkZXJzIGR1cmluZyBWSE9TVF9SRVNFVF9PV05FUiBhbmQgZGV2aWNlIGNsZWFudXAuIEl0IGludHJvZHVjZXMgYSBgc3luY2AgcGFyYW1ldGVyIHRvIGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIHRvIHdhaXQgZm9yIGxvY2tsZXNzIHdvcmtlcnMgdG8gZmluaXNoLiBJdCBhbHNvIGFkZHMgYSBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGZ1bmN0aW9uIHRvIGhhbmRsZSBWSE9TVF9SRVNFVF9PV05FUiBmb3IgdnNvY2ssIGFuZCBtb2RpZmllcyB2c29jayBzdGFydC9zdG9wIGxvZ2ljIHRvIGhhbmRsZSBiYWNrZW5kcyBjb3JyZWN0bHkgYWNyb3NzIHJlc2V0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSB2aG9zdCBsb2dpYyBhbmQgbXVsdGlwbGUgdmhvc3QgZHJpdmVycyAobmV0LCBzY3NpLCB2ZHBhLCB2c29jayksIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb2N0bHMgYW5kIGZpbGUgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjAzOjU2LjE1ODkzNTUwNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODY1NDY5ODIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVkhPU1RfTkVUXCIsXG4gICAgXCJWSE9TVF9TQ1NJXCIsXG4gICAgXCJWSE9TVF9WRFBBXCIsXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiRVZFTlRGRFwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9kZXZfY2xlYW51cFwiLFxuICAgIFwidmhvc3RfZGV2X3Jlc2V0X293bmVyXCIsXG4gICAgXCJ2aG9zdF92c29ja19kZXZfaW9jdGxcIixcbiAgICBcInZob3N0X25ldF9pb2N0bFwiLFxuICAgIFwidmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwidmhvc3Rfc2NzaV9pb2N0bFwiLFxuICAgIFwidmhvc3RfdnNvY2tfZGV2X3JlbGVhc2VcIixcbiAgICBcInZob3N0X25ldF9yZWxlYXNlXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3JlbGVhc2VcIixcbiAgICBcInZob3N0X3ZkcGFfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aG9zdCBzdWJzeXN0ZW0gdG8gc3luY2hyb25pemUgUkNVIHJlYWRlcnMgZHVyaW5nIFZIT1NUX1JFU0VUX09XTkVSIGFuZCBkZXZpY2UgY2xlYW51cC4gSXQgaW50cm9kdWNlcyBhIGBzeW5jYCBwYXJhbWV0ZXIgdG8gYHZob3N0X2Rldl9jbGVhbnVwYCBhbmQgYHZob3N0X2Rldl9yZXNldF9vd25lcmAgdG8gd2FpdCBmb3IgbG9ja2xlc3Mgd29ya2VycyB0byBmaW5pc2guIEl0IGFsc28gYWRkcyBhIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgZnVuY3Rpb24gdG8gaGFuZGxlIFZIT1NUX1JFU0VUX09XTkVSIGZvciB2c29jaywgYW5kIG1vZGlmaWVzIHZzb2NrIHN0YXJ0L3N0b3AgbG9naWMgdG8gaGFuZGxlIGJhY2tlbmRzIGNvcnJlY3RseSBhY3Jvc3MgcmVzZXRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHZob3N0IGxvZ2ljIGFuZCBtdWx0aXBsZSB2aG9zdCBkcml2ZXJzIChuZXQsIHNjc2ksIHZkcGEsIHZzb2NrKSwgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvY3RscyBhbmQgZmlsZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowMzo1Ni4xNTg5NDE5NzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDU2NDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU3ZTYwMzAyMWI2N2JkY2FlOGE0ZmRhN2NkNDYwOTc4MzdkNmU3MzhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTc6MDM6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcXG5pbmRleCAzZTcyYjljNmFmMGNhNC4uZmQwODk0MTJjMDIwOTIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcXG5AQCAtMTQ1Miw3ICsxNDUyLDcgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4gXFx0dmhvc3RfbmV0X3N0b3AobiwgXFx1MDAyNnR4X3NvY2ssIFxcdTAwMjZyeF9zb2NrKTtcXG4gXFx0dmhvc3RfbmV0X2ZsdXNoKG4pO1xcbiBcXHR2aG9zdF9kZXZfc3RvcChcXHUwMDI2bi1cXHUwMDNlZGV2KTtcXG4tXFx0dmhvc3RfZGV2X2NsZWFudXAoXFx1MDAyNm4tXFx1MDAzZWRldik7XFxuK1xcdHZob3N0X2Rldl9jbGVhbnVwKFxcdTAwMjZuLVxcdTAwM2VkZXYsIGZhbHNlKTtcXG4gXFx0dmhvc3RfbmV0X3ZxX3Jlc2V0KG4pO1xcbiBcXHRpZiAodHhfc29jaylcXG4gXFx0XFx0c29ja2ZkX3B1dCh0eF9zb2NrKTtcXG5AQCAtMTY2MSw3ICsxNjYxLDcgQEAgc3RhdGljIGxvbmcgdmhvc3RfbmV0X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF9uZXQgKm4pXFxuIFxcdHZob3N0X25ldF9zdG9wKG4sIFxcdTAwMjZ0eF9zb2NrLCBcXHUwMDI2cnhfc29jayk7XFxuIFxcdHZob3N0X25ldF9mbHVzaChuKTtcXG4gXFx0dmhvc3RfZGV2X3N0b3AoXFx1MDAyNm4tXFx1MDAzZWRldik7XFxuLVxcdHZob3N0X2Rldl9yZXNldF9vd25lcihcXHUwMDI2bi1cXHUwMDNlZGV2LCB1bWVtKTtcXG4rXFx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFxcdTAwMjZuLVxcdTAwM2VkZXYsIHVtZW0sIGZhbHNlKTtcXG4gXFx0dmhvc3RfbmV0X3ZxX3Jlc2V0KG4pO1xcbiBkb25lOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNm4tXFx1MDAzZWRldi5tdXRleCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcXG5pbmRleCA5YTEyNTNiOWQ4YzUwZS4uYjYwMDJiNjRjZjQyODQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xcbkBAIC0yMzUwLDcgKzIzNTAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cy1cXHUwMDNlZGV2Lm11dGV4KTtcXG4gXFx0dmhvc3Rfc2NzaV9jbGVhcl9lbmRwb2ludCh2cywgXFx1MDAyNnQpO1xcbiBcXHR2aG9zdF9kZXZfc3RvcChcXHUwMDI2dnMtXFx1MDAzZWRldik7XFxuLVxcdHZob3N0X2Rldl9jbGVhbnVwKFxcdTAwMjZ2cy1cXHUwMDNlZGV2KTtcXG4rXFx0dmhvc3RfZGV2X2NsZWFudXAoXFx1MDAyNnZzLVxcdTAwM2VkZXYsIGZhbHNlKTtcXG4gXFx0a2ZyZWUodnMtXFx1MDAzZWRldi52cXMpO1xcbiBcXHRrZnJlZSh2cy1cXHUwMDNldnFzKTtcXG4gXFx0a2ZyZWUodnMtXFx1MDAzZW9sZF9pbmZsaWdodCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdGVzdC5jIGIvZHJpdmVycy92aG9zdC90ZXN0LmNcXG5pbmRleCAyNDUxNGM4ZmRlZTQ5NC4uODRlZDllYTgxMjE5ZDMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC90ZXN0LmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Rlc3QuY1xcbkBAIC0xNjMsNyArMTYzLDcgQEAgc3RhdGljIGludCB2aG9zdF90ZXN0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuIFxcdHZob3N0X3Rlc3Rfc3RvcChuLCBcXHUwMDI2cHJpdmF0ZSk7XFxuIFxcdHZob3N0X3Rlc3RfZmx1c2gobik7XFxuIFxcdHZob3N0X2Rldl9zdG9wKFxcdTAwMjZuLVxcdTAwM2VkZXYpO1xcbi1cXHR2aG9zdF9kZXZfY2xlYW51cChcXHUwMDI2bi1cXHUwMDNlZGV2KTtcXG4rXFx0dmhvc3RfZGV2X2NsZWFudXAoXFx1MDAyNm4tXFx1MDAzZWRldiwgZmFsc2UpO1xcbiBcXHRrZnJlZShuLVxcdTAwM2VkZXYudnFzKTtcXG4gXFx0a2ZyZWUobik7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0yMzgsNyArMjM4LDcgQEAgc3RhdGljIGxvbmcgdmhvc3RfdGVzdF9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfdGVzdCAqbilcXG4gXFx0dmhvc3RfdGVzdF9zdG9wKG4sIFxcdTAwMjZwcml2KTtcXG4gXFx0dmhvc3RfdGVzdF9mbHVzaChuKTtcXG4gXFx0dmhvc3RfZGV2X3N0b3AoXFx1MDAyNm4tXFx1MDAzZWRldik7XFxuLVxcdHZob3N0X2Rldl9yZXNldF9vd25lcihcXHUwMDI2bi1cXHUwMDNlZGV2LCB1bWVtKTtcXG4rXFx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFxcdTAwMjZuLVxcdTAwM2VkZXYsIHVtZW0sIGZhbHNlKTtcXG4gZG9uZTpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuaW5kZXggYWM1NTI3NWZhMGQwYWUuLjQyN2M0YTM0ZGIyYzRmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuKysrIGIvZHJpdmVycy92aG9zdC92ZHBhLmNcXG5AQCAtODk4LDcgKzg5OCw3IEBAIHN0YXRpYyBsb25nIHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxcbiBcXHRjYXNlIFZIT1NUX1NFVF9PV05FUjpcXG4gXFx0XFx0ciA9IHZob3N0X3ZkcGFfYmluZF9tbSh2KTtcXG4gXFx0XFx0aWYgKHIpXFxuLVxcdFxcdFxcdHZob3N0X2Rldl9yZXNldF9vd25lcihkLCBOVUxMKTtcXG4rXFx0XFx0XFx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKGQsIE5VTEwsIGZhbHNlKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gb3V0OlxcbkBAIC0xMzk2LDcgKzEzOTYsNyBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NsZWFudXAoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuIFxcdH1cXG4gXFxuIFxcdHZob3N0X3ZkcGFfZnJlZV9kb21haW4odik7XFxuLVxcdHZob3N0X2Rldl9jbGVhbnVwKFxcdTAwMjZ2LVxcdTAwM2V2ZGV2KTtcXG4rXFx0dmhvc3RfZGV2X2NsZWFudXAoXFx1MDAyNnYtXFx1MDAzZXZkZXYsIGZhbHNlKTtcXG4gXFx0a2ZyZWUodi1cXHUwMDNldmRldi52cXMpO1xcbiBcXHR2LVxcdTAwM2V2ZGV2LnZxcyA9IE5VTEw7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXFxuaW5kZXggNGM1MjViM2UxNmVhZDguLmIxODQyOWIxNWQzMjJkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xcbkBAIC03MTksNyArNzE5LDcgQEAgc3RhdGljIHZvaWQgdmhvc3Rfd29ya2VyX2Rlc3Ryb3koc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbiBcXHRrZnJlZSh3b3JrZXIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJzX2ZyZWUoc3RydWN0IHZob3N0X2RldiAqZGV2KVxcbitzdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJzX2ZyZWUoc3RydWN0IHZob3N0X2RldiAqZGV2LCBib29sIHN5bmMpXFxuIHtcXG4gXFx0c3RydWN0IHZob3N0X3dvcmtlciAqd29ya2VyO1xcbiBcXHR1bnNpZ25lZCBsb25nIGk7XFxuQEAgLTcyOSw2ICs3MjksMjEgQEAgc3RhdGljIHZvaWQgdmhvc3Rfd29ya2Vyc19mcmVlKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkZXYtXFx1MDAzZW52cXM7IGkrKylcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cXHUwMDNldnFzW2ldLVxcdTAwM2V3b3JrZXIsIE5VTEwpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBwYXRoIGNhbiBiZSByZWFjaGVkIGJ5IGxvY2tsZXNzIHdvcmsgcXVldWVycy4gIEluIHRoaXMgY2FzZVxcbitcXHQgKiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgcmVhZHMgdnEtXFx1MDAzZXdvcmtlciB1bmRlciByY3VfcmVhZF9sb2NrKCksIHNvIGFcXG4rXFx0ICogUkNVIHJlYWRlciB0aGF0IGZldGNoZWQgYSB3b3JrZXIgYmVmb3JlIHdlIGNsZWFyZWQgdGhlIHBvaW50ZXJzIGFib3ZlXFxuK1xcdCAqIG1heSBzdGlsbCBiZSBxdWV1ZWluZyB3b3JrIG9uIGl0LiAgV2FpdCBmb3IgdGhvc2UgcmVhZGVycyB0byBmaW5pc2gsXFxuK1xcdCAqIHRoZW4gZmx1c2ggc28gYW55IHdvcmsgdGhleSBxdWV1ZWQgcnVucyAoY2xlYXJpbmcgVkhPU1RfV09SS19RVUVVRUQpXFxuK1xcdCAqIGJlZm9yZSB0aGUgd29ya2VycyBhcmUgZnJlZWQuICBOb3RhYmx5LCB0aGF0IGlzIHRoZSBjYXNlIGZvciB0aGVcXG4rXFx0ICogdnNvY2sgUkVTRVRfT1dORVIgcGF0aC5cXG4rXFx0ICovXFxuK1xcdGlmIChzeW5jKSB7XFxuK1xcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbitcXHRcXHR2aG9zdF9kZXZfZmx1c2goZGV2KTtcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogRnJlZSB0aGUgZGVmYXVsdCB3b3JrZXIgd2UgY3JlYXRlZCBhbmQgY2xlYW51cCB3b3JrZXJzIHVzZXJzcGFjZVxcbiBcXHQgKiBjcmVhdGVkIGJ1dCBjb3VsZG4ndCBjbGVhbiB1cCAoaXQgZm9yZ290IG9yIGNyYXNoZWQpLlxcbkBAIC0xMTQ4LDExICsxMTYzLDEyIEBAIHN0cnVjdCB2aG9zdF9pb3RsYiAqdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUodm9pZClcXG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUpO1xcbiBcXG4gLyogQ2FsbGVyIHNob3VsZCBoYXZlIGRldmljZSBtdXRleCAqL1xcbi12b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbSlcXG4rdm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW0sXFxuK1xcdFxcdFxcdCAgIGJvb2wgc3luYylcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdHZob3N0X2Rldl9jbGVhbnVwKGRldik7XFxuK1xcdHZob3N0X2Rldl9jbGVhbnVwKGRldiwgc3luYyk7XFxuIFxcbiBcXHRkZXYtXFx1MDAzZWZvcmtfb3duZXIgPSBmb3JrX2Zyb21fb3duZXJfZGVmYXVsdDtcXG4gXFx0ZGV2LVxcdTAwM2V1bWVtID0gdW1lbTtcXG5AQCAtMTE5Nyw3ICsxMjEzLDcgQEAgdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2NsZWFyX21zZyk7XFxuIFxcbi12b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcXG4rdm9pZCB2aG9zdF9kZXZfY2xlYW51cChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIGJvb2wgc3luYylcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFxuQEAgLTEyMjEsNyArMTIzNyw3IEBAIHZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqZGV2KVxcbiBcXHRkZXYtXFx1MDAzZWlvdGxiID0gTlVMTDtcXG4gXFx0dmhvc3RfY2xlYXJfbXNnKGRldik7XFxuIFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKFxcdTAwMjZkZXYtXFx1MDAzZXdhaXQsIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XFxuLVxcdHZob3N0X3dvcmtlcnNfZnJlZShkZXYpO1xcbitcXHR2aG9zdF93b3JrZXJzX2ZyZWUoZGV2LCBzeW5jKTtcXG4gXFx0dmhvc3RfZGV0YWNoX21tKGRldik7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X2NsZWFudXApO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmggYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmhcXG5pbmRleCAwMTkyYWRlNmU3NDkxMC4uMjlmYjFmNTEwYTM0ZGMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5oXFxuKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5oXFxuQEAgLTIxNiw4ICsyMTYsOSBAQCBsb25nIHZob3N0X2Rldl9zZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2KTtcXG4gYm9vbCB2aG9zdF9kZXZfaGFzX293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldik7XFxuIGxvbmcgdmhvc3RfZGV2X2NoZWNrX293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKik7XFxuIHN0cnVjdCB2aG9zdF9pb3RsYiAqdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUodm9pZCk7XFxuLXZvaWQgdmhvc3RfZGV2X3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgc3RydWN0IHZob3N0X2lvdGxiICppb3RsYik7XFxuLXZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqKTtcXG4rdm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiLFxcbitcXHRcXHRcXHQgICBib29sIHN5bmMpO1xcbit2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKTtcXG4gdm9pZCB2aG9zdF9kZXZfc3RvcChzdHJ1Y3Qgdmhvc3RfZGV2ICopO1xcbiBsb25nIHZob3N0X2Rldl9pb2N0bChzdHJ1Y3Qgdmhvc3RfZGV2ICosIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xcbiBsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcXG5pbmRleCA5YWFhYjZiYjgwNjFjMS4uOTA2Y2VjN2I1YWZkOTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXFxuKysrIGIvZHJpdmVycy92aG9zdC92c29jay5jXFxuQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IHZob3N0X3Zzb2NrIHtcXG4gXFxuIFxcdHUzMiBndWVzdF9jaWQ7XFxuIFxcdGJvb2wgc2VxcGFja2V0X2FsbG93O1xcbitcXHRib29sIGV2ZXJfc3RhcnRlZDsgLyogc2V0IG9uIGZpcnN0IFNFVF9SVU5OSU5HKDEpOyBuZXZlciBjbGVhcmVkICovXFxuIH07XFxuIFxcbiBzdGF0aWMgdTMyIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKHZvaWQpXFxuQEAgLTMwMiwxNyArMzAzLDEyIEBAIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24ndCBlbmFibGVkIHRoZSBSWCB2cSB5ZXQuIFF1ZXVpbmcgdGhlIHBhY2tldFxcbi1cXHQgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdFxcbi1cXHQgKiB3aXRoaW4gdGhlIHRpbWVvdXQsIGl0J2xsIGltbWVkaWF0ZWx5IHJlcGx5IHdpdGggUlNULCBiZWNhdXNlIHRoZXJlJ3Mgbm9cXG4tXFx0ICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0Llxcbi1cXHQgKlxcbi1cXHQgKiB2aG9zdF92cV9nZXRfYmFja2VuZCgpIHdpdGhvdXQgdnEtXFx1MDAzZW11dGV4IGlzIGFjY2VwdGFibGUgaGVyZTogbG9ja2luZ1xcbi1cXHQgKiB0aGUgbXV0ZXggd291bGQgYmUgdG9vIGV4cGVuc2l2ZSBpbiB0aGlzIGhvdCBwYXRoLCBhbmQgd2UgYWxyZWFkeSBoYXZlXFxuLVxcdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcXG4tXFx0ICogdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KCkgd2lsbCBjaGVjayBpdCB1bmRlciB0aGUgbXV0ZXggYW55d2F5LlxcbitcXHQvKiBGYXN0LWZhaWwgdW50aWwgdGhlIGd1ZXN0IGZpcnN0IGVuYWJsZXMgdGhlIGRldmljZSAoU0VUX1JVTk5JTkcoMSkpLlxcbitcXHQgKiBCZWZvcmUgdGhhdCB0aGVyZSBpcyBubyBsaXN0ZW5lciwgc28gcXVldWluZyBpcyBwb2ludGxlc3MuXFxuK1xcdCAqICdldmVyX3N0YXJ0ZWQnIGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UncmUgdXAgd2Uga2VlcCBxdWV1aW5nXFxuK1xcdCAqIGFjcm9zcyBsYXRlciBzdG9wIC8gQ1BSLXBhdXNlIHdpbmRvd3MuXFxuIFxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoIWRhdGFfcmFjZSh2aG9zdF92cV9nZXRfYmFja2VuZChcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9SWF0pKSkpIHtcXG4rXFx0aWYgKHVubGlrZWx5KCFSRUFEX09OQ0UodnNvY2stXFx1MDAzZWV2ZXJfc3RhcnRlZCkpKSB7XFxuIFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XFxuQEAgLTY0MCwxMSArNjM2LDIzIEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RhcnQoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBTZXQgJ2V2ZXJfc3RhcnRlZCcgZmxhZyBvbiB0aGUgZmlyc3Qgc3RhcnQ7IG5ldmVyIGNsZWFyZWQsIHNvIHNlbmRfcGt0XFxuK1xcdCAqIGtlZXBzIHF1ZXVpbmcgKGluc3RlYWQgb2YgZmFzdC1mYWlsaW5nKSBvbiBsYXRlciBzdG9wIC8gQ1BSIHBhdXNlcy5cXG4rXFx0ICovXFxuK1xcdFdSSVRFX09OQ0UodnNvY2stXFx1MDAzZWV2ZXJfc3RhcnRlZCwgdHJ1ZSk7XFxuK1xcbiBcXHQvKiBTb21lIHBhY2tldHMgbWF5IGhhdmUgYmVlbiBxdWV1ZWQgYmVmb3JlIHRoZSBkZXZpY2Ugd2FzIHN0YXJ0ZWQsXFxuIFxcdCAqIGxldCdzIGtpY2sgdGhlIHNlbmQgd29ya2VyIHRvIHNlbmQgdGhlbS5cXG4gXFx0ICovXFxuIFxcdHZob3N0X3ZxX3dvcmtfcXVldWUoXFx1MDAyNnZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdLCBcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3dvcmspO1xcbiBcXG4rXFx0LyogVGhlIGd1ZXN0IG1heSBoYXZlIGFkZGVkIFRYIGJ1ZmZlcnMgd2hpbGUgdGhlIGRldmljZSB3YXMgc3RvcHBlZFxcbitcXHQgKiAoZS5nLiBhY3Jvc3MgVkhPU1RfUkVTRVRfT1dORVIpIGFuZCB0aGVpciBraWNrcyBnb3QgY29uc3VtZWQgYnlcXG4rXFx0ICogdGhlIE5VTEwtYmFja2VuZCB3aW5kb3cuICBSZS1zY2FuIHRoZSBUWCBWUSwgbWlycm9yaW5nIHRoZSBSWFxcbitcXHQgKiBzZW5kLXdvcmtlciBraWNrIGFib3ZlLlxcbitcXHQgKi9cXG4rXFx0dmhvc3RfcG9sbF9xdWV1ZShcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9UWF0ucG9sbCk7XFxuK1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTY2NCw5ICs2NzIsMjQgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcXG4rc3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbiB7XFxuK1xcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xcbiBcXHRzaXplX3QgaTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXFx1MDAzZXZxcyk7IGkrKykge1xcbitcXHRcXHR2cSA9IFxcdTAwMjZ2c29jay1cXHUwMDNldnFzW2ldO1xcbitcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4rXFx0XFx0dmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCB2aG9zdF92c29ja19zdG9wKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIGJvb2wgY2hlY2tfb3duZXIpXFxuK3tcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2Lm11dGV4KTtcXG5AQCAtNjc3LDE0ICs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrLVxcdTAwM2V2cXMpOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tpXTtcXG4tXFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuLVxcdFxcdHZob3N0X3ZxX3NldF9iYWNrZW5kKHZxLCBOVUxMKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbi1cXHR9XFxuLVxcbitcXHR2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzKHZzb2NrKTtcXG4gZXJyOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC03MjAsNiArNzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFxuIFxcdHZzb2NrLVxcdTAwM2VndWVzdF9jaWQgPSAwOyAvKiBubyBDSUQgYXNzaWduZWQgeWV0ICovXFxuIFxcdHZzb2NrLVxcdTAwM2VzZXFwYWNrZXRfYWxsb3cgPSBmYWxzZTtcXG4rXFx0dnNvY2stXFx1MDAzZWV2ZXJfc3RhcnRlZCA9IGZhbHNlO1xcbiBcXG4gXFx0YXRvbWljX3NldChcXHUwMDI2dnNvY2stXFx1MDAzZXF1ZXVlZF9yZXBsaWVzLCAwKTtcXG4gXFxuQEAgLTgwNyw3ICs4MjQsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXG4gXFx0dmlydGlvX3Zzb2NrX3NrYl9xdWV1ZV9wdXJnZShcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3F1ZXVlKTtcXG4gXFxuLVxcdHZob3N0X2Rldl9jbGVhbnVwKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2KTtcXG4rXFx0dmhvc3RfZGV2X2NsZWFudXAoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIGZhbHNlKTtcXG4gXFx0cHV0X25ldF90cmFjayh2c29jay1cXHUwMDNlbmV0LCBcXHUwMDI2dnNvY2stXFx1MDAzZW5zX3RyYWNrZXIpO1xcbiBcXHRrZnJlZSh2c29jay1cXHUwMDNlZGV2LnZxcyk7XFxuIFxcdHZob3N0X3Zzb2NrX2ZyZWUodnNvY2spO1xcbkBAIC04ODYsNiArOTAzLDM2IEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIHU2NCBmZWF0dXJlcylcXG4gXFx0cmV0dXJuIC1FRkFVTFQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBsb25nIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXFxuK3tcXG4rXFx0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xcbitcXHRsb25nIGVycjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbitcXHRlcnIgPSB2aG9zdF9kZXZfY2hlY2tfb3duZXIoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGRvbmU7XFxuK1xcdHVtZW0gPSB2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSgpO1xcbitcXHRpZiAoIXVtZW0pIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBkb25lO1xcbitcXHR9XFxuK1xcdHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHModnNvY2spO1xcbitcXHR2aG9zdF92c29ja19mbHVzaCh2c29jayk7XFxuK1xcdHZob3N0X2Rldl9zdG9wKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHZzb2NrIGtlZXBzIHRoZSBDSUQgaGFzaGVkIGFjcm9zcyBSRVNFVF9PV05FUiwgc28gYSBsb2NrbGVzcyBzZW5kZXJcXG4rXFx0ICogY2FuIHN0aWxsIHJlYWNoIHRoZSBkZXZpY2Ugd2hpbGUgaXRzIHdvcmtlcnMgYXJlIGZyZWVkLiAgUGFzc1xcbitcXHQgKiBzeW5jPXRydWUgc28gdmhvc3Rfd29ya2Vyc19mcmVlKCkgZmVuY2VzIFJDVSByZWFkZXJzIGFuZCBmbHVzaGVzXFxuK1xcdCAqIGJlZm9yZSBmcmVlaW5nIHRoZW0uXFxuK1xcdCAqL1xcbitcXHR2aG9zdF9kZXZfcmVzZXRfb3duZXIoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHVtZW0sIHRydWUpO1xcbitkb25lOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4gXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbkBAIC05MjksNiArOTc2LDggQEAgc3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuIFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0XFx0dmhvc3Rfc2V0X2JhY2tlbmRfZmVhdHVyZXMoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIGZlYXR1cmVzKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGNhc2UgVkhPU1RfUkVTRVRfT1dORVI6XFxuK1xcdFxcdHJldHVybiB2aG9zdF92c29ja19yZXNldF9vd25lcih2c29jayk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRcXHRyID0gdmhvc3RfZGV2X2lvY3RsKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2LCBpb2N0bCwgYXJncCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjAzOjU2LjkyNDI5NjkwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNzg4OTMyNzE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVkhPU1RfTkVUXCIsXG4gICAgXCJWSE9TVF9TQ1NJXCIsXG4gICAgXCJWSE9TVF9WRFBBXCIsXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiRVZFTlRGRFwiLFxuICAgIFwiVkRQQVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9kZXZfY2xlYW51cFwiLFxuICAgIFwidmhvc3RfZGV2X3Jlc2V0X293bmVyXCIsXG4gICAgXCJ2aG9zdF92c29ja19kZXZfaW9jdGxcIixcbiAgICBcInZob3N0X25ldF9pb2N0bFwiLFxuICAgIFwidmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwidmhvc3Rfc2NzaV9pb2N0bFwiLFxuICAgIFwidmhvc3RfdnNvY2tfZGV2X3JlbGVhc2VcIixcbiAgICBcInZob3N0X25ldF9yZWxlYXNlXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3JlbGVhc2VcIixcbiAgICBcInZob3N0X3ZkcGFfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aG9zdCBzdWJzeXN0ZW0gdG8gc3luY2hyb25pemUgUkNVIHJlYWRlcnMgZHVyaW5nIFZIT1NUX1JFU0VUX09XTkVSIGFuZCBkZXZpY2UgY2xlYW51cC4gSXQgaW50cm9kdWNlcyBhIGBzeW5jYCBwYXJhbWV0ZXIgdG8gYHZob3N0X2Rldl9jbGVhbnVwYCBhbmQgYHZob3N0X2Rldl9yZXNldF9vd25lcmAgdG8gd2FpdCBmb3IgbG9ja2xlc3Mgd29ya2VycyB0byBmaW5pc2guIEl0IGFsc28gYWRkcyBhIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgZnVuY3Rpb24gdG8gaGFuZGxlIFZIT1NUX1JFU0VUX09XTkVSIGZvciB2c29jaywgYW5kIG1vZGlmaWVzIHZzb2NrIHN0YXJ0L3N0b3AgbG9naWMgdG8gaGFuZGxlIGJhY2tlbmRzIGNvcnJlY3RseSBhY3Jvc3MgcmVzZXRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIHZob3N0IGxvZ2ljIGFuZCBtdWx0aXBsZSB2aG9zdCBkcml2ZXJzIChuZXQsIHNjc2ksIHZkcGEsIHZzb2NrKSwgYW5kIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGlvY3RscyBhbmQgZmlsZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlN2U2MDMwMjFiNjdiZGNhZThhNGZkYTdjZDQ2MDk3ODM3ZDZlNzM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTc6MDM6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L25ldC5jIGIvZHJpdmVycy92aG9zdC9uZXQuY1xuaW5kZXggM2U3MmI5YzZhZjBjYTQuLmZkMDg5NDEyYzAyMDkyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuY1xuKysrIGIvZHJpdmVycy92aG9zdC9uZXQuY1xuQEAgLTE0NTIsNyArMTQ1Miw3IEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHR2aG9zdF9uZXRfc3RvcChuLCBcdTAwMjZ0eF9zb2NrLCBcdTAwMjZyeF9zb2NrKTtcbiBcdHZob3N0X25ldF9mbHVzaChuKTtcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNm4tXHUwMDNlZGV2KTtcbi1cdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNm4tXHUwMDNlZGV2KTtcbitcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNm4tXHUwMDNlZGV2LCBmYWxzZSk7XG4gXHR2aG9zdF9uZXRfdnFfcmVzZXQobik7XG4gXHRpZiAodHhfc29jaylcbiBcdFx0c29ja2ZkX3B1dCh0eF9zb2NrKTtcbkBAIC0xNjYxLDcgKzE2NjEsNyBAQCBzdGF0aWMgbG9uZyB2aG9zdF9uZXRfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X25ldCAqbilcbiBcdHZob3N0X25ldF9zdG9wKG4sIFx1MDAyNnR4X3NvY2ssIFx1MDAyNnJ4X3NvY2spO1xuIFx0dmhvc3RfbmV0X2ZsdXNoKG4pO1xuIFx0dmhvc3RfZGV2X3N0b3AoXHUwMDI2bi1cdTAwM2VkZXYpO1xuLVx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFx1MDAyNm4tXHUwMDNlZGV2LCB1bWVtKTtcbitcdHZob3N0X2Rldl9yZXNldF9vd25lcihcdTAwMjZuLVx1MDAzZWRldiwgdW1lbSwgZmFsc2UpO1xuIFx0dmhvc3RfbmV0X3ZxX3Jlc2V0KG4pO1xuIGRvbmU6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bi1cdTAwM2VkZXYubXV0ZXgpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbmluZGV4IDlhMTI1M2I5ZDhjNTBlLi5iNjAwMmI2NGNmNDI4NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuQEAgLTIzNTAsNyArMjM1MCw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzLVx1MDAzZWRldi5tdXRleCk7XG4gXHR2aG9zdF9zY3NpX2NsZWFyX2VuZHBvaW50KHZzLCBcdTAwMjZ0KTtcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNnZzLVx1MDAzZWRldik7XG4tXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZ2cy1cdTAwM2VkZXYpO1xuK1x0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2dnMtXHUwMDNlZGV2LCBmYWxzZSk7XG4gXHRrZnJlZSh2cy1cdTAwM2VkZXYudnFzKTtcbiBcdGtmcmVlKHZzLVx1MDAzZXZxcyk7XG4gXHRrZnJlZSh2cy1cdTAwM2VvbGRfaW5mbGlnaHQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdGVzdC5jIGIvZHJpdmVycy92aG9zdC90ZXN0LmNcbmluZGV4IDI0NTE0YzhmZGVlNDk0Li44NGVkOWVhODEyMTlkMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdGVzdC5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Rlc3QuY1xuQEAgLTE2Myw3ICsxNjMsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Rlc3RfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbiBcdHZob3N0X3Rlc3Rfc3RvcChuLCBcdTAwMjZwcml2YXRlKTtcbiBcdHZob3N0X3Rlc3RfZmx1c2gobik7XG4gXHR2aG9zdF9kZXZfc3RvcChcdTAwMjZuLVx1MDAzZWRldik7XG4tXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZuLVx1MDAzZWRldik7XG4rXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZuLVx1MDAzZWRldiwgZmFsc2UpO1xuIFx0a2ZyZWUobi1cdTAwM2VkZXYudnFzKTtcbiBcdGtmcmVlKG4pO1xuIFx0cmV0dXJuIDA7XG5AQCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRpYyBsb25nIHZob3N0X3Rlc3RfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X3Rlc3QgKm4pXG4gXHR2aG9zdF90ZXN0X3N0b3AobiwgXHUwMDI2cHJpdik7XG4gXHR2aG9zdF90ZXN0X2ZsdXNoKG4pO1xuIFx0dmhvc3RfZGV2X3N0b3AoXHUwMDI2bi1cdTAwM2VkZXYpO1xuLVx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFx1MDAyNm4tXHUwMDNlZGV2LCB1bWVtKTtcbitcdHZob3N0X2Rldl9yZXNldF9vd25lcihcdTAwMjZuLVx1MDAzZWRldiwgdW1lbSwgZmFsc2UpO1xuIGRvbmU6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2bi1cdTAwM2VkZXYubXV0ZXgpO1xuIFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5pbmRleCBhYzU1Mjc1ZmEwZDBhZS4uNDI3YzRhMzRkYjJjNGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuKysrIGIvZHJpdmVycy92aG9zdC92ZHBhLmNcbkBAIC04OTgsNyArODk4LDcgQEAgc3RhdGljIGxvbmcgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4gXHRjYXNlIFZIT1NUX1NFVF9PV05FUjpcbiBcdFx0ciA9IHZob3N0X3ZkcGFfYmluZF9tbSh2KTtcbiBcdFx0aWYgKHIpXG4tXHRcdFx0dmhvc3RfZGV2X3Jlc2V0X293bmVyKGQsIE5VTEwpO1xuK1x0XHRcdHZob3N0X2Rldl9yZXNldF9vd25lcihkLCBOVUxMLCBmYWxzZSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIG91dDpcbkBAIC0xMzk2LDcgKzEzOTYsNyBAQCBzdGF0aWMgdm9pZCB2aG9zdF92ZHBhX2NsZWFudXAoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG4gXHR9XG4gXG4gXHR2aG9zdF92ZHBhX2ZyZWVfZG9tYWluKHYpO1xuLVx0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2di1cdTAwM2V2ZGV2KTtcbitcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNnYtXHUwMDNldmRldiwgZmFsc2UpO1xuIFx0a2ZyZWUodi1cdTAwM2V2ZGV2LnZxcyk7XG4gXHR2LVx1MDAzZXZkZXYudnFzID0gTlVMTDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXG5pbmRleCA0YzUyNWIzZTE2ZWFkOC4uYjE4NDI5YjE1ZDMyMmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuQEAgLTcxOSw3ICs3MTksNyBAQCBzdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJfZGVzdHJveShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG4gXHRrZnJlZSh3b3JrZXIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJzX2ZyZWUoc3RydWN0IHZob3N0X2RldiAqZGV2KVxuK3N0YXRpYyB2b2lkIHZob3N0X3dvcmtlcnNfZnJlZShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIGJvb2wgc3luYylcbiB7XG4gXHRzdHJ1Y3Qgdmhvc3Rfd29ya2VyICp3b3JrZXI7XG4gXHR1bnNpZ25lZCBsb25nIGk7XG5AQCAtNzI5LDYgKzcyOSwyMSBAQCBzdGF0aWMgdm9pZCB2aG9zdF93b3JrZXJzX2ZyZWUoc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGV2LVx1MDAzZW52cXM7IGkrKylcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2V2cXNbaV0tXHUwMDNld29ya2VyLCBOVUxMKTtcbitcbitcdC8qXG4rXHQgKiBUaGlzIHBhdGggY2FuIGJlIHJlYWNoZWQgYnkgbG9ja2xlc3Mgd29yayBxdWV1ZXJzLiAgSW4gdGhpcyBjYXNlXG4rXHQgKiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgcmVhZHMgdnEtXHUwMDNld29ya2VyIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc28gYVxuK1x0ICogUkNVIHJlYWRlciB0aGF0IGZldGNoZWQgYSB3b3JrZXIgYmVmb3JlIHdlIGNsZWFyZWQgdGhlIHBvaW50ZXJzIGFib3ZlXG4rXHQgKiBtYXkgc3RpbGwgYmUgcXVldWVpbmcgd29yayBvbiBpdC4gIFdhaXQgZm9yIHRob3NlIHJlYWRlcnMgdG8gZmluaXNoLFxuK1x0ICogdGhlbiBmbHVzaCBzbyBhbnkgd29yayB0aGV5IHF1ZXVlZCBydW5zIChjbGVhcmluZyBWSE9TVF9XT1JLX1FVRVVFRClcbitcdCAqIGJlZm9yZSB0aGUgd29ya2VycyBhcmUgZnJlZWQuICBOb3RhYmx5LCB0aGF0IGlzIHRoZSBjYXNlIGZvciB0aGVcbitcdCAqIHZzb2NrIFJFU0VUX09XTkVSIHBhdGguXG4rXHQgKi9cbitcdGlmIChzeW5jKSB7XG4rXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0XHR2aG9zdF9kZXZfZmx1c2goZGV2KTtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBGcmVlIHRoZSBkZWZhdWx0IHdvcmtlciB3ZSBjcmVhdGVkIGFuZCBjbGVhbnVwIHdvcmtlcnMgdXNlcnNwYWNlXG4gXHQgKiBjcmVhdGVkIGJ1dCBjb3VsZG4ndCBjbGVhbiB1cCAoaXQgZm9yZ290IG9yIGNyYXNoZWQpLlxuQEAgLTExNDgsMTEgKzExNjMsMTIgQEAgc3RydWN0IHZob3N0X2lvdGxiICp2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSh2b2lkKVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Rldl9yZXNldF9vd25lcl9wcmVwYXJlKTtcbiBcbiAvKiBDYWxsZXIgc2hvdWxkIGhhdmUgZGV2aWNlIG11dGV4ICovXG4tdm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW0pXG4rdm9pZCB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW0sXG4rXHRcdFx0ICAgYm9vbCBzeW5jKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0dmhvc3RfZGV2X2NsZWFudXAoZGV2KTtcbitcdHZob3N0X2Rldl9jbGVhbnVwKGRldiwgc3luYyk7XG4gXG4gXHRkZXYtXHUwMDNlZm9ya19vd25lciA9IGZvcmtfZnJvbV9vd25lcl9kZWZhdWx0O1xuIFx0ZGV2LVx1MDAzZXVtZW0gPSB1bWVtO1xuQEAgLTExOTcsNyArMTIxMyw3IEBAIHZvaWQgdmhvc3RfY2xlYXJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfY2xlYXJfbXNnKTtcbiBcbi12b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbit2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKVxuIHtcbiBcdGludCBpO1xuIFxuQEAgLTEyMjEsNyArMTIzNyw3IEBAIHZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqZGV2KVxuIFx0ZGV2LVx1MDAzZWlvdGxiID0gTlVMTDtcbiBcdHZob3N0X2NsZWFyX21zZyhkZXYpO1xuIFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoXHUwMDI2ZGV2LVx1MDAzZXdhaXQsIEVQT0xMSU4gfCBFUE9MTFJETk9STSk7XG4tXHR2aG9zdF93b3JrZXJzX2ZyZWUoZGV2KTtcbitcdHZob3N0X3dvcmtlcnNfZnJlZShkZXYsIHN5bmMpO1xuIFx0dmhvc3RfZGV0YWNoX21tKGRldik7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Rldl9jbGVhbnVwKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmggYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmhcbmluZGV4IDAxOTJhZGU2ZTc0OTEwLi4yOWZiMWY1MTBhMzRkYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaFxuKysrIGIvZHJpdmVycy92aG9zdC92aG9zdC5oXG5AQCAtMjE2LDggKzIxNiw5IEBAIGxvbmcgdmhvc3RfZGV2X3NldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpO1xuIGJvb2wgdmhvc3RfZGV2X2hhc19vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpO1xuIGxvbmcgdmhvc3RfZGV2X2NoZWNrX293bmVyKHN0cnVjdCB2aG9zdF9kZXYgKik7XG4gc3RydWN0IHZob3N0X2lvdGxiICp2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSh2b2lkKTtcbi12b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGIpO1xuLXZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqKTtcbit2b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGIsXG4rXHRcdFx0ICAgYm9vbCBzeW5jKTtcbit2b2lkIHZob3N0X2Rldl9jbGVhbnVwKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgYm9vbCBzeW5jKTtcbiB2b2lkIHZob3N0X2Rldl9zdG9wKHN0cnVjdCB2aG9zdF9kZXYgKik7XG4gbG9uZyB2aG9zdF9kZXZfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdwKTtcbiBsb25nIHZob3N0X3ZyaW5nX2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHVuc2lnbmVkIGludCBpb2N0bCwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdnNvY2suYyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuaW5kZXggOWFhYWI2YmI4MDYxYzEuLjkwNmNlYzdiNWFmZDkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbkBAIC02MSw2ICs2MSw3IEBAIHN0cnVjdCB2aG9zdF92c29jayB7XG4gXG4gXHR1MzIgZ3Vlc3RfY2lkO1xuIFx0Ym9vbCBzZXFwYWNrZXRfYWxsb3c7XG4rXHRib29sIGV2ZXJfc3RhcnRlZDsgLyogc2V0IG9uIGZpcnN0IFNFVF9SVU5OSU5HKDEpOyBuZXZlciBjbGVhcmVkICovXG4gfTtcbiBcbiBzdGF0aWMgdTMyIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKHZvaWQpXG5AQCAtMzAyLDE3ICszMDMsMTIgQEAgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXG4tXHQvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24ndCBlbmFibGVkIHRoZSBSWCB2cSB5ZXQuIFF1ZXVpbmcgdGhlIHBhY2tldFxuLVx0ICogYW5kIG1ha2luZyB0aGUgY2FsbGVyIHdhaXQgaXMgcG9pbnRsZXNzOiBldmVuIGlmIHRoZSBndWVzdCBtYW5hZ2VzIHRvIGluaXRcbi1cdCAqIHdpdGhpbiB0aGUgdGltZW91dCwgaXQnbGwgaW1tZWRpYXRlbHkgcmVwbHkgd2l0aCBSU1QsIGJlY2F1c2UgdGhlcmUncyBub1xuLVx0ICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0LlxuLVx0ICpcbi1cdCAqIHZob3N0X3ZxX2dldF9iYWNrZW5kKCkgd2l0aG91dCB2cS1cdTAwM2VtdXRleCBpcyBhY2NlcHRhYmxlIGhlcmU6IGxvY2tpbmdcbi1cdCAqIHRoZSBtdXRleCB3b3VsZCBiZSB0b28gZXhwZW5zaXZlIGluIHRoaXMgaG90IHBhdGgsIGFuZCB3ZSBhbHJlYWR5IGhhdmVcbi1cdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcbi1cdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cbitcdC8qIEZhc3QtZmFpbCB1bnRpbCB0aGUgZ3Vlc3QgZmlyc3QgZW5hYmxlcyB0aGUgZGV2aWNlIChTRVRfUlVOTklORygxKSkuXG4rXHQgKiBCZWZvcmUgdGhhdCB0aGVyZSBpcyBubyBsaXN0ZW5lciwgc28gcXVldWluZyBpcyBwb2ludGxlc3MuXG4rXHQgKiAnZXZlcl9zdGFydGVkJyBpcyBuZXZlciBjbGVhcmVkLCBzbyBvbmNlIHdlJ3JlIHVwIHdlIGtlZXAgcXVldWluZ1xuK1x0ICogYWNyb3NzIGxhdGVyIHN0b3AgLyBDUFItcGF1c2Ugd2luZG93cy5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KCFkYXRhX3JhY2Uodmhvc3RfdnFfZ2V0X2JhY2tlbmQoXHUwMDI2dnNvY2stXHUwMDNldnFzW1ZTT0NLX1ZRX1JYXSkpKSkge1xuK1x0aWYgKHVubGlrZWx5KCFSRUFEX09OQ0UodnNvY2stXHUwMDNlZXZlcl9zdGFydGVkKSkpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcbkBAIC02NDAsMTEgKzYzNiwyMyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0YXJ0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHR9XG4gXG4rXHQvKiBTZXQgJ2V2ZXJfc3RhcnRlZCcgZmxhZyBvbiB0aGUgZmlyc3Qgc3RhcnQ7IG5ldmVyIGNsZWFyZWQsIHNvIHNlbmRfcGt0XG4rXHQgKiBrZWVwcyBxdWV1aW5nIChpbnN0ZWFkIG9mIGZhc3QtZmFpbGluZykgb24gbGF0ZXIgc3RvcCAvIENQUiBwYXVzZXMuXG4rXHQgKi9cbitcdFdSSVRFX09OQ0UodnNvY2stXHUwMDNlZXZlcl9zdGFydGVkLCB0cnVlKTtcbitcbiBcdC8qIFNvbWUgcGFja2V0cyBtYXkgaGF2ZSBiZWVuIHF1ZXVlZCBiZWZvcmUgdGhlIGRldmljZSB3YXMgc3RhcnRlZCxcbiBcdCAqIGxldCdzIGtpY2sgdGhlIHNlbmQgd29ya2VyIHRvIHNlbmQgdGhlbS5cbiBcdCAqL1xuIFx0dmhvc3RfdnFfd29ya19xdWV1ZShcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdLCBcdTAwMjZ2c29jay1cdTAwM2VzZW5kX3BrdF93b3JrKTtcbiBcbitcdC8qIFRoZSBndWVzdCBtYXkgaGF2ZSBhZGRlZCBUWCBidWZmZXJzIHdoaWxlIHRoZSBkZXZpY2Ugd2FzIHN0b3BwZWRcbitcdCAqIChlLmcuIGFjcm9zcyBWSE9TVF9SRVNFVF9PV05FUikgYW5kIHRoZWlyIGtpY2tzIGdvdCBjb25zdW1lZCBieVxuK1x0ICogdGhlIE5VTEwtYmFja2VuZCB3aW5kb3cuICBSZS1zY2FuIHRoZSBUWCBWUSwgbWlycm9yaW5nIHRoZSBSWFxuK1x0ICogc2VuZC13b3JrZXIga2ljayBhYm92ZS5cbitcdCAqL1xuK1x0dmhvc3RfcG9sbF9xdWV1ZShcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfVFhdLnBvbGwpO1xuK1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gMDtcbiBcbkBAIC02NjQsOSArNjcyLDI0IEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RhcnQoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKVxuK3N0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcbiB7XG4rXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcbiBcdHNpemVfdCBpO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh2c29jay1cdTAwM2V2cXMpOyBpKyspIHtcbitcdFx0dnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbaV07XG4rXG4rXHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuK1x0XHR2aG9zdF92cV9zZXRfYmFja2VuZCh2cSwgTlVMTCk7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKVxuK3tcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuQEAgLTY3NywxNCArNzAwLDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdG9wKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIGJvb2wgY2hlY2tfb3duZXIpXG4gXHRcdFx0Z290byBlcnI7XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrLVx1MDAzZXZxcyk7IGkrKykge1xuLVx0XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tpXTtcbi1cbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4tXHRcdHZob3N0X3ZxX3NldF9iYWNrZW5kKHZxLCBOVUxMKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbi1cdH1cbi1cbitcdHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHModnNvY2spO1xuIGVycjpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuIFx0cmV0dXJuIHJldDtcbkBAIC03MjAsNiArNzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcbiBcdHZzb2NrLVx1MDAzZWd1ZXN0X2NpZCA9IDA7IC8qIG5vIENJRCBhc3NpZ25lZCB5ZXQgKi9cbiBcdHZzb2NrLVx1MDAzZXNlcXBhY2tldF9hbGxvdyA9IGZhbHNlO1xuK1x0dnNvY2stXHUwMDNlZXZlcl9zdGFydGVkID0gZmFsc2U7XG4gXG4gXHRhdG9taWNfc2V0KFx1MDAyNnZzb2NrLVx1MDAzZXF1ZXVlZF9yZXBsaWVzLCAwKTtcbiBcbkBAIC04MDcsNyArODI0LDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcbiBcdHZpcnRpb192c29ja19za2JfcXVldWVfcHVyZ2UoXHUwMDI2dnNvY2stXHUwMDNlc2VuZF9wa3RfcXVldWUpO1xuIFxuLVx0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2dnNvY2stXHUwMDNlZGV2KTtcbitcdHZob3N0X2Rldl9jbGVhbnVwKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgZmFsc2UpO1xuIFx0cHV0X25ldF90cmFjayh2c29jay1cdTAwM2VuZXQsIFx1MDAyNnZzb2NrLVx1MDAzZW5zX3RyYWNrZXIpO1xuIFx0a2ZyZWUodnNvY2stXHUwMDNlZGV2LnZxcyk7XG4gXHR2aG9zdF92c29ja19mcmVlKHZzb2NrKTtcbkBAIC04ODYsNiArOTAzLDM2IEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIHU2NCBmZWF0dXJlcylcbiBcdHJldHVybiAtRUZBVUxUO1xuIH1cbiBcbitzdGF0aWMgbG9uZyB2aG9zdF92c29ja19yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuK3tcbitcdHN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbTtcbitcdGxvbmcgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuK1x0ZXJyID0gdmhvc3RfZGV2X2NoZWNrX293bmVyKFx1MDAyNnZzb2NrLVx1MDAzZWRldik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGRvbmU7XG4rXHR1bWVtID0gdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUoKTtcbitcdGlmICghdW1lbSkge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGRvbmU7XG4rXHR9XG4rXHR2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzKHZzb2NrKTtcbitcdHZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTtcbitcdHZob3N0X2Rldl9zdG9wKFx1MDAyNnZzb2NrLVx1MDAzZWRldik7XG4rXG4rXHQvKlxuK1x0ICogdnNvY2sga2VlcHMgdGhlIENJRCBoYXNoZWQgYWNyb3NzIFJFU0VUX09XTkVSLCBzbyBhIGxvY2tsZXNzIHNlbmRlclxuK1x0ICogY2FuIHN0aWxsIHJlYWNoIHRoZSBkZXZpY2Ugd2hpbGUgaXRzIHdvcmtlcnMgYXJlIGZyZWVkLiAgUGFzc1xuK1x0ICogc3luYz10cnVlIHNvIHZob3N0X3dvcmtlcnNfZnJlZSgpIGZlbmNlcyBSQ1UgcmVhZGVycyBhbmQgZmx1c2hlc1xuK1x0ICogYmVmb3JlIGZyZWVpbmcgdGhlbS5cbitcdCAqL1xuK1x0dmhvc3RfZGV2X3Jlc2V0X293bmVyKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgdW1lbSwgdHJ1ZSk7XG4rZG9uZTpcbitcdG11dGV4X3VubG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gc3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbkBAIC05MjksNiArOTc2LDggQEAgc3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4gXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0XHR2aG9zdF9zZXRfYmFja2VuZF9mZWF0dXJlcyhcdTAwMjZ2c29jay1cdTAwM2VkZXYsIGZlYXR1cmVzKTtcbiBcdFx0cmV0dXJuIDA7XG4rXHRjYXNlIFZIT1NUX1JFU0VUX09XTkVSOlxuK1x0XHRyZXR1cm4gdmhvc3RfdnNvY2tfcmVzZXRfb3duZXIodnNvY2spO1xuIFx0ZGVmYXVsdDpcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuIFx0XHRyID0gdmhvc3RfZGV2X2lvY3RsKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgaW9jdGwsIGFyZ3ApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDM6NTYuOTI0Mjk3OTQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcwNzIyNjUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogdmhvc3QgU3Vic3lzdGVtIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBzb21lIHRhcmdldGVkIGNoYW5nZXMgd2l0aGluIHRoZSB2aG9zdCBzdWJzeXN0ZW0uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0IHNlZW1zIGxpa2UgYSBmYWlybHkgZm9jdXNlZCBzZXQgb2YgdXBkYXRlcywgc28gbGV0J3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIGFkZGluZyBhIGBib29sIHN5bmNgIHBhcmFtZXRlciB0byBgdmhvc3RfZGV2X2NsZWFudXBgIGFuZCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCwgYW5kIHRoZW4gaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCwgd2hpY2ggbGV2ZXJhZ2VzIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIHdpdGggYHN5bmM9dHJ1ZWAuIEl0J3MgYWxzbyB0b3VjaGluZyBgdmhvc3RfdnNvY2tfc3RhcnRgIGFuZCBgdmhvc3RfdnNvY2tfc3RvcGAgYW5kIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgLlxuXG5JIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2Ygdmhvc3QtcmVsYXRlZCBmaWxlczogYG5ldC5jYCwgYHNjc2kuY2AsIGB0ZXN0LmNgLCBgdmRwYS5jYCwgYHZob3N0LmNgLCBgdmhvc3QuaGAsIGFuZCBgdnNvY2suY2AuIFRoYXQncyBhIGdvb2QgYnJlYWR0aCBvZiBjb3ZlcmFnZSwgd2hpY2ggc3VnZ2VzdHMgdGhlIHNjb3BlIGlzIHBvdGVudGlhbGx5IGJyb2FkZXIgdGhhbiBqdXN0IG9uZSBzcGVjaWZpYyBhcmVhLiBOb3csIGl0IGRhd25zIG9uIG1lIHdoYXQgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBpcyBkb2luZy4gVGhpcyBuZXcgZnVuY3Rpb24gc2VlbXMgdG8gYmUgaGFuZGxpbmcgdGhlIGBWSE9TVF9SRVNFVF9PV05FUmAgaW9jdGwgc3BlY2lmaWNhbGx5IGZvciB2c29jay4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHRoZSBpb2N0bCB1c2VkIHRvIGJlIGhhbmRsZWQgZGlyZWN0bHkgYnkgYHZob3N0X2Rldl9pb2N0bGAuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdC4uLiBZZXMsIGEgcXVpY2sgbG9vayBhdCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCB2ZXJpZmllcyB0aGF0OiB0aGUgaW9jdGwgY2FzZSBoYXMgYmVlbiByZXBsYWNlZC5cblxuT2gsIGFuZCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIGluIGB2c29jay5jYC4gVGhhdCBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBzdWJ0bGUgbG9naWMgdXBkYXRlOiB0aGV5J3ZlIHJlcGxhY2VkIGEgY2hlY2sgd2l0aCBhbiBhdG9taWMgY2hlY2suIEkgdGhpbmsgSSBzZWUgd2hhdCdzIGdvaW5nIG9uIGhlcmUgLSB0aGlzICppcyogcmVhY2hhYmxlIHdpdGhpbiBhIFZNLiBUaGlzIGRlZmluaXRlbHkgbWFrZXMgdGhpcyBwYXRjaCB3b3J0aCBmdXp6aW5nLCBzbyBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC5cblxuT2theSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBoZXJlLiBJJ20gZm9jdXNpbmcgb246XG5cbiogICBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgXG4qICAgYHZob3N0X3Zzb2NrX3N0YXJ0YFxuKiAgIGB2aG9zdF92c29ja19zdG9wYFxuKiAgIGB2aG9zdF92c29ja19kZXZfaW9jdGxgXG4qICAgYHZob3N0X2Rldl9yZXNldF9vd25lcmBcbiogICBgdmhvc3RfZGV2X2NsZWFudXBgXG4qICAgYHZob3N0X3dvcmtlcnNfZnJlZWBcblxuRmluYWxseSwgbGV0J3Mgc2VlIGFib3V0IGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gQmFzZWQgb24gdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgaXQgbG9va3MgbGlrZSBgQ09ORklHX1ZIT1NUX1ZTT0NLYCwgYENPTkZJR19WSE9TVF9ORVRgLCBgQ09ORklHX1ZIT1NUX1NDU0lgLCBhbmQgYENPTkZJR19WSE9TVF9WRFBBYCBhcmUgbmVlZGVkLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYnkgZ3JlcHBpbmcgS2NvbmZpZyBmb3IgYFZIT1NUX1ZTT0NLYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjA1LjYzMTUyNzE1NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM5OTY5ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX1ZTT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDowNS44OTU1MzQyNjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM5NzMzMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBWSE9TVF9WU09DSyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gdGhlIGBWSE9TVF9WU09DS2AgbGFuZHNjYXBlLiBJdCdzIHRvbyBlYXN5IHRvIGp1bXAgaW4gYW5kIGFzc3VtZSBJJ3ZlIGdvdCBldmVyeXRoaW5nIGNvdmVyZWQsIGVzcGVjaWFsbHkgd2l0aCB0aGVzZSB2aXJ0dWFsIG5ldHdvcmtpbmcgc3RhY2tzLiBTbywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkxldCdzICp2ZXJpZnkqIHRob3NlIGRlcGVuZGVuY2llcy5cIiBUaGlzIGlzbid0IGp1c3QgYSBtZW50YWwgbm90ZTsgaXQncyBhICpwcm9hY3RpdmUqIHN0ZXAuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBvdmVybG9va2luZyBldmVuIGEgc2VlbWluZ2x5IG1pbm9yIGRlcGVuZGVuY3kgY2FuIGxlYWQgdG8gaG91cnMgb2YgZGVidWdnaW5nIGxhdGVyIG9uLiBUaGlzIGNoZWNrIHNob3VsZCBlbmNvbXBhc3MgdGhlIGtlcm5lbCBtb2R1bGVzLCB0aGUgdXNlcnNwYWNlIGxpYnJhcmllcywgZXZlbiB0aGUgaHlwZXJ2aXNvciBzaWRlIG9mIHRoaW5ncyBpZiB0aGlzIGlzIHJlbGV2YW50IHRvIHRoZSBzeXN0ZW0gY29udGV4dC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgYnVpbGRpbmcgYmxvY2tzLCB0aGUgbGF5ZXJzIGludm9sdmVkLCBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4NiwiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjA5LjAzNTI3MDEwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg2NDcwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX1ZTT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9NDY9Y29uZmlnIFZIT1NUX1NDU0lcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01NS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTY6Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDowOS4zMjM5MjIxNTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU2OlxcdGNvbmZpZyBWSE9TVF9WU09DS1xcbiAgNTc6XFx0XFx0dHJpc3RhdGUgXFxcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcXFwiXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG4gIDU5OlxcdFxcdHNlbGVjdCBWSE9TVFxcbiAgNjA6XFx0XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG4gIDYxOlxcdFxcdGRlZmF1bHQgblxcbiAgNjI6XFx0XFx0aGVscFxcbiAgNjM6XFx0XFx0VGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgQUZfVlNPQ0tcXG4gIDY0OlxcdFxcdHNvY2tldHMgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBndWVzdHMuICBUaGUgZ3Vlc3RzIG11c3QgaGF2ZSB0aGVcXG4gIDY1OlxcdFxcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjA5LjMyNDAzMzkwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODY5MzA1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSB0ZWNobm9sb2dpZXM6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFZpcnR1YWxpemF0aW9uIEluZnJhc3RydWN0dXJlIENvbXBvbmVudHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb21wb25lbnRzOiBgVkhPU1RfVlNPQ0tgLCBgVlNPQ0tFVFNgLCBhbmQgYEVWRU5URkRgLiBJIGtub3cgdGhlbSwgYnV0IGxldCBtZSBxdWlja2x5IGpvZyBteSBtZW1vcnkgYW5kIHNlZSBob3cgdGhleSBhcmUgcmVsYXRlZC4gR2l2ZW4gdGhhdCBjb250ZXh0LCBsZXQncyBub3cgY29uc2lkZXIgdGhlIHJvbGUgb2YgYFZIT1NUX05FVGAgaW4gdGhpcyBsYW5kc2NhcGUuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQsIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgdGhlIGFyY2hpdGVjdHVyZSBJJ20gaW1hZ2luaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTExLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDQ6MTEuOTEwOTY4Nzk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgVkhPU1RfSU9UTEJcXG4gICAzOlxcdFxcdHRyaXN0YXRlXFxuICAgNDpcXHRcXHRoZWxwXFxuICAgNTpcXHRcXHQgIEdlbmVyaWMgSU9UTEIgaW1wbGVtZW50YXRpb24gZm9yIHZob3N0IGFuZCB2cmluZ2guXFxuICAgNjpcXHRcXHQgIFRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkIGJ5IGFueSBkcml2ZXIgd2hpY2ggbmVlZHMgdG8gc3VwcG9ydFxcbiAgIDc6XFx0XFx0ICBhbiBJT01NVSBpbiBzb2Z0d2FyZS5cXG4gICA4OlxcdFxcbiAgIDk6XFx0Y29uZmlnIFZIT1NUX1JJTkdcXG4gIDEwOlxcdFxcdHRyaXN0YXRlXFxuICAxMTpcXHRcXHRzZWxlY3QgVkhPU1RfSU9UTEJcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYW55IGRyaXZlciB3aGljaCBuZWVkcyB0byBhY2Nlc3NcXG4gIDE0OlxcdFxcdCAgdGhlIGhvc3Qgc2lkZSBvZiBhIHZpcnRpbyByaW5nLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRjb25maWcgVkhPU1RfVEFTS1xcbiAgMTc6XFx0XFx0Ym9vbFxcbiAgMTg6XFx0XFx0ZGVmYXVsdCBuXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBWSE9TVFxcbiAgMjE6XFx0XFx0dHJpc3RhdGVcXG4gIDIyOlxcdFxcdHNlbGVjdCBWSE9TVF9JT1RMQlxcbiAgMjM6XFx0XFx0c2VsZWN0IFZIT1NUX1RBU0tcXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYW55IGRyaXZlciB3aGljaCBuZWVkcyB0byBhY2Nlc3NcXG4gIDI2OlxcdFxcdCAgdGhlIGNvcmUgb2Ygdmhvc3QuXFxuICAyNzpcXHRcXG4gIDI4OlxcdG1lbnVjb25maWcgVkhPU1RfTUVOVVxcbiAgMjk6XFx0XFx0Ym9vbCBcXFwiVkhPU1QgZHJpdmVyc1xcXCJcXG4gIDMwOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzE6XFx0XFxuICAzMjpcXHRpZiBWSE9TVF9NRU5VXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBWSE9TVF9ORVRcXG4gIDM1OlxcdFxcdHRyaXN0YXRlIFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCJcXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IEVWRU5URkQgXFx1MDAyNlxcdTAwMjYgKFRVTiB8fCAhVFVOKSBcXHUwMDI2XFx1MDAyNiAoVEFQIHx8ICFUQVApXFxuICAzNzpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxcbiAgNDA6XFx0XFx0ICBndWVzdCBuZXR3b3JraW5nIHdpdGggdmlydGlvX25ldC4gTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdmlydGlvX25ldFxcbiAgNDE6XFx0XFx0ICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuXFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICA0NDpcXHRcXHQgIGJlIGNhbGxlZCB2aG9zdF9uZXQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBWSE9TVF9TQ1NJXFxuICA0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbiAgNDk6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA1MDpcXHRcXHRzZWxlY3QgU0dfUE9PTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDoxMS45MTEwNDI0NDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyNjMwODczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogVkhPU1RfVkRQQSBDaGVjayoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIGltcHVsc2UgaGVyZSBpcyB0byB6ZXJvIGluIG9uIGBWSE9TVF9WRFBBYC4gSXQncyBhIGtleSBhcmVhIHRvIGV4YW1pbmUsIGxpa2VseSByZWxhdGVkIHRvIHZpcnR1YWxpemVkIGRldmljZXMgYW5kIHRoZSB2RFBBIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgZXN0YWJsaXNoIGEgYmFzZWxpbmU6IHdoYXQncyBwcm9tcHRpbmcgdGhpcyBjaGVjaz9cIiBJcyBpdCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgYSBzdXNwZWN0ZWQgYnVnLCBhIG5ldyBjb25maWd1cmF0aW9uLCBvciBwZXJoYXBzIGEgc2VjdXJpdHkgYXVkaXQ/XG5cblRoZSBwcmVzZW5jZSBvZiBgVkhPU1RfVkRQQWAgaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUuIFdlJ3JlIGRlYWxpbmcgd2l0aCB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnRzIHVzaW5nIHZEUEEg4oCTIGxpa2VseSBpbiBhIGRhdGEgY2VudGVyIG9yIGNsb3VkIHNldHRpbmcuIFdlIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSB2aG9zdCBkZXZpY2UgaXMgY29uZmlndXJlZCwgdGhlIHZpcnRpbyB0cmFuc3BvcnQgYW5kIHRoZSBvdmVyYWxsIHJlc291cmNlIGFsbG9jYXRpb24uIElzIHRoZXJlIGEgc3BlY2lmaWMgdmlydHVhbCBmdW5jdGlvbiBJIHNob3VsZCBiZSBsb29raW5nIGF0IGZpcnN0LCBvciBzcGVjaWZpYyBkcml2ZXJzIGJlaW5nIGVtcGxveWVkPyBBcmUgd2UgcG90ZW50aWFsbHkgYnVtcGluZyBpbnRvIGFuIGlzc3VlIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0aW9uPyBPciBhbSBJIHNpbXBseSB2ZXJpZnlpbmcgdGhhdCB2RFBBIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LCBhY2NvcmRpbmcgdG8gYmVzdCBwcmFjdGljZXM/XG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29udGV4dDogdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSwgdGhlIGh5cGVydmlzb3IsIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbmQgdGhlIHNwZWNpZmljIHZpcnR1YWwgbWFjaGluZXMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25zIHRvIGRldGVybWluZSB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjE1LjgzNzM2MDgyMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjY6XFx0XFxuICA2NzpcXHRcXHRUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICA2ODpcXHRcXHR2aG9zdF92c29jay5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0Y29uZmlnIFZIT1NUX1ZEUEFcXG4gIDcxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFxcXCJcXG4gIDcyOlxcdFxcdGRlcGVuZHMgb24gRVZFTlRGRFxcbiAgNzM6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA3NDpcXHRcXHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXFxuICA3NTpcXHRcXHRkZXBlbmRzIG9uIFZEUEFcXG4gIDc2OlxcdFxcdGhlbHBcXG4gIDc3OlxcdFxcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxcbiAgNzg6XFx0XFx0ICBndWVzdCB2aXJ0aW8gZGV2aWNlcyB3aXRoIHRoZSB2RFBBLWJhc2VkIGJhY2tlbmRzLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDgxOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdmhvc3RfdmRwYS5cXG4gIDgyOlxcdFxcbiAgODM6XFx0Y29uZmlnIFZIT1NUX0NST1NTX0VORElBTl9MRUdBQ1lcXG4gIDg0OlxcdFxcdGJvb2wgXFxcIkNyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFxcXCJcXG4gIDg1OlxcdFxcdGRlZmF1bHQgblxcbiAgODY6XFx0XFx0aGVscFxcbiAgODc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhbGxvd3Mgdmhvc3QgdG8gc3VwcG9ydCBndWVzdHMgd2l0aCBhIGRpZmZlcmVudCBieXRlXFxuICA4ODpcXHRcXHQgIG9yZGVyaW5nIGZyb20gaG9zdCB3aGlsZSB1c2luZyBsZWdhY3kgdmlydGlvLlxcbiAgODk6XFx0XFxuICA5MDpcXHRcXHQgIFVzZXJzcGFjZSBwcm9ncmFtcyBjYW4gY29udHJvbCB0aGUgZmVhdHVyZSB1c2luZyB0aGVcXG4gIDkxOlxcdFxcdCAgVkhPU1RfU0VUX1ZSSU5HX0VORElBTiBhbmQgVkhPU1RfR0VUX1ZSSU5HX0VORElBTiBpb2N0bHMuXFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdCAgVGhpcyBpcyBvbmx5IHVzZWZ1bCBvbiBhIGZldyBwbGF0Zm9ybXMgKHBwYzY0IGFuZCBhcm02NCkuIFNpbmNlIGl0XFxuICA5NDpcXHRcXHQgIGFkZHMgc29tZSBvdmVyaGVhZCwgaXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiTlxcXCIuXFxuICA5NzpcXHRcXG4gIDk4OlxcdGNvbmZpZyBWSE9TVF9FTkFCTEVfRk9SS19PV05FUl9DT05UUk9MXFxuICA5OTpcXHRcXHRib29sIFxcXCJFbmFibGUgVkhPU1RfRU5BQkxFX0ZPUktfT1dORVJfQ09OVFJPTFxcXCJcXG4gMTAwOlxcdFxcdGRlZmF1bHQgeVxcbiAxMDE6XFx0XFx0aGVscFxcbiAxMDI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHR3byBJT0NUTHM6IFZIT1NUX1NFVF9GT1JLX0ZST01fT1dORVIgYW5kXFxuIDEwMzpcXHRcXHQgIFZIT1NUX0dFVF9GT1JLX0ZST01fT1dORVIuIFRoZXNlIGFsbG93IHVzZXJzcGFjZSBhcHBsaWNhdGlvbnNcXG4gMTA0OlxcdFxcdCAgdG8gbW9kaWZ5IHRoZSB2aG9zdCB3b3JrZXIgbW9kZSBmb3Igdmhvc3QgZGV2aWNlcy5cXG4gMTA1OlxcdFxcbiAxMDY6XFx0XFx0ICBBbHNvIGV4cG9zZSBtb2R1bGUgcGFyYW1ldGVyICdmb3JrX2Zyb21fb3duZXJfZGVmYXVsdCcgdG8gYWxsb3cgdXNlcnNcXG4gMTA3OlxcdFxcdCAgdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IG1vZGUgZm9yIHZob3N0IHdvcmtlcnMuXFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdCAgQnkgZGVmYXVsdCwgYFZIT1NUX0VOQUJMRV9GT1JLX09XTkVSX0NPTlRST0xgIGlzIHNldCB0byBgeWAsXFxuIDExMDpcXHRcXHQgIHVzZXJzIGNhbiBjaGFuZ2UgdGhlIHdvcmtlciB0aHJlYWQgbW9kZSBhcyBuZWVkZWQuXFxuIDExMTpcXHRcXHQgIElmIHRoaXMgY29uZmlnIGlzIGRpc2FibGVkIChuKSx0aGUgcmVsYXRlZCBJT0NUTHMgYW5kIHBhcmFtZXRlcnMgd2lsbFxcbiAxMTI6XFx0XFx0ICBiZSB1bmF2YWlsYWJsZS5cXG4gMTEzOlxcdFxcbiAxMTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiWVxcXCIuXFxuIDExNTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDQ6MTUuODM3NDM2NzEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwOTc4NDgxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdCBQYXRjaCBmb3IgRW5oYW5jZWQgVGVzdGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgdG91Y2hpbmcgc29tZSBwcmV0dHkga2V5IGFyZWFzOiBgZHJpdmVycy92aG9zdC92aG9zdC5jYCDigJMgc3BlY2lmaWNhbGx5IGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIOKAkyBhbmQgdGhlbiBgZHJpdmVycy92aG9zdC92c29jay5jYCB3aXRoIGEgbW9kaWZpY2F0aW9uIHRvIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAuIFRoaXMgc2NyZWFtcyBgVkhPU1RfVlNPQ0tgIGFzIHRoZSBwcmltYXJ5IGZvY3VzLCBidXQgdGhlIGNoYW5nZXMgaW4gdGhlIGNvcmUgdmhvc3QgZmlsZSBtZWFuIHdlIGFsc28gaGF2ZSB0byBjb25zaWRlciBgVkhPU1RfTkVUYCwgYFZIT1NUX1NDU0lgLCBhbmQgYFZIT1NUX1ZEUEFgLiBUaGVzZSBhbGwgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgRW5hYmxlQ29uZmlncy4gSSdsbCBhbHNvIGFkZCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAgYXMgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gc2VsZWN0aW5nIHNvbWUgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9scyBmb3IgdGVzdGluZy4gSSd2ZSBnb3QgYSBsaXN0IGhlcmU6IGB2aG9zdF92c29ja19yZXNldF9vd25lcmAsIGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19zdG9wYCwgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLCBgdmhvc3RfZGV2X2NsZWFudXBgLCBgdmhvc3Rfd29ya2Vyc19mcmVlYCwgYW5kIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgLlxuXG5BbHJpZ2h0LCBsZXQncyB0aGluayBjcml0aWNhbGx5IGFib3V0IHRoZXNlLiBGaXJzdCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAuIEhtbSwgaXQncyBhbiBBUEkgZW50cnkgcG9pbnQgZm9yIHZzb2NrIHRyYW5zcG9ydCwgc28gaW5pdGlhbGx5IGl0IGxvb2tzIGdvb2QuIEJ1dCB3YWl0LCBpdCdzIGEgaG90LXBhdGggZnVuY3Rpb24hIEFuZCBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBrZWVwIHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbiBmcm9tIGJlaW5nIHNrZXdlZC4gU2NyYXRjaCB0aGF0LlxuXG5TbywgSSdtIGxpa2luZyBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGFzIGEgc29saWQgY2FuZGlkYXRlLiBBbHNvLCBgdmhvc3RfdnNvY2tfc3RhcnRgIGFuZCBgdmhvc3RfdnNvY2tfc3RvcGAgYXJlIHByb21pc2luZy4gVGhlbiB0aGUgY29yZSB2aG9zdCBmdW5jdGlvbnMsIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIGFuZCBgdmhvc3RfZGV2X2NsZWFudXBgLCBhcmUgZGVmaW5pdGVseSB3b3J0aCBjb25zaWRlcmluZy4gTm93LCBgdmhvc3Rfd29ya2Vyc19mcmVlYCBpcyBzdGF0aWMuLi4gdGhhdCdzIGEgbm8tZ28uIE5vIG5lZWQgdG8gZ28gdGhlcmUuXG5cbk9rYXksIGxldCdzIGp1c3QgZG91YmxlLWNoZWNrLCBmb3IgZ29vZCBtZWFzdXJlLCB0aGF0IGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgYW5kIGB2aG9zdF92c29ja19zdGFydGAgYXJlIHRoZSByaWdodCBjaG9pY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjIyLjkzNTI4NzczNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3NTAwMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3Zzb2NrX3Jlc2V0X293bmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9ODcxPXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIHU2NCBmZWF0dXJlcylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05MDUtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjkwNjpzdGF0aWMgbG9uZyB2aG9zdF92c29ja19yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05MDcte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTkzNj1zdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NzktXFx0Y2FzZSBWSE9TVF9SRVNFVF9PV05FUjpcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6OTgwOlxcdFxcdHJldHVybiB2aG9zdF92c29ja19yZXNldF9vd25lcih2c29jayk7XFxuZHJpdmVycy92aG9zdC92c29jay5jLTk4MS1cXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDoyMy4yMTI3OTM0NTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NTkwMzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqRXhhbWluaW5nIHZob3N0LXZzb2NrIEFQSSBEZXNpZ24qKlxuXG5Pa2F5LCBzbyBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSG1tLCB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgcmVjYWxsIGEgcHJlZmVyZW5jZSBmb3IgbW9yZSBmbGV4aWJsZSBBUEkgZGVzaWduLCBhbmQgYSBzdHlsZSBndWlkZSBpdGVtIG9mdGVuIHN1cmZhY2VzIGluIG15IG1lbW9yeSwgc3BlY2lmaWNhbGx5OiBcIlByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy5cIiBUaGF0J3MgdGhlIHdheSBJIHVzdWFsbHkgYXBwcm9hY2ggdGhlc2UgdGhpbmdzLiBJIHdvbmRlciBpZiB0aGVyZSdzIGEgZ29vZCByZWFzb24gZm9yIHRoaXMuXG5cbldhaXQgYSBtaW51dGUsIEkganVzdCByZWFsaXplZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCBpcyAqYWxzbyogc3RhdGljLiBUaGlzIGlzIGJlY29taW5nIGEgcGF0dGVybi4gTGV0IG1lIHRha2UgYSBsb29rIGF0IGB2aG9zdF92c29ja19kZXZfaW9jdGxgIGFuZCBzZWUgaWYgdGhlIHJlYXNvbmluZyBiZWhpbmQgaXRzIHN0YXRpYyBuYXR1cmUgYmVjb21lcyBhcHBhcmVudCwgYXMgaXQgY291bGQgaW5mbHVlbmNlIHRoZSBkZXNpZ24gb2YgdGhlIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgdG9vLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIGluIHRoZXJlLiBQZXJoYXBzIHRoZXJlJ3MgYW4gaW50ZXJuYWwgcmVhc29uIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjI2Ljc4ODcwMDM1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUwMzY4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdnNvY2tfZGV2X2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9OTA2PXN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTM1LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5MzY6c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuZHJpdmVycy92aG9zdC92c29jay5jLTkzNy1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTEwMjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfdnNvY2tfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDI1LVxcdC5sbHNlZWtcXHRcXHQ9IG5vb3BfbGxzZWVrLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzoxMDI2OlxcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Zzb2NrX2Rldl9pb2N0bCxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyNy1cXHQuY29tcGF0X2lvY3RsICAgPSBjb21wYXRfcHRyX2lvY3RsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDoyNi44NTM3NDMwOTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3MzEyMzQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0X3Zzb2NrX2Rldl9pb2N0bCBBUEkgRW50cnlwb2ludCoqXG5cbk9rYXksIHNvIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIGlzIHRoZSBgdW5sb2NrZWRfaW9jdGxgIGhhbmRsZXIsIHdoaWNoIG1ha2VzIGl0IGEgY3J1Y2lhbCBBUEkgZW50cnlwb2ludCwgZXZlbiBpZiBpdCdzIHRlY2huaWNhbGx5IGEgc3RhdGljIGZ1bmN0aW9uLiBOb3csIGEgY29uY2VybiBhcmlzZXM6IFN5emthbGxlciwgaW4gbXkgZXhwZXJpZW5jZSwgc3RydWdnbGVzIHRvIGRpcmVjdGx5IHJlc29sdmUgc3RhdGljIGZ1bmN0aW9ucywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGFyZSBpbmxpbmVkLiBCdXQsIHRoZSBnb29kIG5ld3MgaXMgdGhhdCBgdW5sb2NrZWRfaW9jdGxgIGlzbid0IGlubGluZWQsIHNvIHRoYXQgc2hvdWxkbid0IGJlIGEgcHJvYmxlbSBpbiB0aGlzIGluc3RhbmNlLlxuXG5Ib3dldmVyLCBJIG5vdGUgdGhhdCBib3RoIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIGFuZCBgdmhvc3RfZGV2X2NsZWFudXBgIGFyZSBleHBvcnRlZCBzeW1ib2xzLiBUaGlzIGlzIGludHJpZ3VpbmcuIEkgdGhpbmsgaXQncyB0aW1lIHRvIGRpdmUgaW50byBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTUzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjMzLjIyNjg2OTYzN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3NTAwNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2Rldl9yZXNldF9vd25lclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Zob3N0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92aG9zdC5jPTExNTM9c3RhdGljIHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGJfYWxsb2Modm9pZClcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMTU4LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzoxMTU5OnN0cnVjdCB2aG9zdF9pb3RsYiAqdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUodm9pZClcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE2MC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE2Mi19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjExNjM6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUpO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMTY0LVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy0xMTY1LS8qIENhbGxlciBzaG91bGQgaGF2ZSBkZXZpY2UgbXV0ZXggKi9cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6MTE2Njp2b2lkIHZob3N0X2Rldl9yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqdW1lbSxcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE2Ny1cXHRcXHRcXHQgICBib29sIHN5bmMpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE4MC19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjExODE6RVhQT1JUX1NZTUJPTF9HUEwodmhvc3RfZGV2X3Jlc2V0X293bmVyKTtcXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtMTE4Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDQ6MzMuNTA0Mzc3ODM1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDMzMjMyNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQWRkaW5nIEtleSBWaG9zdCB2c29jayBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZXhwb3J0ZWQgc3ltYm9scywgYW5kIGl0J3MgY2xlYXIgdGhhdCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCBhbmQgYHZob3N0X2Rldl9jbGVhbnVwYCBhcmUgaW1wb3J0YW50IHBpZWNlcy4gSSdsbCBhZGQgdGhvc2UgcmlnaHQgYXdheSwgYXMgdGhleSBzZWVtIGZ1bmRhbWVudGFsIHRvIHRoZSBkZXZpY2UgbWFuYWdlbWVudC4gQW5kLCBvZiBjb3Vyc2UsIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIGlzIHRoZSBpb2N0bCBoYW5kbGVyLCBzbyB0aGF0J3MgYSBkZWZpbml0ZSBhZGQg4oCTIGNydWNpYWwgZm9yIHRoZSBpbnRlcmZhY2UuXG5cbkhtbSwgSSBzZWUgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBpcyBzdGF0aWMgYnV0IG5vdCBpbmxpbmVkLiBJdCdzIGNhbGxlZCBmcm9tIGEgc3dpdGNoIHN0YXRlbWVudCBpbiBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYC4gSXQncyB0ZWNobmljYWxseSBva2F5IHRvIGluY2x1ZGUgaXQsIGJ1dCBnaXZlbiBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBpb2N0bCBoYW5kbGVyLCBJIHRoaW5rIGl0J3MgbW9yZSBpbmZvcm1hdGl2ZSBhbmQgbGVzcyByZWR1bmRhbnQgdG8gc2ltcGx5IGFkZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCBpbnN0ZWFkLiBJdCBjYXB0dXJlcyB0aGUgY29udGV4dCBiZXR0ZXIuXG5cbkFscmlnaHQsIHRoZSBsaXN0IGlzOiBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCwgYHZob3N0X2Rldl9jbGVhbnVwYCwgYW5kIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLlxuXG5Ob3csIGJlZm9yZSBJIGZpbmFsaXplIHRoaXMsIGxldCBtZSBxdWlja2x5IGdsYW5jZSBhdCBgdmhvc3RfdnNvY2tfc3RhcnRgIGFuZCBgdmhvc3RfdnNvY2tfc3RvcGAgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCBpbiB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjM3LjkwNzcwMzg2MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjExMTI2MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdnNvY2tfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92c29jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suYz01OTc9c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfaGFuZGxlX3J4X2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtNjA2LVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo2MDc6c3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy02MDgte1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jPTkzNj1zdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05NTQtXFx0XFx0aWYgKHN0YXJ0KVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5NTU6XFx0XFx0XFx0cmV0dXJuIHZob3N0X3Zzb2NrX3N0YXJ0KHZzb2NrKTtcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTU2LVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDQ6MzcuOTY4ODI2OTU2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODI2MjU3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKlN0cmVhbWxpbmluZyBWaG9zdC1WU29jayBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0IHNlZW1zIGxpa2Ugd2UncmUgaGFuZGxpbmcgdGhlIHZob3N0LXZzb2NrIHNldHVwLiBJIHNlZSB0aGF0IGB2aG9zdF92c29ja19zdGFydGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBIbW0sIHRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgYW5kIHRoZXJlZm9yZSB3ZSdyZSBub3QgbmVjZXNzYXJpbHkgcmVsaWFudCBvbiBpdCBhcyB0aGUgY2VudHJhbCBwb2ludCBvZiBjb250cm9sLiBUaGF0IG9wZW5zIHVwIHNvbWUgaW50ZXJlc3RpbmcgcG9zc2liaWxpdGllcyBmb3IgcmVmYWN0b3JpbmcuXG5cblRoaW5raW5nIGl0IHRocm91Z2gsIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGlzIG9uZSBzdGF0aWMgZnVuY3Rpb24sIHdoeSBkb24ndCB3ZSBqdXN0IGxlYW4gb24gdGhlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlPyBXZSd2ZSBnb3QgYHZob3N0X2Rldl9yZXNldF9vd25lcmAsIGB2aG9zdF9kZXZfY2xlYW51cGAsIGFuZCBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCByZWFkaWx5IGF2YWlsYWJsZS4gVGhleSBzaG91bGQgZ2l2ZSB1cyBhbGwgdGhlIG5lY2Vzc2FyeSBob29rcyBhbmQgcG9pbnRzIG9mIGludGVyYWN0aW9uIHdlIG5lZWQuIFRoaXMgc2hvdWxkIHNpbXBsaWZ5IHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgbWFrZSB0aGluZ3MgZWFzaWVyIHRvIG1haW50YWluIGxvbmctdGVybS5cblxuQmVmb3JlIGNvbW1pdHRpbmcgdG8gdGhhdCwgbGV0J3MganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGUgcHJpbmNpcGxlIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29kZS4gTGV0J3MgZG8gYSBxdWljayBzY2FuIG9mIGB2aG9zdF9uZXRfcmVzZXRfb3duZXJgIGFuZCBgdmhvc3RfdGVzdF9yZXNldF9vd25lcmAgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIHNvbWUgaW1wb3J0YW50IG51YW5jZS4gSnVzdCB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZ2VuZXJhbCBkZXNpZ24gcGF0dGVybiBvZiBvd25lciByZXNldCBpcyBjb25zaXN0ZW50IGFjcm9zcyBhbGwgdmhvc3QgaW1wbGVtZW50YXRpb25zLiBPa2F5LCBnb29kLiBUaGF0IHNob3VsZCBiZSBhIHNvbGlkIGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjQxLjY1MTQ1NTU0MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2MzM0NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfbmV0X3Jlc2V0X293bmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuYz0xNTQ0PXN0YXRpYyBsb25nIHZob3N0X25ldF9zZXRfYmFja2VuZChzdHJ1Y3Qgdmhvc3RfbmV0ICpuLCB1bnNpZ25lZCBpbmRleCwgaW50IGZkKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xNjQ0LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTY0NTpzdGF0aWMgbG9uZyB2aG9zdF9uZXRfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X25ldCAqbilcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE2NDYte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xNzQ3PXN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODMxLVxcdGNhc2UgVkhPU1RfUkVTRVRfT1dORVI6XFxuZHJpdmVycy92aG9zdC9uZXQuYzoxODMyOlxcdFxcdHJldHVybiB2aG9zdF9uZXRfcmVzZXRfb3duZXIobik7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODMzLVxcdGNhc2UgVkhPU1RfU0VUX09XTkVSOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDo0MS43MTYwOTY3MzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMyNDI5MzA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgdkhvc3QgSU9DVEwgSGFuZGxlciBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHZIb3N0IGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gaW50ZWdyYXRlIHRoZXNlIG5ldyBJT0NUTCBoYW5kbGVycy4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBhYm91dCBhZGRpbmcgYHZob3N0X25ldF9pb2N0bGAgZGlyZWN0bHksIGJ1dCB0aGVuIEkgc2F3IHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSByZXNldCBhbmQgcmVsZWFzZSwgYW5kIEkgcmVhbGl6ZWQgdGhpcyBpcyBtb3JlIGNvbXBsZXguXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gbW9kaWZ5IHRob3NlIHNwZWNpZmljIGhhbmRsZXJzLCBidXQgbG9va2luZyBkZWVwZXIsIGl0J3MgY2xlYXIgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgYXJvdW5kIGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgLiBTbywgSSdsbCBmb2N1cyB0aGVyZS5cblxuSSdsbCBjb25zb2xpZGF0ZSB0aGUgaW1wb3J0YW50IElPQ1RMIGhhbmRsZXJzLCBmb2N1c2luZyBvbiBhIGNsZWFuIGFuZCBtYWludGFpbmFibGUgc29sdXRpb24uIFNvIHRoZSBmaW5hbCBsaXN0IG9mIGZ1bmN0aW9ucyBJIHdpbGwgYWRkIGFyZTogYHZob3N0X2Rldl9jbGVhbnVwYCwgYHZob3N0X2Rldl9yZXNldF9vd25lcmAsIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLCBgdmhvc3RfbmV0X2lvY3RsYCwgYW5kIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYC5cblxuVGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgd2hpY2ggY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50LiBUaGUgY29yZSBjb25maWdzIEknbSBkZWFsaW5nIHdpdGggaW5jbHVkZTogYFZIT1NUX1ZTT0NLYCwgYFZIT1NUX05FVGAsIGBWSE9TVF9TQ1NJYCwgYFZIT1NUX1ZEUEFgLCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAuIEknbGwgYWxzbyBkb3VibGUtY2hlY2sgd2hldGhlciB0aGUgYFZIT1NUX1RFU1RgIGNvbmZpZyBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjUwLjA0MDM5MjE2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM1NjYwODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9URVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDQ6NTAuMzAzOTY4OTA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MTE4NDEzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgdmhvc3QgVGVzdCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBJIGhhdmUgaXMsIHVuZGVyIHdoaWNoIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyB0aGlzIHRlc3QgY29kZSBhY3R1YWxseSBjb21waWxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29udGV4dCB0byBrbm93IHdoZW4gYW5kIGhvdyB0aGlzIGNvZGUgaXMgZXhlY3V0ZWQuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBnaXZlIG1lIHRoZSBwcm9wZXIgY29udGV4dCB0byByZXZpZXcgdGhlIGNvZGUgb3IgYXR0ZW1wdCBkZWJ1Z2dpbmcuIEkgY2FuJ3QganVzdCBkaXZlIGluIHdpdGhvdXQga25vd2luZyB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAxMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjUzLjAxNTgxNDE0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyODYxNzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRlc3RcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDQ6NTMuMDc4MTEwMTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxMjE2MTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIFZob3N0IERyaXZlciBNYWtlZmlsZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgbWFnaWMgZm9yIHRoZSB2aG9zdCBkcml2ZXIgaXMgZGVmaW5lZCwgYW5kIGl0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGlmIEkgd2FudCB0byB1bmRlcnN0YW5kIG9yIG1vZGlmeSBpdHMgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiBob3cgdGhpcyB0aGluZyBhc3NlbWJsZXMsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY3VzdG9tIGJ1aWxkIHN0ZXBzLiBJdCdzIHRpbWUgdG8gcGFyc2UgdGhlIHJ1bGVzIGFuZCB2YXJpYWJsZXMgaW4gdGhlcmUgYW5kIHNlZSBob3cgdGhpbmdzIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxODQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNDo1Ny42OTAyNzQ5MTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdG9iai0kKENPTkZJR19WSE9TVF9ORVQpICs9IHZob3N0X25ldC5vXFxuICAgMzpcXHR2aG9zdF9uZXQteSA6PSBuZXQub1xcbiAgIDQ6XFx0XFxuICAgNTpcXHRvYmotJChDT05GSUdfVkhPU1RfU0NTSSkgKz0gdmhvc3Rfc2NzaS5vXFxuICAgNjpcXHR2aG9zdF9zY3NpLXkgOj0gc2NzaS5vXFxuICAgNzpcXHRcXG4gICA4OlxcdG9iai0kKENPTkZJR19WSE9TVF9WU09DSykgKz0gdmhvc3RfdnNvY2sub1xcbiAgIDk6XFx0dmhvc3RfdnNvY2steSA6PSB2c29jay5vXFxuICAxMDpcXHRcXG4gIDExOlxcdG9iai0kKENPTkZJR19WSE9TVF9SSU5HKSArPSB2cmluZ2gub1xcbiAgMTI6XFx0XFxuICAxMzpcXHRvYmotJChDT05GSUdfVkhPU1RfVkRQQSkgKz0gdmhvc3RfdmRwYS5vXFxuICAxNDpcXHR2aG9zdF92ZHBhLXkgOj0gdmRwYS5vXFxuICAxNTpcXHRcXG4gIDE2OlxcdG9iai0kKENPTkZJR19WSE9TVClcXHQrPSB2aG9zdC5vXFxuICAxNzpcXHRcXG4gIDE4OlxcdG9iai0kKENPTkZJR19WSE9TVF9JT1RMQikgKz0gdmhvc3RfaW90bGIub1xcbiAgMTk6XFx0dmhvc3RfaW90bGIteSA6PSBpb3RsYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA0OjU3LjY5MDM0MDI3OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU0NzkxMzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEJ1aWxkIENvbmZpZ3VyYXRpb24gRGlzY3JlcGFuY3kqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYC4gVGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0ICpzaG91bGQqIGJlIHBhcnQgb2YgdGhlIGBkcml2ZXJzL3Zob3N0YCBidWlsZCBwcm9jZXNzLiBIb3dldmVyLCBhIHF1aWNrIHNjYW4gc3VnZ2VzdHMgaXQncyAqbm90KiBkaXJlY3RseSBsaXN0ZWQgaW4gdGhlIGBkcml2ZXJzL3Zob3N0L01ha2VmaWxlYC4gVGhhdCdzIHVuZXhwZWN0ZWQuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBkb3VibGUtY2hlY2sgdGhlIE1ha2VmaWxlIG1vcmUgdGhvcm91Z2hseS4gSXQncyBwb3NzaWJsZSB0aGUgaW5jbHVzaW9uIGhhcHBlbnMgbGF0ZXIgb24sIHBlcmhhcHMgdGhyb3VnaCBhIHZhcmlhYmxlIGV4cGFuc2lvbiBvciBhbiBpbmRpcmVjdCBpbmNsdWRlLiBJIG5lZWQgdG8gZWxpbWluYXRlIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHNpbXBsZSBvdmVyc2lnaHQgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIG1vcmUgY29tcGxleCBidWlsZCBzeXN0ZW0gbG9naWMgb3IgbWFrZSBhc3N1bXB0aW9ucyBhYm91dCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gTGV0J3Mgc2VlIGlmIHRoZSBmaWxlIGlzIGluY2x1ZGVkIGZ1cnRoZXIgZG93biBpbiB0aGF0IGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjczLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTowMS4wNDUxMzM5NzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2MDAsIkVycm9yIjoiZmlsZSBkcml2ZXJzL3Zob3N0L01ha2VmaWxlIGRvZXMgbm90IGhhdmUgbGluZSAyMCwgaXQgaGFzIG9ubHkgMTkgbGluZXMiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJmaWxlIGRyaXZlcnMvdmhvc3QvTWFrZWZpbGUgZG9lcyBub3QgaGF2ZSBsaW5lIDIwLCBpdCBoYXMgb25seSAxOSBsaW5lc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTowMS4wNDUxOTcwMjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNDQxMTE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIG9mIGBkcml2ZXJzL3Zob3N0L3Rlc3QuY2AqKlxuXG5BbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBgZHJpdmVycy92aG9zdC90ZXN0LmNgLCBhbmQgSSd2ZSBoaXQgYSBtZW50YWwgcm9hZGJsb2NrLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICpXaGVyZSogZXhhY3RseSBkb2VzIHRoZSBidWlsZCBzeXN0ZW0gY29tcGlsZSB0aGlzIGZpbGU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHRlc3QgY29kZSBpcyBiZWluZyBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgYnVpbGQgcHJvY2Vzcy4gSXMgaXQgcGFydCBvZiB0aGUgbWFpbiBrZXJuZWwgYnVpbGQ/IElzIGl0IGEgc2VwYXJhdGUgbW9kdWxlPyBJcyBpdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24/IEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBmaWd1cmluZyBvdXQgaG93IHRoZSB0ZXN0IHN1aXRlIGlzIHJ1biwgYW5kIGhvdyB0byBwb3RlbnRpYWxseSBtb2RpZnkgb3IgZXh0ZW5kIGl0LiBJIG5lZWQgdG8gZmluZCB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCwgYEtjb25maWdgIG9wdGlvbnMsIG9yIGJ1aWxkIHNjcmlwdHMgdG8gdHJhY2UgdGhpcy4gSXQncyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgdGVzdCBmaWxlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTYyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTowNC4yNzk2MTEyNTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDg1NDc0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZXN0XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTowNC4zNDQ3MDQ1NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE3Nzc5NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIGZvciBhIFRlc3QgVmlydHVhbCBIb3N0IEZpbGUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcywgaXQncyBhbHdheXMgZ29vZCB0byBzdGFydCB3aXRoIGEgc2FuaXR5IGNoZWNrLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoZXJlJ3MgYSBzaW1wbGUsIHJlYWRpbHkgYXZhaWxhYmxlIHRlc3QgZmlsZS4gU28sIEkgbmVlZCB0byBsb29rIGZvciBzb21ldGhpbmcgdGhhdCBtaWdodCBiZSBuYW1lZCBgdmhvc3RfdGVzdC5jYCBvciBzb21ldGhpbmcgc2ltaWxhci4gSXQncyBhIHF1aWNrIHdheSB0byBnYXVnZSB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhbnkgcHJlLWJ1aWx0IGV4YW1wbGVzIG9yIGNvbmZpZ3VyYXRpb25zIEkgY2FuIGxldmVyYWdlLiBJdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIGFueSBnb29kIGludmVzdGlnYXRpb24sIGZpbmQgdGhlIGtub3duIGdvb2QuIExldCdzIHNlZSB3aGF0IHR1cm5zIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIxOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA1OjA3LjI2MjQ4NzQ0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDUzMjAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF90ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdGVzdC5jLTMwLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjMxOnN0YXRpYyBjb25zdCBpbnQgdmhvc3RfdGVzdF9iaXRzW10gPSB7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzItXFx0VkhPU1RfRkVBVFVSRVNcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM1OiNkZWZpbmUgVkhPU1RfVEVTVF9GRUFUVVJFUyBWSE9TVF9GRUFUVVJFU19VNjQodmhvc3RfdGVzdF9iaXRzLCAwKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM2LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTM3PWVudW0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtNDEtXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6NDI6c3RydWN0IHZob3N0X3Rlc3Qge1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTQzLVxcdHN0cnVjdCB2aG9zdF9kZXYgZGV2O1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtNDgtICogcmVhZC1zaXplIGNyaXRpY2FsIHNlY3Rpb24gZm9yIG91ciBraW5kIG9mIFJDVS4gKi9cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzo0OTpzdGF0aWMgdm9pZCBoYW5kbGVfdnEoc3RydWN0IHZob3N0X3Rlc3QgKm4pXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtNTAte1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MTAyPXN0YXRpYyB2b2lkIGhhbmRsZV92cV9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTA1LVxcdFxcdFxcdFxcdFxcdFxcdCAgcG9sbC53b3JrKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMDY6XFx0c3RydWN0IHZob3N0X3Rlc3QgKm4gPSBjb250YWluZXJfb2YodnEtXFx1MDAzZWRldiwgc3RydWN0IHZob3N0X3Rlc3QsIGRldik7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTA3LVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTEwLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjExMTpzdGF0aWMgaW50IHZob3N0X3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMTIte1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjExMzpcXHRzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiA9IGttYWxsb2Nfb2JqKCpuKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMTQtXFx0c3RydWN0IHZob3N0X2RldiAqZGV2O1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTM1LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjEzNjpzdGF0aWMgdm9pZCAqdmhvc3RfdGVzdF9zdG9wX3ZxKHN0cnVjdCB2aG9zdF90ZXN0ICpuLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTEzNy1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE0Ny1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxNDg6c3RhdGljIHZvaWQgdmhvc3RfdGVzdF9zdG9wKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB2b2lkICoqcHJpdmF0ZXApXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTQ5LXtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxNTA6XFx0KnByaXZhdGVwID0gdmhvc3RfdGVzdF9zdG9wX3ZxKG4sIG4tXFx1MDAzZXZxcyArIFZIT1NUX1RFU1RfVlEpO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE1MS19XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTUyLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjE1MzpzdGF0aWMgdm9pZCB2aG9zdF90ZXN0X2ZsdXNoKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE1NC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNTctXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTU4OnN0YXRpYyBpbnQgdmhvc3RfdGVzdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE1OS17XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTYwOlxcdHN0cnVjdCB2aG9zdF90ZXN0ICpuID0gZi1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE2MS1cXHR2b2lkICAqcHJpdmF0ZTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNjItXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTYzOlxcdHZob3N0X3Rlc3Rfc3RvcChuLCBcXHUwMDI2cHJpdmF0ZSk7XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTY0OlxcdHZob3N0X3Rlc3RfZmx1c2gobik7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTY1LVxcdHZob3N0X2Rldl9zdG9wKFxcdTAwMjZuLVxcdTAwM2VkZXYpO1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTcxLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjE3MjpzdGF0aWMgbG9uZyB2aG9zdF90ZXN0X3J1bihzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgaW50IHRlc3QpXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTczLXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTIxMC1cXHRcXHRpZiAob2xkcHJpdikge1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjIxMTpcXHRcXHRcXHR2aG9zdF90ZXN0X2ZsdXNoKG4pO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTIxMi1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yMjItXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MjIzOnN0YXRpYyBsb25nIHZob3N0X3Rlc3RfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X3Rlc3QgKm4pXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjI0LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTIzNy1cXHR9XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MjM4OlxcdHZob3N0X3Rlc3Rfc3RvcChuLCBcXHUwMDI2cHJpdik7XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MjM5OlxcdHZob3N0X3Rlc3RfZmx1c2gobik7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjQwLVxcdHZob3N0X2Rldl9zdG9wKFxcdTAwMjZuLVxcdTAwM2VkZXYpO1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjQ2LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjI0NzpzdGF0aWMgaW50IHZob3N0X3Rlc3Rfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB1NjQgZmVhdHVyZXMpXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjQ4LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI2NC1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoyNjU6c3RhdGljIGxvbmcgdmhvc3RfdGVzdF9zZXRfYmFja2VuZChzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgdW5zaWduZWQgaW5kZXgsIGludCBmZClcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yNjYte1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzAzLVxcdGlmIChlbmFibGUpIHtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMDQ6XFx0XFx0dmhvc3RfdGVzdF9mbHVzaChuKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMDUtXFx0fVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzE2LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjMxNzpzdGF0aWMgbG9uZyB2aG9zdF90ZXN0X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzE4LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zMjAtXFx0c3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUgYmFja2VuZDtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMjE6XFx0c3RydWN0IHZob3N0X3Rlc3QgKm4gPSBmLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzIyLVxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzMwLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjMzMTpcXHRcXHRyZXR1cm4gdmhvc3RfdGVzdF9ydW4obiwgdGVzdCk7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzMyLVxcdGNhc2UgVkhPU1RfVEVTVF9TRVRfQkFDS0VORDpcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzNC1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMzU6XFx0XFx0cmV0dXJuIHZob3N0X3Rlc3Rfc2V0X2JhY2tlbmQobiwgYmFja2VuZC5pbmRleCwgYmFja2VuZC5mZCk7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzM2LVxcdGNhc2UgVkhPU1RfR0VUX0ZFQVRVUkVTOlxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzQ1LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNDY6XFx0XFx0cmV0dXJuIHZob3N0X3Rlc3Rfc2V0X2ZlYXR1cmVzKG4sIGZlYXR1cmVzKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNDctXFx0Y2FzZSBWSE9TVF9SRVNFVF9PV05FUjpcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNDg6XFx0XFx0cmV0dXJuIHZob3N0X3Rlc3RfcmVzZXRfb3duZXIobik7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzQ5LVxcdGRlZmF1bHQ6XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNTMtICAgICAgICAgICAgICAgICAgICAgICAgciA9IHZob3N0X3ZyaW5nX2lvY3RsKFxcdTAwMjZuLVxcdTAwM2VkZXYsIGlvY3RsLCBhcmdwKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozNTQ6XFx0XFx0dmhvc3RfdGVzdF9mbHVzaChuKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNTUtXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuLVxcdTAwM2VkZXYubXV0ZXgpO1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzU5LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2MDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF90ZXN0X2ZvcHMgPSB7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzYxLVxcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM2MjpcXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF90ZXN0X3JlbGVhc2UsXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzYzOlxcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Rlc3RfaW9jdGwsXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzY0LVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzY1OlxcdC5vcGVuICAgICAgICAgICA9IHZob3N0X3Rlc3Rfb3BlbixcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNjYtXFx0Lmxsc2Vla1xcdFxcdD0gbm9vcF9sbHNlZWssXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNjgtXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzY5OnN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB2aG9zdF90ZXN0X21pc2MgPSB7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzcwLVxcdE1JU0NfRFlOQU1JQ19NSU5PUixcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNzEtXFx0XFxcInZob3N0LXRlc3RcXFwiLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM3MjpcXHRcXHUwMDI2dmhvc3RfdGVzdF9mb3BzLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM3My19O1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM3NDptb2R1bGVfbWlzY19kZXZpY2Uodmhvc3RfdGVzdF9taXNjKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA1OjA3LjMyMzAyNTQ2NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODAzNjM5MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZWJ1Z2dpbmcgdGhlIHZob3N0X3Rlc3QgRHJpdmVyKipcblxuQWxyaWdodCwgc28gYHZob3N0X3Rlc3RgLi4uIHJpZ2h0LCB0aGF0J3MgYSBtaXNjIGRldmljZSwgaXNuJ3QgaXQ/IExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0LiBOb3csIGlzIGl0IGFjdHVhbGx5ICpjb21waWxlZCogaW50byB0aGUga2VybmVsPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgaXQncyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEknbSBnb2luZyB0byBqdW1wIGJhY2sgaW50byB0aGUgYGRyaXZlcnMvdmhvc3QvTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb2J2aW91cyBidWlsZCBmbGFncyBvciBkZXBlbmRlbmNpZXMgdGhhdCBJJ20gbWlzc2luZy4gTmVlZCB0byBlbGltaW5hdGUgdGhhdCBwb3RlbnRpYWwgY2F1c2UgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3MjUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNToxMC4xMjY2Njc5NzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjIzNTc1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZXN0XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNToxMC4xOTQ5MDM3MDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzNzkxMjYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5IG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBCdWlsZCBTeXN0ZW0qKlxuXG5SaWdodCwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIGBkcml2ZXJzL3Zob3N0L3Rlc3QuY2AgaXMgYWN0dWFsbHkgYnVpbHQuIEl0IGZlZWxzIGxpa2UgSSd2ZSBzZWVuIHNvbWV0aGluZyBzaW1pbGFyIGNvbXBpbGVkIGluIHRoZSBgdG9vbHMvdmlydGlvL2AgZGlyZWN0b3J5IGJlZm9yZSwgbWF5YmUgYXMgcGFydCBvZiBzb21lIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBkZXBlbmRlbmN5IGdyYXBoIGlzbid0IGltbWVkaWF0ZWx5IG9idmlvdXMsIGFuZCBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgYnVpbGQgcnVsZXMgZm9yIHRoaXMgc3BlY2lmaWMgdGVzdCBjYXNlLlxuXG5UaGVyZWZvcmUsIGxldCdzIGp1c3QgZ28gYWhlYWQgYW5kIGRpdmUgZGlyZWN0bHkgaW50byBgdG9vbHMvdmlydGlvL01ha2VmaWxlYC4gSXQncyBhbG1vc3QgY2VydGFpbiB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSByZWxldmFudCBkaXJlY3RpdmVzLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgYSBwb2ludGVyIHRvIHdoZXJlIHRob3NlIHJ1bGVzIG1pZ2h0IGJlIGxvY2F0ZWQuIEknbGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBgdmhvc3RgIGFuZCBwb3RlbnRpYWxseSB0aGF0IGZpbGVuYW1lIHNwZWNpZmljYWxseS4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgYnVpbHQgdGhlcmUgZGlyZWN0bHksIGluY2x1ZGVkIGZyb20gdGhlcmUsIG9yIGlmIGl0IGxldmVyYWdlcyBhIHNoYXJlZCBidWlsZCBlbnZpcm9ubWVudC4gTGV0J3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTMxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6MTQuMjMyODIwNTU1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg2MzczOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVzdFxcXFwuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy92aXJ0aW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInRvb2xzL3ZpcnRpby92aG9zdF90ZXN0L3Zob3N0X3Rlc3QuYzoxOiNpbmNsdWRlIFxcXCJ0ZXN0LmNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA1OjE0LjM0MTQ2Mzk4NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM0Mjg0MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoaXMgY29kZTpcblxuKipVbnJhdmVsaW5nIHRoZSBWaG9zdCBUZXN0IFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHRvb2xzL3ZpcnRpby92aG9zdF90ZXN0L3Zob3N0X3Rlc3QuY2AgcHVsbHMgaW4gYHRlc3QuY2AuIE5vdGhpbmcgdW51c3VhbCB0aGVyZSwgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIG9yZ2FuaXppbmcgdGVzdCBjb2RlLiBCdXQgd2FpdCwgSSdtIGp1c3Qgbm90aWNpbmcgc29tZXRoaW5nIG1vcmUgaW50cmlndWluZy4gVGhhdCBgZHJpdmVycy92aG9zdC90ZXN0LmNgIGlzIGJ1aWx0IGFzIGEga2VybmVsIG1vZHVsZSwgYHZob3N0X3Rlc3Qua29gLiBUaGF0J3Mgbm90IHRoZSB0eXBpY2FsIHNldHVwLiBVc3VhbGx5LCBJJ2QgZXhwZWN0IHRoZSBjb3JlIHZob3N0IHRlc3QgY29kZSB0byBiZSBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgZHJpdmVyIGl0c2VsZiBvciBhIHV0aWxpdHkuIFRoaXMgaW5kaWNhdGVzIGl0IGlzIGludGVudGlvbmFsbHkgc2VwYXJhdGVkLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlLCBgZHJpdmVycy92aG9zdC9LY29uZmlnYC4gSSdsbCBsb29rIGZvciBgVkhPU1RfVEVTVGAgYW5kIHNlZSB3aGF0J3MgYmVpbmcgY29uZmlndXJlZC4gVGhhdCdsbCB0ZWxsIG1lIGlmIGl0J3MgbWVhbnQgdG8gYmUgbW9kdWxhciBhbmQgaG93IGl0J3MgYWN0aXZhdGVkLCBvciBpZiBpdCdzIGludGVncmF0ZWQgZGlmZmVyZW50bHkgYW5kIHdoeS4gSSdsbCBnZXQgdGhlIHJlYWwgc3RvcnkgZnJvbSB0aGF0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjU2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6MTcuNjc1NzUyNDcxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzcxNDQ5MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZIT1NUX1RFU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC90ZXN0LmMtMjItICogVXNpbmcgdGhpcyBsaW1pdCBwcmV2ZW50cyBvbmUgdmlydHF1ZXVlIGZyb20gc3RhcnZpbmcgb3RoZXJzLiAqL1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjIzOiNkZWZpbmUgVkhPU1RfVEVTVF9XRUlHSFQgMHg4MDAwMFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI0LVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjgtICovXFxuZHJpdmVycy92aG9zdC90ZXN0LmM6Mjk6I2RlZmluZSBWSE9TVF9URVNUX1BLVF9XRUlHSFQgMjU2XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzAtXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzE9c3RhdGljIGNvbnN0IGludCB2aG9zdF90ZXN0X2JpdHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM1OiNkZWZpbmUgVkhPU1RfVEVTVF9GRUFUVVJFUyBWSE9TVF9GRUFUVVJFU19VNjQodmhvc3RfdGVzdF9iaXRzLCAwKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM2LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTM3PWVudW0ge1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM4OlxcdFZIT1NUX1RFU1RfVlEgPSAwLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjM5OlxcdFZIT1NUX1RFU1RfVlFfTUFYID0gMSxcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy00MC19O1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9NDI9c3RydWN0IHZob3N0X3Rlc3Qge1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTQzLVxcdHN0cnVjdCB2aG9zdF9kZXYgZGV2O1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjQ0OlxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgdnFzW1ZIT1NUX1RFU1RfVlFfTUFYXTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy00NS19O1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9NDk9c3RhdGljIHZvaWQgaGFuZGxlX3ZxKHN0cnVjdCB2aG9zdF90ZXN0ICpuKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTUwLXtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzo1MTpcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9IFxcdTAwMjZuLVxcdTAwM2V2cXNbVkhPU1RfVEVTVF9WUV07XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtNTItXFx0dW5zaWduZWQgb3V0LCBpbjtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTExMT1zdGF0aWMgaW50IHZob3N0X3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTExOC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMTk6XFx0dnFzID0ga21hbGxvY19vYmpzKCp2cXMsIFZIT1NUX1RFU1RfVlFfTUFYKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMjAtXFx0aWYgKCF2cXMpIHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTEyNS1cXHRkZXYgPSBcXHUwMDI2bi1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjEyNjpcXHR2cXNbVkhPU1RfVEVTVF9WUV0gPSBcXHUwMDI2bi1cXHUwMDNldnFzW1ZIT1NUX1RFU1RfVlFdO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjEyNzpcXHRuLVxcdTAwM2V2cXNbVkhPU1RfVEVTVF9WUV0uaGFuZGxlX2tpY2sgPSBoYW5kbGVfdnFfa2ljaztcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzoxMjg6XFx0dmhvc3RfZGV2X2luaXQoZGV2LCB2cXMsIFZIT1NUX1RFU1RfVlFfTUFYLCBVSU9fTUFYSU9WLFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjEyOTpcXHRcXHQgICAgICAgVkhPU1RfVEVTVF9QS1RfV0VJR0hULCBWSE9TVF9URVNUX1dFSUdIVCwgdHJ1ZSwgTlVMTCk7XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTMwLVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MTQ4PXN0YXRpYyB2b2lkIHZob3N0X3Rlc3Rfc3RvcChzdHJ1Y3Qgdmhvc3RfdGVzdCAqbiwgdm9pZCAqKnByaXZhdGVwKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTE0OS17XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTUwOlxcdCpwcml2YXRlcCA9IHZob3N0X3Rlc3Rfc3RvcF92cShuLCBuLVxcdTAwM2V2cXMgKyBWSE9TVF9URVNUX1ZRKTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xNTEtfVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MjQ3PXN0YXRpYyBpbnQgdmhvc3RfdGVzdF9zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Rlc3QgKm4sIHU2NCBmZWF0dXJlcylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTI1Ni1cXHR9XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MjU3OlxcdHZxID0gXFx1MDAyNm4tXFx1MDAzZXZxc1tWSE9TVF9URVNUX1ZRXTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yNTgtXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTI2NT1zdGF0aWMgbG9uZyB2aG9zdF90ZXN0X3NldF9iYWNrZW5kKHN0cnVjdCB2aG9zdF90ZXN0ICpuLCB1bnNpZ25lZCBpbmRleCwgaW50IGZkKVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMjc3LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jOjI3ODpcXHRpZiAoaW5kZXggXFx1MDAzZT0gVkhPU1RfVEVTVF9WUV9NQVgpIHtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0yNzktXFx0XFx0ciA9IC1FTk9CVUZTO1xcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmM9MzE3PXN0YXRpYyBsb25nIHZob3N0X3Rlc3RfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMyNy1cXHRzd2l0Y2ggKGlvY3RsKSB7XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzI4OlxcdGNhc2UgVkhPU1RfVEVTVF9SVU46XFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzI5LVxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2dGVzdCwgYXJncCwgc2l6ZW9mIHRlc3QpKVxcbi0tXFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMzMxLVxcdFxcdHJldHVybiB2aG9zdF90ZXN0X3J1bihuLCB0ZXN0KTtcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMzI6XFx0Y2FzZSBWSE9TVF9URVNUX1NFVF9CQUNLRU5EOlxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzMy1cXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmJhY2tlbmQsIGFyZ3AsIHNpemVvZiBiYWNrZW5kKSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzNi1cXHRjYXNlIFZIT1NUX0dFVF9GRUFUVVJFUzpcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYzozMzc6XFx0XFx0ZmVhdHVyZXMgPSBWSE9TVF9URVNUX0ZFQVRVUkVTO1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTMzOC1cXHRcXHRpZiAoY29weV90b191c2VyKGZlYXR1cmVwLCBcXHUwMDI2ZmVhdHVyZXMsIHNpemVvZiBmZWF0dXJlcykpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0zNDMtXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MzQ0OlxcdFxcdGlmIChmZWF0dXJlcyBcXHUwMDI2IH5WSE9TVF9URVNUX0ZFQVRVUkVTKVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5jLTM0NS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuZHJpdmVycy92aG9zdC90ZXN0Lmg6MjojaWZuZGVmIExJTlVYX1ZIT1NUX1RFU1RfSFxcbmRyaXZlcnMvdmhvc3QvdGVzdC5oOjM6I2RlZmluZSBMSU5VWF9WSE9TVF9URVNUX0hcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuaC00LVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5oLTUtLyogU3RhcnQgYSBnaXZlbiB0ZXN0IG9uIHRoZSB2aXJ0aW8gbnVsbCBkZXZpY2UuIDAgc3RvcHMgYWxsIHRlc3RzLiAqL1xcbmRyaXZlcnMvdmhvc3QvdGVzdC5oOjY6I2RlZmluZSBWSE9TVF9URVNUX1JVTiBfSU9XKFZIT1NUX1ZJUlRJTywgMHgzMSwgaW50KVxcbmRyaXZlcnMvdmhvc3QvdGVzdC5oOjc6I2RlZmluZSBWSE9TVF9URVNUX1NFVF9CQUNLRU5EIF9JT1coVkhPU1RfVklSVElPLCAweDMyLCBpbnQpXFxuZHJpdmVycy92aG9zdC90ZXN0LmgtOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6MTkuNDQ3MjA5ODc0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDI4ODM2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gb2YgYGRyaXZlcnMvdmhvc3QvdGVzdC5jYCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBkb2Vzbid0IGZlZWwgcmlnaHQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGBkcml2ZXJzL3Zob3N0L3Rlc3QuY2AgZmlsZSB3YXMgcGFydCBvZiB0aGUgY29yZSB2aG9zdCBkcml2ZXIsIGJ1dCB0aGUgYnVpbGQgc3lzdGVtIHNlZW1zIHRvIGJlIHRyZWF0aW5nIGl0IGRpZmZlcmVudGx5LiBJdCBsb29rcyBsaWtlIGl0J3MgYmVpbmcgY29tcGlsZWQgYXMgYSBrZXJuZWwgbW9kdWxlIHdpdGhpbiBgdG9vbHMvdmlydGlvL3Zob3N0X3Rlc3QvYCwgd2hpY2ggc3RyaWtlcyBtZSBhcyB1bnVzdWFsLiBUaGF0IGNvbmZpZ3VyYXRpb24gZG9lc24ndCBpbW1lZGlhdGVseSBhbGlnbiB3aXRoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcGFydGljdWxhciB0ZXN0IGlzIHR5cGljYWxseSBoYW5kbGVkLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkuIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBgdG9vbHMvdmlydGlvL01ha2VmaWxlYC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgZGlyZWN0IGluc2lnaHQgaW50byBob3cgdGhpcyBmaWxlIGlzIGJlaW5nIGJ1aWx0IGFuZCBsaW5rZWQsIGFuZCBob3BlZnVsbHkgY2xhcmlmeSB3aHkgaXQncyBiZWluZyB0cmVhdGVkIGFzIGEgc2VwYXJhdGUgbW9kdWxlIGluIHRoYXQgc3BlY2lmaWMgZGlyZWN0b3J5LiBMZXQncyBzZWUgd2hhdCB0aGUgTWFrZWZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyNjMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNToyMi43NTAwOTU5ODJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTcxNzEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF90ZXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3ZpcnRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdmlydGlvL01ha2VmaWxlPTI0PW1vZDpcXG50b29scy92aXJ0aW8vTWFrZWZpbGU6MjU6XFx0JHtCVUlMRH0gTT1gcHdkYC92aG9zdF90ZXN0XFxudG9vbHMvdmlydGlvL01ha2VmaWxlLTI2LVxcbi0tXFxudG9vbHMvdmlydGlvL01ha2VmaWxlPTQ0PW9vdC1idWlsZDpcXG50b29scy92aXJ0aW8vTWFrZWZpbGUtNDUtXFx0ZWNobyBcXFwiVU5TVVBQT1JURUQhIERvbid0IHVzZSB0aGUgcmVzdWx0aW5nIG1vZHVsZXMgaW4gcHJvZHVjdGlvbiFcXFwiXFxudG9vbHMvdmlydGlvL01ha2VmaWxlOjQ2OlxcdCR7T09UX0JVSUxEfSBNPWBwd2RgL3Zob3N0X3Rlc3RcXG50b29scy92aXJ0aW8vTWFrZWZpbGUtNDctXFx0JHtPT1RfQlVJTER9IE09JHtPT1RfVkhPU1R9ICR7T09UX0NPTkZJR1N9XFxuLS1cXG50b29scy92aXJ0aW8vTWFrZWZpbGU9NTQ9Y2xlYW46XFxudG9vbHMvdmlydGlvL01ha2VmaWxlOjU1OlxcdCR7Uk19ICoubyB2cmluZ2hfdGVzdCB2aXJ0aW9fdGVzdCB2aG9zdF9uZXRfdGVzdCB2aG9zdF90ZXN0LyoubyBcXFxcXFxudG9vbHMvdmlydGlvL01ha2VmaWxlOjU2OiAgICAgICAgICAgICAgdmhvc3RfdGVzdC8uKi5jbWQgdmhvc3RfdGVzdC9Nb2R1bGUuc3ltdmVycyBcXFxcXFxudG9vbHMvdmlydGlvL01ha2VmaWxlOjU3OiAgICAgICAgICAgICAgdmhvc3RfdGVzdC9tb2R1bGVzLm9yZGVyICouZFxcbnRvb2xzL3ZpcnRpby9NYWtlZmlsZS01OC0taW5jbHVkZSAqLmRcXG4tLVxcbnRvb2xzL3ZpcnRpby92aG9zdF90ZXN0L01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxudG9vbHMvdmlydGlvL3Zob3N0X3Rlc3QvTWFrZWZpbGU6MjpvYmotbSArPSB2aG9zdF90ZXN0Lm9cXG50b29scy92aXJ0aW8vdmhvc3RfdGVzdC9NYWtlZmlsZS0zLUVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvdmhvc3RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6MjMuMTQxODE3NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDEzOTQ2Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgdGhlIGB2aG9zdGAgTW9kdWxlIFRlc3RpbmcgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgdmhvc3RfdGVzdGAgaXMgYSB0ZXN0aW5nIG1vZHVsZS4gSXQncyBidWlsdCBzcGVjaWZpY2FsbHkgZm9yIG91dC1vZi10cmVlIHRlc3Rpbmcgc2NlbmFyaW9zLCB3aGljaCBtZWFucyBpdHMgZnVuY3Rpb25zIGxpa2UgYHZob3N0X3Rlc3RfaW9jdGxgIGFuZCBgdmhvc3RfdGVzdF9yZWxlYXNlYCBhcmVuJ3QgYmFrZWQgaW50byB0aGUga2VybmVsIGluIHRoZSB0eXBpY2FsLCBkZXBsb3lhYmxlIGJ1aWxkLiBUaGF0IGltbWVkaWF0ZWx5IHNoaWZ0cyBteSBhdHRlbnRpb24uIEkgZG9uJ3QgbmVlZCB0byBnZXQgYm9nZ2VkIGRvd24gaW4gdGhvc2UuIFRoZXkncmUgaXJyZWxldmFudCB0byB0aGUgY29yZSBgdmhvc3RgIG1vZHVsZS5cblxuSW5zdGVhZCwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSB0cnVseSBpbXBvcnRhbnQgc3R1ZmYsIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdGllcyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgcHJlc2VudCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UncmUgaW4gYSB0ZXN0IG9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQuIFRoZSBrZXkgc3ltYm9scywgYXMgSSBzZWUgaXQsIGFyZTogYHZob3N0X2Rldl9jbGVhbnVwYCwgYHZob3N0X2Rldl9yZXNldF9vd25lcmAsIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLCBgdmhvc3RfbmV0X2lvY3RsYCwgYW5kIGB2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsYC4gVGhlc2UgZmVlbCBsaWtlIHRoZXkncmUgY3JpdGljYWwgZm9yIHRoZSBjb3JlIG9wZXJhdGlvbi5cblxuT25lIHF1aWNrIG5vdGUgb24gdGhlIGxpc3QsIGxldCBtZSBqdXN0IGRvdWJsZSBjaGVjaywgaXMgdGhhdCBgdmhvc3Rfc2NzaV9pb2N0bGAgZXhpc3RzLiBJdCBtYXkgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgb3IgbW92ZWQsIHNvIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBpdCBpcyBzdGlsbCBhIHZhbGlkIHN5bWJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4ODksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6MjcuNTU1NzY4NTE2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA3ODI0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0xOTE5PXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXR1cF92cV9jbWRzKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgbWF4X2NtZHMpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xOTczLS8qXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTk3NDogKiBDYWxsZWQgZnJvbSB2aG9zdF9zY3NpX2lvY3RsKCkgY29udGV4dCB0byB3YWxrIHRoZSBsaXN0IG9mIGF2YWlsYWJsZVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE5NzUtICogdmhvc3Rfc2NzaV90cGcgd2l0aCBhbiBhY3RpdmUgc3RydWN0IHZob3N0X3Njc2lfbmV4dXNcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIzNjE9c3RhdGljIGxvbmdcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzYyOnZob3N0X3Njc2lfaW9jdGwoc3RydWN0IGZpbGUgKmYsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM2My1cXHRcXHQgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDM5LVxcdC5yZWxlYXNlICAgICAgICA9IHZob3N0X3Njc2lfcmVsZWFzZSxcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyNDQwOlxcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X3Njc2lfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ0MS1cXHQuY29tcGF0X2lvY3RsXFx0PSBjb21wYXRfcHRyX2lvY3RsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNToyNy43MDY1NTcwMjNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MDkzNDMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBDbGVhbnVwOiBFeHBhbmRpbmcgdGhlIFNjb3BlKipcblxuT2theSwgc28gSSBzZWUgYHZob3N0X3Njc2lfaW9jdGxgIGlzIGRlZmluaXRlbHkgaW4gdGhlIG1peC4gQnV0IGhvbGQgb24sIEknbSBub3RpY2luZyBhIGZldyBvdGhlciBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBhcyB3ZWxsOiBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgYHZob3N0X25ldF9yZWxlYXNlYCwgYW5kIGB2aG9zdF92ZHBhX2NsZWFudXBgLiBIbW0sIGFyZSB0aGVzZSBwb3RlbnRpYWxseSBiZXR0ZXIgcGxhY2VzIHRvIGZvY3VzIG15IGVmZm9ydHM/IEkgdGhpbmsgc28uXG5cblRoaW5raW5nIGFib3V0IGl0LCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCBsb29rcyBwcm9taXNpbmcgYmVjYXVzZSBpdCdzIHRoZSByZWxlYXNlIGhhbmRsZXIuIFRoYXQgbWVhbnMgaXQncyB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjbG9zZWQsIG1ha2luZyBpdCBhIG5hdHVyYWwgZml0IGZvciB0ZXN0aW5nIHRoZSBgdmhvc3RfZGV2X2NsZWFudXBgIHByb2Nlc3MuIEknbSBnb2luZyB0byBhZGQgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGB2aG9zdF9uZXRfcmVsZWFzZWAsIGB2aG9zdF92c29ja19kZXZfcmVsZWFzZWAsIGFuZCBgdmhvc3RfdmRwYV9jbGVhbnVwYCB0byBteSBsaXN0IG9mIGtleSBmdW5jdGlvbnMuIExldCdzIG1ha2Ugc3VyZSB0aGF0IGB2aG9zdF92ZHBhX2NsZWFudXBgIGlzIGJlaGF2aW5nIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2OTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6MzEuNzQ3NDk0NTFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTQyOTY2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF92ZHBhX2NsZWFudXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmM9MTM3MD1zdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3NldF9pb3ZhX3JhbmdlKHN0cnVjdCB2aG9zdF92ZHBhICp2KVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTM4Ni1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxMzg3OnN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfY2xlYW51cChzdHJ1Y3Qgdmhvc3RfdmRwYSAqdilcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMzg4LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTE0MDQ9c3RhdGljIGludCB2aG9zdF92ZHBhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKVxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQ0OC1lcnJfYWxsb2NfZG9tYWluOlxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE0NDk6XFx0dmhvc3RfdmRwYV9jbGVhbnVwKHYpO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0NTAtZXJyOlxcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTQ2Mz1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDc0LVxcdHZob3N0X3ZkcGFfY29uZmlnX3B1dCh2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNDc1OlxcdHZob3N0X3ZkcGFfY2xlYW51cCh2KTtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDc2LVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZC1cXHUwMDNlbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTozMi4xNTY5MzcxNDZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ4NDk4MzUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBWaG9zdCBNb2R1bGUgRW50cnkgUG9pbnRzIGFuZCBDb3JlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIHZob3N0IG1vZHVsZSBoYW5ncyB0b2dldGhlci4gVGhlIHByaW1hcnkgcmVsZWFzZSBoYW5kbGVyIGhlcmUgaXMgYHZob3N0X3ZkcGFfcmVsZWFzZWAsIGFuZCBpdCBjYWxscyBgdmhvc3RfdmRwYV9jbGVhbnVwYCB1bmRlciB0aGUgaG9vZC4gU28sIHdoZW4gSSdtIGFkZGluZyBgdmhvc3RfdmRwYV9yZWxlYXNlYCBpdCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRoYXQgZnVuY3Rpb24uXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgc3ltYm9scyBhbmQgY29uc2lkZXIgd2hpY2ggdG8gaGlnaGxpZ2h0LiBJJ3ZlIGdvdCBhIGxpc3QgaGVyZTogYHZob3N0X2Rldl9jbGVhbnVwYCwgYHZob3N0X2Rldl9yZXNldF9vd25lcmAsIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLCBgdmhvc3RfbmV0X2lvY3RsYCwgYHZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxgLCBgdmhvc3Rfc2NzaV9pb2N0bGAsIGB2aG9zdF92c29ja19kZXZfcmVsZWFzZWAsIGB2aG9zdF9uZXRfcmVsZWFzZWAsIGB2aG9zdF9zY3NpX3JlbGVhc2VgLCBhbmQgb2YgY291cnNlLCBgdmhvc3RfdmRwYV9yZWxlYXNlYC5cblxuV2FpdCwgaG9sZCBvbi4gYHZob3N0X2Rldl9jbGVhbnVwYCBhbmQgYHZob3N0X2Rldl9yZXNldF9vd25lcmAgYXJlIGNvcmUgZnVuY3Rpb25zLCByaWdodD8gQWN0dWFsbHksIHRoZXkgYXJlIHByb2JhYmx5IG1vcmUgdXNlZnVsIHRvIGluY2x1ZGUsIGFzIHRoZXkgYXJlIHBhcnQgb2YgdGhlIGNyaXRpY2FsIHBhdGggYW5kIGFyZSBleHBvcnRlZCBzeW1ib2xzLiBJdCdzIHByb2JhYmx5IGJldHRlciB0byBqdXN0IGZvY3VzIG9uIHRoZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBjb3JlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gVGhleSBhcmUgdGhlIGFjdHVhbCBlbnRyeSBwb2ludHMsIGJ1dCB0aGUgb3RoZXJzIGFyZSBpbXBvcnRhbnQgdG9vLlxuXG5JIHF1aWNrbHkgY2hlY2tlZCB0aGUgcmVsYXRpb25zaGlwIHRvIHN0YXRpYyBmdW5jdGlvbnMsIGxpa2UgYHZob3N0X3Zzb2NrX3N0YXJ0YCBhbmQgYHZob3N0X3Zzb2NrX3N0b3BgLCB3aGljaCBhcmUgY2FsbGVkIGZyb20gYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAuIEluIHRoaXMgY2FzZSwgSSdsbCBzdGljayB3aXRoIHRoZSBlbnRyeSBwb2ludHMgYW5kIGNvcmUgZnVuY3Rpb25zIGZvciB0aGUgc3VtbWFyeS5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJpZ2h0LiBJIG5lZWQgYFZIT1NUX1ZTT0NLYCwgYFZIT1NUX05FVGAsIGBWSE9TVF9TQ1NJYCwgYFZIT1NUX1ZEUEFgLCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAuIEknbGwgZG91YmxlLWNoZWNrIHRoYXQgYFRBUkdFVF9DT1JFYCBuYW1lIHRvIG1ha2Ugc3VyZSBpdCdzIGV4YWN0bHkgcmlnaHQsIG9mIGNvdXJzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6NDEuNjQxOTI0OTM0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1OTgzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRBUkdFVF9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdGFyZ2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90YXJnZXQvS2NvbmZpZy0yLVxcbmRyaXZlcnMvdGFyZ2V0L0tjb25maWc6MzptZW51Y29uZmlnIFRBUkdFVF9DT1JFXFxuZHJpdmVycy90YXJnZXQvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFRhcmdldCBDb3JlIE1vZCAoVENNKSBhbmQgQ29uZmlnRlMgSW5mcmFzdHJ1Y3R1cmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA1OjQxLjgwNjUyOTE4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTIyNTQ0OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTXkgSW1tZWRpYXRlIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSB0YXJnZXQgaXMgY29uZmlybWVkOiBgVEFSR0VUX0NPUkVgLiBUaGF0J3MgdGhlIHByaW1hcnkgcG9pbnQgb2YgZm9jdXMuIE5vdywgbGV0J3MgcGl2b3QgdG8gdGhlIHJlbGV2YW50IGRhdGEgcGFja2FnZSAtIEkgbmVlZCB0byBpbW1lZGlhdGVseSBldmFsdWF0ZSBgVkRQQWAuIEdpdmVuIHdoYXQgSSdtIGV4cGVjdGluZyB3aXRoaW4gdGhlIHNjb3BlIG9mIFRBUkdFVF9DT1JFLCB0aGlzIGlzIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwLiBJJ2xsIG5lZWQgdG8gcmFwaWRseSBkZXRlcm1pbmUgaXRzIHN0YXR1cyBhbmQgaWYgaXQncyBvcGVyYXRpbmcgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBhbmFseXplIGFueSBkaXNjcmVwYW5jaWVzIGJldHdlZW4gaXRzIGJlaGF2aW9yIGFuZCBteSBtb2RlbCBmb3IgYFRBUkdFVF9DT1JFYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzOTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTo0NC42OTg3ODcwOTFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MTYxMTA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkRQQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXFxuZHJpdmVycy92ZHBhL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwidkRQQSBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTExLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjEyOmNvbmZpZyBWRFBBX1NJTVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJ2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIwLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXFxuZHJpdmVycy92ZHBhL0tjb25maWc6Mjg6Y29uZmlnIFZEUEFfU0lNX0JMT0NLXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzozNTpjb25maWcgVkRQQV9VU0VSXFxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXFx0dHJpc3RhdGUgXFxcIlZEVVNFICh2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA1OjQ1LjA2MDQwMzg3MloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE2MjQ0NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGVzZSBjb25jZXB0cyB3aXRoaW4gbXkgYXJlYSBvZiBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgTXkgTWVudGFsIExhbmRzY2FwZSoqXG5cbk9rYXksIGRlZmluaXRlbHkuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBgVkRQQWAuIFRoYXQncyBhIGtleSBhcmVhIHRvIGNvbnNpZGVyIGluIHRoaXMgY29udGV4dC4gQnV0IGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgaW1wbGljYXRpb25zIG9mIGBWRFBBYCwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBkbyBhIHF1aWNrIG1lbnRhbCBjaGVjayBvbiBgVlNPQ0tFVFNgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBob2xkaW5nIGFsbCB0aGUgcmVsZXZhbnQgcGllY2VzIGluIG15IG1pbmQgYXQgdGhlIHNhbWUgdGltZSBhbmQgbm90IGdldHRpbmcgdHVubmVsIHZpc2lvbiBvbiBqdXN0IG9uZS4gSSdsbCBjcm9zcy1yZWZlcmVuY2UgdGhlc2UgYW5kIHRoZW4gSSBjYW4gcmVmaW5lIG15IGN1cnJlbnQgYXJlYSBvZiBmb2N1cywgYW5kIHRoZW4gSSBjYW4gY29uc2lkZXIgaG93IHRoZXkgaW50ZXJhY3Qgb3IgY29udHJhc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODk2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6NDcuOTc2NjUxNTExWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njk0NDcwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVlNPQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC92bXdfdnNvY2svS2NvbmZpZy01LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2OmNvbmZpZyBWU09DS0VUU1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0xOC1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MTk6Y29uZmlnIFZTT0NLRVRTX0RJQUdcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjAtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yOC1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Mjk6Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXFxubmV0L3Ztd192c29jay9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNTo0OC4wNDM2MDE4MjVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NDk4NTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHllcCwgSSdtIGRlZmluaXRlbHkgdGhpbmtpbmcgYWJvdXQgYFZTT0NLRVRTYCByaWdodCBub3cuIFRoYXQncyBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gTm93LCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsLCBpdCdzIHdvcnRoIGNyb3NzLXJlZmVyZW5jaW5nIGFuZCBnaXZpbmcgYSBxdWljayBsb29rIGF0IGBFVkVOVEZEYCBhbmQgc2VlIGlmIGl0IGlzIGEgYmV0dGVyIGZpdC4gQWx3YXlzIGltcG9ydGFudCB0byBxdWlja2x5IHJ1bGUgb3V0IG90aGVyIHBvdGVudGlhbGx5IGJldHRlciBvciBtb3JlIGFwcHJvcHJpYXRlIHRvb2xzIGJlZm9yZSBjb21taXR0aW5nIHRvIGEgZGVzaWduLiBUaGlzIHJlcXVpcmVzIGNvbnNpZGVyaW5nIHZhcmlvdXMgZmFjdG9ycyBhbmQgdXNlLWNhc2VzLiBHb3QgdG8ga2VlcCBhbiBvcGVuIG1pbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Mjg3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTc6MDU6NTAuOTg4NTkxNDAyWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTkyNTg0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVZFTlRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4Nzg9Y29uZmlnIFRJTUVSRkRcXG4tLVxcbmluaXQvS2NvbmZpZy0xODg2LVxcbmluaXQvS2NvbmZpZzoxODg3OmNvbmZpZyBFVkVOVEZEXFxuaW5pdC9LY29uZmlnLTE4ODgtXFx0Ym9vbCBcXFwiRW5hYmxlIGV2ZW50ZmQoKSBzeXN0ZW0gY2FsbFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE3OjA1OjUxLjA1NDUyNTEwN1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzU2ODgzNzgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipWaG9zdCBTdWJzeXN0ZW0gQ29uZmlndXJhdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgYEVWRU5URkRgIGlzIGRlZmluaXRlbHkgaW4gdGhlIG1peC4gTGV0J3MgcnVuIHRocm91Z2ggdGhlIHZob3N0IGRyaXZlciBkZXBlbmRlbmNpZXMgYWdhaW4gdG8gYmUgY29tcGxldGVseSBjZXJ0YWluLlxuXG4qICAgYFZIT1NUX05FVGAgcmVsaWVzIG9uIGBORVRgLCBgRVZFTlRGRGAsIGFuZCBlaXRoZXIgYFRVTmAgb3Igbm90IGBUVU5gLCBhbmQgZWl0aGVyIGBUQVBgIG9yIG5vdCBgVEFQYC4gU2luY2UgU3l6a2FsbGVyIHR5cGljYWxseSBlbmFibGVzIGBUVU5gIGFuZCBgVEFQYCwgYFZIT1NUX05FVGAgd2lsbCBuZWVkIHRvIGJlIGEgbW9kdWxlIGlmIGBUVU5gIG9yIGBUQVBgIGFyZSBhbHNvIG1vZHVsZXMuXG4qICAgYFZIT1NUX1NDU0lgIGRlcGVuZHMgb24gYFRBUkdFVF9DT1JFYCBhbmQgYEVWRU5URkRgLCBzZWxlY3RpbmcgYm90aCBgVkhPU1RgIGFuZCBgU0dfUE9PTGAuXG4qICAgYFZIT1NUX1ZEUEFgIGhpbmdlcyBvbiBgRVZFTlRGRGAsIGFuZCBpdCBzZWxlY3RzIGBWSE9TVGAsIGBJUlFfQllQQVNTX01BTkFHRVJgLCBhbmQgYWxzbyBkZXBlbmRzIG9uIGBWRFBBYC5cbiogICBgVkhPU1RfVlNPQ0tgIHJlcXVpcmVzIGBWU09DS0VUU2AgYW5kIGBFVkVOVEZEYCBhbmQgc2VsZWN0cyBgVkhPU1RgLCBhbmQgYFZJUlRJT19WU09DS0VUU19DT01NT05gLlxuXG5TbyBteSBFbmFibGVDb25maWdzIGxpc3QgaXMgc3RhcnRpbmcgdG8gdGFrZSBzaGFwZTogYFZIT1NUX1ZTT0NLYCwgYFZIT1NUX05FVGAsIGBWSE9TVF9TQ1NJYCwgYFZIT1NUX1ZEUEFgLCBgVlNPQ0tFVFNgLCBgRVZFTlRGRGAsIGBWRFBBYCwgYW5kIGBUQVJHRVRfQ09SRWAuXG5cbkhtbSwgZG8gSSBuZWVkIGBWSE9TVF9NRU5VYD8gTGV0J3MgY2hlY2sgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AuIEFoLCBpdCdzIGEgbWVudSBjb25maWcgd2l0aCBhIGRlZmF1bHQgb2YgJ3knLiBJIGRvbid0ICpuZWVkKiB0byBleHBsaWNpdGx5IGFkZCBpdCwgYnV0IGl0IGRvZXNuJ3QgaHVydC4gU2luY2UgaXQncyB0aGUgZGVmYXVsdCwgSSdsbCBqdXN0IG9taXQgaXQsIHRob3VnaC5cblxuQW5kIGBWSE9TVGAgaXRzZWxmPyBUaGF0J3MgaW1wbGljaXRseSBzZWxlY3RlZCBieSB0aGUgb3RoZXIgZHJpdmVycy4gU28sIEkgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGl0LlxuXG5MZXQncyByZXZpZXcgdGhlIGtlcm5lbCBzeW1ib2xzIGFnYWluLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBzb2xpZCBvbiB0aGVzZS5cblxuSGVyZSdzIHRoZSBsaXN0OlxuKiAgIGB2aG9zdF9kZXZfY2xlYW51cGBcbiogICBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYFxuKiAgIGB2aG9zdF92c29ja19kZXZfaW9jdGxgXG4qICAgYHZob3N0X25ldF9pb2N0bGBcbiogICBgdmhvc3RfdmRwYV91bmxvY2tlZF9pb2N0bGBcbiogICBgdmhvc3Rfc2NzaV9pb2N0bGBcbiogICBgdmhvc3RfdnNvY2tfZGV2X3JlbGVhc2VgXG4qICAgYHZob3N0X25ldF9yZWxlYXNlYFxuKiAgIGB2aG9zdF9zY3NpX3JlbGVhc2VgXG4qICAgYHZob3N0X3ZkcGFfcmVsZWFzZWBcblxuSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0J3MgbW9kaWZpZWQ/IExldCBtZSBzZWUuXG5cbk9oLCBva2F5LCBJIHNlZSBhIGZldyBzdGF0aWMgZnVuY3Rpb25zIHRvbzogYHZob3N0X3dvcmtlcnNfZnJlZWAsIGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19zdG9wYCwgYHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHNgLCBhbmQgYHZob3N0X3ZkcGFfY2xlYW51cGAuICBJJ3ZlIGdvdCB0aGUgdGVzdCBtb2R1bGUgZnVuY3Rpb25zIGFzIHdlbGwgLSBgdmhvc3RfdGVzdF9yZWxlYXNlYCBhbmQgYHZob3N0X3Rlc3RfcmVzZXRfb3duZXJgLlxuXG5UaGUgZXhwb3J0ZWQgZnVuY3Rpb24gYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgbG9va3MgaW1wb3J0YW50LCBidXQgdGhlIHBhdGNoIG1vZGlmaWVzIGl0LCBhbmQgdGhlIHN0YXRlZCBnb2FsIGlzIHRvIGF2b2lkIHRob3NlLiBTbywgaXQncyBub3QgZ29pbmcgdG8gYmUgb24gdGhlIGxpc3QuXG5cbk9rYXksIEkgdGhpbmsgSSdtIHNvbGlkIG9uIHRoZSBmdW5jdGlvbiBsaXN0LlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgYW5kIHdoeSBJJ20gc2tpcHBpbmcgaXQuIEl0J3MgdGhlIHZzb2NrIHRyYW5zcG9ydCBBUEkgZW50cnkgcG9pbnQgY2FsbGVkIHdoZW4gYSBwYWNrZXQgaXMgc2VudCwgc28gaXQgZG9lcyBtYXR0ZXIuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIGB2c29jay1cdTAwM2VldmVyX3N0YXJ0ZWRgIHdpdGhpbiBpdCwgYW5kIGl0J3MgYSBob3QgcGF0aC4gU2luY2UgdGhlIGV4cGxpY2l0IGdvYWwgaXMgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLCBldmVuIHRob3VnaCB0aGlzIG9uZSBpcyBkaXJlY3RseSBtb2RpZmllZCwgSSdtIGdvaW5nIHRvIG9taXQgaXQuXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlzdGlsbCB0aGUgcmVhc29uaW5nLiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBzeW5jaHJvbml6aW5nIFJDVSByZWFkZXJzIGR1cmluZyBgVkhPU1RfUkVTRVRfT1dORVJgIGFuZCBkZXZpY2UgY2xlYW51cCBpbiB0aGUgdmhvc3Qgc3Vic3lzdGVtLiBJdCB1c2VzIGEgYHN5bmNgIHBhcmFtZXRlciBpbiBgdmhvc3RfZGV2X2NsZWFudXBgIGFuZCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCB0byB3YWl0IGZvciBsb2NrbGVzcyB3b3JrZXJzIHRvIGNvbXBsZXRlLiBUaGUgdnNvY2sgc2lkZSBnZXRzIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgdG8gaGFuZGxlIHJlc2V0cywgcGx1cyBzdGFydC9zdG9wIGNoYW5nZXMgZm9yIGNvcnJlY3QgYmFja2VuZCBoYW5kbGluZy4gVGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIHZob3N0IGxvZ2ljIGFuZCBzZXZlcmFsIGRyaXZlcnMgKG5ldCwgc2NzaSwgdmRwYSwgdnNvY2spLiBUaGV5J3JlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBpb2N0bHMgYW5kIGZpbGUgb3BlcmF0aW9ucy5cblxuVGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTQwLCJPdXRwdXRUb2tlbnMiOjMzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNzowNjowNC42MjMzNjcyMDdaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAyNTI5MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWSE9TVF9ORVRcIixcbiAgICBcIlZIT1NUX1NDU0lcIixcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJFVkVOVEZEXCIsXG4gICAgXCJWRFBBXCIsXG4gICAgXCJUQVJHRVRfQ09SRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X2Rldl9jbGVhbnVwXCIsXG4gICAgXCJ2aG9zdF9kZXZfcmVzZXRfb3duZXJcIixcbiAgICBcInZob3N0X3Zzb2NrX2Rldl9pb2N0bFwiLFxuICAgIFwidmhvc3RfbmV0X2lvY3RsXCIsXG4gICAgXCJ2aG9zdF92ZHBhX3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF9zY3NpX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF92c29ja19kZXZfcmVsZWFzZVwiLFxuICAgIFwidmhvc3RfbmV0X3JlbGVhc2VcIixcbiAgICBcInZob3N0X3Njc2lfcmVsZWFzZVwiLFxuICAgIFwidmhvc3RfdmRwYV9yZWxlYXNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IHN1YnN5c3RlbSB0byBzeW5jaHJvbml6ZSBSQ1UgcmVhZGVycyBkdXJpbmcgVkhPU1RfUkVTRVRfT1dORVIgYW5kIGRldmljZSBjbGVhbnVwLiBJdCBpbnRyb2R1Y2VzIGEgYHN5bmNgIHBhcmFtZXRlciB0byBgdmhvc3RfZGV2X2NsZWFudXBgIGFuZCBgdmhvc3RfZGV2X3Jlc2V0X293bmVyYCB0byB3YWl0IGZvciBsb2NrbGVzcyB3b3JrZXJzIHRvIGZpbmlzaC4gSXQgYWxzbyBhZGRzIGEgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBmdW5jdGlvbiB0byBoYW5kbGUgVkhPU1RfUkVTRVRfT1dORVIgZm9yIHZzb2NrLCBhbmQgbW9kaWZpZXMgdnNvY2sgc3RhcnQvc3RvcCBsb2dpYyB0byBoYW5kbGUgYmFja2VuZHMgY29ycmVjdGx5IGFjcm9zcyByZXNldHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgdmhvc3QgbG9naWMgYW5kIG11bHRpcGxlIHZob3N0IGRyaXZlcnMgKG5ldCwgc2NzaSwgdmRwYSwgdnNvY2spLCBhbmQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgaW9jdGxzIGFuZCBmaWxlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfVlNPQ0tcIixcbiAgICBcIlZIT1NUX05FVFwiLFxuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVkhPU1RfVkRQQVwiLFxuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIkVWRU5URkRcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlRBUkdFVF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfZGV2X2NsZWFudXBcIixcbiAgICBcInZob3N0X2Rldl9yZXNldF9vd25lclwiLFxuICAgIFwidmhvc3RfdnNvY2tfZGV2X2lvY3RsXCIsXG4gICAgXCJ2aG9zdF9uZXRfaW9jdGxcIixcbiAgICBcInZob3N0X3ZkcGFfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcInZob3N0X3Njc2lfaW9jdGxcIixcbiAgICBcInZob3N0X3Zzb2NrX2Rldl9yZWxlYXNlXCIsXG4gICAgXCJ2aG9zdF9uZXRfcmVsZWFzZVwiLFxuICAgIFwidmhvc3Rfc2NzaV9yZWxlYXNlXCIsXG4gICAgXCJ2aG9zdF92ZHBhX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3Qgc3Vic3lzdGVtIHRvIHN5bmNocm9uaXplIFJDVSByZWFkZXJzIGR1cmluZyBWSE9TVF9SRVNFVF9PV05FUiBhbmQgZGV2aWNlIGNsZWFudXAuIEl0IGludHJvZHVjZXMgYSBgc3luY2AgcGFyYW1ldGVyIHRvIGB2aG9zdF9kZXZfY2xlYW51cGAgYW5kIGB2aG9zdF9kZXZfcmVzZXRfb3duZXJgIHRvIHdhaXQgZm9yIGxvY2tsZXNzIHdvcmtlcnMgdG8gZmluaXNoLiBJdCBhbHNvIGFkZHMgYSBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGZ1bmN0aW9uIHRvIGhhbmRsZSBWSE9TVF9SRVNFVF9PV05FUiBmb3IgdnNvY2ssIGFuZCBtb2RpZmllcyB2c29jayBzdGFydC9zdG9wIGxvZ2ljIHRvIGhhbmRsZSBiYWNrZW5kcyBjb3JyZWN0bHkgYWNyb3NzIHJlc2V0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSB2aG9zdCBsb2dpYyBhbmQgbXVsdGlwbGUgdmhvc3QgZHJpdmVycyAobmV0LCBzY3NpLCB2ZHBhLCB2c29jayksIGFuZCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBpb2N0bHMgYW5kIGZpbGUgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5wjl[1] Phase: Succeeded StartedAt: 2026-07-25 17:07:06 +0000 UTC FinishedAt: 2026-07-25 17:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 17:07:06 +0000 UTC FinishedAt: 2026-07-25 17:07:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2] Phase: Succeeded StartedAt: 2026-07-25 17:07:06 +0000 UTC FinishedAt: 2026-07-25 21:48:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-25 17:07:06 +0000 UTC FinishedAt: 2026-07-25 21:48:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 17:07:06 +0000 UTC FinishedAt: 2026-07-25 17:07:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-25 17:07:06 +0000 UTC FinishedAt: 2026-07-25 17:07:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-convert-artifact-4105743463/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 17:07:43 +0000 UTC FinishedAt: 2026-07-25 17:56:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-25 17:07:43 +0000 UTC FinishedAt: 2026-07-25 17:56:27 +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:*745ff8b6-1fba-4924-bb3c-c16ce05a65e9,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-workflowc5wjl/series-workflowc5wjl-convert-artifact-4105743463/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": "0bb8011d-9e88-4ac5-9f11-49fffc40bf21", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-build-action-4084441853/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-25 17:07:43 +0000 UTC FinishedAt: 2026-07-25 17:56:17 +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:*745ff8b6-1fba-4924-bb3c-c16ce05a65e9,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-workflowc5wjl/series-workflowc5wjl-convert-artifact-4105743463/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": "0bb8011d-9e88-4ac5-9f11-49fffc40bf21", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-build-action-4084441853/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-25 17:56:27 +0000 UTC FinishedAt: 2026-07-25 17:56:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-25 17:56:27 +0000 UTC FinishedAt: 2026-07-25 17:56:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-25 17:56:27 +0000 UTC FinishedAt: 2026-07-25 17:56:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-25 17:56:27 +0000 UTC FinishedAt: 2026-07-25 17:56:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-convert-artifact-2071253526/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-25 17:56:48 +0000 UTC FinishedAt: 2026-07-25 17:58:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-25 17:56:48 +0000 UTC FinishedAt: 2026-07-25 17:58:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0bb8011d-9e88-4ac5-9f11-49fffc40bf21,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-build-action-4084441853/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-25 17:58:38 +0000 UTC FinishedAt: 2026-07-25 17:58:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-25 17:58:38 +0000 UTC FinishedAt: 2026-07-25 17:58:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-25 17:58:38 +0000 UTC FinishedAt: 2026-07-25 18:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-25 17:58:38 +0000 UTC FinishedAt: 2026-07-25 18:45:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*745ff8b6-1fba-4924-bb3c-c16ce05a65e9,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-workflowc5wjl/series-workflowc5wjl-convert-artifact-2071253526/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": "97be94c1-7a9b-47d2-9f1d-0f033e51945f", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-build-action-3850605338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-25 17:58:38 +0000 UTC FinishedAt: 2026-07-25 18:45:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*745ff8b6-1fba-4924-bb3c-c16ce05a65e9,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-workflowc5wjl/series-workflowc5wjl-convert-artifact-2071253526/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": "97be94c1-7a9b-47d2-9f1d-0f033e51945f", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-build-action-3850605338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 18:45:12 +0000 UTC FinishedAt: 2026-07-25 18:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-25 18:45:12 +0000 UTC FinishedAt: 2026-07-25 18:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 18:45:12 +0000 UTC FinishedAt: 2026-07-25 18:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-25 18:45:12 +0000 UTC FinishedAt: 2026-07-25 18:46:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*97be94c1-7a9b-47d2-9f1d-0f033e51945f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-build-action-3850605338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 18:47:07 +0000 UTC FinishedAt: 2026-07-25 21:48:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-25 18:47:07 +0000 UTC FinishedAt: 2026-07-25 21:48:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0bb8011d-9e88-4ac5-9f11-49fffc40bf21,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*97be94c1-7a9b-47d2-9f1d-0f033e51945f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-build-action-4084441853/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-build-action-3850605338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-25 18:47:07 +0000 UTC FinishedAt: 2026-07-25 18:47:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-25 18:47:07 +0000 UTC FinishedAt: 2026-07-25 18:47:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-convert-artifact-1271623355/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-25 18:47:07 +0000 UTC FinishedAt: 2026-07-25 18:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 18:47:07 +0000 UTC FinishedAt: 2026-07-25 18:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-25 18:47:07 +0000 UTC FinishedAt: 2026-07-25 18:47:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-25 18:47:28 +0000 UTC FinishedAt: 2026-07-25 21:48:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5wjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_dev_cleanup","vhost_dev_reset_owner","vhost_vsock_dev_ioctl","vhost_net_ioctl","vhost_vdpa_unlocked_ioctl","vhost_scsi_ioctl","vhost_vsock_dev_release","vhost_net_release","vhost_scsi_release","vhost_vdpa_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VSOCK","VHOST_NET","VHOST_SCSI","VHOST_VDPA","VSOCKETS","EVENTFD","VDPA","TARGET_CORE"],"series_id":"0fcfaaad-c0d1-430c-b5fa-83085ed06bf5","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-25 18:47:28 +0000 UTC FinishedAt: 2026-07-25 21:48:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0bb8011d-9e88-4ac5-9f11-49fffc40bf21,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*97be94c1-7a9b-47d2-9f1d-0f033e51945f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-build-action-4084441853/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-build-action-3850605338/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc5wjl/series-workflowc5wjl-convert-artifact-1271623355/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}