Name: series-workflowmrsb2 Phase: Succeeded StartedAt: 2026-07-23 01:56:25 +0000 UTC FinishedAt: 2026-07-23 06:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[0] Phase: Succeeded StartedAt: 2026-07-23 01:56:25 +0000 UTC FinishedAt: 2026-07-23 02:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 01:56:25 +0000 UTC FinishedAt: 2026-07-23 02:27:40 +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": "5e0603ba185af6754422ad28b646798686b6caf6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "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": "5e0603ba185af6754422ad28b646798686b6caf6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "series_id": "064d1630-3c6f-4ff7-a90b-4eacfca2bb5a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "offline_pages" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBob3RwbHVnIGxvZ2ljIGluIGBvZmZsaW5lX3BhZ2VzYCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIG1pZ3JhdGlvbiBwYXNzZXMgZHVyaW5nIG1lbW9yeSBvZmZsaW5pbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gbWVtb3J5IGlzIG9mZmxpbmVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTMwYjMyMTQ1Mjg2ZjY1M2ZlYzRiMTk0NWVkZDc5OTIxMjIwYmFmY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDAyOjI3OjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbmluZGV4IDUzZjA4OTUwYTYzMDk2Li45MGI2N2M0NTdjMmE4MiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuQEAgLTM5ODAsNiAmIzQzOzM5ODAsMjAgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHROb3RlIHRoYXQgZXZlbiB3aGVuIGVuYWJsZWQsIHRoZXJlIGFyZSBhIGZldyBjYXNlcyB3aGVyZVxuIFx0XHRcdHRoZSBmZWF0dXJlIGlzIG5vdCBlZmZlY3RpdmUuXG4gXG4mIzQzO1x0bWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9XG4mIzQzO1x0XHRcdFtLTkxdIE1heGltdW0gbnVtYmVyIG9mIG1pZ3JhdGlvbiBwYXNzZXNcbiYjNDM7XHRcdFx0Zm9yIG1lbW9yeSBvZmZsaW5pbmcuXG4mIzQzO1x0XHRcdEZvcm1hdDogXHUwMDNjaW50ZWdlclx1MDAzZVxuJiM0MztcdFx0XHRkZWZhdWx0OiAwIChubyBsaW1pdCwgaGlzdG9yaWNhbCBiZWhhdmlvdXIpXG4mIzQzO1x0XHRcdFdoZW4gbm9uLXplcm8sIG1lbW9yeSBvZmZsaW5pbmcgZ2l2ZXMgdXAgd2l0aFxuJiM0MztcdFx0XHQtRUJVU1kgYWZ0ZXIgdGhpcyBtYW55IG1pZ3JhdGlvbiBwYXNzZXMgb3ZlclxuJiM0MztcdFx0XHR0aGUgcmFuZ2UsIGluc3RlYWQgb2YgcmV0cnlpbmcgZm9yZXZlciBvbiBhXG4mIzQzO1x0XHRcdHN0dWNrIHBhZ2UuICBFYWNoIHBhc3Mgc2NhbnMgdGhlIHJhbmdlIGFuZFxuJiM0MztcdFx0XHRtaWdyYXRlcyB3aGF0IGl0IGNhbi5cbiYjNDM7XHRcdFx0VGhlIHBhcmFtZXRlciBpcyByZS1yZWFkIG9uIGV2ZXJ5IHBhc3MsIHNvIGFuXG4mIzQzO1x0XHRcdG9mZmxpbmUgcmVxdWVzdCB0aGF0IGlzIGFscmVhZHkgc3R1Y2sgY2FuIGJlXG4mIzQzO1x0XHRcdHJlc2N1ZWQgYXQgcnVudGltZSBieSB3cml0aW5nIHRoZSBwYXJhbWV0ZXIuXG4mIzQzO1xuIFx0bWVtdGVzdD1cdFtLTkwsWDg2LEFSTSxNNjhLLFBQQyxSSVNDVixFQVJMWV0gRW5hYmxlIG1lbXRlc3RcbiBcdFx0XHRGb3JtYXQ6IFx1MDAzY2ludGVnZXJcdTAwM2VcbiBcdFx0XHRkZWZhdWx0IDogMCBcdTAwM2NkaXNhYmxlXHUwMDNlXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdFxuaW5kZXggMDIwN2Y4NzI1MTQyMWMuLjc5YjQ1MTA5YzQwOGM4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0XG5AQCAtMjI0LDcgJiM0MzsyMjQsMTAgQEAgaW5jcmVhc2VzIG1lbW9yeSBvZmZsaW5pbmcgcmVsaWFiaWxpdHk7IHN0aWxsLCBtZW1vcnkgb2ZmbGluaW5nIGNhbiBmYWlsIGluXG4gc29tZSBjb3JuZXIgY2FzZXMuXG4gXG4gRnVydGhlciwgbWVtb3J5IG9mZmxpbmluZyBtaWdodCByZXRyeSBmb3IgYSBsb25nIHRpbWUgKG9yIGV2ZW4gZm9yZXZlciksIHVudGlsXG4tYWJvcnRlZCBieSB0aGUgdXNlci5cbiYjNDM7YWJvcnRlZCBieSB0aGUgdXNlci4gIFRoZSBgYG1lbW9yeV9ob3RwbHVnLm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYGBcbiYjNDM7cGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGJvdW5kIHRoZSBudW1iZXIgb2YgcmV0cnkgcGFzc2VzLCBtYWtpbmcgYW4gb2ZmbGluZVxuJiM0MztyZXF1ZXN0IHRoYXQgY2Fubm90IG1ha2UgcHJvZ3Jlc3MgZmFpbCB3aXRoIGBgLUVCVVNZYGAgaW5zdGVhZCBvZiByZXRyeWluZ1xuJiM0MztpbmRlZmluaXRlbHkgKHNlZSBgTW9kdWxlIFBhcmFtZXRlcnNgXykuXG4gXG4gT2ZmbGluaW5nIG9mIGEgbWVtb3J5IGJsb2NrIGNhbiBiZSB0cmlnZ2VyZWQgdmlhOjpcbiBcbkBAIC01NDcsNiAmIzQzOzU1MCwyNyBAQCBUaGUgZm9sbG93aW5nIG1vZHVsZSBwYXJhbWV0ZXJzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDpcbiBcdFx0XHRcdCBwb3NzaWJsZS5cbiBcbiBcdFx0XHRcdCBQYXJhbWV0ZXIgYXZhaWxhYmlsaXR5IGRlcGVuZHMgb24gQ09ORklHX05VTUEuXG4mIzQzO2Bgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNgYFx0IHJlYWQtd3JpdGU6IE1heGltdW0gbnVtYmVyIG9mIG1pZ3JhdGlvblxuJiM0MztcdFx0XHRcdCBwYXNzZXMgZm9yIGEgc2luZ2xlIG1lbW9yeSBvZmZsaW5lXG4mIzQzO1x0XHRcdFx0IHJlcXVlc3QuICBNZW1vcnkgb2ZmbGluaW5nIHJldHJpZXMgdG9cbiYjNDM7XHRcdFx0XHQgbWlncmF0ZSBhbmQgaXNvbGF0ZSBwYWdlcyB1bnRpbCBpdCBzdWNjZWVkcztcbiYjNDM7XHRcdFx0XHQgYSBwYWdlIHRoYXQgY2FuIG5ldmVyIGJlIG1pZ3JhdGVkIG9yIGZyZWVkXG4mIzQzO1x0XHRcdFx0IG1ha2VzIGl0IHJldHJ5IGZvcmV2ZXIuICBXaGVuIHRoaXMgcGFyYW1ldGVyXG4mIzQzO1x0XHRcdFx0IGlzIG5vbi16ZXJvLCBhbiBvZmZsaW5lIHJlcXVlc3QgZ2l2ZXMgdXBcbiYjNDM7XHRcdFx0XHQgd2l0aCBgYC1FQlVTWWBgIGFmdGVyIHRoZSBjb25maWd1cmVkIG51bWJlclxuJiM0MztcdFx0XHRcdCBvZiBtaWdyYXRpb24gcGFzc2VzIGFuZCB0aGUgbWVtb3J5IGJsb2NrXG4mIzQzO1x0XHRcdFx0IHN0YXlzIG9ubGluZS5cbiYjNDM7XG4mIzQzO1x0XHRcdFx0IFRoZSBwYXJhbWV0ZXIgaXMgcmUtcmVhZCBvbiBldmVyeSBwYXNzLCBzb1xuJiM0MztcdFx0XHRcdCBhbiBvZmZsaW5lIHJlcXVlc3QgdGhhdCBpcyBhbHJlYWR5IHN0dWNrXG4mIzQzO1x0XHRcdFx0IHJldHJ5aW5nIGNhbiBiZSByZXNjdWVkIGF0IHJ1bnRpbWUgYnlcbiYjNDM7XHRcdFx0XHQgd3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlLCB3aXRob3V0IGEgcmVib290LlxuJiM0MztcbiYjNDM7XHRcdFx0XHQgVGhlIGRlZmF1bHQgaXMgXCYjMzQ7MFwmIzM0OywgbWVhbmluZyBubyBsaW1pdCAodGhlXG4mIzQzO1x0XHRcdFx0IGhpc3RvcmljYWwgYmVoYXZpb3VyKS5cbiYjNDM7XG4mIzQzO1x0XHRcdFx0IFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvblxuJiM0MztcdFx0XHRcdCBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRS5cbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuIFpPTkVfTU9WQUJMRVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5pbmRleCAyMjZhYjljYjA3OGFkMS4uOTA2NzgyOTM0OWEwZGEgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5AQCAtMTc4NSw2ICYjNDM7MTc4NSwxMiBAQCBib29sIG1ocF9yYW5nZV9hbGxvd2VkKHU2NCBzdGFydCwgdTY0IHNpemUsIGJvb2wgbmVlZF9tYXBwaW5nKVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbiYjNDM7LyogTWF4IG9mZmxpbmVfcGFnZXMoKSBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSAtRUJVU1k7IDAgPSByZXRyeSBmb3JldmVyLiAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzIF9fcmVhZF9tb3N0bHk7XG4mIzQzO21vZHVsZV9wYXJhbShvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcywgdWludCwgMDY0NCk7XG4mIzQzO01PRFVMRV9QQVJNX0RFU0Mob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMsXG4mIzQzO1x0XCYjMzQ7TWF4IG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIG1lbW9yeSBvZmZsaW5lIGdpdmVzIHVwICgwID0gbm8gbGltaXQpXCYjMzQ7KTtcbiYjNDM7XG4gLypcbiAgKiBTY2FuIHBmbiByYW5nZSBbc3RhcnQsZW5kKSB0byBmaW5kIG1vdmFibGUvbWlncmF0YWJsZSBwYWdlcyAoTFJVIGFuZFxuICAqIGh1Z2V0bGIgZm9saW8sIG1vdmFibGVfb3BzIHBhZ2VzKS4gV2lsbCBza2lwIG92ZXIgbW9zdCB1bm1vdmFibGVcbkBAIC0xOTY2LDYgJiM0MzsxOTcyLDggQEAgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gXHRzdHJ1Y3Qgbm9kZV9ub3RpZnkgbm9kZV9hcmcgPSB7XG4gXHRcdC5uaWQgPSBOVU1BX05PX05PREUsXG4gXHR9O1xuJiM0MztcdHVuc2lnbmVkIGludCBtYXhfcGFzc2VzO1xuJiM0MztcdHVuc2lnbmVkIGludCBwYXNzID0gMDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRjaGFyICpyZWFzb247XG4gXHRpbnQgcmV0O1xuQEAgLTIwNjIsNiAmIzQzOzIwNzAsMzYgQEAgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gXHRcdFx0XHRnb3RvIGZhaWxlZF9yZW1vdmFsX2lzb2xhdGVkO1xuIFx0XHRcdH1cbiBcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQSBwYWdlIHRoYXQgY2FuIG5ldmVyIGJlIG1pZ3JhdGVkIChlLmcuIGFcbiYjNDM7XHRcdFx0ICogbG9uZy10ZXJtIHBpbikgbWFrZXMgdGhpcyBsb29wIHJldHJ5IGZvcmV2ZXIuXG4mIzQzO1x0XHRcdCAqIEdpdmUgdXAgYWZ0ZXIgdGhlIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIHBhc3Nlcy5cbiYjNDM7XHRcdFx0ICogVGhlIGxpbWl0IGlzIHJlLXJlYWQgb24gZXZlcnkgcGFzcyBzbyB0aGF0IGFuXG4mIzQzO1x0XHRcdCAqIG9mZmxpbmUgcmVxdWVzdCB0aGF0IGlzIGFscmVhZHkgc3R1Y2sgaGVyZSBjYW5cbiYjNDM7XHRcdFx0ICogYmUgYWJvcnRlZCBhdCBydW50aW1lIGJ5IHdyaXRpbmcgdGhlIHBhcmFtZXRlcixcbiYjNDM7XHRcdFx0ICogd2hpY2ggbWF0dGVycyBmb3IgaW4ta2VybmVsIGNhbGxlcnMgKGUuZy4gQUNQSVxuJiM0MztcdFx0XHQgKiBESU1NIGhvdC11bnBsdWcpIHRoYXQgcnVuIG9uIGt3b3JrZXJzIGFuZCBjYW5cbiYjNDM7XHRcdFx0ICogbmV2ZXIgYmUgYWJvcnRlZCBieSBhIHNpZ25hbC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG1heF9wYXNzZXMgPSBSRUFEX09OQ0Uob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMpO1xuJiM0MztcdFx0XHRpZiAobWF4X3Bhc3NlcyBcdTAwMjZcdTAwMjYgcGFzcyYjNDM7JiM0MzsgXHUwMDNlPSBtYXhfcGFzc2VzKSB7XG4mIzQzO1x0XHRcdFx0cHJfd2FybihcJiMzNDttZW1vcnkgb2ZmbGluaW5nIFttZW0gJSMwMTBsbHgtJSMwMTBsbHhdOiBnaXZpbmcgdXAgYWZ0ZXIgJXUgcGFzc2VzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZylzdGFydF9wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0XHQoKHVuc2lnbmVkIGxvbmcgbG9uZyllbmRfcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAtIDEsXG4mIzQzO1x0XHRcdFx0XHRwYXNzIC0gMSk7XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBEdW1wIHRoZSBwYWdlIHdlIGxhc3Qgc3RvcHBlZCBhdCBhcyBhXG4mIzQzO1x0XHRcdFx0ICogZGlhZ25vc3RpYyBoaW50OiB1c3VhbGx5IHRoZSBzdHVjayBwYWdlLFxuJiM0MztcdFx0XHRcdCAqIGJ1dCBqdXN0IHRoZSByYW5nZSBzdGFydCBhZnRlciBhIHJlc3RhcnQuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0aWYgKHBmbiBcdTAwM2U9IHN0YXJ0X3BmbiBcdTAwMjZcdTAwMjYgcGZuIFx1MDAzYyBlbmRfcGZuKVxuJiM0MztcdFx0XHRcdFx0ZHVtcF9wYWdlKHBmbl90b19wYWdlKHBmbiksXG4mIzQzO1x0XHRcdFx0XHRcdCAgXCYjMzQ7bWVtb3J5IG9mZmxpbmUgcmV0cnkgbGltaXRcJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldCA9IC1FQlVTWTtcbiYjNDM7XHRcdFx0XHRyZWFzb24gPSBcJiMzNDtyZXRyeSBsaW1pdCBleGNlZWRlZFwmIzM0OztcbiYjNDM7XHRcdFx0XHRnb3RvIGZhaWxlZF9yZW1vdmFsX2lzb2xhdGVkO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuIFx0XHRcdHJldCA9IHNjYW5fbW92YWJsZV9wYWdlcyhwZm4sIGVuZF9wZm4sIFx1MDAyNnBmbik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggZWFlNTA0YmQ5NGM4M2EuLmUxMTNmM2ZmNDY1NTk0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTc3LDYgJiM0MzsxNzcsOSBAQCBURVNUX1BST0dTICYjNDM7PSBrc2Z0X3ZtYWxsb2Muc2hcbiAjIERlc3RydWN0aXZlOiBldmVyeSBzdWNjZXNzZnVsIHJ1biBwYW5pY3MgdGhlIGtlcm5lbC4gIEluc3RhbGxlZCBhbmRcbiAjIGtlcHQgZXhlY3V0YWJsZSwgYnV0IG5vdCBydW4gZnJvbSBhIGRlZmF1bHQga3NlbGZ0ZXN0IGludm9jYXRpb24uXG4gVEVTVF9QUk9HU19FWFRFTkRFRCAmIzQzOz0gaHdwb2lzb24tcGFuaWMuc2hcbiYjNDM7IyBTcGF3bnMgaXRzIG93biBWTSAodmlydG1lLW5nKTsgbm90IHJ1biBmcm9tIGEgZGVmYXVsdCBrc2VsZnRlc3RcbiYjNDM7IyBpbnZvY2F0aW9uLlxuJiM0MztURVNUX1BST0dTX0VYVEVOREVEICYjNDM7PSB2bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2hcbiBcbiBURVNUX0ZJTEVTIDo9IHRlc3Rfdm1hbGxvYy5zaFxuIFRFU1RfRklMRVMgJiM0Mzs9IHRlc3RfaG1tLnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnXG5pbmRleCAwNmY3OGJkMjMyZTJlMy4uZDIyZjYzZWI5YzJjOWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZ1xuQEAgLTE0LDMgJiM0MzsxNCw2IEBAIENPTkZJR19VUFJPQkVTPXlcbiBDT05GSUdfTUVNT1JZX0ZBSUxVUkU9eVxuIENPTkZJR19IV1BPSVNPTl9JTkpFQ1Q9bVxuIENPTkZJR19QUk9DX01FTV9BTFdBWVNfRk9SQ0U9eVxuJiM0MztDT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuJiM0MztDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG4mIzQzO0NPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzIxMWEwZTdjYWEyZDNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaFxuQEAgLTAsMCAmIzQzOzEsMzY5IEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIFRlc3QgbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgYnkgcmVwcm9kdWNpbmcgdGhlIEFDUElcbiYjNDM7IyBtZW1vcnkgaG90LXVucGx1ZyBoYW5nIGluIGt3b3JrZXIgY29udGV4dCBhbmQgdmVyaWZ5aW5nIHRoYXQgdGhlIHJldHJ5XG4mIzQzOyMgbGltaXQgcmVjb3ZlcnMgZnJvbSBpdC5cbiYjNDM7I1xuJiM0MzsjIG9mZmxpbmVfcGFnZXMoKSByZXRyaWVzIHBhZ2UgbWlncmF0aW9uIGluIGFuIHVuYm91bmRlZCBsb29wLiAgQSBwYWdlXG4mIzQzOyMgdGhhdCBjYW4gbmV2ZXIgYmUgbWlncmF0ZWQgKGxvbmctdGVybSBwaW4sIHNsYWIsIGJ1c3kgbWV0YWRhdGEpIG1ha2VzXG4mIzQzOyMgdGhlIGxvb3Agc3BpbiBmb3JldmVyLiAgVXNlcnNwYWNlLWRyaXZlbiBvZmZsaW5lcyBjYW4gYmUgaW50ZXJydXB0ZWQgYnlcbiYjNDM7IyBhIHNpZ25hbCwgYnV0IGFuIEFDUEkgRElNTSBlamVjdCBydW5zIG9uIHRoZSBrYWNwaV9ob3RwbHVnX3dxIGt3b3JrZXJcbiYjNDM7IyB3aGVyZSBzaWduYWxfcGVuZGluZygpIG5ldmVyIGZpcmVzLCBzbyB0aGUga3dvcmtlciBoYW5ncyB1bnRpbCByZWJvb3QuXG4mIzQzOyNcbiYjNDM7IyBGbG93OlxuJiM0MzsjICAgMS4gQm9vdCB0aGUganVzdC1idWlsdCBrZXJuZWwgKHZpcnRtZS1uZykgd2l0aCBhIGNvbGQtcGx1Z2dlZCBwYy1kaW1tLlxuJiM0MzsjICAgMi4gT25saW5lIHRoZSBESU1NJiMzOTtzIGJsb2NrcyBhcyBaT05FX01PVkFCTEUuXG4mIzQzOyMgICAzLiBQaW4gb25lIHBhZ2Ugb2YgdGhlIERJTU0gKHZtc3BsaWNlIGxvbmctdGVybSBwaW4pLlxuJiM0MzsjICAgNC4gRWplY3QgdGhlIERJTU0gdmlhIHN5c2ZzOyBvZmZsaW5lIHJ1bnMgb24ga2FjcGlfaG90cGx1Z193cS5cbiYjNDM7IyAgIDUuIE9ic2VydmUgdGhlIGhhbmcgKGdvaW5nLW9mZmxpbmUgcGVyc2lzdHMpLlxuJiM0MzsjICAgNi4gUmVzY3VlOiB3cml0ZSBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcyBhdCBydW50aW1lLCB2ZXJpZnkgYmFpbG91dC5cbiYjNDM7I1xuJiM0MzsjIFRBUCBzdWJ0ZXN0czpcbiYjNDM7IyAgIDEgIEFDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpXG4mIzQzOyMgICAyICBzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1xuJiM0MzsjICAgMyAgbWVtb3J5IGJsb2NrIG9ubGluZSBhbmQgdXNhYmxlIGFmdGVyIHRoZSBiYWlsb3V0XG4mIzQzOyNcbiYjNDM7IyBEZXBlbmRlbmNpZXM6IHZpcnRtZS1uZyAodm5nKSwgcWVtdS1zeXN0ZW0tXHUwMDNjYXJjaFx1MDAzZSwgY2MuXG4mIzQzOyMgU0tJUHMgKG5ldmVyIEZBSUxzKSB3aGVuIHRvb2xpbmcgb3Iga2VybmVsIHN1cHBvcnQgaXMgbWlzc2luZy5cbiYjNDM7XG4mIzQzO3JlYWRvbmx5IFNDUklQVF9ESVI9XCYjMzQ7JChjZCAtUCAtLSBcJiMzNDskKGRpcm5hbWUgLS0gXCYjMzQ7JHtCQVNIX1NPVVJDRVswXX1cJiMzNDspXCYjMzQ7IFx1MDAyNlx1MDAyNiBwd2QgLVApXCYjMzQ7XG4mIzQzO3JlYWRvbmx5IEtFUk5FTF9DSEVDS09VVD1cJiMzNDskKHJlYWxwYXRoIFwmIzM0OyR7U0NSSVBUX0RJUn1cJiMzNDsvLi4vLi4vLi4vLi4vKVwmIzM0O1xuJiM0MztcbiYjNDM7IyBzaGVsbGNoZWNrIHNvdXJjZT0uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXG4mIzQzO3NvdXJjZSBcJiMzNDske1NDUklQVF9ESVJ9XCYjMzQ7Ly4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcbiYjNDM7XG4mIzQzO3JlYWRvbmx5IERJTU1fU0laRT1cJiMzNDske0RJTU1fU0laRTotMjU2TX1cJiMzNDtcbiYjNDM7cmVhZG9ubHkgTUFYX1BBU1NFUz1cJiMzNDske01BWF9QQVNTRVM6LTUwfVwmIzM0O1xuJiM0MztyZWFkb25seSBIQU5HX0hPTEQ9XCYjMzQ7JHtIQU5HX0hPTEQ6LTEwfVwmIzM0O1xuJiM0MztyZWFkb25seSBSRVNDVUVfVElNRU9VVD1cJiMzNDske1JFU0NVRV9USU1FT1VUOi0zMH1cJiMzNDtcbiYjNDM7cmVhZG9ubHkgQk9PVF9USU1FT1VUPVwmIzM0OyR7Qk9PVF9USU1FT1VUOi0yNDB9XCYjMzQ7XG4mIzQzO1xuJiM0MztyZWFkb25seSBMT0c9XCYjMzQ7JChta3RlbXAgL3RtcC92bXRlc3RfbWhwX1hYWFhYWC5sb2cpXCYjMzQ7XG4mIzQzO3JlYWRvbmx5IEdVRVNUX1NDUklQVD1cJiMzNDskKG1rdGVtcCAvdG1wL3ZtdGVzdF9taHBfZ3Vlc3RfWFhYWFhYLnNoKVwmIzM0O1xuJiM0MztyZWFkb25seSBQSU5fU1JDPVwmIzM0OyQobWt0ZW1wIC90bXAvdm10ZXN0X21ocF9waW5fWFhYWFhYLmMpXCYjMzQ7XG4mIzQzOyMgTXVzdCBsaXZlIGluIHRoZSBrZXJuZWwgdHJlZSBzbyB0aGUgZ3Vlc3Qgc2VlcyBpdCB0aHJvdWdoIHRoZSA5cCByb290ZnMuXG4mIzQzO3JlYWRvbmx5IFBJTl9CSU49XCYjMzQ7JHtTQ1JJUFRfRElSfS8udm10ZXN0X3Bpbl9wYXJrLiQkXCYjMzQ7XG4mIzQzO1xuJiM0MztWTkdfUElEPVwmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7Y2xlYW51cCgpIHtcbiYjNDM7XHRbIC1uIFwmIzM0OyR7Vk5HX1BJRH1cJiMzNDsgXSBcdTAwMjZcdTAwMjYga2lsbCBcJiMzNDske1ZOR19QSUR9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRybSAtZiBcJiMzNDske0xPR31cJiMzNDsgXCYjMzQ7JHtHVUVTVF9TQ1JJUFR9XCYjMzQ7IFwmIzM0OyR7UElOX1NSQ31cJiMzNDsgXCYjMzQ7JHtQSU5fQklOfVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztndWVzdF9yZXN1bHQoKSB7XG4mIzQzO1x0Z3JlcCAtbyBcJiMzNDteJHsxfT1bQS1aYS16MC05Xy1dKlwmIzM0OyBcJiMzNDske0xPR31cJiMzNDsgfCB0YWlsIC0xIHwgY3V0IC1kPSAtZjJcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZHVtcF9sb2dfdGFpbCgpIHtcbiYjNDM7XHR0YWlsIC0yNSBcJiMzNDske0xPR31cJiMzNDsgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG9cbiYjNDM7XHRcdGt0YXBfcHJpbnRfbXNnIFwmIzM0OyR7bGluZX1cJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO31cbiYjNDM7XG4mIzQzO3NraXBfYWxsX3Rlc3RzKCkge1xuJiM0MztcdGxvY2FsIGlcbiYjNDM7XG4mIzQzO1x0Zm9yIGkgaW4gMSAyIDM7IGRvXG4mIzQzO1x0XHRrdGFwX3Rlc3Rfc2tpcCBcJiMzNDskMVwmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7XHRrdGFwX2ZpbmlzaGVkXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgLS0gcHJlLWZsaWdodCBjaGVja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7a3RhcF9wcmludF9oZWFkZXJcbiYjNDM7a3RhcF9zZXRfcGxhbiAzXG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO1xuJiM0MzthcmNoPVwmIzM0OyQodW5hbWUgLW0pXCYjMzQ7XG4mIzQzO2Nhc2UgXCYjMzQ7JHthcmNofVwmIzM0OyBpblxuJiM0Mzt4ODZfNjR8YWFyY2g2NCkgOztcbiYjNDM7KilcdHNraXBfYWxsX3Rlc3RzIFwmIzM0O3BjLWRpbW0gQUNQSSBob3RwbHVnIG5vdCBhdmFpbGFibGUgb24gJHthcmNofVwmIzM0OyA7O1xuJiM0Mztlc2FjXG4mIzQzO1xuJiM0Mztmb3IgZGVwIGluIHZuZyBcJiMzNDtxZW11LXN5c3RlbS0ke2FyY2h9XCYjMzQ7IGNjOyBkb1xuJiM0MztcdGlmICEgY29tbWFuZCAtdiBcJiMzNDske2RlcH1cJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4mIzQzO1x0XHRza2lwX2FsbF90ZXN0cyBcJiMzNDske2RlcH0gbm90IGluc3RhbGxlZFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO2RvbmVcbiYjNDM7XG4mIzQzOyMgLS0gcGluIGhlbHBlciAoY29tcGlsZWQgb24gdGhlIGhvc3QsIHZpc2libGUgdG8gdGhlIGd1ZXN0IHZpYSA5cCkgLS0tLS0tLS0tLS1cbiYjNDM7I1xuJiM0MzsjIEFsbG9jYXRlIG9uZSBibG9jayYjMzk7cyB3b3J0aCBvZiBwYWdlcyAoWk9ORV9NT1ZBQkxFIHNlcnZlcyB0aGVtIGZyb20gdGhlXG4mIzQzOyMgRElNTSksIGZpbmQgb25lIHRoYXQgbGFuZGVkIGluIGEgdGFyZ2V0IGJsb2NrLCB2bXNwbGljZS1waW4gaXQgaW50byBhXG4mIzQzOyMgcGlwZSwgcHJpbnQgUElOX0JMSz1cdTAwM2NOXHUwMDNlLCBhbmQgc2xlZXAgZm9yZXZlci5cbiYjNDM7XG4mIzQzO2NhdCBcdTAwM2UgXCYjMzQ7JHtQSU5fU1JDfVwmIzM0OyBcdTAwM2NcdTAwM2MmIzM5O1BJTkVPRiYjMzk7XG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3Vpby5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1vcnlfYmxvY2tfc2l6ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbNjRdO1xuJiM0MztcdHNzaXplX3QgbjtcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihcJiMzNDsvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9ibG9ja19zaXplX2J5dGVzXCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0biA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKG4gXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0YnVmW25dID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDE2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgdmFkZHJfdG9fYmxvY2soaW50IHBhZ2VtYXBfZmQsIGNoYXIgKnZhZGRyLFxuJiM0MztcdFx0XHRcdCAgICBsb25nIHBhZ2Vfc2l6ZSwgdW5zaWduZWQgbG9uZyBibGtfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdnBuID0gKHVuc2lnbmVkIGxvbmcpdmFkZHIgLyBwYWdlX3NpemU7XG4mIzQzO1x0dWludDY0X3QgZW50O1xuJiM0MztcbiYjNDM7XHRpZiAocHJlYWQocGFnZW1hcF9mZCwgXHUwMDI2ZW50LCBzaXplb2YoZW50KSwgdnBuICogOCkgIT0gc2l6ZW9mKGVudCkpXG4mIzQzO1x0XHRyZXR1cm4gLTFVTDtcbiYjNDM7XHRpZiAoIShlbnQgXHUwMDI2ICgxVUxMIFx1MDAzY1x1MDAzYyA2MykpKVxuJiM0MztcdFx0cmV0dXJuIC0xVUw7XG4mIzQzO1x0cmV0dXJuIChlbnQgXHUwMDI2ICgoMVVMTCBcdTAwM2NcdTAwM2MgNTUpIC0gMSkpICogcGFnZV9zaXplIC8gYmxrX3NpemU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdGxvbmcgcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYmxrX3NpemUgPSBtZW1vcnlfYmxvY2tfc2l6ZSgpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgb2ZmLCBibGsgPSAwO1xuJiM0MztcdGNoYXIgKmFyZWEsICpwYWdlID0gTlVMTDtcbiYjNDM7XHRpbnQgcGFnZW1hcF9mZCwgcGlwZWZkWzJdLCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoYXJnYyBcdTAwM2MgMiB8fCAhYmxrX3NpemUpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDt1c2FnZTogcGluX3BhcmsgXHUwMDNjbWVtb3J5IGJsb2NrXHUwMDNlLi4uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YXJlYSA9IG1tYXAoTlVMTCwgYmxrX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX1BPUFVMQVRFLCAtMSwgMCk7XG4mIzQzO1x0aWYgKGFyZWEgPT0gTUFQX0ZBSUxFRCkge1xuJiM0MztcdFx0cGVycm9yKFwmIzM0O21tYXBcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcdG1lbXNldChhcmVhLCAweDQyLCBibGtfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHBhZ2VtYXBfZmQgPSBvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcFwmIzM0OywgT19SRE9OTFkpO1xuJiM0MztcdGlmIChwYWdlbWFwX2ZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7cGFnZW1hcFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBibGtfc2l6ZSBcdTAwMjZcdTAwMjYgIXBhZ2U7IG9mZiAmIzQzOz0gcGFnZV9zaXplKSB7XG4mIzQzO1x0XHRibGsgPSB2YWRkcl90b19ibG9jayhwYWdlbWFwX2ZkLCBhcmVhICYjNDM7IG9mZiwgcGFnZV9zaXplLFxuJiM0MztcdFx0XHRcdCAgICAgYmxrX3NpemUpO1xuJiM0MztcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgYXJnYzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKGJsayA9PSBzdHJ0b3VsKGFyZ3ZbaV0sIE5VTEwsIDEwKSkge1xuJiM0MztcdFx0XHRcdHBhZ2UgPSBhcmVhICYjNDM7IG9mZjtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShwYWdlbWFwX2ZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwYWdlKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7UElOX05PTkVcXG5cJiMzNDspO1xuJiM0MztcdFx0ZmZsdXNoKHN0ZG91dCk7XG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwaXBlKHBpcGVmZCkpIHtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDtwaXBlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3RydWN0IGlvdmVjIGlvdiA9IHsgLmlvdl9iYXNlID0gcGFnZSwgLmlvdl9sZW4gPSBwYWdlX3NpemUgfTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZtc3BsaWNlKHBpcGVmZFsxXSwgXHUwMDI2aW92LCAxLCAwKSAhPSBwYWdlX3NpemUpIHtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDt2bXNwbGljZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaW50ZihcJiMzNDtQSU5fQkxLPSVsdVxcblwmIzM0OywgYmxrKTtcbiYjNDM7XHRmZmx1c2goc3Rkb3V0KTtcbiYjNDM7XHRwYXVzZSgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1BJTkVPRlxuJiM0MztcbiYjNDM7aWYgISBjYyAtTzIgLW8gXCYjMzQ7JHtQSU5fQklOfVwmIzM0OyBcJiMzNDske1BJTl9TUkN9XCYjMzQ7IDJcdTAwM2VcdTAwM2VcJiMzNDske0xPR31cJiMzNDs7IHRoZW5cbiYjNDM7XHRza2lwX2FsbF90ZXN0cyBcJiMzNDtjYW5ub3QgYnVpbGQgdGhlIHBpbiBoZWxwZXJcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzOyMgLS0gZ3Vlc3Qgc2NyaXB0IChydW5zIGFzIGluaXQgaW5zaWRlIHRoZSBWTSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzO2NhdCBcdTAwM2UgXCYjMzQ7JHtHVUVTVF9TQ1JJUFR9XCYjMzQ7IFx1MDAzY1x1MDAzY1BST0xPR1VFXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzO3JlYWRvbmx5IE1BWF9QQVNTRVM9JHtNQVhfUEFTU0VTfVxuJiM0MztyZWFkb25seSBIQU5HX0hPTEQ9JHtIQU5HX0hPTER9XG4mIzQzO3JlYWRvbmx5IFJFU0NVRV9USU1FT1VUPSR7UkVTQ1VFX1RJTUVPVVR9XG4mIzQzO3JlYWRvbmx5IFBJTl9QQVJLPVwmIzM0OyR7UElOX0JJTn1cJiMzNDtcbiYjNDM7UFJPTE9HVUVcbiYjNDM7XG4mIzQzO2NhdCBcdTAwM2VcdTAwM2UgXCYjMzQ7JHtHVUVTVF9TQ1JJUFR9XCYjMzQ7IFx1MDAzY1x1MDAzYyYjMzk7R1VFU1RFT0YmIzM5O1xuJiM0MztzZXQgLXVcbiYjNDM7XG4mIzQzO3JlYWRvbmx5IFBBUkFNPS9zeXMvbW9kdWxlL21lbW9yeV9ob3RwbHVnL3BhcmFtZXRlcnMvb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNcbiYjNDM7cmVhZG9ubHkgTUVNPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5XG4mIzQzO1xuJiM0Mztza2lwKCkgeyBlY2hvIFwmIzM0O1ZNVEVTVF9TS0lQOiAkKlwmIzM0OzsgZWNobyBcJiMzNDtWTVRFU1RfRE9ORVwmIzM0OzsgZXhpdCAwOyB9XG4mIzQzO1xuJiM0MztibG9ja19zdGF0ZSgpIHtcbiYjNDM7XHRjYXQgXCYjMzQ7JHtNRU19L21lbW9yeSR7cGlubmVkX2Jsa30vc3RhdGVcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8fCBlY2hvIEdPTkVcbiYjNDM7fVxuJiM0MztcbiYjNDM7WyAtZiBcJiMzNDske1BBUkFNfVwmIzM0OyBdIHx8IHNraXAgXCYjMzQ7a2VybmVsIGxhY2tzIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIDEuIE9ubGluZSB0aGUgRElNTSYjMzk7cyBibG9ja3MgYXMgWk9ORV9NT1ZBQkxFLlxuJiM0MztkaW1tX2Jsb2Nrcz1cJiMzNDtcJiMzNDtcbiYjNDM7Zm9yIHMgaW4gXCYjMzQ7JHtNRU19XCYjMzQ7L21lbW9yeSovc3RhdGU7IGRvXG4mIzQzO1x0WyBcJiMzNDskKGNhdCBcJiMzNDske3N9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGwpXCYjMzQ7ID0gb2ZmbGluZSBdIHx8IGNvbnRpbnVlXG4mIzQzO1x0aWYgZWNobyBvbmxpbmVfbW92YWJsZSBcdTAwM2UgXCYjMzQ7JHtzfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsOyB0aGVuXG4mIzQzO1x0XHRiPSR7cyUvc3RhdGV9XG4mIzQzO1x0XHRkaW1tX2Jsb2Nrcz1cJiMzNDske2RpbW1fYmxvY2tzfSAke2IjIyptZW1vcnl9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7ZG9uZVxuJiM0MztlY2hvIFwmIzM0OyMgRElNTSBtZW1vcnkgYmxvY2tzOiR7ZGltbV9ibG9ja3M6LSBub25lfVwmIzM0O1xuJiM0MztbIC1uIFwmIzM0OyR7ZGltbV9ibG9ja3N9XCYjMzQ7IF0gfHwgc2tpcCBcJiMzNDtubyBvZmZsaW5lIG1lbW9yeSBibG9ja3MgKHBjLWRpbW0gbWlzc2luZz8pXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIDIuIFBpbiBvbmUgcGFnZSBpbnNpZGUgdGhlIERJTU0uXG4mIzQzO1wmIzM0OyR7UElOX1BBUkt9XCYjMzQ7ICR7ZGltbV9ibG9ja3N9IFx1MDAzZSAvdG1wL3Bpbi5vdXQgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4mIzQzO3Bpbl9waWQ9JCFcbiYjNDM7Zm9yIF8gaW4gJChzZXEgMSAxMCk7IGRvXG4mIzQzO1x0Z3JlcCAtcSBcJiMzNDtQSU5fXCYjMzQ7IC90bXAvcGluLm91dCAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBicmVha1xuJiM0MztcdHNsZWVwIDFcbiYjNDM7ZG9uZVxuJiM0MztwaW5uZWRfYmxrPSQoc2VkIC1uICYjMzk7cy9eUElOX0JMSz0vL3AmIzM5OyAvdG1wL3Bpbi5vdXQpXG4mIzQzO1sgLW4gXCYjMzQ7JHtwaW5uZWRfYmxrfVwmIzM0OyBdIHx8IHNraXAgXCYjMzQ7cGluIGZhaWxlZDogJChjYXQgL3RtcC9waW4ub3V0IDJcdTAwM2UvZGV2L251bGwpXCYjMzQ7XG4mIzQzO2VjaG8gXCYjMzQ7IyBwaW5uZWQgb25lIHBhZ2UgaW4gYmxvY2sgbWVtb3J5JHtwaW5uZWRfYmxrfVwmIzM0O1xuJiM0MztcbiYjNDM7IyAzLiBFamVjdCB0aGUgRElNTSB3aXRoIHRoZSByZXRyeSBsaW1pdCBkaXNhYmxlZCAoZGVmYXVsdCA9IHVuYm91bmRlZCkuXG4mIzQzO2VjaG8gMCBcdTAwM2UgXCYjMzQ7JHtQQVJBTX1cJiMzNDtcbiYjNDM7ZG1lc2cgLWMgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fCB0cnVlXG4mIzQzO1xuJiM0MztlamRldj1cJiMzNDtcJiMzNDtcbiYjNDM7Zm9yIGRldiBpbiAvc3lzL2J1cy9hY3BpL2RldmljZXMvUE5QMEM4MDoqOyBkb1xuJiM0MztcdFsgLWUgXCYjMzQ7JHtkZXZ9L2VqZWN0XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IHsgZWpkZXY9XCYjMzQ7JHtkZXZ9XCYjMzQ7OyBicmVhazsgfVxuJiM0Mztkb25lXG4mIzQzO1sgLW4gXCYjMzQ7JHtlamRldn1cJiMzNDsgXSB8fCBza2lwIFwmIzM0O25vIGVqZWN0YWJsZSBBQ1BJIG1lbW9yeSBkZXZpY2UgKFBOUDBDODApXCYjMzQ7XG4mIzQzO2VjaG8gXCYjMzQ7IyBlamVjdGluZyAke2VqZGV2fVwmIzM0O1xuJiM0MztlY2hvIDEgXHUwMDNlIFwmIzM0OyR7ZWpkZXZ9L2VqZWN0XCYjMzQ7IFx1MDAyNlxuJiM0MztcbiYjNDM7IyA0LiBPYnNlcnZlIHRoZSBoYW5nOiB0aGUgYmxvY2sgbXVzdCBzdGF5IGluIFwmIzM0O2dvaW5nLW9mZmxpbmVcJiMzNDsuXG4mIzQzO3NsZWVwIDNcbiYjNDM7c3R1Y2s9MFxuJiM0MztpZiBbIFwmIzM0OyQoYmxvY2tfc3RhdGUpXCYjMzQ7ID0gZ29pbmctb2ZmbGluZSBdOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDsjIGJsb2NrIG1lbW9yeSR7cGlubmVkX2Jsa30gZ29pbmctb2ZmbGluZSwgaG9sZGluZyAke0hBTkdfSE9MRH1zXCYjMzQ7XG4mIzQzO1x0c2xlZXAgXCYjMzQ7JHtIQU5HX0hPTER9XCYjMzQ7XG4mIzQzO1x0aWYgWyBcJiMzNDskKGJsb2NrX3N0YXRlKVwmIzM0OyA9IGdvaW5nLW9mZmxpbmUgXTsgdGhlblxuJiM0MztcdFx0c3R1Y2s9MVxuJiM0MztcdFx0ZWNobyAxIFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL3N5c3JxIDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuJiM0MztcdFx0ZWNobyBsIFx1MDAzZSAvcHJvYy9zeXNycS10cmlnZ2VyIDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuJiM0MztcdFx0c2xlZXAgMVxuJiM0MztcdFx0ZG1lc2cgfCBncmVwIC1CMiAtQTEyIFwmIzM0O29mZmxpbmVfcGFnZXNcJiMzNDsgfCB0YWlsIC0yMCBcXFxuJiM0MztcdFx0XHR8IHNlZCAmIzM5O3MvXi8jICAvJiMzOTtcbiYjNDM7XHRmaVxuJiM0MztmaVxuJiM0MztlY2hvIFwmIzM0O1ZNVEVTVF9TVFVDSz0ke3N0dWNrfVwmIzM0O1xuJiM0MztcbiYjNDM7IyA1LiBSZXNjdWU6IGFybSB0aGUgcmV0cnkgbGltaXQgYXQgcnVudGltZSBhbmQgd2FpdCBmb3IgYmFpbG91dC5cbiYjNDM7ZWNobyBcJiMzNDske01BWF9QQVNTRVN9XCYjMzQ7IFx1MDAzZSBcJiMzNDske1BBUkFNfVwmIzM0O1xuJiM0MztlY2hvIFwmIzM0OyMgYXJtZWQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9JChjYXQgXCYjMzQ7JHtQQVJBTX1cJiMzNDspXCYjMzQ7XG4mIzQzO1xuJiM0MztyZXNjdWVkPTBcbiYjNDM7Zm9yIF8gaW4gJChzZXEgMSBcJiMzNDske1JFU0NVRV9USU1FT1VUfVwmIzM0Oyk7IGRvXG4mIzQzO1x0aWYgZG1lc2cgfCBncmVwIC1xIFwmIzM0O2dpdmluZyB1cCBhZnRlclwmIzM0OzsgdGhlblxuJiM0MztcdFx0cmVzY3VlZD0xXG4mIzQzO1x0XHRicmVha1xuJiM0MztcdGZpXG4mIzQzO1x0c2xlZXAgMVxuJiM0Mztkb25lXG4mIzQzO2RtZXNnIHwgZ3JlcCBcJiMzNDtnaXZpbmcgdXAgYWZ0ZXJcJiMzNDsgfCB0YWlsIC0yIHwgc2VkICYjMzk7cy9eLyMgLyYjMzk7XG4mIzQzO2VjaG8gXCYjMzQ7Vk1URVNUX1JFU0NVRUQ9JHtyZXNjdWVkfVwmIzM0O1xuJiM0MztcbiYjNDM7c2xlZXAgMlxuJiM0MztlY2hvIFwmIzM0O1ZNVEVTVF9CTE9DS19TVEFURT0kKGJsb2NrX3N0YXRlKVwmIzM0O1xuJiM0MztcbiYjNDM7a2lsbCBcJiMzNDske3Bpbl9waWR9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7ZWNobyBcJiMzNDtWTVRFU1RfRE9ORVwmIzM0O1xuJiM0MztHVUVTVEVPRlxuJiM0MztcbiYjNDM7IyAtLSBsYXVuY2ggVk0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7KCBjZCBcJiMzNDske0tFUk5FTF9DSEVDS09VVH1cJiMzNDsgXHUwMDI2XHUwMDI2IGV4ZWMgdm5nIC0tZm9yY2UtOXAgLS1uby12aXJ0bWUtbmctaW5pdCBcXFxuJiM0MztcdC0tcWVtdS1vcHQ9LW0gLS1xZW11LW9wdD1cJiMzNDsyRyxzbG90cz00LG1heG1lbT04R1wmIzM0OyBcXFxuJiM0MztcdC0tcWVtdS1vcHQ9LW9iamVjdCBcXFxuJiM0MztcdC0tcWVtdS1vcHQ9XCYjMzQ7bWVtb3J5LWJhY2tlbmQtcmFtLGlkPW1lbTAsc2l6ZT0ke0RJTU1fU0laRX1cJiMzNDsgXFxcbiYjNDM7XHQtLXFlbXUtb3B0PS1kZXZpY2UgLS1xZW11LW9wdD1cJiMzNDtwYy1kaW1tLGlkPWRpbW0wLG1lbWRldj1tZW0wXCYjMzQ7IFxcXG4mIzQzO1x0YmFzaCBcJiMzNDske0dVRVNUX1NDUklQVH1cJiMzNDsgKSBcdTAwM2UgXCYjMzQ7JHtMT0d9XCYjMzQ7IDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuJiM0MztWTkdfUElEPSQhXG4mIzQzO1xuJiM0Mztmb3IgXyBpbiAkKHNlcSAxIFwmIzM0OyR7Qk9PVF9USU1FT1VUfVwmIzM0Oyk7IGRvXG4mIzQzO1x0Z3JlcCAtcSBcJiMzNDtWTVRFU1RfRE9ORVwmIzM0OyBcJiMzNDske0xPR31cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCBcdTAwMjZcdTAwMjYgYnJlYWtcbiYjNDM7XHRraWxsIC0wIFwmIzM0OyR7Vk5HX1BJRH1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8fCBicmVha1xuJiM0MztcdHNsZWVwIDFcbiYjNDM7ZG9uZVxuJiM0MztcbiYjNDM7aWYgISBncmVwIC1xIFwmIzM0O1ZNVEVTVF9ET05FXCYjMzQ7IFwmIzM0OyR7TE9HfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsOyB0aGVuXG4mIzQzO1x0ZHVtcF9sb2dfdGFpbFxuJiM0MztcdHNraXBfYWxsX3Rlc3RzIFwmIzM0O1ZNIGRpZCBub3QgZmluaXNoIHdpdGhpbiAke0JPT1RfVElNRU9VVH1zXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztraWxsIFwmIzM0OyR7Vk5HX1BJRH1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0Mzt3YWl0IFwmIzM0OyR7Vk5HX1BJRH1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztWTkdfUElEPVwmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7IyAtLSByZXBvcnQgcmVzdWx0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7c2tpcF9yZWFzb249XCYjMzQ7JChncmVwIFwmIzM0O15WTVRFU1RfU0tJUDogXCYjMzQ7IFwmIzM0OyR7TE9HfVwmIzM0OyB8IHRhaWwgLTEgfCB0ciAtZCAmIzM5O1xcciYjMzk7KVwmIzM0O1xuJiM0MztpZiBbIC1uIFwmIzM0OyR7c2tpcF9yZWFzb259XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRza2lwX2FsbF90ZXN0cyBcJiMzNDske3NraXBfcmVhc29uI1ZNVEVTVF9TS0lQOiB9XCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztncmVwIFwmIzM0O14jXCYjMzQ7IFwmIzM0OyR7TE9HfVwmIzM0OyB8IHRyIC1kICYjMzk7XFxyJiMzOTsgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG9cbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDske2xpbmUjXFwjIH1cJiMzNDtcbiYjNDM7ZG9uZVxuJiM0MztcbiYjNDM7c3R1Y2s9XCYjMzQ7JChndWVzdF9yZXN1bHQgVk1URVNUX1NUVUNLKVwmIzM0O1xuJiM0MztyZXNjdWVkPVwmIzM0OyQoZ3Vlc3RfcmVzdWx0IFZNVEVTVF9SRVNDVUVEKVwmIzM0O1xuJiM0MztibGtfc3RhdGU9XCYjMzQ7JChndWVzdF9yZXN1bHQgVk1URVNUX0JMT0NLX1NUQVRFKVwmIzM0O1xuJiM0MztcbiYjNDM7aWYgWyBcJiMzNDske2Jsa19zdGF0ZTotR09ORX1cJiMzNDsgPSBcJiMzNDtHT05FXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRza2lwX2FsbF90ZXN0cyBcJiMzNDtESU1NIHdhcyBlamVjdGVkIGRlc3BpdGUgdGhlIHBpbiAocGluIGRpZCBub3QgaG9sZClcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2lmIFsgXCYjMzQ7JHtzdHVjazotMH1cJiMzNDsgPSAxIF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDtBQ1BJIGVqZWN0IGt3b3JrZXIgaGFuZ3MgdW5ib3VuZGVkIGluIG9mZmxpbmVfcGFnZXMoKVwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0ZHVtcF9sb2dfdGFpbFxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O0FDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyR7cmVzY3VlZDotMH1cJiMzNDsgPSAxIF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDtzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1wmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0ZHVtcF9sb2dfdGFpbFxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O3N0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyR7YmxrX3N0YXRlfVwmIzM0OyA9IFwmIzM0O29ubGluZVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7bWVtb3J5IGJsb2NrIG9ubGluZSBhbmQgdXNhYmxlIGFmdGVyIHRoZSBiYWlsb3V0XCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDttZW1vcnkgYmxvY2sgb25saW5lIGFuZCB1c2FibGUgYWZ0ZXIgdGhlIGJhaWxvdXQgKHN0YXRlPSR7YmxrX3N0YXRlfSlcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2t0YXBfZmluaXNoZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGhvdHBsdWcgbG9naWMgaW4gYG9mZmxpbmVfcGFnZXNgIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiBtZW1vcnkgaXMgb2ZmbGluZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUzMGIzMjE0NTI4NmY2NTNmZWM0YjE5NDVlZGQ3OTkyMTIyMGJhZmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAwMjoyNzowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggNTNmMDg5NTBhNjMwOTYuLjkwYjY3YzQ1N2MyYTgyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMzk4MCw2ICYjNDM7Mzk4MCwyMCBAQCBLZXJuZWwgcGFyYW1ldGVycwogCQkJTm90ZSB0aGF0IGV2ZW4gd2hlbiBlbmFibGVkLCB0aGVyZSBhcmUgYSBmZXcgY2FzZXMgd2hlcmUKIAkJCXRoZSBmZWF0dXJlIGlzIG5vdCBlZmZlY3RpdmUuCiAKJiM0MzsJbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9CiYjNDM7CQkJW0tOTF0gTWF4aW11bSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3NlcwomIzQzOwkJCWZvciBtZW1vcnkgb2ZmbGluaW5nLgomIzQzOwkJCUZvcm1hdDogJmx0O2ludGVnZXImZ3Q7CiYjNDM7CQkJZGVmYXVsdDogMCAobm8gbGltaXQsIGhpc3RvcmljYWwgYmVoYXZpb3VyKQomIzQzOwkJCVdoZW4gbm9uLXplcm8sIG1lbW9yeSBvZmZsaW5pbmcgZ2l2ZXMgdXAgd2l0aAomIzQzOwkJCS1FQlVTWSBhZnRlciB0aGlzIG1hbnkgbWlncmF0aW9uIHBhc3NlcyBvdmVyCiYjNDM7CQkJdGhlIHJhbmdlLCBpbnN0ZWFkIG9mIHJldHJ5aW5nIGZvcmV2ZXIgb24gYQomIzQzOwkJCXN0dWNrIHBhZ2UuICBFYWNoIHBhc3Mgc2NhbnMgdGhlIHJhbmdlIGFuZAomIzQzOwkJCW1pZ3JhdGVzIHdoYXQgaXQgY2FuLgomIzQzOwkJCVRoZSBwYXJhbWV0ZXIgaXMgcmUtcmVhZCBvbiBldmVyeSBwYXNzLCBzbyBhbgomIzQzOwkJCW9mZmxpbmUgcmVxdWVzdCB0aGF0IGlzIGFscmVhZHkgc3R1Y2sgY2FuIGJlCiYjNDM7CQkJcmVzY3VlZCBhdCBydW50aW1lIGJ5IHdyaXRpbmcgdGhlIHBhcmFtZXRlci4KJiM0MzsKIAltZW10ZXN0PQlbS05MLFg4NixBUk0sTTY4SyxQUEMsUklTQ1YsRUFSTFldIEVuYWJsZSBtZW10ZXN0CiAJCQlGb3JtYXQ6ICZsdDtpbnRlZ2VyJmd0OwogCQkJZGVmYXVsdCA6IDAgJmx0O2Rpc2FibGUmZ3Q7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0CmluZGV4IDAyMDdmODcyNTE0MjFjLi43OWI0NTEwOWM0MDhjOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QKQEAgLTIyNCw3ICYjNDM7MjI0LDEwIEBAIGluY3JlYXNlcyBtZW1vcnkgb2ZmbGluaW5nIHJlbGlhYmlsaXR5OyBzdGlsbCwgbWVtb3J5IG9mZmxpbmluZyBjYW4gZmFpbCBpbgogc29tZSBjb3JuZXIgY2FzZXMuCiAKIEZ1cnRoZXIsIG1lbW9yeSBvZmZsaW5pbmcgbWlnaHQgcmV0cnkgZm9yIGEgbG9uZyB0aW1lIChvciBldmVuIGZvcmV2ZXIpLCB1bnRpbAotYWJvcnRlZCBieSB0aGUgdXNlci4KJiM0MzthYm9ydGVkIGJ5IHRoZSB1c2VyLiAgVGhlIGBgbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNgYAomIzQzO3BhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBib3VuZCB0aGUgbnVtYmVyIG9mIHJldHJ5IHBhc3NlcywgbWFraW5nIGFuIG9mZmxpbmUKJiM0MztyZXF1ZXN0IHRoYXQgY2Fubm90IG1ha2UgcHJvZ3Jlc3MgZmFpbCB3aXRoIGBgLUVCVVNZYGAgaW5zdGVhZCBvZiByZXRyeWluZwomIzQzO2luZGVmaW5pdGVseSAoc2VlIGBNb2R1bGUgUGFyYW1ldGVyc2BfKS4KIAogT2ZmbGluaW5nIG9mIGEgbWVtb3J5IGJsb2NrIGNhbiBiZSB0cmlnZ2VyZWQgdmlhOjoKIApAQCAtNTQ3LDYgJiM0Mzs1NTAsMjcgQEAgVGhlIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVycyBhcmUgY3VycmVudGx5IGRlZmluZWQ6CiAJCQkJIHBvc3NpYmxlLgogCiAJCQkJIFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvbiBDT05GSUdfTlVNQS4KJiM0MztgYG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYGAJIHJlYWQtd3JpdGU6IE1heGltdW0gbnVtYmVyIG9mIG1pZ3JhdGlvbgomIzQzOwkJCQkgcGFzc2VzIGZvciBhIHNpbmdsZSBtZW1vcnkgb2ZmbGluZQomIzQzOwkJCQkgcmVxdWVzdC4gIE1lbW9yeSBvZmZsaW5pbmcgcmV0cmllcyB0bwomIzQzOwkJCQkgbWlncmF0ZSBhbmQgaXNvbGF0ZSBwYWdlcyB1bnRpbCBpdCBzdWNjZWVkczsKJiM0MzsJCQkJIGEgcGFnZSB0aGF0IGNhbiBuZXZlciBiZSBtaWdyYXRlZCBvciBmcmVlZAomIzQzOwkJCQkgbWFrZXMgaXQgcmV0cnkgZm9yZXZlci4gIFdoZW4gdGhpcyBwYXJhbWV0ZXIKJiM0MzsJCQkJIGlzIG5vbi16ZXJvLCBhbiBvZmZsaW5lIHJlcXVlc3QgZ2l2ZXMgdXAKJiM0MzsJCQkJIHdpdGggYGAtRUJVU1lgYCBhZnRlciB0aGUgY29uZmlndXJlZCBudW1iZXIKJiM0MzsJCQkJIG9mIG1pZ3JhdGlvbiBwYXNzZXMgYW5kIHRoZSBtZW1vcnkgYmxvY2sKJiM0MzsJCQkJIHN0YXlzIG9ubGluZS4KJiM0MzsKJiM0MzsJCQkJIFRoZSBwYXJhbWV0ZXIgaXMgcmUtcmVhZCBvbiBldmVyeSBwYXNzLCBzbwomIzQzOwkJCQkgYW4gb2ZmbGluZSByZXF1ZXN0IHRoYXQgaXMgYWxyZWFkeSBzdHVjawomIzQzOwkJCQkgcmV0cnlpbmcgY2FuIGJlIHJlc2N1ZWQgYXQgcnVudGltZSBieQomIzQzOwkJCQkgd3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlLCB3aXRob3V0IGEgcmVib290LgomIzQzOwomIzQzOwkJCQkgVGhlIGRlZmF1bHQgaXMgJiMzNDswJiMzNDssIG1lYW5pbmcgbm8gbGltaXQgKHRoZQomIzQzOwkJCQkgaGlzdG9yaWNhbCBiZWhhdmlvdXIpLgomIzQzOwomIzQzOwkJCQkgUGFyYW1ldGVyIGF2YWlsYWJpbGl0eSBkZXBlbmRzIG9uCiYjNDM7CQkJCSBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRS4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFpPTkVfTU9WQUJMRQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggMjI2YWI5Y2IwNzhhZDEuLjkwNjc4MjkzNDlhMGRhIDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTE3ODUsNiAmIzQzOzE3ODUsMTIgQEAgYm9vbCBtaHBfcmFuZ2VfYWxsb3dlZCh1NjQgc3RhcnQsIHU2NCBzaXplLCBib29sIG5lZWRfbWFwcGluZykKIH0KIAogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFCiYjNDM7LyogTWF4IG9mZmxpbmVfcGFnZXMoKSBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSAtRUJVU1k7IDAgPSByZXRyeSBmb3JldmVyLiAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgX19yZWFkX21vc3RseTsKJiM0Mzttb2R1bGVfcGFyYW0ob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMsIHVpbnQsIDA2NDQpOwomIzQzO01PRFVMRV9QQVJNX0RFU0Mob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMsCiYjNDM7CSYjMzQ7TWF4IG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIG1lbW9yeSBvZmZsaW5lIGdpdmVzIHVwICgwID0gbm8gbGltaXQpJiMzNDspOwomIzQzOwogLyoKICAqIFNjYW4gcGZuIHJhbmdlIFtzdGFydCxlbmQpIHRvIGZpbmQgbW92YWJsZS9taWdyYXRhYmxlIHBhZ2VzIChMUlUgYW5kCiAgKiBodWdldGxiIGZvbGlvLCBtb3ZhYmxlX29wcyBwYWdlcykuIFdpbGwgc2tpcCBvdmVyIG1vc3QgdW5tb3ZhYmxlCkBAIC0xOTY2LDYgJiM0MzsxOTcyLDggQEAgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCiAJc3RydWN0IG5vZGVfbm90aWZ5IG5vZGVfYXJnID0gewogCQkubmlkID0gTlVNQV9OT19OT0RFLAogCX07CiYjNDM7CXVuc2lnbmVkIGludCBtYXhfcGFzc2VzOwomIzQzOwl1bnNpZ25lZCBpbnQgcGFzcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljaGFyICpyZWFzb247CiAJaW50IHJldDsKQEAgLTIwNjIsNiAmIzQzOzIwNzAsMzYgQEAgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCiAJCQkJZ290byBmYWlsZWRfcmVtb3ZhbF9pc29sYXRlZDsKIAkJCX0KIAomIzQzOwkJCS8qCiYjNDM7CQkJICogQSBwYWdlIHRoYXQgY2FuIG5ldmVyIGJlIG1pZ3JhdGVkIChlLmcuIGEKJiM0MzsJCQkgKiBsb25nLXRlcm0gcGluKSBtYWtlcyB0aGlzIGxvb3AgcmV0cnkgZm9yZXZlci4KJiM0MzsJCQkgKiBHaXZlIHVwIGFmdGVyIHRoZSBjb25maWd1cmVkIG51bWJlciBvZiBwYXNzZXMuCiYjNDM7CQkJICogVGhlIGxpbWl0IGlzIHJlLXJlYWQgb24gZXZlcnkgcGFzcyBzbyB0aGF0IGFuCiYjNDM7CQkJICogb2ZmbGluZSByZXF1ZXN0IHRoYXQgaXMgYWxyZWFkeSBzdHVjayBoZXJlIGNhbgomIzQzOwkJCSAqIGJlIGFib3J0ZWQgYXQgcnVudGltZSBieSB3cml0aW5nIHRoZSBwYXJhbWV0ZXIsCiYjNDM7CQkJICogd2hpY2ggbWF0dGVycyBmb3IgaW4ta2VybmVsIGNhbGxlcnMgKGUuZy4gQUNQSQomIzQzOwkJCSAqIERJTU0gaG90LXVucGx1ZykgdGhhdCBydW4gb24ga3dvcmtlcnMgYW5kIGNhbgomIzQzOwkJCSAqIG5ldmVyIGJlIGFib3J0ZWQgYnkgYSBzaWduYWwuCiYjNDM7CQkJICovCiYjNDM7CQkJbWF4X3Bhc3NlcyA9IFJFQURfT05DRShvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlcyk7CiYjNDM7CQkJaWYgKG1heF9wYXNzZXMgJmFtcDsmYW1wOyBwYXNzJiM0MzsmIzQzOyAmZ3Q7PSBtYXhfcGFzc2VzKSB7CiYjNDM7CQkJCXByX3dhcm4oJiMzNDttZW1vcnkgb2ZmbGluaW5nIFttZW0gJSMwMTBsbHgtJSMwMTBsbHhdOiBnaXZpbmcgdXAgYWZ0ZXIgJXUgcGFzc2VzXG4mIzM0OywKJiM0MzsJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc3RhcnRfcGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsCiYjNDM7CQkJCQkoKHVuc2lnbmVkIGxvbmcgbG9uZyllbmRfcGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQpIC0gMSwKJiM0MzsJCQkJCXBhc3MgLSAxKTsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogRHVtcCB0aGUgcGFnZSB3ZSBsYXN0IHN0b3BwZWQgYXQgYXMgYQomIzQzOwkJCQkgKiBkaWFnbm9zdGljIGhpbnQ6IHVzdWFsbHkgdGhlIHN0dWNrIHBhZ2UsCiYjNDM7CQkJCSAqIGJ1dCBqdXN0IHRoZSByYW5nZSBzdGFydCBhZnRlciBhIHJlc3RhcnQuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlpZiAocGZuICZndDs9IHN0YXJ0X3BmbiAmYW1wOyZhbXA7IHBmbiAmbHQ7IGVuZF9wZm4pCiYjNDM7CQkJCQlkdW1wX3BhZ2UocGZuX3RvX3BhZ2UocGZuKSwKJiM0MzsJCQkJCQkgICYjMzQ7bWVtb3J5IG9mZmxpbmUgcmV0cnkgbGltaXQmIzM0Oyk7CiYjNDM7CQkJCXJldCA9IC1FQlVTWTsKJiM0MzsJCQkJcmVhc29uID0gJiMzNDtyZXRyeSBsaW1pdCBleGNlZWRlZCYjMzQ7OwomIzQzOwkJCQlnb3RvIGZhaWxlZF9yZW1vdmFsX2lzb2xhdGVkOwomIzQzOwkJCX0KJiM0MzsKIAkJCWNvbmRfcmVzY2hlZCgpOwogCiAJCQlyZXQgPSBzY2FuX21vdmFibGVfcGFnZXMocGZuLCBlbmRfcGZuLCAmYW1wO3Bmbik7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCmluZGV4IGVhZTUwNGJkOTRjODNhLi5lMTEzZjNmZjQ2NTU5NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKQEAgLTE3Nyw2ICYjNDM7MTc3LDkgQEAgVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF92bWFsbG9jLnNoCiAjIERlc3RydWN0aXZlOiBldmVyeSBzdWNjZXNzZnVsIHJ1biBwYW5pY3MgdGhlIGtlcm5lbC4gIEluc3RhbGxlZCBhbmQKICMga2VwdCBleGVjdXRhYmxlLCBidXQgbm90IHJ1biBmcm9tIGEgZGVmYXVsdCBrc2VsZnRlc3QgaW52b2NhdGlvbi4KIFRFU1RfUFJPR1NfRVhURU5ERUQgJiM0Mzs9IGh3cG9pc29uLXBhbmljLnNoCiYjNDM7IyBTcGF3bnMgaXRzIG93biBWTSAodmlydG1lLW5nKTsgbm90IHJ1biBmcm9tIGEgZGVmYXVsdCBrc2VsZnRlc3QKJiM0MzsjIGludm9jYXRpb24uCiYjNDM7VEVTVF9QUk9HU19FWFRFTkRFRCAmIzQzOz0gdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoCiAKIFRFU1RfRklMRVMgOj0gdGVzdF92bWFsbG9jLnNoCiBURVNUX0ZJTEVTICYjNDM7PSB0ZXN0X2htbS5zaApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnCmluZGV4IDA2Zjc4YmQyMzJlMmUzLi5kMjJmNjNlYjljMmM5ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZwpAQCAtMTQsMyAmIzQzOzE0LDYgQEAgQ09ORklHX1VQUk9CRVM9eQogQ09ORklHX01FTU9SWV9GQUlMVVJFPXkKIENPTkZJR19IV1BPSVNPTl9JTkpFQ1Q9bQogQ09ORklHX1BST0NfTUVNX0FMV0FZU19GT1JDRT15CiYjNDM7Q09ORklHX01FTU9SWV9IT1RQTFVHPXkKJiM0MztDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15CiYjNDM7Q09ORklHX0FDUElfSE9UUExVR19NRU1PUlk9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jMjExYTBlN2NhYTJkMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaApAQCAtMCwwICYjNDM7MSwzNjkgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBUZXN0IG1lbW9yeV9ob3RwbHVnLm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzIGJ5IHJlcHJvZHVjaW5nIHRoZSBBQ1BJCiYjNDM7IyBtZW1vcnkgaG90LXVucGx1ZyBoYW5nIGluIGt3b3JrZXIgY29udGV4dCBhbmQgdmVyaWZ5aW5nIHRoYXQgdGhlIHJldHJ5CiYjNDM7IyBsaW1pdCByZWNvdmVycyBmcm9tIGl0LgomIzQzOyMKJiM0MzsjIG9mZmxpbmVfcGFnZXMoKSByZXRyaWVzIHBhZ2UgbWlncmF0aW9uIGluIGFuIHVuYm91bmRlZCBsb29wLiAgQSBwYWdlCiYjNDM7IyB0aGF0IGNhbiBuZXZlciBiZSBtaWdyYXRlZCAobG9uZy10ZXJtIHBpbiwgc2xhYiwgYnVzeSBtZXRhZGF0YSkgbWFrZXMKJiM0MzsjIHRoZSBsb29wIHNwaW4gZm9yZXZlci4gIFVzZXJzcGFjZS1kcml2ZW4gb2ZmbGluZXMgY2FuIGJlIGludGVycnVwdGVkIGJ5CiYjNDM7IyBhIHNpZ25hbCwgYnV0IGFuIEFDUEkgRElNTSBlamVjdCBydW5zIG9uIHRoZSBrYWNwaV9ob3RwbHVnX3dxIGt3b3JrZXIKJiM0MzsjIHdoZXJlIHNpZ25hbF9wZW5kaW5nKCkgbmV2ZXIgZmlyZXMsIHNvIHRoZSBrd29ya2VyIGhhbmdzIHVudGlsIHJlYm9vdC4KJiM0MzsjCiYjNDM7IyBGbG93OgomIzQzOyMgICAxLiBCb290IHRoZSBqdXN0LWJ1aWx0IGtlcm5lbCAodmlydG1lLW5nKSB3aXRoIGEgY29sZC1wbHVnZ2VkIHBjLWRpbW0uCiYjNDM7IyAgIDIuIE9ubGluZSB0aGUgRElNTSYjMzk7cyBibG9ja3MgYXMgWk9ORV9NT1ZBQkxFLgomIzQzOyMgICAzLiBQaW4gb25lIHBhZ2Ugb2YgdGhlIERJTU0gKHZtc3BsaWNlIGxvbmctdGVybSBwaW4pLgomIzQzOyMgICA0LiBFamVjdCB0aGUgRElNTSB2aWEgc3lzZnM7IG9mZmxpbmUgcnVucyBvbiBrYWNwaV9ob3RwbHVnX3dxLgomIzQzOyMgICA1LiBPYnNlcnZlIHRoZSBoYW5nIChnb2luZy1vZmZsaW5lIHBlcnNpc3RzKS4KJiM0MzsjICAgNi4gUmVzY3VlOiB3cml0ZSBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcyBhdCBydW50aW1lLCB2ZXJpZnkgYmFpbG91dC4KJiM0MzsjCiYjNDM7IyBUQVAgc3VidGVzdHM6CiYjNDM7IyAgIDEgIEFDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpCiYjNDM7IyAgIDIgIHN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzCiYjNDM7IyAgIDMgIG1lbW9yeSBibG9jayBvbmxpbmUgYW5kIHVzYWJsZSBhZnRlciB0aGUgYmFpbG91dAomIzQzOyMKJiM0MzsjIERlcGVuZGVuY2llczogdmlydG1lLW5nICh2bmcpLCBxZW11LXN5c3RlbS0mbHQ7YXJjaCZndDssIGNjLgomIzQzOyMgU0tJUHMgKG5ldmVyIEZBSUxzKSB3aGVuIHRvb2xpbmcgb3Iga2VybmVsIHN1cHBvcnQgaXMgbWlzc2luZy4KJiM0MzsKJiM0MztyZWFkb25seSBTQ1JJUFRfRElSPSYjMzQ7JChjZCAtUCAtLSAmIzM0OyQoZGlybmFtZSAtLSAmIzM0OyR7QkFTSF9TT1VSQ0VbMF19JiMzNDspJiMzNDsgJmFtcDsmYW1wOyBwd2QgLVApJiMzNDsKJiM0MztyZWFkb25seSBLRVJORUxfQ0hFQ0tPVVQ9JiMzNDskKHJlYWxwYXRoICYjMzQ7JHtTQ1JJUFRfRElSfSYjMzQ7Ly4uLy4uLy4uLy4uLykmIzM0OwomIzQzOwomIzQzOyMgc2hlbGxjaGVjayBzb3VyY2U9Li4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaAomIzQzO3NvdXJjZSAmIzM0OyR7U0NSSVBUX0RJUn0mIzM0Oy8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoCiYjNDM7CiYjNDM7cmVhZG9ubHkgRElNTV9TSVpFPSYjMzQ7JHtESU1NX1NJWkU6LTI1Nk19JiMzNDsKJiM0MztyZWFkb25seSBNQVhfUEFTU0VTPSYjMzQ7JHtNQVhfUEFTU0VTOi01MH0mIzM0OwomIzQzO3JlYWRvbmx5IEhBTkdfSE9MRD0mIzM0OyR7SEFOR19IT0xEOi0xMH0mIzM0OwomIzQzO3JlYWRvbmx5IFJFU0NVRV9USU1FT1VUPSYjMzQ7JHtSRVNDVUVfVElNRU9VVDotMzB9JiMzNDsKJiM0MztyZWFkb25seSBCT09UX1RJTUVPVVQ9JiMzNDske0JPT1RfVElNRU9VVDotMjQwfSYjMzQ7CiYjNDM7CiYjNDM7cmVhZG9ubHkgTE9HPSYjMzQ7JChta3RlbXAgL3RtcC92bXRlc3RfbWhwX1hYWFhYWC5sb2cpJiMzNDsKJiM0MztyZWFkb25seSBHVUVTVF9TQ1JJUFQ9JiMzNDskKG1rdGVtcCAvdG1wL3ZtdGVzdF9taHBfZ3Vlc3RfWFhYWFhYLnNoKSYjMzQ7CiYjNDM7cmVhZG9ubHkgUElOX1NSQz0mIzM0OyQobWt0ZW1wIC90bXAvdm10ZXN0X21ocF9waW5fWFhYWFhYLmMpJiMzNDsKJiM0MzsjIE11c3QgbGl2ZSBpbiB0aGUga2VybmVsIHRyZWUgc28gdGhlIGd1ZXN0IHNlZXMgaXQgdGhyb3VnaCB0aGUgOXAgcm9vdGZzLgomIzQzO3JlYWRvbmx5IFBJTl9CSU49JiMzNDske1NDUklQVF9ESVJ9Ly52bXRlc3RfcGluX3BhcmsuJCQmIzM0OwomIzQzOwomIzQzO1ZOR19QSUQ9JiMzNDsmIzM0OwomIzQzOwomIzQzO2NsZWFudXAoKSB7CiYjNDM7CVsgLW4gJiMzNDske1ZOR19QSUR9JiMzNDsgXSAmYW1wOyZhbXA7IGtpbGwgJiMzNDske1ZOR19QSUR9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJcm0gLWYgJiMzNDske0xPR30mIzM0OyAmIzM0OyR7R1VFU1RfU0NSSVBUfSYjMzQ7ICYjMzQ7JHtQSU5fU1JDfSYjMzQ7ICYjMzQ7JHtQSU5fQklOfSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2d1ZXN0X3Jlc3VsdCgpIHsKJiM0MzsJZ3JlcCAtbyAmIzM0O14kezF9PVtBLVphLXowLTlfLV0qJiMzNDsgJiMzNDske0xPR30mIzM0OyB8IHRhaWwgLTEgfCBjdXQgLWQ9IC1mMgomIzQzO30KJiM0MzsKJiM0MztkdW1wX2xvZ190YWlsKCkgewomIzQzOwl0YWlsIC0yNSAmIzM0OyR7TE9HfSYjMzQ7IHwgd2hpbGUgSUZTPSByZWFkIC1yIGxpbmU7IGRvCiYjNDM7CQlrdGFwX3ByaW50X21zZyAmIzM0OyR7bGluZX0mIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzO3NraXBfYWxsX3Rlc3RzKCkgewomIzQzOwlsb2NhbCBpCiYjNDM7CiYjNDM7CWZvciBpIGluIDEgMiAzOyBkbwomIzQzOwkJa3RhcF90ZXN0X3NraXAgJiMzNDskMSYjMzQ7CiYjNDM7CWRvbmUKJiM0MzsJa3RhcF9maW5pc2hlZAomIzQzO30KJiM0MzsKJiM0MzsjIC0tIHByZS1mbGlnaHQgY2hlY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsKJiM0MztrdGFwX3ByaW50X2hlYWRlcgomIzQzO2t0YXBfc2V0X3BsYW4gMwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7YXJjaD0mIzM0OyQodW5hbWUgLW0pJiMzNDsKJiM0MztjYXNlICYjMzQ7JHthcmNofSYjMzQ7IGluCiYjNDM7eDg2XzY0fGFhcmNoNjQpIDs7CiYjNDM7KikJc2tpcF9hbGxfdGVzdHMgJiMzNDtwYy1kaW1tIEFDUEkgaG90cGx1ZyBub3QgYXZhaWxhYmxlIG9uICR7YXJjaH0mIzM0OyA7OwomIzQzO2VzYWMKJiM0MzsKJiM0Mztmb3IgZGVwIGluIHZuZyAmIzM0O3FlbXUtc3lzdGVtLSR7YXJjaH0mIzM0OyBjYzsgZG8KJiM0MzsJaWYgISBjb21tYW5kIC12ICYjMzQ7JHtkZXB9JiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MTsgdGhlbgomIzQzOwkJc2tpcF9hbGxfdGVzdHMgJiMzNDske2RlcH0gbm90IGluc3RhbGxlZCYjMzQ7CiYjNDM7CWZpCiYjNDM7ZG9uZQomIzQzOwomIzQzOyMgLS0gcGluIGhlbHBlciAoY29tcGlsZWQgb24gdGhlIGhvc3QsIHZpc2libGUgdG8gdGhlIGd1ZXN0IHZpYSA5cCkgLS0tLS0tLS0tLS0KJiM0MzsjCiYjNDM7IyBBbGxvY2F0ZSBvbmUgYmxvY2smIzM5O3Mgd29ydGggb2YgcGFnZXMgKFpPTkVfTU9WQUJMRSBzZXJ2ZXMgdGhlbSBmcm9tIHRoZQomIzQzOyMgRElNTSksIGZpbmQgb25lIHRoYXQgbGFuZGVkIGluIGEgdGFyZ2V0IGJsb2NrLCB2bXNwbGljZS1waW4gaXQgaW50byBhCiYjNDM7IyBwaXBlLCBwcmludCBQSU5fQkxLPSZsdDtOJmd0OywgYW5kIHNsZWVwIGZvcmV2ZXIuCiYjNDM7CiYjNDM7Y2F0ICZndDsgJiMzNDske1BJTl9TUkN9JiMzNDsgJmx0OyZsdDsmIzM5O1BJTkVPRiYjMzk7CiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3Vpby5oJmd0OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIG1lbW9yeV9ibG9ja19zaXplKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1Zls2NF07CiYjNDM7CXNzaXplX3QgbjsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9ibG9ja19zaXplX2J5dGVzJiMzNDssIE9fUkRPTkxZKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwluID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSAtIDEpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmIChuICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJYnVmW25dID0gJiMzOTtcMCYjMzk7OwomIzQzOwlyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDE2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgdmFkZHJfdG9fYmxvY2soaW50IHBhZ2VtYXBfZmQsIGNoYXIgKnZhZGRyLAomIzQzOwkJCQkgICAgbG9uZyBwYWdlX3NpemUsIHVuc2lnbmVkIGxvbmcgYmxrX3NpemUpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHZwbiA9ICh1bnNpZ25lZCBsb25nKXZhZGRyIC8gcGFnZV9zaXplOwomIzQzOwl1aW50NjRfdCBlbnQ7CiYjNDM7CiYjNDM7CWlmIChwcmVhZChwYWdlbWFwX2ZkLCAmYW1wO2VudCwgc2l6ZW9mKGVudCksIHZwbiAqIDgpICE9IHNpemVvZihlbnQpKQomIzQzOwkJcmV0dXJuIC0xVUw7CiYjNDM7CWlmICghKGVudCAmYW1wOyAoMVVMTCAmbHQ7Jmx0OyA2MykpKQomIzQzOwkJcmV0dXJuIC0xVUw7CiYjNDM7CXJldHVybiAoZW50ICZhbXA7ICgoMVVMTCAmbHQ7Jmx0OyA1NSkgLSAxKSkgKiBwYWdlX3NpemUgLyBibGtfc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQomIzQzO3sKJiM0MzsJbG9uZyBwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYmxrX3NpemUgPSBtZW1vcnlfYmxvY2tfc2l6ZSgpOwomIzQzOwl1bnNpZ25lZCBsb25nIG9mZiwgYmxrID0gMDsKJiM0MzsJY2hhciAqYXJlYSwgKnBhZ2UgPSBOVUxMOwomIzQzOwlpbnQgcGFnZW1hcF9mZCwgcGlwZWZkWzJdLCBpOwomIzQzOwomIzQzOwlpZiAoYXJnYyAmbHQ7IDIgfHwgIWJsa19zaXplKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDt1c2FnZTogcGluX3BhcmsgJmx0O21lbW9yeSBibG9jayZndDsuLi5cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFyZWEgPSBtbWFwKE5VTEwsIGJsa19zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9QT1BVTEFURSwgLTEsIDApOwomIzQzOwlpZiAoYXJlYSA9PSBNQVBfRkFJTEVEKSB7CiYjNDM7CQlwZXJyb3IoJiMzNDttbWFwJiMzNDspOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsJbWVtc2V0KGFyZWEsIDB4NDIsIGJsa19zaXplKTsKJiM0MzsKJiM0MzsJcGFnZW1hcF9mZCA9IG9wZW4oJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXAmIzM0OywgT19SRE9OTFkpOwomIzQzOwlpZiAocGFnZW1hcF9mZCAmbHQ7IDApIHsKJiM0MzsJCXBlcnJvcigmIzM0O3BhZ2VtYXAmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKG9mZiA9IDA7IG9mZiAmbHQ7IGJsa19zaXplICZhbXA7JmFtcDsgIXBhZ2U7IG9mZiAmIzQzOz0gcGFnZV9zaXplKSB7CiYjNDM7CQlibGsgPSB2YWRkcl90b19ibG9jayhwYWdlbWFwX2ZkLCBhcmVhICYjNDM7IG9mZiwgcGFnZV9zaXplLAomIzQzOwkJCQkgICAgIGJsa19zaXplKTsKJiM0MzsJCWZvciAoaSA9IDE7IGkgJmx0OyBhcmdjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChibGsgPT0gc3RydG91bChhcmd2W2ldLCBOVUxMLCAxMCkpIHsKJiM0MzsJCQkJcGFnZSA9IGFyZWEgJiM0Mzsgb2ZmOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJY2xvc2UocGFnZW1hcF9mZCk7CiYjNDM7CiYjNDM7CWlmICghcGFnZSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7UElOX05PTkVcbiYjMzQ7KTsKJiM0MzsJCWZmbHVzaChzdGRvdXQpOwomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBpcGUocGlwZWZkKSkgewomIzQzOwkJcGVycm9yKCYjMzQ7cGlwZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0cnVjdCBpb3ZlYyBpb3YgPSB7IC5pb3ZfYmFzZSA9IHBhZ2UsIC5pb3ZfbGVuID0gcGFnZV9zaXplIH07CiYjNDM7CiYjNDM7CWlmICh2bXNwbGljZShwaXBlZmRbMV0sICZhbXA7aW92LCAxLCAwKSAhPSBwYWdlX3NpemUpIHsKJiM0MzsJCXBlcnJvcigmIzM0O3Ztc3BsaWNlJiMzNDspOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpbnRmKCYjMzQ7UElOX0JMSz0lbHVcbiYjMzQ7LCBibGspOwomIzQzOwlmZmx1c2goc3Rkb3V0KTsKJiM0MzsJcGF1c2UoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO1BJTkVPRgomIzQzOwomIzQzO2lmICEgY2MgLU8yIC1vICYjMzQ7JHtQSU5fQklOfSYjMzQ7ICYjMzQ7JHtQSU5fU1JDfSYjMzQ7IDImZ3Q7Jmd0OyYjMzQ7JHtMT0d9JiMzNDs7IHRoZW4KJiM0MzsJc2tpcF9hbGxfdGVzdHMgJiMzNDtjYW5ub3QgYnVpbGQgdGhlIHBpbiBoZWxwZXImIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7IyAtLSBndWVzdCBzY3JpcHQgKHJ1bnMgYXMgaW5pdCBpbnNpZGUgdGhlIFZNKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzO2NhdCAmZ3Q7ICYjMzQ7JHtHVUVTVF9TQ1JJUFR9JiMzNDsgJmx0OyZsdDtQUk9MT0dVRQomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7cmVhZG9ubHkgTUFYX1BBU1NFUz0ke01BWF9QQVNTRVN9CiYjNDM7cmVhZG9ubHkgSEFOR19IT0xEPSR7SEFOR19IT0xEfQomIzQzO3JlYWRvbmx5IFJFU0NVRV9USU1FT1VUPSR7UkVTQ1VFX1RJTUVPVVR9CiYjNDM7cmVhZG9ubHkgUElOX1BBUks9JiMzNDske1BJTl9CSU59JiMzNDsKJiM0MztQUk9MT0dVRQomIzQzOwomIzQzO2NhdCAmZ3Q7Jmd0OyAmIzM0OyR7R1VFU1RfU0NSSVBUfSYjMzQ7ICZsdDsmbHQ7JiMzOTtHVUVTVEVPRiYjMzk7CiYjNDM7c2V0IC11CiYjNDM7CiYjNDM7cmVhZG9ubHkgUEFSQU09L3N5cy9tb2R1bGUvbWVtb3J5X2hvdHBsdWcvcGFyYW1ldGVycy9vZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcwomIzQzO3JlYWRvbmx5IE1FTT0vc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeQomIzQzOwomIzQzO3NraXAoKSB7IGVjaG8gJiMzNDtWTVRFU1RfU0tJUDogJComIzM0OzsgZWNobyAmIzM0O1ZNVEVTVF9ET05FJiMzNDs7IGV4aXQgMDsgfQomIzQzOwomIzQzO2Jsb2NrX3N0YXRlKCkgewomIzQzOwljYXQgJiMzNDske01FTX0vbWVtb3J5JHtwaW5uZWRfYmxrfS9zdGF0ZSYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8IGVjaG8gR09ORQomIzQzO30KJiM0MzsKJiM0MztbIC1mICYjMzQ7JHtQQVJBTX0mIzM0OyBdIHx8IHNraXAgJiMzNDtrZXJuZWwgbGFja3Mgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMmIzM0OwomIzQzOwomIzQzOyMgMS4gT25saW5lIHRoZSBESU1NJiMzOTtzIGJsb2NrcyBhcyBaT05FX01PVkFCTEUuCiYjNDM7ZGltbV9ibG9ja3M9JiMzNDsmIzM0OwomIzQzO2ZvciBzIGluICYjMzQ7JHtNRU19JiMzNDsvbWVtb3J5Ki9zdGF0ZTsgZG8KJiM0MzsJWyAmIzM0OyQoY2F0ICYjMzQ7JHtzfSYjMzQ7IDImZ3Q7L2Rldi9udWxsKSYjMzQ7ID0gb2ZmbGluZSBdIHx8IGNvbnRpbnVlCiYjNDM7CWlmIGVjaG8gb25saW5lX21vdmFibGUgJmd0OyAmIzM0OyR7c30mIzM0OyAyJmd0Oy9kZXYvbnVsbDsgdGhlbgomIzQzOwkJYj0ke3MlL3N0YXRlfQomIzQzOwkJZGltbV9ibG9ja3M9JiMzNDske2RpbW1fYmxvY2tzfSAke2IjIyptZW1vcnl9JiMzNDsKJiM0MzsJZmkKJiM0Mztkb25lCiYjNDM7ZWNobyAmIzM0OyMgRElNTSBtZW1vcnkgYmxvY2tzOiR7ZGltbV9ibG9ja3M6LSBub25lfSYjMzQ7CiYjNDM7WyAtbiAmIzM0OyR7ZGltbV9ibG9ja3N9JiMzNDsgXSB8fCBza2lwICYjMzQ7bm8gb2ZmbGluZSBtZW1vcnkgYmxvY2tzIChwYy1kaW1tIG1pc3Npbmc/KSYjMzQ7CiYjNDM7CiYjNDM7IyAyLiBQaW4gb25lIHBhZ2UgaW5zaWRlIHRoZSBESU1NLgomIzQzOyYjMzQ7JHtQSU5fUEFSS30mIzM0OyAke2RpbW1fYmxvY2tzfSAmZ3Q7IC90bXAvcGluLm91dCAyJmd0OyZhbXA7MSAmYW1wOwomIzQzO3Bpbl9waWQ9JCEKJiM0Mztmb3IgXyBpbiAkKHNlcSAxIDEwKTsgZG8KJiM0MzsJZ3JlcCAtcSAmIzM0O1BJTl8mIzM0OyAvdG1wL3Bpbi5vdXQgMiZndDsvZGV2L251bGwgJmFtcDsmYW1wOyBicmVhawomIzQzOwlzbGVlcCAxCiYjNDM7ZG9uZQomIzQzO3Bpbm5lZF9ibGs9JChzZWQgLW4gJiMzOTtzL15QSU5fQkxLPS8vcCYjMzk7IC90bXAvcGluLm91dCkKJiM0MztbIC1uICYjMzQ7JHtwaW5uZWRfYmxrfSYjMzQ7IF0gfHwgc2tpcCAmIzM0O3BpbiBmYWlsZWQ6ICQoY2F0IC90bXAvcGluLm91dCAyJmd0Oy9kZXYvbnVsbCkmIzM0OwomIzQzO2VjaG8gJiMzNDsjIHBpbm5lZCBvbmUgcGFnZSBpbiBibG9jayBtZW1vcnkke3Bpbm5lZF9ibGt9JiMzNDsKJiM0MzsKJiM0MzsjIDMuIEVqZWN0IHRoZSBESU1NIHdpdGggdGhlIHJldHJ5IGxpbWl0IGRpc2FibGVkIChkZWZhdWx0ID0gdW5ib3VuZGVkKS4KJiM0MztlY2hvIDAgJmd0OyAmIzM0OyR7UEFSQU19JiMzNDsKJiM0MztkbWVzZyAtYyAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MSB8fCB0cnVlCiYjNDM7CiYjNDM7ZWpkZXY9JiMzNDsmIzM0OwomIzQzO2ZvciBkZXYgaW4gL3N5cy9idXMvYWNwaS9kZXZpY2VzL1BOUDBDODA6KjsgZG8KJiM0MzsJWyAtZSAmIzM0OyR7ZGV2fS9lamVjdCYjMzQ7IF0gJmFtcDsmYW1wOyB7IGVqZGV2PSYjMzQ7JHtkZXZ9JiMzNDs7IGJyZWFrOyB9CiYjNDM7ZG9uZQomIzQzO1sgLW4gJiMzNDske2VqZGV2fSYjMzQ7IF0gfHwgc2tpcCAmIzM0O25vIGVqZWN0YWJsZSBBQ1BJIG1lbW9yeSBkZXZpY2UgKFBOUDBDODApJiMzNDsKJiM0MztlY2hvICYjMzQ7IyBlamVjdGluZyAke2VqZGV2fSYjMzQ7CiYjNDM7ZWNobyAxICZndDsgJiMzNDske2VqZGV2fS9lamVjdCYjMzQ7ICZhbXA7CiYjNDM7CiYjNDM7IyA0LiBPYnNlcnZlIHRoZSBoYW5nOiB0aGUgYmxvY2sgbXVzdCBzdGF5IGluICYjMzQ7Z29pbmctb2ZmbGluZSYjMzQ7LgomIzQzO3NsZWVwIDMKJiM0MztzdHVjaz0wCiYjNDM7aWYgWyAmIzM0OyQoYmxvY2tfc3RhdGUpJiMzNDsgPSBnb2luZy1vZmZsaW5lIF07IHRoZW4KJiM0MzsJZWNobyAmIzM0OyMgYmxvY2sgbWVtb3J5JHtwaW5uZWRfYmxrfSBnb2luZy1vZmZsaW5lLCBob2xkaW5nICR7SEFOR19IT0xEfXMmIzM0OwomIzQzOwlzbGVlcCAmIzM0OyR7SEFOR19IT0xEfSYjMzQ7CiYjNDM7CWlmIFsgJiMzNDskKGJsb2NrX3N0YXRlKSYjMzQ7ID0gZ29pbmctb2ZmbGluZSBdOyB0aGVuCiYjNDM7CQlzdHVjaz0xCiYjNDM7CQllY2hvIDEgJmd0OyAvcHJvYy9zeXMva2VybmVsL3N5c3JxIDImZ3Q7L2Rldi9udWxsIHx8IHRydWUKJiM0MzsJCWVjaG8gbCAmZ3Q7IC9wcm9jL3N5c3JxLXRyaWdnZXIgMiZndDsvZGV2L251bGwgfHwgdHJ1ZQomIzQzOwkJc2xlZXAgMQomIzQzOwkJZG1lc2cgfCBncmVwIC1CMiAtQTEyICYjMzQ7b2ZmbGluZV9wYWdlcyYjMzQ7IHwgdGFpbCAtMjAgXAomIzQzOwkJCXwgc2VkICYjMzk7cy9eLyMgIC8mIzM5OwomIzQzOwlmaQomIzQzO2ZpCiYjNDM7ZWNobyAmIzM0O1ZNVEVTVF9TVFVDSz0ke3N0dWNrfSYjMzQ7CiYjNDM7CiYjNDM7IyA1LiBSZXNjdWU6IGFybSB0aGUgcmV0cnkgbGltaXQgYXQgcnVudGltZSBhbmQgd2FpdCBmb3IgYmFpbG91dC4KJiM0MztlY2hvICYjMzQ7JHtNQVhfUEFTU0VTfSYjMzQ7ICZndDsgJiMzNDske1BBUkFNfSYjMzQ7CiYjNDM7ZWNobyAmIzM0OyMgYXJtZWQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9JChjYXQgJiMzNDske1BBUkFNfSYjMzQ7KSYjMzQ7CiYjNDM7CiYjNDM7cmVzY3VlZD0wCiYjNDM7Zm9yIF8gaW4gJChzZXEgMSAmIzM0OyR7UkVTQ1VFX1RJTUVPVVR9JiMzNDspOyBkbwomIzQzOwlpZiBkbWVzZyB8IGdyZXAgLXEgJiMzNDtnaXZpbmcgdXAgYWZ0ZXImIzM0OzsgdGhlbgomIzQzOwkJcmVzY3VlZD0xCiYjNDM7CQlicmVhawomIzQzOwlmaQomIzQzOwlzbGVlcCAxCiYjNDM7ZG9uZQomIzQzO2RtZXNnIHwgZ3JlcCAmIzM0O2dpdmluZyB1cCBhZnRlciYjMzQ7IHwgdGFpbCAtMiB8IHNlZCAmIzM5O3MvXi8jIC8mIzM5OwomIzQzO2VjaG8gJiMzNDtWTVRFU1RfUkVTQ1VFRD0ke3Jlc2N1ZWR9JiMzNDsKJiM0MzsKJiM0MztzbGVlcCAyCiYjNDM7ZWNobyAmIzM0O1ZNVEVTVF9CTE9DS19TVEFURT0kKGJsb2NrX3N0YXRlKSYjMzQ7CiYjNDM7CiYjNDM7a2lsbCAmIzM0OyR7cGluX3BpZH0mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzO2VjaG8gJiMzNDtWTVRFU1RfRE9ORSYjMzQ7CiYjNDM7R1VFU1RFT0YKJiM0MzsKJiM0MzsjIC0tIGxhdW5jaCBWTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7KCBjZCAmIzM0OyR7S0VSTkVMX0NIRUNLT1VUfSYjMzQ7ICZhbXA7JmFtcDsgZXhlYyB2bmcgLS1mb3JjZS05cCAtLW5vLXZpcnRtZS1uZy1pbml0IFwKJiM0MzsJLS1xZW11LW9wdD0tbSAtLXFlbXUtb3B0PSYjMzQ7Mkcsc2xvdHM9NCxtYXhtZW09OEcmIzM0OyBcCiYjNDM7CS0tcWVtdS1vcHQ9LW9iamVjdCBcCiYjNDM7CS0tcWVtdS1vcHQ9JiMzNDttZW1vcnktYmFja2VuZC1yYW0saWQ9bWVtMCxzaXplPSR7RElNTV9TSVpFfSYjMzQ7IFwKJiM0MzsJLS1xZW11LW9wdD0tZGV2aWNlIC0tcWVtdS1vcHQ9JiMzNDtwYy1kaW1tLGlkPWRpbW0wLG1lbWRldj1tZW0wJiMzNDsgXAomIzQzOwliYXNoICYjMzQ7JHtHVUVTVF9TQ1JJUFR9JiMzNDsgKSAmZ3Q7ICYjMzQ7JHtMT0d9JiMzNDsgMiZndDsmYW1wOzEgJmFtcDsKJiM0MztWTkdfUElEPSQhCiYjNDM7CiYjNDM7Zm9yIF8gaW4gJChzZXEgMSAmIzM0OyR7Qk9PVF9USU1FT1VUfSYjMzQ7KTsgZG8KJiM0MzsJZ3JlcCAtcSAmIzM0O1ZNVEVTVF9ET05FJiMzNDsgJiMzNDske0xPR30mIzM0OyAyJmd0Oy9kZXYvbnVsbCAmYW1wOyZhbXA7IGJyZWFrCiYjNDM7CWtpbGwgLTAgJiMzNDske1ZOR19QSUR9JiMzNDsgMiZndDsvZGV2L251bGwgfHwgYnJlYWsKJiM0MzsJc2xlZXAgMQomIzQzO2RvbmUKJiM0MzsKJiM0MztpZiAhIGdyZXAgLXEgJiMzNDtWTVRFU1RfRE9ORSYjMzQ7ICYjMzQ7JHtMT0d9JiMzNDsgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJZHVtcF9sb2dfdGFpbAomIzQzOwlza2lwX2FsbF90ZXN0cyAmIzM0O1ZNIGRpZCBub3QgZmluaXNoIHdpdGhpbiAke0JPT1RfVElNRU9VVH1zJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2tpbGwgJiMzNDske1ZOR19QSUR9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0Mzt3YWl0ICYjMzQ7JHtWTkdfUElEfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7Vk5HX1BJRD0mIzM0OyYjMzQ7CiYjNDM7CiYjNDM7IyAtLSByZXBvcnQgcmVzdWx0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzO3NraXBfcmVhc29uPSYjMzQ7JChncmVwICYjMzQ7XlZNVEVTVF9TS0lQOiAmIzM0OyAmIzM0OyR7TE9HfSYjMzQ7IHwgdGFpbCAtMSB8IHRyIC1kICYjMzk7XHImIzM5OykmIzM0OwomIzQzO2lmIFsgLW4gJiMzNDske3NraXBfcmVhc29ufSYjMzQ7IF07IHRoZW4KJiM0MzsJc2tpcF9hbGxfdGVzdHMgJiMzNDske3NraXBfcmVhc29uI1ZNVEVTVF9TS0lQOiB9JiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2dyZXAgJiMzNDteIyYjMzQ7ICYjMzQ7JHtMT0d9JiMzNDsgfCB0ciAtZCAmIzM5O1xyJiMzOTsgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG8KJiM0MzsJa3RhcF9wcmludF9tc2cgJiMzNDske2xpbmUjXCMgfSYjMzQ7CiYjNDM7ZG9uZQomIzQzOwomIzQzO3N0dWNrPSYjMzQ7JChndWVzdF9yZXN1bHQgVk1URVNUX1NUVUNLKSYjMzQ7CiYjNDM7cmVzY3VlZD0mIzM0OyQoZ3Vlc3RfcmVzdWx0IFZNVEVTVF9SRVNDVUVEKSYjMzQ7CiYjNDM7YmxrX3N0YXRlPSYjMzQ7JChndWVzdF9yZXN1bHQgVk1URVNUX0JMT0NLX1NUQVRFKSYjMzQ7CiYjNDM7CiYjNDM7aWYgWyAmIzM0OyR7YmxrX3N0YXRlOi1HT05FfSYjMzQ7ID0gJiMzNDtHT05FJiMzNDsgXTsgdGhlbgomIzQzOwlza2lwX2FsbF90ZXN0cyAmIzM0O0RJTU0gd2FzIGVqZWN0ZWQgZGVzcGl0ZSB0aGUgcGluIChwaW4gZGlkIG5vdCBob2xkKSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztpZiBbICYjMzQ7JHtzdHVjazotMH0mIzM0OyA9IDEgXTsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0O0FDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpJiMzNDsKJiM0MztlbHNlCiYjNDM7CWR1bXBfbG9nX3RhaWwKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDtBQ1BJIGVqZWN0IGt3b3JrZXIgaGFuZ3MgdW5ib3VuZGVkIGluIG9mZmxpbmVfcGFnZXMoKSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztpZiBbICYjMzQ7JHtyZXNjdWVkOi0wfSYjMzQ7ID0gMSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7c3R1Y2sgb2ZmbGluZSByZXNjdWVkIGJ5IHdyaXRpbmcgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMmIzM0OwomIzQzO2Vsc2UKJiM0MzsJZHVtcF9sb2dfdGFpbAomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O3N0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2lmIFsgJiMzNDske2Jsa19zdGF0ZX0mIzM0OyA9ICYjMzQ7b25saW5lJiMzNDsgXTsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0O21lbW9yeSBibG9jayBvbmxpbmUgYW5kIHVzYWJsZSBhZnRlciB0aGUgYmFpbG91dCYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O21lbW9yeSBibG9jayBvbmxpbmUgYW5kIHVzYWJsZSBhZnRlciB0aGUgYmFpbG91dCAoc3RhdGU9JHtibGtfc3RhdGV9KSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztrdGFwX2ZpbmlzaGVkCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNjkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSG90cGx1ZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcga2VybmVsIHBhcmFtZXRlcjogYG1lbW9yeV9ob3RwbHVnLm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGRlc2lnbmVkIHRvIHB1dCBhIGNhcCBvbiB0aGUgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhhdCYjMzk7cyBhIGdvb2QgdGhpbmcsIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgcnVuYXdheSBtaWdyYXRpb25zIGluIGNlcnRhaW4gc2NlbmFyaW9zLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIHdpdGhpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2Ag4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIG1lbW9yeSBob3RwbHVnIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgc28gaXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGF0IGNvZGUgYW5kIGNvbmZpcm0gdGhhdCB0aGUgbW9kaWZpY2F0aW9uIGlzIHNvdW5kLCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLCBhbmQgaGFuZGxlcyBhbGwgZWRnZSBjYXNlcyBjb3JyZWN0bHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgb2ZmbGluZV9wYWdlc2AgZnVuY3Rpb24gc2luY2UgdGhhdCBpcyB3aGVyZSB0aGUgZGVzY3JpcHRpb24gaW1wbGllcyB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBuZXcgcGFyYW1ldGVyIGludGVyYWN0cyBzbW9vdGhseSB3aXRoIHRoZSBleGlzdGluZyBtZW1vcnkgb2ZmbGluaW5nIGxvZ2ljLgoKQmV5b25kIHRoZSBjb2RlIGl0c2VsZiwgSSBzZWUgdGhhdCBhIG5ldyBzZWxmdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaGAsIGhhcyBiZWVuIGFkZGVkLiBUaGF0JiMzOTtzIGZhbnRhc3RpYy4gSSYjMzk7bGwgbmVlZCB0byByZXZpZXcgdGhhdCB0ZXN0IHRob3JvdWdobHkgdG8gZW5zdXJlIGl0IGNvdmVycyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IsIGluY2x1ZGluZyB0aGUgbmV3IHBhcmFtZXRlciYjMzk7cyBlZmZlY3Qgb24gbWlncmF0aW9uIGxpbWl0cy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc2NvcGUgb2YgdGhlIHRlc3QgdG8gZW5zdXJlIGFsbCBmdW5jdGlvbmFsaXR5IGlzIGNvdmVyZWQuCgpGaW5hbGx5LCB0aGUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBjcnVjaWFsLiBCb3RoIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dGAgYW5kIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdGAgYXJlIGJlaW5nIHVwZGF0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRob3NlIHVwZGF0ZXMgdG8gdmVyaWZ5IHRoZSBuZXcgcGFyYW1ldGVyIGlzIGNsZWFybHkgZXhwbGFpbmVkLCBpdHMgaW1wbGljYXRpb25zIGFyZSBhY2N1cmF0ZWx5IGRlc2NyaWJlZCwgYW5kIHRoZSBkb2N1bWVudGF0aW9uIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29kZS4gSXQgaXMgZXh0cmVtZWx5IGltcG9ydGFudCB0aGF0IHRoZSBkb2N1bWVudGF0aW9uIGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05NT1LZXJuZWwgcGFyYW1ldGVyc1xuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTM5ODItXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDozOTgzOlx0bWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0zOTg0LVx0XHRcdFtLTkxdIE1heGltdW0gbnVtYmVyIG9mIG1pZ3JhdGlvbiBwYXNzZXNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdD0yMjY9RnVydGhlciwgbWVtb3J5IG9mZmxpbmluZyBtaWdodCByZXRyeSBmb3IgYSBsb25nIHRpbWUgKG9yIGV2ZW4gZm9yZXZlciksIHVudGlsXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdDoyMjc6YWJvcnRlZCBieSB0aGUgdXNlci4gIFRoZSBgYG1lbW9yeV9ob3RwbHVnLm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYGBcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTIyOC1wYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gYm91bmQgdGhlIG51bWJlciBvZiByZXRyeSBwYXNzZXMsIG1ha2luZyBhbiBvZmZsaW5lXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3Q9NDMyPVRoZSBmb2xsb3dpbmcgbW9kdWxlIHBhcmFtZXRlcnMgYXJlIGN1cnJlbnRseSBkZWZpbmVkOlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTU1Mi1cdFx0XHRcdCBQYXJhbWV0ZXIgYXZhaWxhYmlsaXR5IGRlcGVuZHMgb24gQ09ORklHX05VTUEuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdDo1NTM6YGBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc2BgXHQgcmVhZC13cml0ZTogTWF4aW11bSBudW1iZXIgb2YgbWlncmF0aW9uXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdC01NTQtXHRcdFx0XHQgcGFzc2VzIGZvciBhIHNpbmdsZSBtZW1vcnkgb2ZmbGluZVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTc3ND1ib29sIG1ocF9yYW5nZV9hbGxvd2VkKHU2NCBzdGFydCwgdTY0IHNpemUsIGJvb2wgbmVlZF9tYXBwaW5nKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc4OC0vKiBNYXggb2ZmbGluZV9wYWdlcygpIG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIC1FQlVTWTsgMCA9IHJldHJ5IGZvcmV2ZXIuICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3ODk6c3RhdGljIHVuc2lnbmVkIGludCBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcyBfX3JlYWRfbW9zdGx5O1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzkwOm1vZHVsZV9wYXJhbShvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcywgdWludCwgMDY0NCk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3OTE6TU9EVUxFX1BBUk1fREVTQyhvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlcyxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc5Mi1cdFwmIzM0O01heCBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSBtZW1vcnkgb2ZmbGluZSBnaXZlcyB1cCAoMCA9IG5vIGxpbWl0KVwmIzM0Oyk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xOTYxPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjA4My1cdFx0XHQgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MjA4NDpcdFx0XHRtYXhfcGFzc2VzID0gUkVBRF9PTkNFKG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjA4NS1cdFx0XHRpZiAobWF4X3Bhc3NlcyBcdTAwMjZcdTAwMjYgcGFzcyYjNDM7JiM0MzsgXHUwMDNlPSBtYXhfcGFzc2VzKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoLTMtI1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjQ6IyBUZXN0IG1lbW9yeV9ob3RwbHVnLm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzIGJ5IHJlcHJvZHVjaW5nIHRoZSBBQ1BJXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtNS0jIG1lbW9yeSBob3QtdW5wbHVnIGhhbmcgaW4ga3dvcmtlciBjb250ZXh0IGFuZCB2ZXJpZnlpbmcgdGhhdCB0aGUgcmV0cnlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMTktIyAgIDUuIE9ic2VydmUgdGhlIGhhbmcgKGdvaW5nLW9mZmxpbmUgcGVyc2lzdHMpLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjIwOiMgICA2LiBSZXNjdWU6IHdyaXRlIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzIGF0IHJ1bnRpbWUsIHZlcmlmeSBiYWlsb3V0LlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoLTIxLSNcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjMtIyAgIDEgIEFDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2g6MjQ6IyAgIDIgIHN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjUtIyAgIDMgIG1lbW9yeSBibG9jayBvbmxpbmUgYW5kIHVzYWJsZSBhZnRlciB0aGUgYmFpbG91dFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaD0yMTg9c2V0IC11XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjE5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjIyMDpyZWFkb25seSBQQVJBTT0vc3lzL21vZHVsZS9tZW1vcnlfaG90cGx1Zy9wYXJhbWV0ZXJzL29mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjIxLXJlYWRvbmx5IE1FTT0vc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaD0yMjU9YmxvY2tfc3RhdGUoKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoLTIyOC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaDoyMjk6WyAtZiBcJiMzNDske1BBUkFNfVwmIzM0OyBdIHx8IHNraXAgXCYjMzQ7a2VybmVsIGxhY2tzIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjMwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaD0yODQ9ZWNobyBcJiMzNDske01BWF9QQVNTRVN9XCYjMzQ7IFx1MDAzZSBcJiMzNDske1BBUkFNfVwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjI4NTplY2hvIFwmIzM0OyMgYXJtZWQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9JChjYXQgXCYjMzQ7JHtQQVJBTX1cJiMzNDspXCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjg2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaD0zNTY9aWYgWyBcJiMzNDske3Jlc2N1ZWQ6LTB9XCYjMzQ7ID0gMSBdOyB0aGVuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2g6MzU3Olx0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7c3R1Y2sgb2ZmbGluZSByZXNjdWVkIGJ5IHdyaXRpbmcgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0zNTgtZWxzZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoLTM1OS1cdGR1bXBfbG9nX3RhaWxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaDozNjA6XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDtzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1wmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoLTM2MS1maVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjk4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSG90cGx1ZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciwgYG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbWVtb3J5X2hvdHBsdWcuY2AuIFRoaXMgaXMgYSBwcmV0dHkgZm9jdXNlZCBmdW5jdGlvbmFsIGFkZGl0aW9uLCBpbXBhY3RpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBvZmZsaW5lIHBhZ2VzLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkga2V5IGluIG9uIHRoZSBgb2ZmbGluZV9wYWdlc2AgZnVuY3Rpb24gYXMgdGhlIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIG5ldyBwYXJhbWV0ZXIgd2lsbCBjb21lIGludG8gcGxheS4KClRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnQgaGVyZSBpcyBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgLCB3aGljaCBpcyBzdGFuZGFyZC4gQmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGUgZnV6emluZyBzdHJhdGVneSB0aG91Z2gsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgaXRzZWxmLiBJdOKAmXMgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBxdWlja2x5IHNjYW4gdGhlIGZpbGUgZm9yIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW91ciBvZiB0aGlzIHBhdGNoLiBUaGlzIHdpbGwgaGVscCBpZGVudGlmeSBwb3NzaWJsZSBlZGdlIGNhc2VzIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBzaG91bGQgYWxzbyBiZSBjb25zaWRlcmVkIHdoZW4gZGVzaWduaW5nIHRoZSBmdXp6aW5nIGNhbXBhaWduLiBUaGlzIGxldmVsIG9mIGluaXRpYWwgcmVjb25uYWlzc2FuY2UgY291bGQgc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIGVmZm9ydCByZXF1aXJlZCBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1PUllfSE9UUkVNT1ZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0PTMzOT1UaGUgZm9sbG93aW5nIGZpbGVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDpcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdC0zODAtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdDozODE6XHRcdCAgICBBdmFpbGFiaWxpdHkgZGVwZW5kcyBvbiB0aGUgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTM4Mi1cdFx0ICAgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdD00MzI9VGhlIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVycyBhcmUgY3VycmVudGx5IGRlZmluZWQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtNTcyLVx0XHRcdFx0IFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvblxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3Q6NTczOlx0XHRcdFx0IENPTkZJR19NRU1PUllfSE9UUkVNT1ZFLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtNTc0LT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4tLVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0xMzM9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MTM0OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWctMTM1LUNPTkZJR19LU009eVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmM9MjIxOT1zdGF0aWMgaW50IF9faW5pdCBwcmV2ZW50X21lbW9yeV9yZW1vdmVfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMjIyMi1cbmFyY2gvYXJtNjQvbW0vbW11LmM6MjIyMzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpXG5hcmNoL2FybTY0L21tL21tdS5jLTIyMjQtXHRcdHJldHVybiByZXQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0xMDE9Q09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9BVVRPPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTEwMy0jIENPTkZJR19NSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PTkxJTkVfTU9WQUJMRSBpcyBub3Qgc2V0XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjEwNDpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTEwNS1DT05GSUdfS1NNPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTExNj1DT05GSUdfTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0FVVE89eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMTE4LSMgQ09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9NT1ZBQkxFIGlzIG5vdCBzZXRcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6MTE5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMTIwLUNPTkZJR19LU009eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnPTU4PUNPTkZJR19NRU1PUllfSE9UUExVRz15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZzo1OTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZy02MC1DT05GSUdfS1NNPXlcbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc9ODg9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZzo4OTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWctOTAtQ09ORklHX0tTTT15XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmM9MjIyPXN0YXRpYyBpbnQgZGxwYXJfb25saW5lX2xtYihzdHJ1Y3QgZHJtZW1fbG1iICpsbWIpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMtMjI2LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmM6MjI3OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMtMjI4LXN0YXRpYyBpbnQgZGxwYXJfb2ZmbGluZV9sbWIoc3RydWN0IGRybWVtX2xtYiAqbG1iKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jPTU1OD1zdGF0aWMgaW50IGRscGFyX21lbW9yeV9yZW1vdmVfYnlfaWModTMyIGxtYnNfdG9fcmVtb3ZlLCB1MzIgZHJjX2luZGV4KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTU2MS19XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYzo1NjI6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy01NjMtXG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTEwNT1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjEwNjpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctMTA3LUNPTkZJR19LU009eVxuLS1cbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz05OD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjk5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0xMDAtQ09ORklHX0tTTT15XG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYz0xNTc9YWNwaV9waHlzaWNhbF9hZGRyZXNzIGdldF9yc2RwX2FkZHIodm9pZClcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jLTE3MS1cbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM6MTcyOiNpZiBkZWZpbmVkKENPTkZJR19SQU5ET01JWkVfQkFTRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jLTE3My0vKlxuLS1cbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM9Mjc1PWludCBjb3VudF9pbW1vdmFibGVfbWVtX3JlZ2lvbnModm9pZClcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jLTMyMS19XG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jOjMyMjojZW5kaWYgLyogQ09ORklHX1JBTkRPTUlaRV9CQVNFIFx1MDAyNlx1MDAyNiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xuLS1cbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jPTU5Nj1zdGF0aWMgYm9vbCBwcm9jZXNzX21lbV9yZWdpb24oc3RydWN0IG1lbV92ZWN0b3IgKnJlZ2lvbixcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MTQtXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo2MTU6I2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19BQ1BJKVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNjE2LVx0Lypcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oPTE3MT1zdGF0aWMgaW5saW5lIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBnZXRfcnNkcF9hZGRyKHZvaWQpIHsgcmV0dXJuIDA7IH1cbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTE3My1cbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmg6MTc0OiNpZiBkZWZpbmVkKENPTkZJR19SQU5ET01JWkVfQkFTRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19BQ1BJKVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaC0xNzUtZXh0ZXJuIHN0cnVjdCBtZW1fdmVjdG9yIGltbW92YWJsZV9tZW1bTUFYX05VTU5PREVTKjJdO1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xNjc9c3RhdGljIHNzaXplX3QgcGh5c19pbmRleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTc2LSAqIExlZ2FjeSBpbnRlcmZhY2UgdGhhdCB3ZSBjYW5ub3QgcmVtb3ZlLiBBbHdheXMgaW5kaWNhdGUgXCYjMzQ7cmVtb3ZhYmxlXCYjMzQ7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MTc3OiAqIHdpdGggQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgLSBiYWQgaGV1cmlzdGljLlxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTE3OC0gKi9cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xNzk9c3RhdGljIHNzaXplX3QgcmVtb3ZhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTgxLXtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoxODI6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCAoaW50KUlTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xODMtfVxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz00NTA9c3RhdGljIHNzaXplX3QgcGh5c19kZXZpY2Vfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTQ1OS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo0NjA6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDYxLXN0YXRpYyBpbnQgcHJpbnRfYWxsb3dlZF96b25lKGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IG5pZCxcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NjcxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZW1vcnlfbWVtYmxrX2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTY3NS1cdFx1MDAyNmRldl9hdHRyX3JlbW92YWJsZS5hdHRyLFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjY3NjojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02NzctXHRcdTAwMjZkZXZfYXR0cl92YWxpZF96b25lcy5hdHRyLFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz0xNjM9c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjA3LVxuZHJpdmVycy9kYXgva21lbS5jOjIwODojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMDktLyoqXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTI2OD1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjcyLX1cbmRyaXZlcnMvZGF4L2ttZW0uYzoyNzM6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5kcml2ZXJzL2RheC9rbWVtLmMtMjc0LVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz0zODM9c3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTQ4MC1cbmRyaXZlcnMvZGF4L2ttZW0uYzo0ODE6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5kcml2ZXJzL2RheC9rbWVtLmMtNDgyLS8qXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTU0OT1zdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy01NTktfVxuZHJpdmVycy9kYXgva21lbS5jOjU2MDojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmRyaXZlcnMvZGF4L2ttZW0uYy01NjEtXG4tLVxuaW5jbHVkZS9saW51eC9pb3BvcnQuaD0zOTE9ZXh0ZXJuIHZvaWQgX19yZWxlYXNlX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwgcmVzb3VyY2Vfc2l6ZV90LFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaC0zOTItXHRcdFx0XHRyZXNvdXJjZV9zaXplX3QpO1xuaW5jbHVkZS9saW51eC9pb3BvcnQuaDozOTM6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oLTM5NC1leHRlcm4gdm9pZCByZWxlYXNlX21lbV9yZWdpb25fYWRqdXN0YWJsZShyZXNvdXJjZV9zaXplX3QsIHJlc291cmNlX3NpemVfdCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2MD1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcmVzaXplX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkge31cbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjYyLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI2MzojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNjQtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI5MD1zdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjk0LX1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyOTU6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjk2LVxuLS1cbmtlcm5lbC9jb25maWdzL3hlbi5jb25maWc9MTU9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbmtlcm5lbC9jb25maWdzL3hlbi5jb25maWc6MTY6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxua2VybmVsL2NvbmZpZ3MveGVuLmNvbmZpZy0xNy1DT05GSUdfWk9ORV9ERVZJQ0U9eVxuLS1cbmtlcm5lbC9yZXNvdXJjZS5jPTE0NDY9RVhQT1JUX1NZTUJPTChfX3JlbGVhc2VfcmVnaW9uKTtcbmtlcm5lbC9yZXNvdXJjZS5jLTE0NDctXG5rZXJuZWwvcmVzb3VyY2UuYzoxNDQ4OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxua2VybmVsL3Jlc291cmNlLmMtMTQ0OS1zdGF0aWMgdm9pZCBhcHBlbmRfY2hpbGRfdG9fcGFyZW50KHN0cnVjdCByZXNvdXJjZSAqbmV3X3BhcmVudCwgc3RydWN0IHJlc291cmNlICpuZXdfY2hpbGQpXG4tLVxua2VybmVsL3Jlc291cmNlLmM9MTUwNz12b2lkIHJlbGVhc2VfbWVtX3JlZ2lvbl9hZGp1c3RhYmxlKHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IHNpemUpXG4tLVxua2VybmVsL3Jlc291cmNlLmMtMTU5Ni19XG5rZXJuZWwvcmVzb3VyY2UuYzoxNTk3OiNlbmRpZlx0LyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmtlcm5lbC9yZXNvdXJjZS5jLTE1OTgtXG4tLVxubW0va3NtLmM9MzMxMT12b2lkIGZvbGlvX21pZ3JhdGVfa3NtKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0va3NtLmMtMzMzNC1cbm1tL2tzbS5jOjMzMzU6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5tbS9rc20uYy0zMzM2LXN0YXRpYyB2b2lkIHdhaXRfd2hpbGVfb2ZmbGluaW5nKHZvaWQpXG4tLVxubW0va3NtLmM9MzQ1OT1zdGF0aWMgdm9pZCB3YWl0X3doaWxlX29mZmxpbmluZyh2b2lkKVxuLS1cbm1tL2tzbS5jLTM0NjEtfVxubW0va3NtLmM6MzQ2MjojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbm1tL2tzbS5jLTM0NjMtXG4tLVxubW0va3NtLmM9NDAxOT1zdGF0aWMgaW50IF9faW5pdCBrc21faW5pdCh2b2lkKVxuLS1cbm1tL2tzbS5jLTQwNTEtXG5tbS9rc20uYzo0MDUyOiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxubW0va3NtLmMtNDA1My1cdC8qIFRoZXJlIGlzIG5vIHNpZ25pZmljYW5jZSB0byB0aGlzIHByaW9yaXR5IDEwMCAqL1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTc3ND1ib29sIG1ocF9yYW5nZV9hbGxvd2VkKHU2NCBzdGFydCwgdTY0IHNpemUsIGJvb2wgbmVlZF9tYXBwaW5nKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc4Ni1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTc4NzojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc4OC0vKiBNYXggb2ZmbGluZV9wYWdlcygpIG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIC1FQlVTWTsgMCA9IHJldHJ5IGZvcmV2ZXIuICovXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yNTY2PUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjU2NzojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDQyOT1zdGF0aWMgdW5zaWduZWQgaW50IHpvbmVsaXN0X2l0ZXJfYmVnaW4odm9pZClcbm1tL3BhZ2VfYWxsb2MuYy00NDMwLXtcbm1tL3BhZ2VfYWxsb2MuYzo0NDMxOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKVxubW0vcGFnZV9hbGxvYy5jLTQ0MzItXHRcdHJldHVybiByZWFkX3NlcWJlZ2luKFx1MDAyNnpvbmVsaXN0X3VwZGF0ZV9zZXEpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDM3PXN0YXRpYyB1bnNpZ25lZCBpbnQgY2hlY2tfcmV0cnlfem9uZWxpc3QodW5zaWduZWQgaW50IHNlcSlcbm1tL3BhZ2VfYWxsb2MuYy00NDM4LXtcbm1tL3BhZ2VfYWxsb2MuYzo0NDM5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKVxubW0vcGFnZV9hbGxvYy5jLTQ0NDAtXHRcdHJldHVybiByZWFkX3NlcXJldHJ5KFx1MDAyNnpvbmVsaXN0X3VwZGF0ZV9zZXEsIHNlcSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTc2ODg9dm9pZCB6b25lX3BjcF9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzcwNi1cbm1tL3BhZ2VfYWxsb2MuYzo3NzA3OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxubW0vcGFnZV9hbGxvYy5jLTc3MDgtLypcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQ9OTA9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2NDo5MTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQtOTItQ09ORklHX05BTUVTUEFDRVM9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg9NzY9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg6Nzc6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweC03OC1DT05GSUdfTkFNRVNQQUNFUz15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZz0zPUNPTkZJR19NRU1PUllfSE9UUExVRz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnOjQ6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21lbW9yeS1ob3RwbHVnL2NvbmZpZz0zPUNPTkZJR19NRU1PUllfTk9USUZJRVJfRVJST1JfSU5KRUNUPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21lbW9yeS1ob3RwbHVnL2NvbmZpZzo0OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9MTc9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzoxODpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctMTktQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlk9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZz0xMDk9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZzoxMTA6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdnNvY2svY29uZmlnLTExMS1DT05GSUdfWk9ORV9ERVZJQ0U9eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODY1CgkJCQkJCQlvdXRwdXQ6IDkyCgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IFRhcmdldGluZyBNZW1vcnkgSG90LVJlbW92YWwqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gbWVtb3J5IGhvdC1yZW1vdmFsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgZmlsZS4gVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGVuY2Fwc3VsYXRlZCBieSBgI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFYCwgd2hpY2ggaXMgZ29vZCwgdGhhdCBnaXZlcyBtZSBhIGNsZWFyIGVudHJ5IHBvaW50LiBMb29raW5nIGNsb3NlciwgaXQmIzM5O3MgdGhlIGBvZmZsaW5lX3BhZ2VzYCBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQuIFRoZSBmYWN0IHRoYXQgYG9mZmxpbmVfcGFnZXNgIGlzIHRoZSB0YXJnZXQgZnVuY3Rpb24gYW5kIHRoYXQgaXQmIzM5O3MgcmVhY2hhYmxlIHdoZW4gbWVtb3J5IGlzIGJlaW5nIG9mZmxpbmVkIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTXkgc3RyYXRlZ3kgaXMgdG8gemVybyBpbiBvbiB0aGlzIGZ1bmN0aW9uLiBJJiMzOTtsbCBmbGFnIGl0IGFzIGhpZ2gtcHJpb3JpdHkgdXNpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gVG8gZW5zdXJlIHRoZSBmdXp6ZXIgY29uY2VudHJhdGVzIGl0cyBlZmZvcnRzLCBJJiMzOTtsbCBzZXQgYEZvY3VzU3ltYm9scz1bJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDtdYC4gQWxzbywgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZSB2ZXJ5IG9idmlvdXMsIGBNRU1PUllfSE9UUkVNT1ZFYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBtdXN0IGJlIGVuYWJsZWQsIHNvIEkmIzM5O2xsIHNldCBgRW5hYmxlQ29uZmlncz1bJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0O11gLiBUaGUgcHJlc2VuY2Ugb2YgYEFDUElfSE9UUExVR19NRU1PUllgIGluIHRoZSBzZWxmdGVzdCBjb25maWcgaXMgbm90IGludGVyZXN0aW5nLCBzaW5jZSBpdCYjMzk7cyBvbmx5IHRoZXJlIGZvciB0aGUgdGVzdCwgbm90aGluZyB0byBzZWUgdGhlcmUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYG9mZmxpbmVfcGFnZXNgIGlzIGluZGVlZCB0aGUgb25seSBmdW5jdGlvbiBkaXJlY3RseSBtb2RpZmllZCBieSB0aGlzIHBhdGNoLCBhbmQgaXQgYWRkcyB0aGUgYG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYCBtb2R1bGUgcGFyYW1ldGVyLCB3aGljaCBpcyB1c2VmdWwgdG8ga25vdy4KCk5vdywgSSYjMzk7bGwgcHV0IHRoaXMgaW5mb3JtYXRpb24gaW50byB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIGdldCB0aGluZ3Mgcm9sbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGhvdHBsdWcgbG9naWMgaW4gYG9mZmxpbmVfcGFnZXNgIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiBtZW1vcnkgaXMgb2ZmbGluZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBob3RwbHVnIGxvZ2ljIGluIGBvZmZsaW5lX3BhZ2VzYCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIG1pZ3JhdGlvbiBwYXNzZXMgZHVyaW5nIG1lbW9yeSBvZmZsaW5pbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gbWVtb3J5IGlzIG9mZmxpbmVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6Mjc6MDUuMzM3NDE4OTQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MjUzMTcxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGhvdHBsdWcgbG9naWMgaW4gYG9mZmxpbmVfcGFnZXNgIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiBtZW1vcnkgaXMgb2ZmbGluZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjI3OjA1LjMzNzQzMDk0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3Nzg5Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTMwYjMyMTQ1Mjg2ZjY1M2ZlYzRiMTk0NWVkZDc5OTIxMjIwYmFmY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyMyAwMjoyNzowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuaW5kZXggNTNmMDg5NTBhNjMwOTYuLjkwYjY3YzQ1N2MyYTgyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG5AQCAtMzk4MCw2ICszOTgwLDIwIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXFxuIFxcdFxcdFxcdE5vdGUgdGhhdCBldmVuIHdoZW4gZW5hYmxlZCwgdGhlcmUgYXJlIGEgZmV3IGNhc2VzIHdoZXJlXFxuIFxcdFxcdFxcdHRoZSBmZWF0dXJlIGlzIG5vdCBlZmZlY3RpdmUuXFxuIFxcbitcXHRtZW1vcnlfaG90cGx1Zy5vZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlcz1cXG4rXFx0XFx0XFx0W0tOTF0gTWF4aW11bSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3Nlc1xcbitcXHRcXHRcXHRmb3IgbWVtb3J5IG9mZmxpbmluZy5cXG4rXFx0XFx0XFx0Rm9ybWF0OiBcXHUwMDNjaW50ZWdlclxcdTAwM2VcXG4rXFx0XFx0XFx0ZGVmYXVsdDogMCAobm8gbGltaXQsIGhpc3RvcmljYWwgYmVoYXZpb3VyKVxcbitcXHRcXHRcXHRXaGVuIG5vbi16ZXJvLCBtZW1vcnkgb2ZmbGluaW5nIGdpdmVzIHVwIHdpdGhcXG4rXFx0XFx0XFx0LUVCVVNZIGFmdGVyIHRoaXMgbWFueSBtaWdyYXRpb24gcGFzc2VzIG92ZXJcXG4rXFx0XFx0XFx0dGhlIHJhbmdlLCBpbnN0ZWFkIG9mIHJldHJ5aW5nIGZvcmV2ZXIgb24gYVxcbitcXHRcXHRcXHRzdHVjayBwYWdlLiAgRWFjaCBwYXNzIHNjYW5zIHRoZSByYW5nZSBhbmRcXG4rXFx0XFx0XFx0bWlncmF0ZXMgd2hhdCBpdCBjYW4uXFxuK1xcdFxcdFxcdFRoZSBwYXJhbWV0ZXIgaXMgcmUtcmVhZCBvbiBldmVyeSBwYXNzLCBzbyBhblxcbitcXHRcXHRcXHRvZmZsaW5lIHJlcXVlc3QgdGhhdCBpcyBhbHJlYWR5IHN0dWNrIGNhbiBiZVxcbitcXHRcXHRcXHRyZXNjdWVkIGF0IHJ1bnRpbWUgYnkgd3JpdGluZyB0aGUgcGFyYW1ldGVyLlxcbitcXG4gXFx0bWVtdGVzdD1cXHRbS05MLFg4NixBUk0sTTY4SyxQUEMsUklTQ1YsRUFSTFldIEVuYWJsZSBtZW10ZXN0XFxuIFxcdFxcdFxcdEZvcm1hdDogXFx1MDAzY2ludGVnZXJcXHUwMDNlXFxuIFxcdFxcdFxcdGRlZmF1bHQgOiAwIFxcdTAwM2NkaXNhYmxlXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0XFxuaW5kZXggMDIwN2Y4NzI1MTQyMWMuLjc5YjQ1MTA5YzQwOGM4IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3RcXG5AQCAtMjI0LDcgKzIyNCwxMCBAQCBpbmNyZWFzZXMgbWVtb3J5IG9mZmxpbmluZyByZWxpYWJpbGl0eTsgc3RpbGwsIG1lbW9yeSBvZmZsaW5pbmcgY2FuIGZhaWwgaW5cXG4gc29tZSBjb3JuZXIgY2FzZXMuXFxuIFxcbiBGdXJ0aGVyLCBtZW1vcnkgb2ZmbGluaW5nIG1pZ2h0IHJldHJ5IGZvciBhIGxvbmcgdGltZSAob3IgZXZlbiBmb3JldmVyKSwgdW50aWxcXG4tYWJvcnRlZCBieSB0aGUgdXNlci5cXG4rYWJvcnRlZCBieSB0aGUgdXNlci4gIFRoZSBgYG1lbW9yeV9ob3RwbHVnLm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYGBcXG4rcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGJvdW5kIHRoZSBudW1iZXIgb2YgcmV0cnkgcGFzc2VzLCBtYWtpbmcgYW4gb2ZmbGluZVxcbityZXF1ZXN0IHRoYXQgY2Fubm90IG1ha2UgcHJvZ3Jlc3MgZmFpbCB3aXRoIGBgLUVCVVNZYGAgaW5zdGVhZCBvZiByZXRyeWluZ1xcbitpbmRlZmluaXRlbHkgKHNlZSBgTW9kdWxlIFBhcmFtZXRlcnNgXykuXFxuIFxcbiBPZmZsaW5pbmcgb2YgYSBtZW1vcnkgYmxvY2sgY2FuIGJlIHRyaWdnZXJlZCB2aWE6OlxcbiBcXG5AQCAtNTQ3LDYgKzU1MCwyNyBAQCBUaGUgZm9sbG93aW5nIG1vZHVsZSBwYXJhbWV0ZXJzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDpcXG4gXFx0XFx0XFx0XFx0IHBvc3NpYmxlLlxcbiBcXG4gXFx0XFx0XFx0XFx0IFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvbiBDT05GSUdfTlVNQS5cXG4rYGBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc2BgXFx0IHJlYWQtd3JpdGU6IE1heGltdW0gbnVtYmVyIG9mIG1pZ3JhdGlvblxcbitcXHRcXHRcXHRcXHQgcGFzc2VzIGZvciBhIHNpbmdsZSBtZW1vcnkgb2ZmbGluZVxcbitcXHRcXHRcXHRcXHQgcmVxdWVzdC4gIE1lbW9yeSBvZmZsaW5pbmcgcmV0cmllcyB0b1xcbitcXHRcXHRcXHRcXHQgbWlncmF0ZSBhbmQgaXNvbGF0ZSBwYWdlcyB1bnRpbCBpdCBzdWNjZWVkcztcXG4rXFx0XFx0XFx0XFx0IGEgcGFnZSB0aGF0IGNhbiBuZXZlciBiZSBtaWdyYXRlZCBvciBmcmVlZFxcbitcXHRcXHRcXHRcXHQgbWFrZXMgaXQgcmV0cnkgZm9yZXZlci4gIFdoZW4gdGhpcyBwYXJhbWV0ZXJcXG4rXFx0XFx0XFx0XFx0IGlzIG5vbi16ZXJvLCBhbiBvZmZsaW5lIHJlcXVlc3QgZ2l2ZXMgdXBcXG4rXFx0XFx0XFx0XFx0IHdpdGggYGAtRUJVU1lgYCBhZnRlciB0aGUgY29uZmlndXJlZCBudW1iZXJcXG4rXFx0XFx0XFx0XFx0IG9mIG1pZ3JhdGlvbiBwYXNzZXMgYW5kIHRoZSBtZW1vcnkgYmxvY2tcXG4rXFx0XFx0XFx0XFx0IHN0YXlzIG9ubGluZS5cXG4rXFxuK1xcdFxcdFxcdFxcdCBUaGUgcGFyYW1ldGVyIGlzIHJlLXJlYWQgb24gZXZlcnkgcGFzcywgc29cXG4rXFx0XFx0XFx0XFx0IGFuIG9mZmxpbmUgcmVxdWVzdCB0aGF0IGlzIGFscmVhZHkgc3R1Y2tcXG4rXFx0XFx0XFx0XFx0IHJldHJ5aW5nIGNhbiBiZSByZXNjdWVkIGF0IHJ1bnRpbWUgYnlcXG4rXFx0XFx0XFx0XFx0IHdyaXRpbmcgYSBub24temVybyB2YWx1ZSwgd2l0aG91dCBhIHJlYm9vdC5cXG4rXFxuK1xcdFxcdFxcdFxcdCBUaGUgZGVmYXVsdCBpcyBcXFwiMFxcXCIsIG1lYW5pbmcgbm8gbGltaXQgKHRoZVxcbitcXHRcXHRcXHRcXHQgaGlzdG9yaWNhbCBiZWhhdmlvdXIpLlxcbitcXG4rXFx0XFx0XFx0XFx0IFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvblxcbitcXHRcXHRcXHRcXHQgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUuXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbiBaT05FX01PVkFCTEVcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcXG5pbmRleCAyMjZhYjljYjA3OGFkMS4uOTA2NzgyOTM0OWEwZGEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmNcXG5AQCAtMTc4NSw2ICsxNzg1LDEyIEBAIGJvb2wgbWhwX3JhbmdlX2FsbG93ZWQodTY0IHN0YXJ0LCB1NjQgc2l6ZSwgYm9vbCBuZWVkX21hcHBpbmcpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbisvKiBNYXggb2ZmbGluZV9wYWdlcygpIG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIC1FQlVTWTsgMCA9IHJldHJ5IGZvcmV2ZXIuICovXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgX19yZWFkX21vc3RseTtcXG4rbW9kdWxlX3BhcmFtKG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzLCB1aW50LCAwNjQ0KTtcXG4rTU9EVUxFX1BBUk1fREVTQyhvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcyxcXG4rXFx0XFxcIk1heCBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSBtZW1vcnkgb2ZmbGluZSBnaXZlcyB1cCAoMCA9IG5vIGxpbWl0KVxcXCIpO1xcbitcXG4gLypcXG4gICogU2NhbiBwZm4gcmFuZ2UgW3N0YXJ0LGVuZCkgdG8gZmluZCBtb3ZhYmxlL21pZ3JhdGFibGUgcGFnZXMgKExSVSBhbmRcXG4gICogaHVnZXRsYiBmb2xpbywgbW92YWJsZV9vcHMgcGFnZXMpLiBXaWxsIHNraXAgb3ZlciBtb3N0IHVubW92YWJsZVxcbkBAIC0xOTY2LDYgKzE5NzIsOCBAQCBpbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4gXFx0c3RydWN0IG5vZGVfbm90aWZ5IG5vZGVfYXJnID0ge1xcbiBcXHRcXHQubmlkID0gTlVNQV9OT19OT0RFLFxcbiBcXHR9O1xcbitcXHR1bnNpZ25lZCBpbnQgbWF4X3Bhc3NlcztcXG4rXFx0dW5zaWduZWQgaW50IHBhc3MgPSAwO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRjaGFyICpyZWFzb247XFxuIFxcdGludCByZXQ7XFxuQEAgLTIwNjIsNiArMjA3MCwzNiBAQCBpbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4gXFx0XFx0XFx0XFx0Z290byBmYWlsZWRfcmVtb3ZhbF9pc29sYXRlZDtcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQSBwYWdlIHRoYXQgY2FuIG5ldmVyIGJlIG1pZ3JhdGVkIChlLmcuIGFcXG4rXFx0XFx0XFx0ICogbG9uZy10ZXJtIHBpbikgbWFrZXMgdGhpcyBsb29wIHJldHJ5IGZvcmV2ZXIuXFxuK1xcdFxcdFxcdCAqIEdpdmUgdXAgYWZ0ZXIgdGhlIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIHBhc3Nlcy5cXG4rXFx0XFx0XFx0ICogVGhlIGxpbWl0IGlzIHJlLXJlYWQgb24gZXZlcnkgcGFzcyBzbyB0aGF0IGFuXFxuK1xcdFxcdFxcdCAqIG9mZmxpbmUgcmVxdWVzdCB0aGF0IGlzIGFscmVhZHkgc3R1Y2sgaGVyZSBjYW5cXG4rXFx0XFx0XFx0ICogYmUgYWJvcnRlZCBhdCBydW50aW1lIGJ5IHdyaXRpbmcgdGhlIHBhcmFtZXRlcixcXG4rXFx0XFx0XFx0ICogd2hpY2ggbWF0dGVycyBmb3IgaW4ta2VybmVsIGNhbGxlcnMgKGUuZy4gQUNQSVxcbitcXHRcXHRcXHQgKiBESU1NIGhvdC11bnBsdWcpIHRoYXQgcnVuIG9uIGt3b3JrZXJzIGFuZCBjYW5cXG4rXFx0XFx0XFx0ICogbmV2ZXIgYmUgYWJvcnRlZCBieSBhIHNpZ25hbC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG1heF9wYXNzZXMgPSBSRUFEX09OQ0Uob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMpO1xcbitcXHRcXHRcXHRpZiAobWF4X3Bhc3NlcyBcXHUwMDI2XFx1MDAyNiBwYXNzKysgXFx1MDAzZT0gbWF4X3Bhc3Nlcykge1xcbitcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJtZW1vcnkgb2ZmbGluaW5nIFttZW0gJSMwMTBsbHgtJSMwMTBsbHhdOiBnaXZpbmcgdXAgYWZ0ZXIgJXUgcGFzc2VzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyBsb25nKXN0YXJ0X3BmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbitcXHRcXHRcXHRcXHRcXHQoKHVuc2lnbmVkIGxvbmcgbG9uZyllbmRfcGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpIC0gMSxcXG4rXFx0XFx0XFx0XFx0XFx0cGFzcyAtIDEpO1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiBEdW1wIHRoZSBwYWdlIHdlIGxhc3Qgc3RvcHBlZCBhdCBhcyBhXFxuK1xcdFxcdFxcdFxcdCAqIGRpYWdub3N0aWMgaGludDogdXN1YWxseSB0aGUgc3R1Y2sgcGFnZSxcXG4rXFx0XFx0XFx0XFx0ICogYnV0IGp1c3QgdGhlIHJhbmdlIHN0YXJ0IGFmdGVyIGEgcmVzdGFydC5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdGlmIChwZm4gXFx1MDAzZT0gc3RhcnRfcGZuIFxcdTAwMjZcXHUwMDI2IHBmbiBcXHUwMDNjIGVuZF9wZm4pXFxuK1xcdFxcdFxcdFxcdFxcdGR1bXBfcGFnZShwZm5fdG9fcGFnZShwZm4pLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCJtZW1vcnkgb2ZmbGluZSByZXRyeSBsaW1pdFxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuK1xcdFxcdFxcdFxcdHJlYXNvbiA9IFxcXCJyZXRyeSBsaW1pdCBleGNlZWRlZFxcXCI7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZmFpbGVkX3JlbW92YWxfaXNvbGF0ZWQ7XFxuK1xcdFxcdFxcdH1cXG4rXFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXG4gXFx0XFx0XFx0cmV0ID0gc2Nhbl9tb3ZhYmxlX3BhZ2VzKHBmbiwgZW5kX3BmbiwgXFx1MDAyNnBmbik7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5pbmRleCBlYWU1MDRiZDk0YzgzYS4uZTExM2YzZmY0NjU1OTQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbkBAIC0xNzcsNiArMTc3LDkgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X3ZtYWxsb2Muc2hcXG4gIyBEZXN0cnVjdGl2ZTogZXZlcnkgc3VjY2Vzc2Z1bCBydW4gcGFuaWNzIHRoZSBrZXJuZWwuICBJbnN0YWxsZWQgYW5kXFxuICMga2VwdCBleGVjdXRhYmxlLCBidXQgbm90IHJ1biBmcm9tIGEgZGVmYXVsdCBrc2VsZnRlc3QgaW52b2NhdGlvbi5cXG4gVEVTVF9QUk9HU19FWFRFTkRFRCArPSBod3BvaXNvbi1wYW5pYy5zaFxcbisjIFNwYXducyBpdHMgb3duIFZNICh2aXJ0bWUtbmcpOyBub3QgcnVuIGZyb20gYSBkZWZhdWx0IGtzZWxmdGVzdFxcbisjIGludm9jYXRpb24uXFxuK1RFU1RfUFJPR1NfRVhURU5ERUQgKz0gdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoXFxuIFxcbiBURVNUX0ZJTEVTIDo9IHRlc3Rfdm1hbGxvYy5zaFxcbiBURVNUX0ZJTEVTICs9IHRlc3RfaG1tLnNoXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZ1xcbmluZGV4IDA2Zjc4YmQyMzJlMmUzLi5kMjJmNjNlYjljMmM5ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWdcXG5AQCAtMTQsMyArMTQsNiBAQCBDT05GSUdfVVBST0JFUz15XFxuIENPTkZJR19NRU1PUllfRkFJTFVSRT15XFxuIENPTkZJR19IV1BPSVNPTl9JTkpFQ1Q9bVxcbiBDT05GSUdfUFJPQ19NRU1fQUxXQVlTX0ZPUkNFPXlcXG4rQ09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG4rQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbitDT05GSUdfQUNQSV9IT1RQTFVHX01FTU9SWT15XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmMyMTFhMGU3Y2FhMmQzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaFxcbkBAIC0wLDAgKzEsMzY5IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFRlc3QgbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgYnkgcmVwcm9kdWNpbmcgdGhlIEFDUElcXG4rIyBtZW1vcnkgaG90LXVucGx1ZyBoYW5nIGluIGt3b3JrZXIgY29udGV4dCBhbmQgdmVyaWZ5aW5nIHRoYXQgdGhlIHJldHJ5XFxuKyMgbGltaXQgcmVjb3ZlcnMgZnJvbSBpdC5cXG4rI1xcbisjIG9mZmxpbmVfcGFnZXMoKSByZXRyaWVzIHBhZ2UgbWlncmF0aW9uIGluIGFuIHVuYm91bmRlZCBsb29wLiAgQSBwYWdlXFxuKyMgdGhhdCBjYW4gbmV2ZXIgYmUgbWlncmF0ZWQgKGxvbmctdGVybSBwaW4sIHNsYWIsIGJ1c3kgbWV0YWRhdGEpIG1ha2VzXFxuKyMgdGhlIGxvb3Agc3BpbiBmb3JldmVyLiAgVXNlcnNwYWNlLWRyaXZlbiBvZmZsaW5lcyBjYW4gYmUgaW50ZXJydXB0ZWQgYnlcXG4rIyBhIHNpZ25hbCwgYnV0IGFuIEFDUEkgRElNTSBlamVjdCBydW5zIG9uIHRoZSBrYWNwaV9ob3RwbHVnX3dxIGt3b3JrZXJcXG4rIyB3aGVyZSBzaWduYWxfcGVuZGluZygpIG5ldmVyIGZpcmVzLCBzbyB0aGUga3dvcmtlciBoYW5ncyB1bnRpbCByZWJvb3QuXFxuKyNcXG4rIyBGbG93OlxcbisjICAgMS4gQm9vdCB0aGUganVzdC1idWlsdCBrZXJuZWwgKHZpcnRtZS1uZykgd2l0aCBhIGNvbGQtcGx1Z2dlZCBwYy1kaW1tLlxcbisjICAgMi4gT25saW5lIHRoZSBESU1NJ3MgYmxvY2tzIGFzIFpPTkVfTU9WQUJMRS5cXG4rIyAgIDMuIFBpbiBvbmUgcGFnZSBvZiB0aGUgRElNTSAodm1zcGxpY2UgbG9uZy10ZXJtIHBpbikuXFxuKyMgICA0LiBFamVjdCB0aGUgRElNTSB2aWEgc3lzZnM7IG9mZmxpbmUgcnVucyBvbiBrYWNwaV9ob3RwbHVnX3dxLlxcbisjICAgNS4gT2JzZXJ2ZSB0aGUgaGFuZyAoZ29pbmctb2ZmbGluZSBwZXJzaXN0cykuXFxuKyMgICA2LiBSZXNjdWU6IHdyaXRlIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzIGF0IHJ1bnRpbWUsIHZlcmlmeSBiYWlsb3V0LlxcbisjXFxuKyMgVEFQIHN1YnRlc3RzOlxcbisjICAgMSAgQUNQSSBlamVjdCBrd29ya2VyIGhhbmdzIHVuYm91bmRlZCBpbiBvZmZsaW5lX3BhZ2VzKClcXG4rIyAgIDIgIHN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxuKyMgICAzICBtZW1vcnkgYmxvY2sgb25saW5lIGFuZCB1c2FibGUgYWZ0ZXIgdGhlIGJhaWxvdXRcXG4rI1xcbisjIERlcGVuZGVuY2llczogdmlydG1lLW5nICh2bmcpLCBxZW11LXN5c3RlbS1cXHUwMDNjYXJjaFxcdTAwM2UsIGNjLlxcbisjIFNLSVBzIChuZXZlciBGQUlMcykgd2hlbiB0b29saW5nIG9yIGtlcm5lbCBzdXBwb3J0IGlzIG1pc3NpbmcuXFxuK1xcbityZWFkb25seSBTQ1JJUFRfRElSPVxcXCIkKGNkIC1QIC0tIFxcXCIkKGRpcm5hbWUgLS0gXFxcIiR7QkFTSF9TT1VSQ0VbMF19XFxcIilcXFwiIFxcdTAwMjZcXHUwMDI2IHB3ZCAtUClcXFwiXFxuK3JlYWRvbmx5IEtFUk5FTF9DSEVDS09VVD1cXFwiJChyZWFscGF0aCBcXFwiJHtTQ1JJUFRfRElSfVxcXCIvLi4vLi4vLi4vLi4vKVxcXCJcXG4rXFxuKyMgc2hlbGxjaGVjayBzb3VyY2U9Li4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxcbitzb3VyY2UgXFxcIiR7U0NSSVBUX0RJUn1cXFwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rXFxuK3JlYWRvbmx5IERJTU1fU0laRT1cXFwiJHtESU1NX1NJWkU6LTI1Nk19XFxcIlxcbityZWFkb25seSBNQVhfUEFTU0VTPVxcXCIke01BWF9QQVNTRVM6LTUwfVxcXCJcXG4rcmVhZG9ubHkgSEFOR19IT0xEPVxcXCIke0hBTkdfSE9MRDotMTB9XFxcIlxcbityZWFkb25seSBSRVNDVUVfVElNRU9VVD1cXFwiJHtSRVNDVUVfVElNRU9VVDotMzB9XFxcIlxcbityZWFkb25seSBCT09UX1RJTUVPVVQ9XFxcIiR7Qk9PVF9USU1FT1VUOi0yNDB9XFxcIlxcbitcXG4rcmVhZG9ubHkgTE9HPVxcXCIkKG1rdGVtcCAvdG1wL3ZtdGVzdF9taHBfWFhYWFhYLmxvZylcXFwiXFxuK3JlYWRvbmx5IEdVRVNUX1NDUklQVD1cXFwiJChta3RlbXAgL3RtcC92bXRlc3RfbWhwX2d1ZXN0X1hYWFhYWC5zaClcXFwiXFxuK3JlYWRvbmx5IFBJTl9TUkM9XFxcIiQobWt0ZW1wIC90bXAvdm10ZXN0X21ocF9waW5fWFhYWFhYLmMpXFxcIlxcbisjIE11c3QgbGl2ZSBpbiB0aGUga2VybmVsIHRyZWUgc28gdGhlIGd1ZXN0IHNlZXMgaXQgdGhyb3VnaCB0aGUgOXAgcm9vdGZzLlxcbityZWFkb25seSBQSU5fQklOPVxcXCIke1NDUklQVF9ESVJ9Ly52bXRlc3RfcGluX3BhcmsuJCRcXFwiXFxuK1xcbitWTkdfUElEPVxcXCJcXFwiXFxuK1xcbitjbGVhbnVwKCkge1xcbitcXHRbIC1uIFxcXCIke1ZOR19QSUR9XFxcIiBdIFxcdTAwMjZcXHUwMDI2IGtpbGwgXFxcIiR7Vk5HX1BJRH1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdHJtIC1mIFxcXCIke0xPR31cXFwiIFxcXCIke0dVRVNUX1NDUklQVH1cXFwiIFxcXCIke1BJTl9TUkN9XFxcIiBcXFwiJHtQSU5fQklOfVxcXCJcXG4rfVxcbitcXG4rZ3Vlc3RfcmVzdWx0KCkge1xcbitcXHRncmVwIC1vIFxcXCJeJHsxfT1bQS1aYS16MC05Xy1dKlxcXCIgXFxcIiR7TE9HfVxcXCIgfCB0YWlsIC0xIHwgY3V0IC1kPSAtZjJcXG4rfVxcbitcXG4rZHVtcF9sb2dfdGFpbCgpIHtcXG4rXFx0dGFpbCAtMjUgXFxcIiR7TE9HfVxcXCIgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG9cXG4rXFx0XFx0a3RhcF9wcmludF9tc2cgXFxcIiR7bGluZX1cXFwiXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rc2tpcF9hbGxfdGVzdHMoKSB7XFxuK1xcdGxvY2FsIGlcXG4rXFxuK1xcdGZvciBpIGluIDEgMiAzOyBkb1xcbitcXHRcXHRrdGFwX3Rlc3Rfc2tpcCBcXFwiJDFcXFwiXFxuK1xcdGRvbmVcXG4rXFx0a3RhcF9maW5pc2hlZFxcbit9XFxuK1xcbisjIC0tIHByZS1mbGlnaHQgY2hlY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuK2t0YXBfcHJpbnRfaGVhZGVyXFxuK2t0YXBfc2V0X3BsYW4gM1xcbit0cmFwIGNsZWFudXAgRVhJVFxcbitcXG4rYXJjaD1cXFwiJCh1bmFtZSAtbSlcXFwiXFxuK2Nhc2UgXFxcIiR7YXJjaH1cXFwiIGluXFxuK3g4Nl82NHxhYXJjaDY0KSA7O1xcbisqKVxcdHNraXBfYWxsX3Rlc3RzIFxcXCJwYy1kaW1tIEFDUEkgaG90cGx1ZyBub3QgYXZhaWxhYmxlIG9uICR7YXJjaH1cXFwiIDs7XFxuK2VzYWNcXG4rXFxuK2ZvciBkZXAgaW4gdm5nIFxcXCJxZW11LXN5c3RlbS0ke2FyY2h9XFxcIiBjYzsgZG9cXG4rXFx0aWYgISBjb21tYW5kIC12IFxcXCIke2RlcH1cXFwiIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MTsgdGhlblxcbitcXHRcXHRza2lwX2FsbF90ZXN0cyBcXFwiJHtkZXB9IG5vdCBpbnN0YWxsZWRcXFwiXFxuK1xcdGZpXFxuK2RvbmVcXG4rXFxuKyMgLS0gcGluIGhlbHBlciAoY29tcGlsZWQgb24gdGhlIGhvc3QsIHZpc2libGUgdG8gdGhlIGd1ZXN0IHZpYSA5cCkgLS0tLS0tLS0tLS1cXG4rI1xcbisjIEFsbG9jYXRlIG9uZSBibG9jaydzIHdvcnRoIG9mIHBhZ2VzIChaT05FX01PVkFCTEUgc2VydmVzIHRoZW0gZnJvbSB0aGVcXG4rIyBESU1NKSwgZmluZCBvbmUgdGhhdCBsYW5kZWQgaW4gYSB0YXJnZXQgYmxvY2ssIHZtc3BsaWNlLXBpbiBpdCBpbnRvIGFcXG4rIyBwaXBlLCBwcmludCBQSU5fQkxLPVxcdTAwM2NOXFx1MDAzZSwgYW5kIHNsZWVwIGZvcmV2ZXIuXFxuK1xcbitjYXQgXFx1MDAzZSBcXFwiJHtQSU5fU1JDfVxcXCIgXFx1MDAzY1xcdTAwM2MnUElORU9GJ1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy91aW8uaFxcdTAwM2VcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1lbW9yeV9ibG9ja19zaXplKHZvaWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbNjRdO1xcbitcXHRzc2l6ZV90IG47XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gb3BlbihcXFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvYmxvY2tfc2l6ZV9ieXRlc1xcXCIsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdG4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSk7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0aWYgKG4gXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGJ1ZltuXSA9ICdcXFxcMCc7XFxuK1xcdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTYpO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyB2YWRkcl90b19ibG9jayhpbnQgcGFnZW1hcF9mZCwgY2hhciAqdmFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgICBsb25nIHBhZ2Vfc2l6ZSwgdW5zaWduZWQgbG9uZyBibGtfc2l6ZSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHZwbiA9ICh1bnNpZ25lZCBsb25nKXZhZGRyIC8gcGFnZV9zaXplO1xcbitcXHR1aW50NjRfdCBlbnQ7XFxuK1xcbitcXHRpZiAocHJlYWQocGFnZW1hcF9mZCwgXFx1MDAyNmVudCwgc2l6ZW9mKGVudCksIHZwbiAqIDgpICE9IHNpemVvZihlbnQpKVxcbitcXHRcXHRyZXR1cm4gLTFVTDtcXG4rXFx0aWYgKCEoZW50IFxcdTAwMjYgKDFVTEwgXFx1MDAzY1xcdTAwM2MgNjMpKSlcXG4rXFx0XFx0cmV0dXJuIC0xVUw7XFxuK1xcdHJldHVybiAoZW50IFxcdTAwMjYgKCgxVUxMIFxcdTAwM2NcXHUwMDNjIDU1KSAtIDEpKSAqIHBhZ2Vfc2l6ZSAvIGJsa19zaXplO1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuK3tcXG4rXFx0bG9uZyBwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYmxrX3NpemUgPSBtZW1vcnlfYmxvY2tfc2l6ZSgpO1xcbitcXHR1bnNpZ25lZCBsb25nIG9mZiwgYmxrID0gMDtcXG4rXFx0Y2hhciAqYXJlYSwgKnBhZ2UgPSBOVUxMO1xcbitcXHRpbnQgcGFnZW1hcF9mZCwgcGlwZWZkWzJdLCBpO1xcbitcXG4rXFx0aWYgKGFyZ2MgXFx1MDAzYyAyIHx8ICFibGtfc2l6ZSkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInVzYWdlOiBwaW5fcGFyayBcXHUwMDNjbWVtb3J5IGJsb2NrXFx1MDAzZS4uLlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRhcmVhID0gbW1hcChOVUxMLCBibGtfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0ICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9QT1BVTEFURSwgLTEsIDApO1xcbitcXHRpZiAoYXJlYSA9PSBNQVBfRkFJTEVEKSB7XFxuK1xcdFxcdHBlcnJvcihcXFwibW1hcFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXHRtZW1zZXQoYXJlYSwgMHg0MiwgYmxrX3NpemUpO1xcbitcXG4rXFx0cGFnZW1hcF9mZCA9IG9wZW4oXFxcIi9wcm9jL3NlbGYvcGFnZW1hcFxcXCIsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKHBhZ2VtYXBfZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHBlcnJvcihcXFwicGFnZW1hcFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChvZmYgPSAwOyBvZmYgXFx1MDAzYyBibGtfc2l6ZSBcXHUwMDI2XFx1MDAyNiAhcGFnZTsgb2ZmICs9IHBhZ2Vfc2l6ZSkge1xcbitcXHRcXHRibGsgPSB2YWRkcl90b19ibG9jayhwYWdlbWFwX2ZkLCBhcmVhICsgb2ZmLCBwYWdlX3NpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgYmxrX3NpemUpO1xcbitcXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgYXJnYzsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmIChibGsgPT0gc3RydG91bChhcmd2W2ldLCBOVUxMLCAxMCkpIHtcXG4rXFx0XFx0XFx0XFx0cGFnZSA9IGFyZWEgKyBvZmY7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFxuK1xcdGlmICghcGFnZSkge1xcbitcXHRcXHRwcmludGYoXFxcIlBJTl9OT05FXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZmZsdXNoKHN0ZG91dCk7XFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGlwZShwaXBlZmQpKSB7XFxuK1xcdFxcdHBlcnJvcihcXFwicGlwZVxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0c3RydWN0IGlvdmVjIGlvdiA9IHsgLmlvdl9iYXNlID0gcGFnZSwgLmlvdl9sZW4gPSBwYWdlX3NpemUgfTtcXG4rXFxuK1xcdGlmICh2bXNwbGljZShwaXBlZmRbMV0sIFxcdTAwMjZpb3YsIDEsIDApICE9IHBhZ2Vfc2l6ZSkge1xcbitcXHRcXHRwZXJyb3IoXFxcInZtc3BsaWNlXFxcIik7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRwcmludGYoXFxcIlBJTl9CTEs9JWx1XFxcXG5cXFwiLCBibGspO1xcbitcXHRmZmx1c2goc3Rkb3V0KTtcXG4rXFx0cGF1c2UoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rUElORU9GXFxuK1xcbitpZiAhIGNjIC1PMiAtbyBcXFwiJHtQSU5fQklOfVxcXCIgXFxcIiR7UElOX1NSQ31cXFwiIDJcXHUwMDNlXFx1MDAzZVxcXCIke0xPR31cXFwiOyB0aGVuXFxuK1xcdHNraXBfYWxsX3Rlc3RzIFxcXCJjYW5ub3QgYnVpbGQgdGhlIHBpbiBoZWxwZXJcXFwiXFxuK2ZpXFxuK1xcbisjIC0tIGd1ZXN0IHNjcmlwdCAocnVucyBhcyBpbml0IGluc2lkZSB0aGUgVk0pIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbitjYXQgXFx1MDAzZSBcXFwiJHtHVUVTVF9TQ1JJUFR9XFxcIiBcXHUwMDNjXFx1MDAzY1BST0xPR1VFXFxuKyMhL2Jpbi9iYXNoXFxuK3JlYWRvbmx5IE1BWF9QQVNTRVM9JHtNQVhfUEFTU0VTfVxcbityZWFkb25seSBIQU5HX0hPTEQ9JHtIQU5HX0hPTER9XFxuK3JlYWRvbmx5IFJFU0NVRV9USU1FT1VUPSR7UkVTQ1VFX1RJTUVPVVR9XFxuK3JlYWRvbmx5IFBJTl9QQVJLPVxcXCIke1BJTl9CSU59XFxcIlxcbitQUk9MT0dVRVxcbitcXG4rY2F0IFxcdTAwM2VcXHUwMDNlIFxcXCIke0dVRVNUX1NDUklQVH1cXFwiIFxcdTAwM2NcXHUwMDNjJ0dVRVNURU9GJ1xcbitzZXQgLXVcXG4rXFxuK3JlYWRvbmx5IFBBUkFNPS9zeXMvbW9kdWxlL21lbW9yeV9ob3RwbHVnL3BhcmFtZXRlcnMvb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNcXG4rcmVhZG9ubHkgTUVNPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5XFxuK1xcbitza2lwKCkgeyBlY2hvIFxcXCJWTVRFU1RfU0tJUDogJCpcXFwiOyBlY2hvIFxcXCJWTVRFU1RfRE9ORVxcXCI7IGV4aXQgMDsgfVxcbitcXG4rYmxvY2tfc3RhdGUoKSB7XFxuK1xcdGNhdCBcXFwiJHtNRU19L21lbW9yeSR7cGlubmVkX2Jsa30vc3RhdGVcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IGVjaG8gR09ORVxcbit9XFxuK1xcbitbIC1mIFxcXCIke1BBUkFNfVxcXCIgXSB8fCBza2lwIFxcXCJrZXJuZWwgbGFja3Mgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNcXFwiXFxuK1xcbisjIDEuIE9ubGluZSB0aGUgRElNTSdzIGJsb2NrcyBhcyBaT05FX01PVkFCTEUuXFxuK2RpbW1fYmxvY2tzPVxcXCJcXFwiXFxuK2ZvciBzIGluIFxcXCIke01FTX1cXFwiL21lbW9yeSovc3RhdGU7IGRvXFxuK1xcdFsgXFxcIiQoY2F0IFxcXCIke3N9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbClcXFwiID0gb2ZmbGluZSBdIHx8IGNvbnRpbnVlXFxuK1xcdGlmIGVjaG8gb25saW5lX21vdmFibGUgXFx1MDAzZSBcXFwiJHtzfVxcXCIgMlxcdTAwM2UvZGV2L251bGw7IHRoZW5cXG4rXFx0XFx0Yj0ke3MlL3N0YXRlfVxcbitcXHRcXHRkaW1tX2Jsb2Nrcz1cXFwiJHtkaW1tX2Jsb2Nrc30gJHtiIyMqbWVtb3J5fVxcXCJcXG4rXFx0ZmlcXG4rZG9uZVxcbitlY2hvIFxcXCIjIERJTU0gbWVtb3J5IGJsb2Nrczoke2RpbW1fYmxvY2tzOi0gbm9uZX1cXFwiXFxuK1sgLW4gXFxcIiR7ZGltbV9ibG9ja3N9XFxcIiBdIHx8IHNraXAgXFxcIm5vIG9mZmxpbmUgbWVtb3J5IGJsb2NrcyAocGMtZGltbSBtaXNzaW5nPylcXFwiXFxuK1xcbisjIDIuIFBpbiBvbmUgcGFnZSBpbnNpZGUgdGhlIERJTU0uXFxuK1xcXCIke1BJTl9QQVJLfVxcXCIgJHtkaW1tX2Jsb2Nrc30gXFx1MDAzZSAvdG1wL3Bpbi5vdXQgMlxcdTAwM2VcXHUwMDI2MSBcXHUwMDI2XFxuK3Bpbl9waWQ9JCFcXG4rZm9yIF8gaW4gJChzZXEgMSAxMCk7IGRvXFxuK1xcdGdyZXAgLXEgXFxcIlBJTl9cXFwiIC90bXAvcGluLm91dCAyXFx1MDAzZS9kZXYvbnVsbCBcXHUwMDI2XFx1MDAyNiBicmVha1xcbitcXHRzbGVlcCAxXFxuK2RvbmVcXG4rcGlubmVkX2Jsaz0kKHNlZCAtbiAncy9eUElOX0JMSz0vL3AnIC90bXAvcGluLm91dClcXG4rWyAtbiBcXFwiJHtwaW5uZWRfYmxrfVxcXCIgXSB8fCBza2lwIFxcXCJwaW4gZmFpbGVkOiAkKGNhdCAvdG1wL3Bpbi5vdXQgMlxcdTAwM2UvZGV2L251bGwpXFxcIlxcbitlY2hvIFxcXCIjIHBpbm5lZCBvbmUgcGFnZSBpbiBibG9jayBtZW1vcnkke3Bpbm5lZF9ibGt9XFxcIlxcbitcXG4rIyAzLiBFamVjdCB0aGUgRElNTSB3aXRoIHRoZSByZXRyeSBsaW1pdCBkaXNhYmxlZCAoZGVmYXVsdCA9IHVuYm91bmRlZCkuXFxuK2VjaG8gMCBcXHUwMDNlIFxcXCIke1BBUkFNfVxcXCJcXG4rZG1lc2cgLWMgXFx1MDAzZSAvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSB8fCB0cnVlXFxuK1xcbitlamRldj1cXFwiXFxcIlxcbitmb3IgZGV2IGluIC9zeXMvYnVzL2FjcGkvZGV2aWNlcy9QTlAwQzgwOio7IGRvXFxuK1xcdFsgLWUgXFxcIiR7ZGV2fS9lamVjdFxcXCIgXSBcXHUwMDI2XFx1MDAyNiB7IGVqZGV2PVxcXCIke2Rldn1cXFwiOyBicmVhazsgfVxcbitkb25lXFxuK1sgLW4gXFxcIiR7ZWpkZXZ9XFxcIiBdIHx8IHNraXAgXFxcIm5vIGVqZWN0YWJsZSBBQ1BJIG1lbW9yeSBkZXZpY2UgKFBOUDBDODApXFxcIlxcbitlY2hvIFxcXCIjIGVqZWN0aW5nICR7ZWpkZXZ9XFxcIlxcbitlY2hvIDEgXFx1MDAzZSBcXFwiJHtlamRldn0vZWplY3RcXFwiIFxcdTAwMjZcXG4rXFxuKyMgNC4gT2JzZXJ2ZSB0aGUgaGFuZzogdGhlIGJsb2NrIG11c3Qgc3RheSBpbiBcXFwiZ29pbmctb2ZmbGluZVxcXCIuXFxuK3NsZWVwIDNcXG4rc3R1Y2s9MFxcbitpZiBbIFxcXCIkKGJsb2NrX3N0YXRlKVxcXCIgPSBnb2luZy1vZmZsaW5lIF07IHRoZW5cXG4rXFx0ZWNobyBcXFwiIyBibG9jayBtZW1vcnkke3Bpbm5lZF9ibGt9IGdvaW5nLW9mZmxpbmUsIGhvbGRpbmcgJHtIQU5HX0hPTER9c1xcXCJcXG4rXFx0c2xlZXAgXFxcIiR7SEFOR19IT0xEfVxcXCJcXG4rXFx0aWYgWyBcXFwiJChibG9ja19zdGF0ZSlcXFwiID0gZ29pbmctb2ZmbGluZSBdOyB0aGVuXFxuK1xcdFxcdHN0dWNrPTFcXG4rXFx0XFx0ZWNobyAxIFxcdTAwM2UgL3Byb2Mvc3lzL2tlcm5lbC9zeXNycSAyXFx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlXFxuK1xcdFxcdGVjaG8gbCBcXHUwMDNlIC9wcm9jL3N5c3JxLXRyaWdnZXIgMlxcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxcbitcXHRcXHRzbGVlcCAxXFxuK1xcdFxcdGRtZXNnIHwgZ3JlcCAtQjIgLUExMiBcXFwib2ZmbGluZV9wYWdlc1xcXCIgfCB0YWlsIC0yMCBcXFxcXFxuK1xcdFxcdFxcdHwgc2VkICdzL14vIyAgLydcXG4rXFx0ZmlcXG4rZmlcXG4rZWNobyBcXFwiVk1URVNUX1NUVUNLPSR7c3R1Y2t9XFxcIlxcbitcXG4rIyA1LiBSZXNjdWU6IGFybSB0aGUgcmV0cnkgbGltaXQgYXQgcnVudGltZSBhbmQgd2FpdCBmb3IgYmFpbG91dC5cXG4rZWNobyBcXFwiJHtNQVhfUEFTU0VTfVxcXCIgXFx1MDAzZSBcXFwiJHtQQVJBTX1cXFwiXFxuK2VjaG8gXFxcIiMgYXJtZWQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9JChjYXQgXFxcIiR7UEFSQU19XFxcIilcXFwiXFxuK1xcbityZXNjdWVkPTBcXG4rZm9yIF8gaW4gJChzZXEgMSBcXFwiJHtSRVNDVUVfVElNRU9VVH1cXFwiKTsgZG9cXG4rXFx0aWYgZG1lc2cgfCBncmVwIC1xIFxcXCJnaXZpbmcgdXAgYWZ0ZXJcXFwiOyB0aGVuXFxuK1xcdFxcdHJlc2N1ZWQ9MVxcbitcXHRcXHRicmVha1xcbitcXHRmaVxcbitcXHRzbGVlcCAxXFxuK2RvbmVcXG4rZG1lc2cgfCBncmVwIFxcXCJnaXZpbmcgdXAgYWZ0ZXJcXFwiIHwgdGFpbCAtMiB8IHNlZCAncy9eLyMgLydcXG4rZWNobyBcXFwiVk1URVNUX1JFU0NVRUQ9JHtyZXNjdWVkfVxcXCJcXG4rXFxuK3NsZWVwIDJcXG4rZWNobyBcXFwiVk1URVNUX0JMT0NLX1NUQVRFPSQoYmxvY2tfc3RhdGUpXFxcIlxcbitcXG4ra2lsbCBcXFwiJHtwaW5fcGlkfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rZWNobyBcXFwiVk1URVNUX0RPTkVcXFwiXFxuK0dVRVNURU9GXFxuK1xcbisjIC0tIGxhdW5jaCBWTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbisoIGNkIFxcXCIke0tFUk5FTF9DSEVDS09VVH1cXFwiIFxcdTAwMjZcXHUwMDI2IGV4ZWMgdm5nIC0tZm9yY2UtOXAgLS1uby12aXJ0bWUtbmctaW5pdCBcXFxcXFxuK1xcdC0tcWVtdS1vcHQ9LW0gLS1xZW11LW9wdD1cXFwiMkcsc2xvdHM9NCxtYXhtZW09OEdcXFwiIFxcXFxcXG4rXFx0LS1xZW11LW9wdD0tb2JqZWN0IFxcXFxcXG4rXFx0LS1xZW11LW9wdD1cXFwibWVtb3J5LWJhY2tlbmQtcmFtLGlkPW1lbTAsc2l6ZT0ke0RJTU1fU0laRX1cXFwiIFxcXFxcXG4rXFx0LS1xZW11LW9wdD0tZGV2aWNlIC0tcWVtdS1vcHQ9XFxcInBjLWRpbW0saWQ9ZGltbTAsbWVtZGV2PW1lbTBcXFwiIFxcXFxcXG4rXFx0YmFzaCBcXFwiJHtHVUVTVF9TQ1JJUFR9XFxcIiApIFxcdTAwM2UgXFxcIiR7TE9HfVxcXCIgMlxcdTAwM2VcXHUwMDI2MSBcXHUwMDI2XFxuK1ZOR19QSUQ9JCFcXG4rXFxuK2ZvciBfIGluICQoc2VxIDEgXFxcIiR7Qk9PVF9USU1FT1VUfVxcXCIpOyBkb1xcbitcXHRncmVwIC1xIFxcXCJWTVRFU1RfRE9ORVxcXCIgXFxcIiR7TE9HfVxcXCIgMlxcdTAwM2UvZGV2L251bGwgXFx1MDAyNlxcdTAwMjYgYnJlYWtcXG4rXFx0a2lsbCAtMCBcXFwiJHtWTkdfUElEfVxcXCIgMlxcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcXG4rXFx0c2xlZXAgMVxcbitkb25lXFxuK1xcbitpZiAhIGdyZXAgLXEgXFxcIlZNVEVTVF9ET05FXFxcIiBcXFwiJHtMT0d9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRkdW1wX2xvZ190YWlsXFxuK1xcdHNraXBfYWxsX3Rlc3RzIFxcXCJWTSBkaWQgbm90IGZpbmlzaCB3aXRoaW4gJHtCT09UX1RJTUVPVVR9c1xcXCJcXG4rZmlcXG4rXFxuK2tpbGwgXFxcIiR7Vk5HX1BJRH1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK3dhaXQgXFxcIiR7Vk5HX1BJRH1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1ZOR19QSUQ9XFxcIlxcXCJcXG4rXFxuKyMgLS0gcmVwb3J0IHJlc3VsdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuK3NraXBfcmVhc29uPVxcXCIkKGdyZXAgXFxcIl5WTVRFU1RfU0tJUDogXFxcIiBcXFwiJHtMT0d9XFxcIiB8IHRhaWwgLTEgfCB0ciAtZCAnXFxcXHInKVxcXCJcXG4raWYgWyAtbiBcXFwiJHtza2lwX3JlYXNvbn1cXFwiIF07IHRoZW5cXG4rXFx0c2tpcF9hbGxfdGVzdHMgXFxcIiR7c2tpcF9yZWFzb24jVk1URVNUX1NLSVA6IH1cXFwiXFxuK2ZpXFxuK1xcbitncmVwIFxcXCJeI1xcXCIgXFxcIiR7TE9HfVxcXCIgfCB0ciAtZCAnXFxcXHInIHwgd2hpbGUgSUZTPSByZWFkIC1yIGxpbmU7IGRvXFxuK1xcdGt0YXBfcHJpbnRfbXNnIFxcXCIke2xpbmUjXFxcXCMgfVxcXCJcXG4rZG9uZVxcbitcXG4rc3R1Y2s9XFxcIiQoZ3Vlc3RfcmVzdWx0IFZNVEVTVF9TVFVDSylcXFwiXFxuK3Jlc2N1ZWQ9XFxcIiQoZ3Vlc3RfcmVzdWx0IFZNVEVTVF9SRVNDVUVEKVxcXCJcXG4rYmxrX3N0YXRlPVxcXCIkKGd1ZXN0X3Jlc3VsdCBWTVRFU1RfQkxPQ0tfU1RBVEUpXFxcIlxcbitcXG4raWYgWyBcXFwiJHtibGtfc3RhdGU6LUdPTkV9XFxcIiA9IFxcXCJHT05FXFxcIiBdOyB0aGVuXFxuK1xcdHNraXBfYWxsX3Rlc3RzIFxcXCJESU1NIHdhcyBlamVjdGVkIGRlc3BpdGUgdGhlIHBpbiAocGluIGRpZCBub3QgaG9sZClcXFwiXFxuK2ZpXFxuK1xcbitpZiBbIFxcXCIke3N0dWNrOi0wfVxcXCIgPSAxIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcIkFDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpXFxcIlxcbitlbHNlXFxuK1xcdGR1bXBfbG9nX3RhaWxcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIkFDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpXFxcIlxcbitmaVxcbitcXG4raWYgWyBcXFwiJHtyZXNjdWVkOi0wfVxcXCIgPSAxIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcInN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxcIlxcbitlbHNlXFxuK1xcdGR1bXBfbG9nX3RhaWxcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcInN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxcIlxcbitmaVxcbitcXG4raWYgWyBcXFwiJHtibGtfc3RhdGV9XFxcIiA9IFxcXCJvbmxpbmVcXFwiIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcIm1lbW9yeSBibG9jayBvbmxpbmUgYW5kIHVzYWJsZSBhZnRlciB0aGUgYmFpbG91dFxcXCJcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwibWVtb3J5IGJsb2NrIG9ubGluZSBhbmQgdXNhYmxlIGFmdGVyIHRoZSBiYWlsb3V0IChzdGF0ZT0ke2Jsa19zdGF0ZX0pXFxcIlxcbitmaVxcbitcXG4ra3RhcF9maW5pc2hlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoyNzowNS45OTcxOTQyMzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMjE2NTUyMzAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9mZmxpbmVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgaG90cGx1ZyBsb2dpYyBpbiBgb2ZmbGluZV9wYWdlc2AgdG8gbGltaXQgdGhlIG51bWJlciBvZiBtaWdyYXRpb24gcGFzc2VzIGR1cmluZyBtZW1vcnkgb2ZmbGluaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB3aGVuIG1lbW9yeSBpcyBvZmZsaW5lZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MzBiMzIxNDUyODZmNjUzZmVjNGIxOTQ1ZWRkNzk5MjEyMjBiYWZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMDI6Mjc6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA1M2YwODk1MGE2MzA5Ni4uOTBiNjdjNDU3YzJhODIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC0zOTgwLDYgKzM5ODAsMjAgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHROb3RlIHRoYXQgZXZlbiB3aGVuIGVuYWJsZWQsIHRoZXJlIGFyZSBhIGZldyBjYXNlcyB3aGVyZVxuIFx0XHRcdHRoZSBmZWF0dXJlIGlzIG5vdCBlZmZlY3RpdmUuXG4gXG4rXHRtZW1vcnlfaG90cGx1Zy5vZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlcz1cbitcdFx0XHRbS05MXSBNYXhpbXVtIG51bWJlciBvZiBtaWdyYXRpb24gcGFzc2VzXG4rXHRcdFx0Zm9yIG1lbW9yeSBvZmZsaW5pbmcuXG4rXHRcdFx0Rm9ybWF0OiBcdTAwM2NpbnRlZ2VyXHUwMDNlXG4rXHRcdFx0ZGVmYXVsdDogMCAobm8gbGltaXQsIGhpc3RvcmljYWwgYmVoYXZpb3VyKVxuK1x0XHRcdFdoZW4gbm9uLXplcm8sIG1lbW9yeSBvZmZsaW5pbmcgZ2l2ZXMgdXAgd2l0aFxuK1x0XHRcdC1FQlVTWSBhZnRlciB0aGlzIG1hbnkgbWlncmF0aW9uIHBhc3NlcyBvdmVyXG4rXHRcdFx0dGhlIHJhbmdlLCBpbnN0ZWFkIG9mIHJldHJ5aW5nIGZvcmV2ZXIgb24gYVxuK1x0XHRcdHN0dWNrIHBhZ2UuICBFYWNoIHBhc3Mgc2NhbnMgdGhlIHJhbmdlIGFuZFxuK1x0XHRcdG1pZ3JhdGVzIHdoYXQgaXQgY2FuLlxuK1x0XHRcdFRoZSBwYXJhbWV0ZXIgaXMgcmUtcmVhZCBvbiBldmVyeSBwYXNzLCBzbyBhblxuK1x0XHRcdG9mZmxpbmUgcmVxdWVzdCB0aGF0IGlzIGFscmVhZHkgc3R1Y2sgY2FuIGJlXG4rXHRcdFx0cmVzY3VlZCBhdCBydW50aW1lIGJ5IHdyaXRpbmcgdGhlIHBhcmFtZXRlci5cbitcbiBcdG1lbXRlc3Q9XHRbS05MLFg4NixBUk0sTTY4SyxQUEMsUklTQ1YsRUFSTFldIEVuYWJsZSBtZW10ZXN0XG4gXHRcdFx0Rm9ybWF0OiBcdTAwM2NpbnRlZ2VyXHUwMDNlXG4gXHRcdFx0ZGVmYXVsdCA6IDAgXHUwMDNjZGlzYWJsZVx1MDAzZVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3RcbmluZGV4IDAyMDdmODcyNTE0MjFjLi43OWI0NTEwOWM0MDhjOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdFxuQEAgLTIyNCw3ICsyMjQsMTAgQEAgaW5jcmVhc2VzIG1lbW9yeSBvZmZsaW5pbmcgcmVsaWFiaWxpdHk7IHN0aWxsLCBtZW1vcnkgb2ZmbGluaW5nIGNhbiBmYWlsIGluXG4gc29tZSBjb3JuZXIgY2FzZXMuXG4gXG4gRnVydGhlciwgbWVtb3J5IG9mZmxpbmluZyBtaWdodCByZXRyeSBmb3IgYSBsb25nIHRpbWUgKG9yIGV2ZW4gZm9yZXZlciksIHVudGlsXG4tYWJvcnRlZCBieSB0aGUgdXNlci5cbithYm9ydGVkIGJ5IHRoZSB1c2VyLiAgVGhlIGBgbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNgYFxuK3BhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBib3VuZCB0aGUgbnVtYmVyIG9mIHJldHJ5IHBhc3NlcywgbWFraW5nIGFuIG9mZmxpbmVcbityZXF1ZXN0IHRoYXQgY2Fubm90IG1ha2UgcHJvZ3Jlc3MgZmFpbCB3aXRoIGBgLUVCVVNZYGAgaW5zdGVhZCBvZiByZXRyeWluZ1xuK2luZGVmaW5pdGVseSAoc2VlIGBNb2R1bGUgUGFyYW1ldGVyc2BfKS5cbiBcbiBPZmZsaW5pbmcgb2YgYSBtZW1vcnkgYmxvY2sgY2FuIGJlIHRyaWdnZXJlZCB2aWE6OlxuIFxuQEAgLTU0Nyw2ICs1NTAsMjcgQEAgVGhlIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVycyBhcmUgY3VycmVudGx5IGRlZmluZWQ6XG4gXHRcdFx0XHQgcG9zc2libGUuXG4gXG4gXHRcdFx0XHQgUGFyYW1ldGVyIGF2YWlsYWJpbGl0eSBkZXBlbmRzIG9uIENPTkZJR19OVU1BLlxuK2Bgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNgYFx0IHJlYWQtd3JpdGU6IE1heGltdW0gbnVtYmVyIG9mIG1pZ3JhdGlvblxuK1x0XHRcdFx0IHBhc3NlcyBmb3IgYSBzaW5nbGUgbWVtb3J5IG9mZmxpbmVcbitcdFx0XHRcdCByZXF1ZXN0LiAgTWVtb3J5IG9mZmxpbmluZyByZXRyaWVzIHRvXG4rXHRcdFx0XHQgbWlncmF0ZSBhbmQgaXNvbGF0ZSBwYWdlcyB1bnRpbCBpdCBzdWNjZWVkcztcbitcdFx0XHRcdCBhIHBhZ2UgdGhhdCBjYW4gbmV2ZXIgYmUgbWlncmF0ZWQgb3IgZnJlZWRcbitcdFx0XHRcdCBtYWtlcyBpdCByZXRyeSBmb3JldmVyLiAgV2hlbiB0aGlzIHBhcmFtZXRlclxuK1x0XHRcdFx0IGlzIG5vbi16ZXJvLCBhbiBvZmZsaW5lIHJlcXVlc3QgZ2l2ZXMgdXBcbitcdFx0XHRcdCB3aXRoIGBgLUVCVVNZYGAgYWZ0ZXIgdGhlIGNvbmZpZ3VyZWQgbnVtYmVyXG4rXHRcdFx0XHQgb2YgbWlncmF0aW9uIHBhc3NlcyBhbmQgdGhlIG1lbW9yeSBibG9ja1xuK1x0XHRcdFx0IHN0YXlzIG9ubGluZS5cbitcbitcdFx0XHRcdCBUaGUgcGFyYW1ldGVyIGlzIHJlLXJlYWQgb24gZXZlcnkgcGFzcywgc29cbitcdFx0XHRcdCBhbiBvZmZsaW5lIHJlcXVlc3QgdGhhdCBpcyBhbHJlYWR5IHN0dWNrXG4rXHRcdFx0XHQgcmV0cnlpbmcgY2FuIGJlIHJlc2N1ZWQgYXQgcnVudGltZSBieVxuK1x0XHRcdFx0IHdyaXRpbmcgYSBub24temVybyB2YWx1ZSwgd2l0aG91dCBhIHJlYm9vdC5cbitcbitcdFx0XHRcdCBUaGUgZGVmYXVsdCBpcyBcIjBcIiwgbWVhbmluZyBubyBsaW1pdCAodGhlXG4rXHRcdFx0XHQgaGlzdG9yaWNhbCBiZWhhdmlvdXIpLlxuK1xuK1x0XHRcdFx0IFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvblxuK1x0XHRcdFx0IENPTkZJR19NRU1PUllfSE9UUkVNT1ZFLlxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gWk9ORV9NT1ZBQkxFXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDIyNmFiOWNiMDc4YWQxLi45MDY3ODI5MzQ5YTBkYSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC0xNzg1LDYgKzE3ODUsMTIgQEAgYm9vbCBtaHBfcmFuZ2VfYWxsb3dlZCh1NjQgc3RhcnQsIHU2NCBzaXplLCBib29sIG5lZWRfbWFwcGluZylcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG4rLyogTWF4IG9mZmxpbmVfcGFnZXMoKSBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSAtRUJVU1k7IDAgPSByZXRyeSBmb3JldmVyLiAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgX19yZWFkX21vc3RseTtcbittb2R1bGVfcGFyYW0ob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMsIHVpbnQsIDA2NDQpO1xuK01PRFVMRV9QQVJNX0RFU0Mob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMsXG4rXHRcIk1heCBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSBtZW1vcnkgb2ZmbGluZSBnaXZlcyB1cCAoMCA9IG5vIGxpbWl0KVwiKTtcbitcbiAvKlxuICAqIFNjYW4gcGZuIHJhbmdlIFtzdGFydCxlbmQpIHRvIGZpbmQgbW92YWJsZS9taWdyYXRhYmxlIHBhZ2VzIChMUlUgYW5kXG4gICogaHVnZXRsYiBmb2xpbywgbW92YWJsZV9vcHMgcGFnZXMpLiBXaWxsIHNraXAgb3ZlciBtb3N0IHVubW92YWJsZVxuQEAgLTE5NjYsNiArMTk3Miw4IEBAIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuIFx0c3RydWN0IG5vZGVfbm90aWZ5IG5vZGVfYXJnID0ge1xuIFx0XHQubmlkID0gTlVNQV9OT19OT0RFLFxuIFx0fTtcbitcdHVuc2lnbmVkIGludCBtYXhfcGFzc2VzO1xuK1x0dW5zaWduZWQgaW50IHBhc3MgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGNoYXIgKnJlYXNvbjtcbiBcdGludCByZXQ7XG5AQCAtMjA2Miw2ICsyMDcwLDM2IEBAIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuIFx0XHRcdFx0Z290byBmYWlsZWRfcmVtb3ZhbF9pc29sYXRlZDtcbiBcdFx0XHR9XG4gXG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIHBhZ2UgdGhhdCBjYW4gbmV2ZXIgYmUgbWlncmF0ZWQgKGUuZy4gYVxuK1x0XHRcdCAqIGxvbmctdGVybSBwaW4pIG1ha2VzIHRoaXMgbG9vcCByZXRyeSBmb3JldmVyLlxuK1x0XHRcdCAqIEdpdmUgdXAgYWZ0ZXIgdGhlIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIHBhc3Nlcy5cbitcdFx0XHQgKiBUaGUgbGltaXQgaXMgcmUtcmVhZCBvbiBldmVyeSBwYXNzIHNvIHRoYXQgYW5cbitcdFx0XHQgKiBvZmZsaW5lIHJlcXVlc3QgdGhhdCBpcyBhbHJlYWR5IHN0dWNrIGhlcmUgY2FuXG4rXHRcdFx0ICogYmUgYWJvcnRlZCBhdCBydW50aW1lIGJ5IHdyaXRpbmcgdGhlIHBhcmFtZXRlcixcbitcdFx0XHQgKiB3aGljaCBtYXR0ZXJzIGZvciBpbi1rZXJuZWwgY2FsbGVycyAoZS5nLiBBQ1BJXG4rXHRcdFx0ICogRElNTSBob3QtdW5wbHVnKSB0aGF0IHJ1biBvbiBrd29ya2VycyBhbmQgY2FuXG4rXHRcdFx0ICogbmV2ZXIgYmUgYWJvcnRlZCBieSBhIHNpZ25hbC5cbitcdFx0XHQgKi9cbitcdFx0XHRtYXhfcGFzc2VzID0gUkVBRF9PTkNFKG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzKTtcbitcdFx0XHRpZiAobWF4X3Bhc3NlcyBcdTAwMjZcdTAwMjYgcGFzcysrIFx1MDAzZT0gbWF4X3Bhc3Nlcykge1xuK1x0XHRcdFx0cHJfd2FybihcIm1lbW9yeSBvZmZsaW5pbmcgW21lbSAlIzAxMGxseC0lIzAxMGxseF06IGdpdmluZyB1cCBhZnRlciAldSBwYXNzZXNcXG5cIixcbitcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZylzdGFydF9wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHRcdCgodW5zaWduZWQgbG9uZyBsb25nKWVuZF9wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpIC0gMSxcbitcdFx0XHRcdFx0cGFzcyAtIDEpO1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIER1bXAgdGhlIHBhZ2Ugd2UgbGFzdCBzdG9wcGVkIGF0IGFzIGFcbitcdFx0XHRcdCAqIGRpYWdub3N0aWMgaGludDogdXN1YWxseSB0aGUgc3R1Y2sgcGFnZSxcbitcdFx0XHRcdCAqIGJ1dCBqdXN0IHRoZSByYW5nZSBzdGFydCBhZnRlciBhIHJlc3RhcnQuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdGlmIChwZm4gXHUwMDNlPSBzdGFydF9wZm4gXHUwMDI2XHUwMDI2IHBmbiBcdTAwM2MgZW5kX3BmbilcbitcdFx0XHRcdFx0ZHVtcF9wYWdlKHBmbl90b19wYWdlKHBmbiksXG4rXHRcdFx0XHRcdFx0ICBcIm1lbW9yeSBvZmZsaW5lIHJldHJ5IGxpbWl0XCIpO1xuK1x0XHRcdFx0cmV0ID0gLUVCVVNZO1xuK1x0XHRcdFx0cmVhc29uID0gXCJyZXRyeSBsaW1pdCBleGNlZWRlZFwiO1xuK1x0XHRcdFx0Z290byBmYWlsZWRfcmVtb3ZhbF9pc29sYXRlZDtcbitcdFx0XHR9XG4rXG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4gXHRcdFx0cmV0ID0gc2Nhbl9tb3ZhYmxlX3BhZ2VzKHBmbiwgZW5kX3BmbiwgXHUwMDI2cGZuKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCBlYWU1MDRiZDk0YzgzYS4uZTExM2YzZmY0NjU1OTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0xNzcsNiArMTc3LDkgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X3ZtYWxsb2Muc2hcbiAjIERlc3RydWN0aXZlOiBldmVyeSBzdWNjZXNzZnVsIHJ1biBwYW5pY3MgdGhlIGtlcm5lbC4gIEluc3RhbGxlZCBhbmRcbiAjIGtlcHQgZXhlY3V0YWJsZSwgYnV0IG5vdCBydW4gZnJvbSBhIGRlZmF1bHQga3NlbGZ0ZXN0IGludm9jYXRpb24uXG4gVEVTVF9QUk9HU19FWFRFTkRFRCArPSBod3BvaXNvbi1wYW5pYy5zaFxuKyMgU3Bhd25zIGl0cyBvd24gVk0gKHZpcnRtZS1uZyk7IG5vdCBydW4gZnJvbSBhIGRlZmF1bHQga3NlbGZ0ZXN0XG4rIyBpbnZvY2F0aW9uLlxuK1RFU1RfUFJPR1NfRVhURU5ERUQgKz0gdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoXG4gXG4gVEVTVF9GSUxFUyA6PSB0ZXN0X3ZtYWxsb2Muc2hcbiBURVNUX0ZJTEVTICs9IHRlc3RfaG1tLnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnXG5pbmRleCAwNmY3OGJkMjMyZTJlMy4uZDIyZjYzZWI5YzJjOWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZ1xuQEAgLTE0LDMgKzE0LDYgQEAgQ09ORklHX1VQUk9CRVM9eVxuIENPTkZJR19NRU1PUllfRkFJTFVSRT15XG4gQ09ORklHX0hXUE9JU09OX0lOSkVDVD1tXG4gQ09ORklHX1BST0NfTUVNX0FMV0FZU19GT1JDRT15XG4rQ09ORklHX01FTU9SWV9IT1RQTFVHPXlcbitDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG4rQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlk9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jMjExYTBlN2NhYTJkM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoXG5AQCAtMCwwICsxLDM2OSBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgYnkgcmVwcm9kdWNpbmcgdGhlIEFDUElcbisjIG1lbW9yeSBob3QtdW5wbHVnIGhhbmcgaW4ga3dvcmtlciBjb250ZXh0IGFuZCB2ZXJpZnlpbmcgdGhhdCB0aGUgcmV0cnlcbisjIGxpbWl0IHJlY292ZXJzIGZyb20gaXQuXG4rI1xuKyMgb2ZmbGluZV9wYWdlcygpIHJldHJpZXMgcGFnZSBtaWdyYXRpb24gaW4gYW4gdW5ib3VuZGVkIGxvb3AuICBBIHBhZ2VcbisjIHRoYXQgY2FuIG5ldmVyIGJlIG1pZ3JhdGVkIChsb25nLXRlcm0gcGluLCBzbGFiLCBidXN5IG1ldGFkYXRhKSBtYWtlc1xuKyMgdGhlIGxvb3Agc3BpbiBmb3JldmVyLiAgVXNlcnNwYWNlLWRyaXZlbiBvZmZsaW5lcyBjYW4gYmUgaW50ZXJydXB0ZWQgYnlcbisjIGEgc2lnbmFsLCBidXQgYW4gQUNQSSBESU1NIGVqZWN0IHJ1bnMgb24gdGhlIGthY3BpX2hvdHBsdWdfd3Ega3dvcmtlclxuKyMgd2hlcmUgc2lnbmFsX3BlbmRpbmcoKSBuZXZlciBmaXJlcywgc28gdGhlIGt3b3JrZXIgaGFuZ3MgdW50aWwgcmVib290LlxuKyNcbisjIEZsb3c6XG4rIyAgIDEuIEJvb3QgdGhlIGp1c3QtYnVpbHQga2VybmVsICh2aXJ0bWUtbmcpIHdpdGggYSBjb2xkLXBsdWdnZWQgcGMtZGltbS5cbisjICAgMi4gT25saW5lIHRoZSBESU1NJ3MgYmxvY2tzIGFzIFpPTkVfTU9WQUJMRS5cbisjICAgMy4gUGluIG9uZSBwYWdlIG9mIHRoZSBESU1NICh2bXNwbGljZSBsb25nLXRlcm0gcGluKS5cbisjICAgNC4gRWplY3QgdGhlIERJTU0gdmlhIHN5c2ZzOyBvZmZsaW5lIHJ1bnMgb24ga2FjcGlfaG90cGx1Z193cS5cbisjICAgNS4gT2JzZXJ2ZSB0aGUgaGFuZyAoZ29pbmctb2ZmbGluZSBwZXJzaXN0cykuXG4rIyAgIDYuIFJlc2N1ZTogd3JpdGUgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgYXQgcnVudGltZSwgdmVyaWZ5IGJhaWxvdXQuXG4rI1xuKyMgVEFQIHN1YnRlc3RzOlxuKyMgICAxICBBQ1BJIGVqZWN0IGt3b3JrZXIgaGFuZ3MgdW5ib3VuZGVkIGluIG9mZmxpbmVfcGFnZXMoKVxuKyMgICAyICBzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1xuKyMgICAzICBtZW1vcnkgYmxvY2sgb25saW5lIGFuZCB1c2FibGUgYWZ0ZXIgdGhlIGJhaWxvdXRcbisjXG4rIyBEZXBlbmRlbmNpZXM6IHZpcnRtZS1uZyAodm5nKSwgcWVtdS1zeXN0ZW0tXHUwMDNjYXJjaFx1MDAzZSwgY2MuXG4rIyBTS0lQcyAobmV2ZXIgRkFJTHMpIHdoZW4gdG9vbGluZyBvciBrZXJuZWwgc3VwcG9ydCBpcyBtaXNzaW5nLlxuK1xuK3JlYWRvbmx5IFNDUklQVF9ESVI9XCIkKGNkIC1QIC0tIFwiJChkaXJuYW1lIC0tIFwiJHtCQVNIX1NPVVJDRVswXX1cIilcIiBcdTAwMjZcdTAwMjYgcHdkIC1QKVwiXG4rcmVhZG9ubHkgS0VSTkVMX0NIRUNLT1VUPVwiJChyZWFscGF0aCBcIiR7U0NSSVBUX0RJUn1cIi8uLi8uLi8uLi8uLi8pXCJcbitcbisjIHNoZWxsY2hlY2sgc291cmNlPS4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcbitzb3VyY2UgXCIke1NDUklQVF9ESVJ9XCIvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuK1xuK3JlYWRvbmx5IERJTU1fU0laRT1cIiR7RElNTV9TSVpFOi0yNTZNfVwiXG4rcmVhZG9ubHkgTUFYX1BBU1NFUz1cIiR7TUFYX1BBU1NFUzotNTB9XCJcbityZWFkb25seSBIQU5HX0hPTEQ9XCIke0hBTkdfSE9MRDotMTB9XCJcbityZWFkb25seSBSRVNDVUVfVElNRU9VVD1cIiR7UkVTQ1VFX1RJTUVPVVQ6LTMwfVwiXG4rcmVhZG9ubHkgQk9PVF9USU1FT1VUPVwiJHtCT09UX1RJTUVPVVQ6LTI0MH1cIlxuK1xuK3JlYWRvbmx5IExPRz1cIiQobWt0ZW1wIC90bXAvdm10ZXN0X21ocF9YWFhYWFgubG9nKVwiXG4rcmVhZG9ubHkgR1VFU1RfU0NSSVBUPVwiJChta3RlbXAgL3RtcC92bXRlc3RfbWhwX2d1ZXN0X1hYWFhYWC5zaClcIlxuK3JlYWRvbmx5IFBJTl9TUkM9XCIkKG1rdGVtcCAvdG1wL3ZtdGVzdF9taHBfcGluX1hYWFhYWC5jKVwiXG4rIyBNdXN0IGxpdmUgaW4gdGhlIGtlcm5lbCB0cmVlIHNvIHRoZSBndWVzdCBzZWVzIGl0IHRocm91Z2ggdGhlIDlwIHJvb3Rmcy5cbityZWFkb25seSBQSU5fQklOPVwiJHtTQ1JJUFRfRElSfS8udm10ZXN0X3Bpbl9wYXJrLiQkXCJcbitcbitWTkdfUElEPVwiXCJcbitcbitjbGVhbnVwKCkge1xuK1x0WyAtbiBcIiR7Vk5HX1BJRH1cIiBdIFx1MDAyNlx1MDAyNiBraWxsIFwiJHtWTkdfUElEfVwiIDJcdTAwM2UvZGV2L251bGxcbitcdHJtIC1mIFwiJHtMT0d9XCIgXCIke0dVRVNUX1NDUklQVH1cIiBcIiR7UElOX1NSQ31cIiBcIiR7UElOX0JJTn1cIlxuK31cbitcbitndWVzdF9yZXN1bHQoKSB7XG4rXHRncmVwIC1vIFwiXiR7MX09W0EtWmEtejAtOV8tXSpcIiBcIiR7TE9HfVwiIHwgdGFpbCAtMSB8IGN1dCAtZD0gLWYyXG4rfVxuK1xuK2R1bXBfbG9nX3RhaWwoKSB7XG4rXHR0YWlsIC0yNSBcIiR7TE9HfVwiIHwgd2hpbGUgSUZTPSByZWFkIC1yIGxpbmU7IGRvXG4rXHRcdGt0YXBfcHJpbnRfbXNnIFwiJHtsaW5lfVwiXG4rXHRkb25lXG4rfVxuK1xuK3NraXBfYWxsX3Rlc3RzKCkge1xuK1x0bG9jYWwgaVxuK1xuK1x0Zm9yIGkgaW4gMSAyIDM7IGRvXG4rXHRcdGt0YXBfdGVzdF9za2lwIFwiJDFcIlxuK1x0ZG9uZVxuK1x0a3RhcF9maW5pc2hlZFxuK31cbitcbisjIC0tIHByZS1mbGlnaHQgY2hlY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbitrdGFwX3ByaW50X2hlYWRlclxuK2t0YXBfc2V0X3BsYW4gM1xuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rYXJjaD1cIiQodW5hbWUgLW0pXCJcbitjYXNlIFwiJHthcmNofVwiIGluXG4reDg2XzY0fGFhcmNoNjQpIDs7XG4rKilcdHNraXBfYWxsX3Rlc3RzIFwicGMtZGltbSBBQ1BJIGhvdHBsdWcgbm90IGF2YWlsYWJsZSBvbiAke2FyY2h9XCIgOztcbitlc2FjXG4rXG4rZm9yIGRlcCBpbiB2bmcgXCJxZW11LXN5c3RlbS0ke2FyY2h9XCIgY2M7IGRvXG4rXHRpZiAhIGNvbW1hbmQgLXYgXCIke2RlcH1cIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbitcdFx0c2tpcF9hbGxfdGVzdHMgXCIke2RlcH0gbm90IGluc3RhbGxlZFwiXG4rXHRmaVxuK2RvbmVcbitcbisjIC0tIHBpbiBoZWxwZXIgKGNvbXBpbGVkIG9uIHRoZSBob3N0LCB2aXNpYmxlIHRvIHRoZSBndWVzdCB2aWEgOXApIC0tLS0tLS0tLS0tXG4rI1xuKyMgQWxsb2NhdGUgb25lIGJsb2NrJ3Mgd29ydGggb2YgcGFnZXMgKFpPTkVfTU9WQUJMRSBzZXJ2ZXMgdGhlbSBmcm9tIHRoZVxuKyMgRElNTSksIGZpbmQgb25lIHRoYXQgbGFuZGVkIGluIGEgdGFyZ2V0IGJsb2NrLCB2bXNwbGljZS1waW4gaXQgaW50byBhXG4rIyBwaXBlLCBwcmludCBQSU5fQkxLPVx1MDAzY05cdTAwM2UsIGFuZCBzbGVlcCBmb3JldmVyLlxuK1xuK2NhdCBcdTAwM2UgXCIke1BJTl9TUkN9XCIgXHUwMDNjXHUwMDNjJ1BJTkVPRidcbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1vcnlfYmxvY2tfc2l6ZSh2b2lkKVxuK3tcbitcdGNoYXIgYnVmWzY0XTtcbitcdHNzaXplX3QgbjtcbitcdGludCBmZDtcbitcbitcdGZkID0gb3BlbihcIi9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2Jsb2NrX3NpemVfYnl0ZXNcIiwgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gMDtcbitcdG4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSk7XG4rXHRjbG9zZShmZCk7XG4rXHRpZiAobiBcdTAwM2M9IDApXG4rXHRcdHJldHVybiAwO1xuK1x0YnVmW25dID0gJ1xcMCc7XG4rXHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDE2KTtcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgdmFkZHJfdG9fYmxvY2soaW50IHBhZ2VtYXBfZmQsIGNoYXIgKnZhZGRyLFxuK1x0XHRcdFx0ICAgIGxvbmcgcGFnZV9zaXplLCB1bnNpZ25lZCBsb25nIGJsa19zaXplKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdnBuID0gKHVuc2lnbmVkIGxvbmcpdmFkZHIgLyBwYWdlX3NpemU7XG4rXHR1aW50NjRfdCBlbnQ7XG4rXG4rXHRpZiAocHJlYWQocGFnZW1hcF9mZCwgXHUwMDI2ZW50LCBzaXplb2YoZW50KSwgdnBuICogOCkgIT0gc2l6ZW9mKGVudCkpXG4rXHRcdHJldHVybiAtMVVMO1xuK1x0aWYgKCEoZW50IFx1MDAyNiAoMVVMTCBcdTAwM2NcdTAwM2MgNjMpKSlcbitcdFx0cmV0dXJuIC0xVUw7XG4rXHRyZXR1cm4gKGVudCBcdTAwMjYgKCgxVUxMIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSkgKiBwYWdlX3NpemUgLyBibGtfc2l6ZTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuK3tcbitcdGxvbmcgcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xuK1x0dW5zaWduZWQgbG9uZyBibGtfc2l6ZSA9IG1lbW9yeV9ibG9ja19zaXplKCk7XG4rXHR1bnNpZ25lZCBsb25nIG9mZiwgYmxrID0gMDtcbitcdGNoYXIgKmFyZWEsICpwYWdlID0gTlVMTDtcbitcdGludCBwYWdlbWFwX2ZkLCBwaXBlZmRbMl0sIGk7XG4rXG4rXHRpZiAoYXJnYyBcdTAwM2MgMiB8fCAhYmxrX3NpemUpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwidXNhZ2U6IHBpbl9wYXJrIFx1MDAzY21lbW9yeSBibG9ja1x1MDAzZS4uLlxcblwiKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRhcmVhID0gbW1hcChOVUxMLCBibGtfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9QT1BVTEFURSwgLTEsIDApO1xuK1x0aWYgKGFyZWEgPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRwZXJyb3IoXCJtbWFwXCIpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcdG1lbXNldChhcmVhLCAweDQyLCBibGtfc2l6ZSk7XG4rXG4rXHRwYWdlbWFwX2ZkID0gb3BlbihcIi9wcm9jL3NlbGYvcGFnZW1hcFwiLCBPX1JET05MWSk7XG4rXHRpZiAocGFnZW1hcF9mZCBcdTAwM2MgMCkge1xuK1x0XHRwZXJyb3IoXCJwYWdlbWFwXCIpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcbitcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBibGtfc2l6ZSBcdTAwMjZcdTAwMjYgIXBhZ2U7IG9mZiArPSBwYWdlX3NpemUpIHtcbitcdFx0YmxrID0gdmFkZHJfdG9fYmxvY2socGFnZW1hcF9mZCwgYXJlYSArIG9mZiwgcGFnZV9zaXplLFxuK1x0XHRcdFx0ICAgICBibGtfc2l6ZSk7XG4rXHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIGFyZ2M7IGkrKykge1xuK1x0XHRcdGlmIChibGsgPT0gc3RydG91bChhcmd2W2ldLCBOVUxMLCAxMCkpIHtcbitcdFx0XHRcdHBhZ2UgPSBhcmVhICsgb2ZmO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXHRjbG9zZShwYWdlbWFwX2ZkKTtcbitcbitcdGlmICghcGFnZSkge1xuK1x0XHRwcmludGYoXCJQSU5fTk9ORVxcblwiKTtcbitcdFx0ZmZsdXNoKHN0ZG91dCk7XG4rXHRcdHJldHVybiAyO1xuK1x0fVxuK1xuK1x0aWYgKHBpcGUocGlwZWZkKSkge1xuK1x0XHRwZXJyb3IoXCJwaXBlXCIpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcbitcdHN0cnVjdCBpb3ZlYyBpb3YgPSB7IC5pb3ZfYmFzZSA9IHBhZ2UsIC5pb3ZfbGVuID0gcGFnZV9zaXplIH07XG4rXG4rXHRpZiAodm1zcGxpY2UocGlwZWZkWzFdLCBcdTAwMjZpb3YsIDEsIDApICE9IHBhZ2Vfc2l6ZSkge1xuK1x0XHRwZXJyb3IoXCJ2bXNwbGljZVwiKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRwcmludGYoXCJQSU5fQkxLPSVsdVxcblwiLCBibGspO1xuK1x0ZmZsdXNoKHN0ZG91dCk7XG4rXHRwYXVzZSgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1BJTkVPRlxuK1xuK2lmICEgY2MgLU8yIC1vIFwiJHtQSU5fQklOfVwiIFwiJHtQSU5fU1JDfVwiIDJcdTAwM2VcdTAwM2VcIiR7TE9HfVwiOyB0aGVuXG4rXHRza2lwX2FsbF90ZXN0cyBcImNhbm5vdCBidWlsZCB0aGUgcGluIGhlbHBlclwiXG4rZmlcbitcbisjIC0tIGd1ZXN0IHNjcmlwdCAocnVucyBhcyBpbml0IGluc2lkZSB0aGUgVk0pIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rY2F0IFx1MDAzZSBcIiR7R1VFU1RfU0NSSVBUfVwiIFx1MDAzY1x1MDAzY1BST0xPR1VFXG4rIyEvYmluL2Jhc2hcbityZWFkb25seSBNQVhfUEFTU0VTPSR7TUFYX1BBU1NFU31cbityZWFkb25seSBIQU5HX0hPTEQ9JHtIQU5HX0hPTER9XG4rcmVhZG9ubHkgUkVTQ1VFX1RJTUVPVVQ9JHtSRVNDVUVfVElNRU9VVH1cbityZWFkb25seSBQSU5fUEFSSz1cIiR7UElOX0JJTn1cIlxuK1BST0xPR1VFXG4rXG4rY2F0IFx1MDAzZVx1MDAzZSBcIiR7R1VFU1RfU0NSSVBUfVwiIFx1MDAzY1x1MDAzYydHVUVTVEVPRidcbitzZXQgLXVcbitcbityZWFkb25seSBQQVJBTT0vc3lzL21vZHVsZS9tZW1vcnlfaG90cGx1Zy9wYXJhbWV0ZXJzL29mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXG4rcmVhZG9ubHkgTUVNPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5XG4rXG4rc2tpcCgpIHsgZWNobyBcIlZNVEVTVF9TS0lQOiAkKlwiOyBlY2hvIFwiVk1URVNUX0RPTkVcIjsgZXhpdCAwOyB9XG4rXG4rYmxvY2tfc3RhdGUoKSB7XG4rXHRjYXQgXCIke01FTX0vbWVtb3J5JHtwaW5uZWRfYmxrfS9zdGF0ZVwiIDJcdTAwM2UvZGV2L251bGwgfHwgZWNobyBHT05FXG4rfVxuK1xuK1sgLWYgXCIke1BBUkFNfVwiIF0gfHwgc2tpcCBcImtlcm5lbCBsYWNrcyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1wiXG4rXG4rIyAxLiBPbmxpbmUgdGhlIERJTU0ncyBibG9ja3MgYXMgWk9ORV9NT1ZBQkxFLlxuK2RpbW1fYmxvY2tzPVwiXCJcbitmb3IgcyBpbiBcIiR7TUVNfVwiL21lbW9yeSovc3RhdGU7IGRvXG4rXHRbIFwiJChjYXQgXCIke3N9XCIgMlx1MDAzZS9kZXYvbnVsbClcIiA9IG9mZmxpbmUgXSB8fCBjb250aW51ZVxuK1x0aWYgZWNobyBvbmxpbmVfbW92YWJsZSBcdTAwM2UgXCIke3N9XCIgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0XHRiPSR7cyUvc3RhdGV9XG4rXHRcdGRpbW1fYmxvY2tzPVwiJHtkaW1tX2Jsb2Nrc30gJHtiIyMqbWVtb3J5fVwiXG4rXHRmaVxuK2RvbmVcbitlY2hvIFwiIyBESU1NIG1lbW9yeSBibG9ja3M6JHtkaW1tX2Jsb2NrczotIG5vbmV9XCJcbitbIC1uIFwiJHtkaW1tX2Jsb2Nrc31cIiBdIHx8IHNraXAgXCJubyBvZmZsaW5lIG1lbW9yeSBibG9ja3MgKHBjLWRpbW0gbWlzc2luZz8pXCJcbitcbisjIDIuIFBpbiBvbmUgcGFnZSBpbnNpZGUgdGhlIERJTU0uXG4rXCIke1BJTl9QQVJLfVwiICR7ZGltbV9ibG9ja3N9IFx1MDAzZSAvdG1wL3Bpbi5vdXQgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4rcGluX3BpZD0kIVxuK2ZvciBfIGluICQoc2VxIDEgMTApOyBkb1xuK1x0Z3JlcCAtcSBcIlBJTl9cIiAvdG1wL3Bpbi5vdXQgMlx1MDAzZS9kZXYvbnVsbCBcdTAwMjZcdTAwMjYgYnJlYWtcbitcdHNsZWVwIDFcbitkb25lXG4rcGlubmVkX2Jsaz0kKHNlZCAtbiAncy9eUElOX0JMSz0vL3AnIC90bXAvcGluLm91dClcbitbIC1uIFwiJHtwaW5uZWRfYmxrfVwiIF0gfHwgc2tpcCBcInBpbiBmYWlsZWQ6ICQoY2F0IC90bXAvcGluLm91dCAyXHUwMDNlL2Rldi9udWxsKVwiXG4rZWNobyBcIiMgcGlubmVkIG9uZSBwYWdlIGluIGJsb2NrIG1lbW9yeSR7cGlubmVkX2Jsa31cIlxuK1xuKyMgMy4gRWplY3QgdGhlIERJTU0gd2l0aCB0aGUgcmV0cnkgbGltaXQgZGlzYWJsZWQgKGRlZmF1bHQgPSB1bmJvdW5kZWQpLlxuK2VjaG8gMCBcdTAwM2UgXCIke1BBUkFNfVwiXG4rZG1lc2cgLWMgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fCB0cnVlXG4rXG4rZWpkZXY9XCJcIlxuK2ZvciBkZXYgaW4gL3N5cy9idXMvYWNwaS9kZXZpY2VzL1BOUDBDODA6KjsgZG9cbitcdFsgLWUgXCIke2Rldn0vZWplY3RcIiBdIFx1MDAyNlx1MDAyNiB7IGVqZGV2PVwiJHtkZXZ9XCI7IGJyZWFrOyB9XG4rZG9uZVxuK1sgLW4gXCIke2VqZGV2fVwiIF0gfHwgc2tpcCBcIm5vIGVqZWN0YWJsZSBBQ1BJIG1lbW9yeSBkZXZpY2UgKFBOUDBDODApXCJcbitlY2hvIFwiIyBlamVjdGluZyAke2VqZGV2fVwiXG4rZWNobyAxIFx1MDAzZSBcIiR7ZWpkZXZ9L2VqZWN0XCIgXHUwMDI2XG4rXG4rIyA0LiBPYnNlcnZlIHRoZSBoYW5nOiB0aGUgYmxvY2sgbXVzdCBzdGF5IGluIFwiZ29pbmctb2ZmbGluZVwiLlxuK3NsZWVwIDNcbitzdHVjaz0wXG4raWYgWyBcIiQoYmxvY2tfc3RhdGUpXCIgPSBnb2luZy1vZmZsaW5lIF07IHRoZW5cbitcdGVjaG8gXCIjIGJsb2NrIG1lbW9yeSR7cGlubmVkX2Jsa30gZ29pbmctb2ZmbGluZSwgaG9sZGluZyAke0hBTkdfSE9MRH1zXCJcbitcdHNsZWVwIFwiJHtIQU5HX0hPTER9XCJcbitcdGlmIFsgXCIkKGJsb2NrX3N0YXRlKVwiID0gZ29pbmctb2ZmbGluZSBdOyB0aGVuXG4rXHRcdHN0dWNrPTFcbitcdFx0ZWNobyAxIFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL3N5c3JxIDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuK1x0XHRlY2hvIGwgXHUwMDNlIC9wcm9jL3N5c3JxLXRyaWdnZXIgMlx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlXG4rXHRcdHNsZWVwIDFcbitcdFx0ZG1lc2cgfCBncmVwIC1CMiAtQTEyIFwib2ZmbGluZV9wYWdlc1wiIHwgdGFpbCAtMjAgXFxcbitcdFx0XHR8IHNlZCAncy9eLyMgIC8nXG4rXHRmaVxuK2ZpXG4rZWNobyBcIlZNVEVTVF9TVFVDSz0ke3N0dWNrfVwiXG4rXG4rIyA1LiBSZXNjdWU6IGFybSB0aGUgcmV0cnkgbGltaXQgYXQgcnVudGltZSBhbmQgd2FpdCBmb3IgYmFpbG91dC5cbitlY2hvIFwiJHtNQVhfUEFTU0VTfVwiIFx1MDAzZSBcIiR7UEFSQU19XCJcbitlY2hvIFwiIyBhcm1lZCBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlcz0kKGNhdCBcIiR7UEFSQU19XCIpXCJcbitcbityZXNjdWVkPTBcbitmb3IgXyBpbiAkKHNlcSAxIFwiJHtSRVNDVUVfVElNRU9VVH1cIik7IGRvXG4rXHRpZiBkbWVzZyB8IGdyZXAgLXEgXCJnaXZpbmcgdXAgYWZ0ZXJcIjsgdGhlblxuK1x0XHRyZXNjdWVkPTFcbitcdFx0YnJlYWtcbitcdGZpXG4rXHRzbGVlcCAxXG4rZG9uZVxuK2RtZXNnIHwgZ3JlcCBcImdpdmluZyB1cCBhZnRlclwiIHwgdGFpbCAtMiB8IHNlZCAncy9eLyMgLydcbitlY2hvIFwiVk1URVNUX1JFU0NVRUQ9JHtyZXNjdWVkfVwiXG4rXG4rc2xlZXAgMlxuK2VjaG8gXCJWTVRFU1RfQkxPQ0tfU1RBVEU9JChibG9ja19zdGF0ZSlcIlxuK1xuK2tpbGwgXCIke3Bpbl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK2VjaG8gXCJWTVRFU1RfRE9ORVwiXG4rR1VFU1RFT0ZcbitcbisjIC0tIGxhdW5jaCBWTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rKCBjZCBcIiR7S0VSTkVMX0NIRUNLT1VUfVwiIFx1MDAyNlx1MDAyNiBleGVjIHZuZyAtLWZvcmNlLTlwIC0tbm8tdmlydG1lLW5nLWluaXQgXFxcbitcdC0tcWVtdS1vcHQ9LW0gLS1xZW11LW9wdD1cIjJHLHNsb3RzPTQsbWF4bWVtPThHXCIgXFxcbitcdC0tcWVtdS1vcHQ9LW9iamVjdCBcXFxuK1x0LS1xZW11LW9wdD1cIm1lbW9yeS1iYWNrZW5kLXJhbSxpZD1tZW0wLHNpemU9JHtESU1NX1NJWkV9XCIgXFxcbitcdC0tcWVtdS1vcHQ9LWRldmljZSAtLXFlbXUtb3B0PVwicGMtZGltbSxpZD1kaW1tMCxtZW1kZXY9bWVtMFwiIFxcXG4rXHRiYXNoIFwiJHtHVUVTVF9TQ1JJUFR9XCIgKSBcdTAwM2UgXCIke0xPR31cIiAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbitWTkdfUElEPSQhXG4rXG4rZm9yIF8gaW4gJChzZXEgMSBcIiR7Qk9PVF9USU1FT1VUfVwiKTsgZG9cbitcdGdyZXAgLXEgXCJWTVRFU1RfRE9ORVwiIFwiJHtMT0d9XCIgMlx1MDAzZS9kZXYvbnVsbCBcdTAwMjZcdTAwMjYgYnJlYWtcbitcdGtpbGwgLTAgXCIke1ZOR19QSUR9XCIgMlx1MDAzZS9kZXYvbnVsbCB8fCBicmVha1xuK1x0c2xlZXAgMVxuK2RvbmVcbitcbitpZiAhIGdyZXAgLXEgXCJWTVRFU1RfRE9ORVwiIFwiJHtMT0d9XCIgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0ZHVtcF9sb2dfdGFpbFxuK1x0c2tpcF9hbGxfdGVzdHMgXCJWTSBkaWQgbm90IGZpbmlzaCB3aXRoaW4gJHtCT09UX1RJTUVPVVR9c1wiXG4rZmlcbitcbitraWxsIFwiJHtWTkdfUElEfVwiIDJcdTAwM2UvZGV2L251bGxcbit3YWl0IFwiJHtWTkdfUElEfVwiIDJcdTAwM2UvZGV2L251bGxcbitWTkdfUElEPVwiXCJcbitcbisjIC0tIHJlcG9ydCByZXN1bHRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rc2tpcF9yZWFzb249XCIkKGdyZXAgXCJeVk1URVNUX1NLSVA6IFwiIFwiJHtMT0d9XCIgfCB0YWlsIC0xIHwgdHIgLWQgJ1xccicpXCJcbitpZiBbIC1uIFwiJHtza2lwX3JlYXNvbn1cIiBdOyB0aGVuXG4rXHRza2lwX2FsbF90ZXN0cyBcIiR7c2tpcF9yZWFzb24jVk1URVNUX1NLSVA6IH1cIlxuK2ZpXG4rXG4rZ3JlcCBcIl4jXCIgXCIke0xPR31cIiB8IHRyIC1kICdcXHInIHwgd2hpbGUgSUZTPSByZWFkIC1yIGxpbmU7IGRvXG4rXHRrdGFwX3ByaW50X21zZyBcIiR7bGluZSNcXCMgfVwiXG4rZG9uZVxuK1xuK3N0dWNrPVwiJChndWVzdF9yZXN1bHQgVk1URVNUX1NUVUNLKVwiXG4rcmVzY3VlZD1cIiQoZ3Vlc3RfcmVzdWx0IFZNVEVTVF9SRVNDVUVEKVwiXG4rYmxrX3N0YXRlPVwiJChndWVzdF9yZXN1bHQgVk1URVNUX0JMT0NLX1NUQVRFKVwiXG4rXG4raWYgWyBcIiR7YmxrX3N0YXRlOi1HT05FfVwiID0gXCJHT05FXCIgXTsgdGhlblxuK1x0c2tpcF9hbGxfdGVzdHMgXCJESU1NIHdhcyBlamVjdGVkIGRlc3BpdGUgdGhlIHBpbiAocGluIGRpZCBub3QgaG9sZClcIlxuK2ZpXG4rXG4raWYgWyBcIiR7c3R1Y2s6LTB9XCIgPSAxIF07IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwiQUNQSSBlamVjdCBrd29ya2VyIGhhbmdzIHVuYm91bmRlZCBpbiBvZmZsaW5lX3BhZ2VzKClcIlxuK2Vsc2VcbitcdGR1bXBfbG9nX3RhaWxcbitcdGt0YXBfdGVzdF9mYWlsIFwiQUNQSSBlamVjdCBrd29ya2VyIGhhbmdzIHVuYm91bmRlZCBpbiBvZmZsaW5lX3BhZ2VzKClcIlxuK2ZpXG4rXG4raWYgWyBcIiR7cmVzY3VlZDotMH1cIiA9IDEgXTsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCJzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1wiXG4rZWxzZVxuK1x0ZHVtcF9sb2dfdGFpbFxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1wiXG4rZmlcbitcbitpZiBbIFwiJHtibGtfc3RhdGV9XCIgPSBcIm9ubGluZVwiIF07IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwibWVtb3J5IGJsb2NrIG9ubGluZSBhbmQgdXNhYmxlIGFmdGVyIHRoZSBiYWlsb3V0XCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIm1lbW9yeSBibG9jayBvbmxpbmUgYW5kIHVzYWJsZSBhZnRlciB0aGUgYmFpbG91dCAoc3RhdGU9JHtibGtfc3RhdGV9KVwiXG4rZmlcbitcbitrdGFwX2ZpbmlzaGVkXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoyNzowNS45OTcyMTM3MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTQ3OTY1NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEhvdHBsdWcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCdzIGludHJvZHVjaW5nIGEgbmV3IGtlcm5lbCBwYXJhbWV0ZXI6IGBtZW1vcnlfaG90cGx1Zy5vZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc2AuIEVzc2VudGlhbGx5LCBpdCdzIGRlc2lnbmVkIHRvIHB1dCBhIGNhcCBvbiB0aGUgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhhdCdzIGEgZ29vZCB0aGluZywgcG90ZW50aWFsbHkgcHJldmVudGluZyBydW5hd2F5IG1pZ3JhdGlvbnMgaW4gY2VydGFpbiBzY2VuYXJpb3MuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyB3aXRoaW4gYG1tL21lbW9yeV9ob3RwbHVnLmNgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIG1lbW9yeSBob3RwbHVnIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgc28gaXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGF0IGNvZGUgYW5kIGNvbmZpcm0gdGhhdCB0aGUgbW9kaWZpY2F0aW9uIGlzIHNvdW5kLCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMsIGFuZCBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBvZmZsaW5lX3BhZ2VzYCBmdW5jdGlvbiBzaW5jZSB0aGF0IGlzIHdoZXJlIHRoZSBkZXNjcmlwdGlvbiBpbXBsaWVzIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBwYXJhbWV0ZXIgaW50ZXJhY3RzIHNtb290aGx5IHdpdGggdGhlIGV4aXN0aW5nIG1lbW9yeSBvZmZsaW5pbmcgbG9naWMuXG5cbkJleW9uZCB0aGUgY29kZSBpdHNlbGYsIEkgc2VlIHRoYXQgYSBuZXcgc2VsZnRlc3QsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2hgLCBoYXMgYmVlbiBhZGRlZC4gVGhhdCdzIGZhbnRhc3RpYy4gSSdsbCBuZWVkIHRvIHJldmlldyB0aGF0IHRlc3QgdGhvcm91Z2hseSB0byBlbnN1cmUgaXQgY292ZXJzIHRoZSBpbnRlbmRlZCBiZWhhdmlvciwgaW5jbHVkaW5nIHRoZSBuZXcgcGFyYW1ldGVyJ3MgZWZmZWN0IG9uIG1pZ3JhdGlvbiBsaW1pdHMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc2NvcGUgb2YgdGhlIHRlc3QgdG8gZW5zdXJlIGFsbCBmdW5jdGlvbmFsaXR5IGlzIGNvdmVyZWQuXG5cbkZpbmFsbHksIHRoZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGNydWNpYWwuIEJvdGggYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0YCBhbmQgYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0YCBhcmUgYmVpbmcgdXBkYXRlZC4gSSdsbCBuZWVkIHRvIHJldmlldyB0aG9zZSB1cGRhdGVzIHRvIHZlcmlmeSB0aGUgbmV3IHBhcmFtZXRlciBpcyBjbGVhcmx5IGV4cGxhaW5lZCwgaXRzIGltcGxpY2F0aW9ucyBhcmUgYWNjdXJhdGVseSBkZXNjcmliZWQsIGFuZCB0aGUgZG9jdW1lbnRhdGlvbiBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGNvZGUuIEl0IGlzIGV4dHJlbWVseSBpbXBvcnRhbnQgdGhhdCB0aGUgZG9jdW1lbnRhdGlvbiBhY2N1cmF0ZWx5IHJlZmxlY3RzIHRoZSBiZWhhdmlvciBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoyNzoxMC45NDUxODI3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMxMjYxMjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0PTk1PUtlcm5lbCBwYXJhbWV0ZXJzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0zOTgyLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjM5ODM6XFx0bWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMzk4NC1cXHRcXHRcXHRbS05MXSBNYXhpbXVtIG51bWJlciBvZiBtaWdyYXRpb24gcGFzc2VzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdD0yMjY9RnVydGhlciwgbWVtb3J5IG9mZmxpbmluZyBtaWdodCByZXRyeSBmb3IgYSBsb25nIHRpbWUgKG9yIGV2ZW4gZm9yZXZlciksIHVudGlsXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3Q6MjI3OmFib3J0ZWQgYnkgdGhlIHVzZXIuICBUaGUgYGBtZW1vcnlfaG90cGx1Zy5vZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc2BgXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtMjI4LXBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBib3VuZCB0aGUgbnVtYmVyIG9mIHJldHJ5IHBhc3NlcywgbWFraW5nIGFuIG9mZmxpbmVcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0PTQzMj1UaGUgZm9sbG93aW5nIG1vZHVsZSBwYXJhbWV0ZXJzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDpcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTU1Mi1cXHRcXHRcXHRcXHQgUGFyYW1ldGVyIGF2YWlsYWJpbGl0eSBkZXBlbmRzIG9uIENPTkZJR19OVU1BLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0OjU1MzpgYG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYGBcXHQgcmVhZC13cml0ZTogTWF4aW11bSBudW1iZXIgb2YgbWlncmF0aW9uXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtNTU0LVxcdFxcdFxcdFxcdCBwYXNzZXMgZm9yIGEgc2luZ2xlIG1lbW9yeSBvZmZsaW5lXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE3NzQ9Ym9vbCBtaHBfcmFuZ2VfYWxsb3dlZCh1NjQgc3RhcnQsIHU2NCBzaXplLCBib29sIG5lZWRfbWFwcGluZylcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc4OC0vKiBNYXggb2ZmbGluZV9wYWdlcygpIG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIC1FQlVTWTsgMCA9IHJldHJ5IGZvcmV2ZXIuICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzg5OnN0YXRpYyB1bnNpZ25lZCBpbnQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgX19yZWFkX21vc3RseTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3OTA6bW9kdWxlX3BhcmFtKG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzLCB1aW50LCAwNjQ0KTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3OTE6TU9EVUxFX1BBUk1fREVTQyhvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcyxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3OTItXFx0XFxcIk1heCBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSBtZW1vcnkgb2ZmbGluZSBnaXZlcyB1cCAoMCA9IG5vIGxpbWl0KVxcXCIpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xOTYxPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDgzLVxcdFxcdFxcdCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjA4NDpcXHRcXHRcXHRtYXhfcGFzc2VzID0gUkVBRF9PTkNFKG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwODUtXFx0XFx0XFx0aWYgKG1heF9wYXNzZXMgXFx1MDAyNlxcdTAwMjYgcGFzcysrIFxcdTAwM2U9IG1heF9wYXNzZXMpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0zLSNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2g6NDojIFRlc3QgbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgYnkgcmVwcm9kdWNpbmcgdGhlIEFDUElcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtNS0jIG1lbW9yeSBob3QtdW5wbHVnIGhhbmcgaW4ga3dvcmtlciBjb250ZXh0IGFuZCB2ZXJpZnlpbmcgdGhhdCB0aGUgcmV0cnlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0xOS0jICAgNS4gT2JzZXJ2ZSB0aGUgaGFuZyAoZ29pbmctb2ZmbGluZSBwZXJzaXN0cykuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjIwOiMgICA2LiBSZXNjdWU6IHdyaXRlIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzIGF0IHJ1bnRpbWUsIHZlcmlmeSBiYWlsb3V0LlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0yMS0jXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjMtIyAgIDEgIEFDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjI0OiMgICAyICBzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0yNS0jICAgMyAgbWVtb3J5IGJsb2NrIG9ubGluZSBhbmQgdXNhYmxlIGFmdGVyIHRoZSBiYWlsb3V0XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2g9MjE4PXNldCAtdVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0yMTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjIyMDpyZWFkb25seSBQQVJBTT0vc3lzL21vZHVsZS9tZW1vcnlfaG90cGx1Zy9wYXJhbWV0ZXJzL29mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoLTIyMS1yZWFkb25seSBNRU09L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaD0yMjU9YmxvY2tfc3RhdGUoKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjI4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaDoyMjk6WyAtZiBcXFwiJHtQQVJBTX1cXFwiIF0gfHwgc2tpcCBcXFwia2VybmVsIGxhY2tzIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0yMzAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2g9Mjg0PWVjaG8gXFxcIiR7TUFYX1BBU1NFU31cXFwiIFxcdTAwM2UgXFxcIiR7UEFSQU19XFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaDoyODU6ZWNobyBcXFwiIyBhcm1lZCBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlcz0kKGNhdCBcXFwiJHtQQVJBTX1cXFwiKVxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjg2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoPTM1Nj1pZiBbIFxcXCIke3Jlc2N1ZWQ6LTB9XFxcIiA9IDEgXTsgdGhlblxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaDozNTc6XFx0a3RhcF90ZXN0X3Bhc3MgXFxcInN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0zNTgtZWxzZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0zNTktXFx0ZHVtcF9sb2dfdGFpbFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaDozNjA6XFx0a3RhcF90ZXN0X2ZhaWwgXFxcInN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0zNjEtZmlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6Mjc6MTUuMzc2NDUwNDIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0OTQzOTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBIb3RwbHVnIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIsIGBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1lbW9yeV9ob3RwbHVnLmNgLiBUaGlzIGlzIGEgcHJldHR5IGZvY3VzZWQgZnVuY3Rpb25hbCBhZGRpdGlvbiwgaW1wYWN0aW5nIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgb2ZmbGluZSBwYWdlcy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGltbWVkaWF0ZWx5IGtleSBpbiBvbiB0aGUgYG9mZmxpbmVfcGFnZXNgIGZ1bmN0aW9uIGFzIHRoZSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIG5ldyBwYXJhbWV0ZXIgd2lsbCBjb21lIGludG8gcGxheS5cblxuVGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCBoZXJlIGlzIGBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRWAsIHdoaWNoIGlzIHN0YW5kYXJkLiBCZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBmdXp6aW5nIHN0cmF0ZWd5IHRob3VnaCwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGBtbS9tZW1vcnlfaG90cGx1Zy5jYCBpdHNlbGYuIEl04oCZcyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIHF1aWNrbHkgc2NhbiB0aGUgZmlsZSBmb3Igb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3VyIG9mIHRoaXMgcGF0Y2guIFRoaXMgd2lsbCBoZWxwIGlkZW50aWZ5IHBvc3NpYmxlIGVkZ2UgY2FzZXMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IHNob3VsZCBhbHNvIGJlIGNvbnNpZGVyZWQgd2hlbiBkZXNpZ25pbmcgdGhlIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgbGV2ZWwgb2YgaW5pdGlhbCByZWNvbm5haXNzYW5jZSBjb3VsZCBzaWduaWZpY2FudGx5IHJlZHVjZSB0aGUgZWZmb3J0IHJlcXVpcmVkIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjk4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6Mjc6MTkuMjI1ODkyODIyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Mzk0MjMzMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3Q9MzM5PVRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtMzgwLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0OjM4MTpcXHRcXHQgICAgQXZhaWxhYmlsaXR5IGRlcGVuZHMgb24gdGhlIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtMzgyLVxcdFxcdCAgICBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdD00MzI9VGhlIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVycyBhcmUgY3VycmVudGx5IGRlZmluZWQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdC01NzItXFx0XFx0XFx0XFx0IFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvblxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0OjU3MzpcXHRcXHRcXHRcXHQgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtNTc0LT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuLS1cXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTEzMz1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MTM0OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnLTEzNS1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmM9MjIxOT1zdGF0aWMgaW50IF9faW5pdCBwcmV2ZW50X21lbW9yeV9yZW1vdmVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMjIyLVxcbmFyY2gvYXJtNjQvbW0vbW11LmM6MjIyMzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjIyNC1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0xMDE9Q09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9BVVRPPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTAzLSMgQ09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9NT1ZBQkxFIGlzIG5vdCBzZXRcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjEwNDpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0xMDUtQ09ORklHX0tTTT15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTExNj1DT05GSUdfTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0FVVE89eVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xMTgtIyBDT05GSUdfTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX01PVkFCTEUgaXMgbm90IHNldFxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6MTE5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTEyMC1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnPTU4PUNPTkZJR19NRU1PUllfSE9UUExVRz15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc6NTk6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnLTYwLUNPTkZJR19LU009eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnPTg4PUNPTkZJR19NRU1PUllfSE9UUExVRz15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnOjg5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWctOTAtQ09ORklHX0tTTT15XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYz0yMjI9c3RhdGljIGludCBkbHBhcl9vbmxpbmVfbG1iKHN0cnVjdCBkcm1lbV9sbWIgKmxtYilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTIyNi1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYzoyMjc6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMtMjI4LXN0YXRpYyBpbnQgZGxwYXJfb2ZmbGluZV9sbWIoc3RydWN0IGRybWVtX2xtYiAqbG1iKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmM9NTU4PXN0YXRpYyBpbnQgZGxwYXJfbWVtb3J5X3JlbW92ZV9ieV9pYyh1MzIgbG1ic190b19yZW1vdmUsIHUzMiBkcmNfaW5kZXgpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy01NjEtfVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jOjU2MjojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy01NjMtXFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTA1PUNPTkZJR19NRU1PUllfSE9UUExVRz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjEwNjpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTEwNy1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz05OD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzo5OTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTEwMC1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM9MTU3PWFjcGlfcGh5c2ljYWxfYWRkcmVzcyBnZXRfcnNkcF9hZGRyKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jLTE3MS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jOjE3MjojaWYgZGVmaW5lZChDT05GSUdfUkFORE9NSVpFX0JBU0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYy0xNzMtLypcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM9Mjc1PWludCBjb3VudF9pbW1vdmFibGVfbWVtX3JlZ2lvbnModm9pZClcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmMtMzIxLX1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jOjMyMjojZW5kaWYgLyogQ09ORklHX1JBTkRPTUlaRV9CQVNFIFxcdTAwMjZcXHUwMDI2IENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYz01OTY9c3RhdGljIGJvb2wgcHJvY2Vzc19tZW1fcmVnaW9uKHN0cnVjdCBtZW1fdmVjdG9yICpyZWdpb24sXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MTQtXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM6NjE1OiNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUkVNT1ZFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19BQ1BJKVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTYxNi1cXHQvKlxcbi0tXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaD0xNzE9c3RhdGljIGlubGluZSBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgZ2V0X3JzZHBfYWRkcih2b2lkKSB7IHJldHVybiAwOyB9XFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTE3My1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oOjE3NDojaWYgZGVmaW5lZChDT05GSUdfUkFORE9NSVpFX0JBU0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0FDUEkpXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaC0xNzUtZXh0ZXJuIHN0cnVjdCBtZW1fdmVjdG9yIGltbW92YWJsZV9tZW1bTUFYX05VTU5PREVTKjJdO1xcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTE2Nz1zdGF0aWMgc3NpemVfdCBwaHlzX2luZGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTE3Ni0gKiBMZWdhY3kgaW50ZXJmYWNlIHRoYXQgd2UgY2Fubm90IHJlbW92ZS4gQWx3YXlzIGluZGljYXRlIFxcXCJyZW1vdmFibGVcXFwiXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjE3NzogKiB3aXRoIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFIC0gYmFkIGhldXJpc3RpYy5cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTc4LSAqL1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xNzk9c3RhdGljIHNzaXplX3QgcmVtb3ZhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xODEte1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoxODI6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIChpbnQpSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xODMtfVxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTQ1MD1zdGF0aWMgc3NpemVfdCBwaHlzX2RldmljZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy00NTktXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjQ2MDojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDYxLXN0YXRpYyBpbnQgcHJpbnRfYWxsb3dlZF96b25lKGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IG5pZCxcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz02NzE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1lbW9yeV9tZW1ibGtfYXR0cnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02NzUtXFx0XFx1MDAyNmRldl9hdHRyX3JlbW92YWJsZS5hdHRyLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2NzY6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTY3Ny1cXHRcXHUwMDI2ZGV2X2F0dHJfdmFsaWRfem9uZXMuYXR0cixcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0xNjM9c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMDctXFxuZHJpdmVycy9kYXgva21lbS5jOjIwODojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5kcml2ZXJzL2RheC9rbWVtLmMtMjA5LS8qKlxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTI2OD1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzItfVxcbmRyaXZlcnMvZGF4L2ttZW0uYzoyNzM6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuZHJpdmVycy9kYXgva21lbS5jLTI3NC1cXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0zODM9c3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtNDgwLVxcbmRyaXZlcnMvZGF4L2ttZW0uYzo0ODE6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuZHJpdmVycy9kYXgva21lbS5jLTQ4Mi0vKlxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTU0OT1zdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTU1OS19XFxuZHJpdmVycy9kYXgva21lbS5jOjU2MDojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG5kcml2ZXJzL2RheC9rbWVtLmMtNTYxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaD0zOTE9ZXh0ZXJuIHZvaWQgX19yZWxlYXNlX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwgcmVzb3VyY2Vfc2l6ZV90LFxcbmluY2x1ZGUvbGludXgvaW9wb3J0LmgtMzkyLVxcdFxcdFxcdFxcdHJlc291cmNlX3NpemVfdCk7XFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaDozOTM6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaC0zOTQtZXh0ZXJuIHZvaWQgcmVsZWFzZV9tZW1fcmVnaW9uX2FkanVzdGFibGUocmVzb3VyY2Vfc2l6ZV90LCByZXNvdXJjZV9zaXplX3QpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2MD1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcmVzaXplX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkge31cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNjItXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI2MzojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjY0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI5MD1zdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yOTQtfVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyOTU6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI5Ni1cXG4tLVxcbmtlcm5lbC9jb25maWdzL3hlbi5jb25maWc9MTU9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG5rZXJuZWwvY29uZmlncy94ZW4uY29uZmlnOjE2OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG5rZXJuZWwvY29uZmlncy94ZW4uY29uZmlnLTE3LUNPTkZJR19aT05FX0RFVklDRT15XFxuLS1cXG5rZXJuZWwvcmVzb3VyY2UuYz0xNDQ2PUVYUE9SVF9TWU1CT0woX19yZWxlYXNlX3JlZ2lvbik7XFxua2VybmVsL3Jlc291cmNlLmMtMTQ0Ny1cXG5rZXJuZWwvcmVzb3VyY2UuYzoxNDQ4OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbmtlcm5lbC9yZXNvdXJjZS5jLTE0NDktc3RhdGljIHZvaWQgYXBwZW5kX2NoaWxkX3RvX3BhcmVudChzdHJ1Y3QgcmVzb3VyY2UgKm5ld19wYXJlbnQsIHN0cnVjdCByZXNvdXJjZSAqbmV3X2NoaWxkKVxcbi0tXFxua2VybmVsL3Jlc291cmNlLmM9MTUwNz12b2lkIHJlbGVhc2VfbWVtX3JlZ2lvbl9hZGp1c3RhYmxlKHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IHNpemUpXFxuLS1cXG5rZXJuZWwvcmVzb3VyY2UuYy0xNTk2LX1cXG5rZXJuZWwvcmVzb3VyY2UuYzoxNTk3OiNlbmRpZlxcdC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxua2VybmVsL3Jlc291cmNlLmMtMTU5OC1cXG4tLVxcbm1tL2tzbS5jPTMzMTE9dm9pZCBmb2xpb19taWdyYXRlX2tzbShzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0va3NtLmMtMzMzNC1cXG5tbS9rc20uYzozMzM1OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbm1tL2tzbS5jLTMzMzYtc3RhdGljIHZvaWQgd2FpdF93aGlsZV9vZmZsaW5pbmcodm9pZClcXG4tLVxcbm1tL2tzbS5jPTM0NTk9c3RhdGljIHZvaWQgd2FpdF93aGlsZV9vZmZsaW5pbmcodm9pZClcXG4tLVxcbm1tL2tzbS5jLTM0NjEtfVxcbm1tL2tzbS5jOjM0NjI6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxubW0va3NtLmMtMzQ2My1cXG4tLVxcbm1tL2tzbS5jPTQwMTk9c3RhdGljIGludCBfX2luaXQga3NtX2luaXQodm9pZClcXG4tLVxcbm1tL2tzbS5jLTQwNTEtXFxubW0va3NtLmM6NDA1MjojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5tbS9rc20uYy00MDUzLVxcdC8qIFRoZXJlIGlzIG5vIHNpZ25pZmljYW5jZSB0byB0aGlzIHByaW9yaXR5IDEwMCAqL1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNzc0PWJvb2wgbWhwX3JhbmdlX2FsbG93ZWQodTY0IHN0YXJ0LCB1NjQgc2l6ZSwgYm9vbCBuZWVkX21hcHBpbmcpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3ODYtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzg3OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc4OC0vKiBNYXggb2ZmbGluZV9wYWdlcygpIG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIC1FQlVTWTsgMCA9IHJldHJ5IGZvcmV2ZXIuICovXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTI1NjY9RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjU2NzojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NDI5PXN0YXRpYyB1bnNpZ25lZCBpbnQgem9uZWxpc3RfaXRlcl9iZWdpbih2b2lkKVxcbm1tL3BhZ2VfYWxsb2MuYy00NDMwLXtcXG5tbS9wYWdlX2FsbG9jLmM6NDQzMTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpXFxubW0vcGFnZV9hbGxvYy5jLTQ0MzItXFx0XFx0cmV0dXJuIHJlYWRfc2VxYmVnaW4oXFx1MDAyNnpvbmVsaXN0X3VwZGF0ZV9zZXEpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ0Mzc9c3RhdGljIHVuc2lnbmVkIGludCBjaGVja19yZXRyeV96b25lbGlzdCh1bnNpZ25lZCBpbnQgc2VxKVxcbm1tL3BhZ2VfYWxsb2MuYy00NDM4LXtcXG5tbS9wYWdlX2FsbG9jLmM6NDQzOTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpXFxubW0vcGFnZV9hbGxvYy5jLTQ0NDAtXFx0XFx0cmV0dXJuIHJlYWRfc2VxcmV0cnkoXFx1MDAyNnpvbmVsaXN0X3VwZGF0ZV9zZXEsIHNlcSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzY4OD12b2lkIHpvbmVfcGNwX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTc3MDYtXFxubW0vcGFnZV9hbGxvYy5jOjc3MDc6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxubW0vcGFnZV9hbGxvYy5jLTc3MDgtLypcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND05MD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2NDo5MTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0LTkyLUNPTkZJR19OQU1FU1BBQ0VTPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg9NzY9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4Ojc3OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTc4LUNPTkZJR19OQU1FU1BBQ0VTPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc9Mz1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc6NDpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tZW1vcnktaG90cGx1Zy9jb25maWc9Mz1DT05GSUdfTUVNT1JZX05PVElGSUVSX0VSUk9SX0lOSkVDVD1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbWVtb3J5LWhvdHBsdWcvY29uZmlnOjQ6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTE3PUNPTkZJR19NRU1PUllfSE9UUExVRz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnOjE4OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctMTktQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlk9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdnNvY2svY29uZmlnPTEwOT1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZzoxMTA6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZy0xMTEtQ09ORklHX1pPTkVfREVWSUNFPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6Mjc6MjIuMTY1MzIzMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODI4NzQxMTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IFRhcmdldGluZyBNZW1vcnkgSG90LVJlbW92YWwqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZm9jdXNlZCBvbiBtZW1vcnkgaG90LXJlbW92YWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbS9tZW1vcnlfaG90cGx1Zy5jYCBmaWxlLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgZW5jYXBzdWxhdGVkIGJ5IGAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgLCB3aGljaCBpcyBnb29kLCB0aGF0IGdpdmVzIG1lIGEgY2xlYXIgZW50cnkgcG9pbnQuIExvb2tpbmcgY2xvc2VyLCBpdCdzIHRoZSBgb2ZmbGluZV9wYWdlc2AgZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQuIFRoZSBmYWN0IHRoYXQgYG9mZmxpbmVfcGFnZXNgIGlzIHRoZSB0YXJnZXQgZnVuY3Rpb24gYW5kIHRoYXQgaXQncyByZWFjaGFibGUgd2hlbiBtZW1vcnkgaXMgYmVpbmcgb2ZmbGluZWQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IHN0cmF0ZWd5IGlzIHRvIHplcm8gaW4gb24gdGhpcyBmdW5jdGlvbi4gSSdsbCBmbGFnIGl0IGFzIGhpZ2gtcHJpb3JpdHkgdXNpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gVG8gZW5zdXJlIHRoZSBmdXp6ZXIgY29uY2VudHJhdGVzIGl0cyBlZmZvcnRzLCBJJ2xsIHNldCBgRm9jdXNTeW1ib2xzPVtcIm9mZmxpbmVfcGFnZXNcIl1gLiBBbHNvLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgYXJlIHZlcnkgb2J2aW91cywgYE1FTU9SWV9IT1RSRU1PVkVgIGFuZCBgTUVNT1JZX0hPVFBMVUdgIG11c3QgYmUgZW5hYmxlZCwgc28gSSdsbCBzZXQgYEVuYWJsZUNvbmZpZ3M9W1wiTUVNT1JZX0hPVFJFTU9WRVwiLCBcIk1FTU9SWV9IT1RQTFVHXCJdYC4gVGhlIHByZXNlbmNlIG9mIGBBQ1BJX0hPVFBMVUdfTUVNT1JZYCBpbiB0aGUgc2VsZnRlc3QgY29uZmlnIGlzIG5vdCBpbnRlcmVzdGluZywgc2luY2UgaXQncyBvbmx5IHRoZXJlIGZvciB0aGUgdGVzdCwgbm90aGluZyB0byBzZWUgdGhlcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBvZmZsaW5lX3BhZ2VzYCBpcyBpbmRlZWQgdGhlIG9ubHkgZnVuY3Rpb24gZGlyZWN0bHkgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCwgYW5kIGl0IGFkZHMgdGhlIGBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc2AgbW9kdWxlIHBhcmFtZXRlciwgd2hpY2ggaXMgdXNlZnVsIHRvIGtub3cuXG5cbk5vdywgSSdsbCBwdXQgdGhpcyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gZ2V0IHRoaW5ncyByb2xsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg2NSwiT3V0cHV0VG9rZW5zIjo5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoyNzoyNy45OTQwNzA2NDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODY0MzMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGhvdHBsdWcgbG9naWMgaW4gYG9mZmxpbmVfcGFnZXNgIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiBtZW1vcnkgaXMgb2ZmbGluZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGhvdHBsdWcgbG9naWMgaW4gYG9mZmxpbmVfcGFnZXNgIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiBtZW1vcnkgaXMgb2ZmbGluZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmrsb2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 01:56:25 +0000 UTC FinishedAt: 2026-07-23 02:27:30 +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": "5e0603ba185af6754422ad28b646798686b6caf6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "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": "5e0603ba185af6754422ad28b646798686b6caf6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG", "MEMORY_HOTREMOVE" ], "series_id": "064d1630-3c6f-4ff7-a90b-4eacfca2bb5a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "offline_pages" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBob3RwbHVnIGxvZ2ljIGluIGBvZmZsaW5lX3BhZ2VzYCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIG1pZ3JhdGlvbiBwYXNzZXMgZHVyaW5nIG1lbW9yeSBvZmZsaW5pbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gbWVtb3J5IGlzIG9mZmxpbmVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTMwYjMyMTQ1Mjg2ZjY1M2ZlYzRiMTk0NWVkZDc5OTIxMjIwYmFmY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDAyOjI3OjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbmluZGV4IDUzZjA4OTUwYTYzMDk2Li45MGI2N2M0NTdjMmE4MiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuQEAgLTM5ODAsNiAmIzQzOzM5ODAsMjAgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHROb3RlIHRoYXQgZXZlbiB3aGVuIGVuYWJsZWQsIHRoZXJlIGFyZSBhIGZldyBjYXNlcyB3aGVyZVxuIFx0XHRcdHRoZSBmZWF0dXJlIGlzIG5vdCBlZmZlY3RpdmUuXG4gXG4mIzQzO1x0bWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9XG4mIzQzO1x0XHRcdFtLTkxdIE1heGltdW0gbnVtYmVyIG9mIG1pZ3JhdGlvbiBwYXNzZXNcbiYjNDM7XHRcdFx0Zm9yIG1lbW9yeSBvZmZsaW5pbmcuXG4mIzQzO1x0XHRcdEZvcm1hdDogXHUwMDNjaW50ZWdlclx1MDAzZVxuJiM0MztcdFx0XHRkZWZhdWx0OiAwIChubyBsaW1pdCwgaGlzdG9yaWNhbCBiZWhhdmlvdXIpXG4mIzQzO1x0XHRcdFdoZW4gbm9uLXplcm8sIG1lbW9yeSBvZmZsaW5pbmcgZ2l2ZXMgdXAgd2l0aFxuJiM0MztcdFx0XHQtRUJVU1kgYWZ0ZXIgdGhpcyBtYW55IG1pZ3JhdGlvbiBwYXNzZXMgb3ZlclxuJiM0MztcdFx0XHR0aGUgcmFuZ2UsIGluc3RlYWQgb2YgcmV0cnlpbmcgZm9yZXZlciBvbiBhXG4mIzQzO1x0XHRcdHN0dWNrIHBhZ2UuICBFYWNoIHBhc3Mgc2NhbnMgdGhlIHJhbmdlIGFuZFxuJiM0MztcdFx0XHRtaWdyYXRlcyB3aGF0IGl0IGNhbi5cbiYjNDM7XHRcdFx0VGhlIHBhcmFtZXRlciBpcyByZS1yZWFkIG9uIGV2ZXJ5IHBhc3MsIHNvIGFuXG4mIzQzO1x0XHRcdG9mZmxpbmUgcmVxdWVzdCB0aGF0IGlzIGFscmVhZHkgc3R1Y2sgY2FuIGJlXG4mIzQzO1x0XHRcdHJlc2N1ZWQgYXQgcnVudGltZSBieSB3cml0aW5nIHRoZSBwYXJhbWV0ZXIuXG4mIzQzO1xuIFx0bWVtdGVzdD1cdFtLTkwsWDg2LEFSTSxNNjhLLFBQQyxSSVNDVixFQVJMWV0gRW5hYmxlIG1lbXRlc3RcbiBcdFx0XHRGb3JtYXQ6IFx1MDAzY2ludGVnZXJcdTAwM2VcbiBcdFx0XHRkZWZhdWx0IDogMCBcdTAwM2NkaXNhYmxlXHUwMDNlXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdFxuaW5kZXggMDIwN2Y4NzI1MTQyMWMuLjc5YjQ1MTA5YzQwOGM4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0XG5AQCAtMjI0LDcgJiM0MzsyMjQsMTAgQEAgaW5jcmVhc2VzIG1lbW9yeSBvZmZsaW5pbmcgcmVsaWFiaWxpdHk7IHN0aWxsLCBtZW1vcnkgb2ZmbGluaW5nIGNhbiBmYWlsIGluXG4gc29tZSBjb3JuZXIgY2FzZXMuXG4gXG4gRnVydGhlciwgbWVtb3J5IG9mZmxpbmluZyBtaWdodCByZXRyeSBmb3IgYSBsb25nIHRpbWUgKG9yIGV2ZW4gZm9yZXZlciksIHVudGlsXG4tYWJvcnRlZCBieSB0aGUgdXNlci5cbiYjNDM7YWJvcnRlZCBieSB0aGUgdXNlci4gIFRoZSBgYG1lbW9yeV9ob3RwbHVnLm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYGBcbiYjNDM7cGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGJvdW5kIHRoZSBudW1iZXIgb2YgcmV0cnkgcGFzc2VzLCBtYWtpbmcgYW4gb2ZmbGluZVxuJiM0MztyZXF1ZXN0IHRoYXQgY2Fubm90IG1ha2UgcHJvZ3Jlc3MgZmFpbCB3aXRoIGBgLUVCVVNZYGAgaW5zdGVhZCBvZiByZXRyeWluZ1xuJiM0MztpbmRlZmluaXRlbHkgKHNlZSBgTW9kdWxlIFBhcmFtZXRlcnNgXykuXG4gXG4gT2ZmbGluaW5nIG9mIGEgbWVtb3J5IGJsb2NrIGNhbiBiZSB0cmlnZ2VyZWQgdmlhOjpcbiBcbkBAIC01NDcsNiAmIzQzOzU1MCwyNyBAQCBUaGUgZm9sbG93aW5nIG1vZHVsZSBwYXJhbWV0ZXJzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDpcbiBcdFx0XHRcdCBwb3NzaWJsZS5cbiBcbiBcdFx0XHRcdCBQYXJhbWV0ZXIgYXZhaWxhYmlsaXR5IGRlcGVuZHMgb24gQ09ORklHX05VTUEuXG4mIzQzO2Bgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNgYFx0IHJlYWQtd3JpdGU6IE1heGltdW0gbnVtYmVyIG9mIG1pZ3JhdGlvblxuJiM0MztcdFx0XHRcdCBwYXNzZXMgZm9yIGEgc2luZ2xlIG1lbW9yeSBvZmZsaW5lXG4mIzQzO1x0XHRcdFx0IHJlcXVlc3QuICBNZW1vcnkgb2ZmbGluaW5nIHJldHJpZXMgdG9cbiYjNDM7XHRcdFx0XHQgbWlncmF0ZSBhbmQgaXNvbGF0ZSBwYWdlcyB1bnRpbCBpdCBzdWNjZWVkcztcbiYjNDM7XHRcdFx0XHQgYSBwYWdlIHRoYXQgY2FuIG5ldmVyIGJlIG1pZ3JhdGVkIG9yIGZyZWVkXG4mIzQzO1x0XHRcdFx0IG1ha2VzIGl0IHJldHJ5IGZvcmV2ZXIuICBXaGVuIHRoaXMgcGFyYW1ldGVyXG4mIzQzO1x0XHRcdFx0IGlzIG5vbi16ZXJvLCBhbiBvZmZsaW5lIHJlcXVlc3QgZ2l2ZXMgdXBcbiYjNDM7XHRcdFx0XHQgd2l0aCBgYC1FQlVTWWBgIGFmdGVyIHRoZSBjb25maWd1cmVkIG51bWJlclxuJiM0MztcdFx0XHRcdCBvZiBtaWdyYXRpb24gcGFzc2VzIGFuZCB0aGUgbWVtb3J5IGJsb2NrXG4mIzQzO1x0XHRcdFx0IHN0YXlzIG9ubGluZS5cbiYjNDM7XG4mIzQzO1x0XHRcdFx0IFRoZSBwYXJhbWV0ZXIgaXMgcmUtcmVhZCBvbiBldmVyeSBwYXNzLCBzb1xuJiM0MztcdFx0XHRcdCBhbiBvZmZsaW5lIHJlcXVlc3QgdGhhdCBpcyBhbHJlYWR5IHN0dWNrXG4mIzQzO1x0XHRcdFx0IHJldHJ5aW5nIGNhbiBiZSByZXNjdWVkIGF0IHJ1bnRpbWUgYnlcbiYjNDM7XHRcdFx0XHQgd3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlLCB3aXRob3V0IGEgcmVib290LlxuJiM0MztcbiYjNDM7XHRcdFx0XHQgVGhlIGRlZmF1bHQgaXMgXCYjMzQ7MFwmIzM0OywgbWVhbmluZyBubyBsaW1pdCAodGhlXG4mIzQzO1x0XHRcdFx0IGhpc3RvcmljYWwgYmVoYXZpb3VyKS5cbiYjNDM7XG4mIzQzO1x0XHRcdFx0IFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvblxuJiM0MztcdFx0XHRcdCBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRS5cbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuIFpPTkVfTU9WQUJMRVxuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5pbmRleCAyMjZhYjljYjA3OGFkMS4uOTA2NzgyOTM0OWEwZGEgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5AQCAtMTc4NSw2ICYjNDM7MTc4NSwxMiBAQCBib29sIG1ocF9yYW5nZV9hbGxvd2VkKHU2NCBzdGFydCwgdTY0IHNpemUsIGJvb2wgbmVlZF9tYXBwaW5nKVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbiYjNDM7LyogTWF4IG9mZmxpbmVfcGFnZXMoKSBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSAtRUJVU1k7IDAgPSByZXRyeSBmb3JldmVyLiAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzIF9fcmVhZF9tb3N0bHk7XG4mIzQzO21vZHVsZV9wYXJhbShvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcywgdWludCwgMDY0NCk7XG4mIzQzO01PRFVMRV9QQVJNX0RFU0Mob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMsXG4mIzQzO1x0XCYjMzQ7TWF4IG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIG1lbW9yeSBvZmZsaW5lIGdpdmVzIHVwICgwID0gbm8gbGltaXQpXCYjMzQ7KTtcbiYjNDM7XG4gLypcbiAgKiBTY2FuIHBmbiByYW5nZSBbc3RhcnQsZW5kKSB0byBmaW5kIG1vdmFibGUvbWlncmF0YWJsZSBwYWdlcyAoTFJVIGFuZFxuICAqIGh1Z2V0bGIgZm9saW8sIG1vdmFibGVfb3BzIHBhZ2VzKS4gV2lsbCBza2lwIG92ZXIgbW9zdCB1bm1vdmFibGVcbkBAIC0xOTY2LDYgJiM0MzsxOTcyLDggQEAgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gXHRzdHJ1Y3Qgbm9kZV9ub3RpZnkgbm9kZV9hcmcgPSB7XG4gXHRcdC5uaWQgPSBOVU1BX05PX05PREUsXG4gXHR9O1xuJiM0MztcdHVuc2lnbmVkIGludCBtYXhfcGFzc2VzO1xuJiM0MztcdHVuc2lnbmVkIGludCBwYXNzID0gMDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRjaGFyICpyZWFzb247XG4gXHRpbnQgcmV0O1xuQEAgLTIwNjIsNiAmIzQzOzIwNzAsMzYgQEAgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gXHRcdFx0XHRnb3RvIGZhaWxlZF9yZW1vdmFsX2lzb2xhdGVkO1xuIFx0XHRcdH1cbiBcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQSBwYWdlIHRoYXQgY2FuIG5ldmVyIGJlIG1pZ3JhdGVkIChlLmcuIGFcbiYjNDM7XHRcdFx0ICogbG9uZy10ZXJtIHBpbikgbWFrZXMgdGhpcyBsb29wIHJldHJ5IGZvcmV2ZXIuXG4mIzQzO1x0XHRcdCAqIEdpdmUgdXAgYWZ0ZXIgdGhlIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIHBhc3Nlcy5cbiYjNDM7XHRcdFx0ICogVGhlIGxpbWl0IGlzIHJlLXJlYWQgb24gZXZlcnkgcGFzcyBzbyB0aGF0IGFuXG4mIzQzO1x0XHRcdCAqIG9mZmxpbmUgcmVxdWVzdCB0aGF0IGlzIGFscmVhZHkgc3R1Y2sgaGVyZSBjYW5cbiYjNDM7XHRcdFx0ICogYmUgYWJvcnRlZCBhdCBydW50aW1lIGJ5IHdyaXRpbmcgdGhlIHBhcmFtZXRlcixcbiYjNDM7XHRcdFx0ICogd2hpY2ggbWF0dGVycyBmb3IgaW4ta2VybmVsIGNhbGxlcnMgKGUuZy4gQUNQSVxuJiM0MztcdFx0XHQgKiBESU1NIGhvdC11bnBsdWcpIHRoYXQgcnVuIG9uIGt3b3JrZXJzIGFuZCBjYW5cbiYjNDM7XHRcdFx0ICogbmV2ZXIgYmUgYWJvcnRlZCBieSBhIHNpZ25hbC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG1heF9wYXNzZXMgPSBSRUFEX09OQ0Uob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMpO1xuJiM0MztcdFx0XHRpZiAobWF4X3Bhc3NlcyBcdTAwMjZcdTAwMjYgcGFzcyYjNDM7JiM0MzsgXHUwMDNlPSBtYXhfcGFzc2VzKSB7XG4mIzQzO1x0XHRcdFx0cHJfd2FybihcJiMzNDttZW1vcnkgb2ZmbGluaW5nIFttZW0gJSMwMTBsbHgtJSMwMTBsbHhdOiBnaXZpbmcgdXAgYWZ0ZXIgJXUgcGFzc2VzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZylzdGFydF9wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0XHQoKHVuc2lnbmVkIGxvbmcgbG9uZyllbmRfcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAtIDEsXG4mIzQzO1x0XHRcdFx0XHRwYXNzIC0gMSk7XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBEdW1wIHRoZSBwYWdlIHdlIGxhc3Qgc3RvcHBlZCBhdCBhcyBhXG4mIzQzO1x0XHRcdFx0ICogZGlhZ25vc3RpYyBoaW50OiB1c3VhbGx5IHRoZSBzdHVjayBwYWdlLFxuJiM0MztcdFx0XHRcdCAqIGJ1dCBqdXN0IHRoZSByYW5nZSBzdGFydCBhZnRlciBhIHJlc3RhcnQuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0aWYgKHBmbiBcdTAwM2U9IHN0YXJ0X3BmbiBcdTAwMjZcdTAwMjYgcGZuIFx1MDAzYyBlbmRfcGZuKVxuJiM0MztcdFx0XHRcdFx0ZHVtcF9wYWdlKHBmbl90b19wYWdlKHBmbiksXG4mIzQzO1x0XHRcdFx0XHRcdCAgXCYjMzQ7bWVtb3J5IG9mZmxpbmUgcmV0cnkgbGltaXRcJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldCA9IC1FQlVTWTtcbiYjNDM7XHRcdFx0XHRyZWFzb24gPSBcJiMzNDtyZXRyeSBsaW1pdCBleGNlZWRlZFwmIzM0OztcbiYjNDM7XHRcdFx0XHRnb3RvIGZhaWxlZF9yZW1vdmFsX2lzb2xhdGVkO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuIFx0XHRcdHJldCA9IHNjYW5fbW92YWJsZV9wYWdlcyhwZm4sIGVuZF9wZm4sIFx1MDAyNnBmbik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggZWFlNTA0YmQ5NGM4M2EuLmUxMTNmM2ZmNDY1NTk0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTc3LDYgJiM0MzsxNzcsOSBAQCBURVNUX1BST0dTICYjNDM7PSBrc2Z0X3ZtYWxsb2Muc2hcbiAjIERlc3RydWN0aXZlOiBldmVyeSBzdWNjZXNzZnVsIHJ1biBwYW5pY3MgdGhlIGtlcm5lbC4gIEluc3RhbGxlZCBhbmRcbiAjIGtlcHQgZXhlY3V0YWJsZSwgYnV0IG5vdCBydW4gZnJvbSBhIGRlZmF1bHQga3NlbGZ0ZXN0IGludm9jYXRpb24uXG4gVEVTVF9QUk9HU19FWFRFTkRFRCAmIzQzOz0gaHdwb2lzb24tcGFuaWMuc2hcbiYjNDM7IyBTcGF3bnMgaXRzIG93biBWTSAodmlydG1lLW5nKTsgbm90IHJ1biBmcm9tIGEgZGVmYXVsdCBrc2VsZnRlc3RcbiYjNDM7IyBpbnZvY2F0aW9uLlxuJiM0MztURVNUX1BST0dTX0VYVEVOREVEICYjNDM7PSB2bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2hcbiBcbiBURVNUX0ZJTEVTIDo9IHRlc3Rfdm1hbGxvYy5zaFxuIFRFU1RfRklMRVMgJiM0Mzs9IHRlc3RfaG1tLnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnXG5pbmRleCAwNmY3OGJkMjMyZTJlMy4uZDIyZjYzZWI5YzJjOWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZ1xuQEAgLTE0LDMgJiM0MzsxNCw2IEBAIENPTkZJR19VUFJPQkVTPXlcbiBDT05GSUdfTUVNT1JZX0ZBSUxVUkU9eVxuIENPTkZJR19IV1BPSVNPTl9JTkpFQ1Q9bVxuIENPTkZJR19QUk9DX01FTV9BTFdBWVNfRk9SQ0U9eVxuJiM0MztDT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuJiM0MztDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG4mIzQzO0NPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzIxMWEwZTdjYWEyZDNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaFxuQEAgLTAsMCAmIzQzOzEsMzY5IEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIFRlc3QgbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgYnkgcmVwcm9kdWNpbmcgdGhlIEFDUElcbiYjNDM7IyBtZW1vcnkgaG90LXVucGx1ZyBoYW5nIGluIGt3b3JrZXIgY29udGV4dCBhbmQgdmVyaWZ5aW5nIHRoYXQgdGhlIHJldHJ5XG4mIzQzOyMgbGltaXQgcmVjb3ZlcnMgZnJvbSBpdC5cbiYjNDM7I1xuJiM0MzsjIG9mZmxpbmVfcGFnZXMoKSByZXRyaWVzIHBhZ2UgbWlncmF0aW9uIGluIGFuIHVuYm91bmRlZCBsb29wLiAgQSBwYWdlXG4mIzQzOyMgdGhhdCBjYW4gbmV2ZXIgYmUgbWlncmF0ZWQgKGxvbmctdGVybSBwaW4sIHNsYWIsIGJ1c3kgbWV0YWRhdGEpIG1ha2VzXG4mIzQzOyMgdGhlIGxvb3Agc3BpbiBmb3JldmVyLiAgVXNlcnNwYWNlLWRyaXZlbiBvZmZsaW5lcyBjYW4gYmUgaW50ZXJydXB0ZWQgYnlcbiYjNDM7IyBhIHNpZ25hbCwgYnV0IGFuIEFDUEkgRElNTSBlamVjdCBydW5zIG9uIHRoZSBrYWNwaV9ob3RwbHVnX3dxIGt3b3JrZXJcbiYjNDM7IyB3aGVyZSBzaWduYWxfcGVuZGluZygpIG5ldmVyIGZpcmVzLCBzbyB0aGUga3dvcmtlciBoYW5ncyB1bnRpbCByZWJvb3QuXG4mIzQzOyNcbiYjNDM7IyBGbG93OlxuJiM0MzsjICAgMS4gQm9vdCB0aGUganVzdC1idWlsdCBrZXJuZWwgKHZpcnRtZS1uZykgd2l0aCBhIGNvbGQtcGx1Z2dlZCBwYy1kaW1tLlxuJiM0MzsjICAgMi4gT25saW5lIHRoZSBESU1NJiMzOTtzIGJsb2NrcyBhcyBaT05FX01PVkFCTEUuXG4mIzQzOyMgICAzLiBQaW4gb25lIHBhZ2Ugb2YgdGhlIERJTU0gKHZtc3BsaWNlIGxvbmctdGVybSBwaW4pLlxuJiM0MzsjICAgNC4gRWplY3QgdGhlIERJTU0gdmlhIHN5c2ZzOyBvZmZsaW5lIHJ1bnMgb24ga2FjcGlfaG90cGx1Z193cS5cbiYjNDM7IyAgIDUuIE9ic2VydmUgdGhlIGhhbmcgKGdvaW5nLW9mZmxpbmUgcGVyc2lzdHMpLlxuJiM0MzsjICAgNi4gUmVzY3VlOiB3cml0ZSBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcyBhdCBydW50aW1lLCB2ZXJpZnkgYmFpbG91dC5cbiYjNDM7I1xuJiM0MzsjIFRBUCBzdWJ0ZXN0czpcbiYjNDM7IyAgIDEgIEFDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpXG4mIzQzOyMgICAyICBzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1xuJiM0MzsjICAgMyAgbWVtb3J5IGJsb2NrIG9ubGluZSBhbmQgdXNhYmxlIGFmdGVyIHRoZSBiYWlsb3V0XG4mIzQzOyNcbiYjNDM7IyBEZXBlbmRlbmNpZXM6IHZpcnRtZS1uZyAodm5nKSwgcWVtdS1zeXN0ZW0tXHUwMDNjYXJjaFx1MDAzZSwgY2MuXG4mIzQzOyMgU0tJUHMgKG5ldmVyIEZBSUxzKSB3aGVuIHRvb2xpbmcgb3Iga2VybmVsIHN1cHBvcnQgaXMgbWlzc2luZy5cbiYjNDM7XG4mIzQzO3JlYWRvbmx5IFNDUklQVF9ESVI9XCYjMzQ7JChjZCAtUCAtLSBcJiMzNDskKGRpcm5hbWUgLS0gXCYjMzQ7JHtCQVNIX1NPVVJDRVswXX1cJiMzNDspXCYjMzQ7IFx1MDAyNlx1MDAyNiBwd2QgLVApXCYjMzQ7XG4mIzQzO3JlYWRvbmx5IEtFUk5FTF9DSEVDS09VVD1cJiMzNDskKHJlYWxwYXRoIFwmIzM0OyR7U0NSSVBUX0RJUn1cJiMzNDsvLi4vLi4vLi4vLi4vKVwmIzM0O1xuJiM0MztcbiYjNDM7IyBzaGVsbGNoZWNrIHNvdXJjZT0uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXG4mIzQzO3NvdXJjZSBcJiMzNDske1NDUklQVF9ESVJ9XCYjMzQ7Ly4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcbiYjNDM7XG4mIzQzO3JlYWRvbmx5IERJTU1fU0laRT1cJiMzNDske0RJTU1fU0laRTotMjU2TX1cJiMzNDtcbiYjNDM7cmVhZG9ubHkgTUFYX1BBU1NFUz1cJiMzNDske01BWF9QQVNTRVM6LTUwfVwmIzM0O1xuJiM0MztyZWFkb25seSBIQU5HX0hPTEQ9XCYjMzQ7JHtIQU5HX0hPTEQ6LTEwfVwmIzM0O1xuJiM0MztyZWFkb25seSBSRVNDVUVfVElNRU9VVD1cJiMzNDske1JFU0NVRV9USU1FT1VUOi0zMH1cJiMzNDtcbiYjNDM7cmVhZG9ubHkgQk9PVF9USU1FT1VUPVwmIzM0OyR7Qk9PVF9USU1FT1VUOi0yNDB9XCYjMzQ7XG4mIzQzO1xuJiM0MztyZWFkb25seSBMT0c9XCYjMzQ7JChta3RlbXAgL3RtcC92bXRlc3RfbWhwX1hYWFhYWC5sb2cpXCYjMzQ7XG4mIzQzO3JlYWRvbmx5IEdVRVNUX1NDUklQVD1cJiMzNDskKG1rdGVtcCAvdG1wL3ZtdGVzdF9taHBfZ3Vlc3RfWFhYWFhYLnNoKVwmIzM0O1xuJiM0MztyZWFkb25seSBQSU5fU1JDPVwmIzM0OyQobWt0ZW1wIC90bXAvdm10ZXN0X21ocF9waW5fWFhYWFhYLmMpXCYjMzQ7XG4mIzQzOyMgTXVzdCBsaXZlIGluIHRoZSBrZXJuZWwgdHJlZSBzbyB0aGUgZ3Vlc3Qgc2VlcyBpdCB0aHJvdWdoIHRoZSA5cCByb290ZnMuXG4mIzQzO3JlYWRvbmx5IFBJTl9CSU49XCYjMzQ7JHtTQ1JJUFRfRElSfS8udm10ZXN0X3Bpbl9wYXJrLiQkXCYjMzQ7XG4mIzQzO1xuJiM0MztWTkdfUElEPVwmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7Y2xlYW51cCgpIHtcbiYjNDM7XHRbIC1uIFwmIzM0OyR7Vk5HX1BJRH1cJiMzNDsgXSBcdTAwMjZcdTAwMjYga2lsbCBcJiMzNDske1ZOR19QSUR9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRybSAtZiBcJiMzNDske0xPR31cJiMzNDsgXCYjMzQ7JHtHVUVTVF9TQ1JJUFR9XCYjMzQ7IFwmIzM0OyR7UElOX1NSQ31cJiMzNDsgXCYjMzQ7JHtQSU5fQklOfVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztndWVzdF9yZXN1bHQoKSB7XG4mIzQzO1x0Z3JlcCAtbyBcJiMzNDteJHsxfT1bQS1aYS16MC05Xy1dKlwmIzM0OyBcJiMzNDske0xPR31cJiMzNDsgfCB0YWlsIC0xIHwgY3V0IC1kPSAtZjJcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZHVtcF9sb2dfdGFpbCgpIHtcbiYjNDM7XHR0YWlsIC0yNSBcJiMzNDske0xPR31cJiMzNDsgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG9cbiYjNDM7XHRcdGt0YXBfcHJpbnRfbXNnIFwmIzM0OyR7bGluZX1cJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO31cbiYjNDM7XG4mIzQzO3NraXBfYWxsX3Rlc3RzKCkge1xuJiM0MztcdGxvY2FsIGlcbiYjNDM7XG4mIzQzO1x0Zm9yIGkgaW4gMSAyIDM7IGRvXG4mIzQzO1x0XHRrdGFwX3Rlc3Rfc2tpcCBcJiMzNDskMVwmIzM0O1xuJiM0MztcdGRvbmVcbiYjNDM7XHRrdGFwX2ZpbmlzaGVkXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgLS0gcHJlLWZsaWdodCBjaGVja3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7a3RhcF9wcmludF9oZWFkZXJcbiYjNDM7a3RhcF9zZXRfcGxhbiAzXG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO1xuJiM0MzthcmNoPVwmIzM0OyQodW5hbWUgLW0pXCYjMzQ7XG4mIzQzO2Nhc2UgXCYjMzQ7JHthcmNofVwmIzM0OyBpblxuJiM0Mzt4ODZfNjR8YWFyY2g2NCkgOztcbiYjNDM7KilcdHNraXBfYWxsX3Rlc3RzIFwmIzM0O3BjLWRpbW0gQUNQSSBob3RwbHVnIG5vdCBhdmFpbGFibGUgb24gJHthcmNofVwmIzM0OyA7O1xuJiM0Mztlc2FjXG4mIzQzO1xuJiM0Mztmb3IgZGVwIGluIHZuZyBcJiMzNDtxZW11LXN5c3RlbS0ke2FyY2h9XCYjMzQ7IGNjOyBkb1xuJiM0MztcdGlmICEgY29tbWFuZCAtdiBcJiMzNDske2RlcH1cJiMzNDsgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4mIzQzO1x0XHRza2lwX2FsbF90ZXN0cyBcJiMzNDske2RlcH0gbm90IGluc3RhbGxlZFwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO2RvbmVcbiYjNDM7XG4mIzQzOyMgLS0gcGluIGhlbHBlciAoY29tcGlsZWQgb24gdGhlIGhvc3QsIHZpc2libGUgdG8gdGhlIGd1ZXN0IHZpYSA5cCkgLS0tLS0tLS0tLS1cbiYjNDM7I1xuJiM0MzsjIEFsbG9jYXRlIG9uZSBibG9jayYjMzk7cyB3b3J0aCBvZiBwYWdlcyAoWk9ORV9NT1ZBQkxFIHNlcnZlcyB0aGVtIGZyb20gdGhlXG4mIzQzOyMgRElNTSksIGZpbmQgb25lIHRoYXQgbGFuZGVkIGluIGEgdGFyZ2V0IGJsb2NrLCB2bXNwbGljZS1waW4gaXQgaW50byBhXG4mIzQzOyMgcGlwZSwgcHJpbnQgUElOX0JMSz1cdTAwM2NOXHUwMDNlLCBhbmQgc2xlZXAgZm9yZXZlci5cbiYjNDM7XG4mIzQzO2NhdCBcdTAwM2UgXCYjMzQ7JHtQSU5fU1JDfVwmIzM0OyBcdTAwM2NcdTAwM2MmIzM5O1BJTkVPRiYjMzk7XG4mIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3Vpby5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1vcnlfYmxvY2tfc2l6ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbNjRdO1xuJiM0MztcdHNzaXplX3QgbjtcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihcJiMzNDsvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9ibG9ja19zaXplX2J5dGVzXCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0biA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKG4gXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0YnVmW25dID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDE2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgdmFkZHJfdG9fYmxvY2soaW50IHBhZ2VtYXBfZmQsIGNoYXIgKnZhZGRyLFxuJiM0MztcdFx0XHRcdCAgICBsb25nIHBhZ2Vfc2l6ZSwgdW5zaWduZWQgbG9uZyBibGtfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdnBuID0gKHVuc2lnbmVkIGxvbmcpdmFkZHIgLyBwYWdlX3NpemU7XG4mIzQzO1x0dWludDY0X3QgZW50O1xuJiM0MztcbiYjNDM7XHRpZiAocHJlYWQocGFnZW1hcF9mZCwgXHUwMDI2ZW50LCBzaXplb2YoZW50KSwgdnBuICogOCkgIT0gc2l6ZW9mKGVudCkpXG4mIzQzO1x0XHRyZXR1cm4gLTFVTDtcbiYjNDM7XHRpZiAoIShlbnQgXHUwMDI2ICgxVUxMIFx1MDAzY1x1MDAzYyA2MykpKVxuJiM0MztcdFx0cmV0dXJuIC0xVUw7XG4mIzQzO1x0cmV0dXJuIChlbnQgXHUwMDI2ICgoMVVMTCBcdTAwM2NcdTAwM2MgNTUpIC0gMSkpICogcGFnZV9zaXplIC8gYmxrX3NpemU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdGxvbmcgcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYmxrX3NpemUgPSBtZW1vcnlfYmxvY2tfc2l6ZSgpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgb2ZmLCBibGsgPSAwO1xuJiM0MztcdGNoYXIgKmFyZWEsICpwYWdlID0gTlVMTDtcbiYjNDM7XHRpbnQgcGFnZW1hcF9mZCwgcGlwZWZkWzJdLCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoYXJnYyBcdTAwM2MgMiB8fCAhYmxrX3NpemUpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDt1c2FnZTogcGluX3BhcmsgXHUwMDNjbWVtb3J5IGJsb2NrXHUwMDNlLi4uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YXJlYSA9IG1tYXAoTlVMTCwgYmxrX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4mIzQzO1x0XHQgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX1BPUFVMQVRFLCAtMSwgMCk7XG4mIzQzO1x0aWYgKGFyZWEgPT0gTUFQX0ZBSUxFRCkge1xuJiM0MztcdFx0cGVycm9yKFwmIzM0O21tYXBcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcdG1lbXNldChhcmVhLCAweDQyLCBibGtfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHBhZ2VtYXBfZmQgPSBvcGVuKFwmIzM0Oy9wcm9jL3NlbGYvcGFnZW1hcFwmIzM0OywgT19SRE9OTFkpO1xuJiM0MztcdGlmIChwYWdlbWFwX2ZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7cGFnZW1hcFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBibGtfc2l6ZSBcdTAwMjZcdTAwMjYgIXBhZ2U7IG9mZiAmIzQzOz0gcGFnZV9zaXplKSB7XG4mIzQzO1x0XHRibGsgPSB2YWRkcl90b19ibG9jayhwYWdlbWFwX2ZkLCBhcmVhICYjNDM7IG9mZiwgcGFnZV9zaXplLFxuJiM0MztcdFx0XHRcdCAgICAgYmxrX3NpemUpO1xuJiM0MztcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgYXJnYzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKGJsayA9PSBzdHJ0b3VsKGFyZ3ZbaV0sIE5VTEwsIDEwKSkge1xuJiM0MztcdFx0XHRcdHBhZ2UgPSBhcmVhICYjNDM7IG9mZjtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRjbG9zZShwYWdlbWFwX2ZkKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwYWdlKSB7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7UElOX05PTkVcXG5cJiMzNDspO1xuJiM0MztcdFx0ZmZsdXNoKHN0ZG91dCk7XG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwaXBlKHBpcGVmZCkpIHtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDtwaXBlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3RydWN0IGlvdmVjIGlvdiA9IHsgLmlvdl9iYXNlID0gcGFnZSwgLmlvdl9sZW4gPSBwYWdlX3NpemUgfTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZtc3BsaWNlKHBpcGVmZFsxXSwgXHUwMDI2aW92LCAxLCAwKSAhPSBwYWdlX3NpemUpIHtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDt2bXNwbGljZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaW50ZihcJiMzNDtQSU5fQkxLPSVsdVxcblwmIzM0OywgYmxrKTtcbiYjNDM7XHRmZmx1c2goc3Rkb3V0KTtcbiYjNDM7XHRwYXVzZSgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1BJTkVPRlxuJiM0MztcbiYjNDM7aWYgISBjYyAtTzIgLW8gXCYjMzQ7JHtQSU5fQklOfVwmIzM0OyBcJiMzNDske1BJTl9TUkN9XCYjMzQ7IDJcdTAwM2VcdTAwM2VcJiMzNDske0xPR31cJiMzNDs7IHRoZW5cbiYjNDM7XHRza2lwX2FsbF90ZXN0cyBcJiMzNDtjYW5ub3QgYnVpbGQgdGhlIHBpbiBoZWxwZXJcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzOyMgLS0gZ3Vlc3Qgc2NyaXB0IChydW5zIGFzIGluaXQgaW5zaWRlIHRoZSBWTSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzO2NhdCBcdTAwM2UgXCYjMzQ7JHtHVUVTVF9TQ1JJUFR9XCYjMzQ7IFx1MDAzY1x1MDAzY1BST0xPR1VFXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzO3JlYWRvbmx5IE1BWF9QQVNTRVM9JHtNQVhfUEFTU0VTfVxuJiM0MztyZWFkb25seSBIQU5HX0hPTEQ9JHtIQU5HX0hPTER9XG4mIzQzO3JlYWRvbmx5IFJFU0NVRV9USU1FT1VUPSR7UkVTQ1VFX1RJTUVPVVR9XG4mIzQzO3JlYWRvbmx5IFBJTl9QQVJLPVwmIzM0OyR7UElOX0JJTn1cJiMzNDtcbiYjNDM7UFJPTE9HVUVcbiYjNDM7XG4mIzQzO2NhdCBcdTAwM2VcdTAwM2UgXCYjMzQ7JHtHVUVTVF9TQ1JJUFR9XCYjMzQ7IFx1MDAzY1x1MDAzYyYjMzk7R1VFU1RFT0YmIzM5O1xuJiM0MztzZXQgLXVcbiYjNDM7XG4mIzQzO3JlYWRvbmx5IFBBUkFNPS9zeXMvbW9kdWxlL21lbW9yeV9ob3RwbHVnL3BhcmFtZXRlcnMvb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNcbiYjNDM7cmVhZG9ubHkgTUVNPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5XG4mIzQzO1xuJiM0Mztza2lwKCkgeyBlY2hvIFwmIzM0O1ZNVEVTVF9TS0lQOiAkKlwmIzM0OzsgZWNobyBcJiMzNDtWTVRFU1RfRE9ORVwmIzM0OzsgZXhpdCAwOyB9XG4mIzQzO1xuJiM0MztibG9ja19zdGF0ZSgpIHtcbiYjNDM7XHRjYXQgXCYjMzQ7JHtNRU19L21lbW9yeSR7cGlubmVkX2Jsa30vc3RhdGVcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8fCBlY2hvIEdPTkVcbiYjNDM7fVxuJiM0MztcbiYjNDM7WyAtZiBcJiMzNDske1BBUkFNfVwmIzM0OyBdIHx8IHNraXAgXCYjMzQ7a2VybmVsIGxhY2tzIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIDEuIE9ubGluZSB0aGUgRElNTSYjMzk7cyBibG9ja3MgYXMgWk9ORV9NT1ZBQkxFLlxuJiM0MztkaW1tX2Jsb2Nrcz1cJiMzNDtcJiMzNDtcbiYjNDM7Zm9yIHMgaW4gXCYjMzQ7JHtNRU19XCYjMzQ7L21lbW9yeSovc3RhdGU7IGRvXG4mIzQzO1x0WyBcJiMzNDskKGNhdCBcJiMzNDske3N9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGwpXCYjMzQ7ID0gb2ZmbGluZSBdIHx8IGNvbnRpbnVlXG4mIzQzO1x0aWYgZWNobyBvbmxpbmVfbW92YWJsZSBcdTAwM2UgXCYjMzQ7JHtzfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsOyB0aGVuXG4mIzQzO1x0XHRiPSR7cyUvc3RhdGV9XG4mIzQzO1x0XHRkaW1tX2Jsb2Nrcz1cJiMzNDske2RpbW1fYmxvY2tzfSAke2IjIyptZW1vcnl9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7ZG9uZVxuJiM0MztlY2hvIFwmIzM0OyMgRElNTSBtZW1vcnkgYmxvY2tzOiR7ZGltbV9ibG9ja3M6LSBub25lfVwmIzM0O1xuJiM0MztbIC1uIFwmIzM0OyR7ZGltbV9ibG9ja3N9XCYjMzQ7IF0gfHwgc2tpcCBcJiMzNDtubyBvZmZsaW5lIG1lbW9yeSBibG9ja3MgKHBjLWRpbW0gbWlzc2luZz8pXCYjMzQ7XG4mIzQzO1xuJiM0MzsjIDIuIFBpbiBvbmUgcGFnZSBpbnNpZGUgdGhlIERJTU0uXG4mIzQzO1wmIzM0OyR7UElOX1BBUkt9XCYjMzQ7ICR7ZGltbV9ibG9ja3N9IFx1MDAzZSAvdG1wL3Bpbi5vdXQgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4mIzQzO3Bpbl9waWQ9JCFcbiYjNDM7Zm9yIF8gaW4gJChzZXEgMSAxMCk7IGRvXG4mIzQzO1x0Z3JlcCAtcSBcJiMzNDtQSU5fXCYjMzQ7IC90bXAvcGluLm91dCAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBicmVha1xuJiM0MztcdHNsZWVwIDFcbiYjNDM7ZG9uZVxuJiM0MztwaW5uZWRfYmxrPSQoc2VkIC1uICYjMzk7cy9eUElOX0JMSz0vL3AmIzM5OyAvdG1wL3Bpbi5vdXQpXG4mIzQzO1sgLW4gXCYjMzQ7JHtwaW5uZWRfYmxrfVwmIzM0OyBdIHx8IHNraXAgXCYjMzQ7cGluIGZhaWxlZDogJChjYXQgL3RtcC9waW4ub3V0IDJcdTAwM2UvZGV2L251bGwpXCYjMzQ7XG4mIzQzO2VjaG8gXCYjMzQ7IyBwaW5uZWQgb25lIHBhZ2UgaW4gYmxvY2sgbWVtb3J5JHtwaW5uZWRfYmxrfVwmIzM0O1xuJiM0MztcbiYjNDM7IyAzLiBFamVjdCB0aGUgRElNTSB3aXRoIHRoZSByZXRyeSBsaW1pdCBkaXNhYmxlZCAoZGVmYXVsdCA9IHVuYm91bmRlZCkuXG4mIzQzO2VjaG8gMCBcdTAwM2UgXCYjMzQ7JHtQQVJBTX1cJiMzNDtcbiYjNDM7ZG1lc2cgLWMgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fCB0cnVlXG4mIzQzO1xuJiM0MztlamRldj1cJiMzNDtcJiMzNDtcbiYjNDM7Zm9yIGRldiBpbiAvc3lzL2J1cy9hY3BpL2RldmljZXMvUE5QMEM4MDoqOyBkb1xuJiM0MztcdFsgLWUgXCYjMzQ7JHtkZXZ9L2VqZWN0XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IHsgZWpkZXY9XCYjMzQ7JHtkZXZ9XCYjMzQ7OyBicmVhazsgfVxuJiM0Mztkb25lXG4mIzQzO1sgLW4gXCYjMzQ7JHtlamRldn1cJiMzNDsgXSB8fCBza2lwIFwmIzM0O25vIGVqZWN0YWJsZSBBQ1BJIG1lbW9yeSBkZXZpY2UgKFBOUDBDODApXCYjMzQ7XG4mIzQzO2VjaG8gXCYjMzQ7IyBlamVjdGluZyAke2VqZGV2fVwmIzM0O1xuJiM0MztlY2hvIDEgXHUwMDNlIFwmIzM0OyR7ZWpkZXZ9L2VqZWN0XCYjMzQ7IFx1MDAyNlxuJiM0MztcbiYjNDM7IyA0LiBPYnNlcnZlIHRoZSBoYW5nOiB0aGUgYmxvY2sgbXVzdCBzdGF5IGluIFwmIzM0O2dvaW5nLW9mZmxpbmVcJiMzNDsuXG4mIzQzO3NsZWVwIDNcbiYjNDM7c3R1Y2s9MFxuJiM0MztpZiBbIFwmIzM0OyQoYmxvY2tfc3RhdGUpXCYjMzQ7ID0gZ29pbmctb2ZmbGluZSBdOyB0aGVuXG4mIzQzO1x0ZWNobyBcJiMzNDsjIGJsb2NrIG1lbW9yeSR7cGlubmVkX2Jsa30gZ29pbmctb2ZmbGluZSwgaG9sZGluZyAke0hBTkdfSE9MRH1zXCYjMzQ7XG4mIzQzO1x0c2xlZXAgXCYjMzQ7JHtIQU5HX0hPTER9XCYjMzQ7XG4mIzQzO1x0aWYgWyBcJiMzNDskKGJsb2NrX3N0YXRlKVwmIzM0OyA9IGdvaW5nLW9mZmxpbmUgXTsgdGhlblxuJiM0MztcdFx0c3R1Y2s9MVxuJiM0MztcdFx0ZWNobyAxIFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL3N5c3JxIDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuJiM0MztcdFx0ZWNobyBsIFx1MDAzZSAvcHJvYy9zeXNycS10cmlnZ2VyIDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuJiM0MztcdFx0c2xlZXAgMVxuJiM0MztcdFx0ZG1lc2cgfCBncmVwIC1CMiAtQTEyIFwmIzM0O29mZmxpbmVfcGFnZXNcJiMzNDsgfCB0YWlsIC0yMCBcXFxuJiM0MztcdFx0XHR8IHNlZCAmIzM5O3MvXi8jICAvJiMzOTtcbiYjNDM7XHRmaVxuJiM0MztmaVxuJiM0MztlY2hvIFwmIzM0O1ZNVEVTVF9TVFVDSz0ke3N0dWNrfVwmIzM0O1xuJiM0MztcbiYjNDM7IyA1LiBSZXNjdWU6IGFybSB0aGUgcmV0cnkgbGltaXQgYXQgcnVudGltZSBhbmQgd2FpdCBmb3IgYmFpbG91dC5cbiYjNDM7ZWNobyBcJiMzNDske01BWF9QQVNTRVN9XCYjMzQ7IFx1MDAzZSBcJiMzNDske1BBUkFNfVwmIzM0O1xuJiM0MztlY2hvIFwmIzM0OyMgYXJtZWQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9JChjYXQgXCYjMzQ7JHtQQVJBTX1cJiMzNDspXCYjMzQ7XG4mIzQzO1xuJiM0MztyZXNjdWVkPTBcbiYjNDM7Zm9yIF8gaW4gJChzZXEgMSBcJiMzNDske1JFU0NVRV9USU1FT1VUfVwmIzM0Oyk7IGRvXG4mIzQzO1x0aWYgZG1lc2cgfCBncmVwIC1xIFwmIzM0O2dpdmluZyB1cCBhZnRlclwmIzM0OzsgdGhlblxuJiM0MztcdFx0cmVzY3VlZD0xXG4mIzQzO1x0XHRicmVha1xuJiM0MztcdGZpXG4mIzQzO1x0c2xlZXAgMVxuJiM0Mztkb25lXG4mIzQzO2RtZXNnIHwgZ3JlcCBcJiMzNDtnaXZpbmcgdXAgYWZ0ZXJcJiMzNDsgfCB0YWlsIC0yIHwgc2VkICYjMzk7cy9eLyMgLyYjMzk7XG4mIzQzO2VjaG8gXCYjMzQ7Vk1URVNUX1JFU0NVRUQ9JHtyZXNjdWVkfVwmIzM0O1xuJiM0MztcbiYjNDM7c2xlZXAgMlxuJiM0MztlY2hvIFwmIzM0O1ZNVEVTVF9CTE9DS19TVEFURT0kKGJsb2NrX3N0YXRlKVwmIzM0O1xuJiM0MztcbiYjNDM7a2lsbCBcJiMzNDske3Bpbl9waWR9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7ZWNobyBcJiMzNDtWTVRFU1RfRE9ORVwmIzM0O1xuJiM0MztHVUVTVEVPRlxuJiM0MztcbiYjNDM7IyAtLSBsYXVuY2ggVk0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7KCBjZCBcJiMzNDske0tFUk5FTF9DSEVDS09VVH1cJiMzNDsgXHUwMDI2XHUwMDI2IGV4ZWMgdm5nIC0tZm9yY2UtOXAgLS1uby12aXJ0bWUtbmctaW5pdCBcXFxuJiM0MztcdC0tcWVtdS1vcHQ9LW0gLS1xZW11LW9wdD1cJiMzNDsyRyxzbG90cz00LG1heG1lbT04R1wmIzM0OyBcXFxuJiM0MztcdC0tcWVtdS1vcHQ9LW9iamVjdCBcXFxuJiM0MztcdC0tcWVtdS1vcHQ9XCYjMzQ7bWVtb3J5LWJhY2tlbmQtcmFtLGlkPW1lbTAsc2l6ZT0ke0RJTU1fU0laRX1cJiMzNDsgXFxcbiYjNDM7XHQtLXFlbXUtb3B0PS1kZXZpY2UgLS1xZW11LW9wdD1cJiMzNDtwYy1kaW1tLGlkPWRpbW0wLG1lbWRldj1tZW0wXCYjMzQ7IFxcXG4mIzQzO1x0YmFzaCBcJiMzNDske0dVRVNUX1NDUklQVH1cJiMzNDsgKSBcdTAwM2UgXCYjMzQ7JHtMT0d9XCYjMzQ7IDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuJiM0MztWTkdfUElEPSQhXG4mIzQzO1xuJiM0Mztmb3IgXyBpbiAkKHNlcSAxIFwmIzM0OyR7Qk9PVF9USU1FT1VUfVwmIzM0Oyk7IGRvXG4mIzQzO1x0Z3JlcCAtcSBcJiMzNDtWTVRFU1RfRE9ORVwmIzM0OyBcJiMzNDske0xPR31cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCBcdTAwMjZcdTAwMjYgYnJlYWtcbiYjNDM7XHRraWxsIC0wIFwmIzM0OyR7Vk5HX1BJRH1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8fCBicmVha1xuJiM0MztcdHNsZWVwIDFcbiYjNDM7ZG9uZVxuJiM0MztcbiYjNDM7aWYgISBncmVwIC1xIFwmIzM0O1ZNVEVTVF9ET05FXCYjMzQ7IFwmIzM0OyR7TE9HfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsOyB0aGVuXG4mIzQzO1x0ZHVtcF9sb2dfdGFpbFxuJiM0MztcdHNraXBfYWxsX3Rlc3RzIFwmIzM0O1ZNIGRpZCBub3QgZmluaXNoIHdpdGhpbiAke0JPT1RfVElNRU9VVH1zXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztraWxsIFwmIzM0OyR7Vk5HX1BJRH1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0Mzt3YWl0IFwmIzM0OyR7Vk5HX1BJRH1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztWTkdfUElEPVwmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7IyAtLSByZXBvcnQgcmVzdWx0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7c2tpcF9yZWFzb249XCYjMzQ7JChncmVwIFwmIzM0O15WTVRFU1RfU0tJUDogXCYjMzQ7IFwmIzM0OyR7TE9HfVwmIzM0OyB8IHRhaWwgLTEgfCB0ciAtZCAmIzM5O1xcciYjMzk7KVwmIzM0O1xuJiM0MztpZiBbIC1uIFwmIzM0OyR7c2tpcF9yZWFzb259XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRza2lwX2FsbF90ZXN0cyBcJiMzNDske3NraXBfcmVhc29uI1ZNVEVTVF9TS0lQOiB9XCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztncmVwIFwmIzM0O14jXCYjMzQ7IFwmIzM0OyR7TE9HfVwmIzM0OyB8IHRyIC1kICYjMzk7XFxyJiMzOTsgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG9cbiYjNDM7XHRrdGFwX3ByaW50X21zZyBcJiMzNDske2xpbmUjXFwjIH1cJiMzNDtcbiYjNDM7ZG9uZVxuJiM0MztcbiYjNDM7c3R1Y2s9XCYjMzQ7JChndWVzdF9yZXN1bHQgVk1URVNUX1NUVUNLKVwmIzM0O1xuJiM0MztyZXNjdWVkPVwmIzM0OyQoZ3Vlc3RfcmVzdWx0IFZNVEVTVF9SRVNDVUVEKVwmIzM0O1xuJiM0MztibGtfc3RhdGU9XCYjMzQ7JChndWVzdF9yZXN1bHQgVk1URVNUX0JMT0NLX1NUQVRFKVwmIzM0O1xuJiM0MztcbiYjNDM7aWYgWyBcJiMzNDske2Jsa19zdGF0ZTotR09ORX1cJiMzNDsgPSBcJiMzNDtHT05FXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRza2lwX2FsbF90ZXN0cyBcJiMzNDtESU1NIHdhcyBlamVjdGVkIGRlc3BpdGUgdGhlIHBpbiAocGluIGRpZCBub3QgaG9sZClcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2lmIFsgXCYjMzQ7JHtzdHVjazotMH1cJiMzNDsgPSAxIF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDtBQ1BJIGVqZWN0IGt3b3JrZXIgaGFuZ3MgdW5ib3VuZGVkIGluIG9mZmxpbmVfcGFnZXMoKVwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0ZHVtcF9sb2dfdGFpbFxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O0FDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyR7cmVzY3VlZDotMH1cJiMzNDsgPSAxIF07IHRoZW5cbiYjNDM7XHRrdGFwX3Rlc3RfcGFzcyBcJiMzNDtzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1wmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0ZHVtcF9sb2dfdGFpbFxuJiM0MztcdGt0YXBfdGVzdF9mYWlsIFwmIzM0O3N0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyR7YmxrX3N0YXRlfVwmIzM0OyA9IFwmIzM0O29ubGluZVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7bWVtb3J5IGJsb2NrIG9ubGluZSBhbmQgdXNhYmxlIGFmdGVyIHRoZSBiYWlsb3V0XCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDttZW1vcnkgYmxvY2sgb25saW5lIGFuZCB1c2FibGUgYWZ0ZXIgdGhlIGJhaWxvdXQgKHN0YXRlPSR7YmxrX3N0YXRlfSlcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2t0YXBfZmluaXNoZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGhvdHBsdWcgbG9naWMgaW4gYG9mZmxpbmVfcGFnZXNgIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiBtZW1vcnkgaXMgb2ZmbGluZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUzMGIzMjE0NTI4NmY2NTNmZWM0YjE5NDVlZGQ3OTkyMTIyMGJhZmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyMyAwMjoyNzowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggNTNmMDg5NTBhNjMwOTYuLjkwYjY3YzQ1N2MyYTgyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMzk4MCw2ICYjNDM7Mzk4MCwyMCBAQCBLZXJuZWwgcGFyYW1ldGVycwogCQkJTm90ZSB0aGF0IGV2ZW4gd2hlbiBlbmFibGVkLCB0aGVyZSBhcmUgYSBmZXcgY2FzZXMgd2hlcmUKIAkJCXRoZSBmZWF0dXJlIGlzIG5vdCBlZmZlY3RpdmUuCiAKJiM0MzsJbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9CiYjNDM7CQkJW0tOTF0gTWF4aW11bSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3NlcwomIzQzOwkJCWZvciBtZW1vcnkgb2ZmbGluaW5nLgomIzQzOwkJCUZvcm1hdDogJmx0O2ludGVnZXImZ3Q7CiYjNDM7CQkJZGVmYXVsdDogMCAobm8gbGltaXQsIGhpc3RvcmljYWwgYmVoYXZpb3VyKQomIzQzOwkJCVdoZW4gbm9uLXplcm8sIG1lbW9yeSBvZmZsaW5pbmcgZ2l2ZXMgdXAgd2l0aAomIzQzOwkJCS1FQlVTWSBhZnRlciB0aGlzIG1hbnkgbWlncmF0aW9uIHBhc3NlcyBvdmVyCiYjNDM7CQkJdGhlIHJhbmdlLCBpbnN0ZWFkIG9mIHJldHJ5aW5nIGZvcmV2ZXIgb24gYQomIzQzOwkJCXN0dWNrIHBhZ2UuICBFYWNoIHBhc3Mgc2NhbnMgdGhlIHJhbmdlIGFuZAomIzQzOwkJCW1pZ3JhdGVzIHdoYXQgaXQgY2FuLgomIzQzOwkJCVRoZSBwYXJhbWV0ZXIgaXMgcmUtcmVhZCBvbiBldmVyeSBwYXNzLCBzbyBhbgomIzQzOwkJCW9mZmxpbmUgcmVxdWVzdCB0aGF0IGlzIGFscmVhZHkgc3R1Y2sgY2FuIGJlCiYjNDM7CQkJcmVzY3VlZCBhdCBydW50aW1lIGJ5IHdyaXRpbmcgdGhlIHBhcmFtZXRlci4KJiM0MzsKIAltZW10ZXN0PQlbS05MLFg4NixBUk0sTTY4SyxQUEMsUklTQ1YsRUFSTFldIEVuYWJsZSBtZW10ZXN0CiAJCQlGb3JtYXQ6ICZsdDtpbnRlZ2VyJmd0OwogCQkJZGVmYXVsdCA6IDAgJmx0O2Rpc2FibGUmZ3Q7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0CmluZGV4IDAyMDdmODcyNTE0MjFjLi43OWI0NTEwOWM0MDhjOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QKQEAgLTIyNCw3ICYjNDM7MjI0LDEwIEBAIGluY3JlYXNlcyBtZW1vcnkgb2ZmbGluaW5nIHJlbGlhYmlsaXR5OyBzdGlsbCwgbWVtb3J5IG9mZmxpbmluZyBjYW4gZmFpbCBpbgogc29tZSBjb3JuZXIgY2FzZXMuCiAKIEZ1cnRoZXIsIG1lbW9yeSBvZmZsaW5pbmcgbWlnaHQgcmV0cnkgZm9yIGEgbG9uZyB0aW1lIChvciBldmVuIGZvcmV2ZXIpLCB1bnRpbAotYWJvcnRlZCBieSB0aGUgdXNlci4KJiM0MzthYm9ydGVkIGJ5IHRoZSB1c2VyLiAgVGhlIGBgbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNgYAomIzQzO3BhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBib3VuZCB0aGUgbnVtYmVyIG9mIHJldHJ5IHBhc3NlcywgbWFraW5nIGFuIG9mZmxpbmUKJiM0MztyZXF1ZXN0IHRoYXQgY2Fubm90IG1ha2UgcHJvZ3Jlc3MgZmFpbCB3aXRoIGBgLUVCVVNZYGAgaW5zdGVhZCBvZiByZXRyeWluZwomIzQzO2luZGVmaW5pdGVseSAoc2VlIGBNb2R1bGUgUGFyYW1ldGVyc2BfKS4KIAogT2ZmbGluaW5nIG9mIGEgbWVtb3J5IGJsb2NrIGNhbiBiZSB0cmlnZ2VyZWQgdmlhOjoKIApAQCAtNTQ3LDYgJiM0Mzs1NTAsMjcgQEAgVGhlIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVycyBhcmUgY3VycmVudGx5IGRlZmluZWQ6CiAJCQkJIHBvc3NpYmxlLgogCiAJCQkJIFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvbiBDT05GSUdfTlVNQS4KJiM0MztgYG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYGAJIHJlYWQtd3JpdGU6IE1heGltdW0gbnVtYmVyIG9mIG1pZ3JhdGlvbgomIzQzOwkJCQkgcGFzc2VzIGZvciBhIHNpbmdsZSBtZW1vcnkgb2ZmbGluZQomIzQzOwkJCQkgcmVxdWVzdC4gIE1lbW9yeSBvZmZsaW5pbmcgcmV0cmllcyB0bwomIzQzOwkJCQkgbWlncmF0ZSBhbmQgaXNvbGF0ZSBwYWdlcyB1bnRpbCBpdCBzdWNjZWVkczsKJiM0MzsJCQkJIGEgcGFnZSB0aGF0IGNhbiBuZXZlciBiZSBtaWdyYXRlZCBvciBmcmVlZAomIzQzOwkJCQkgbWFrZXMgaXQgcmV0cnkgZm9yZXZlci4gIFdoZW4gdGhpcyBwYXJhbWV0ZXIKJiM0MzsJCQkJIGlzIG5vbi16ZXJvLCBhbiBvZmZsaW5lIHJlcXVlc3QgZ2l2ZXMgdXAKJiM0MzsJCQkJIHdpdGggYGAtRUJVU1lgYCBhZnRlciB0aGUgY29uZmlndXJlZCBudW1iZXIKJiM0MzsJCQkJIG9mIG1pZ3JhdGlvbiBwYXNzZXMgYW5kIHRoZSBtZW1vcnkgYmxvY2sKJiM0MzsJCQkJIHN0YXlzIG9ubGluZS4KJiM0MzsKJiM0MzsJCQkJIFRoZSBwYXJhbWV0ZXIgaXMgcmUtcmVhZCBvbiBldmVyeSBwYXNzLCBzbwomIzQzOwkJCQkgYW4gb2ZmbGluZSByZXF1ZXN0IHRoYXQgaXMgYWxyZWFkeSBzdHVjawomIzQzOwkJCQkgcmV0cnlpbmcgY2FuIGJlIHJlc2N1ZWQgYXQgcnVudGltZSBieQomIzQzOwkJCQkgd3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlLCB3aXRob3V0IGEgcmVib290LgomIzQzOwomIzQzOwkJCQkgVGhlIGRlZmF1bHQgaXMgJiMzNDswJiMzNDssIG1lYW5pbmcgbm8gbGltaXQgKHRoZQomIzQzOwkJCQkgaGlzdG9yaWNhbCBiZWhhdmlvdXIpLgomIzQzOwomIzQzOwkJCQkgUGFyYW1ldGVyIGF2YWlsYWJpbGl0eSBkZXBlbmRzIG9uCiYjNDM7CQkJCSBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRS4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFpPTkVfTU9WQUJMRQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggMjI2YWI5Y2IwNzhhZDEuLjkwNjc4MjkzNDlhMGRhIDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTE3ODUsNiAmIzQzOzE3ODUsMTIgQEAgYm9vbCBtaHBfcmFuZ2VfYWxsb3dlZCh1NjQgc3RhcnQsIHU2NCBzaXplLCBib29sIG5lZWRfbWFwcGluZykKIH0KIAogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFCiYjNDM7LyogTWF4IG9mZmxpbmVfcGFnZXMoKSBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSAtRUJVU1k7IDAgPSByZXRyeSBmb3JldmVyLiAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgX19yZWFkX21vc3RseTsKJiM0Mzttb2R1bGVfcGFyYW0ob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMsIHVpbnQsIDA2NDQpOwomIzQzO01PRFVMRV9QQVJNX0RFU0Mob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMsCiYjNDM7CSYjMzQ7TWF4IG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIG1lbW9yeSBvZmZsaW5lIGdpdmVzIHVwICgwID0gbm8gbGltaXQpJiMzNDspOwomIzQzOwogLyoKICAqIFNjYW4gcGZuIHJhbmdlIFtzdGFydCxlbmQpIHRvIGZpbmQgbW92YWJsZS9taWdyYXRhYmxlIHBhZ2VzIChMUlUgYW5kCiAgKiBodWdldGxiIGZvbGlvLCBtb3ZhYmxlX29wcyBwYWdlcykuIFdpbGwgc2tpcCBvdmVyIG1vc3QgdW5tb3ZhYmxlCkBAIC0xOTY2LDYgJiM0MzsxOTcyLDggQEAgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCiAJc3RydWN0IG5vZGVfbm90aWZ5IG5vZGVfYXJnID0gewogCQkubmlkID0gTlVNQV9OT19OT0RFLAogCX07CiYjNDM7CXVuc2lnbmVkIGludCBtYXhfcGFzc2VzOwomIzQzOwl1bnNpZ25lZCBpbnQgcGFzcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljaGFyICpyZWFzb247CiAJaW50IHJldDsKQEAgLTIwNjIsNiAmIzQzOzIwNzAsMzYgQEAgaW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCiAJCQkJZ290byBmYWlsZWRfcmVtb3ZhbF9pc29sYXRlZDsKIAkJCX0KIAomIzQzOwkJCS8qCiYjNDM7CQkJICogQSBwYWdlIHRoYXQgY2FuIG5ldmVyIGJlIG1pZ3JhdGVkIChlLmcuIGEKJiM0MzsJCQkgKiBsb25nLXRlcm0gcGluKSBtYWtlcyB0aGlzIGxvb3AgcmV0cnkgZm9yZXZlci4KJiM0MzsJCQkgKiBHaXZlIHVwIGFmdGVyIHRoZSBjb25maWd1cmVkIG51bWJlciBvZiBwYXNzZXMuCiYjNDM7CQkJICogVGhlIGxpbWl0IGlzIHJlLXJlYWQgb24gZXZlcnkgcGFzcyBzbyB0aGF0IGFuCiYjNDM7CQkJICogb2ZmbGluZSByZXF1ZXN0IHRoYXQgaXMgYWxyZWFkeSBzdHVjayBoZXJlIGNhbgomIzQzOwkJCSAqIGJlIGFib3J0ZWQgYXQgcnVudGltZSBieSB3cml0aW5nIHRoZSBwYXJhbWV0ZXIsCiYjNDM7CQkJICogd2hpY2ggbWF0dGVycyBmb3IgaW4ta2VybmVsIGNhbGxlcnMgKGUuZy4gQUNQSQomIzQzOwkJCSAqIERJTU0gaG90LXVucGx1ZykgdGhhdCBydW4gb24ga3dvcmtlcnMgYW5kIGNhbgomIzQzOwkJCSAqIG5ldmVyIGJlIGFib3J0ZWQgYnkgYSBzaWduYWwuCiYjNDM7CQkJICovCiYjNDM7CQkJbWF4X3Bhc3NlcyA9IFJFQURfT05DRShvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlcyk7CiYjNDM7CQkJaWYgKG1heF9wYXNzZXMgJmFtcDsmYW1wOyBwYXNzJiM0MzsmIzQzOyAmZ3Q7PSBtYXhfcGFzc2VzKSB7CiYjNDM7CQkJCXByX3dhcm4oJiMzNDttZW1vcnkgb2ZmbGluaW5nIFttZW0gJSMwMTBsbHgtJSMwMTBsbHhdOiBnaXZpbmcgdXAgYWZ0ZXIgJXUgcGFzc2VzXG4mIzM0OywKJiM0MzsJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc3RhcnRfcGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsCiYjNDM7CQkJCQkoKHVuc2lnbmVkIGxvbmcgbG9uZyllbmRfcGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQpIC0gMSwKJiM0MzsJCQkJCXBhc3MgLSAxKTsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogRHVtcCB0aGUgcGFnZSB3ZSBsYXN0IHN0b3BwZWQgYXQgYXMgYQomIzQzOwkJCQkgKiBkaWFnbm9zdGljIGhpbnQ6IHVzdWFsbHkgdGhlIHN0dWNrIHBhZ2UsCiYjNDM7CQkJCSAqIGJ1dCBqdXN0IHRoZSByYW5nZSBzdGFydCBhZnRlciBhIHJlc3RhcnQuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlpZiAocGZuICZndDs9IHN0YXJ0X3BmbiAmYW1wOyZhbXA7IHBmbiAmbHQ7IGVuZF9wZm4pCiYjNDM7CQkJCQlkdW1wX3BhZ2UocGZuX3RvX3BhZ2UocGZuKSwKJiM0MzsJCQkJCQkgICYjMzQ7bWVtb3J5IG9mZmxpbmUgcmV0cnkgbGltaXQmIzM0Oyk7CiYjNDM7CQkJCXJldCA9IC1FQlVTWTsKJiM0MzsJCQkJcmVhc29uID0gJiMzNDtyZXRyeSBsaW1pdCBleGNlZWRlZCYjMzQ7OwomIzQzOwkJCQlnb3RvIGZhaWxlZF9yZW1vdmFsX2lzb2xhdGVkOwomIzQzOwkJCX0KJiM0MzsKIAkJCWNvbmRfcmVzY2hlZCgpOwogCiAJCQlyZXQgPSBzY2FuX21vdmFibGVfcGFnZXMocGZuLCBlbmRfcGZuLCAmYW1wO3Bmbik7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCmluZGV4IGVhZTUwNGJkOTRjODNhLi5lMTEzZjNmZjQ2NTU5NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKQEAgLTE3Nyw2ICYjNDM7MTc3LDkgQEAgVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF92bWFsbG9jLnNoCiAjIERlc3RydWN0aXZlOiBldmVyeSBzdWNjZXNzZnVsIHJ1biBwYW5pY3MgdGhlIGtlcm5lbC4gIEluc3RhbGxlZCBhbmQKICMga2VwdCBleGVjdXRhYmxlLCBidXQgbm90IHJ1biBmcm9tIGEgZGVmYXVsdCBrc2VsZnRlc3QgaW52b2NhdGlvbi4KIFRFU1RfUFJPR1NfRVhURU5ERUQgJiM0Mzs9IGh3cG9pc29uLXBhbmljLnNoCiYjNDM7IyBTcGF3bnMgaXRzIG93biBWTSAodmlydG1lLW5nKTsgbm90IHJ1biBmcm9tIGEgZGVmYXVsdCBrc2VsZnRlc3QKJiM0MzsjIGludm9jYXRpb24uCiYjNDM7VEVTVF9QUk9HU19FWFRFTkRFRCAmIzQzOz0gdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoCiAKIFRFU1RfRklMRVMgOj0gdGVzdF92bWFsbG9jLnNoCiBURVNUX0ZJTEVTICYjNDM7PSB0ZXN0X2htbS5zaApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnCmluZGV4IDA2Zjc4YmQyMzJlMmUzLi5kMjJmNjNlYjljMmM5ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZwpAQCAtMTQsMyAmIzQzOzE0LDYgQEAgQ09ORklHX1VQUk9CRVM9eQogQ09ORklHX01FTU9SWV9GQUlMVVJFPXkKIENPTkZJR19IV1BPSVNPTl9JTkpFQ1Q9bQogQ09ORklHX1BST0NfTUVNX0FMV0FZU19GT1JDRT15CiYjNDM7Q09ORklHX01FTU9SWV9IT1RQTFVHPXkKJiM0MztDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15CiYjNDM7Q09ORklHX0FDUElfSE9UUExVR19NRU1PUlk9eQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jMjExYTBlN2NhYTJkMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaApAQCAtMCwwICYjNDM7MSwzNjkgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBUZXN0IG1lbW9yeV9ob3RwbHVnLm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzIGJ5IHJlcHJvZHVjaW5nIHRoZSBBQ1BJCiYjNDM7IyBtZW1vcnkgaG90LXVucGx1ZyBoYW5nIGluIGt3b3JrZXIgY29udGV4dCBhbmQgdmVyaWZ5aW5nIHRoYXQgdGhlIHJldHJ5CiYjNDM7IyBsaW1pdCByZWNvdmVycyBmcm9tIGl0LgomIzQzOyMKJiM0MzsjIG9mZmxpbmVfcGFnZXMoKSByZXRyaWVzIHBhZ2UgbWlncmF0aW9uIGluIGFuIHVuYm91bmRlZCBsb29wLiAgQSBwYWdlCiYjNDM7IyB0aGF0IGNhbiBuZXZlciBiZSBtaWdyYXRlZCAobG9uZy10ZXJtIHBpbiwgc2xhYiwgYnVzeSBtZXRhZGF0YSkgbWFrZXMKJiM0MzsjIHRoZSBsb29wIHNwaW4gZm9yZXZlci4gIFVzZXJzcGFjZS1kcml2ZW4gb2ZmbGluZXMgY2FuIGJlIGludGVycnVwdGVkIGJ5CiYjNDM7IyBhIHNpZ25hbCwgYnV0IGFuIEFDUEkgRElNTSBlamVjdCBydW5zIG9uIHRoZSBrYWNwaV9ob3RwbHVnX3dxIGt3b3JrZXIKJiM0MzsjIHdoZXJlIHNpZ25hbF9wZW5kaW5nKCkgbmV2ZXIgZmlyZXMsIHNvIHRoZSBrd29ya2VyIGhhbmdzIHVudGlsIHJlYm9vdC4KJiM0MzsjCiYjNDM7IyBGbG93OgomIzQzOyMgICAxLiBCb290IHRoZSBqdXN0LWJ1aWx0IGtlcm5lbCAodmlydG1lLW5nKSB3aXRoIGEgY29sZC1wbHVnZ2VkIHBjLWRpbW0uCiYjNDM7IyAgIDIuIE9ubGluZSB0aGUgRElNTSYjMzk7cyBibG9ja3MgYXMgWk9ORV9NT1ZBQkxFLgomIzQzOyMgICAzLiBQaW4gb25lIHBhZ2Ugb2YgdGhlIERJTU0gKHZtc3BsaWNlIGxvbmctdGVybSBwaW4pLgomIzQzOyMgICA0LiBFamVjdCB0aGUgRElNTSB2aWEgc3lzZnM7IG9mZmxpbmUgcnVucyBvbiBrYWNwaV9ob3RwbHVnX3dxLgomIzQzOyMgICA1LiBPYnNlcnZlIHRoZSBoYW5nIChnb2luZy1vZmZsaW5lIHBlcnNpc3RzKS4KJiM0MzsjICAgNi4gUmVzY3VlOiB3cml0ZSBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcyBhdCBydW50aW1lLCB2ZXJpZnkgYmFpbG91dC4KJiM0MzsjCiYjNDM7IyBUQVAgc3VidGVzdHM6CiYjNDM7IyAgIDEgIEFDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpCiYjNDM7IyAgIDIgIHN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzCiYjNDM7IyAgIDMgIG1lbW9yeSBibG9jayBvbmxpbmUgYW5kIHVzYWJsZSBhZnRlciB0aGUgYmFpbG91dAomIzQzOyMKJiM0MzsjIERlcGVuZGVuY2llczogdmlydG1lLW5nICh2bmcpLCBxZW11LXN5c3RlbS0mbHQ7YXJjaCZndDssIGNjLgomIzQzOyMgU0tJUHMgKG5ldmVyIEZBSUxzKSB3aGVuIHRvb2xpbmcgb3Iga2VybmVsIHN1cHBvcnQgaXMgbWlzc2luZy4KJiM0MzsKJiM0MztyZWFkb25seSBTQ1JJUFRfRElSPSYjMzQ7JChjZCAtUCAtLSAmIzM0OyQoZGlybmFtZSAtLSAmIzM0OyR7QkFTSF9TT1VSQ0VbMF19JiMzNDspJiMzNDsgJmFtcDsmYW1wOyBwd2QgLVApJiMzNDsKJiM0MztyZWFkb25seSBLRVJORUxfQ0hFQ0tPVVQ9JiMzNDskKHJlYWxwYXRoICYjMzQ7JHtTQ1JJUFRfRElSfSYjMzQ7Ly4uLy4uLy4uLy4uLykmIzM0OwomIzQzOwomIzQzOyMgc2hlbGxjaGVjayBzb3VyY2U9Li4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaAomIzQzO3NvdXJjZSAmIzM0OyR7U0NSSVBUX0RJUn0mIzM0Oy8uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoCiYjNDM7CiYjNDM7cmVhZG9ubHkgRElNTV9TSVpFPSYjMzQ7JHtESU1NX1NJWkU6LTI1Nk19JiMzNDsKJiM0MztyZWFkb25seSBNQVhfUEFTU0VTPSYjMzQ7JHtNQVhfUEFTU0VTOi01MH0mIzM0OwomIzQzO3JlYWRvbmx5IEhBTkdfSE9MRD0mIzM0OyR7SEFOR19IT0xEOi0xMH0mIzM0OwomIzQzO3JlYWRvbmx5IFJFU0NVRV9USU1FT1VUPSYjMzQ7JHtSRVNDVUVfVElNRU9VVDotMzB9JiMzNDsKJiM0MztyZWFkb25seSBCT09UX1RJTUVPVVQ9JiMzNDske0JPT1RfVElNRU9VVDotMjQwfSYjMzQ7CiYjNDM7CiYjNDM7cmVhZG9ubHkgTE9HPSYjMzQ7JChta3RlbXAgL3RtcC92bXRlc3RfbWhwX1hYWFhYWC5sb2cpJiMzNDsKJiM0MztyZWFkb25seSBHVUVTVF9TQ1JJUFQ9JiMzNDskKG1rdGVtcCAvdG1wL3ZtdGVzdF9taHBfZ3Vlc3RfWFhYWFhYLnNoKSYjMzQ7CiYjNDM7cmVhZG9ubHkgUElOX1NSQz0mIzM0OyQobWt0ZW1wIC90bXAvdm10ZXN0X21ocF9waW5fWFhYWFhYLmMpJiMzNDsKJiM0MzsjIE11c3QgbGl2ZSBpbiB0aGUga2VybmVsIHRyZWUgc28gdGhlIGd1ZXN0IHNlZXMgaXQgdGhyb3VnaCB0aGUgOXAgcm9vdGZzLgomIzQzO3JlYWRvbmx5IFBJTl9CSU49JiMzNDske1NDUklQVF9ESVJ9Ly52bXRlc3RfcGluX3BhcmsuJCQmIzM0OwomIzQzOwomIzQzO1ZOR19QSUQ9JiMzNDsmIzM0OwomIzQzOwomIzQzO2NsZWFudXAoKSB7CiYjNDM7CVsgLW4gJiMzNDske1ZOR19QSUR9JiMzNDsgXSAmYW1wOyZhbXA7IGtpbGwgJiMzNDske1ZOR19QSUR9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJcm0gLWYgJiMzNDske0xPR30mIzM0OyAmIzM0OyR7R1VFU1RfU0NSSVBUfSYjMzQ7ICYjMzQ7JHtQSU5fU1JDfSYjMzQ7ICYjMzQ7JHtQSU5fQklOfSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2d1ZXN0X3Jlc3VsdCgpIHsKJiM0MzsJZ3JlcCAtbyAmIzM0O14kezF9PVtBLVphLXowLTlfLV0qJiMzNDsgJiMzNDske0xPR30mIzM0OyB8IHRhaWwgLTEgfCBjdXQgLWQ9IC1mMgomIzQzO30KJiM0MzsKJiM0MztkdW1wX2xvZ190YWlsKCkgewomIzQzOwl0YWlsIC0yNSAmIzM0OyR7TE9HfSYjMzQ7IHwgd2hpbGUgSUZTPSByZWFkIC1yIGxpbmU7IGRvCiYjNDM7CQlrdGFwX3ByaW50X21zZyAmIzM0OyR7bGluZX0mIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzO3NraXBfYWxsX3Rlc3RzKCkgewomIzQzOwlsb2NhbCBpCiYjNDM7CiYjNDM7CWZvciBpIGluIDEgMiAzOyBkbwomIzQzOwkJa3RhcF90ZXN0X3NraXAgJiMzNDskMSYjMzQ7CiYjNDM7CWRvbmUKJiM0MzsJa3RhcF9maW5pc2hlZAomIzQzO30KJiM0MzsKJiM0MzsjIC0tIHByZS1mbGlnaHQgY2hlY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsKJiM0MztrdGFwX3ByaW50X2hlYWRlcgomIzQzO2t0YXBfc2V0X3BsYW4gMwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7YXJjaD0mIzM0OyQodW5hbWUgLW0pJiMzNDsKJiM0MztjYXNlICYjMzQ7JHthcmNofSYjMzQ7IGluCiYjNDM7eDg2XzY0fGFhcmNoNjQpIDs7CiYjNDM7KikJc2tpcF9hbGxfdGVzdHMgJiMzNDtwYy1kaW1tIEFDUEkgaG90cGx1ZyBub3QgYXZhaWxhYmxlIG9uICR7YXJjaH0mIzM0OyA7OwomIzQzO2VzYWMKJiM0MzsKJiM0Mztmb3IgZGVwIGluIHZuZyAmIzM0O3FlbXUtc3lzdGVtLSR7YXJjaH0mIzM0OyBjYzsgZG8KJiM0MzsJaWYgISBjb21tYW5kIC12ICYjMzQ7JHtkZXB9JiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MTsgdGhlbgomIzQzOwkJc2tpcF9hbGxfdGVzdHMgJiMzNDske2RlcH0gbm90IGluc3RhbGxlZCYjMzQ7CiYjNDM7CWZpCiYjNDM7ZG9uZQomIzQzOwomIzQzOyMgLS0gcGluIGhlbHBlciAoY29tcGlsZWQgb24gdGhlIGhvc3QsIHZpc2libGUgdG8gdGhlIGd1ZXN0IHZpYSA5cCkgLS0tLS0tLS0tLS0KJiM0MzsjCiYjNDM7IyBBbGxvY2F0ZSBvbmUgYmxvY2smIzM5O3Mgd29ydGggb2YgcGFnZXMgKFpPTkVfTU9WQUJMRSBzZXJ2ZXMgdGhlbSBmcm9tIHRoZQomIzQzOyMgRElNTSksIGZpbmQgb25lIHRoYXQgbGFuZGVkIGluIGEgdGFyZ2V0IGJsb2NrLCB2bXNwbGljZS1waW4gaXQgaW50byBhCiYjNDM7IyBwaXBlLCBwcmludCBQSU5fQkxLPSZsdDtOJmd0OywgYW5kIHNsZWVwIGZvcmV2ZXIuCiYjNDM7CiYjNDM7Y2F0ICZndDsgJiMzNDske1BJTl9TUkN9JiMzNDsgJmx0OyZsdDsmIzM5O1BJTkVPRiYjMzk7CiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL21tYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3Vpby5oJmd0OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIG1lbW9yeV9ibG9ja19zaXplKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1Zls2NF07CiYjNDM7CXNzaXplX3QgbjsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlmZCA9IG9wZW4oJiMzNDsvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9ibG9ja19zaXplX2J5dGVzJiMzNDssIE9fUkRPTkxZKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwluID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSAtIDEpOwomIzQzOwljbG9zZShmZCk7CiYjNDM7CWlmIChuICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJYnVmW25dID0gJiMzOTtcMCYjMzk7OwomIzQzOwlyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDE2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgdmFkZHJfdG9fYmxvY2soaW50IHBhZ2VtYXBfZmQsIGNoYXIgKnZhZGRyLAomIzQzOwkJCQkgICAgbG9uZyBwYWdlX3NpemUsIHVuc2lnbmVkIGxvbmcgYmxrX3NpemUpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHZwbiA9ICh1bnNpZ25lZCBsb25nKXZhZGRyIC8gcGFnZV9zaXplOwomIzQzOwl1aW50NjRfdCBlbnQ7CiYjNDM7CiYjNDM7CWlmIChwcmVhZChwYWdlbWFwX2ZkLCAmYW1wO2VudCwgc2l6ZW9mKGVudCksIHZwbiAqIDgpICE9IHNpemVvZihlbnQpKQomIzQzOwkJcmV0dXJuIC0xVUw7CiYjNDM7CWlmICghKGVudCAmYW1wOyAoMVVMTCAmbHQ7Jmx0OyA2MykpKQomIzQzOwkJcmV0dXJuIC0xVUw7CiYjNDM7CXJldHVybiAoZW50ICZhbXA7ICgoMVVMTCAmbHQ7Jmx0OyA1NSkgLSAxKSkgKiBwYWdlX3NpemUgLyBibGtfc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQomIzQzO3sKJiM0MzsJbG9uZyBwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYmxrX3NpemUgPSBtZW1vcnlfYmxvY2tfc2l6ZSgpOwomIzQzOwl1bnNpZ25lZCBsb25nIG9mZiwgYmxrID0gMDsKJiM0MzsJY2hhciAqYXJlYSwgKnBhZ2UgPSBOVUxMOwomIzQzOwlpbnQgcGFnZW1hcF9mZCwgcGlwZWZkWzJdLCBpOwomIzQzOwomIzQzOwlpZiAoYXJnYyAmbHQ7IDIgfHwgIWJsa19zaXplKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDt1c2FnZTogcGluX3BhcmsgJmx0O21lbW9yeSBibG9jayZndDsuLi5cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFyZWEgPSBtbWFwKE5VTEwsIGJsa19zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9QT1BVTEFURSwgLTEsIDApOwomIzQzOwlpZiAoYXJlYSA9PSBNQVBfRkFJTEVEKSB7CiYjNDM7CQlwZXJyb3IoJiMzNDttbWFwJiMzNDspOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsJbWVtc2V0KGFyZWEsIDB4NDIsIGJsa19zaXplKTsKJiM0MzsKJiM0MzsJcGFnZW1hcF9mZCA9IG9wZW4oJiMzNDsvcHJvYy9zZWxmL3BhZ2VtYXAmIzM0OywgT19SRE9OTFkpOwomIzQzOwlpZiAocGFnZW1hcF9mZCAmbHQ7IDApIHsKJiM0MzsJCXBlcnJvcigmIzM0O3BhZ2VtYXAmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKG9mZiA9IDA7IG9mZiAmbHQ7IGJsa19zaXplICZhbXA7JmFtcDsgIXBhZ2U7IG9mZiAmIzQzOz0gcGFnZV9zaXplKSB7CiYjNDM7CQlibGsgPSB2YWRkcl90b19ibG9jayhwYWdlbWFwX2ZkLCBhcmVhICYjNDM7IG9mZiwgcGFnZV9zaXplLAomIzQzOwkJCQkgICAgIGJsa19zaXplKTsKJiM0MzsJCWZvciAoaSA9IDE7IGkgJmx0OyBhcmdjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChibGsgPT0gc3RydG91bChhcmd2W2ldLCBOVUxMLCAxMCkpIHsKJiM0MzsJCQkJcGFnZSA9IGFyZWEgJiM0Mzsgb2ZmOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJY2xvc2UocGFnZW1hcF9mZCk7CiYjNDM7CiYjNDM7CWlmICghcGFnZSkgewomIzQzOwkJcHJpbnRmKCYjMzQ7UElOX05PTkVcbiYjMzQ7KTsKJiM0MzsJCWZmbHVzaChzdGRvdXQpOwomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBpcGUocGlwZWZkKSkgewomIzQzOwkJcGVycm9yKCYjMzQ7cGlwZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN0cnVjdCBpb3ZlYyBpb3YgPSB7IC5pb3ZfYmFzZSA9IHBhZ2UsIC5pb3ZfbGVuID0gcGFnZV9zaXplIH07CiYjNDM7CiYjNDM7CWlmICh2bXNwbGljZShwaXBlZmRbMV0sICZhbXA7aW92LCAxLCAwKSAhPSBwYWdlX3NpemUpIHsKJiM0MzsJCXBlcnJvcigmIzM0O3Ztc3BsaWNlJiMzNDspOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpbnRmKCYjMzQ7UElOX0JMSz0lbHVcbiYjMzQ7LCBibGspOwomIzQzOwlmZmx1c2goc3Rkb3V0KTsKJiM0MzsJcGF1c2UoKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzO1BJTkVPRgomIzQzOwomIzQzO2lmICEgY2MgLU8yIC1vICYjMzQ7JHtQSU5fQklOfSYjMzQ7ICYjMzQ7JHtQSU5fU1JDfSYjMzQ7IDImZ3Q7Jmd0OyYjMzQ7JHtMT0d9JiMzNDs7IHRoZW4KJiM0MzsJc2tpcF9hbGxfdGVzdHMgJiMzNDtjYW5ub3QgYnVpbGQgdGhlIHBpbiBoZWxwZXImIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7IyAtLSBndWVzdCBzY3JpcHQgKHJ1bnMgYXMgaW5pdCBpbnNpZGUgdGhlIFZNKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzO2NhdCAmZ3Q7ICYjMzQ7JHtHVUVTVF9TQ1JJUFR9JiMzNDsgJmx0OyZsdDtQUk9MT0dVRQomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7cmVhZG9ubHkgTUFYX1BBU1NFUz0ke01BWF9QQVNTRVN9CiYjNDM7cmVhZG9ubHkgSEFOR19IT0xEPSR7SEFOR19IT0xEfQomIzQzO3JlYWRvbmx5IFJFU0NVRV9USU1FT1VUPSR7UkVTQ1VFX1RJTUVPVVR9CiYjNDM7cmVhZG9ubHkgUElOX1BBUks9JiMzNDske1BJTl9CSU59JiMzNDsKJiM0MztQUk9MT0dVRQomIzQzOwomIzQzO2NhdCAmZ3Q7Jmd0OyAmIzM0OyR7R1VFU1RfU0NSSVBUfSYjMzQ7ICZsdDsmbHQ7JiMzOTtHVUVTVEVPRiYjMzk7CiYjNDM7c2V0IC11CiYjNDM7CiYjNDM7cmVhZG9ubHkgUEFSQU09L3N5cy9tb2R1bGUvbWVtb3J5X2hvdHBsdWcvcGFyYW1ldGVycy9vZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcwomIzQzO3JlYWRvbmx5IE1FTT0vc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeQomIzQzOwomIzQzO3NraXAoKSB7IGVjaG8gJiMzNDtWTVRFU1RfU0tJUDogJComIzM0OzsgZWNobyAmIzM0O1ZNVEVTVF9ET05FJiMzNDs7IGV4aXQgMDsgfQomIzQzOwomIzQzO2Jsb2NrX3N0YXRlKCkgewomIzQzOwljYXQgJiMzNDske01FTX0vbWVtb3J5JHtwaW5uZWRfYmxrfS9zdGF0ZSYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8IGVjaG8gR09ORQomIzQzO30KJiM0MzsKJiM0MztbIC1mICYjMzQ7JHtQQVJBTX0mIzM0OyBdIHx8IHNraXAgJiMzNDtrZXJuZWwgbGFja3Mgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMmIzM0OwomIzQzOwomIzQzOyMgMS4gT25saW5lIHRoZSBESU1NJiMzOTtzIGJsb2NrcyBhcyBaT05FX01PVkFCTEUuCiYjNDM7ZGltbV9ibG9ja3M9JiMzNDsmIzM0OwomIzQzO2ZvciBzIGluICYjMzQ7JHtNRU19JiMzNDsvbWVtb3J5Ki9zdGF0ZTsgZG8KJiM0MzsJWyAmIzM0OyQoY2F0ICYjMzQ7JHtzfSYjMzQ7IDImZ3Q7L2Rldi9udWxsKSYjMzQ7ID0gb2ZmbGluZSBdIHx8IGNvbnRpbnVlCiYjNDM7CWlmIGVjaG8gb25saW5lX21vdmFibGUgJmd0OyAmIzM0OyR7c30mIzM0OyAyJmd0Oy9kZXYvbnVsbDsgdGhlbgomIzQzOwkJYj0ke3MlL3N0YXRlfQomIzQzOwkJZGltbV9ibG9ja3M9JiMzNDske2RpbW1fYmxvY2tzfSAke2IjIyptZW1vcnl9JiMzNDsKJiM0MzsJZmkKJiM0Mztkb25lCiYjNDM7ZWNobyAmIzM0OyMgRElNTSBtZW1vcnkgYmxvY2tzOiR7ZGltbV9ibG9ja3M6LSBub25lfSYjMzQ7CiYjNDM7WyAtbiAmIzM0OyR7ZGltbV9ibG9ja3N9JiMzNDsgXSB8fCBza2lwICYjMzQ7bm8gb2ZmbGluZSBtZW1vcnkgYmxvY2tzIChwYy1kaW1tIG1pc3Npbmc/KSYjMzQ7CiYjNDM7CiYjNDM7IyAyLiBQaW4gb25lIHBhZ2UgaW5zaWRlIHRoZSBESU1NLgomIzQzOyYjMzQ7JHtQSU5fUEFSS30mIzM0OyAke2RpbW1fYmxvY2tzfSAmZ3Q7IC90bXAvcGluLm91dCAyJmd0OyZhbXA7MSAmYW1wOwomIzQzO3Bpbl9waWQ9JCEKJiM0Mztmb3IgXyBpbiAkKHNlcSAxIDEwKTsgZG8KJiM0MzsJZ3JlcCAtcSAmIzM0O1BJTl8mIzM0OyAvdG1wL3Bpbi5vdXQgMiZndDsvZGV2L251bGwgJmFtcDsmYW1wOyBicmVhawomIzQzOwlzbGVlcCAxCiYjNDM7ZG9uZQomIzQzO3Bpbm5lZF9ibGs9JChzZWQgLW4gJiMzOTtzL15QSU5fQkxLPS8vcCYjMzk7IC90bXAvcGluLm91dCkKJiM0MztbIC1uICYjMzQ7JHtwaW5uZWRfYmxrfSYjMzQ7IF0gfHwgc2tpcCAmIzM0O3BpbiBmYWlsZWQ6ICQoY2F0IC90bXAvcGluLm91dCAyJmd0Oy9kZXYvbnVsbCkmIzM0OwomIzQzO2VjaG8gJiMzNDsjIHBpbm5lZCBvbmUgcGFnZSBpbiBibG9jayBtZW1vcnkke3Bpbm5lZF9ibGt9JiMzNDsKJiM0MzsKJiM0MzsjIDMuIEVqZWN0IHRoZSBESU1NIHdpdGggdGhlIHJldHJ5IGxpbWl0IGRpc2FibGVkIChkZWZhdWx0ID0gdW5ib3VuZGVkKS4KJiM0MztlY2hvIDAgJmd0OyAmIzM0OyR7UEFSQU19JiMzNDsKJiM0MztkbWVzZyAtYyAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MSB8fCB0cnVlCiYjNDM7CiYjNDM7ZWpkZXY9JiMzNDsmIzM0OwomIzQzO2ZvciBkZXYgaW4gL3N5cy9idXMvYWNwaS9kZXZpY2VzL1BOUDBDODA6KjsgZG8KJiM0MzsJWyAtZSAmIzM0OyR7ZGV2fS9lamVjdCYjMzQ7IF0gJmFtcDsmYW1wOyB7IGVqZGV2PSYjMzQ7JHtkZXZ9JiMzNDs7IGJyZWFrOyB9CiYjNDM7ZG9uZQomIzQzO1sgLW4gJiMzNDske2VqZGV2fSYjMzQ7IF0gfHwgc2tpcCAmIzM0O25vIGVqZWN0YWJsZSBBQ1BJIG1lbW9yeSBkZXZpY2UgKFBOUDBDODApJiMzNDsKJiM0MztlY2hvICYjMzQ7IyBlamVjdGluZyAke2VqZGV2fSYjMzQ7CiYjNDM7ZWNobyAxICZndDsgJiMzNDske2VqZGV2fS9lamVjdCYjMzQ7ICZhbXA7CiYjNDM7CiYjNDM7IyA0LiBPYnNlcnZlIHRoZSBoYW5nOiB0aGUgYmxvY2sgbXVzdCBzdGF5IGluICYjMzQ7Z29pbmctb2ZmbGluZSYjMzQ7LgomIzQzO3NsZWVwIDMKJiM0MztzdHVjaz0wCiYjNDM7aWYgWyAmIzM0OyQoYmxvY2tfc3RhdGUpJiMzNDsgPSBnb2luZy1vZmZsaW5lIF07IHRoZW4KJiM0MzsJZWNobyAmIzM0OyMgYmxvY2sgbWVtb3J5JHtwaW5uZWRfYmxrfSBnb2luZy1vZmZsaW5lLCBob2xkaW5nICR7SEFOR19IT0xEfXMmIzM0OwomIzQzOwlzbGVlcCAmIzM0OyR7SEFOR19IT0xEfSYjMzQ7CiYjNDM7CWlmIFsgJiMzNDskKGJsb2NrX3N0YXRlKSYjMzQ7ID0gZ29pbmctb2ZmbGluZSBdOyB0aGVuCiYjNDM7CQlzdHVjaz0xCiYjNDM7CQllY2hvIDEgJmd0OyAvcHJvYy9zeXMva2VybmVsL3N5c3JxIDImZ3Q7L2Rldi9udWxsIHx8IHRydWUKJiM0MzsJCWVjaG8gbCAmZ3Q7IC9wcm9jL3N5c3JxLXRyaWdnZXIgMiZndDsvZGV2L251bGwgfHwgdHJ1ZQomIzQzOwkJc2xlZXAgMQomIzQzOwkJZG1lc2cgfCBncmVwIC1CMiAtQTEyICYjMzQ7b2ZmbGluZV9wYWdlcyYjMzQ7IHwgdGFpbCAtMjAgXAomIzQzOwkJCXwgc2VkICYjMzk7cy9eLyMgIC8mIzM5OwomIzQzOwlmaQomIzQzO2ZpCiYjNDM7ZWNobyAmIzM0O1ZNVEVTVF9TVFVDSz0ke3N0dWNrfSYjMzQ7CiYjNDM7CiYjNDM7IyA1LiBSZXNjdWU6IGFybSB0aGUgcmV0cnkgbGltaXQgYXQgcnVudGltZSBhbmQgd2FpdCBmb3IgYmFpbG91dC4KJiM0MztlY2hvICYjMzQ7JHtNQVhfUEFTU0VTfSYjMzQ7ICZndDsgJiMzNDske1BBUkFNfSYjMzQ7CiYjNDM7ZWNobyAmIzM0OyMgYXJtZWQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9JChjYXQgJiMzNDske1BBUkFNfSYjMzQ7KSYjMzQ7CiYjNDM7CiYjNDM7cmVzY3VlZD0wCiYjNDM7Zm9yIF8gaW4gJChzZXEgMSAmIzM0OyR7UkVTQ1VFX1RJTUVPVVR9JiMzNDspOyBkbwomIzQzOwlpZiBkbWVzZyB8IGdyZXAgLXEgJiMzNDtnaXZpbmcgdXAgYWZ0ZXImIzM0OzsgdGhlbgomIzQzOwkJcmVzY3VlZD0xCiYjNDM7CQlicmVhawomIzQzOwlmaQomIzQzOwlzbGVlcCAxCiYjNDM7ZG9uZQomIzQzO2RtZXNnIHwgZ3JlcCAmIzM0O2dpdmluZyB1cCBhZnRlciYjMzQ7IHwgdGFpbCAtMiB8IHNlZCAmIzM5O3MvXi8jIC8mIzM5OwomIzQzO2VjaG8gJiMzNDtWTVRFU1RfUkVTQ1VFRD0ke3Jlc2N1ZWR9JiMzNDsKJiM0MzsKJiM0MztzbGVlcCAyCiYjNDM7ZWNobyAmIzM0O1ZNVEVTVF9CTE9DS19TVEFURT0kKGJsb2NrX3N0YXRlKSYjMzQ7CiYjNDM7CiYjNDM7a2lsbCAmIzM0OyR7cGluX3BpZH0mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzO2VjaG8gJiMzNDtWTVRFU1RfRE9ORSYjMzQ7CiYjNDM7R1VFU1RFT0YKJiM0MzsKJiM0MzsjIC0tIGxhdW5jaCBWTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7KCBjZCAmIzM0OyR7S0VSTkVMX0NIRUNLT1VUfSYjMzQ7ICZhbXA7JmFtcDsgZXhlYyB2bmcgLS1mb3JjZS05cCAtLW5vLXZpcnRtZS1uZy1pbml0IFwKJiM0MzsJLS1xZW11LW9wdD0tbSAtLXFlbXUtb3B0PSYjMzQ7Mkcsc2xvdHM9NCxtYXhtZW09OEcmIzM0OyBcCiYjNDM7CS0tcWVtdS1vcHQ9LW9iamVjdCBcCiYjNDM7CS0tcWVtdS1vcHQ9JiMzNDttZW1vcnktYmFja2VuZC1yYW0saWQ9bWVtMCxzaXplPSR7RElNTV9TSVpFfSYjMzQ7IFwKJiM0MzsJLS1xZW11LW9wdD0tZGV2aWNlIC0tcWVtdS1vcHQ9JiMzNDtwYy1kaW1tLGlkPWRpbW0wLG1lbWRldj1tZW0wJiMzNDsgXAomIzQzOwliYXNoICYjMzQ7JHtHVUVTVF9TQ1JJUFR9JiMzNDsgKSAmZ3Q7ICYjMzQ7JHtMT0d9JiMzNDsgMiZndDsmYW1wOzEgJmFtcDsKJiM0MztWTkdfUElEPSQhCiYjNDM7CiYjNDM7Zm9yIF8gaW4gJChzZXEgMSAmIzM0OyR7Qk9PVF9USU1FT1VUfSYjMzQ7KTsgZG8KJiM0MzsJZ3JlcCAtcSAmIzM0O1ZNVEVTVF9ET05FJiMzNDsgJiMzNDske0xPR30mIzM0OyAyJmd0Oy9kZXYvbnVsbCAmYW1wOyZhbXA7IGJyZWFrCiYjNDM7CWtpbGwgLTAgJiMzNDske1ZOR19QSUR9JiMzNDsgMiZndDsvZGV2L251bGwgfHwgYnJlYWsKJiM0MzsJc2xlZXAgMQomIzQzO2RvbmUKJiM0MzsKJiM0MztpZiAhIGdyZXAgLXEgJiMzNDtWTVRFU1RfRE9ORSYjMzQ7ICYjMzQ7JHtMT0d9JiMzNDsgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJZHVtcF9sb2dfdGFpbAomIzQzOwlza2lwX2FsbF90ZXN0cyAmIzM0O1ZNIGRpZCBub3QgZmluaXNoIHdpdGhpbiAke0JPT1RfVElNRU9VVH1zJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2tpbGwgJiMzNDske1ZOR19QSUR9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0Mzt3YWl0ICYjMzQ7JHtWTkdfUElEfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7Vk5HX1BJRD0mIzM0OyYjMzQ7CiYjNDM7CiYjNDM7IyAtLSByZXBvcnQgcmVzdWx0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzO3NraXBfcmVhc29uPSYjMzQ7JChncmVwICYjMzQ7XlZNVEVTVF9TS0lQOiAmIzM0OyAmIzM0OyR7TE9HfSYjMzQ7IHwgdGFpbCAtMSB8IHRyIC1kICYjMzk7XHImIzM5OykmIzM0OwomIzQzO2lmIFsgLW4gJiMzNDske3NraXBfcmVhc29ufSYjMzQ7IF07IHRoZW4KJiM0MzsJc2tpcF9hbGxfdGVzdHMgJiMzNDske3NraXBfcmVhc29uI1ZNVEVTVF9TS0lQOiB9JiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2dyZXAgJiMzNDteIyYjMzQ7ICYjMzQ7JHtMT0d9JiMzNDsgfCB0ciAtZCAmIzM5O1xyJiMzOTsgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG8KJiM0MzsJa3RhcF9wcmludF9tc2cgJiMzNDske2xpbmUjXCMgfSYjMzQ7CiYjNDM7ZG9uZQomIzQzOwomIzQzO3N0dWNrPSYjMzQ7JChndWVzdF9yZXN1bHQgVk1URVNUX1NUVUNLKSYjMzQ7CiYjNDM7cmVzY3VlZD0mIzM0OyQoZ3Vlc3RfcmVzdWx0IFZNVEVTVF9SRVNDVUVEKSYjMzQ7CiYjNDM7YmxrX3N0YXRlPSYjMzQ7JChndWVzdF9yZXN1bHQgVk1URVNUX0JMT0NLX1NUQVRFKSYjMzQ7CiYjNDM7CiYjNDM7aWYgWyAmIzM0OyR7YmxrX3N0YXRlOi1HT05FfSYjMzQ7ID0gJiMzNDtHT05FJiMzNDsgXTsgdGhlbgomIzQzOwlza2lwX2FsbF90ZXN0cyAmIzM0O0RJTU0gd2FzIGVqZWN0ZWQgZGVzcGl0ZSB0aGUgcGluIChwaW4gZGlkIG5vdCBob2xkKSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztpZiBbICYjMzQ7JHtzdHVjazotMH0mIzM0OyA9IDEgXTsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0O0FDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpJiMzNDsKJiM0MztlbHNlCiYjNDM7CWR1bXBfbG9nX3RhaWwKJiM0MzsJa3RhcF90ZXN0X2ZhaWwgJiMzNDtBQ1BJIGVqZWN0IGt3b3JrZXIgaGFuZ3MgdW5ib3VuZGVkIGluIG9mZmxpbmVfcGFnZXMoKSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztpZiBbICYjMzQ7JHtyZXNjdWVkOi0wfSYjMzQ7ID0gMSBdOyB0aGVuCiYjNDM7CWt0YXBfdGVzdF9wYXNzICYjMzQ7c3R1Y2sgb2ZmbGluZSByZXNjdWVkIGJ5IHdyaXRpbmcgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMmIzM0OwomIzQzO2Vsc2UKJiM0MzsJZHVtcF9sb2dfdGFpbAomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O3N0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2lmIFsgJiMzNDske2Jsa19zdGF0ZX0mIzM0OyA9ICYjMzQ7b25saW5lJiMzNDsgXTsgdGhlbgomIzQzOwlrdGFwX3Rlc3RfcGFzcyAmIzM0O21lbW9yeSBibG9jayBvbmxpbmUgYW5kIHVzYWJsZSBhZnRlciB0aGUgYmFpbG91dCYjMzQ7CiYjNDM7ZWxzZQomIzQzOwlrdGFwX3Rlc3RfZmFpbCAmIzM0O21lbW9yeSBibG9jayBvbmxpbmUgYW5kIHVzYWJsZSBhZnRlciB0aGUgYmFpbG91dCAoc3RhdGU9JHtibGtfc3RhdGV9KSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztrdGFwX2ZpbmlzaGVkCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxNjkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSG90cGx1ZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcga2VybmVsIHBhcmFtZXRlcjogYG1lbW9yeV9ob3RwbHVnLm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGRlc2lnbmVkIHRvIHB1dCBhIGNhcCBvbiB0aGUgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhhdCYjMzk7cyBhIGdvb2QgdGhpbmcsIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgcnVuYXdheSBtaWdyYXRpb25zIGluIGNlcnRhaW4gc2NlbmFyaW9zLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIHdpdGhpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2Ag4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIG1lbW9yeSBob3RwbHVnIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgc28gaXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGF0IGNvZGUgYW5kIGNvbmZpcm0gdGhhdCB0aGUgbW9kaWZpY2F0aW9uIGlzIHNvdW5kLCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLCBhbmQgaGFuZGxlcyBhbGwgZWRnZSBjYXNlcyBjb3JyZWN0bHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgb2ZmbGluZV9wYWdlc2AgZnVuY3Rpb24gc2luY2UgdGhhdCBpcyB3aGVyZSB0aGUgZGVzY3JpcHRpb24gaW1wbGllcyB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBuZXcgcGFyYW1ldGVyIGludGVyYWN0cyBzbW9vdGhseSB3aXRoIHRoZSBleGlzdGluZyBtZW1vcnkgb2ZmbGluaW5nIGxvZ2ljLgoKQmV5b25kIHRoZSBjb2RlIGl0c2VsZiwgSSBzZWUgdGhhdCBhIG5ldyBzZWxmdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaGAsIGhhcyBiZWVuIGFkZGVkLiBUaGF0JiMzOTtzIGZhbnRhc3RpYy4gSSYjMzk7bGwgbmVlZCB0byByZXZpZXcgdGhhdCB0ZXN0IHRob3JvdWdobHkgdG8gZW5zdXJlIGl0IGNvdmVycyB0aGUgaW50ZW5kZWQgYmVoYXZpb3IsIGluY2x1ZGluZyB0aGUgbmV3IHBhcmFtZXRlciYjMzk7cyBlZmZlY3Qgb24gbWlncmF0aW9uIGxpbWl0cy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc2NvcGUgb2YgdGhlIHRlc3QgdG8gZW5zdXJlIGFsbCBmdW5jdGlvbmFsaXR5IGlzIGNvdmVyZWQuCgpGaW5hbGx5LCB0aGUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBjcnVjaWFsLiBCb3RoIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dGAgYW5kIGBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdGAgYXJlIGJlaW5nIHVwZGF0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRob3NlIHVwZGF0ZXMgdG8gdmVyaWZ5IHRoZSBuZXcgcGFyYW1ldGVyIGlzIGNsZWFybHkgZXhwbGFpbmVkLCBpdHMgaW1wbGljYXRpb25zIGFyZSBhY2N1cmF0ZWx5IGRlc2NyaWJlZCwgYW5kIHRoZSBkb2N1bWVudGF0aW9uIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29kZS4gSXQgaXMgZXh0cmVtZWx5IGltcG9ydGFudCB0aGF0IHRoZSBkb2N1bWVudGF0aW9uIGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dD05NT1LZXJuZWwgcGFyYW1ldGVyc1xuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTM5ODItXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dDozOTgzOlx0bWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9XG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0zOTg0LVx0XHRcdFtLTkxdIE1heGltdW0gbnVtYmVyIG9mIG1pZ3JhdGlvbiBwYXNzZXNcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdD0yMjY9RnVydGhlciwgbWVtb3J5IG9mZmxpbmluZyBtaWdodCByZXRyeSBmb3IgYSBsb25nIHRpbWUgKG9yIGV2ZW4gZm9yZXZlciksIHVudGlsXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdDoyMjc6YWJvcnRlZCBieSB0aGUgdXNlci4gIFRoZSBgYG1lbW9yeV9ob3RwbHVnLm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYGBcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTIyOC1wYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gYm91bmQgdGhlIG51bWJlciBvZiByZXRyeSBwYXNzZXMsIG1ha2luZyBhbiBvZmZsaW5lXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3Q9NDMyPVRoZSBmb2xsb3dpbmcgbW9kdWxlIHBhcmFtZXRlcnMgYXJlIGN1cnJlbnRseSBkZWZpbmVkOlxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTU1Mi1cdFx0XHRcdCBQYXJhbWV0ZXIgYXZhaWxhYmlsaXR5IGRlcGVuZHMgb24gQ09ORklHX05VTUEuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdDo1NTM6YGBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc2BgXHQgcmVhZC13cml0ZTogTWF4aW11bSBudW1iZXIgb2YgbWlncmF0aW9uXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdC01NTQtXHRcdFx0XHQgcGFzc2VzIGZvciBhIHNpbmdsZSBtZW1vcnkgb2ZmbGluZVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTc3ND1ib29sIG1ocF9yYW5nZV9hbGxvd2VkKHU2NCBzdGFydCwgdTY0IHNpemUsIGJvb2wgbmVlZF9tYXBwaW5nKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc4OC0vKiBNYXggb2ZmbGluZV9wYWdlcygpIG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIC1FQlVTWTsgMCA9IHJldHJ5IGZvcmV2ZXIuICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3ODk6c3RhdGljIHVuc2lnbmVkIGludCBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcyBfX3JlYWRfbW9zdGx5O1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzkwOm1vZHVsZV9wYXJhbShvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcywgdWludCwgMDY0NCk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3OTE6TU9EVUxFX1BBUk1fREVTQyhvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlcyxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc5Mi1cdFwmIzM0O01heCBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSBtZW1vcnkgb2ZmbGluZSBnaXZlcyB1cCAoMCA9IG5vIGxpbWl0KVwmIzM0Oyk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xOTYxPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjA4My1cdFx0XHQgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MjA4NDpcdFx0XHRtYXhfcGFzc2VzID0gUkVBRF9PTkNFKG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjA4NS1cdFx0XHRpZiAobWF4X3Bhc3NlcyBcdTAwMjZcdTAwMjYgcGFzcyYjNDM7JiM0MzsgXHUwMDNlPSBtYXhfcGFzc2VzKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoLTMtI1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjQ6IyBUZXN0IG1lbW9yeV9ob3RwbHVnLm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzIGJ5IHJlcHJvZHVjaW5nIHRoZSBBQ1BJXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtNS0jIG1lbW9yeSBob3QtdW5wbHVnIGhhbmcgaW4ga3dvcmtlciBjb250ZXh0IGFuZCB2ZXJpZnlpbmcgdGhhdCB0aGUgcmV0cnlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMTktIyAgIDUuIE9ic2VydmUgdGhlIGhhbmcgKGdvaW5nLW9mZmxpbmUgcGVyc2lzdHMpLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjIwOiMgICA2LiBSZXNjdWU6IHdyaXRlIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzIGF0IHJ1bnRpbWUsIHZlcmlmeSBiYWlsb3V0LlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoLTIxLSNcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjMtIyAgIDEgIEFDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2g6MjQ6IyAgIDIgIHN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjUtIyAgIDMgIG1lbW9yeSBibG9jayBvbmxpbmUgYW5kIHVzYWJsZSBhZnRlciB0aGUgYmFpbG91dFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaD0yMTg9c2V0IC11XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjE5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjIyMDpyZWFkb25seSBQQVJBTT0vc3lzL21vZHVsZS9tZW1vcnlfaG90cGx1Zy9wYXJhbWV0ZXJzL29mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjIxLXJlYWRvbmx5IE1FTT0vc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaD0yMjU9YmxvY2tfc3RhdGUoKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoLTIyOC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaDoyMjk6WyAtZiBcJiMzNDske1BBUkFNfVwmIzM0OyBdIHx8IHNraXAgXCYjMzQ7a2VybmVsIGxhY2tzIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjMwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaD0yODQ9ZWNobyBcJiMzNDske01BWF9QQVNTRVN9XCYjMzQ7IFx1MDAzZSBcJiMzNDske1BBUkFNfVwmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjI4NTplY2hvIFwmIzM0OyMgYXJtZWQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9JChjYXQgXCYjMzQ7JHtQQVJBTX1cJiMzNDspXCYjMzQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjg2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaD0zNTY9aWYgWyBcJiMzNDske3Jlc2N1ZWQ6LTB9XCYjMzQ7ID0gMSBdOyB0aGVuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2g6MzU3Olx0a3RhcF90ZXN0X3Bhc3MgXCYjMzQ7c3R1Y2sgb2ZmbGluZSByZXNjdWVkIGJ5IHdyaXRpbmcgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNcJiMzNDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0zNTgtZWxzZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoLTM1OS1cdGR1bXBfbG9nX3RhaWxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaDozNjA6XHRrdGFwX3Rlc3RfZmFpbCBcJiMzNDtzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1wmIzM0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoLTM2MS1maVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjk4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSG90cGx1ZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbW9kdWxlIHBhcmFtZXRlciwgYG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbWVtb3J5X2hvdHBsdWcuY2AuIFRoaXMgaXMgYSBwcmV0dHkgZm9jdXNlZCBmdW5jdGlvbmFsIGFkZGl0aW9uLCBpbXBhY3RpbmcgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBvZmZsaW5lIHBhZ2VzLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkga2V5IGluIG9uIHRoZSBgb2ZmbGluZV9wYWdlc2AgZnVuY3Rpb24gYXMgdGhlIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIG5ldyBwYXJhbWV0ZXIgd2lsbCBjb21lIGludG8gcGxheS4KClRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnQgaGVyZSBpcyBgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgLCB3aGljaCBpcyBzdGFuZGFyZC4gQmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGUgZnV6emluZyBzdHJhdGVneSB0aG91Z2gsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgaXRzZWxmLiBJdOKAmXMgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBxdWlja2x5IHNjYW4gdGhlIGZpbGUgZm9yIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGJlaGF2aW91ciBvZiB0aGlzIHBhdGNoLiBUaGlzIHdpbGwgaGVscCBpZGVudGlmeSBwb3NzaWJsZSBlZGdlIGNhc2VzIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBzaG91bGQgYWxzbyBiZSBjb25zaWRlcmVkIHdoZW4gZGVzaWduaW5nIHRoZSBmdXp6aW5nIGNhbXBhaWduLiBUaGlzIGxldmVsIG9mIGluaXRpYWwgcmVjb25uYWlzc2FuY2UgY291bGQgc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIGVmZm9ydCByZXF1aXJlZCBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1PUllfSE9UUkVNT1ZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0PTMzOT1UaGUgZm9sbG93aW5nIGZpbGVzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDpcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdC0zODAtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdDozODE6XHRcdCAgICBBdmFpbGFiaWxpdHkgZGVwZW5kcyBvbiB0aGUgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTM4Mi1cdFx0ICAgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdD00MzI9VGhlIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVycyBhcmUgY3VycmVudGx5IGRlZmluZWQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtNTcyLVx0XHRcdFx0IFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvblxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3Q6NTczOlx0XHRcdFx0IENPTkZJR19NRU1PUllfSE9UUkVNT1ZFLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtNTc0LT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4tLVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZz0xMzM9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MTM0OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWctMTM1LUNPTkZJR19LU009eVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmM9MjIxOT1zdGF0aWMgaW50IF9faW5pdCBwcmV2ZW50X21lbW9yeV9yZW1vdmVfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vbW11LmMtMjIyMi1cbmFyY2gvYXJtNjQvbW0vbW11LmM6MjIyMzpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpXG5hcmNoL2FybTY0L21tL21tdS5jLTIyMjQtXHRcdHJldHVybiByZXQ7XG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0xMDE9Q09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9BVVRPPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTEwMy0jIENPTkZJR19NSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PTkxJTkVfTU9WQUJMRSBpcyBub3Qgc2V0XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjEwNDpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTEwNS1DT05GSUdfS1NNPXlcbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTExNj1DT05GSUdfTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0FVVE89eVxuLS1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMTE4LSMgQ09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9NT1ZBQkxFIGlzIG5vdCBzZXRcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6MTE5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMTIwLUNPTkZJR19LU009eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnPTU4PUNPTkZJR19NRU1PUllfSE9UUExVRz15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZzo1OTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZy02MC1DT05GSUdfS1NNPXlcbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWc9ODg9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZzo4OTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWctOTAtQ09ORklHX0tTTT15XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmM9MjIyPXN0YXRpYyBpbnQgZGxwYXJfb25saW5lX2xtYihzdHJ1Y3QgZHJtZW1fbG1iICpsbWIpXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMtMjI2LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmM6MjI3OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMtMjI4LXN0YXRpYyBpbnQgZGxwYXJfb2ZmbGluZV9sbWIoc3RydWN0IGRybWVtX2xtYiAqbG1iKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jPTU1OD1zdGF0aWMgaW50IGRscGFyX21lbW9yeV9yZW1vdmVfYnlfaWModTMyIGxtYnNfdG9fcmVtb3ZlLCB1MzIgZHJjX2luZGV4KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTU2MS19XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYzo1NjI6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy01NjMtXG4tLVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnPTEwNT1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjEwNjpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWctMTA3LUNPTkZJR19LU009eVxuLS1cbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz05OD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnOjk5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0xMDAtQ09ORklHX0tTTT15XG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYz0xNTc9YWNwaV9waHlzaWNhbF9hZGRyZXNzIGdldF9yc2RwX2FkZHIodm9pZClcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jLTE3MS1cbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM6MTcyOiNpZiBkZWZpbmVkKENPTkZJR19SQU5ET01JWkVfQkFTRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jLTE3My0vKlxuLS1cbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM9Mjc1PWludCBjb3VudF9pbW1vdmFibGVfbWVtX3JlZ2lvbnModm9pZClcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jLTMyMS19XG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jOjMyMjojZW5kaWYgLyogQ09ORklHX1JBTkRPTUlaRV9CQVNFIFx1MDAyNlx1MDAyNiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSAqL1xuLS1cbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jPTU5Nj1zdGF0aWMgYm9vbCBwcm9jZXNzX21lbV9yZWdpb24oc3RydWN0IG1lbV92ZWN0b3IgKnJlZ2lvbixcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MTQtXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo2MTU6I2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19BQ1BJKVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNjE2LVx0Lypcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oPTE3MT1zdGF0aWMgaW5saW5lIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBnZXRfcnNkcF9hZGRyKHZvaWQpIHsgcmV0dXJuIDA7IH1cbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTE3My1cbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmg6MTc0OiNpZiBkZWZpbmVkKENPTkZJR19SQU5ET01JWkVfQkFTRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19BQ1BJKVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaC0xNzUtZXh0ZXJuIHN0cnVjdCBtZW1fdmVjdG9yIGltbW92YWJsZV9tZW1bTUFYX05VTU5PREVTKjJdO1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xNjc9c3RhdGljIHNzaXplX3QgcGh5c19pbmRleF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTc2LSAqIExlZ2FjeSBpbnRlcmZhY2UgdGhhdCB3ZSBjYW5ub3QgcmVtb3ZlLiBBbHdheXMgaW5kaWNhdGUgXCYjMzQ7cmVtb3ZhYmxlXCYjMzQ7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MTc3OiAqIHdpdGggQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgLSBiYWQgaGV1cmlzdGljLlxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTE3OC0gKi9cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xNzk9c3RhdGljIHNzaXplX3QgcmVtb3ZhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTgxLXtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoxODI6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCAoaW50KUlTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xODMtfVxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz00NTA9c3RhdGljIHNzaXplX3QgcGh5c19kZXZpY2Vfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTQ1OS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo0NjA6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDYxLXN0YXRpYyBpbnQgcHJpbnRfYWxsb3dlZF96b25lKGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IG5pZCxcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NjcxPXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZW1vcnlfbWVtYmxrX2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTY3NS1cdFx1MDAyNmRldl9hdHRyX3JlbW92YWJsZS5hdHRyLFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjY3NjojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02NzctXHRcdTAwMjZkZXZfYXR0cl92YWxpZF96b25lcy5hdHRyLFxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz0xNjM9c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjA3LVxuZHJpdmVycy9kYXgva21lbS5jOjIwODojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMDktLyoqXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTI2OD1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcbi0tXG5kcml2ZXJzL2RheC9rbWVtLmMtMjcyLX1cbmRyaXZlcnMvZGF4L2ttZW0uYzoyNzM6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5kcml2ZXJzL2RheC9rbWVtLmMtMjc0LVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYz0zODM9c3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgva21lbS5jLTQ4MC1cbmRyaXZlcnMvZGF4L2ttZW0uYzo0ODE6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5kcml2ZXJzL2RheC9rbWVtLmMtNDgyLS8qXG4tLVxuZHJpdmVycy9kYXgva21lbS5jPTU0OT1zdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2ttZW0uYy01NTktfVxuZHJpdmVycy9kYXgva21lbS5jOjU2MDojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmRyaXZlcnMvZGF4L2ttZW0uYy01NjEtXG4tLVxuaW5jbHVkZS9saW51eC9pb3BvcnQuaD0zOTE9ZXh0ZXJuIHZvaWQgX19yZWxlYXNlX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwgcmVzb3VyY2Vfc2l6ZV90LFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaC0zOTItXHRcdFx0XHRyZXNvdXJjZV9zaXplX3QpO1xuaW5jbHVkZS9saW51eC9pb3BvcnQuaDozOTM6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oLTM5NC1leHRlcm4gdm9pZCByZWxlYXNlX21lbV9yZWdpb25fYWRqdXN0YWJsZShyZXNvdXJjZV9zaXplX3QsIHJlc291cmNlX3NpemVfdCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2MD1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcmVzaXplX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkge31cbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjYyLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI2MzojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNjQtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI5MD1zdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjk0LX1cbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyOTU6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjk2LVxuLS1cbmtlcm5lbC9jb25maWdzL3hlbi5jb25maWc9MTU9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbmtlcm5lbC9jb25maWdzL3hlbi5jb25maWc6MTY6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxua2VybmVsL2NvbmZpZ3MveGVuLmNvbmZpZy0xNy1DT05GSUdfWk9ORV9ERVZJQ0U9eVxuLS1cbmtlcm5lbC9yZXNvdXJjZS5jPTE0NDY9RVhQT1JUX1NZTUJPTChfX3JlbGVhc2VfcmVnaW9uKTtcbmtlcm5lbC9yZXNvdXJjZS5jLTE0NDctXG5rZXJuZWwvcmVzb3VyY2UuYzoxNDQ4OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxua2VybmVsL3Jlc291cmNlLmMtMTQ0OS1zdGF0aWMgdm9pZCBhcHBlbmRfY2hpbGRfdG9fcGFyZW50KHN0cnVjdCByZXNvdXJjZSAqbmV3X3BhcmVudCwgc3RydWN0IHJlc291cmNlICpuZXdfY2hpbGQpXG4tLVxua2VybmVsL3Jlc291cmNlLmM9MTUwNz12b2lkIHJlbGVhc2VfbWVtX3JlZ2lvbl9hZGp1c3RhYmxlKHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IHNpemUpXG4tLVxua2VybmVsL3Jlc291cmNlLmMtMTU5Ni19XG5rZXJuZWwvcmVzb3VyY2UuYzoxNTk3OiNlbmRpZlx0LyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbmtlcm5lbC9yZXNvdXJjZS5jLTE1OTgtXG4tLVxubW0va3NtLmM9MzMxMT12b2lkIGZvbGlvX21pZ3JhdGVfa3NtKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0va3NtLmMtMzMzNC1cbm1tL2tzbS5jOjMzMzU6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG5tbS9rc20uYy0zMzM2LXN0YXRpYyB2b2lkIHdhaXRfd2hpbGVfb2ZmbGluaW5nKHZvaWQpXG4tLVxubW0va3NtLmM9MzQ1OT1zdGF0aWMgdm9pZCB3YWl0X3doaWxlX29mZmxpbmluZyh2b2lkKVxuLS1cbm1tL2tzbS5jLTM0NjEtfVxubW0va3NtLmM6MzQ2MjojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbm1tL2tzbS5jLTM0NjMtXG4tLVxubW0va3NtLmM9NDAxOT1zdGF0aWMgaW50IF9faW5pdCBrc21faW5pdCh2b2lkKVxuLS1cbm1tL2tzbS5jLTQwNTEtXG5tbS9rc20uYzo0MDUyOiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxubW0va3NtLmMtNDA1My1cdC8qIFRoZXJlIGlzIG5vIHNpZ25pZmljYW5jZSB0byB0aGlzIHByaW9yaXR5IDEwMCAqL1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTc3ND1ib29sIG1ocF9yYW5nZV9hbGxvd2VkKHU2NCBzdGFydCwgdTY0IHNpemUsIGJvb2wgbmVlZF9tYXBwaW5nKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc4Ni1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTc4NzojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc4OC0vKiBNYXggb2ZmbGluZV9wYWdlcygpIG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIC1FQlVTWTsgMCA9IHJldHJ5IGZvcmV2ZXIuICovXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yNTY2PUVYUE9SVF9TWU1CT0xfR1BMKG9mZmxpbmVfYW5kX3JlbW92ZV9tZW1vcnlfcmFuZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjU2NzojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDQyOT1zdGF0aWMgdW5zaWduZWQgaW50IHpvbmVsaXN0X2l0ZXJfYmVnaW4odm9pZClcbm1tL3BhZ2VfYWxsb2MuYy00NDMwLXtcbm1tL3BhZ2VfYWxsb2MuYzo0NDMxOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKVxubW0vcGFnZV9hbGxvYy5jLTQ0MzItXHRcdHJldHVybiByZWFkX3NlcWJlZ2luKFx1MDAyNnpvbmVsaXN0X3VwZGF0ZV9zZXEpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDM3PXN0YXRpYyB1bnNpZ25lZCBpbnQgY2hlY2tfcmV0cnlfem9uZWxpc3QodW5zaWduZWQgaW50IHNlcSlcbm1tL3BhZ2VfYWxsb2MuYy00NDM4LXtcbm1tL3BhZ2VfYWxsb2MuYzo0NDM5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKVxubW0vcGFnZV9hbGxvYy5jLTQ0NDAtXHRcdHJldHVybiByZWFkX3NlcXJldHJ5KFx1MDAyNnpvbmVsaXN0X3VwZGF0ZV9zZXEsIHNlcSk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTc2ODg9dm9pZCB6b25lX3BjcF9yZXNldChzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzcwNi1cbm1tL3BhZ2VfYWxsb2MuYzo3NzA3OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxubW0vcGFnZV9hbGxvYy5jLTc3MDgtLypcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQ9OTA9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2NDo5MTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLmFhcmNoNjQtOTItQ09ORklHX05BTUVTUEFDRVM9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg9NzY9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg6Nzc6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5zMzkweC03OC1DT05GSUdfTkFNRVNQQUNFUz15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGF4L2NvbmZpZz0zPUNPTkZJR19NRU1PUllfSE9UUExVRz15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYXgvY29uZmlnOjQ6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21lbW9yeS1ob3RwbHVnL2NvbmZpZz0zPUNPTkZJR19NRU1PUllfTk9USUZJRVJfRVJST1JfSU5KRUNUPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21lbW9yeS1ob3RwbHVnL2NvbmZpZzo0OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9MTc9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzoxODpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctMTktQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlk9eVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZz0xMDk9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZzoxMTA6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdnNvY2svY29uZmlnLTExMS1DT05GSUdfWk9ORV9ERVZJQ0U9eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDAyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODY1CgkJCQkJCQlvdXRwdXQ6IDkyCgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IFRhcmdldGluZyBNZW1vcnkgSG90LVJlbW92YWwqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gbWVtb3J5IGhvdC1yZW1vdmFsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbW0vbWVtb3J5X2hvdHBsdWcuY2AgZmlsZS4gVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGVuY2Fwc3VsYXRlZCBieSBgI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFYCwgd2hpY2ggaXMgZ29vZCwgdGhhdCBnaXZlcyBtZSBhIGNsZWFyIGVudHJ5IHBvaW50LiBMb29raW5nIGNsb3NlciwgaXQmIzM5O3MgdGhlIGBvZmZsaW5lX3BhZ2VzYCBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQuIFRoZSBmYWN0IHRoYXQgYG9mZmxpbmVfcGFnZXNgIGlzIHRoZSB0YXJnZXQgZnVuY3Rpb24gYW5kIHRoYXQgaXQmIzM5O3MgcmVhY2hhYmxlIHdoZW4gbWVtb3J5IGlzIGJlaW5nIG9mZmxpbmVkIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKTXkgc3RyYXRlZ3kgaXMgdG8gemVybyBpbiBvbiB0aGlzIGZ1bmN0aW9uLiBJJiMzOTtsbCBmbGFnIGl0IGFzIGhpZ2gtcHJpb3JpdHkgdXNpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gVG8gZW5zdXJlIHRoZSBmdXp6ZXIgY29uY2VudHJhdGVzIGl0cyBlZmZvcnRzLCBJJiMzOTtsbCBzZXQgYEZvY3VzU3ltYm9scz1bJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDtdYC4gQWxzbywgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGFyZSB2ZXJ5IG9idmlvdXMsIGBNRU1PUllfSE9UUkVNT1ZFYCBhbmQgYE1FTU9SWV9IT1RQTFVHYCBtdXN0IGJlIGVuYWJsZWQsIHNvIEkmIzM5O2xsIHNldCBgRW5hYmxlQ29uZmlncz1bJiMzNDtNRU1PUllfSE9UUkVNT1ZFJiMzNDssICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0O11gLiBUaGUgcHJlc2VuY2Ugb2YgYEFDUElfSE9UUExVR19NRU1PUllgIGluIHRoZSBzZWxmdGVzdCBjb25maWcgaXMgbm90IGludGVyZXN0aW5nLCBzaW5jZSBpdCYjMzk7cyBvbmx5IHRoZXJlIGZvciB0aGUgdGVzdCwgbm90aGluZyB0byBzZWUgdGhlcmUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYG9mZmxpbmVfcGFnZXNgIGlzIGluZGVlZCB0aGUgb25seSBmdW5jdGlvbiBkaXJlY3RseSBtb2RpZmllZCBieSB0aGlzIHBhdGNoLCBhbmQgaXQgYWRkcyB0aGUgYG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYCBtb2R1bGUgcGFyYW1ldGVyLCB3aGljaCBpcyB1c2VmdWwgdG8ga25vdy4KCk5vdywgSSYjMzk7bGwgcHV0IHRoaXMgaW5mb3JtYXRpb24gaW50byB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIGdldCB0aGluZ3Mgcm9sbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFJFTU9WRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGhvdHBsdWcgbG9naWMgaW4gYG9mZmxpbmVfcGFnZXNgIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiBtZW1vcnkgaXMgb2ZmbGluZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RSRU1PVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBob3RwbHVnIGxvZ2ljIGluIGBvZmZsaW5lX3BhZ2VzYCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIG1pZ3JhdGlvbiBwYXNzZXMgZHVyaW5nIG1lbW9yeSBvZmZsaW5pbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gbWVtb3J5IGlzIG9mZmxpbmVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6Mjc6MDUuMzM3NDE4OTQ1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MjUzMTcxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGhvdHBsdWcgbG9naWMgaW4gYG9mZmxpbmVfcGFnZXNgIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiBtZW1vcnkgaXMgb2ZmbGluZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDAyOjI3OjA1LjMzNzQzMDk0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU3Nzg5Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTMwYjMyMTQ1Mjg2ZjY1M2ZlYzRiMTk0NWVkZDc5OTIxMjIwYmFmY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyMyAwMjoyNzowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuaW5kZXggNTNmMDg5NTBhNjMwOTYuLjkwYjY3YzQ1N2MyYTgyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG5AQCAtMzk4MCw2ICszOTgwLDIwIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXFxuIFxcdFxcdFxcdE5vdGUgdGhhdCBldmVuIHdoZW4gZW5hYmxlZCwgdGhlcmUgYXJlIGEgZmV3IGNhc2VzIHdoZXJlXFxuIFxcdFxcdFxcdHRoZSBmZWF0dXJlIGlzIG5vdCBlZmZlY3RpdmUuXFxuIFxcbitcXHRtZW1vcnlfaG90cGx1Zy5vZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlcz1cXG4rXFx0XFx0XFx0W0tOTF0gTWF4aW11bSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3Nlc1xcbitcXHRcXHRcXHRmb3IgbWVtb3J5IG9mZmxpbmluZy5cXG4rXFx0XFx0XFx0Rm9ybWF0OiBcXHUwMDNjaW50ZWdlclxcdTAwM2VcXG4rXFx0XFx0XFx0ZGVmYXVsdDogMCAobm8gbGltaXQsIGhpc3RvcmljYWwgYmVoYXZpb3VyKVxcbitcXHRcXHRcXHRXaGVuIG5vbi16ZXJvLCBtZW1vcnkgb2ZmbGluaW5nIGdpdmVzIHVwIHdpdGhcXG4rXFx0XFx0XFx0LUVCVVNZIGFmdGVyIHRoaXMgbWFueSBtaWdyYXRpb24gcGFzc2VzIG92ZXJcXG4rXFx0XFx0XFx0dGhlIHJhbmdlLCBpbnN0ZWFkIG9mIHJldHJ5aW5nIGZvcmV2ZXIgb24gYVxcbitcXHRcXHRcXHRzdHVjayBwYWdlLiAgRWFjaCBwYXNzIHNjYW5zIHRoZSByYW5nZSBhbmRcXG4rXFx0XFx0XFx0bWlncmF0ZXMgd2hhdCBpdCBjYW4uXFxuK1xcdFxcdFxcdFRoZSBwYXJhbWV0ZXIgaXMgcmUtcmVhZCBvbiBldmVyeSBwYXNzLCBzbyBhblxcbitcXHRcXHRcXHRvZmZsaW5lIHJlcXVlc3QgdGhhdCBpcyBhbHJlYWR5IHN0dWNrIGNhbiBiZVxcbitcXHRcXHRcXHRyZXNjdWVkIGF0IHJ1bnRpbWUgYnkgd3JpdGluZyB0aGUgcGFyYW1ldGVyLlxcbitcXG4gXFx0bWVtdGVzdD1cXHRbS05MLFg4NixBUk0sTTY4SyxQUEMsUklTQ1YsRUFSTFldIEVuYWJsZSBtZW10ZXN0XFxuIFxcdFxcdFxcdEZvcm1hdDogXFx1MDAzY2ludGVnZXJcXHUwMDNlXFxuIFxcdFxcdFxcdGRlZmF1bHQgOiAwIFxcdTAwM2NkaXNhYmxlXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0XFxuaW5kZXggMDIwN2Y4NzI1MTQyMWMuLjc5YjQ1MTA5YzQwOGM4IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3RcXG5AQCAtMjI0LDcgKzIyNCwxMCBAQCBpbmNyZWFzZXMgbWVtb3J5IG9mZmxpbmluZyByZWxpYWJpbGl0eTsgc3RpbGwsIG1lbW9yeSBvZmZsaW5pbmcgY2FuIGZhaWwgaW5cXG4gc29tZSBjb3JuZXIgY2FzZXMuXFxuIFxcbiBGdXJ0aGVyLCBtZW1vcnkgb2ZmbGluaW5nIG1pZ2h0IHJldHJ5IGZvciBhIGxvbmcgdGltZSAob3IgZXZlbiBmb3JldmVyKSwgdW50aWxcXG4tYWJvcnRlZCBieSB0aGUgdXNlci5cXG4rYWJvcnRlZCBieSB0aGUgdXNlci4gIFRoZSBgYG1lbW9yeV9ob3RwbHVnLm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYGBcXG4rcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGJvdW5kIHRoZSBudW1iZXIgb2YgcmV0cnkgcGFzc2VzLCBtYWtpbmcgYW4gb2ZmbGluZVxcbityZXF1ZXN0IHRoYXQgY2Fubm90IG1ha2UgcHJvZ3Jlc3MgZmFpbCB3aXRoIGBgLUVCVVNZYGAgaW5zdGVhZCBvZiByZXRyeWluZ1xcbitpbmRlZmluaXRlbHkgKHNlZSBgTW9kdWxlIFBhcmFtZXRlcnNgXykuXFxuIFxcbiBPZmZsaW5pbmcgb2YgYSBtZW1vcnkgYmxvY2sgY2FuIGJlIHRyaWdnZXJlZCB2aWE6OlxcbiBcXG5AQCAtNTQ3LDYgKzU1MCwyNyBAQCBUaGUgZm9sbG93aW5nIG1vZHVsZSBwYXJhbWV0ZXJzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDpcXG4gXFx0XFx0XFx0XFx0IHBvc3NpYmxlLlxcbiBcXG4gXFx0XFx0XFx0XFx0IFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvbiBDT05GSUdfTlVNQS5cXG4rYGBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc2BgXFx0IHJlYWQtd3JpdGU6IE1heGltdW0gbnVtYmVyIG9mIG1pZ3JhdGlvblxcbitcXHRcXHRcXHRcXHQgcGFzc2VzIGZvciBhIHNpbmdsZSBtZW1vcnkgb2ZmbGluZVxcbitcXHRcXHRcXHRcXHQgcmVxdWVzdC4gIE1lbW9yeSBvZmZsaW5pbmcgcmV0cmllcyB0b1xcbitcXHRcXHRcXHRcXHQgbWlncmF0ZSBhbmQgaXNvbGF0ZSBwYWdlcyB1bnRpbCBpdCBzdWNjZWVkcztcXG4rXFx0XFx0XFx0XFx0IGEgcGFnZSB0aGF0IGNhbiBuZXZlciBiZSBtaWdyYXRlZCBvciBmcmVlZFxcbitcXHRcXHRcXHRcXHQgbWFrZXMgaXQgcmV0cnkgZm9yZXZlci4gIFdoZW4gdGhpcyBwYXJhbWV0ZXJcXG4rXFx0XFx0XFx0XFx0IGlzIG5vbi16ZXJvLCBhbiBvZmZsaW5lIHJlcXVlc3QgZ2l2ZXMgdXBcXG4rXFx0XFx0XFx0XFx0IHdpdGggYGAtRUJVU1lgYCBhZnRlciB0aGUgY29uZmlndXJlZCBudW1iZXJcXG4rXFx0XFx0XFx0XFx0IG9mIG1pZ3JhdGlvbiBwYXNzZXMgYW5kIHRoZSBtZW1vcnkgYmxvY2tcXG4rXFx0XFx0XFx0XFx0IHN0YXlzIG9ubGluZS5cXG4rXFxuK1xcdFxcdFxcdFxcdCBUaGUgcGFyYW1ldGVyIGlzIHJlLXJlYWQgb24gZXZlcnkgcGFzcywgc29cXG4rXFx0XFx0XFx0XFx0IGFuIG9mZmxpbmUgcmVxdWVzdCB0aGF0IGlzIGFscmVhZHkgc3R1Y2tcXG4rXFx0XFx0XFx0XFx0IHJldHJ5aW5nIGNhbiBiZSByZXNjdWVkIGF0IHJ1bnRpbWUgYnlcXG4rXFx0XFx0XFx0XFx0IHdyaXRpbmcgYSBub24temVybyB2YWx1ZSwgd2l0aG91dCBhIHJlYm9vdC5cXG4rXFxuK1xcdFxcdFxcdFxcdCBUaGUgZGVmYXVsdCBpcyBcXFwiMFxcXCIsIG1lYW5pbmcgbm8gbGltaXQgKHRoZVxcbitcXHRcXHRcXHRcXHQgaGlzdG9yaWNhbCBiZWhhdmlvdXIpLlxcbitcXG4rXFx0XFx0XFx0XFx0IFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvblxcbitcXHRcXHRcXHRcXHQgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUuXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbiBaT05FX01PVkFCTEVcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcXG5pbmRleCAyMjZhYjljYjA3OGFkMS4uOTA2NzgyOTM0OWEwZGEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmNcXG5AQCAtMTc4NSw2ICsxNzg1LDEyIEBAIGJvb2wgbWhwX3JhbmdlX2FsbG93ZWQodTY0IHN0YXJ0LCB1NjQgc2l6ZSwgYm9vbCBuZWVkX21hcHBpbmcpXFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbisvKiBNYXggb2ZmbGluZV9wYWdlcygpIG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIC1FQlVTWTsgMCA9IHJldHJ5IGZvcmV2ZXIuICovXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgX19yZWFkX21vc3RseTtcXG4rbW9kdWxlX3BhcmFtKG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzLCB1aW50LCAwNjQ0KTtcXG4rTU9EVUxFX1BBUk1fREVTQyhvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcyxcXG4rXFx0XFxcIk1heCBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSBtZW1vcnkgb2ZmbGluZSBnaXZlcyB1cCAoMCA9IG5vIGxpbWl0KVxcXCIpO1xcbitcXG4gLypcXG4gICogU2NhbiBwZm4gcmFuZ2UgW3N0YXJ0LGVuZCkgdG8gZmluZCBtb3ZhYmxlL21pZ3JhdGFibGUgcGFnZXMgKExSVSBhbmRcXG4gICogaHVnZXRsYiBmb2xpbywgbW92YWJsZV9vcHMgcGFnZXMpLiBXaWxsIHNraXAgb3ZlciBtb3N0IHVubW92YWJsZVxcbkBAIC0xOTY2LDYgKzE5NzIsOCBAQCBpbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4gXFx0c3RydWN0IG5vZGVfbm90aWZ5IG5vZGVfYXJnID0ge1xcbiBcXHRcXHQubmlkID0gTlVNQV9OT19OT0RFLFxcbiBcXHR9O1xcbitcXHR1bnNpZ25lZCBpbnQgbWF4X3Bhc3NlcztcXG4rXFx0dW5zaWduZWQgaW50IHBhc3MgPSAwO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRjaGFyICpyZWFzb247XFxuIFxcdGludCByZXQ7XFxuQEAgLTIwNjIsNiArMjA3MCwzNiBAQCBpbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4gXFx0XFx0XFx0XFx0Z290byBmYWlsZWRfcmVtb3ZhbF9pc29sYXRlZDtcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQSBwYWdlIHRoYXQgY2FuIG5ldmVyIGJlIG1pZ3JhdGVkIChlLmcuIGFcXG4rXFx0XFx0XFx0ICogbG9uZy10ZXJtIHBpbikgbWFrZXMgdGhpcyBsb29wIHJldHJ5IGZvcmV2ZXIuXFxuK1xcdFxcdFxcdCAqIEdpdmUgdXAgYWZ0ZXIgdGhlIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIHBhc3Nlcy5cXG4rXFx0XFx0XFx0ICogVGhlIGxpbWl0IGlzIHJlLXJlYWQgb24gZXZlcnkgcGFzcyBzbyB0aGF0IGFuXFxuK1xcdFxcdFxcdCAqIG9mZmxpbmUgcmVxdWVzdCB0aGF0IGlzIGFscmVhZHkgc3R1Y2sgaGVyZSBjYW5cXG4rXFx0XFx0XFx0ICogYmUgYWJvcnRlZCBhdCBydW50aW1lIGJ5IHdyaXRpbmcgdGhlIHBhcmFtZXRlcixcXG4rXFx0XFx0XFx0ICogd2hpY2ggbWF0dGVycyBmb3IgaW4ta2VybmVsIGNhbGxlcnMgKGUuZy4gQUNQSVxcbitcXHRcXHRcXHQgKiBESU1NIGhvdC11bnBsdWcpIHRoYXQgcnVuIG9uIGt3b3JrZXJzIGFuZCBjYW5cXG4rXFx0XFx0XFx0ICogbmV2ZXIgYmUgYWJvcnRlZCBieSBhIHNpZ25hbC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG1heF9wYXNzZXMgPSBSRUFEX09OQ0Uob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMpO1xcbitcXHRcXHRcXHRpZiAobWF4X3Bhc3NlcyBcXHUwMDI2XFx1MDAyNiBwYXNzKysgXFx1MDAzZT0gbWF4X3Bhc3Nlcykge1xcbitcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJtZW1vcnkgb2ZmbGluaW5nIFttZW0gJSMwMTBsbHgtJSMwMTBsbHhdOiBnaXZpbmcgdXAgYWZ0ZXIgJXUgcGFzc2VzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQodW5zaWduZWQgbG9uZyBsb25nKXN0YXJ0X3BmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbitcXHRcXHRcXHRcXHRcXHQoKHVuc2lnbmVkIGxvbmcgbG9uZyllbmRfcGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpIC0gMSxcXG4rXFx0XFx0XFx0XFx0XFx0cGFzcyAtIDEpO1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiBEdW1wIHRoZSBwYWdlIHdlIGxhc3Qgc3RvcHBlZCBhdCBhcyBhXFxuK1xcdFxcdFxcdFxcdCAqIGRpYWdub3N0aWMgaGludDogdXN1YWxseSB0aGUgc3R1Y2sgcGFnZSxcXG4rXFx0XFx0XFx0XFx0ICogYnV0IGp1c3QgdGhlIHJhbmdlIHN0YXJ0IGFmdGVyIGEgcmVzdGFydC5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdGlmIChwZm4gXFx1MDAzZT0gc3RhcnRfcGZuIFxcdTAwMjZcXHUwMDI2IHBmbiBcXHUwMDNjIGVuZF9wZm4pXFxuK1xcdFxcdFxcdFxcdFxcdGR1bXBfcGFnZShwZm5fdG9fcGFnZShwZm4pLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCJtZW1vcnkgb2ZmbGluZSByZXRyeSBsaW1pdFxcXCIpO1xcbitcXHRcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuK1xcdFxcdFxcdFxcdHJlYXNvbiA9IFxcXCJyZXRyeSBsaW1pdCBleGNlZWRlZFxcXCI7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZmFpbGVkX3JlbW92YWxfaXNvbGF0ZWQ7XFxuK1xcdFxcdFxcdH1cXG4rXFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiBcXG4gXFx0XFx0XFx0cmV0ID0gc2Nhbl9tb3ZhYmxlX3BhZ2VzKHBmbiwgZW5kX3BmbiwgXFx1MDAyNnBmbik7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5pbmRleCBlYWU1MDRiZDk0YzgzYS4uZTExM2YzZmY0NjU1OTQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbkBAIC0xNzcsNiArMTc3LDkgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X3ZtYWxsb2Muc2hcXG4gIyBEZXN0cnVjdGl2ZTogZXZlcnkgc3VjY2Vzc2Z1bCBydW4gcGFuaWNzIHRoZSBrZXJuZWwuICBJbnN0YWxsZWQgYW5kXFxuICMga2VwdCBleGVjdXRhYmxlLCBidXQgbm90IHJ1biBmcm9tIGEgZGVmYXVsdCBrc2VsZnRlc3QgaW52b2NhdGlvbi5cXG4gVEVTVF9QUk9HU19FWFRFTkRFRCArPSBod3BvaXNvbi1wYW5pYy5zaFxcbisjIFNwYXducyBpdHMgb3duIFZNICh2aXJ0bWUtbmcpOyBub3QgcnVuIGZyb20gYSBkZWZhdWx0IGtzZWxmdGVzdFxcbisjIGludm9jYXRpb24uXFxuK1RFU1RfUFJPR1NfRVhURU5ERUQgKz0gdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoXFxuIFxcbiBURVNUX0ZJTEVTIDo9IHRlc3Rfdm1hbGxvYy5zaFxcbiBURVNUX0ZJTEVTICs9IHRlc3RfaG1tLnNoXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZ1xcbmluZGV4IDA2Zjc4YmQyMzJlMmUzLi5kMjJmNjNlYjljMmM5ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWdcXG5AQCAtMTQsMyArMTQsNiBAQCBDT05GSUdfVVBST0JFUz15XFxuIENPTkZJR19NRU1PUllfRkFJTFVSRT15XFxuIENPTkZJR19IV1BPSVNPTl9JTkpFQ1Q9bVxcbiBDT05GSUdfUFJPQ19NRU1fQUxXQVlTX0ZPUkNFPXlcXG4rQ09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG4rQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbitDT05GSUdfQUNQSV9IT1RQTFVHX01FTU9SWT15XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmMyMTFhMGU3Y2FhMmQzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaFxcbkBAIC0wLDAgKzEsMzY5IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFRlc3QgbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgYnkgcmVwcm9kdWNpbmcgdGhlIEFDUElcXG4rIyBtZW1vcnkgaG90LXVucGx1ZyBoYW5nIGluIGt3b3JrZXIgY29udGV4dCBhbmQgdmVyaWZ5aW5nIHRoYXQgdGhlIHJldHJ5XFxuKyMgbGltaXQgcmVjb3ZlcnMgZnJvbSBpdC5cXG4rI1xcbisjIG9mZmxpbmVfcGFnZXMoKSByZXRyaWVzIHBhZ2UgbWlncmF0aW9uIGluIGFuIHVuYm91bmRlZCBsb29wLiAgQSBwYWdlXFxuKyMgdGhhdCBjYW4gbmV2ZXIgYmUgbWlncmF0ZWQgKGxvbmctdGVybSBwaW4sIHNsYWIsIGJ1c3kgbWV0YWRhdGEpIG1ha2VzXFxuKyMgdGhlIGxvb3Agc3BpbiBmb3JldmVyLiAgVXNlcnNwYWNlLWRyaXZlbiBvZmZsaW5lcyBjYW4gYmUgaW50ZXJydXB0ZWQgYnlcXG4rIyBhIHNpZ25hbCwgYnV0IGFuIEFDUEkgRElNTSBlamVjdCBydW5zIG9uIHRoZSBrYWNwaV9ob3RwbHVnX3dxIGt3b3JrZXJcXG4rIyB3aGVyZSBzaWduYWxfcGVuZGluZygpIG5ldmVyIGZpcmVzLCBzbyB0aGUga3dvcmtlciBoYW5ncyB1bnRpbCByZWJvb3QuXFxuKyNcXG4rIyBGbG93OlxcbisjICAgMS4gQm9vdCB0aGUganVzdC1idWlsdCBrZXJuZWwgKHZpcnRtZS1uZykgd2l0aCBhIGNvbGQtcGx1Z2dlZCBwYy1kaW1tLlxcbisjICAgMi4gT25saW5lIHRoZSBESU1NJ3MgYmxvY2tzIGFzIFpPTkVfTU9WQUJMRS5cXG4rIyAgIDMuIFBpbiBvbmUgcGFnZSBvZiB0aGUgRElNTSAodm1zcGxpY2UgbG9uZy10ZXJtIHBpbikuXFxuKyMgICA0LiBFamVjdCB0aGUgRElNTSB2aWEgc3lzZnM7IG9mZmxpbmUgcnVucyBvbiBrYWNwaV9ob3RwbHVnX3dxLlxcbisjICAgNS4gT2JzZXJ2ZSB0aGUgaGFuZyAoZ29pbmctb2ZmbGluZSBwZXJzaXN0cykuXFxuKyMgICA2LiBSZXNjdWU6IHdyaXRlIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzIGF0IHJ1bnRpbWUsIHZlcmlmeSBiYWlsb3V0LlxcbisjXFxuKyMgVEFQIHN1YnRlc3RzOlxcbisjICAgMSAgQUNQSSBlamVjdCBrd29ya2VyIGhhbmdzIHVuYm91bmRlZCBpbiBvZmZsaW5lX3BhZ2VzKClcXG4rIyAgIDIgIHN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxuKyMgICAzICBtZW1vcnkgYmxvY2sgb25saW5lIGFuZCB1c2FibGUgYWZ0ZXIgdGhlIGJhaWxvdXRcXG4rI1xcbisjIERlcGVuZGVuY2llczogdmlydG1lLW5nICh2bmcpLCBxZW11LXN5c3RlbS1cXHUwMDNjYXJjaFxcdTAwM2UsIGNjLlxcbisjIFNLSVBzIChuZXZlciBGQUlMcykgd2hlbiB0b29saW5nIG9yIGtlcm5lbCBzdXBwb3J0IGlzIG1pc3NpbmcuXFxuK1xcbityZWFkb25seSBTQ1JJUFRfRElSPVxcXCIkKGNkIC1QIC0tIFxcXCIkKGRpcm5hbWUgLS0gXFxcIiR7QkFTSF9TT1VSQ0VbMF19XFxcIilcXFwiIFxcdTAwMjZcXHUwMDI2IHB3ZCAtUClcXFwiXFxuK3JlYWRvbmx5IEtFUk5FTF9DSEVDS09VVD1cXFwiJChyZWFscGF0aCBcXFwiJHtTQ1JJUFRfRElSfVxcXCIvLi4vLi4vLi4vLi4vKVxcXCJcXG4rXFxuKyMgc2hlbGxjaGVjayBzb3VyY2U9Li4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxcbitzb3VyY2UgXFxcIiR7U0NSSVBUX0RJUn1cXFwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rXFxuK3JlYWRvbmx5IERJTU1fU0laRT1cXFwiJHtESU1NX1NJWkU6LTI1Nk19XFxcIlxcbityZWFkb25seSBNQVhfUEFTU0VTPVxcXCIke01BWF9QQVNTRVM6LTUwfVxcXCJcXG4rcmVhZG9ubHkgSEFOR19IT0xEPVxcXCIke0hBTkdfSE9MRDotMTB9XFxcIlxcbityZWFkb25seSBSRVNDVUVfVElNRU9VVD1cXFwiJHtSRVNDVUVfVElNRU9VVDotMzB9XFxcIlxcbityZWFkb25seSBCT09UX1RJTUVPVVQ9XFxcIiR7Qk9PVF9USU1FT1VUOi0yNDB9XFxcIlxcbitcXG4rcmVhZG9ubHkgTE9HPVxcXCIkKG1rdGVtcCAvdG1wL3ZtdGVzdF9taHBfWFhYWFhYLmxvZylcXFwiXFxuK3JlYWRvbmx5IEdVRVNUX1NDUklQVD1cXFwiJChta3RlbXAgL3RtcC92bXRlc3RfbWhwX2d1ZXN0X1hYWFhYWC5zaClcXFwiXFxuK3JlYWRvbmx5IFBJTl9TUkM9XFxcIiQobWt0ZW1wIC90bXAvdm10ZXN0X21ocF9waW5fWFhYWFhYLmMpXFxcIlxcbisjIE11c3QgbGl2ZSBpbiB0aGUga2VybmVsIHRyZWUgc28gdGhlIGd1ZXN0IHNlZXMgaXQgdGhyb3VnaCB0aGUgOXAgcm9vdGZzLlxcbityZWFkb25seSBQSU5fQklOPVxcXCIke1NDUklQVF9ESVJ9Ly52bXRlc3RfcGluX3BhcmsuJCRcXFwiXFxuK1xcbitWTkdfUElEPVxcXCJcXFwiXFxuK1xcbitjbGVhbnVwKCkge1xcbitcXHRbIC1uIFxcXCIke1ZOR19QSUR9XFxcIiBdIFxcdTAwMjZcXHUwMDI2IGtpbGwgXFxcIiR7Vk5HX1BJRH1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdHJtIC1mIFxcXCIke0xPR31cXFwiIFxcXCIke0dVRVNUX1NDUklQVH1cXFwiIFxcXCIke1BJTl9TUkN9XFxcIiBcXFwiJHtQSU5fQklOfVxcXCJcXG4rfVxcbitcXG4rZ3Vlc3RfcmVzdWx0KCkge1xcbitcXHRncmVwIC1vIFxcXCJeJHsxfT1bQS1aYS16MC05Xy1dKlxcXCIgXFxcIiR7TE9HfVxcXCIgfCB0YWlsIC0xIHwgY3V0IC1kPSAtZjJcXG4rfVxcbitcXG4rZHVtcF9sb2dfdGFpbCgpIHtcXG4rXFx0dGFpbCAtMjUgXFxcIiR7TE9HfVxcXCIgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbGluZTsgZG9cXG4rXFx0XFx0a3RhcF9wcmludF9tc2cgXFxcIiR7bGluZX1cXFwiXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rc2tpcF9hbGxfdGVzdHMoKSB7XFxuK1xcdGxvY2FsIGlcXG4rXFxuK1xcdGZvciBpIGluIDEgMiAzOyBkb1xcbitcXHRcXHRrdGFwX3Rlc3Rfc2tpcCBcXFwiJDFcXFwiXFxuK1xcdGRvbmVcXG4rXFx0a3RhcF9maW5pc2hlZFxcbit9XFxuK1xcbisjIC0tIHByZS1mbGlnaHQgY2hlY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuK2t0YXBfcHJpbnRfaGVhZGVyXFxuK2t0YXBfc2V0X3BsYW4gM1xcbit0cmFwIGNsZWFudXAgRVhJVFxcbitcXG4rYXJjaD1cXFwiJCh1bmFtZSAtbSlcXFwiXFxuK2Nhc2UgXFxcIiR7YXJjaH1cXFwiIGluXFxuK3g4Nl82NHxhYXJjaDY0KSA7O1xcbisqKVxcdHNraXBfYWxsX3Rlc3RzIFxcXCJwYy1kaW1tIEFDUEkgaG90cGx1ZyBub3QgYXZhaWxhYmxlIG9uICR7YXJjaH1cXFwiIDs7XFxuK2VzYWNcXG4rXFxuK2ZvciBkZXAgaW4gdm5nIFxcXCJxZW11LXN5c3RlbS0ke2FyY2h9XFxcIiBjYzsgZG9cXG4rXFx0aWYgISBjb21tYW5kIC12IFxcXCIke2RlcH1cXFwiIFxcdTAwM2UvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MTsgdGhlblxcbitcXHRcXHRza2lwX2FsbF90ZXN0cyBcXFwiJHtkZXB9IG5vdCBpbnN0YWxsZWRcXFwiXFxuK1xcdGZpXFxuK2RvbmVcXG4rXFxuKyMgLS0gcGluIGhlbHBlciAoY29tcGlsZWQgb24gdGhlIGhvc3QsIHZpc2libGUgdG8gdGhlIGd1ZXN0IHZpYSA5cCkgLS0tLS0tLS0tLS1cXG4rI1xcbisjIEFsbG9jYXRlIG9uZSBibG9jaydzIHdvcnRoIG9mIHBhZ2VzIChaT05FX01PVkFCTEUgc2VydmVzIHRoZW0gZnJvbSB0aGVcXG4rIyBESU1NKSwgZmluZCBvbmUgdGhhdCBsYW5kZWQgaW4gYSB0YXJnZXQgYmxvY2ssIHZtc3BsaWNlLXBpbiBpdCBpbnRvIGFcXG4rIyBwaXBlLCBwcmludCBQSU5fQkxLPVxcdTAwM2NOXFx1MDAzZSwgYW5kIHNsZWVwIGZvcmV2ZXIuXFxuK1xcbitjYXQgXFx1MDAzZSBcXFwiJHtQSU5fU1JDfVxcXCIgXFx1MDAzY1xcdTAwM2MnUElORU9GJ1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkbGliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy91aW8uaFxcdTAwM2VcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1lbW9yeV9ibG9ja19zaXplKHZvaWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbNjRdO1xcbitcXHRzc2l6ZV90IG47XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdGZkID0gb3BlbihcXFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvYmxvY2tfc2l6ZV9ieXRlc1xcXCIsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdG4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSk7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0aWYgKG4gXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGJ1ZltuXSA9ICdcXFxcMCc7XFxuK1xcdHJldHVybiBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTYpO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyB2YWRkcl90b19ibG9jayhpbnQgcGFnZW1hcF9mZCwgY2hhciAqdmFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgICBsb25nIHBhZ2Vfc2l6ZSwgdW5zaWduZWQgbG9uZyBibGtfc2l6ZSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHZwbiA9ICh1bnNpZ25lZCBsb25nKXZhZGRyIC8gcGFnZV9zaXplO1xcbitcXHR1aW50NjRfdCBlbnQ7XFxuK1xcbitcXHRpZiAocHJlYWQocGFnZW1hcF9mZCwgXFx1MDAyNmVudCwgc2l6ZW9mKGVudCksIHZwbiAqIDgpICE9IHNpemVvZihlbnQpKVxcbitcXHRcXHRyZXR1cm4gLTFVTDtcXG4rXFx0aWYgKCEoZW50IFxcdTAwMjYgKDFVTEwgXFx1MDAzY1xcdTAwM2MgNjMpKSlcXG4rXFx0XFx0cmV0dXJuIC0xVUw7XFxuK1xcdHJldHVybiAoZW50IFxcdTAwMjYgKCgxVUxMIFxcdTAwM2NcXHUwMDNjIDU1KSAtIDEpKSAqIHBhZ2Vfc2l6ZSAvIGJsa19zaXplO1xcbit9XFxuK1xcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuK3tcXG4rXFx0bG9uZyBwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYmxrX3NpemUgPSBtZW1vcnlfYmxvY2tfc2l6ZSgpO1xcbitcXHR1bnNpZ25lZCBsb25nIG9mZiwgYmxrID0gMDtcXG4rXFx0Y2hhciAqYXJlYSwgKnBhZ2UgPSBOVUxMO1xcbitcXHRpbnQgcGFnZW1hcF9mZCwgcGlwZWZkWzJdLCBpO1xcbitcXG4rXFx0aWYgKGFyZ2MgXFx1MDAzYyAyIHx8ICFibGtfc2l6ZSkge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcInVzYWdlOiBwaW5fcGFyayBcXHUwMDNjbWVtb3J5IGJsb2NrXFx1MDAzZS4uLlxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRhcmVhID0gbW1hcChOVUxMLCBibGtfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4rXFx0XFx0ICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9QT1BVTEFURSwgLTEsIDApO1xcbitcXHRpZiAoYXJlYSA9PSBNQVBfRkFJTEVEKSB7XFxuK1xcdFxcdHBlcnJvcihcXFwibW1hcFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXHRtZW1zZXQoYXJlYSwgMHg0MiwgYmxrX3NpemUpO1xcbitcXG4rXFx0cGFnZW1hcF9mZCA9IG9wZW4oXFxcIi9wcm9jL3NlbGYvcGFnZW1hcFxcXCIsIE9fUkRPTkxZKTtcXG4rXFx0aWYgKHBhZ2VtYXBfZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHBlcnJvcihcXFwicGFnZW1hcFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChvZmYgPSAwOyBvZmYgXFx1MDAzYyBibGtfc2l6ZSBcXHUwMDI2XFx1MDAyNiAhcGFnZTsgb2ZmICs9IHBhZ2Vfc2l6ZSkge1xcbitcXHRcXHRibGsgPSB2YWRkcl90b19ibG9jayhwYWdlbWFwX2ZkLCBhcmVhICsgb2ZmLCBwYWdlX3NpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgYmxrX3NpemUpO1xcbitcXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgYXJnYzsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmIChibGsgPT0gc3RydG91bChhcmd2W2ldLCBOVUxMLCAxMCkpIHtcXG4rXFx0XFx0XFx0XFx0cGFnZSA9IGFyZWEgKyBvZmY7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRjbG9zZShwYWdlbWFwX2ZkKTtcXG4rXFxuK1xcdGlmICghcGFnZSkge1xcbitcXHRcXHRwcmludGYoXFxcIlBJTl9OT05FXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZmZsdXNoKHN0ZG91dCk7XFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGlwZShwaXBlZmQpKSB7XFxuK1xcdFxcdHBlcnJvcihcXFwicGlwZVxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0c3RydWN0IGlvdmVjIGlvdiA9IHsgLmlvdl9iYXNlID0gcGFnZSwgLmlvdl9sZW4gPSBwYWdlX3NpemUgfTtcXG4rXFxuK1xcdGlmICh2bXNwbGljZShwaXBlZmRbMV0sIFxcdTAwMjZpb3YsIDEsIDApICE9IHBhZ2Vfc2l6ZSkge1xcbitcXHRcXHRwZXJyb3IoXFxcInZtc3BsaWNlXFxcIik7XFxuK1xcdFxcdHJldHVybiAxO1xcbitcXHR9XFxuK1xcbitcXHRwcmludGYoXFxcIlBJTl9CTEs9JWx1XFxcXG5cXFwiLCBibGspO1xcbitcXHRmZmx1c2goc3Rkb3V0KTtcXG4rXFx0cGF1c2UoKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rUElORU9GXFxuK1xcbitpZiAhIGNjIC1PMiAtbyBcXFwiJHtQSU5fQklOfVxcXCIgXFxcIiR7UElOX1NSQ31cXFwiIDJcXHUwMDNlXFx1MDAzZVxcXCIke0xPR31cXFwiOyB0aGVuXFxuK1xcdHNraXBfYWxsX3Rlc3RzIFxcXCJjYW5ub3QgYnVpbGQgdGhlIHBpbiBoZWxwZXJcXFwiXFxuK2ZpXFxuK1xcbisjIC0tIGd1ZXN0IHNjcmlwdCAocnVucyBhcyBpbml0IGluc2lkZSB0aGUgVk0pIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbitjYXQgXFx1MDAzZSBcXFwiJHtHVUVTVF9TQ1JJUFR9XFxcIiBcXHUwMDNjXFx1MDAzY1BST0xPR1VFXFxuKyMhL2Jpbi9iYXNoXFxuK3JlYWRvbmx5IE1BWF9QQVNTRVM9JHtNQVhfUEFTU0VTfVxcbityZWFkb25seSBIQU5HX0hPTEQ9JHtIQU5HX0hPTER9XFxuK3JlYWRvbmx5IFJFU0NVRV9USU1FT1VUPSR7UkVTQ1VFX1RJTUVPVVR9XFxuK3JlYWRvbmx5IFBJTl9QQVJLPVxcXCIke1BJTl9CSU59XFxcIlxcbitQUk9MT0dVRVxcbitcXG4rY2F0IFxcdTAwM2VcXHUwMDNlIFxcXCIke0dVRVNUX1NDUklQVH1cXFwiIFxcdTAwM2NcXHUwMDNjJ0dVRVNURU9GJ1xcbitzZXQgLXVcXG4rXFxuK3JlYWRvbmx5IFBBUkFNPS9zeXMvbW9kdWxlL21lbW9yeV9ob3RwbHVnL3BhcmFtZXRlcnMvb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNcXG4rcmVhZG9ubHkgTUVNPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5XFxuK1xcbitza2lwKCkgeyBlY2hvIFxcXCJWTVRFU1RfU0tJUDogJCpcXFwiOyBlY2hvIFxcXCJWTVRFU1RfRE9ORVxcXCI7IGV4aXQgMDsgfVxcbitcXG4rYmxvY2tfc3RhdGUoKSB7XFxuK1xcdGNhdCBcXFwiJHtNRU19L21lbW9yeSR7cGlubmVkX2Jsa30vc3RhdGVcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IGVjaG8gR09ORVxcbit9XFxuK1xcbitbIC1mIFxcXCIke1BBUkFNfVxcXCIgXSB8fCBza2lwIFxcXCJrZXJuZWwgbGFja3Mgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNcXFwiXFxuK1xcbisjIDEuIE9ubGluZSB0aGUgRElNTSdzIGJsb2NrcyBhcyBaT05FX01PVkFCTEUuXFxuK2RpbW1fYmxvY2tzPVxcXCJcXFwiXFxuK2ZvciBzIGluIFxcXCIke01FTX1cXFwiL21lbW9yeSovc3RhdGU7IGRvXFxuK1xcdFsgXFxcIiQoY2F0IFxcXCIke3N9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbClcXFwiID0gb2ZmbGluZSBdIHx8IGNvbnRpbnVlXFxuK1xcdGlmIGVjaG8gb25saW5lX21vdmFibGUgXFx1MDAzZSBcXFwiJHtzfVxcXCIgMlxcdTAwM2UvZGV2L251bGw7IHRoZW5cXG4rXFx0XFx0Yj0ke3MlL3N0YXRlfVxcbitcXHRcXHRkaW1tX2Jsb2Nrcz1cXFwiJHtkaW1tX2Jsb2Nrc30gJHtiIyMqbWVtb3J5fVxcXCJcXG4rXFx0ZmlcXG4rZG9uZVxcbitlY2hvIFxcXCIjIERJTU0gbWVtb3J5IGJsb2Nrczoke2RpbW1fYmxvY2tzOi0gbm9uZX1cXFwiXFxuK1sgLW4gXFxcIiR7ZGltbV9ibG9ja3N9XFxcIiBdIHx8IHNraXAgXFxcIm5vIG9mZmxpbmUgbWVtb3J5IGJsb2NrcyAocGMtZGltbSBtaXNzaW5nPylcXFwiXFxuK1xcbisjIDIuIFBpbiBvbmUgcGFnZSBpbnNpZGUgdGhlIERJTU0uXFxuK1xcXCIke1BJTl9QQVJLfVxcXCIgJHtkaW1tX2Jsb2Nrc30gXFx1MDAzZSAvdG1wL3Bpbi5vdXQgMlxcdTAwM2VcXHUwMDI2MSBcXHUwMDI2XFxuK3Bpbl9waWQ9JCFcXG4rZm9yIF8gaW4gJChzZXEgMSAxMCk7IGRvXFxuK1xcdGdyZXAgLXEgXFxcIlBJTl9cXFwiIC90bXAvcGluLm91dCAyXFx1MDAzZS9kZXYvbnVsbCBcXHUwMDI2XFx1MDAyNiBicmVha1xcbitcXHRzbGVlcCAxXFxuK2RvbmVcXG4rcGlubmVkX2Jsaz0kKHNlZCAtbiAncy9eUElOX0JMSz0vL3AnIC90bXAvcGluLm91dClcXG4rWyAtbiBcXFwiJHtwaW5uZWRfYmxrfVxcXCIgXSB8fCBza2lwIFxcXCJwaW4gZmFpbGVkOiAkKGNhdCAvdG1wL3Bpbi5vdXQgMlxcdTAwM2UvZGV2L251bGwpXFxcIlxcbitlY2hvIFxcXCIjIHBpbm5lZCBvbmUgcGFnZSBpbiBibG9jayBtZW1vcnkke3Bpbm5lZF9ibGt9XFxcIlxcbitcXG4rIyAzLiBFamVjdCB0aGUgRElNTSB3aXRoIHRoZSByZXRyeSBsaW1pdCBkaXNhYmxlZCAoZGVmYXVsdCA9IHVuYm91bmRlZCkuXFxuK2VjaG8gMCBcXHUwMDNlIFxcXCIke1BBUkFNfVxcXCJcXG4rZG1lc2cgLWMgXFx1MDAzZSAvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSB8fCB0cnVlXFxuK1xcbitlamRldj1cXFwiXFxcIlxcbitmb3IgZGV2IGluIC9zeXMvYnVzL2FjcGkvZGV2aWNlcy9QTlAwQzgwOio7IGRvXFxuK1xcdFsgLWUgXFxcIiR7ZGV2fS9lamVjdFxcXCIgXSBcXHUwMDI2XFx1MDAyNiB7IGVqZGV2PVxcXCIke2Rldn1cXFwiOyBicmVhazsgfVxcbitkb25lXFxuK1sgLW4gXFxcIiR7ZWpkZXZ9XFxcIiBdIHx8IHNraXAgXFxcIm5vIGVqZWN0YWJsZSBBQ1BJIG1lbW9yeSBkZXZpY2UgKFBOUDBDODApXFxcIlxcbitlY2hvIFxcXCIjIGVqZWN0aW5nICR7ZWpkZXZ9XFxcIlxcbitlY2hvIDEgXFx1MDAzZSBcXFwiJHtlamRldn0vZWplY3RcXFwiIFxcdTAwMjZcXG4rXFxuKyMgNC4gT2JzZXJ2ZSB0aGUgaGFuZzogdGhlIGJsb2NrIG11c3Qgc3RheSBpbiBcXFwiZ29pbmctb2ZmbGluZVxcXCIuXFxuK3NsZWVwIDNcXG4rc3R1Y2s9MFxcbitpZiBbIFxcXCIkKGJsb2NrX3N0YXRlKVxcXCIgPSBnb2luZy1vZmZsaW5lIF07IHRoZW5cXG4rXFx0ZWNobyBcXFwiIyBibG9jayBtZW1vcnkke3Bpbm5lZF9ibGt9IGdvaW5nLW9mZmxpbmUsIGhvbGRpbmcgJHtIQU5HX0hPTER9c1xcXCJcXG4rXFx0c2xlZXAgXFxcIiR7SEFOR19IT0xEfVxcXCJcXG4rXFx0aWYgWyBcXFwiJChibG9ja19zdGF0ZSlcXFwiID0gZ29pbmctb2ZmbGluZSBdOyB0aGVuXFxuK1xcdFxcdHN0dWNrPTFcXG4rXFx0XFx0ZWNobyAxIFxcdTAwM2UgL3Byb2Mvc3lzL2tlcm5lbC9zeXNycSAyXFx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlXFxuK1xcdFxcdGVjaG8gbCBcXHUwMDNlIC9wcm9jL3N5c3JxLXRyaWdnZXIgMlxcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxcbitcXHRcXHRzbGVlcCAxXFxuK1xcdFxcdGRtZXNnIHwgZ3JlcCAtQjIgLUExMiBcXFwib2ZmbGluZV9wYWdlc1xcXCIgfCB0YWlsIC0yMCBcXFxcXFxuK1xcdFxcdFxcdHwgc2VkICdzL14vIyAgLydcXG4rXFx0ZmlcXG4rZmlcXG4rZWNobyBcXFwiVk1URVNUX1NUVUNLPSR7c3R1Y2t9XFxcIlxcbitcXG4rIyA1LiBSZXNjdWU6IGFybSB0aGUgcmV0cnkgbGltaXQgYXQgcnVudGltZSBhbmQgd2FpdCBmb3IgYmFpbG91dC5cXG4rZWNobyBcXFwiJHtNQVhfUEFTU0VTfVxcXCIgXFx1MDAzZSBcXFwiJHtQQVJBTX1cXFwiXFxuK2VjaG8gXFxcIiMgYXJtZWQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9JChjYXQgXFxcIiR7UEFSQU19XFxcIilcXFwiXFxuK1xcbityZXNjdWVkPTBcXG4rZm9yIF8gaW4gJChzZXEgMSBcXFwiJHtSRVNDVUVfVElNRU9VVH1cXFwiKTsgZG9cXG4rXFx0aWYgZG1lc2cgfCBncmVwIC1xIFxcXCJnaXZpbmcgdXAgYWZ0ZXJcXFwiOyB0aGVuXFxuK1xcdFxcdHJlc2N1ZWQ9MVxcbitcXHRcXHRicmVha1xcbitcXHRmaVxcbitcXHRzbGVlcCAxXFxuK2RvbmVcXG4rZG1lc2cgfCBncmVwIFxcXCJnaXZpbmcgdXAgYWZ0ZXJcXFwiIHwgdGFpbCAtMiB8IHNlZCAncy9eLyMgLydcXG4rZWNobyBcXFwiVk1URVNUX1JFU0NVRUQ9JHtyZXNjdWVkfVxcXCJcXG4rXFxuK3NsZWVwIDJcXG4rZWNobyBcXFwiVk1URVNUX0JMT0NLX1NUQVRFPSQoYmxvY2tfc3RhdGUpXFxcIlxcbitcXG4ra2lsbCBcXFwiJHtwaW5fcGlkfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rZWNobyBcXFwiVk1URVNUX0RPTkVcXFwiXFxuK0dVRVNURU9GXFxuK1xcbisjIC0tIGxhdW5jaCBWTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbisoIGNkIFxcXCIke0tFUk5FTF9DSEVDS09VVH1cXFwiIFxcdTAwMjZcXHUwMDI2IGV4ZWMgdm5nIC0tZm9yY2UtOXAgLS1uby12aXJ0bWUtbmctaW5pdCBcXFxcXFxuK1xcdC0tcWVtdS1vcHQ9LW0gLS1xZW11LW9wdD1cXFwiMkcsc2xvdHM9NCxtYXhtZW09OEdcXFwiIFxcXFxcXG4rXFx0LS1xZW11LW9wdD0tb2JqZWN0IFxcXFxcXG4rXFx0LS1xZW11LW9wdD1cXFwibWVtb3J5LWJhY2tlbmQtcmFtLGlkPW1lbTAsc2l6ZT0ke0RJTU1fU0laRX1cXFwiIFxcXFxcXG4rXFx0LS1xZW11LW9wdD0tZGV2aWNlIC0tcWVtdS1vcHQ9XFxcInBjLWRpbW0saWQ9ZGltbTAsbWVtZGV2PW1lbTBcXFwiIFxcXFxcXG4rXFx0YmFzaCBcXFwiJHtHVUVTVF9TQ1JJUFR9XFxcIiApIFxcdTAwM2UgXFxcIiR7TE9HfVxcXCIgMlxcdTAwM2VcXHUwMDI2MSBcXHUwMDI2XFxuK1ZOR19QSUQ9JCFcXG4rXFxuK2ZvciBfIGluICQoc2VxIDEgXFxcIiR7Qk9PVF9USU1FT1VUfVxcXCIpOyBkb1xcbitcXHRncmVwIC1xIFxcXCJWTVRFU1RfRE9ORVxcXCIgXFxcIiR7TE9HfVxcXCIgMlxcdTAwM2UvZGV2L251bGwgXFx1MDAyNlxcdTAwMjYgYnJlYWtcXG4rXFx0a2lsbCAtMCBcXFwiJHtWTkdfUElEfVxcXCIgMlxcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcXG4rXFx0c2xlZXAgMVxcbitkb25lXFxuK1xcbitpZiAhIGdyZXAgLXEgXFxcIlZNVEVTVF9ET05FXFxcIiBcXFwiJHtMT0d9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRkdW1wX2xvZ190YWlsXFxuK1xcdHNraXBfYWxsX3Rlc3RzIFxcXCJWTSBkaWQgbm90IGZpbmlzaCB3aXRoaW4gJHtCT09UX1RJTUVPVVR9c1xcXCJcXG4rZmlcXG4rXFxuK2tpbGwgXFxcIiR7Vk5HX1BJRH1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK3dhaXQgXFxcIiR7Vk5HX1BJRH1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1ZOR19QSUQ9XFxcIlxcXCJcXG4rXFxuKyMgLS0gcmVwb3J0IHJlc3VsdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuK3NraXBfcmVhc29uPVxcXCIkKGdyZXAgXFxcIl5WTVRFU1RfU0tJUDogXFxcIiBcXFwiJHtMT0d9XFxcIiB8IHRhaWwgLTEgfCB0ciAtZCAnXFxcXHInKVxcXCJcXG4raWYgWyAtbiBcXFwiJHtza2lwX3JlYXNvbn1cXFwiIF07IHRoZW5cXG4rXFx0c2tpcF9hbGxfdGVzdHMgXFxcIiR7c2tpcF9yZWFzb24jVk1URVNUX1NLSVA6IH1cXFwiXFxuK2ZpXFxuK1xcbitncmVwIFxcXCJeI1xcXCIgXFxcIiR7TE9HfVxcXCIgfCB0ciAtZCAnXFxcXHInIHwgd2hpbGUgSUZTPSByZWFkIC1yIGxpbmU7IGRvXFxuK1xcdGt0YXBfcHJpbnRfbXNnIFxcXCIke2xpbmUjXFxcXCMgfVxcXCJcXG4rZG9uZVxcbitcXG4rc3R1Y2s9XFxcIiQoZ3Vlc3RfcmVzdWx0IFZNVEVTVF9TVFVDSylcXFwiXFxuK3Jlc2N1ZWQ9XFxcIiQoZ3Vlc3RfcmVzdWx0IFZNVEVTVF9SRVNDVUVEKVxcXCJcXG4rYmxrX3N0YXRlPVxcXCIkKGd1ZXN0X3Jlc3VsdCBWTVRFU1RfQkxPQ0tfU1RBVEUpXFxcIlxcbitcXG4raWYgWyBcXFwiJHtibGtfc3RhdGU6LUdPTkV9XFxcIiA9IFxcXCJHT05FXFxcIiBdOyB0aGVuXFxuK1xcdHNraXBfYWxsX3Rlc3RzIFxcXCJESU1NIHdhcyBlamVjdGVkIGRlc3BpdGUgdGhlIHBpbiAocGluIGRpZCBub3QgaG9sZClcXFwiXFxuK2ZpXFxuK1xcbitpZiBbIFxcXCIke3N0dWNrOi0wfVxcXCIgPSAxIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcIkFDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpXFxcIlxcbitlbHNlXFxuK1xcdGR1bXBfbG9nX3RhaWxcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcIkFDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpXFxcIlxcbitmaVxcbitcXG4raWYgWyBcXFwiJHtyZXNjdWVkOi0wfVxcXCIgPSAxIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcInN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxcIlxcbitlbHNlXFxuK1xcdGR1bXBfbG9nX3RhaWxcXG4rXFx0a3RhcF90ZXN0X2ZhaWwgXFxcInN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxcIlxcbitmaVxcbitcXG4raWYgWyBcXFwiJHtibGtfc3RhdGV9XFxcIiA9IFxcXCJvbmxpbmVcXFwiIF07IHRoZW5cXG4rXFx0a3RhcF90ZXN0X3Bhc3MgXFxcIm1lbW9yeSBibG9jayBvbmxpbmUgYW5kIHVzYWJsZSBhZnRlciB0aGUgYmFpbG91dFxcXCJcXG4rZWxzZVxcbitcXHRrdGFwX3Rlc3RfZmFpbCBcXFwibWVtb3J5IGJsb2NrIG9ubGluZSBhbmQgdXNhYmxlIGFmdGVyIHRoZSBiYWlsb3V0IChzdGF0ZT0ke2Jsa19zdGF0ZX0pXFxcIlxcbitmaVxcbitcXG4ra3RhcF9maW5pc2hlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoyNzowNS45OTcxOTQyMzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMjE2NTUyMzAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiTUVNT1JZX0hPVFJFTU9WRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9mZmxpbmVfcGFnZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgaG90cGx1ZyBsb2dpYyBpbiBgb2ZmbGluZV9wYWdlc2AgdG8gbGltaXQgdGhlIG51bWJlciBvZiBtaWdyYXRpb24gcGFzc2VzIGR1cmluZyBtZW1vcnkgb2ZmbGluaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB3aGVuIG1lbW9yeSBpcyBvZmZsaW5lZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MzBiMzIxNDUyODZmNjUzZmVjNGIxOTQ1ZWRkNzk5MjEyMjBiYWZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMDI6Mjc6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCA1M2YwODk1MGE2MzA5Ni4uOTBiNjdjNDU3YzJhODIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC0zOTgwLDYgKzM5ODAsMjAgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHROb3RlIHRoYXQgZXZlbiB3aGVuIGVuYWJsZWQsIHRoZXJlIGFyZSBhIGZldyBjYXNlcyB3aGVyZVxuIFx0XHRcdHRoZSBmZWF0dXJlIGlzIG5vdCBlZmZlY3RpdmUuXG4gXG4rXHRtZW1vcnlfaG90cGx1Zy5vZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlcz1cbitcdFx0XHRbS05MXSBNYXhpbXVtIG51bWJlciBvZiBtaWdyYXRpb24gcGFzc2VzXG4rXHRcdFx0Zm9yIG1lbW9yeSBvZmZsaW5pbmcuXG4rXHRcdFx0Rm9ybWF0OiBcdTAwM2NpbnRlZ2VyXHUwMDNlXG4rXHRcdFx0ZGVmYXVsdDogMCAobm8gbGltaXQsIGhpc3RvcmljYWwgYmVoYXZpb3VyKVxuK1x0XHRcdFdoZW4gbm9uLXplcm8sIG1lbW9yeSBvZmZsaW5pbmcgZ2l2ZXMgdXAgd2l0aFxuK1x0XHRcdC1FQlVTWSBhZnRlciB0aGlzIG1hbnkgbWlncmF0aW9uIHBhc3NlcyBvdmVyXG4rXHRcdFx0dGhlIHJhbmdlLCBpbnN0ZWFkIG9mIHJldHJ5aW5nIGZvcmV2ZXIgb24gYVxuK1x0XHRcdHN0dWNrIHBhZ2UuICBFYWNoIHBhc3Mgc2NhbnMgdGhlIHJhbmdlIGFuZFxuK1x0XHRcdG1pZ3JhdGVzIHdoYXQgaXQgY2FuLlxuK1x0XHRcdFRoZSBwYXJhbWV0ZXIgaXMgcmUtcmVhZCBvbiBldmVyeSBwYXNzLCBzbyBhblxuK1x0XHRcdG9mZmxpbmUgcmVxdWVzdCB0aGF0IGlzIGFscmVhZHkgc3R1Y2sgY2FuIGJlXG4rXHRcdFx0cmVzY3VlZCBhdCBydW50aW1lIGJ5IHdyaXRpbmcgdGhlIHBhcmFtZXRlci5cbitcbiBcdG1lbXRlc3Q9XHRbS05MLFg4NixBUk0sTTY4SyxQUEMsUklTQ1YsRUFSTFldIEVuYWJsZSBtZW10ZXN0XG4gXHRcdFx0Rm9ybWF0OiBcdTAwM2NpbnRlZ2VyXHUwMDNlXG4gXHRcdFx0ZGVmYXVsdCA6IDAgXHUwMDNjZGlzYWJsZVx1MDAzZVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3RcbmluZGV4IDAyMDdmODcyNTE0MjFjLi43OWI0NTEwOWM0MDhjOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdFxuQEAgLTIyNCw3ICsyMjQsMTAgQEAgaW5jcmVhc2VzIG1lbW9yeSBvZmZsaW5pbmcgcmVsaWFiaWxpdHk7IHN0aWxsLCBtZW1vcnkgb2ZmbGluaW5nIGNhbiBmYWlsIGluXG4gc29tZSBjb3JuZXIgY2FzZXMuXG4gXG4gRnVydGhlciwgbWVtb3J5IG9mZmxpbmluZyBtaWdodCByZXRyeSBmb3IgYSBsb25nIHRpbWUgKG9yIGV2ZW4gZm9yZXZlciksIHVudGlsXG4tYWJvcnRlZCBieSB0aGUgdXNlci5cbithYm9ydGVkIGJ5IHRoZSB1c2VyLiAgVGhlIGBgbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNgYFxuK3BhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBib3VuZCB0aGUgbnVtYmVyIG9mIHJldHJ5IHBhc3NlcywgbWFraW5nIGFuIG9mZmxpbmVcbityZXF1ZXN0IHRoYXQgY2Fubm90IG1ha2UgcHJvZ3Jlc3MgZmFpbCB3aXRoIGBgLUVCVVNZYGAgaW5zdGVhZCBvZiByZXRyeWluZ1xuK2luZGVmaW5pdGVseSAoc2VlIGBNb2R1bGUgUGFyYW1ldGVyc2BfKS5cbiBcbiBPZmZsaW5pbmcgb2YgYSBtZW1vcnkgYmxvY2sgY2FuIGJlIHRyaWdnZXJlZCB2aWE6OlxuIFxuQEAgLTU0Nyw2ICs1NTAsMjcgQEAgVGhlIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVycyBhcmUgY3VycmVudGx5IGRlZmluZWQ6XG4gXHRcdFx0XHQgcG9zc2libGUuXG4gXG4gXHRcdFx0XHQgUGFyYW1ldGVyIGF2YWlsYWJpbGl0eSBkZXBlbmRzIG9uIENPTkZJR19OVU1BLlxuK2Bgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXNgYFx0IHJlYWQtd3JpdGU6IE1heGltdW0gbnVtYmVyIG9mIG1pZ3JhdGlvblxuK1x0XHRcdFx0IHBhc3NlcyBmb3IgYSBzaW5nbGUgbWVtb3J5IG9mZmxpbmVcbitcdFx0XHRcdCByZXF1ZXN0LiAgTWVtb3J5IG9mZmxpbmluZyByZXRyaWVzIHRvXG4rXHRcdFx0XHQgbWlncmF0ZSBhbmQgaXNvbGF0ZSBwYWdlcyB1bnRpbCBpdCBzdWNjZWVkcztcbitcdFx0XHRcdCBhIHBhZ2UgdGhhdCBjYW4gbmV2ZXIgYmUgbWlncmF0ZWQgb3IgZnJlZWRcbitcdFx0XHRcdCBtYWtlcyBpdCByZXRyeSBmb3JldmVyLiAgV2hlbiB0aGlzIHBhcmFtZXRlclxuK1x0XHRcdFx0IGlzIG5vbi16ZXJvLCBhbiBvZmZsaW5lIHJlcXVlc3QgZ2l2ZXMgdXBcbitcdFx0XHRcdCB3aXRoIGBgLUVCVVNZYGAgYWZ0ZXIgdGhlIGNvbmZpZ3VyZWQgbnVtYmVyXG4rXHRcdFx0XHQgb2YgbWlncmF0aW9uIHBhc3NlcyBhbmQgdGhlIG1lbW9yeSBibG9ja1xuK1x0XHRcdFx0IHN0YXlzIG9ubGluZS5cbitcbitcdFx0XHRcdCBUaGUgcGFyYW1ldGVyIGlzIHJlLXJlYWQgb24gZXZlcnkgcGFzcywgc29cbitcdFx0XHRcdCBhbiBvZmZsaW5lIHJlcXVlc3QgdGhhdCBpcyBhbHJlYWR5IHN0dWNrXG4rXHRcdFx0XHQgcmV0cnlpbmcgY2FuIGJlIHJlc2N1ZWQgYXQgcnVudGltZSBieVxuK1x0XHRcdFx0IHdyaXRpbmcgYSBub24temVybyB2YWx1ZSwgd2l0aG91dCBhIHJlYm9vdC5cbitcbitcdFx0XHRcdCBUaGUgZGVmYXVsdCBpcyBcIjBcIiwgbWVhbmluZyBubyBsaW1pdCAodGhlXG4rXHRcdFx0XHQgaGlzdG9yaWNhbCBiZWhhdmlvdXIpLlxuK1xuK1x0XHRcdFx0IFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvblxuK1x0XHRcdFx0IENPTkZJR19NRU1PUllfSE9UUkVNT1ZFLlxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG4gWk9ORV9NT1ZBQkxFXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbmluZGV4IDIyNmFiOWNiMDc4YWQxLi45MDY3ODI5MzQ5YTBkYSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC0xNzg1LDYgKzE3ODUsMTIgQEAgYm9vbCBtaHBfcmFuZ2VfYWxsb3dlZCh1NjQgc3RhcnQsIHU2NCBzaXplLCBib29sIG5lZWRfbWFwcGluZylcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXG4rLyogTWF4IG9mZmxpbmVfcGFnZXMoKSBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSAtRUJVU1k7IDAgPSByZXRyeSBmb3JldmVyLiAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgX19yZWFkX21vc3RseTtcbittb2R1bGVfcGFyYW0ob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMsIHVpbnQsIDA2NDQpO1xuK01PRFVMRV9QQVJNX0RFU0Mob2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMsXG4rXHRcIk1heCBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSBtZW1vcnkgb2ZmbGluZSBnaXZlcyB1cCAoMCA9IG5vIGxpbWl0KVwiKTtcbitcbiAvKlxuICAqIFNjYW4gcGZuIHJhbmdlIFtzdGFydCxlbmQpIHRvIGZpbmQgbW92YWJsZS9taWdyYXRhYmxlIHBhZ2VzIChMUlUgYW5kXG4gICogaHVnZXRsYiBmb2xpbywgbW92YWJsZV9vcHMgcGFnZXMpLiBXaWxsIHNraXAgb3ZlciBtb3N0IHVubW92YWJsZVxuQEAgLTE5NjYsNiArMTk3Miw4IEBAIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuIFx0c3RydWN0IG5vZGVfbm90aWZ5IG5vZGVfYXJnID0ge1xuIFx0XHQubmlkID0gTlVNQV9OT19OT0RFLFxuIFx0fTtcbitcdHVuc2lnbmVkIGludCBtYXhfcGFzc2VzO1xuK1x0dW5zaWduZWQgaW50IHBhc3MgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGNoYXIgKnJlYXNvbjtcbiBcdGludCByZXQ7XG5AQCAtMjA2Miw2ICsyMDcwLDM2IEBAIGludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuIFx0XHRcdFx0Z290byBmYWlsZWRfcmVtb3ZhbF9pc29sYXRlZDtcbiBcdFx0XHR9XG4gXG4rXHRcdFx0LypcbitcdFx0XHQgKiBBIHBhZ2UgdGhhdCBjYW4gbmV2ZXIgYmUgbWlncmF0ZWQgKGUuZy4gYVxuK1x0XHRcdCAqIGxvbmctdGVybSBwaW4pIG1ha2VzIHRoaXMgbG9vcCByZXRyeSBmb3JldmVyLlxuK1x0XHRcdCAqIEdpdmUgdXAgYWZ0ZXIgdGhlIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIHBhc3Nlcy5cbitcdFx0XHQgKiBUaGUgbGltaXQgaXMgcmUtcmVhZCBvbiBldmVyeSBwYXNzIHNvIHRoYXQgYW5cbitcdFx0XHQgKiBvZmZsaW5lIHJlcXVlc3QgdGhhdCBpcyBhbHJlYWR5IHN0dWNrIGhlcmUgY2FuXG4rXHRcdFx0ICogYmUgYWJvcnRlZCBhdCBydW50aW1lIGJ5IHdyaXRpbmcgdGhlIHBhcmFtZXRlcixcbitcdFx0XHQgKiB3aGljaCBtYXR0ZXJzIGZvciBpbi1rZXJuZWwgY2FsbGVycyAoZS5nLiBBQ1BJXG4rXHRcdFx0ICogRElNTSBob3QtdW5wbHVnKSB0aGF0IHJ1biBvbiBrd29ya2VycyBhbmQgY2FuXG4rXHRcdFx0ICogbmV2ZXIgYmUgYWJvcnRlZCBieSBhIHNpZ25hbC5cbitcdFx0XHQgKi9cbitcdFx0XHRtYXhfcGFzc2VzID0gUkVBRF9PTkNFKG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzKTtcbitcdFx0XHRpZiAobWF4X3Bhc3NlcyBcdTAwMjZcdTAwMjYgcGFzcysrIFx1MDAzZT0gbWF4X3Bhc3Nlcykge1xuK1x0XHRcdFx0cHJfd2FybihcIm1lbW9yeSBvZmZsaW5pbmcgW21lbSAlIzAxMGxseC0lIzAxMGxseF06IGdpdmluZyB1cCBhZnRlciAldSBwYXNzZXNcXG5cIixcbitcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZylzdGFydF9wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4rXHRcdFx0XHRcdCgodW5zaWduZWQgbG9uZyBsb25nKWVuZF9wZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpIC0gMSxcbitcdFx0XHRcdFx0cGFzcyAtIDEpO1xuK1x0XHRcdFx0LypcbitcdFx0XHRcdCAqIER1bXAgdGhlIHBhZ2Ugd2UgbGFzdCBzdG9wcGVkIGF0IGFzIGFcbitcdFx0XHRcdCAqIGRpYWdub3N0aWMgaGludDogdXN1YWxseSB0aGUgc3R1Y2sgcGFnZSxcbitcdFx0XHRcdCAqIGJ1dCBqdXN0IHRoZSByYW5nZSBzdGFydCBhZnRlciBhIHJlc3RhcnQuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdGlmIChwZm4gXHUwMDNlPSBzdGFydF9wZm4gXHUwMDI2XHUwMDI2IHBmbiBcdTAwM2MgZW5kX3BmbilcbitcdFx0XHRcdFx0ZHVtcF9wYWdlKHBmbl90b19wYWdlKHBmbiksXG4rXHRcdFx0XHRcdFx0ICBcIm1lbW9yeSBvZmZsaW5lIHJldHJ5IGxpbWl0XCIpO1xuK1x0XHRcdFx0cmV0ID0gLUVCVVNZO1xuK1x0XHRcdFx0cmVhc29uID0gXCJyZXRyeSBsaW1pdCBleGNlZWRlZFwiO1xuK1x0XHRcdFx0Z290byBmYWlsZWRfcmVtb3ZhbF9pc29sYXRlZDtcbitcdFx0XHR9XG4rXG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4gXHRcdFx0cmV0ID0gc2Nhbl9tb3ZhYmxlX3BhZ2VzKHBmbiwgZW5kX3BmbiwgXHUwMDI2cGZuKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCBlYWU1MDRiZDk0YzgzYS4uZTExM2YzZmY0NjU1OTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0xNzcsNiArMTc3LDkgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X3ZtYWxsb2Muc2hcbiAjIERlc3RydWN0aXZlOiBldmVyeSBzdWNjZXNzZnVsIHJ1biBwYW5pY3MgdGhlIGtlcm5lbC4gIEluc3RhbGxlZCBhbmRcbiAjIGtlcHQgZXhlY3V0YWJsZSwgYnV0IG5vdCBydW4gZnJvbSBhIGRlZmF1bHQga3NlbGZ0ZXN0IGludm9jYXRpb24uXG4gVEVTVF9QUk9HU19FWFRFTkRFRCArPSBod3BvaXNvbi1wYW5pYy5zaFxuKyMgU3Bhd25zIGl0cyBvd24gVk0gKHZpcnRtZS1uZyk7IG5vdCBydW4gZnJvbSBhIGRlZmF1bHQga3NlbGZ0ZXN0XG4rIyBpbnZvY2F0aW9uLlxuK1RFU1RfUFJPR1NfRVhURU5ERUQgKz0gdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoXG4gXG4gVEVTVF9GSUxFUyA6PSB0ZXN0X3ZtYWxsb2Muc2hcbiBURVNUX0ZJTEVTICs9IHRlc3RfaG1tLnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnXG5pbmRleCAwNmY3OGJkMjMyZTJlMy4uZDIyZjYzZWI5YzJjOWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWdcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZ1xuQEAgLTE0LDMgKzE0LDYgQEAgQ09ORklHX1VQUk9CRVM9eVxuIENPTkZJR19NRU1PUllfRkFJTFVSRT15XG4gQ09ORklHX0hXUE9JU09OX0lOSkVDVD1tXG4gQ09ORklHX1BST0NfTUVNX0FMV0FZU19GT1JDRT15XG4rQ09ORklHX01FTU9SWV9IT1RQTFVHPXlcbitDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XG4rQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlk9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jMjExYTBlN2NhYTJkM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoXG5AQCAtMCwwICsxLDM2OSBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgYnkgcmVwcm9kdWNpbmcgdGhlIEFDUElcbisjIG1lbW9yeSBob3QtdW5wbHVnIGhhbmcgaW4ga3dvcmtlciBjb250ZXh0IGFuZCB2ZXJpZnlpbmcgdGhhdCB0aGUgcmV0cnlcbisjIGxpbWl0IHJlY292ZXJzIGZyb20gaXQuXG4rI1xuKyMgb2ZmbGluZV9wYWdlcygpIHJldHJpZXMgcGFnZSBtaWdyYXRpb24gaW4gYW4gdW5ib3VuZGVkIGxvb3AuICBBIHBhZ2VcbisjIHRoYXQgY2FuIG5ldmVyIGJlIG1pZ3JhdGVkIChsb25nLXRlcm0gcGluLCBzbGFiLCBidXN5IG1ldGFkYXRhKSBtYWtlc1xuKyMgdGhlIGxvb3Agc3BpbiBmb3JldmVyLiAgVXNlcnNwYWNlLWRyaXZlbiBvZmZsaW5lcyBjYW4gYmUgaW50ZXJydXB0ZWQgYnlcbisjIGEgc2lnbmFsLCBidXQgYW4gQUNQSSBESU1NIGVqZWN0IHJ1bnMgb24gdGhlIGthY3BpX2hvdHBsdWdfd3Ega3dvcmtlclxuKyMgd2hlcmUgc2lnbmFsX3BlbmRpbmcoKSBuZXZlciBmaXJlcywgc28gdGhlIGt3b3JrZXIgaGFuZ3MgdW50aWwgcmVib290LlxuKyNcbisjIEZsb3c6XG4rIyAgIDEuIEJvb3QgdGhlIGp1c3QtYnVpbHQga2VybmVsICh2aXJ0bWUtbmcpIHdpdGggYSBjb2xkLXBsdWdnZWQgcGMtZGltbS5cbisjICAgMi4gT25saW5lIHRoZSBESU1NJ3MgYmxvY2tzIGFzIFpPTkVfTU9WQUJMRS5cbisjICAgMy4gUGluIG9uZSBwYWdlIG9mIHRoZSBESU1NICh2bXNwbGljZSBsb25nLXRlcm0gcGluKS5cbisjICAgNC4gRWplY3QgdGhlIERJTU0gdmlhIHN5c2ZzOyBvZmZsaW5lIHJ1bnMgb24ga2FjcGlfaG90cGx1Z193cS5cbisjICAgNS4gT2JzZXJ2ZSB0aGUgaGFuZyAoZ29pbmctb2ZmbGluZSBwZXJzaXN0cykuXG4rIyAgIDYuIFJlc2N1ZTogd3JpdGUgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgYXQgcnVudGltZSwgdmVyaWZ5IGJhaWxvdXQuXG4rI1xuKyMgVEFQIHN1YnRlc3RzOlxuKyMgICAxICBBQ1BJIGVqZWN0IGt3b3JrZXIgaGFuZ3MgdW5ib3VuZGVkIGluIG9mZmxpbmVfcGFnZXMoKVxuKyMgICAyICBzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1xuKyMgICAzICBtZW1vcnkgYmxvY2sgb25saW5lIGFuZCB1c2FibGUgYWZ0ZXIgdGhlIGJhaWxvdXRcbisjXG4rIyBEZXBlbmRlbmNpZXM6IHZpcnRtZS1uZyAodm5nKSwgcWVtdS1zeXN0ZW0tXHUwMDNjYXJjaFx1MDAzZSwgY2MuXG4rIyBTS0lQcyAobmV2ZXIgRkFJTHMpIHdoZW4gdG9vbGluZyBvciBrZXJuZWwgc3VwcG9ydCBpcyBtaXNzaW5nLlxuK1xuK3JlYWRvbmx5IFNDUklQVF9ESVI9XCIkKGNkIC1QIC0tIFwiJChkaXJuYW1lIC0tIFwiJHtCQVNIX1NPVVJDRVswXX1cIilcIiBcdTAwMjZcdTAwMjYgcHdkIC1QKVwiXG4rcmVhZG9ubHkgS0VSTkVMX0NIRUNLT1VUPVwiJChyZWFscGF0aCBcIiR7U0NSSVBUX0RJUn1cIi8uLi8uLi8uLi8uLi8pXCJcbitcbisjIHNoZWxsY2hlY2sgc291cmNlPS4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcbitzb3VyY2UgXCIke1NDUklQVF9ESVJ9XCIvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuK1xuK3JlYWRvbmx5IERJTU1fU0laRT1cIiR7RElNTV9TSVpFOi0yNTZNfVwiXG4rcmVhZG9ubHkgTUFYX1BBU1NFUz1cIiR7TUFYX1BBU1NFUzotNTB9XCJcbityZWFkb25seSBIQU5HX0hPTEQ9XCIke0hBTkdfSE9MRDotMTB9XCJcbityZWFkb25seSBSRVNDVUVfVElNRU9VVD1cIiR7UkVTQ1VFX1RJTUVPVVQ6LTMwfVwiXG4rcmVhZG9ubHkgQk9PVF9USU1FT1VUPVwiJHtCT09UX1RJTUVPVVQ6LTI0MH1cIlxuK1xuK3JlYWRvbmx5IExPRz1cIiQobWt0ZW1wIC90bXAvdm10ZXN0X21ocF9YWFhYWFgubG9nKVwiXG4rcmVhZG9ubHkgR1VFU1RfU0NSSVBUPVwiJChta3RlbXAgL3RtcC92bXRlc3RfbWhwX2d1ZXN0X1hYWFhYWC5zaClcIlxuK3JlYWRvbmx5IFBJTl9TUkM9XCIkKG1rdGVtcCAvdG1wL3ZtdGVzdF9taHBfcGluX1hYWFhYWC5jKVwiXG4rIyBNdXN0IGxpdmUgaW4gdGhlIGtlcm5lbCB0cmVlIHNvIHRoZSBndWVzdCBzZWVzIGl0IHRocm91Z2ggdGhlIDlwIHJvb3Rmcy5cbityZWFkb25seSBQSU5fQklOPVwiJHtTQ1JJUFRfRElSfS8udm10ZXN0X3Bpbl9wYXJrLiQkXCJcbitcbitWTkdfUElEPVwiXCJcbitcbitjbGVhbnVwKCkge1xuK1x0WyAtbiBcIiR7Vk5HX1BJRH1cIiBdIFx1MDAyNlx1MDAyNiBraWxsIFwiJHtWTkdfUElEfVwiIDJcdTAwM2UvZGV2L251bGxcbitcdHJtIC1mIFwiJHtMT0d9XCIgXCIke0dVRVNUX1NDUklQVH1cIiBcIiR7UElOX1NSQ31cIiBcIiR7UElOX0JJTn1cIlxuK31cbitcbitndWVzdF9yZXN1bHQoKSB7XG4rXHRncmVwIC1vIFwiXiR7MX09W0EtWmEtejAtOV8tXSpcIiBcIiR7TE9HfVwiIHwgdGFpbCAtMSB8IGN1dCAtZD0gLWYyXG4rfVxuK1xuK2R1bXBfbG9nX3RhaWwoKSB7XG4rXHR0YWlsIC0yNSBcIiR7TE9HfVwiIHwgd2hpbGUgSUZTPSByZWFkIC1yIGxpbmU7IGRvXG4rXHRcdGt0YXBfcHJpbnRfbXNnIFwiJHtsaW5lfVwiXG4rXHRkb25lXG4rfVxuK1xuK3NraXBfYWxsX3Rlc3RzKCkge1xuK1x0bG9jYWwgaVxuK1xuK1x0Zm9yIGkgaW4gMSAyIDM7IGRvXG4rXHRcdGt0YXBfdGVzdF9za2lwIFwiJDFcIlxuK1x0ZG9uZVxuK1x0a3RhcF9maW5pc2hlZFxuK31cbitcbisjIC0tIHByZS1mbGlnaHQgY2hlY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbitrdGFwX3ByaW50X2hlYWRlclxuK2t0YXBfc2V0X3BsYW4gM1xuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rYXJjaD1cIiQodW5hbWUgLW0pXCJcbitjYXNlIFwiJHthcmNofVwiIGluXG4reDg2XzY0fGFhcmNoNjQpIDs7XG4rKilcdHNraXBfYWxsX3Rlc3RzIFwicGMtZGltbSBBQ1BJIGhvdHBsdWcgbm90IGF2YWlsYWJsZSBvbiAke2FyY2h9XCIgOztcbitlc2FjXG4rXG4rZm9yIGRlcCBpbiB2bmcgXCJxZW11LXN5c3RlbS0ke2FyY2h9XCIgY2M7IGRvXG4rXHRpZiAhIGNvbW1hbmQgLXYgXCIke2RlcH1cIiBcdTAwM2UvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbitcdFx0c2tpcF9hbGxfdGVzdHMgXCIke2RlcH0gbm90IGluc3RhbGxlZFwiXG4rXHRmaVxuK2RvbmVcbitcbisjIC0tIHBpbiBoZWxwZXIgKGNvbXBpbGVkIG9uIHRoZSBob3N0LCB2aXNpYmxlIHRvIHRoZSBndWVzdCB2aWEgOXApIC0tLS0tLS0tLS0tXG4rI1xuKyMgQWxsb2NhdGUgb25lIGJsb2NrJ3Mgd29ydGggb2YgcGFnZXMgKFpPTkVfTU9WQUJMRSBzZXJ2ZXMgdGhlbSBmcm9tIHRoZVxuKyMgRElNTSksIGZpbmQgb25lIHRoYXQgbGFuZGVkIGluIGEgdGFyZ2V0IGJsb2NrLCB2bXNwbGljZS1waW4gaXQgaW50byBhXG4rIyBwaXBlLCBwcmludCBQSU5fQkxLPVx1MDAzY05cdTAwM2UsIGFuZCBzbGVlcCBmb3JldmVyLlxuK1xuK2NhdCBcdTAwM2UgXCIke1BJTl9TUkN9XCIgXHUwMDNjXHUwMDNjJ1BJTkVPRidcbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdWlvLmhcdTAwM2VcbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1vcnlfYmxvY2tfc2l6ZSh2b2lkKVxuK3tcbitcdGNoYXIgYnVmWzY0XTtcbitcdHNzaXplX3QgbjtcbitcdGludCBmZDtcbitcbitcdGZkID0gb3BlbihcIi9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2Jsb2NrX3NpemVfYnl0ZXNcIiwgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gMDtcbitcdG4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSk7XG4rXHRjbG9zZShmZCk7XG4rXHRpZiAobiBcdTAwM2M9IDApXG4rXHRcdHJldHVybiAwO1xuK1x0YnVmW25dID0gJ1xcMCc7XG4rXHRyZXR1cm4gc3RydG91bChidWYsIE5VTEwsIDE2KTtcbit9XG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgdmFkZHJfdG9fYmxvY2soaW50IHBhZ2VtYXBfZmQsIGNoYXIgKnZhZGRyLFxuK1x0XHRcdFx0ICAgIGxvbmcgcGFnZV9zaXplLCB1bnNpZ25lZCBsb25nIGJsa19zaXplKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdnBuID0gKHVuc2lnbmVkIGxvbmcpdmFkZHIgLyBwYWdlX3NpemU7XG4rXHR1aW50NjRfdCBlbnQ7XG4rXG4rXHRpZiAocHJlYWQocGFnZW1hcF9mZCwgXHUwMDI2ZW50LCBzaXplb2YoZW50KSwgdnBuICogOCkgIT0gc2l6ZW9mKGVudCkpXG4rXHRcdHJldHVybiAtMVVMO1xuK1x0aWYgKCEoZW50IFx1MDAyNiAoMVVMTCBcdTAwM2NcdTAwM2MgNjMpKSlcbitcdFx0cmV0dXJuIC0xVUw7XG4rXHRyZXR1cm4gKGVudCBcdTAwMjYgKCgxVUxMIFx1MDAzY1x1MDAzYyA1NSkgLSAxKSkgKiBwYWdlX3NpemUgLyBibGtfc2l6ZTtcbit9XG4rXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuK3tcbitcdGxvbmcgcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xuK1x0dW5zaWduZWQgbG9uZyBibGtfc2l6ZSA9IG1lbW9yeV9ibG9ja19zaXplKCk7XG4rXHR1bnNpZ25lZCBsb25nIG9mZiwgYmxrID0gMDtcbitcdGNoYXIgKmFyZWEsICpwYWdlID0gTlVMTDtcbitcdGludCBwYWdlbWFwX2ZkLCBwaXBlZmRbMl0sIGk7XG4rXG4rXHRpZiAoYXJnYyBcdTAwM2MgMiB8fCAhYmxrX3NpemUpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwidXNhZ2U6IHBpbl9wYXJrIFx1MDAzY21lbW9yeSBibG9ja1x1MDAzZS4uLlxcblwiKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRhcmVhID0gbW1hcChOVUxMLCBibGtfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0ICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9QT1BVTEFURSwgLTEsIDApO1xuK1x0aWYgKGFyZWEgPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRwZXJyb3IoXCJtbWFwXCIpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcdG1lbXNldChhcmVhLCAweDQyLCBibGtfc2l6ZSk7XG4rXG4rXHRwYWdlbWFwX2ZkID0gb3BlbihcIi9wcm9jL3NlbGYvcGFnZW1hcFwiLCBPX1JET05MWSk7XG4rXHRpZiAocGFnZW1hcF9mZCBcdTAwM2MgMCkge1xuK1x0XHRwZXJyb3IoXCJwYWdlbWFwXCIpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcbitcdGZvciAob2ZmID0gMDsgb2ZmIFx1MDAzYyBibGtfc2l6ZSBcdTAwMjZcdTAwMjYgIXBhZ2U7IG9mZiArPSBwYWdlX3NpemUpIHtcbitcdFx0YmxrID0gdmFkZHJfdG9fYmxvY2socGFnZW1hcF9mZCwgYXJlYSArIG9mZiwgcGFnZV9zaXplLFxuK1x0XHRcdFx0ICAgICBibGtfc2l6ZSk7XG4rXHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIGFyZ2M7IGkrKykge1xuK1x0XHRcdGlmIChibGsgPT0gc3RydG91bChhcmd2W2ldLCBOVUxMLCAxMCkpIHtcbitcdFx0XHRcdHBhZ2UgPSBhcmVhICsgb2ZmO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXHRjbG9zZShwYWdlbWFwX2ZkKTtcbitcbitcdGlmICghcGFnZSkge1xuK1x0XHRwcmludGYoXCJQSU5fTk9ORVxcblwiKTtcbitcdFx0ZmZsdXNoKHN0ZG91dCk7XG4rXHRcdHJldHVybiAyO1xuK1x0fVxuK1xuK1x0aWYgKHBpcGUocGlwZWZkKSkge1xuK1x0XHRwZXJyb3IoXCJwaXBlXCIpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcbitcdHN0cnVjdCBpb3ZlYyBpb3YgPSB7IC5pb3ZfYmFzZSA9IHBhZ2UsIC5pb3ZfbGVuID0gcGFnZV9zaXplIH07XG4rXG4rXHRpZiAodm1zcGxpY2UocGlwZWZkWzFdLCBcdTAwMjZpb3YsIDEsIDApICE9IHBhZ2Vfc2l6ZSkge1xuK1x0XHRwZXJyb3IoXCJ2bXNwbGljZVwiKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXG4rXHRwcmludGYoXCJQSU5fQkxLPSVsdVxcblwiLCBibGspO1xuK1x0ZmZsdXNoKHN0ZG91dCk7XG4rXHRwYXVzZSgpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1BJTkVPRlxuK1xuK2lmICEgY2MgLU8yIC1vIFwiJHtQSU5fQklOfVwiIFwiJHtQSU5fU1JDfVwiIDJcdTAwM2VcdTAwM2VcIiR7TE9HfVwiOyB0aGVuXG4rXHRza2lwX2FsbF90ZXN0cyBcImNhbm5vdCBidWlsZCB0aGUgcGluIGhlbHBlclwiXG4rZmlcbitcbisjIC0tIGd1ZXN0IHNjcmlwdCAocnVucyBhcyBpbml0IGluc2lkZSB0aGUgVk0pIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rY2F0IFx1MDAzZSBcIiR7R1VFU1RfU0NSSVBUfVwiIFx1MDAzY1x1MDAzY1BST0xPR1VFXG4rIyEvYmluL2Jhc2hcbityZWFkb25seSBNQVhfUEFTU0VTPSR7TUFYX1BBU1NFU31cbityZWFkb25seSBIQU5HX0hPTEQ9JHtIQU5HX0hPTER9XG4rcmVhZG9ubHkgUkVTQ1VFX1RJTUVPVVQ9JHtSRVNDVUVfVElNRU9VVH1cbityZWFkb25seSBQSU5fUEFSSz1cIiR7UElOX0JJTn1cIlxuK1BST0xPR1VFXG4rXG4rY2F0IFx1MDAzZVx1MDAzZSBcIiR7R1VFU1RfU0NSSVBUfVwiIFx1MDAzY1x1MDAzYydHVUVTVEVPRidcbitzZXQgLXVcbitcbityZWFkb25seSBQQVJBTT0vc3lzL21vZHVsZS9tZW1vcnlfaG90cGx1Zy9wYXJhbWV0ZXJzL29mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXG4rcmVhZG9ubHkgTUVNPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5XG4rXG4rc2tpcCgpIHsgZWNobyBcIlZNVEVTVF9TS0lQOiAkKlwiOyBlY2hvIFwiVk1URVNUX0RPTkVcIjsgZXhpdCAwOyB9XG4rXG4rYmxvY2tfc3RhdGUoKSB7XG4rXHRjYXQgXCIke01FTX0vbWVtb3J5JHtwaW5uZWRfYmxrfS9zdGF0ZVwiIDJcdTAwM2UvZGV2L251bGwgfHwgZWNobyBHT05FXG4rfVxuK1xuK1sgLWYgXCIke1BBUkFNfVwiIF0gfHwgc2tpcCBcImtlcm5lbCBsYWNrcyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1wiXG4rXG4rIyAxLiBPbmxpbmUgdGhlIERJTU0ncyBibG9ja3MgYXMgWk9ORV9NT1ZBQkxFLlxuK2RpbW1fYmxvY2tzPVwiXCJcbitmb3IgcyBpbiBcIiR7TUVNfVwiL21lbW9yeSovc3RhdGU7IGRvXG4rXHRbIFwiJChjYXQgXCIke3N9XCIgMlx1MDAzZS9kZXYvbnVsbClcIiA9IG9mZmxpbmUgXSB8fCBjb250aW51ZVxuK1x0aWYgZWNobyBvbmxpbmVfbW92YWJsZSBcdTAwM2UgXCIke3N9XCIgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0XHRiPSR7cyUvc3RhdGV9XG4rXHRcdGRpbW1fYmxvY2tzPVwiJHtkaW1tX2Jsb2Nrc30gJHtiIyMqbWVtb3J5fVwiXG4rXHRmaVxuK2RvbmVcbitlY2hvIFwiIyBESU1NIG1lbW9yeSBibG9ja3M6JHtkaW1tX2Jsb2NrczotIG5vbmV9XCJcbitbIC1uIFwiJHtkaW1tX2Jsb2Nrc31cIiBdIHx8IHNraXAgXCJubyBvZmZsaW5lIG1lbW9yeSBibG9ja3MgKHBjLWRpbW0gbWlzc2luZz8pXCJcbitcbisjIDIuIFBpbiBvbmUgcGFnZSBpbnNpZGUgdGhlIERJTU0uXG4rXCIke1BJTl9QQVJLfVwiICR7ZGltbV9ibG9ja3N9IFx1MDAzZSAvdG1wL3Bpbi5vdXQgMlx1MDAzZVx1MDAyNjEgXHUwMDI2XG4rcGluX3BpZD0kIVxuK2ZvciBfIGluICQoc2VxIDEgMTApOyBkb1xuK1x0Z3JlcCAtcSBcIlBJTl9cIiAvdG1wL3Bpbi5vdXQgMlx1MDAzZS9kZXYvbnVsbCBcdTAwMjZcdTAwMjYgYnJlYWtcbitcdHNsZWVwIDFcbitkb25lXG4rcGlubmVkX2Jsaz0kKHNlZCAtbiAncy9eUElOX0JMSz0vL3AnIC90bXAvcGluLm91dClcbitbIC1uIFwiJHtwaW5uZWRfYmxrfVwiIF0gfHwgc2tpcCBcInBpbiBmYWlsZWQ6ICQoY2F0IC90bXAvcGluLm91dCAyXHUwMDNlL2Rldi9udWxsKVwiXG4rZWNobyBcIiMgcGlubmVkIG9uZSBwYWdlIGluIGJsb2NrIG1lbW9yeSR7cGlubmVkX2Jsa31cIlxuK1xuKyMgMy4gRWplY3QgdGhlIERJTU0gd2l0aCB0aGUgcmV0cnkgbGltaXQgZGlzYWJsZWQgKGRlZmF1bHQgPSB1bmJvdW5kZWQpLlxuK2VjaG8gMCBcdTAwM2UgXCIke1BBUkFNfVwiXG4rZG1lc2cgLWMgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSB8fCB0cnVlXG4rXG4rZWpkZXY9XCJcIlxuK2ZvciBkZXYgaW4gL3N5cy9idXMvYWNwaS9kZXZpY2VzL1BOUDBDODA6KjsgZG9cbitcdFsgLWUgXCIke2Rldn0vZWplY3RcIiBdIFx1MDAyNlx1MDAyNiB7IGVqZGV2PVwiJHtkZXZ9XCI7IGJyZWFrOyB9XG4rZG9uZVxuK1sgLW4gXCIke2VqZGV2fVwiIF0gfHwgc2tpcCBcIm5vIGVqZWN0YWJsZSBBQ1BJIG1lbW9yeSBkZXZpY2UgKFBOUDBDODApXCJcbitlY2hvIFwiIyBlamVjdGluZyAke2VqZGV2fVwiXG4rZWNobyAxIFx1MDAzZSBcIiR7ZWpkZXZ9L2VqZWN0XCIgXHUwMDI2XG4rXG4rIyA0LiBPYnNlcnZlIHRoZSBoYW5nOiB0aGUgYmxvY2sgbXVzdCBzdGF5IGluIFwiZ29pbmctb2ZmbGluZVwiLlxuK3NsZWVwIDNcbitzdHVjaz0wXG4raWYgWyBcIiQoYmxvY2tfc3RhdGUpXCIgPSBnb2luZy1vZmZsaW5lIF07IHRoZW5cbitcdGVjaG8gXCIjIGJsb2NrIG1lbW9yeSR7cGlubmVkX2Jsa30gZ29pbmctb2ZmbGluZSwgaG9sZGluZyAke0hBTkdfSE9MRH1zXCJcbitcdHNsZWVwIFwiJHtIQU5HX0hPTER9XCJcbitcdGlmIFsgXCIkKGJsb2NrX3N0YXRlKVwiID0gZ29pbmctb2ZmbGluZSBdOyB0aGVuXG4rXHRcdHN0dWNrPTFcbitcdFx0ZWNobyAxIFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL3N5c3JxIDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuK1x0XHRlY2hvIGwgXHUwMDNlIC9wcm9jL3N5c3JxLXRyaWdnZXIgMlx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlXG4rXHRcdHNsZWVwIDFcbitcdFx0ZG1lc2cgfCBncmVwIC1CMiAtQTEyIFwib2ZmbGluZV9wYWdlc1wiIHwgdGFpbCAtMjAgXFxcbitcdFx0XHR8IHNlZCAncy9eLyMgIC8nXG4rXHRmaVxuK2ZpXG4rZWNobyBcIlZNVEVTVF9TVFVDSz0ke3N0dWNrfVwiXG4rXG4rIyA1LiBSZXNjdWU6IGFybSB0aGUgcmV0cnkgbGltaXQgYXQgcnVudGltZSBhbmQgd2FpdCBmb3IgYmFpbG91dC5cbitlY2hvIFwiJHtNQVhfUEFTU0VTfVwiIFx1MDAzZSBcIiR7UEFSQU19XCJcbitlY2hvIFwiIyBhcm1lZCBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlcz0kKGNhdCBcIiR7UEFSQU19XCIpXCJcbitcbityZXNjdWVkPTBcbitmb3IgXyBpbiAkKHNlcSAxIFwiJHtSRVNDVUVfVElNRU9VVH1cIik7IGRvXG4rXHRpZiBkbWVzZyB8IGdyZXAgLXEgXCJnaXZpbmcgdXAgYWZ0ZXJcIjsgdGhlblxuK1x0XHRyZXNjdWVkPTFcbitcdFx0YnJlYWtcbitcdGZpXG4rXHRzbGVlcCAxXG4rZG9uZVxuK2RtZXNnIHwgZ3JlcCBcImdpdmluZyB1cCBhZnRlclwiIHwgdGFpbCAtMiB8IHNlZCAncy9eLyMgLydcbitlY2hvIFwiVk1URVNUX1JFU0NVRUQ9JHtyZXNjdWVkfVwiXG4rXG4rc2xlZXAgMlxuK2VjaG8gXCJWTVRFU1RfQkxPQ0tfU1RBVEU9JChibG9ja19zdGF0ZSlcIlxuK1xuK2tpbGwgXCIke3Bpbl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK2VjaG8gXCJWTVRFU1RfRE9ORVwiXG4rR1VFU1RFT0ZcbitcbisjIC0tIGxhdW5jaCBWTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rKCBjZCBcIiR7S0VSTkVMX0NIRUNLT1VUfVwiIFx1MDAyNlx1MDAyNiBleGVjIHZuZyAtLWZvcmNlLTlwIC0tbm8tdmlydG1lLW5nLWluaXQgXFxcbitcdC0tcWVtdS1vcHQ9LW0gLS1xZW11LW9wdD1cIjJHLHNsb3RzPTQsbWF4bWVtPThHXCIgXFxcbitcdC0tcWVtdS1vcHQ9LW9iamVjdCBcXFxuK1x0LS1xZW11LW9wdD1cIm1lbW9yeS1iYWNrZW5kLXJhbSxpZD1tZW0wLHNpemU9JHtESU1NX1NJWkV9XCIgXFxcbitcdC0tcWVtdS1vcHQ9LWRldmljZSAtLXFlbXUtb3B0PVwicGMtZGltbSxpZD1kaW1tMCxtZW1kZXY9bWVtMFwiIFxcXG4rXHRiYXNoIFwiJHtHVUVTVF9TQ1JJUFR9XCIgKSBcdTAwM2UgXCIke0xPR31cIiAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcbitWTkdfUElEPSQhXG4rXG4rZm9yIF8gaW4gJChzZXEgMSBcIiR7Qk9PVF9USU1FT1VUfVwiKTsgZG9cbitcdGdyZXAgLXEgXCJWTVRFU1RfRE9ORVwiIFwiJHtMT0d9XCIgMlx1MDAzZS9kZXYvbnVsbCBcdTAwMjZcdTAwMjYgYnJlYWtcbitcdGtpbGwgLTAgXCIke1ZOR19QSUR9XCIgMlx1MDAzZS9kZXYvbnVsbCB8fCBicmVha1xuK1x0c2xlZXAgMVxuK2RvbmVcbitcbitpZiAhIGdyZXAgLXEgXCJWTVRFU1RfRE9ORVwiIFwiJHtMT0d9XCIgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0ZHVtcF9sb2dfdGFpbFxuK1x0c2tpcF9hbGxfdGVzdHMgXCJWTSBkaWQgbm90IGZpbmlzaCB3aXRoaW4gJHtCT09UX1RJTUVPVVR9c1wiXG4rZmlcbitcbitraWxsIFwiJHtWTkdfUElEfVwiIDJcdTAwM2UvZGV2L251bGxcbit3YWl0IFwiJHtWTkdfUElEfVwiIDJcdTAwM2UvZGV2L251bGxcbitWTkdfUElEPVwiXCJcbitcbisjIC0tIHJlcG9ydCByZXN1bHRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rc2tpcF9yZWFzb249XCIkKGdyZXAgXCJeVk1URVNUX1NLSVA6IFwiIFwiJHtMT0d9XCIgfCB0YWlsIC0xIHwgdHIgLWQgJ1xccicpXCJcbitpZiBbIC1uIFwiJHtza2lwX3JlYXNvbn1cIiBdOyB0aGVuXG4rXHRza2lwX2FsbF90ZXN0cyBcIiR7c2tpcF9yZWFzb24jVk1URVNUX1NLSVA6IH1cIlxuK2ZpXG4rXG4rZ3JlcCBcIl4jXCIgXCIke0xPR31cIiB8IHRyIC1kICdcXHInIHwgd2hpbGUgSUZTPSByZWFkIC1yIGxpbmU7IGRvXG4rXHRrdGFwX3ByaW50X21zZyBcIiR7bGluZSNcXCMgfVwiXG4rZG9uZVxuK1xuK3N0dWNrPVwiJChndWVzdF9yZXN1bHQgVk1URVNUX1NUVUNLKVwiXG4rcmVzY3VlZD1cIiQoZ3Vlc3RfcmVzdWx0IFZNVEVTVF9SRVNDVUVEKVwiXG4rYmxrX3N0YXRlPVwiJChndWVzdF9yZXN1bHQgVk1URVNUX0JMT0NLX1NUQVRFKVwiXG4rXG4raWYgWyBcIiR7YmxrX3N0YXRlOi1HT05FfVwiID0gXCJHT05FXCIgXTsgdGhlblxuK1x0c2tpcF9hbGxfdGVzdHMgXCJESU1NIHdhcyBlamVjdGVkIGRlc3BpdGUgdGhlIHBpbiAocGluIGRpZCBub3QgaG9sZClcIlxuK2ZpXG4rXG4raWYgWyBcIiR7c3R1Y2s6LTB9XCIgPSAxIF07IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwiQUNQSSBlamVjdCBrd29ya2VyIGhhbmdzIHVuYm91bmRlZCBpbiBvZmZsaW5lX3BhZ2VzKClcIlxuK2Vsc2VcbitcdGR1bXBfbG9nX3RhaWxcbitcdGt0YXBfdGVzdF9mYWlsIFwiQUNQSSBlamVjdCBrd29ya2VyIGhhbmdzIHVuYm91bmRlZCBpbiBvZmZsaW5lX3BhZ2VzKClcIlxuK2ZpXG4rXG4raWYgWyBcIiR7cmVzY3VlZDotMH1cIiA9IDEgXTsgdGhlblxuK1x0a3RhcF90ZXN0X3Bhc3MgXCJzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1wiXG4rZWxzZVxuK1x0ZHVtcF9sb2dfdGFpbFxuK1x0a3RhcF90ZXN0X2ZhaWwgXCJzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1wiXG4rZmlcbitcbitpZiBbIFwiJHtibGtfc3RhdGV9XCIgPSBcIm9ubGluZVwiIF07IHRoZW5cbitcdGt0YXBfdGVzdF9wYXNzIFwibWVtb3J5IGJsb2NrIG9ubGluZSBhbmQgdXNhYmxlIGFmdGVyIHRoZSBiYWlsb3V0XCJcbitlbHNlXG4rXHRrdGFwX3Rlc3RfZmFpbCBcIm1lbW9yeSBibG9jayBvbmxpbmUgYW5kIHVzYWJsZSBhZnRlciB0aGUgYmFpbG91dCAoc3RhdGU9JHtibGtfc3RhdGV9KVwiXG4rZmlcbitcbitrdGFwX2ZpbmlzaGVkXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoyNzowNS45OTcyMTM3MDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTQ3OTY1NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEhvdHBsdWcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCdzIGludHJvZHVjaW5nIGEgbmV3IGtlcm5lbCBwYXJhbWV0ZXI6IGBtZW1vcnlfaG90cGx1Zy5vZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc2AuIEVzc2VudGlhbGx5LCBpdCdzIGRlc2lnbmVkIHRvIHB1dCBhIGNhcCBvbiB0aGUgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhhdCdzIGEgZ29vZCB0aGluZywgcG90ZW50aWFsbHkgcHJldmVudGluZyBydW5hd2F5IG1pZ3JhdGlvbnMgaW4gY2VydGFpbiBzY2VuYXJpb3MuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyB3aXRoaW4gYG1tL21lbW9yeV9ob3RwbHVnLmNgIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIG1lbW9yeSBob3RwbHVnIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcywgc28gaXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGF0IGNvZGUgYW5kIGNvbmZpcm0gdGhhdCB0aGUgbW9kaWZpY2F0aW9uIGlzIHNvdW5kLCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMsIGFuZCBoYW5kbGVzIGFsbCBlZGdlIGNhc2VzIGNvcnJlY3RseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBvZmZsaW5lX3BhZ2VzYCBmdW5jdGlvbiBzaW5jZSB0aGF0IGlzIHdoZXJlIHRoZSBkZXNjcmlwdGlvbiBpbXBsaWVzIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBwYXJhbWV0ZXIgaW50ZXJhY3RzIHNtb290aGx5IHdpdGggdGhlIGV4aXN0aW5nIG1lbW9yeSBvZmZsaW5pbmcgbG9naWMuXG5cbkJleW9uZCB0aGUgY29kZSBpdHNlbGYsIEkgc2VlIHRoYXQgYSBuZXcgc2VsZnRlc3QsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2hgLCBoYXMgYmVlbiBhZGRlZC4gVGhhdCdzIGZhbnRhc3RpYy4gSSdsbCBuZWVkIHRvIHJldmlldyB0aGF0IHRlc3QgdGhvcm91Z2hseSB0byBlbnN1cmUgaXQgY292ZXJzIHRoZSBpbnRlbmRlZCBiZWhhdmlvciwgaW5jbHVkaW5nIHRoZSBuZXcgcGFyYW1ldGVyJ3MgZWZmZWN0IG9uIG1pZ3JhdGlvbiBsaW1pdHMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc2NvcGUgb2YgdGhlIHRlc3QgdG8gZW5zdXJlIGFsbCBmdW5jdGlvbmFsaXR5IGlzIGNvdmVyZWQuXG5cbkZpbmFsbHksIHRoZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGNydWNpYWwuIEJvdGggYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0YCBhbmQgYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0YCBhcmUgYmVpbmcgdXBkYXRlZC4gSSdsbCBuZWVkIHRvIHJldmlldyB0aG9zZSB1cGRhdGVzIHRvIHZlcmlmeSB0aGUgbmV3IHBhcmFtZXRlciBpcyBjbGVhcmx5IGV4cGxhaW5lZCwgaXRzIGltcGxpY2F0aW9ucyBhcmUgYWNjdXJhdGVseSBkZXNjcmliZWQsIGFuZCB0aGUgZG9jdW1lbnRhdGlvbiBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGNvZGUuIEl0IGlzIGV4dHJlbWVseSBpbXBvcnRhbnQgdGhhdCB0aGUgZG9jdW1lbnRhdGlvbiBhY2N1cmF0ZWx5IHJlZmxlY3RzIHRoZSBiZWhhdmlvciBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoyNzoxMC45NDUxODI3MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMxMjYxMjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0PTk1PUtlcm5lbCBwYXJhbWV0ZXJzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC0zOTgyLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjM5ODM6XFx0bWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXM9XFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMzk4NC1cXHRcXHRcXHRbS05MXSBNYXhpbXVtIG51bWJlciBvZiBtaWdyYXRpb24gcGFzc2VzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdD0yMjY9RnVydGhlciwgbWVtb3J5IG9mZmxpbmluZyBtaWdodCByZXRyeSBmb3IgYSBsb25nIHRpbWUgKG9yIGV2ZW4gZm9yZXZlciksIHVudGlsXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3Q6MjI3OmFib3J0ZWQgYnkgdGhlIHVzZXIuICBUaGUgYGBtZW1vcnlfaG90cGx1Zy5vZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc2BgXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtMjI4LXBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBib3VuZCB0aGUgbnVtYmVyIG9mIHJldHJ5IHBhc3NlcywgbWFraW5nIGFuIG9mZmxpbmVcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0PTQzMj1UaGUgZm9sbG93aW5nIG1vZHVsZSBwYXJhbWV0ZXJzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDpcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0LTU1Mi1cXHRcXHRcXHRcXHQgUGFyYW1ldGVyIGF2YWlsYWJpbGl0eSBkZXBlbmRzIG9uIENPTkZJR19OVU1BLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0OjU1MzpgYG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzYGBcXHQgcmVhZC13cml0ZTogTWF4aW11bSBudW1iZXIgb2YgbWlncmF0aW9uXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtNTU0LVxcdFxcdFxcdFxcdCBwYXNzZXMgZm9yIGEgc2luZ2xlIG1lbW9yeSBvZmZsaW5lXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE3NzQ9Ym9vbCBtaHBfcmFuZ2VfYWxsb3dlZCh1NjQgc3RhcnQsIHU2NCBzaXplLCBib29sIG5lZWRfbWFwcGluZylcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc4OC0vKiBNYXggb2ZmbGluZV9wYWdlcygpIG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIC1FQlVTWTsgMCA9IHJldHJ5IGZvcmV2ZXIuICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzg5OnN0YXRpYyB1bnNpZ25lZCBpbnQgb2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgX19yZWFkX21vc3RseTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3OTA6bW9kdWxlX3BhcmFtKG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzLCB1aW50LCAwNjQ0KTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE3OTE6TU9EVUxFX1BBUk1fREVTQyhvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3NlcyxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3OTItXFx0XFxcIk1heCBtaWdyYXRpb24gcGFzc2VzIGJlZm9yZSBtZW1vcnkgb2ZmbGluZSBnaXZlcyB1cCAoMCA9IG5vIGxpbWl0KVxcXCIpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xOTYxPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDgzLVxcdFxcdFxcdCAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjA4NDpcXHRcXHRcXHRtYXhfcGFzc2VzID0gUkVBRF9PTkNFKG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwODUtXFx0XFx0XFx0aWYgKG1heF9wYXNzZXMgXFx1MDAyNlxcdTAwMjYgcGFzcysrIFxcdTAwM2U9IG1heF9wYXNzZXMpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0zLSNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2g6NDojIFRlc3QgbWVtb3J5X2hvdHBsdWcub2ZmbGluZV9taWdyYXRlX21heF9wYXNzZXMgYnkgcmVwcm9kdWNpbmcgdGhlIEFDUElcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtNS0jIG1lbW9yeSBob3QtdW5wbHVnIGhhbmcgaW4ga3dvcmtlciBjb250ZXh0IGFuZCB2ZXJpZnlpbmcgdGhhdCB0aGUgcmV0cnlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0xOS0jICAgNS4gT2JzZXJ2ZSB0aGUgaGFuZyAoZ29pbmctb2ZmbGluZSBwZXJzaXN0cykuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjIwOiMgICA2LiBSZXNjdWU6IHdyaXRlIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzIGF0IHJ1bnRpbWUsIHZlcmlmeSBiYWlsb3V0LlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0yMS0jXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjMtIyAgIDEgIEFDUEkgZWplY3Qga3dvcmtlciBoYW5ncyB1bmJvdW5kZWQgaW4gb2ZmbGluZV9wYWdlcygpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjI0OiMgICAyICBzdHVjayBvZmZsaW5lIHJlc2N1ZWQgYnkgd3JpdGluZyBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0yNS0jICAgMyAgbWVtb3J5IGJsb2NrIG9ubGluZSBhbmQgdXNhYmxlIGFmdGVyIHRoZSBiYWlsb3V0XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2g9MjE4PXNldCAtdVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0yMTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoOjIyMDpyZWFkb25seSBQQVJBTT0vc3lzL21vZHVsZS9tZW1vcnlfaG90cGx1Zy9wYXJhbWV0ZXJzL29mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoLTIyMS1yZWFkb25seSBNRU09L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaD0yMjU9YmxvY2tfc3RhdGUoKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjI4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaDoyMjk6WyAtZiBcXFwiJHtQQVJBTX1cXFwiIF0gfHwgc2tpcCBcXFwia2VybmVsIGxhY2tzIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0yMzAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2g9Mjg0PWVjaG8gXFxcIiR7TUFYX1BBU1NFU31cXFwiIFxcdTAwM2UgXFxcIiR7UEFSQU19XFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaDoyODU6ZWNobyBcXFwiIyBhcm1lZCBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlcz0kKGNhdCBcXFwiJHtQQVJBTX1cXFwiKVxcXCJcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS92bXRlc3RfbWVtb3J5X2hvdHBsdWcuc2gtMjg2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdm10ZXN0X21lbW9yeV9ob3RwbHVnLnNoPTM1Nj1pZiBbIFxcXCIke3Jlc2N1ZWQ6LTB9XFxcIiA9IDEgXTsgdGhlblxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaDozNTc6XFx0a3RhcF90ZXN0X3Bhc3MgXFxcInN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0zNTgtZWxzZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0zNTktXFx0ZHVtcF9sb2dfdGFpbFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaDozNjA6XFx0a3RhcF90ZXN0X2ZhaWwgXFxcInN0dWNrIG9mZmxpbmUgcmVzY3VlZCBieSB3cml0aW5nIG9mZmxpbmVfbWlncmF0ZV9tYXhfcGFzc2VzXFxcIlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3ZtdGVzdF9tZW1vcnlfaG90cGx1Zy5zaC0zNjEtZmlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6Mjc6MTUuMzc2NDUwNDIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0OTQzOTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBIb3RwbHVnIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1vZHVsZSBwYXJhbWV0ZXIsIGBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1lbW9yeV9ob3RwbHVnLmNgLiBUaGlzIGlzIGEgcHJldHR5IGZvY3VzZWQgZnVuY3Rpb25hbCBhZGRpdGlvbiwgaW1wYWN0aW5nIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgb2ZmbGluZSBwYWdlcy4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGltbWVkaWF0ZWx5IGtleSBpbiBvbiB0aGUgYG9mZmxpbmVfcGFnZXNgIGZ1bmN0aW9uIGFzIHRoZSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIG5ldyBwYXJhbWV0ZXIgd2lsbCBjb21lIGludG8gcGxheS5cblxuVGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudCBoZXJlIGlzIGBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRWAsIHdoaWNoIGlzIHN0YW5kYXJkLiBCZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBmdXp6aW5nIHN0cmF0ZWd5IHRob3VnaCwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGBtbS9tZW1vcnlfaG90cGx1Zy5jYCBpdHNlbGYuIEl04oCZcyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIHF1aWNrbHkgc2NhbiB0aGUgZmlsZSBmb3Igb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3VyIG9mIHRoaXMgcGF0Y2guIFRoaXMgd2lsbCBoZWxwIGlkZW50aWZ5IHBvc3NpYmxlIGVkZ2UgY2FzZXMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IHNob3VsZCBhbHNvIGJlIGNvbnNpZGVyZWQgd2hlbiBkZXNpZ25pbmcgdGhlIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgbGV2ZWwgb2YgaW5pdGlhbCByZWNvbm5haXNzYW5jZSBjb3VsZCBzaWduaWZpY2FudGx5IHJlZHVjZSB0aGUgZWZmb3J0IHJlcXVpcmVkIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjk4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6Mjc6MTkuMjI1ODkyODIyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Mzk0MjMzMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3Q9MzM5PVRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtMzgwLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0OjM4MTpcXHRcXHQgICAgQXZhaWxhYmlsaXR5IGRlcGVuZHMgb24gdGhlIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtMzgyLVxcdFxcdCAgICBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdD00MzI9VGhlIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVycyBhcmUgY3VycmVudGx5IGRlZmluZWQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL21lbW9yeS1ob3RwbHVnLnJzdC01NzItXFx0XFx0XFx0XFx0IFBhcmFtZXRlciBhdmFpbGFiaWxpdHkgZGVwZW5kcyBvblxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbWVtb3J5LWhvdHBsdWcucnN0OjU3MzpcXHRcXHRcXHRcXHQgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tZW1vcnktaG90cGx1Zy5yc3QtNTc0LT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuLS1cXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTEzMz1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MTM0OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnLTEzNS1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gvYXJtNjQvbW0vbW11LmM9MjIxOT1zdGF0aWMgaW50IF9faW5pdCBwcmV2ZW50X21lbW9yeV9yZW1vdmVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9tbXUuYy0yMjIyLVxcbmFyY2gvYXJtNjQvbW0vbW11LmM6MjIyMzpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpKVxcbmFyY2gvYXJtNjQvbW0vbW11LmMtMjIyNC1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0xMDE9Q09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9BVVRPPXlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb24zMl9kZWZjb25maWctMTAzLSMgQ09ORklHX01IUF9ERUZBVUxUX09OTElORV9UWVBFX09OTElORV9NT1ZBQkxFIGlzIG5vdCBzZXRcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjEwNDpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0xMDUtQ09ORklHX0tTTT15XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTExNj1DT05GSUdfTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX0FVVE89eVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xMTgtIyBDT05GSUdfTUhQX0RFRkFVTFRfT05MSU5FX1RZUEVfT05MSU5FX01PVkFCTEUgaXMgbm90IHNldFxcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6MTE5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnLTEyMC1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnPTU4PUNPTkZJR19NRU1PUllfSE9UUExVRz15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc6NTk6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnLTYwLUNPTkZJR19LU009eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnPTg4PUNPTkZJR19NRU1PUllfSE9UUExVRz15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnOjg5OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWctOTAtQ09ORklHX0tTTT15XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYz0yMjI9c3RhdGljIGludCBkbHBhcl9vbmxpbmVfbG1iKHN0cnVjdCBkcm1lbV9sbWIgKmxtYilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jLTIyNi1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYzoyMjc6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmMtMjI4LXN0YXRpYyBpbnQgZGxwYXJfb2ZmbGluZV9sbWIoc3RydWN0IGRybWVtX2xtYiAqbG1iKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctbWVtb3J5LmM9NTU4PXN0YXRpYyBpbnQgZGxwYXJfbWVtb3J5X3JlbW92ZV9ieV9pYyh1MzIgbG1ic190b19yZW1vdmUsIHUzMiBkcmNfaW5kZXgpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy01NjEtfVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLW1lbW9yeS5jOjU2MjojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaG90cGx1Zy1tZW1vcnkuYy01NjMtXFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTA1PUNPTkZJR19NRU1PUllfSE9UUExVRz15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnOjEwNjpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnLTEwNy1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz05OD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZzo5OTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnLTEwMC1DT05GSUdfS1NNPXlcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM9MTU3PWFjcGlfcGh5c2ljYWxfYWRkcmVzcyBnZXRfcnNkcF9hZGRyKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jLTE3MS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jOjE3MjojaWYgZGVmaW5lZChDT05GSUdfUkFORE9NSVpFX0JBU0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2FjcGkuYy0xNzMtLypcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmM9Mjc1PWludCBjb3VudF9pbW1vdmFibGVfbWVtX3JlZ2lvbnModm9pZClcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9hY3BpLmMtMzIxLX1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvYWNwaS5jOjMyMjojZW5kaWYgLyogQ09ORklHX1JBTkRPTUlaRV9CQVNFIFxcdTAwMjZcXHUwMDI2IENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYz01OTY9c3RhdGljIGJvb2wgcHJvY2Vzc19tZW1fcmVnaW9uKHN0cnVjdCBtZW1fdmVjdG9yICpyZWdpb24sXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy02MTQtXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM6NjE1OiNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUkVNT1ZFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19BQ1BJKVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTYxNi1cXHQvKlxcbi0tXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaD0xNzE9c3RhdGljIGlubGluZSBhY3BpX3BoeXNpY2FsX2FkZHJlc3MgZ2V0X3JzZHBfYWRkcih2b2lkKSB7IHJldHVybiAwOyB9XFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oLTE3My1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oOjE3NDojaWYgZGVmaW5lZChDT05GSUdfUkFORE9NSVpFX0JBU0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RSRU1PVkUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0FDUEkpXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaC0xNzUtZXh0ZXJuIHN0cnVjdCBtZW1fdmVjdG9yIGltbW92YWJsZV9tZW1bTUFYX05VTU5PREVTKjJdO1xcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTE2Nz1zdGF0aWMgc3NpemVfdCBwaHlzX2luZGV4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTE3Ni0gKiBMZWdhY3kgaW50ZXJmYWNlIHRoYXQgd2UgY2Fubm90IHJlbW92ZS4gQWx3YXlzIGluZGljYXRlIFxcXCJyZW1vdmFibGVcXFwiXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjE3NzogKiB3aXRoIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFIC0gYmFkIGhldXJpc3RpYy5cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMTc4LSAqL1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0xNzk9c3RhdGljIHNzaXplX3QgcmVtb3ZhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xODEte1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoxODI6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJWRcXFxcblxcXCIsIChpbnQpSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0xODMtfVxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTQ1MD1zdGF0aWMgc3NpemVfdCBwaHlzX2RldmljZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy00NTktXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjQ2MDojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNDYxLXN0YXRpYyBpbnQgcHJpbnRfYWxsb3dlZF96b25lKGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IG5pZCxcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz02NzE9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1lbW9yeV9tZW1ibGtfYXR0cnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02NzUtXFx0XFx1MDAyNmRldl9hdHRyX3JlbW92YWJsZS5hdHRyLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2NzY6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTY3Ny1cXHRcXHUwMDI2ZGV2X2F0dHJfdmFsaWRfem9uZXMuYXR0cixcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0xNjM9c3RhdGljIGludCBkYXhfa21lbV9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yMDctXFxuZHJpdmVycy9kYXgva21lbS5jOjIwODojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5kcml2ZXJzL2RheC9rbWVtLmMtMjA5LS8qKlxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTI2OD1zdGF0aWMgaW50IGRheF9rbWVtX2RvX2hvdHJlbW92ZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYy0yNzItfVxcbmRyaXZlcnMvZGF4L2ttZW0uYzoyNzM6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuZHJpdmVycy9kYXgva21lbS5jLTI3NC1cXG4tLVxcbmRyaXZlcnMvZGF4L2ttZW0uYz0zODM9c3RhdGljIGludCBkZXZfZGF4X2ttZW1fcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9rbWVtLmMtNDgwLVxcbmRyaXZlcnMvZGF4L2ttZW0uYzo0ODE6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuZHJpdmVycy9kYXgva21lbS5jLTQ4Mi0vKlxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jPTU0OT1zdGF0aWMgdm9pZCBkZXZfZGF4X2ttZW1fcmVtb3ZlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgva21lbS5jLTU1OS19XFxuZHJpdmVycy9kYXgva21lbS5jOjU2MDojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG5kcml2ZXJzL2RheC9rbWVtLmMtNTYxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaD0zOTE9ZXh0ZXJuIHZvaWQgX19yZWxlYXNlX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwgcmVzb3VyY2Vfc2l6ZV90LFxcbmluY2x1ZGUvbGludXgvaW9wb3J0LmgtMzkyLVxcdFxcdFxcdFxcdHJlc291cmNlX3NpemVfdCk7XFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaDozOTM6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxuaW5jbHVkZS9saW51eC9pb3BvcnQuaC0zOTQtZXh0ZXJuIHZvaWQgcmVsZWFzZV9tZW1fcmVnaW9uX2FkanVzdGFibGUocmVzb3VyY2Vfc2l6ZV90LCByZXNvdXJjZV9zaXplX3QpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI2MD1zdGF0aWMgaW5saW5lIHZvaWQgcGdkYXRfcmVzaXplX2luaXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkge31cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yNjItXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oOjI2MzojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgtMjY0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oPTI5MD1zdGF0aWMgaW5saW5lIGludCBvZmZsaW5lX2FuZF9yZW1vdmVfbWVtb3J5X3Jhbmdlcyhjb25zdCBzdHJ1Y3QgcmFuZ2UgKnJhbmdlcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaC0yOTQtfVxcbmluY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaDoyOTU6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxuaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oLTI5Ni1cXG4tLVxcbmtlcm5lbC9jb25maWdzL3hlbi5jb25maWc9MTU9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG5rZXJuZWwvY29uZmlncy94ZW4uY29uZmlnOjE2OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG5rZXJuZWwvY29uZmlncy94ZW4uY29uZmlnLTE3LUNPTkZJR19aT05FX0RFVklDRT15XFxuLS1cXG5rZXJuZWwvcmVzb3VyY2UuYz0xNDQ2PUVYUE9SVF9TWU1CT0woX19yZWxlYXNlX3JlZ2lvbik7XFxua2VybmVsL3Jlc291cmNlLmMtMTQ0Ny1cXG5rZXJuZWwvcmVzb3VyY2UuYzoxNDQ4OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbmtlcm5lbC9yZXNvdXJjZS5jLTE0NDktc3RhdGljIHZvaWQgYXBwZW5kX2NoaWxkX3RvX3BhcmVudChzdHJ1Y3QgcmVzb3VyY2UgKm5ld19wYXJlbnQsIHN0cnVjdCByZXNvdXJjZSAqbmV3X2NoaWxkKVxcbi0tXFxua2VybmVsL3Jlc291cmNlLmM9MTUwNz12b2lkIHJlbGVhc2VfbWVtX3JlZ2lvbl9hZGp1c3RhYmxlKHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IHNpemUpXFxuLS1cXG5rZXJuZWwvcmVzb3VyY2UuYy0xNTk2LX1cXG5rZXJuZWwvcmVzb3VyY2UuYzoxNTk3OiNlbmRpZlxcdC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxua2VybmVsL3Jlc291cmNlLmMtMTU5OC1cXG4tLVxcbm1tL2tzbS5jPTMzMTE9dm9pZCBmb2xpb19taWdyYXRlX2tzbShzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0va3NtLmMtMzMzNC1cXG5tbS9rc20uYzozMzM1OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbm1tL2tzbS5jLTMzMzYtc3RhdGljIHZvaWQgd2FpdF93aGlsZV9vZmZsaW5pbmcodm9pZClcXG4tLVxcbm1tL2tzbS5jPTM0NTk9c3RhdGljIHZvaWQgd2FpdF93aGlsZV9vZmZsaW5pbmcodm9pZClcXG4tLVxcbm1tL2tzbS5jLTM0NjEtfVxcbm1tL2tzbS5jOjM0NjI6I2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFICovXFxubW0va3NtLmMtMzQ2My1cXG4tLVxcbm1tL2tzbS5jPTQwMTk9c3RhdGljIGludCBfX2luaXQga3NtX2luaXQodm9pZClcXG4tLVxcbm1tL2tzbS5jLTQwNTEtXFxubW0va3NtLmM6NDA1MjojaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVcXG5tbS9rc20uYy00MDUzLVxcdC8qIFRoZXJlIGlzIG5vIHNpZ25pZmljYW5jZSB0byB0aGlzIHByaW9yaXR5IDEwMCAqL1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNzc0PWJvb2wgbWhwX3JhbmdlX2FsbG93ZWQodTY0IHN0YXJ0LCB1NjQgc2l6ZSwgYm9vbCBuZWVkX21hcHBpbmcpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE3ODYtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNzg3OiNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTc4OC0vKiBNYXggb2ZmbGluZV9wYWdlcygpIG1pZ3JhdGlvbiBwYXNzZXMgYmVmb3JlIC1FQlVTWTsgMCA9IHJldHJ5IGZvcmV2ZXIuICovXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTI1NjY9RVhQT1JUX1NZTUJPTF9HUEwob2ZmbGluZV9hbmRfcmVtb3ZlX21lbW9yeV9yYW5nZXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjU2NzojZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi9cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NDI5PXN0YXRpYyB1bnNpZ25lZCBpbnQgem9uZWxpc3RfaXRlcl9iZWdpbih2b2lkKVxcbm1tL3BhZ2VfYWxsb2MuYy00NDMwLXtcXG5tbS9wYWdlX2FsbG9jLmM6NDQzMTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpXFxubW0vcGFnZV9hbGxvYy5jLTQ0MzItXFx0XFx0cmV0dXJuIHJlYWRfc2VxYmVnaW4oXFx1MDAyNnpvbmVsaXN0X3VwZGF0ZV9zZXEpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ0Mzc9c3RhdGljIHVuc2lnbmVkIGludCBjaGVja19yZXRyeV96b25lbGlzdCh1bnNpZ25lZCBpbnQgc2VxKVxcbm1tL3BhZ2VfYWxsb2MuYy00NDM4LXtcXG5tbS9wYWdlX2FsbG9jLmM6NDQzOTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNT1JZX0hPVFJFTU9WRSkpXFxubW0vcGFnZV9hbGxvYy5jLTQ0NDAtXFx0XFx0cmV0dXJuIHJlYWRfc2VxcmV0cnkoXFx1MDAyNnpvbmVsaXN0X3VwZGF0ZV9zZXEsIHNlcSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzY4OD12b2lkIHpvbmVfcGNwX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTc3MDYtXFxubW0vcGFnZV9hbGxvYy5jOjc3MDc6I2lmZGVmIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFXFxubW0vcGFnZV9hbGxvYy5jLTc3MDgtLypcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2ND05MD1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuYWFyY2g2NDo5MTpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2NvbmZpZy5hYXJjaDY0LTkyLUNPTkZJR19OQU1FU1BBQ0VTPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jb25maWcuczM5MHg9NzY9Q09ORklHX01FTU9SWV9IT1RQTFVHPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4Ojc3OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY29uZmlnLnMzOTB4LTc4LUNPTkZJR19OQU1FU1BBQ0VTPXlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc9Mz1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RheC9jb25maWc6NDpDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tZW1vcnktaG90cGx1Zy9jb25maWc9Mz1DT05GSUdfTUVNT1JZX05PVElGSUVSX0VSUk9SX0lOSkVDVD1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbWVtb3J5LWhvdHBsdWcvY29uZmlnOjQ6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTE3PUNPTkZJR19NRU1PUllfSE9UUExVRz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnOjE4OkNPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctMTktQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlk9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdnNvY2svY29uZmlnPTEwOT1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZzoxMTA6Q09ORklHX01FTU9SWV9IT1RSRU1PVkU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Zzb2NrL2NvbmZpZy0xMTEtQ09ORklHX1pPTkVfREVWSUNFPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDI6Mjc6MjIuMTY1MzIzMjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODI4NzQxMTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IFRhcmdldGluZyBNZW1vcnkgSG90LVJlbW92YWwqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZm9jdXNlZCBvbiBtZW1vcnkgaG90LXJlbW92YWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbS9tZW1vcnlfaG90cGx1Zy5jYCBmaWxlLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgZW5jYXBzdWxhdGVkIGJ5IGAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkVgLCB3aGljaCBpcyBnb29kLCB0aGF0IGdpdmVzIG1lIGEgY2xlYXIgZW50cnkgcG9pbnQuIExvb2tpbmcgY2xvc2VyLCBpdCdzIHRoZSBgb2ZmbGluZV9wYWdlc2AgZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQuIFRoZSBmYWN0IHRoYXQgYG9mZmxpbmVfcGFnZXNgIGlzIHRoZSB0YXJnZXQgZnVuY3Rpb24gYW5kIHRoYXQgaXQncyByZWFjaGFibGUgd2hlbiBtZW1vcnkgaXMgYmVpbmcgb2ZmbGluZWQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk15IHN0cmF0ZWd5IGlzIHRvIHplcm8gaW4gb24gdGhpcyBmdW5jdGlvbi4gSSdsbCBmbGFnIGl0IGFzIGhpZ2gtcHJpb3JpdHkgdXNpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gVG8gZW5zdXJlIHRoZSBmdXp6ZXIgY29uY2VudHJhdGVzIGl0cyBlZmZvcnRzLCBJJ2xsIHNldCBgRm9jdXNTeW1ib2xzPVtcIm9mZmxpbmVfcGFnZXNcIl1gLiBBbHNvLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgYXJlIHZlcnkgb2J2aW91cywgYE1FTU9SWV9IT1RSRU1PVkVgIGFuZCBgTUVNT1JZX0hPVFBMVUdgIG11c3QgYmUgZW5hYmxlZCwgc28gSSdsbCBzZXQgYEVuYWJsZUNvbmZpZ3M9W1wiTUVNT1JZX0hPVFJFTU9WRVwiLCBcIk1FTU9SWV9IT1RQTFVHXCJdYC4gVGhlIHByZXNlbmNlIG9mIGBBQ1BJX0hPVFBMVUdfTUVNT1JZYCBpbiB0aGUgc2VsZnRlc3QgY29uZmlnIGlzIG5vdCBpbnRlcmVzdGluZywgc2luY2UgaXQncyBvbmx5IHRoZXJlIGZvciB0aGUgdGVzdCwgbm90aGluZyB0byBzZWUgdGhlcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBvZmZsaW5lX3BhZ2VzYCBpcyBpbmRlZWQgdGhlIG9ubHkgZnVuY3Rpb24gZGlyZWN0bHkgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCwgYW5kIGl0IGFkZHMgdGhlIGBvZmZsaW5lX21pZ3JhdGVfbWF4X3Bhc3Nlc2AgbW9kdWxlIHBhcmFtZXRlciwgd2hpY2ggaXMgdXNlZnVsIHRvIGtub3cuXG5cbk5vdywgSSdsbCBwdXQgdGhpcyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gZ2V0IHRoaW5ncyByb2xsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg2NSwiT3V0cHV0VG9rZW5zIjo5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwMjoyNzoyNy45OTQwNzA2NDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODY0MzMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGhvdHBsdWcgbG9naWMgaW4gYG9mZmxpbmVfcGFnZXNgIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiBtZW1vcnkgaXMgb2ZmbGluZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIk1FTU9SWV9IT1RSRU1PVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGhvdHBsdWcgbG9naWMgaW4gYG9mZmxpbmVfcGFnZXNgIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgbWlncmF0aW9uIHBhc3NlcyBkdXJpbmcgbWVtb3J5IG9mZmxpbmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiBtZW1vcnkgaXMgb2ZmbGluZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmrsb2[1] Phase: Succeeded StartedAt: 2026-07-23 02:27:40 +0000 UTC FinishedAt: 2026-07-23 02:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 02:27:40 +0000 UTC FinishedAt: 2026-07-23 02:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2] Phase: Succeeded StartedAt: 2026-07-23 02:27:40 +0000 UTC FinishedAt: 2026-07-23 06:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-23 02:27:40 +0000 UTC FinishedAt: 2026-07-23 06:57:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 02:27:40 +0000 UTC FinishedAt: 2026-07-23 02:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 02:27:40 +0000 UTC FinishedAt: 2026-07-23 02:27:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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-workflowmrsb2/series-workflowmrsb2-convert-artifact-97378243/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 02:28:01 +0000 UTC FinishedAt: 2026-07-23 03:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 02:28:01 +0000 UTC FinishedAt: 2026-07-23 03:10:36 +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:*76ffc9e7-3f17-4724-9927-9b1bbbab4f8c,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-workflowmrsb2/series-workflowmrsb2-convert-artifact-97378243/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": "643f2355-4481-4ed9-b523-ec51d0531172", "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-workflowmrsb2/series-workflowmrsb2-build-action-857823793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 02:28:01 +0000 UTC FinishedAt: 2026-07-23 03:10:26 +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:*76ffc9e7-3f17-4724-9927-9b1bbbab4f8c,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-workflowmrsb2/series-workflowmrsb2-convert-artifact-97378243/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": "643f2355-4481-4ed9-b523-ec51d0531172", "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-workflowmrsb2/series-workflowmrsb2-build-action-857823793/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:10:36 +0000 UTC FinishedAt: 2026-07-23 03:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:10:36 +0000 UTC FinishedAt: 2026-07-23 03:10:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:10:36 +0000 UTC FinishedAt: 2026-07-23 03:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:10:36 +0000 UTC FinishedAt: 2026-07-23 03:10:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-workflowmrsb2/series-workflowmrsb2-convert-artifact-3743085434/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:10:56 +0000 UTC FinishedAt: 2026-07-23 03:13:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:10:56 +0000 UTC FinishedAt: 2026-07-23 03:13:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*643f2355-4481-4ed9-b523-ec51d0531172,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-workflowmrsb2/series-workflowmrsb2-build-action-857823793/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-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:13:16 +0000 UTC FinishedAt: 2026-07-23 03:13:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:13:16 +0000 UTC FinishedAt: 2026-07-23 03:13:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:13:16 +0000 UTC FinishedAt: 2026-07-23 03:49:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:13:16 +0000 UTC FinishedAt: 2026-07-23 03:49:14 +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:*76ffc9e7-3f17-4724-9927-9b1bbbab4f8c,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-workflowmrsb2/series-workflowmrsb2-convert-artifact-3743085434/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": "d7a2f1fc-80cf-4b5c-9289-a9acfd7fb9ab", "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-workflowmrsb2/series-workflowmrsb2-build-action-2708837086/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:13:16 +0000 UTC FinishedAt: 2026-07-23 03:49:04 +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:*76ffc9e7-3f17-4724-9927-9b1bbbab4f8c,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-workflowmrsb2/series-workflowmrsb2-convert-artifact-3743085434/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": "d7a2f1fc-80cf-4b5c-9289-a9acfd7fb9ab", "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-workflowmrsb2/series-workflowmrsb2-build-action-2708837086/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:49:14 +0000 UTC FinishedAt: 2026-07-23 03:49:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:49:14 +0000 UTC FinishedAt: 2026-07-23 03:49:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:49:14 +0000 UTC FinishedAt: 2026-07-23 03:51:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:49:14 +0000 UTC FinishedAt: 2026-07-23 03:51:13 +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:*d7a2f1fc-80cf-4b5c-9289-a9acfd7fb9ab,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-workflowmrsb2/series-workflowmrsb2-build-action-2708837086/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-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-23 03:51:23 +0000 UTC FinishedAt: 2026-07-23 06:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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: Succeeded StartedAt: 2026-07-23 03:51:23 +0000 UTC FinishedAt: 2026-07-23 06:57:04 +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":["offline_pages"],"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:*643f2355-4481-4ed9-b523-ec51d0531172,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d7a2f1fc-80cf-4b5c-9289-a9acfd7fb9ab,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-workflowmrsb2/series-workflowmrsb2-build-action-857823793/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-workflowmrsb2/series-workflowmrsb2-build-action-2708837086/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:51:23 +0000 UTC FinishedAt: 2026-07-23 03:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:51:23 +0000 UTC FinishedAt: 2026-07-23 03:51:41 +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":["offline_pages"],"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-workflowmrsb2/series-workflowmrsb2-convert-artifact-2490363567/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:51:23 +0000 UTC FinishedAt: 2026-07-23 03:51:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:51:23 +0000 UTC FinishedAt: 2026-07-23 03:51:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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-23 03:51:23 +0000 UTC FinishedAt: 2026-07-23 03:51:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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: Succeeded StartedAt: 2026-07-23 03:51:48 +0000 UTC FinishedAt: 2026-07-23 06:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmrsb2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"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":["offline_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5e0603ba185af6754422ad28b646798686b6caf6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG","MEMORY_HOTREMOVE"],"series_id":"064d1630-3c6f-4ff7-a90b-4eacfca2bb5a","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: Succeeded StartedAt: 2026-07-23 03:51:48 +0000 UTC FinishedAt: 2026-07-23 06:56:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*643f2355-4481-4ed9-b523-ec51d0531172,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d7a2f1fc-80cf-4b5c-9289-a9acfd7fb9ab,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-workflowmrsb2/series-workflowmrsb2-build-action-857823793/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-workflowmrsb2/series-workflowmrsb2-build-action-2708837086/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-workflowmrsb2/series-workflowmrsb2-convert-artifact-2490363567/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}