Name: series-workflowcq99m Phase: Running StartedAt: 2026-07-29 00:42:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[0] Phase: Succeeded StartedAt: 2026-07-29 00:42:35 +0000 UTC FinishedAt: 2026-07-29 00:54:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 00:42:35 +0000 UTC FinishedAt: 2026-07-29 00:54:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2a4faffc103297c4822bb269d521249b75cc2261", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2a4faffc103297c4822bb269d521249b75cc2261", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "2bdd7f7f-4972-466b-9882-2e70b6d9fef8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_start", "damon_set_attrs", "damon_set_regions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBpc3N1ZSBpbiBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBieSB1c2luZyBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgdG8gY2FsY3VsYXRlIGBtYXhfdGhyZXNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiBEQU1PTiYjMzk7cyByZWdpb24gbWVyZ2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIzNjczYTg5ZGEwNTE2OGVkZDc0NzZmMDRmYTE5YzM1ZTM3ZGQ3YmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAwMDo1MDo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5pbmRleCBlNjc1YTU3MTQ1ZTM2Li5lOTQ4OGJiNDhkMjNjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5AQCAtMyw3ICYjNDM7Myw3IEBAIERhdGU6XHRcdE1hciAyMDIyXG4gQ29udGFjdDpcdFNKIFBhcmsgXHUwMDNjc2pAa2VybmVsLm9yZ1x1MDAzZVxuIERlc2NyaXB0aW9uOlx0SW50ZXJmYWNlIGZvciBEYXRhIEFjY2VzcyBNT05pdG9yaW5nIChEQU1PTikuICBDb250YWlucyBmaWxlc1xuIFx0XHRmb3IgY29udHJvbGxpbmcgREFNT04uICBGb3IgbW9yZSBkZXRhaWxzIG9uIERBTU9OIGl0c2VsZixcbi1cdFx0cGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vaW5kZXgucnN0LlxuJiM0MztcdFx0cGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vbW0vZGFtb24vaW5kZXgucnN0LlxuIFxuIFdoYXQ6XHRcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL1xuIERhdGU6XHRcdE1hciAyMDIyXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0XG5pbmRleCBmYjJmYTAwY2M5YWExLi5hN2MxMzUyMzM5Mzc4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL21haW50YWluZXItcHJvZmlsZS5yc3RcbkBAIC0xMDYsMTggJiM0MzsxMDYsOSBAQCBBSSBSZXZpZXdcbiBcbiBGb3IgcGF0Y2hlcyB0aGF0IGFyZSBwdWJsaWNseSBwb3N0ZWQgdG8gREFNT04gbWFpbGluZyBsaXN0XG4gKGRhbW9uQGxpc3RzLmxpbnV4LmRldiksIEFJIHJldmlld3Mgb2YgdGhlIHBhdGNoZXMgd2lsbCBiZSBhdmFpbGFibGUgYXRcbi1zYXNoaWtvLmRldi4gIFRoZSByZXZpZXdzIGNvdWxkIGFsc28gYmUgc2VudCBhcyBtYWlscyB0byB0aGUgYXV0aG9yIG9mIHRoZVxuLXBhdGNoLlxuLVxuLVBhdGNoIGF1dGhvcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEFJIHJldmlld3MgYW5kIHNoYXJlIHRoZWlyIG9waW5pb25zLlxuLVRoZSBzaGFyaW5nIGNvdWxkIGJlIGRvbmUgYXMgYSByZXBseSB0byB0aGUgbWFpbCB0aHJlYWQuICBDb25zaWRlciByZWR1Y2luZyB0aGVcbi1yZWNpcGllbnRzIGxpc3QgZm9yIHN1Y2ggc2hhcmluZywgc2luY2Ugc29tZSBwZW9wbGUgYXJlIG5vdCByZWFsbHkgaW50ZXJlc3RlZFxuLWluIEFJIHJldmlld3MuICBBcyBhIHJ1bGUgb2YgdGh1bWIsIGRyb3Agc3RhYmxlQHZnZXIua2VybmVsLm9yZyBhbmQgaW5kaXZpZHVhbHNcbi1leGNlcHQgREFNT04gbWFpbnRhaW5lci5cbi1cbi1gaGttbGAgYWxzbyBwcm92aWRlcyBhIGBmZWF0dXJlXG4tXHUwMDNjaHR0cHM6Ly9naXRodWIuY29tL3NqcDM4L2hhY2tlcm1haWwvYmxvYi9tYXN0ZXIvVVNBR0UubWQjZm9yd2FyZGluZy1zYXNoaWtvZGV2LXN0YXR1c2NvbW1lbnRzLXRvLW1haWxpbmctbGlzdFx1MDAzZWBfXG4tZm9yIHN1Y2ggc2hhcmluZy4gIFBsZWFzZSBmZWVsIGZyZWUgdG8gdXNlIHRoZSBmZWF0dXJlLlxuJiM0MztzYXNoaWtvLmRldi4gIFRoZSByZXZpZXdzIHdpbGwgYWxzbyBiZSBzZW50IGFzIHJlcGxpZXMgdG8gdGhlIGF1dGhvciBvZiB0aGVcbiYjNDM7cGF0Y2ggYW5kIHRoZSBtYWlsaW5nIGxpc3QuXG4gXG4tSXQgaXMgb25seSBhbiBvcHRpb25hbCByZWNvbW1lbmRhdGlvbi4gIERBTU9OIG1haW50YWluZXIgY291bGQgYWxzbyBhc2sgYW55XG4tcXVlc3Rpb24gYWJvdXQgdGhlIEFJIHJldmlld3MsIHRob3VnaC5cbiYjNDM7UGF0Y2ggYXV0aG9ycyBhcmUgZW5jb3VyYWdlZCB0byBjaGVjayB0aGUgQUkgcmV2aWV3cyBhbmQgc2hhcmUgdGhlaXIgb3BpbmlvbnNcbiYjNDM7YnkgcmVwbHlpbmcgb24gdGhlIG1haWwgdGhyZWFkLiAgSXQgaXMgb25seSBhbiBvcHRpb25hbCByZWNvbW1lbmRhdGlvbi4gIERBTU9OXG4mIzQzO21haW50YWluZXIgY291bGQgYWxzbyBhc2sgYW55IHF1ZXN0aW9uIGFib3V0IHRoZSBBSSByZXZpZXdzLCB0aG91Z2guXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi42YzBmYjE3NWUzZDIxIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMzczLDggJiM0MzszMzczLDcgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXG4gXHR1bnNpZ25lZCBpbnQgbWF4X3RocmVzO1xuIFx0Ym9vbCBjb3VudF9hZ2UgPSB0cnVlO1xuIFxuLVx0bWF4X3RocmVzID0gYy1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsIC9cbi1cdFx0KGMtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gIGMtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsIDogMSk7XG4mIzQzO1x0bWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjLVx1MDAzZWF0dHJzKTtcbiBcdHdoaWxlICh0cnVlKSB7XG4gXHRcdG5yX3JlZ2lvbnMgPSAwO1xuIFx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuQEAgLTM1OTcsMTAgJiM0MzszNTk2LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3Nfd21hcmtfd2FpdF91cyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcbiBcbiBcdC8qIGhpZ2hlciB0aGFuIGhpZ2ggd2F0ZXJtYXJrIG9yIGxvd2VyIHRoYW4gbG93IHdhdGVybWFyayAqL1xuIFx0aWYgKG1ldHJpYyBcdTAwM2Ugc2NoZW1lLVx1MDAzZXdtYXJrcy5oaWdoIHx8IHNjaGVtZS1cdTAwM2V3bWFya3MubG93IFx1MDAzZSBtZXRyaWMpIHtcbi1cdFx0aWYgKHNjaGVtZS1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuLVx0XHRcdHByX2RlYnVnKFwmIzM0O2RlYWN0aXZhdGUgYSBzY2hlbWUgKCVkKSBmb3IgJXMgd21hcmtcXG5cJiMzNDssXG4tXHRcdFx0XHQgc2NoZW1lLVx1MDAzZWFjdGlvbixcbi1cdFx0XHRcdCBzdHJfaGlnaF9sb3cobWV0cmljIFx1MDAzZSBzY2hlbWUtXHUwMDNld21hcmtzLmhpZ2gpKTtcbiBcdFx0c2NoZW1lLVx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIHNjaGVtZS1cdTAwM2V3bWFya3MuaW50ZXJ2YWw7XG4gXHR9XG5AQCAtMzYxMCw4ICYjNDM7MzYwNSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3dtYXJrX3dhaXRfdXMoc3RydWN0IGRhbW9zICpzY2hlbWUpXG4gXHRcdFx0IXNjaGVtZS1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuIFx0XHRyZXR1cm4gc2NoZW1lLVx1MDAzZXdtYXJrcy5pbnRlcnZhbDtcbiBcbi1cdGlmICghc2NoZW1lLVx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXG4tXHRcdHByX2RlYnVnKFwmIzM0O2FjdGl2YXRlIGEgc2NoZW1lICglZClcXG5cJiMzNDssIHNjaGVtZS1cdTAwM2VhY3Rpb24pO1xuIFx0c2NoZW1lLVx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQgPSB0cnVlO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTM3NTQsOCAmIzQzOzM3NDcsNiBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiBcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCA9IGRhdGE7XG4gXHR1bnNpZ25lZCBsb25nIHN6X2xpbWl0ID0gMDtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O2tkYW1vbmQgKCVkKSBzdGFydHNcXG5cJiMzNDssIGN1cnJlbnQtXHUwMDNlcGlkKTtcbi1cbiBcdG11dGV4X2xvY2soXHUwMDI2Y3R4LVx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XG4gXHRjdHgtXHUwMDNlY2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IGZhbHNlO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xuQEAgLTM5MDMsNyAmIzQzOzM4OTQsNiBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiBcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuIFx0ZGFtb3Nfd2Fsa19jYW5jZWwoY3R4KTtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O2tkYW1vbmQgKCVkKSBmaW5pc2hlc1xcblwmIzM0OywgY3VycmVudC1cdTAwM2VwaWQpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbiBcdGN0eC1cdTAwM2VrZGFtb25kID0gTlVMTDtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IDRhNTM2ZDQxY2RiMmQuLjUxMWYyODU2ZDM0M2MgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTQ2MywxMSAmIzQzOzQ2MywxMiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpvbGRfcmFuZ2VzLCBpbnQgc3pfb2xkX3JhbmdlcyxcbiBcdFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKm5ld19yYW5nZXMsIGludCBzel9uZXdfcmFuZ2VzLFxuIFx0XHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3osXG4tXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpleHBlY3RfcmFuZ2VzLCBpbnQgc3pfZXhwZWN0X3JhbmdlcylcbiYjNDM7XHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpleHBlY3RfcmFuZ2VzLCBpbnQgc3pfZXhwZWN0X3JhbmdlcyxcbiYjNDM7XHRcdGludCBleHBlY3RfZXJyKVxuIHtcbiBcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4gXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuLVx0aW50IGk7XG4mIzQzO1x0aW50IGksIGVycjtcbiBcbiBcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XG4gXHRpZiAoIXQpXG5AQCAtNDgxLDcgJiM0Mzs0ODIsOCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4gXHR9XG4gXG4tXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCBuZXdfcmFuZ2VzLCBzel9uZXdfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTtcbiYjNDM7XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyh0LCBuZXdfcmFuZ2VzLCBzel9uZXdfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZXJyLCBleHBlY3RfZXJyKTtcbiBcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCBzel9leHBlY3RfcmFuZ2VzKTtcbiBcdGlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IHN6X2V4cGVjdF9yYW5nZXMpIHtcbkBAIC01MTAsNyAmIzQzOzUxMiw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbiBcdFx0XHR7LnN0YXJ0ID0gNSwgLmVuZCA9IDE1fSxcbiBcdFx0XHR7LnN0YXJ0ID0gMTUsIC5lbmQgPSAyNX0sXG4tXHRcdFx0fSwgMik7XG4mIzQzO1x0XHRcdH0sIDIsIDApO1xuIFx0LyogVW4taW50ZXJzZWN0aW5nIHJlZ2lvbnMgc2hvdWxkIGJlIHJlbW92ZWQuICovXG4gXHRkYW1vbl90ZXN0X3NldF9yZWdpb25zX2Zvcih0ZXN0LFxuIFx0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbkBAIC01MjMsNyAmIzQzOzUyNSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdDEsXG4gXHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe1xuIFx0XHRcdHsuc3RhcnQgPSAxOCwgLmVuZCA9IDIzfSxcbi1cdFx0XHR9LCAxKTtcbiYjNDM7XHRcdFx0fSwgMSwgMCk7XG4gXHQvKlxuIFx0ICogSG9sZXMgc2hvdWxkIGJlIGZpbGxlZCB1cCB3aXRoIG5ldyByZWdpb25zLlxuIFx0ICpcbkBAIC01NDQsNyAmIzQzOzU0Niw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdHsuc3RhcnQgPSA4LCAuZW5kID0gMTZ9LFxuIFx0XHRcdHsuc3RhcnQgPSAxNiwgLmVuZCA9IDI0fSxcbiBcdFx0XHR7LnN0YXJ0ID0gMjQsIC5lbmQgPSAyOH0sXG4tXHRcdFx0fSwgMyk7XG4mIzQzO1x0XHRcdH0sIDMsIDApO1xuIFx0LypcbiBcdCAqIE5ldyByZWdpb25zIHNob3VsZCBiZSBhYmxlIHRvIGJlIGFwcGVuZGVkLlxuIFx0ICpcbkBAIC01NjYsNyAmIzQzOzU2OCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdHsuc3RhcnQgPSAwLCAuZW5kID0gNH0sXG4gXHRcdFx0ey5zdGFydCA9IDQsIC5lbmQgPSAxNX0sXG4gXHRcdFx0ey5zdGFydCA9IDI1LCAuZW5kID0gNDB9LFxuLVx0XHRcdH0sIDMpO1xuJiM0MztcdFx0XHR9LCAzLCAwKTtcbiBcdC8qXG4gXHQgKiBOZXcgcmVnaW9ucyBzaG91bGQgYmUgYWJsZSB0byBiZSBpbnNlcnRlZC5cbiBcdCAqXG5AQCAtNTg5LDcgJiM0Mzs1OTEsNDggQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdFx0ey5zdGFydCA9IDAsIC5lbmQgPSAxNX0sXG4gXHRcdFx0ey5zdGFydCA9IDI1LCAuZW5kID0gNDB9LFxuIFx0XHRcdHsuc3RhcnQgPSA0NCwgLmVuZCA9IDUwfSxcbi1cdFx0XHR9LCAzKTtcbiYjNDM7XHRcdFx0fSwgMywgMCk7XG4mIzQzO1x0LyogWmVybyBzaXplIHJlZ2lvbnMgc2hvdWxkIHJldHVybiAtRUlOVkFMLiAqL1xuJiM0MztcdGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLFxuJiM0MztcdFx0XHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7XG4mIzQzO1x0XHRcdHsuc3RhcnQgPSA0MiwgLmVuZCA9IDQyfSxcbiYjNDM7XHRcdFx0fSwgMSwgMSxcbiYjNDM7XHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpO1xuJiM0MztcdC8qIE5lZ2F0aXZlIHNpemUgcmVnaW9ucyBzaG91bGQgcmV0dXJuIC1FSU5WQUwuICovXG4mIzQzO1x0ZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3IodGVzdCxcbiYjNDM7XHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsXG4mIzQzO1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbiYjNDM7XHRcdFx0ey5zdGFydCA9IDQyLCAuZW5kID0gMjF9LFxuJiM0MztcdFx0XHR9LCAxLCAxLFxuJiM0MztcdFx0XHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCwgLUVJTlZBTCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZWdpb25zIHJlc3VsdGluZyBpbiBzYW1lIHJlZ2lvbiBhZnRlciBhbGluZ21lbnQgc2hvdWxkIHJldHVyblxuJiM0MztcdCAqIC1FSU5WQUwuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3IodGVzdCxcbiYjNDM7XHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsXG4mIzQzO1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbiYjNDM7XHRcdFx0ey5zdGFydCA9IDEwLCAuZW5kID0gMjB9LFxuJiM0MztcdFx0XHR7LnN0YXJ0ID0gMjAsIC5lbmQgPSAzMH0sXG4mIzQzO1x0XHRcdH0sIDIsIDQwOTYsXG4mIzQzO1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLCAtRUlOVkFMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHtcbiYjNDM7XHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSAwLFxuJiM0MztcdFx0LmFnZ3JfaW50ZXJ2YWwgPSAwLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdC8qIFplcm8gYWdncmVnYXRpb24gaW50ZXJ2YWwgZG9lc24mIzM5O3QgY2F1c2UgZGl2aXNpb24gYnkgemVybyAqL1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSwgMSk7XG4mIzQzO1xuJiM0MztcdC8qIFRvbyBsYXJnZSBhZ2dyZWdhdGlvbiBpbnRlcnZhbCBkb2VzbiYjMzk7dCBjYXVzZSBvdmVyZmxvdyAqL1xuJiM0MztcdGF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAodW5zaWduZWQgbG9uZylVSU5UX01BWCAmIzQzOyAxO1xuJiM0MztcdEtVTklUX0VYUEVDVF9HRSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSwgMCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0xFKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCBVSU5UX01BWCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcbkBAIC0xNjQzLDYgJiM0MzsxNjg2LDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9yZWdpb25zKSxcbiYjNDM7XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfYXR0cnMpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X212c3VtKSxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggNDk3Njc3NWZlMjc2Mi4uNWNjZjcwZGM4YTMwYiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC0xOTIsMTkgJiM0MzsxOTIsMTAgQEAgc3RhdGljIGludCBkYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gc3RhdGljIHZvaWQgX19kYW1vbl92YV9pbml0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuIHtcbi1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xuIFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXTtcbi1cdGludCB0aWR4ID0gMDtcbiBcbi1cdGlmIChkYW1vbl92YV90aHJlZV9yZWdpb25zKHQsIHJlZ2lvbnMpKSB7XG4tXHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0aSwgY3R4KSB7XG4tXHRcdFx0aWYgKHRpID09IHQpXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR0aWR4JiM0MzsmIzQzOztcbi1cdFx0fVxuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gZ2V0IHRocmVlIHJlZ2lvbnMgb2YgJWR0aCB0YXJnZXRcXG5cJiMzNDssIHRpZHgpO1xuJiM0MztcdGlmIChkYW1vbl92YV90aHJlZV9yZWdpb25zKHQsIHJlZ2lvbnMpKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCByZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaFxuaW5kZXggZjdmYjk0Yjg0ZTcxNi4uODY5MGFlZjFlNDM2YyAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaFxuQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgdGVzdF9nb2FsKClcbiBcdGVuc3VyZV93cml0ZV9zdWNjIFwmIzM0OyRmcGF0aFwmIzM0OyBcJiMzNDthY3RpdmVfbWVtX2JwXCYjMzQ7IFwmIzM0O3ZhbGlkIGlucHV0XCYjMzQ7XG4gXHRlbnN1cmVfd3JpdGVfc3VjYyBcJiMzNDskZnBhdGhcJiMzNDsgXCYjMzQ7aW5hY3RpdmVfbWVtX2JwXCYjMzQ7IFwmIzM0O3ZhbGlkIGlucHV0XCYjMzQ7XG4gXHRlbnN1cmVfd3JpdGVfc3VjYyBcJiMzNDskZnBhdGhcJiMzNDsgXCYjMzQ7bm9kZV9lbGlnaWJsZV9tZW1fYnBcJiMzNDsgXCYjMzQ7dmFsaWQgaW5wdXRcJiMzNDtcbiYjNDM7XHRlbnN1cmVfd3JpdGVfc3VjYyBcJiMzNDskZnBhdGhcJiMzNDsgXCYjMzQ7aHVnZXBhZ2VfbWVtX2JwXCYjMzQ7IFwmIzM0O3ZhbGlkIGlucHV0XCYjMzQ7XG4gXHRlbnN1cmVfd3JpdGVfZmFpbCBcJiMzNDskZnBhdGhcJiMzNDsgXCYjMzQ7Zm9vXCYjMzQ7IFwmIzM0O2ludmFsaWQgaW5wdXRcJiMzNDtcbiBcdGVuc3VyZV9maWxlIFwmIzM0OyRnb2FsX2Rpci9uaWRcJiMzNDsgXCYjMzQ7ZXhpc3RcJiMzNDsgXCYjMzQ7NjAwXCYjMzQ7XG4gXHRlbnN1cmVfZmlsZSBcJiMzNDskZ29hbF9kaXIvcGF0aFwmIzM0OyBcJiMzNDtleGlzdFwmIzM0OyBcJiMzNDs2MDBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfYXR0cnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIGlzc3VlIGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGJ5IHVzaW5nIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCB0byBjYWxjdWxhdGUgYG1heF90aHJlc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIERBTU9OJiMzOTtzIHJlZ2lvbiBtZXJnaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjM2NzNhODlkYTA1MTY4ZWRkNzQ3NmYwNGZhMTljMzVlMzdkZDdiZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDI5IDAwOjUwOjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgppbmRleCBlNjc1YTU3MTQ1ZTM2Li5lOTQ4OGJiNDhkMjNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgpAQCAtMyw3ICYjNDM7Myw3IEBAIERhdGU6CQlNYXIgMjAyMgogQ29udGFjdDoJU0ogUGFyayAmbHQ7c2pAa2VybmVsLm9yZyZndDsKIERlc2NyaXB0aW9uOglJbnRlcmZhY2UgZm9yIERhdGEgQWNjZXNzIE1PTml0b3JpbmcgKERBTU9OKS4gIENvbnRhaW5zIGZpbGVzCiAJCWZvciBjb250cm9sbGluZyBEQU1PTi4gIEZvciBtb3JlIGRldGFpbHMgb24gREFNT04gaXRzZWxmLAotCQlwbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9pbmRleC5yc3QuCiYjNDM7CQlwbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9pbmRleC5yc3QuCiAKIFdoYXQ6CQkvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8KIERhdGU6CQlNYXIgMjAyMgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0CmluZGV4IGZiMmZhMDBjYzlhYTEuLmE3YzEzNTIzMzkzNzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vbWFpbnRhaW5lci1wcm9maWxlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL21haW50YWluZXItcHJvZmlsZS5yc3QKQEAgLTEwNiwxOCAmIzQzOzEwNiw5IEBAIEFJIFJldmlldwogCiBGb3IgcGF0Y2hlcyB0aGF0IGFyZSBwdWJsaWNseSBwb3N0ZWQgdG8gREFNT04gbWFpbGluZyBsaXN0CiAoZGFtb25AbGlzdHMubGludXguZGV2KSwgQUkgcmV2aWV3cyBvZiB0aGUgcGF0Y2hlcyB3aWxsIGJlIGF2YWlsYWJsZSBhdAotc2FzaGlrby5kZXYuICBUaGUgcmV2aWV3cyBjb3VsZCBhbHNvIGJlIHNlbnQgYXMgbWFpbHMgdG8gdGhlIGF1dGhvciBvZiB0aGUKLXBhdGNoLgotCi1QYXRjaCBhdXRob3JzIGFyZSBlbmNvdXJhZ2VkIHRvIGNoZWNrIHRoZSBBSSByZXZpZXdzIGFuZCBzaGFyZSB0aGVpciBvcGluaW9ucy4KLVRoZSBzaGFyaW5nIGNvdWxkIGJlIGRvbmUgYXMgYSByZXBseSB0byB0aGUgbWFpbCB0aHJlYWQuICBDb25zaWRlciByZWR1Y2luZyB0aGUKLXJlY2lwaWVudHMgbGlzdCBmb3Igc3VjaCBzaGFyaW5nLCBzaW5jZSBzb21lIHBlb3BsZSBhcmUgbm90IHJlYWxseSBpbnRlcmVzdGVkCi1pbiBBSSByZXZpZXdzLiAgQXMgYSBydWxlIG9mIHRodW1iLCBkcm9wIHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcgYW5kIGluZGl2aWR1YWxzCi1leGNlcHQgREFNT04gbWFpbnRhaW5lci4KLQotYGhrbWxgIGFsc28gcHJvdmlkZXMgYSBgZmVhdHVyZQotJmx0O2h0dHBzOi8vZ2l0aHViLmNvbS9zanAzOC9oYWNrZXJtYWlsL2Jsb2IvbWFzdGVyL1VTQUdFLm1kI2ZvcndhcmRpbmctc2FzaGlrb2Rldi1zdGF0dXNjb21tZW50cy10by1tYWlsaW5nLWxpc3QmZ3Q7YF8KLWZvciBzdWNoIHNoYXJpbmcuICBQbGVhc2UgZmVlbCBmcmVlIHRvIHVzZSB0aGUgZmVhdHVyZS4KJiM0MztzYXNoaWtvLmRldi4gIFRoZSByZXZpZXdzIHdpbGwgYWxzbyBiZSBzZW50IGFzIHJlcGxpZXMgdG8gdGhlIGF1dGhvciBvZiB0aGUKJiM0MztwYXRjaCBhbmQgdGhlIG1haWxpbmcgbGlzdC4KIAotSXQgaXMgb25seSBhbiBvcHRpb25hbCByZWNvbW1lbmRhdGlvbi4gIERBTU9OIG1haW50YWluZXIgY291bGQgYWxzbyBhc2sgYW55Ci1xdWVzdGlvbiBhYm91dCB0aGUgQUkgcmV2aWV3cywgdGhvdWdoLgomIzQzO1BhdGNoIGF1dGhvcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEFJIHJldmlld3MgYW5kIHNoYXJlIHRoZWlyIG9waW5pb25zCiYjNDM7YnkgcmVwbHlpbmcgb24gdGhlIG1haWwgdGhyZWFkLiAgSXQgaXMgb25seSBhbiBvcHRpb25hbCByZWNvbW1lbmRhdGlvbi4gIERBTU9OCiYjNDM7bWFpbnRhaW5lciBjb3VsZCBhbHNvIGFzayBhbnkgcXVlc3Rpb24gYWJvdXQgdGhlIEFJIHJldmlld3MsIHRob3VnaC4KZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDRkYWY1YTE2NTYwLi42YzBmYjE3NWUzZDIxIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMzczLDggJiM0MzszMzczLDcgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsCiAJdW5zaWduZWQgaW50IG1heF90aHJlczsKIAlib29sIGNvdW50X2FnZSA9IHRydWU7CiAKLQltYXhfdGhyZXMgPSBjLSZndDthdHRycy5hZ2dyX2ludGVydmFsIC8KLQkJKGMtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbCA/ICBjLSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTsKJiM0MzsJbWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncigmYW1wO2MtJmd0O2F0dHJzKTsKIAl3aGlsZSAodHJ1ZSkgewogCQlucl9yZWdpb25zID0gMDsKIAkJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHsKQEAgLTM1OTcsMTAgJiM0MzszNTk2LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3Nfd21hcmtfd2FpdF91cyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSkKIAogCS8qIGhpZ2hlciB0aGFuIGhpZ2ggd2F0ZXJtYXJrIG9yIGxvd2VyIHRoYW4gbG93IHdhdGVybWFyayAqLwogCWlmIChtZXRyaWMgJmd0OyBzY2hlbWUtJmd0O3dtYXJrcy5oaWdoIHx8IHNjaGVtZS0mZ3Q7d21hcmtzLmxvdyAmZ3Q7IG1ldHJpYykgewotCQlpZiAoc2NoZW1lLSZndDt3bWFya3MuYWN0aXZhdGVkKQotCQkJcHJfZGVidWcoJiMzNDtkZWFjdGl2YXRlIGEgc2NoZW1lICglZCkgZm9yICVzIHdtYXJrXG4mIzM0OywKLQkJCQkgc2NoZW1lLSZndDthY3Rpb24sCi0JCQkJIHN0cl9oaWdoX2xvdyhtZXRyaWMgJmd0OyBzY2hlbWUtJmd0O3dtYXJrcy5oaWdoKSk7CiAJCXNjaGVtZS0mZ3Q7d21hcmtzLmFjdGl2YXRlZCA9IGZhbHNlOwogCQlyZXR1cm4gc2NoZW1lLSZndDt3bWFya3MuaW50ZXJ2YWw7CiAJfQpAQCAtMzYxMCw4ICYjNDM7MzYwNSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3dtYXJrX3dhaXRfdXMoc3RydWN0IGRhbW9zICpzY2hlbWUpCiAJCQkhc2NoZW1lLSZndDt3bWFya3MuYWN0aXZhdGVkKQogCQlyZXR1cm4gc2NoZW1lLSZndDt3bWFya3MuaW50ZXJ2YWw7CiAKLQlpZiAoIXNjaGVtZS0mZ3Q7d21hcmtzLmFjdGl2YXRlZCkKLQkJcHJfZGVidWcoJiMzNDthY3RpdmF0ZSBhIHNjaGVtZSAoJWQpXG4mIzM0Oywgc2NoZW1lLSZndDthY3Rpb24pOwogCXNjaGVtZS0mZ3Q7d21hcmtzLmFjdGl2YXRlZCA9IHRydWU7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNzU0LDggJiM0MzszNzQ3LDYgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpCiAJc3RydWN0IGRhbW9uX2N0eCAqY3R4ID0gZGF0YTsKIAl1bnNpZ25lZCBsb25nIHN6X2xpbWl0ID0gMDsKIAotCXByX2RlYnVnKCYjMzQ7a2RhbW9uZCAoJWQpIHN0YXJ0c1xuJiMzNDssIGN1cnJlbnQtJmd0O3BpZCk7Ci0KIAltdXRleF9sb2NrKCZhbXA7Y3R4LSZndDtjYWxsX2NvbnRyb2xzX2xvY2spOwogCWN0eC0mZ3Q7Y2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IGZhbHNlOwogCW11dGV4X3VubG9jaygmYW1wO2N0eC0mZ3Q7Y2FsbF9jb250cm9sc19sb2NrKTsKQEAgLTM5MDMsNyAmIzQzOzM4OTQsNiBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSkKIAltdXRleF91bmxvY2soJmFtcDtjdHgtJmd0O3dhbGtfY29udHJvbF9sb2NrKTsKIAlkYW1vc193YWxrX2NhbmNlbChjdHgpOwogCi0JcHJfZGVidWcoJiMzNDtrZGFtb25kICglZCkgZmluaXNoZXNcbiYjMzQ7LCBjdXJyZW50LSZndDtwaWQpOwogCW11dGV4X2xvY2soJmFtcDtjdHgtJmd0O2tkYW1vbmRfbG9jayk7CiAJY3R4LSZndDtrZGFtb25kID0gTlVMTDsKIAltdXRleF91bmxvY2soJmFtcDtjdHgtJmd0O2tkYW1vbmRfbG9jayk7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggNGE1MzZkNDFjZGIyZC4uNTExZjI4NTZkMzQzYyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtNDYzLDExICYjNDM7NDYzLDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCwKIAkJc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKm9sZF9yYW5nZXMsIGludCBzel9vbGRfcmFuZ2VzLAogCQlzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqbmV3X3JhbmdlcywgaW50IHN6X25ld19yYW5nZXMsCiAJCXVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeiwKLQkJc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKmV4cGVjdF9yYW5nZXMsIGludCBzel9leHBlY3RfcmFuZ2VzKQomIzQzOwkJc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKmV4cGVjdF9yYW5nZXMsIGludCBzel9leHBlY3RfcmFuZ2VzLAomIzQzOwkJaW50IGV4cGVjdF9lcnIpCiB7CiAJc3RydWN0IGRhbW9uX3RhcmdldCAqdDsKIAlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyOwotCWludCBpOwomIzQzOwlpbnQgaSwgZXJyOwogCiAJdCA9IGRhbW9uX25ld190YXJnZXQoKTsKIAlpZiAoIXQpCkBAIC00ODEsNyAmIzQzOzQ4Miw4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCwKIAkJZGFtb25fYWRkX3JlZ2lvbihyLCB0KTsKIAl9CiAKLQlkYW1vbl9zZXRfcmVnaW9ucyh0LCBuZXdfcmFuZ2VzLCBzel9uZXdfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTsKJiM0MzsJZXJyID0gZGFtb25fc2V0X3JlZ2lvbnModCwgbmV3X3Jhbmdlcywgc3pfbmV3X3JhbmdlcywgbWluX3JlZ2lvbl9zeik7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIGV4cGVjdF9lcnIpOwogCiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIHN6X2V4cGVjdF9yYW5nZXMpOwogCWlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IHN6X2V4cGVjdF9yYW5nZXMpIHsKQEAgLTUxMCw3ICYjNDM7NTEyLDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCQkoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7CiAJCQl7LnN0YXJ0ID0gNSwgLmVuZCA9IDE1fSwKIAkJCXsuc3RhcnQgPSAxNSwgLmVuZCA9IDI1fSwKLQkJCX0sIDIpOwomIzQzOwkJCX0sIDIsIDApOwogCS8qIFVuLWludGVyc2VjdGluZyByZWdpb25zIHNob3VsZCBiZSByZW1vdmVkLiAqLwogCWRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHRlc3QsCiAJCQkoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7CkBAIC01MjMsNyAmIzQzOzUyNSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkJMSwKIAkJCShzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXsKIAkJCXsuc3RhcnQgPSAxOCwgLmVuZCA9IDIzfSwKLQkJCX0sIDEpOwomIzQzOwkJCX0sIDEsIDApOwogCS8qCiAJICogSG9sZXMgc2hvdWxkIGJlIGZpbGxlZCB1cCB3aXRoIG5ldyByZWdpb25zLgogCSAqCkBAIC01NDQsNyAmIzQzOzU0Niw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkJey5zdGFydCA9IDgsIC5lbmQgPSAxNn0sCiAJCQl7LnN0YXJ0ID0gMTYsIC5lbmQgPSAyNH0sCiAJCQl7LnN0YXJ0ID0gMjQsIC5lbmQgPSAyOH0sCi0JCQl9LCAzKTsKJiM0MzsJCQl9LCAzLCAwKTsKIAkvKgogCSAqIE5ldyByZWdpb25zIHNob3VsZCBiZSBhYmxlIHRvIGJlIGFwcGVuZGVkLgogCSAqCkBAIC01NjYsNyAmIzQzOzU2OCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkJey5zdGFydCA9IDAsIC5lbmQgPSA0fSwKIAkJCXsuc3RhcnQgPSA0LCAuZW5kID0gMTV9LAogCQkJey5zdGFydCA9IDI1LCAuZW5kID0gNDB9LAotCQkJfSwgMyk7CiYjNDM7CQkJfSwgMywgMCk7CiAJLyoKIAkgKiBOZXcgcmVnaW9ucyBzaG91bGQgYmUgYWJsZSB0byBiZSBpbnNlcnRlZC4KIAkgKgpAQCAtNTg5LDcgJiM0Mzs1OTEsNDggQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCQl7LnN0YXJ0ID0gMCwgLmVuZCA9IDE1fSwKIAkJCXsuc3RhcnQgPSAyNSwgLmVuZCA9IDQwfSwKIAkJCXsuc3RhcnQgPSA0NCwgLmVuZCA9IDUwfSwKLQkJCX0sIDMpOwomIzQzOwkJCX0sIDMsIDApOwomIzQzOwkvKiBaZXJvIHNpemUgcmVnaW9ucyBzaG91bGQgcmV0dXJuIC1FSU5WQUwuICovCiYjNDM7CWRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHRlc3QsCiYjNDM7CQkJKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsCiYjNDM7CQkJKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pewomIzQzOwkJCXsuc3RhcnQgPSA0MiwgLmVuZCA9IDQyfSwKJiM0MzsJCQl9LCAxLCAxLAomIzQzOwkJCShzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLCAtRUlOVkFMKTsKJiM0MzsJLyogTmVnYXRpdmUgc2l6ZSByZWdpb25zIHNob3VsZCByZXR1cm4gLUVJTlZBTC4gKi8KJiM0MzsJZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3IodGVzdCwKJiM0MzsJCQkoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCwKJiM0MzsJCQkoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7CiYjNDM7CQkJey5zdGFydCA9IDQyLCAuZW5kID0gMjF9LAomIzQzOwkJCX0sIDEsIDEsCiYjNDM7CQkJKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpOwomIzQzOwkvKgomIzQzOwkgKiBSZWdpb25zIHJlc3VsdGluZyBpbiBzYW1lIHJlZ2lvbiBhZnRlciBhbGluZ21lbnQgc2hvdWxkIHJldHVybgomIzQzOwkgKiAtRUlOVkFMLgomIzQzOwkgKi8KJiM0MzsJZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3IodGVzdCwKJiM0MzsJCQkoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCwKJiM0MzsJCQkoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7CiYjNDM7CQkJey5zdGFydCA9IDEwLCAuZW5kID0gMjB9LAomIzQzOwkJCXsuc3RhcnQgPSAyMCwgLmVuZCA9IDMwfSwKJiM0MzsJCQl9LCAyLCA0MDk2LAomIzQzOwkJCShzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLCAtRUlOVkFMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHsKJiM0MzsJCS5zYW1wbGVfaW50ZXJ2YWwgPSAwLAomIzQzOwkJLmFnZ3JfaW50ZXJ2YWwgPSAwLAomIzQzOwl9OwomIzQzOwomIzQzOwkvKiBaZXJvIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJiMzOTt0IGNhdXNlIGRpdmlzaW9uIGJ5IHplcm8gKi8KJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDthdHRycyksIDEpOwomIzQzOwomIzQzOwkvKiBUb28gbGFyZ2UgYWdncmVnYXRpb24gaW50ZXJ2YWwgZG9lc24mIzM5O3QgY2F1c2Ugb3ZlcmZsb3cgKi8KJiM0MzsJYXR0cnMuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICYjNDM7IDE7CiYjNDM7CUtVTklUX0VYUEVDVF9HRSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKCZhbXA7YXR0cnMpLCAwKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0xFKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDthdHRycyksIFVJTlRfTUFYKTsKIH0KIAogc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KQpAQCAtMTY0Myw2ICYjNDM7MTY4Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7CiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfcmVnaW9ucyksCiYjNDM7CUtVTklUX0NBU0UoZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbXZzdW0pLApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmMKaW5kZXggNDk3Njc3NWZlMjc2Mi4uNWNjZjcwZGM4YTMwYiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdmFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jCkBAIC0xOTIsMTkgJiM0MzsxOTIsMTAgQEAgc3RhdGljIGludCBkYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiBzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2luaXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiAJCQkJICAgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KQogewotCXN0cnVjdCBkYW1vbl90YXJnZXQgKnRpOwogCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIHJlZ2lvbnNbM107Ci0JaW50IHRpZHggPSAwOwogCi0JaWYgKGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnModCwgcmVnaW9ucykpIHsKLQkJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHRpLCBjdHgpIHsKLQkJCWlmICh0aSA9PSB0KQotCQkJCWJyZWFrOwotCQkJdGlkeCYjNDM7JiM0Mzs7Ci0JCX0KLQkJcHJfZGVidWcoJiMzNDtGYWlsZWQgdG8gZ2V0IHRocmVlIHJlZ2lvbnMgb2YgJWR0aCB0YXJnZXRcbiYjMzQ7LCB0aWR4KTsKJiM0MzsJaWYgKGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnModCwgcmVnaW9ucykpCiAJCXJldHVybjsKLQl9CiAKIAlkYW1vbl9zZXRfcmVnaW9ucyh0LCByZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2gKaW5kZXggZjdmYjk0Yjg0ZTcxNi4uODY5MGFlZjFlNDM2YyAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2gKQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgdGVzdF9nb2FsKCkKIAllbnN1cmVfd3JpdGVfc3VjYyAmIzM0OyRmcGF0aCYjMzQ7ICYjMzQ7YWN0aXZlX21lbV9icCYjMzQ7ICYjMzQ7dmFsaWQgaW5wdXQmIzM0OwogCWVuc3VyZV93cml0ZV9zdWNjICYjMzQ7JGZwYXRoJiMzNDsgJiMzNDtpbmFjdGl2ZV9tZW1fYnAmIzM0OyAmIzM0O3ZhbGlkIGlucHV0JiMzNDsKIAllbnN1cmVfd3JpdGVfc3VjYyAmIzM0OyRmcGF0aCYjMzQ7ICYjMzQ7bm9kZV9lbGlnaWJsZV9tZW1fYnAmIzM0OyAmIzM0O3ZhbGlkIGlucHV0JiMzNDsKJiM0MzsJZW5zdXJlX3dyaXRlX3N1Y2MgJiMzNDskZnBhdGgmIzM0OyAmIzM0O2h1Z2VwYWdlX21lbV9icCYjMzQ7ICYjMzQ7dmFsaWQgaW5wdXQmIzM0OwogCWVuc3VyZV93cml0ZV9mYWlsICYjMzQ7JGZwYXRoJiMzNDsgJiMzNDtmb28mIzM0OyAmIzM0O2ludmFsaWQgaW5wdXQmIzM0OwogCWVuc3VyZV9maWxlICYjMzQ7JGdvYWxfZGlyL25pZCYjMzQ7ICYjMzQ7ZXhpc3QmIzM0OyAmIzM0OzYwMCYjMzQ7CiAJZW5zdXJlX2ZpbGUgJiMzNDskZ29hbF9kaXIvcGF0aCYjMzQ7ICYjMzQ7ZXhpc3QmIzM0OyAmIzM0OzYwMCYjMzQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgREFNT04gcGF0Y2ggZm9yIHRoZSBMaW51eCBrZXJuZWwuIEZpcnN0IGdsYW5jZSwgdGhlcmUmIzM5O3MgZG9jdW1lbnRhdGlvbiB1cGRhdGVzOiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25gIGFuZCBgRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0YC4gR29vZCB0byBzZWUgdGhlIGRvY3VtZW50YXRpb24gaXMgYmVpbmcga2VwdCBjdXJyZW50LgoKTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBpbiBgbW0vZGFtb24vY29yZS5jYCwgSSBzZWUgYSBmZXcgY2hhbmdlcy4gYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2Agbm93IHVzZXMgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDtjLSZndDthdHRycylgIGluc3RlYWQgb2YgYSBkaXZpc2lvbi4gQWxzbywgc29tZSBgcHJfZGVidWdgIHN0YXRlbWVudHMgYXJlIGJlaW5nIHJlbW92ZWQgZnJvbSBgZGFtb3Nfd21hcmtfd2FpdF91c2AgYW5kIGBrZGFtb25kX2ZuYC4gT2theSwgbm90aGluZyB0b28gcmFkaWNhbCB0aGVyZSwgbGlrZWx5IGp1c3QgY2xlYW5pbmcgdGhpbmdzIHVwLgoKSW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAsIEkgc2VlIGBkYW1vbl90ZXN0X3NldF9yZWdpb25zX2ZvcmAgaGFzIGJlZW4gdXBkYXRlZCB0byBjaGVjayBmb3IgYGV4cGVjdF9lcnJgLCB3aGljaCBpcyB1c2VmdWwgZm9yIHRlc3RpbmcuIEEgbmV3IHRlc3QsIGBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3JgLCBoYXMgYmVlbiBhZGRlZC4gVGhhdCYjMzk7cyBhIGZvY3VzZWQgdGVzdCwgd2hpY2ggaXMgd2hhdCBJJiMzOTtkIGV4cGVjdC4gSW4gYG1tL2RhbW9uL3ZhZGRyLmNgLCBJIHNlZSBzaW1pbGFyIGNsZWFuIHVwIG9mIGRlYnVnZ2luZyBzdGF0ZW1lbnRzLiBBbHNvLCBpdCBhcHBlYXJzIHRoZSB0YXJnZXQgaXRlcmF0aW9uIGluIGBfX2RhbW9uX3ZhX2luaXRfcmVnaW9uc2AgaGFzIGJlZW4gcmVtb3ZlZC4KCkZpbmFsbHksIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaGAsIHRoZXkmIzM5O3ZlIGFkZGVkIGEgdGVzdCBsaW5lIGZvciBgaHVnZXBhZ2VfbWVtX2JwYC4gR29vZC4KCkhvbGQgb24sIHRob3VnaCwgdGhlICpjb3JlKiBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgbW0vZGFtb24vY29yZS5jYCBpczoKCmBgYGMKLQltYXhfdGhyZXMgPSBjLSZndDthdHRycy5hZ2dyX2ludGVydmFsIC8KLQkJKGMtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbCA/ICBjLSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTsKJiM0MzsJbWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncigmYW1wO2MtJmd0O2F0dHJzKTsKYGBgCgpUaGF0JiMzOTtzIHRoZSBpbXBvcnRhbnQgYml0LiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGEgZGl2aXNpb24gd2l0aCBhIGZ1bmN0aW9uIGNhbGwgdG8gYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIGlzIGRvaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHJlcGxhY2VtZW50LiBJJiMzOTtsbCBncmVwIGZvciBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQmIzM5O3MgYWN0dWFsbHkgY2FsY3VsYXRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbnJfc2FtcGxlc19wZXJfYWdnciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA3Mz1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDc4LS8qIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA3OTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwODAtXHRcdGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jPTkyMD1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3NhbXBsZV9icF90b19jb3VudChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTIyLXtcbm1tL2RhbW9uL2NvcmUuYzo5MjM6XHRyZXR1cm4gYnAgKiBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKGF0dHJzKSAvIDEwMDAwO1xubW0vZGFtb24vY29yZS5jLTkyNC19XG4tLVxubW0vZGFtb24vY29yZS5jPTkyNz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3NhbXBsZV9jb3VudF90b19icChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTI5LXtcbm1tL2RhbW9uL2NvcmUuYzo5MzA6XHRyZXR1cm4gbXVsdF9mcmFjKGNvdW50LCAxMDAwMCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihhdHRycykpO1xubW0vZGFtb24vY29yZS5jLTkzMS19XG4tLVxubW0vZGFtb24vY29yZS5jPTEzNDI9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM1Ni1cdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXG5tbS9kYW1vbi9jb3JlLmM6MTM1NzpcdG1heF9wcm9iZV9oaXRzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjdHgtXHUwMDNlYXR0cnMpO1xubW0vZGFtb24vY29yZS5jLTEzNTgtXHR3c3VtID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzM2OD1zdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM3NS1cbm1tL2RhbW9uL2NvcmUuYzozMzc2Olx0bWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjLVx1MDAzZWF0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMzc3LVx0d2hpbGUgKHRydWUpIHtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTMwNS1cdGVyciA9IC1FTk9NRU07XG5tbS9kYW1vbi9scnVfc29ydC5jOjMwNjpcdGhvdF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpICpcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzA3LVx0XHRob3RfdGhyZXNfYWNjZXNzX2ZyZXEgLyAxMDAwO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xMDQ9aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMTUtXHRcdFx0REFNT05fTUFYX1NVQlNDT1JFLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjExNjpcdFx0XHRkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmMtXHUwMDNlYXR0cnMpKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMTctXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTYyMj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MjktXHQvKiBaZXJvIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJiMzOTt0IGNhdXNlIGRpdmlzaW9uIGJ5IHplcm8gKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MzA6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZhdHRycyksIDEpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYzMS1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjMzLVx0YXR0cnMuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICYjNDM7IDE7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NjM0Olx0S1VOSVRfRVhQRUNUX0dFKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCAwKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MzU6XHRLVU5JVF9FWFBFQ1RfTEUodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZhdHRycyksIFVJTlRfTUFYKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MzYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIHdvcmtzLiBJdCYjMzk7cyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgRGFtb24gaGVhZGVyIGZpbGUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgb3V0IGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGFyb3VuZCBsaW5lIDEwNzkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyIG9uIHdoYXQgdGhpcyBwYXJhbWV0ZXIgaXMgaW50ZW5kZWQgZm9yIHdpdGhpbiBEQU1PTiwgYW5kIGl0cyByb2xlIGluIHRoZSBtb25pdG9yaW5nIGFuZCBhZ2dyZWdhdGlvbiBwcm9jZXNzLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDcwOlx0aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKTtcbjEwNzE6XHRpbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKTtcbjEwNzI6XHRcbjEwNzM6XHRzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuMTA3NDpcdHtcbjEwNzU6XHRcdHJldHVybiBjdHgtXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19WQUREUiB8fCBjdHgtXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19GVkFERFI7XG4xMDc2Olx0fVxuMTA3NzpcdFxuMTA3ODpcdC8qIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsICovXG4xMDc5Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcbjEwODA6XHRcdFx0Y29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbjEwODE6XHR7XG4xMDgyOlx0XHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcbjEwODM6XHRcdHVuc2lnbmVkIGxvbmcgbnJfc2FtcGxlcztcbjEwODQ6XHRcbjEwODU6XHRcdHNhbXBsZV9pbnRlcnZhbCA9IGF0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcbjEwODY6XHRcdG5yX3NhbXBsZXMgPSBtaW4oYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbCxcbjEwODc6XHRcdFx0XHQodW5zaWduZWQgbG9uZylVSU5UX01BWCk7XG4xMDg4Olx0XHRyZXR1cm4gbnJfc2FtcGxlcyA/IDogMTtcbjEwODk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM0NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgYW5kIGNsZWFuaW5nIHVwIHNvbWUgZGVidWcgc3RhdGVtZW50cy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyByZXBsYWNpbmcgdGhhdCBgYy0mZ3Q7YXR0cnMuYWdncl9pbnRlcnZhbCAvIChjLSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyBjLSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKWAgY2FsY3VsYXRpb24gd2l0aCBhIGNhbGwgdG8gYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDtjLSZndDthdHRycylgLiBJdCBsb29rcyBsaWtlIHRoZSBuZXcgZnVuY3Rpb24gZG9lcyBhIHNhZmVyIGRpdmlzaW9uLCBjbGFtcGluZyB0aGUgcmVzdWx0IHRvIGBVSU5UX01BWGAgYW5kIGVuc3VyaW5nIGEgbWluaW11bSB2YWx1ZSBvZiAxLiBHb29kLCB0aGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCwgYXMgaXQgcHJldmVudHMgYG1heF90aHJlc2AgZnJvbSBiZWluZyBpbmFwcHJvcHJpYXRlbHkgdHJ1bmNhdGVkIHdoZW4gdGhlIGFnZ3JlZ2F0aW9uIGludGVydmFsIGlzIHZlcnkgbGFyZ2UsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpbiBEQU1PTi4KCkkmIzM5O20gc2VlaW5nIHRoYXQgdGhlIHBhdGNoICpkb2VzbiYjMzk7dCogYWN0dWFsbHkgaW50cm9kdWNlIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBkaXJlY3RseTsgaXQmIzM5O3MgdXNpbmcgYW4gZXhpc3RpbmcgZnVuY3Rpb24gd2l0aGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgLiBBbHNvLCB0aGVyZSYjMzk7cyBzb21lIGNsZWFudXAg4oCTIHJlbW92YWwgb2YgYHByX2RlYnVnYCBjYWxscywgd2hpY2ggaXMgZ2VuZXJhbGx5IHBvc2l0aXZlIGZvciBwZXJmb3JtYW5jZSwgYWx0aG91Z2ggaXQgbWlnaHQgbWFrZSBkZWJ1Z2dpbmcgaGFyZGVyIGluIHRoZSBzaG9ydCB0ZXJtLgoKT2theSwgbGV0JiMzOTtzIGdvIGEgYml0IGRlZXBlci4gIFRoZXJlJiMzOTtzIGEgdGVzdCBjYXNlLCBgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyYCwgd2hpY2ggaXMgZW5jb3VyYWdpbmcg4oCTIGl0IHN1Z2dlc3RzIHRoZSBkZXZlbG9wZXJzIGFyZSBiZWluZyBwcm9hY3RpdmUgYWJvdXQgdGVzdGluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGUgY2hhbmdlcyB0byBgZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3JgIGFsc28gbG9vayBpbnRlcmVzdGluZywgZXNwZWNpYWxseSB0aGUgYWRkaXRpb24gb2YgYGV4cGVjdF9lcnJgLgoKSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBvdGhlciBhcmVhcyBvZiBjaGFuZ2UgaW4gdGhpcyBwYXRjaDsgbG9va3MgbGlrZSBpdCByZW1vdmVkIHNvbWUgYHByX2RlYnVnYCBmcm9tIGBtbS9kYW1vbi92YWRkci5jYCwgd2hpY2ggaXMgYWxzbyBmaW5lLiBBbmQgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoYCBpbnZvbHZpbmcgYGh1Z2VwYWdlX21lbV9icGAuCgpOb3csIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBUaGUgcmVwbGFjZW1lbnQ6CgpgYGBjCi0JbWF4X3RocmVzID0gYy0mZ3Q7YXR0cnMuYWdncl9pbnRlcnZhbCAvCi0JCShjLSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyAgYy0mZ3Q7YXR0cnMuc2FtcGxlX2ludGVydmFsIDogMSk7CiYjNDM7CW1heF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDtjLSZndDthdHRycyk7CmBgYAoKLi4uIGlzIGNsZWFybHkgaW50ZW5kZWQgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93LiAgVGhpcyBtZWFucyB0aGF0IGlmIEkgY2FuIGNyYWZ0IGBhZ2dyX2ludGVydmFsYCBhbmQgYHNhbXBsZV9pbnRlcnZhbGAgdmFsdWVzIHRoYXQgY2F1c2UgdGhlIG9sZCBkaXZpc2lvbiB0byBvdmVyZmxvdywgdGhlIG5ldyBjb2RlIHNob3VsZCBoYW5kbGUgaXQgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIEkmIzM5O2Qgd2FudCB0byB0ZXN0IHRoZSBlZGdlIGNhc2Ugb2Ygd2hlcmUgYGFnZ3JfaW50ZXJ2YWxgIGlzIGxhcmdlIGVub3VnaCB0byBvdmVyZmxvdyB0aGUgZGl2aXNpb24sIGJ1dCB0aGUgbmV3IGBtaW4oLi4uLCBVSU5UX01BWClgIGluIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBrZWVwcyB0aGluZ3Mgc2FuZS4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgY29ybmVyIGNhc2VzIGFyb3VuZCB0aGUgYD8gOiAxYCBpbiB0aGUgc2FtcGxlX2ludGVydmFsIGNoZWNrLCBhcyB3ZWxsIGFzIHplcm8gYW5kIG5lZ2F0aXZlIHZhbHVlcyBmb3IgdGhpcyBhbmQgdGhlIGFnZ3JfaW50ZXJ2YWwuCgpCdXQsIGlzIHRoaXMgdGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2U/IE5vLiBUaGUgcGF0Y2ggKmFsc28qIGNoYW5nZXMgYGRhbW9uX3NldF9yZWdpb25zYC4gVGhlIG5ldyB0ZXN0cyBmb3IgYGRhbW9uX3NldF9yZWdpb25zYCByZXR1cm5pbmcgYC1FSU5WQUxgIGZvciB6ZXJvIHNpemUsIG5lZ2F0aXZlIHNpemUsIGFuZCByZWdpb25zIHJlc3VsdGluZyBpbiB0aGUgc2FtZSByZWdpb24gYWZ0ZXIgYWxpZ25tZW50LiBUaGlzIHN1Z2dlc3RzIGEgbW9yZSByb2J1c3QgdmFsaWRhdGlvbiBvZiByZWdpb24gZGVmaW5pdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB2ZXJ5IGNsb3NlbHkgYXQgdGhlIGNvZGUgaW4gYGRhbW9uX3NldF9yZWdpb25zYCB0byBzZWUgKmhvdyogdGhlc2UgaW52YWxpZCBjYXNlcyBhcmUgYmVpbmcgaGFuZGxlZCBub3cuIEkgc3VzcGVjdCBteSBmdXp6aW5nIHdpbGwgbmVlZCB0byBjb3ZlciB0aGVzZSB0ZXN0cywgdG9vLCBjaGVja2luZyBmb3IgdGhlIGNvcnJlY3QgZXJyb3IgY29kZSByZXR1cm5zLgoKQWxyaWdodC4gVGltZSB0byBwdXQgdGhpcyBpbnRvIHByYWN0aWNlIGFuZCBwdXQgaXQgdGhyb3VnaCBhIGZ1enplci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9Mzg9c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC01MC0gKlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjUxOiAqIEZvciBhbnkgdXNlIGNhc2UsIEBhciBzaG91bGQgYmUgbm9uLXplcm8gcG9zaXRpdmUgc2l6ZS4gIGRhbW9uX3NldF9yZWdpb25zKClcbmluY2x1ZGUvbGludXgvZGFtb24uaC01Mi0gKiBkb2VzIHRoZSB2YWxpZGF0aW9uLlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDI2PXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDI4LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMjk6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAzMC1cdFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NDQ1PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00NjYtLypcbm1tL2RhbW9uL2NvcmUuYzo0Njc6ICogZGFtb25fc2V0X3JlZ2lvbnMoKSAtIFNldCByZWdpb25zIG9mIGEgdGFyZ2V0IGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlcy5cbm1tL2RhbW9uL2NvcmUuYy00NjgtICogQHQ6XHRcdHRoZSBnaXZlbiB0YXJnZXQuXG4tLVxubW0vZGFtb24vY29yZS5jLTQ3Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0Nzg6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtNDc5LVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTE1MjY9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTU1LVx0cmFuZ2VzW2kmIzQzOyYjNDM7XS5lbmQgPSBkYW1vbl9sYXN0X3JlZ2lvbihzcmMpLVx1MDAzZWFyLmVuZDtcbm1tL2RhbW9uL2NvcmUuYzoxNTU2Olx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcbm1tL2RhbW9uL2NvcmUuYy0xNTU3LVx0a3ZmcmVlKHJhbmdlcyk7XG4tLVxubW0vZGFtb24vY29yZS5jPTM5NzI9aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTgzLVx0YWRkcl9yYW5nZS5lbmQgPSAqZW5kO1xubW0vZGFtb24vY29yZS5jOjM5ODQ6XHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXHUwMDI2YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7XG5tbS9kYW1vbi9jb3JlLmMtMzk4NS19XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDAwPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwMjEtXHR9XG5tbS9kYW1vbi9zeXNmcy5jOjIwMjI6XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyh0LCByYW5nZXMsIHN5c2ZzX3JlZ2lvbnMtXHUwMDNlbnIsIG1pbl9yZWdpb25fc3opO1xubW0vZGFtb24vc3lzZnMuYy0yMDIzLW91dDpcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NDYyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDg0LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjQ4NTpcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKHQsIG5ld19yYW5nZXMsIHN6X25ld19yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQ4Ni1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIGV4cGVjdF9lcnIpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg9OTA9c3RhdGljIHN0cnVjdCBkYW1vbl9yZWdpb24gKl9fbnRoX3JlZ2lvbl9vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgaWR4KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTAzLS8qXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjEwNDogKiBUZXN0ICYjMzk7ZGFtb25fc2V0X3JlZ2lvbnMoKSYjMzk7XG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwNS0gKlxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTE4LSAqIHJlZ2lvbnMuICBUaGUgdXBkYXRlIG9mIGN1cnJlbnQgdGFyZ2V0IHJlZ2lvbnMgaXMgdGhlIHJvbGUgb2Zcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTE5OiAqICYjMzk7ZGFtb25fc2V0X3JlZ2lvbnMoKSYjMzk7LlxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xMjAtICpcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTEyNT1zdGF0aWMgdm9pZCBkYW1vbl9kb190ZXN0X2FwcGx5X3RocmVlX3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTQ3LVx0fVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNDg6XHRpZiAoZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBucl9yZWdpb25zIC8gMixcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTQ5LVx0XHRcdFx0REFNT05fTUlOX1JFR0lPTl9TWikpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE1MS1cdFx0ZGFtb25fZGVzdHJveV90YXJnZXQodCwgTlVMTCk7XG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE1MjpcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtkYW1vbl9zZXRfcmVnaW9ucygpIGZhaWxcJiMzNDspO1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTMtXHR9XG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTUtXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE1NjpcdGlmIChkYW1vbl9zZXRfcmVnaW9ucyh0LCB0aHJlZV9yZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKSkge1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTctXHRcdGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHQsIE5VTEwpO1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTg6XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c2Vjb25kIGRhbW9uX3NldF9yZWdpb25zKCkgZmFpbFwmIzM0Oyk7XG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE1OS1cdH1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTE5Mj1zdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2luaXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy0xOTktXG5tbS9kYW1vbi92YWRkci5jOjIwMDpcdGRhbW9uX3NldF9yZWdpb25zKHQsIHJlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xubW0vZGFtb24vdmFkZHIuYy0yMDEtfVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9MjE4PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3VwZGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vdmFkZHIuYy0yMjUtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi92YWRkci5jOjIyNjpcdFx0ZGFtb25fc2V0X3JlZ2lvbnModCwgdGhyZWVfcmVnaW9ucywgMywgREFNT05fTUlOX1JFR0lPTl9TWik7XG5tbS9kYW1vbi92YWRkci5jLTIyNy1cdH1cbi0tXG5zYW1wbGVzL2RhbW9uL210aWVyLmM9NzM9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxuLS1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xMjgtXG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTI5Olx0cmV0ID0gZGFtb25fc2V0X3JlZ2lvbnModGFyZ2V0LCBcdTAwMjZyYW5nZSwgMSwgREFNT05fTUlOX1JFR0lPTl9TWik7XG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTMwLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIERBTU9OIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBzZWVtcyByZWxhdGl2ZWx5IG1pbm9yLiBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBzaWduaWZpY2FudCBuZXcgZnVuY3Rpb25hbGl0eSwganVzdCB0d2Vha3MgYXJvdW5kIGV4aXN0aW5nIGNvZGUuIFRoZSBwcmltYXJ5IGFyZWEgb2YgY29uY2VybiwgdGhlIGBkYW1vbl9zZXRfcmVnaW9uc2AgZnVuY3Rpb24sIGlzbiYjMzk7dCBhY3R1YWxseSBtb2RpZmllZCBkaXJlY3RseS4gVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgcmVsYXRlZCB0ZXN0cyBhbmQgS1VuaXQgY29uZmlndXJhdGlvbnMgZm9yIGl0LiBUaGVzZSB0ZXN0cyBhcmUgdmVyaWZ5aW5nIGV4aXN0aW5nIGVycm9yIGNvbmRpdGlvbnMsIHNvIHRoYXQmIzM5O3Mgbm90IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgYWRkaXRpb24gb2YgdGVzdHMgZm9yIGludmFsaWQgaW5wdXRzLCBzdWNoIGFzIHplcm8gb3IgbmVnYXRpdmUtc2l6ZWQgcmVnaW9ucywgb25seSB0ZXN0cyBleGlzdGluZyBlcnJvciBoYW5kbGluZy4gVGhlIHNlbGZ0ZXN0IGNoYW5nZSwgYGh1Z2VwYWdlX21lbV9icGAsIGlzIGFsc28gbm90IHJlbGF0ZWQgdG8gYSBuZXcgYWRkaXRpb24sIGl0IGlzIG9ubHkgdXBkYXRpbmcgYSB0ZXN0IGZvciBleGlzdGluZyBmdW5jdGlvbmFsaXR5LgoKVGhlbiB0aGVyZSBpcyB0aGUgY29yZSBjb2RlIGNoYW5nZToKYGBgYwotCW1heF90aHJlcyA9IGMtJmd0O2F0dHJzLmFnZ3JfaW50ZXJ2YWwgLwotCQkoYy0mZ3Q7YXR0cnMuc2FtcGxlX2ludGVydmFsID8gIGMtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbCA6IDEpOwomIzQzOwltYXhfdGhyZXMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKCZhbXA7Yy0mZ3Q7YXR0cnMpOwpgYGAKClRoaXMgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uIFRoZSBvcmlnaW5hbCBjYWxjdWxhdGlvbiBvZiBgbWF4X3RocmVzYCBpcyBwb3RlbnRpYWxseSBzdXNjZXB0aWJsZSB0byBpbnRlZ2VyIHRydW5jYXRpb24uIFRoZSB1cGRhdGVkIGNhbGN1bGF0aW9uIHVzZXMgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgLCB3aGljaCBjYXBzIHRoZSByZXN1bHQgdG8gYFVJTlRfTUFYYCwgZml4aW5nIGEgcG9zc2libGUgb3ZlcmZsb3cgaXNzdWUuCgpUaGUgY2hhbmdlIGV4aXN0cyBpbiBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBrZGFtb25kX2ZuYCwgc28gaXQmIzM5O3MgYSBjb3JlIERBTU9OIGZ1bmN0aW9uLiBUaGlzIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgbW9yZSBkZWVwbHkuCgpMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIG90aGVyIGNoYW5nZXMuIFRoZXJlJiMzOTtzIHJlbW92YWwgb2YgYHByX2RlYnVnYCBzdGF0ZW1lbnRzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIEtVbml0IHRlc3QgdXBkYXRlcywgYW5kIHNlbGZ0ZXN0IHVwZGF0ZXMuIFRoZXNlIGFyZSwgaW4gZXNzZW5jZSwganVzdCBub2lzZSBjb21wYXJlZCB0byB0aGUgY29yZSBsb2dpYyBjaGFuZ2UuCgpDb25zaWRlcmluZyB0aGUgZnVuY3Rpb25hbCBjaGFuZ2U6CmBgYGMKLQltYXhfdGhyZXMgPSBjLSZndDthdHRycy5hZ2dyX2ludGVydmFsIC8KLQkJKGMtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbCA/ICBjLSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTsKJiM0MzsJbWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncigmYW1wO2MtJmd0O2F0dHJzKTsKYGBgCkl0JiMzOTtzIGEgb25lLWxpbmUgZml4IGZvciBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24sIGEgcmVsYXRpdmVseSBzbWFsbCBjaGFuZ2UuIEhvd2V2ZXIsIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGlzIGEgY29yZSBmdW5jdGlvbiB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCBoYXMgaXRzIGJlaGF2aW91ciBjaGFuZ2VkIGJ5IHRoaXMgcGF0Y2guCgpJIG11c3QgY29uc2lkZXIgdGhlIGNyaXRlcmlhIGZvciBleGNsdWRpbmcgcGF0Y2hlcyBmcm9tIGZ1enppbmcuIEFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGxvZ2dpbmcsIGNvbnN0YW50IGFkanVzdG1lbnRzIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCBmbG93LCB1bnJlYWNoYWJsZSBjb2RlLCBhbmQgc3BlY2lmaWMgZHJpdmVyIG9yIGhhcmR3YXJlIGNvbnRleHRzIGFyZSBleGNsdWRlZC4gVGhpcyBjaGFuZ2UgaXMgbm90IHB1cmVseSBkZWNvcmF0aXZlIGFuZCAqZG9lcyogYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIGEgY29yZSBEQU1PTiBjb21wb25lbnQuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIGluaXRpYWwgdmFsdWUgb2YgYG1heF90aHJlc2AsIHdoaWNoIGlzIHVzZWQgaW4gYSBsb29wIHRvIGRldGVybWluZSB3aGVuIHRvIG1lcmdlIHJlZ2lvbnMuCgpgYGBjCgltYXhfdGhyZXMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKCZhbXA7Yy0mZ3Q7YXR0cnMpOwoJd2hpbGUgKHRydWUpIHsKCQlucl9yZWdpb25zID0gMDsKCQlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykgewoJCQlkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkKCQkJCW5yX3JlZ2lvbnMmIzQzOyYjNDM7OwoJCX0KCQlpZiAobnJfcmVnaW9ucyAmbHQ7PSBjLSZndDthdHRycy5tYXhfbnJfcmVnaW9ucykKCQkJYnJlYWs7CgkJbWF4X3RocmVzID0gbWF4KDFVLCBtYXhfdGhyZXMgKiAyKTsKYGBgCgpJZiB0aGUgb3JpZ2luYWwgY2FsY3VsYXRpb24gdHJ1bmNhdGVkIGBtYXhfdGhyZXNgIHRvIGEgc21hbGwgdmFsdWUgKGUuZy4sIDAgb3IgMSksIHRoaXMgbG9vcCB3b3VsZCBpdGVyYXRlIGZhciBtb3JlIHRpbWVzIHRoYW4gbmVjZXNzYXJ5LiBOb3csIHRoZSBmaXggc2V0cyBgbWF4X3RocmVzYCB0byBgVUlOVF9NQVhgIChpZiBpdCB3YXMgb3ZlcmZsb3dpbmcpLCB0aGlzIG1heSBjYXVzZSB0aGUgbG9vcCB0byBpdGVyYXRlIGZhciBmZXdlciB0aW1lcy4gVGhpcyBpcyBhIGJlaGF2aW9yYWwgY2hhbmdlLiBUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBzeXNmcyBvciBkZWJ1Z2ZzLCBzbyBpdCYjMzk7cyBmdXp6YWJsZS4KClRoZSBgaHVnZXBhZ2VfbWVtX2JwYCBjaGFuZ2UgaW4gdGhlIHNlbGZ0ZXN0IGlzIGp1c3QgYSB0ZXN0IHVwZGF0ZSBmb3IgYSBmZWF0dXJlIGFscmVhZHkgaW4gdGhlIGtlcm5lbDsgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBhZGQgYW55IG5ldyBmdW5jdGlvbmFsaXR5IHdpdGggaXQuIFNvLCB0aGF0JiMzOTtzIG5vdCByZWxldmFudCBmb3Igb3VyIGZ1enppbmcgYW5hbHlzaXMsCgpTbywgd2hpbGUgdGhlIHBhdGNoIGl0c2VsZiBtaWdodCBiZSBjb25zaWRlcmVkIG1pbm9yLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBpbnRlZ2VyIHRydW5jYXRpb24gZml4IGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIOKAkyB3YXJyYW50cyBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwsIHRoZSBsb2dpYyBpcyByZWFjaGFibGUsIGFuZCB0aGUgY2hhbmdlIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gcGF0aC4KSSYjMzk7bGwgbWFyayB0aGlzIGFzIHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tkYW1vbmRfbWVyZ2VfcmVnaW9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzMxMz1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM2Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMzY4OnN0YXRpYyB2b2lkIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLCB1bnNpZ25lZCBpbnQgdGhyZXNob2xkLFxubW0vZGFtb24vY29yZS5jLTMzNjktXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3pfbGltaXQpXG4tLVxubW0vZGFtb24vY29yZS5jPTM0NzM9c3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzUwOS0gKiBtb25pdG9yaW5nIGFjY3VyYWN5IHVuZGVyIHRoZSBkeW5hbWljYWxseSBjaGFuZ2VhYmxlIGFjY2VzcyBwYXR0ZXJucy4gIElmIGFcbm1tL2RhbW9uL2NvcmUuYzozNTEwOiAqIHNwbGl0IHdhcyB1bm5lY2Vzc2FyaWx5IG1hZGUsIGxhdGVyICYjMzk7a2RhbW9uZF9tZXJnZV9yZWdpb25zKCkmIzM5OyB3aWxsIHJldmVydFxubW0vZGFtb24vY29yZS5jLTM1MTEtICogaXQuXG4tLVxubW0vZGFtb24vY29yZS5jPTM3NDU9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTM4MDctXHRcdFx0XHRcdG5leHRfYWdncmVnYXRpb25fc2lzKSkge1xubW0vZGFtb24vY29yZS5jOjM4MDg6XHRcdFx0a2RhbW9uZF9tZXJnZV9yZWdpb25zKGN0eCxcbm1tL2RhbW9uL2NvcmUuYy0zODA5LVx0XHRcdFx0XHRtYXhfbWVyZ2Vfc2NvcmUgLyAxMCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzgxNi1cdFx0ICogZG8ga2RhbW9uZF9jYWxsKCkgYW5kIGtkYW1vbmRfYXBwbHlfc2NoZW1lcygpIGFmdGVyXG5tbS9kYW1vbi9jb3JlLmM6MzgxNzpcdFx0ICoga2RhbW9uZF9tZXJnZV9yZWdpb25zKCkgaWYgcG9zc2libGUsIHRvIHJlZHVjZSBvdmVyaGVhZFxubW0vZGFtb24vY29yZS5jLTM4MTgtXHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgzMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBFbnRyeSBQb2ludCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBEQU1PTiBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBtYWluIGVudHJ5IHBvaW50LiBJdCBsb29rcyBsaWtlIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGdldHMgY2FsbGVkIGZyb20gYGtkYW1vbmRfZm5gLCB3aGljaCBpcyB0aGUgY29yZSB0aHJlYWQgZnVuY3Rpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGUga2V5IHN5bWJvbCwgdGhlIHBvaW50IG9mIGZvY3VzIGZvciB0aGlzLCBzaG91bGQgYmUgZWl0aGVyIGBrZGFtb25kX2ZuYCBvciBga2RhbW9uZF9tZXJnZV9yZWdpb25zYC4KCldhaXQgYSBtaW51dGUsIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gQWgsIHJpZ2h0LCB0aGF0IHRyaWdnZXJzIGEgZ3VpZGVsaW5lIGluIG15IGhlYWQ6ICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zJiMzNDsuIFRoYXQgaW1wbGllcyBga2RhbW9uZF9mbmAgaXMgYWxzbyBsaWtlbHkgc3RhdGljLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwgZm9yIHRoZSBtYWluIGVudHJ5LiBMZXQmIzM5O3MgbWFrZSBzdXJlLCBJIG5lZWQgdG8gY29uZmlybSBga2RhbW9uZF9mbmAmIzM5O3Mgc3RhdGljIGRlc2lnbmF0aW9uIHRvIGJlIHN1cmUuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZGFtb25kX2ZuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD04NTQ9c3RydWN0IGRhbW9uX2N0eCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTg3NC1cdHVuc2lnbmVkIGxvbmcgbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXM7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODc1Olx0LyogZm9yIHdhaXRpbmcgdW50aWwgdGhlIGV4ZWN1dGlvbiBvZiB0aGUga2RhbW9uZF9mbiBpcyBzdGFydGVkICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODc2LVx0c3RydWN0IGNvbXBsZXRpb24ga2RhbW9uZF9zdGFydGVkO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzUtICogYmUgY2FsbGVkIGZyb20gYSBzYWZlIGNvbnRleHRzLiAgU3VjaCBjb250ZXh0cyBpbmNsdWRlIGRhbW9uX2N0eCBzZXR1cCB0aW1lXG5tbS9kYW1vbi9jb3JlLmM6MTAzNjogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwMzctICpcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA0MC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbm1tL2RhbW9uL2NvcmUuYzoxMDQxOiAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxubW0vZGFtb24vY29yZS5jLTEwNDItICogYXBwbHlpbmcgYXV0by10dW5lZCBtb25pdG9yaW5nIGludGVydmFscy5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTA0OD1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA3NC1cdC8qXG5tbS9kYW1vbi9jb3JlLmM6MTA3NTpcdCAqIG5leHRfaW50ZXJ2YWxzX3R1bmVfc2lzIHdpbGwgYmUgdXBkYXRlZCBpbnNpZGUga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwNzYtXHQgKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE5MjQtXG5tbS9kYW1vbi9jb3JlLmM6MTkyNTpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG5tbS9kYW1vbi9jb3JlLmMtMTkyNi1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkzNT1zdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTQyLVx0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcbm1tL2RhbW9uL2NvcmUuYzoxOTQzOlx0XHRjdHgtXHUwMDNla2RhbW9uZCA9IGt0aHJlYWRfcnVuKGtkYW1vbmRfZm4sIGN0eCwgXCYjMzQ7a2RhbW9uZC4lZFwmIzM0Oyxcbm1tL2RhbW9uL2NvcmUuYy0xOTQ0LVx0XHRcdFx0bnJfcnVubmluZ19jdHhzKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAzOT12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDQzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspXG5tbS9kYW1vbi9jb3JlLmM6MjA0NDpcdFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cbm1tL2RhbW9uL2NvcmUuYy0yMDQ1LVx0XHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XG4tLVxubW0vZGFtb24vY29yZS5jPTM3MjM9c3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTM3NDQtICovXG5tbS9kYW1vbi9jb3JlLmM6Mzc0NTpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbm1tL2RhbW9uL2NvcmUuYy0zNzQ2LXtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTYxNT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY0MS0gKiBUaGlzIHRlc3RzIHRoZSBpbnZhcmlhbnQgaW50cm9kdWNlZCBieTpcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNjQyOiAqIGNvbW1pdCAzM2MzZjZjMmI0OGMgKFwmIzM0O21tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVwmIzM0Oylcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjQzLSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjIyMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzOgoKKipIdW50aW5nIGZvciBEeW5hbWljIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlYmFzZSwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LCBgX19kYW1vbl9zdGFydGAsIGlzIGEgc3RhdGljIG9uZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8gYXNzdW1lIHRoYXQmIzM5O3MgdGhlICpvbmx5KiB3YXkgdGhlIGNvZGUgaXMgaW5pdGlhbGl6ZWQgb3IgZXhlY3V0ZWQuIEluIG15IGV4cGVyaWVuY2UsIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gZmluZCBvdGhlciBlbnRyeSBwb2ludHMsIG9uZXMgdGhhdCBtaWdodCBiZSBkeW5hbWljYWxseSBkZXRlcm1pbmVkIG9yIGluaXRpYXRlZCB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zLiBLbm93aW5nIHRoZSBzdGF0aWMgZW50cmllcyBpcyB1c2VmdWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVuZGVkIHN0YXJ0aW5nIHBvaW50IG9mIHRoaXMgY29kZSwgYnV0LCBJIG5lZWQgdG8gZmluZCBhbGwgb2YgdGhlIGVudHJ5IHBvaW50cyBmb3IgYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIEkgd2FudCB0byB1bmNvdmVyIGFueSBvdGhlciBpbml0aWFsaXphdGlvbnMgb3IgZXhlY3V0aW9ucyB0aGF0IGFyZSBub3QgZXhwbGljaXRseSBkZWZpbmVkLiBJdCYjMzk7cyB0aW1lIHRvIHN0YXJ0IHNlYXJjaGluZyBmb3IgdGhlIG1vcmUgZWx1c2l2ZSwgbm9uLXN0YXRpYyBtZXRob2RzIG9yIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3RhcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwOTI9Ym9vbCBkYW1vbl9pbml0aWFsaXplZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDkzOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDk0LXZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzgtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTAzOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTA0MC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkyNT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE5MjctLypcbm1tL2RhbW9uL2NvcmUuYzoxOTI4OiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0xOTI5LSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTkzNC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTM1OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMTkzNi17XG4tLVxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTU5LS8qKlxubW0vZGFtb24vY29yZS5jOjE5NjA6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXG5tbS9kYW1vbi9jb3JlLmMtMTk2MS0gKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTY4LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxubW0vZGFtb24vY29yZS5jOjE5Njk6ICogJiMzOTtkYW1vbl9zdGFydCgpJiMzOTsgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XG5tbS9kYW1vbi9jb3JlLmMtMTk3MC0gKiByZXR1cm5zIC1FQlVTWS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTc0OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTE5NzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTk5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMDAwOlx0XHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xubW0vZGFtb24vY29yZS5jLTIwMDEtXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jPTIwNzA9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA5Ny0gKlxubW0vZGFtb24vY29yZS5jOjIwOTg6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMDk5LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTA2PWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE1Mi0gKlxubW0vZGFtb24vY29yZS5jOjIxNTM6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMTU0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIwLVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MjE6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy00MjItXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzE9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQzLVxubW0vZGFtb24vcmVjbGFpbS5jOjM0NDpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ1LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9zdGF0LmM9MjAwPXN0YXRpYyBpbnQgZGFtb25fc3RhdF9zdGFydCh2b2lkKVxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yMTItXHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vc3RhdC5jOjIxMzpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9zdGF0LmMtMjE0LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjY3LVx0fVxubW0vZGFtb24vc3lzZnMuYzoyMjY4Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XG5tbS9kYW1vbi9zeXNmcy5jLTIyNjktXHRpZiAoZXJyKSB7XG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTE3Nz1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9tdGllcl9zdGFydCh2b2lkKVxuLS1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xOTEtXHRjdHhzWzFdID0gY3R4O1xuc2FtcGxlcy9kYW1vbi9tdGllci5jOjE5MjpcdGVyciA9IGRhbW9uX3N0YXJ0KGN0eHMsIDIsIHRydWUpO1xuc2FtcGxlcy9kYW1vbi9tdGllci5jLTE5My1cdGlmICghZXJyKVxuLS1cbnNhbXBsZXMvZGFtb24vcHJjbC5jPTYwPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy0xMDctXG5zYW1wbGVzL2RhbW9uL3ByY2wuYzoxMDg6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuc2FtcGxlcy9kYW1vbi9wcmNsLmMtMTA5LVx0aWYgKGVycikge1xuLS1cbnNhbXBsZXMvZGFtb24vd3NzZS5jPTYxPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3dzc2Vfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy04OC1cbnNhbXBsZXMvZGFtb24vd3NzZS5jOjg5Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTkwLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4OAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbWFwIG91dCB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBkYW1vbl9zdGFydGAgaXMgZGVmaW5pdGVseSB0aGUga2V5IEFQSSBlbnRyeSBwb2ludCB0aGF0IGtpY2tzIHRoaW5ncyBvZmYuIExldCBtZSBkb3VibGUtY2hlY2suLi4geWVwLCBzZWVtcyB0byBiZSB0aGUgbWFpbiBkcml2ZXIuIEJ1dCBpcyB0aGF0ICppdCo/IE5vcGUsIGBkYW1vbl9zZXRfYXR0cnNgIGlzIGFsc28gYW4gZW50cnkgcG9pbnQgLSBtYWtlcyBzZW5zZSwgc2luY2UgaXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgYHN0cnVjdCBkYW1vbl9hdHRyc2AgdGhhdCBjb250cm9sIHRoaW5ncyBsaWtlIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYC4gVGhlbiB0aGVyZSBpcyBgZGFtb25fc2V0X3JlZ2lvbnNgIGFzIHdlbGwuCgpUaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgdG8gbW9kaWZ5IGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgLCB3aGljaCBpcyBpbnZva2VkIGR1cmluZyB0aGUgZXhlY3V0aW9uIGluaXRpYXRlZCBieSBgZGFtb25fc3RhcnRgLCB0aGF0IG1ha2VzIGl0IGEgZ29vZCBmb2N1cyBmb3IgYW5hbHlzaXMuIEFsc28sIGJlY2F1c2UgYGRhbW9uX3NldF9hdHRyc2AgY29uZmlndXJlcyB0aGUgYXR0cmlidXRlcyB1c2VkIGluIHNhbXBsaW5nLCBpdCYjMzk7cyBhbHNvIGEgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEFuZCBoZXksIHRoZSB0ZXN0cyBhZGRlZCBhcmUgZm9yIGBkYW1vbl9zZXRfcmVnaW9uc2AgdG9vLCBzbyB0aGF0JiMzOTtzIGFsc28gYW4gaW1wb3J0YW50IHBpZWNlIHRvIGNvbnNpZGVyLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBzZXQgdXAgZm9yIERBTU9OLiBUaGF0JiMzOTtzIGFsd2F5cyBteSBmaXJzdCBzdGVwIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0ODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSB0YXNrIGF0IGhhbmQgcmVxdWlyZXMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBkYWVtb24sIG9yICYjMzQ7bW0vZGFtb24mIzM0OyBhcyB3ZSBjYWxsIGl0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgY3JhY2sgb3BlbiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuJiMzNDsgVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgaHViIGZvciBkZWZpbmluZyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgc3Vic3lzdGVtLiBUaGlzIGZpbGUgd2lsbCByZXZlYWwgd2hpY2ggb3RoZXIgZmVhdHVyZXMsIG1vZHVsZXMsIG9yIGtlcm5lbCBzZXR0aW5ncyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIERBTU9OIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbnRyaWNhdGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHZhcmlvdXMgS2NvbmZpZyBzeW1ib2xzLCBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMsIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbC4gSSBjYW4gdGhlbiB1c2UgdGhhdCBpbmZvcm1hdGlvbiB0byBkZXZlbG9wIG9yIGRlYnVnIHRoZSBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBEQU1PTlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxuICAgOTpcdFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcbiAgMTA6XHRcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXG4gIDEzOlx0XHQgIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxuICAxNjpcdFx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBEQU1PTlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXG4gIDIwOlx0XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFN5c2ZzIEV4cG9zdXJlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYERBTU9OYC4gVGhhdCBzZWVtcyB0byBiZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uLCB0aGUgY2VudHJhbCBjb250cm9sIHBvaW50LCByaWdodD8gRXZlcnl0aGluZyByZXZvbHZlcyBhcm91bmQgdGhhdC4gQW5kLCBvZiBjb3Vyc2UsIHRvIGludGVyYWN0IHdpdGggYERBTU9OYCBlZmZlY3RpdmVseSwgcGFydGljdWxhcmx5IGZvciB0aGluZ3MgbGlrZSBmdXp6aW5nIHdpdGggYSB0b29sIGxpa2Ugc3l6a2FsbGVyLCB3ZSBuZWVkIGEgd2F5IHRvIGV4cG9zZSBpdCB0byB1c2VyIHNwYWNlLiBUaGF0JiMzOTtzIHdoZXJlIGBEQU1PTl9TWVNGU2AgY29tZXMgaW4uIEl0JiMzOTtzIHRoZSBicmlkZ2UsIHRoZSBtZWNoYW5pc20gdG8gbWFrZSB0aGUgY29uZmlndXJhdGlvbiBhY2Nlc3NpYmxlIGFuZCB1c2FibGUgZnJvbSBvdXRzaWRlIHRoZSBrZXJuZWwuIFdpdGhvdXQgdGhhdCwgd2UmIzM5O3JlIHN0dWNrIGluIGEgYmxhY2sgYm94LiBTbywgYERBTU9OX1NZU0ZTYCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGZvciBwcmFjdGljYWwgaW50ZXJhY3Rpb24gd2l0aCBgREFNT05gIGluIHRoZXNlIGtpbmRzIG9mIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NTpcdFxuICA2NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2NzpcdFxuICA2ODpcdGNvbmZpZyBEQU1PTl9TWVNGU1xuICA2OTpcdFx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbiAgNzA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IFNZU0ZTXG4gIDcxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDcyOlx0XHRoZWxwXG4gIDczOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxuICA3NDpcdFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cbiAgNzU6XHRcbiAgNzY6XHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxuICA3NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA3ODpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICA3OTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgY3VycmVudCB0cmFpbiBvZiB0aG91Z2h0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEQU1PTiBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gRHluYW1pYyBBY2Nlc3MgTW9uaXRvcmluZyAoREFNT04pIGNvbmZpZ3MsIGFuZCBpdCBsb29rcyBsaWtlIGBEQU1PTmAgYW5kIGBEQU1PTl9TWVNGU2AgYXJlIHRoZSBwcmltYXJ5IG9uZXMgdG8gYmUgY29uY2VybmVkIHdpdGguIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBvbiB0aGVzZS4gSSYjMzk7bSBhbHNvIHJlbWVtYmVyaW5nIHRoYXQgdGhlIGFjdHVhbCBtb25pdG9yaW5nIGltcGxlbWVudGF0aW9uIG1pZ2h0IGludm9sdmUgYERBTU9OX1ZBRERSYCBhbmQgYERBTU9OX1BBRERSYCwgZGVwZW5kaW5nIG9uIGhvdyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VzLiBJIHNob3VsZCBjbGFyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgdGhlIGFkZHJlc3Mgc3BhY2VzIHdlJiMzOTtyZSB0YXJnZXRpbmcgYW5kIHRoZSBvdmVyaGVhZCBpbnZvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBob3cgdGhleSBpbnRlcmFjdCwgaWYgYXQgYWxsLCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTUxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gYmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiwgaXQgbG9va3MgbGlrZSBlbmFibGluZyBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fVkFERFJgLCBhbmQgYERBTU9OX1BBRERSYCBpcyBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHRoaXMgc2V0dXAuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gV2UmIzM5O3ZlIGdvdCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXMgdGhlIGNlbnRyYWwgcGllY2VzIGhlcmUsIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQuCgpUaGUgcGF0Y2ggYXBwZWFycyB0byBiZSBmb2N1c2VkIG9uIHJlZmluaW5nIHRoZSBpbnRlcm5hbCB3b3JraW5ncywgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBhbmQgYGRhbW9uX3dtYXJrX3dhaXRfdXNgLiBUaGF0IGNoYW5nZSB0byBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBpcyBpbnRlcmVzdGluZywgYW5kIHRoZSByZW1vdmFsIG9mIGBwcl9kZWJ1Z2AgaW1wbGllcyBhIG1vdmUgdG93YXJkcyBjbGVhbmVyIGNvZGUgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGlzIHN0YXRpYyB0ZWxscyBtZSBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uCgpGcm9tIHRoZXJlLCBgZGFtb25fc3RhcnRgIGlzIHRoZSBjbGVhciBlbnRyeSBwb2ludDsgaXQga2lja3Mgb2ZmIHRoZSB0aHJlYWQgdGhhdCBydW5zIGBrZGFtb25kX2ZuYCwgd2hpY2ggaW4gdHVybiBjYWxscyB0aGF0IGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGZ1bmN0aW9uLiBUaGUgdXNlIG9mIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMgdXNlZCBieSBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAuIEZpbmFsbHksIHRoZSBuZXcgS1VuaXQgdGVzdHMgYXJlIGZvY3VzZWQgb24gdmVyaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiBgZGFtb25fc2V0X3JlZ2lvbnNgLCB3aGljaCBpcyBnb29kIHRvIHNlZS4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBzZWUgaWYgYGRhbW9uX3N5c2ZzX3NldF9hdHRyc2AgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgIHByb3ZpZGVzIGFub3RoZXIgd2F5IHRvIGludGVyYWN0IHdpdGggdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfc2V0X2F0dHJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MTg5MT1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xOTEyLVxubW0vZGFtb24vc3lzZnMuYzoxOTEzOnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3N5c2ZzLmMtMTkxNC1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2F0dHJzICpzeXNfYXR0cnMpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDk0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDktXHRjdHgtXHUwMDNlcGF1c2UgPSBzeXNfY3R4LVx1MDAzZXBhdXNlO1xubW0vZGFtb24vc3lzZnMuYzoyMTEwOlx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X2F0dHJzKGN0eCwgc3lzX2N0eC1cdTAwM2VhdHRycyk7XG5tbS9kYW1vbi9zeXNmcy5jLTIxMTEtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgyNAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBEQU1PTiBwYXRjaCwgYXMgSSBzZWUgaXQuIEl0IGxvb2tzIGxpa2UgYGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0c2AgaXMgdGhlIGVudHJ5IHBvaW50IHdoZW4gd2UmIzM5O3JlIHdyaXRpbmcgdG8gc3lzZnMsIGJ1dCB0aGUgcmVhbCBoZWFydCBvZiB0aGUgbWF0dGVyIGlzIHRoZSBgZGFtb25fc2V0X2F0dHJzYCBmdW5jdGlvbi4KCkkgdGhpbmsgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24uIEl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24gb3Igb3ZlcmZsb3cgaXNzdWUgd2l0aGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgLCBzcGVjaWZpY2FsbHkgaG93IGBtYXhfdGhyZXNgIGlzIGNhbGN1bGF0ZWQsIHVzaW5nIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0JiMzOTtzIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQmIzM5O3MgcmVhY2hhYmxlLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfYXR0cnNgLCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYC4KCkl0JiMzOTtzIGNsZWFyIHRoYXQgYGRhbW9uX3NldF9yZWdpb25zYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgIHBhdGguIEFuZCwgY29uZmlybWVkLCBib3RoIGBkYW1vbl9zdGFydGAgYW5kIGBkYW1vbl9zZXRfYXR0cnNgIGFyZSBhbHNvIGFjY2Vzc2libGUgdmlhIHN5c2ZzLCB0aHJvdWdoIHdyaXRpbmcgdG8gdGhlIGBzdGF0ZWAgYW5kIGF0dHJpYnV0ZXMsIHJlc3BlY3RpdmVseS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgcXVpY2tseSBjaGVja2VkIGZvciBvdGhlciBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IG15IGF0dGVudGlvbi4gSSBrbm93IGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0JiMzOTtzIG5vdCBhIHN5bWJvbCB0byB0cmFjay4gU2ltaWxhcmx5LCBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBhbmQgYGtkYW1vbmRfZm5gIGFyZSBhbHNvIHN0YXRpYy4KClRoZXJlZm9yZSwgdGhlIG1haW4gbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBkZWZpbml0ZWx5IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfYXR0cnNgLCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYC4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgZGFtb25fc3RhcnRgIGlzIGV4cG9ydGVkLi4uIGFuZCB3ZSYjMzk7cmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipkYW1vbl9zdGFydCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjE3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWJ1Z2dpbmcgREFNT04gSW5pdGlhbGl6YXRpb24qKgoKSG1tLCB3YWl0IGEgbWludXRlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGEgcmVmZXJlbmNlIHRvIGBkYW1vbl9zdGFydGAsIGJ1dCBpdCBkb2VzbiYjMzk7dCBzZWVtIGxpa2UgaXQmIzM5O3MgYmVpbmcgcHJvcGVybHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkZWZpbmVkIGFuZCBpZiBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIGNoZWNrIHRoZSBjb3JlIERBTU9OIGNvZGU7IGl0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwbGFjZS4gU28sIGxldCBtZSBwdWxsIHVwIGBtbS9kYW1vbi9jb3JlLmNgIHJpZ2h0IGF3YXkuIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZWNsYXJhdGlvbiBvZiBgZGFtb25fc3RhcnRgLCBhbmQgdGhlbiBkZXRlcm1pbmUgaG93IGl0IGlzIHRvIGJlIGV4cG9ydGVkIHRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwsIHNvIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGJ1aWxkIGRvZXNuJiMzOTt0IGZhaWwuIEkmIzM5O20gc3VyZSBpdCYjMzk7cyBqdXN0IGEgc2ltcGxlIG92ZXJzaWdodCwgYnV0IHRoZXNlIGFyZSBleGFjdGx5IHRoZSBraW5kIG9mIGRldGFpbHMgdGhhdCBjYW4ga2lsbCB5b3Ugd2hlbiB5b3UmIzM5O3JlIHdvcmtpbmcgb24gc29tZXRoaW5nIGNvbXBsZXggbGlrZSBEQU1PTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3RhcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwOTI9Ym9vbCBkYW1vbl9pbml0aWFsaXplZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDkzOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDk0LXZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzgtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTAzOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTA0MC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkyNT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE5MjctLypcbm1tL2RhbW9uL2NvcmUuYzoxOTI4OiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0xOTI5LSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTkzNC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTM1OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMTkzNi17XG4tLVxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTU5LS8qKlxubW0vZGFtb24vY29yZS5jOjE5NjA6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXG5tbS9kYW1vbi9jb3JlLmMtMTk2MS0gKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTY4LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxubW0vZGFtb24vY29yZS5jOjE5Njk6ICogJiMzOTtkYW1vbl9zdGFydCgpJiMzOTsgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XG5tbS9kYW1vbi9jb3JlLmMtMTk3MC0gKiByZXR1cm5zIC1FQlVTWS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTc0OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTE5NzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTk5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMDAwOlx0XHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xubW0vZGFtb24vY29yZS5jLTIwMDEtXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jPTIwNzA9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA5Ny0gKlxubW0vZGFtb24vY29yZS5jOjIwOTg6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMDk5LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTA2PWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE1Mi0gKlxubW0vZGFtb24vY29yZS5jOjIxNTM6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMTU0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIwLVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MjE6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy00MjItXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzE9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQzLVxubW0vZGFtb24vcmVjbGFpbS5jOjM0NDpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ1LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9zdGF0LmM9MjAwPXN0YXRpYyBpbnQgZGFtb25fc3RhdF9zdGFydCh2b2lkKVxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yMTItXHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vc3RhdC5jOjIxMzpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9zdGF0LmMtMjE0LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjY3LVx0fVxubW0vZGFtb24vc3lzZnMuYzoyMjY4Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XG5tbS9kYW1vbi9zeXNmcy5jLTIyNjktXHRpZiAoZXJyKSB7XG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTE3Nz1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9tdGllcl9zdGFydCh2b2lkKVxuLS1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xOTEtXHRjdHhzWzFdID0gY3R4O1xuc2FtcGxlcy9kYW1vbi9tdGllci5jOjE5MjpcdGVyciA9IGRhbW9uX3N0YXJ0KGN0eHMsIDIsIHRydWUpO1xuc2FtcGxlcy9kYW1vbi9tdGllci5jLTE5My1cdGlmICghZXJyKVxuLS1cbnNhbXBsZXMvZGFtb24vcHJjbC5jPTYwPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy0xMDctXG5zYW1wbGVzL2RhbW9uL3ByY2wuYzoxMDg6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuc2FtcGxlcy9kYW1vbi9wcmNsLmMtMTA5LVx0aWYgKGVycikge1xuLS1cbnNhbXBsZXMvZGFtb24vd3NzZS5jPTYxPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3dzc2Vfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy04OC1cbnNhbXBsZXMvZGFtb24vd3NzZS5jOjg5Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTkwLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYyMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1cyBTeW1ib2wgQ29uc2lkZXJhdGlvbnMgZm9yIERBTU9OIGluIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogREFNT04gdXNpbmcgU3l6a2FsbGVyLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYSBmdW5jdGlvbiBuZWVkZWQgdG8gYmUgZXhwb3J0ZWQgdG8gYmUgYSBmb2N1cyBzeW1ib2wsIGJ1dCB0aGF0JiMzOTtzIG5vdCBuZWNlc3NhcmlseSB0aGUgY2FzZSBoZXJlLiBJIHJlbWVtYmVyIHRoYXQgYGRhbW9uX3N0YXJ0YCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gbG9jYXRlZCBpbiBgbW0vZGFtb24vY29yZS5jYC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCB0aGlzIHdhc24mIzM5O3QgaWRlYWwsIGVzcGVjaWFsbHkgc2luY2UgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBIb3dldmVyLCBJIHJlY2FsbCB0aGF0IFN5emthbGxlciBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIHRocm91Z2ggc3lzZnMgZm9yIERBTU9OOyBzbyB0aGUgc3lzZnMgZW50cnkgcG9pbnRzIGxpa2UgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCBgZGFtb25fc3lzZnNfc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zeXNmc19zZXRfcmVnaW9uc2AgYXJlIHJlbGV2YW50LgoKVGhlbiBpdCBoaXQgbWU6IFN5emthbGxlciB1dGlsaXplcyBrY292LCB3aGljaCBpbnN0cnVtZW50cyAqYWxsKiBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCBldmVuIHRob3VnaCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXJlbiYjMzk7dCBleHBvcnRlZCwgdGhleSAqY2FuKiBiZSB1c2VkIGFzIGZvY3VzIHN5bWJvbHMuIFNpbmNlIGtjb3Ygd2lsbCBpbnN0cnVtZW50IHRoZW0uIFNvLCBldmVuIHRob3VnaCB0aGV5IGFyZW4mIzM5O3QgZGlyZWN0bHkgZXhwb3NlZCBleHRlcm5hbGx5LCB0aGV5IGFyZSBhdmFpbGFibGUuIFNvLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2Agc2hvdWxkIGJlIGdvb2QgY2hvaWNlcy4gTm93LCBsZXQgbWUgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkYW1vbl9zZXRfYXR0cnNgIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD04MDk9c3RydWN0IGRhbW9uX2F0dHJzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODE4LVx0ICogQGFnZ3JfaW50ZXJ2YWwgdG8gQHNhbXBsZV9pbnRlcnZhbCByYXRpby5cbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MTk6XHQgKiBDb3JlLWV4dGVybmFsIGNvbXBvbmVudHMgY2FsbCBkYW1vbl9zZXRfYXR0cnMoKSB3aXRoIFx1MDAyNmRhbW9uX2F0dHJzXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODIwOlx0ICogdGhhdCB0aGlzIGZpZWxkIGlzIHVuc2V0LiAgSW4gdGhlIGNhc2UsIGRhbW9uX3NldF9hdHRycygpIHNldHMgdGhpc1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTgyMS1cdCAqIGZpZWxkIG9mIHJlc3VsdGluZyBcdTAwMjZkYW1vbl9hdHRycy4gIENvcmUtaW50ZXJuYWwgY29tcG9uZW50cyBzdWNoIGFzXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODIyOlx0ICoga2RhbW9uZF90dW5lX2ludGVydmFscygpIGNhbGxzIGRhbW9uX3NldF9hdHRycygpIHdpdGggXHUwMDI2ZGFtb25fYXR0cnNcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MjM6XHQgKiB0aGF0IHRoaXMgZmllbGQgaXMgc2V0LiAgSW4gdGhlIGNhc2UsIGRhbW9uX3NldF9hdHRycygpIGp1c3Qga2VlcFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTgyNC1cdCAqIGl0LlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDYzPXZvaWQgZGFtb25fZGVzdHJveV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDY0OmludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY1LXZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMjgtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTAyOTogKiBkYW1vbl9zZXRfYXR0cnMoKSAtIFNldCBhdHRyaWJ1dGVzIGZvciB0aGUgbW9uaXRvcmluZy5cbm1tL2RhbW9uL2NvcmUuYy0xMDMwLSAqIEBjdHg6XHRcdG1vbml0b3JpbmcgY29udGV4dFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDQ3LSAqL1xubW0vZGFtb24vY29yZS5jOjEwNDg6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG5tbS9kYW1vbi9jb3JlLmMtMTA0OS17XG4tLVxubW0vZGFtb24vY29yZS5jPTE3NTE9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3ODQtXHQgKiBzY2hlbWVzIGFuZCB0YXJnZXRzIHNob3VsZCBiZSB1cGRhdGVkIGZpcnN0LCBzaW5jZVxubW0vZGFtb24vY29yZS5jOjE3ODU6XHQgKiAxLiBkYW1vbl9zZXRfYXR0cnMoKSB1cGRhdGVzIG1vbml0b3JpbmcgcmVzdWx0cyBvZiB0YXJnZXRzIGFuZFxubW0vZGFtb24vY29yZS5jLTE3ODYtXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc5MC1cdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFx1MDAyNmRzdC1cdTAwM2VhdHRycywgXHUwMDI2c3JjLVx1MDAzZWF0dHJzKSkge1xubW0vZGFtb24vY29yZS5jOjE3OTE6XHRcdGVyciA9IGRhbW9uX3NldF9hdHRycyhkc3QsIFx1MDAyNnNyYy1cdTAwM2VhdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTc5Mi1cdFx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjU0PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyNzItXHR0cmFjZV9kYW1vbl9tb25pdG9yX2ludGVydmFsc190dW5lKG5ld19hdHRycy5zYW1wbGVfaW50ZXJ2YWwpO1xubW0vZGFtb24vY29yZS5jOjIyNzM6XHRkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2bmV3X2F0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0yMjc0LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzc0NT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc3MS1cdFx0ICogYmUgY2hhbmdlZCBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgUmVhZCB0aGUgdmFsdWVzIGhlcmUsIGFuZFxubW0vZGFtb24vY29yZS5jOjM3NzI6XHRcdCAqIHVzZSB0aG9zZSBmb3IgdGhpcyBpdGVyYXRpb24uICBUaGF0IGlzLCBkYW1vbl9zZXRfYXR0cnMoKVxubW0vZGFtb24vY29yZS5jLTM3NzMtXHRcdCAqIHVwZGF0ZWQgbmV3IHZhbHVlcyBhcmUgcmVzcGVjdGVkIGZyb20gbmV4dCBpdGVyYXRpb24uXG4tLVxubW0vZGFtb24vY29yZS5jLTM4NDUtXHRcdFx0XHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXG5tbS9kYW1vbi9jb3JlLmM6Mzg0NjpcdFx0XHRcdCAqIGRhbW9uX3NldF9hdHRycygpIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZyb21cbm1tL2RhbW9uL2NvcmUuYy0zODQ3LVx0XHRcdFx0ICoga2RhbW9uZF90dW5lX2ludGVydmFsKCkgbWF5IHdyb25nbHkgdGhpbmtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTMwMC1cdH1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MzAxOlx0ZXJyID0gZGFtb25fc2V0X2F0dHJzKHBhcmFtX2N0eCwgXHUwMDI2YXR0cnMpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zMDItXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjI0LVx0fVxubW0vZGFtb24vcmVjbGFpbS5jOjIyNTpcdGVyciA9IGRhbW9uX3NldF9hdHRycyhwYXJhbV9jdHgsIFx1MDAyNmF0dHJzKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMjYtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTE3NS1cdH07XG5tbS9kYW1vbi9zdGF0LmM6MTc2Olx0aWYgKGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKSlcbm1tL2RhbW9uL3N0YXQuYy0xNzctXHRcdGdvdG8gZnJlZV9vdXQ7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xOTEzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE5MzItXHR9O1xubW0vZGFtb24vc3lzZnMuYzoxOTMzOlx0cmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTkzNC19XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTY3OT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY4OS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2OTA6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNnZhbGlkX2F0dHJzKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjkxLVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02OTMtXHRpbnZhbGlkX2F0dHJzLm1pbl9ucl9yZWdpb25zID0gMTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2OTQ6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02OTUtXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY5Ny1cdGludmFsaWRfYXR0cnMubWF4X25yX3JlZ2lvbnMgPSA5O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjY5ODpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2aW52YWxpZF9hdHRycyksIC1FSU5WQUwpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY5OS1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzAxLVx0aW52YWxpZF9hdHRycy5hZ2dyX2ludGVydmFsID0gNDk5OTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3MDI6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03MDMtXG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcbi0tXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTAzLVx0fTtcbnNhbXBsZXMvZGFtb24vbXRpZXIuYzoxMDQ6XHRpZiAoZGFtb25fc2V0X2F0dHJzKGN0eCwgXHUwMDI2YXR0cnMpKVxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEwNS1cdFx0Z290byBmcmVlX291dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNzUKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogNjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGlzIGBkYW1vbl9zZXRfYXR0cnNgIGFjdHVhbGx5IGV4cG9ydGVkPyBIbW0sIGBFWFBPUlRfU1lNQk9MYCBpc24mIzM5O3Qgc2hvd2luZyB1cCBpbiB0aGUgZ3JlcCBvdXRwdXQsIHdoaWNoIGlzIGEgYml0IG9kZC4gQnV0IHN5emthbGxlciBjYW4gc3RpbGwgaW50ZXJhY3Qgd2l0aCBpdCB2aWEgc3lzZnMsIHNvIHRoYXQmIzM5O3MgZ29vZC4gTXkgZm9jdXMgc3ltYm9scyBzaG91bGQgZGVmaW5pdGVseSBiZSBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AuIEkgdGhpbmsgdGhhdCBjb3ZlcnMgdGhlIGtleSBlbnRyeSBwb2ludHMuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIGFuZCBjYXJlZnVsbHkgcmV2aWV3IHRob3NlIGluc3RydWN0aW9ucyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKVGhlIHBhdGNoIGl0c2VsZiBtYWtlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgLCBwcmV2ZW50aW5nIGludGVnZXIgdHJ1bmNhdGlvbiBvZiBgbWF4X3RocmVzYC4gVGhpcyAqZG9lcyogYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LCBhbmQgY3JpdGljYWxseSwgaXQmIzM5O3MgcmVhY2hhYmxlIGV2ZW4gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFRoYXQgbWVhbnMgV29ydGhGdXp6aW5nPXRydWUuIEkmIzM5O20gcHJldHR5IGNvbWZvcnRhYmxlIHdpdGggdGhhdCBjb25jbHVzaW9uLgoKU28sIGFzIGEgc3VtbWFyeToKCiogICAqKldvcnRoRnV6emluZz10cnVlKioKKiAgICoqRm9jdXNTeW1ib2xzKio6IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fc2V0X3JlZ2lvbnNgCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYAoKV2FpdCwgbGV0IG1lIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBpcyBpbmxpbmUsIHNvIGl0JiMzOTtzIG5vdCBhIHJlbGV2YW50IHN5bWJvbC4gQW5kIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGlzIHN0YXRpYzsgc28gbm90IGEgZ29vZCBlbnRyeSBwb2ludC4gVGhhdCBtYWtlcyBzZW5zZS4KCk9rYXksIHNvIEkgd2lsbCBzdGljayB3aXRoOgoKKiAgIGBkYW1vbl9zdGFydGAgLSB0aGlzIGlzIHRoZSBjb3JlIGVudHJ5IHBvaW50IHRvIHN0YXJ0IHRoZSBEQU1PTiB0aHJlYWQuCiogICBgZGFtb25fc2V0X2F0dHJzYCAtIHRoZSBlbnRyeSBwb2ludCB0byBzZXQgYXR0cmlidXRlcy4KKiAgIGBkYW1vbl9zZXRfcmVnaW9uc2AgLSB0aGUgZW50cnkgcG9pbnQgdG8gc2V0IHJlZ2lvbnMuCgpBZnRlciB0aGF0IGRvdWJsZS1jaGVjaywgSSBhbSB2ZXJ5IGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfYXR0cnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIGlzc3VlIGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGJ5IHVzaW5nIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCB0byBjYWxjdWxhdGUgYG1heF90aHJlc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIERBTU9OJiMzOTtzIHJlZ2lvbiBtZXJnaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9hdHRycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24gaXNzdWUgaW4gYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AgYnkgdXNpbmcgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIHRvIGNhbGN1bGF0ZSBgbWF4X3RocmVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgREFNT04mIzM5O3MgcmVnaW9uIG1lcmdpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo0Mi40ODgzMzMzODJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA4OTQzNTM4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fc2V0X2F0dHJzXCIsXG4gICAgXCJkYW1vbl9zZXRfcmVnaW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBpc3N1ZSBpbiBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBieSB1c2luZyBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgdG8gY2FsY3VsYXRlIGBtYXhfdGhyZXNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiBEQU1PTidzIHJlZ2lvbiBtZXJnaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo0Mi40ODgzNDUxODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODI4ODI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIzNjczYTg5ZGEwNTE2OGVkZDc0NzZmMDRmYTE5YzM1ZTM3ZGQ3YmVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDA6NTA6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbmluZGV4IGU2NzVhNTcxNDVlMzYuLmU5NDg4YmI0OGQyM2MgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbkBAIC0zLDcgKzMsNyBAQCBEYXRlOlxcdFxcdE1hciAyMDIyXFxuIENvbnRhY3Q6XFx0U0ogUGFyayBcXHUwMDNjc2pAa2VybmVsLm9yZ1xcdTAwM2VcXG4gRGVzY3JpcHRpb246XFx0SW50ZXJmYWNlIGZvciBEYXRhIEFjY2VzcyBNT05pdG9yaW5nIChEQU1PTikuICBDb250YWlucyBmaWxlc1xcbiBcXHRcXHRmb3IgY29udHJvbGxpbmcgREFNT04uICBGb3IgbW9yZSBkZXRhaWxzIG9uIERBTU9OIGl0c2VsZixcXG4tXFx0XFx0cGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vaW5kZXgucnN0LlxcbitcXHRcXHRwbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9pbmRleC5yc3QuXFxuIFxcbiBXaGF0OlxcdFxcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL1xcbiBEYXRlOlxcdFxcdE1hciAyMDIyXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vbWFpbnRhaW5lci1wcm9maWxlLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vbWFpbnRhaW5lci1wcm9maWxlLnJzdFxcbmluZGV4IGZiMmZhMDBjYzlhYTEuLmE3YzEzNTIzMzkzNzggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0XFxuQEAgLTEwNiwxOCArMTA2LDkgQEAgQUkgUmV2aWV3XFxuIFxcbiBGb3IgcGF0Y2hlcyB0aGF0IGFyZSBwdWJsaWNseSBwb3N0ZWQgdG8gREFNT04gbWFpbGluZyBsaXN0XFxuIChkYW1vbkBsaXN0cy5saW51eC5kZXYpLCBBSSByZXZpZXdzIG9mIHRoZSBwYXRjaGVzIHdpbGwgYmUgYXZhaWxhYmxlIGF0XFxuLXNhc2hpa28uZGV2LiAgVGhlIHJldmlld3MgY291bGQgYWxzbyBiZSBzZW50IGFzIG1haWxzIHRvIHRoZSBhdXRob3Igb2YgdGhlXFxuLXBhdGNoLlxcbi1cXG4tUGF0Y2ggYXV0aG9ycyBhcmUgZW5jb3VyYWdlZCB0byBjaGVjayB0aGUgQUkgcmV2aWV3cyBhbmQgc2hhcmUgdGhlaXIgb3BpbmlvbnMuXFxuLVRoZSBzaGFyaW5nIGNvdWxkIGJlIGRvbmUgYXMgYSByZXBseSB0byB0aGUgbWFpbCB0aHJlYWQuICBDb25zaWRlciByZWR1Y2luZyB0aGVcXG4tcmVjaXBpZW50cyBsaXN0IGZvciBzdWNoIHNoYXJpbmcsIHNpbmNlIHNvbWUgcGVvcGxlIGFyZSBub3QgcmVhbGx5IGludGVyZXN0ZWRcXG4taW4gQUkgcmV2aWV3cy4gIEFzIGEgcnVsZSBvZiB0aHVtYiwgZHJvcCBzdGFibGVAdmdlci5rZXJuZWwub3JnIGFuZCBpbmRpdmlkdWFsc1xcbi1leGNlcHQgREFNT04gbWFpbnRhaW5lci5cXG4tXFxuLWBoa21sYCBhbHNvIHByb3ZpZGVzIGEgYGZlYXR1cmVcXG4tXFx1MDAzY2h0dHBzOi8vZ2l0aHViLmNvbS9zanAzOC9oYWNrZXJtYWlsL2Jsb2IvbWFzdGVyL1VTQUdFLm1kI2ZvcndhcmRpbmctc2FzaGlrb2Rldi1zdGF0dXNjb21tZW50cy10by1tYWlsaW5nLWxpc3RcXHUwMDNlYF9cXG4tZm9yIHN1Y2ggc2hhcmluZy4gIFBsZWFzZSBmZWVsIGZyZWUgdG8gdXNlIHRoZSBmZWF0dXJlLlxcbitzYXNoaWtvLmRldi4gIFRoZSByZXZpZXdzIHdpbGwgYWxzbyBiZSBzZW50IGFzIHJlcGxpZXMgdG8gdGhlIGF1dGhvciBvZiB0aGVcXG4rcGF0Y2ggYW5kIHRoZSBtYWlsaW5nIGxpc3QuXFxuIFxcbi1JdCBpcyBvbmx5IGFuIG9wdGlvbmFsIHJlY29tbWVuZGF0aW9uLiAgREFNT04gbWFpbnRhaW5lciBjb3VsZCBhbHNvIGFzayBhbnlcXG4tcXVlc3Rpb24gYWJvdXQgdGhlIEFJIHJldmlld3MsIHRob3VnaC5cXG4rUGF0Y2ggYXV0aG9ycyBhcmUgZW5jb3VyYWdlZCB0byBjaGVjayB0aGUgQUkgcmV2aWV3cyBhbmQgc2hhcmUgdGhlaXIgb3BpbmlvbnNcXG4rYnkgcmVwbHlpbmcgb24gdGhlIG1haWwgdGhyZWFkLiAgSXQgaXMgb25seSBhbiBvcHRpb25hbCByZWNvbW1lbmRhdGlvbi4gIERBTU9OXFxuK21haW50YWluZXIgY291bGQgYWxzbyBhc2sgYW55IHF1ZXN0aW9uIGFib3V0IHRoZSBBSSByZXZpZXdzLCB0aG91Z2guXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjZjMGZiMTc1ZTNkMjEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTMzNzMsOCArMzM3Myw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLCB1bnNpZ25lZCBpbnQgdGhyZXNob2xkLFxcbiBcXHR1bnNpZ25lZCBpbnQgbWF4X3RocmVzO1xcbiBcXHRib29sIGNvdW50X2FnZSA9IHRydWU7XFxuIFxcbi1cXHRtYXhfdGhyZXMgPSBjLVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsIC9cXG4tXFx0XFx0KGMtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/ICBjLVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTtcXG4rXFx0bWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2Yy1cXHUwMDNlYXR0cnMpO1xcbiBcXHR3aGlsZSAodHJ1ZSkge1xcbiBcXHRcXHRucl9yZWdpb25zID0gMDtcXG4gXFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcXG5AQCAtMzU5NywxMCArMzU5Niw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3dtYXJrX3dhaXRfdXMoc3RydWN0IGRhbW9zICpzY2hlbWUpXFxuIFxcbiBcXHQvKiBoaWdoZXIgdGhhbiBoaWdoIHdhdGVybWFyayBvciBsb3dlciB0aGFuIGxvdyB3YXRlcm1hcmsgKi9cXG4gXFx0aWYgKG1ldHJpYyBcXHUwMDNlIHNjaGVtZS1cXHUwMDNld21hcmtzLmhpZ2ggfHwgc2NoZW1lLVxcdTAwM2V3bWFya3MubG93IFxcdTAwM2UgbWV0cmljKSB7XFxuLVxcdFxcdGlmIChzY2hlbWUtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJkZWFjdGl2YXRlIGEgc2NoZW1lICglZCkgZm9yICVzIHdtYXJrXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgc2NoZW1lLVxcdTAwM2VhY3Rpb24sXFxuLVxcdFxcdFxcdFxcdCBzdHJfaGlnaF9sb3cobWV0cmljIFxcdTAwM2Ugc2NoZW1lLVxcdTAwM2V3bWFya3MuaGlnaCkpO1xcbiBcXHRcXHRzY2hlbWUtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQgPSBmYWxzZTtcXG4gXFx0XFx0cmV0dXJuIHNjaGVtZS1cXHUwMDNld21hcmtzLmludGVydmFsO1xcbiBcXHR9XFxuQEAgLTM2MTAsOCArMzYwNSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3dtYXJrX3dhaXRfdXMoc3RydWN0IGRhbW9zICpzY2hlbWUpXFxuIFxcdFxcdFxcdCFzY2hlbWUtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXFxuIFxcdFxcdHJldHVybiBzY2hlbWUtXFx1MDAzZXdtYXJrcy5pbnRlcnZhbDtcXG4gXFxuLVxcdGlmICghc2NoZW1lLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiYWN0aXZhdGUgYSBzY2hlbWUgKCVkKVxcXFxuXFxcIiwgc2NoZW1lLVxcdTAwM2VhY3Rpb24pO1xcbiBcXHRzY2hlbWUtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQgPSB0cnVlO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0zNzU0LDggKzM3NDcsNiBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4gXFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0gZGF0YTtcXG4gXFx0dW5zaWduZWQgbG9uZyBzel9saW1pdCA9IDA7XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwia2RhbW9uZCAoJWQpIHN0YXJ0c1xcXFxuXFxcIiwgY3VycmVudC1cXHUwMDNlcGlkKTtcXG4tXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmN0eC1cXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcXG4gXFx0Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlID0gZmFsc2U7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xcbkBAIC0zOTAzLDcgKzM4OTQsNiBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4gXFx0ZGFtb3Nfd2Fsa19jYW5jZWwoY3R4KTtcXG4gXFxuLVxcdHByX2RlYnVnKFxcXCJrZGFtb25kICglZCkgZmluaXNoZXNcXFxcblxcXCIsIGN1cnJlbnQtXFx1MDAzZXBpZCk7XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9sb2NrKTtcXG4gXFx0Y3R4LVxcdTAwM2VrZGFtb25kID0gTlVMTDtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfbG9jayk7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbmluZGV4IDRhNTM2ZDQxY2RiMmQuLjUxMWYyODU2ZDM0M2MgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuQEAgLTQ2MywxMSArNDYzLDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKm9sZF9yYW5nZXMsIGludCBzel9vbGRfcmFuZ2VzLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqbmV3X3JhbmdlcywgaW50IHN6X25ld19yYW5nZXMsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeixcXG4tXFx0XFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKmV4cGVjdF9yYW5nZXMsIGludCBzel9leHBlY3RfcmFuZ2VzKVxcbitcXHRcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqZXhwZWN0X3JhbmdlcywgaW50IHN6X2V4cGVjdF9yYW5nZXMsXFxuK1xcdFxcdGludCBleHBlY3RfZXJyKVxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuIFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuLVxcdGludCBpO1xcbitcXHRpbnQgaSwgZXJyO1xcbiBcXG4gXFx0dCA9IGRhbW9uX25ld190YXJnZXQoKTtcXG4gXFx0aWYgKCF0KVxcbkBAIC00ODEsNyArNDgyLDggQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbiBcXHRcXHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xcbiBcXHR9XFxuIFxcbi1cXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCBuZXdfcmFuZ2VzLCBzel9uZXdfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTtcXG4rXFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnModCwgbmV3X3Jhbmdlcywgc3pfbmV3X3JhbmdlcywgbWluX3JlZ2lvbl9zeik7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIGV4cGVjdF9lcnIpO1xcbiBcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIHN6X2V4cGVjdF9yYW5nZXMpO1xcbiBcXHRpZiAoZGFtb25fbnJfcmVnaW9ucyh0KSAhPSBzel9leHBlY3RfcmFuZ2VzKSB7XFxuQEAgLTUxMCw3ICs1MTIsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe1xcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gNSwgLmVuZCA9IDE1fSxcXG4gXFx0XFx0XFx0ey5zdGFydCA9IDE1LCAuZW5kID0gMjV9LFxcbi1cXHRcXHRcXHR9LCAyKTtcXG4rXFx0XFx0XFx0fSwgMiwgMCk7XFxuIFxcdC8qIFVuLWludGVyc2VjdGluZyByZWdpb25zIHNob3VsZCBiZSByZW1vdmVkLiAqL1xcbiBcXHRkYW1vbl90ZXN0X3NldF9yZWdpb25zX2Zvcih0ZXN0LFxcbiBcXHRcXHRcXHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7XFxuQEAgLTUyMyw3ICs1MjUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0XFx0MSxcXG4gXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe1xcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gMTgsIC5lbmQgPSAyM30sXFxuLVxcdFxcdFxcdH0sIDEpO1xcbitcXHRcXHRcXHR9LCAxLCAwKTtcXG4gXFx0LypcXG4gXFx0ICogSG9sZXMgc2hvdWxkIGJlIGZpbGxlZCB1cCB3aXRoIG5ldyByZWdpb25zLlxcbiBcXHQgKlxcbkBAIC01NDQsNyArNTQ2LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdFxcdFxcdHsuc3RhcnQgPSA4LCAuZW5kID0gMTZ9LFxcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gMTYsIC5lbmQgPSAyNH0sXFxuIFxcdFxcdFxcdHsuc3RhcnQgPSAyNCwgLmVuZCA9IDI4fSxcXG4tXFx0XFx0XFx0fSwgMyk7XFxuK1xcdFxcdFxcdH0sIDMsIDApO1xcbiBcXHQvKlxcbiBcXHQgKiBOZXcgcmVnaW9ucyBzaG91bGQgYmUgYWJsZSB0byBiZSBhcHBlbmRlZC5cXG4gXFx0ICpcXG5AQCAtNTY2LDcgKzU2OCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gMCwgLmVuZCA9IDR9LFxcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gNCwgLmVuZCA9IDE1fSxcXG4gXFx0XFx0XFx0ey5zdGFydCA9IDI1LCAuZW5kID0gNDB9LFxcbi1cXHRcXHRcXHR9LCAzKTtcXG4rXFx0XFx0XFx0fSwgMywgMCk7XFxuIFxcdC8qXFxuIFxcdCAqIE5ldyByZWdpb25zIHNob3VsZCBiZSBhYmxlIHRvIGJlIGluc2VydGVkLlxcbiBcXHQgKlxcbkBAIC01ODksNyArNTkxLDQ4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gMCwgLmVuZCA9IDE1fSxcXG4gXFx0XFx0XFx0ey5zdGFydCA9IDI1LCAuZW5kID0gNDB9LFxcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gNDQsIC5lbmQgPSA1MH0sXFxuLVxcdFxcdFxcdH0sIDMpO1xcbitcXHRcXHRcXHR9LCAzLCAwKTtcXG4rXFx0LyogWmVybyBzaXplIHJlZ2lvbnMgc2hvdWxkIHJldHVybiAtRUlOVkFMLiAqL1xcbitcXHRkYW1vbl90ZXN0X3NldF9yZWdpb25zX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCxcXG4rXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe1xcbitcXHRcXHRcXHR7LnN0YXJ0ID0gNDIsIC5lbmQgPSA0Mn0sXFxuK1xcdFxcdFxcdH0sIDEsIDEsXFxuK1xcdFxcdFxcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLCAtRUlOVkFMKTtcXG4rXFx0LyogTmVnYXRpdmUgc2l6ZSByZWdpb25zIHNob3VsZCByZXR1cm4gLUVJTlZBTC4gKi9cXG4rXFx0ZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsXFxuK1xcdFxcdFxcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcXG4rXFx0XFx0XFx0ey5zdGFydCA9IDQyLCAuZW5kID0gMjF9LFxcbitcXHRcXHRcXHR9LCAxLCAxLFxcbitcXHRcXHRcXHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCwgLUVJTlZBTCk7XFxuK1xcdC8qXFxuK1xcdCAqIFJlZ2lvbnMgcmVzdWx0aW5nIGluIHNhbWUgcmVnaW9uIGFmdGVyIGFsaW5nbWVudCBzaG91bGQgcmV0dXJuXFxuK1xcdCAqIC1FSU5WQUwuXFxuK1xcdCAqL1xcbitcXHRkYW1vbl90ZXN0X3NldF9yZWdpb25zX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCxcXG4rXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe1xcbitcXHRcXHRcXHR7LnN0YXJ0ID0gMTAsIC5lbmQgPSAyMH0sXFxuK1xcdFxcdFxcdHsuc3RhcnQgPSAyMCwgLmVuZCA9IDMwfSxcXG4rXFx0XFx0XFx0fSwgMiwgNDA5NixcXG4rXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHtcXG4rXFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDAsXFxuK1xcdFxcdC5hZ2dyX2ludGVydmFsID0gMCxcXG4rXFx0fTtcXG4rXFxuK1xcdC8qIFplcm8gYWdncmVnYXRpb24gaW50ZXJ2YWwgZG9lc24ndCBjYXVzZSBkaXZpc2lvbiBieSB6ZXJvICovXFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZhdHRycyksIDEpO1xcbitcXG4rXFx0LyogVG9vIGxhcmdlIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJ3QgY2F1c2Ugb3ZlcmZsb3cgKi9cXG4rXFx0YXR0cnMuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICsgMTtcXG4rXFx0S1VOSVRfRVhQRUNUX0dFKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmF0dHJzKSwgMCk7XFxuK1xcdEtVTklUX0VYUEVDVF9MRSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZhdHRycyksIFVJTlRfTUFYKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbkBAIC0xNjQzLDYgKzE2ODYsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMpLFxcbitcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X212c3VtKSxcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5pbmRleCA0OTc2Nzc1ZmUyNzYyLi41Y2NmNzBkYzhhMzBiIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXFxuQEAgLTE5MiwxOSArMTkyLDEwIEBAIHN0YXRpYyBpbnQgZGFtb25fdmFfdGhyZWVfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2luaXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG4ge1xcbi1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0aTtcXG4gXFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXTtcXG4tXFx0aW50IHRpZHggPSAwO1xcbiBcXG4tXFx0aWYgKGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnModCwgcmVnaW9ucykpIHtcXG4tXFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHRpLCBjdHgpIHtcXG4tXFx0XFx0XFx0aWYgKHRpID09IHQpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR0aWR4Kys7XFxuLVxcdFxcdH1cXG4tXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBnZXQgdGhyZWUgcmVnaW9ucyBvZiAlZHRoIHRhcmdldFxcXFxuXFxcIiwgdGlkeCk7XFxuK1xcdGlmIChkYW1vbl92YV90aHJlZV9yZWdpb25zKHQsIHJlZ2lvbnMpKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4gXFxuIFxcdGRhbW9uX3NldF9yZWdpb25zKHQsIHJlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hcXG5pbmRleCBmN2ZiOTRiODRlNzE2Li44NjkwYWVmMWU0MzZjIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hcXG5AQCAtMjEwLDYgKzIxMCw3IEBAIHRlc3RfZ29hbCgpXFxuIFxcdGVuc3VyZV93cml0ZV9zdWNjIFxcXCIkZnBhdGhcXFwiIFxcXCJhY3RpdmVfbWVtX2JwXFxcIiBcXFwidmFsaWQgaW5wdXRcXFwiXFxuIFxcdGVuc3VyZV93cml0ZV9zdWNjIFxcXCIkZnBhdGhcXFwiIFxcXCJpbmFjdGl2ZV9tZW1fYnBcXFwiIFxcXCJ2YWxpZCBpbnB1dFxcXCJcXG4gXFx0ZW5zdXJlX3dyaXRlX3N1Y2MgXFxcIiRmcGF0aFxcXCIgXFxcIm5vZGVfZWxpZ2libGVfbWVtX2JwXFxcIiBcXFwidmFsaWQgaW5wdXRcXFwiXFxuK1xcdGVuc3VyZV93cml0ZV9zdWNjIFxcXCIkZnBhdGhcXFwiIFxcXCJodWdlcGFnZV9tZW1fYnBcXFwiIFxcXCJ2YWxpZCBpbnB1dFxcXCJcXG4gXFx0ZW5zdXJlX3dyaXRlX2ZhaWwgXFxcIiRmcGF0aFxcXCIgXFxcImZvb1xcXCIgXFxcImludmFsaWQgaW5wdXRcXFwiXFxuIFxcdGVuc3VyZV9maWxlIFxcXCIkZ29hbF9kaXIvbmlkXFxcIiBcXFwiZXhpc3RcXFwiIFxcXCI2MDBcXFwiXFxuIFxcdGVuc3VyZV9maWxlIFxcXCIkZ29hbF9kaXIvcGF0aFxcXCIgXFxcImV4aXN0XFxcIiBcXFwiNjAwXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo0My4yNDc3OTIzNTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzAxMzQ4ODM3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fc2V0X2F0dHJzXCIsXG4gICAgXCJkYW1vbl9zZXRfcmVnaW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBpc3N1ZSBpbiBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBieSB1c2luZyBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgdG8gY2FsY3VsYXRlIGBtYXhfdGhyZXNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiBEQU1PTidzIHJlZ2lvbiBtZXJnaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMzY3M2E4OWRhMDUxNjhlZGQ3NDc2ZjA0ZmExOWMzNWUzN2RkN2JlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDA6NTA6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5pbmRleCBlNjc1YTU3MTQ1ZTM2Li5lOTQ4OGJiNDhkMjNjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5AQCAtMyw3ICszLDcgQEAgRGF0ZTpcdFx0TWFyIDIwMjJcbiBDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4gRGVzY3JpcHRpb246XHRJbnRlcmZhY2UgZm9yIERhdGEgQWNjZXNzIE1PTml0b3JpbmcgKERBTU9OKS4gIENvbnRhaW5zIGZpbGVzXG4gXHRcdGZvciBjb250cm9sbGluZyBEQU1PTi4gIEZvciBtb3JlIGRldGFpbHMgb24gREFNT04gaXRzZWxmLFxuLVx0XHRwbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9pbmRleC5yc3QuXG4rXHRcdHBsZWFzZSByZWZlciB0byBEb2N1bWVudGF0aW9uL21tL2RhbW9uL2luZGV4LnJzdC5cbiBcbiBXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9cbiBEYXRlOlx0XHRNYXIgMjAyMlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vbWFpbnRhaW5lci1wcm9maWxlLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vbWFpbnRhaW5lci1wcm9maWxlLnJzdFxuaW5kZXggZmIyZmEwMGNjOWFhMS4uYTdjMTM1MjMzOTM3OCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vbWFpbnRhaW5lci1wcm9maWxlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0XG5AQCAtMTA2LDE4ICsxMDYsOSBAQCBBSSBSZXZpZXdcbiBcbiBGb3IgcGF0Y2hlcyB0aGF0IGFyZSBwdWJsaWNseSBwb3N0ZWQgdG8gREFNT04gbWFpbGluZyBsaXN0XG4gKGRhbW9uQGxpc3RzLmxpbnV4LmRldiksIEFJIHJldmlld3Mgb2YgdGhlIHBhdGNoZXMgd2lsbCBiZSBhdmFpbGFibGUgYXRcbi1zYXNoaWtvLmRldi4gIFRoZSByZXZpZXdzIGNvdWxkIGFsc28gYmUgc2VudCBhcyBtYWlscyB0byB0aGUgYXV0aG9yIG9mIHRoZVxuLXBhdGNoLlxuLVxuLVBhdGNoIGF1dGhvcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEFJIHJldmlld3MgYW5kIHNoYXJlIHRoZWlyIG9waW5pb25zLlxuLVRoZSBzaGFyaW5nIGNvdWxkIGJlIGRvbmUgYXMgYSByZXBseSB0byB0aGUgbWFpbCB0aHJlYWQuICBDb25zaWRlciByZWR1Y2luZyB0aGVcbi1yZWNpcGllbnRzIGxpc3QgZm9yIHN1Y2ggc2hhcmluZywgc2luY2Ugc29tZSBwZW9wbGUgYXJlIG5vdCByZWFsbHkgaW50ZXJlc3RlZFxuLWluIEFJIHJldmlld3MuICBBcyBhIHJ1bGUgb2YgdGh1bWIsIGRyb3Agc3RhYmxlQHZnZXIua2VybmVsLm9yZyBhbmQgaW5kaXZpZHVhbHNcbi1leGNlcHQgREFNT04gbWFpbnRhaW5lci5cbi1cbi1gaGttbGAgYWxzbyBwcm92aWRlcyBhIGBmZWF0dXJlXG4tXHUwMDNjaHR0cHM6Ly9naXRodWIuY29tL3NqcDM4L2hhY2tlcm1haWwvYmxvYi9tYXN0ZXIvVVNBR0UubWQjZm9yd2FyZGluZy1zYXNoaWtvZGV2LXN0YXR1c2NvbW1lbnRzLXRvLW1haWxpbmctbGlzdFx1MDAzZWBfXG4tZm9yIHN1Y2ggc2hhcmluZy4gIFBsZWFzZSBmZWVsIGZyZWUgdG8gdXNlIHRoZSBmZWF0dXJlLlxuK3Nhc2hpa28uZGV2LiAgVGhlIHJldmlld3Mgd2lsbCBhbHNvIGJlIHNlbnQgYXMgcmVwbGllcyB0byB0aGUgYXV0aG9yIG9mIHRoZVxuK3BhdGNoIGFuZCB0aGUgbWFpbGluZyBsaXN0LlxuIFxuLUl0IGlzIG9ubHkgYW4gb3B0aW9uYWwgcmVjb21tZW5kYXRpb24uICBEQU1PTiBtYWludGFpbmVyIGNvdWxkIGFsc28gYXNrIGFueVxuLXF1ZXN0aW9uIGFib3V0IHRoZSBBSSByZXZpZXdzLCB0aG91Z2guXG4rUGF0Y2ggYXV0aG9ycyBhcmUgZW5jb3VyYWdlZCB0byBjaGVjayB0aGUgQUkgcmV2aWV3cyBhbmQgc2hhcmUgdGhlaXIgb3BpbmlvbnNcbitieSByZXBseWluZyBvbiB0aGUgbWFpbCB0aHJlYWQuICBJdCBpcyBvbmx5IGFuIG9wdGlvbmFsIHJlY29tbWVuZGF0aW9uLiAgREFNT05cbittYWludGFpbmVyIGNvdWxkIGFsc28gYXNrIGFueSBxdWVzdGlvbiBhYm91dCB0aGUgQUkgcmV2aWV3cywgdGhvdWdoLlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uNmMwZmIxNzVlM2QyMSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzM3Myw4ICszMzczLDcgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXG4gXHR1bnNpZ25lZCBpbnQgbWF4X3RocmVzO1xuIFx0Ym9vbCBjb3VudF9hZ2UgPSB0cnVlO1xuIFxuLVx0bWF4X3RocmVzID0gYy1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsIC9cbi1cdFx0KGMtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gIGMtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsIDogMSk7XG4rXHRtYXhfdGhyZXMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmMtXHUwMDNlYXR0cnMpO1xuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0bnJfcmVnaW9ucyA9IDA7XG4gXHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG5AQCAtMzU5NywxMCArMzU5Niw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3dtYXJrX3dhaXRfdXMoc3RydWN0IGRhbW9zICpzY2hlbWUpXG4gXG4gXHQvKiBoaWdoZXIgdGhhbiBoaWdoIHdhdGVybWFyayBvciBsb3dlciB0aGFuIGxvdyB3YXRlcm1hcmsgKi9cbiBcdGlmIChtZXRyaWMgXHUwMDNlIHNjaGVtZS1cdTAwM2V3bWFya3MuaGlnaCB8fCBzY2hlbWUtXHUwMDNld21hcmtzLmxvdyBcdTAwM2UgbWV0cmljKSB7XG4tXHRcdGlmIChzY2hlbWUtXHUwMDNld21hcmtzLmFjdGl2YXRlZClcbi1cdFx0XHRwcl9kZWJ1ZyhcImRlYWN0aXZhdGUgYSBzY2hlbWUgKCVkKSBmb3IgJXMgd21hcmtcXG5cIixcbi1cdFx0XHRcdCBzY2hlbWUtXHUwMDNlYWN0aW9uLFxuLVx0XHRcdFx0IHN0cl9oaWdoX2xvdyhtZXRyaWMgXHUwMDNlIHNjaGVtZS1cdTAwM2V3bWFya3MuaGlnaCkpO1xuIFx0XHRzY2hlbWUtXHUwMDNld21hcmtzLmFjdGl2YXRlZCA9IGZhbHNlO1xuIFx0XHRyZXR1cm4gc2NoZW1lLVx1MDAzZXdtYXJrcy5pbnRlcnZhbDtcbiBcdH1cbkBAIC0zNjEwLDggKzM2MDUsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc193bWFya193YWl0X3VzKHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxuIFx0XHRcdCFzY2hlbWUtXHUwMDNld21hcmtzLmFjdGl2YXRlZClcbiBcdFx0cmV0dXJuIHNjaGVtZS1cdTAwM2V3bWFya3MuaW50ZXJ2YWw7XG4gXG4tXHRpZiAoIXNjaGVtZS1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuLVx0XHRwcl9kZWJ1ZyhcImFjdGl2YXRlIGEgc2NoZW1lICglZClcXG5cIiwgc2NoZW1lLVx1MDAzZWFjdGlvbik7XG4gXHRzY2hlbWUtXHUwMDNld21hcmtzLmFjdGl2YXRlZCA9IHRydWU7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzc1NCw4ICszNzQ3LDYgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBkYXRhO1xuIFx0dW5zaWduZWQgbG9uZyBzel9saW1pdCA9IDA7XG4gXG4tXHRwcl9kZWJ1ZyhcImtkYW1vbmQgKCVkKSBzdGFydHNcXG5cIiwgY3VycmVudC1cdTAwM2VwaWQpO1xuLVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcbiBcdGN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlID0gZmFsc2U7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XG5AQCAtMzkwMyw3ICszODk0LDYgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbiBcdGRhbW9zX3dhbGtfY2FuY2VsKGN0eCk7XG4gXG4tXHRwcl9kZWJ1ZyhcImtkYW1vbmQgKCVkKSBmaW5pc2hlc1xcblwiLCBjdXJyZW50LVx1MDAzZXBpZCk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX2xvY2spO1xuIFx0Y3R4LVx1MDAzZWtkYW1vbmQgPSBOVUxMO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX2xvY2spO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggNGE1MzZkNDFjZGIyZC4uNTExZjI4NTZkMzQzYyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtNDYzLDExICs0NjMsMTIgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuIFx0XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqb2xkX3JhbmdlcywgaW50IHN6X29sZF9yYW5nZXMsXG4gXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpuZXdfcmFuZ2VzLCBpbnQgc3pfbmV3X3JhbmdlcyxcbiBcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6LFxuLVx0XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqZXhwZWN0X3JhbmdlcywgaW50IHN6X2V4cGVjdF9yYW5nZXMpXG4rXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpleHBlY3RfcmFuZ2VzLCBpbnQgc3pfZXhwZWN0X3JhbmdlcyxcbitcdFx0aW50IGV4cGVjdF9lcnIpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiBcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4tXHRpbnQgaTtcbitcdGludCBpLCBlcnI7XG4gXG4gXHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xuIFx0aWYgKCF0KVxuQEAgLTQ4MSw3ICs0ODIsOCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4gXHR9XG4gXG4tXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCBuZXdfcmFuZ2VzLCBzel9uZXdfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTtcbitcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKHQsIG5ld19yYW5nZXMsIHN6X25ld19yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGVyciwgZXhwZWN0X2Vycik7XG4gXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgc3pfZXhwZWN0X3Jhbmdlcyk7XG4gXHRpZiAoZGFtb25fbnJfcmVnaW9ucyh0KSAhPSBzel9leHBlY3RfcmFuZ2VzKSB7XG5AQCAtNTEwLDcgKzUxMiw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbiBcdFx0XHR7LnN0YXJ0ID0gNSwgLmVuZCA9IDE1fSxcbiBcdFx0XHR7LnN0YXJ0ID0gMTUsIC5lbmQgPSAyNX0sXG4tXHRcdFx0fSwgMik7XG4rXHRcdFx0fSwgMiwgMCk7XG4gXHQvKiBVbi1pbnRlcnNlY3RpbmcgcmVnaW9ucyBzaG91bGQgYmUgcmVtb3ZlZC4gKi9cbiBcdGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHRlc3QsXG4gXHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe1xuQEAgLTUyMyw3ICs1MjUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0XHQxLFxuIFx0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbiBcdFx0XHR7LnN0YXJ0ID0gMTgsIC5lbmQgPSAyM30sXG4tXHRcdFx0fSwgMSk7XG4rXHRcdFx0fSwgMSwgMCk7XG4gXHQvKlxuIFx0ICogSG9sZXMgc2hvdWxkIGJlIGZpbGxlZCB1cCB3aXRoIG5ldyByZWdpb25zLlxuIFx0ICpcbkBAIC01NDQsNyArNTQ2LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdFx0ey5zdGFydCA9IDgsIC5lbmQgPSAxNn0sXG4gXHRcdFx0ey5zdGFydCA9IDE2LCAuZW5kID0gMjR9LFxuIFx0XHRcdHsuc3RhcnQgPSAyNCwgLmVuZCA9IDI4fSxcbi1cdFx0XHR9LCAzKTtcbitcdFx0XHR9LCAzLCAwKTtcbiBcdC8qXG4gXHQgKiBOZXcgcmVnaW9ucyBzaG91bGQgYmUgYWJsZSB0byBiZSBhcHBlbmRlZC5cbiBcdCAqXG5AQCAtNTY2LDcgKzU2OCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdHsuc3RhcnQgPSAwLCAuZW5kID0gNH0sXG4gXHRcdFx0ey5zdGFydCA9IDQsIC5lbmQgPSAxNX0sXG4gXHRcdFx0ey5zdGFydCA9IDI1LCAuZW5kID0gNDB9LFxuLVx0XHRcdH0sIDMpO1xuK1x0XHRcdH0sIDMsIDApO1xuIFx0LypcbiBcdCAqIE5ldyByZWdpb25zIHNob3VsZCBiZSBhYmxlIHRvIGJlIGluc2VydGVkLlxuIFx0ICpcbkBAIC01ODksNyArNTkxLDQ4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdHsuc3RhcnQgPSAwLCAuZW5kID0gMTV9LFxuIFx0XHRcdHsuc3RhcnQgPSAyNSwgLmVuZCA9IDQwfSxcbiBcdFx0XHR7LnN0YXJ0ID0gNDQsIC5lbmQgPSA1MH0sXG4tXHRcdFx0fSwgMyk7XG4rXHRcdFx0fSwgMywgMCk7XG4rXHQvKiBaZXJvIHNpemUgcmVnaW9ucyBzaG91bGQgcmV0dXJuIC1FSU5WQUwuICovXG4rXHRkYW1vbl90ZXN0X3NldF9yZWdpb25zX2Zvcih0ZXN0LFxuK1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLFxuK1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbitcdFx0XHR7LnN0YXJ0ID0gNDIsIC5lbmQgPSA0Mn0sXG4rXHRcdFx0fSwgMSwgMSxcbitcdFx0XHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCwgLUVJTlZBTCk7XG4rXHQvKiBOZWdhdGl2ZSBzaXplIHJlZ2lvbnMgc2hvdWxkIHJldHVybiAtRUlOVkFMLiAqL1xuK1x0ZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3IodGVzdCxcbitcdFx0XHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCxcbitcdFx0XHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7XG4rXHRcdFx0ey5zdGFydCA9IDQyLCAuZW5kID0gMjF9LFxuK1x0XHRcdH0sIDEsIDEsXG4rXHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpO1xuK1x0LypcbitcdCAqIFJlZ2lvbnMgcmVzdWx0aW5nIGluIHNhbWUgcmVnaW9uIGFmdGVyIGFsaW5nbWVudCBzaG91bGQgcmV0dXJuXG4rXHQgKiAtRUlOVkFMLlxuK1x0ICovXG4rXHRkYW1vbl90ZXN0X3NldF9yZWdpb25zX2Zvcih0ZXN0LFxuK1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLFxuK1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbitcdFx0XHR7LnN0YXJ0ID0gMTAsIC5lbmQgPSAyMH0sXG4rXHRcdFx0ey5zdGFydCA9IDIwLCAuZW5kID0gMzB9LFxuK1x0XHRcdH0sIDIsIDQwOTYsXG4rXHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHtcbitcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDAsXG4rXHRcdC5hZ2dyX2ludGVydmFsID0gMCxcbitcdH07XG4rXG4rXHQvKiBaZXJvIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJ3QgY2F1c2UgZGl2aXNpb24gYnkgemVybyAqL1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCAxKTtcbitcbitcdC8qIFRvbyBsYXJnZSBhZ2dyZWdhdGlvbiBpbnRlcnZhbCBkb2Vzbid0IGNhdXNlIG92ZXJmbG93ICovXG4rXHRhdHRycy5hZ2dyX2ludGVydmFsID0gKHVuc2lnbmVkIGxvbmcpVUlOVF9NQVggKyAxO1xuK1x0S1VOSVRfRVhQRUNUX0dFKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCAwKTtcbitcdEtVTklUX0VYUEVDVF9MRSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSwgVUlOVF9NQVgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5AQCAtMTY0Myw2ICsxNjg2LDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9yZWdpb25zKSxcbitcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9hdHRycyksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbXZzdW0pLFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCA0OTc2Nzc1ZmUyNzYyLi41Y2NmNzBkYzhhMzBiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuKysrIGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTE5MiwxOSArMTkyLDEwIEBAIHN0YXRpYyBpbnQgZGFtb25fdmFfdGhyZWVfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIHN0YXRpYyB2b2lkIF9fZGFtb25fdmFfaW5pdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbiB7XG4tXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0aTtcbiBcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIHJlZ2lvbnNbM107XG4tXHRpbnQgdGlkeCA9IDA7XG4gXG4tXHRpZiAoZGFtb25fdmFfdGhyZWVfcmVnaW9ucyh0LCByZWdpb25zKSkge1xuLVx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodGksIGN0eCkge1xuLVx0XHRcdGlmICh0aSA9PSB0KVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0dGlkeCsrO1xuLVx0XHR9XG4tXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIGdldCB0aHJlZSByZWdpb25zIG9mICVkdGggdGFyZ2V0XFxuXCIsIHRpZHgpO1xuK1x0aWYgKGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnModCwgcmVnaW9ucykpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGRhbW9uX3NldF9yZWdpb25zKHQsIHJlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXG5pbmRleCBmN2ZiOTRiODRlNzE2Li44NjkwYWVmMWU0MzZjIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXG5AQCAtMjEwLDYgKzIxMCw3IEBAIHRlc3RfZ29hbCgpXG4gXHRlbnN1cmVfd3JpdGVfc3VjYyBcIiRmcGF0aFwiIFwiYWN0aXZlX21lbV9icFwiIFwidmFsaWQgaW5wdXRcIlxuIFx0ZW5zdXJlX3dyaXRlX3N1Y2MgXCIkZnBhdGhcIiBcImluYWN0aXZlX21lbV9icFwiIFwidmFsaWQgaW5wdXRcIlxuIFx0ZW5zdXJlX3dyaXRlX3N1Y2MgXCIkZnBhdGhcIiBcIm5vZGVfZWxpZ2libGVfbWVtX2JwXCIgXCJ2YWxpZCBpbnB1dFwiXG4rXHRlbnN1cmVfd3JpdGVfc3VjYyBcIiRmcGF0aFwiIFwiaHVnZXBhZ2VfbWVtX2JwXCIgXCJ2YWxpZCBpbnB1dFwiXG4gXHRlbnN1cmVfd3JpdGVfZmFpbCBcIiRmcGF0aFwiIFwiZm9vXCIgXCJpbnZhbGlkIGlucHV0XCJcbiBcdGVuc3VyZV9maWxlIFwiJGdvYWxfZGlyL25pZFwiIFwiZXhpc3RcIiBcIjYwMFwiXG4gXHRlbnN1cmVfZmlsZSBcIiRnb2FsX2Rpci9wYXRoXCIgXCJleGlzdFwiIFwiNjAwXCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjQzLjI0Nzc5NDUzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0ODA5Nzk4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIERBTU9OIHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsLiBGaXJzdCBnbGFuY2UsIHRoZXJlJ3MgZG9jdW1lbnRhdGlvbiB1cGRhdGVzOiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25gIGFuZCBgRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0YC4gR29vZCB0byBzZWUgdGhlIGRvY3VtZW50YXRpb24gaXMgYmVpbmcga2VwdCBjdXJyZW50LlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBJIHNlZSBhIGZldyBjaGFuZ2VzLiBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBub3cgdXNlcyBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjLVx1MDAzZWF0dHJzKWAgaW5zdGVhZCBvZiBhIGRpdmlzaW9uLiBBbHNvLCBzb21lIGBwcl9kZWJ1Z2Agc3RhdGVtZW50cyBhcmUgYmVpbmcgcmVtb3ZlZCBmcm9tIGBkYW1vc193bWFya193YWl0X3VzYCBhbmQgYGtkYW1vbmRfZm5gLiBPa2F5LCBub3RoaW5nIHRvbyByYWRpY2FsIHRoZXJlLCBsaWtlbHkganVzdCBjbGVhbmluZyB0aGluZ3MgdXAuXG5cbkluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLCBJIHNlZSBgZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3JgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gY2hlY2sgZm9yIGBleHBlY3RfZXJyYCwgd2hpY2ggaXMgdXNlZnVsIGZvciB0ZXN0aW5nLiBBIG5ldyB0ZXN0LCBgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyYCwgaGFzIGJlZW4gYWRkZWQuIFRoYXQncyBhIGZvY3VzZWQgdGVzdCwgd2hpY2ggaXMgd2hhdCBJJ2QgZXhwZWN0LiBJbiBgbW0vZGFtb24vdmFkZHIuY2AsIEkgc2VlIHNpbWlsYXIgY2xlYW4gdXAgb2YgZGVidWdnaW5nIHN0YXRlbWVudHMuIEFsc28sIGl0IGFwcGVhcnMgdGhlIHRhcmdldCBpdGVyYXRpb24gaW4gYF9fZGFtb25fdmFfaW5pdF9yZWdpb25zYCBoYXMgYmVlbiByZW1vdmVkLlxuXG5GaW5hbGx5LCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hgLCB0aGV5J3ZlIGFkZGVkIGEgdGVzdCBsaW5lIGZvciBgaHVnZXBhZ2VfbWVtX2JwYC4gR29vZC5cblxuSG9sZCBvbiwgdGhvdWdoLCB0aGUgKmNvcmUqIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBtbS9kYW1vbi9jb3JlLmNgIGlzOlxuXG5gYGBjXG4tXHRtYXhfdGhyZXMgPSBjLVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgL1xuLVx0XHQoYy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyAgYy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTtcbitcdG1heF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2Yy1cdTAwM2VhdHRycyk7XG5gYGBcblxuVGhhdCdzIHRoZSBpbXBvcnRhbnQgYml0LiBJdCBsb29rcyBsaWtlIHRoZXkndmUgcmVwbGFjZWQgYSBkaXZpc2lvbiB3aXRoIGEgZnVuY3Rpb24gY2FsbCB0byBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAuIExldCdzIHNlZSB3aGF0IGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBpcyBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyByZXBsYWNlbWVudC4gSSdsbCBncmVwIGZvciBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQncyBhY3R1YWxseSBjYWxjdWxhdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjQ5LjcyODc3ODMzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTA2NjkyNDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNzM9c3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDc4LS8qIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzk6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA4MC1cXHRcXHRjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTkyMD1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3NhbXBsZV9icF90b19jb3VudChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05MjIte1xcbm1tL2RhbW9uL2NvcmUuYzo5MjM6XFx0cmV0dXJuIGJwICogZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihhdHRycykgLyAxMDAwMDtcXG5tbS9kYW1vbi9jb3JlLmMtOTI0LX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz05Mjc9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9zYW1wbGVfY291bnRfdG9fYnAoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTI5LXtcXG5tbS9kYW1vbi9jb3JlLmM6OTMwOlxcdHJldHVybiBtdWx0X2ZyYWMoY291bnQsIDEwMDAwLCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKGF0dHJzKSk7XFxubW0vZGFtb24vY29yZS5jLTkzMS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTM0Mj1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNTYtXFx0LyogaW52YWxpZCBpZiBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBjYW4gb3ZlcmZsb3cgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTM1NzpcXHRtYXhfcHJvYmVfaGl0cyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmN0eC1cXHUwMDNlYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMzU4LVxcdHdzdW0gPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzNjg9c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM3NS1cXG5tbS9kYW1vbi9jb3JlLmM6MzM3NjpcXHRtYXhfdGhyZXMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZjLVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTMzNzctXFx0d2hpbGUgKHRydWUpIHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMDUtXFx0ZXJyID0gLUVOT01FTTtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjMwNjpcXHRob3RfdGhyZXMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZhdHRycykgKlxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzA3LVxcdFxcdGhvdF90aHJlc19hY2Nlc3NfZnJlcSAvIDEwMDA7XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTA0PWludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMTUtXFx0XFx0XFx0REFNT05fTUFYX1NVQlNDT1JFLFxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMTY6XFx0XFx0XFx0ZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2Yy1cXHUwMDNlYXR0cnMpKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTE3LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTYyMj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYyOS1cXHQvKiBaZXJvIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJ3QgY2F1c2UgZGl2aXNpb24gYnkgemVybyAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MzA6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmF0dHJzKSwgMSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYzMS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MzMtXFx0YXR0cnMuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICsgMTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NjM0OlxcdEtVTklUX0VYUEVDVF9HRSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZhdHRycyksIDApO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MzU6XFx0S1VOSVRfRVhQRUNUX0xFKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmF0dHJzKSwgVUlOVF9NQVgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MzYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo1Mi44MzU0Nzk1MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzM1OTE0MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCB3b3Jrcy4gSXQncyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRoZSBMaW51eCBrZXJuZWwncyBEYW1vbiBoZWFkZXIgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgYXJvdW5kIGxpbmUgMTA3OS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gd2hhdCB0aGlzIHBhcmFtZXRlciBpcyBpbnRlbmRlZCBmb3Igd2l0aGluIERBTU9OLCBhbmQgaXRzIHJvbGUgaW4gdGhlIG1vbml0b3JpbmcgYW5kIGFnZ3JlZ2F0aW9uIHByb2Nlc3MuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo1NS41NzEzOTg2MDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzA6XFx0aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKTtcXG4xMDcxOlxcdGludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xcbjEwNzI6XFx0XFxuMTA3MzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbjEwNzQ6XFx0e1xcbjEwNzU6XFx0XFx0cmV0dXJuIGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19WQUREUiB8fCBjdHgtXFx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xcbjEwNzY6XFx0fVxcbjEwNzc6XFx0XFxuMTA3ODpcXHQvKiBSZXR1cm5zIG51bWJlciBvZiBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xcbjEwNzk6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXG4xMDgwOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuMTA4MTpcXHR7XFxuMTA4MjpcXHRcXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcXG4xMDgzOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfc2FtcGxlcztcXG4xMDg0OlxcdFxcbjEwODU6XFx0XFx0c2FtcGxlX2ludGVydmFsID0gYXR0cnMtXFx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcXG4xMDg2OlxcdFxcdG5yX3NhbXBsZXMgPSBtaW4oYXR0cnMtXFx1MDAzZWFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWwsXFxuMTA4NzpcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZylVSU5UX01BWCk7XFxuMTA4ODpcXHRcXHRyZXR1cm4gbnJfc2FtcGxlcyA/IDogMTtcXG4xMDg5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6NTUuNTcxNTEzNTA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ1Mzk2MDY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBQb3RlbnRpYWwgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5IGFuZCBjbGVhbmluZyB1cCBzb21lIGRlYnVnIHN0YXRlbWVudHMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIHRoYXQgYGMtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCAvIChjLVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/IGMtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsIDogMSlgIGNhbGN1bGF0aW9uIHdpdGggYSBjYWxsIHRvIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmMtXHUwMDNlYXR0cnMpYC4gSXQgbG9va3MgbGlrZSB0aGUgbmV3IGZ1bmN0aW9uIGRvZXMgYSBzYWZlciBkaXZpc2lvbiwgY2xhbXBpbmcgdGhlIHJlc3VsdCB0byBgVUlOVF9NQVhgIGFuZCBlbnN1cmluZyBhIG1pbmltdW0gdmFsdWUgb2YgMS4gR29vZCwgdGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCwgYXMgaXQgcHJldmVudHMgYG1heF90aHJlc2AgZnJvbSBiZWluZyBpbmFwcHJvcHJpYXRlbHkgdHJ1bmNhdGVkIHdoZW4gdGhlIGFnZ3JlZ2F0aW9uIGludGVydmFsIGlzIHZlcnkgbGFyZ2UsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpbiBEQU1PTi5cblxuSSdtIHNlZWluZyB0aGF0IHRoZSBwYXRjaCAqZG9lc24ndCogYWN0dWFsbHkgaW50cm9kdWNlIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBkaXJlY3RseTsgaXQncyB1c2luZyBhbiBleGlzdGluZyBmdW5jdGlvbiB3aXRoaW4gYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AuIEFsc28sIHRoZXJlJ3Mgc29tZSBjbGVhbnVwIOKAkyByZW1vdmFsIG9mIGBwcl9kZWJ1Z2AgY2FsbHMsIHdoaWNoIGlzIGdlbmVyYWxseSBwb3NpdGl2ZSBmb3IgcGVyZm9ybWFuY2UsIGFsdGhvdWdoIGl0IG1pZ2h0IG1ha2UgZGVidWdnaW5nIGhhcmRlciBpbiB0aGUgc2hvcnQgdGVybS5cblxuT2theSwgbGV0J3MgZ28gYSBiaXQgZGVlcGVyLiAgVGhlcmUncyBhIHRlc3QgY2FzZSwgYGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdncmAsIHdoaWNoIGlzIGVuY291cmFnaW5nIOKAkyBpdCBzdWdnZXN0cyB0aGUgZGV2ZWxvcGVycyBhcmUgYmVpbmcgcHJvYWN0aXZlIGFib3V0IHRlc3RpbmcgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gVGhlIGNoYW5nZXMgdG8gYGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yYCBhbHNvIGxvb2sgaW50ZXJlc3RpbmcsIGVzcGVjaWFsbHkgdGhlIGFkZGl0aW9uIG9mIGBleHBlY3RfZXJyYC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBvdGhlciBhcmVhcyBvZiBjaGFuZ2UgaW4gdGhpcyBwYXRjaDsgbG9va3MgbGlrZSBpdCByZW1vdmVkIHNvbWUgYHByX2RlYnVnYCBmcm9tIGBtbS9kYW1vbi92YWRkci5jYCwgd2hpY2ggaXMgYWxzbyBmaW5lLiBBbmQgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiB0byBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hgIGludm9sdmluZyBgaHVnZXBhZ2VfbWVtX2JwYC5cblxuTm93LCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gVGhlIHJlcGxhY2VtZW50OlxuXG5gYGBjXG4tXHRtYXhfdGhyZXMgPSBjLVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgL1xuLVx0XHQoYy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyAgYy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTtcbitcdG1heF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2Yy1cdTAwM2VhdHRycyk7XG5gYGBcblxuLi4uIGlzIGNsZWFybHkgaW50ZW5kZWQgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93LiAgVGhpcyBtZWFucyB0aGF0IGlmIEkgY2FuIGNyYWZ0IGBhZ2dyX2ludGVydmFsYCBhbmQgYHNhbXBsZV9pbnRlcnZhbGAgdmFsdWVzIHRoYXQgY2F1c2UgdGhlIG9sZCBkaXZpc2lvbiB0byBvdmVyZmxvdywgdGhlIG5ldyBjb2RlIHNob3VsZCBoYW5kbGUgaXQgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIEknZCB3YW50IHRvIHRlc3QgdGhlIGVkZ2UgY2FzZSBvZiB3aGVyZSBgYWdncl9pbnRlcnZhbGAgaXMgbGFyZ2UgZW5vdWdoIHRvIG92ZXJmbG93IHRoZSBkaXZpc2lvbiwgYnV0IHRoZSBuZXcgYG1pbiguLi4sIFVJTlRfTUFYKWAgaW4gYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIGtlZXBzIHRoaW5ncyBzYW5lLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBjb3JuZXIgY2FzZXMgYXJvdW5kIHRoZSBgPyA6IDFgIGluIHRoZSBzYW1wbGVfaW50ZXJ2YWwgY2hlY2ssIGFzIHdlbGwgYXMgemVybyBhbmQgbmVnYXRpdmUgdmFsdWVzIGZvciB0aGlzIGFuZCB0aGUgYWdncl9pbnRlcnZhbC5cblxuQnV0LCBpcyB0aGlzIHRoZSBvbmx5IGZ1bmN0aW9uYWwgY2hhbmdlPyBOby4gVGhlIHBhdGNoICphbHNvKiBjaGFuZ2VzIGBkYW1vbl9zZXRfcmVnaW9uc2AuIFRoZSBuZXcgdGVzdHMgZm9yIGBkYW1vbl9zZXRfcmVnaW9uc2AgcmV0dXJuaW5nIGAtRUlOVkFMYCBmb3IgemVybyBzaXplLCBuZWdhdGl2ZSBzaXplLCBhbmQgcmVnaW9ucyByZXN1bHRpbmcgaW4gdGhlIHNhbWUgcmVnaW9uIGFmdGVyIGFsaWdubWVudC4gVGhpcyBzdWdnZXN0cyBhIG1vcmUgcm9idXN0IHZhbGlkYXRpb24gb2YgcmVnaW9uIGRlZmluaXRpb25zLiBJJ2xsIG5lZWQgdG8gbG9vayB2ZXJ5IGNsb3NlbHkgYXQgdGhlIGNvZGUgaW4gYGRhbW9uX3NldF9yZWdpb25zYCB0byBzZWUgKmhvdyogdGhlc2UgaW52YWxpZCBjYXNlcyBhcmUgYmVpbmcgaGFuZGxlZCBub3cuIEkgc3VzcGVjdCBteSBmdXp6aW5nIHdpbGwgbmVlZCB0byBjb3ZlciB0aGVzZSB0ZXN0cywgdG9vLCBjaGVja2luZyBmb3IgdGhlIGNvcnJlY3QgZXJyb3IgY29kZSByZXR1cm5zLlxuXG5BbHJpZ2h0LiBUaW1lIHRvIHB1dCB0aGlzIGludG8gcHJhY3RpY2UgYW5kIHB1dCBpdCB0aHJvdWdoIGEgZnV6emVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzQ2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTE6MDQuMDI1NDc4NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDcxOTc5MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3NldF9yZWdpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0zOD1zdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNTAtICpcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NTE6ICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLiAgZGFtb25fc2V0X3JlZ2lvbnMoKVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC01Mi0gKiBkb2VzIHRoZSB2YWxpZGF0aW9uLlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwMjY9dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAyOC1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTAyOTppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAzMC1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NjYtLypcXG5tbS9kYW1vbi9jb3JlLmM6NDY3OiAqIGRhbW9uX3NldF9yZWdpb25zKCkgLSBTZXQgcmVnaW9ucyBvZiBhIHRhcmdldCBmb3IgZ2l2ZW4gYWRkcmVzcyByYW5nZXMuXFxubW0vZGFtb24vY29yZS5jLTQ2OC0gKiBAdDpcXHRcXHR0aGUgZ2l2ZW4gdGFyZ2V0Llxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ3Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDc4OmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbm1tL2RhbW9uL2NvcmUuYy00NzktXFx0XFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE1MjY9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1NTUtXFx0cmFuZ2VzW2krK10uZW5kID0gZGFtb25fbGFzdF9yZWdpb24oc3JjKS1cXHUwMDNlYXIuZW5kO1xcbm1tL2RhbW9uL2NvcmUuYzoxNTU2OlxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKGRzdCwgcmFuZ2VzLCBpLCBzcmNfbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vY29yZS5jLTE1NTctXFx0a3ZmcmVlKHJhbmdlcyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzk3Mj1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk4My1cXHRhZGRyX3JhbmdlLmVuZCA9ICplbmQ7XFxubW0vZGFtb24vY29yZS5jOjM5ODQ6XFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFxcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzk4NS19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwMDA9c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDIxLVxcdH1cXG5tbS9kYW1vbi9zeXNmcy5jOjIwMjI6XFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBzeXNmc19yZWdpb25zLVxcdTAwM2VuciwgbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vc3lzZnMuYy0yMDIzLW91dDpcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD00NjI9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQ4NC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NDg1OlxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKHQsIG5ld19yYW5nZXMsIHN6X25ld19yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00ODYtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGVyciwgZXhwZWN0X2Vycik7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTkwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTAzLS8qXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxMDQ6ICogVGVzdCAnZGFtb25fc2V0X3JlZ2lvbnMoKSdcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwNS0gKlxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xMTgtICogcmVnaW9ucy4gIFRoZSB1cGRhdGUgb2YgY3VycmVudCB0YXJnZXQgcmVnaW9ucyBpcyB0aGUgcm9sZSBvZlxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTE5OiAqICdkYW1vbl9zZXRfcmVnaW9ucygpJy5cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEyMC0gKlxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD0xMjU9c3RhdGljIHZvaWQgZGFtb25fZG9fdGVzdF9hcHBseV90aHJlZV9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTQ3LVxcdH1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE0ODpcXHRpZiAoZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBucl9yZWdpb25zIC8gMixcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE0OS1cXHRcXHRcXHRcXHREQU1PTl9NSU5fUkVHSU9OX1NaKSkge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTEtXFx0XFx0ZGFtb25fZGVzdHJveV90YXJnZXQodCwgTlVMTCk7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTI6XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiZGFtb25fc2V0X3JlZ2lvbnMoKSBmYWlsXFxcIik7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTMtXFx0fVxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTUtXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTY6XFx0aWYgKGRhbW9uX3NldF9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opKSB7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTctXFx0XFx0ZGFtb25fZGVzdHJveV90YXJnZXQodCwgTlVMTCk7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTg6XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwic2Vjb25kIGRhbW9uX3NldF9yZWdpb25zKCkgZmFpbFxcXCIpO1xcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTU5LVxcdH1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MTkyPXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfaW5pdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMTk5LVxcbm1tL2RhbW9uL3ZhZGRyLmM6MjAwOlxcdGRhbW9uX3NldF9yZWdpb25zKHQsIHJlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMjAxLX1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjE4PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3VwZGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTIyNS1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi92YWRkci5jOjIyNjpcXHRcXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCB0aHJlZV9yZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG5tbS9kYW1vbi92YWRkci5jLTIyNy1cXHR9XFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmM9NzM9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEyOC1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTI5OlxcdHJldCA9IGRhbW9uX3NldF9yZWdpb25zKHRhcmdldCwgXFx1MDAyNnJhbmdlLCAxLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTMwLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUxOjA3LjA5NzQ2OTc4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NzYxODczNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBEQU1PTiBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIHNlZW1zIHJlbGF0aXZlbHkgbWlub3IuIEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgc2lnbmlmaWNhbnQgbmV3IGZ1bmN0aW9uYWxpdHksIGp1c3QgdHdlYWtzIGFyb3VuZCBleGlzdGluZyBjb2RlLiBUaGUgcHJpbWFyeSBhcmVhIG9mIGNvbmNlcm4sIHRoZSBgZGFtb25fc2V0X3JlZ2lvbnNgIGZ1bmN0aW9uLCBpc24ndCBhY3R1YWxseSBtb2RpZmllZCBkaXJlY3RseS4gVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgcmVsYXRlZCB0ZXN0cyBhbmQgS1VuaXQgY29uZmlndXJhdGlvbnMgZm9yIGl0LiBUaGVzZSB0ZXN0cyBhcmUgdmVyaWZ5aW5nIGV4aXN0aW5nIGVycm9yIGNvbmRpdGlvbnMsIHNvIHRoYXQncyBub3QgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBhZGRpdGlvbiBvZiB0ZXN0cyBmb3IgaW52YWxpZCBpbnB1dHMsIHN1Y2ggYXMgemVybyBvciBuZWdhdGl2ZS1zaXplZCByZWdpb25zLCBvbmx5IHRlc3RzIGV4aXN0aW5nIGVycm9yIGhhbmRsaW5nLiBUaGUgc2VsZnRlc3QgY2hhbmdlLCBgaHVnZXBhZ2VfbWVtX2JwYCwgaXMgYWxzbyBub3QgcmVsYXRlZCB0byBhIG5ldyBhZGRpdGlvbiwgaXQgaXMgb25seSB1cGRhdGluZyBhIHRlc3QgZm9yIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkuXG5cblRoZW4gdGhlcmUgaXMgdGhlIGNvcmUgY29kZSBjaGFuZ2U6XG5gYGBjXG4tXHRtYXhfdGhyZXMgPSBjLVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgL1xuLVx0XHQoYy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyAgYy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTtcbitcdG1heF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2Yy1cdTAwM2VhdHRycyk7XG5gYGBcblxuVGhpcyBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gVGhlIG9yaWdpbmFsIGNhbGN1bGF0aW9uIG9mIGBtYXhfdGhyZXNgIGlzIHBvdGVudGlhbGx5IHN1c2NlcHRpYmxlIHRvIGludGVnZXIgdHJ1bmNhdGlvbi4gVGhlIHVwZGF0ZWQgY2FsY3VsYXRpb24gdXNlcyBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAsIHdoaWNoIGNhcHMgdGhlIHJlc3VsdCB0byBgVUlOVF9NQVhgLCBmaXhpbmcgYSBwb3NzaWJsZSBvdmVyZmxvdyBpc3N1ZS5cblxuVGhlIGNoYW5nZSBleGlzdHMgaW4gYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBga2RhbW9uZF9mbmAsIHNvIGl0J3MgYSBjb3JlIERBTU9OIGZ1bmN0aW9uLiBUaGlzIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgbW9yZSBkZWVwbHkuXG5cbkxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBvdGhlciBjaGFuZ2VzLiBUaGVyZSdzIHJlbW92YWwgb2YgYHByX2RlYnVnYCBzdGF0ZW1lbnRzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIEtVbml0IHRlc3QgdXBkYXRlcywgYW5kIHNlbGZ0ZXN0IHVwZGF0ZXMuIFRoZXNlIGFyZSwgaW4gZXNzZW5jZSwganVzdCBub2lzZSBjb21wYXJlZCB0byB0aGUgY29yZSBsb2dpYyBjaGFuZ2UuXG5cbkNvbnNpZGVyaW5nIHRoZSBmdW5jdGlvbmFsIGNoYW5nZTpcbmBgYGNcbi1cdG1heF90aHJlcyA9IGMtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCAvXG4tXHRcdChjLVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/ICBjLVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA6IDEpO1xuK1x0bWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjLVx1MDAzZWF0dHJzKTtcbmBgYFxuSXQncyBhIG9uZS1saW5lIGZpeCBmb3IgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uLCBhIHJlbGF0aXZlbHkgc21hbGwgY2hhbmdlLiBIb3dldmVyLCBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBpcyBhIGNvcmUgZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgaGFzIGl0cyBiZWhhdmlvdXIgY2hhbmdlZCBieSB0aGlzIHBhdGNoLlxuXG5JIG11c3QgY29uc2lkZXIgdGhlIGNyaXRlcmlhIGZvciBleGNsdWRpbmcgcGF0Y2hlcyBmcm9tIGZ1enppbmcuIEFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGxvZ2dpbmcsIGNvbnN0YW50IGFkanVzdG1lbnRzIHRoYXQgZG9uJ3QgYWZmZWN0IGZsb3csIHVucmVhY2hhYmxlIGNvZGUsIGFuZCBzcGVjaWZpYyBkcml2ZXIgb3IgaGFyZHdhcmUgY29udGV4dHMgYXJlIGV4Y2x1ZGVkLiBUaGlzIGNoYW5nZSBpcyBub3QgcHVyZWx5IGRlY29yYXRpdmUgYW5kICpkb2VzKiBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgYSBjb3JlIERBTU9OIGNvbXBvbmVudC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBgbWF4X3RocmVzYCwgd2hpY2ggaXMgdXNlZCBpbiBhIGxvb3AgdG8gZGV0ZXJtaW5lIHdoZW4gdG8gbWVyZ2UgcmVnaW9ucy5cblxuYGBgY1xuXHRtYXhfdGhyZXMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmMtXHUwMDNlYXR0cnMpO1xuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdG5yX3JlZ2lvbnMgPSAwO1xuXHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG5cdFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdClcblx0XHRcdFx0bnJfcmVnaW9ucysrO1xuXHRcdH1cblx0XHRpZiAobnJfcmVnaW9ucyBcdTAwM2M9IGMtXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMpXG5cdFx0XHRicmVhaztcblx0XHRtYXhfdGhyZXMgPSBtYXgoMVUsIG1heF90aHJlcyAqIDIpO1xuYGBgXG5cbklmIHRoZSBvcmlnaW5hbCBjYWxjdWxhdGlvbiB0cnVuY2F0ZWQgYG1heF90aHJlc2AgdG8gYSBzbWFsbCB2YWx1ZSAoZS5nLiwgMCBvciAxKSwgdGhpcyBsb29wIHdvdWxkIGl0ZXJhdGUgZmFyIG1vcmUgdGltZXMgdGhhbiBuZWNlc3NhcnkuIE5vdywgdGhlIGZpeCBzZXRzIGBtYXhfdGhyZXNgIHRvIGBVSU5UX01BWGAgKGlmIGl0IHdhcyBvdmVyZmxvd2luZyksIHRoaXMgbWF5IGNhdXNlIHRoZSBsb29wIHRvIGl0ZXJhdGUgZmFyIGZld2VyIHRpbWVzLiBUaGlzIGlzIGEgYmVoYXZpb3JhbCBjaGFuZ2UuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHN5c2ZzIG9yIGRlYnVnZnMsIHNvIGl0J3MgZnV6emFibGUuXG5cblRoZSBgaHVnZXBhZ2VfbWVtX2JwYCBjaGFuZ2UgaW4gdGhlIHNlbGZ0ZXN0IGlzIGp1c3QgYSB0ZXN0IHVwZGF0ZSBmb3IgYSBmZWF0dXJlIGFscmVhZHkgaW4gdGhlIGtlcm5lbDsgdGhpcyBwYXRjaCBkb2Vzbid0IGFkZCBhbnkgbmV3IGZ1bmN0aW9uYWxpdHkgd2l0aCBpdC4gU28sIHRoYXQncyBub3QgcmVsZXZhbnQgZm9yIG91ciBmdXp6aW5nIGFuYWx5c2lzLFxuXG5Tbywgd2hpbGUgdGhlIHBhdGNoIGl0c2VsZiBtaWdodCBiZSBjb25zaWRlcmVkIG1pbm9yLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBpbnRlZ2VyIHRydW5jYXRpb24gZml4IGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIOKAkyB3YXJyYW50cyBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwsIHRoZSBsb2dpYyBpcyByZWFjaGFibGUsIGFuZCB0aGUgY2hhbmdlIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gcGF0aC5cbkknbGwgbWFyayB0aGlzIGFzIHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzM3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MToyMS44NTkzNDcxMTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NjUxMDU2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2RhbW9uZF9tZXJnZV9yZWdpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMzEzPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzNjctICovXFxubW0vZGFtb24vY29yZS5jOjMzNjg6c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxubW0vZGFtb24vY29yZS5jLTMzNjktXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHN6X2xpbWl0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0NzM9c3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNTA5LSAqIG1vbml0b3JpbmcgYWNjdXJhY3kgdW5kZXIgdGhlIGR5bmFtaWNhbGx5IGNoYW5nZWFibGUgYWNjZXNzIHBhdHRlcm5zLiAgSWYgYVxcbm1tL2RhbW9uL2NvcmUuYzozNTEwOiAqIHNwbGl0IHdhcyB1bm5lY2Vzc2FyaWx5IG1hZGUsIGxhdGVyICdrZGFtb25kX21lcmdlX3JlZ2lvbnMoKScgd2lsbCByZXZlcnRcXG5tbS9kYW1vbi9jb3JlLmMtMzUxMS0gKiBpdC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzQ1PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4MDctXFx0XFx0XFx0XFx0XFx0bmV4dF9hZ2dyZWdhdGlvbl9zaXMpKSB7XFxubW0vZGFtb24vY29yZS5jOjM4MDg6XFx0XFx0XFx0a2RhbW9uZF9tZXJnZV9yZWdpb25zKGN0eCxcXG5tbS9kYW1vbi9jb3JlLmMtMzgwOS1cXHRcXHRcXHRcXHRcXHRtYXhfbWVyZ2Vfc2NvcmUgLyAxMCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODE2LVxcdFxcdCAqIGRvIGtkYW1vbmRfY2FsbCgpIGFuZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoKSBhZnRlclxcbm1tL2RhbW9uL2NvcmUuYzozODE3OlxcdFxcdCAqIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucygpIGlmIHBvc3NpYmxlLCB0byByZWR1Y2Ugb3ZlcmhlYWRcXG5tbS9kYW1vbi9jb3JlLmMtMzgxOC1cXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTE6MjUuNjI0NDgwNjk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjc5NjQxNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIEVudHJ5IFBvaW50IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBEQU1PTiBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBtYWluIGVudHJ5IHBvaW50LiBJdCBsb29rcyBsaWtlIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGdldHMgY2FsbGVkIGZyb20gYGtkYW1vbmRfZm5gLCB3aGljaCBpcyB0aGUgY29yZSB0aHJlYWQgZnVuY3Rpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGUga2V5IHN5bWJvbCwgdGhlIHBvaW50IG9mIGZvY3VzIGZvciB0aGlzLCBzaG91bGQgYmUgZWl0aGVyIGBrZGFtb25kX2ZuYCBvciBga2RhbW9uZF9tZXJnZV9yZWdpb25zYC5cblxuV2FpdCBhIG1pbnV0ZSwgYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBBaCwgcmlnaHQsIHRoYXQgdHJpZ2dlcnMgYSBndWlkZWxpbmUgaW4gbXkgaGVhZDogXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcIi4gVGhhdCBpbXBsaWVzIGBrZGFtb25kX2ZuYCBpcyBhbHNvIGxpa2VseSBzdGF0aWMuIFRoYXQncyBhIGxpdHRsZSB1bnVzdWFsIGZvciB0aGUgbWFpbiBlbnRyeS4gTGV0J3MgbWFrZSBzdXJlLCBJIG5lZWQgdG8gY29uZmlybSBga2RhbW9uZF9mbmAncyBzdGF0aWMgZGVzaWduYXRpb24gdG8gYmUgc3VyZS4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODMxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUyOjI5LjMwNDEyNjI2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0MzAxNjE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZGFtb25kX2ZuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD04NTQ9c3RydWN0IGRhbW9uX2N0eCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODc0LVxcdHVuc2lnbmVkIGxvbmcgbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXM7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjg3NTpcXHQvKiBmb3Igd2FpdGluZyB1bnRpbCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBrZGFtb25kX2ZuIGlzIHN0YXJ0ZWQgKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODc2LVxcdHN0cnVjdCBjb21wbGV0aW9uIGtkYW1vbmRfc3RhcnRlZDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAzNS0gKiBiZSBjYWxsZWQgZnJvbSBhIHNhZmUgY29udGV4dHMuICBTdWNoIGNvbnRleHRzIGluY2x1ZGUgZGFtb25fY3R4IHNldHVwIHRpbWVcXG5tbS9kYW1vbi9jb3JlLmM6MTAzNjogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxcbm1tL2RhbW9uL2NvcmUuYy0xMDM3LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA0MC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxubW0vZGFtb24vY29yZS5jOjEwNDE6ICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXFxubW0vZGFtb24vY29yZS5jLTEwNDItICogYXBwbHlpbmcgYXV0by10dW5lZCBtb25pdG9yaW5nIGludGVydmFscy5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDQ4PWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwNzQtXFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6MTA3NTpcXHQgKiBuZXh0X2ludGVydmFsc190dW5lX3NpcyB3aWxsIGJlIHVwZGF0ZWQgaW5zaWRlIGtkYW1vbmRfZm4oKS5cXG5tbS9kYW1vbi9jb3JlLmMtMTA3Ni1cXHQgKi9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTA1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTI0LVxcbm1tL2RhbW9uL2NvcmUuYzoxOTI1OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTkyNi1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTM1PXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk0Mi1cXHRcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xcbm1tL2RhbW9uL2NvcmUuYzoxOTQzOlxcdFxcdGN0eC1cXHUwMDNla2RhbW9uZCA9IGt0aHJlYWRfcnVuKGtkYW1vbmRfZm4sIGN0eCwgXFxcImtkYW1vbmQuJWRcXFwiLFxcbm1tL2RhbW9uL2NvcmUuYy0xOTQ0LVxcdFxcdFxcdFxcdG5yX3J1bm5pbmdfY3R4cyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjAzOT12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNDMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2N0eHM7IGkrKylcXG5tbS9kYW1vbi9jb3JlLmM6MjA0NDpcXHRcXHQvKiBucl9ydW5uaW5nX2N0eHMgaXMgZGVjcmVtZW50ZWQgaW4ga2RhbW9uZF9mbiAqL1xcbm1tL2RhbW9uL2NvcmUuYy0yMDQ1LVxcdFxcdF9fZGFtb25fc3RvcChjdHhzW2ldKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzIzPXN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NDQtICovXFxubW0vZGFtb24vY29yZS5jOjM3NDU6c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxubW0vZGFtb24vY29yZS5jLTM3NDYte1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE2MTU9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY0MS0gKiBUaGlzIHRlc3RzIHRoZSBpbnZhcmlhbnQgaW50cm9kdWNlZCBieTpcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTY0MjogKiBjb21taXQgMzNjM2Y2YzJiNDhjIChcXFwibW0vZGFtb24vY29yZTogZml4IGRhbW9zX3dhbGsoKSB2cyBrZGFtb25kX2ZuKCkgZXhpdCByYWNlXFxcIilcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY0My0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6MzIuMjQ3MTU1MTY2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDUwNjYyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipIdW50aW5nIGZvciBEeW5hbWljIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgY29kZWJhc2UsIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LCBgX19kYW1vbl9zdGFydGAsIGlzIGEgc3RhdGljIG9uZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkga25vdyBiZXR0ZXIgdGhhbiB0byBhc3N1bWUgdGhhdCdzIHRoZSAqb25seSogd2F5IHRoZSBjb2RlIGlzIGluaXRpYWxpemVkIG9yIGV4ZWN1dGVkLiBJbiBteSBleHBlcmllbmNlLCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIGZpbmQgb3RoZXIgZW50cnkgcG9pbnRzLCBvbmVzIHRoYXQgbWlnaHQgYmUgZHluYW1pY2FsbHkgZGV0ZXJtaW5lZCBvciBpbml0aWF0ZWQgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy4gS25vd2luZyB0aGUgc3RhdGljIGVudHJpZXMgaXMgdXNlZnVsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCBzdGFydGluZyBwb2ludCBvZiB0aGlzIGNvZGUsIGJ1dCwgSSBuZWVkIHRvIGZpbmQgYWxsIG9mIHRoZSBlbnRyeSBwb2ludHMgZm9yIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLiBJIHdhbnQgdG8gdW5jb3ZlciBhbnkgb3RoZXIgaW5pdGlhbGl6YXRpb25zIG9yIGV4ZWN1dGlvbnMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgZGVmaW5lZC4gSXQncyB0aW1lIHRvIHN0YXJ0IHNlYXJjaGluZyBmb3IgdGhlIG1vcmUgZWx1c2l2ZSwgbm9uLXN0YXRpYyBtZXRob2RzIG9yIGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMjAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MjozNS4zNTIyMjYxNTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjU2MjY3NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3RhcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwOTI9Ym9vbCBkYW1vbl9pbml0aWFsaXplZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA5MzppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwOTQtdm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTAxMz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMzgtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXFxubW0vZGFtb24vY29yZS5jOjEwMzk6ICogc2V0dXAgb2YgZGFtb25fY3R4IGJlZm9yZSBjYWxsaW5nIGRhbW9uX3N0YXJ0KCkuICBTb21lIG9mIHRoZSBBUEkgY2FsbGVyc1xcbm1tL2RhbW9uL2NvcmUuYy0xMDQwLSAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXFx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3JcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTI1PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTI3LS8qXFxubW0vZGFtb24vY29yZS5jOjE5Mjg6ICogX19kYW1vbl9zdGFydCgpIC0gU3RhcnRzIG1vbml0b3Jpbmcgd2l0aCBnaXZlbiBjb250ZXh0Llxcbm1tL2RhbW9uL2NvcmUuYy0xOTI5LSAqIEBjdHg6XFx0bW9uaXRvcmluZyBjb250ZXh0XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkzNC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTkzNTpzdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0xOTM2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTU3PXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTU5LS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxOTYwOiAqIGRhbW9uX3N0YXJ0KCkgLSBTdGFydHMgdGhlIG1vbml0b3JpbmdzIGZvciBhIGdpdmVuIGdyb3VwIG9mIGNvbnRleHRzLlxcbm1tL2RhbW9uL2NvcmUuYy0xOTYxLSAqIEBjdHhzOlxcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NjgtICogQGV4Y2x1c2l2ZSBpcyB0cnVlIGFuZCBhIGdyb3VwIG9mIHRocmVhZHMgdGhhdCBjcmVhdGVkIGJ5IG90aGVyXFxubW0vZGFtb24vY29yZS5jOjE5Njk6ICogJ2RhbW9uX3N0YXJ0KCknIGNhbGwgaXMgY3VycmVudGx5IHJ1bm5pbmcsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGJ1dFxcbm1tL2RhbW9uL2NvcmUuYy0xOTcwLSAqIHJldHVybnMgLUVCVVNZLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NzMtICovXFxubW0vZGFtb24vY29yZS5jOjE5NzQ6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXFxubW0vZGFtb24vY29yZS5jLTE5NzUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5OTktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2N0eHM7IGkrKykge1xcbm1tL2RhbW9uL2NvcmUuYzoyMDAwOlxcdFxcdGVyciA9IF9fZGFtb25fc3RhcnQoY3R4c1tpXSk7XFxubW0vZGFtb24vY29yZS5jLTIwMDEtXFx0XFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDcwPWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA5Ny0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyMDk4OiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXFxubW0vZGFtb24vY29yZS5jLTIwOTktICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjEwNj1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE1Mi0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyMTUzOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXFxubW0vZGFtb24vY29yZS5jLTIxNTQtICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwOD1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIwLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDIxOlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIyLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MzMxPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQzLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozNDQ6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTM0NS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0yMTItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vc3RhdC5jOjIxMzpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2ZGFtb25fc3RhdF9jb250ZXh0LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9zdGF0LmMtMjE0LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyNjctXFx0fVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjI2ODpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XFxubW0vZGFtb24vc3lzZnMuYy0yMjY5LVxcdGlmIChlcnIpIHtcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYz0xNzc9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfbXRpZXJfc3RhcnQodm9pZClcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xOTEtXFx0Y3R4c1sxXSA9IGN0eDtcXG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTkyOlxcdGVyciA9IGRhbW9uX3N0YXJ0KGN0eHMsIDIsIHRydWUpO1xcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xOTMtXFx0aWYgKCFlcnIpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3ByY2wuYz02MD1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3N0YXJ0KHZvaWQpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy0xMDctXFxuc2FtcGxlcy9kYW1vbi9wcmNsLmM6MTA4OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbnNhbXBsZXMvZGFtb24vcHJjbC5jLTEwOS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYz02MT1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3N0YXJ0KHZvaWQpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy04OC1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYzo4OTpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy05MC1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUyOjM4LjQ3Nzg2MjQ2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDA1MDQ4NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbWFwIG91dCB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYGRhbW9uX3N0YXJ0YCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgQVBJIGVudHJ5IHBvaW50IHRoYXQga2lja3MgdGhpbmdzIG9mZi4gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiB5ZXAsIHNlZW1zIHRvIGJlIHRoZSBtYWluIGRyaXZlci4gQnV0IGlzIHRoYXQgKml0Kj8gTm9wZSwgYGRhbW9uX3NldF9hdHRyc2AgaXMgYWxzbyBhbiBlbnRyeSBwb2ludCAtIG1ha2VzIHNlbnNlLCBzaW5jZSBpdCdzIHRoZSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIGBzdHJ1Y3QgZGFtb25fYXR0cnNgIHRoYXQgY29udHJvbCB0aGluZ3MgbGlrZSBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAuIFRoZW4gdGhlcmUgaXMgYGRhbW9uX3NldF9yZWdpb25zYCBhcyB3ZWxsLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgdG8gbW9kaWZ5IGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgLCB3aGljaCBpcyBpbnZva2VkIGR1cmluZyB0aGUgZXhlY3V0aW9uIGluaXRpYXRlZCBieSBgZGFtb25fc3RhcnRgLCB0aGF0IG1ha2VzIGl0IGEgZ29vZCBmb2N1cyBmb3IgYW5hbHlzaXMuIEFsc28sIGJlY2F1c2UgYGRhbW9uX3NldF9hdHRyc2AgY29uZmlndXJlcyB0aGUgYXR0cmlidXRlcyB1c2VkIGluIHNhbXBsaW5nLCBpdCdzIGFsc28gYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBjbG9zZXIgaW5zcGVjdGlvbi4gQW5kIGhleSwgdGhlIHRlc3RzIGFkZGVkIGFyZSBmb3IgYGRhbW9uX3NldF9yZWdpb25zYCB0b28sIHNvIHRoYXQncyBhbHNvIGFuIGltcG9ydGFudCBwaWVjZSB0byBjb25zaWRlci5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBzZXQgdXAgZm9yIERBTU9OLiBUaGF0J3MgYWx3YXlzIG15IGZpcnN0IHN0ZXAgYmVmb3JlIGRpdmluZyB0b28gZGVlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxODgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6NDIuODgyOTE0NDE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjE5NzMxNTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUyOjQ2LjEwMjY2MDM4N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg3NTgxMjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aGUgdGFzayBhdCBoYW5kIHJlcXVpcmVzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZGFlbW9uLCBvciBcIm1tL2RhbW9uXCIgYXMgd2UgY2FsbCBpdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgY3JhY2sgb3BlbiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuXCIgVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIHN1YnN5c3RlbS4gVGhpcyBmaWxlIHdpbGwgcmV2ZWFsIHdoaWNoIG90aGVyIGZlYXR1cmVzLCBtb2R1bGVzLCBvciBrZXJuZWwgc2V0dGluZ3MgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBEQU1PTiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEknbSBleHBlY3RpbmcgdG8gZmluZCBpbnRyaWNhdGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHZhcmlvdXMgS2NvbmZpZyBzeW1ib2xzLCBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMsIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbC4gSSBjYW4gdGhlbiB1c2UgdGhhdCBpbmZvcm1hdGlvbiB0byBkZXZlbG9wIG9yIGRlYnVnIHRoZSBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDg3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6NDkuMjkwMjQ1NTE2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6NDkuMjkwMzg4NjM2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjM0OTE5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFN5c2ZzIEV4cG9zdXJlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGBEQU1PTmAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiwgdGhlIGNlbnRyYWwgY29udHJvbCBwb2ludCwgcmlnaHQ/IEV2ZXJ5dGhpbmcgcmV2b2x2ZXMgYXJvdW5kIHRoYXQuIEFuZCwgb2YgY291cnNlLCB0byBpbnRlcmFjdCB3aXRoIGBEQU1PTmAgZWZmZWN0aXZlbHksIHBhcnRpY3VsYXJseSBmb3IgdGhpbmdzIGxpa2UgZnV6emluZyB3aXRoIGEgdG9vbCBsaWtlIHN5emthbGxlciwgd2UgbmVlZCBhIHdheSB0byBleHBvc2UgaXQgdG8gdXNlciBzcGFjZS4gVGhhdCdzIHdoZXJlIGBEQU1PTl9TWVNGU2AgY29tZXMgaW4uIEl0J3MgdGhlIGJyaWRnZSwgdGhlIG1lY2hhbmlzbSB0byBtYWtlIHRoZSBjb25maWd1cmF0aW9uIGFjY2Vzc2libGUgYW5kIHVzYWJsZSBmcm9tIG91dHNpZGUgdGhlIGtlcm5lbC4gV2l0aG91dCB0aGF0LCB3ZSdyZSBzdHVjayBpbiBhIGJsYWNrIGJveC4gU28sIGBEQU1PTl9TWVNGU2AgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBmb3IgcHJhY3RpY2FsIGludGVyYWN0aW9uIHdpdGggYERBTU9OYCBpbiB0aGVzZSBraW5kcyBvZiBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDA4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1Mjo1Mi42MTM4ODUzNDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NzY0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcbiAgNjY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgREFNT05fU1lTRlNcXG4gIDY5OlxcdFxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG4gIDcxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDcyOlxcdFxcdGhlbHBcXG4gIDczOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXFxuICA3NDpcXHRcXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbiAgNzc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA3ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDc5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUyOjUyLjYxNjE2MDQxM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIyMzgzMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGN1cnJlbnQgdHJhaW4gb2YgdGhvdWdodCwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEQU1PTiBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIER5bmFtaWMgQWNjZXNzIE1vbml0b3JpbmcgKERBTU9OKSBjb25maWdzLCBhbmQgaXQgbG9va3MgbGlrZSBgREFNT05gIGFuZCBgREFNT05fU1lTRlNgIGFyZSB0aGUgcHJpbWFyeSBvbmVzIHRvIGJlIGNvbmNlcm5lZCB3aXRoLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBvbiB0aGVzZS4gSSdtIGFsc28gcmVtZW1iZXJpbmcgdGhhdCB0aGUgYWN0dWFsIG1vbml0b3JpbmcgaW1wbGVtZW50YXRpb24gbWlnaHQgaW52b2x2ZSBgREFNT05fVkFERFJgIGFuZCBgREFNT05fUEFERFJgLCBkZXBlbmRpbmcgb24gaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlcy4gSSBzaG91bGQgY2xhcmlmeSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIHRoZSBhZGRyZXNzIHNwYWNlcyB3ZSdyZSB0YXJnZXRpbmcgYW5kIHRoZSBvdmVyaGVhZCBpbnZvbHZlZC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGhvdyB0aGV5IGludGVyYWN0LCBpZiBhdCBhbGwsIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgdG9vbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDYwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1Mjo1NS44Mzg1NDkyOTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBEQU1PTl9WQUREUlxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDQxOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNDI6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA0NTpcXHRcXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIERBTU9OX1BBRERSXFxuICA0ODpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDUwOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA1NDpcXHRcXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1Mjo1NS44Mzg2ODMxNzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4ODg1NjE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gYmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiwgaXQgbG9va3MgbGlrZSBlbmFibGluZyBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fVkFERFJgLCBhbmQgYERBTU9OX1BBRERSYCBpcyBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHRoaXMgc2V0dXAuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIFdlJ3ZlIGdvdCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXMgdGhlIGNlbnRyYWwgcGllY2VzIGhlcmUsIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQuXG5cblRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGZvY3VzZWQgb24gcmVmaW5pbmcgdGhlIGludGVybmFsIHdvcmtpbmdzLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGFuZCBgZGFtb25fd21hcmtfd2FpdF91c2AuIFRoYXQgY2hhbmdlIHRvIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlIHJlbW92YWwgb2YgYHByX2RlYnVnYCBpbXBsaWVzIGEgbW92ZSB0b3dhcmRzIGNsZWFuZXIgY29kZSBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIFRoZSBmYWN0IHRoYXQgYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AgaXMgc3RhdGljIHRlbGxzIG1lIGl0J3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLlxuXG5Gcm9tIHRoZXJlLCBgZGFtb25fc3RhcnRgIGlzIHRoZSBjbGVhciBlbnRyeSBwb2ludDsgaXQga2lja3Mgb2ZmIHRoZSB0aHJlYWQgdGhhdCBydW5zIGBrZGFtb25kX2ZuYCwgd2hpY2ggaW4gdHVybiBjYWxscyB0aGF0IGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGZ1bmN0aW9uLiBUaGUgdXNlIG9mIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMgdXNlZCBieSBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAuIEZpbmFsbHksIHRoZSBuZXcgS1VuaXQgdGVzdHMgYXJlIGZvY3VzZWQgb24gdmVyaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiBgZGFtb25fc2V0X3JlZ2lvbnNgLCB3aGljaCBpcyBnb29kIHRvIHNlZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIHNlZSBpZiBgZGFtb25fc3lzZnNfc2V0X2F0dHJzYCBpbiBgbW0vZGFtb24vc3lzZnMuY2AgcHJvdmlkZXMgYW5vdGhlciB3YXkgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk1MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUzOjAwLjQyNzU0NDIwNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMTc2NjAwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19zZXRfYXR0cnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0xODkxPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTkxMi1cXG5tbS9kYW1vbi9zeXNmcy5jOjE5MTM6c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLmMtMTkxNC1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfYXR0cnMgKnN5c19hdHRycylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDktXFx0Y3R4LVxcdTAwM2VwYXVzZSA9IHN5c19jdHgtXFx1MDAzZXBhdXNlO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjExMDpcXHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfYXR0cnMoY3R4LCBzeXNfY3R4LVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTExLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUzOjAzLjM1OTMxNjE0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTYzNTkwODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiB0aGlzIERBTU9OIHBhdGNoLCBhcyBJIHNlZSBpdC4gSXQgbG9va3MgbGlrZSBgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzYCBpcyB0aGUgZW50cnkgcG9pbnQgd2hlbiB3ZSdyZSB3cml0aW5nIHRvIHN5c2ZzLCBidXQgdGhlIHJlYWwgaGVhcnQgb2YgdGhlIG1hdHRlciBpcyB0aGUgYGRhbW9uX3NldF9hdHRyc2AgZnVuY3Rpb24uXG5cbkkgdGhpbmsgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24uIEl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24gb3Igb3ZlcmZsb3cgaXNzdWUgd2l0aGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgLCBzcGVjaWZpY2FsbHkgaG93IGBtYXhfdGhyZXNgIGlzIGNhbGN1bGF0ZWQsIHVzaW5nIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0J3MgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCdzIHJlYWNoYWJsZS5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfYXR0cnNgLCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYC5cblxuSXQncyBjbGVhciB0aGF0IGBkYW1vbl9zZXRfcmVnaW9uc2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zYCBwYXRoLiBBbmQsIGNvbmZpcm1lZCwgYm90aCBgZGFtb25fc3RhcnRgIGFuZCBgZGFtb25fc2V0X2F0dHJzYCBhcmUgYWxzbyBhY2Nlc3NpYmxlIHZpYSBzeXNmcywgdGhyb3VnaCB3cml0aW5nIHRvIHRoZSBgc3RhdGVgIGFuZCBhdHRyaWJ1dGVzLCByZXNwZWN0aXZlbHkuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgcXVpY2tseSBjaGVja2VkIGZvciBvdGhlciBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IG15IGF0dGVudGlvbi4gSSBrbm93IGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0J3Mgbm90IGEgc3ltYm9sIHRvIHRyYWNrLiBTaW1pbGFybHksIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGFuZCBga2RhbW9uZF9mbmAgYXJlIGFsc28gc3RhdGljLlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgZGVmaW5pdGVseSBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AuIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYGRhbW9uX3N0YXJ0YCBpcyBleHBvcnRlZC4uLiBhbmQgd2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MjQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTM6MDkuMjU1Njc4NTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzODA0OTk4NjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmRhbW9uX3N0YXJ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MzoxMi42MzYxOTE5MjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTY5Mjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWJ1Z2dpbmcgREFNT04gSW5pdGlhbGl6YXRpb24qKlxuXG5IbW0sIHdhaXQgYSBtaW51dGUuLi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSBhIHJlZmVyZW5jZSB0byBgZGFtb25fc3RhcnRgLCBidXQgaXQgZG9lc24ndCBzZWVtIGxpa2UgaXQncyBiZWluZyBwcm9wZXJseSBleHBvcnRlZC4gVGhhdCdzIGEgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZGVmaW5lZCBhbmQgaWYgaXQncyBhY2Nlc3NpYmxlLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIGNoZWNrIHRoZSBjb3JlIERBTU9OIGNvZGU7IGl0J3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlLiBTbywgbGV0IG1lIHB1bGwgdXAgYG1tL2RhbW9uL2NvcmUuY2AgcmlnaHQgYXdheS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlY2xhcmF0aW9uIG9mIGBkYW1vbl9zdGFydGAsIGFuZCB0aGVuIGRldGVybWluZSBob3cgaXQgaXMgdG8gYmUgZXhwb3J0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgc28gdGhhdCB0aGlzIHBhcnRpY3VsYXIgYnVpbGQgZG9lc24ndCBmYWlsLiBJJ20gc3VyZSBpdCdzIGp1c3QgYSBzaW1wbGUgb3ZlcnNpZ2h0LCBidXQgdGhlc2UgYXJlIGV4YWN0bHkgdGhlIGtpbmQgb2YgZGV0YWlscyB0aGF0IGNhbiBraWxsIHlvdSB3aGVuIHlvdSdyZSB3b3JraW5nIG9uIHNvbWV0aGluZyBjb21wbGV4IGxpa2UgREFNT04uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjE3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTM6MTUuNTI3ODg5NTA5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTAyMjcyOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N0YXJ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xMDkyPWJvb2wgZGFtb25faW5pdGlhbGl6ZWQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwOTM6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDk0LXZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMTM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDM4LSAqIEluIGRldGFpbCwgYWxsIERBTU9OIEFQSSBjYWxsZXJzIGRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgaW5pdGlhbFxcbm1tL2RhbW9uL2NvcmUuYzoxMDM5OiAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcXG5tbS9kYW1vbi9jb3JlLmMtMTA0MC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkyNT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkyNy0vKlxcbm1tL2RhbW9uL2NvcmUuYzoxOTI4OiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cXG5tbS9kYW1vbi9jb3JlLmMtMTkyOS0gKiBAY3R4OlxcdG1vbml0b3JpbmcgY29udGV4dFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5MzQtICovXFxubW0vZGFtb24vY29yZS5jOjE5MzU6c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMTkzNi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTk1Nz1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk1OS0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTk2MDogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cXG5tbS9kYW1vbi9jb3JlLmMtMTk2MS0gKiBAY3R4czpcXHRhbiBhcnJheSBvZiB0aGUgcG9pbnRlcnMgZm9yIGNvbnRleHRzIHRvIHN0YXJ0IG1vbml0b3JpbmdcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTY4LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxcbm1tL2RhbW9uL2NvcmUuYzoxOTY5OiAqICdkYW1vbl9zdGFydCgpJyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcXG5tbS9kYW1vbi9jb3JlLmMtMTk3MC0gKiByZXR1cm5zIC1FQlVTWS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTczLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTc0OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTc1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTk5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjAwMDpcXHRcXHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xcbm1tL2RhbW9uL2NvcmUuYy0yMDAxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjA3MD1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwOTctICpcXG5tbS9kYW1vbi9jb3JlLmM6MjA5ODogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMDk5LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIxMDY9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNTItICpcXG5tbS9kYW1vbi9jb3JlLmM6MjE1MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMTU0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDg9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQyMTpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMi1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMzMT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTM0My1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQ0OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDUtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vc3RhdC5jLTIxNC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDM9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMjY3LVxcdH1cXG5tbS9kYW1vbi9zeXNmcy5jOjIyNjg6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjI2OS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmM9MTc3PXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX210aWVyX3N0YXJ0KHZvaWQpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTkxLVxcdGN0eHNbMV0gPSBjdHg7XFxuc2FtcGxlcy9kYW1vbi9tdGllci5jOjE5MjpcXHRlcnIgPSBkYW1vbl9zdGFydChjdHhzLCAyLCB0cnVlKTtcXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTkzLVxcdGlmICghZXJyKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9wcmNsLmM9NjA9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfcHJjbF9zdGFydCh2b2lkKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtMTA3LVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jOjEwODpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy0xMDktXFx0aWYgKGVycikge1xcbi0tXFxuc2FtcGxlcy9kYW1vbi93c3NlLmM9NjE9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9zdGFydCh2b2lkKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi93c3NlLmMtODgtXFxuc2FtcGxlcy9kYW1vbi93c3NlLmM6ODk6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxuc2FtcGxlcy9kYW1vbi93c3NlLmMtOTAtXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MzoxOC42MzAxNzAyNjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0Njg5NjE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgQ29uc2lkZXJhdGlvbnMgZm9yIERBTU9OIGluIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IERBTU9OIHVzaW5nIFN5emthbGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGEgZnVuY3Rpb24gbmVlZGVkIHRvIGJlIGV4cG9ydGVkIHRvIGJlIGEgZm9jdXMgc3ltYm9sLCBidXQgdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgY2FzZSBoZXJlLiBJIHJlbWVtYmVyIHRoYXQgYGRhbW9uX3N0YXJ0YCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gbG9jYXRlZCBpbiBgbW0vZGFtb24vY29yZS5jYC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCB0aGlzIHdhc24ndCBpZGVhbCwgZXNwZWNpYWxseSBzaW5jZSBpdCdzIG5vdCBleHBvcnRlZC4gSG93ZXZlciwgSSByZWNhbGwgdGhhdCBTeXprYWxsZXIgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCB0aHJvdWdoIHN5c2ZzIGZvciBEQU1PTjsgc28gdGhlIHN5c2ZzIGVudHJ5IHBvaW50cyBsaWtlIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCwgYGRhbW9uX3N5c2ZzX3NldF9hdHRyc2AsIGFuZCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgIGFyZSByZWxldmFudC5cblxuVGhlbiBpdCBoaXQgbWU6IFN5emthbGxlciB1dGlsaXplcyBrY292LCB3aGljaCBpbnN0cnVtZW50cyAqYWxsKiBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCBldmVuIHRob3VnaCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXJlbid0IGV4cG9ydGVkLCB0aGV5ICpjYW4qIGJlIHVzZWQgYXMgZm9jdXMgc3ltYm9scy4gU2luY2Uga2NvdiB3aWxsIGluc3RydW1lbnQgdGhlbS4gU28sIGV2ZW4gdGhvdWdoIHRoZXkgYXJlbid0IGRpcmVjdGx5IGV4cG9zZWQgZXh0ZXJuYWxseSwgdGhleSBhcmUgYXZhaWxhYmxlLiBTbywgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9hdHRyc2AsIGFuZCBgZGFtb25fc2V0X3JlZ2lvbnNgIHNob3VsZCBiZSBnb29kIGNob2ljZXMuIE5vdywgbGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZGFtb25fc2V0X2F0dHJzYCBzcGVjaWZpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjIxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUzOjIyLjg3NzA3MTAxOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzNzY4Nzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zZXRfYXR0cnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTgwOT1zdHJ1Y3QgZGFtb25fYXR0cnMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTgxOC1cXHQgKiBAYWdncl9pbnRlcnZhbCB0byBAc2FtcGxlX2ludGVydmFsIHJhdGlvLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MTk6XFx0ICogQ29yZS1leHRlcm5hbCBjb21wb25lbnRzIGNhbGwgZGFtb25fc2V0X2F0dHJzKCkgd2l0aCBcXHUwMDI2ZGFtb25fYXR0cnNcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODIwOlxcdCAqIHRoYXQgdGhpcyBmaWVsZCBpcyB1bnNldC4gIEluIHRoZSBjYXNlLCBkYW1vbl9zZXRfYXR0cnMoKSBzZXRzIHRoaXNcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODIxLVxcdCAqIGZpZWxkIG9mIHJlc3VsdGluZyBcXHUwMDI2ZGFtb25fYXR0cnMuICBDb3JlLWludGVybmFsIGNvbXBvbmVudHMgc3VjaCBhc1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MjI6XFx0ICoga2RhbW9uZF90dW5lX2ludGVydmFscygpIGNhbGxzIGRhbW9uX3NldF9hdHRycygpIHdpdGggXFx1MDAyNmRhbW9uX2F0dHJzXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjgyMzpcXHQgKiB0aGF0IHRoaXMgZmllbGQgaXMgc2V0LiAgSW4gdGhlIGNhc2UsIGRhbW9uX3NldF9hdHRycygpIGp1c3Qga2VlcFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC04MjQtXFx0ICogaXQuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2Mz12b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjQ6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY1LXZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMTM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDI4LS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxMDI5OiAqIGRhbW9uX3NldF9hdHRycygpIC0gU2V0IGF0dHJpYnV0ZXMgZm9yIHRoZSBtb25pdG9yaW5nLlxcbm1tL2RhbW9uL2NvcmUuYy0xMDMwLSAqIEBjdHg6XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA0Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTA0ODppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG5tbS9kYW1vbi9jb3JlLmMtMTA0OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTc1MT1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzg0LVxcdCAqIHNjaGVtZXMgYW5kIHRhcmdldHMgc2hvdWxkIGJlIHVwZGF0ZWQgZmlyc3QsIHNpbmNlXFxubW0vZGFtb24vY29yZS5jOjE3ODU6XFx0ICogMS4gZGFtb25fc2V0X2F0dHJzKCkgdXBkYXRlcyBtb25pdG9yaW5nIHJlc3VsdHMgb2YgdGFyZ2V0cyBhbmRcXG5tbS9kYW1vbi9jb3JlLmMtMTc4Ni1cXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzkwLVxcdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFxcdTAwMjZkc3QtXFx1MDAzZWF0dHJzLCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycykpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTc5MTpcXHRcXHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMoZHN0LCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTE3OTItXFx0XFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyNTQ9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkIGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjcyLVxcdHRyYWNlX2RhbW9uX21vbml0b3JfaW50ZXJ2YWxzX3R1bmUobmV3X2F0dHJzLnNhbXBsZV9pbnRlcnZhbCk7XFxubW0vZGFtb24vY29yZS5jOjIyNzM6XFx0ZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZuZXdfYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0yMjc0LX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzQ1PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NzEtXFx0XFx0ICogYmUgY2hhbmdlZCBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgUmVhZCB0aGUgdmFsdWVzIGhlcmUsIGFuZFxcbm1tL2RhbW9uL2NvcmUuYzozNzcyOlxcdFxcdCAqIHVzZSB0aG9zZSBmb3IgdGhpcyBpdGVyYXRpb24uICBUaGF0IGlzLCBkYW1vbl9zZXRfYXR0cnMoKVxcbm1tL2RhbW9uL2NvcmUuYy0zNzczLVxcdFxcdCAqIHVwZGF0ZWQgbmV3IHZhbHVlcyBhcmUgcmVzcGVjdGVkIGZyb20gbmV4dCBpdGVyYXRpb24uXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzg0NS1cXHRcXHRcXHRcXHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXFxubW0vZGFtb24vY29yZS5jOjM4NDY6XFx0XFx0XFx0XFx0ICogZGFtb25fc2V0X2F0dHJzKCkgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZnJvbVxcbm1tL2RhbW9uL2NvcmUuYy0zODQ3LVxcdFxcdFxcdFxcdCAqIGtkYW1vbmRfdHVuZV9pbnRlcnZhbCgpIG1heSB3cm9uZ2x5IHRoaW5rXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzAwLVxcdH1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjMwMTpcXHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMocGFyYW1fY3R4LCBcXHUwMDI2YXR0cnMpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzAyLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjI0LVxcdH1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MjI1OlxcdGVyciA9IGRhbW9uX3NldF9hdHRycyhwYXJhbV9jdHgsIFxcdTAwMjZhdHRycyk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTIyNi1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTE1MT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3RhdF9idWlsZF9jdHgodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0xNzUtXFx0fTtcXG5tbS9kYW1vbi9zdGF0LmM6MTc2OlxcdGlmIChkYW1vbl9zZXRfYXR0cnMoY3R4LCBcXHUwMDI2YXR0cnMpKVxcbm1tL2RhbW9uL3N0YXQuYy0xNzctXFx0XFx0Z290byBmcmVlX291dDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTkxMz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE5MzItXFx0fTtcXG5tbS9kYW1vbi9zeXNmcy5jOjE5MzM6XFx0cmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsIFxcdTAwMjZhdHRycyk7XFxubW0vZGFtb24vc3lzZnMuYy0xOTM0LX1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD02Nzk9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfYXR0cnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY4OS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NjkwOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNnZhbGlkX2F0dHJzKSwgMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY5MS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02OTMtXFx0aW52YWxpZF9hdHRycy5taW5fbnJfcmVnaW9ucyA9IDE7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjY5NDpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY5NS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02OTctXFx0aW52YWxpZF9hdHRycy5tYXhfbnJfcmVnaW9ucyA9IDk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjY5ODpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY5OS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03MDEtXFx0aW52YWxpZF9hdHRycy5hZ2dyX2ludGVydmFsID0gNDk5OTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzAyOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzAzLVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xMDMtXFx0fTtcXG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTA0OlxcdGlmIChkYW1vbl9zZXRfYXR0cnMoY3R4LCBcXHUwMDI2YXR0cnMpKVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xMDUtXFx0XFx0Z290byBmcmVlX291dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTM6MjUuODE0NzY5MTI4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NDE3NTU1MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoJ3MgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBpcyBgZGFtb25fc2V0X2F0dHJzYCBhY3R1YWxseSBleHBvcnRlZD8gSG1tLCBgRVhQT1JUX1NZTUJPTGAgaXNuJ3Qgc2hvd2luZyB1cCBpbiB0aGUgZ3JlcCBvdXRwdXQsIHdoaWNoIGlzIGEgYml0IG9kZC4gQnV0IHN5emthbGxlciBjYW4gc3RpbGwgaW50ZXJhY3Qgd2l0aCBpdCB2aWEgc3lzZnMsIHNvIHRoYXQncyBnb29kLiBNeSBmb2N1cyBzeW1ib2xzIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfYXR0cnNgLCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYC4gSSB0aGluayB0aGF0IGNvdmVycyB0aGUga2V5IGVudHJ5IHBvaW50cy5cblxuTm93LCBsZXQncyBnbyBiYWNrIGFuZCBjYXJlZnVsbHkgcmV2aWV3IHRob3NlIGluc3RydWN0aW9ucyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblRoZSBwYXRjaCBpdHNlbGYgbWFrZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCwgcHJldmVudGluZyBpbnRlZ2VyIHRydW5jYXRpb24gb2YgYG1heF90aHJlc2AuIFRoaXMgKmRvZXMqIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdywgYW5kIGNyaXRpY2FsbHksIGl0J3MgcmVhY2hhYmxlIGV2ZW4gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFRoYXQgbWVhbnMgV29ydGhGdXp6aW5nPXRydWUuIEknbSBwcmV0dHkgY29tZm9ydGFibGUgd2l0aCB0aGF0IGNvbmNsdXNpb24uXG5cblNvLCBhcyBhIHN1bW1hcnk6XG5cbiogICAqKldvcnRoRnV6emluZz10cnVlKipcbiogICAqKkZvY3VzU3ltYm9scyoqOiBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9yZWdpb25zYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgXG5cbldhaXQsIGxldCBtZSBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgaXMgaW5saW5lLCBzbyBpdCdzIG5vdCBhIHJlbGV2YW50IHN5bWJvbC4gQW5kIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGlzIHN0YXRpYzsgc28gbm90IGEgZ29vZCBlbnRyeSBwb2ludC4gVGhhdCBtYWtlcyBzZW5zZS5cblxuT2theSwgc28gSSB3aWxsIHN0aWNrIHdpdGg6XG5cbiogICBgZGFtb25fc3RhcnRgIC0gdGhpcyBpcyB0aGUgY29yZSBlbnRyeSBwb2ludCB0byBzdGFydCB0aGUgREFNT04gdGhyZWFkLlxuKiAgIGBkYW1vbl9zZXRfYXR0cnNgIC0gdGhlIGVudHJ5IHBvaW50IHRvIHNldCBhdHRyaWJ1dGVzLlxuKiAgIGBkYW1vbl9zZXRfcmVnaW9uc2AgLSB0aGUgZW50cnkgcG9pbnQgdG8gc2V0IHJlZ2lvbnMuXG5cbkFmdGVyIHRoYXQgZG91YmxlLWNoZWNrLCBJIGFtIHZlcnkgY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTc1LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NDozMy4yMzIzMzA2OThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzNDA4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX3NldF9hdHRyc1wiLFxuICAgIFwiZGFtb25fc2V0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24gaXNzdWUgaW4gYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AgYnkgdXNpbmcgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIHRvIGNhbGN1bGF0ZSBgbWF4X3RocmVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgREFNT04ncyByZWdpb24gbWVyZ2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zZXRfYXR0cnNcIixcbiAgICBcImRhbW9uX3NldF9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIGlzc3VlIGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGJ5IHVzaW5nIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCB0byBjYWxjdWxhdGUgYG1heF90aHJlc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIERBTU9OJ3MgcmVnaW9uIG1lcmdpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcq99m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 00:42:36 +0000 UTC FinishedAt: 2026-07-29 00:54:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2a4faffc103297c4822bb269d521249b75cc2261", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2a4faffc103297c4822bb269d521249b75cc2261", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "2bdd7f7f-4972-466b-9882-2e70b6d9fef8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_start", "damon_set_attrs", "damon_set_regions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBpc3N1ZSBpbiBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBieSB1c2luZyBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgdG8gY2FsY3VsYXRlIGBtYXhfdGhyZXNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiBEQU1PTiYjMzk7cyByZWdpb24gbWVyZ2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIzNjczYTg5ZGEwNTE2OGVkZDc0NzZmMDRmYTE5YzM1ZTM3ZGQ3YmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAwMDo1MDo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5pbmRleCBlNjc1YTU3MTQ1ZTM2Li5lOTQ4OGJiNDhkMjNjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5AQCAtMyw3ICYjNDM7Myw3IEBAIERhdGU6XHRcdE1hciAyMDIyXG4gQ29udGFjdDpcdFNKIFBhcmsgXHUwMDNjc2pAa2VybmVsLm9yZ1x1MDAzZVxuIERlc2NyaXB0aW9uOlx0SW50ZXJmYWNlIGZvciBEYXRhIEFjY2VzcyBNT05pdG9yaW5nIChEQU1PTikuICBDb250YWlucyBmaWxlc1xuIFx0XHRmb3IgY29udHJvbGxpbmcgREFNT04uICBGb3IgbW9yZSBkZXRhaWxzIG9uIERBTU9OIGl0c2VsZixcbi1cdFx0cGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vaW5kZXgucnN0LlxuJiM0MztcdFx0cGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vbW0vZGFtb24vaW5kZXgucnN0LlxuIFxuIFdoYXQ6XHRcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL1xuIERhdGU6XHRcdE1hciAyMDIyXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0XG5pbmRleCBmYjJmYTAwY2M5YWExLi5hN2MxMzUyMzM5Mzc4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL21haW50YWluZXItcHJvZmlsZS5yc3RcbkBAIC0xMDYsMTggJiM0MzsxMDYsOSBAQCBBSSBSZXZpZXdcbiBcbiBGb3IgcGF0Y2hlcyB0aGF0IGFyZSBwdWJsaWNseSBwb3N0ZWQgdG8gREFNT04gbWFpbGluZyBsaXN0XG4gKGRhbW9uQGxpc3RzLmxpbnV4LmRldiksIEFJIHJldmlld3Mgb2YgdGhlIHBhdGNoZXMgd2lsbCBiZSBhdmFpbGFibGUgYXRcbi1zYXNoaWtvLmRldi4gIFRoZSByZXZpZXdzIGNvdWxkIGFsc28gYmUgc2VudCBhcyBtYWlscyB0byB0aGUgYXV0aG9yIG9mIHRoZVxuLXBhdGNoLlxuLVxuLVBhdGNoIGF1dGhvcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEFJIHJldmlld3MgYW5kIHNoYXJlIHRoZWlyIG9waW5pb25zLlxuLVRoZSBzaGFyaW5nIGNvdWxkIGJlIGRvbmUgYXMgYSByZXBseSB0byB0aGUgbWFpbCB0aHJlYWQuICBDb25zaWRlciByZWR1Y2luZyB0aGVcbi1yZWNpcGllbnRzIGxpc3QgZm9yIHN1Y2ggc2hhcmluZywgc2luY2Ugc29tZSBwZW9wbGUgYXJlIG5vdCByZWFsbHkgaW50ZXJlc3RlZFxuLWluIEFJIHJldmlld3MuICBBcyBhIHJ1bGUgb2YgdGh1bWIsIGRyb3Agc3RhYmxlQHZnZXIua2VybmVsLm9yZyBhbmQgaW5kaXZpZHVhbHNcbi1leGNlcHQgREFNT04gbWFpbnRhaW5lci5cbi1cbi1gaGttbGAgYWxzbyBwcm92aWRlcyBhIGBmZWF0dXJlXG4tXHUwMDNjaHR0cHM6Ly9naXRodWIuY29tL3NqcDM4L2hhY2tlcm1haWwvYmxvYi9tYXN0ZXIvVVNBR0UubWQjZm9yd2FyZGluZy1zYXNoaWtvZGV2LXN0YXR1c2NvbW1lbnRzLXRvLW1haWxpbmctbGlzdFx1MDAzZWBfXG4tZm9yIHN1Y2ggc2hhcmluZy4gIFBsZWFzZSBmZWVsIGZyZWUgdG8gdXNlIHRoZSBmZWF0dXJlLlxuJiM0MztzYXNoaWtvLmRldi4gIFRoZSByZXZpZXdzIHdpbGwgYWxzbyBiZSBzZW50IGFzIHJlcGxpZXMgdG8gdGhlIGF1dGhvciBvZiB0aGVcbiYjNDM7cGF0Y2ggYW5kIHRoZSBtYWlsaW5nIGxpc3QuXG4gXG4tSXQgaXMgb25seSBhbiBvcHRpb25hbCByZWNvbW1lbmRhdGlvbi4gIERBTU9OIG1haW50YWluZXIgY291bGQgYWxzbyBhc2sgYW55XG4tcXVlc3Rpb24gYWJvdXQgdGhlIEFJIHJldmlld3MsIHRob3VnaC5cbiYjNDM7UGF0Y2ggYXV0aG9ycyBhcmUgZW5jb3VyYWdlZCB0byBjaGVjayB0aGUgQUkgcmV2aWV3cyBhbmQgc2hhcmUgdGhlaXIgb3BpbmlvbnNcbiYjNDM7YnkgcmVwbHlpbmcgb24gdGhlIG1haWwgdGhyZWFkLiAgSXQgaXMgb25seSBhbiBvcHRpb25hbCByZWNvbW1lbmRhdGlvbi4gIERBTU9OXG4mIzQzO21haW50YWluZXIgY291bGQgYWxzbyBhc2sgYW55IHF1ZXN0aW9uIGFib3V0IHRoZSBBSSByZXZpZXdzLCB0aG91Z2guXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi42YzBmYjE3NWUzZDIxIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMzczLDggJiM0MzszMzczLDcgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXG4gXHR1bnNpZ25lZCBpbnQgbWF4X3RocmVzO1xuIFx0Ym9vbCBjb3VudF9hZ2UgPSB0cnVlO1xuIFxuLVx0bWF4X3RocmVzID0gYy1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsIC9cbi1cdFx0KGMtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gIGMtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsIDogMSk7XG4mIzQzO1x0bWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjLVx1MDAzZWF0dHJzKTtcbiBcdHdoaWxlICh0cnVlKSB7XG4gXHRcdG5yX3JlZ2lvbnMgPSAwO1xuIFx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuQEAgLTM1OTcsMTAgJiM0MzszNTk2LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3Nfd21hcmtfd2FpdF91cyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSlcbiBcbiBcdC8qIGhpZ2hlciB0aGFuIGhpZ2ggd2F0ZXJtYXJrIG9yIGxvd2VyIHRoYW4gbG93IHdhdGVybWFyayAqL1xuIFx0aWYgKG1ldHJpYyBcdTAwM2Ugc2NoZW1lLVx1MDAzZXdtYXJrcy5oaWdoIHx8IHNjaGVtZS1cdTAwM2V3bWFya3MubG93IFx1MDAzZSBtZXRyaWMpIHtcbi1cdFx0aWYgKHNjaGVtZS1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuLVx0XHRcdHByX2RlYnVnKFwmIzM0O2RlYWN0aXZhdGUgYSBzY2hlbWUgKCVkKSBmb3IgJXMgd21hcmtcXG5cJiMzNDssXG4tXHRcdFx0XHQgc2NoZW1lLVx1MDAzZWFjdGlvbixcbi1cdFx0XHRcdCBzdHJfaGlnaF9sb3cobWV0cmljIFx1MDAzZSBzY2hlbWUtXHUwMDNld21hcmtzLmhpZ2gpKTtcbiBcdFx0c2NoZW1lLVx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIHNjaGVtZS1cdTAwM2V3bWFya3MuaW50ZXJ2YWw7XG4gXHR9XG5AQCAtMzYxMCw4ICYjNDM7MzYwNSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3dtYXJrX3dhaXRfdXMoc3RydWN0IGRhbW9zICpzY2hlbWUpXG4gXHRcdFx0IXNjaGVtZS1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuIFx0XHRyZXR1cm4gc2NoZW1lLVx1MDAzZXdtYXJrcy5pbnRlcnZhbDtcbiBcbi1cdGlmICghc2NoZW1lLVx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXG4tXHRcdHByX2RlYnVnKFwmIzM0O2FjdGl2YXRlIGEgc2NoZW1lICglZClcXG5cJiMzNDssIHNjaGVtZS1cdTAwM2VhY3Rpb24pO1xuIFx0c2NoZW1lLVx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQgPSB0cnVlO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTM3NTQsOCAmIzQzOzM3NDcsNiBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiBcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCA9IGRhdGE7XG4gXHR1bnNpZ25lZCBsb25nIHN6X2xpbWl0ID0gMDtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O2tkYW1vbmQgKCVkKSBzdGFydHNcXG5cJiMzNDssIGN1cnJlbnQtXHUwMDNlcGlkKTtcbi1cbiBcdG11dGV4X2xvY2soXHUwMDI2Y3R4LVx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XG4gXHRjdHgtXHUwMDNlY2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IGZhbHNlO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xuQEAgLTM5MDMsNyAmIzQzOzM4OTQsNiBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiBcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xuIFx0ZGFtb3Nfd2Fsa19jYW5jZWwoY3R4KTtcbiBcbi1cdHByX2RlYnVnKFwmIzM0O2tkYW1vbmQgKCVkKSBmaW5pc2hlc1xcblwmIzM0OywgY3VycmVudC1cdTAwM2VwaWQpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbiBcdGN0eC1cdTAwM2VrZGFtb25kID0gTlVMTDtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IDRhNTM2ZDQxY2RiMmQuLjUxMWYyODU2ZDM0M2MgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTQ2MywxMSAmIzQzOzQ2MywxMiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpvbGRfcmFuZ2VzLCBpbnQgc3pfb2xkX3JhbmdlcyxcbiBcdFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKm5ld19yYW5nZXMsIGludCBzel9uZXdfcmFuZ2VzLFxuIFx0XHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3osXG4tXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpleHBlY3RfcmFuZ2VzLCBpbnQgc3pfZXhwZWN0X3JhbmdlcylcbiYjNDM7XHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpleHBlY3RfcmFuZ2VzLCBpbnQgc3pfZXhwZWN0X3JhbmdlcyxcbiYjNDM7XHRcdGludCBleHBlY3RfZXJyKVxuIHtcbiBcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4gXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuLVx0aW50IGk7XG4mIzQzO1x0aW50IGksIGVycjtcbiBcbiBcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XG4gXHRpZiAoIXQpXG5AQCAtNDgxLDcgJiM0Mzs0ODIsOCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4gXHR9XG4gXG4tXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCBuZXdfcmFuZ2VzLCBzel9uZXdfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTtcbiYjNDM7XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyh0LCBuZXdfcmFuZ2VzLCBzel9uZXdfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTtcbiYjNDM7XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZXJyLCBleHBlY3RfZXJyKTtcbiBcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCBzel9leHBlY3RfcmFuZ2VzKTtcbiBcdGlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IHN6X2V4cGVjdF9yYW5nZXMpIHtcbkBAIC01MTAsNyAmIzQzOzUxMiw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbiBcdFx0XHR7LnN0YXJ0ID0gNSwgLmVuZCA9IDE1fSxcbiBcdFx0XHR7LnN0YXJ0ID0gMTUsIC5lbmQgPSAyNX0sXG4tXHRcdFx0fSwgMik7XG4mIzQzO1x0XHRcdH0sIDIsIDApO1xuIFx0LyogVW4taW50ZXJzZWN0aW5nIHJlZ2lvbnMgc2hvdWxkIGJlIHJlbW92ZWQuICovXG4gXHRkYW1vbl90ZXN0X3NldF9yZWdpb25zX2Zvcih0ZXN0LFxuIFx0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbkBAIC01MjMsNyAmIzQzOzUyNSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdDEsXG4gXHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe1xuIFx0XHRcdHsuc3RhcnQgPSAxOCwgLmVuZCA9IDIzfSxcbi1cdFx0XHR9LCAxKTtcbiYjNDM7XHRcdFx0fSwgMSwgMCk7XG4gXHQvKlxuIFx0ICogSG9sZXMgc2hvdWxkIGJlIGZpbGxlZCB1cCB3aXRoIG5ldyByZWdpb25zLlxuIFx0ICpcbkBAIC01NDQsNyAmIzQzOzU0Niw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdHsuc3RhcnQgPSA4LCAuZW5kID0gMTZ9LFxuIFx0XHRcdHsuc3RhcnQgPSAxNiwgLmVuZCA9IDI0fSxcbiBcdFx0XHR7LnN0YXJ0ID0gMjQsIC5lbmQgPSAyOH0sXG4tXHRcdFx0fSwgMyk7XG4mIzQzO1x0XHRcdH0sIDMsIDApO1xuIFx0LypcbiBcdCAqIE5ldyByZWdpb25zIHNob3VsZCBiZSBhYmxlIHRvIGJlIGFwcGVuZGVkLlxuIFx0ICpcbkBAIC01NjYsNyAmIzQzOzU2OCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdHsuc3RhcnQgPSAwLCAuZW5kID0gNH0sXG4gXHRcdFx0ey5zdGFydCA9IDQsIC5lbmQgPSAxNX0sXG4gXHRcdFx0ey5zdGFydCA9IDI1LCAuZW5kID0gNDB9LFxuLVx0XHRcdH0sIDMpO1xuJiM0MztcdFx0XHR9LCAzLCAwKTtcbiBcdC8qXG4gXHQgKiBOZXcgcmVnaW9ucyBzaG91bGQgYmUgYWJsZSB0byBiZSBpbnNlcnRlZC5cbiBcdCAqXG5AQCAtNTg5LDcgJiM0Mzs1OTEsNDggQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdFx0ey5zdGFydCA9IDAsIC5lbmQgPSAxNX0sXG4gXHRcdFx0ey5zdGFydCA9IDI1LCAuZW5kID0gNDB9LFxuIFx0XHRcdHsuc3RhcnQgPSA0NCwgLmVuZCA9IDUwfSxcbi1cdFx0XHR9LCAzKTtcbiYjNDM7XHRcdFx0fSwgMywgMCk7XG4mIzQzO1x0LyogWmVybyBzaXplIHJlZ2lvbnMgc2hvdWxkIHJldHVybiAtRUlOVkFMLiAqL1xuJiM0MztcdGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHRlc3QsXG4mIzQzO1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLFxuJiM0MztcdFx0XHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7XG4mIzQzO1x0XHRcdHsuc3RhcnQgPSA0MiwgLmVuZCA9IDQyfSxcbiYjNDM7XHRcdFx0fSwgMSwgMSxcbiYjNDM7XHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpO1xuJiM0MztcdC8qIE5lZ2F0aXZlIHNpemUgcmVnaW9ucyBzaG91bGQgcmV0dXJuIC1FSU5WQUwuICovXG4mIzQzO1x0ZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3IodGVzdCxcbiYjNDM7XHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsXG4mIzQzO1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbiYjNDM7XHRcdFx0ey5zdGFydCA9IDQyLCAuZW5kID0gMjF9LFxuJiM0MztcdFx0XHR9LCAxLCAxLFxuJiM0MztcdFx0XHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCwgLUVJTlZBTCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZWdpb25zIHJlc3VsdGluZyBpbiBzYW1lIHJlZ2lvbiBhZnRlciBhbGluZ21lbnQgc2hvdWxkIHJldHVyblxuJiM0MztcdCAqIC1FSU5WQUwuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3IodGVzdCxcbiYjNDM7XHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsXG4mIzQzO1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbiYjNDM7XHRcdFx0ey5zdGFydCA9IDEwLCAuZW5kID0gMjB9LFxuJiM0MztcdFx0XHR7LnN0YXJ0ID0gMjAsIC5lbmQgPSAzMH0sXG4mIzQzO1x0XHRcdH0sIDIsIDQwOTYsXG4mIzQzO1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLCAtRUlOVkFMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHtcbiYjNDM7XHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSAwLFxuJiM0MztcdFx0LmFnZ3JfaW50ZXJ2YWwgPSAwLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdC8qIFplcm8gYWdncmVnYXRpb24gaW50ZXJ2YWwgZG9lc24mIzM5O3QgY2F1c2UgZGl2aXNpb24gYnkgemVybyAqL1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSwgMSk7XG4mIzQzO1xuJiM0MztcdC8qIFRvbyBsYXJnZSBhZ2dyZWdhdGlvbiBpbnRlcnZhbCBkb2VzbiYjMzk7dCBjYXVzZSBvdmVyZmxvdyAqL1xuJiM0MztcdGF0dHJzLmFnZ3JfaW50ZXJ2YWwgPSAodW5zaWduZWQgbG9uZylVSU5UX01BWCAmIzQzOyAxO1xuJiM0MztcdEtVTklUX0VYUEVDVF9HRSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSwgMCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0xFKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCBVSU5UX01BWCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcbkBAIC0xNjQzLDYgJiM0MzsxNjg2LDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9yZWdpb25zKSxcbiYjNDM7XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfYXR0cnMpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X212c3VtKSxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuY1xuaW5kZXggNDk3Njc3NWZlMjc2Mi4uNWNjZjcwZGM4YTMwYiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3ZhZGRyLmNcbkBAIC0xOTIsMTkgJiM0MzsxOTIsMTAgQEAgc3RhdGljIGludCBkYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gc3RhdGljIHZvaWQgX19kYW1vbl92YV9pbml0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuIHtcbi1cdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xuIFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXTtcbi1cdGludCB0aWR4ID0gMDtcbiBcbi1cdGlmIChkYW1vbl92YV90aHJlZV9yZWdpb25zKHQsIHJlZ2lvbnMpKSB7XG4tXHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0aSwgY3R4KSB7XG4tXHRcdFx0aWYgKHRpID09IHQpXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR0aWR4JiM0MzsmIzQzOztcbi1cdFx0fVxuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gZ2V0IHRocmVlIHJlZ2lvbnMgb2YgJWR0aCB0YXJnZXRcXG5cJiMzNDssIHRpZHgpO1xuJiM0MztcdGlmIChkYW1vbl92YV90aHJlZV9yZWdpb25zKHQsIHJlZ2lvbnMpKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCByZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaFxuaW5kZXggZjdmYjk0Yjg0ZTcxNi4uODY5MGFlZjFlNDM2YyAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaFxuQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgdGVzdF9nb2FsKClcbiBcdGVuc3VyZV93cml0ZV9zdWNjIFwmIzM0OyRmcGF0aFwmIzM0OyBcJiMzNDthY3RpdmVfbWVtX2JwXCYjMzQ7IFwmIzM0O3ZhbGlkIGlucHV0XCYjMzQ7XG4gXHRlbnN1cmVfd3JpdGVfc3VjYyBcJiMzNDskZnBhdGhcJiMzNDsgXCYjMzQ7aW5hY3RpdmVfbWVtX2JwXCYjMzQ7IFwmIzM0O3ZhbGlkIGlucHV0XCYjMzQ7XG4gXHRlbnN1cmVfd3JpdGVfc3VjYyBcJiMzNDskZnBhdGhcJiMzNDsgXCYjMzQ7bm9kZV9lbGlnaWJsZV9tZW1fYnBcJiMzNDsgXCYjMzQ7dmFsaWQgaW5wdXRcJiMzNDtcbiYjNDM7XHRlbnN1cmVfd3JpdGVfc3VjYyBcJiMzNDskZnBhdGhcJiMzNDsgXCYjMzQ7aHVnZXBhZ2VfbWVtX2JwXCYjMzQ7IFwmIzM0O3ZhbGlkIGlucHV0XCYjMzQ7XG4gXHRlbnN1cmVfd3JpdGVfZmFpbCBcJiMzNDskZnBhdGhcJiMzNDsgXCYjMzQ7Zm9vXCYjMzQ7IFwmIzM0O2ludmFsaWQgaW5wdXRcJiMzNDtcbiBcdGVuc3VyZV9maWxlIFwmIzM0OyRnb2FsX2Rpci9uaWRcJiMzNDsgXCYjMzQ7ZXhpc3RcJiMzNDsgXCYjMzQ7NjAwXCYjMzQ7XG4gXHRlbnN1cmVfZmlsZSBcJiMzNDskZ29hbF9kaXIvcGF0aFwmIzM0OyBcJiMzNDtleGlzdFwmIzM0OyBcJiMzNDs2MDBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfYXR0cnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIGlzc3VlIGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGJ5IHVzaW5nIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCB0byBjYWxjdWxhdGUgYG1heF90aHJlc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIERBTU9OJiMzOTtzIHJlZ2lvbiBtZXJnaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjM2NzNhODlkYTA1MTY4ZWRkNzQ3NmYwNGZhMTljMzVlMzdkZDdiZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDI5IDAwOjUwOjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgppbmRleCBlNjc1YTU3MTQ1ZTM2Li5lOTQ4OGJiNDhkMjNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgpAQCAtMyw3ICYjNDM7Myw3IEBAIERhdGU6CQlNYXIgMjAyMgogQ29udGFjdDoJU0ogUGFyayAmbHQ7c2pAa2VybmVsLm9yZyZndDsKIERlc2NyaXB0aW9uOglJbnRlcmZhY2UgZm9yIERhdGEgQWNjZXNzIE1PTml0b3JpbmcgKERBTU9OKS4gIENvbnRhaW5zIGZpbGVzCiAJCWZvciBjb250cm9sbGluZyBEQU1PTi4gIEZvciBtb3JlIGRldGFpbHMgb24gREFNT04gaXRzZWxmLAotCQlwbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9pbmRleC5yc3QuCiYjNDM7CQlwbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9pbmRleC5yc3QuCiAKIFdoYXQ6CQkvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi8KIERhdGU6CQlNYXIgMjAyMgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0CmluZGV4IGZiMmZhMDBjYzlhYTEuLmE3YzEzNTIzMzkzNzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vbWFpbnRhaW5lci1wcm9maWxlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL21haW50YWluZXItcHJvZmlsZS5yc3QKQEAgLTEwNiwxOCAmIzQzOzEwNiw5IEBAIEFJIFJldmlldwogCiBGb3IgcGF0Y2hlcyB0aGF0IGFyZSBwdWJsaWNseSBwb3N0ZWQgdG8gREFNT04gbWFpbGluZyBsaXN0CiAoZGFtb25AbGlzdHMubGludXguZGV2KSwgQUkgcmV2aWV3cyBvZiB0aGUgcGF0Y2hlcyB3aWxsIGJlIGF2YWlsYWJsZSBhdAotc2FzaGlrby5kZXYuICBUaGUgcmV2aWV3cyBjb3VsZCBhbHNvIGJlIHNlbnQgYXMgbWFpbHMgdG8gdGhlIGF1dGhvciBvZiB0aGUKLXBhdGNoLgotCi1QYXRjaCBhdXRob3JzIGFyZSBlbmNvdXJhZ2VkIHRvIGNoZWNrIHRoZSBBSSByZXZpZXdzIGFuZCBzaGFyZSB0aGVpciBvcGluaW9ucy4KLVRoZSBzaGFyaW5nIGNvdWxkIGJlIGRvbmUgYXMgYSByZXBseSB0byB0aGUgbWFpbCB0aHJlYWQuICBDb25zaWRlciByZWR1Y2luZyB0aGUKLXJlY2lwaWVudHMgbGlzdCBmb3Igc3VjaCBzaGFyaW5nLCBzaW5jZSBzb21lIHBlb3BsZSBhcmUgbm90IHJlYWxseSBpbnRlcmVzdGVkCi1pbiBBSSByZXZpZXdzLiAgQXMgYSBydWxlIG9mIHRodW1iLCBkcm9wIHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcgYW5kIGluZGl2aWR1YWxzCi1leGNlcHQgREFNT04gbWFpbnRhaW5lci4KLQotYGhrbWxgIGFsc28gcHJvdmlkZXMgYSBgZmVhdHVyZQotJmx0O2h0dHBzOi8vZ2l0aHViLmNvbS9zanAzOC9oYWNrZXJtYWlsL2Jsb2IvbWFzdGVyL1VTQUdFLm1kI2ZvcndhcmRpbmctc2FzaGlrb2Rldi1zdGF0dXNjb21tZW50cy10by1tYWlsaW5nLWxpc3QmZ3Q7YF8KLWZvciBzdWNoIHNoYXJpbmcuICBQbGVhc2UgZmVlbCBmcmVlIHRvIHVzZSB0aGUgZmVhdHVyZS4KJiM0MztzYXNoaWtvLmRldi4gIFRoZSByZXZpZXdzIHdpbGwgYWxzbyBiZSBzZW50IGFzIHJlcGxpZXMgdG8gdGhlIGF1dGhvciBvZiB0aGUKJiM0MztwYXRjaCBhbmQgdGhlIG1haWxpbmcgbGlzdC4KIAotSXQgaXMgb25seSBhbiBvcHRpb25hbCByZWNvbW1lbmRhdGlvbi4gIERBTU9OIG1haW50YWluZXIgY291bGQgYWxzbyBhc2sgYW55Ci1xdWVzdGlvbiBhYm91dCB0aGUgQUkgcmV2aWV3cywgdGhvdWdoLgomIzQzO1BhdGNoIGF1dGhvcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEFJIHJldmlld3MgYW5kIHNoYXJlIHRoZWlyIG9waW5pb25zCiYjNDM7YnkgcmVwbHlpbmcgb24gdGhlIG1haWwgdGhyZWFkLiAgSXQgaXMgb25seSBhbiBvcHRpb25hbCByZWNvbW1lbmRhdGlvbi4gIERBTU9OCiYjNDM7bWFpbnRhaW5lciBjb3VsZCBhbHNvIGFzayBhbnkgcXVlc3Rpb24gYWJvdXQgdGhlIEFJIHJldmlld3MsIHRob3VnaC4KZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2NDRkYWY1YTE2NTYwLi42YzBmYjE3NWUzZDIxIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zMzczLDggJiM0MzszMzczLDcgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsCiAJdW5zaWduZWQgaW50IG1heF90aHJlczsKIAlib29sIGNvdW50X2FnZSA9IHRydWU7CiAKLQltYXhfdGhyZXMgPSBjLSZndDthdHRycy5hZ2dyX2ludGVydmFsIC8KLQkJKGMtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbCA/ICBjLSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTsKJiM0MzsJbWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncigmYW1wO2MtJmd0O2F0dHJzKTsKIAl3aGlsZSAodHJ1ZSkgewogCQlucl9yZWdpb25zID0gMDsKIAkJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHsKQEAgLTM1OTcsMTAgJiM0MzszNTk2LDYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb3Nfd21hcmtfd2FpdF91cyhzdHJ1Y3QgZGFtb3MgKnNjaGVtZSkKIAogCS8qIGhpZ2hlciB0aGFuIGhpZ2ggd2F0ZXJtYXJrIG9yIGxvd2VyIHRoYW4gbG93IHdhdGVybWFyayAqLwogCWlmIChtZXRyaWMgJmd0OyBzY2hlbWUtJmd0O3dtYXJrcy5oaWdoIHx8IHNjaGVtZS0mZ3Q7d21hcmtzLmxvdyAmZ3Q7IG1ldHJpYykgewotCQlpZiAoc2NoZW1lLSZndDt3bWFya3MuYWN0aXZhdGVkKQotCQkJcHJfZGVidWcoJiMzNDtkZWFjdGl2YXRlIGEgc2NoZW1lICglZCkgZm9yICVzIHdtYXJrXG4mIzM0OywKLQkJCQkgc2NoZW1lLSZndDthY3Rpb24sCi0JCQkJIHN0cl9oaWdoX2xvdyhtZXRyaWMgJmd0OyBzY2hlbWUtJmd0O3dtYXJrcy5oaWdoKSk7CiAJCXNjaGVtZS0mZ3Q7d21hcmtzLmFjdGl2YXRlZCA9IGZhbHNlOwogCQlyZXR1cm4gc2NoZW1lLSZndDt3bWFya3MuaW50ZXJ2YWw7CiAJfQpAQCAtMzYxMCw4ICYjNDM7MzYwNSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3dtYXJrX3dhaXRfdXMoc3RydWN0IGRhbW9zICpzY2hlbWUpCiAJCQkhc2NoZW1lLSZndDt3bWFya3MuYWN0aXZhdGVkKQogCQlyZXR1cm4gc2NoZW1lLSZndDt3bWFya3MuaW50ZXJ2YWw7CiAKLQlpZiAoIXNjaGVtZS0mZ3Q7d21hcmtzLmFjdGl2YXRlZCkKLQkJcHJfZGVidWcoJiMzNDthY3RpdmF0ZSBhIHNjaGVtZSAoJWQpXG4mIzM0Oywgc2NoZW1lLSZndDthY3Rpb24pOwogCXNjaGVtZS0mZ3Q7d21hcmtzLmFjdGl2YXRlZCA9IHRydWU7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNzU0LDggJiM0MzszNzQ3LDYgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpCiAJc3RydWN0IGRhbW9uX2N0eCAqY3R4ID0gZGF0YTsKIAl1bnNpZ25lZCBsb25nIHN6X2xpbWl0ID0gMDsKIAotCXByX2RlYnVnKCYjMzQ7a2RhbW9uZCAoJWQpIHN0YXJ0c1xuJiMzNDssIGN1cnJlbnQtJmd0O3BpZCk7Ci0KIAltdXRleF9sb2NrKCZhbXA7Y3R4LSZndDtjYWxsX2NvbnRyb2xzX2xvY2spOwogCWN0eC0mZ3Q7Y2FsbF9jb250cm9sc19vYnNvbGV0ZSA9IGZhbHNlOwogCW11dGV4X3VubG9jaygmYW1wO2N0eC0mZ3Q7Y2FsbF9jb250cm9sc19sb2NrKTsKQEAgLTM5MDMsNyAmIzQzOzM4OTQsNiBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSkKIAltdXRleF91bmxvY2soJmFtcDtjdHgtJmd0O3dhbGtfY29udHJvbF9sb2NrKTsKIAlkYW1vc193YWxrX2NhbmNlbChjdHgpOwogCi0JcHJfZGVidWcoJiMzNDtrZGFtb25kICglZCkgZmluaXNoZXNcbiYjMzQ7LCBjdXJyZW50LSZndDtwaWQpOwogCW11dGV4X2xvY2soJmFtcDtjdHgtJmd0O2tkYW1vbmRfbG9jayk7CiAJY3R4LSZndDtrZGFtb25kID0gTlVMTDsKIAltdXRleF91bmxvY2soJmFtcDtjdHgtJmd0O2tkYW1vbmRfbG9jayk7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggNGE1MzZkNDFjZGIyZC4uNTExZjI4NTZkMzQzYyAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtNDYzLDExICYjNDM7NDYzLDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCwKIAkJc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKm9sZF9yYW5nZXMsIGludCBzel9vbGRfcmFuZ2VzLAogCQlzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqbmV3X3JhbmdlcywgaW50IHN6X25ld19yYW5nZXMsCiAJCXVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeiwKLQkJc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKmV4cGVjdF9yYW5nZXMsIGludCBzel9leHBlY3RfcmFuZ2VzKQomIzQzOwkJc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKmV4cGVjdF9yYW5nZXMsIGludCBzel9leHBlY3RfcmFuZ2VzLAomIzQzOwkJaW50IGV4cGVjdF9lcnIpCiB7CiAJc3RydWN0IGRhbW9uX3RhcmdldCAqdDsKIAlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyOwotCWludCBpOwomIzQzOwlpbnQgaSwgZXJyOwogCiAJdCA9IGRhbW9uX25ld190YXJnZXQoKTsKIAlpZiAoIXQpCkBAIC00ODEsNyAmIzQzOzQ4Miw4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCwKIAkJZGFtb25fYWRkX3JlZ2lvbihyLCB0KTsKIAl9CiAKLQlkYW1vbl9zZXRfcmVnaW9ucyh0LCBuZXdfcmFuZ2VzLCBzel9uZXdfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTsKJiM0MzsJZXJyID0gZGFtb25fc2V0X3JlZ2lvbnModCwgbmV3X3Jhbmdlcywgc3pfbmV3X3JhbmdlcywgbWluX3JlZ2lvbl9zeik7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIGV4cGVjdF9lcnIpOwogCiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIHN6X2V4cGVjdF9yYW5nZXMpOwogCWlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IHN6X2V4cGVjdF9yYW5nZXMpIHsKQEAgLTUxMCw3ICYjNDM7NTEyLDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCQkoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7CiAJCQl7LnN0YXJ0ID0gNSwgLmVuZCA9IDE1fSwKIAkJCXsuc3RhcnQgPSAxNSwgLmVuZCA9IDI1fSwKLQkJCX0sIDIpOwomIzQzOwkJCX0sIDIsIDApOwogCS8qIFVuLWludGVyc2VjdGluZyByZWdpb25zIHNob3VsZCBiZSByZW1vdmVkLiAqLwogCWRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHRlc3QsCiAJCQkoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7CkBAIC01MjMsNyAmIzQzOzUyNSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkJMSwKIAkJCShzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXsKIAkJCXsuc3RhcnQgPSAxOCwgLmVuZCA9IDIzfSwKLQkJCX0sIDEpOwomIzQzOwkJCX0sIDEsIDApOwogCS8qCiAJICogSG9sZXMgc2hvdWxkIGJlIGZpbGxlZCB1cCB3aXRoIG5ldyByZWdpb25zLgogCSAqCkBAIC01NDQsNyAmIzQzOzU0Niw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkJey5zdGFydCA9IDgsIC5lbmQgPSAxNn0sCiAJCQl7LnN0YXJ0ID0gMTYsIC5lbmQgPSAyNH0sCiAJCQl7LnN0YXJ0ID0gMjQsIC5lbmQgPSAyOH0sCi0JCQl9LCAzKTsKJiM0MzsJCQl9LCAzLCAwKTsKIAkvKgogCSAqIE5ldyByZWdpb25zIHNob3VsZCBiZSBhYmxlIHRvIGJlIGFwcGVuZGVkLgogCSAqCkBAIC01NjYsNyAmIzQzOzU2OCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkJey5zdGFydCA9IDAsIC5lbmQgPSA0fSwKIAkJCXsuc3RhcnQgPSA0LCAuZW5kID0gMTV9LAogCQkJey5zdGFydCA9IDI1LCAuZW5kID0gNDB9LAotCQkJfSwgMyk7CiYjNDM7CQkJfSwgMywgMCk7CiAJLyoKIAkgKiBOZXcgcmVnaW9ucyBzaG91bGQgYmUgYWJsZSB0byBiZSBpbnNlcnRlZC4KIAkgKgpAQCAtNTg5LDcgJiM0Mzs1OTEsNDggQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCQl7LnN0YXJ0ID0gMCwgLmVuZCA9IDE1fSwKIAkJCXsuc3RhcnQgPSAyNSwgLmVuZCA9IDQwfSwKIAkJCXsuc3RhcnQgPSA0NCwgLmVuZCA9IDUwfSwKLQkJCX0sIDMpOwomIzQzOwkJCX0sIDMsIDApOwomIzQzOwkvKiBaZXJvIHNpemUgcmVnaW9ucyBzaG91bGQgcmV0dXJuIC1FSU5WQUwuICovCiYjNDM7CWRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHRlc3QsCiYjNDM7CQkJKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsCiYjNDM7CQkJKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pewomIzQzOwkJCXsuc3RhcnQgPSA0MiwgLmVuZCA9IDQyfSwKJiM0MzsJCQl9LCAxLCAxLAomIzQzOwkJCShzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLCAtRUlOVkFMKTsKJiM0MzsJLyogTmVnYXRpdmUgc2l6ZSByZWdpb25zIHNob3VsZCByZXR1cm4gLUVJTlZBTC4gKi8KJiM0MzsJZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3IodGVzdCwKJiM0MzsJCQkoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCwKJiM0MzsJCQkoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7CiYjNDM7CQkJey5zdGFydCA9IDQyLCAuZW5kID0gMjF9LAomIzQzOwkJCX0sIDEsIDEsCiYjNDM7CQkJKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpOwomIzQzOwkvKgomIzQzOwkgKiBSZWdpb25zIHJlc3VsdGluZyBpbiBzYW1lIHJlZ2lvbiBhZnRlciBhbGluZ21lbnQgc2hvdWxkIHJldHVybgomIzQzOwkgKiAtRUlOVkFMLgomIzQzOwkgKi8KJiM0MzsJZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3IodGVzdCwKJiM0MzsJCQkoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCwKJiM0MzsJCQkoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7CiYjNDM7CQkJey5zdGFydCA9IDEwLCAuZW5kID0gMjB9LAomIzQzOwkJCXsuc3RhcnQgPSAyMCwgLmVuZCA9IDMwfSwKJiM0MzsJCQl9LCAyLCA0MDk2LAomIzQzOwkJCShzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLCAtRUlOVkFMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKHN0cnVjdCBrdW5pdCAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHsKJiM0MzsJCS5zYW1wbGVfaW50ZXJ2YWwgPSAwLAomIzQzOwkJLmFnZ3JfaW50ZXJ2YWwgPSAwLAomIzQzOwl9OwomIzQzOwomIzQzOwkvKiBaZXJvIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJiMzOTt0IGNhdXNlIGRpdmlzaW9uIGJ5IHplcm8gKi8KJiM0MzsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDthdHRycyksIDEpOwomIzQzOwomIzQzOwkvKiBUb28gbGFyZ2UgYWdncmVnYXRpb24gaW50ZXJ2YWwgZG9lc24mIzM5O3QgY2F1c2Ugb3ZlcmZsb3cgKi8KJiM0MzsJYXR0cnMuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICYjNDM7IDE7CiYjNDM7CUtVTklUX0VYUEVDVF9HRSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKCZhbXA7YXR0cnMpLCAwKTsKJiM0MzsJS1VOSVRfRVhQRUNUX0xFKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDthdHRycyksIFVJTlRfTUFYKTsKIH0KIAogc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KQpAQCAtMTY0Myw2ICYjNDM7MTY4Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7CiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLAogCUtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfcmVnaW9ucyksCiYjNDM7CUtVTklUX0NBU0UoZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbXZzdW0pLApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmMKaW5kZXggNDk3Njc3NWZlMjc2Mi4uNWNjZjcwZGM4YTMwYiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdmFkZHIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jCkBAIC0xOTIsMTkgJiM0MzsxOTIsMTAgQEAgc3RhdGljIGludCBkYW1vbl92YV90aHJlZV9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiBzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2luaXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsCiAJCQkJICAgICBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KQogewotCXN0cnVjdCBkYW1vbl90YXJnZXQgKnRpOwogCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIHJlZ2lvbnNbM107Ci0JaW50IHRpZHggPSAwOwogCi0JaWYgKGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnModCwgcmVnaW9ucykpIHsKLQkJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHRpLCBjdHgpIHsKLQkJCWlmICh0aSA9PSB0KQotCQkJCWJyZWFrOwotCQkJdGlkeCYjNDM7JiM0Mzs7Ci0JCX0KLQkJcHJfZGVidWcoJiMzNDtGYWlsZWQgdG8gZ2V0IHRocmVlIHJlZ2lvbnMgb2YgJWR0aCB0YXJnZXRcbiYjMzQ7LCB0aWR4KTsKJiM0MzsJaWYgKGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnModCwgcmVnaW9ucykpCiAJCXJldHVybjsKLQl9CiAKIAlkYW1vbl9zZXRfcmVnaW9ucyh0LCByZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2gKaW5kZXggZjdmYjk0Yjg0ZTcxNi4uODY5MGFlZjFlNDM2YyAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2gKQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgdGVzdF9nb2FsKCkKIAllbnN1cmVfd3JpdGVfc3VjYyAmIzM0OyRmcGF0aCYjMzQ7ICYjMzQ7YWN0aXZlX21lbV9icCYjMzQ7ICYjMzQ7dmFsaWQgaW5wdXQmIzM0OwogCWVuc3VyZV93cml0ZV9zdWNjICYjMzQ7JGZwYXRoJiMzNDsgJiMzNDtpbmFjdGl2ZV9tZW1fYnAmIzM0OyAmIzM0O3ZhbGlkIGlucHV0JiMzNDsKIAllbnN1cmVfd3JpdGVfc3VjYyAmIzM0OyRmcGF0aCYjMzQ7ICYjMzQ7bm9kZV9lbGlnaWJsZV9tZW1fYnAmIzM0OyAmIzM0O3ZhbGlkIGlucHV0JiMzNDsKJiM0MzsJZW5zdXJlX3dyaXRlX3N1Y2MgJiMzNDskZnBhdGgmIzM0OyAmIzM0O2h1Z2VwYWdlX21lbV9icCYjMzQ7ICYjMzQ7dmFsaWQgaW5wdXQmIzM0OwogCWVuc3VyZV93cml0ZV9mYWlsICYjMzQ7JGZwYXRoJiMzNDsgJiMzNDtmb28mIzM0OyAmIzM0O2ludmFsaWQgaW5wdXQmIzM0OwogCWVuc3VyZV9maWxlICYjMzQ7JGdvYWxfZGlyL25pZCYjMzQ7ICYjMzQ7ZXhpc3QmIzM0OyAmIzM0OzYwMCYjMzQ7CiAJZW5zdXJlX2ZpbGUgJiMzNDskZ29hbF9kaXIvcGF0aCYjMzQ7ICYjMzQ7ZXhpc3QmIzM0OyAmIzM0OzYwMCYjMzQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgREFNT04gcGF0Y2ggZm9yIHRoZSBMaW51eCBrZXJuZWwuIEZpcnN0IGdsYW5jZSwgdGhlcmUmIzM5O3MgZG9jdW1lbnRhdGlvbiB1cGRhdGVzOiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25gIGFuZCBgRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0YC4gR29vZCB0byBzZWUgdGhlIGRvY3VtZW50YXRpb24gaXMgYmVpbmcga2VwdCBjdXJyZW50LgoKTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCBpbiBgbW0vZGFtb24vY29yZS5jYCwgSSBzZWUgYSBmZXcgY2hhbmdlcy4gYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2Agbm93IHVzZXMgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDtjLSZndDthdHRycylgIGluc3RlYWQgb2YgYSBkaXZpc2lvbi4gQWxzbywgc29tZSBgcHJfZGVidWdgIHN0YXRlbWVudHMgYXJlIGJlaW5nIHJlbW92ZWQgZnJvbSBgZGFtb3Nfd21hcmtfd2FpdF91c2AgYW5kIGBrZGFtb25kX2ZuYC4gT2theSwgbm90aGluZyB0b28gcmFkaWNhbCB0aGVyZSwgbGlrZWx5IGp1c3QgY2xlYW5pbmcgdGhpbmdzIHVwLgoKSW4gYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAsIEkgc2VlIGBkYW1vbl90ZXN0X3NldF9yZWdpb25zX2ZvcmAgaGFzIGJlZW4gdXBkYXRlZCB0byBjaGVjayBmb3IgYGV4cGVjdF9lcnJgLCB3aGljaCBpcyB1c2VmdWwgZm9yIHRlc3RpbmcuIEEgbmV3IHRlc3QsIGBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3JgLCBoYXMgYmVlbiBhZGRlZC4gVGhhdCYjMzk7cyBhIGZvY3VzZWQgdGVzdCwgd2hpY2ggaXMgd2hhdCBJJiMzOTtkIGV4cGVjdC4gSW4gYG1tL2RhbW9uL3ZhZGRyLmNgLCBJIHNlZSBzaW1pbGFyIGNsZWFuIHVwIG9mIGRlYnVnZ2luZyBzdGF0ZW1lbnRzLiBBbHNvLCBpdCBhcHBlYXJzIHRoZSB0YXJnZXQgaXRlcmF0aW9uIGluIGBfX2RhbW9uX3ZhX2luaXRfcmVnaW9uc2AgaGFzIGJlZW4gcmVtb3ZlZC4KCkZpbmFsbHksIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaGAsIHRoZXkmIzM5O3ZlIGFkZGVkIGEgdGVzdCBsaW5lIGZvciBgaHVnZXBhZ2VfbWVtX2JwYC4gR29vZC4KCkhvbGQgb24sIHRob3VnaCwgdGhlICpjb3JlKiBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgbW0vZGFtb24vY29yZS5jYCBpczoKCmBgYGMKLQltYXhfdGhyZXMgPSBjLSZndDthdHRycy5hZ2dyX2ludGVydmFsIC8KLQkJKGMtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbCA/ICBjLSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTsKJiM0MzsJbWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncigmYW1wO2MtJmd0O2F0dHJzKTsKYGBgCgpUaGF0JiMzOTtzIHRoZSBpbXBvcnRhbnQgYml0LiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGEgZGl2aXNpb24gd2l0aCBhIGZ1bmN0aW9uIGNhbGwgdG8gYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIGlzIGRvaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHJlcGxhY2VtZW50LiBJJiMzOTtsbCBncmVwIGZvciBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQmIzM5O3MgYWN0dWFsbHkgY2FsY3VsYXRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbnJfc2FtcGxlc19wZXJfYWdnciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA3Mz1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDc4LS8qIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA3OTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwODAtXHRcdGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jPTkyMD1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3NhbXBsZV9icF90b19jb3VudChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTIyLXtcbm1tL2RhbW9uL2NvcmUuYzo5MjM6XHRyZXR1cm4gYnAgKiBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKGF0dHJzKSAvIDEwMDAwO1xubW0vZGFtb24vY29yZS5jLTkyNC19XG4tLVxubW0vZGFtb24vY29yZS5jPTkyNz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3NhbXBsZV9jb3VudF90b19icChcbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTI5LXtcbm1tL2RhbW9uL2NvcmUuYzo5MzA6XHRyZXR1cm4gbXVsdF9mcmFjKGNvdW50LCAxMDAwMCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihhdHRycykpO1xubW0vZGFtb24vY29yZS5jLTkzMS19XG4tLVxubW0vZGFtb24vY29yZS5jPTEzNDI9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM1Ni1cdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXG5tbS9kYW1vbi9jb3JlLmM6MTM1NzpcdG1heF9wcm9iZV9oaXRzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjdHgtXHUwMDNlYXR0cnMpO1xubW0vZGFtb24vY29yZS5jLTEzNTgtXHR3c3VtID0gMDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzM2OD1zdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM3NS1cbm1tL2RhbW9uL2NvcmUuYzozMzc2Olx0bWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjLVx1MDAzZWF0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMzc3LVx0d2hpbGUgKHRydWUpIHtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTMwNS1cdGVyciA9IC1FTk9NRU07XG5tbS9kYW1vbi9scnVfc29ydC5jOjMwNjpcdGhvdF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpICpcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzA3LVx0XHRob3RfdGhyZXNfYWNjZXNzX2ZyZXEgLyAxMDAwO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xMDQ9aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMTUtXHRcdFx0REFNT05fTUFYX1NVQlNDT1JFLFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjExNjpcdFx0XHRkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmMtXHUwMDNlYXR0cnMpKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMTctXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTYyMj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MjktXHQvKiBaZXJvIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJiMzOTt0IGNhdXNlIGRpdmlzaW9uIGJ5IHplcm8gKi9cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MzA6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZhdHRycyksIDEpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYzMS1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjMzLVx0YXR0cnMuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICYjNDM7IDE7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NjM0Olx0S1VOSVRfRVhQRUNUX0dFKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCAwKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MzU6XHRLVU5JVF9FWFBFQ1RfTEUodGVzdCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZhdHRycyksIFVJTlRfTUFYKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MzYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIHdvcmtzLiBJdCYjMzk7cyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgRGFtb24gaGVhZGVyIGZpbGUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgb3V0IGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgIGFyb3VuZCBsaW5lIDEwNzkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyIG9uIHdoYXQgdGhpcyBwYXJhbWV0ZXIgaXMgaW50ZW5kZWQgZm9yIHdpdGhpbiBEQU1PTiwgYW5kIGl0cyByb2xlIGluIHRoZSBtb25pdG9yaW5nIGFuZCBhZ2dyZWdhdGlvbiBwcm9jZXNzLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDcwOlx0aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKTtcbjEwNzE6XHRpbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKTtcbjEwNzI6XHRcbjEwNzM6XHRzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuMTA3NDpcdHtcbjEwNzU6XHRcdHJldHVybiBjdHgtXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19WQUREUiB8fCBjdHgtXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19GVkFERFI7XG4xMDc2Olx0fVxuMTA3NzpcdFxuMTA3ODpcdC8qIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsICovXG4xMDc5Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcbjEwODA6XHRcdFx0Y29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbjEwODE6XHR7XG4xMDgyOlx0XHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcbjEwODM6XHRcdHVuc2lnbmVkIGxvbmcgbnJfc2FtcGxlcztcbjEwODQ6XHRcbjEwODU6XHRcdHNhbXBsZV9pbnRlcnZhbCA9IGF0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcbjEwODY6XHRcdG5yX3NhbXBsZXMgPSBtaW4oYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbCxcbjEwODc6XHRcdFx0XHQodW5zaWduZWQgbG9uZylVSU5UX01BWCk7XG4xMDg4Olx0XHRyZXR1cm4gbnJfc2FtcGxlcyA/IDogMTtcbjEwODk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM0NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDY5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgYW5kIGNsZWFuaW5nIHVwIHNvbWUgZGVidWcgc3RhdGVtZW50cy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyByZXBsYWNpbmcgdGhhdCBgYy0mZ3Q7YXR0cnMuYWdncl9pbnRlcnZhbCAvIChjLSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyBjLSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKWAgY2FsY3VsYXRpb24gd2l0aCBhIGNhbGwgdG8gYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDtjLSZndDthdHRycylgLiBJdCBsb29rcyBsaWtlIHRoZSBuZXcgZnVuY3Rpb24gZG9lcyBhIHNhZmVyIGRpdmlzaW9uLCBjbGFtcGluZyB0aGUgcmVzdWx0IHRvIGBVSU5UX01BWGAgYW5kIGVuc3VyaW5nIGEgbWluaW11bSB2YWx1ZSBvZiAxLiBHb29kLCB0aGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCwgYXMgaXQgcHJldmVudHMgYG1heF90aHJlc2AgZnJvbSBiZWluZyBpbmFwcHJvcHJpYXRlbHkgdHJ1bmNhdGVkIHdoZW4gdGhlIGFnZ3JlZ2F0aW9uIGludGVydmFsIGlzIHZlcnkgbGFyZ2UsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpbiBEQU1PTi4KCkkmIzM5O20gc2VlaW5nIHRoYXQgdGhlIHBhdGNoICpkb2VzbiYjMzk7dCogYWN0dWFsbHkgaW50cm9kdWNlIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBkaXJlY3RseTsgaXQmIzM5O3MgdXNpbmcgYW4gZXhpc3RpbmcgZnVuY3Rpb24gd2l0aGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgLiBBbHNvLCB0aGVyZSYjMzk7cyBzb21lIGNsZWFudXAg4oCTIHJlbW92YWwgb2YgYHByX2RlYnVnYCBjYWxscywgd2hpY2ggaXMgZ2VuZXJhbGx5IHBvc2l0aXZlIGZvciBwZXJmb3JtYW5jZSwgYWx0aG91Z2ggaXQgbWlnaHQgbWFrZSBkZWJ1Z2dpbmcgaGFyZGVyIGluIHRoZSBzaG9ydCB0ZXJtLgoKT2theSwgbGV0JiMzOTtzIGdvIGEgYml0IGRlZXBlci4gIFRoZXJlJiMzOTtzIGEgdGVzdCBjYXNlLCBgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyYCwgd2hpY2ggaXMgZW5jb3VyYWdpbmcg4oCTIGl0IHN1Z2dlc3RzIHRoZSBkZXZlbG9wZXJzIGFyZSBiZWluZyBwcm9hY3RpdmUgYWJvdXQgdGVzdGluZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBUaGUgY2hhbmdlcyB0byBgZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3JgIGFsc28gbG9vayBpbnRlcmVzdGluZywgZXNwZWNpYWxseSB0aGUgYWRkaXRpb24gb2YgYGV4cGVjdF9lcnJgLgoKSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBvdGhlciBhcmVhcyBvZiBjaGFuZ2UgaW4gdGhpcyBwYXRjaDsgbG9va3MgbGlrZSBpdCByZW1vdmVkIHNvbWUgYHByX2RlYnVnYCBmcm9tIGBtbS9kYW1vbi92YWRkci5jYCwgd2hpY2ggaXMgYWxzbyBmaW5lLiBBbmQgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoYCBpbnZvbHZpbmcgYGh1Z2VwYWdlX21lbV9icGAuCgpOb3csIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBpcyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBUaGUgcmVwbGFjZW1lbnQ6CgpgYGBjCi0JbWF4X3RocmVzID0gYy0mZ3Q7YXR0cnMuYWdncl9pbnRlcnZhbCAvCi0JCShjLSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyAgYy0mZ3Q7YXR0cnMuc2FtcGxlX2ludGVydmFsIDogMSk7CiYjNDM7CW1heF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDtjLSZndDthdHRycyk7CmBgYAoKLi4uIGlzIGNsZWFybHkgaW50ZW5kZWQgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93LiAgVGhpcyBtZWFucyB0aGF0IGlmIEkgY2FuIGNyYWZ0IGBhZ2dyX2ludGVydmFsYCBhbmQgYHNhbXBsZV9pbnRlcnZhbGAgdmFsdWVzIHRoYXQgY2F1c2UgdGhlIG9sZCBkaXZpc2lvbiB0byBvdmVyZmxvdywgdGhlIG5ldyBjb2RlIHNob3VsZCBoYW5kbGUgaXQgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIEkmIzM5O2Qgd2FudCB0byB0ZXN0IHRoZSBlZGdlIGNhc2Ugb2Ygd2hlcmUgYGFnZ3JfaW50ZXJ2YWxgIGlzIGxhcmdlIGVub3VnaCB0byBvdmVyZmxvdyB0aGUgZGl2aXNpb24sIGJ1dCB0aGUgbmV3IGBtaW4oLi4uLCBVSU5UX01BWClgIGluIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBrZWVwcyB0aGluZ3Mgc2FuZS4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgY29ybmVyIGNhc2VzIGFyb3VuZCB0aGUgYD8gOiAxYCBpbiB0aGUgc2FtcGxlX2ludGVydmFsIGNoZWNrLCBhcyB3ZWxsIGFzIHplcm8gYW5kIG5lZ2F0aXZlIHZhbHVlcyBmb3IgdGhpcyBhbmQgdGhlIGFnZ3JfaW50ZXJ2YWwuCgpCdXQsIGlzIHRoaXMgdGhlIG9ubHkgZnVuY3Rpb25hbCBjaGFuZ2U/IE5vLiBUaGUgcGF0Y2ggKmFsc28qIGNoYW5nZXMgYGRhbW9uX3NldF9yZWdpb25zYC4gVGhlIG5ldyB0ZXN0cyBmb3IgYGRhbW9uX3NldF9yZWdpb25zYCByZXR1cm5pbmcgYC1FSU5WQUxgIGZvciB6ZXJvIHNpemUsIG5lZ2F0aXZlIHNpemUsIGFuZCByZWdpb25zIHJlc3VsdGluZyBpbiB0aGUgc2FtZSByZWdpb24gYWZ0ZXIgYWxpZ25tZW50LiBUaGlzIHN1Z2dlc3RzIGEgbW9yZSByb2J1c3QgdmFsaWRhdGlvbiBvZiByZWdpb24gZGVmaW5pdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB2ZXJ5IGNsb3NlbHkgYXQgdGhlIGNvZGUgaW4gYGRhbW9uX3NldF9yZWdpb25zYCB0byBzZWUgKmhvdyogdGhlc2UgaW52YWxpZCBjYXNlcyBhcmUgYmVpbmcgaGFuZGxlZCBub3cuIEkgc3VzcGVjdCBteSBmdXp6aW5nIHdpbGwgbmVlZCB0byBjb3ZlciB0aGVzZSB0ZXN0cywgdG9vLCBjaGVja2luZyBmb3IgdGhlIGNvcnJlY3QgZXJyb3IgY29kZSByZXR1cm5zLgoKQWxyaWdodC4gVGltZSB0byBwdXQgdGhpcyBpbnRvIHByYWN0aWNlIGFuZCBwdXQgaXQgdGhyb3VnaCBhIGZ1enplci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9Mzg9c3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC01MC0gKlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjUxOiAqIEZvciBhbnkgdXNlIGNhc2UsIEBhciBzaG91bGQgYmUgbm9uLXplcm8gcG9zaXRpdmUgc2l6ZS4gIGRhbW9uX3NldF9yZWdpb25zKClcbmluY2x1ZGUvbGludXgvZGFtb24uaC01Mi0gKiBkb2VzIHRoZSB2YWxpZGF0aW9uLlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDI2PXVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDI4LVxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMjk6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAzMC1cdFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9NDQ1PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00NjYtLypcbm1tL2RhbW9uL2NvcmUuYzo0Njc6ICogZGFtb25fc2V0X3JlZ2lvbnMoKSAtIFNldCByZWdpb25zIG9mIGEgdGFyZ2V0IGZvciBnaXZlbiBhZGRyZXNzIHJhbmdlcy5cbm1tL2RhbW9uL2NvcmUuYy00NjgtICogQHQ6XHRcdHRoZSBnaXZlbiB0YXJnZXQuXG4tLVxubW0vZGFtb24vY29yZS5jLTQ3Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0Nzg6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtNDc5LVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTE1MjY9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTU1LVx0cmFuZ2VzW2kmIzQzOyYjNDM7XS5lbmQgPSBkYW1vbl9sYXN0X3JlZ2lvbihzcmMpLVx1MDAzZWFyLmVuZDtcbm1tL2RhbW9uL2NvcmUuYzoxNTU2Olx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnMoZHN0LCByYW5nZXMsIGksIHNyY19taW5fcmVnaW9uX3N6KTtcbm1tL2RhbW9uL2NvcmUuYy0xNTU3LVx0a3ZmcmVlKHJhbmdlcyk7XG4tLVxubW0vZGFtb24vY29yZS5jPTM5NzI9aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTgzLVx0YWRkcl9yYW5nZS5lbmQgPSAqZW5kO1xubW0vZGFtb24vY29yZS5jOjM5ODQ6XHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXHUwMDI2YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7XG5tbS9kYW1vbi9jb3JlLmMtMzk4NS19XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDAwPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwMjEtXHR9XG5tbS9kYW1vbi9zeXNmcy5jOjIwMjI6XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyh0LCByYW5nZXMsIHN5c2ZzX3JlZ2lvbnMtXHUwMDNlbnIsIG1pbl9yZWdpb25fc3opO1xubW0vZGFtb24vc3lzZnMuYy0yMDIzLW91dDpcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9NDYyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDg0LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjQ4NTpcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKHQsIG5ld19yYW5nZXMsIHN6X25ld19yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQ4Ni1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIGV4cGVjdF9lcnIpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg9OTA9c3RhdGljIHN0cnVjdCBkYW1vbl9yZWdpb24gKl9fbnRoX3JlZ2lvbl9vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBpbnQgaWR4KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTAzLS8qXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjEwNDogKiBUZXN0ICYjMzk7ZGFtb25fc2V0X3JlZ2lvbnMoKSYjMzk7XG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwNS0gKlxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTE4LSAqIHJlZ2lvbnMuICBUaGUgdXBkYXRlIG9mIGN1cnJlbnQgdGFyZ2V0IHJlZ2lvbnMgaXMgdGhlIHJvbGUgb2Zcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTE5OiAqICYjMzk7ZGFtb25fc2V0X3JlZ2lvbnMoKSYjMzk7LlxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xMjAtICpcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTEyNT1zdGF0aWMgdm9pZCBkYW1vbl9kb190ZXN0X2FwcGx5X3RocmVlX3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0LFxuLS1cbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTQ3LVx0fVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNDg6XHRpZiAoZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBucl9yZWdpb25zIC8gMixcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTQ5LVx0XHRcdFx0REFNT05fTUlOX1JFR0lPTl9TWikpIHtcbi0tXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE1MS1cdFx0ZGFtb25fZGVzdHJveV90YXJnZXQodCwgTlVMTCk7XG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE1MjpcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtkYW1vbl9zZXRfcmVnaW9ucygpIGZhaWxcJiMzNDspO1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTMtXHR9XG4tLVxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTUtXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE1NjpcdGlmIChkYW1vbl9zZXRfcmVnaW9ucyh0LCB0aHJlZV9yZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKSkge1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTctXHRcdGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHQsIE5VTEwpO1xubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTg6XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c2Vjb25kIGRhbW9uX3NldF9yZWdpb25zKCkgZmFpbFwmIzM0Oyk7XG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE1OS1cdH1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTE5Mj1zdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2luaXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vdmFkZHIuYy0xOTktXG5tbS9kYW1vbi92YWRkci5jOjIwMDpcdGRhbW9uX3NldF9yZWdpb25zKHQsIHJlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xubW0vZGFtb24vdmFkZHIuYy0yMDEtfVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9MjE4PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3VwZGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vdmFkZHIuYy0yMjUtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi92YWRkci5jOjIyNjpcdFx0ZGFtb25fc2V0X3JlZ2lvbnModCwgdGhyZWVfcmVnaW9ucywgMywgREFNT05fTUlOX1JFR0lPTl9TWik7XG5tbS9kYW1vbi92YWRkci5jLTIyNy1cdH1cbi0tXG5zYW1wbGVzL2RhbW9uL210aWVyLmM9NzM9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxuLS1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xMjgtXG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTI5Olx0cmV0ID0gZGFtb25fc2V0X3JlZ2lvbnModGFyZ2V0LCBcdTAwMjZyYW5nZSwgMSwgREFNT05fTUlOX1JFR0lPTl9TWik7XG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTMwLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIERBTU9OIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBzZWVtcyByZWxhdGl2ZWx5IG1pbm9yLiBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaW50cm9kdWNlIGFueSBzaWduaWZpY2FudCBuZXcgZnVuY3Rpb25hbGl0eSwganVzdCB0d2Vha3MgYXJvdW5kIGV4aXN0aW5nIGNvZGUuIFRoZSBwcmltYXJ5IGFyZWEgb2YgY29uY2VybiwgdGhlIGBkYW1vbl9zZXRfcmVnaW9uc2AgZnVuY3Rpb24sIGlzbiYjMzk7dCBhY3R1YWxseSBtb2RpZmllZCBkaXJlY3RseS4gVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgcmVsYXRlZCB0ZXN0cyBhbmQgS1VuaXQgY29uZmlndXJhdGlvbnMgZm9yIGl0LiBUaGVzZSB0ZXN0cyBhcmUgdmVyaWZ5aW5nIGV4aXN0aW5nIGVycm9yIGNvbmRpdGlvbnMsIHNvIHRoYXQmIzM5O3Mgbm90IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgYWRkaXRpb24gb2YgdGVzdHMgZm9yIGludmFsaWQgaW5wdXRzLCBzdWNoIGFzIHplcm8gb3IgbmVnYXRpdmUtc2l6ZWQgcmVnaW9ucywgb25seSB0ZXN0cyBleGlzdGluZyBlcnJvciBoYW5kbGluZy4gVGhlIHNlbGZ0ZXN0IGNoYW5nZSwgYGh1Z2VwYWdlX21lbV9icGAsIGlzIGFsc28gbm90IHJlbGF0ZWQgdG8gYSBuZXcgYWRkaXRpb24sIGl0IGlzIG9ubHkgdXBkYXRpbmcgYSB0ZXN0IGZvciBleGlzdGluZyBmdW5jdGlvbmFsaXR5LgoKVGhlbiB0aGVyZSBpcyB0aGUgY29yZSBjb2RlIGNoYW5nZToKYGBgYwotCW1heF90aHJlcyA9IGMtJmd0O2F0dHJzLmFnZ3JfaW50ZXJ2YWwgLwotCQkoYy0mZ3Q7YXR0cnMuc2FtcGxlX2ludGVydmFsID8gIGMtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbCA6IDEpOwomIzQzOwltYXhfdGhyZXMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKCZhbXA7Yy0mZ3Q7YXR0cnMpOwpgYGAKClRoaXMgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uIFRoZSBvcmlnaW5hbCBjYWxjdWxhdGlvbiBvZiBgbWF4X3RocmVzYCBpcyBwb3RlbnRpYWxseSBzdXNjZXB0aWJsZSB0byBpbnRlZ2VyIHRydW5jYXRpb24uIFRoZSB1cGRhdGVkIGNhbGN1bGF0aW9uIHVzZXMgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgLCB3aGljaCBjYXBzIHRoZSByZXN1bHQgdG8gYFVJTlRfTUFYYCwgZml4aW5nIGEgcG9zc2libGUgb3ZlcmZsb3cgaXNzdWUuCgpUaGUgY2hhbmdlIGV4aXN0cyBpbiBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBrZGFtb25kX2ZuYCwgc28gaXQmIzM5O3MgYSBjb3JlIERBTU9OIGZ1bmN0aW9uLiBUaGlzIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgbW9yZSBkZWVwbHkuCgpMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIG90aGVyIGNoYW5nZXMuIFRoZXJlJiMzOTtzIHJlbW92YWwgb2YgYHByX2RlYnVnYCBzdGF0ZW1lbnRzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIEtVbml0IHRlc3QgdXBkYXRlcywgYW5kIHNlbGZ0ZXN0IHVwZGF0ZXMuIFRoZXNlIGFyZSwgaW4gZXNzZW5jZSwganVzdCBub2lzZSBjb21wYXJlZCB0byB0aGUgY29yZSBsb2dpYyBjaGFuZ2UuCgpDb25zaWRlcmluZyB0aGUgZnVuY3Rpb25hbCBjaGFuZ2U6CmBgYGMKLQltYXhfdGhyZXMgPSBjLSZndDthdHRycy5hZ2dyX2ludGVydmFsIC8KLQkJKGMtJmd0O2F0dHJzLnNhbXBsZV9pbnRlcnZhbCA/ICBjLSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTsKJiM0MzsJbWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncigmYW1wO2MtJmd0O2F0dHJzKTsKYGBgCkl0JiMzOTtzIGEgb25lLWxpbmUgZml4IGZvciBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24sIGEgcmVsYXRpdmVseSBzbWFsbCBjaGFuZ2UuIEhvd2V2ZXIsIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGlzIGEgY29yZSBmdW5jdGlvbiB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCBoYXMgaXRzIGJlaGF2aW91ciBjaGFuZ2VkIGJ5IHRoaXMgcGF0Y2guCgpJIG11c3QgY29uc2lkZXIgdGhlIGNyaXRlcmlhIGZvciBleGNsdWRpbmcgcGF0Y2hlcyBmcm9tIGZ1enppbmcuIEFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGxvZ2dpbmcsIGNvbnN0YW50IGFkanVzdG1lbnRzIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCBmbG93LCB1bnJlYWNoYWJsZSBjb2RlLCBhbmQgc3BlY2lmaWMgZHJpdmVyIG9yIGhhcmR3YXJlIGNvbnRleHRzIGFyZSBleGNsdWRlZC4gVGhpcyBjaGFuZ2UgaXMgbm90IHB1cmVseSBkZWNvcmF0aXZlIGFuZCAqZG9lcyogYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIGEgY29yZSBEQU1PTiBjb21wb25lbnQuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIGluaXRpYWwgdmFsdWUgb2YgYG1heF90aHJlc2AsIHdoaWNoIGlzIHVzZWQgaW4gYSBsb29wIHRvIGRldGVybWluZSB3aGVuIHRvIG1lcmdlIHJlZ2lvbnMuCgpgYGBjCgltYXhfdGhyZXMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKCZhbXA7Yy0mZ3Q7YXR0cnMpOwoJd2hpbGUgKHRydWUpIHsKCQlucl9yZWdpb25zID0gMDsKCQlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykgewoJCQlkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkKCQkJCW5yX3JlZ2lvbnMmIzQzOyYjNDM7OwoJCX0KCQlpZiAobnJfcmVnaW9ucyAmbHQ7PSBjLSZndDthdHRycy5tYXhfbnJfcmVnaW9ucykKCQkJYnJlYWs7CgkJbWF4X3RocmVzID0gbWF4KDFVLCBtYXhfdGhyZXMgKiAyKTsKYGBgCgpJZiB0aGUgb3JpZ2luYWwgY2FsY3VsYXRpb24gdHJ1bmNhdGVkIGBtYXhfdGhyZXNgIHRvIGEgc21hbGwgdmFsdWUgKGUuZy4sIDAgb3IgMSksIHRoaXMgbG9vcCB3b3VsZCBpdGVyYXRlIGZhciBtb3JlIHRpbWVzIHRoYW4gbmVjZXNzYXJ5LiBOb3csIHRoZSBmaXggc2V0cyBgbWF4X3RocmVzYCB0byBgVUlOVF9NQVhgIChpZiBpdCB3YXMgb3ZlcmZsb3dpbmcpLCB0aGlzIG1heSBjYXVzZSB0aGUgbG9vcCB0byBpdGVyYXRlIGZhciBmZXdlciB0aW1lcy4gVGhpcyBpcyBhIGJlaGF2aW9yYWwgY2hhbmdlLiBUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBzeXNmcyBvciBkZWJ1Z2ZzLCBzbyBpdCYjMzk7cyBmdXp6YWJsZS4KClRoZSBgaHVnZXBhZ2VfbWVtX2JwYCBjaGFuZ2UgaW4gdGhlIHNlbGZ0ZXN0IGlzIGp1c3QgYSB0ZXN0IHVwZGF0ZSBmb3IgYSBmZWF0dXJlIGFscmVhZHkgaW4gdGhlIGtlcm5lbDsgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBhZGQgYW55IG5ldyBmdW5jdGlvbmFsaXR5IHdpdGggaXQuIFNvLCB0aGF0JiMzOTtzIG5vdCByZWxldmFudCBmb3Igb3VyIGZ1enppbmcgYW5hbHlzaXMsCgpTbywgd2hpbGUgdGhlIHBhdGNoIGl0c2VsZiBtaWdodCBiZSBjb25zaWRlcmVkIG1pbm9yLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBpbnRlZ2VyIHRydW5jYXRpb24gZml4IGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIOKAkyB3YXJyYW50cyBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwsIHRoZSBsb2dpYyBpcyByZWFjaGFibGUsIGFuZCB0aGUgY2hhbmdlIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gcGF0aC4KSSYjMzk7bGwgbWFyayB0aGlzIGFzIHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tkYW1vbmRfbWVyZ2VfcmVnaW9ucyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzMxMz1zdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM2Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMzY4OnN0YXRpYyB2b2lkIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLCB1bnNpZ25lZCBpbnQgdGhyZXNob2xkLFxubW0vZGFtb24vY29yZS5jLTMzNjktXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3pfbGltaXQpXG4tLVxubW0vZGFtb24vY29yZS5jPTM0NzM9c3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzUwOS0gKiBtb25pdG9yaW5nIGFjY3VyYWN5IHVuZGVyIHRoZSBkeW5hbWljYWxseSBjaGFuZ2VhYmxlIGFjY2VzcyBwYXR0ZXJucy4gIElmIGFcbm1tL2RhbW9uL2NvcmUuYzozNTEwOiAqIHNwbGl0IHdhcyB1bm5lY2Vzc2FyaWx5IG1hZGUsIGxhdGVyICYjMzk7a2RhbW9uZF9tZXJnZV9yZWdpb25zKCkmIzM5OyB3aWxsIHJldmVydFxubW0vZGFtb24vY29yZS5jLTM1MTEtICogaXQuXG4tLVxubW0vZGFtb24vY29yZS5jPTM3NDU9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTM4MDctXHRcdFx0XHRcdG5leHRfYWdncmVnYXRpb25fc2lzKSkge1xubW0vZGFtb24vY29yZS5jOjM4MDg6XHRcdFx0a2RhbW9uZF9tZXJnZV9yZWdpb25zKGN0eCxcbm1tL2RhbW9uL2NvcmUuYy0zODA5LVx0XHRcdFx0XHRtYXhfbWVyZ2Vfc2NvcmUgLyAxMCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzgxNi1cdFx0ICogZG8ga2RhbW9uZF9jYWxsKCkgYW5kIGtkYW1vbmRfYXBwbHlfc2NoZW1lcygpIGFmdGVyXG5tbS9kYW1vbi9jb3JlLmM6MzgxNzpcdFx0ICoga2RhbW9uZF9tZXJnZV9yZWdpb25zKCkgaWYgcG9zc2libGUsIHRvIHJlZHVjZSBvdmVyaGVhZFxubW0vZGFtb24vY29yZS5jLTM4MTgtXHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgzMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBFbnRyeSBQb2ludCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBEQU1PTiBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBtYWluIGVudHJ5IHBvaW50LiBJdCBsb29rcyBsaWtlIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGdldHMgY2FsbGVkIGZyb20gYGtkYW1vbmRfZm5gLCB3aGljaCBpcyB0aGUgY29yZSB0aHJlYWQgZnVuY3Rpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGUga2V5IHN5bWJvbCwgdGhlIHBvaW50IG9mIGZvY3VzIGZvciB0aGlzLCBzaG91bGQgYmUgZWl0aGVyIGBrZGFtb25kX2ZuYCBvciBga2RhbW9uZF9tZXJnZV9yZWdpb25zYC4KCldhaXQgYSBtaW51dGUsIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gQWgsIHJpZ2h0LCB0aGF0IHRyaWdnZXJzIGEgZ3VpZGVsaW5lIGluIG15IGhlYWQ6ICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zJiMzNDsuIFRoYXQgaW1wbGllcyBga2RhbW9uZF9mbmAgaXMgYWxzbyBsaWtlbHkgc3RhdGljLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwgZm9yIHRoZSBtYWluIGVudHJ5LiBMZXQmIzM5O3MgbWFrZSBzdXJlLCBJIG5lZWQgdG8gY29uZmlybSBga2RhbW9uZF9mbmAmIzM5O3Mgc3RhdGljIGRlc2lnbmF0aW9uIHRvIGJlIHN1cmUuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZGFtb25kX2ZuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD04NTQ9c3RydWN0IGRhbW9uX2N0eCB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTg3NC1cdHVuc2lnbmVkIGxvbmcgbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXM7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODc1Olx0LyogZm9yIHdhaXRpbmcgdW50aWwgdGhlIGV4ZWN1dGlvbiBvZiB0aGUga2RhbW9uZF9mbiBpcyBzdGFydGVkICovXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODc2LVx0c3RydWN0IGNvbXBsZXRpb24ga2RhbW9uZF9zdGFydGVkO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzUtICogYmUgY2FsbGVkIGZyb20gYSBzYWZlIGNvbnRleHRzLiAgU3VjaCBjb250ZXh0cyBpbmNsdWRlIGRhbW9uX2N0eCBzZXR1cCB0aW1lXG5tbS9kYW1vbi9jb3JlLmM6MTAzNjogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwMzctICpcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA0MC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbm1tL2RhbW9uL2NvcmUuYzoxMDQxOiAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxubW0vZGFtb24vY29yZS5jLTEwNDItICogYXBwbHlpbmcgYXV0by10dW5lZCBtb25pdG9yaW5nIGludGVydmFscy5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTA0OD1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA3NC1cdC8qXG5tbS9kYW1vbi9jb3JlLmM6MTA3NTpcdCAqIG5leHRfaW50ZXJ2YWxzX3R1bmVfc2lzIHdpbGwgYmUgdXBkYXRlZCBpbnNpZGUga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwNzYtXHQgKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE5MjQtXG5tbS9kYW1vbi9jb3JlLmM6MTkyNTpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG5tbS9kYW1vbi9jb3JlLmMtMTkyNi1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkzNT1zdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTQyLVx0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcbm1tL2RhbW9uL2NvcmUuYzoxOTQzOlx0XHRjdHgtXHUwMDNla2RhbW9uZCA9IGt0aHJlYWRfcnVuKGtkYW1vbmRfZm4sIGN0eCwgXCYjMzQ7a2RhbW9uZC4lZFwmIzM0Oyxcbm1tL2RhbW9uL2NvcmUuYy0xOTQ0LVx0XHRcdFx0bnJfcnVubmluZ19jdHhzKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAzOT12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDQzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspXG5tbS9kYW1vbi9jb3JlLmM6MjA0NDpcdFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cbm1tL2RhbW9uL2NvcmUuYy0yMDQ1LVx0XHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XG4tLVxubW0vZGFtb24vY29yZS5jPTM3MjM9c3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTM3NDQtICovXG5tbS9kYW1vbi9jb3JlLmM6Mzc0NTpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbm1tL2RhbW9uL2NvcmUuYy0zNzQ2LXtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTYxNT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY0MS0gKiBUaGlzIHRlc3RzIHRoZSBpbnZhcmlhbnQgaW50cm9kdWNlZCBieTpcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNjQyOiAqIGNvbW1pdCAzM2MzZjZjMmI0OGMgKFwmIzM0O21tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVwmIzM0Oylcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjQzLSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjIyMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzOgoKKipIdW50aW5nIGZvciBEeW5hbWljIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlYmFzZSwgYW5kIGl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LCBgX19kYW1vbl9zdGFydGAsIGlzIGEgc3RhdGljIG9uZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIGtub3cgYmV0dGVyIHRoYW4gdG8gYXNzdW1lIHRoYXQmIzM5O3MgdGhlICpvbmx5KiB3YXkgdGhlIGNvZGUgaXMgaW5pdGlhbGl6ZWQgb3IgZXhlY3V0ZWQuIEluIG15IGV4cGVyaWVuY2UsIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gZmluZCBvdGhlciBlbnRyeSBwb2ludHMsIG9uZXMgdGhhdCBtaWdodCBiZSBkeW5hbWljYWxseSBkZXRlcm1pbmVkIG9yIGluaXRpYXRlZCB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zLiBLbm93aW5nIHRoZSBzdGF0aWMgZW50cmllcyBpcyB1c2VmdWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVuZGVkIHN0YXJ0aW5nIHBvaW50IG9mIHRoaXMgY29kZSwgYnV0LCBJIG5lZWQgdG8gZmluZCBhbGwgb2YgdGhlIGVudHJ5IHBvaW50cyBmb3IgYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIEkgd2FudCB0byB1bmNvdmVyIGFueSBvdGhlciBpbml0aWFsaXphdGlvbnMgb3IgZXhlY3V0aW9ucyB0aGF0IGFyZSBub3QgZXhwbGljaXRseSBkZWZpbmVkLiBJdCYjMzk7cyB0aW1lIHRvIHN0YXJ0IHNlYXJjaGluZyBmb3IgdGhlIG1vcmUgZWx1c2l2ZSwgbm9uLXN0YXRpYyBtZXRob2RzIG9yIGVudHJ5IHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3RhcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwOTI9Ym9vbCBkYW1vbl9pbml0aWFsaXplZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDkzOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDk0LXZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzgtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTAzOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTA0MC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkyNT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE5MjctLypcbm1tL2RhbW9uL2NvcmUuYzoxOTI4OiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0xOTI5LSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTkzNC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTM1OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMTkzNi17XG4tLVxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTU5LS8qKlxubW0vZGFtb24vY29yZS5jOjE5NjA6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXG5tbS9kYW1vbi9jb3JlLmMtMTk2MS0gKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTY4LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxubW0vZGFtb24vY29yZS5jOjE5Njk6ICogJiMzOTtkYW1vbl9zdGFydCgpJiMzOTsgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XG5tbS9kYW1vbi9jb3JlLmMtMTk3MC0gKiByZXR1cm5zIC1FQlVTWS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTc0OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTE5NzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTk5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMDAwOlx0XHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xubW0vZGFtb24vY29yZS5jLTIwMDEtXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jPTIwNzA9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA5Ny0gKlxubW0vZGFtb24vY29yZS5jOjIwOTg6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMDk5LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTA2PWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE1Mi0gKlxubW0vZGFtb24vY29yZS5jOjIxNTM6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMTU0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIwLVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MjE6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy00MjItXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzE9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQzLVxubW0vZGFtb24vcmVjbGFpbS5jOjM0NDpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ1LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9zdGF0LmM9MjAwPXN0YXRpYyBpbnQgZGFtb25fc3RhdF9zdGFydCh2b2lkKVxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yMTItXHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vc3RhdC5jOjIxMzpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9zdGF0LmMtMjE0LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjY3LVx0fVxubW0vZGFtb24vc3lzZnMuYzoyMjY4Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XG5tbS9kYW1vbi9zeXNmcy5jLTIyNjktXHRpZiAoZXJyKSB7XG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTE3Nz1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9tdGllcl9zdGFydCh2b2lkKVxuLS1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xOTEtXHRjdHhzWzFdID0gY3R4O1xuc2FtcGxlcy9kYW1vbi9tdGllci5jOjE5MjpcdGVyciA9IGRhbW9uX3N0YXJ0KGN0eHMsIDIsIHRydWUpO1xuc2FtcGxlcy9kYW1vbi9tdGllci5jLTE5My1cdGlmICghZXJyKVxuLS1cbnNhbXBsZXMvZGFtb24vcHJjbC5jPTYwPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy0xMDctXG5zYW1wbGVzL2RhbW9uL3ByY2wuYzoxMDg6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuc2FtcGxlcy9kYW1vbi9wcmNsLmMtMTA5LVx0aWYgKGVycikge1xuLS1cbnNhbXBsZXMvZGFtb24vd3NzZS5jPTYxPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3dzc2Vfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy04OC1cbnNhbXBsZXMvZGFtb24vd3NzZS5jOjg5Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTkwLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4OAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbWFwIG91dCB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBkYW1vbl9zdGFydGAgaXMgZGVmaW5pdGVseSB0aGUga2V5IEFQSSBlbnRyeSBwb2ludCB0aGF0IGtpY2tzIHRoaW5ncyBvZmYuIExldCBtZSBkb3VibGUtY2hlY2suLi4geWVwLCBzZWVtcyB0byBiZSB0aGUgbWFpbiBkcml2ZXIuIEJ1dCBpcyB0aGF0ICppdCo/IE5vcGUsIGBkYW1vbl9zZXRfYXR0cnNgIGlzIGFsc28gYW4gZW50cnkgcG9pbnQgLSBtYWtlcyBzZW5zZSwgc2luY2UgaXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgYHN0cnVjdCBkYW1vbl9hdHRyc2AgdGhhdCBjb250cm9sIHRoaW5ncyBsaWtlIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYC4gVGhlbiB0aGVyZSBpcyBgZGFtb25fc2V0X3JlZ2lvbnNgIGFzIHdlbGwuCgpUaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgdG8gbW9kaWZ5IGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgLCB3aGljaCBpcyBpbnZva2VkIGR1cmluZyB0aGUgZXhlY3V0aW9uIGluaXRpYXRlZCBieSBgZGFtb25fc3RhcnRgLCB0aGF0IG1ha2VzIGl0IGEgZ29vZCBmb2N1cyBmb3IgYW5hbHlzaXMuIEFsc28sIGJlY2F1c2UgYGRhbW9uX3NldF9hdHRyc2AgY29uZmlndXJlcyB0aGUgYXR0cmlidXRlcyB1c2VkIGluIHNhbXBsaW5nLCBpdCYjMzk7cyBhbHNvIGEgc3Ryb25nIGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEFuZCBoZXksIHRoZSB0ZXN0cyBhZGRlZCBhcmUgZm9yIGBkYW1vbl9zZXRfcmVnaW9uc2AgdG9vLCBzbyB0aGF0JiMzOTtzIGFsc28gYW4gaW1wb3J0YW50IHBpZWNlIHRvIGNvbnNpZGVyLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBzZXQgdXAgZm9yIERBTU9OLiBUaGF0JiMzOTtzIGFsd2F5cyBteSBmaXJzdCBzdGVwIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0ODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSB0YXNrIGF0IGhhbmQgcmVxdWlyZXMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBkYWVtb24sIG9yICYjMzQ7bW0vZGFtb24mIzM0OyBhcyB3ZSBjYWxsIGl0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgY3JhY2sgb3BlbiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuJiMzNDsgVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgaHViIGZvciBkZWZpbmluZyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgc3Vic3lzdGVtLiBUaGlzIGZpbGUgd2lsbCByZXZlYWwgd2hpY2ggb3RoZXIgZmVhdHVyZXMsIG1vZHVsZXMsIG9yIGtlcm5lbCBzZXR0aW5ncyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIERBTU9OIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBpbnRyaWNhdGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHZhcmlvdXMgS2NvbmZpZyBzeW1ib2xzLCBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMsIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbC4gSSBjYW4gdGhlbiB1c2UgdGhhdCBpbmZvcm1hdGlvbiB0byBkZXZlbG9wIG9yIGRlYnVnIHRoZSBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBEQU1PTlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxuICAgOTpcdFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcbiAgMTA6XHRcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXG4gIDEzOlx0XHQgIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxuICAxNjpcdFx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBEQU1PTlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXG4gIDIwOlx0XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFN5c2ZzIEV4cG9zdXJlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYERBTU9OYC4gVGhhdCBzZWVtcyB0byBiZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uLCB0aGUgY2VudHJhbCBjb250cm9sIHBvaW50LCByaWdodD8gRXZlcnl0aGluZyByZXZvbHZlcyBhcm91bmQgdGhhdC4gQW5kLCBvZiBjb3Vyc2UsIHRvIGludGVyYWN0IHdpdGggYERBTU9OYCBlZmZlY3RpdmVseSwgcGFydGljdWxhcmx5IGZvciB0aGluZ3MgbGlrZSBmdXp6aW5nIHdpdGggYSB0b29sIGxpa2Ugc3l6a2FsbGVyLCB3ZSBuZWVkIGEgd2F5IHRvIGV4cG9zZSBpdCB0byB1c2VyIHNwYWNlLiBUaGF0JiMzOTtzIHdoZXJlIGBEQU1PTl9TWVNGU2AgY29tZXMgaW4uIEl0JiMzOTtzIHRoZSBicmlkZ2UsIHRoZSBtZWNoYW5pc20gdG8gbWFrZSB0aGUgY29uZmlndXJhdGlvbiBhY2Nlc3NpYmxlIGFuZCB1c2FibGUgZnJvbSBvdXRzaWRlIHRoZSBrZXJuZWwuIFdpdGhvdXQgdGhhdCwgd2UmIzM5O3JlIHN0dWNrIGluIGEgYmxhY2sgYm94LiBTbywgYERBTU9OX1NZU0ZTYCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGZvciBwcmFjdGljYWwgaW50ZXJhY3Rpb24gd2l0aCBgREFNT05gIGluIHRoZXNlIGtpbmRzIG9mIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NTpcdFxuICA2NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2NzpcdFxuICA2ODpcdGNvbmZpZyBEQU1PTl9TWVNGU1xuICA2OTpcdFx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbiAgNzA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IFNZU0ZTXG4gIDcxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDcyOlx0XHRoZWxwXG4gIDczOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxuICA3NDpcdFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cbiAgNzU6XHRcbiAgNzY6XHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxuICA3NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA3ODpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICA3OTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NjAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgY3VycmVudCB0cmFpbiBvZiB0aG91Z2h0LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEQU1PTiBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gRHluYW1pYyBBY2Nlc3MgTW9uaXRvcmluZyAoREFNT04pIGNvbmZpZ3MsIGFuZCBpdCBsb29rcyBsaWtlIGBEQU1PTmAgYW5kIGBEQU1PTl9TWVNGU2AgYXJlIHRoZSBwcmltYXJ5IG9uZXMgdG8gYmUgY29uY2VybmVkIHdpdGguIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBvbiB0aGVzZS4gSSYjMzk7bSBhbHNvIHJlbWVtYmVyaW5nIHRoYXQgdGhlIGFjdHVhbCBtb25pdG9yaW5nIGltcGxlbWVudGF0aW9uIG1pZ2h0IGludm9sdmUgYERBTU9OX1ZBRERSYCBhbmQgYERBTU9OX1BBRERSYCwgZGVwZW5kaW5nIG9uIGhvdyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VzLiBJIHNob3VsZCBjbGFyaWZ5IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgdGhlIGFkZHJlc3Mgc3BhY2VzIHdlJiMzOTtyZSB0YXJnZXRpbmcgYW5kIHRoZSBvdmVyaGVhZCBpbnZvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBob3cgdGhleSBpbnRlcmFjdCwgaWYgYXQgYWxsLCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTUxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gYmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiwgaXQgbG9va3MgbGlrZSBlbmFibGluZyBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fVkFERFJgLCBhbmQgYERBTU9OX1BBRERSYCBpcyBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHRoaXMgc2V0dXAuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gV2UmIzM5O3ZlIGdvdCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXMgdGhlIGNlbnRyYWwgcGllY2VzIGhlcmUsIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQuCgpUaGUgcGF0Y2ggYXBwZWFycyB0byBiZSBmb2N1c2VkIG9uIHJlZmluaW5nIHRoZSBpbnRlcm5hbCB3b3JraW5ncywgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBhbmQgYGRhbW9uX3dtYXJrX3dhaXRfdXNgLiBUaGF0IGNoYW5nZSB0byBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBpcyBpbnRlcmVzdGluZywgYW5kIHRoZSByZW1vdmFsIG9mIGBwcl9kZWJ1Z2AgaW1wbGllcyBhIG1vdmUgdG93YXJkcyBjbGVhbmVyIGNvZGUgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGlzIHN0YXRpYyB0ZWxscyBtZSBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uCgpGcm9tIHRoZXJlLCBgZGFtb25fc3RhcnRgIGlzIHRoZSBjbGVhciBlbnRyeSBwb2ludDsgaXQga2lja3Mgb2ZmIHRoZSB0aHJlYWQgdGhhdCBydW5zIGBrZGFtb25kX2ZuYCwgd2hpY2ggaW4gdHVybiBjYWxscyB0aGF0IGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGZ1bmN0aW9uLiBUaGUgdXNlIG9mIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMgdXNlZCBieSBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAuIEZpbmFsbHksIHRoZSBuZXcgS1VuaXQgdGVzdHMgYXJlIGZvY3VzZWQgb24gdmVyaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiBgZGFtb25fc2V0X3JlZ2lvbnNgLCB3aGljaCBpcyBnb29kIHRvIHNlZS4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBzZWUgaWYgYGRhbW9uX3N5c2ZzX3NldF9hdHRyc2AgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgIHByb3ZpZGVzIGFub3RoZXIgd2F5IHRvIGludGVyYWN0IHdpdGggdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3lzZnNfc2V0X2F0dHJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MTg5MT1zdGF0aWMgc3NpemVfdCBzdGF0ZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xOTEyLVxubW0vZGFtb24vc3lzZnMuYzoxOTEzOnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3N5c2ZzLmMtMTkxNC1cdFx0c3RydWN0IGRhbW9uX3N5c2ZzX2F0dHJzICpzeXNfYXR0cnMpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDk0PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDktXHRjdHgtXHUwMDNlcGF1c2UgPSBzeXNfY3R4LVx1MDAzZXBhdXNlO1xubW0vZGFtb24vc3lzZnMuYzoyMTEwOlx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X2F0dHJzKGN0eCwgc3lzX2N0eC1cdTAwM2VhdHRycyk7XG5tbS9kYW1vbi9zeXNmcy5jLTIxMTEtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgyNAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgdGhpcyBEQU1PTiBwYXRjaCwgYXMgSSBzZWUgaXQuIEl0IGxvb2tzIGxpa2UgYGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0c2AgaXMgdGhlIGVudHJ5IHBvaW50IHdoZW4gd2UmIzM5O3JlIHdyaXRpbmcgdG8gc3lzZnMsIGJ1dCB0aGUgcmVhbCBoZWFydCBvZiB0aGUgbWF0dGVyIGlzIHRoZSBgZGFtb25fc2V0X2F0dHJzYCBmdW5jdGlvbi4KCkkgdGhpbmsgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24uIEl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24gb3Igb3ZlcmZsb3cgaXNzdWUgd2l0aGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgLCBzcGVjaWZpY2FsbHkgaG93IGBtYXhfdGhyZXNgIGlzIGNhbGN1bGF0ZWQsIHVzaW5nIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0JiMzOTtzIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQmIzM5O3MgcmVhY2hhYmxlLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfYXR0cnNgLCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYC4KCkl0JiMzOTtzIGNsZWFyIHRoYXQgYGRhbW9uX3NldF9yZWdpb25zYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgIHBhdGguIEFuZCwgY29uZmlybWVkLCBib3RoIGBkYW1vbl9zdGFydGAgYW5kIGBkYW1vbl9zZXRfYXR0cnNgIGFyZSBhbHNvIGFjY2Vzc2libGUgdmlhIHN5c2ZzLCB0aHJvdWdoIHdyaXRpbmcgdG8gdGhlIGBzdGF0ZWAgYW5kIGF0dHJpYnV0ZXMsIHJlc3BlY3RpdmVseS4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgcXVpY2tseSBjaGVja2VkIGZvciBvdGhlciBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IG15IGF0dGVudGlvbi4gSSBrbm93IGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0JiMzOTtzIG5vdCBhIHN5bWJvbCB0byB0cmFjay4gU2ltaWxhcmx5LCBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBhbmQgYGtkYW1vbmRfZm5gIGFyZSBhbHNvIHN0YXRpYy4KClRoZXJlZm9yZSwgdGhlIG1haW4gbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBkZWZpbml0ZWx5IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfYXR0cnNgLCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYC4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgZGFtb25fc3RhcnRgIGlzIGV4cG9ydGVkLi4uIGFuZCB3ZSYjMzk7cmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipkYW1vbl9zdGFydCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjE3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWJ1Z2dpbmcgREFNT04gSW5pdGlhbGl6YXRpb24qKgoKSG1tLCB3YWl0IGEgbWludXRlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGEgcmVmZXJlbmNlIHRvIGBkYW1vbl9zdGFydGAsIGJ1dCBpdCBkb2VzbiYjMzk7dCBzZWVtIGxpa2UgaXQmIzM5O3MgYmVpbmcgcHJvcGVybHkgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkZWZpbmVkIGFuZCBpZiBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIGNoZWNrIHRoZSBjb3JlIERBTU9OIGNvZGU7IGl0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwbGFjZS4gU28sIGxldCBtZSBwdWxsIHVwIGBtbS9kYW1vbi9jb3JlLmNgIHJpZ2h0IGF3YXkuIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZWNsYXJhdGlvbiBvZiBgZGFtb25fc3RhcnRgLCBhbmQgdGhlbiBkZXRlcm1pbmUgaG93IGl0IGlzIHRvIGJlIGV4cG9ydGVkIHRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwsIHNvIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGJ1aWxkIGRvZXNuJiMzOTt0IGZhaWwuIEkmIzM5O20gc3VyZSBpdCYjMzk7cyBqdXN0IGEgc2ltcGxlIG92ZXJzaWdodCwgYnV0IHRoZXNlIGFyZSBleGFjdGx5IHRoZSBraW5kIG9mIGRldGFpbHMgdGhhdCBjYW4ga2lsbCB5b3Ugd2hlbiB5b3UmIzM5O3JlIHdvcmtpbmcgb24gc29tZXRoaW5nIGNvbXBsZXggbGlrZSBEQU1PTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc3RhcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwOTI9Ym9vbCBkYW1vbl9pbml0aWFsaXplZCh2b2lkKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDkzOmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDk0LXZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzgtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXG5tbS9kYW1vbi9jb3JlLmM6MTAzOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXG5tbS9kYW1vbi9jb3JlLmMtMTA0MC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkyNT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG4tLVxubW0vZGFtb24vY29yZS5jLTE5MjctLypcbm1tL2RhbW9uL2NvcmUuYzoxOTI4OiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cbm1tL2RhbW9uL2NvcmUuYy0xOTI5LSAqIEBjdHg6XHRtb25pdG9yaW5nIGNvbnRleHRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTkzNC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTM1OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMTkzNi17XG4tLVxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTU5LS8qKlxubW0vZGFtb24vY29yZS5jOjE5NjA6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXG5tbS9kYW1vbi9jb3JlLmMtMTk2MS0gKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTY4LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxubW0vZGFtb24vY29yZS5jOjE5Njk6ICogJiMzOTtkYW1vbl9zdGFydCgpJiMzOTsgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XG5tbS9kYW1vbi9jb3JlLmMtMTk3MC0gKiByZXR1cm5zIC1FQlVTWS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTc0OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTE5NzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTk5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMDAwOlx0XHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xubW0vZGFtb24vY29yZS5jLTIwMDEtXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jPTIwNzA9aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA5Ny0gKlxubW0vZGFtb24vY29yZS5jOjIwOTg6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMDk5LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTA2PWludCBkYW1vbl9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCAqY29udHJvbClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE1Mi0gKlxubW0vZGFtb24vY29yZS5jOjIxNTM6ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGRhbW9uX3N0YXJ0KCkgd2l0aCB0aGVcbm1tL2RhbW9uL2NvcmUuYy0yMTU0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIwLVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MjE6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy00MjItXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzE9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQzLVxubW0vZGFtb24vcmVjbGFpbS5jOjM0NDpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ1LVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9zdGF0LmM9MjAwPXN0YXRpYyBpbnQgZGFtb25fc3RhdF9zdGFydCh2b2lkKVxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yMTItXHRcdHJldHVybiAtRU5PTUVNO1xubW0vZGFtb24vc3RhdC5jOjIxMzpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XG5tbS9kYW1vbi9zdGF0LmMtMjE0LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMjY3LVx0fVxubW0vZGFtb24vc3lzZnMuYzoyMjY4Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XG5tbS9kYW1vbi9zeXNmcy5jLTIyNjktXHRpZiAoZXJyKSB7XG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTE3Nz1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9tdGllcl9zdGFydCh2b2lkKVxuLS1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xOTEtXHRjdHhzWzFdID0gY3R4O1xuc2FtcGxlcy9kYW1vbi9tdGllci5jOjE5MjpcdGVyciA9IGRhbW9uX3N0YXJ0KGN0eHMsIDIsIHRydWUpO1xuc2FtcGxlcy9kYW1vbi9tdGllci5jLTE5My1cdGlmICghZXJyKVxuLS1cbnNhbXBsZXMvZGFtb24vcHJjbC5jPTYwPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy0xMDctXG5zYW1wbGVzL2RhbW9uL3ByY2wuYzoxMDg6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuc2FtcGxlcy9kYW1vbi9wcmNsLmMtMTA5LVx0aWYgKGVycikge1xuLS1cbnNhbXBsZXMvZGFtb24vd3NzZS5jPTYxPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3dzc2Vfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy04OC1cbnNhbXBsZXMvZGFtb24vd3NzZS5jOjg5Olx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbnNhbXBsZXMvZGFtb24vd3NzZS5jLTkwLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYyMQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1cyBTeW1ib2wgQ29uc2lkZXJhdGlvbnMgZm9yIERBTU9OIGluIFN5emthbGxlciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogREFNT04gdXNpbmcgU3l6a2FsbGVyLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYSBmdW5jdGlvbiBuZWVkZWQgdG8gYmUgZXhwb3J0ZWQgdG8gYmUgYSBmb2N1cyBzeW1ib2wsIGJ1dCB0aGF0JiMzOTtzIG5vdCBuZWNlc3NhcmlseSB0aGUgY2FzZSBoZXJlLiBJIHJlbWVtYmVyIHRoYXQgYGRhbW9uX3N0YXJ0YCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gbG9jYXRlZCBpbiBgbW0vZGFtb24vY29yZS5jYC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCB0aGlzIHdhc24mIzM5O3QgaWRlYWwsIGVzcGVjaWFsbHkgc2luY2UgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBIb3dldmVyLCBJIHJlY2FsbCB0aGF0IFN5emthbGxlciBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIHRocm91Z2ggc3lzZnMgZm9yIERBTU9OOyBzbyB0aGUgc3lzZnMgZW50cnkgcG9pbnRzIGxpa2UgYGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb25gLCBgZGFtb25fc3lzZnNfc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zeXNmc19zZXRfcmVnaW9uc2AgYXJlIHJlbGV2YW50LgoKVGhlbiBpdCBoaXQgbWU6IFN5emthbGxlciB1dGlsaXplcyBrY292LCB3aGljaCBpbnN0cnVtZW50cyAqYWxsKiBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCBldmVuIHRob3VnaCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXJlbiYjMzk7dCBleHBvcnRlZCwgdGhleSAqY2FuKiBiZSB1c2VkIGFzIGZvY3VzIHN5bWJvbHMuIFNpbmNlIGtjb3Ygd2lsbCBpbnN0cnVtZW50IHRoZW0uIFNvLCBldmVuIHRob3VnaCB0aGV5IGFyZW4mIzM5O3QgZGlyZWN0bHkgZXhwb3NlZCBleHRlcm5hbGx5LCB0aGV5IGFyZSBhdmFpbGFibGUuIFNvLCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2Agc2hvdWxkIGJlIGdvb2QgY2hvaWNlcy4gTm93LCBsZXQgbWUgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkYW1vbl9zZXRfYXR0cnNgIHNwZWNpZmljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD04MDk9c3RydWN0IGRhbW9uX2F0dHJzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODE4LVx0ICogQGFnZ3JfaW50ZXJ2YWwgdG8gQHNhbXBsZV9pbnRlcnZhbCByYXRpby5cbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MTk6XHQgKiBDb3JlLWV4dGVybmFsIGNvbXBvbmVudHMgY2FsbCBkYW1vbl9zZXRfYXR0cnMoKSB3aXRoIFx1MDAyNmRhbW9uX2F0dHJzXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODIwOlx0ICogdGhhdCB0aGlzIGZpZWxkIGlzIHVuc2V0LiAgSW4gdGhlIGNhc2UsIGRhbW9uX3NldF9hdHRycygpIHNldHMgdGhpc1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTgyMS1cdCAqIGZpZWxkIG9mIHJlc3VsdGluZyBcdTAwMjZkYW1vbl9hdHRycy4gIENvcmUtaW50ZXJuYWwgY29tcG9uZW50cyBzdWNoIGFzXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODIyOlx0ICoga2RhbW9uZF90dW5lX2ludGVydmFscygpIGNhbGxzIGRhbW9uX3NldF9hdHRycygpIHdpdGggXHUwMDI2ZGFtb25fYXR0cnNcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MjM6XHQgKiB0aGF0IHRoaXMgZmllbGQgaXMgc2V0LiAgSW4gdGhlIGNhc2UsIGRhbW9uX3NldF9hdHRycygpIGp1c3Qga2VlcFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTgyNC1cdCAqIGl0LlxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDYzPXZvaWQgZGFtb25fZGVzdHJveV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDY0OmludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKTtcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY1LXZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMjgtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MTAyOTogKiBkYW1vbl9zZXRfYXR0cnMoKSAtIFNldCBhdHRyaWJ1dGVzIGZvciB0aGUgbW9uaXRvcmluZy5cbm1tL2RhbW9uL2NvcmUuYy0xMDMwLSAqIEBjdHg6XHRcdG1vbml0b3JpbmcgY29udGV4dFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDQ3LSAqL1xubW0vZGFtb24vY29yZS5jOjEwNDg6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG5tbS9kYW1vbi9jb3JlLmMtMTA0OS17XG4tLVxubW0vZGFtb24vY29yZS5jPTE3NTE9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3ODQtXHQgKiBzY2hlbWVzIGFuZCB0YXJnZXRzIHNob3VsZCBiZSB1cGRhdGVkIGZpcnN0LCBzaW5jZVxubW0vZGFtb24vY29yZS5jOjE3ODU6XHQgKiAxLiBkYW1vbl9zZXRfYXR0cnMoKSB1cGRhdGVzIG1vbml0b3JpbmcgcmVzdWx0cyBvZiB0YXJnZXRzIGFuZFxubW0vZGFtb24vY29yZS5jLTE3ODYtXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTc5MC1cdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFx1MDAyNmRzdC1cdTAwM2VhdHRycywgXHUwMDI2c3JjLVx1MDAzZWF0dHJzKSkge1xubW0vZGFtb24vY29yZS5jOjE3OTE6XHRcdGVyciA9IGRhbW9uX3NldF9hdHRycyhkc3QsIFx1MDAyNnNyYy1cdTAwM2VhdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTc5Mi1cdFx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMjU0PXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyNzItXHR0cmFjZV9kYW1vbl9tb25pdG9yX2ludGVydmFsc190dW5lKG5ld19hdHRycy5zYW1wbGVfaW50ZXJ2YWwpO1xubW0vZGFtb24vY29yZS5jOjIyNzM6XHRkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2bmV3X2F0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0yMjc0LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzc0NT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc3MS1cdFx0ICogYmUgY2hhbmdlZCBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgUmVhZCB0aGUgdmFsdWVzIGhlcmUsIGFuZFxubW0vZGFtb24vY29yZS5jOjM3NzI6XHRcdCAqIHVzZSB0aG9zZSBmb3IgdGhpcyBpdGVyYXRpb24uICBUaGF0IGlzLCBkYW1vbl9zZXRfYXR0cnMoKVxubW0vZGFtb24vY29yZS5jLTM3NzMtXHRcdCAqIHVwZGF0ZWQgbmV3IHZhbHVlcyBhcmUgcmVzcGVjdGVkIGZyb20gbmV4dCBpdGVyYXRpb24uXG4tLVxubW0vZGFtb24vY29yZS5jLTM4NDUtXHRcdFx0XHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXG5tbS9kYW1vbi9jb3JlLmM6Mzg0NjpcdFx0XHRcdCAqIGRhbW9uX3NldF9hdHRycygpIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZyb21cbm1tL2RhbW9uL2NvcmUuYy0zODQ3LVx0XHRcdFx0ICoga2RhbW9uZF90dW5lX2ludGVydmFsKCkgbWF5IHdyb25nbHkgdGhpbmtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTMwMC1cdH1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MzAxOlx0ZXJyID0gZGFtb25fc2V0X2F0dHJzKHBhcmFtX2N0eCwgXHUwMDI2YXR0cnMpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zMDItXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjI0LVx0fVxubW0vZGFtb24vcmVjbGFpbS5jOjIyNTpcdGVyciA9IGRhbW9uX3NldF9hdHRycyhwYXJhbV9jdHgsIFx1MDAyNmF0dHJzKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMjYtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTE3NS1cdH07XG5tbS9kYW1vbi9zdGF0LmM6MTc2Olx0aWYgKGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKSlcbm1tL2RhbW9uL3N0YXQuYy0xNzctXHRcdGdvdG8gZnJlZV9vdXQ7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xOTEzPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE5MzItXHR9O1xubW0vZGFtb24vc3lzZnMuYzoxOTMzOlx0cmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTkzNC19XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTY3OT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY4OS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2OTA6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNnZhbGlkX2F0dHJzKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjkxLVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02OTMtXHRpbnZhbGlkX2F0dHJzLm1pbl9ucl9yZWdpb25zID0gMTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2OTQ6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02OTUtXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY5Ny1cdGludmFsaWRfYXR0cnMubWF4X25yX3JlZ2lvbnMgPSA5O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjY5ODpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2aW52YWxpZF9hdHRycyksIC1FSU5WQUwpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY5OS1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzAxLVx0aW52YWxpZF9hdHRycy5hZ2dyX2ludGVydmFsID0gNDk5OTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3MDI6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03MDMtXG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcbi0tXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTAzLVx0fTtcbnNhbXBsZXMvZGFtb24vbXRpZXIuYzoxMDQ6XHRpZiAoZGFtb25fc2V0X2F0dHJzKGN0eCwgXHUwMDI2YXR0cnMpKVxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEwNS1cdFx0Z290byBmcmVlX291dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxNzUKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogNjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGlzIGBkYW1vbl9zZXRfYXR0cnNgIGFjdHVhbGx5IGV4cG9ydGVkPyBIbW0sIGBFWFBPUlRfU1lNQk9MYCBpc24mIzM5O3Qgc2hvd2luZyB1cCBpbiB0aGUgZ3JlcCBvdXRwdXQsIHdoaWNoIGlzIGEgYml0IG9kZC4gQnV0IHN5emthbGxlciBjYW4gc3RpbGwgaW50ZXJhY3Qgd2l0aCBpdCB2aWEgc3lzZnMsIHNvIHRoYXQmIzM5O3MgZ29vZC4gTXkgZm9jdXMgc3ltYm9scyBzaG91bGQgZGVmaW5pdGVseSBiZSBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AuIEkgdGhpbmsgdGhhdCBjb3ZlcnMgdGhlIGtleSBlbnRyeSBwb2ludHMuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIGFuZCBjYXJlZnVsbHkgcmV2aWV3IHRob3NlIGluc3RydWN0aW9ucyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKVGhlIHBhdGNoIGl0c2VsZiBtYWtlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgLCBwcmV2ZW50aW5nIGludGVnZXIgdHJ1bmNhdGlvbiBvZiBgbWF4X3RocmVzYC4gVGhpcyAqZG9lcyogYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LCBhbmQgY3JpdGljYWxseSwgaXQmIzM5O3MgcmVhY2hhYmxlIGV2ZW4gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFRoYXQgbWVhbnMgV29ydGhGdXp6aW5nPXRydWUuIEkmIzM5O20gcHJldHR5IGNvbWZvcnRhYmxlIHdpdGggdGhhdCBjb25jbHVzaW9uLgoKU28sIGFzIGEgc3VtbWFyeToKCiogICAqKldvcnRoRnV6emluZz10cnVlKioKKiAgICoqRm9jdXNTeW1ib2xzKio6IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fc2V0X3JlZ2lvbnNgCiogICAqKkVuYWJsZUNvbmZpZ3MqKjogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYAoKV2FpdCwgbGV0IG1lIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBpcyBpbmxpbmUsIHNvIGl0JiMzOTtzIG5vdCBhIHJlbGV2YW50IHN5bWJvbC4gQW5kIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGlzIHN0YXRpYzsgc28gbm90IGEgZ29vZCBlbnRyeSBwb2ludC4gVGhhdCBtYWtlcyBzZW5zZS4KCk9rYXksIHNvIEkgd2lsbCBzdGljayB3aXRoOgoKKiAgIGBkYW1vbl9zdGFydGAgLSB0aGlzIGlzIHRoZSBjb3JlIGVudHJ5IHBvaW50IHRvIHN0YXJ0IHRoZSBEQU1PTiB0aHJlYWQuCiogICBgZGFtb25fc2V0X2F0dHJzYCAtIHRoZSBlbnRyeSBwb2ludCB0byBzZXQgYXR0cmlidXRlcy4KKiAgIGBkYW1vbl9zZXRfcmVnaW9uc2AgLSB0aGUgZW50cnkgcG9pbnQgdG8gc2V0IHJlZ2lvbnMuCgpBZnRlciB0aGF0IGRvdWJsZS1jaGVjaywgSSBhbSB2ZXJ5IGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwMDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfYXR0cnMmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIGlzc3VlIGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGJ5IHVzaW5nIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCB0byBjYWxjdWxhdGUgYG1heF90aHJlc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIERBTU9OJiMzOTtzIHJlZ2lvbiBtZXJnaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9hdHRycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24gaXNzdWUgaW4gYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AgYnkgdXNpbmcgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIHRvIGNhbGN1bGF0ZSBgbWF4X3RocmVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgREFNT04mIzM5O3MgcmVnaW9uIG1lcmdpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo0Mi40ODgzMzMzODJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA4OTQzNTM4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fc2V0X2F0dHJzXCIsXG4gICAgXCJkYW1vbl9zZXRfcmVnaW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBpc3N1ZSBpbiBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBieSB1c2luZyBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgdG8gY2FsY3VsYXRlIGBtYXhfdGhyZXNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiBEQU1PTidzIHJlZ2lvbiBtZXJnaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo0Mi40ODgzNDUxODJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODI4ODI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIzNjczYTg5ZGEwNTE2OGVkZDc0NzZmMDRmYTE5YzM1ZTM3ZGQ3YmVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDA6NTA6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbmluZGV4IGU2NzVhNTcxNDVlMzYuLmU5NDg4YmI0OGQyM2MgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbkBAIC0zLDcgKzMsNyBAQCBEYXRlOlxcdFxcdE1hciAyMDIyXFxuIENvbnRhY3Q6XFx0U0ogUGFyayBcXHUwMDNjc2pAa2VybmVsLm9yZ1xcdTAwM2VcXG4gRGVzY3JpcHRpb246XFx0SW50ZXJmYWNlIGZvciBEYXRhIEFjY2VzcyBNT05pdG9yaW5nIChEQU1PTikuICBDb250YWlucyBmaWxlc1xcbiBcXHRcXHRmb3IgY29udHJvbGxpbmcgREFNT04uICBGb3IgbW9yZSBkZXRhaWxzIG9uIERBTU9OIGl0c2VsZixcXG4tXFx0XFx0cGxlYXNlIHJlZmVyIHRvIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vaW5kZXgucnN0LlxcbitcXHRcXHRwbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9pbmRleC5yc3QuXFxuIFxcbiBXaGF0OlxcdFxcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL1xcbiBEYXRlOlxcdFxcdE1hciAyMDIyXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vbWFpbnRhaW5lci1wcm9maWxlLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vbWFpbnRhaW5lci1wcm9maWxlLnJzdFxcbmluZGV4IGZiMmZhMDBjYzlhYTEuLmE3YzEzNTIzMzkzNzggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0XFxuQEAgLTEwNiwxOCArMTA2LDkgQEAgQUkgUmV2aWV3XFxuIFxcbiBGb3IgcGF0Y2hlcyB0aGF0IGFyZSBwdWJsaWNseSBwb3N0ZWQgdG8gREFNT04gbWFpbGluZyBsaXN0XFxuIChkYW1vbkBsaXN0cy5saW51eC5kZXYpLCBBSSByZXZpZXdzIG9mIHRoZSBwYXRjaGVzIHdpbGwgYmUgYXZhaWxhYmxlIGF0XFxuLXNhc2hpa28uZGV2LiAgVGhlIHJldmlld3MgY291bGQgYWxzbyBiZSBzZW50IGFzIG1haWxzIHRvIHRoZSBhdXRob3Igb2YgdGhlXFxuLXBhdGNoLlxcbi1cXG4tUGF0Y2ggYXV0aG9ycyBhcmUgZW5jb3VyYWdlZCB0byBjaGVjayB0aGUgQUkgcmV2aWV3cyBhbmQgc2hhcmUgdGhlaXIgb3BpbmlvbnMuXFxuLVRoZSBzaGFyaW5nIGNvdWxkIGJlIGRvbmUgYXMgYSByZXBseSB0byB0aGUgbWFpbCB0aHJlYWQuICBDb25zaWRlciByZWR1Y2luZyB0aGVcXG4tcmVjaXBpZW50cyBsaXN0IGZvciBzdWNoIHNoYXJpbmcsIHNpbmNlIHNvbWUgcGVvcGxlIGFyZSBub3QgcmVhbGx5IGludGVyZXN0ZWRcXG4taW4gQUkgcmV2aWV3cy4gIEFzIGEgcnVsZSBvZiB0aHVtYiwgZHJvcCBzdGFibGVAdmdlci5rZXJuZWwub3JnIGFuZCBpbmRpdmlkdWFsc1xcbi1leGNlcHQgREFNT04gbWFpbnRhaW5lci5cXG4tXFxuLWBoa21sYCBhbHNvIHByb3ZpZGVzIGEgYGZlYXR1cmVcXG4tXFx1MDAzY2h0dHBzOi8vZ2l0aHViLmNvbS9zanAzOC9oYWNrZXJtYWlsL2Jsb2IvbWFzdGVyL1VTQUdFLm1kI2ZvcndhcmRpbmctc2FzaGlrb2Rldi1zdGF0dXNjb21tZW50cy10by1tYWlsaW5nLWxpc3RcXHUwMDNlYF9cXG4tZm9yIHN1Y2ggc2hhcmluZy4gIFBsZWFzZSBmZWVsIGZyZWUgdG8gdXNlIHRoZSBmZWF0dXJlLlxcbitzYXNoaWtvLmRldi4gIFRoZSByZXZpZXdzIHdpbGwgYWxzbyBiZSBzZW50IGFzIHJlcGxpZXMgdG8gdGhlIGF1dGhvciBvZiB0aGVcXG4rcGF0Y2ggYW5kIHRoZSBtYWlsaW5nIGxpc3QuXFxuIFxcbi1JdCBpcyBvbmx5IGFuIG9wdGlvbmFsIHJlY29tbWVuZGF0aW9uLiAgREFNT04gbWFpbnRhaW5lciBjb3VsZCBhbHNvIGFzayBhbnlcXG4tcXVlc3Rpb24gYWJvdXQgdGhlIEFJIHJldmlld3MsIHRob3VnaC5cXG4rUGF0Y2ggYXV0aG9ycyBhcmUgZW5jb3VyYWdlZCB0byBjaGVjayB0aGUgQUkgcmV2aWV3cyBhbmQgc2hhcmUgdGhlaXIgb3BpbmlvbnNcXG4rYnkgcmVwbHlpbmcgb24gdGhlIG1haWwgdGhyZWFkLiAgSXQgaXMgb25seSBhbiBvcHRpb25hbCByZWNvbW1lbmRhdGlvbi4gIERBTU9OXFxuK21haW50YWluZXIgY291bGQgYWxzbyBhc2sgYW55IHF1ZXN0aW9uIGFib3V0IHRoZSBBSSByZXZpZXdzLCB0aG91Z2guXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjZjMGZiMTc1ZTNkMjEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTMzNzMsOCArMzM3Myw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLCB1bnNpZ25lZCBpbnQgdGhyZXNob2xkLFxcbiBcXHR1bnNpZ25lZCBpbnQgbWF4X3RocmVzO1xcbiBcXHRib29sIGNvdW50X2FnZSA9IHRydWU7XFxuIFxcbi1cXHRtYXhfdGhyZXMgPSBjLVxcdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsIC9cXG4tXFx0XFx0KGMtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/ICBjLVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTtcXG4rXFx0bWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2Yy1cXHUwMDNlYXR0cnMpO1xcbiBcXHR3aGlsZSAodHJ1ZSkge1xcbiBcXHRcXHRucl9yZWdpb25zID0gMDtcXG4gXFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcXG5AQCAtMzU5NywxMCArMzU5Niw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3dtYXJrX3dhaXRfdXMoc3RydWN0IGRhbW9zICpzY2hlbWUpXFxuIFxcbiBcXHQvKiBoaWdoZXIgdGhhbiBoaWdoIHdhdGVybWFyayBvciBsb3dlciB0aGFuIGxvdyB3YXRlcm1hcmsgKi9cXG4gXFx0aWYgKG1ldHJpYyBcXHUwMDNlIHNjaGVtZS1cXHUwMDNld21hcmtzLmhpZ2ggfHwgc2NoZW1lLVxcdTAwM2V3bWFya3MubG93IFxcdTAwM2UgbWV0cmljKSB7XFxuLVxcdFxcdGlmIChzY2hlbWUtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXFxuLVxcdFxcdFxcdHByX2RlYnVnKFxcXCJkZWFjdGl2YXRlIGEgc2NoZW1lICglZCkgZm9yICVzIHdtYXJrXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgc2NoZW1lLVxcdTAwM2VhY3Rpb24sXFxuLVxcdFxcdFxcdFxcdCBzdHJfaGlnaF9sb3cobWV0cmljIFxcdTAwM2Ugc2NoZW1lLVxcdTAwM2V3bWFya3MuaGlnaCkpO1xcbiBcXHRcXHRzY2hlbWUtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQgPSBmYWxzZTtcXG4gXFx0XFx0cmV0dXJuIHNjaGVtZS1cXHUwMDNld21hcmtzLmludGVydmFsO1xcbiBcXHR9XFxuQEAgLTM2MTAsOCArMzYwNSw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3dtYXJrX3dhaXRfdXMoc3RydWN0IGRhbW9zICpzY2hlbWUpXFxuIFxcdFxcdFxcdCFzY2hlbWUtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXFxuIFxcdFxcdHJldHVybiBzY2hlbWUtXFx1MDAzZXdtYXJrcy5pbnRlcnZhbDtcXG4gXFxuLVxcdGlmICghc2NoZW1lLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxcbi1cXHRcXHRwcl9kZWJ1ZyhcXFwiYWN0aXZhdGUgYSBzY2hlbWUgKCVkKVxcXFxuXFxcIiwgc2NoZW1lLVxcdTAwM2VhY3Rpb24pO1xcbiBcXHRzY2hlbWUtXFx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQgPSB0cnVlO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0zNzU0LDggKzM3NDcsNiBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4gXFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0gZGF0YTtcXG4gXFx0dW5zaWduZWQgbG9uZyBzel9saW1pdCA9IDA7XFxuIFxcbi1cXHRwcl9kZWJ1ZyhcXFwia2RhbW9uZCAoJWQpIHN0YXJ0c1xcXFxuXFxcIiwgY3VycmVudC1cXHUwMDNlcGlkKTtcXG4tXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmN0eC1cXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcXG4gXFx0Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlID0gZmFsc2U7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xcbkBAIC0zOTAzLDcgKzM4OTQsNiBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4gXFx0ZGFtb3Nfd2Fsa19jYW5jZWwoY3R4KTtcXG4gXFxuLVxcdHByX2RlYnVnKFxcXCJrZGFtb25kICglZCkgZmluaXNoZXNcXFxcblxcXCIsIGN1cnJlbnQtXFx1MDAzZXBpZCk7XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9sb2NrKTtcXG4gXFx0Y3R4LVxcdTAwM2VrZGFtb25kID0gTlVMTDtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfbG9jayk7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbmluZGV4IDRhNTM2ZDQxY2RiMmQuLjUxMWYyODU2ZDM0M2MgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuQEAgLTQ2MywxMSArNDYzLDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4gXFx0XFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKm9sZF9yYW5nZXMsIGludCBzel9vbGRfcmFuZ2VzLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqbmV3X3JhbmdlcywgaW50IHN6X25ld19yYW5nZXMsXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeixcXG4tXFx0XFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKmV4cGVjdF9yYW5nZXMsIGludCBzel9leHBlY3RfcmFuZ2VzKVxcbitcXHRcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqZXhwZWN0X3JhbmdlcywgaW50IHN6X2V4cGVjdF9yYW5nZXMsXFxuK1xcdFxcdGludCBleHBlY3RfZXJyKVxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuIFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuLVxcdGludCBpO1xcbitcXHRpbnQgaSwgZXJyO1xcbiBcXG4gXFx0dCA9IGRhbW9uX25ld190YXJnZXQoKTtcXG4gXFx0aWYgKCF0KVxcbkBAIC00ODEsNyArNDgyLDggQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbiBcXHRcXHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xcbiBcXHR9XFxuIFxcbi1cXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCBuZXdfcmFuZ2VzLCBzel9uZXdfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTtcXG4rXFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnModCwgbmV3X3Jhbmdlcywgc3pfbmV3X3JhbmdlcywgbWluX3JlZ2lvbl9zeik7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBlcnIsIGV4cGVjdF9lcnIpO1xcbiBcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIHN6X2V4cGVjdF9yYW5nZXMpO1xcbiBcXHRpZiAoZGFtb25fbnJfcmVnaW9ucyh0KSAhPSBzel9leHBlY3RfcmFuZ2VzKSB7XFxuQEAgLTUxMCw3ICs1MTIsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe1xcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gNSwgLmVuZCA9IDE1fSxcXG4gXFx0XFx0XFx0ey5zdGFydCA9IDE1LCAuZW5kID0gMjV9LFxcbi1cXHRcXHRcXHR9LCAyKTtcXG4rXFx0XFx0XFx0fSwgMiwgMCk7XFxuIFxcdC8qIFVuLWludGVyc2VjdGluZyByZWdpb25zIHNob3VsZCBiZSByZW1vdmVkLiAqL1xcbiBcXHRkYW1vbl90ZXN0X3NldF9yZWdpb25zX2Zvcih0ZXN0LFxcbiBcXHRcXHRcXHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7XFxuQEAgLTUyMyw3ICs1MjUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0XFx0MSxcXG4gXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe1xcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gMTgsIC5lbmQgPSAyM30sXFxuLVxcdFxcdFxcdH0sIDEpO1xcbitcXHRcXHRcXHR9LCAxLCAwKTtcXG4gXFx0LypcXG4gXFx0ICogSG9sZXMgc2hvdWxkIGJlIGZpbGxlZCB1cCB3aXRoIG5ldyByZWdpb25zLlxcbiBcXHQgKlxcbkBAIC01NDQsNyArNTQ2LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdFxcdFxcdHsuc3RhcnQgPSA4LCAuZW5kID0gMTZ9LFxcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gMTYsIC5lbmQgPSAyNH0sXFxuIFxcdFxcdFxcdHsuc3RhcnQgPSAyNCwgLmVuZCA9IDI4fSxcXG4tXFx0XFx0XFx0fSwgMyk7XFxuK1xcdFxcdFxcdH0sIDMsIDApO1xcbiBcXHQvKlxcbiBcXHQgKiBOZXcgcmVnaW9ucyBzaG91bGQgYmUgYWJsZSB0byBiZSBhcHBlbmRlZC5cXG4gXFx0ICpcXG5AQCAtNTY2LDcgKzU2OCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gMCwgLmVuZCA9IDR9LFxcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gNCwgLmVuZCA9IDE1fSxcXG4gXFx0XFx0XFx0ey5zdGFydCA9IDI1LCAuZW5kID0gNDB9LFxcbi1cXHRcXHRcXHR9LCAzKTtcXG4rXFx0XFx0XFx0fSwgMywgMCk7XFxuIFxcdC8qXFxuIFxcdCAqIE5ldyByZWdpb25zIHNob3VsZCBiZSBhYmxlIHRvIGJlIGluc2VydGVkLlxcbiBcXHQgKlxcbkBAIC01ODksNyArNTkxLDQ4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gMCwgLmVuZCA9IDE1fSxcXG4gXFx0XFx0XFx0ey5zdGFydCA9IDI1LCAuZW5kID0gNDB9LFxcbiBcXHRcXHRcXHR7LnN0YXJ0ID0gNDQsIC5lbmQgPSA1MH0sXFxuLVxcdFxcdFxcdH0sIDMpO1xcbitcXHRcXHRcXHR9LCAzLCAwKTtcXG4rXFx0LyogWmVybyBzaXplIHJlZ2lvbnMgc2hvdWxkIHJldHVybiAtRUlOVkFMLiAqL1xcbitcXHRkYW1vbl90ZXN0X3NldF9yZWdpb25zX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCxcXG4rXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe1xcbitcXHRcXHRcXHR7LnN0YXJ0ID0gNDIsIC5lbmQgPSA0Mn0sXFxuK1xcdFxcdFxcdH0sIDEsIDEsXFxuK1xcdFxcdFxcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLCAtRUlOVkFMKTtcXG4rXFx0LyogTmVnYXRpdmUgc2l6ZSByZWdpb25zIHNob3VsZCByZXR1cm4gLUVJTlZBTC4gKi9cXG4rXFx0ZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3IodGVzdCxcXG4rXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsXFxuK1xcdFxcdFxcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcXG4rXFx0XFx0XFx0ey5zdGFydCA9IDQyLCAuZW5kID0gMjF9LFxcbitcXHRcXHRcXHR9LCAxLCAxLFxcbitcXHRcXHRcXHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCwgLUVJTlZBTCk7XFxuK1xcdC8qXFxuK1xcdCAqIFJlZ2lvbnMgcmVzdWx0aW5nIGluIHNhbWUgcmVnaW9uIGFmdGVyIGFsaW5nbWVudCBzaG91bGQgcmV0dXJuXFxuK1xcdCAqIC1FSU5WQUwuXFxuK1xcdCAqL1xcbitcXHRkYW1vbl90ZXN0X3NldF9yZWdpb25zX2Zvcih0ZXN0LFxcbitcXHRcXHRcXHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCxcXG4rXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe1xcbitcXHRcXHRcXHR7LnN0YXJ0ID0gMTAsIC5lbmQgPSAyMH0sXFxuK1xcdFxcdFxcdHsuc3RhcnQgPSAyMCwgLmVuZCA9IDMwfSxcXG4rXFx0XFx0XFx0fSwgMiwgNDA5NixcXG4rXFx0XFx0XFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHtcXG4rXFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDAsXFxuK1xcdFxcdC5hZ2dyX2ludGVydmFsID0gMCxcXG4rXFx0fTtcXG4rXFxuK1xcdC8qIFplcm8gYWdncmVnYXRpb24gaW50ZXJ2YWwgZG9lc24ndCBjYXVzZSBkaXZpc2lvbiBieSB6ZXJvICovXFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZhdHRycyksIDEpO1xcbitcXG4rXFx0LyogVG9vIGxhcmdlIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJ3QgY2F1c2Ugb3ZlcmZsb3cgKi9cXG4rXFx0YXR0cnMuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICsgMTtcXG4rXFx0S1VOSVRfRVhQRUNUX0dFKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmF0dHJzKSwgMCk7XFxuK1xcdEtVTklUX0VYUEVDVF9MRSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZhdHRycyksIFVJTlRfTUFYKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbkBAIC0xNjQzLDYgKzE2ODYsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMpLFxcbitcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdnciksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X212c3VtKSxcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5pbmRleCA0OTc2Nzc1ZmUyNzYyLi41Y2NmNzBkYzhhMzBiIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3ZhZGRyLmNcXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXFxuQEAgLTE5MiwxOSArMTkyLDEwIEBAIHN0YXRpYyBpbnQgZGFtb25fdmFfdGhyZWVfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2luaXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcXG4ge1xcbi1cXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0aTtcXG4gXFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgcmVnaW9uc1szXTtcXG4tXFx0aW50IHRpZHggPSAwO1xcbiBcXG4tXFx0aWYgKGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnModCwgcmVnaW9ucykpIHtcXG4tXFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHRpLCBjdHgpIHtcXG4tXFx0XFx0XFx0aWYgKHRpID09IHQpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR0aWR4Kys7XFxuLVxcdFxcdH1cXG4tXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBnZXQgdGhyZWUgcmVnaW9ucyBvZiAlZHRoIHRhcmdldFxcXFxuXFxcIiwgdGlkeCk7XFxuK1xcdGlmIChkYW1vbl92YV90aHJlZV9yZWdpb25zKHQsIHJlZ2lvbnMpKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4gXFxuIFxcdGRhbW9uX3NldF9yZWdpb25zKHQsIHJlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hcXG5pbmRleCBmN2ZiOTRiODRlNzE2Li44NjkwYWVmMWU0MzZjIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hcXG5AQCAtMjEwLDYgKzIxMCw3IEBAIHRlc3RfZ29hbCgpXFxuIFxcdGVuc3VyZV93cml0ZV9zdWNjIFxcXCIkZnBhdGhcXFwiIFxcXCJhY3RpdmVfbWVtX2JwXFxcIiBcXFwidmFsaWQgaW5wdXRcXFwiXFxuIFxcdGVuc3VyZV93cml0ZV9zdWNjIFxcXCIkZnBhdGhcXFwiIFxcXCJpbmFjdGl2ZV9tZW1fYnBcXFwiIFxcXCJ2YWxpZCBpbnB1dFxcXCJcXG4gXFx0ZW5zdXJlX3dyaXRlX3N1Y2MgXFxcIiRmcGF0aFxcXCIgXFxcIm5vZGVfZWxpZ2libGVfbWVtX2JwXFxcIiBcXFwidmFsaWQgaW5wdXRcXFwiXFxuK1xcdGVuc3VyZV93cml0ZV9zdWNjIFxcXCIkZnBhdGhcXFwiIFxcXCJodWdlcGFnZV9tZW1fYnBcXFwiIFxcXCJ2YWxpZCBpbnB1dFxcXCJcXG4gXFx0ZW5zdXJlX3dyaXRlX2ZhaWwgXFxcIiRmcGF0aFxcXCIgXFxcImZvb1xcXCIgXFxcImludmFsaWQgaW5wdXRcXFwiXFxuIFxcdGVuc3VyZV9maWxlIFxcXCIkZ29hbF9kaXIvbmlkXFxcIiBcXFwiZXhpc3RcXFwiIFxcXCI2MDBcXFwiXFxuIFxcdGVuc3VyZV9maWxlIFxcXCIkZ29hbF9kaXIvcGF0aFxcXCIgXFxcImV4aXN0XFxcIiBcXFwiNjAwXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo0My4yNDc3OTIzNTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzAxMzQ4ODM3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fc2V0X2F0dHJzXCIsXG4gICAgXCJkYW1vbl9zZXRfcmVnaW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBpc3N1ZSBpbiBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBieSB1c2luZyBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgdG8gY2FsY3VsYXRlIGBtYXhfdGhyZXNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiBEQU1PTidzIHJlZ2lvbiBtZXJnaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMzY3M2E4OWRhMDUxNjhlZGQ3NDc2ZjA0ZmExOWMzNWUzN2RkN2JlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDA6NTA6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5pbmRleCBlNjc1YTU3MTQ1ZTM2Li5lOTQ4OGJiNDhkMjNjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5AQCAtMyw3ICszLDcgQEAgRGF0ZTpcdFx0TWFyIDIwMjJcbiBDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4gRGVzY3JpcHRpb246XHRJbnRlcmZhY2UgZm9yIERhdGEgQWNjZXNzIE1PTml0b3JpbmcgKERBTU9OKS4gIENvbnRhaW5zIGZpbGVzXG4gXHRcdGZvciBjb250cm9sbGluZyBEQU1PTi4gIEZvciBtb3JlIGRldGFpbHMgb24gREFNT04gaXRzZWxmLFxuLVx0XHRwbGVhc2UgcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi9pbmRleC5yc3QuXG4rXHRcdHBsZWFzZSByZWZlciB0byBEb2N1bWVudGF0aW9uL21tL2RhbW9uL2luZGV4LnJzdC5cbiBcbiBXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9cbiBEYXRlOlx0XHRNYXIgMjAyMlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vbWFpbnRhaW5lci1wcm9maWxlLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vbWFpbnRhaW5lci1wcm9maWxlLnJzdFxuaW5kZXggZmIyZmEwMGNjOWFhMS4uYTdjMTM1MjMzOTM3OCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vbWFpbnRhaW5lci1wcm9maWxlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0XG5AQCAtMTA2LDE4ICsxMDYsOSBAQCBBSSBSZXZpZXdcbiBcbiBGb3IgcGF0Y2hlcyB0aGF0IGFyZSBwdWJsaWNseSBwb3N0ZWQgdG8gREFNT04gbWFpbGluZyBsaXN0XG4gKGRhbW9uQGxpc3RzLmxpbnV4LmRldiksIEFJIHJldmlld3Mgb2YgdGhlIHBhdGNoZXMgd2lsbCBiZSBhdmFpbGFibGUgYXRcbi1zYXNoaWtvLmRldi4gIFRoZSByZXZpZXdzIGNvdWxkIGFsc28gYmUgc2VudCBhcyBtYWlscyB0byB0aGUgYXV0aG9yIG9mIHRoZVxuLXBhdGNoLlxuLVxuLVBhdGNoIGF1dGhvcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEFJIHJldmlld3MgYW5kIHNoYXJlIHRoZWlyIG9waW5pb25zLlxuLVRoZSBzaGFyaW5nIGNvdWxkIGJlIGRvbmUgYXMgYSByZXBseSB0byB0aGUgbWFpbCB0aHJlYWQuICBDb25zaWRlciByZWR1Y2luZyB0aGVcbi1yZWNpcGllbnRzIGxpc3QgZm9yIHN1Y2ggc2hhcmluZywgc2luY2Ugc29tZSBwZW9wbGUgYXJlIG5vdCByZWFsbHkgaW50ZXJlc3RlZFxuLWluIEFJIHJldmlld3MuICBBcyBhIHJ1bGUgb2YgdGh1bWIsIGRyb3Agc3RhYmxlQHZnZXIua2VybmVsLm9yZyBhbmQgaW5kaXZpZHVhbHNcbi1leGNlcHQgREFNT04gbWFpbnRhaW5lci5cbi1cbi1gaGttbGAgYWxzbyBwcm92aWRlcyBhIGBmZWF0dXJlXG4tXHUwMDNjaHR0cHM6Ly9naXRodWIuY29tL3NqcDM4L2hhY2tlcm1haWwvYmxvYi9tYXN0ZXIvVVNBR0UubWQjZm9yd2FyZGluZy1zYXNoaWtvZGV2LXN0YXR1c2NvbW1lbnRzLXRvLW1haWxpbmctbGlzdFx1MDAzZWBfXG4tZm9yIHN1Y2ggc2hhcmluZy4gIFBsZWFzZSBmZWVsIGZyZWUgdG8gdXNlIHRoZSBmZWF0dXJlLlxuK3Nhc2hpa28uZGV2LiAgVGhlIHJldmlld3Mgd2lsbCBhbHNvIGJlIHNlbnQgYXMgcmVwbGllcyB0byB0aGUgYXV0aG9yIG9mIHRoZVxuK3BhdGNoIGFuZCB0aGUgbWFpbGluZyBsaXN0LlxuIFxuLUl0IGlzIG9ubHkgYW4gb3B0aW9uYWwgcmVjb21tZW5kYXRpb24uICBEQU1PTiBtYWludGFpbmVyIGNvdWxkIGFsc28gYXNrIGFueVxuLXF1ZXN0aW9uIGFib3V0IHRoZSBBSSByZXZpZXdzLCB0aG91Z2guXG4rUGF0Y2ggYXV0aG9ycyBhcmUgZW5jb3VyYWdlZCB0byBjaGVjayB0aGUgQUkgcmV2aWV3cyBhbmQgc2hhcmUgdGhlaXIgb3BpbmlvbnNcbitieSByZXBseWluZyBvbiB0aGUgbWFpbCB0aHJlYWQuICBJdCBpcyBvbmx5IGFuIG9wdGlvbmFsIHJlY29tbWVuZGF0aW9uLiAgREFNT05cbittYWludGFpbmVyIGNvdWxkIGFsc28gYXNrIGFueSBxdWVzdGlvbiBhYm91dCB0aGUgQUkgcmV2aWV3cywgdGhvdWdoLlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjQ0ZGFmNWExNjU2MC4uNmMwZmIxNzVlM2QyMSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzM3Myw4ICszMzczLDcgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXG4gXHR1bnNpZ25lZCBpbnQgbWF4X3RocmVzO1xuIFx0Ym9vbCBjb3VudF9hZ2UgPSB0cnVlO1xuIFxuLVx0bWF4X3RocmVzID0gYy1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsIC9cbi1cdFx0KGMtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gIGMtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsIDogMSk7XG4rXHRtYXhfdGhyZXMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmMtXHUwMDNlYXR0cnMpO1xuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0bnJfcmVnaW9ucyA9IDA7XG4gXHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG5AQCAtMzU5NywxMCArMzU5Niw2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9zX3dtYXJrX3dhaXRfdXMoc3RydWN0IGRhbW9zICpzY2hlbWUpXG4gXG4gXHQvKiBoaWdoZXIgdGhhbiBoaWdoIHdhdGVybWFyayBvciBsb3dlciB0aGFuIGxvdyB3YXRlcm1hcmsgKi9cbiBcdGlmIChtZXRyaWMgXHUwMDNlIHNjaGVtZS1cdTAwM2V3bWFya3MuaGlnaCB8fCBzY2hlbWUtXHUwMDNld21hcmtzLmxvdyBcdTAwM2UgbWV0cmljKSB7XG4tXHRcdGlmIChzY2hlbWUtXHUwMDNld21hcmtzLmFjdGl2YXRlZClcbi1cdFx0XHRwcl9kZWJ1ZyhcImRlYWN0aXZhdGUgYSBzY2hlbWUgKCVkKSBmb3IgJXMgd21hcmtcXG5cIixcbi1cdFx0XHRcdCBzY2hlbWUtXHUwMDNlYWN0aW9uLFxuLVx0XHRcdFx0IHN0cl9oaWdoX2xvdyhtZXRyaWMgXHUwMDNlIHNjaGVtZS1cdTAwM2V3bWFya3MuaGlnaCkpO1xuIFx0XHRzY2hlbWUtXHUwMDNld21hcmtzLmFjdGl2YXRlZCA9IGZhbHNlO1xuIFx0XHRyZXR1cm4gc2NoZW1lLVx1MDAzZXdtYXJrcy5pbnRlcnZhbDtcbiBcdH1cbkBAIC0zNjEwLDggKzM2MDUsNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc193bWFya193YWl0X3VzKHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxuIFx0XHRcdCFzY2hlbWUtXHUwMDNld21hcmtzLmFjdGl2YXRlZClcbiBcdFx0cmV0dXJuIHNjaGVtZS1cdTAwM2V3bWFya3MuaW50ZXJ2YWw7XG4gXG4tXHRpZiAoIXNjaGVtZS1cdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxuLVx0XHRwcl9kZWJ1ZyhcImFjdGl2YXRlIGEgc2NoZW1lICglZClcXG5cIiwgc2NoZW1lLVx1MDAzZWFjdGlvbik7XG4gXHRzY2hlbWUtXHUwMDNld21hcmtzLmFjdGl2YXRlZCA9IHRydWU7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMzc1NCw4ICszNzQ3LDYgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBkYXRhO1xuIFx0dW5zaWduZWQgbG9uZyBzel9saW1pdCA9IDA7XG4gXG4tXHRwcl9kZWJ1ZyhcImtkYW1vbmQgKCVkKSBzdGFydHNcXG5cIiwgY3VycmVudC1cdTAwM2VwaWQpO1xuLVxuIFx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcbiBcdGN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzX29ic29sZXRlID0gZmFsc2U7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWNhbGxfY29udHJvbHNfbG9jayk7XG5AQCAtMzkwMyw3ICszODk0LDYgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbiBcdGRhbW9zX3dhbGtfY2FuY2VsKGN0eCk7XG4gXG4tXHRwcl9kZWJ1ZyhcImtkYW1vbmQgKCVkKSBmaW5pc2hlc1xcblwiLCBjdXJyZW50LVx1MDAzZXBpZCk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX2xvY2spO1xuIFx0Y3R4LVx1MDAzZWtkYW1vbmQgPSBOVUxMO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX2xvY2spO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggNGE1MzZkNDFjZGIyZC4uNTExZjI4NTZkMzQzYyAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtNDYzLDExICs0NjMsMTIgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuIFx0XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqb2xkX3JhbmdlcywgaW50IHN6X29sZF9yYW5nZXMsXG4gXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpuZXdfcmFuZ2VzLCBpbnQgc3pfbmV3X3JhbmdlcyxcbiBcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6LFxuLVx0XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqZXhwZWN0X3JhbmdlcywgaW50IHN6X2V4cGVjdF9yYW5nZXMpXG4rXHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpleHBlY3RfcmFuZ2VzLCBpbnQgc3pfZXhwZWN0X3JhbmdlcyxcbitcdFx0aW50IGV4cGVjdF9lcnIpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiBcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4tXHRpbnQgaTtcbitcdGludCBpLCBlcnI7XG4gXG4gXHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xuIFx0aWYgKCF0KVxuQEAgLTQ4MSw3ICs0ODIsOCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4gXHR9XG4gXG4tXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCBuZXdfcmFuZ2VzLCBzel9uZXdfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTtcbitcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKHQsIG5ld19yYW5nZXMsIHN6X25ld19yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGVyciwgZXhwZWN0X2Vycik7XG4gXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgc3pfZXhwZWN0X3Jhbmdlcyk7XG4gXHRpZiAoZGFtb25fbnJfcmVnaW9ucyh0KSAhPSBzel9leHBlY3RfcmFuZ2VzKSB7XG5AQCAtNTEwLDcgKzUxMiw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbiBcdFx0XHR7LnN0YXJ0ID0gNSwgLmVuZCA9IDE1fSxcbiBcdFx0XHR7LnN0YXJ0ID0gMTUsIC5lbmQgPSAyNX0sXG4tXHRcdFx0fSwgMik7XG4rXHRcdFx0fSwgMiwgMCk7XG4gXHQvKiBVbi1pbnRlcnNlY3RpbmcgcmVnaW9ucyBzaG91bGQgYmUgcmVtb3ZlZC4gKi9cbiBcdGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yKHRlc3QsXG4gXHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe1xuQEAgLTUyMyw3ICs1MjUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0XHQxLFxuIFx0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbiBcdFx0XHR7LnN0YXJ0ID0gMTgsIC5lbmQgPSAyM30sXG4tXHRcdFx0fSwgMSk7XG4rXHRcdFx0fSwgMSwgMCk7XG4gXHQvKlxuIFx0ICogSG9sZXMgc2hvdWxkIGJlIGZpbGxlZCB1cCB3aXRoIG5ldyByZWdpb25zLlxuIFx0ICpcbkBAIC01NDQsNyArNTQ2LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdFx0ey5zdGFydCA9IDgsIC5lbmQgPSAxNn0sXG4gXHRcdFx0ey5zdGFydCA9IDE2LCAuZW5kID0gMjR9LFxuIFx0XHRcdHsuc3RhcnQgPSAyNCwgLmVuZCA9IDI4fSxcbi1cdFx0XHR9LCAzKTtcbitcdFx0XHR9LCAzLCAwKTtcbiBcdC8qXG4gXHQgKiBOZXcgcmVnaW9ucyBzaG91bGQgYmUgYWJsZSB0byBiZSBhcHBlbmRlZC5cbiBcdCAqXG5AQCAtNTY2LDcgKzU2OCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdHsuc3RhcnQgPSAwLCAuZW5kID0gNH0sXG4gXHRcdFx0ey5zdGFydCA9IDQsIC5lbmQgPSAxNX0sXG4gXHRcdFx0ey5zdGFydCA9IDI1LCAuZW5kID0gNDB9LFxuLVx0XHRcdH0sIDMpO1xuK1x0XHRcdH0sIDMsIDApO1xuIFx0LypcbiBcdCAqIE5ldyByZWdpb25zIHNob3VsZCBiZSBhYmxlIHRvIGJlIGluc2VydGVkLlxuIFx0ICpcbkBAIC01ODksNyArNTkxLDQ4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdHsuc3RhcnQgPSAwLCAuZW5kID0gMTV9LFxuIFx0XHRcdHsuc3RhcnQgPSAyNSwgLmVuZCA9IDQwfSxcbiBcdFx0XHR7LnN0YXJ0ID0gNDQsIC5lbmQgPSA1MH0sXG4tXHRcdFx0fSwgMyk7XG4rXHRcdFx0fSwgMywgMCk7XG4rXHQvKiBaZXJvIHNpemUgcmVnaW9ucyBzaG91bGQgcmV0dXJuIC1FSU5WQUwuICovXG4rXHRkYW1vbl90ZXN0X3NldF9yZWdpb25zX2Zvcih0ZXN0LFxuK1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLFxuK1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbitcdFx0XHR7LnN0YXJ0ID0gNDIsIC5lbmQgPSA0Mn0sXG4rXHRcdFx0fSwgMSwgMSxcbitcdFx0XHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCwgLUVJTlZBTCk7XG4rXHQvKiBOZWdhdGl2ZSBzaXplIHJlZ2lvbnMgc2hvdWxkIHJldHVybiAtRUlOVkFMLiAqL1xuK1x0ZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3IodGVzdCxcbitcdFx0XHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7fSwgMCxcbitcdFx0XHQoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2VbXSl7XG4rXHRcdFx0ey5zdGFydCA9IDQyLCAuZW5kID0gMjF9LFxuK1x0XHRcdH0sIDEsIDEsXG4rXHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpO1xuK1x0LypcbitcdCAqIFJlZ2lvbnMgcmVzdWx0aW5nIGluIHNhbWUgcmVnaW9uIGFmdGVyIGFsaW5nbWVudCBzaG91bGQgcmV0dXJuXG4rXHQgKiAtRUlOVkFMLlxuK1x0ICovXG4rXHRkYW1vbl90ZXN0X3NldF9yZWdpb25zX2Zvcih0ZXN0LFxuK1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXt9LCAwLFxuK1x0XHRcdChzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZVtdKXtcbitcdFx0XHR7LnN0YXJ0ID0gMTAsIC5lbmQgPSAyMH0sXG4rXHRcdFx0ey5zdGFydCA9IDIwLCAuZW5kID0gMzB9LFxuK1x0XHRcdH0sIDIsIDQwOTYsXG4rXHRcdFx0KHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlW10pe30sIDAsIC1FSU5WQUwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxuK3tcbitcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHtcbitcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDAsXG4rXHRcdC5hZ2dyX2ludGVydmFsID0gMCxcbitcdH07XG4rXG4rXHQvKiBaZXJvIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJ3QgY2F1c2UgZGl2aXNpb24gYnkgemVybyAqL1xuK1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCAxKTtcbitcbitcdC8qIFRvbyBsYXJnZSBhZ2dyZWdhdGlvbiBpbnRlcnZhbCBkb2Vzbid0IGNhdXNlIG92ZXJmbG93ICovXG4rXHRhdHRycy5hZ2dyX2ludGVydmFsID0gKHVuc2lnbmVkIGxvbmcpVUlOVF9NQVggKyAxO1xuK1x0S1VOSVRfRVhQRUNUX0dFKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpLCAwKTtcbitcdEtVTklUX0VYUEVDVF9MRSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmF0dHJzKSwgVUlOVF9NQVgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5AQCAtMTY0Myw2ICsxNjg2LDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHtcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X29wc19yZWdpc3RyYXRpb24pLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9yZWdpb25zKSxcbitcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9hdHRycyksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbXZzdW0pLFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCA0OTc2Nzc1ZmUyNzYyLi41Y2NmNzBkYzhhMzBiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xuKysrIGIvbW0vZGFtb24vdmFkZHIuY1xuQEAgLTE5MiwxOSArMTkyLDEwIEBAIHN0YXRpYyBpbnQgZGFtb25fdmFfdGhyZWVfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIHN0YXRpYyB2b2lkIF9fZGFtb25fdmFfaW5pdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbiB7XG4tXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0aTtcbiBcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIHJlZ2lvbnNbM107XG4tXHRpbnQgdGlkeCA9IDA7XG4gXG4tXHRpZiAoZGFtb25fdmFfdGhyZWVfcmVnaW9ucyh0LCByZWdpb25zKSkge1xuLVx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodGksIGN0eCkge1xuLVx0XHRcdGlmICh0aSA9PSB0KVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0dGlkeCsrO1xuLVx0XHR9XG4tXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIGdldCB0aHJlZSByZWdpb25zIG9mICVkdGggdGFyZ2V0XFxuXCIsIHRpZHgpO1xuK1x0aWYgKGRhbW9uX3ZhX3RocmVlX3JlZ2lvbnModCwgcmVnaW9ucykpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGRhbW9uX3NldF9yZWdpb25zKHQsIHJlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9zeXNmcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXG5pbmRleCBmN2ZiOTRiODRlNzE2Li44NjkwYWVmMWU0MzZjIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL3N5c2ZzLnNoXG5AQCAtMjEwLDYgKzIxMCw3IEBAIHRlc3RfZ29hbCgpXG4gXHRlbnN1cmVfd3JpdGVfc3VjYyBcIiRmcGF0aFwiIFwiYWN0aXZlX21lbV9icFwiIFwidmFsaWQgaW5wdXRcIlxuIFx0ZW5zdXJlX3dyaXRlX3N1Y2MgXCIkZnBhdGhcIiBcImluYWN0aXZlX21lbV9icFwiIFwidmFsaWQgaW5wdXRcIlxuIFx0ZW5zdXJlX3dyaXRlX3N1Y2MgXCIkZnBhdGhcIiBcIm5vZGVfZWxpZ2libGVfbWVtX2JwXCIgXCJ2YWxpZCBpbnB1dFwiXG4rXHRlbnN1cmVfd3JpdGVfc3VjYyBcIiRmcGF0aFwiIFwiaHVnZXBhZ2VfbWVtX2JwXCIgXCJ2YWxpZCBpbnB1dFwiXG4gXHRlbnN1cmVfd3JpdGVfZmFpbCBcIiRmcGF0aFwiIFwiZm9vXCIgXCJpbnZhbGlkIGlucHV0XCJcbiBcdGVuc3VyZV9maWxlIFwiJGdvYWxfZGlyL25pZFwiIFwiZXhpc3RcIiBcIjYwMFwiXG4gXHRlbnN1cmVfZmlsZSBcIiRnb2FsX2Rpci9wYXRoXCIgXCJleGlzdFwiIFwiNjAwXCJcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjQzLjI0Nzc5NDUzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0ODA5Nzk4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIERBTU9OIHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsLiBGaXJzdCBnbGFuY2UsIHRoZXJlJ3MgZG9jdW1lbnRhdGlvbiB1cGRhdGVzOiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25gIGFuZCBgRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9tYWludGFpbmVyLXByb2ZpbGUucnN0YC4gR29vZCB0byBzZWUgdGhlIGRvY3VtZW50YXRpb24gaXMgYmVpbmcga2VwdCBjdXJyZW50LlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBJIHNlZSBhIGZldyBjaGFuZ2VzLiBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBub3cgdXNlcyBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjLVx1MDAzZWF0dHJzKWAgaW5zdGVhZCBvZiBhIGRpdmlzaW9uLiBBbHNvLCBzb21lIGBwcl9kZWJ1Z2Agc3RhdGVtZW50cyBhcmUgYmVpbmcgcmVtb3ZlZCBmcm9tIGBkYW1vc193bWFya193YWl0X3VzYCBhbmQgYGtkYW1vbmRfZm5gLiBPa2F5LCBub3RoaW5nIHRvbyByYWRpY2FsIHRoZXJlLCBsaWtlbHkganVzdCBjbGVhbmluZyB0aGluZ3MgdXAuXG5cbkluIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLCBJIHNlZSBgZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3JgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gY2hlY2sgZm9yIGBleHBlY3RfZXJyYCwgd2hpY2ggaXMgdXNlZnVsIGZvciB0ZXN0aW5nLiBBIG5ldyB0ZXN0LCBgZGFtb25fdGVzdF9ucl9zYW1wbGVzX3Blcl9hZ2dyYCwgaGFzIGJlZW4gYWRkZWQuIFRoYXQncyBhIGZvY3VzZWQgdGVzdCwgd2hpY2ggaXMgd2hhdCBJJ2QgZXhwZWN0LiBJbiBgbW0vZGFtb24vdmFkZHIuY2AsIEkgc2VlIHNpbWlsYXIgY2xlYW4gdXAgb2YgZGVidWdnaW5nIHN0YXRlbWVudHMuIEFsc28sIGl0IGFwcGVhcnMgdGhlIHRhcmdldCBpdGVyYXRpb24gaW4gYF9fZGFtb25fdmFfaW5pdF9yZWdpb25zYCBoYXMgYmVlbiByZW1vdmVkLlxuXG5GaW5hbGx5LCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hgLCB0aGV5J3ZlIGFkZGVkIGEgdGVzdCBsaW5lIGZvciBgaHVnZXBhZ2VfbWVtX2JwYC4gR29vZC5cblxuSG9sZCBvbiwgdGhvdWdoLCB0aGUgKmNvcmUqIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBtbS9kYW1vbi9jb3JlLmNgIGlzOlxuXG5gYGBjXG4tXHRtYXhfdGhyZXMgPSBjLVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgL1xuLVx0XHQoYy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyAgYy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTtcbitcdG1heF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2Yy1cdTAwM2VhdHRycyk7XG5gYGBcblxuVGhhdCdzIHRoZSBpbXBvcnRhbnQgYml0LiBJdCBsb29rcyBsaWtlIHRoZXkndmUgcmVwbGFjZWQgYSBkaXZpc2lvbiB3aXRoIGEgZnVuY3Rpb24gY2FsbCB0byBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAuIExldCdzIHNlZSB3aGF0IGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBpcyBkb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyByZXBsYWNlbWVudC4gSSdsbCBncmVwIGZvciBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgYW5kIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgYW5kIHdoYXQgaXQncyBhY3R1YWxseSBjYWxjdWxhdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUwOjQ5LjcyODc3ODMzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTA2NjkyNDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNzM9c3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDc4LS8qIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNzk6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA4MC1cXHRcXHRjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTkyMD1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3NhbXBsZV9icF90b19jb3VudChcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05MjIte1xcbm1tL2RhbW9uL2NvcmUuYzo5MjM6XFx0cmV0dXJuIGJwICogZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihhdHRycykgLyAxMDAwMDtcXG5tbS9kYW1vbi9jb3JlLmMtOTI0LX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz05Mjc9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9zYW1wbGVfY291bnRfdG9fYnAoXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTI5LXtcXG5tbS9kYW1vbi9jb3JlLmM6OTMwOlxcdHJldHVybiBtdWx0X2ZyYWMoY291bnQsIDEwMDAwLCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKGF0dHJzKSk7XFxubW0vZGFtb24vY29yZS5jLTkzMS19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTM0Mj1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNTYtXFx0LyogaW52YWxpZCBpZiBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBjYW4gb3ZlcmZsb3cgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTM1NzpcXHRtYXhfcHJvYmVfaGl0cyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmN0eC1cXHUwMDNlYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0xMzU4LVxcdHdzdW0gPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzNjg9c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM3NS1cXG5tbS9kYW1vbi9jb3JlLmM6MzM3NjpcXHRtYXhfdGhyZXMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZjLVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTMzNzctXFx0d2hpbGUgKHRydWUpIHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMDUtXFx0ZXJyID0gLUVOT01FTTtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjMwNjpcXHRob3RfdGhyZXMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZhdHRycykgKlxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzA3LVxcdFxcdGhvdF90aHJlc19hY2Nlc3NfZnJlcSAvIDEwMDA7XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTA0PWludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMTUtXFx0XFx0XFx0REFNT05fTUFYX1NVQlNDT1JFLFxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxMTY6XFx0XFx0XFx0ZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2Yy1cXHUwMDNlYXR0cnMpKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTE3LVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTYyMj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX3NhbXBsZXNfcGVyX2FnZ3Ioc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYyOS1cXHQvKiBaZXJvIGFnZ3JlZ2F0aW9uIGludGVydmFsIGRvZXNuJ3QgY2F1c2UgZGl2aXNpb24gYnkgemVybyAqL1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MzA6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmF0dHJzKSwgMSk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTYzMS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MzMtXFx0YXR0cnMuYWdncl9pbnRlcnZhbCA9ICh1bnNpZ25lZCBsb25nKVVJTlRfTUFYICsgMTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NjM0OlxcdEtVTklUX0VYUEVDVF9HRSh0ZXN0LCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZhdHRycyksIDApO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2MzU6XFx0S1VOSVRfRVhQRUNUX0xFKHRlc3QsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXFx1MDAyNmF0dHJzKSwgVUlOVF9NQVgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02MzYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo1Mi44MzU0Nzk1MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzM1OTE0MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCB3b3Jrcy4gSXQncyB0aW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UsIHRoZSBMaW51eCBrZXJuZWwncyBEYW1vbiBoZWFkZXIgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgYGluY2x1ZGUvbGludXgvZGFtb24uaGAgYXJvdW5kIGxpbmUgMTA3OS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gd2hhdCB0aGlzIHBhcmFtZXRlciBpcyBpbnRlbmRlZCBmb3Igd2l0aGluIERBTU9OLCBhbmQgaXRzIHJvbGUgaW4gdGhlIG1vbml0b3JpbmcgYW5kIGFnZ3JlZ2F0aW9uIHByb2Nlc3MuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MDo1NS41NzEzOTg2MDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNzA6XFx0aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKTtcXG4xMDcxOlxcdGludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpO1xcbjEwNzI6XFx0XFxuMTA3MzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbjEwNzQ6XFx0e1xcbjEwNzU6XFx0XFx0cmV0dXJuIGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19WQUREUiB8fCBjdHgtXFx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xcbjEwNzY6XFx0fVxcbjEwNzc6XFx0XFxuMTA3ODpcXHQvKiBSZXR1cm5zIG51bWJlciBvZiBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xcbjEwNzk6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXG4xMDgwOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuMTA4MTpcXHR7XFxuMTA4MjpcXHRcXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbDtcXG4xMDgzOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfc2FtcGxlcztcXG4xMDg0OlxcdFxcbjEwODU6XFx0XFx0c2FtcGxlX2ludGVydmFsID0gYXR0cnMtXFx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcXG4xMDg2OlxcdFxcdG5yX3NhbXBsZXMgPSBtaW4oYXR0cnMtXFx1MDAzZWFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWwsXFxuMTA4NzpcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZylVSU5UX01BWCk7XFxuMTA4ODpcXHRcXHRyZXR1cm4gbnJfc2FtcGxlcyA/IDogMTtcXG4xMDg5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTA6NTUuNTcxNTEzNTA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ1Mzk2MDY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBQb3RlbnRpYWwgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5IGFuZCBjbGVhbmluZyB1cCBzb21lIGRlYnVnIHN0YXRlbWVudHMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgcmVwbGFjaW5nIHRoYXQgYGMtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCAvIChjLVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/IGMtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsIDogMSlgIGNhbGN1bGF0aW9uIHdpdGggYSBjYWxsIHRvIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmMtXHUwMDNlYXR0cnMpYC4gSXQgbG9va3MgbGlrZSB0aGUgbmV3IGZ1bmN0aW9uIGRvZXMgYSBzYWZlciBkaXZpc2lvbiwgY2xhbXBpbmcgdGhlIHJlc3VsdCB0byBgVUlOVF9NQVhgIGFuZCBlbnN1cmluZyBhIG1pbmltdW0gdmFsdWUgb2YgMS4gR29vZCwgdGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCwgYXMgaXQgcHJldmVudHMgYG1heF90aHJlc2AgZnJvbSBiZWluZyBpbmFwcHJvcHJpYXRlbHkgdHJ1bmNhdGVkIHdoZW4gdGhlIGFnZ3JlZ2F0aW9uIGludGVydmFsIGlzIHZlcnkgbGFyZ2UsIHdoaWNoIGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBpbiBEQU1PTi5cblxuSSdtIHNlZWluZyB0aGF0IHRoZSBwYXRjaCAqZG9lc24ndCogYWN0dWFsbHkgaW50cm9kdWNlIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBkaXJlY3RseTsgaXQncyB1c2luZyBhbiBleGlzdGluZyBmdW5jdGlvbiB3aXRoaW4gYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AuIEFsc28sIHRoZXJlJ3Mgc29tZSBjbGVhbnVwIOKAkyByZW1vdmFsIG9mIGBwcl9kZWJ1Z2AgY2FsbHMsIHdoaWNoIGlzIGdlbmVyYWxseSBwb3NpdGl2ZSBmb3IgcGVyZm9ybWFuY2UsIGFsdGhvdWdoIGl0IG1pZ2h0IG1ha2UgZGVidWdnaW5nIGhhcmRlciBpbiB0aGUgc2hvcnQgdGVybS5cblxuT2theSwgbGV0J3MgZ28gYSBiaXQgZGVlcGVyLiAgVGhlcmUncyBhIHRlc3QgY2FzZSwgYGRhbW9uX3Rlc3RfbnJfc2FtcGxlc19wZXJfYWdncmAsIHdoaWNoIGlzIGVuY291cmFnaW5nIOKAkyBpdCBzdWdnZXN0cyB0aGUgZGV2ZWxvcGVycyBhcmUgYmVpbmcgcHJvYWN0aXZlIGFib3V0IHRlc3RpbmcgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gVGhlIGNoYW5nZXMgdG8gYGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnNfZm9yYCBhbHNvIGxvb2sgaW50ZXJlc3RpbmcsIGVzcGVjaWFsbHkgdGhlIGFkZGl0aW9uIG9mIGBleHBlY3RfZXJyYC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBvdGhlciBhcmVhcyBvZiBjaGFuZ2UgaW4gdGhpcyBwYXRjaDsgbG9va3MgbGlrZSBpdCByZW1vdmVkIHNvbWUgYHByX2RlYnVnYCBmcm9tIGBtbS9kYW1vbi92YWRkci5jYCwgd2hpY2ggaXMgYWxzbyBmaW5lLiBBbmQgdGhlcmUncyBhIG1vZGlmaWNhdGlvbiB0byBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vc3lzZnMuc2hgIGludm9sdmluZyBgaHVnZXBhZ2VfbWVtX2JwYC5cblxuTm93LCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AgaXMgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy4gVGhlIHJlcGxhY2VtZW50OlxuXG5gYGBjXG4tXHRtYXhfdGhyZXMgPSBjLVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgL1xuLVx0XHQoYy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyAgYy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTtcbitcdG1heF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2Yy1cdTAwM2VhdHRycyk7XG5gYGBcblxuLi4uIGlzIGNsZWFybHkgaW50ZW5kZWQgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93LiAgVGhpcyBtZWFucyB0aGF0IGlmIEkgY2FuIGNyYWZ0IGBhZ2dyX2ludGVydmFsYCBhbmQgYHNhbXBsZV9pbnRlcnZhbGAgdmFsdWVzIHRoYXQgY2F1c2UgdGhlIG9sZCBkaXZpc2lvbiB0byBvdmVyZmxvdywgdGhlIG5ldyBjb2RlIHNob3VsZCBoYW5kbGUgaXQgY29ycmVjdGx5LiBTcGVjaWZpY2FsbHksIEknZCB3YW50IHRvIHRlc3QgdGhlIGVkZ2UgY2FzZSBvZiB3aGVyZSBgYWdncl9pbnRlcnZhbGAgaXMgbGFyZ2UgZW5vdWdoIHRvIG92ZXJmbG93IHRoZSBkaXZpc2lvbiwgYnV0IHRoZSBuZXcgYG1pbiguLi4sIFVJTlRfTUFYKWAgaW4gYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIGtlZXBzIHRoaW5ncyBzYW5lLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBjb3JuZXIgY2FzZXMgYXJvdW5kIHRoZSBgPyA6IDFgIGluIHRoZSBzYW1wbGVfaW50ZXJ2YWwgY2hlY2ssIGFzIHdlbGwgYXMgemVybyBhbmQgbmVnYXRpdmUgdmFsdWVzIGZvciB0aGlzIGFuZCB0aGUgYWdncl9pbnRlcnZhbC5cblxuQnV0LCBpcyB0aGlzIHRoZSBvbmx5IGZ1bmN0aW9uYWwgY2hhbmdlPyBOby4gVGhlIHBhdGNoICphbHNvKiBjaGFuZ2VzIGBkYW1vbl9zZXRfcmVnaW9uc2AuIFRoZSBuZXcgdGVzdHMgZm9yIGBkYW1vbl9zZXRfcmVnaW9uc2AgcmV0dXJuaW5nIGAtRUlOVkFMYCBmb3IgemVybyBzaXplLCBuZWdhdGl2ZSBzaXplLCBhbmQgcmVnaW9ucyByZXN1bHRpbmcgaW4gdGhlIHNhbWUgcmVnaW9uIGFmdGVyIGFsaWdubWVudC4gVGhpcyBzdWdnZXN0cyBhIG1vcmUgcm9idXN0IHZhbGlkYXRpb24gb2YgcmVnaW9uIGRlZmluaXRpb25zLiBJJ2xsIG5lZWQgdG8gbG9vayB2ZXJ5IGNsb3NlbHkgYXQgdGhlIGNvZGUgaW4gYGRhbW9uX3NldF9yZWdpb25zYCB0byBzZWUgKmhvdyogdGhlc2UgaW52YWxpZCBjYXNlcyBhcmUgYmVpbmcgaGFuZGxlZCBub3cuIEkgc3VzcGVjdCBteSBmdXp6aW5nIHdpbGwgbmVlZCB0byBjb3ZlciB0aGVzZSB0ZXN0cywgdG9vLCBjaGVja2luZyBmb3IgdGhlIGNvcnJlY3QgZXJyb3IgY29kZSByZXR1cm5zLlxuXG5BbHJpZ2h0LiBUaW1lIHRvIHB1dCB0aGlzIGludG8gcHJhY3RpY2UgYW5kIHB1dCBpdCB0aHJvdWdoIGEgZnV6emVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzQ2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTE6MDQuMDI1NDc4NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDcxOTc5MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3NldF9yZWdpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0zOD1zdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNTAtICpcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6NTE6ICogRm9yIGFueSB1c2UgY2FzZSwgQGFyIHNob3VsZCBiZSBub24temVybyBwb3NpdGl2ZSBzaXplLiAgZGFtb25fc2V0X3JlZ2lvbnMoKVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC01Mi0gKiBkb2VzIHRoZSB2YWxpZGF0aW9uLlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwMjY9dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAyOC1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTAyOTppbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAzMC1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTQ0NT1zdGF0aWMgaW50IGRhbW9uX2ZpbGxfcmVnaW9uc19ob2xlcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpmaXJzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00NjYtLypcXG5tbS9kYW1vbi9jb3JlLmM6NDY3OiAqIGRhbW9uX3NldF9yZWdpb25zKCkgLSBTZXQgcmVnaW9ucyBvZiBhIHRhcmdldCBmb3IgZ2l2ZW4gYWRkcmVzcyByYW5nZXMuXFxubW0vZGFtb24vY29yZS5jLTQ2OC0gKiBAdDpcXHRcXHR0aGUgZ2l2ZW4gdGFyZ2V0Llxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ3Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDc4OmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbm1tL2RhbW9uL2NvcmUuYy00NzktXFx0XFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE1MjY9c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1NTUtXFx0cmFuZ2VzW2krK10uZW5kID0gZGFtb25fbGFzdF9yZWdpb24oc3JjKS1cXHUwMDNlYXIuZW5kO1xcbm1tL2RhbW9uL2NvcmUuYzoxNTU2OlxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKGRzdCwgcmFuZ2VzLCBpLCBzcmNfbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vY29yZS5jLTE1NTctXFx0a3ZmcmVlKHJhbmdlcyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzk3Mj1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk4My1cXHRhZGRyX3JhbmdlLmVuZCA9ICplbmQ7XFxubW0vZGFtb24vY29yZS5jOjM5ODQ6XFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFxcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzk4NS19XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwMDA9c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDIxLVxcdH1cXG5tbS9kYW1vbi9zeXNmcy5jOjIwMjI6XFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBzeXNmc19yZWdpb25zLVxcdTAwM2VuciwgbWluX3JlZ2lvbl9zeik7XFxubW0vZGFtb24vc3lzZnMuYy0yMDIzLW91dDpcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD00NjI9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQ4NC1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NDg1OlxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKHQsIG5ld19yYW5nZXMsIHN6X25ld19yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00ODYtXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGVyciwgZXhwZWN0X2Vycik7XFxuLS1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oPTkwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTAzLS8qXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxMDQ6ICogVGVzdCAnZGFtb25fc2V0X3JlZ2lvbnMoKSdcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEwNS0gKlxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xMTgtICogcmVnaW9ucy4gIFRoZSB1cGRhdGUgb2YgY3VycmVudCB0YXJnZXQgcmVnaW9ucyBpcyB0aGUgcm9sZSBvZlxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0Lmg6MTE5OiAqICdkYW1vbl9zZXRfcmVnaW9ucygpJy5cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTEyMC0gKlxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaD0xMjU9c3RhdGljIHZvaWQgZGFtb25fZG9fdGVzdF9hcHBseV90aHJlZV9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTQ3LVxcdH1cXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oOjE0ODpcXHRpZiAoZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBucl9yZWdpb25zIC8gMixcXG5tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oLTE0OS1cXHRcXHRcXHRcXHREQU1PTl9NSU5fUkVHSU9OX1NaKSkge1xcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTEtXFx0XFx0ZGFtb25fZGVzdHJveV90YXJnZXQodCwgTlVMTCk7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTI6XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiZGFtb25fc2V0X3JlZ2lvbnMoKSBmYWlsXFxcIik7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTMtXFx0fVxcbi0tXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTUtXFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTY6XFx0aWYgKGRhbW9uX3NldF9yZWdpb25zKHQsIHRocmVlX3JlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opKSB7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaC0xNTctXFx0XFx0ZGFtb25fZGVzdHJveV90YXJnZXQodCwgTlVMTCk7XFxubW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaDoxNTg6XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwic2Vjb25kIGRhbW9uX3NldF9yZWdpb25zKCkgZmFpbFxcXCIpO1xcbm1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgtMTU5LVxcdH1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MTkyPXN0YXRpYyB2b2lkIF9fZGFtb25fdmFfaW5pdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMTk5LVxcbm1tL2RhbW9uL3ZhZGRyLmM6MjAwOlxcdGRhbW9uX3NldF9yZWdpb25zKHQsIHJlZ2lvbnMsIDMsIERBTU9OX01JTl9SRUdJT05fU1opO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMjAxLX1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjE4PXN0YXRpYyB2b2lkIGRhbW9uX3ZhX3VwZGF0ZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTIyNS1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9kYW1vbi92YWRkci5jOjIyNjpcXHRcXHRkYW1vbl9zZXRfcmVnaW9ucyh0LCB0aHJlZV9yZWdpb25zLCAzLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG5tbS9kYW1vbi92YWRkci5jLTIyNy1cXHR9XFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmM9NzM9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3NhbXBsZV9tdGllcl9idWlsZF9jdHgoYm9vbCBwcm9tb3RlKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEyOC1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTI5OlxcdHJldCA9IGRhbW9uX3NldF9yZWdpb25zKHRhcmdldCwgXFx1MDAyNnJhbmdlLCAxLCBEQU1PTl9NSU5fUkVHSU9OX1NaKTtcXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTMwLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUxOjA3LjA5NzQ2OTc4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NzYxODczNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBEQU1PTiBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIHNlZW1zIHJlbGF0aXZlbHkgbWlub3IuIEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgc2lnbmlmaWNhbnQgbmV3IGZ1bmN0aW9uYWxpdHksIGp1c3QgdHdlYWtzIGFyb3VuZCBleGlzdGluZyBjb2RlLiBUaGUgcHJpbWFyeSBhcmVhIG9mIGNvbmNlcm4sIHRoZSBgZGFtb25fc2V0X3JlZ2lvbnNgIGZ1bmN0aW9uLCBpc24ndCBhY3R1YWxseSBtb2RpZmllZCBkaXJlY3RseS4gVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgcmVsYXRlZCB0ZXN0cyBhbmQgS1VuaXQgY29uZmlndXJhdGlvbnMgZm9yIGl0LiBUaGVzZSB0ZXN0cyBhcmUgdmVyaWZ5aW5nIGV4aXN0aW5nIGVycm9yIGNvbmRpdGlvbnMsIHNvIHRoYXQncyBub3QgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBhZGRpdGlvbiBvZiB0ZXN0cyBmb3IgaW52YWxpZCBpbnB1dHMsIHN1Y2ggYXMgemVybyBvciBuZWdhdGl2ZS1zaXplZCByZWdpb25zLCBvbmx5IHRlc3RzIGV4aXN0aW5nIGVycm9yIGhhbmRsaW5nLiBUaGUgc2VsZnRlc3QgY2hhbmdlLCBgaHVnZXBhZ2VfbWVtX2JwYCwgaXMgYWxzbyBub3QgcmVsYXRlZCB0byBhIG5ldyBhZGRpdGlvbiwgaXQgaXMgb25seSB1cGRhdGluZyBhIHRlc3QgZm9yIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkuXG5cblRoZW4gdGhlcmUgaXMgdGhlIGNvcmUgY29kZSBjaGFuZ2U6XG5gYGBjXG4tXHRtYXhfdGhyZXMgPSBjLVx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgL1xuLVx0XHQoYy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyAgYy1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgOiAxKTtcbitcdG1heF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2Yy1cdTAwM2VhdHRycyk7XG5gYGBcblxuVGhpcyBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gVGhlIG9yaWdpbmFsIGNhbGN1bGF0aW9uIG9mIGBtYXhfdGhyZXNgIGlzIHBvdGVudGlhbGx5IHN1c2NlcHRpYmxlIHRvIGludGVnZXIgdHJ1bmNhdGlvbi4gVGhlIHVwZGF0ZWQgY2FsY3VsYXRpb24gdXNlcyBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAsIHdoaWNoIGNhcHMgdGhlIHJlc3VsdCB0byBgVUlOVF9NQVhgLCBmaXhpbmcgYSBwb3NzaWJsZSBvdmVyZmxvdyBpc3N1ZS5cblxuVGhlIGNoYW5nZSBleGlzdHMgaW4gYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBga2RhbW9uZF9mbmAsIHNvIGl0J3MgYSBjb3JlIERBTU9OIGZ1bmN0aW9uLiBUaGlzIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgbW9yZSBkZWVwbHkuXG5cbkxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBvdGhlciBjaGFuZ2VzLiBUaGVyZSdzIHJlbW92YWwgb2YgYHByX2RlYnVnYCBzdGF0ZW1lbnRzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMsIEtVbml0IHRlc3QgdXBkYXRlcywgYW5kIHNlbGZ0ZXN0IHVwZGF0ZXMuIFRoZXNlIGFyZSwgaW4gZXNzZW5jZSwganVzdCBub2lzZSBjb21wYXJlZCB0byB0aGUgY29yZSBsb2dpYyBjaGFuZ2UuXG5cbkNvbnNpZGVyaW5nIHRoZSBmdW5jdGlvbmFsIGNoYW5nZTpcbmBgYGNcbi1cdG1heF90aHJlcyA9IGMtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCAvXG4tXHRcdChjLVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/ICBjLVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA6IDEpO1xuK1x0bWF4X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjLVx1MDAzZWF0dHJzKTtcbmBgYFxuSXQncyBhIG9uZS1saW5lIGZpeCBmb3IgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uLCBhIHJlbGF0aXZlbHkgc21hbGwgY2hhbmdlLiBIb3dldmVyLCBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCBpcyBhIGNvcmUgZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgaGFzIGl0cyBiZWhhdmlvdXIgY2hhbmdlZCBieSB0aGlzIHBhdGNoLlxuXG5JIG11c3QgY29uc2lkZXIgdGhlIGNyaXRlcmlhIGZvciBleGNsdWRpbmcgcGF0Y2hlcyBmcm9tIGZ1enppbmcuIEFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGxvZ2dpbmcsIGNvbnN0YW50IGFkanVzdG1lbnRzIHRoYXQgZG9uJ3QgYWZmZWN0IGZsb3csIHVucmVhY2hhYmxlIGNvZGUsIGFuZCBzcGVjaWZpYyBkcml2ZXIgb3IgaGFyZHdhcmUgY29udGV4dHMgYXJlIGV4Y2x1ZGVkLiBUaGlzIGNoYW5nZSBpcyBub3QgcHVyZWx5IGRlY29yYXRpdmUgYW5kICpkb2VzKiBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgYSBjb3JlIERBTU9OIGNvbXBvbmVudC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBgbWF4X3RocmVzYCwgd2hpY2ggaXMgdXNlZCBpbiBhIGxvb3AgdG8gZGV0ZXJtaW5lIHdoZW4gdG8gbWVyZ2UgcmVnaW9ucy5cblxuYGBgY1xuXHRtYXhfdGhyZXMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmMtXHUwMDNlYXR0cnMpO1xuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdG5yX3JlZ2lvbnMgPSAwO1xuXHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG5cdFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdClcblx0XHRcdFx0bnJfcmVnaW9ucysrO1xuXHRcdH1cblx0XHRpZiAobnJfcmVnaW9ucyBcdTAwM2M9IGMtXHUwMDNlYXR0cnMubWF4X25yX3JlZ2lvbnMpXG5cdFx0XHRicmVhaztcblx0XHRtYXhfdGhyZXMgPSBtYXgoMVUsIG1heF90aHJlcyAqIDIpO1xuYGBgXG5cbklmIHRoZSBvcmlnaW5hbCBjYWxjdWxhdGlvbiB0cnVuY2F0ZWQgYG1heF90aHJlc2AgdG8gYSBzbWFsbCB2YWx1ZSAoZS5nLiwgMCBvciAxKSwgdGhpcyBsb29wIHdvdWxkIGl0ZXJhdGUgZmFyIG1vcmUgdGltZXMgdGhhbiBuZWNlc3NhcnkuIE5vdywgdGhlIGZpeCBzZXRzIGBtYXhfdGhyZXNgIHRvIGBVSU5UX01BWGAgKGlmIGl0IHdhcyBvdmVyZmxvd2luZyksIHRoaXMgbWF5IGNhdXNlIHRoZSBsb29wIHRvIGl0ZXJhdGUgZmFyIGZld2VyIHRpbWVzLiBUaGlzIGlzIGEgYmVoYXZpb3JhbCBjaGFuZ2UuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHN5c2ZzIG9yIGRlYnVnZnMsIHNvIGl0J3MgZnV6emFibGUuXG5cblRoZSBgaHVnZXBhZ2VfbWVtX2JwYCBjaGFuZ2UgaW4gdGhlIHNlbGZ0ZXN0IGlzIGp1c3QgYSB0ZXN0IHVwZGF0ZSBmb3IgYSBmZWF0dXJlIGFscmVhZHkgaW4gdGhlIGtlcm5lbDsgdGhpcyBwYXRjaCBkb2Vzbid0IGFkZCBhbnkgbmV3IGZ1bmN0aW9uYWxpdHkgd2l0aCBpdC4gU28sIHRoYXQncyBub3QgcmVsZXZhbnQgZm9yIG91ciBmdXp6aW5nIGFuYWx5c2lzLFxuXG5Tbywgd2hpbGUgdGhlIHBhdGNoIGl0c2VsZiBtaWdodCBiZSBjb25zaWRlcmVkIG1pbm9yLCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBjb3JlIERBTU9OIGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBpbnRlZ2VyIHRydW5jYXRpb24gZml4IGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIOKAkyB3YXJyYW50cyBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwsIHRoZSBsb2dpYyBpcyByZWFjaGFibGUsIGFuZCB0aGUgY2hhbmdlIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gcGF0aC5cbkknbGwgbWFyayB0aGlzIGFzIHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzM3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MToyMS44NTkzNDcxMTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NjUxMDU2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2RhbW9uZF9tZXJnZV9yZWdpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMzEzPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzNjctICovXFxubW0vZGFtb24vY29yZS5jOjMzNjg6c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxubW0vZGFtb24vY29yZS5jLTMzNjktXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHN6X2xpbWl0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM0NzM9c3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNTA5LSAqIG1vbml0b3JpbmcgYWNjdXJhY3kgdW5kZXIgdGhlIGR5bmFtaWNhbGx5IGNoYW5nZWFibGUgYWNjZXNzIHBhdHRlcm5zLiAgSWYgYVxcbm1tL2RhbW9uL2NvcmUuYzozNTEwOiAqIHNwbGl0IHdhcyB1bm5lY2Vzc2FyaWx5IG1hZGUsIGxhdGVyICdrZGFtb25kX21lcmdlX3JlZ2lvbnMoKScgd2lsbCByZXZlcnRcXG5tbS9kYW1vbi9jb3JlLmMtMzUxMS0gKiBpdC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzQ1PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4MDctXFx0XFx0XFx0XFx0XFx0bmV4dF9hZ2dyZWdhdGlvbl9zaXMpKSB7XFxubW0vZGFtb24vY29yZS5jOjM4MDg6XFx0XFx0XFx0a2RhbW9uZF9tZXJnZV9yZWdpb25zKGN0eCxcXG5tbS9kYW1vbi9jb3JlLmMtMzgwOS1cXHRcXHRcXHRcXHRcXHRtYXhfbWVyZ2Vfc2NvcmUgLyAxMCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODE2LVxcdFxcdCAqIGRvIGtkYW1vbmRfY2FsbCgpIGFuZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoKSBhZnRlclxcbm1tL2RhbW9uL2NvcmUuYzozODE3OlxcdFxcdCAqIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucygpIGlmIHBvc3NpYmxlLCB0byByZWR1Y2Ugb3ZlcmhlYWRcXG5tbS9kYW1vbi9jb3JlLmMtMzgxOC1cXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTE6MjUuNjI0NDgwNjk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjc5NjQxNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIEVudHJ5IFBvaW50IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBEQU1PTiBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBtYWluIGVudHJ5IHBvaW50LiBJdCBsb29rcyBsaWtlIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGdldHMgY2FsbGVkIGZyb20gYGtkYW1vbmRfZm5gLCB3aGljaCBpcyB0aGUgY29yZSB0aHJlYWQgZnVuY3Rpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGUga2V5IHN5bWJvbCwgdGhlIHBvaW50IG9mIGZvY3VzIGZvciB0aGlzLCBzaG91bGQgYmUgZWl0aGVyIGBrZGFtb25kX2ZuYCBvciBga2RhbW9uZF9tZXJnZV9yZWdpb25zYC5cblxuV2FpdCBhIG1pbnV0ZSwgYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBBaCwgcmlnaHQsIHRoYXQgdHJpZ2dlcnMgYSBndWlkZWxpbmUgaW4gbXkgaGVhZDogXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcIi4gVGhhdCBpbXBsaWVzIGBrZGFtb25kX2ZuYCBpcyBhbHNvIGxpa2VseSBzdGF0aWMuIFRoYXQncyBhIGxpdHRsZSB1bnVzdWFsIGZvciB0aGUgbWFpbiBlbnRyeS4gTGV0J3MgbWFrZSBzdXJlLCBJIG5lZWQgdG8gY29uZmlybSBga2RhbW9uZF9mbmAncyBzdGF0aWMgZGVzaWduYXRpb24gdG8gYmUgc3VyZS4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODMxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUyOjI5LjMwNDEyNjI2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0MzAxNjE4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZGFtb25kX2ZuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD04NTQ9c3RydWN0IGRhbW9uX2N0eCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODc0LVxcdHVuc2lnbmVkIGxvbmcgbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXM7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjg3NTpcXHQvKiBmb3Igd2FpdGluZyB1bnRpbCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBrZGFtb25kX2ZuIGlzIHN0YXJ0ZWQgKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODc2LVxcdHN0cnVjdCBjb21wbGV0aW9uIGtkYW1vbmRfc3RhcnRlZDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAzNS0gKiBiZSBjYWxsZWQgZnJvbSBhIHNhZmUgY29udGV4dHMuICBTdWNoIGNvbnRleHRzIGluY2x1ZGUgZGFtb25fY3R4IHNldHVwIHRpbWVcXG5tbS9kYW1vbi9jb3JlLmM6MTAzNjogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxcbm1tL2RhbW9uL2NvcmUuYy0xMDM3LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA0MC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxubW0vZGFtb24vY29yZS5jOjEwNDE6ICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXFxubW0vZGFtb24vY29yZS5jLTEwNDItICogYXBwbHlpbmcgYXV0by10dW5lZCBtb25pdG9yaW5nIGludGVydmFscy5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDQ4PWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwNzQtXFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6MTA3NTpcXHQgKiBuZXh0X2ludGVydmFsc190dW5lX3NpcyB3aWxsIGJlIHVwZGF0ZWQgaW5zaWRlIGtkYW1vbmRfZm4oKS5cXG5tbS9kYW1vbi9jb3JlLmMtMTA3Ni1cXHQgKi9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTA1PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTI0LVxcbm1tL2RhbW9uL2NvcmUuYzoxOTI1OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTkyNi1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTM1PXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk0Mi1cXHRcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xcbm1tL2RhbW9uL2NvcmUuYzoxOTQzOlxcdFxcdGN0eC1cXHUwMDNla2RhbW9uZCA9IGt0aHJlYWRfcnVuKGtkYW1vbmRfZm4sIGN0eCwgXFxcImtkYW1vbmQuJWRcXFwiLFxcbm1tL2RhbW9uL2NvcmUuYy0xOTQ0LVxcdFxcdFxcdFxcdG5yX3J1bm5pbmdfY3R4cyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjAzOT12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNDMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2N0eHM7IGkrKylcXG5tbS9kYW1vbi9jb3JlLmM6MjA0NDpcXHRcXHQvKiBucl9ydW5uaW5nX2N0eHMgaXMgZGVjcmVtZW50ZWQgaW4ga2RhbW9uZF9mbiAqL1xcbm1tL2RhbW9uL2NvcmUuYy0yMDQ1LVxcdFxcdF9fZGFtb25fc3RvcChjdHhzW2ldKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzIzPXN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NDQtICovXFxubW0vZGFtb24vY29yZS5jOjM3NDU6c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxubW0vZGFtb24vY29yZS5jLTM3NDYte1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTE2MTU9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9pc19sYXN0X3JlZ2lvbihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY0MS0gKiBUaGlzIHRlc3RzIHRoZSBpbnZhcmlhbnQgaW50cm9kdWNlZCBieTpcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTY0MjogKiBjb21taXQgMzNjM2Y2YzJiNDhjIChcXFwibW0vZGFtb24vY29yZTogZml4IGRhbW9zX3dhbGsoKSB2cyBrZGFtb25kX2ZuKCkgZXhpdCByYWNlXFxcIilcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTY0My0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6MzIuMjQ3MTU1MTY2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDUwNjYyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipIdW50aW5nIGZvciBEeW5hbWljIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgY29kZWJhc2UsIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoYXQgdGhlIHN0YW5kYXJkIGVudHJ5IHBvaW50LCBgX19kYW1vbl9zdGFydGAsIGlzIGEgc3RhdGljIG9uZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkga25vdyBiZXR0ZXIgdGhhbiB0byBhc3N1bWUgdGhhdCdzIHRoZSAqb25seSogd2F5IHRoZSBjb2RlIGlzIGluaXRpYWxpemVkIG9yIGV4ZWN1dGVkLiBJbiBteSBleHBlcmllbmNlLCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIGZpbmQgb3RoZXIgZW50cnkgcG9pbnRzLCBvbmVzIHRoYXQgbWlnaHQgYmUgZHluYW1pY2FsbHkgZGV0ZXJtaW5lZCBvciBpbml0aWF0ZWQgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9ucy4gS25vd2luZyB0aGUgc3RhdGljIGVudHJpZXMgaXMgdXNlZnVsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbmRlZCBzdGFydGluZyBwb2ludCBvZiB0aGlzIGNvZGUsIGJ1dCwgSSBuZWVkIHRvIGZpbmQgYWxsIG9mIHRoZSBlbnRyeSBwb2ludHMgZm9yIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLiBJIHdhbnQgdG8gdW5jb3ZlciBhbnkgb3RoZXIgaW5pdGlhbGl6YXRpb25zIG9yIGV4ZWN1dGlvbnMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgZGVmaW5lZC4gSXQncyB0aW1lIHRvIHN0YXJ0IHNlYXJjaGluZyBmb3IgdGhlIG1vcmUgZWx1c2l2ZSwgbm9uLXN0YXRpYyBtZXRob2RzIG9yIGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMjAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MjozNS4zNTIyMjYxNTdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjU2MjY3NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc3RhcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwOTI9Ym9vbCBkYW1vbl9pbml0aWFsaXplZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA5MzppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwOTQtdm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTAxMz1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMzgtICogSW4gZGV0YWlsLCBhbGwgREFNT04gQVBJIGNhbGxlcnMgZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBpbml0aWFsXFxubW0vZGFtb24vY29yZS5jOjEwMzk6ICogc2V0dXAgb2YgZGFtb25fY3R4IGJlZm9yZSBjYWxsaW5nIGRhbW9uX3N0YXJ0KCkuICBTb21lIG9mIHRoZSBBUEkgY2FsbGVyc1xcbm1tL2RhbW9uL2NvcmUuYy0xMDQwLSAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXFx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3JcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTI1PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTI3LS8qXFxubW0vZGFtb24vY29yZS5jOjE5Mjg6ICogX19kYW1vbl9zdGFydCgpIC0gU3RhcnRzIG1vbml0b3Jpbmcgd2l0aCBnaXZlbiBjb250ZXh0Llxcbm1tL2RhbW9uL2NvcmUuYy0xOTI5LSAqIEBjdHg6XFx0bW9uaXRvcmluZyBjb250ZXh0XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkzNC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTkzNTpzdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0xOTM2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xOTU3PXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTU5LS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxOTYwOiAqIGRhbW9uX3N0YXJ0KCkgLSBTdGFydHMgdGhlIG1vbml0b3JpbmdzIGZvciBhIGdpdmVuIGdyb3VwIG9mIGNvbnRleHRzLlxcbm1tL2RhbW9uL2NvcmUuYy0xOTYxLSAqIEBjdHhzOlxcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NjgtICogQGV4Y2x1c2l2ZSBpcyB0cnVlIGFuZCBhIGdyb3VwIG9mIHRocmVhZHMgdGhhdCBjcmVhdGVkIGJ5IG90aGVyXFxubW0vZGFtb24vY29yZS5jOjE5Njk6ICogJ2RhbW9uX3N0YXJ0KCknIGNhbGwgaXMgY3VycmVudGx5IHJ1bm5pbmcsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGJ1dFxcbm1tL2RhbW9uL2NvcmUuYy0xOTcwLSAqIHJldHVybnMgLUVCVVNZLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NzMtICovXFxubW0vZGFtb24vY29yZS5jOjE5NzQ6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXFxubW0vZGFtb24vY29yZS5jLTE5NzUte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5OTktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2N0eHM7IGkrKykge1xcbm1tL2RhbW9uL2NvcmUuYzoyMDAwOlxcdFxcdGVyciA9IF9fZGFtb25fc3RhcnQoY3R4c1tpXSk7XFxubW0vZGFtb24vY29yZS5jLTIwMDEtXFx0XFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDcwPWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA5Ny0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyMDk4OiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXFxubW0vZGFtb24vY29yZS5jLTIwOTktICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjEwNj1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE1Mi0gKlxcbm1tL2RhbW9uL2NvcmUuYzoyMTUzOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXFxubW0vZGFtb24vY29yZS5jLTIxNTQtICogQGN0eCBoYXMgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0aW9uIGNvdWxkIGZhbGwgaW50byBhbiBpbmRlZmluaXRlXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwOD1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIwLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDIxOlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIyLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MzMxPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQzLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozNDQ6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTM0NS1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0yMTItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vc3RhdC5jOjIxMzpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2ZGFtb25fc3RhdF9jb250ZXh0LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9zdGF0LmMtMjE0LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyNjctXFx0fVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjI2ODpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XFxubW0vZGFtb24vc3lzZnMuYy0yMjY5LVxcdGlmIChlcnIpIHtcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYz0xNzc9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfbXRpZXJfc3RhcnQodm9pZClcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xOTEtXFx0Y3R4c1sxXSA9IGN0eDtcXG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTkyOlxcdGVyciA9IGRhbW9uX3N0YXJ0KGN0eHMsIDIsIHRydWUpO1xcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xOTMtXFx0aWYgKCFlcnIpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3ByY2wuYz02MD1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV9wcmNsX3N0YXJ0KHZvaWQpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy0xMDctXFxuc2FtcGxlcy9kYW1vbi9wcmNsLmM6MTA4OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbnNhbXBsZXMvZGFtb24vcHJjbC5jLTEwOS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYz02MT1zdGF0aWMgaW50IGRhbW9uX3NhbXBsZV93c3NlX3N0YXJ0KHZvaWQpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy04OC1cXG5zYW1wbGVzL2RhbW9uL3dzc2UuYzo4OTpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5zYW1wbGVzL2RhbW9uL3dzc2UuYy05MC1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUyOjM4LjQ3Nzg2MjQ2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDA1MDQ4NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbWFwIG91dCB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYGRhbW9uX3N0YXJ0YCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgQVBJIGVudHJ5IHBvaW50IHRoYXQga2lja3MgdGhpbmdzIG9mZi4gTGV0IG1lIGRvdWJsZS1jaGVjay4uLiB5ZXAsIHNlZW1zIHRvIGJlIHRoZSBtYWluIGRyaXZlci4gQnV0IGlzIHRoYXQgKml0Kj8gTm9wZSwgYGRhbW9uX3NldF9hdHRyc2AgaXMgYWxzbyBhbiBlbnRyeSBwb2ludCAtIG1ha2VzIHNlbnNlLCBzaW5jZSBpdCdzIHRoZSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIGBzdHJ1Y3QgZGFtb25fYXR0cnNgIHRoYXQgY29udHJvbCB0aGluZ3MgbGlrZSBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAuIFRoZW4gdGhlcmUgaXMgYGRhbW9uX3NldF9yZWdpb25zYCBhcyB3ZWxsLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFwcGVhcnMgdG8gbW9kaWZ5IGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgLCB3aGljaCBpcyBpbnZva2VkIGR1cmluZyB0aGUgZXhlY3V0aW9uIGluaXRpYXRlZCBieSBgZGFtb25fc3RhcnRgLCB0aGF0IG1ha2VzIGl0IGEgZ29vZCBmb2N1cyBmb3IgYW5hbHlzaXMuIEFsc28sIGJlY2F1c2UgYGRhbW9uX3NldF9hdHRyc2AgY29uZmlndXJlcyB0aGUgYXR0cmlidXRlcyB1c2VkIGluIHNhbXBsaW5nLCBpdCdzIGFsc28gYSBzdHJvbmcgY2FuZGlkYXRlIGZvciBjbG9zZXIgaW5zcGVjdGlvbi4gQW5kIGhleSwgdGhlIHRlc3RzIGFkZGVkIGFyZSBmb3IgYGRhbW9uX3NldF9yZWdpb25zYCB0b28sIHNvIHRoYXQncyBhbHNvIGFuIGltcG9ydGFudCBwaWVjZSB0byBjb25zaWRlci5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWdzIGFyZSBzZXQgdXAgZm9yIERBTU9OLiBUaGF0J3MgYWx3YXlzIG15IGZpcnN0IHN0ZXAgYmVmb3JlIGRpdmluZyB0b28gZGVlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxODgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6NDIuODgyOTE0NDE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjE5NzMxNTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUyOjQ2LjEwMjY2MDM4N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg3NTgxMjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gS2NvbmZpZyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aGUgdGFzayBhdCBoYW5kIHJlcXVpcmVzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgZGFlbW9uLCBvciBcIm1tL2RhbW9uXCIgYXMgd2UgY2FsbCBpdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgY3JhY2sgb3BlbiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuXCIgVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIHN1YnN5c3RlbS4gVGhpcyBmaWxlIHdpbGwgcmV2ZWFsIHdoaWNoIG90aGVyIGZlYXR1cmVzLCBtb2R1bGVzLCBvciBrZXJuZWwgc2V0dGluZ3MgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBEQU1PTiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEknbSBleHBlY3RpbmcgdG8gZmluZCBpbnRyaWNhdGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHZhcmlvdXMgS2NvbmZpZyBzeW1ib2xzLCBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMsIG9yIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCBob3cgdGhpcyBtb2R1bGUgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbC4gSSBjYW4gdGhlbiB1c2UgdGhhdCBpbmZvcm1hdGlvbiB0byBkZXZlbG9wIG9yIGRlYnVnIHRoZSBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDg3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6NDkuMjkwMjQ1NTE2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTI6NDkuMjkwMzg4NjM2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjM0OTE5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFN5c2ZzIEV4cG9zdXJlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGBEQU1PTmAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiwgdGhlIGNlbnRyYWwgY29udHJvbCBwb2ludCwgcmlnaHQ/IEV2ZXJ5dGhpbmcgcmV2b2x2ZXMgYXJvdW5kIHRoYXQuIEFuZCwgb2YgY291cnNlLCB0byBpbnRlcmFjdCB3aXRoIGBEQU1PTmAgZWZmZWN0aXZlbHksIHBhcnRpY3VsYXJseSBmb3IgdGhpbmdzIGxpa2UgZnV6emluZyB3aXRoIGEgdG9vbCBsaWtlIHN5emthbGxlciwgd2UgbmVlZCBhIHdheSB0byBleHBvc2UgaXQgdG8gdXNlciBzcGFjZS4gVGhhdCdzIHdoZXJlIGBEQU1PTl9TWVNGU2AgY29tZXMgaW4uIEl0J3MgdGhlIGJyaWRnZSwgdGhlIG1lY2hhbmlzbSB0byBtYWtlIHRoZSBjb25maWd1cmF0aW9uIGFjY2Vzc2libGUgYW5kIHVzYWJsZSBmcm9tIG91dHNpZGUgdGhlIGtlcm5lbC4gV2l0aG91dCB0aGF0LCB3ZSdyZSBzdHVjayBpbiBhIGJsYWNrIGJveC4gU28sIGBEQU1PTl9TWVNGU2AgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBmb3IgcHJhY3RpY2FsIGludGVyYWN0aW9uIHdpdGggYERBTU9OYCBpbiB0aGVzZSBraW5kcyBvZiBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDA4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1Mjo1Mi42MTM4ODUzNDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NzY0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY1OlxcdFxcbiAgNjY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgREFNT05fU1lTRlNcXG4gIDY5OlxcdFxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG4gIDcxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDcyOlxcdFxcdGhlbHBcXG4gIDczOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXFxuICA3NDpcXHRcXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbiAgNzc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA3ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDc5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUyOjUyLjYxNjE2MDQxM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjIyMzgzMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGN1cnJlbnQgdHJhaW4gb2YgdGhvdWdodCwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEQU1PTiBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIER5bmFtaWMgQWNjZXNzIE1vbml0b3JpbmcgKERBTU9OKSBjb25maWdzLCBhbmQgaXQgbG9va3MgbGlrZSBgREFNT05gIGFuZCBgREFNT05fU1lTRlNgIGFyZSB0aGUgcHJpbWFyeSBvbmVzIHRvIGJlIGNvbmNlcm5lZCB3aXRoLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBvbiB0aGVzZS4gSSdtIGFsc28gcmVtZW1iZXJpbmcgdGhhdCB0aGUgYWN0dWFsIG1vbml0b3JpbmcgaW1wbGVtZW50YXRpb24gbWlnaHQgaW52b2x2ZSBgREFNT05fVkFERFJgIGFuZCBgREFNT05fUEFERFJgLCBkZXBlbmRpbmcgb24gaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlcy4gSSBzaG91bGQgY2xhcmlmeSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIHRoZSBhZGRyZXNzIHNwYWNlcyB3ZSdyZSB0YXJnZXRpbmcgYW5kIHRoZSBvdmVyaGVhZCBpbnZvbHZlZC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGhvdyB0aGV5IGludGVyYWN0LCBpZiBhdCBhbGwsIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgdG9vbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDYwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1Mjo1NS44Mzg1NDkyOTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBEQU1PTl9WQUREUlxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDQxOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNDI6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA0NTpcXHRcXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIERBTU9OX1BBRERSXFxuICA0ODpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDUwOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA1NDpcXHRcXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1Mjo1NS44Mzg2ODMxNzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4ODg1NjE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gYmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiwgaXQgbG9va3MgbGlrZSBlbmFibGluZyBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fVkFERFJgLCBhbmQgYERBTU9OX1BBRERSYCBpcyBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHRoaXMgc2V0dXAuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIFdlJ3ZlIGdvdCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXMgdGhlIGNlbnRyYWwgcGllY2VzIGhlcmUsIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQuXG5cblRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGZvY3VzZWQgb24gcmVmaW5pbmcgdGhlIGludGVybmFsIHdvcmtpbmdzLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGFuZCBgZGFtb25fd21hcmtfd2FpdF91c2AuIFRoYXQgY2hhbmdlIHRvIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlIHJlbW92YWwgb2YgYHByX2RlYnVnYCBpbXBsaWVzIGEgbW92ZSB0b3dhcmRzIGNsZWFuZXIgY29kZSBvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uIFRoZSBmYWN0IHRoYXQgYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AgaXMgc3RhdGljIHRlbGxzIG1lIGl0J3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLlxuXG5Gcm9tIHRoZXJlLCBgZGFtb25fc3RhcnRgIGlzIHRoZSBjbGVhciBlbnRyeSBwb2ludDsgaXQga2lja3Mgb2ZmIHRoZSB0aHJlYWQgdGhhdCBydW5zIGBrZGFtb25kX2ZuYCwgd2hpY2ggaW4gdHVybiBjYWxscyB0aGF0IGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGZ1bmN0aW9uLiBUaGUgdXNlIG9mIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMgdXNlZCBieSBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAuIEZpbmFsbHksIHRoZSBuZXcgS1VuaXQgdGVzdHMgYXJlIGZvY3VzZWQgb24gdmVyaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiBgZGFtb25fc2V0X3JlZ2lvbnNgLCB3aGljaCBpcyBnb29kIHRvIHNlZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIHNlZSBpZiBgZGFtb25fc3lzZnNfc2V0X2F0dHJzYCBpbiBgbW0vZGFtb24vc3lzZnMuY2AgcHJvdmlkZXMgYW5vdGhlciB3YXkgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk1MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUzOjAwLjQyNzU0NDIwNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMTc2NjAwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19zZXRfYXR0cnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMuYz0xODkxPXN0YXRpYyBzc2l6ZV90IHN0YXRlX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTkxMi1cXG5tbS9kYW1vbi9zeXNmcy5jOjE5MTM6c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3N5c2ZzLmMtMTkxNC1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfYXR0cnMgKnN5c19hdHRycylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMDktXFx0Y3R4LVxcdTAwM2VwYXVzZSA9IHN5c19jdHgtXFx1MDAzZXBhdXNlO1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjExMDpcXHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfYXR0cnMoY3R4LCBzeXNfY3R4LVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTExLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUzOjAzLjM1OTMxNjE0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTYzNTkwODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiB0aGlzIERBTU9OIHBhdGNoLCBhcyBJIHNlZSBpdC4gSXQgbG9va3MgbGlrZSBgZGFtb25fc3lzZnNfYXBwbHlfaW5wdXRzYCBpcyB0aGUgZW50cnkgcG9pbnQgd2hlbiB3ZSdyZSB3cml0aW5nIHRvIHN5c2ZzLCBidXQgdGhlIHJlYWwgaGVhcnQgb2YgdGhlIG1hdHRlciBpcyB0aGUgYGRhbW9uX3NldF9hdHRyc2AgZnVuY3Rpb24uXG5cbkkgdGhpbmsgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb24uIEl0IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24gb3Igb3ZlcmZsb3cgaXNzdWUgd2l0aGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgLCBzcGVjaWZpY2FsbHkgaG93IGBtYXhfdGhyZXNgIGlzIGNhbGN1bGF0ZWQsIHVzaW5nIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0J3MgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCdzIHJlYWNoYWJsZS5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlIHN5bWJvbHM6IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfYXR0cnNgLCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYC5cblxuSXQncyBjbGVhciB0aGF0IGBkYW1vbl9zZXRfcmVnaW9uc2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYGRhbW9uX3N5c2ZzX3NldF9yZWdpb25zYCBwYXRoLiBBbmQsIGNvbmZpcm1lZCwgYm90aCBgZGFtb25fc3RhcnRgIGFuZCBgZGFtb25fc2V0X2F0dHJzYCBhcmUgYWxzbyBhY2Nlc3NpYmxlIHZpYSBzeXNmcywgdGhyb3VnaCB3cml0aW5nIHRvIHRoZSBgc3RhdGVgIGFuZCBhdHRyaWJ1dGVzLCByZXNwZWN0aXZlbHkuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgcXVpY2tseSBjaGVja2VkIGZvciBvdGhlciBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IG15IGF0dGVudGlvbi4gSSBrbm93IGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0J3Mgbm90IGEgc3ltYm9sIHRvIHRyYWNrLiBTaW1pbGFybHksIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGFuZCBga2RhbW9uZF9mbmAgYXJlIGFsc28gc3RhdGljLlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBhcmUgZGVmaW5pdGVseSBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AuIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYGRhbW9uX3N0YXJ0YCBpcyBleHBvcnRlZC4uLiBhbmQgd2UncmUgZ29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MjQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTM6MDkuMjU1Njc4NTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzODA0OTk4NjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmRhbW9uX3N0YXJ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MzoxMi42MzYxOTE5MjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTY5Mjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWJ1Z2dpbmcgREFNT04gSW5pdGlhbGl6YXRpb24qKlxuXG5IbW0sIHdhaXQgYSBtaW51dGUuLi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSBhIHJlZmVyZW5jZSB0byBgZGFtb25fc3RhcnRgLCBidXQgaXQgZG9lc24ndCBzZWVtIGxpa2UgaXQncyBiZWluZyBwcm9wZXJseSBleHBvcnRlZC4gVGhhdCdzIGEgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZGVmaW5lZCBhbmQgaWYgaXQncyBhY2Nlc3NpYmxlLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIGNoZWNrIHRoZSBjb3JlIERBTU9OIGNvZGU7IGl0J3MgdGhlIG1vc3QgbGlrZWx5IHBsYWNlLiBTbywgbGV0IG1lIHB1bGwgdXAgYG1tL2RhbW9uL2NvcmUuY2AgcmlnaHQgYXdheS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlY2xhcmF0aW9uIG9mIGBkYW1vbl9zdGFydGAsIGFuZCB0aGVuIGRldGVybWluZSBob3cgaXQgaXMgdG8gYmUgZXhwb3J0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCwgc28gdGhhdCB0aGlzIHBhcnRpY3VsYXIgYnVpbGQgZG9lc24ndCBmYWlsLiBJJ20gc3VyZSBpdCdzIGp1c3QgYSBzaW1wbGUgb3ZlcnNpZ2h0LCBidXQgdGhlc2UgYXJlIGV4YWN0bHkgdGhlIGtpbmQgb2YgZGV0YWlscyB0aGF0IGNhbiBraWxsIHlvdSB3aGVuIHlvdSdyZSB3b3JraW5nIG9uIHNvbWV0aGluZyBjb21wbGV4IGxpa2UgREFNT04uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjE3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTM6MTUuNTI3ODg5NTA5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTAyMjcyOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3N0YXJ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xMDkyPWJvb2wgZGFtb25faW5pdGlhbGl6ZWQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwOTM6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDk0LXZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMTM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDM4LSAqIEluIGRldGFpbCwgYWxsIERBTU9OIEFQSSBjYWxsZXJzIGRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgaW5pdGlhbFxcbm1tL2RhbW9uL2NvcmUuYzoxMDM5OiAqIHNldHVwIG9mIGRhbW9uX2N0eCBiZWZvcmUgY2FsbGluZyBkYW1vbl9zdGFydCgpLiAgU29tZSBvZiB0aGUgQVBJIGNhbGxlcnNcXG5tbS9kYW1vbi9jb3JlLmMtMTA0MC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkyNT1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkyNy0vKlxcbm1tL2RhbW9uL2NvcmUuYzoxOTI4OiAqIF9fZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyBtb25pdG9yaW5nIHdpdGggZ2l2ZW4gY29udGV4dC5cXG5tbS9kYW1vbi9jb3JlLmMtMTkyOS0gKiBAY3R4OlxcdG1vbml0b3JpbmcgY29udGV4dFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5MzQtICovXFxubW0vZGFtb24vY29yZS5jOjE5MzU6c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMTkzNi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTk1Nz1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk1OS0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTk2MDogKiBkYW1vbl9zdGFydCgpIC0gU3RhcnRzIHRoZSBtb25pdG9yaW5ncyBmb3IgYSBnaXZlbiBncm91cCBvZiBjb250ZXh0cy5cXG5tbS9kYW1vbi9jb3JlLmMtMTk2MS0gKiBAY3R4czpcXHRhbiBhcnJheSBvZiB0aGUgcG9pbnRlcnMgZm9yIGNvbnRleHRzIHRvIHN0YXJ0IG1vbml0b3JpbmdcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTY4LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxcbm1tL2RhbW9uL2NvcmUuYzoxOTY5OiAqICdkYW1vbl9zdGFydCgpJyBjYWxsIGlzIGN1cnJlbnRseSBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBidXRcXG5tbS9kYW1vbi9jb3JlLmMtMTk3MC0gKiByZXR1cm5zIC1FQlVTWS5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTczLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTc0OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxcbm1tL2RhbW9uL2NvcmUuYy0xOTc1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTk5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjAwMDpcXHRcXHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xcbm1tL2RhbW9uL2NvcmUuYy0yMDAxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjA3MD1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwOTctICpcXG5tbS9kYW1vbi9jb3JlLmM6MjA5ODogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMDk5LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIxMDY9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNTItICpcXG5tbS9kYW1vbi9jb3JlLmM6MjE1MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMTU0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00MDg9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQyMTpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMi1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMzMT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTM0My1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQ0OlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDUtXFx0aWYgKGVycilcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0yMDA9c3RhdGljIGludCBkYW1vbl9zdGF0X3N0YXJ0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmRhbW9uX3N0YXRfY29udGV4dCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vc3RhdC5jLTIxNC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDM9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMjY3LVxcdH1cXG5tbS9kYW1vbi9zeXNmcy5jOjIyNjg6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjI2OS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmM9MTc3PXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX210aWVyX3N0YXJ0KHZvaWQpXFxuLS1cXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTkxLVxcdGN0eHNbMV0gPSBjdHg7XFxuc2FtcGxlcy9kYW1vbi9tdGllci5jOjE5MjpcXHRlcnIgPSBkYW1vbl9zdGFydChjdHhzLCAyLCB0cnVlKTtcXG5zYW1wbGVzL2RhbW9uL210aWVyLmMtMTkzLVxcdGlmICghZXJyKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9wcmNsLmM9NjA9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfcHJjbF9zdGFydCh2b2lkKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtMTA3LVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jOjEwODpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy0xMDktXFx0aWYgKGVycikge1xcbi0tXFxuc2FtcGxlcy9kYW1vbi93c3NlLmM9NjE9c3RhdGljIGludCBkYW1vbl9zYW1wbGVfd3NzZV9zdGFydCh2b2lkKVxcbi0tXFxuc2FtcGxlcy9kYW1vbi93c3NlLmMtODgtXFxuc2FtcGxlcy9kYW1vbi93c3NlLmM6ODk6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxuc2FtcGxlcy9kYW1vbi93c3NlLmMtOTAtXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1MzoxOC42MzAxNzAyNjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0Njg5NjE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgQ29uc2lkZXJhdGlvbnMgZm9yIERBTU9OIGluIFN5emthbGxlciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IERBTU9OIHVzaW5nIFN5emthbGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGEgZnVuY3Rpb24gbmVlZGVkIHRvIGJlIGV4cG9ydGVkIHRvIGJlIGEgZm9jdXMgc3ltYm9sLCBidXQgdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgY2FzZSBoZXJlLiBJIHJlbWVtYmVyIHRoYXQgYGRhbW9uX3N0YXJ0YCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gbG9jYXRlZCBpbiBgbW0vZGFtb24vY29yZS5jYC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCB0aGlzIHdhc24ndCBpZGVhbCwgZXNwZWNpYWxseSBzaW5jZSBpdCdzIG5vdCBleHBvcnRlZC4gSG93ZXZlciwgSSByZWNhbGwgdGhhdCBTeXprYWxsZXIgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCB0aHJvdWdoIHN5c2ZzIGZvciBEQU1PTjsgc28gdGhlIHN5c2ZzIGVudHJ5IHBvaW50cyBsaWtlIGBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uYCwgYGRhbW9uX3N5c2ZzX3NldF9hdHRyc2AsIGFuZCBgZGFtb25fc3lzZnNfc2V0X3JlZ2lvbnNgIGFyZSByZWxldmFudC5cblxuVGhlbiBpdCBoaXQgbWU6IFN5emthbGxlciB1dGlsaXplcyBrY292LCB3aGljaCBpbnN0cnVtZW50cyAqYWxsKiBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgdGhhdCBldmVuIHRob3VnaCBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYW5kIGBkYW1vbl9zZXRfcmVnaW9uc2AgYXJlbid0IGV4cG9ydGVkLCB0aGV5ICpjYW4qIGJlIHVzZWQgYXMgZm9jdXMgc3ltYm9scy4gU2luY2Uga2NvdiB3aWxsIGluc3RydW1lbnQgdGhlbS4gU28sIGV2ZW4gdGhvdWdoIHRoZXkgYXJlbid0IGRpcmVjdGx5IGV4cG9zZWQgZXh0ZXJuYWxseSwgdGhleSBhcmUgYXZhaWxhYmxlLiBTbywgYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9hdHRyc2AsIGFuZCBgZGFtb25fc2V0X3JlZ2lvbnNgIHNob3VsZCBiZSBnb29kIGNob2ljZXMuIE5vdywgbGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZGFtb25fc2V0X2F0dHJzYCBzcGVjaWZpY2FsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjIxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDAwOjUzOjIyLjg3NzA3MTAxOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzNzY4Nzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zZXRfYXR0cnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTgwOT1zdHJ1Y3QgZGFtb25fYXR0cnMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTgxOC1cXHQgKiBAYWdncl9pbnRlcnZhbCB0byBAc2FtcGxlX2ludGVydmFsIHJhdGlvLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MTk6XFx0ICogQ29yZS1leHRlcm5hbCBjb21wb25lbnRzIGNhbGwgZGFtb25fc2V0X2F0dHJzKCkgd2l0aCBcXHUwMDI2ZGFtb25fYXR0cnNcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6ODIwOlxcdCAqIHRoYXQgdGhpcyBmaWVsZCBpcyB1bnNldC4gIEluIHRoZSBjYXNlLCBkYW1vbl9zZXRfYXR0cnMoKSBzZXRzIHRoaXNcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtODIxLVxcdCAqIGZpZWxkIG9mIHJlc3VsdGluZyBcXHUwMDI2ZGFtb25fYXR0cnMuICBDb3JlLWludGVybmFsIGNvbXBvbmVudHMgc3VjaCBhc1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDo4MjI6XFx0ICoga2RhbW9uZF90dW5lX2ludGVydmFscygpIGNhbGxzIGRhbW9uX3NldF9hdHRycygpIHdpdGggXFx1MDAyNmRhbW9uX2F0dHJzXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjgyMzpcXHQgKiB0aGF0IHRoaXMgZmllbGQgaXMgc2V0LiAgSW4gdGhlIGNhc2UsIGRhbW9uX3NldF9hdHRycygpIGp1c3Qga2VlcFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC04MjQtXFx0ICogaXQuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA2Mz12b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNjQ6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDY1LXZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMTM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDI4LS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxMDI5OiAqIGRhbW9uX3NldF9hdHRycygpIC0gU2V0IGF0dHJpYnV0ZXMgZm9yIHRoZSBtb25pdG9yaW5nLlxcbm1tL2RhbW9uL2NvcmUuYy0xMDMwLSAqIEBjdHg6XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA0Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTA0ODppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG5tbS9kYW1vbi9jb3JlLmMtMTA0OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTc1MT1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzg0LVxcdCAqIHNjaGVtZXMgYW5kIHRhcmdldHMgc2hvdWxkIGJlIHVwZGF0ZWQgZmlyc3QsIHNpbmNlXFxubW0vZGFtb24vY29yZS5jOjE3ODU6XFx0ICogMS4gZGFtb25fc2V0X2F0dHJzKCkgdXBkYXRlcyBtb25pdG9yaW5nIHJlc3VsdHMgb2YgdGFyZ2V0cyBhbmRcXG5tbS9kYW1vbi9jb3JlLmMtMTc4Ni1cXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzkwLVxcdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFxcdTAwMjZkc3QtXFx1MDAzZWF0dHJzLCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycykpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTc5MTpcXHRcXHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMoZHN0LCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTE3OTItXFx0XFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIyNTQ9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkIGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjcyLVxcdHRyYWNlX2RhbW9uX21vbml0b3JfaW50ZXJ2YWxzX3R1bmUobmV3X2F0dHJzLnNhbXBsZV9pbnRlcnZhbCk7XFxubW0vZGFtb24vY29yZS5jOjIyNzM6XFx0ZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZuZXdfYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0yMjc0LX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzQ1PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NzEtXFx0XFx0ICogYmUgY2hhbmdlZCBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgUmVhZCB0aGUgdmFsdWVzIGhlcmUsIGFuZFxcbm1tL2RhbW9uL2NvcmUuYzozNzcyOlxcdFxcdCAqIHVzZSB0aG9zZSBmb3IgdGhpcyBpdGVyYXRpb24uICBUaGF0IGlzLCBkYW1vbl9zZXRfYXR0cnMoKVxcbm1tL2RhbW9uL2NvcmUuYy0zNzczLVxcdFxcdCAqIHVwZGF0ZWQgbmV3IHZhbHVlcyBhcmUgcmVzcGVjdGVkIGZyb20gbmV4dCBpdGVyYXRpb24uXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzg0NS1cXHRcXHRcXHRcXHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXFxubW0vZGFtb24vY29yZS5jOjM4NDY6XFx0XFx0XFx0XFx0ICogZGFtb25fc2V0X2F0dHJzKCkgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZnJvbVxcbm1tL2RhbW9uL2NvcmUuYy0zODQ3LVxcdFxcdFxcdFxcdCAqIGtkYW1vbmRfdHVuZV9pbnRlcnZhbCgpIG1heSB3cm9uZ2x5IHRoaW5rXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzAwLVxcdH1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjMwMTpcXHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMocGFyYW1fY3R4LCBcXHUwMDI2YXR0cnMpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzAyLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjI0LVxcdH1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MjI1OlxcdGVyciA9IGRhbW9uX3NldF9hdHRycyhwYXJhbV9jdHgsIFxcdTAwMjZhdHRycyk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTIyNi1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTE1MT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3RhdF9idWlsZF9jdHgodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0xNzUtXFx0fTtcXG5tbS9kYW1vbi9zdGF0LmM6MTc2OlxcdGlmIChkYW1vbl9zZXRfYXR0cnMoY3R4LCBcXHUwMDI2YXR0cnMpKVxcbm1tL2RhbW9uL3N0YXQuYy0xNzctXFx0XFx0Z290byBmcmVlX291dDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTkxMz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE5MzItXFx0fTtcXG5tbS9kYW1vbi9zeXNmcy5jOjE5MzM6XFx0cmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsIFxcdTAwMjZhdHRycyk7XFxubW0vZGFtb24vc3lzZnMuYy0xOTM0LX1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD02Nzk9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfYXR0cnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY4OS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NjkwOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNnZhbGlkX2F0dHJzKSwgMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY5MS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02OTMtXFx0aW52YWxpZF9hdHRycy5taW5fbnJfcmVnaW9ucyA9IDE7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjY5NDpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY5NS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02OTctXFx0aW52YWxpZF9hdHRycy5tYXhfbnJfcmVnaW9ucyA9IDk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjY5ODpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY5OS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03MDEtXFx0aW52YWxpZF9hdHRycy5hZ2dyX2ludGVydmFsID0gNDk5OTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NzAyOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzAzLVxcbi0tXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xMDMtXFx0fTtcXG5zYW1wbGVzL2RhbW9uL210aWVyLmM6MTA0OlxcdGlmIChkYW1vbl9zZXRfYXR0cnMoY3R4LCBcXHUwMDI2YXR0cnMpKVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xMDUtXFx0XFx0Z290byBmcmVlX291dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDA6NTM6MjUuODE0NzY5MTI4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NDE3NTU1MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFBhdGNoJ3MgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBpcyBgZGFtb25fc2V0X2F0dHJzYCBhY3R1YWxseSBleHBvcnRlZD8gSG1tLCBgRVhQT1JUX1NZTUJPTGAgaXNuJ3Qgc2hvd2luZyB1cCBpbiB0aGUgZ3JlcCBvdXRwdXQsIHdoaWNoIGlzIGEgYml0IG9kZC4gQnV0IHN5emthbGxlciBjYW4gc3RpbGwgaW50ZXJhY3Qgd2l0aCBpdCB2aWEgc3lzZnMsIHNvIHRoYXQncyBnb29kLiBNeSBmb2N1cyBzeW1ib2xzIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfYXR0cnNgLCBhbmQgYGRhbW9uX3NldF9yZWdpb25zYC4gSSB0aGluayB0aGF0IGNvdmVycyB0aGUga2V5IGVudHJ5IHBvaW50cy5cblxuTm93LCBsZXQncyBnbyBiYWNrIGFuZCBjYXJlZnVsbHkgcmV2aWV3IHRob3NlIGluc3RydWN0aW9ucyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblRoZSBwYXRjaCBpdHNlbGYgbWFrZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBga2RhbW9uZF9tZXJnZV9yZWdpb25zYCwgcHJldmVudGluZyBpbnRlZ2VyIHRydW5jYXRpb24gb2YgYG1heF90aHJlc2AuIFRoaXMgKmRvZXMqIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdywgYW5kIGNyaXRpY2FsbHksIGl0J3MgcmVhY2hhYmxlIGV2ZW4gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFRoYXQgbWVhbnMgV29ydGhGdXp6aW5nPXRydWUuIEknbSBwcmV0dHkgY29tZm9ydGFibGUgd2l0aCB0aGF0IGNvbmNsdXNpb24uXG5cblNvLCBhcyBhIHN1bW1hcnk6XG5cbiogICAqKldvcnRoRnV6emluZz10cnVlKipcbiogICAqKkZvY3VzU3ltYm9scyoqOiBgZGFtb25fc3RhcnRgLCBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3NldF9yZWdpb25zYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgXG5cbldhaXQsIGxldCBtZSBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgaXMgaW5saW5lLCBzbyBpdCdzIG5vdCBhIHJlbGV2YW50IHN5bWJvbC4gQW5kIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGlzIHN0YXRpYzsgc28gbm90IGEgZ29vZCBlbnRyeSBwb2ludC4gVGhhdCBtYWtlcyBzZW5zZS5cblxuT2theSwgc28gSSB3aWxsIHN0aWNrIHdpdGg6XG5cbiogICBgZGFtb25fc3RhcnRgIC0gdGhpcyBpcyB0aGUgY29yZSBlbnRyeSBwb2ludCB0byBzdGFydCB0aGUgREFNT04gdGhyZWFkLlxuKiAgIGBkYW1vbl9zZXRfYXR0cnNgIC0gdGhlIGVudHJ5IHBvaW50IHRvIHNldCBhdHRyaWJ1dGVzLlxuKiAgIGBkYW1vbl9zZXRfcmVnaW9uc2AgLSB0aGUgZW50cnkgcG9pbnQgdG8gc2V0IHJlZ2lvbnMuXG5cbkFmdGVyIHRoYXQgZG91YmxlLWNoZWNrLCBJIGFtIHZlcnkgY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTc1LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwMDo1NDozMy4yMzIzMzA2OThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzNDA4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc3RhcnRcIixcbiAgICBcImRhbW9uX3NldF9hdHRyc1wiLFxuICAgIFwiZGFtb25fc2V0X3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24gaXNzdWUgaW4gYGtkYW1vbmRfbWVyZ2VfcmVnaW9uc2AgYnkgdXNpbmcgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIHRvIGNhbGN1bGF0ZSBgbWF4X3RocmVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2YgREFNT04ncyByZWdpb24gbWVyZ2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9zZXRfYXR0cnNcIixcbiAgICBcImRhbW9uX3NldF9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIGlzc3VlIGluIGBrZGFtb25kX21lcmdlX3JlZ2lvbnNgIGJ5IHVzaW5nIGBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyYCB0byBjYWxjdWxhdGUgYG1heF90aHJlc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdGhhdCBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIERBTU9OJ3MgcmVnaW9uIG1lcmdpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcq99m[1] Phase: Succeeded StartedAt: 2026-07-29 00:54:45 +0000 UTC FinishedAt: 2026-07-29 00:54:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 00:54:45 +0000 UTC FinishedAt: 2026-07-29 00:54:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2] Phase: Running StartedAt: 2026-07-29 00:54:45 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-07-29 00:54:45 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 00:54:45 +0000 UTC FinishedAt: 2026-07-29 00:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 00:54:45 +0000 UTC FinishedAt: 2026-07-29 00:55:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowcq99m/series-workflowcq99m-convert-artifact-4173431480/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 00:55:08 +0000 UTC FinishedAt: 2026-07-29 01:24:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 00:55:08 +0000 UTC FinishedAt: 2026-07-29 01:24:18 +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:*4f93ef7b-eb13-419d-81ba-e42b90aeba70,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-workflowcq99m/series-workflowcq99m-convert-artifact-4173431480/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": "d4a00afd-5102-4181-a95b-9f04cd3b4f74", "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-workflowcq99m/series-workflowcq99m-build-action-2264057966/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-29 00:55:08 +0000 UTC FinishedAt: 2026-07-29 01:24:08 +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:*4f93ef7b-eb13-419d-81ba-e42b90aeba70,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-workflowcq99m/series-workflowcq99m-convert-artifact-4173431480/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": "d4a00afd-5102-4181-a95b-9f04cd3b4f74", "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-workflowcq99m/series-workflowcq99m-build-action-2264057966/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 01:24:18 +0000 UTC FinishedAt: 2026-07-29 01:24:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 01:24:18 +0000 UTC FinishedAt: 2026-07-29 01:24:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 01:24:18 +0000 UTC FinishedAt: 2026-07-29 01:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 01:24:18 +0000 UTC FinishedAt: 2026-07-29 01:24:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowcq99m/series-workflowcq99m-convert-artifact-1392894751/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 01:24:44 +0000 UTC FinishedAt: 2026-07-29 01:26:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 01:24:44 +0000 UTC FinishedAt: 2026-07-29 01:26:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d4a00afd-5102-4181-a95b-9f04cd3b4f74,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-workflowcq99m/series-workflowcq99m-build-action-2264057966/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-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 01:26:38 +0000 UTC FinishedAt: 2026-07-29 01:26:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 01:26:38 +0000 UTC FinishedAt: 2026-07-29 01:26:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 01:26:38 +0000 UTC FinishedAt: 2026-07-29 01:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 01:26:38 +0000 UTC FinishedAt: 2026-07-29 01:55:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4f93ef7b-eb13-419d-81ba-e42b90aeba70,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-workflowcq99m/series-workflowcq99m-convert-artifact-1392894751/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": "d0b91c7f-322d-40c2-b931-4eb1981fe80d", "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-workflowcq99m/series-workflowcq99m-build-action-3088168371/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 01:26:38 +0000 UTC FinishedAt: 2026-07-29 01:55:17 +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:*4f93ef7b-eb13-419d-81ba-e42b90aeba70,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-workflowcq99m/series-workflowcq99m-convert-artifact-1392894751/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": "d0b91c7f-322d-40c2-b931-4eb1981fe80d", "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-workflowcq99m/series-workflowcq99m-build-action-3088168371/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-29 01:55:41 +0000 UTC FinishedAt: 2026-07-29 01:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-29 01:55:41 +0000 UTC FinishedAt: 2026-07-29 01:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-29 01:55:41 +0000 UTC FinishedAt: 2026-07-29 01:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-29 01:55:41 +0000 UTC FinishedAt: 2026-07-29 01:57:37 +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:*d0b91c7f-322d-40c2-b931-4eb1981fe80d,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-workflowcq99m/series-workflowcq99m-build-action-3088168371/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-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Running StartedAt: 2026-07-29 01:57:47 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Running StartedAt: 2026-07-29 01:57:47 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},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:*d4a00afd-5102-4181-a95b-9f04cd3b4f74,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d0b91c7f-322d-40c2-b931-4eb1981fe80d,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-workflowcq99m/series-workflowcq99m-build-action-2264057966/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-workflowcq99m/series-workflowcq99m-build-action-3088168371/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-29 01:57:47 +0000 UTC FinishedAt: 2026-07-29 01:57:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-29 01:57:47 +0000 UTC FinishedAt: 2026-07-29 01:57:54 +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"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},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-workflowcq99m/series-workflowcq99m-convert-artifact-3093857848/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-29 01:57:47 +0000 UTC FinishedAt: 2026-07-29 01:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-29 01:57:47 +0000 UTC FinishedAt: 2026-07-29 01:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-29 01:57:47 +0000 UTC FinishedAt: 2026-07-29 01:57:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Running StartedAt: 2026-07-29 01:57:57 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcq99m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_set_attrs","damon_set_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2a4faffc103297c4822bb269d521249b75cc2261","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"2bdd7f7f-4972-466b-9882-2e70b6d9fef8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Running StartedAt: 2026-07-29 01:57:57 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d4a00afd-5102-4181-a95b-9f04cd3b4f74,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d0b91c7f-322d-40c2-b931-4eb1981fe80d,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-workflowcq99m/series-workflowcq99m-build-action-2264057966/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-workflowcq99m/series-workflowcq99m-build-action-3088168371/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-workflowcq99m/series-workflowcq99m-convert-artifact-3093857848/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil