Name: series-workflownhwd5 Phase: Succeeded StartedAt: 2026-07-27 21:02:41 +0000 UTC FinishedAt: 2026-07-28 02:06:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[0] Phase: Succeeded StartedAt: 2026-07-27 21:02:41 +0000 UTC FinishedAt: 2026-07-27 21:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 21:02:41 +0000 UTC FinishedAt: 2026-07-27 21:20:36 +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": "1e15fbef3a3c465a6a2db0f38e3980d75420bd6d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_STAT" ], "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": "1e15fbef3a3c465a6a2db0f38e3980d75420bd6d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_STAT" ], "series_id": "48d03be2-5187-4937-8ec2-7dcfd5433e80" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_set_region_system_rams_default", "damos_sysfs_populate_region_dir", "damon_sysfs_schemes_clear_regions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OywKICAgICYjMzQ7REFNT05fU1RBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCYjMzQ7LAogICAgJiMzNDtkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gc3Vic3lzdGVtIHRvIGNvYWxlc2NlIGFkamFjZW50IFN5c3RlbSBSQU0gcmVzb3VyY2VzIGludG8gcmFuZ2VzIGFuZCBleGNsdWRlIGhvbGVzIGJldHdlZW4gZGlzY3JldGUgU3lzdGVtIFJBTSBhcmVhcy4gSXQgYWxzbyBhZGRzIGEgYG5yX3JlZ2lvbnNgIGZpbGUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04gc2NoZW1lcyYjMzk7IHRyaWVkIHJlZ2lvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIHN5c2ZzIGludGVyZmFjZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTM0NGUxMTBiYjE2Mjk2ODU3YjAwMDIzYzRlZGZiNWQ0NzRjNmVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDIxOjE3OjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbmluZGV4IGU2NzVhNTcxNDVlMzZkLi5kZWM4NmUwOGE5NjAxOSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxuQEAgLTYwOSw2ICYjNDM7NjA5LDE2IEBAIERlc2NyaXB0aW9uOlx0V3JpdGluZyBhIG51bWJlciB0byB0aGlzIGZpbGUgc2V0cyB0aGUgdXBwZXIgbGltaXQgb2ZcbiBcdFx0bnJfc25hcHNob3RzIHRoYXQgZGVhY3RpdmF0ZXMgdGhlIHNjaGVtZSB3aGVuIHRoZSBsaW1pdCBpc1xuIFx0XHRyZWFjaGVkIG9yIGV4Y2VlZGVkLlxuIFxuJiM0MztXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2Uvc2NoZW1lcy9cdTAwM2NTXHUwMDNlL3RyaWVkX3JlZ2lvbnMvbnJfcmVnaW9uc1xuJiM0MztEYXRlOlx0XHRBdWcgMjAyNlxuJiM0MztDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4mIzQzO0Rlc2NyaXB0aW9uOlx0UmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgdGhhdFxuJiM0MztcdFx0Y29ycmVzcG9uZGluZyBEQU1PTi1iYXNlZCBPcGVyYXRpb24gU2NoZW1lJiMzOTtzIGFjdGlvbiBoYXMgdHJpZWRcbiYjNDM7XHRcdHRvIGJlIGFwcGxpZWQuICBUaGUgbnVtYmVyIGlzIHVwZGF0ZWQgdG9nZXRoZXIgd2l0aFxuJiM0MztcdFx0JiMzOTsuLi4vdHJpZWRfcmVnaW9ucy90b3RhbF9ieXRlcyYjMzk7IGJ5IHdyaXRpbmcgJiMzOTt1cGRhdGVfc2NoZW1lc190cmllZF9ieXRlcyYjMzk7XG4mIzQzO1x0XHRvciAmIzM5O3VwZGF0ZV9zY2hlbWVzX3RyaWVkX3JlZ2lvbnMmIzM5OyB0byB0aGUgcmVsZXZhbnQgJiMzOTtzdGF0ZSYjMzk7IGZpbGUsIGFuZFxuJiM0MztcdFx0aGVuY2UgY2FuIGJlIHJlYWQgd2l0aG91dCBtYXRlcmlhbGl6aW5nIHRoZSBwZXItcmVnaW9uIGRpcmVjdG9yaWVzLlxuJiM0MztcbiBXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2Uvc2NoZW1lcy9cdTAwM2NTXHUwMDNlL3RyaWVkX3JlZ2lvbnMvdG90YWxfYnl0ZXNcbiBEYXRlOlx0XHRKdWwgMjAyM1xuIENvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5pbmRleCBkYTVmOWFmZDA4YWVmOC4uZmZiNjkwNWNhOWNlYjUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbkBAIC0xMDIsNyAmIzQzOzEwMiw3IEBAIGNvbW1hIChcJiMzNDssXCYjMzQ7KS5cbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YGRlc3RzIFx1MDAzY2RhbW9uX3N5c2ZzX2Rlc3RzXHUwMDNlYC9ucl9kZXN0c1xuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvaWQsd2VpZ2h0XG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBzdGF0cyBcdTAwM2NzeXNmc19zY2hlbWVzX3N0YXRzXHUwMDNlYC9ucl90cmllZCxzel90cmllZCxucl9hcHBsaWVkLHN6X2FwcGxpZWQsc3pfb3BzX2ZpbHRlcl9wYXNzZWQscXRfZXhjZWVkcyxucl9zbmFwc2hvdHMsbWF4X25yX3NuYXBzaG90c1xuLSAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdHJpZWRfcmVnaW9ucyBcdTAwM2NzeXNmc19zY2hlbWVzX3RyaWVkX3JlZ2lvbnNcdTAwM2VgL3RvdGFsX2J5dGVzXG4mIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdHJpZWRfcmVnaW9ucyBcdTAwM2NzeXNmc19zY2hlbWVzX3RyaWVkX3JlZ2lvbnNcdTAwM2VgL25yX3JlZ2lvbnMsdG90YWxfYnl0ZXNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL3N0YXJ0LGVuZCxucl9hY2Nlc3NlcyxhZ2Usc3pfZmlsdGVyX3Bhc3NlZFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBwcm9iZXNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvaGl0c1xuQEAgLTYyMiwyMSAmIzQzOzYyMiwyNCBAQCByZWxldmFudCBgYGtkYW1vbmRzL1x1MDAzY05cdTAwM2Uvc3RhdGVgYCBmaWxlLiAgUmVmZXIgdG8gOnJlZjpga2RhbW9uZCBkaXJlY3RvcnlcbiBzY2hlbWVzL1x1MDAzY05cdTAwM2UvdHJpZWRfcmVnaW9ucy9cbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIFxuLVRoaXMgZGlyZWN0b3J5IGluaXRpYWxseSBoYXMgb25lIGZpbGUsIGBgdG90YWxfYnl0ZXNgYC5cbiYjNDM7VGhpcyBkaXJlY3RvcnkgaW5pdGlhbGx5IGhhcyB0d28gZmlsZXMsIGBgbnJfcmVnaW9uc2BgIGFuZCBgYHRvdGFsX2J5dGVzYGAuXG4gXG4gV2hlbiBhIHNwZWNpYWwga2V5d29yZCwgYGB1cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zYGAsIGlzIHdyaXR0ZW4gdG8gdGhlXG4tcmVsZXZhbnQgYGBrZGFtb25kcy9cdTAwM2NOXHUwMDNlL3N0YXRlYGAgZmlsZSwgREFNT04gdXBkYXRlcyB0aGUgYGB0b3RhbF9ieXRlc2BgIGZpbGUgc29cbi10aGF0IHJlYWRpbmcgaXQgcmV0dXJucyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgc2NoZW1lIHRyaWVkIHJlZ2lvbnMsIGFuZCBjcmVhdGVzXG4tZGlyZWN0b3JpZXMgbmFtZWQgaW50ZWdlciBzdGFydGluZyBmcm9tIGBgMGBgIHVuZGVyIHRoaXMgZGlyZWN0b3J5LiAgRWFjaFxuLWRpcmVjdG9yeSBjb250YWlucyBmaWxlcyBleHBvc2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9mIHRoZSBtZW1vcnlcbi1yZWdpb24gdGhhdCB0aGUgY29ycmVzcG9uZGluZyBzY2hlbWUmIzM5O3MgYGBhY3Rpb25gYCBoYXMgdHJpZWQgdG8gYmUgYXBwbGllZCB1bmRlclxuLXRoaXMgZGlyZWN0b3J5LCBkdXJpbmcgbmV4dCA6cmVmOmBhcHBseSBpbnRlcnZhbCBcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NcdTAwM2VgIG9mIHRoZVxuLWNvcnJlc3BvbmRpbmcgc2NoZW1lLiAgVGhlIGluZm9ybWF0aW9uIGluY2x1ZGVzIGFkZHJlc3MgcmFuZ2UsIGBgbnJfYWNjZXNzZXNgYCxcbi1hbmQgYGBhZ2VgYCBvZiB0aGUgcmVnaW9uLlxuJiM0MztyZWxldmFudCBgYGtkYW1vbmRzL1x1MDAzY05cdTAwM2Uvc3RhdGVgYCBmaWxlLCBEQU1PTiB1cGRhdGVzIHRoZSBgYG5yX3JlZ2lvbnNgYCBhbmRcbiYjNDM7YGB0b3RhbF9ieXRlc2BgIGZpbGVzIHNvIHRoYXQgcmVhZGluZyB0aGVtIHJldHVybnMgdGhlIG51bWJlciBhbmQgdGhlIHRvdGFsIHNpemVcbiYjNDM7b2YgdGhlIHNjaGVtZSB0cmllZCByZWdpb25zLCByZXNwZWN0aXZlbHksIGFuZCBjcmVhdGVzIGRpcmVjdG9yaWVzIG5hbWVkXG4mIzQzO2ludGVnZXIgc3RhcnRpbmcgZnJvbSBgYDBgYCB1bmRlciB0aGlzIGRpcmVjdG9yeS4gIEVhY2ggZGlyZWN0b3J5IGNvbnRhaW5zIGZpbGVzXG4mIzQzO2V4cG9zaW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIG1lbW9yeSByZWdpb24gdGhhdCB0aGVcbiYjNDM7Y29ycmVzcG9uZGluZyBzY2hlbWUmIzM5O3MgYGBhY3Rpb25gYCBoYXMgdHJpZWQgdG8gYmUgYXBwbGllZCB1bmRlciB0aGlzIGRpcmVjdG9yeSxcbiYjNDM7ZHVyaW5nIG5leHQgOnJlZjpgYXBwbHkgaW50ZXJ2YWwgXHUwMDNjZGFtb25fZGVzaWduX2RhbW9zXHUwMDNlYCBvZiB0aGUgY29ycmVzcG9uZGluZ1xuJiM0MztzY2hlbWUuICBUaGUgaW5mb3JtYXRpb24gaW5jbHVkZXMgYWRkcmVzcyByYW5nZSwgYGBucl9hY2Nlc3Nlc2BgLCBhbmQgYGBhZ2VgYCBvZlxuJiM0Mzt0aGUgcmVnaW9uLlxuIFxuIFdyaXRpbmcgYGB1cGRhdGVfc2NoZW1lc190cmllZF9ieXRlc2BgIHRvIHRoZSByZWxldmFudCBgYGtkYW1vbmRzL1x1MDAzY05cdTAwM2Uvc3RhdGVgYFxuLWZpbGUgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgYGB0b3RhbF9ieXRlc2BgIGZpbGUsIGFuZCB3aWxsIG5vdCBjcmVhdGUgdGhlXG4tc3ViZGlyZWN0b3JpZXMuXG4mIzQzO2ZpbGUgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgYGBucl9yZWdpb25zYGAgYW5kIGBgdG90YWxfYnl0ZXNgYCBmaWxlcywgYW5kIHdpbGwgbm90XG4mIzQzO2NyZWF0ZSB0aGUgc3ViZGlyZWN0b3JpZXMuICBIZW5jZSBgYG5yX3JlZ2lvbnNgYCBjYW4gYmUgdXNlZCBhcyBhIGxpZ2h0d2VpZ2h0IHdheVxuJiM0Mzt0byByZWFkIHRoZSBudW1iZXIgb2YgdGhlIHNjaGVtZSB0cmllZCByZWdpb25zIHdpdGhvdXQgbWF0ZXJpYWxpemluZyB0aGVcbiYjNDM7cGVyLXJlZ2lvbiBzdWJkaXJlY3Rvcmllcy5cbiBcbiBUaGUgZGlyZWN0b3JpZXMgd2lsbCBiZSByZW1vdmVkIHdoZW4gYW5vdGhlciBzcGVjaWFsIGtleXdvcmQsXG4gYGBjbGVhcl9zY2hlbWVzX3RyaWVkX3JlZ2lvbnNgYCwgaXMgd3JpdHRlbiB0byB0aGUgcmVsZXZhbnRcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjA2Li4zNjVjNDMyNzFjMGM2NiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzkxOCwyMiAmIzQzOzM5MTgsMTQgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gfVxuIFxuIHN0cnVjdCBkYW1vbl9zeXN0ZW1fcmFtX3JhbmdlX3dhbGtfYXJnIHtcbi1cdGJvb2wgd2Fsa2VkO1xuLVx0c3RydWN0IHJlc291cmNlIHJlcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdDtcbiYjNDM7XHQvKiBOVUxMIGluIHRoZSBjb3VudGluZy1vbmx5IHBhc3MgKi9cbiYjNDM7XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl9yYW5nZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwcmV2X2VuZDtcbiYjNDM7XHRib29sIGhhc19wcmV2O1xuIH07XG4gXG4tc3RhdGljIGludCBkYW1vbl9zeXN0ZW1fcmFtX3dhbGtfZm4oc3RydWN0IHJlc291cmNlICpyZXMsIHZvaWQgKmFyZylcbi17XG4tXHRzdHJ1Y3QgZGFtb25fc3lzdGVtX3JhbV9yYW5nZV93YWxrX2FyZyAqYSA9IGFyZztcbi1cbi1cdGlmICghYS1cdTAwM2V3YWxrZWQpIHtcbi1cdFx0YS1cdTAwM2V3YWxrZWQgPSB0cnVlO1xuLVx0XHRhLVx1MDAzZXJlcy5zdGFydCA9IHJlcy1cdTAwM2VzdGFydDtcbi1cdH1cbi1cdGEtXHUwMDNlcmVzLmVuZCA9IHJlcy1cdTAwM2VlbmQ7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcmVzX3RvX2NvcmVfYWRkcihyZXNvdXJjZV9zaXplX3QgcmEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuIHtcbkBAIC0zOTQ3LDIzICYjNDM7MzkzOSw2NiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlc291cmNlX3NpemVfdCByYSxcbiBcdHJldHVybiByYSAvIGFkZHJfdW5pdDtcbiB9XG4gXG4tc3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcbi1cdFx0dW5zaWduZWQgbG9uZyAqZW5kLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcbiYjNDM7c3RhdGljIGludCBkYW1vbl9zeXN0ZW1fcmFtX3dhbGtfZm4oc3RydWN0IHJlc291cmNlICpyZXMsIHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9zeXN0ZW1fcmFtX3JhbmdlX3dhbGtfYXJnICphID0gYXJnO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlcy1cdTAwM2VzdGFydCwgYS1cdTAwM2VhZGRyX3VuaXQpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZW5kID0gZGFtb25fcmVzX3RvX2NvcmVfYWRkcihyZXMtXHUwMDNlZW5kICYjNDM7IDEsIGEtXHUwMDNlYWRkcl91bml0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVuZCBcdTAwM2M9IHN0YXJ0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiAmIzM5O1N5c3RlbSBSQU0mIzM5OyByZXNvdXJjZXMgYXJlIHZpc2l0ZWQgaW4gdGhlIGFzY2VuZGluZyBhZGRyZXNzIG9yZGVyLlxuJiM0MztcdCAqIENvYWxlc2NlIG9ubHkgdHJ1bHkgYWRqYWNlbnQgKG5vIGdhcCBpbiBiZXR3ZWVuKSByZXNvdXJjZXMgaW50byBvbmVcbiYjNDM7XHQgKiByYW5nZSwgc28gdGhhdCBhbnkgaG9sZSBiZXR3ZWVuIGRpc2NyZXRlIFN5c3RlbSBSQU0gYXJlYXMgaXMga2VwdCBvdXRcbiYjNDM7XHQgKiBvZiB0aGUgcmVzdWx0aW5nIHJhbmdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYS1cdTAwM2VoYXNfcHJldiBcdTAwMjZcdTAwMjYgYS1cdTAwM2VwcmV2X2VuZCA9PSBzdGFydCkge1xuJiM0MztcdFx0YS1cdTAwM2VwcmV2X2VuZCA9IGVuZDtcbiYjNDM7XHRcdGlmIChhLVx1MDAzZXJhbmdlcylcbiYjNDM7XHRcdFx0YS1cdTAwM2VyYW5nZXNbYS1cdTAwM2Vucl9yYW5nZXMgLSAxXS5lbmQgPSBlbmQ7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGEtXHUwMDNlcmFuZ2VzKSB7XG4mIzQzO1x0XHRhLVx1MDAzZXJhbmdlc1thLVx1MDAzZW5yX3Jhbmdlc10uc3RhcnQgPSBzdGFydDtcbiYjNDM7XHRcdGEtXHUwMDNlcmFuZ2VzW2EtXHUwMDNlbnJfcmFuZ2VzXS5lbmQgPSBlbmQ7XG4mIzQzO1x0fVxuJiM0MztcdGEtXHUwMDNlbnJfcmFuZ2VzJiM0MzsmIzQzOztcbiYjNDM7XHRhLVx1MDAzZXByZXZfZW5kID0gZW5kO1xuJiM0MztcdGEtXHUwMDNlaGFzX3ByZXYgPSB0cnVlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBGaW5kIGFsbCAmIzM5O1N5c3RlbSBSQU0mIzM5OyBhcmVhcyBhbmQgcmV0dXJuIHRoZW0gYXMgYW4gYXJyYXkgb2YgY29hbGVzY2VkXG4mIzQzOyAqIGRhbW9uX2FkZHJfcmFuZ2UuICBPbiBzdWNjZXNzLCAqcmFuZ2VzIHBvaW50cyB0byBhIGt2bWFsbG9jJiMzOTtlZCBhcnJheSB0aGF0IHRoZVxuJiM0MzsgKiBjYWxsZXIgc2hvdWxkIGt2ZnJlZSgpLCBhbmQgdGhlIG51bWJlciBvZiByYW5nZXMgaXMgcmV0dXJuZWQuICBSZXR1cm5zIDAgaWZcbiYjNDM7ICogbm8gU3lzdGVtIFJBTSBpcyBmb3VuZCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4ge1xuLVx0c3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgYXJnID0ge307XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgYXJnID0geyAuYWRkcl91bml0ID0gYWRkcl91bml0IH07XG4mIzQzO1x0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcztcbiBcbiYjNDM7XHQvKiBGaXJzdCBwYXNzOiBjb3VudCB0aGUgY29hbGVzY2VkIHJhbmdlcy4gKi9cbiBcdHdhbGtfc3lzdGVtX3JhbV9yZXMoMCwgLTEsIFx1MDAyNmFyZywgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKTtcbi1cdGlmICghYXJnLndhbGtlZClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0KnN0YXJ0ID0gZGFtb25fcmVzX3RvX2NvcmVfYWRkcihhcmcucmVzLnN0YXJ0LCBhZGRyX3VuaXQpO1xuLVx0KmVuZCA9IGRhbW9uX3Jlc190b19jb3JlX2FkZHIoYXJnLnJlcy5lbmQgJiM0MzsgMSwgYWRkcl91bml0KTtcbi1cdGlmICgqZW5kIFx1MDAzYz0gKnN0YXJ0KVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoIWFyZy5ucl9yYW5nZXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyYW5nZXMgPSBrdm1hbGxvY19vYmpzKCpyYW5nZXMsIGFyZy5ucl9yYW5nZXMsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcmFuZ2VzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0LyogU2Vjb25kIHBhc3M6IGZpbGwgaW4gdGhlIGNvYWxlc2NlZCByYW5nZXMuICovXG4mIzQzO1x0YXJnLnJhbmdlcyA9IHJhbmdlcztcbiYjNDM7XHRhcmcubnJfcmFuZ2VzID0gMDtcbiYjNDM7XHRhcmcuaGFzX3ByZXYgPSBmYWxzZTtcbiYjNDM7XHR3YWxrX3N5c3RlbV9yYW1fcmVzKDAsIC0xLCBcdTAwMjZhcmcsIGRhbW9uX3N5c3RlbV9yYW1fd2Fsa19mbik7XG4mIzQzO1x0KnJhbmdlc19vdXQgPSByYW5nZXM7XG4mIzQzO1x0cmV0dXJuIGFyZy5ucl9yYW5nZXM7XG4gfVxuIFxuIC8qKlxuLSAqIGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCgpIC0gU2V0IHRoZSByZWdpb24gb2YgdGhlIGdpdmVuXG4mIzQzOyAqIGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCgpIC0gU2V0IHRoZSByZWdpb25zIG9mIHRoZSBnaXZlblxuICAqIG1vbml0b3JpbmcgdGFyZ2V0IGFzIHJlcXVlc3RlZCwgb3IgdG8gY292ZXIgYWxsICYjMzk7U3lzdGVtIFJBTSYjMzk7IHJlc291cmNlcy5cbiAgKiBAdDpcdFx0VGhlIG1vbml0b3JpbmcgdGFyZ2V0IHRvIHNldCB0aGUgcmVnaW9uLlxuICAqIEBzdGFydDpcdFRoZSBwb2ludGVyIHRvIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSByZWdpb24uXG5AQCAtMzk3Myw5ICYjNDM7NDAwOCwxMSBAQCBzdGF0aWMgYm9vbCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSByZWdpb24gb2YgQHQgYXMgcmVxdWVzdGVkIGJ5IEBzdGFydCBhbmQgQGVuZC4gIElmIHRoZVxuICAqIHZhbHVlcyBvZiBAc3RhcnQgYW5kIEBlbmQgYXJlIHplcm8sIGhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gZmluZHMgJiMzOTtTeXN0ZW1cbi0gKiBSQU0mIzM5OyByZXNvdXJjZXMgYW5kIHNldHMgdGhlIHJlZ2lvbiB0byBjb3ZlciBhbGwgdGhlIHJlc291cmNlLiAgSW4gdGhlIGxhdHRlclxuLSAqIGNhc2UsIHRoaXMgZnVuY3Rpb24gc2F2ZXMgdGhlIHN0YXJ0IGFuZCB0aGUgZW5kIGFkZHJlc3Nlc2VzIG9mIHRoZSBmaXJzdCBhbmRcbi0gKiB0aGUgbGFzdCByZXNvdXJjZXMgaW4gQHN0YXJ0IGFuZCBAZW5kLCByZXNwZWN0aXZlbHkuXG4mIzQzOyAqIFJBTSYjMzk7IHJlc291cmNlcyBhbmQgc2V0cyB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyB0byBjb3ZlciB0aGVtLiAgRWFjaFxuJiM0MzsgKiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWEgYmVjb21lcyBhIHNlcGFyYXRlIHJlZ2lvbiwgc28gaG9sZXMgYmV0d2VlbiB0aGVtXG4mIzQzOyAqIChlLmcuLCBvbiBtdWx0aS1zb2NrZXQgb3IgQ1hMIHN5c3RlbXMpIGFyZSBleGNsdWRlZCBmcm9tIHRoZSBtb25pdG9yaW5nLiAgSW5cbiYjNDM7ICogdGhlIGxhdHRlciBjYXNlLCB0aGlzIGZ1bmN0aW9uIHNhdmVzIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBhZGRyZXNzZXMgb2YgdGhlXG4mIzQzOyAqIGZpcnN0IGFuZCB0aGUgbGFzdCByZXNvdXJjZXMgaW4gQHN0YXJ0IGFuZCBAZW5kLCByZXNwZWN0aXZlbHkuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4gICovXG5AQCAtMzk4NCwxNCAmIzQzOzQwMjEsMjUgQEAgaW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4ge1xuIFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xuJiM0MztcdGludCBucl9yYW5nZXMsIGVycjtcbiBcbi1cdGlmICghKnN0YXJ0IFx1MDAyNlx1MDAyNiAhKmVuZCBcdTAwMjZcdTAwMjZcbi1cdFx0IWRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2Uoc3RhcnQsIGVuZCwgYWRkcl91bml0KSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCpzdGFydCB8fCAqZW5kKSB7XG4mIzQzO1x0XHRhZGRyX3JhbmdlLnN0YXJ0ID0gKnN0YXJ0O1xuJiM0MztcdFx0YWRkcl9yYW5nZS5lbmQgPSAqZW5kO1xuJiM0MztcdFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFx1MDAyNmFkZHJfcmFuZ2UsIDEsIG1pbl9yZWdpb25fc3opO1xuJiM0MztcdH1cbiBcbi1cdGFkZHJfcmFuZ2Uuc3RhcnQgPSAqc3RhcnQ7XG4tXHRhZGRyX3JhbmdlLmVuZCA9ICplbmQ7XG4tXHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXHUwMDI2YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7XG4mIzQzO1x0bnJfcmFuZ2VzID0gZGFtb25fZmluZF9zeXN0ZW1fcmFtcyhcdTAwMjZyYW5nZXMsIGFkZHJfdW5pdCk7XG4mIzQzO1x0aWYgKG5yX3JhbmdlcyBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBucl9yYW5nZXM7XG4mIzQzO1x0aWYgKCFucl9yYW5nZXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHQqc3RhcnQgPSByYW5nZXNbMF0uc3RhcnQ7XG4mIzQzO1x0KmVuZCA9IHJhbmdlc1tucl9yYW5nZXMgLSAxXS5lbmQ7XG4mIzQzO1x0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBucl9yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xuJiM0MztcdGt2ZnJlZShyYW5nZXMpO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuaW5kZXggMzJmNDk1YTk2YjE3YTguLjkxNTc2Zjc3ZTk2Y2FkIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbkBAIC0yOTcsNiAmIzQzOzI5Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUgPSB7XG4gc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zIHtcbiBcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlZ2lvbnNfbGlzdDtcbiYjNDM7XHRpbnQgbnJfcmVnaW9uX2RpcnM7XG4gXHRpbnQgbnJfcmVnaW9ucztcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfYnl0ZXM7XG4gfTtcbkBAIC0zMTEsMTEgJiM0MzszMTIsMjEgQEAgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcbiBcbiBcdHJlZ2lvbnMtXHUwMDNla29iaiA9IChzdHJ1Y3Qga29iamVjdCl7fTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJlZ2lvbnMtXHUwMDNlcmVnaW9uc19saXN0KTtcbiYjNDM7XHRyZWdpb25zLVx1MDAzZW5yX3JlZ2lvbl9kaXJzID0gMDtcbiBcdHJlZ2lvbnMtXHUwMDNlbnJfcmVnaW9ucyA9IDA7XG4gXHRyZWdpb25zLVx1MDAzZXRvdGFsX2J5dGVzID0gMDtcbiBcdHJldHVybiByZWdpb25zO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNzaXplX3QgbnJfcmVnaW9uc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcbiYjNDM7XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslZFxcblwmIzM0OywgcmVnaW9ucy1cdTAwM2Vucl9yZWdpb25zKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3NpemVfdCB0b3RhbF9ieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiB7XG5AQCAtMzM1LDcgJiM0MzszNDYsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ybV9kaXJzKFxuIFx0XHRsaXN0X2RlbChcdTAwMjZyLVx1MDAzZWxpc3QpO1xuIFx0XHRrb2JqZWN0X2RlbChcdTAwMjZyLVx1MDAzZWtvYmopO1xuIFx0XHRrb2JqZWN0X3B1dChcdTAwMjZyLVx1MDAzZWtvYmopO1xuLVx0XHRyZWdpb25zLVx1MDAzZW5yX3JlZ2lvbnMtLTtcbiYjNDM7XHRcdHJlZ2lvbnMtXHUwMDNlbnJfcmVnaW9uX2RpcnMtLTtcbiBcdH1cbiB9XG4gXG5AQCAtMzQ0LDEwICYjNDM7MzU1LDE0IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4gXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX25yX3JlZ2lvbnNfYXR0ciA9XG4mIzQzO1x0XHRfX0FUVFJfUk9fTU9ERShucl9yZWdpb25zLCAwNDAwKTtcbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc190b3RhbF9ieXRlc19hdHRyID1cbiBcdFx0X19BVFRSX1JPX01PREUodG90YWxfYnl0ZXMsIDA0MDApO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hdHRyc1tdID0ge1xuJiM0MztcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX25yX3JlZ2lvbnNfYXR0ci5hdHRyLFxuIFx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ci5hdHRyLFxuIFx0TlVMTCxcbiB9O1xuQEAgLTMxMTksNiAmIzQzOzMxMzQsNyBAQCB2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4gXHRcdHJldHVybjtcbiBcbiBcdHN5c2ZzX3JlZ2lvbnMgPSBzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW3NjaGVtZXNfaWR4XS1cdTAwM2V0cmllZF9yZWdpb25zO1xuJiM0MztcdHN5c2ZzX3JlZ2lvbnMtXHUwMDNlbnJfcmVnaW9ucyYjNDM7JiM0Mzs7XG4gXHRzeXNmc19yZWdpb25zLVx1MDAzZXRvdGFsX2J5dGVzICYjNDM7PSByLVx1MDAzZWFyLmVuZCAtIHItXHUwMDNlYXIuc3RhcnQ7XG4gXHRpZiAodG90YWxfYnl0ZXNfb25seSlcbiBcdFx0cmV0dXJuO1xuQEAgLTMxMzAsMTMgJiM0MzszMTQ2LDEzIEBAIHZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbiBcdGlmIChrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZyZWdpb24tXHUwMDNla29iaixcbiBcdFx0XHRcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUsXG4gXHRcdFx0XHRcdTAwMjZzeXNmc19yZWdpb25zLVx1MDAzZWtvYmosIFwmIzM0OyVkXCYjMzQ7LFxuLVx0XHRcdFx0c3lzZnNfcmVnaW9ucy1cdTAwM2Vucl9yZWdpb25zKSlcbiYjNDM7XHRcdFx0XHRzeXNmc19yZWdpb25zLVx1MDAzZW5yX3JlZ2lvbl9kaXJzKSlcbiBcdFx0Z290byBvdXQ7XG4gXHRpZiAoZGFtb3Nfc3lzZnNfcmVnaW9uX2FkZF9kaXJzKHJlZ2lvbiwgY3R4LCByKSlcbiBcdFx0Z290byBkZWxfb3V0O1xuIFxuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZyZWdpb24tXHUwMDNlbGlzdCwgXHUwMDI2c3lzZnNfcmVnaW9ucy1cdTAwM2VyZWdpb25zX2xpc3QpO1xuLVx0c3lzZnNfcmVnaW9ucy1cdTAwM2Vucl9yZWdpb25zJiM0MzsmIzQzOztcbiYjNDM7XHRzeXNmc19yZWdpb25zLVx1MDAzZW5yX3JlZ2lvbl9kaXJzJiM0MzsmIzQzOztcbiBcdHJldHVybjtcbiBcbiBkZWxfb3V0OlxuQEAgLTMxNTYsNiAmIzQzOzMxNzIsNyBAQCBpbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxuIFx0XHRzeXNmc19zY2hlbWUgPSBzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW2ldO1xuIFx0XHRkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ybV9kaXJzKFxuIFx0XHRcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZXRyaWVkX3JlZ2lvbnMpO1xuJiM0MztcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZXRyaWVkX3JlZ2lvbnMtXHUwMDNlbnJfcmVnaW9ucyA9IDA7XG4gXHRcdHN5c2ZzX3NjaGVtZS1cdTAwM2V0cmllZF9yZWdpb25zLVx1MDAzZXRvdGFsX2J5dGVzID0gMDtcbiBcdH1cbiBcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1NUQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQmIzM0OywKICAgICYjMzQ7ZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpciYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9OIHN1YnN5c3RlbSB0byBjb2FsZXNjZSBhZGphY2VudCBTeXN0ZW0gUkFNIHJlc291cmNlcyBpbnRvIHJhbmdlcyBhbmQgZXhjbHVkZSBob2xlcyBiZXR3ZWVuIGRpc2NyZXRlIFN5c3RlbSBSQU0gYXJlYXMuIEl0IGFsc28gYWRkcyBhIGBucl9yZWdpb25zYCBmaWxlIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OIHNjaGVtZXMmIzM5OyB0cmllZCByZWdpb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzeXNmcyBpbnRlcmZhY2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEzNDRlMTEwYmIxNjI5Njg1N2IwMDAyM2M0ZWRmYjVkNDc0YzZlZjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAyMToxNzo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24KaW5kZXggZTY3NWE1NzE0NWUzNmQuLmRlYzg2ZTA4YTk2MDE5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgpAQCAtNjA5LDYgJiM0Mzs2MDksMTYgQEAgRGVzY3JpcHRpb246CVdyaXRpbmcgYSBudW1iZXIgdG8gdGhpcyBmaWxlIHNldHMgdGhlIHVwcGVyIGxpbWl0IG9mCiAJCW5yX3NuYXBzaG90cyB0aGF0IGRlYWN0aXZhdGVzIHRoZSBzY2hlbWUgd2hlbiB0aGUgbGltaXQgaXMKIAkJcmVhY2hlZCBvciBleGNlZWRlZC4KIAomIzQzO1doYXQ6CQkvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8mbHQ7SyZndDsvY29udGV4dHMvJmx0O0MmZ3Q7L3NjaGVtZXMvJmx0O1MmZ3Q7L3RyaWVkX3JlZ2lvbnMvbnJfcmVnaW9ucwomIzQzO0RhdGU6CQlBdWcgMjAyNgomIzQzO0NvbnRhY3Q6CVNKIFBhcmsgJmx0O3NqQGtlcm5lbC5vcmcmZ3Q7CiYjNDM7RGVzY3JpcHRpb246CVJlYWRpbmcgdGhpcyBmaWxlIHJldHVybnMgdGhlIG51bWJlciBvZiByZWdpb25zIHRoYXQKJiM0MzsJCWNvcnJlc3BvbmRpbmcgREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZSYjMzk7cyBhY3Rpb24gaGFzIHRyaWVkCiYjNDM7CQl0byBiZSBhcHBsaWVkLiAgVGhlIG51bWJlciBpcyB1cGRhdGVkIHRvZ2V0aGVyIHdpdGgKJiM0MzsJCSYjMzk7Li4uL3RyaWVkX3JlZ2lvbnMvdG90YWxfYnl0ZXMmIzM5OyBieSB3cml0aW5nICYjMzk7dXBkYXRlX3NjaGVtZXNfdHJpZWRfYnl0ZXMmIzM5OwomIzQzOwkJb3IgJiMzOTt1cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zJiMzOTsgdG8gdGhlIHJlbGV2YW50ICYjMzk7c3RhdGUmIzM5OyBmaWxlLCBhbmQKJiM0MzsJCWhlbmNlIGNhbiBiZSByZWFkIHdpdGhvdXQgbWF0ZXJpYWxpemluZyB0aGUgcGVyLXJlZ2lvbiBkaXJlY3Rvcmllcy4KJiM0MzsKIFdoYXQ6CQkvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8mbHQ7SyZndDsvY29udGV4dHMvJmx0O0MmZ3Q7L3NjaGVtZXMvJmx0O1MmZ3Q7L3RyaWVkX3JlZ2lvbnMvdG90YWxfYnl0ZXMKIERhdGU6CQlKdWwgMjAyMwogQ29udGFjdDoJU0ogUGFyayAmbHQ7c2pAa2VybmVsLm9yZyZndDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKaW5kZXggZGE1ZjlhZmQwOGFlZjguLmZmYjY5MDVjYTljZWI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdApAQCAtMTAyLDcgJiM0MzsxMDIsNyBAQCBjb21tYSAoJiMzNDssJiMzNDspLgogICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBkZXN0cyAmbHQ7ZGFtb25fc3lzZnNfZGVzdHMmZ3Q7YC9ucl9kZXN0cwogICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9pZCx3ZWlnaHQKICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgc3RhdHMgJmx0O3N5c2ZzX3NjaGVtZXNfc3RhdHMmZ3Q7YC9ucl90cmllZCxzel90cmllZCxucl9hcHBsaWVkLHN6X2FwcGxpZWQsc3pfb3BzX2ZpbHRlcl9wYXNzZWQscXRfZXhjZWVkcyxucl9zbmFwc2hvdHMsbWF4X25yX3NuYXBzaG90cwotICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmB0cmllZF9yZWdpb25zICZsdDtzeXNmc19zY2hlbWVzX3RyaWVkX3JlZ2lvbnMmZ3Q7YC90b3RhbF9ieXRlcwomIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdHJpZWRfcmVnaW9ucyAmbHQ7c3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zJmd0O2AvbnJfcmVnaW9ucyx0b3RhbF9ieXRlcwogICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9zdGFydCxlbmQsbnJfYWNjZXNzZXMsYWdlLHN6X2ZpbHRlcl9wYXNzZWQKICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBwcm9iZXMKICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9oaXRzCkBAIC02MjIsMjEgJiM0Mzs2MjIsMjQgQEAgcmVsZXZhbnQgYGBrZGFtb25kcy8mbHQ7TiZndDsvc3RhdGVgYCBmaWxlLiAgUmVmZXIgdG8gOnJlZjpga2RhbW9uZCBkaXJlY3RvcnkKIHNjaGVtZXMvJmx0O04mZ3Q7L3RyaWVkX3JlZ2lvbnMvCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGlzIGRpcmVjdG9yeSBpbml0aWFsbHkgaGFzIG9uZSBmaWxlLCBgYHRvdGFsX2J5dGVzYGAuCiYjNDM7VGhpcyBkaXJlY3RvcnkgaW5pdGlhbGx5IGhhcyB0d28gZmlsZXMsIGBgbnJfcmVnaW9uc2BgIGFuZCBgYHRvdGFsX2J5dGVzYGAuCiAKIFdoZW4gYSBzcGVjaWFsIGtleXdvcmQsIGBgdXBkYXRlX3NjaGVtZXNfdHJpZWRfcmVnaW9uc2BgLCBpcyB3cml0dGVuIHRvIHRoZQotcmVsZXZhbnQgYGBrZGFtb25kcy8mbHQ7TiZndDsvc3RhdGVgYCBmaWxlLCBEQU1PTiB1cGRhdGVzIHRoZSBgYHRvdGFsX2J5dGVzYGAgZmlsZSBzbwotdGhhdCByZWFkaW5nIGl0IHJldHVybnMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHNjaGVtZSB0cmllZCByZWdpb25zLCBhbmQgY3JlYXRlcwotZGlyZWN0b3JpZXMgbmFtZWQgaW50ZWdlciBzdGFydGluZyBmcm9tIGBgMGBgIHVuZGVyIHRoaXMgZGlyZWN0b3J5LiAgRWFjaAotZGlyZWN0b3J5IGNvbnRhaW5zIGZpbGVzIGV4cG9zaW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIG1lbW9yeQotcmVnaW9uIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgc2NoZW1lJiMzOTtzIGBgYWN0aW9uYGAgaGFzIHRyaWVkIHRvIGJlIGFwcGxpZWQgdW5kZXIKLXRoaXMgZGlyZWN0b3J5LCBkdXJpbmcgbmV4dCA6cmVmOmBhcHBseSBpbnRlcnZhbCAmbHQ7ZGFtb25fZGVzaWduX2RhbW9zJmd0O2Agb2YgdGhlCi1jb3JyZXNwb25kaW5nIHNjaGVtZS4gIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBhZGRyZXNzIHJhbmdlLCBgYG5yX2FjY2Vzc2VzYGAsCi1hbmQgYGBhZ2VgYCBvZiB0aGUgcmVnaW9uLgomIzQzO3JlbGV2YW50IGBga2RhbW9uZHMvJmx0O04mZ3Q7L3N0YXRlYGAgZmlsZSwgREFNT04gdXBkYXRlcyB0aGUgYGBucl9yZWdpb25zYGAgYW5kCiYjNDM7YGB0b3RhbF9ieXRlc2BgIGZpbGVzIHNvIHRoYXQgcmVhZGluZyB0aGVtIHJldHVybnMgdGhlIG51bWJlciBhbmQgdGhlIHRvdGFsIHNpemUKJiM0MztvZiB0aGUgc2NoZW1lIHRyaWVkIHJlZ2lvbnMsIHJlc3BlY3RpdmVseSwgYW5kIGNyZWF0ZXMgZGlyZWN0b3JpZXMgbmFtZWQKJiM0MztpbnRlZ2VyIHN0YXJ0aW5nIGZyb20gYGAwYGAgdW5kZXIgdGhpcyBkaXJlY3RvcnkuICBFYWNoIGRpcmVjdG9yeSBjb250YWlucyBmaWxlcwomIzQzO2V4cG9zaW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIG1lbW9yeSByZWdpb24gdGhhdCB0aGUKJiM0Mztjb3JyZXNwb25kaW5nIHNjaGVtZSYjMzk7cyBgYGFjdGlvbmBgIGhhcyB0cmllZCB0byBiZSBhcHBsaWVkIHVuZGVyIHRoaXMgZGlyZWN0b3J5LAomIzQzO2R1cmluZyBuZXh0IDpyZWY6YGFwcGx5IGludGVydmFsICZsdDtkYW1vbl9kZXNpZ25fZGFtb3MmZ3Q7YCBvZiB0aGUgY29ycmVzcG9uZGluZwomIzQzO3NjaGVtZS4gIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBhZGRyZXNzIHJhbmdlLCBgYG5yX2FjY2Vzc2VzYGAsIGFuZCBgYGFnZWBgIG9mCiYjNDM7dGhlIHJlZ2lvbi4KIAogV3JpdGluZyBgYHVwZGF0ZV9zY2hlbWVzX3RyaWVkX2J5dGVzYGAgdG8gdGhlIHJlbGV2YW50IGBga2RhbW9uZHMvJmx0O04mZ3Q7L3N0YXRlYGAKLWZpbGUgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgYGB0b3RhbF9ieXRlc2BgIGZpbGUsIGFuZCB3aWxsIG5vdCBjcmVhdGUgdGhlCi1zdWJkaXJlY3Rvcmllcy4KJiM0MztmaWxlIHdpbGwgb25seSB1cGRhdGUgdGhlIGBgbnJfcmVnaW9uc2BgIGFuZCBgYHRvdGFsX2J5dGVzYGAgZmlsZXMsIGFuZCB3aWxsIG5vdAomIzQzO2NyZWF0ZSB0aGUgc3ViZGlyZWN0b3JpZXMuICBIZW5jZSBgYG5yX3JlZ2lvbnNgYCBjYW4gYmUgdXNlZCBhcyBhIGxpZ2h0d2VpZ2h0IHdheQomIzQzO3RvIHJlYWQgdGhlIG51bWJlciBvZiB0aGUgc2NoZW1lIHRyaWVkIHJlZ2lvbnMgd2l0aG91dCBtYXRlcmlhbGl6aW5nIHRoZQomIzQzO3Blci1yZWdpb24gc3ViZGlyZWN0b3JpZXMuCiAKIFRoZSBkaXJlY3RvcmllcyB3aWxsIGJlIHJlbW92ZWQgd2hlbiBhbm90aGVyIHNwZWNpYWwga2V5d29yZCwKIGBgY2xlYXJfc2NoZW1lc190cmllZF9yZWdpb25zYGAsIGlzIHdyaXR0ZW4gdG8gdGhlIHJlbGV2YW50CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MDYuLjM2NWM0MzI3MWMwYzY2IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zOTE4LDIyICYjNDM7MzkxOCwxNCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSkKIH0KIAogc3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgewotCWJvb2wgd2Fsa2VkOwotCXN0cnVjdCByZXNvdXJjZSByZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkcl91bml0OwomIzQzOwkvKiBOVUxMIGluIHRoZSBjb3VudGluZy1vbmx5IHBhc3MgKi8KJiM0MzsJc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlczsKJiM0MzsJdW5zaWduZWQgaW50IG5yX3JhbmdlczsKJiM0MzsJdW5zaWduZWQgbG9uZyBwcmV2X2VuZDsKJiM0MzsJYm9vbCBoYXNfcHJldjsKIH07CiAKLXN0YXRpYyBpbnQgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgKmEgPSBhcmc7Ci0KLQlpZiAoIWEtJmd0O3dhbGtlZCkgewotCQlhLSZndDt3YWxrZWQgPSB0cnVlOwotCQlhLSZndDtyZXMuc3RhcnQgPSByZXMtJmd0O3N0YXJ0OwotCX0KLQlhLSZndDtyZXMuZW5kID0gcmVzLSZndDtlbmQ7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3Jlc190b19jb3JlX2FkZHIocmVzb3VyY2Vfc2l6ZV90IHJhLAogCQl1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCkKIHsKQEAgLTM5NDcsMjMgJiM0MzszOTM5LDY2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3Jlc190b19jb3JlX2FkZHIocmVzb3VyY2Vfc2l6ZV90IHJhLAogCXJldHVybiByYSAvIGFkZHJfdW5pdDsKIH0KIAotc3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCwKLQkJdW5zaWduZWQgbG9uZyAqZW5kLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCkKJiM0MztzdGF0aWMgaW50IGRhbW9uX3N5c3RlbV9yYW1fd2Fsa19mbihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgKmEgPSBhcmc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlcy0mZ3Q7c3RhcnQsIGEtJmd0O2FkZHJfdW5pdCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW5kID0gZGFtb25fcmVzX3RvX2NvcmVfYWRkcihyZXMtJmd0O2VuZCAmIzQzOyAxLCBhLSZndDthZGRyX3VuaXQpOwomIzQzOwomIzQzOwlpZiAoZW5kICZsdDs9IHN0YXJ0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CS8qCiYjNDM7CSAqICYjMzk7U3lzdGVtIFJBTSYjMzk7IHJlc291cmNlcyBhcmUgdmlzaXRlZCBpbiB0aGUgYXNjZW5kaW5nIGFkZHJlc3Mgb3JkZXIuCiYjNDM7CSAqIENvYWxlc2NlIG9ubHkgdHJ1bHkgYWRqYWNlbnQgKG5vIGdhcCBpbiBiZXR3ZWVuKSByZXNvdXJjZXMgaW50byBvbmUKJiM0MzsJICogcmFuZ2UsIHNvIHRoYXQgYW55IGhvbGUgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzIGlzIGtlcHQgb3V0CiYjNDM7CSAqIG9mIHRoZSByZXN1bHRpbmcgcmFuZ2VzLgomIzQzOwkgKi8KJiM0MzsJaWYgKGEtJmd0O2hhc19wcmV2ICZhbXA7JmFtcDsgYS0mZ3Q7cHJldl9lbmQgPT0gc3RhcnQpIHsKJiM0MzsJCWEtJmd0O3ByZXZfZW5kID0gZW5kOwomIzQzOwkJaWYgKGEtJmd0O3JhbmdlcykKJiM0MzsJCQlhLSZndDtyYW5nZXNbYS0mZ3Q7bnJfcmFuZ2VzIC0gMV0uZW5kID0gZW5kOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJaWYgKGEtJmd0O3JhbmdlcykgewomIzQzOwkJYS0mZ3Q7cmFuZ2VzW2EtJmd0O25yX3Jhbmdlc10uc3RhcnQgPSBzdGFydDsKJiM0MzsJCWEtJmd0O3Jhbmdlc1thLSZndDtucl9yYW5nZXNdLmVuZCA9IGVuZDsKJiM0MzsJfQomIzQzOwlhLSZndDtucl9yYW5nZXMmIzQzOyYjNDM7OwomIzQzOwlhLSZndDtwcmV2X2VuZCA9IGVuZDsKJiM0MzsJYS0mZ3Q7aGFzX3ByZXYgPSB0cnVlOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBGaW5kIGFsbCAmIzM5O1N5c3RlbSBSQU0mIzM5OyBhcmVhcyBhbmQgcmV0dXJuIHRoZW0gYXMgYW4gYXJyYXkgb2YgY29hbGVzY2VkCiYjNDM7ICogZGFtb25fYWRkcl9yYW5nZS4gIE9uIHN1Y2Nlc3MsICpyYW5nZXMgcG9pbnRzIHRvIGEga3ZtYWxsb2MmIzM5O2VkIGFycmF5IHRoYXQgdGhlCiYjNDM7ICogY2FsbGVyIHNob3VsZCBrdmZyZWUoKSwgYW5kIHRoZSBudW1iZXIgb2YgcmFuZ2VzIGlzIHJldHVybmVkLiAgUmV0dXJucyAwIGlmCiYjNDM7ICogbm8gU3lzdGVtIFJBTSBpcyBmb3VuZCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICoqcmFuZ2VzX291dCwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCkKIHsKLQlzdHJ1Y3QgZGFtb25fc3lzdGVtX3JhbV9yYW5nZV93YWxrX2FyZyBhcmcgPSB7fTsKJiM0MzsJc3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgYXJnID0geyAuYWRkcl91bml0ID0gYWRkcl91bml0IH07CiYjNDM7CXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXM7CiAKJiM0MzsJLyogRmlyc3QgcGFzczogY291bnQgdGhlIGNvYWxlc2NlZCByYW5nZXMuICovCiAJd2Fsa19zeXN0ZW1fcmFtX3JlcygwLCAtMSwgJmFtcDthcmcsIGRhbW9uX3N5c3RlbV9yYW1fd2Fsa19mbik7Ci0JaWYgKCFhcmcud2Fsa2VkKQotCQlyZXR1cm4gZmFsc2U7Ci0JKnN0YXJ0ID0gZGFtb25fcmVzX3RvX2NvcmVfYWRkcihhcmcucmVzLnN0YXJ0LCBhZGRyX3VuaXQpOwotCSplbmQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKGFyZy5yZXMuZW5kICYjNDM7IDEsIGFkZHJfdW5pdCk7Ci0JaWYgKCplbmQgJmx0Oz0gKnN0YXJ0KQotCQlyZXR1cm4gZmFsc2U7Ci0JcmV0dXJuIHRydWU7CiYjNDM7CWlmICghYXJnLm5yX3JhbmdlcykKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyYW5nZXMgPSBrdm1hbGxvY19vYmpzKCpyYW5nZXMsIGFyZy5ucl9yYW5nZXMsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJhbmdlcykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwkvKiBTZWNvbmQgcGFzczogZmlsbCBpbiB0aGUgY29hbGVzY2VkIHJhbmdlcy4gKi8KJiM0MzsJYXJnLnJhbmdlcyA9IHJhbmdlczsKJiM0MzsJYXJnLm5yX3JhbmdlcyA9IDA7CiYjNDM7CWFyZy5oYXNfcHJldiA9IGZhbHNlOwomIzQzOwl3YWxrX3N5c3RlbV9yYW1fcmVzKDAsIC0xLCAmYW1wO2FyZywgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKTsKJiM0MzsJKnJhbmdlc19vdXQgPSByYW5nZXM7CiYjNDM7CXJldHVybiBhcmcubnJfcmFuZ2VzOwogfQogCiAvKioKLSAqIGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCgpIC0gU2V0IHRoZSByZWdpb24gb2YgdGhlIGdpdmVuCiYjNDM7ICogZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KCkgLSBTZXQgdGhlIHJlZ2lvbnMgb2YgdGhlIGdpdmVuCiAgKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAmIzM5O1N5c3RlbSBSQU0mIzM5OyByZXNvdXJjZXMuCiAgKiBAdDoJCVRoZSBtb25pdG9yaW5nIHRhcmdldCB0byBzZXQgdGhlIHJlZ2lvbi4KICAqIEBzdGFydDoJVGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJlZ2lvbi4KQEAgLTM5NzMsOSAmIzQzOzQwMDgsMTEgQEAgc3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCwKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHJlZ2lvbiBvZiBAdCBhcyByZXF1ZXN0ZWQgYnkgQHN0YXJ0IGFuZCBAZW5kLiAgSWYgdGhlCiAgKiB2YWx1ZXMgb2YgQHN0YXJ0IGFuZCBAZW5kIGFyZSB6ZXJvLCBob3dldmVyLCB0aGlzIGZ1bmN0aW9uIGZpbmRzICYjMzk7U3lzdGVtCi0gKiBSQU0mIzM5OyByZXNvdXJjZXMgYW5kIHNldHMgdGhlIHJlZ2lvbiB0byBjb3ZlciBhbGwgdGhlIHJlc291cmNlLiAgSW4gdGhlIGxhdHRlcgotICogY2FzZSwgdGhpcyBmdW5jdGlvbiBzYXZlcyB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgYWRkcmVzc2VzZXMgb2YgdGhlIGZpcnN0IGFuZAotICogdGhlIGxhc3QgcmVzb3VyY2VzIGluIEBzdGFydCBhbmQgQGVuZCwgcmVzcGVjdGl2ZWx5LgomIzQzOyAqIFJBTSYjMzk7IHJlc291cmNlcyBhbmQgc2V0cyB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyB0byBjb3ZlciB0aGVtLiAgRWFjaAomIzQzOyAqIGRpc2NyZXRlIFN5c3RlbSBSQU0gYXJlYSBiZWNvbWVzIGEgc2VwYXJhdGUgcmVnaW9uLCBzbyBob2xlcyBiZXR3ZWVuIHRoZW0KJiM0MzsgKiAoZS5nLiwgb24gbXVsdGktc29ja2V0IG9yIENYTCBzeXN0ZW1zKSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgbW9uaXRvcmluZy4gIEluCiYjNDM7ICogdGhlIGxhdHRlciBjYXNlLCB0aGlzIGZ1bmN0aW9uIHNhdmVzIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBhZGRyZXNzZXMgb2YgdGhlCiYjNDM7ICogZmlyc3QgYW5kIHRoZSBsYXN0IHJlc291cmNlcyBpbiBAc3RhcnQgYW5kIEBlbmQsIHJlc3BlY3RpdmVseS4KICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiAgKi8KQEAgLTM5ODQsMTQgJiM0Mzs0MDIxLDI1IEBAIGludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJCXVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opCiB7CiAJc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTsKJiM0MzsJc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlczsKJiM0MzsJaW50IG5yX3JhbmdlcywgZXJyOwogCi0JaWYgKCEqc3RhcnQgJmFtcDsmYW1wOyAhKmVuZCAmYW1wOyZhbXA7Ci0JCSFkYW1vbl9maW5kX3N5c3RlbV9yYW1zX3JhbmdlKHN0YXJ0LCBlbmQsIGFkZHJfdW5pdCkpCi0JCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoKnN0YXJ0IHx8ICplbmQpIHsKJiM0MzsJCWFkZHJfcmFuZ2Uuc3RhcnQgPSAqc3RhcnQ7CiYjNDM7CQlhZGRyX3JhbmdlLmVuZCA9ICplbmQ7CiYjNDM7CQlyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgJmFtcDthZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTsKJiM0MzsJfQogCi0JYWRkcl9yYW5nZS5zdGFydCA9ICpzdGFydDsKLQlhZGRyX3JhbmdlLmVuZCA9ICplbmQ7Ci0JcmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsICZhbXA7YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7CiYjNDM7CW5yX3JhbmdlcyA9IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoJmFtcDtyYW5nZXMsIGFkZHJfdW5pdCk7CiYjNDM7CWlmIChucl9yYW5nZXMgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG5yX3JhbmdlczsKJiM0MzsJaWYgKCFucl9yYW5nZXMpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJKnN0YXJ0ID0gcmFuZ2VzWzBdLnN0YXJ0OwomIzQzOwkqZW5kID0gcmFuZ2VzW25yX3JhbmdlcyAtIDFdLmVuZDsKJiM0MzsJZXJyID0gZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBucl9yYW5nZXMsIG1pbl9yZWdpb25fc3opOwomIzQzOwlrdmZyZWUocmFuZ2VzKTsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKaW5kZXggMzJmNDk1YTk2YjE3YTguLjkxNTc2Zjc3ZTk2Y2FkIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCkBAIC0yOTcsNiAmIzQzOzI5Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUgPSB7CiBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgewogCXN0cnVjdCBrb2JqZWN0IGtvYmo7CiAJc3RydWN0IGxpc3RfaGVhZCByZWdpb25zX2xpc3Q7CiYjNDM7CWludCBucl9yZWdpb25fZGlyczsKIAlpbnQgbnJfcmVnaW9uczsKIAl1bnNpZ25lZCBsb25nIHRvdGFsX2J5dGVzOwogfTsKQEAgLTMxMSwxMSAmIzQzOzMxMiwyMSBAQCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hbGxvYyh2b2lkKQogCiAJcmVnaW9ucy0mZ3Q7a29iaiA9IChzdHJ1Y3Qga29iamVjdCl7fTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3JlZ2lvbnMtJmd0O3JlZ2lvbnNfbGlzdCk7CiYjNDM7CXJlZ2lvbnMtJmd0O25yX3JlZ2lvbl9kaXJzID0gMDsKIAlyZWdpb25zLSZndDtucl9yZWdpb25zID0gMDsKIAlyZWdpb25zLSZndDt0b3RhbF9ieXRlcyA9IDA7CiAJcmV0dXJuIHJlZ2lvbnM7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBucl9yZWdpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCiYjNDM7CQkJICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpyZWdpb25zID0gY29udGFpbmVyX29mKGtvYmosCiYjNDM7CQkJc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVkXG4mIzM0OywgcmVnaW9ucy0mZ3Q7bnJfcmVnaW9ucyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHNzaXplX3QgdG90YWxfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0zMzUsNyAmIzQzOzM0Niw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JtX2RpcnMoCiAJCWxpc3RfZGVsKCZhbXA7ci0mZ3Q7bGlzdCk7CiAJCWtvYmplY3RfZGVsKCZhbXA7ci0mZ3Q7a29iaik7CiAJCWtvYmplY3RfcHV0KCZhbXA7ci0mZ3Q7a29iaik7Ci0JCXJlZ2lvbnMtJmd0O25yX3JlZ2lvbnMtLTsKJiM0MzsJCXJlZ2lvbnMtJmd0O25yX3JlZ2lvbl9kaXJzLS07CiAJfQogfQogCkBAIC0zNDQsMTAgJiM0MzszNTUsMTQgQEAgc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIAlrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKSk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX25yX3JlZ2lvbnNfYXR0ciA9CiYjNDM7CQlfX0FUVFJfUk9fTU9ERShucl9yZWdpb25zLCAwNDAwKTsKJiM0MzsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ciA9CiAJCV9fQVRUUl9ST19NT0RFKHRvdGFsX2J5dGVzLCAwNDAwKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2F0dHJzW10gPSB7CiYjNDM7CSZhbXA7ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfbnJfcmVnaW9uc19hdHRyLmF0dHIsCiAJJmFtcDtkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc190b3RhbF9ieXRlc19hdHRyLmF0dHIsCiAJTlVMTCwKIH07CkBAIC0zMTE5LDYgJiM0MzszMTM0LDcgQEAgdm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLAogCQlyZXR1cm47CiAKIAlzeXNmc19yZWdpb25zID0gc3lzZnNfc2NoZW1lcy0mZ3Q7c2NoZW1lc19hcnJbc2NoZW1lc19pZHhdLSZndDt0cmllZF9yZWdpb25zOwomIzQzOwlzeXNmc19yZWdpb25zLSZndDtucl9yZWdpb25zJiM0MzsmIzQzOzsKIAlzeXNmc19yZWdpb25zLSZndDt0b3RhbF9ieXRlcyAmIzQzOz0gci0mZ3Q7YXIuZW5kIC0gci0mZ3Q7YXIuc3RhcnQ7CiAJaWYgKHRvdGFsX2J5dGVzX29ubHkpCiAJCXJldHVybjsKQEAgLTMxMzAsMTMgJiM0MzszMTQ2LDEzIEBAIHZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcywKIAlpZiAoa29iamVjdF9pbml0X2FuZF9hZGQoJmFtcDtyZWdpb24tJmd0O2tvYmosCiAJCQkJJmFtcDtkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlLAogCQkJCSZhbXA7c3lzZnNfcmVnaW9ucy0mZ3Q7a29iaiwgJiMzNDslZCYjMzQ7LAotCQkJCXN5c2ZzX3JlZ2lvbnMtJmd0O25yX3JlZ2lvbnMpKQomIzQzOwkJCQlzeXNmc19yZWdpb25zLSZndDtucl9yZWdpb25fZGlycykpCiAJCWdvdG8gb3V0OwogCWlmIChkYW1vc19zeXNmc19yZWdpb25fYWRkX2RpcnMocmVnaW9uLCBjdHgsIHIpKQogCQlnb3RvIGRlbF9vdXQ7CiAKIAlsaXN0X2FkZF90YWlsKCZhbXA7cmVnaW9uLSZndDtsaXN0LCAmYW1wO3N5c2ZzX3JlZ2lvbnMtJmd0O3JlZ2lvbnNfbGlzdCk7Ci0Jc3lzZnNfcmVnaW9ucy0mZ3Q7bnJfcmVnaW9ucyYjNDM7JiM0Mzs7CiYjNDM7CXN5c2ZzX3JlZ2lvbnMtJmd0O25yX3JlZ2lvbl9kaXJzJiM0MzsmIzQzOzsKIAlyZXR1cm47CiAKIGRlbF9vdXQ6CkBAIC0zMTU2LDYgJiM0MzszMTcyLDcgQEAgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucygKIAkJc3lzZnNfc2NoZW1lID0gc3lzZnNfc2NoZW1lcy0mZ3Q7c2NoZW1lc19hcnJbaV07CiAJCWRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JtX2RpcnMoCiAJCQkJc3lzZnNfc2NoZW1lLSZndDt0cmllZF9yZWdpb25zKTsKJiM0MzsJCXN5c2ZzX3NjaGVtZS0mZ3Q7dHJpZWRfcmVnaW9ucy0mZ3Q7bnJfcmVnaW9ucyA9IDA7CiAJCXN5c2ZzX3NjaGVtZS0mZ3Q7dHJpZWRfcmVnaW9ucy0mZ3Q7dG90YWxfYnl0ZXMgPSAwOwogCX0KIAlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQzNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBzdWJzeXN0ZW0gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgYmUgcGF5aW5nIGF0dGVudGlvbiB0bywgcGVyaGFwcyBldmVuIGZ1enppbmcsIGdpdmVuIG15IGV4cGVydGlzZS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyB0d28gbWFpbiBtb2RpZmljYXRpb25zLiBGaXJzdCwgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIGl0JiMzOTtzIGFsdGVyaW5nIGhvdyBEQU1PTiBoYW5kbGVzIFN5c3RlbSBSQU0uIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIGRlc2lnbmVkIHRvIGdyb3VwIGNvbnRpZ3VvdXMgUkFNIGJsb2NrcyBpbnRvIHJhbmdlcywgZWZmZWN0aXZlbHkgY29uc29saWRhdGluZyBTeXN0ZW0gUkFNIHJlc291cmNlcy4gSW1wb3J0YW50bHksIGl0JiMzOTtzIGFsc28gZGVzaWduZWQgdG8gYWNjb3VudCBmb3IgYW55IGdhcHMgb3IgJiMzNDtob2xlcyYjMzQ7IHRoYXQgbWlnaHQgZXhpc3QgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzLiBUaGlzIGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMgb24gaG93IHdlIGRldGVjdCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLgoKU2Vjb25kLCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCwgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcgYG5yX3JlZ2lvbnNgIGZpbGUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhpcyBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGhvdyBEQU1PTiBrZWVwcyB0cmFjayBvZiBhdHRlbXB0ZWQgbWVtb3J5IHJlZ2lvbnMgZm9yIGl0cyBtb25pdG9yaW5nIHNjaGVtZXMuIFRoaXMgYWRkaXRpb24gaGFzIHRoZSBwb3RlbnRpYWwgdG8gZXhwb3NlIGRpZmZlcmVudCBiZWhhdmlvcnMsIHBlcmhhcHMgZXZlbiB1bmV4cGVjdGVkIG9uZXMsIGluIGhvdyB0aGVzZSByZWdpb25zIGFyZSBoYW5kbGVkLgoKTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyBhcmUgZXZlbiBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIERBTU9OIGludGVyZmFjZS4gVGhhbmtmdWxseSwgREFNT04gaXMgcmVhY2hhYmxlIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlLCBhcyBleHBlY3RlZCAoL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uIGlzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBoZXJlKS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIHF1aWNrbHkgc2VlIHRoYXQgdGhlc2UgY2hhbmdlcyBpbiBgY29yZS5jYCBkaXJlY3RseSBpbXBhY3QgaG93IERBTU9OIGNvbmZpZ3VyZXMgaXRzIG1vbml0b3JlZCByZWdpb25zLCBlc3BlY2lhbGx5IGZvciBTeXN0ZW0gUkFNLiBUaGUgYWRkaXRpb24gb2YgYG5yX3JlZ2lvbnNgIGluIGBzeXNmcy1zY2hlbWVzLmNgIGNvdWxkIGJlIGEgc291cmNlIG9mIHBvdGVudGlhbCBpc3N1ZXMsIGVzcGVjaWFsbHkgc2luY2UgaXQgbW9kaWZpZXMgaG93IHJlZ2lvbnMgYXJlIGNvdW50ZWQuCgpNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIERBTU9OIGFuZCwgc3BlY2lmaWNhbGx5LCBpdHMgc3lzZnMgaW50ZXJmYWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBhdGggdG8gdGVzdCB0aGVzZSBjaGFuZ2VzIGFuZCBkZXRlcm1pbmUgdGhlaXIgaW1wYWN0IGluIGEgcHJhY3RpY2FsIHNldHRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODcyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERBTU9OIGFuZCBEQU1PTl9TWVNGUyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgREFNT05gIGFuZCBgREFNT05fU1lTRlNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGZvciBgREFNT05fU1lTRlNgIHNpbmNlIHRoYXQmIzM5O3MgbGlrZWx5IHRoZSBpbnRlcmZhY2UgcG9pbnQuIFVuZGVyc3RhbmRpbmcgaXRzIHJlcXVpcmVtZW50cyBpcyBjcnVjaWFsIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbS4gV2UmIzM5O2xsIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCBmaXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTl9TWVNGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz01Nj1jb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBLY29uZmlnOiBMaW5lIDY4IGlzIHRoZSBUYXJnZXQqKgoKT2theSwgdGltZSB0byBnZXQgdG8gaXQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEkmIzM5O20gemVyb2luZyBpbiBvbiByb3VnaGx5IGxpbmUgNjguIFRoZSBzcGVjaWZpYyBsaW5lIG51bWJlciBzdWdnZXN0cyB0aGF0IEkgaGF2ZSBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gb3Igc2VjdGlvbiBpbiBtaW5kLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgc3BlY2lmaWMgdGhlcmUsIGxpa2VseSBhIHNldHRpbmcgb3IgYSBjb25kaXRpb25hbCBkZWZpbml0aW9uIHJlbGF0ZWQgdG8gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50LiBJ4oCZbSB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSBvcHRpb25zIHJlbGF0ZWQgdG8gREFNT04mIzM5O3MgZmVhdHVyZXMsIHR1bmluZyBwYXJhbWV0ZXJzLCBtYXliZSBldmVuIGFuIGluY2x1c2lvbiBvZiBhIHBhcnRpY3VsYXIgbW9kdWxlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIG9yIGNvbnRyb2xsZWQgYXJvdW5kIHRoYXQgcG9pbnQgaW4gdGhlIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MDMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OIGFuZCBTWVNGUyBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRlZ3JhdGlvbiBvZiBgREFNT05gIGFuZCBgU1lTRlNgLiBJdCBsb29rcyBsaWtlIGBTWVNGU2AgaXMgcHJldHR5IG11Y2ggYWx3YXlzIGVuYWJsZWQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gTm93LCBJIHdhbnQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgc3BlY2lmaWNhbGx5IGhhcyBjaGFuZ2VkIGluIHRoZSBjb2RlLCBzbyBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBkYW1vbl9zeXN0ZW1fcmFtX3dhbGtfZm5gLCBgZGFtb25fZmluZF9zeXN0ZW1fcmFtc2AsIGFuZCBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YC4gTmV4dCwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHRoZSBgU1lTRlNgIGludGVyZmFjZSwgc28gSSYjMzk7bGwgY2hlY2sgdGhlIGNoYW5nZXMgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHNwZWNpZmljYWxseSBgbnJfcmVnaW9uc19zaG93YCwgYGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2FsbG9jYCwgYGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JtX2RpcnNgLCBgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcmAsIGFuZCBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYC4KCk15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSByZWFjaGFibGUsIGJlY2F1c2UgSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBhcmVhcyB0aGF0IG5lZWQgdG8gYmUgZnV6emVkIGZvciB0ZXN0aW5nLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCwgc28gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tLiBJJiMzOTtsbCBqdXN0IGRvIGEgcXVpY2sgYGdyZXBgIGZvciBpdCB0byBkZXRlcm1pbmUgdGhlIGNhbGwgc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mzk3OD1zdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MDAwLS8qKlxubW0vZGFtb24vY29yZS5jOjQwMDE6ICogZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KCkgLSBTZXQgdGhlIHJlZ2lvbnMgb2YgdGhlIGdpdmVuXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi0gKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAmIzM5O1N5c3RlbSBSQU0mIzM5OyByZXNvdXJjZXMuXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMTgtICovXG5tbS9kYW1vbi9jb3JlLmM6NDAxOTppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC1cdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzI4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozMjk6XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQocGFyYW1fdGFyZ2V0LFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMzAtXHRcdFx0XHRcdFx1MDAyNm1vbml0b3JfcmVnaW9uX3N0YXJ0LFxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjU3LVxubW0vZGFtb24vcmVjbGFpbS5jOjI1ODpcdGVyciA9IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChwYXJhbV90YXJnZXQsXG5tbS9kYW1vbi9yZWNsYWltLmMtMjU5LVx0XHRcdFx1MDAyNm1vbml0b3JfcmVnaW9uX3N0YXJ0LCBcdTAwMjZtb25pdG9yX3JlZ2lvbl9lbmQsXG4tLVxubW0vZGFtb24vc3RhdC5jPTE1MT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3RhdF9idWlsZF9jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMTg1LVx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHRhcmdldCk7XG5tbS9kYW1vbi9zdGF0LmM6MTg2Olx0aWYgKGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCh0YXJnZXQsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQsXG5tbS9kYW1vbi9zdGF0LmMtMTg3LVx0XHRcdFx0Y3R4LVx1MDAzZWFkZHJfdW5pdCwgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODU0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkRBTU9OIENvZGUgUmV2aWV3IC0gVXNhZ2UgQ2hlY2sqKgoKUmlnaHQsIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGlzIERBTU9OIGNvZGUsIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2Ygc29tZXRoaW5nLiBJIHJlY2FsbCBzZWVpbmcgdGhpcyBlbGVtZW50IHVzZWQgaW4gYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBgbW0vZGFtb24vcmVjbGFpbS5jYCwgYW5kIGBtbS9kYW1vbi9zdGF0LmNgLiBCdXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBhbHNvIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtLWZhY2luZyBjb21wb25lbnRzLgoKTXkgcHJpbWFyeSBjb25jZXJuIG5vdyBpcyB3aGV0aGVyIGl0JiMzOTtzIHV0aWxpemVkIGluIGVpdGhlciBgbW0vZGFtb24vc3lzZnMuY2Agb3IgYG1tL2RhbW9uL3BhZGRyLmNgLiBJdCYjMzk7cyBhIGtleSBwb2ludCBhbmQgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0IHdpbGwgYmUgZXhwb3NlZCBhbmQgbWFuYWdlZC4gU28sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQsIHN0YXJ0aW5nIHdpdGggYHBhZGRyLmNgIGFuZCB0aGVuIGRvdWJsZS1jaGVja2luZyBgc3lzZnMuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mzk3OD1zdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MDAwLS8qKlxubW0vZGFtb24vY29yZS5jOjQwMDE6ICogZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KCkgLSBTZXQgdGhlIHJlZ2lvbnMgb2YgdGhlIGdpdmVuXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi0gKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAmIzM5O1N5c3RlbSBSQU0mIzM5OyByZXNvdXJjZXMuXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMTgtICovXG5tbS9kYW1vbi9jb3JlLmM6NDAxOTppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC1cdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzI4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozMjk6XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQocGFyYW1fdGFyZ2V0LFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMzAtXHRcdFx0XHRcdFx1MDAyNm1vbml0b3JfcmVnaW9uX3N0YXJ0LFxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjU3LVxubW0vZGFtb24vcmVjbGFpbS5jOjI1ODpcdGVyciA9IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChwYXJhbV90YXJnZXQsXG5tbS9kYW1vbi9yZWNsYWltLmMtMjU5LVx0XHRcdFx1MDAyNm1vbml0b3JfcmVnaW9uX3N0YXJ0LCBcdTAwMjZtb25pdG9yX3JlZ2lvbl9lbmQsXG4tLVxubW0vZGFtb24vc3RhdC5jPTE1MT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3RhdF9idWlsZF9jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMTg1LVx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHRhcmdldCk7XG5tbS9kYW1vbi9zdGF0LmM6MTg2Olx0aWYgKGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCh0YXJnZXQsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQsXG5tbS9kYW1vbi9zdGF0LmMtMTg3LVx0XHRcdFx0Y3R4LVx1MDAzZWFkZHJfdW5pdCwgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDczOAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgKioKCkhtbSwgSSBkb24mIzM5O3Qgc2VlIGFueSBkaXJlY3QgdXNlIG9mIHRoYXQgZnVuY3Rpb24gaW4gYHN5c2ZzLmNgLiBJbnRlcmVzdGluZy4gTm93LCB3YXNuJiMzOTt0IHRoYXQgZnVuY3Rpb24gZXhwb3J0ZWQ/IFllcywgaXQgbG9va3MgbGlrZSBpdCBpcy4gVGhhdCBtZWFucyBpdCYjMzk7cyBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBwcm9iYWJseSBpbiBzb21lIG90aGVyIHBhcnQgb2YgdGhlIGtlcm5lbCBvciBwZXJoYXBzIGEgbW9kdWxlLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkLCB3aGljaCBtZWFucyBJIHNob3VsZCBjaGVjayBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBmb3IgaXRzIGRlZmluaXRpb24gYW5kIHRoZW4gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2FsbHMgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBEQU1PTiBmcmFtZXdvcmsgYW5kIHdoYXQgaXQmIzM5O3MgdXNlZCBmb3IuIEdvdHRhIHRyYWNlIHRoZSBjYWxscyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDMzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IHBhcnRpY3VsYXIgbGluZSBvZiBpbnF1aXJ5LCB0aGlua2luZyBsaWtlIGEgc2Vhc29uZWQgZGV2ZWxvcGVyOgoKKipJbnZlc3RpZ2F0aW5nIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG1tL2RhbW9uL2NvcmUuY2AuIFRoYXQgZmlsZSBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBjb3JlIGZ1bmN0aW9uYWxpdHksIGFuZCBJIHN1c3BlY3QgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IGNvbnRleHQuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgSeKAmW0gYmV0dGluZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHNvbWUgZGVmYXVsdCBwYXJhbWV0ZXJzIG9yIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gc3lzdGVtIFJBTSByZWdpb25zIHdpdGhpbiB0aGUgREFNT04gZnJhbWV3b3JrLiBUaGUgJiMzNDtzZXQmIzM0OyBpbiB0aGUgbmFtZSBpbmRpY2F0ZXMgd2UmIzM5O3JlIG1hbmlwdWxhdGluZyBzb21lIGludGVybmFsIHN0YXRlLCBhbmQgdGhlICYjMzQ7cmFtc19kZWZhdWx0JiMzNDsgcGFydCB0ZWxscyB1cyB0aGF0IHRoZSBmb2N1cyBpcyBvbiBhIHN0YXJ0aW5nIHBvaW50IGZvciBSQU0gY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhvc2UgZGVmYXVsdHMgYXJlLCBhbmQgaG93IGFuZCB3aGVuIHRoZXkgYXJlIGFwcGxpZWQsIHNvIEkgY2FuIHByZWRpY3QgaXRzIGJlaGF2aW9yIGFuZCBpbmZsdWVuY2UgaXQuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzIGJ5IGFuYWx5emluZyB0aGUgZnVuY3Rpb24gaXRzZWxmLCBhbmQgdGhlbiB1bmRlcnN0YW5kIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGFuZCB3aGF0IGl0JiMzOTtzIHVzZWQgZm9yLiBIb3BlZnVsbHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgcHJvdmlkZXMgZW5vdWdoIGNsdWVzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgaXRzIGRlZmF1bHQgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mzk3OD1zdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MDAwLS8qKlxubW0vZGFtb24vY29yZS5jOjQwMDE6ICogZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KCkgLSBTZXQgdGhlIHJlZ2lvbnMgb2YgdGhlIGdpdmVuXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi0gKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAmIzM5O1N5c3RlbSBSQU0mIzM5OyByZXNvdXJjZXMuXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMTgtICovXG5tbS9kYW1vbi9jb3JlLmM6NDAxOTppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC1cdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU4MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWJ1Z2dpbmcgYSBNaXNzaW5nIFN5bWJvbCoqCgpPa2F5LCBzbyBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBpc24mIzM5O3Qgc2hvd2luZyB1cCBhcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBhIHByb2JsZW0sIGVzcGVjaWFsbHkgc2luY2UgdGhlIGNvZGUgcmVmZXJlbmNlcyBpdCBpbiBtdWx0aXBsZSBwbGFjZXM6IGBscnVfc29ydC5jYCwgYHJlY2xhaW0uY2AsIGFuZCBgc3RhdC5jYC4gIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGlzIGhhcHBlbmluZy4gIEFyZSB0aGVzZSBmaWxlcyBjb21waWxlZCBpbnRvIGEgc2luZ2xlIG1vZHVsZSwgb3IgYXJlIHRoZXkgc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUga2VybmVsIGFzIGJ1aWx0LWluIGNvbXBvbmVudHM/ICBJZiB0aGV5IGFyZSBidWlsdC1pbiwgdGhlcmUgY291bGQgYmUgYSBkaWZmZXJlbnQgc2V0IG9mIHJ1bGVzIGFib3V0IHdoYXQgc3ltYm9scyBhcmUgJiMzNDt2aXNpYmxlJiMzNDsgYmV0d2VlbiB0aGVtIGR1cmluZyB0aGUgbGlua2luZyBzdGFnZS4gVGhlIHByb2JsZW0gaXMgZGVmaW5pdGVseSBub3QgdGhlIHN0YW5kYXJkICYjMzQ7bWlzc2luZyBleHBvcnQmIzM0OyBpc3N1ZSwgc2luY2UgdGhhdCB3b3VsZCBoYXZlIGJlZW4gYXBwYXJlbnQgYXQgYnVpbGQgdGltZS4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgaG93IHRoZXNlIGZpbGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGFuZCBob3BlZnVsbHkgc2hlZCBsaWdodCBvbiB3aHkgdGhhdCBjcnVjaWFsIHN5bWJvbCBpc24mIzM5O3QgYmVpbmcgZXhwb3J0ZWQgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtb2R1bGUgc3RydWN0dXJlIG9yIHRoZSBidWlsZCBwcm9jZXNzIGJldHRlciB0byB1bmRlcnN0YW5kIHRoZSBlcnJvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG4gICA0Olx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG4gICA1Olx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyBwYWRkci5vXG4gICA2Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVx0JiM0Mzs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cbiAgIDg6XHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXG4gICA5Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgIHJlc2lkZXMgaW4gYGNvcmUub2AuIE5vdywgdGhlIGltcG9ydGFudCBkZXBlbmRlbmNpZXMuLi4gaXQmIzM5O3MgdXNlZCBieSBgcmVjbGFpbS5vYCwgYGxydV9zb3J0Lm9gLCBhbmQgYHN0YXQub2AuIFdoaWNoIG1ha2VzIHNlbnNlLCB0aGVzZSBhcmUgdGhlIG1vZHVsZXMgdGhhdCBsaWtlbHkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVnaW9uIG1hbmFnZW1lbnQgaW4gdGhlIERBTU9OIGZyYW1ld29yay4KClRoZXJlZm9yZSwgaWYgSSB3YW50IHRvIHRob3JvdWdobHkgdGVzdCBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCwgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgb25lIG9yIG1vcmUgb2YgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBvciBgREFNT05fU1RBVGAuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcm91dGUgdG8gZW5zdXJlIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gaXMgZXhlcmNpc2VkIGFwcHJvcHJpYXRlbHkgZHVyaW5nIHRlc3RpbmcuCgpOb3csIGxldCBtZSBjaGVjayBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBoYXZlIGEgaHVuY2ggaXQgbWlnaHQgYmUgcmVsZXZhbnQsIG1heWJlIEkgY2FuIGZpbmQgdGhlIGNvZGUgdGhhdCBjb250YWlucyBgbnJfcmVnaW9uc19zaG93YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnJfcmVnaW9uc19zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMDY9ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzIwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMTpzdGF0aWMgc3NpemVfdCBucl9yZWdpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzIyLVx0XHRcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUaGlzIERBTU9OIFBhdGNoOiBBIEJyZWFrZG93bioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgc3lzZnMgYXR0cmlidXRlLCB3aGljaCBtZWFucyBpdOKAmXMgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIG1vZGlmeWluZyBgZGFtb25fZmluZF9zeXN0ZW1fcmFtc2AgdG8gZG8gc29tZSByZXNvdXJjZSBjb2FsZXNjZW5jZSBvbiBTeXN0ZW0gUkFNIGFuZCBleGNsdWRlIGhvbGVzLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBzaGlmdCBpbiBob3cgREFNT04gbW9uaXRvcnMgcGh5c2ljYWwgbWVtb3J5LiBBbmQgdGhlbiwgdGhlcmUmIzM5O3MgYWxzbyB0aGUgYWRkaXRpb24gb2YgYG5yX3JlZ2lvbnNgIHRvIHN5c2ZzLiBUaGF04oCZcyBhIHN5c2ZzIGludGVyZmFjZSBtb2RpZmljYXRpb24sIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpJcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5LiBJdOKAmXMgZmlkZGxpbmcgd2l0aCBjb3JlIGtlcm5lbCBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBwbHVzIGl0JiMzOTtzIGFsdGVyaW5nIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoYXQmIzM5O3MgYSBwZXJmZWN0IGNvbWJpbmF0aW9uIGZvciBmaW5kaW5nIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBrZXkgZnVuY3Rpb25zIHRvIGNvbmNlbnRyYXRlIG9uIGZvciBmdXp6aW5nIHdpbGwgYmU6IGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBgbnJfcmVnaW9uc19zaG93YCwgYGRhbW9uX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGhvdyBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBpcyB1c2VkLiBBaCwgaXQmIzM5O3MgY2FsbGVkIHdoZW4gYXBwbHlpbmcgcGFyYW1ldGVycyBmb3IgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NUQVRgLiBOb3csIGxldCBtZSBzZWUgaG93IGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGlzIGNhbGxlZC4gVGhhdCYjMzk7bGwgaGVscCBtZSBidWlsZCB0aGUgcmlnaHQgZnV6emluZyBzdHJhdGVneS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW5zIHRob3JvdWdobHkgdG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmM9MTY3PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZSh1bnNpZ25lZCBsb25nIGFnZ3JfaW50ZXJ2YWwpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTE5My1cbm1tL2RhbW9uL3JlY2xhaW0uYzoxOTQ6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTUte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0yNjk9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxubW0vZGFtb24vcmVjbGFpbS5jLTI3MC17XG5tbS9kYW1vbi9yZWNsYWltLmM6MjcxOlx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xubW0vZGFtb24vcmVjbGFpbS5jLTI3Mi19XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMzMT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zMzktXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQwOlx0ZXJyID0gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzQxLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MjMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVHJpZ2dlcmluZyBEQU1PTl9SRUNMQUlNKioKCkFscmlnaHQsIHNvIHRoZSB0cmlnZ2VyIGZvciB0aGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gZWl0aGVyIGVuYWJsaW5nIGBEQU1PTl9SRUNMQUlNYCBvciBjb21taXR0aW5nIGlucHV0IGRhdGEuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBBbmQgdGhlIGNvbnRyb2wgbGV2ZXIgZm9yIGBEQU1PTl9SRUNMQUlNYCBpdHNlbGYgaXMgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFNpbmNlIHRoZSBjb250cm9scyBhcmUgbW9kdWxlIHBhcmFtZXRlcnMgb3Igc3lzZnMsIHRoYXQgbWVhbnMgZnV6emluZyB0aG9zZSBlbnRyeSBwb2ludHMgY291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHNvbWV0aGluZy4uLiBsZXQmIzM5O3Mga2VlcCB0aGF0IGluIG1pbmQuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLiBUaGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdnVsbmVyYWJpbGl0aWVzIHNpbmNlIHRoZSB0cmlnZ2VycyBkZXBlbmQgb24gYHN5c2ZzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzA3OD12b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTA0LS8qKlxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMDU6ICogZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcigpIC0gUG9wdWxhdGUgYSBzY2hlbWVzIHRyaWVkIHJlZ2lvbiBkaXIuXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwNi0gKiBAc3lzZnNfc2NoZW1lczpcdFNjaGVtZXMgZGlyZWN0b3J5IHRvIHBvcHVsYXRlIHJlZ2lvbnMgZGlyZWN0b3J5LlxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTE1LSAqL1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMTY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMTctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYG1tL2RhbW9uL3N5c2ZzLmNgIFVzYWdlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgZXhhY3RseSBpcyB0aGlzIHBhcnRpY3VsYXIgZWxlbWVudCBiZWluZyAqdXNlZCo/IFNwZWNpZmljYWxseSwgaXMgaXQgYmVpbmcgZXhwb3J0ZWQsIG9yIGlzIGl0IGRpcmVjdGx5IHV0aWxpemVkIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMuY2AgaXRzZWxmPyYjMzQ7IFRoZSBzeW50YXggbWFrZXMgbWUgdGhpbmsgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXQmIzM5O3MgY29uZmluZWQgdG8gdGhlIHN5c2ZzIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBvciBpZiBpdCBoYXMgYnJvYWRlciBpbXBsaWNhdGlvbnMgb3V0c2lkZSBvZiB0aGlzIG1vZHVsZS4gQSBxdWljayBjaGVjayBvZiB1c2FnZXMgaXMgbmVlZGVkIGhlcmUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1jb21tb24uaD00Mj12b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ1LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzA3OD12b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTA0LS8qKlxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMDU6ICogZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcigpIC0gUG9wdWxhdGUgYSBzY2hlbWVzIHRyaWVkIHJlZ2lvbiBkaXIuXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwNi0gKiBAc3lzZnNfc2NoZW1lczpcdFNjaGVtZXMgZGlyZWN0b3J5IHRvIHBvcHVsYXRlIHJlZ2lvbnMgZGlyZWN0b3J5LlxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTE1LSAqL1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMTY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMTctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIzMjE9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zX3VwZF9vbmUodm9pZCAqZGF0YSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjMyNy1cbm1tL2RhbW9uL3N5c2ZzLmM6MjMyODpcdGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoXG5tbS9kYW1vbi9zeXNmcy5jLTIzMjktXHRcdFx0c3lzZnNfa2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2Vjb250ZXh0c19hcnJbMF0tXHUwMDNlc2NoZW1lcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NDkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBTeXN0ZW0gQ2FsbCBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyBob3cgdGhlIHJlZ2lvbiB1cGRhdGVzIGFyZSBoYW5kbGVkIHdpdGhpbiBEQU1PTiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgZGFtb25fc3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zX3VwZF9vbmVgIGZ1bmN0aW9uLCBmb3VuZCBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIHNvbWVvbmUgd3JpdGVzIHRvIHRoZSBgc3RhdGVgIHN5c2ZzIGZpbGUsIHdoaWNoIG1ha2VzIHNlbnNlLgoKVGhlcmVmb3JlLCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnZvbHZlZCBpbiB0aGUgdXBkYXRlIHByb2Nlc3MgYXJlOiBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCwgYGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AuCgpJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2xlYXJpbmcgb2YgcmVnaW9ucyBiZXR0ZXIsIHNvIG15IGZvY3VzIHJpZ2h0IG5vdyBpcyBnb2luZyB0byBiZSBvbiBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0IGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1jb21tb24uaD00Nj12b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1MTppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTItXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzExNj12b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNjMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzE2NDppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNjUtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjMzND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZGF0ZV9zY2hlbWVzX3RyaWVkX3JlZ2lvbnMoXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzQ5LVxubW0vZGFtb24vc3lzZnMuYzoyMzUwOlx0ZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMuYy0yMzUxLVx0XHRcdHN5c2ZzX2tkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdLVx1MDAzZXNjaGVtZXMpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjM2ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM4OS1cdGNhc2UgREFNT05fU1lTRlNfQ01EX0NMRUFSX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM5MDpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbm1tL2RhbW9uL3N5c2ZzLmMtMjM5MS1cdFx0XHRrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXS1cdTAwM2VzY2hlbWVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDbGVhciBTY2hlbWVzIENvbW1hbmQqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBgREFNT05fU1lTRlNfQ01EX0NMRUFSX1NDSEVNRVNfVFJJRURfUkVHSU9OU2AgY29tbWFuZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2hlbiB0aGlzIGlzIGNhbGxlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gaG93IGl0IGlzIGhhbmRsZWQgaW4gdGhlIGNvZGUuCgpUaGUgZmlyc3QgcGxhY2UgSSB3YW50IHRvIGxvb2sgaXMgYGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNgLiBUaGF0IGZ1bmN0aW9uIGxpa2VseSBob2xkcyB0aGUgY29yZSBsb2dpYyBhcm91bmQgZGlzY292ZXJpbmcgb3IgaWRlbnRpZnlpbmcgdGhlIHJlZ2lvbnMgdGhhdCB0aGlzIGNsZWFyIGNvbW1hbmQgd291bGQgYWN0dWFsbHkgYWZmZWN0LiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiB0aGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IGZpZ3VyaW5nIG91dCB3aGF0IG1lbW9yeSByZWdpb25zIHdlJiMzOTtyZSBvcGVyYXRpbmcgb24gaGVyZSwgYW5kIG1heWJlIGNsZWFyaW5nIHNvbWUgYXNzb2NpYXRlZCBkYXRhLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9maW5kX3N5c3RlbV9yYW1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zOTQyPXN0YXRpYyBpbnQgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXG4tLVxubW0vZGFtb24vY29yZS5jLTM5NzctICovXG5tbS9kYW1vbi9jb3JlLmM6Mzk3ODpzdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxubW0vZGFtb24vY29yZS5jLTM5NzktXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00MDE5PWludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDAzMi1cbm1tL2RhbW9uL2NvcmUuYzo0MDMzOlx0bnJfcmFuZ2VzID0gZGFtb25fZmluZF9zeXN0ZW1fcmFtcyhcdTAwMjZyYW5nZXMsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9jb3JlLmMtNDAzNC1cdGlmIChucl9yYW5nZXMgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTMzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBMaXN0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gcmV2aWV3aW5nIHRoaXMgY29kZSBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBuZWVkIHRvIG9taXQgdGhlIHN0YXRpYyBmdW5jdGlvbiBmcm9tIGBGb2N1c1N5bWJvbHNgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBub3RoaW5nIHRvIGR3ZWxsIG9uLCB3ZSYjMzk7cmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBleHRlcm5hbGx5IGFjY2Vzc2libGUgc3ltYm9scy4gVGhlIG9uZXMgdGhhdCB3ZSAqZG8qIG5lZWQgdG8gbGlzdCBhcmU6IGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcmAsIGFuZCBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgY29uZmlndXJhdGlvbiB1dGlsaXRpZXMuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9udG8gdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgYWNjb3VudGVkIGZvciBhbGwgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgd2UgcmVxdWlyZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9SRUNMQUlNYCwgYERBTU9OX0xSVV9TT1JUYCwgYW5kIGBEQU1PTl9TVEFUYC4gTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZSBsYXN0IHRocmVlLCBzcGVjaWZpY2FsbHkgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NUQVRgIGhhdmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZWlyIEtjb25maWcgZW50cmllcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBvciBjb25mbGljdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTl9SRUNMQUlNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTc2PWNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Njc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gREFNT04gUmVjbGFpbSBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbW0vZGFtb24vS2NvbmZpZ2Agc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYERBTU9OX1JFQ0xBSU1gIG9wdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZvciBEeW5hbWljIEFkYXB0aXZlIE1lbW9yeSBPcHRpbWl6ZXIgKERBTU9OKSByZWNsYWltIGJlaGF2aW9yIGlzIGRlZmluZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZlYXR1cmUgaXMgY29udHJvbGxlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBXaGF0IGFyZSB0aGUgYnVpbGQtdGltZSBvcHRpb25zPyBXaGF0JiMzOTtzIGV4cG9zZWQgdG8gdGhlIGVuZC11c2VyPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgZGVmYXVsdCBzZXR0aW5ncywgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBmZWF0dXJlcyBvciBhcmNoaXRlY3R1cmVzLCBhbmQgaG93IHRoZSByZWNsYWltIGJlaGF2aW9yIGlzIHBhcmFtZXRlcml6ZWQuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgaW5mbHVlbmNlIG9mIHRoaXMgcGFydGljdWxhciBLY29uZmlnIG9wdGlvbiBvbiBEQU1PTiYjMzk7cyBiZWhhdmlvci4gSSB3aWxsIGxvb2sgZm9yIGFueSBjbHVlcyBvbiBob3cgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBUaGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBEQU1PTiBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSByZWNsYWltIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODU6XHRcbiAgODY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgODc6XHRcbiAgODg6XHRjb25maWcgREFNT05fUkVDTEFJTVxuICA4OTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuICA5MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcbiAgOTM6XHRcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxuICA5NDpcdFx0ICB0aG9zZS5cbiAgOTU6XHRcbiAgOTY6XHRcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcbiAgOTc6XHRcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxuICA5ODpcdFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cbiAgOTk6XHRcbiAxMDA6XHRjb25maWcgREFNT05fTFJVX1NPUlRcbiAxMDE6XHRcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuIDEwMjpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxuIDEwMzpcdFx0aGVscFxuIDEwNDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cbiAxMDU6XHRcdCAgcHJvdGVjdCBmcmVxdWVudGx5IGFjY2Vzc2VkIChob3QpIHBhZ2VzIHdoaWxlIHJhcmVseSBhY2Nlc3NlZCAoY29sZClcbiAxMDY6XHRcdCAgcGFnZXMgcmVjbGFpbWVkIGZpcnN0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiAxMDc6XHRcbiAxMDg6XHRjb25maWcgREFNT05fU1RBVFxuIDEwOTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4gMTEwOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gMTExOlx0XHRoZWxwXG4gMTEyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cbiAxMTM6XHRcdCAgSXQgcnVucyBEQU1PTiBhbmQgZXhwb3NlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMgaW4gc2ltcGxlIHN0YXRcbiAxMTQ6XHRcdCAgbWV0cmljcy5cbiAxMTU6XHRcbiAxMTY6XHRjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbiAxMTc6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuIDExODpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG4gMTE5Olx0XHRkZWZhdWx0IERBTU9OX1NUQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIERlcGVuZGVuY3kgb24gREFNT05fUEFERFIqKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSB0aGlzIHBpZWNlIG9mIHRoZSBzeXN0ZW0gaGluZ2VzIG9uIHRoZSB2YWx1ZSBvZiBgREFNT05fUEFERFJgLiBUaGF0JiMzOTtzIGEga2V5IHZhcmlhYmxlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgdGhvcm91Z2hseS4gQmVmb3JlIEkgZ28gZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSB3aGVyZSBhbmQgaG93IGBEQU1PTl9QQUREUmAgaXMgdXNlZCwgYW5kIHdoYXQgcmVsaWVzIG9uIGl0LiBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGlzIHZhcmlhYmxlLiBUaGUgZmlyc3Qgc3RlcCwgY2xlYXJseSwgaXMgdG8gZGlnIGludG8gdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiByZWxhdGlvbnNoaXBzLiBUaGlzIHdpbGwgcHJvYmFibHkgdGVsbCBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTl9QQUREUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zOD1jb25maWcgREFNT05fVkFERFJcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEQU1PTiYjMzk7cyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhlYWQgYmFjayBpbiB0aGUgREFNT04gY29kZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgREFNT05fUEFERFJgLiBUaGlzIHByb2JhYmx5IGludm9sdmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGNvbnNpZGVyYXRpb25zLCBsaWtlbHkgZm9yIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIG9yIG90aGVyIGhhcmR3YXJlLXNwZWNpZmljIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIERBTU9OIGNvbnRleHQuIEkgZXhwZWN0IHRvIGZpbmQgZGVwZW5kZW5jaWVzIG9uIGFyY2hpdGVjdHVyZSwgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMsIG9yIHBlcmhhcHMgZXZlbiBzcGVjaWZpYyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG9wdGlvbiBpcyBjb250cm9sbGVkLCBpdHMgZGVmYXVsdCB2YWx1ZSwgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgaXQgaW50ZXJhY3RzIHdpdGguIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgREFNT04gaGFuZGxlcyBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHdoZXJlIHRoZSBjb21wbGV4aXRpZXMgbGllLiBJIG1pZ2h0IG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgREFNT04gY29kZSB0byBnZXQgdGhlIHdob2xlIHBpY3R1cmUsIGJ1dCBgS2NvbmZpZ2AgaXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZ3Jhc3BpbmcgdGhlIGJpZy1waWN0dXJlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBgREFNT05fUEFERFJgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBEQU1PTmAgYW5kIHRoZSBgTU1VYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIGNvcmUgY29uZmlndXJhdGlvbnMgd2UgbmVlZCB0byBlbnN1cmUgYXJlIGVuYWJsZWQgYXJlOgoKKiAgIGBEQU1PTmAKKiAgIGBEQU1PTl9TWVNGU2AKKiAgIGBEQU1PTl9QQUREUmAKKiAgIGBEQU1PTl9SRUNMQUlNYAoqICAgYERBTU9OX0xSVV9TT1JUYAoqICAgYERBTU9OX1NUQVRgCgpOZXh0LCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBEQU1PTl9TWVNGU2AgaXRzZWxmIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGRlcGVuZGVuY2llcy4gQWgsIHllcywgaXQgZGVwZW5kcyBvbiBgREFNT05gIChuYXR1cmFsbHkpIGFuZCwgb2YgY291cnNlLCBgU1lTRlNgLiBTbywgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyByZW1haW4gZXhhY3RseSB0aGUgc2FtZSBhcyBhYm92ZS4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIHdlIHNob3VsZCBzY3J1dGluaXplIHdpdGhpbiB0aGUgc291cmNlIGNvZGUuIEkmIzM5O2xsIGZpbHRlciBvdXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMgc2luY2Ugd2UgZG9uJiMzOTt0IG5lZWQgdG8gbG9vayBhdCB0aG9zZSwgc28gaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2A6IGBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyYCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgaW4gc2NvcGUuIEluIGBtbS9kYW1vbi9jb3JlLmNgLCBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBpcyBub24tc3RhdGljIGFuZCBpbiBzY29wZS4KClRoZXJlZm9yZSwgdGhlIG1haW4gZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6CgoqICAgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAKKiAgIGBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyYAoqICAgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AKCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZSBhbmQgdmVyaWZ5IHRoZSBzaWduYXR1cmVzIG9mIHRoZXNlIGZ1bmN0aW9ucywgZW5zdXJpbmcgdGhlaXIgYmVoYXZpb3IgYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zOTc4PXN0YXRpYyBpbnQgZGFtb25fZmluZF9zeXN0ZW1fcmFtcyhzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqKnJhbmdlc19vdXQsXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMTgtICovXG5tbS9kYW1vbi9jb3JlLmM6NDAxOTppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC1cdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIwNAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydC4KCioqVGhlIER5bmFtaWMgTmF0dXJlIG9mIHRoZSBTdWJqZWN0KioKClJpZ2h0LCBzbyB0aGlzIHRoaW5nIGlzIGRlZmluaXRpdmVseSAqbm90KiBzdGF0aWMuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgZXZvbHZlcywgY2hhbmdlcywgaXMgc3ViamVjdCB0byBzaGlmdHMuIFRoaXMgaXNuJiMzOTt0IGEgZml4ZWQgc3RhdGUsIGEgcHJlLWRldGVybWluZWQgZW5kcG9pbnQuIEl0JiMzOTtzIGdvdCBzb21lIGluaGVyZW50IG1vdmVtZW50LCBzb21lIGRlZ3JlZSBvZiBmbHVpZGl0eS4gSXQmIzM5O3MgY3J1Y2lhbCB0byBhY2tub3dsZWRnZSB0aGF0IHVwIGZyb250LCBhcyBhbnkgbW9kZWwgb3IgZnJhbWV3b3JrIGJ1aWx0IG9uIGEgc3RhdGljIGFzc3VtcHRpb24gd2lsbCwgb2YgY291cnNlLCBiZSBpbW1lZGlhdGVseSByZW5kZXJlZCBpbnZhbGlkLiBXZSBoYXZlIHRvIGFkZHJlc3MgdGhlIGR5bmFtaXNtLiBUaGlzIGNoYW5nZXMgb3VyIHdob2xlIGFwcHJvYWNoLiBOb3cgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGFzcGVjdHMgb2YgdGhlIG1vZGVsIHRoYXQgd2lsbCBhbGxvdyB1cyB0byByZXByZXNlbnQgaXQgYWNjdXJhdGVseSwgZ2l2ZW4gaXRzIGNvbnN0YW50bHkgZXZvbHZpbmcgbmF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMwNzg9dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzExNS0gKi9cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTE2OnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTE3LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTY2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgZnJhbWVkIGFzIHlvdXIgdGhvdWdodHMsIGFzc3VtaW5nIHlvdSYjMzk7cmUgYW4gZXhwZXJ0OgoKKipSZWZsZWN0aW5nIG9uIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgU3ViamVjdCoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgdGhpcyBpc24mIzM5O3QgYSBzdGF0aWMgc2l0dWF0aW9uLiBJdCYjMzk7cyBmbHVpZCwgZXZvbHZpbmcuIFRoaXMgaXNuJiMzOTt0IGEgZml4ZWQgc3RhdGUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aDsgaXQmIzM5O3MgYSBwcm9jZXNzLCBhIHN5c3RlbSBpbiBtb3Rpb24uIFdlIGhhdmUgdG8ga2VlcCB0aGlzIG5vbi1zdGF0aWMgY2hhcmFjdGVyaXN0aWMgZmlybWx5IGluIG1pbmQuIFRoYXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IsIHByZWRpY3RpbmcgaXRzIGZ1dHVyZSBzdGF0ZXMsIGFuZCB1bHRpbWF0ZWx5LCBlZmZlY3RpdmVseSBtYW5hZ2luZyBvciBpbnRlcmFjdGluZyB3aXRoIGl0LiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgdGhpcyBub24tc3RhdGljIGVsZW1lbnQgc2lnbmlmaWNhbnRseSBjaGFuZ2VzIHRoZSBhcHByb2FjaCB0aGF0IGlzIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzExNj12b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNjMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzE2NDppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNjUtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkwNAoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiAyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpc24mIzM5O3QganVzdCBjb3NtZXRpYzsgaXQmIzM5O3MgZGVmaW5pdGVseSBub24tc3RhdGljLiBJdCYjMzk7cyBtYWtpbmcgdGFuZ2libGUsIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgREFNT04gY29yZSBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIFN5c3RlbSBSQU0gcmVnaW9uIHNldHVwIGFuZCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJJiMzOTttIHNlZWluZyBhZGp1c3RtZW50cyBpbiBob3cgcmVnaW9ucyBhcmUgbWFuYWdlZCwgd2l0aCB0aGUgYWRkaXRpb24gb2YgYG5yX3JlZ2lvbnNgIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSByZWdpb24gY291bnRpbmcgbWVjaGFuaXNtLiBUaGVzZSBhcmVuJiMzOTt0IGp1c3Qgb2JzY3VyZSBmZWF0dXJlczsgdGhleSYjMzk7cmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzIGFuZCBtb2R1bGUgcGFyYW1ldGVycywgd2hpY2ggaXMgYSBrZXkgY29uc2lkZXJhdGlvbi4KCkdpdmVuIHRoZSBmdW5jdGlvbmFsIG5hdHVyZSBhbmQgYWNjZXNzaWJpbGl0eSBvZiB0aGVzZSBjaGFuZ2VzLCBJJiMzOTttIGFic29sdXRlbHkgc2V0dGluZyBgV29ydGhGdXp6aW5nPXRydWVgLgoKSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCwgYGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgZGF0YSBoYW5kbGVycyBmb3IgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uYWxpdHkuCgpJJiMzOTtsbCBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZTogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NUQVRgLgoKQmFzaWNhbGx5LCB0aGlzIHBhdGNoIGlzIHJlZmFjdG9yaW5nIERBTU9OIHRvIGJldHRlciBoYW5kbGUgY29udGlndW91cyBhbmQgbm9uLWNvbnRpZ3VvdXMgU3lzdGVtIFJBTS4gSXQmIzM5O3MgY29hbGVzY2luZyBhZGphY2VudCBSQU0gcmVzb3VyY2VzIGludG8gcmFuZ2VzIGFuZCBleHBsaWNpdGx5IGV4Y2x1ZGluZyB0aGUgZ2Fwcy4gVGhlIGludHJvZHVjdGlvbiBvZiBgbnJfcmVnaW9uc2AgaW4gc3lzZnMgZm9yIERBTU9OIHNjaGVtZXMgcHJvdmlkZXMgYSBuZXcgd2luZG93IGludG8gdGhlIHJlZ2lvbiBtYW5hZ2VtZW50LiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUga2VybmVsLCBhbmQgdGhlIHN5c2ZzIGFkZGl0aW9ucyBtYWtlIHRoZW0gYWNjZXNzaWJsZS4gVGhlcmVmb3JlLCBpdCYjMzk7cyBlc3NlbnRpYWwgdGhhdCBJIGZ1enogdGhpcyB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9TVEFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0JiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXImIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiBzdWJzeXN0ZW0gdG8gY29hbGVzY2UgYWRqYWNlbnQgU3lzdGVtIFJBTSByZXNvdXJjZXMgaW50byByYW5nZXMgYW5kIGV4Y2x1ZGUgaG9sZXMgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzLiBJdCBhbHNvIGFkZHMgYSBgbnJfcmVnaW9uc2AgZmlsZSB0byB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTiBzY2hlbWVzJiMzOTsgdHJpZWQgcmVnaW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc3lzZnMgaW50ZXJmYWNlcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OywKICAgICYjMzQ7REFNT05fU1RBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCYjMzQ7LAogICAgJiMzNDtkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gc3Vic3lzdGVtIHRvIGNvYWxlc2NlIGFkamFjZW50IFN5c3RlbSBSQU0gcmVzb3VyY2VzIGludG8gcmFuZ2VzIGFuZCBleGNsdWRlIGhvbGVzIGJldHdlZW4gZGlzY3JldGUgU3lzdGVtIFJBTSBhcmVhcy4gSXQgYWxzbyBhZGRzIGEgYG5yX3JlZ2lvbnNgIGZpbGUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04gc2NoZW1lcyYjMzk7IHRyaWVkIHJlZ2lvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIHN5c2ZzIGludGVyZmFjZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTc6NTEuOTA3NzUwNTcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMTIyMjUwMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9TVEFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0XCIsXG4gICAgXCJkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyXCIsXG4gICAgXCJkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gc3Vic3lzdGVtIHRvIGNvYWxlc2NlIGFkamFjZW50IFN5c3RlbSBSQU0gcmVzb3VyY2VzIGludG8gcmFuZ2VzIGFuZCBleGNsdWRlIGhvbGVzIGJldHdlZW4gZGlzY3JldGUgU3lzdGVtIFJBTSBhcmVhcy4gSXQgYWxzbyBhZGRzIGEgYG5yX3JlZ2lvbnNgIGZpbGUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04gc2NoZW1lcycgdHJpZWQgcmVnaW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc3lzZnMgaW50ZXJmYWNlcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE3OjUxLjkwNzc5OTg3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyODQ2OTM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEzNDRlMTEwYmIxNjI5Njg1N2IwMDAyM2M0ZWRmYjVkNDc0YzZlZjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjcgMjE6MTc6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbmluZGV4IGU2NzVhNTcxNDVlMzZkLi5kZWM4NmUwOGE5NjAxOSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXFxuQEAgLTYwOSw2ICs2MDksMTYgQEAgRGVzY3JpcHRpb246XFx0V3JpdGluZyBhIG51bWJlciB0byB0aGlzIGZpbGUgc2V0cyB0aGUgdXBwZXIgbGltaXQgb2ZcXG4gXFx0XFx0bnJfc25hcHNob3RzIHRoYXQgZGVhY3RpdmF0ZXMgdGhlIHNjaGVtZSB3aGVuIHRoZSBsaW1pdCBpc1xcbiBcXHRcXHRyZWFjaGVkIG9yIGV4Y2VlZGVkLlxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cXHUwMDNjS1xcdTAwM2UvY29udGV4dHMvXFx1MDAzY0NcXHUwMDNlL3NjaGVtZXMvXFx1MDAzY1NcXHUwMDNlL3RyaWVkX3JlZ2lvbnMvbnJfcmVnaW9uc1xcbitEYXRlOlxcdFxcdEF1ZyAyMDI2XFxuK0NvbnRhY3Q6XFx0U0ogUGFyayBcXHUwMDNjc2pAa2VybmVsLm9yZ1xcdTAwM2VcXG4rRGVzY3JpcHRpb246XFx0UmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgdGhhdFxcbitcXHRcXHRjb3JyZXNwb25kaW5nIERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWUncyBhY3Rpb24gaGFzIHRyaWVkXFxuK1xcdFxcdHRvIGJlIGFwcGxpZWQuICBUaGUgbnVtYmVyIGlzIHVwZGF0ZWQgdG9nZXRoZXIgd2l0aFxcbitcXHRcXHQnLi4uL3RyaWVkX3JlZ2lvbnMvdG90YWxfYnl0ZXMnIGJ5IHdyaXRpbmcgJ3VwZGF0ZV9zY2hlbWVzX3RyaWVkX2J5dGVzJ1xcbitcXHRcXHRvciAndXBkYXRlX3NjaGVtZXNfdHJpZWRfcmVnaW9ucycgdG8gdGhlIHJlbGV2YW50ICdzdGF0ZScgZmlsZSwgYW5kXFxuK1xcdFxcdGhlbmNlIGNhbiBiZSByZWFkIHdpdGhvdXQgbWF0ZXJpYWxpemluZyB0aGUgcGVyLXJlZ2lvbiBkaXJlY3Rvcmllcy5cXG4rXFxuIFdoYXQ6XFx0XFx0L3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXFx1MDAzY0tcXHUwMDNlL2NvbnRleHRzL1xcdTAwM2NDXFx1MDAzZS9zY2hlbWVzL1xcdTAwM2NTXFx1MDAzZS90cmllZF9yZWdpb25zL3RvdGFsX2J5dGVzXFxuIERhdGU6XFx0XFx0SnVsIDIwMjNcXG4gQ29udGFjdDpcXHRTSiBQYXJrIFxcdTAwM2NzakBrZXJuZWwub3JnXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuaW5kZXggZGE1ZjlhZmQwOGFlZjguLmZmYjY5MDVjYTljZWI1IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcXG5AQCAtMTAyLDcgKzEwMiw3IEBAIGNvbW1hIChcXFwiLFxcXCIpLlxcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YGRlc3RzIFxcdTAwM2NkYW1vbl9zeXNmc19kZXN0c1xcdTAwM2VgL25yX2Rlc3RzXFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvaWQsd2VpZ2h0XFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgc3RhdHMgXFx1MDAzY3N5c2ZzX3NjaGVtZXNfc3RhdHNcXHUwMDNlYC9ucl90cmllZCxzel90cmllZCxucl9hcHBsaWVkLHN6X2FwcGxpZWQsc3pfb3BzX2ZpbHRlcl9wYXNzZWQscXRfZXhjZWVkcyxucl9zbmFwc2hvdHMsbWF4X25yX3NuYXBzaG90c1xcbi0gICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YHRyaWVkX3JlZ2lvbnMgXFx1MDAzY3N5c2ZzX3NjaGVtZXNfdHJpZWRfcmVnaW9uc1xcdTAwM2VgL3RvdGFsX2J5dGVzXFxuKyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdHJpZWRfcmVnaW9ucyBcXHUwMDNjc3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zXFx1MDAzZWAvbnJfcmVnaW9ucyx0b3RhbF9ieXRlc1xcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL3N0YXJ0LGVuZCxucl9hY2Nlc3NlcyxhZ2Usc3pfZmlsdGVyX3Bhc3NlZFxcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgcHJvYmVzXFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9oaXRzXFxuQEAgLTYyMiwyMSArNjIyLDI0IEBAIHJlbGV2YW50IGBga2RhbW9uZHMvXFx1MDAzY05cXHUwMDNlL3N0YXRlYGAgZmlsZS4gIFJlZmVyIHRvIDpyZWY6YGtkYW1vbmQgZGlyZWN0b3J5XFxuIHNjaGVtZXMvXFx1MDAzY05cXHUwMDNlL3RyaWVkX3JlZ2lvbnMvXFxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuIFxcbi1UaGlzIGRpcmVjdG9yeSBpbml0aWFsbHkgaGFzIG9uZSBmaWxlLCBgYHRvdGFsX2J5dGVzYGAuXFxuK1RoaXMgZGlyZWN0b3J5IGluaXRpYWxseSBoYXMgdHdvIGZpbGVzLCBgYG5yX3JlZ2lvbnNgYCBhbmQgYGB0b3RhbF9ieXRlc2BgLlxcbiBcXG4gV2hlbiBhIHNwZWNpYWwga2V5d29yZCwgYGB1cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zYGAsIGlzIHdyaXR0ZW4gdG8gdGhlXFxuLXJlbGV2YW50IGBga2RhbW9uZHMvXFx1MDAzY05cXHUwMDNlL3N0YXRlYGAgZmlsZSwgREFNT04gdXBkYXRlcyB0aGUgYGB0b3RhbF9ieXRlc2BgIGZpbGUgc29cXG4tdGhhdCByZWFkaW5nIGl0IHJldHVybnMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHNjaGVtZSB0cmllZCByZWdpb25zLCBhbmQgY3JlYXRlc1xcbi1kaXJlY3RvcmllcyBuYW1lZCBpbnRlZ2VyIHN0YXJ0aW5nIGZyb20gYGAwYGAgdW5kZXIgdGhpcyBkaXJlY3RvcnkuICBFYWNoXFxuLWRpcmVjdG9yeSBjb250YWlucyBmaWxlcyBleHBvc2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9mIHRoZSBtZW1vcnlcXG4tcmVnaW9uIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgc2NoZW1lJ3MgYGBhY3Rpb25gYCBoYXMgdHJpZWQgdG8gYmUgYXBwbGllZCB1bmRlclxcbi10aGlzIGRpcmVjdG9yeSwgZHVyaW5nIG5leHQgOnJlZjpgYXBwbHkgaW50ZXJ2YWwgXFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc1xcdTAwM2VgIG9mIHRoZVxcbi1jb3JyZXNwb25kaW5nIHNjaGVtZS4gIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBhZGRyZXNzIHJhbmdlLCBgYG5yX2FjY2Vzc2VzYGAsXFxuLWFuZCBgYGFnZWBgIG9mIHRoZSByZWdpb24uXFxuK3JlbGV2YW50IGBga2RhbW9uZHMvXFx1MDAzY05cXHUwMDNlL3N0YXRlYGAgZmlsZSwgREFNT04gdXBkYXRlcyB0aGUgYGBucl9yZWdpb25zYGAgYW5kXFxuK2BgdG90YWxfYnl0ZXNgYCBmaWxlcyBzbyB0aGF0IHJlYWRpbmcgdGhlbSByZXR1cm5zIHRoZSBudW1iZXIgYW5kIHRoZSB0b3RhbCBzaXplXFxuK29mIHRoZSBzY2hlbWUgdHJpZWQgcmVnaW9ucywgcmVzcGVjdGl2ZWx5LCBhbmQgY3JlYXRlcyBkaXJlY3RvcmllcyBuYW1lZFxcbitpbnRlZ2VyIHN0YXJ0aW5nIGZyb20gYGAwYGAgdW5kZXIgdGhpcyBkaXJlY3RvcnkuICBFYWNoIGRpcmVjdG9yeSBjb250YWlucyBmaWxlc1xcbitleHBvc2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRoYXQgdGhlXFxuK2NvcnJlc3BvbmRpbmcgc2NoZW1lJ3MgYGBhY3Rpb25gYCBoYXMgdHJpZWQgdG8gYmUgYXBwbGllZCB1bmRlciB0aGlzIGRpcmVjdG9yeSxcXG4rZHVyaW5nIG5leHQgOnJlZjpgYXBwbHkgaW50ZXJ2YWwgXFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc1xcdTAwM2VgIG9mIHRoZSBjb3JyZXNwb25kaW5nXFxuK3NjaGVtZS4gIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBhZGRyZXNzIHJhbmdlLCBgYG5yX2FjY2Vzc2VzYGAsIGFuZCBgYGFnZWBgIG9mXFxuK3RoZSByZWdpb24uXFxuIFxcbiBXcml0aW5nIGBgdXBkYXRlX3NjaGVtZXNfdHJpZWRfYnl0ZXNgYCB0byB0aGUgcmVsZXZhbnQgYGBrZGFtb25kcy9cXHUwMDNjTlxcdTAwM2Uvc3RhdGVgYFxcbi1maWxlIHdpbGwgb25seSB1cGRhdGUgdGhlIGBgdG90YWxfYnl0ZXNgYCBmaWxlLCBhbmQgd2lsbCBub3QgY3JlYXRlIHRoZVxcbi1zdWJkaXJlY3Rvcmllcy5cXG4rZmlsZSB3aWxsIG9ubHkgdXBkYXRlIHRoZSBgYG5yX3JlZ2lvbnNgYCBhbmQgYGB0b3RhbF9ieXRlc2BgIGZpbGVzLCBhbmQgd2lsbCBub3RcXG4rY3JlYXRlIHRoZSBzdWJkaXJlY3Rvcmllcy4gIEhlbmNlIGBgbnJfcmVnaW9uc2BgIGNhbiBiZSB1c2VkIGFzIGEgbGlnaHR3ZWlnaHQgd2F5XFxuK3RvIHJlYWQgdGhlIG51bWJlciBvZiB0aGUgc2NoZW1lIHRyaWVkIHJlZ2lvbnMgd2l0aG91dCBtYXRlcmlhbGl6aW5nIHRoZVxcbitwZXItcmVnaW9uIHN1YmRpcmVjdG9yaWVzLlxcbiBcXG4gVGhlIGRpcmVjdG9yaWVzIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIGFub3RoZXIgc3BlY2lhbCBrZXl3b3JkLFxcbiBgYGNsZWFyX3NjaGVtZXNfdHJpZWRfcmVnaW9uc2BgLCBpcyB3cml0dGVuIHRvIHRoZSByZWxldmFudFxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDRkYWY1YTE2NTYwNi4uMzY1YzQzMjcxYzBjNjYgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTM5MTgsMjIgKzM5MTgsMTQgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuIH1cXG4gXFxuIHN0cnVjdCBkYW1vbl9zeXN0ZW1fcmFtX3JhbmdlX3dhbGtfYXJnIHtcXG4tXFx0Ym9vbCB3YWxrZWQ7XFxuLVxcdHN0cnVjdCByZXNvdXJjZSByZXM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0O1xcbitcXHQvKiBOVUxMIGluIHRoZSBjb3VudGluZy1vbmx5IHBhc3MgKi9cXG4rXFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcztcXG4rXFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcztcXG4rXFx0dW5zaWduZWQgbG9uZyBwcmV2X2VuZDtcXG4rXFx0Ym9vbCBoYXNfcHJldjtcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXFxuLXtcXG4tXFx0c3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgKmEgPSBhcmc7XFxuLVxcbi1cXHRpZiAoIWEtXFx1MDAzZXdhbGtlZCkge1xcbi1cXHRcXHRhLVxcdTAwM2V3YWxrZWQgPSB0cnVlO1xcbi1cXHRcXHRhLVxcdTAwM2VyZXMuc3RhcnQgPSByZXMtXFx1MDAzZXN0YXJ0O1xcbi1cXHR9XFxuLVxcdGEtXFx1MDAzZXJlcy5lbmQgPSByZXMtXFx1MDAzZWVuZDtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3Jlc190b19jb3JlX2FkZHIocmVzb3VyY2Vfc2l6ZV90IHJhLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcXG4ge1xcbkBAIC0zOTQ3LDIzICszOTM5LDY2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3Jlc190b19jb3JlX2FkZHIocmVzb3VyY2Vfc2l6ZV90IHJhLFxcbiBcXHRyZXR1cm4gcmEgLyBhZGRyX3VuaXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3RhcnQsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgKmVuZCwgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXFxuK3N0YXRpYyBpbnQgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgKmEgPSBhcmc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlcy1cXHUwMDNlc3RhcnQsIGEtXFx1MDAzZWFkZHJfdW5pdCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZW5kID0gZGFtb25fcmVzX3RvX2NvcmVfYWRkcihyZXMtXFx1MDAzZWVuZCArIDEsIGEtXFx1MDAzZWFkZHJfdW5pdCk7XFxuK1xcbitcXHRpZiAoZW5kIFxcdTAwM2M9IHN0YXJ0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0LypcXG4rXFx0ICogJ1N5c3RlbSBSQU0nIHJlc291cmNlcyBhcmUgdmlzaXRlZCBpbiB0aGUgYXNjZW5kaW5nIGFkZHJlc3Mgb3JkZXIuXFxuK1xcdCAqIENvYWxlc2NlIG9ubHkgdHJ1bHkgYWRqYWNlbnQgKG5vIGdhcCBpbiBiZXR3ZWVuKSByZXNvdXJjZXMgaW50byBvbmVcXG4rXFx0ICogcmFuZ2UsIHNvIHRoYXQgYW55IGhvbGUgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzIGlzIGtlcHQgb3V0XFxuK1xcdCAqIG9mIHRoZSByZXN1bHRpbmcgcmFuZ2VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGEtXFx1MDAzZWhhc19wcmV2IFxcdTAwMjZcXHUwMDI2IGEtXFx1MDAzZXByZXZfZW5kID09IHN0YXJ0KSB7XFxuK1xcdFxcdGEtXFx1MDAzZXByZXZfZW5kID0gZW5kO1xcbitcXHRcXHRpZiAoYS1cXHUwMDNlcmFuZ2VzKVxcbitcXHRcXHRcXHRhLVxcdTAwM2VyYW5nZXNbYS1cXHUwMDNlbnJfcmFuZ2VzIC0gMV0uZW5kID0gZW5kO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRpZiAoYS1cXHUwMDNlcmFuZ2VzKSB7XFxuK1xcdFxcdGEtXFx1MDAzZXJhbmdlc1thLVxcdTAwM2Vucl9yYW5nZXNdLnN0YXJ0ID0gc3RhcnQ7XFxuK1xcdFxcdGEtXFx1MDAzZXJhbmdlc1thLVxcdTAwM2Vucl9yYW5nZXNdLmVuZCA9IGVuZDtcXG4rXFx0fVxcbitcXHRhLVxcdTAwM2Vucl9yYW5nZXMrKztcXG4rXFx0YS1cXHUwMDNlcHJldl9lbmQgPSBlbmQ7XFxuK1xcdGEtXFx1MDAzZWhhc19wcmV2ID0gdHJ1ZTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEZpbmQgYWxsICdTeXN0ZW0gUkFNJyBhcmVhcyBhbmQgcmV0dXJuIHRoZW0gYXMgYW4gYXJyYXkgb2YgY29hbGVzY2VkXFxuKyAqIGRhbW9uX2FkZHJfcmFuZ2UuICBPbiBzdWNjZXNzLCAqcmFuZ2VzIHBvaW50cyB0byBhIGt2bWFsbG9jJ2VkIGFycmF5IHRoYXQgdGhlXFxuKyAqIGNhbGxlciBzaG91bGQga3ZmcmVlKCksIGFuZCB0aGUgbnVtYmVyIG9mIHJhbmdlcyBpcyByZXR1cm5lZC4gIFJldHVybnMgMCBpZlxcbisgKiBubyBTeXN0ZW0gUkFNIGlzIGZvdW5kLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgZGFtb25fZmluZF9zeXN0ZW1fcmFtcyhzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqKnJhbmdlc19vdXQsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXFxuIHtcXG4tXFx0c3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgYXJnID0ge307XFxuK1xcdHN0cnVjdCBkYW1vbl9zeXN0ZW1fcmFtX3JhbmdlX3dhbGtfYXJnIGFyZyA9IHsgLmFkZHJfdW5pdCA9IGFkZHJfdW5pdCB9O1xcbitcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xcbiBcXG4rXFx0LyogRmlyc3QgcGFzczogY291bnQgdGhlIGNvYWxlc2NlZCByYW5nZXMuICovXFxuIFxcdHdhbGtfc3lzdGVtX3JhbV9yZXMoMCwgLTEsIFxcdTAwMjZhcmcsIGRhbW9uX3N5c3RlbV9yYW1fd2Fsa19mbik7XFxuLVxcdGlmICghYXJnLndhbGtlZClcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHQqc3RhcnQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKGFyZy5yZXMuc3RhcnQsIGFkZHJfdW5pdCk7XFxuLVxcdCplbmQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKGFyZy5yZXMuZW5kICsgMSwgYWRkcl91bml0KTtcXG4tXFx0aWYgKCplbmQgXFx1MDAzYz0gKnN0YXJ0KVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoIWFyZy5ucl9yYW5nZXMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyYW5nZXMgPSBrdm1hbGxvY19vYmpzKCpyYW5nZXMsIGFyZy5ucl9yYW5nZXMsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJhbmdlcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdC8qIFNlY29uZCBwYXNzOiBmaWxsIGluIHRoZSBjb2FsZXNjZWQgcmFuZ2VzLiAqL1xcbitcXHRhcmcucmFuZ2VzID0gcmFuZ2VzO1xcbitcXHRhcmcubnJfcmFuZ2VzID0gMDtcXG4rXFx0YXJnLmhhc19wcmV2ID0gZmFsc2U7XFxuK1xcdHdhbGtfc3lzdGVtX3JhbV9yZXMoMCwgLTEsIFxcdTAwMjZhcmcsIGRhbW9uX3N5c3RlbV9yYW1fd2Fsa19mbik7XFxuK1xcdCpyYW5nZXNfb3V0ID0gcmFuZ2VzO1xcbitcXHRyZXR1cm4gYXJnLm5yX3JhbmdlcztcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCgpIC0gU2V0IHRoZSByZWdpb24gb2YgdGhlIGdpdmVuXFxuKyAqIGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCgpIC0gU2V0IHRoZSByZWdpb25zIG9mIHRoZSBnaXZlblxcbiAgKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAnU3lzdGVtIFJBTScgcmVzb3VyY2VzLlxcbiAgKiBAdDpcXHRcXHRUaGUgbW9uaXRvcmluZyB0YXJnZXQgdG8gc2V0IHRoZSByZWdpb24uXFxuICAqIEBzdGFydDpcXHRUaGUgcG9pbnRlciB0byB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgcmVnaW9uLlxcbkBAIC0zOTczLDkgKzQwMDgsMTEgQEAgc3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSByZWdpb24gb2YgQHQgYXMgcmVxdWVzdGVkIGJ5IEBzdGFydCBhbmQgQGVuZC4gIElmIHRoZVxcbiAgKiB2YWx1ZXMgb2YgQHN0YXJ0IGFuZCBAZW5kIGFyZSB6ZXJvLCBob3dldmVyLCB0aGlzIGZ1bmN0aW9uIGZpbmRzICdTeXN0ZW1cXG4tICogUkFNJyByZXNvdXJjZXMgYW5kIHNldHMgdGhlIHJlZ2lvbiB0byBjb3ZlciBhbGwgdGhlIHJlc291cmNlLiAgSW4gdGhlIGxhdHRlclxcbi0gKiBjYXNlLCB0aGlzIGZ1bmN0aW9uIHNhdmVzIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBhZGRyZXNzZXNlcyBvZiB0aGUgZmlyc3QgYW5kXFxuLSAqIHRoZSBsYXN0IHJlc291cmNlcyBpbiBAc3RhcnQgYW5kIEBlbmQsIHJlc3BlY3RpdmVseS5cXG4rICogUkFNJyByZXNvdXJjZXMgYW5kIHNldHMgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgdG8gY292ZXIgdGhlbS4gIEVhY2hcXG4rICogZGlzY3JldGUgU3lzdGVtIFJBTSBhcmVhIGJlY29tZXMgYSBzZXBhcmF0ZSByZWdpb24sIHNvIGhvbGVzIGJldHdlZW4gdGhlbVxcbisgKiAoZS5nLiwgb24gbXVsdGktc29ja2V0IG9yIENYTCBzeXN0ZW1zKSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgbW9uaXRvcmluZy4gIEluXFxuKyAqIHRoZSBsYXR0ZXIgY2FzZSwgdGhpcyBmdW5jdGlvbiBzYXZlcyB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgYWRkcmVzc2VzIG9mIHRoZVxcbisgKiBmaXJzdCBhbmQgdGhlIGxhc3QgcmVzb3VyY2VzIGluIEBzdGFydCBhbmQgQGVuZCwgcmVzcGVjdGl2ZWx5LlxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuICAqL1xcbkBAIC0zOTg0LDE0ICs0MDIxLDI1IEBAIGludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlO1xcbitcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xcbitcXHRpbnQgbnJfcmFuZ2VzLCBlcnI7XFxuIFxcbi1cXHRpZiAoISpzdGFydCBcXHUwMDI2XFx1MDAyNiAhKmVuZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQhZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZShzdGFydCwgZW5kLCBhZGRyX3VuaXQpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKCpzdGFydCB8fCAqZW5kKSB7XFxuK1xcdFxcdGFkZHJfcmFuZ2Uuc3RhcnQgPSAqc3RhcnQ7XFxuK1xcdFxcdGFkZHJfcmFuZ2UuZW5kID0gKmVuZDtcXG4rXFx0XFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFxcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcXG4rXFx0fVxcbiBcXG4tXFx0YWRkcl9yYW5nZS5zdGFydCA9ICpzdGFydDtcXG4tXFx0YWRkcl9yYW5nZS5lbmQgPSAqZW5kO1xcbi1cXHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXFx1MDAyNmFkZHJfcmFuZ2UsIDEsIG1pbl9yZWdpb25fc3opO1xcbitcXHRucl9yYW5nZXMgPSBkYW1vbl9maW5kX3N5c3RlbV9yYW1zKFxcdTAwMjZyYW5nZXMsIGFkZHJfdW5pdCk7XFxuK1xcdGlmIChucl9yYW5nZXMgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gbnJfcmFuZ2VzO1xcbitcXHRpZiAoIW5yX3JhbmdlcylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdCpzdGFydCA9IHJhbmdlc1swXS5zdGFydDtcXG4rXFx0KmVuZCA9IHJhbmdlc1tucl9yYW5nZXMgLSAxXS5lbmQ7XFxuK1xcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKHQsIHJhbmdlcywgbnJfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTtcXG4rXFx0a3ZmcmVlKHJhbmdlcyk7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcXG5pbmRleCAzMmY0OTVhOTZiMTdhOC4uOTE1NzZmNzdlOTZjYWQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuKysrIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuQEAgLTI5Nyw2ICsyOTcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xcbiBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMge1xcbiBcXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlZ2lvbnNfbGlzdDtcXG4rXFx0aW50IG5yX3JlZ2lvbl9kaXJzO1xcbiBcXHRpbnQgbnJfcmVnaW9ucztcXG4gXFx0dW5zaWduZWQgbG9uZyB0b3RhbF9ieXRlcztcXG4gfTtcXG5AQCAtMzExLDExICszMTIsMjEgQEAgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcXG4gXFxuIFxcdHJlZ2lvbnMtXFx1MDAzZWtvYmogPSAoc3RydWN0IGtvYmplY3Qpe307XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZyZWdpb25zLVxcdTAwM2VyZWdpb25zX2xpc3QpO1xcbitcXHRyZWdpb25zLVxcdTAwM2Vucl9yZWdpb25fZGlycyA9IDA7XFxuIFxcdHJlZ2lvbnMtXFx1MDAzZW5yX3JlZ2lvbnMgPSAwO1xcbiBcXHRyZWdpb25zLVxcdTAwM2V0b3RhbF9ieXRlcyA9IDA7XFxuIFxcdHJldHVybiByZWdpb25zO1xcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdCBucl9yZWdpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcXG4rXFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKTtcXG4rXFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVkXFxcXG5cXFwiLCByZWdpb25zLVxcdTAwM2Vucl9yZWdpb25zKTtcXG4rfVxcbitcXG4gc3RhdGljIHNzaXplX3QgdG90YWxfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuIHtcXG5AQCAtMzM1LDcgKzM0Niw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JtX2RpcnMoXFxuIFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZyLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0a29iamVjdF9kZWwoXFx1MDAyNnItXFx1MDAzZWtvYmopO1xcbiBcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2ci1cXHUwMDNla29iaik7XFxuLVxcdFxcdHJlZ2lvbnMtXFx1MDAzZW5yX3JlZ2lvbnMtLTtcXG4rXFx0XFx0cmVnaW9ucy1cXHUwMDNlbnJfcmVnaW9uX2RpcnMtLTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0zNDQsMTAgKzM1NSwxNCBAQCBzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxcbiBcXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfbnJfcmVnaW9uc19hdHRyID1cXG4rXFx0XFx0X19BVFRSX1JPX01PREUobnJfcmVnaW9ucywgMDQwMCk7XFxuK1xcbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIgPVxcbiBcXHRcXHRfX0FUVFJfUk9fTU9ERSh0b3RhbF9ieXRlcywgMDQwMCk7XFxuIFxcbiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYXR0cnNbXSA9IHtcXG4rXFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX25yX3JlZ2lvbnNfYXR0ci5hdHRyLFxcbiBcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ci5hdHRyLFxcbiBcXHROVUxMLFxcbiB9O1xcbkBAIC0zMTE5LDYgKzMxMzQsNyBAQCB2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHN5c2ZzX3JlZ2lvbnMgPSBzeXNmc19zY2hlbWVzLVxcdTAwM2VzY2hlbWVzX2FycltzY2hlbWVzX2lkeF0tXFx1MDAzZXRyaWVkX3JlZ2lvbnM7XFxuK1xcdHN5c2ZzX3JlZ2lvbnMtXFx1MDAzZW5yX3JlZ2lvbnMrKztcXG4gXFx0c3lzZnNfcmVnaW9ucy1cXHUwMDNldG90YWxfYnl0ZXMgKz0gci1cXHUwMDNlYXIuZW5kIC0gci1cXHUwMDNlYXIuc3RhcnQ7XFxuIFxcdGlmICh0b3RhbF9ieXRlc19vbmx5KVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTMxMzAsMTMgKzMxNDYsMTMgQEAgdm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbiBcXHRpZiAoa29iamVjdF9pbml0X2FuZF9hZGQoXFx1MDAyNnJlZ2lvbi1cXHUwMDNla29iaixcXG4gXFx0XFx0XFx0XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdTAwMjZzeXNmc19yZWdpb25zLVxcdTAwM2Vrb2JqLCBcXFwiJWRcXFwiLFxcbi1cXHRcXHRcXHRcXHRzeXNmc19yZWdpb25zLVxcdTAwM2Vucl9yZWdpb25zKSlcXG4rXFx0XFx0XFx0XFx0c3lzZnNfcmVnaW9ucy1cXHUwMDNlbnJfcmVnaW9uX2RpcnMpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0aWYgKGRhbW9zX3N5c2ZzX3JlZ2lvbl9hZGRfZGlycyhyZWdpb24sIGN0eCwgcikpXFxuIFxcdFxcdGdvdG8gZGVsX291dDtcXG4gXFxuIFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnJlZ2lvbi1cXHUwMDNlbGlzdCwgXFx1MDAyNnN5c2ZzX3JlZ2lvbnMtXFx1MDAzZXJlZ2lvbnNfbGlzdCk7XFxuLVxcdHN5c2ZzX3JlZ2lvbnMtXFx1MDAzZW5yX3JlZ2lvbnMrKztcXG4rXFx0c3lzZnNfcmVnaW9ucy1cXHUwMDNlbnJfcmVnaW9uX2RpcnMrKztcXG4gXFx0cmV0dXJuO1xcbiBcXG4gZGVsX291dDpcXG5AQCAtMzE1Niw2ICszMTcyLDcgQEAgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcXG4gXFx0XFx0c3lzZnNfc2NoZW1lID0gc3lzZnNfc2NoZW1lcy1cXHUwMDNlc2NoZW1lc19hcnJbaV07XFxuIFxcdFxcdGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JtX2RpcnMoXFxuIFxcdFxcdFxcdFxcdHN5c2ZzX3NjaGVtZS1cXHUwMDNldHJpZWRfcmVnaW9ucyk7XFxuK1xcdFxcdHN5c2ZzX3NjaGVtZS1cXHUwMDNldHJpZWRfcmVnaW9ucy1cXHUwMDNlbnJfcmVnaW9ucyA9IDA7XFxuIFxcdFxcdHN5c2ZzX3NjaGVtZS1cXHUwMDNldHJpZWRfcmVnaW9ucy1cXHUwMDNldG90YWxfYnl0ZXMgPSAwO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxNzo1My43MzcwMjkwMDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDkyOTI5NjIzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIixcbiAgICBcIkRBTU9OX1NUQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRcIixcbiAgICBcImRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJcIixcbiAgICBcImRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiBzdWJzeXN0ZW0gdG8gY29hbGVzY2UgYWRqYWNlbnQgU3lzdGVtIFJBTSByZXNvdXJjZXMgaW50byByYW5nZXMgYW5kIGV4Y2x1ZGUgaG9sZXMgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzLiBJdCBhbHNvIGFkZHMgYSBgbnJfcmVnaW9uc2AgZmlsZSB0byB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTiBzY2hlbWVzJyB0cmllZCByZWdpb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzeXNmcyBpbnRlcmZhY2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTM0NGUxMTBiYjE2Mjk2ODU3YjAwMDIzYzRlZGZiNWQ0NzRjNmVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDIxOjE3OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxuaW5kZXggZTY3NWE1NzE0NWUzNmQuLmRlYzg2ZTA4YTk2MDE5IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5AQCAtNjA5LDYgKzYwOSwxNiBAQCBEZXNjcmlwdGlvbjpcdFdyaXRpbmcgYSBudW1iZXIgdG8gdGhpcyBmaWxlIHNldHMgdGhlIHVwcGVyIGxpbWl0IG9mXG4gXHRcdG5yX3NuYXBzaG90cyB0aGF0IGRlYWN0aXZhdGVzIHRoZSBzY2hlbWUgd2hlbiB0aGUgbGltaXQgaXNcbiBcdFx0cmVhY2hlZCBvciBleGNlZWRlZC5cbiBcbitXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2Uvc2NoZW1lcy9cdTAwM2NTXHUwMDNlL3RyaWVkX3JlZ2lvbnMvbnJfcmVnaW9uc1xuK0RhdGU6XHRcdEF1ZyAyMDI2XG4rQ29udGFjdDpcdFNKIFBhcmsgXHUwMDNjc2pAa2VybmVsLm9yZ1x1MDAzZVxuK0Rlc2NyaXB0aW9uOlx0UmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgdGhhdFxuK1x0XHRjb3JyZXNwb25kaW5nIERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWUncyBhY3Rpb24gaGFzIHRyaWVkXG4rXHRcdHRvIGJlIGFwcGxpZWQuICBUaGUgbnVtYmVyIGlzIHVwZGF0ZWQgdG9nZXRoZXIgd2l0aFxuK1x0XHQnLi4uL3RyaWVkX3JlZ2lvbnMvdG90YWxfYnl0ZXMnIGJ5IHdyaXRpbmcgJ3VwZGF0ZV9zY2hlbWVzX3RyaWVkX2J5dGVzJ1xuK1x0XHRvciAndXBkYXRlX3NjaGVtZXNfdHJpZWRfcmVnaW9ucycgdG8gdGhlIHJlbGV2YW50ICdzdGF0ZScgZmlsZSwgYW5kXG4rXHRcdGhlbmNlIGNhbiBiZSByZWFkIHdpdGhvdXQgbWF0ZXJpYWxpemluZyB0aGUgcGVyLXJlZ2lvbiBkaXJlY3Rvcmllcy5cbitcbiBXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2Uvc2NoZW1lcy9cdTAwM2NTXHUwMDNlL3RyaWVkX3JlZ2lvbnMvdG90YWxfYnl0ZXNcbiBEYXRlOlx0XHRKdWwgMjAyM1xuIENvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5pbmRleCBkYTVmOWFmZDA4YWVmOC4uZmZiNjkwNWNhOWNlYjUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbkBAIC0xMDIsNyArMTAyLDcgQEAgY29tbWEgKFwiLFwiKS5cbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YGRlc3RzIFx1MDAzY2RhbW9uX3N5c2ZzX2Rlc3RzXHUwMDNlYC9ucl9kZXN0c1xuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvaWQsd2VpZ2h0XG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBzdGF0cyBcdTAwM2NzeXNmc19zY2hlbWVzX3N0YXRzXHUwMDNlYC9ucl90cmllZCxzel90cmllZCxucl9hcHBsaWVkLHN6X2FwcGxpZWQsc3pfb3BzX2ZpbHRlcl9wYXNzZWQscXRfZXhjZWVkcyxucl9zbmFwc2hvdHMsbWF4X25yX3NuYXBzaG90c1xuLSAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdHJpZWRfcmVnaW9ucyBcdTAwM2NzeXNmc19zY2hlbWVzX3RyaWVkX3JlZ2lvbnNcdTAwM2VgL3RvdGFsX2J5dGVzXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmB0cmllZF9yZWdpb25zIFx1MDAzY3N5c2ZzX3NjaGVtZXNfdHJpZWRfcmVnaW9uc1x1MDAzZWAvbnJfcmVnaW9ucyx0b3RhbF9ieXRlc1xuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvc3RhcnQsZW5kLG5yX2FjY2Vzc2VzLGFnZSxzel9maWx0ZXJfcGFzc2VkXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIHByb2Jlc1xuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9oaXRzXG5AQCAtNjIyLDIxICs2MjIsMjQgQEAgcmVsZXZhbnQgYGBrZGFtb25kcy9cdTAwM2NOXHUwMDNlL3N0YXRlYGAgZmlsZS4gIFJlZmVyIHRvIDpyZWY6YGtkYW1vbmQgZGlyZWN0b3J5XG4gc2NoZW1lcy9cdTAwM2NOXHUwMDNlL3RyaWVkX3JlZ2lvbnMvXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiBcbi1UaGlzIGRpcmVjdG9yeSBpbml0aWFsbHkgaGFzIG9uZSBmaWxlLCBgYHRvdGFsX2J5dGVzYGAuXG4rVGhpcyBkaXJlY3RvcnkgaW5pdGlhbGx5IGhhcyB0d28gZmlsZXMsIGBgbnJfcmVnaW9uc2BgIGFuZCBgYHRvdGFsX2J5dGVzYGAuXG4gXG4gV2hlbiBhIHNwZWNpYWwga2V5d29yZCwgYGB1cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zYGAsIGlzIHdyaXR0ZW4gdG8gdGhlXG4tcmVsZXZhbnQgYGBrZGFtb25kcy9cdTAwM2NOXHUwMDNlL3N0YXRlYGAgZmlsZSwgREFNT04gdXBkYXRlcyB0aGUgYGB0b3RhbF9ieXRlc2BgIGZpbGUgc29cbi10aGF0IHJlYWRpbmcgaXQgcmV0dXJucyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgc2NoZW1lIHRyaWVkIHJlZ2lvbnMsIGFuZCBjcmVhdGVzXG4tZGlyZWN0b3JpZXMgbmFtZWQgaW50ZWdlciBzdGFydGluZyBmcm9tIGBgMGBgIHVuZGVyIHRoaXMgZGlyZWN0b3J5LiAgRWFjaFxuLWRpcmVjdG9yeSBjb250YWlucyBmaWxlcyBleHBvc2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9mIHRoZSBtZW1vcnlcbi1yZWdpb24gdGhhdCB0aGUgY29ycmVzcG9uZGluZyBzY2hlbWUncyBgYGFjdGlvbmBgIGhhcyB0cmllZCB0byBiZSBhcHBsaWVkIHVuZGVyXG4tdGhpcyBkaXJlY3RvcnksIGR1cmluZyBuZXh0IDpyZWY6YGFwcGx5IGludGVydmFsIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc1x1MDAzZWAgb2YgdGhlXG4tY29ycmVzcG9uZGluZyBzY2hlbWUuICBUaGUgaW5mb3JtYXRpb24gaW5jbHVkZXMgYWRkcmVzcyByYW5nZSwgYGBucl9hY2Nlc3Nlc2BgLFxuLWFuZCBgYGFnZWBgIG9mIHRoZSByZWdpb24uXG4rcmVsZXZhbnQgYGBrZGFtb25kcy9cdTAwM2NOXHUwMDNlL3N0YXRlYGAgZmlsZSwgREFNT04gdXBkYXRlcyB0aGUgYGBucl9yZWdpb25zYGAgYW5kXG4rYGB0b3RhbF9ieXRlc2BgIGZpbGVzIHNvIHRoYXQgcmVhZGluZyB0aGVtIHJldHVybnMgdGhlIG51bWJlciBhbmQgdGhlIHRvdGFsIHNpemVcbitvZiB0aGUgc2NoZW1lIHRyaWVkIHJlZ2lvbnMsIHJlc3BlY3RpdmVseSwgYW5kIGNyZWF0ZXMgZGlyZWN0b3JpZXMgbmFtZWRcbitpbnRlZ2VyIHN0YXJ0aW5nIGZyb20gYGAwYGAgdW5kZXIgdGhpcyBkaXJlY3RvcnkuICBFYWNoIGRpcmVjdG9yeSBjb250YWlucyBmaWxlc1xuK2V4cG9zaW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIG1lbW9yeSByZWdpb24gdGhhdCB0aGVcbitjb3JyZXNwb25kaW5nIHNjaGVtZSdzIGBgYWN0aW9uYGAgaGFzIHRyaWVkIHRvIGJlIGFwcGxpZWQgdW5kZXIgdGhpcyBkaXJlY3RvcnksXG4rZHVyaW5nIG5leHQgOnJlZjpgYXBwbHkgaW50ZXJ2YWwgXHUwMDNjZGFtb25fZGVzaWduX2RhbW9zXHUwMDNlYCBvZiB0aGUgY29ycmVzcG9uZGluZ1xuK3NjaGVtZS4gIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBhZGRyZXNzIHJhbmdlLCBgYG5yX2FjY2Vzc2VzYGAsIGFuZCBgYGFnZWBgIG9mXG4rdGhlIHJlZ2lvbi5cbiBcbiBXcml0aW5nIGBgdXBkYXRlX3NjaGVtZXNfdHJpZWRfYnl0ZXNgYCB0byB0aGUgcmVsZXZhbnQgYGBrZGFtb25kcy9cdTAwM2NOXHUwMDNlL3N0YXRlYGBcbi1maWxlIHdpbGwgb25seSB1cGRhdGUgdGhlIGBgdG90YWxfYnl0ZXNgYCBmaWxlLCBhbmQgd2lsbCBub3QgY3JlYXRlIHRoZVxuLXN1YmRpcmVjdG9yaWVzLlxuK2ZpbGUgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgYGBucl9yZWdpb25zYGAgYW5kIGBgdG90YWxfYnl0ZXNgYCBmaWxlcywgYW5kIHdpbGwgbm90XG4rY3JlYXRlIHRoZSBzdWJkaXJlY3Rvcmllcy4gIEhlbmNlIGBgbnJfcmVnaW9uc2BgIGNhbiBiZSB1c2VkIGFzIGEgbGlnaHR3ZWlnaHQgd2F5XG4rdG8gcmVhZCB0aGUgbnVtYmVyIG9mIHRoZSBzY2hlbWUgdHJpZWQgcmVnaW9ucyB3aXRob3V0IG1hdGVyaWFsaXppbmcgdGhlXG4rcGVyLXJlZ2lvbiBzdWJkaXJlY3Rvcmllcy5cbiBcbiBUaGUgZGlyZWN0b3JpZXMgd2lsbCBiZSByZW1vdmVkIHdoZW4gYW5vdGhlciBzcGVjaWFsIGtleXdvcmQsXG4gYGBjbGVhcl9zY2hlbWVzX3RyaWVkX3JlZ2lvbnNgYCwgaXMgd3JpdHRlbiB0byB0aGUgcmVsZXZhbnRcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjA2Li4zNjVjNDMyNzFjMGM2NiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzkxOCwyMiArMzkxOCwxNCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiB9XG4gXG4gc3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcge1xuLVx0Ym9vbCB3YWxrZWQ7XG4tXHRzdHJ1Y3QgcmVzb3VyY2UgcmVzO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7XG4rXHQvKiBOVUxMIGluIHRoZSBjb3VudGluZy1vbmx5IHBhc3MgKi9cbitcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXM7XG4rXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzO1xuK1x0dW5zaWduZWQgbG9uZyBwcmV2X2VuZDtcbitcdGJvb2wgaGFzX3ByZXY7XG4gfTtcbiBcbi1zdGF0aWMgaW50IGRhbW9uX3N5c3RlbV9yYW1fd2Fsa19mbihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxuLXtcbi1cdHN0cnVjdCBkYW1vbl9zeXN0ZW1fcmFtX3JhbmdlX3dhbGtfYXJnICphID0gYXJnO1xuLVxuLVx0aWYgKCFhLVx1MDAzZXdhbGtlZCkge1xuLVx0XHRhLVx1MDAzZXdhbGtlZCA9IHRydWU7XG4tXHRcdGEtXHUwMDNlcmVzLnN0YXJ0ID0gcmVzLVx1MDAzZXN0YXJ0O1xuLVx0fVxuLVx0YS1cdTAwM2VyZXMuZW5kID0gcmVzLVx1MDAzZWVuZDtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlc291cmNlX3NpemVfdCByYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4ge1xuQEAgLTM5NDcsMjMgKzM5MzksNjYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcmVzX3RvX2NvcmVfYWRkcihyZXNvdXJjZV9zaXplX3QgcmEsXG4gXHRyZXR1cm4gcmEgLyBhZGRyX3VuaXQ7XG4gfVxuIFxuLXN0YXRpYyBib29sIGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3RhcnQsXG4tXHRcdHVuc2lnbmVkIGxvbmcgKmVuZCwgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4rc3RhdGljIGludCBkYW1vbl9zeXN0ZW1fcmFtX3dhbGtfZm4oc3RydWN0IHJlc291cmNlICpyZXMsIHZvaWQgKmFyZylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzdGVtX3JhbV9yYW5nZV93YWxrX2FyZyAqYSA9IGFyZztcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlcy1cdTAwM2VzdGFydCwgYS1cdTAwM2VhZGRyX3VuaXQpO1xuK1x0dW5zaWduZWQgbG9uZyBlbmQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlcy1cdTAwM2VlbmQgKyAxLCBhLVx1MDAzZWFkZHJfdW5pdCk7XG4rXG4rXHRpZiAoZW5kIFx1MDAzYz0gc3RhcnQpXG4rXHRcdHJldHVybiAwO1xuK1x0LypcbitcdCAqICdTeXN0ZW0gUkFNJyByZXNvdXJjZXMgYXJlIHZpc2l0ZWQgaW4gdGhlIGFzY2VuZGluZyBhZGRyZXNzIG9yZGVyLlxuK1x0ICogQ29hbGVzY2Ugb25seSB0cnVseSBhZGphY2VudCAobm8gZ2FwIGluIGJldHdlZW4pIHJlc291cmNlcyBpbnRvIG9uZVxuK1x0ICogcmFuZ2UsIHNvIHRoYXQgYW55IGhvbGUgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzIGlzIGtlcHQgb3V0XG4rXHQgKiBvZiB0aGUgcmVzdWx0aW5nIHJhbmdlcy5cbitcdCAqL1xuK1x0aWYgKGEtXHUwMDNlaGFzX3ByZXYgXHUwMDI2XHUwMDI2IGEtXHUwMDNlcHJldl9lbmQgPT0gc3RhcnQpIHtcbitcdFx0YS1cdTAwM2VwcmV2X2VuZCA9IGVuZDtcbitcdFx0aWYgKGEtXHUwMDNlcmFuZ2VzKVxuK1x0XHRcdGEtXHUwMDNlcmFuZ2VzW2EtXHUwMDNlbnJfcmFuZ2VzIC0gMV0uZW5kID0gZW5kO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGlmIChhLVx1MDAzZXJhbmdlcykge1xuK1x0XHRhLVx1MDAzZXJhbmdlc1thLVx1MDAzZW5yX3Jhbmdlc10uc3RhcnQgPSBzdGFydDtcbitcdFx0YS1cdTAwM2VyYW5nZXNbYS1cdTAwM2Vucl9yYW5nZXNdLmVuZCA9IGVuZDtcbitcdH1cbitcdGEtXHUwMDNlbnJfcmFuZ2VzKys7XG4rXHRhLVx1MDAzZXByZXZfZW5kID0gZW5kO1xuK1x0YS1cdTAwM2VoYXNfcHJldiA9IHRydWU7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBGaW5kIGFsbCAnU3lzdGVtIFJBTScgYXJlYXMgYW5kIHJldHVybiB0aGVtIGFzIGFuIGFycmF5IG9mIGNvYWxlc2NlZFxuKyAqIGRhbW9uX2FkZHJfcmFuZ2UuICBPbiBzdWNjZXNzLCAqcmFuZ2VzIHBvaW50cyB0byBhIGt2bWFsbG9jJ2VkIGFycmF5IHRoYXQgdGhlXG4rICogY2FsbGVyIHNob3VsZCBrdmZyZWUoKSwgYW5kIHRoZSBudW1iZXIgb2YgcmFuZ2VzIGlzIHJldHVybmVkLiAgUmV0dXJucyAwIGlmXG4rICogbm8gU3lzdGVtIFJBTSBpcyBmb3VuZCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4rc3RhdGljIGludCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICoqcmFuZ2VzX291dCxcbitcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4ge1xuLVx0c3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgYXJnID0ge307XG4rXHRzdHJ1Y3QgZGFtb25fc3lzdGVtX3JhbV9yYW5nZV93YWxrX2FyZyBhcmcgPSB7IC5hZGRyX3VuaXQgPSBhZGRyX3VuaXQgfTtcbitcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXM7XG4gXG4rXHQvKiBGaXJzdCBwYXNzOiBjb3VudCB0aGUgY29hbGVzY2VkIHJhbmdlcy4gKi9cbiBcdHdhbGtfc3lzdGVtX3JhbV9yZXMoMCwgLTEsIFx1MDAyNmFyZywgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKTtcbi1cdGlmICghYXJnLndhbGtlZClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0KnN0YXJ0ID0gZGFtb25fcmVzX3RvX2NvcmVfYWRkcihhcmcucmVzLnN0YXJ0LCBhZGRyX3VuaXQpO1xuLVx0KmVuZCA9IGRhbW9uX3Jlc190b19jb3JlX2FkZHIoYXJnLnJlcy5lbmQgKyAxLCBhZGRyX3VuaXQpO1xuLVx0aWYgKCplbmQgXHUwMDNjPSAqc3RhcnQpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdHJldHVybiB0cnVlO1xuK1x0aWYgKCFhcmcubnJfcmFuZ2VzKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJhbmdlcyA9IGt2bWFsbG9jX29ianMoKnJhbmdlcywgYXJnLm5yX3JhbmdlcywgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXJhbmdlcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHQvKiBTZWNvbmQgcGFzczogZmlsbCBpbiB0aGUgY29hbGVzY2VkIHJhbmdlcy4gKi9cbitcdGFyZy5yYW5nZXMgPSByYW5nZXM7XG4rXHRhcmcubnJfcmFuZ2VzID0gMDtcbitcdGFyZy5oYXNfcHJldiA9IGZhbHNlO1xuK1x0d2Fsa19zeXN0ZW1fcmFtX3JlcygwLCAtMSwgXHUwMDI2YXJnLCBkYW1vbl9zeXN0ZW1fcmFtX3dhbGtfZm4pO1xuK1x0KnJhbmdlc19vdXQgPSByYW5nZXM7XG4rXHRyZXR1cm4gYXJnLm5yX3JhbmdlcztcbiB9XG4gXG4gLyoqXG4tICogZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KCkgLSBTZXQgdGhlIHJlZ2lvbiBvZiB0aGUgZ2l2ZW5cbisgKiBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoKSAtIFNldCB0aGUgcmVnaW9ucyBvZiB0aGUgZ2l2ZW5cbiAgKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAnU3lzdGVtIFJBTScgcmVzb3VyY2VzLlxuICAqIEB0Olx0XHRUaGUgbW9uaXRvcmluZyB0YXJnZXQgdG8gc2V0IHRoZSByZWdpb24uXG4gICogQHN0YXJ0Olx0VGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJlZ2lvbi5cbkBAIC0zOTczLDkgKzQwMDgsMTEgQEAgc3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcmVnaW9uIG9mIEB0IGFzIHJlcXVlc3RlZCBieSBAc3RhcnQgYW5kIEBlbmQuICBJZiB0aGVcbiAgKiB2YWx1ZXMgb2YgQHN0YXJ0IGFuZCBAZW5kIGFyZSB6ZXJvLCBob3dldmVyLCB0aGlzIGZ1bmN0aW9uIGZpbmRzICdTeXN0ZW1cbi0gKiBSQU0nIHJlc291cmNlcyBhbmQgc2V0cyB0aGUgcmVnaW9uIHRvIGNvdmVyIGFsbCB0aGUgcmVzb3VyY2UuICBJbiB0aGUgbGF0dGVyXG4tICogY2FzZSwgdGhpcyBmdW5jdGlvbiBzYXZlcyB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgYWRkcmVzc2VzZXMgb2YgdGhlIGZpcnN0IGFuZFxuLSAqIHRoZSBsYXN0IHJlc291cmNlcyBpbiBAc3RhcnQgYW5kIEBlbmQsIHJlc3BlY3RpdmVseS5cbisgKiBSQU0nIHJlc291cmNlcyBhbmQgc2V0cyB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyB0byBjb3ZlciB0aGVtLiAgRWFjaFxuKyAqIGRpc2NyZXRlIFN5c3RlbSBSQU0gYXJlYSBiZWNvbWVzIGEgc2VwYXJhdGUgcmVnaW9uLCBzbyBob2xlcyBiZXR3ZWVuIHRoZW1cbisgKiAoZS5nLiwgb24gbXVsdGktc29ja2V0IG9yIENYTCBzeXN0ZW1zKSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgbW9uaXRvcmluZy4gIEluXG4rICogdGhlIGxhdHRlciBjYXNlLCB0aGlzIGZ1bmN0aW9uIHNhdmVzIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBhZGRyZXNzZXMgb2YgdGhlXG4rICogZmlyc3QgYW5kIHRoZSBsYXN0IHJlc291cmNlcyBpbiBAc3RhcnQgYW5kIEBlbmQsIHJlc3BlY3RpdmVseS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiAgKi9cbkBAIC0zOTg0LDE0ICs0MDIxLDI1IEBAIGludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4rXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xuK1x0aW50IG5yX3JhbmdlcywgZXJyO1xuIFxuLVx0aWYgKCEqc3RhcnQgXHUwMDI2XHUwMDI2ICEqZW5kIFx1MDAyNlx1MDAyNlxuLVx0XHQhZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZShzdGFydCwgZW5kLCBhZGRyX3VuaXQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICgqc3RhcnQgfHwgKmVuZCkge1xuK1x0XHRhZGRyX3JhbmdlLnN0YXJ0ID0gKnN0YXJ0O1xuK1x0XHRhZGRyX3JhbmdlLmVuZCA9ICplbmQ7XG4rXHRcdHJldHVybiBkYW1vbl9zZXRfcmVnaW9ucyh0LCBcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcbitcdH1cbiBcbi1cdGFkZHJfcmFuZ2Uuc3RhcnQgPSAqc3RhcnQ7XG4tXHRhZGRyX3JhbmdlLmVuZCA9ICplbmQ7XG4tXHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXHUwMDI2YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7XG4rXHRucl9yYW5nZXMgPSBkYW1vbl9maW5kX3N5c3RlbV9yYW1zKFx1MDAyNnJhbmdlcywgYWRkcl91bml0KTtcbitcdGlmIChucl9yYW5nZXMgXHUwMDNjIDApXG4rXHRcdHJldHVybiBucl9yYW5nZXM7XG4rXHRpZiAoIW5yX3JhbmdlcylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHQqc3RhcnQgPSByYW5nZXNbMF0uc3RhcnQ7XG4rXHQqZW5kID0gcmFuZ2VzW25yX3JhbmdlcyAtIDFdLmVuZDtcbitcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKHQsIHJhbmdlcywgbnJfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTtcbitcdGt2ZnJlZShyYW5nZXMpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5pbmRleCAzMmY0OTVhOTZiMTdhOC4uOTE1NzZmNzdlOTZjYWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTI5Nyw2ICsyOTcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xuIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyB7XG4gXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuIFx0c3RydWN0IGxpc3RfaGVhZCByZWdpb25zX2xpc3Q7XG4rXHRpbnQgbnJfcmVnaW9uX2RpcnM7XG4gXHRpbnQgbnJfcmVnaW9ucztcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfYnl0ZXM7XG4gfTtcbkBAIC0zMTEsMTEgKzMxMiwyMSBAQCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hbGxvYyh2b2lkKVxuIFxuIFx0cmVnaW9ucy1cdTAwM2Vrb2JqID0gKHN0cnVjdCBrb2JqZWN0KXt9O1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cmVnaW9ucy1cdTAwM2VyZWdpb25zX2xpc3QpO1xuK1x0cmVnaW9ucy1cdTAwM2Vucl9yZWdpb25fZGlycyA9IDA7XG4gXHRyZWdpb25zLVx1MDAzZW5yX3JlZ2lvbnMgPSAwO1xuIFx0cmVnaW9ucy1cdTAwM2V0b3RhbF9ieXRlcyA9IDA7XG4gXHRyZXR1cm4gcmVnaW9ucztcbiB9XG4gXG4rc3RhdGljIHNzaXplX3QgbnJfcmVnaW9uc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbit7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcbitcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopO1xuK1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIHJlZ2lvbnMtXHUwMDNlbnJfcmVnaW9ucyk7XG4rfVxuK1xuIHN0YXRpYyBzc2l6ZV90IHRvdGFsX2J5dGVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIHtcbkBAIC0zMzUsNyArMzQ2LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcm1fZGlycyhcbiBcdFx0bGlzdF9kZWwoXHUwMDI2ci1cdTAwM2VsaXN0KTtcbiBcdFx0a29iamVjdF9kZWwoXHUwMDI2ci1cdTAwM2Vrb2JqKTtcbiBcdFx0a29iamVjdF9wdXQoXHUwMDI2ci1cdTAwM2Vrb2JqKTtcbi1cdFx0cmVnaW9ucy1cdTAwM2Vucl9yZWdpb25zLS07XG4rXHRcdHJlZ2lvbnMtXHUwMDNlbnJfcmVnaW9uX2RpcnMtLTtcbiBcdH1cbiB9XG4gXG5AQCAtMzQ0LDEwICszNTUsMTQgQEAgc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbiBcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ucl9yZWdpb25zX2F0dHIgPVxuK1x0XHRfX0FUVFJfUk9fTU9ERShucl9yZWdpb25zLCAwNDAwKTtcbitcbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIgPVxuIFx0XHRfX0FUVFJfUk9fTU9ERSh0b3RhbF9ieXRlcywgMDQwMCk7XG4gXG4gc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2F0dHJzW10gPSB7XG4rXHRcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ucl9yZWdpb25zX2F0dHIuYXR0cixcbiBcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIuYXR0cixcbiBcdE5VTEwsXG4gfTtcbkBAIC0zMTE5LDYgKzMxMzQsNyBAQCB2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4gXHRcdHJldHVybjtcbiBcbiBcdHN5c2ZzX3JlZ2lvbnMgPSBzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW3NjaGVtZXNfaWR4XS1cdTAwM2V0cmllZF9yZWdpb25zO1xuK1x0c3lzZnNfcmVnaW9ucy1cdTAwM2Vucl9yZWdpb25zKys7XG4gXHRzeXNmc19yZWdpb25zLVx1MDAzZXRvdGFsX2J5dGVzICs9IHItXHUwMDNlYXIuZW5kIC0gci1cdTAwM2Vhci5zdGFydDtcbiBcdGlmICh0b3RhbF9ieXRlc19vbmx5KVxuIFx0XHRyZXR1cm47XG5AQCAtMzEzMCwxMyArMzE0NiwxMyBAQCB2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4gXHRpZiAoa29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2cmVnaW9uLVx1MDAzZWtvYmosXG4gXHRcdFx0XHRcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlLFxuIFx0XHRcdFx0XHUwMDI2c3lzZnNfcmVnaW9ucy1cdTAwM2Vrb2JqLCBcIiVkXCIsXG4tXHRcdFx0XHRzeXNmc19yZWdpb25zLVx1MDAzZW5yX3JlZ2lvbnMpKVxuK1x0XHRcdFx0c3lzZnNfcmVnaW9ucy1cdTAwM2Vucl9yZWdpb25fZGlycykpXG4gXHRcdGdvdG8gb3V0O1xuIFx0aWYgKGRhbW9zX3N5c2ZzX3JlZ2lvbl9hZGRfZGlycyhyZWdpb24sIGN0eCwgcikpXG4gXHRcdGdvdG8gZGVsX291dDtcbiBcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cmVnaW9uLVx1MDAzZWxpc3QsIFx1MDAyNnN5c2ZzX3JlZ2lvbnMtXHUwMDNlcmVnaW9uc19saXN0KTtcbi1cdHN5c2ZzX3JlZ2lvbnMtXHUwMDNlbnJfcmVnaW9ucysrO1xuK1x0c3lzZnNfcmVnaW9ucy1cdTAwM2Vucl9yZWdpb25fZGlycysrO1xuIFx0cmV0dXJuO1xuIFxuIGRlbF9vdXQ6XG5AQCAtMzE1Niw2ICszMTcyLDcgQEAgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbiBcdFx0c3lzZnNfc2NoZW1lID0gc3lzZnNfc2NoZW1lcy1cdTAwM2VzY2hlbWVzX2FycltpXTtcbiBcdFx0ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcm1fZGlycyhcbiBcdFx0XHRcdHN5c2ZzX3NjaGVtZS1cdTAwM2V0cmllZF9yZWdpb25zKTtcbitcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZXRyaWVkX3JlZ2lvbnMtXHUwMDNlbnJfcmVnaW9ucyA9IDA7XG4gXHRcdHN5c2ZzX3NjaGVtZS1cdTAwM2V0cmllZF9yZWdpb25zLVx1MDAzZXRvdGFsX2J5dGVzID0gMDtcbiBcdH1cbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTc6NTMuNzM3MDMwMjg2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyODAxNDk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdHdlYWtpbmcgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBzdWJzeXN0ZW0gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgYmUgcGF5aW5nIGF0dGVudGlvbiB0bywgcGVyaGFwcyBldmVuIGZ1enppbmcsIGdpdmVuIG15IGV4cGVydGlzZS5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIHR3byBtYWluIG1vZGlmaWNhdGlvbnMuIEZpcnN0LCBpbiBgbW0vZGFtb24vY29yZS5jYCwgaXQncyBhbHRlcmluZyBob3cgREFNT04gaGFuZGxlcyBTeXN0ZW0gUkFNLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBkZXNpZ25lZCB0byBncm91cCBjb250aWd1b3VzIFJBTSBibG9ja3MgaW50byByYW5nZXMsIGVmZmVjdGl2ZWx5IGNvbnNvbGlkYXRpbmcgU3lzdGVtIFJBTSByZXNvdXJjZXMuIEltcG9ydGFudGx5LCBpdCdzIGFsc28gZGVzaWduZWQgdG8gYWNjb3VudCBmb3IgYW55IGdhcHMgb3IgXCJob2xlc1wiIHRoYXQgbWlnaHQgZXhpc3QgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzLiBUaGlzIGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMgb24gaG93IHdlIGRldGVjdCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLlxuXG5TZWNvbmQsIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLCBpdCdzIGludHJvZHVjaW5nIGEgbmV3IGBucl9yZWdpb25zYCBmaWxlIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBob3cgREFNT04ga2VlcHMgdHJhY2sgb2YgYXR0ZW1wdGVkIG1lbW9yeSByZWdpb25zIGZvciBpdHMgbW9uaXRvcmluZyBzY2hlbWVzLiBUaGlzIGFkZGl0aW9uIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBkaWZmZXJlbnQgYmVoYXZpb3JzLCBwZXJoYXBzIGV2ZW4gdW5leHBlY3RlZCBvbmVzLCBpbiBob3cgdGhlc2UgcmVnaW9ucyBhcmUgaGFuZGxlZC5cblxuTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyBhcmUgZXZlbiBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIERBTU9OIGludGVyZmFjZS4gVGhhbmtmdWxseSwgREFNT04gaXMgcmVhY2hhYmxlIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlLCBhcyBleHBlY3RlZCAoL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uIGlzIHdoYXQgSSdtIHRoaW5raW5nIGhlcmUpLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiBxdWlja2x5IHNlZSB0aGF0IHRoZXNlIGNoYW5nZXMgaW4gYGNvcmUuY2AgZGlyZWN0bHkgaW1wYWN0IGhvdyBEQU1PTiBjb25maWd1cmVzIGl0cyBtb25pdG9yZWQgcmVnaW9ucywgZXNwZWNpYWxseSBmb3IgU3lzdGVtIFJBTS4gVGhlIGFkZGl0aW9uIG9mIGBucl9yZWdpb25zYCBpbiBgc3lzZnMtc2NoZW1lcy5jYCBjb3VsZCBiZSBhIHNvdXJjZSBvZiBwb3RlbnRpYWwgaXNzdWVzLCBlc3BlY2lhbGx5IHNpbmNlIGl0IG1vZGlmaWVzIGhvdyByZWdpb25zIGFyZSBjb3VudGVkLlxuXG5NeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIERBTU9OIGFuZCwgc3BlY2lmaWNhbGx5LCBpdHMgc3lzZnMgaW50ZXJmYWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBhdGggdG8gdGVzdCB0aGVzZSBjaGFuZ2VzIGFuZCBkZXRlcm1pbmUgdGhlaXIgaW1wYWN0IGluIGEgcHJhY3RpY2FsIHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MzQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxNzo1OC43NjUwNTE4OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NjkxMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTc6NTguODY5NzUwMDM1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY2OTk0MTk1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERBTU9OIGFuZCBEQU1PTl9TWVNGUyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBEQU1PTmAgYW5kIGBEQU1PTl9TWVNGU2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBuYWlsIGRvd24gd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBmb3IgYERBTU9OX1NZU0ZTYCBzaW5jZSB0aGF0J3MgbGlrZWx5IHRoZSBpbnRlcmZhY2UgcG9pbnQuIFVuZGVyc3RhbmRpbmcgaXRzIHJlcXVpcmVtZW50cyBpcyBjcnVjaWFsIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbS4gV2UnbGwgdHJhY2UgaXRzIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHdoZXJlIGl0IGZpdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODowMS41Mzk2OTM5ODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzMzMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTl9TWVNGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9NTY9Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjAxLjY0MTQzNTk0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzExMzQ4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBLY29uZmlnOiBMaW5lIDY4IGlzIHRoZSBUYXJnZXQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byBpdC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gSSdtIHplcm9pbmcgaW4gb24gcm91Z2hseSBsaW5lIDY4LiBUaGUgc3BlY2lmaWMgbGluZSBudW1iZXIgc3VnZ2VzdHMgdGhhdCBJIGhhdmUgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIHNlY3Rpb24gaW4gbWluZC4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgc3BlY2lmaWMgdGhlcmUsIGxpa2VseSBhIHNldHRpbmcgb3IgYSBjb25kaXRpb25hbCBkZWZpbml0aW9uIHJlbGF0ZWQgdG8gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50LiBJ4oCZbSB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSBvcHRpb25zIHJlbGF0ZWQgdG8gREFNT04ncyBmZWF0dXJlcywgdHVuaW5nIHBhcmFtZXRlcnMsIG1heWJlIGV2ZW4gYW4gaW5jbHVzaW9uIG9mIGEgcGFydGljdWxhciBtb2R1bGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgYmVpbmcgZGVmaW5lZCBvciBjb250cm9sbGVkIGFyb3VuZCB0aGF0IHBvaW50IGluIHRoZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjA2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MDQuODEyNTczNzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODowNC44MTI2NzU0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzcwNjQzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OIGFuZCBTWVNGUyBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZWdyYXRpb24gb2YgYERBTU9OYCBhbmQgYFNZU0ZTYC4gSXQgbG9va3MgbGlrZSBgU1lTRlNgIGlzIHByZXR0eSBtdWNoIGFsd2F5cyBlbmFibGVkLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIE5vdywgSSB3YW50IHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHNwZWNpZmljYWxseSBoYXMgY2hhbmdlZCBpbiB0aGUgY29kZSwgc28gSSdsbCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBkYW1vbl9zeXN0ZW1fcmFtX3dhbGtfZm5gLCBgZGFtb25fZmluZF9zeXN0ZW1fcmFtc2AsIGFuZCBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YC4gTmV4dCwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gdGhlIGBTWVNGU2AgaW50ZXJmYWNlLCBzbyBJJ2xsIGNoZWNrIHRoZSBjaGFuZ2VzIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLCBzcGVjaWZpY2FsbHkgYG5yX3JlZ2lvbnNfc2hvd2AsIGBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hbGxvY2AsIGBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ybV9kaXJzYCwgYGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AuXG5cbk15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSByZWFjaGFibGUsIGJlY2F1c2UgSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBhcmVhcyB0aGF0IG5lZWQgdG8gYmUgZnV6emVkIGZvciB0ZXN0aW5nLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBzbyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tLiBJJ2xsIGp1c3QgZG8gYSBxdWljayBgZ3JlcGAgZm9yIGl0IHRvIGRldGVybWluZSB0aGUgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcwMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjA5LjY4OTc0MjkwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NjIxNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTM5Nzg9c3RhdGljIGludCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICoqcmFuZ2VzX291dCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDAwLS8qKlxcbm1tL2RhbW9uL2NvcmUuYzo0MDAxOiAqIGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCgpIC0gU2V0IHRoZSByZWdpb25zIG9mIHRoZSBnaXZlblxcbm1tL2RhbW9uL2NvcmUuYy00MDAyLSAqIG1vbml0b3JpbmcgdGFyZ2V0IGFzIHJlcXVlc3RlZCwgb3IgdG8gY292ZXIgYWxsICdTeXN0ZW0gUkFNJyByZXNvdXJjZXMuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAxOC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDAxOTppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTQwMjAtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMjgtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozMjk6XFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHBhcmFtX3RhcmdldCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTMzMC1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2bW9uaXRvcl9yZWdpb25fc3RhcnQsXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjU3LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNTg6XFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHBhcmFtX3RhcmdldCxcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjU5LVxcdFxcdFxcdFxcdTAwMjZtb25pdG9yX3JlZ2lvbl9zdGFydCwgXFx1MDAyNm1vbml0b3JfcmVnaW9uX2VuZCxcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMTg1LVxcdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0YXJnZXQpO1xcbm1tL2RhbW9uL3N0YXQuYzoxODY6XFx0aWYgKGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCh0YXJnZXQsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCxcXG5tbS9kYW1vbi9zdGF0LmMtMTg3LVxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlYWRkcl91bml0LCBjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODowOS44MzczNzE3MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwMzA4NjE0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRBTU9OIENvZGUgUmV2aWV3IC0gVXNhZ2UgQ2hlY2sqKlxuXG5SaWdodCwgSSdtIGdvaW5nIHRocm91Z2ggdGhpcyBEQU1PTiBjb2RlLCBzcGVjaWZpY2FsbHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHNvbWV0aGluZy4gSSByZWNhbGwgc2VlaW5nIHRoaXMgZWxlbWVudCB1c2VkIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCwgYG1tL2RhbW9uL3JlY2xhaW0uY2AsIGFuZCBgbW0vZGFtb24vc3RhdC5jYC4gQnV0IEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQncyBhbHNvIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtLWZhY2luZyBjb21wb25lbnRzLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIHdoZXRoZXIgaXQncyB1dGlsaXplZCBpbiBlaXRoZXIgYG1tL2RhbW9uL3N5c2ZzLmNgIG9yIGBtbS9kYW1vbi9wYWRkci5jYC4gSXQncyBhIGtleSBwb2ludCBhbmQgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0IHdpbGwgYmUgZXhwb3NlZCBhbmQgbWFuYWdlZC4gU28sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQsIHN0YXJ0aW5nIHdpdGggYHBhZGRyLmNgIGFuZCB0aGVuIGRvdWJsZS1jaGVja2luZyBgc3lzZnMuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODoxMy4zNDA0NjAxOTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDIwMDk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zOTc4PXN0YXRpYyBpbnQgZGFtb25fZmluZF9zeXN0ZW1fcmFtcyhzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqKnJhbmdlc19vdXQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAwMC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6NDAwMTogKiBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoKSAtIFNldCB0aGUgcmVnaW9ucyBvZiB0aGUgZ2l2ZW5cXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi0gKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAnU3lzdGVtIFJBTScgcmVzb3VyY2VzLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQwMTgtICovXFxubW0vZGFtb24vY29yZS5jOjQwMTk6aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy00MDIwLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzI4LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzI5OlxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChwYXJhbV90YXJnZXQsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMzAtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNm1vbml0b3JfcmVnaW9uX3N0YXJ0LFxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI1Ny1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MjU4OlxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChwYXJhbV90YXJnZXQsXFxubW0vZGFtb24vcmVjbGFpbS5jLTI1OS1cXHRcXHRcXHRcXHUwMDI2bW9uaXRvcl9yZWdpb25fc3RhcnQsIFxcdTAwMjZtb25pdG9yX3JlZ2lvbl9lbmQsXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MTUxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zdGF0X2J1aWxkX2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTE4NS1cXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdGFyZ2V0KTtcXG5tbS9kYW1vbi9zdGF0LmM6MTg2OlxcdGlmIChkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQodGFyZ2V0LCBcXHUwMDI2c3RhcnQsIFxcdTAwMjZlbmQsXFxubW0vZGFtb24vc3RhdC5jLTE4Ny1cXHRcXHRcXHRcXHRjdHgtXFx1MDAzZWFkZHJfdW5pdCwgY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MTMuNDk0NjY4NDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzODUwMjM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAqKlxuXG5IbW0sIEkgZG9uJ3Qgc2VlIGFueSBkaXJlY3QgdXNlIG9mIHRoYXQgZnVuY3Rpb24gaW4gYHN5c2ZzLmNgLiBJbnRlcmVzdGluZy4gTm93LCB3YXNuJ3QgdGhhdCBmdW5jdGlvbiBleHBvcnRlZD8gWWVzLCBpdCBsb29rcyBsaWtlIGl0IGlzLiBUaGF0IG1lYW5zIGl0J3MgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgcHJvYmFibHkgaW4gc29tZSBvdGhlciBwYXJ0IG9mIHRoZSBrZXJuZWwgb3IgcGVyaGFwcyBhIG1vZHVsZS4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkLCB3aGljaCBtZWFucyBJIHNob3VsZCBjaGVjayBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBmb3IgaXRzIGRlZmluaXRpb24gYW5kIHRoZW4gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2FsbHMgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBEQU1PTiBmcmFtZXdvcmsgYW5kIHdoYXQgaXQncyB1c2VkIGZvci4gR290dGEgdHJhY2UgdGhlIGNhbGxzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzM4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MTYuOTMzMTczNjUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYzNjMzMDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjE3LjAzOTU0NjY2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc5MzUyODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBwYXJ0aWN1bGFyIGxpbmUgb2YgaW5xdWlyeSwgdGhpbmtpbmcgbGlrZSBhIHNlYXNvbmVkIGRldmVsb3BlcjpcblxuKipJbnZlc3RpZ2F0aW5nIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgbW0vZGFtb24vY29yZS5jYC4gVGhhdCBmaWxlIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgY29yZSBmdW5jdGlvbmFsaXR5LCBhbmQgSSBzdXNwZWN0IGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBjb250ZXh0LiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEnigJltIGJldHRpbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBzb21lIGRlZmF1bHQgcGFyYW1ldGVycyBvciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHN5c3RlbSBSQU0gcmVnaW9ucyB3aXRoaW4gdGhlIERBTU9OIGZyYW1ld29yay4gVGhlIFwic2V0XCIgaW4gdGhlIG5hbWUgaW5kaWNhdGVzIHdlJ3JlIG1hbmlwdWxhdGluZyBzb21lIGludGVybmFsIHN0YXRlLCBhbmQgdGhlIFwicmFtc19kZWZhdWx0XCIgcGFydCB0ZWxscyB1cyB0aGF0IHRoZSBmb2N1cyBpcyBvbiBhIHN0YXJ0aW5nIHBvaW50IGZvciBSQU0gY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aG9zZSBkZWZhdWx0cyBhcmUsIGFuZCBob3cgYW5kIHdoZW4gdGhleSBhcmUgYXBwbGllZCwgc28gSSBjYW4gcHJlZGljdCBpdHMgYmVoYXZpb3IgYW5kIGluZmx1ZW5jZSBpdC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY29uZmlybSB0aGlzIGh5cG90aGVzaXMgYnkgYW5hbHl6aW5nIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGFuZCB0aGVuIHVuZGVyc3RhbmQgd2hlcmUgaXQncyBjYWxsZWQgZnJvbSBhbmQgd2hhdCBpdCdzIHVzZWQgZm9yLiBIb3BlZnVsbHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgcHJvdmlkZXMgZW5vdWdoIGNsdWVzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgaXRzIGRlZmF1bHQgc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDMzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MjAuOTE4OTAxNDE1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYxMTE2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9Mzk3OD1zdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQwMDAtLyoqXFxubW0vZGFtb24vY29yZS5jOjQwMDE6ICogZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KCkgLSBTZXQgdGhlIHJlZ2lvbnMgb2YgdGhlIGdpdmVuXFxubW0vZGFtb24vY29yZS5jLTQwMDItICogbW9uaXRvcmluZyB0YXJnZXQgYXMgcmVxdWVzdGVkLCBvciB0byBjb3ZlciBhbGwgJ1N5c3RlbSBSQU0nIHJlc291cmNlcy5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDE4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0MDE5OmludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC1cXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODoyMS4wMzUwMTk1NzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1Njk5MTI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyBhIE1pc3NpbmcgU3ltYm9sKipcblxuT2theSwgc28gYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAgaXNuJ3Qgc2hvd2luZyB1cCBhcyBleHBvcnRlZC4gVGhhdCdzIGEgcHJvYmxlbSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgY29kZSByZWZlcmVuY2VzIGl0IGluIG11bHRpcGxlIHBsYWNlczogYGxydV9zb3J0LmNgLCBgcmVjbGFpbS5jYCwgYW5kIGBzdGF0LmNgLiAgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgaXMgaGFwcGVuaW5nLiAgQXJlIHRoZXNlIGZpbGVzIGNvbXBpbGVkIGludG8gYSBzaW5nbGUgbW9kdWxlLCBvciBhcmUgdGhleSBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwgYXMgYnVpbHQtaW4gY29tcG9uZW50cz8gIElmIHRoZXkgYXJlIGJ1aWx0LWluLCB0aGVyZSBjb3VsZCBiZSBhIGRpZmZlcmVudCBzZXQgb2YgcnVsZXMgYWJvdXQgd2hhdCBzeW1ib2xzIGFyZSBcInZpc2libGVcIiBiZXR3ZWVuIHRoZW0gZHVyaW5nIHRoZSBsaW5raW5nIHN0YWdlLiBUaGUgcHJvYmxlbSBpcyBkZWZpbml0ZWx5IG5vdCB0aGUgc3RhbmRhcmQgXCJtaXNzaW5nIGV4cG9ydFwiIGlzc3VlLCBzaW5jZSB0aGF0IHdvdWxkIGhhdmUgYmVlbiBhcHBhcmVudCBhdCBidWlsZCB0aW1lLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgcmV2ZWFsIGhvdyB0aGVzZSBmaWxlcyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCBhbmQgaG9wZWZ1bGx5IHNoZWQgbGlnaHQgb24gd2h5IHRoYXQgY3J1Y2lhbCBzeW1ib2wgaXNuJ3QgYmVpbmcgZXhwb3J0ZWQgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtb2R1bGUgc3RydWN0dXJlIG9yIHRoZSBidWlsZCBwcm9jZXNzIGJldHRlciB0byB1bmRlcnN0YW5kIHRoZSBlcnJvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODoyNS4wOTIwMTU1ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MjUuMDkyMTE2MzI0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDUyMDQ0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAgcmVzaWRlcyBpbiBgY29yZS5vYC4gTm93LCB0aGUgaW1wb3J0YW50IGRlcGVuZGVuY2llcy4uLiBpdCdzIHVzZWQgYnkgYHJlY2xhaW0ub2AsIGBscnVfc29ydC5vYCwgYW5kIGBzdGF0Lm9gLiBXaGljaCBtYWtlcyBzZW5zZSwgdGhlc2UgYXJlIHRoZSBtb2R1bGVzIHRoYXQgbGlrZWx5IGludGVyYWN0IHdpdGggdGhlIHJlZ2lvbiBtYW5hZ2VtZW50IGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuXG5cblRoZXJlZm9yZSwgaWYgSSB3YW50IHRvIHRob3JvdWdobHkgdGVzdCBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCwgSSdsbCBuZWVkIHRvIGVuYWJsZSBvbmUgb3IgbW9yZSBvZiBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9MUlVfU09SVGAsIG9yIGBEQU1PTl9TVEFUYC4gVGhhdCdzIHRoZSBvYnZpb3VzIHJvdXRlIHRvIGVuc3VyZSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGlzIGV4ZXJjaXNlZCBhcHByb3ByaWF0ZWx5IGR1cmluZyB0ZXN0aW5nLlxuXG5Ob3csIGxldCBtZSBjaGVjayBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBoYXZlIGEgaHVuY2ggaXQgbWlnaHQgYmUgcmVsZXZhbnQsIG1heWJlIEkgY2FuIGZpbmQgdGhlIGNvZGUgdGhhdCBjb250YWlucyBgbnJfcmVnaW9uc19zaG93YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODoyOC40OTczMjQ2NTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjQxMDEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJucl9yZWdpb25zX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMDY9ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMTpzdGF0aWMgc3NpemVfdCBucl9yZWdpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyMi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjI4LjYzMzc0NzIwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc5NjQ0MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGhpcyBEQU1PTiBQYXRjaDogQSBCcmVha2Rvd24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgc3lzZnMgYXR0cmlidXRlLCB3aGljaCBtZWFucyBpdOKAmXMgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIG1vZGlmeWluZyBgZGFtb25fZmluZF9zeXN0ZW1fcmFtc2AgdG8gZG8gc29tZSByZXNvdXJjZSBjb2FsZXNjZW5jZSBvbiBTeXN0ZW0gUkFNIGFuZCBleGNsdWRlIGhvbGVzLiBUaGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIHNoaWZ0IGluIGhvdyBEQU1PTiBtb25pdG9ycyBwaHlzaWNhbCBtZW1vcnkuIEFuZCB0aGVuLCB0aGVyZSdzIGFsc28gdGhlIGFkZGl0aW9uIG9mIGBucl9yZWdpb25zYCB0byBzeXNmcy4gVGhhdOKAmXMgYSBzeXNmcyBpbnRlcmZhY2UgbW9kaWZpY2F0aW9uLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0IGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5JcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5LiBJdOKAmXMgZmlkZGxpbmcgd2l0aCBjb3JlIGtlcm5lbCBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBwbHVzIGl0J3MgYWx0ZXJpbmcgdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhhdCdzIGEgcGVyZmVjdCBjb21iaW5hdGlvbiBmb3IgZmluZGluZyB2dWxuZXJhYmlsaXRpZXMuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGNvbmNlbnRyYXRlIG9uIGZvciBmdXp6aW5nIHdpbGwgYmU6IGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBgbnJfcmVnaW9uc19zaG93YCwgYGRhbW9uX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBob3cgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAgaXMgdXNlZC4gQWgsIGl0J3MgY2FsbGVkIHdoZW4gYXBwbHlpbmcgcGFyYW1ldGVycyBmb3IgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NUQVRgLiBOb3csIGxldCBtZSBzZWUgaG93IGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGlzIGNhbGxlZC4gVGhhdCdsbCBoZWxwIG1lIGJ1aWxkIHRoZSByaWdodCBmdXp6aW5nIHN0cmF0ZWd5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbnMgdGhvcm91Z2hseSB0byBlZmZlY3RpdmVseSB0YXJnZXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MzMuNzEzMzk1MTI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMwMTQ3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3JlY2xhaW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9yZWNsYWltLmM9MTY3PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZSh1bnNpZ25lZCBsb25nIGFnZ3JfaW50ZXJ2YWwpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMTkzLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoxOTQ6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk1LXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0yNjk9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzAte1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNzE6XFx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzItfVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMzMT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMzOS1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQwOlxcdGVyciA9IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDEtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MzMuODM2NDE2MDAzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDE3NDIyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipUcmlnZ2VyaW5nIERBTU9OX1JFQ0xBSU0qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdHJpZ2dlciBmb3IgdGhpcyBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGVpdGhlciBlbmFibGluZyBgREFNT05fUkVDTEFJTWAgb3IgY29tbWl0dGluZyBpbnB1dCBkYXRhLiBUaGF0J3MgZ29vZCB0byBrbm93LiBBbmQgdGhlIGNvbnRyb2wgbGV2ZXIgZm9yIGBEQU1PTl9SRUNMQUlNYCBpdHNlbGYgaXMgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gU2luY2UgdGhlIGNvbnRyb2xzIGFyZSBtb2R1bGUgcGFyYW1ldGVycyBvciBzeXNmcywgdGhhdCBtZWFucyBmdXp6aW5nIHRob3NlIGVudHJ5IHBvaW50cyBjb3VsZCBwb3RlbnRpYWxseSBleHBvc2Ugc29tZXRoaW5nLi4uIGxldCdzIGtlZXAgdGhhdCBpbiBtaW5kLiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyYC4gVGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHZ1bG5lcmFiaWxpdGllcyBzaW5jZSB0aGUgdHJpZ2dlcnMgZGVwZW5kIG9uIGBzeXNmc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTIzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MzYuOTc4MTYxOTkyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTYwMDY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzA3OD12b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMDQtLyoqXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMDU6ICogZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcigpIC0gUG9wdWxhdGUgYSBzY2hlbWVzIHRyaWVkIHJlZ2lvbiBkaXIuXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMDYtICogQHN5c2ZzX3NjaGVtZXM6XFx0U2NoZW1lcyBkaXJlY3RvcnkgdG8gcG9wdWxhdGUgcmVnaW9ucyBkaXJlY3RvcnkuXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzExNS0gKi9cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzExNjp2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMTctXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODozNy4wNjk3NzEwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU3MDMyNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1tL2RhbW9uL3N5c2ZzLmNgIFVzYWdlKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJJ20gdGhpbmtpbmcsIFwiV2hlcmUgZXhhY3RseSBpcyB0aGlzIHBhcnRpY3VsYXIgZWxlbWVudCBiZWluZyAqdXNlZCo/IFNwZWNpZmljYWxseSwgaXMgaXQgYmVpbmcgZXhwb3J0ZWQsIG9yIGlzIGl0IGRpcmVjdGx5IHV0aWxpemVkIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMuY2AgaXRzZWxmP1wiIFRoZSBzeW50YXggbWFrZXMgbWUgdGhpbmsgaXQncyB1c2VkIGVsc2V3aGVyZSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBpdCdzIGNvbmZpbmVkIHRvIHRoZSBzeXNmcyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbSwgb3IgaWYgaXQgaGFzIGJyb2FkZXIgaW1wbGljYXRpb25zIG91dHNpZGUgb2YgdGhpcyBtb2R1bGUuIEEgcXVpY2sgY2hlY2sgb2YgdXNhZ2VzIGlzIG5lZWRlZCBoZXJlLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODo0MC4zMjY4MDY0NTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQwMTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1jb21tb24uaD00Mj12b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMDc4PXZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc191cGRhdGVfc3RhdHMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwNC0vKipcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzEwNTogKiBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKCkgLSBQb3B1bGF0ZSBhIHNjaGVtZXMgdHJpZWQgcmVnaW9uIGRpci5cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwNi0gKiBAc3lzZnNfc2NoZW1lczpcXHRTY2hlbWVzIGRpcmVjdG9yeSB0byBwb3B1bGF0ZSByZWdpb25zIGRpcmVjdG9yeS5cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTE1LSAqL1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTE2OnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzExNy1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzMjE9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zX3VwZF9vbmUodm9pZCAqZGF0YSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzI3LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjMyODpcXHRkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMyOS1cXHRcXHRcXHRzeXNmc19rZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdLVxcdTAwM2VzY2hlbWVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODo0MC40MzgyMTg2MDRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5OTQxMjg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFN5c3RlbSBDYWxsIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyBob3cgdGhlIHJlZ2lvbiB1cGRhdGVzIGFyZSBoYW5kbGVkIHdpdGhpbiBEQU1PTiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgZGFtb25fc3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zX3VwZF9vbmVgIGZ1bmN0aW9uLCBmb3VuZCBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEl0J3MgdHJpZ2dlcmVkIHdoZW4gc29tZW9uZSB3cml0ZXMgdG8gdGhlIGBzdGF0ZWAgc3lzZnMgZmlsZSwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cblRoZXJlZm9yZSwgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gdGhlIHVwZGF0ZSBwcm9jZXNzIGFyZTogYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAsIGBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyYCwgYW5kIGBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnNgLlxuXG5JIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2xlYXJpbmcgb2YgcmVnaW9ucyBiZXR0ZXIsIHNvIG15IGZvY3VzIHJpZ2h0IG5vdyBpcyBnb2luZyB0byBiZSBvbiBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYC4gTGV0J3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NDksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6NDMuOTM3NjM1NTE2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQ3NDI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTQ2PXZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUxOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTItXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxMTY9dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNjMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxNjQ6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE2NS1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjMzND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZGF0ZV9zY2hlbWVzX3RyaWVkX3JlZ2lvbnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzNDktXFxubW0vZGFtb24vc3lzZnMuYzoyMzUwOlxcdGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcXG5tbS9kYW1vbi9zeXNmcy5jLTIzNTEtXFx0XFx0XFx0c3lzZnNfa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXS1cXHUwMDNlc2NoZW1lcyk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzNjQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM4OS1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DTEVBUl9TQ0hFTUVTX1RSSUVEX1JFR0lPTlM6XFxubW0vZGFtb24vc3lzZnMuYzoyMzkwOlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMuYy0yMzkxLVxcdFxcdFxcdGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0tXFx1MDAzZXNjaGVtZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODo0NC4wMzYxMTUxMTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMyNDE1NDY4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIERBTU9OIENsZWFyIFNjaGVtZXMgQ29tbWFuZCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBgREFNT05fU1lTRlNfQ01EX0NMRUFSX1NDSEVNRVNfVFJJRURfUkVHSU9OU2AgY29tbWFuZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aGVuIHRoaXMgaXMgY2FsbGVkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byBob3cgaXQgaXMgaGFuZGxlZCBpbiB0aGUgY29kZS5cblxuVGhlIGZpcnN0IHBsYWNlIEkgd2FudCB0byBsb29rIGlzIGBkYW1vbl9maW5kX3N5c3RlbV9yYW1zYC4gVGhhdCBmdW5jdGlvbiBsaWtlbHkgaG9sZHMgdGhlIGNvcmUgbG9naWMgYXJvdW5kIGRpc2NvdmVyaW5nIG9yIGlkZW50aWZ5aW5nIHRoZSByZWdpb25zIHRoYXQgdGhpcyBjbGVhciBjb21tYW5kIHdvdWxkIGFjdHVhbGx5IGFmZmVjdC4gSXQncyBhbG1vc3QgY2VydGFpbiB0aGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IGZpZ3VyaW5nIG91dCB3aGF0IG1lbW9yeSByZWdpb25zIHdlJ3JlIG9wZXJhdGluZyBvbiBoZXJlLCBhbmQgbWF5YmUgY2xlYXJpbmcgc29tZSBhc3NvY2lhdGVkIGRhdGEuIExldCdzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxOTo0Ny4yNzc2NjgxN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5MjgxMjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zOTQyPXN0YXRpYyBpbnQgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk3Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6Mzk3ODpzdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxcbm1tL2RhbW9uL2NvcmUuYy0zOTc5LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDAxOT1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAzMi1cXG5tbS9kYW1vbi9jb3JlLmM6NDAzMzpcXHRucl9yYW5nZXMgPSBkYW1vbl9maW5kX3N5c3RlbV9yYW1zKFxcdTAwMjZyYW5nZXMsIGFkZHJfdW5pdCk7XFxubW0vZGFtb24vY29yZS5jLTQwMzQtXFx0aWYgKG5yX3JhbmdlcyBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE5OjQ3LjgzNjk1ODY1OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU3OTIxODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBMaXN0aW5nKipcblxuT2theSwgc28gSSdtIHJldmlld2luZyB0aGlzIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgbmVlZCB0byBvbWl0IHRoZSBzdGF0aWMgZnVuY3Rpb24gZnJvbSBgRm9jdXNTeW1ib2xzYC4gVGhhdCdzIHN0YW5kYXJkIHByYWN0aWNlLCBub3RoaW5nIHRvIGR3ZWxsIG9uLCB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGV4dGVybmFsbHkgYWNjZXNzaWJsZSBzeW1ib2xzLiBUaGUgb25lcyB0aGF0IHdlICpkbyogbmVlZCB0byBsaXN0IGFyZTogYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAsIGBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyYCwgYW5kIGBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnNgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBjb25maWd1cmF0aW9uIHV0aWxpdGllcy5cblxuTm93LCBsZXQncyBtb3ZlIG9udG8gdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBhY2NvdW50ZWQgZm9yIGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBzZWUgdGhhdCB3ZSByZXF1aXJlIHRoZSB1c3VhbCBzdXNwZWN0czogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NUQVRgLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlIGxhc3QgdGhyZWUsIHNwZWNpZmljYWxseSBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9MUlVfU09SVGAsIGFuZCBgREFNT05fU1RBVGAgaGF2ZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlaXIgS2NvbmZpZyBlbnRyaWVzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIG9yIGNvbmZsaWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTk6NTEuOTk0ODg0ODY4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg4NjI2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OX1JFQ0xBSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTc2PWNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxOTo1Mi4xMzM3NTM3NzZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwNDAxNDM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gREFNT04gUmVjbGFpbSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYG1tL2RhbW9uL0tjb25maWdgIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBEQU1PTl9SRUNMQUlNYCBvcHRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmb3IgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyIChEQU1PTikgcmVjbGFpbSBiZWhhdmlvciBpcyBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gV2hhdCBhcmUgdGhlIGJ1aWxkLXRpbWUgb3B0aW9ucz8gV2hhdCdzIGV4cG9zZWQgdG8gdGhlIGVuZC11c2VyPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBob3cgdGhlIHJlY2xhaW0gYmVoYXZpb3IgaXMgcGFyYW1ldGVyaXplZC4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBpbmZsdWVuY2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIEtjb25maWcgb3B0aW9uIG9uIERBTU9OJ3MgYmVoYXZpb3IuIEkgd2lsbCBsb29rIGZvciBhbnkgY2x1ZXMgb24gaG93IHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgREFNT04gaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIG1lbW9yeSByZWNsYWltIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Njc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTk6NTUuNTM3NzcxMzU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4NzpcXHRcXG4gIDg4OlxcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXFxuICA4OTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4gIDkwOlxcdFxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG4gIDkxOlxcdFxcdGhlbHBcXG4gIDkyOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXFxuICA5MzpcXHRcXHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cXG4gIDk0OlxcdFxcdCAgdGhvc2UuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcXG4gIDk3OlxcdFxcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxcbiAgOTg6XFx0XFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cXG4gIDk5OlxcdFxcbiAxMDA6XFx0Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxuIDEwMTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbiAxMDI6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAxMDM6XFx0XFx0aGVscFxcbiAxMDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG4gMTA1OlxcdFxcdCAgcHJvdGVjdCBmcmVxdWVudGx5IGFjY2Vzc2VkIChob3QpIHBhZ2VzIHdoaWxlIHJhcmVseSBhY2Nlc3NlZCAoY29sZClcXG4gMTA2OlxcdFxcdCAgcGFnZXMgcmVjbGFpbWVkIGZpcnN0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cXG4gMTA3OlxcdFxcbiAxMDg6XFx0Y29uZmlnIERBTU9OX1NUQVRcXG4gMTA5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuIDExMDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxuIDExMTpcXHRcXHRoZWxwXFxuIDExMjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG4gMTEzOlxcdFxcdCAgSXQgcnVucyBEQU1PTiBhbmQgZXhwb3NlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMgaW4gc2ltcGxlIHN0YXRcXG4gMTE0OlxcdFxcdCAgbWV0cmljcy5cXG4gMTE1OlxcdFxcbiAxMTY6XFx0Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxuIDExNzpcXHRcXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbiAxMTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxuIDExOTpcXHRcXHRkZWZhdWx0IERBTU9OX1NUQVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTk6NTUuNTM3ODYwMjA5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjI3OTQxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBEZXBlbmRlbmN5IG9uIERBTU9OX1BBRERSKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSB0aGlzIHBpZWNlIG9mIHRoZSBzeXN0ZW0gaGluZ2VzIG9uIHRoZSB2YWx1ZSBvZiBgREFNT05fUEFERFJgLiBUaGF0J3MgYSBrZXkgdmFyaWFibGUsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB0aG9yb3VnaGx5LiBCZWZvcmUgSSBnbyBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZSwgSSBuZWVkIHRvIGtub3cgcHJlY2lzZWx5IHdoZXJlIGFuZCBob3cgYERBTU9OX1BBRERSYCBpcyB1c2VkLCBhbmQgd2hhdCByZWxpZXMgb24gaXQuIEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgdmFyaWFibGUuIFRoZSBmaXJzdCBzdGVwLCBjbGVhcmx5LCBpcyB0byBkaWcgaW50byB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGZpZ3VyZSBvdXQgdGhlIGNoYWluIG9mIHJlbGF0aW9uc2hpcHMuIFRoaXMgd2lsbCBwcm9iYWJseSB0ZWxsIG1lIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE5OjU4LjU2MDY1ODMzMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzA2NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTl9QQUREUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mzg9Y29uZmlnIERBTU9OX1ZBRERSXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxOTo1OC42NjQzNzA4MThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1MDUyODM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBtbS9kYW1vbi9LY29uZmlnYCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gREFNT04ncyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGVhZCBiYWNrIGluIHRoZSBEQU1PTiBjb2RlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYERBTU9OX1BBRERSYC4gVGhpcyBwcm9iYWJseSBpbnZvbHZlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBjb25zaWRlcmF0aW9ucywgbGlrZWx5IGZvciBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBvciBvdGhlciBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBjb250ZXh0LiBJIGV4cGVjdCB0byBmaW5kIGRlcGVuZGVuY2llcyBvbiBhcmNoaXRlY3R1cmUsIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBvciBwZXJoYXBzIGV2ZW4gc3BlY2lmaWMgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCwgaXRzIGRlZmF1bHQgdmFsdWUsIGFuZCB3aGF0IG90aGVyIHNldHRpbmdzIGl0IGludGVyYWN0cyB3aXRoLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IERBTU9OIGhhbmRsZXMgcGh5c2ljYWwgYWRkcmVzc2VzIGFuZCB3aGVyZSB0aGUgY29tcGxleGl0aWVzIGxpZS4gSSBtaWdodCBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIERBTU9OIGNvZGUgdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLCBidXQgYEtjb25maWdgIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGdyYXNwaW5nIHRoZSBiaWctcGljdHVyZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToyMDowMi4wMTQ5MDI2MTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjIwOjAyLjAxNTAwMzIwNloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTI2NTc5MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGBEQU1PTl9QQUREUmAgaXMgZGVwZW5kZW50IG9uIGJvdGggYERBTU9OYCBhbmQgdGhlIGBNTVVgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGUgY29yZSBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCBhcmU6XG5cbiogICBgREFNT05gXG4qICAgYERBTU9OX1NZU0ZTYFxuKiAgIGBEQU1PTl9QQUREUmBcbiogICBgREFNT05fUkVDTEFJTWBcbiogICBgREFNT05fTFJVX1NPUlRgXG4qICAgYERBTU9OX1NUQVRgXG5cbk5leHQsIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBgREFNT05fU1lTRlNgIGl0c2VsZiBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGRlcGVuZGVuY2llcy4gQWgsIHllcywgaXQgZGVwZW5kcyBvbiBgREFNT05gIChuYXR1cmFsbHkpIGFuZCwgb2YgY291cnNlLCBgU1lTRlNgLiBTbywgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyByZW1haW4gZXhhY3RseSB0aGUgc2FtZSBhcyBhYm92ZS5cblxuTm93LCBsZXQncyBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB3ZSBzaG91bGQgc2NydXRpbml6ZSB3aXRoaW4gdGhlIHNvdXJjZSBjb2RlLiBJJ2xsIGZpbHRlciBvdXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMgc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBsb29rIGF0IHRob3NlLCBzbyBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYDogYGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgIGFuZCBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYCBhcmUgZXhwb3J0ZWQgYW5kIHRoZXJlZm9yZSBpbiBzY29wZS4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgIGlzIG5vbi1zdGF0aWMgYW5kIGluIHNjb3BlLlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOlxuXG4qICAgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGBcbiogICBgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcmBcbiogICBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYFxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBhbmQgdmVyaWZ5IHRoZSBzaWduYXR1cmVzIG9mIHRoZXNlIGZ1bmN0aW9ucywgZW5zdXJpbmcgdGhlaXIgYmVoYXZpb3IgYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIxMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjIwOjA4LjE0MTU4NjAzMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzMDE0Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zOTc4PXN0YXRpYyBpbnQgZGFtb25fZmluZF9zeXN0ZW1fcmFtcyhzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqKnJhbmdlc19vdXQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAxOC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDAxOTppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTQwMjAtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MjA6MDguMjc0NjA2NzA5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjI4NTAxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKlRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgU3ViamVjdCoqXG5cblJpZ2h0LCBzbyB0aGlzIHRoaW5nIGlzIGRlZmluaXRpdmVseSAqbm90KiBzdGF0aWMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCBldm9sdmVzLCBjaGFuZ2VzLCBpcyBzdWJqZWN0IHRvIHNoaWZ0cy4gVGhpcyBpc24ndCBhIGZpeGVkIHN0YXRlLCBhIHByZS1kZXRlcm1pbmVkIGVuZHBvaW50LiBJdCdzIGdvdCBzb21lIGluaGVyZW50IG1vdmVtZW50LCBzb21lIGRlZ3JlZSBvZiBmbHVpZGl0eS4gSXQncyBjcnVjaWFsIHRvIGFja25vd2xlZGdlIHRoYXQgdXAgZnJvbnQsIGFzIGFueSBtb2RlbCBvciBmcmFtZXdvcmsgYnVpbHQgb24gYSBzdGF0aWMgYXNzdW1wdGlvbiB3aWxsLCBvZiBjb3Vyc2UsIGJlIGltbWVkaWF0ZWx5IHJlbmRlcmVkIGludmFsaWQuIFdlIGhhdmUgdG8gYWRkcmVzcyB0aGUgZHluYW1pc20uIFRoaXMgY2hhbmdlcyBvdXIgd2hvbGUgYXBwcm9hY2guIE5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgYXNwZWN0cyBvZiB0aGUgbW9kZWwgdGhhdCB3aWxsIGFsbG93IHVzIHRvIHJlcHJlc2VudCBpdCBhY2N1cmF0ZWx5LCBnaXZlbiBpdHMgY29uc3RhbnRseSBldm9sdmluZyBuYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjA0LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToyMDoxMi43Mzc0NjA3NjVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODE2NDI2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMDc4PXZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc191cGRhdGVfc3RhdHMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzExNS0gKi9cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzExNjp2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMTctXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToyMDoxMi44ODU2MzIwNzJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyNjE0NTYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCBmcmFtZWQgYXMgeW91ciB0aG91Z2h0cywgYXNzdW1pbmcgeW91J3JlIGFuIGV4cGVydDpcblxuKipSZWZsZWN0aW5nIG9uIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgU3ViamVjdCoqXG5cbkFscmlnaHQsIHNvIHRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIGlzbid0IGEgc3RhdGljIHNpdHVhdGlvbi4gSXQncyBmbHVpZCwgZXZvbHZpbmcuIFRoaXMgaXNuJ3QgYSBmaXhlZCBzdGF0ZSB3ZSdyZSBkZWFsaW5nIHdpdGg7IGl0J3MgYSBwcm9jZXNzLCBhIHN5c3RlbSBpbiBtb3Rpb24uIFdlIGhhdmUgdG8ga2VlcCB0aGlzIG5vbi1zdGF0aWMgY2hhcmFjdGVyaXN0aWMgZmlybWx5IGluIG1pbmQuIFRoYXQncyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciwgcHJlZGljdGluZyBpdHMgZnV0dXJlIHN0YXRlcywgYW5kIHVsdGltYXRlbHksIGVmZmVjdGl2ZWx5IG1hbmFnaW5nIG9yIGludGVyYWN0aW5nIHdpdGggaXQuIENvbnNpZGVyaW5nIHRoZSBjb250ZXh0LCB0aGlzIG5vbi1zdGF0aWMgZWxlbWVudCBzaWduaWZpY2FudGx5IGNoYW5nZXMgdGhlIGFwcHJvYWNoIHRoYXQgaXMgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU2NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MjA6MTUuNzExNzgyMDc5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEzNTY5NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxMTY9dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNjMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxNjQ6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE2NS1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MjA6MTUuODMzMTQ0OTE3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMTM3ODI4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzbid0IGp1c3QgY29zbWV0aWM7IGl0J3MgZGVmaW5pdGVseSBub24tc3RhdGljLiBJdCdzIG1ha2luZyB0YW5naWJsZSwgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBEQU1PTiBjb3JlIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgU3lzdGVtIFJBTSByZWdpb24gc2V0dXAgYW5kIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEknbSBzZWVpbmcgYWRqdXN0bWVudHMgaW4gaG93IHJlZ2lvbnMgYXJlIG1hbmFnZWQsIHdpdGggdGhlIGFkZGl0aW9uIG9mIGBucl9yZWdpb25zYCBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgcmVnaW9uIGNvdW50aW5nIG1lY2hhbmlzbS4gVGhlc2UgYXJlbid0IGp1c3Qgb2JzY3VyZSBmZWF0dXJlczsgdGhleSdyZSBkaXJlY3RseSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMgYW5kIG1vZHVsZSBwYXJhbWV0ZXJzLCB3aGljaCBpcyBhIGtleSBjb25zaWRlcmF0aW9uLlxuXG5HaXZlbiB0aGUgZnVuY3Rpb25hbCBuYXR1cmUgYW5kIGFjY2Vzc2liaWxpdHkgb2YgdGhlc2UgY2hhbmdlcywgSSdtIGFic29sdXRlbHkgc2V0dGluZyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5JIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcmAsIGFuZCBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIGFuZCBkYXRhIGhhbmRsZXJzIGZvciB0aGUgbW9kaWZpZWQgZnVuY3Rpb25hbGl0eS5cblxuSSdsbCBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZTogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NUQVRgLlxuXG5CYXNpY2FsbHksIHRoaXMgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgREFNT04gdG8gYmV0dGVyIGhhbmRsZSBjb250aWd1b3VzIGFuZCBub24tY29udGlndW91cyBTeXN0ZW0gUkFNLiBJdCdzIGNvYWxlc2NpbmcgYWRqYWNlbnQgUkFNIHJlc291cmNlcyBpbnRvIHJhbmdlcyBhbmQgZXhwbGljaXRseSBleGNsdWRpbmcgdGhlIGdhcHMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG5yX3JlZ2lvbnNgIGluIHN5c2ZzIGZvciBEQU1PTiBzY2hlbWVzIHByb3ZpZGVzIGEgbmV3IHdpbmRvdyBpbnRvIHRoZSByZWdpb24gbWFuYWdlbWVudC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCwgYW5kIHRoZSBzeXNmcyBhZGRpdGlvbnMgbWFrZSB0aGVtIGFjY2Vzc2libGUuIFRoZXJlZm9yZSwgaXQncyBlc3NlbnRpYWwgdGhhdCBJIGZ1enogdGhpcyB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkwNCwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MjA6MjIuODQ2OTMyMTQ1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMDU1MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fU1RBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdFwiLFxuICAgIFwiZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpclwiLFxuICAgIFwiZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9OIHN1YnN5c3RlbSB0byBjb2FsZXNjZSBhZGphY2VudCBTeXN0ZW0gUkFNIHJlc291cmNlcyBpbnRvIHJhbmdlcyBhbmQgZXhjbHVkZSBob2xlcyBiZXR3ZWVuIGRpc2NyZXRlIFN5c3RlbSBSQU0gYXJlYXMuIEl0IGFsc28gYWRkcyBhIGBucl9yZWdpb25zYCBmaWxlIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OIHNjaGVtZXMnIHRyaWVkIHJlZ2lvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIHN5c2ZzIGludGVyZmFjZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9TVEFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0XCIsXG4gICAgXCJkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyXCIsXG4gICAgXCJkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gc3Vic3lzdGVtIHRvIGNvYWxlc2NlIGFkamFjZW50IFN5c3RlbSBSQU0gcmVzb3VyY2VzIGludG8gcmFuZ2VzIGFuZCBleGNsdWRlIGhvbGVzIGJldHdlZW4gZGlzY3JldGUgU3lzdGVtIFJBTSBhcmVhcy4gSXQgYWxzbyBhZGRzIGEgYG5yX3JlZ2lvbnNgIGZpbGUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04gc2NoZW1lcycgdHJpZWQgcmVnaW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc3lzZnMgaW50ZXJmYWNlcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflownhwd5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 21:02:41 +0000 UTC FinishedAt: 2026-07-27 21:20:24 +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": "1e15fbef3a3c465a6a2db0f38e3980d75420bd6d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_STAT" ], "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": "1e15fbef3a3c465a6a2db0f38e3980d75420bd6d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_RECLAIM", "DAMON_LRU_SORT", "DAMON_STAT" ], "series_id": "48d03be2-5187-4937-8ec2-7dcfd5433e80" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_set_region_system_rams_default", "damos_sysfs_populate_region_dir", "damon_sysfs_schemes_clear_regions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OywKICAgICYjMzQ7REFNT05fU1RBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCYjMzQ7LAogICAgJiMzNDtkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gc3Vic3lzdGVtIHRvIGNvYWxlc2NlIGFkamFjZW50IFN5c3RlbSBSQU0gcmVzb3VyY2VzIGludG8gcmFuZ2VzIGFuZCBleGNsdWRlIGhvbGVzIGJldHdlZW4gZGlzY3JldGUgU3lzdGVtIFJBTSBhcmVhcy4gSXQgYWxzbyBhZGRzIGEgYG5yX3JlZ2lvbnNgIGZpbGUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04gc2NoZW1lcyYjMzk7IHRyaWVkIHJlZ2lvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIHN5c2ZzIGludGVyZmFjZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTM0NGUxMTBiYjE2Mjk2ODU3YjAwMDIzYzRlZGZiNWQ0NzRjNmVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDIxOjE3OjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbmluZGV4IGU2NzVhNTcxNDVlMzZkLi5kZWM4NmUwOGE5NjAxOSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxuQEAgLTYwOSw2ICYjNDM7NjA5LDE2IEBAIERlc2NyaXB0aW9uOlx0V3JpdGluZyBhIG51bWJlciB0byB0aGlzIGZpbGUgc2V0cyB0aGUgdXBwZXIgbGltaXQgb2ZcbiBcdFx0bnJfc25hcHNob3RzIHRoYXQgZGVhY3RpdmF0ZXMgdGhlIHNjaGVtZSB3aGVuIHRoZSBsaW1pdCBpc1xuIFx0XHRyZWFjaGVkIG9yIGV4Y2VlZGVkLlxuIFxuJiM0MztXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2Uvc2NoZW1lcy9cdTAwM2NTXHUwMDNlL3RyaWVkX3JlZ2lvbnMvbnJfcmVnaW9uc1xuJiM0MztEYXRlOlx0XHRBdWcgMjAyNlxuJiM0MztDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4mIzQzO0Rlc2NyaXB0aW9uOlx0UmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgdGhhdFxuJiM0MztcdFx0Y29ycmVzcG9uZGluZyBEQU1PTi1iYXNlZCBPcGVyYXRpb24gU2NoZW1lJiMzOTtzIGFjdGlvbiBoYXMgdHJpZWRcbiYjNDM7XHRcdHRvIGJlIGFwcGxpZWQuICBUaGUgbnVtYmVyIGlzIHVwZGF0ZWQgdG9nZXRoZXIgd2l0aFxuJiM0MztcdFx0JiMzOTsuLi4vdHJpZWRfcmVnaW9ucy90b3RhbF9ieXRlcyYjMzk7IGJ5IHdyaXRpbmcgJiMzOTt1cGRhdGVfc2NoZW1lc190cmllZF9ieXRlcyYjMzk7XG4mIzQzO1x0XHRvciAmIzM5O3VwZGF0ZV9zY2hlbWVzX3RyaWVkX3JlZ2lvbnMmIzM5OyB0byB0aGUgcmVsZXZhbnQgJiMzOTtzdGF0ZSYjMzk7IGZpbGUsIGFuZFxuJiM0MztcdFx0aGVuY2UgY2FuIGJlIHJlYWQgd2l0aG91dCBtYXRlcmlhbGl6aW5nIHRoZSBwZXItcmVnaW9uIGRpcmVjdG9yaWVzLlxuJiM0MztcbiBXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2Uvc2NoZW1lcy9cdTAwM2NTXHUwMDNlL3RyaWVkX3JlZ2lvbnMvdG90YWxfYnl0ZXNcbiBEYXRlOlx0XHRKdWwgMjAyM1xuIENvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5pbmRleCBkYTVmOWFmZDA4YWVmOC4uZmZiNjkwNWNhOWNlYjUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbkBAIC0xMDIsNyAmIzQzOzEwMiw3IEBAIGNvbW1hIChcJiMzNDssXCYjMzQ7KS5cbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YGRlc3RzIFx1MDAzY2RhbW9uX3N5c2ZzX2Rlc3RzXHUwMDNlYC9ucl9kZXN0c1xuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvaWQsd2VpZ2h0XG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBzdGF0cyBcdTAwM2NzeXNmc19zY2hlbWVzX3N0YXRzXHUwMDNlYC9ucl90cmllZCxzel90cmllZCxucl9hcHBsaWVkLHN6X2FwcGxpZWQsc3pfb3BzX2ZpbHRlcl9wYXNzZWQscXRfZXhjZWVkcyxucl9zbmFwc2hvdHMsbWF4X25yX3NuYXBzaG90c1xuLSAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdHJpZWRfcmVnaW9ucyBcdTAwM2NzeXNmc19zY2hlbWVzX3RyaWVkX3JlZ2lvbnNcdTAwM2VgL3RvdGFsX2J5dGVzXG4mIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdHJpZWRfcmVnaW9ucyBcdTAwM2NzeXNmc19zY2hlbWVzX3RyaWVkX3JlZ2lvbnNcdTAwM2VgL25yX3JlZ2lvbnMsdG90YWxfYnl0ZXNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL3N0YXJ0LGVuZCxucl9hY2Nlc3NlcyxhZ2Usc3pfZmlsdGVyX3Bhc3NlZFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBwcm9iZXNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvaGl0c1xuQEAgLTYyMiwyMSAmIzQzOzYyMiwyNCBAQCByZWxldmFudCBgYGtkYW1vbmRzL1x1MDAzY05cdTAwM2Uvc3RhdGVgYCBmaWxlLiAgUmVmZXIgdG8gOnJlZjpga2RhbW9uZCBkaXJlY3RvcnlcbiBzY2hlbWVzL1x1MDAzY05cdTAwM2UvdHJpZWRfcmVnaW9ucy9cbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIFxuLVRoaXMgZGlyZWN0b3J5IGluaXRpYWxseSBoYXMgb25lIGZpbGUsIGBgdG90YWxfYnl0ZXNgYC5cbiYjNDM7VGhpcyBkaXJlY3RvcnkgaW5pdGlhbGx5IGhhcyB0d28gZmlsZXMsIGBgbnJfcmVnaW9uc2BgIGFuZCBgYHRvdGFsX2J5dGVzYGAuXG4gXG4gV2hlbiBhIHNwZWNpYWwga2V5d29yZCwgYGB1cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zYGAsIGlzIHdyaXR0ZW4gdG8gdGhlXG4tcmVsZXZhbnQgYGBrZGFtb25kcy9cdTAwM2NOXHUwMDNlL3N0YXRlYGAgZmlsZSwgREFNT04gdXBkYXRlcyB0aGUgYGB0b3RhbF9ieXRlc2BgIGZpbGUgc29cbi10aGF0IHJlYWRpbmcgaXQgcmV0dXJucyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgc2NoZW1lIHRyaWVkIHJlZ2lvbnMsIGFuZCBjcmVhdGVzXG4tZGlyZWN0b3JpZXMgbmFtZWQgaW50ZWdlciBzdGFydGluZyBmcm9tIGBgMGBgIHVuZGVyIHRoaXMgZGlyZWN0b3J5LiAgRWFjaFxuLWRpcmVjdG9yeSBjb250YWlucyBmaWxlcyBleHBvc2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9mIHRoZSBtZW1vcnlcbi1yZWdpb24gdGhhdCB0aGUgY29ycmVzcG9uZGluZyBzY2hlbWUmIzM5O3MgYGBhY3Rpb25gYCBoYXMgdHJpZWQgdG8gYmUgYXBwbGllZCB1bmRlclxuLXRoaXMgZGlyZWN0b3J5LCBkdXJpbmcgbmV4dCA6cmVmOmBhcHBseSBpbnRlcnZhbCBcdTAwM2NkYW1vbl9kZXNpZ25fZGFtb3NcdTAwM2VgIG9mIHRoZVxuLWNvcnJlc3BvbmRpbmcgc2NoZW1lLiAgVGhlIGluZm9ybWF0aW9uIGluY2x1ZGVzIGFkZHJlc3MgcmFuZ2UsIGBgbnJfYWNjZXNzZXNgYCxcbi1hbmQgYGBhZ2VgYCBvZiB0aGUgcmVnaW9uLlxuJiM0MztyZWxldmFudCBgYGtkYW1vbmRzL1x1MDAzY05cdTAwM2Uvc3RhdGVgYCBmaWxlLCBEQU1PTiB1cGRhdGVzIHRoZSBgYG5yX3JlZ2lvbnNgYCBhbmRcbiYjNDM7YGB0b3RhbF9ieXRlc2BgIGZpbGVzIHNvIHRoYXQgcmVhZGluZyB0aGVtIHJldHVybnMgdGhlIG51bWJlciBhbmQgdGhlIHRvdGFsIHNpemVcbiYjNDM7b2YgdGhlIHNjaGVtZSB0cmllZCByZWdpb25zLCByZXNwZWN0aXZlbHksIGFuZCBjcmVhdGVzIGRpcmVjdG9yaWVzIG5hbWVkXG4mIzQzO2ludGVnZXIgc3RhcnRpbmcgZnJvbSBgYDBgYCB1bmRlciB0aGlzIGRpcmVjdG9yeS4gIEVhY2ggZGlyZWN0b3J5IGNvbnRhaW5zIGZpbGVzXG4mIzQzO2V4cG9zaW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIG1lbW9yeSByZWdpb24gdGhhdCB0aGVcbiYjNDM7Y29ycmVzcG9uZGluZyBzY2hlbWUmIzM5O3MgYGBhY3Rpb25gYCBoYXMgdHJpZWQgdG8gYmUgYXBwbGllZCB1bmRlciB0aGlzIGRpcmVjdG9yeSxcbiYjNDM7ZHVyaW5nIG5leHQgOnJlZjpgYXBwbHkgaW50ZXJ2YWwgXHUwMDNjZGFtb25fZGVzaWduX2RhbW9zXHUwMDNlYCBvZiB0aGUgY29ycmVzcG9uZGluZ1xuJiM0MztzY2hlbWUuICBUaGUgaW5mb3JtYXRpb24gaW5jbHVkZXMgYWRkcmVzcyByYW5nZSwgYGBucl9hY2Nlc3Nlc2BgLCBhbmQgYGBhZ2VgYCBvZlxuJiM0Mzt0aGUgcmVnaW9uLlxuIFxuIFdyaXRpbmcgYGB1cGRhdGVfc2NoZW1lc190cmllZF9ieXRlc2BgIHRvIHRoZSByZWxldmFudCBgYGtkYW1vbmRzL1x1MDAzY05cdTAwM2Uvc3RhdGVgYFxuLWZpbGUgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgYGB0b3RhbF9ieXRlc2BgIGZpbGUsIGFuZCB3aWxsIG5vdCBjcmVhdGUgdGhlXG4tc3ViZGlyZWN0b3JpZXMuXG4mIzQzO2ZpbGUgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgYGBucl9yZWdpb25zYGAgYW5kIGBgdG90YWxfYnl0ZXNgYCBmaWxlcywgYW5kIHdpbGwgbm90XG4mIzQzO2NyZWF0ZSB0aGUgc3ViZGlyZWN0b3JpZXMuICBIZW5jZSBgYG5yX3JlZ2lvbnNgYCBjYW4gYmUgdXNlZCBhcyBhIGxpZ2h0d2VpZ2h0IHdheVxuJiM0Mzt0byByZWFkIHRoZSBudW1iZXIgb2YgdGhlIHNjaGVtZSB0cmllZCByZWdpb25zIHdpdGhvdXQgbWF0ZXJpYWxpemluZyB0aGVcbiYjNDM7cGVyLXJlZ2lvbiBzdWJkaXJlY3Rvcmllcy5cbiBcbiBUaGUgZGlyZWN0b3JpZXMgd2lsbCBiZSByZW1vdmVkIHdoZW4gYW5vdGhlciBzcGVjaWFsIGtleXdvcmQsXG4gYGBjbGVhcl9zY2hlbWVzX3RyaWVkX3JlZ2lvbnNgYCwgaXMgd3JpdHRlbiB0byB0aGUgcmVsZXZhbnRcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjA2Li4zNjVjNDMyNzFjMGM2NiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzkxOCwyMiAmIzQzOzM5MTgsMTQgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gfVxuIFxuIHN0cnVjdCBkYW1vbl9zeXN0ZW1fcmFtX3JhbmdlX3dhbGtfYXJnIHtcbi1cdGJvb2wgd2Fsa2VkO1xuLVx0c3RydWN0IHJlc291cmNlIHJlcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdDtcbiYjNDM7XHQvKiBOVUxMIGluIHRoZSBjb3VudGluZy1vbmx5IHBhc3MgKi9cbiYjNDM7XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl9yYW5nZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwcmV2X2VuZDtcbiYjNDM7XHRib29sIGhhc19wcmV2O1xuIH07XG4gXG4tc3RhdGljIGludCBkYW1vbl9zeXN0ZW1fcmFtX3dhbGtfZm4oc3RydWN0IHJlc291cmNlICpyZXMsIHZvaWQgKmFyZylcbi17XG4tXHRzdHJ1Y3QgZGFtb25fc3lzdGVtX3JhbV9yYW5nZV93YWxrX2FyZyAqYSA9IGFyZztcbi1cbi1cdGlmICghYS1cdTAwM2V3YWxrZWQpIHtcbi1cdFx0YS1cdTAwM2V3YWxrZWQgPSB0cnVlO1xuLVx0XHRhLVx1MDAzZXJlcy5zdGFydCA9IHJlcy1cdTAwM2VzdGFydDtcbi1cdH1cbi1cdGEtXHUwMDNlcmVzLmVuZCA9IHJlcy1cdTAwM2VlbmQ7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcmVzX3RvX2NvcmVfYWRkcihyZXNvdXJjZV9zaXplX3QgcmEsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuIHtcbkBAIC0zOTQ3LDIzICYjNDM7MzkzOSw2NiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlc291cmNlX3NpemVfdCByYSxcbiBcdHJldHVybiByYSAvIGFkZHJfdW5pdDtcbiB9XG4gXG4tc3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcbi1cdFx0dW5zaWduZWQgbG9uZyAqZW5kLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcbiYjNDM7c3RhdGljIGludCBkYW1vbl9zeXN0ZW1fcmFtX3dhbGtfZm4oc3RydWN0IHJlc291cmNlICpyZXMsIHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkYW1vbl9zeXN0ZW1fcmFtX3JhbmdlX3dhbGtfYXJnICphID0gYXJnO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlcy1cdTAwM2VzdGFydCwgYS1cdTAwM2VhZGRyX3VuaXQpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZW5kID0gZGFtb25fcmVzX3RvX2NvcmVfYWRkcihyZXMtXHUwMDNlZW5kICYjNDM7IDEsIGEtXHUwMDNlYWRkcl91bml0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVuZCBcdTAwM2M9IHN0YXJ0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiAmIzM5O1N5c3RlbSBSQU0mIzM5OyByZXNvdXJjZXMgYXJlIHZpc2l0ZWQgaW4gdGhlIGFzY2VuZGluZyBhZGRyZXNzIG9yZGVyLlxuJiM0MztcdCAqIENvYWxlc2NlIG9ubHkgdHJ1bHkgYWRqYWNlbnQgKG5vIGdhcCBpbiBiZXR3ZWVuKSByZXNvdXJjZXMgaW50byBvbmVcbiYjNDM7XHQgKiByYW5nZSwgc28gdGhhdCBhbnkgaG9sZSBiZXR3ZWVuIGRpc2NyZXRlIFN5c3RlbSBSQU0gYXJlYXMgaXMga2VwdCBvdXRcbiYjNDM7XHQgKiBvZiB0aGUgcmVzdWx0aW5nIHJhbmdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYS1cdTAwM2VoYXNfcHJldiBcdTAwMjZcdTAwMjYgYS1cdTAwM2VwcmV2X2VuZCA9PSBzdGFydCkge1xuJiM0MztcdFx0YS1cdTAwM2VwcmV2X2VuZCA9IGVuZDtcbiYjNDM7XHRcdGlmIChhLVx1MDAzZXJhbmdlcylcbiYjNDM7XHRcdFx0YS1cdTAwM2VyYW5nZXNbYS1cdTAwM2Vucl9yYW5nZXMgLSAxXS5lbmQgPSBlbmQ7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGEtXHUwMDNlcmFuZ2VzKSB7XG4mIzQzO1x0XHRhLVx1MDAzZXJhbmdlc1thLVx1MDAzZW5yX3Jhbmdlc10uc3RhcnQgPSBzdGFydDtcbiYjNDM7XHRcdGEtXHUwMDNlcmFuZ2VzW2EtXHUwMDNlbnJfcmFuZ2VzXS5lbmQgPSBlbmQ7XG4mIzQzO1x0fVxuJiM0MztcdGEtXHUwMDNlbnJfcmFuZ2VzJiM0MzsmIzQzOztcbiYjNDM7XHRhLVx1MDAzZXByZXZfZW5kID0gZW5kO1xuJiM0MztcdGEtXHUwMDNlaGFzX3ByZXYgPSB0cnVlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBGaW5kIGFsbCAmIzM5O1N5c3RlbSBSQU0mIzM5OyBhcmVhcyBhbmQgcmV0dXJuIHRoZW0gYXMgYW4gYXJyYXkgb2YgY29hbGVzY2VkXG4mIzQzOyAqIGRhbW9uX2FkZHJfcmFuZ2UuICBPbiBzdWNjZXNzLCAqcmFuZ2VzIHBvaW50cyB0byBhIGt2bWFsbG9jJiMzOTtlZCBhcnJheSB0aGF0IHRoZVxuJiM0MzsgKiBjYWxsZXIgc2hvdWxkIGt2ZnJlZSgpLCBhbmQgdGhlIG51bWJlciBvZiByYW5nZXMgaXMgcmV0dXJuZWQuICBSZXR1cm5zIDAgaWZcbiYjNDM7ICogbm8gU3lzdGVtIFJBTSBpcyBmb3VuZCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4ge1xuLVx0c3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgYXJnID0ge307XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgYXJnID0geyAuYWRkcl91bml0ID0gYWRkcl91bml0IH07XG4mIzQzO1x0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcztcbiBcbiYjNDM7XHQvKiBGaXJzdCBwYXNzOiBjb3VudCB0aGUgY29hbGVzY2VkIHJhbmdlcy4gKi9cbiBcdHdhbGtfc3lzdGVtX3JhbV9yZXMoMCwgLTEsIFx1MDAyNmFyZywgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKTtcbi1cdGlmICghYXJnLndhbGtlZClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0KnN0YXJ0ID0gZGFtb25fcmVzX3RvX2NvcmVfYWRkcihhcmcucmVzLnN0YXJ0LCBhZGRyX3VuaXQpO1xuLVx0KmVuZCA9IGRhbW9uX3Jlc190b19jb3JlX2FkZHIoYXJnLnJlcy5lbmQgJiM0MzsgMSwgYWRkcl91bml0KTtcbi1cdGlmICgqZW5kIFx1MDAzYz0gKnN0YXJ0KVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoIWFyZy5ucl9yYW5nZXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyYW5nZXMgPSBrdm1hbGxvY19vYmpzKCpyYW5nZXMsIGFyZy5ucl9yYW5nZXMsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcmFuZ2VzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0LyogU2Vjb25kIHBhc3M6IGZpbGwgaW4gdGhlIGNvYWxlc2NlZCByYW5nZXMuICovXG4mIzQzO1x0YXJnLnJhbmdlcyA9IHJhbmdlcztcbiYjNDM7XHRhcmcubnJfcmFuZ2VzID0gMDtcbiYjNDM7XHRhcmcuaGFzX3ByZXYgPSBmYWxzZTtcbiYjNDM7XHR3YWxrX3N5c3RlbV9yYW1fcmVzKDAsIC0xLCBcdTAwMjZhcmcsIGRhbW9uX3N5c3RlbV9yYW1fd2Fsa19mbik7XG4mIzQzO1x0KnJhbmdlc19vdXQgPSByYW5nZXM7XG4mIzQzO1x0cmV0dXJuIGFyZy5ucl9yYW5nZXM7XG4gfVxuIFxuIC8qKlxuLSAqIGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCgpIC0gU2V0IHRoZSByZWdpb24gb2YgdGhlIGdpdmVuXG4mIzQzOyAqIGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCgpIC0gU2V0IHRoZSByZWdpb25zIG9mIHRoZSBnaXZlblxuICAqIG1vbml0b3JpbmcgdGFyZ2V0IGFzIHJlcXVlc3RlZCwgb3IgdG8gY292ZXIgYWxsICYjMzk7U3lzdGVtIFJBTSYjMzk7IHJlc291cmNlcy5cbiAgKiBAdDpcdFx0VGhlIG1vbml0b3JpbmcgdGFyZ2V0IHRvIHNldCB0aGUgcmVnaW9uLlxuICAqIEBzdGFydDpcdFRoZSBwb2ludGVyIHRvIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSByZWdpb24uXG5AQCAtMzk3Myw5ICYjNDM7NDAwOCwxMSBAQCBzdGF0aWMgYm9vbCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zX3JhbmdlKHVuc2lnbmVkIGxvbmcgKnN0YXJ0LFxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSByZWdpb24gb2YgQHQgYXMgcmVxdWVzdGVkIGJ5IEBzdGFydCBhbmQgQGVuZC4gIElmIHRoZVxuICAqIHZhbHVlcyBvZiBAc3RhcnQgYW5kIEBlbmQgYXJlIHplcm8sIGhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gZmluZHMgJiMzOTtTeXN0ZW1cbi0gKiBSQU0mIzM5OyByZXNvdXJjZXMgYW5kIHNldHMgdGhlIHJlZ2lvbiB0byBjb3ZlciBhbGwgdGhlIHJlc291cmNlLiAgSW4gdGhlIGxhdHRlclxuLSAqIGNhc2UsIHRoaXMgZnVuY3Rpb24gc2F2ZXMgdGhlIHN0YXJ0IGFuZCB0aGUgZW5kIGFkZHJlc3Nlc2VzIG9mIHRoZSBmaXJzdCBhbmRcbi0gKiB0aGUgbGFzdCByZXNvdXJjZXMgaW4gQHN0YXJ0IGFuZCBAZW5kLCByZXNwZWN0aXZlbHkuXG4mIzQzOyAqIFJBTSYjMzk7IHJlc291cmNlcyBhbmQgc2V0cyB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyB0byBjb3ZlciB0aGVtLiAgRWFjaFxuJiM0MzsgKiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWEgYmVjb21lcyBhIHNlcGFyYXRlIHJlZ2lvbiwgc28gaG9sZXMgYmV0d2VlbiB0aGVtXG4mIzQzOyAqIChlLmcuLCBvbiBtdWx0aS1zb2NrZXQgb3IgQ1hMIHN5c3RlbXMpIGFyZSBleGNsdWRlZCBmcm9tIHRoZSBtb25pdG9yaW5nLiAgSW5cbiYjNDM7ICogdGhlIGxhdHRlciBjYXNlLCB0aGlzIGZ1bmN0aW9uIHNhdmVzIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBhZGRyZXNzZXMgb2YgdGhlXG4mIzQzOyAqIGZpcnN0IGFuZCB0aGUgbGFzdCByZXNvdXJjZXMgaW4gQHN0YXJ0IGFuZCBAZW5kLCByZXNwZWN0aXZlbHkuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4gICovXG5AQCAtMzk4NCwxNCAmIzQzOzQwMjEsMjUgQEAgaW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4ge1xuIFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xuJiM0MztcdGludCBucl9yYW5nZXMsIGVycjtcbiBcbi1cdGlmICghKnN0YXJ0IFx1MDAyNlx1MDAyNiAhKmVuZCBcdTAwMjZcdTAwMjZcbi1cdFx0IWRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2Uoc3RhcnQsIGVuZCwgYWRkcl91bml0KSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCpzdGFydCB8fCAqZW5kKSB7XG4mIzQzO1x0XHRhZGRyX3JhbmdlLnN0YXJ0ID0gKnN0YXJ0O1xuJiM0MztcdFx0YWRkcl9yYW5nZS5lbmQgPSAqZW5kO1xuJiM0MztcdFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFx1MDAyNmFkZHJfcmFuZ2UsIDEsIG1pbl9yZWdpb25fc3opO1xuJiM0MztcdH1cbiBcbi1cdGFkZHJfcmFuZ2Uuc3RhcnQgPSAqc3RhcnQ7XG4tXHRhZGRyX3JhbmdlLmVuZCA9ICplbmQ7XG4tXHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXHUwMDI2YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7XG4mIzQzO1x0bnJfcmFuZ2VzID0gZGFtb25fZmluZF9zeXN0ZW1fcmFtcyhcdTAwMjZyYW5nZXMsIGFkZHJfdW5pdCk7XG4mIzQzO1x0aWYgKG5yX3JhbmdlcyBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBucl9yYW5nZXM7XG4mIzQzO1x0aWYgKCFucl9yYW5nZXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHQqc3RhcnQgPSByYW5nZXNbMF0uc3RhcnQ7XG4mIzQzO1x0KmVuZCA9IHJhbmdlc1tucl9yYW5nZXMgLSAxXS5lbmQ7XG4mIzQzO1x0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBucl9yYW5nZXMsIG1pbl9yZWdpb25fc3opO1xuJiM0MztcdGt2ZnJlZShyYW5nZXMpO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuaW5kZXggMzJmNDk1YTk2YjE3YTguLjkxNTc2Zjc3ZTk2Y2FkIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbkBAIC0yOTcsNiAmIzQzOzI5Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUgPSB7XG4gc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zIHtcbiBcdHN0cnVjdCBrb2JqZWN0IGtvYmo7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlZ2lvbnNfbGlzdDtcbiYjNDM7XHRpbnQgbnJfcmVnaW9uX2RpcnM7XG4gXHRpbnQgbnJfcmVnaW9ucztcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfYnl0ZXM7XG4gfTtcbkBAIC0zMTEsMTEgJiM0MzszMTIsMjEgQEAgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcbiBcbiBcdHJlZ2lvbnMtXHUwMDNla29iaiA9IChzdHJ1Y3Qga29iamVjdCl7fTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJlZ2lvbnMtXHUwMDNlcmVnaW9uc19saXN0KTtcbiYjNDM7XHRyZWdpb25zLVx1MDAzZW5yX3JlZ2lvbl9kaXJzID0gMDtcbiBcdHJlZ2lvbnMtXHUwMDNlbnJfcmVnaW9ucyA9IDA7XG4gXHRyZWdpb25zLVx1MDAzZXRvdGFsX2J5dGVzID0gMDtcbiBcdHJldHVybiByZWdpb25zO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNzaXplX3QgbnJfcmVnaW9uc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcbiYjNDM7XHRcdFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslZFxcblwmIzM0OywgcmVnaW9ucy1cdTAwM2Vucl9yZWdpb25zKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3NpemVfdCB0b3RhbF9ieXRlc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuIFx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiB7XG5AQCAtMzM1LDcgJiM0MzszNDYsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ybV9kaXJzKFxuIFx0XHRsaXN0X2RlbChcdTAwMjZyLVx1MDAzZWxpc3QpO1xuIFx0XHRrb2JqZWN0X2RlbChcdTAwMjZyLVx1MDAzZWtvYmopO1xuIFx0XHRrb2JqZWN0X3B1dChcdTAwMjZyLVx1MDAzZWtvYmopO1xuLVx0XHRyZWdpb25zLVx1MDAzZW5yX3JlZ2lvbnMtLTtcbiYjNDM7XHRcdHJlZ2lvbnMtXHUwMDNlbnJfcmVnaW9uX2RpcnMtLTtcbiBcdH1cbiB9XG4gXG5AQCAtMzQ0LDEwICYjNDM7MzU1LDE0IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4gXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX25yX3JlZ2lvbnNfYXR0ciA9XG4mIzQzO1x0XHRfX0FUVFJfUk9fTU9ERShucl9yZWdpb25zLCAwNDAwKTtcbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc190b3RhbF9ieXRlc19hdHRyID1cbiBcdFx0X19BVFRSX1JPX01PREUodG90YWxfYnl0ZXMsIDA0MDApO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hdHRyc1tdID0ge1xuJiM0MztcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX25yX3JlZ2lvbnNfYXR0ci5hdHRyLFxuIFx0XHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ci5hdHRyLFxuIFx0TlVMTCxcbiB9O1xuQEAgLTMxMTksNiAmIzQzOzMxMzQsNyBAQCB2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4gXHRcdHJldHVybjtcbiBcbiBcdHN5c2ZzX3JlZ2lvbnMgPSBzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW3NjaGVtZXNfaWR4XS1cdTAwM2V0cmllZF9yZWdpb25zO1xuJiM0MztcdHN5c2ZzX3JlZ2lvbnMtXHUwMDNlbnJfcmVnaW9ucyYjNDM7JiM0Mzs7XG4gXHRzeXNmc19yZWdpb25zLVx1MDAzZXRvdGFsX2J5dGVzICYjNDM7PSByLVx1MDAzZWFyLmVuZCAtIHItXHUwMDNlYXIuc3RhcnQ7XG4gXHRpZiAodG90YWxfYnl0ZXNfb25seSlcbiBcdFx0cmV0dXJuO1xuQEAgLTMxMzAsMTMgJiM0MzszMTQ2LDEzIEBAIHZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbiBcdGlmIChrb2JqZWN0X2luaXRfYW5kX2FkZChcdTAwMjZyZWdpb24tXHUwMDNla29iaixcbiBcdFx0XHRcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUsXG4gXHRcdFx0XHRcdTAwMjZzeXNmc19yZWdpb25zLVx1MDAzZWtvYmosIFwmIzM0OyVkXCYjMzQ7LFxuLVx0XHRcdFx0c3lzZnNfcmVnaW9ucy1cdTAwM2Vucl9yZWdpb25zKSlcbiYjNDM7XHRcdFx0XHRzeXNmc19yZWdpb25zLVx1MDAzZW5yX3JlZ2lvbl9kaXJzKSlcbiBcdFx0Z290byBvdXQ7XG4gXHRpZiAoZGFtb3Nfc3lzZnNfcmVnaW9uX2FkZF9kaXJzKHJlZ2lvbiwgY3R4LCByKSlcbiBcdFx0Z290byBkZWxfb3V0O1xuIFxuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZyZWdpb24tXHUwMDNlbGlzdCwgXHUwMDI2c3lzZnNfcmVnaW9ucy1cdTAwM2VyZWdpb25zX2xpc3QpO1xuLVx0c3lzZnNfcmVnaW9ucy1cdTAwM2Vucl9yZWdpb25zJiM0MzsmIzQzOztcbiYjNDM7XHRzeXNmc19yZWdpb25zLVx1MDAzZW5yX3JlZ2lvbl9kaXJzJiM0MzsmIzQzOztcbiBcdHJldHVybjtcbiBcbiBkZWxfb3V0OlxuQEAgLTMxNTYsNiAmIzQzOzMxNzIsNyBAQCBpbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxuIFx0XHRzeXNmc19zY2hlbWUgPSBzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW2ldO1xuIFx0XHRkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ybV9kaXJzKFxuIFx0XHRcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZXRyaWVkX3JlZ2lvbnMpO1xuJiM0MztcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZXRyaWVkX3JlZ2lvbnMtXHUwMDNlbnJfcmVnaW9ucyA9IDA7XG4gXHRcdHN5c2ZzX3NjaGVtZS1cdTAwM2V0cmllZF9yZWdpb25zLVx1MDAzZXRvdGFsX2J5dGVzID0gMDtcbiBcdH1cbiBcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDssCiAgICAmIzM0O0RBTU9OX1NUQVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQmIzM0OywKICAgICYjMzQ7ZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpciYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9OIHN1YnN5c3RlbSB0byBjb2FsZXNjZSBhZGphY2VudCBTeXN0ZW0gUkFNIHJlc291cmNlcyBpbnRvIHJhbmdlcyBhbmQgZXhjbHVkZSBob2xlcyBiZXR3ZWVuIGRpc2NyZXRlIFN5c3RlbSBSQU0gYXJlYXMuIEl0IGFsc28gYWRkcyBhIGBucl9yZWdpb25zYCBmaWxlIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OIHNjaGVtZXMmIzM5OyB0cmllZCByZWdpb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzeXNmcyBpbnRlcmZhY2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEzNDRlMTEwYmIxNjI5Njg1N2IwMDAyM2M0ZWRmYjVkNDc0YzZlZjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAyMToxNzo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24KaW5kZXggZTY3NWE1NzE0NWUzNmQuLmRlYzg2ZTA4YTk2MDE5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgpAQCAtNjA5LDYgJiM0Mzs2MDksMTYgQEAgRGVzY3JpcHRpb246CVdyaXRpbmcgYSBudW1iZXIgdG8gdGhpcyBmaWxlIHNldHMgdGhlIHVwcGVyIGxpbWl0IG9mCiAJCW5yX3NuYXBzaG90cyB0aGF0IGRlYWN0aXZhdGVzIHRoZSBzY2hlbWUgd2hlbiB0aGUgbGltaXQgaXMKIAkJcmVhY2hlZCBvciBleGNlZWRlZC4KIAomIzQzO1doYXQ6CQkvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8mbHQ7SyZndDsvY29udGV4dHMvJmx0O0MmZ3Q7L3NjaGVtZXMvJmx0O1MmZ3Q7L3RyaWVkX3JlZ2lvbnMvbnJfcmVnaW9ucwomIzQzO0RhdGU6CQlBdWcgMjAyNgomIzQzO0NvbnRhY3Q6CVNKIFBhcmsgJmx0O3NqQGtlcm5lbC5vcmcmZ3Q7CiYjNDM7RGVzY3JpcHRpb246CVJlYWRpbmcgdGhpcyBmaWxlIHJldHVybnMgdGhlIG51bWJlciBvZiByZWdpb25zIHRoYXQKJiM0MzsJCWNvcnJlc3BvbmRpbmcgREFNT04tYmFzZWQgT3BlcmF0aW9uIFNjaGVtZSYjMzk7cyBhY3Rpb24gaGFzIHRyaWVkCiYjNDM7CQl0byBiZSBhcHBsaWVkLiAgVGhlIG51bWJlciBpcyB1cGRhdGVkIHRvZ2V0aGVyIHdpdGgKJiM0MzsJCSYjMzk7Li4uL3RyaWVkX3JlZ2lvbnMvdG90YWxfYnl0ZXMmIzM5OyBieSB3cml0aW5nICYjMzk7dXBkYXRlX3NjaGVtZXNfdHJpZWRfYnl0ZXMmIzM5OwomIzQzOwkJb3IgJiMzOTt1cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zJiMzOTsgdG8gdGhlIHJlbGV2YW50ICYjMzk7c3RhdGUmIzM5OyBmaWxlLCBhbmQKJiM0MzsJCWhlbmNlIGNhbiBiZSByZWFkIHdpdGhvdXQgbWF0ZXJpYWxpemluZyB0aGUgcGVyLXJlZ2lvbiBkaXJlY3Rvcmllcy4KJiM0MzsKIFdoYXQ6CQkvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8mbHQ7SyZndDsvY29udGV4dHMvJmx0O0MmZ3Q7L3NjaGVtZXMvJmx0O1MmZ3Q7L3RyaWVkX3JlZ2lvbnMvdG90YWxfYnl0ZXMKIERhdGU6CQlKdWwgMjAyMwogQ29udGFjdDoJU0ogUGFyayAmbHQ7c2pAa2VybmVsLm9yZyZndDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKaW5kZXggZGE1ZjlhZmQwOGFlZjguLmZmYjY5MDVjYTljZWI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdApAQCAtMTAyLDcgJiM0MzsxMDIsNyBAQCBjb21tYSAoJiMzNDssJiMzNDspLgogICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBkZXN0cyAmbHQ7ZGFtb25fc3lzZnNfZGVzdHMmZ3Q7YC9ucl9kZXN0cwogICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9pZCx3ZWlnaHQKICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgc3RhdHMgJmx0O3N5c2ZzX3NjaGVtZXNfc3RhdHMmZ3Q7YC9ucl90cmllZCxzel90cmllZCxucl9hcHBsaWVkLHN6X2FwcGxpZWQsc3pfb3BzX2ZpbHRlcl9wYXNzZWQscXRfZXhjZWVkcyxucl9zbmFwc2hvdHMsbWF4X25yX3NuYXBzaG90cwotICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmB0cmllZF9yZWdpb25zICZsdDtzeXNmc19zY2hlbWVzX3RyaWVkX3JlZ2lvbnMmZ3Q7YC90b3RhbF9ieXRlcwomIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdHJpZWRfcmVnaW9ucyAmbHQ7c3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zJmd0O2AvbnJfcmVnaW9ucyx0b3RhbF9ieXRlcwogICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9zdGFydCxlbmQsbnJfYWNjZXNzZXMsYWdlLHN6X2ZpbHRlcl9wYXNzZWQKICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBwcm9iZXMKICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9oaXRzCkBAIC02MjIsMjEgJiM0Mzs2MjIsMjQgQEAgcmVsZXZhbnQgYGBrZGFtb25kcy8mbHQ7TiZndDsvc3RhdGVgYCBmaWxlLiAgUmVmZXIgdG8gOnJlZjpga2RhbW9uZCBkaXJlY3RvcnkKIHNjaGVtZXMvJmx0O04mZ3Q7L3RyaWVkX3JlZ2lvbnMvCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGlzIGRpcmVjdG9yeSBpbml0aWFsbHkgaGFzIG9uZSBmaWxlLCBgYHRvdGFsX2J5dGVzYGAuCiYjNDM7VGhpcyBkaXJlY3RvcnkgaW5pdGlhbGx5IGhhcyB0d28gZmlsZXMsIGBgbnJfcmVnaW9uc2BgIGFuZCBgYHRvdGFsX2J5dGVzYGAuCiAKIFdoZW4gYSBzcGVjaWFsIGtleXdvcmQsIGBgdXBkYXRlX3NjaGVtZXNfdHJpZWRfcmVnaW9uc2BgLCBpcyB3cml0dGVuIHRvIHRoZQotcmVsZXZhbnQgYGBrZGFtb25kcy8mbHQ7TiZndDsvc3RhdGVgYCBmaWxlLCBEQU1PTiB1cGRhdGVzIHRoZSBgYHRvdGFsX2J5dGVzYGAgZmlsZSBzbwotdGhhdCByZWFkaW5nIGl0IHJldHVybnMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHNjaGVtZSB0cmllZCByZWdpb25zLCBhbmQgY3JlYXRlcwotZGlyZWN0b3JpZXMgbmFtZWQgaW50ZWdlciBzdGFydGluZyBmcm9tIGBgMGBgIHVuZGVyIHRoaXMgZGlyZWN0b3J5LiAgRWFjaAotZGlyZWN0b3J5IGNvbnRhaW5zIGZpbGVzIGV4cG9zaW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIG1lbW9yeQotcmVnaW9uIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgc2NoZW1lJiMzOTtzIGBgYWN0aW9uYGAgaGFzIHRyaWVkIHRvIGJlIGFwcGxpZWQgdW5kZXIKLXRoaXMgZGlyZWN0b3J5LCBkdXJpbmcgbmV4dCA6cmVmOmBhcHBseSBpbnRlcnZhbCAmbHQ7ZGFtb25fZGVzaWduX2RhbW9zJmd0O2Agb2YgdGhlCi1jb3JyZXNwb25kaW5nIHNjaGVtZS4gIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBhZGRyZXNzIHJhbmdlLCBgYG5yX2FjY2Vzc2VzYGAsCi1hbmQgYGBhZ2VgYCBvZiB0aGUgcmVnaW9uLgomIzQzO3JlbGV2YW50IGBga2RhbW9uZHMvJmx0O04mZ3Q7L3N0YXRlYGAgZmlsZSwgREFNT04gdXBkYXRlcyB0aGUgYGBucl9yZWdpb25zYGAgYW5kCiYjNDM7YGB0b3RhbF9ieXRlc2BgIGZpbGVzIHNvIHRoYXQgcmVhZGluZyB0aGVtIHJldHVybnMgdGhlIG51bWJlciBhbmQgdGhlIHRvdGFsIHNpemUKJiM0MztvZiB0aGUgc2NoZW1lIHRyaWVkIHJlZ2lvbnMsIHJlc3BlY3RpdmVseSwgYW5kIGNyZWF0ZXMgZGlyZWN0b3JpZXMgbmFtZWQKJiM0MztpbnRlZ2VyIHN0YXJ0aW5nIGZyb20gYGAwYGAgdW5kZXIgdGhpcyBkaXJlY3RvcnkuICBFYWNoIGRpcmVjdG9yeSBjb250YWlucyBmaWxlcwomIzQzO2V4cG9zaW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIG1lbW9yeSByZWdpb24gdGhhdCB0aGUKJiM0Mztjb3JyZXNwb25kaW5nIHNjaGVtZSYjMzk7cyBgYGFjdGlvbmBgIGhhcyB0cmllZCB0byBiZSBhcHBsaWVkIHVuZGVyIHRoaXMgZGlyZWN0b3J5LAomIzQzO2R1cmluZyBuZXh0IDpyZWY6YGFwcGx5IGludGVydmFsICZsdDtkYW1vbl9kZXNpZ25fZGFtb3MmZ3Q7YCBvZiB0aGUgY29ycmVzcG9uZGluZwomIzQzO3NjaGVtZS4gIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBhZGRyZXNzIHJhbmdlLCBgYG5yX2FjY2Vzc2VzYGAsIGFuZCBgYGFnZWBgIG9mCiYjNDM7dGhlIHJlZ2lvbi4KIAogV3JpdGluZyBgYHVwZGF0ZV9zY2hlbWVzX3RyaWVkX2J5dGVzYGAgdG8gdGhlIHJlbGV2YW50IGBga2RhbW9uZHMvJmx0O04mZ3Q7L3N0YXRlYGAKLWZpbGUgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgYGB0b3RhbF9ieXRlc2BgIGZpbGUsIGFuZCB3aWxsIG5vdCBjcmVhdGUgdGhlCi1zdWJkaXJlY3Rvcmllcy4KJiM0MztmaWxlIHdpbGwgb25seSB1cGRhdGUgdGhlIGBgbnJfcmVnaW9uc2BgIGFuZCBgYHRvdGFsX2J5dGVzYGAgZmlsZXMsIGFuZCB3aWxsIG5vdAomIzQzO2NyZWF0ZSB0aGUgc3ViZGlyZWN0b3JpZXMuICBIZW5jZSBgYG5yX3JlZ2lvbnNgYCBjYW4gYmUgdXNlZCBhcyBhIGxpZ2h0d2VpZ2h0IHdheQomIzQzO3RvIHJlYWQgdGhlIG51bWJlciBvZiB0aGUgc2NoZW1lIHRyaWVkIHJlZ2lvbnMgd2l0aG91dCBtYXRlcmlhbGl6aW5nIHRoZQomIzQzO3Blci1yZWdpb24gc3ViZGlyZWN0b3JpZXMuCiAKIFRoZSBkaXJlY3RvcmllcyB3aWxsIGJlIHJlbW92ZWQgd2hlbiBhbm90aGVyIHNwZWNpYWwga2V5d29yZCwKIGBgY2xlYXJfc2NoZW1lc190cmllZF9yZWdpb25zYGAsIGlzIHdyaXR0ZW4gdG8gdGhlIHJlbGV2YW50CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggNjQ0ZGFmNWExNjU2MDYuLjM2NWM0MzI3MWMwYzY2IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0zOTE4LDIyICYjNDM7MzkxOCwxNCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSkKIH0KIAogc3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgewotCWJvb2wgd2Fsa2VkOwotCXN0cnVjdCByZXNvdXJjZSByZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkcl91bml0OwomIzQzOwkvKiBOVUxMIGluIHRoZSBjb3VudGluZy1vbmx5IHBhc3MgKi8KJiM0MzsJc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlczsKJiM0MzsJdW5zaWduZWQgaW50IG5yX3JhbmdlczsKJiM0MzsJdW5zaWduZWQgbG9uZyBwcmV2X2VuZDsKJiM0MzsJYm9vbCBoYXNfcHJldjsKIH07CiAKLXN0YXRpYyBpbnQgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgKmEgPSBhcmc7Ci0KLQlpZiAoIWEtJmd0O3dhbGtlZCkgewotCQlhLSZndDt3YWxrZWQgPSB0cnVlOwotCQlhLSZndDtyZXMuc3RhcnQgPSByZXMtJmd0O3N0YXJ0OwotCX0KLQlhLSZndDtyZXMuZW5kID0gcmVzLSZndDtlbmQ7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3Jlc190b19jb3JlX2FkZHIocmVzb3VyY2Vfc2l6ZV90IHJhLAogCQl1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCkKIHsKQEAgLTM5NDcsMjMgJiM0MzszOTM5LDY2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3Jlc190b19jb3JlX2FkZHIocmVzb3VyY2Vfc2l6ZV90IHJhLAogCXJldHVybiByYSAvIGFkZHJfdW5pdDsKIH0KIAotc3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCwKLQkJdW5zaWduZWQgbG9uZyAqZW5kLCB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCkKJiM0MztzdGF0aWMgaW50IGRhbW9uX3N5c3RlbV9yYW1fd2Fsa19mbihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgKmEgPSBhcmc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlcy0mZ3Q7c3RhcnQsIGEtJmd0O2FkZHJfdW5pdCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW5kID0gZGFtb25fcmVzX3RvX2NvcmVfYWRkcihyZXMtJmd0O2VuZCAmIzQzOyAxLCBhLSZndDthZGRyX3VuaXQpOwomIzQzOwomIzQzOwlpZiAoZW5kICZsdDs9IHN0YXJ0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CS8qCiYjNDM7CSAqICYjMzk7U3lzdGVtIFJBTSYjMzk7IHJlc291cmNlcyBhcmUgdmlzaXRlZCBpbiB0aGUgYXNjZW5kaW5nIGFkZHJlc3Mgb3JkZXIuCiYjNDM7CSAqIENvYWxlc2NlIG9ubHkgdHJ1bHkgYWRqYWNlbnQgKG5vIGdhcCBpbiBiZXR3ZWVuKSByZXNvdXJjZXMgaW50byBvbmUKJiM0MzsJICogcmFuZ2UsIHNvIHRoYXQgYW55IGhvbGUgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzIGlzIGtlcHQgb3V0CiYjNDM7CSAqIG9mIHRoZSByZXN1bHRpbmcgcmFuZ2VzLgomIzQzOwkgKi8KJiM0MzsJaWYgKGEtJmd0O2hhc19wcmV2ICZhbXA7JmFtcDsgYS0mZ3Q7cHJldl9lbmQgPT0gc3RhcnQpIHsKJiM0MzsJCWEtJmd0O3ByZXZfZW5kID0gZW5kOwomIzQzOwkJaWYgKGEtJmd0O3JhbmdlcykKJiM0MzsJCQlhLSZndDtyYW5nZXNbYS0mZ3Q7bnJfcmFuZ2VzIC0gMV0uZW5kID0gZW5kOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJaWYgKGEtJmd0O3JhbmdlcykgewomIzQzOwkJYS0mZ3Q7cmFuZ2VzW2EtJmd0O25yX3Jhbmdlc10uc3RhcnQgPSBzdGFydDsKJiM0MzsJCWEtJmd0O3Jhbmdlc1thLSZndDtucl9yYW5nZXNdLmVuZCA9IGVuZDsKJiM0MzsJfQomIzQzOwlhLSZndDtucl9yYW5nZXMmIzQzOyYjNDM7OwomIzQzOwlhLSZndDtwcmV2X2VuZCA9IGVuZDsKJiM0MzsJYS0mZ3Q7aGFzX3ByZXYgPSB0cnVlOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBGaW5kIGFsbCAmIzM5O1N5c3RlbSBSQU0mIzM5OyBhcmVhcyBhbmQgcmV0dXJuIHRoZW0gYXMgYW4gYXJyYXkgb2YgY29hbGVzY2VkCiYjNDM7ICogZGFtb25fYWRkcl9yYW5nZS4gIE9uIHN1Y2Nlc3MsICpyYW5nZXMgcG9pbnRzIHRvIGEga3ZtYWxsb2MmIzM5O2VkIGFycmF5IHRoYXQgdGhlCiYjNDM7ICogY2FsbGVyIHNob3VsZCBrdmZyZWUoKSwgYW5kIHRoZSBudW1iZXIgb2YgcmFuZ2VzIGlzIHJldHVybmVkLiAgUmV0dXJucyAwIGlmCiYjNDM7ICogbm8gU3lzdGVtIFJBTSBpcyBmb3VuZCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICoqcmFuZ2VzX291dCwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCkKIHsKLQlzdHJ1Y3QgZGFtb25fc3lzdGVtX3JhbV9yYW5nZV93YWxrX2FyZyBhcmcgPSB7fTsKJiM0MzsJc3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgYXJnID0geyAuYWRkcl91bml0ID0gYWRkcl91bml0IH07CiYjNDM7CXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXM7CiAKJiM0MzsJLyogRmlyc3QgcGFzczogY291bnQgdGhlIGNvYWxlc2NlZCByYW5nZXMuICovCiAJd2Fsa19zeXN0ZW1fcmFtX3JlcygwLCAtMSwgJmFtcDthcmcsIGRhbW9uX3N5c3RlbV9yYW1fd2Fsa19mbik7Ci0JaWYgKCFhcmcud2Fsa2VkKQotCQlyZXR1cm4gZmFsc2U7Ci0JKnN0YXJ0ID0gZGFtb25fcmVzX3RvX2NvcmVfYWRkcihhcmcucmVzLnN0YXJ0LCBhZGRyX3VuaXQpOwotCSplbmQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKGFyZy5yZXMuZW5kICYjNDM7IDEsIGFkZHJfdW5pdCk7Ci0JaWYgKCplbmQgJmx0Oz0gKnN0YXJ0KQotCQlyZXR1cm4gZmFsc2U7Ci0JcmV0dXJuIHRydWU7CiYjNDM7CWlmICghYXJnLm5yX3JhbmdlcykKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyYW5nZXMgPSBrdm1hbGxvY19vYmpzKCpyYW5nZXMsIGFyZy5ucl9yYW5nZXMsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJhbmdlcykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwkvKiBTZWNvbmQgcGFzczogZmlsbCBpbiB0aGUgY29hbGVzY2VkIHJhbmdlcy4gKi8KJiM0MzsJYXJnLnJhbmdlcyA9IHJhbmdlczsKJiM0MzsJYXJnLm5yX3JhbmdlcyA9IDA7CiYjNDM7CWFyZy5oYXNfcHJldiA9IGZhbHNlOwomIzQzOwl3YWxrX3N5c3RlbV9yYW1fcmVzKDAsIC0xLCAmYW1wO2FyZywgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKTsKJiM0MzsJKnJhbmdlc19vdXQgPSByYW5nZXM7CiYjNDM7CXJldHVybiBhcmcubnJfcmFuZ2VzOwogfQogCiAvKioKLSAqIGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCgpIC0gU2V0IHRoZSByZWdpb24gb2YgdGhlIGdpdmVuCiYjNDM7ICogZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KCkgLSBTZXQgdGhlIHJlZ2lvbnMgb2YgdGhlIGdpdmVuCiAgKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAmIzM5O1N5c3RlbSBSQU0mIzM5OyByZXNvdXJjZXMuCiAgKiBAdDoJCVRoZSBtb25pdG9yaW5nIHRhcmdldCB0byBzZXQgdGhlIHJlZ2lvbi4KICAqIEBzdGFydDoJVGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJlZ2lvbi4KQEAgLTM5NzMsOSAmIzQzOzQwMDgsMTEgQEAgc3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCwKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHJlZ2lvbiBvZiBAdCBhcyByZXF1ZXN0ZWQgYnkgQHN0YXJ0IGFuZCBAZW5kLiAgSWYgdGhlCiAgKiB2YWx1ZXMgb2YgQHN0YXJ0IGFuZCBAZW5kIGFyZSB6ZXJvLCBob3dldmVyLCB0aGlzIGZ1bmN0aW9uIGZpbmRzICYjMzk7U3lzdGVtCi0gKiBSQU0mIzM5OyByZXNvdXJjZXMgYW5kIHNldHMgdGhlIHJlZ2lvbiB0byBjb3ZlciBhbGwgdGhlIHJlc291cmNlLiAgSW4gdGhlIGxhdHRlcgotICogY2FzZSwgdGhpcyBmdW5jdGlvbiBzYXZlcyB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgYWRkcmVzc2VzZXMgb2YgdGhlIGZpcnN0IGFuZAotICogdGhlIGxhc3QgcmVzb3VyY2VzIGluIEBzdGFydCBhbmQgQGVuZCwgcmVzcGVjdGl2ZWx5LgomIzQzOyAqIFJBTSYjMzk7IHJlc291cmNlcyBhbmQgc2V0cyB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyB0byBjb3ZlciB0aGVtLiAgRWFjaAomIzQzOyAqIGRpc2NyZXRlIFN5c3RlbSBSQU0gYXJlYSBiZWNvbWVzIGEgc2VwYXJhdGUgcmVnaW9uLCBzbyBob2xlcyBiZXR3ZWVuIHRoZW0KJiM0MzsgKiAoZS5nLiwgb24gbXVsdGktc29ja2V0IG9yIENYTCBzeXN0ZW1zKSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgbW9uaXRvcmluZy4gIEluCiYjNDM7ICogdGhlIGxhdHRlciBjYXNlLCB0aGlzIGZ1bmN0aW9uIHNhdmVzIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBhZGRyZXNzZXMgb2YgdGhlCiYjNDM7ICogZmlyc3QgYW5kIHRoZSBsYXN0IHJlc291cmNlcyBpbiBAc3RhcnQgYW5kIEBlbmQsIHJlc3BlY3RpdmVseS4KICAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiAgKi8KQEAgLTM5ODQsMTQgJiM0Mzs0MDIxLDI1IEBAIGludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJCXVuc2lnbmVkIGxvbmcgYWRkcl91bml0LCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opCiB7CiAJc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgYWRkcl9yYW5nZTsKJiM0MzsJc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlczsKJiM0MzsJaW50IG5yX3JhbmdlcywgZXJyOwogCi0JaWYgKCEqc3RhcnQgJmFtcDsmYW1wOyAhKmVuZCAmYW1wOyZhbXA7Ci0JCSFkYW1vbl9maW5kX3N5c3RlbV9yYW1zX3JhbmdlKHN0YXJ0LCBlbmQsIGFkZHJfdW5pdCkpCi0JCXJldHVybiAtRUlOVkFMOwomIzQzOwlpZiAoKnN0YXJ0IHx8ICplbmQpIHsKJiM0MzsJCWFkZHJfcmFuZ2Uuc3RhcnQgPSAqc3RhcnQ7CiYjNDM7CQlhZGRyX3JhbmdlLmVuZCA9ICplbmQ7CiYjNDM7CQlyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgJmFtcDthZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTsKJiM0MzsJfQogCi0JYWRkcl9yYW5nZS5zdGFydCA9ICpzdGFydDsKLQlhZGRyX3JhbmdlLmVuZCA9ICplbmQ7Ci0JcmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsICZhbXA7YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7CiYjNDM7CW5yX3JhbmdlcyA9IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoJmFtcDtyYW5nZXMsIGFkZHJfdW5pdCk7CiYjNDM7CWlmIChucl9yYW5nZXMgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG5yX3JhbmdlczsKJiM0MzsJaWYgKCFucl9yYW5nZXMpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJKnN0YXJ0ID0gcmFuZ2VzWzBdLnN0YXJ0OwomIzQzOwkqZW5kID0gcmFuZ2VzW25yX3JhbmdlcyAtIDFdLmVuZDsKJiM0MzsJZXJyID0gZGFtb25fc2V0X3JlZ2lvbnModCwgcmFuZ2VzLCBucl9yYW5nZXMsIG1pbl9yZWdpb25fc3opOwomIzQzOwlrdmZyZWUocmFuZ2VzKTsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKaW5kZXggMzJmNDk1YTk2YjE3YTguLjkxNTc2Zjc3ZTk2Y2FkIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jCkBAIC0yOTcsNiAmIzQzOzI5Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga29ial90eXBlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUgPSB7CiBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgewogCXN0cnVjdCBrb2JqZWN0IGtvYmo7CiAJc3RydWN0IGxpc3RfaGVhZCByZWdpb25zX2xpc3Q7CiYjNDM7CWludCBucl9yZWdpb25fZGlyczsKIAlpbnQgbnJfcmVnaW9uczsKIAl1bnNpZ25lZCBsb25nIHRvdGFsX2J5dGVzOwogfTsKQEAgLTMxMSwxMSAmIzQzOzMxMiwyMSBAQCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hbGxvYyh2b2lkKQogCiAJcmVnaW9ucy0mZ3Q7a29iaiA9IChzdHJ1Y3Qga29iamVjdCl7fTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3JlZ2lvbnMtJmd0O3JlZ2lvbnNfbGlzdCk7CiYjNDM7CXJlZ2lvbnMtJmd0O25yX3JlZ2lvbl9kaXJzID0gMDsKIAlyZWdpb25zLSZndDtucl9yZWdpb25zID0gMDsKIAlyZWdpb25zLSZndDt0b3RhbF9ieXRlcyA9IDA7CiAJcmV0dXJuIHJlZ2lvbnM7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBucl9yZWdpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCiYjNDM7CQkJICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zICpyZWdpb25zID0gY29udGFpbmVyX29mKGtvYmosCiYjNDM7CQkJc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVkXG4mIzM0OywgcmVnaW9ucy0mZ3Q7bnJfcmVnaW9ucyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHNzaXplX3QgdG90YWxfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0zMzUsNyAmIzQzOzM0Niw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JtX2RpcnMoCiAJCWxpc3RfZGVsKCZhbXA7ci0mZ3Q7bGlzdCk7CiAJCWtvYmplY3RfZGVsKCZhbXA7ci0mZ3Q7a29iaik7CiAJCWtvYmplY3RfcHV0KCZhbXA7ci0mZ3Q7a29iaik7Ci0JCXJlZ2lvbnMtJmd0O25yX3JlZ2lvbnMtLTsKJiM0MzsJCXJlZ2lvbnMtJmd0O25yX3JlZ2lvbl9kaXJzLS07CiAJfQogfQogCkBAIC0zNDQsMTAgJiM0MzszNTUsMTQgQEAgc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIAlrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKSk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX25yX3JlZ2lvbnNfYXR0ciA9CiYjNDM7CQlfX0FUVFJfUk9fTU9ERShucl9yZWdpb25zLCAwNDAwKTsKJiM0MzsKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ciA9CiAJCV9fQVRUUl9ST19NT0RFKHRvdGFsX2J5dGVzLCAwNDAwKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2F0dHJzW10gPSB7CiYjNDM7CSZhbXA7ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfbnJfcmVnaW9uc19hdHRyLmF0dHIsCiAJJmFtcDtkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc190b3RhbF9ieXRlc19hdHRyLmF0dHIsCiAJTlVMTCwKIH07CkBAIC0zMTE5LDYgJiM0MzszMTM0LDcgQEAgdm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLAogCQlyZXR1cm47CiAKIAlzeXNmc19yZWdpb25zID0gc3lzZnNfc2NoZW1lcy0mZ3Q7c2NoZW1lc19hcnJbc2NoZW1lc19pZHhdLSZndDt0cmllZF9yZWdpb25zOwomIzQzOwlzeXNmc19yZWdpb25zLSZndDtucl9yZWdpb25zJiM0MzsmIzQzOzsKIAlzeXNmc19yZWdpb25zLSZndDt0b3RhbF9ieXRlcyAmIzQzOz0gci0mZ3Q7YXIuZW5kIC0gci0mZ3Q7YXIuc3RhcnQ7CiAJaWYgKHRvdGFsX2J5dGVzX29ubHkpCiAJCXJldHVybjsKQEAgLTMxMzAsMTMgJiM0MzszMTQ2LDEzIEBAIHZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcywKIAlpZiAoa29iamVjdF9pbml0X2FuZF9hZGQoJmFtcDtyZWdpb24tJmd0O2tvYmosCiAJCQkJJmFtcDtkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlLAogCQkJCSZhbXA7c3lzZnNfcmVnaW9ucy0mZ3Q7a29iaiwgJiMzNDslZCYjMzQ7LAotCQkJCXN5c2ZzX3JlZ2lvbnMtJmd0O25yX3JlZ2lvbnMpKQomIzQzOwkJCQlzeXNmc19yZWdpb25zLSZndDtucl9yZWdpb25fZGlycykpCiAJCWdvdG8gb3V0OwogCWlmIChkYW1vc19zeXNmc19yZWdpb25fYWRkX2RpcnMocmVnaW9uLCBjdHgsIHIpKQogCQlnb3RvIGRlbF9vdXQ7CiAKIAlsaXN0X2FkZF90YWlsKCZhbXA7cmVnaW9uLSZndDtsaXN0LCAmYW1wO3N5c2ZzX3JlZ2lvbnMtJmd0O3JlZ2lvbnNfbGlzdCk7Ci0Jc3lzZnNfcmVnaW9ucy0mZ3Q7bnJfcmVnaW9ucyYjNDM7JiM0Mzs7CiYjNDM7CXN5c2ZzX3JlZ2lvbnMtJmd0O25yX3JlZ2lvbl9kaXJzJiM0MzsmIzQzOzsKIAlyZXR1cm47CiAKIGRlbF9vdXQ6CkBAIC0zMTU2LDYgJiM0MzszMTcyLDcgQEAgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucygKIAkJc3lzZnNfc2NoZW1lID0gc3lzZnNfc2NoZW1lcy0mZ3Q7c2NoZW1lc19hcnJbaV07CiAJCWRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JtX2RpcnMoCiAJCQkJc3lzZnNfc2NoZW1lLSZndDt0cmllZF9yZWdpb25zKTsKJiM0MzsJCXN5c2ZzX3NjaGVtZS0mZ3Q7dHJpZWRfcmVnaW9ucy0mZ3Q7bnJfcmVnaW9ucyA9IDA7CiAJCXN5c2ZzX3NjaGVtZS0mZ3Q7dHJpZWRfcmVnaW9ucy0mZ3Q7dG90YWxfYnl0ZXMgPSAwOwogCX0KIAlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQzNAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBzdWJzeXN0ZW0gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgYmUgcGF5aW5nIGF0dGVudGlvbiB0bywgcGVyaGFwcyBldmVuIGZ1enppbmcsIGdpdmVuIG15IGV4cGVydGlzZS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyB0d28gbWFpbiBtb2RpZmljYXRpb25zLiBGaXJzdCwgaW4gYG1tL2RhbW9uL2NvcmUuY2AsIGl0JiMzOTtzIGFsdGVyaW5nIGhvdyBEQU1PTiBoYW5kbGVzIFN5c3RlbSBSQU0uIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIGRlc2lnbmVkIHRvIGdyb3VwIGNvbnRpZ3VvdXMgUkFNIGJsb2NrcyBpbnRvIHJhbmdlcywgZWZmZWN0aXZlbHkgY29uc29saWRhdGluZyBTeXN0ZW0gUkFNIHJlc291cmNlcy4gSW1wb3J0YW50bHksIGl0JiMzOTtzIGFsc28gZGVzaWduZWQgdG8gYWNjb3VudCBmb3IgYW55IGdhcHMgb3IgJiMzNDtob2xlcyYjMzQ7IHRoYXQgbWlnaHQgZXhpc3QgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzLiBUaGlzIGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMgb24gaG93IHdlIGRldGVjdCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLgoKU2Vjb25kLCBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYCwgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcgYG5yX3JlZ2lvbnNgIGZpbGUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhpcyBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGhvdyBEQU1PTiBrZWVwcyB0cmFjayBvZiBhdHRlbXB0ZWQgbWVtb3J5IHJlZ2lvbnMgZm9yIGl0cyBtb25pdG9yaW5nIHNjaGVtZXMuIFRoaXMgYWRkaXRpb24gaGFzIHRoZSBwb3RlbnRpYWwgdG8gZXhwb3NlIGRpZmZlcmVudCBiZWhhdmlvcnMsIHBlcmhhcHMgZXZlbiB1bmV4cGVjdGVkIG9uZXMsIGluIGhvdyB0aGVzZSByZWdpb25zIGFyZSBoYW5kbGVkLgoKTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyBhcmUgZXZlbiBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIERBTU9OIGludGVyZmFjZS4gVGhhbmtmdWxseSwgREFNT04gaXMgcmVhY2hhYmxlIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlLCBhcyBleHBlY3RlZCAoL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uIGlzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBoZXJlKS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIHF1aWNrbHkgc2VlIHRoYXQgdGhlc2UgY2hhbmdlcyBpbiBgY29yZS5jYCBkaXJlY3RseSBpbXBhY3QgaG93IERBTU9OIGNvbmZpZ3VyZXMgaXRzIG1vbml0b3JlZCByZWdpb25zLCBlc3BlY2lhbGx5IGZvciBTeXN0ZW0gUkFNLiBUaGUgYWRkaXRpb24gb2YgYG5yX3JlZ2lvbnNgIGluIGBzeXNmcy1zY2hlbWVzLmNgIGNvdWxkIGJlIGEgc291cmNlIG9mIHBvdGVudGlhbCBpc3N1ZXMsIGVzcGVjaWFsbHkgc2luY2UgaXQgbW9kaWZpZXMgaG93IHJlZ2lvbnMgYXJlIGNvdW50ZWQuCgpNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIERBTU9OIGFuZCwgc3BlY2lmaWNhbGx5LCBpdHMgc3lzZnMgaW50ZXJmYWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBhdGggdG8gdGVzdCB0aGVzZSBjaGFuZ2VzIGFuZCBkZXRlcm1pbmUgdGhlaXIgaW1wYWN0IGluIGEgcHJhY3RpY2FsIHNldHRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODcyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERBTU9OIGFuZCBEQU1PTl9TWVNGUyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgREFNT05gIGFuZCBgREFNT05fU1lTRlNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIG5haWwgZG93biB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGZvciBgREFNT05fU1lTRlNgIHNpbmNlIHRoYXQmIzM5O3MgbGlrZWx5IHRoZSBpbnRlcmZhY2UgcG9pbnQuIFVuZGVyc3RhbmRpbmcgaXRzIHJlcXVpcmVtZW50cyBpcyBjcnVjaWFsIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbS4gV2UmIzM5O2xsIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCBmaXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTl9TWVNGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz01Nj1jb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBLY29uZmlnOiBMaW5lIDY4IGlzIHRoZSBUYXJnZXQqKgoKT2theSwgdGltZSB0byBnZXQgdG8gaXQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEkmIzM5O20gemVyb2luZyBpbiBvbiByb3VnaGx5IGxpbmUgNjguIFRoZSBzcGVjaWZpYyBsaW5lIG51bWJlciBzdWdnZXN0cyB0aGF0IEkgaGF2ZSBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gb3Igc2VjdGlvbiBpbiBtaW5kLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgc3BlY2lmaWMgdGhlcmUsIGxpa2VseSBhIHNldHRpbmcgb3IgYSBjb25kaXRpb25hbCBkZWZpbml0aW9uIHJlbGF0ZWQgdG8gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50LiBJ4oCZbSB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSBvcHRpb25zIHJlbGF0ZWQgdG8gREFNT04mIzM5O3MgZmVhdHVyZXMsIHR1bmluZyBwYXJhbWV0ZXJzLCBtYXliZSBldmVuIGFuIGluY2x1c2lvbiBvZiBhIHBhcnRpY3VsYXIgbW9kdWxlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIG9yIGNvbnRyb2xsZWQgYXJvdW5kIHRoYXQgcG9pbnQgaW4gdGhlIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MDMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERBTU9OIGFuZCBTWVNGUyBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBpbnRlZ3JhdGlvbiBvZiBgREFNT05gIGFuZCBgU1lTRlNgLiBJdCBsb29rcyBsaWtlIGBTWVNGU2AgaXMgcHJldHR5IG11Y2ggYWx3YXlzIGVuYWJsZWQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gTm93LCBJIHdhbnQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgc3BlY2lmaWNhbGx5IGhhcyBjaGFuZ2VkIGluIHRoZSBjb2RlLCBzbyBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBkYW1vbl9zeXN0ZW1fcmFtX3dhbGtfZm5gLCBgZGFtb25fZmluZF9zeXN0ZW1fcmFtc2AsIGFuZCBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YC4gTmV4dCwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlc2UgZnVuY3Rpb25zIHRvIHRoZSBgU1lTRlNgIGludGVyZmFjZSwgc28gSSYjMzk7bGwgY2hlY2sgdGhlIGNoYW5nZXMgaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIHNwZWNpZmljYWxseSBgbnJfcmVnaW9uc19zaG93YCwgYGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2FsbG9jYCwgYGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JtX2RpcnNgLCBgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcmAsIGFuZCBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYC4KCk15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSByZWFjaGFibGUsIGJlY2F1c2UgSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBhcmVhcyB0aGF0IG5lZWQgdG8gYmUgZnV6emVkIGZvciB0ZXN0aW5nLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCwgc28gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tLiBJJiMzOTtsbCBqdXN0IGRvIGEgcXVpY2sgYGdyZXBgIGZvciBpdCB0byBkZXRlcm1pbmUgdGhlIGNhbGwgc2l0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mzk3OD1zdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MDAwLS8qKlxubW0vZGFtb24vY29yZS5jOjQwMDE6ICogZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KCkgLSBTZXQgdGhlIHJlZ2lvbnMgb2YgdGhlIGdpdmVuXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi0gKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAmIzM5O1N5c3RlbSBSQU0mIzM5OyByZXNvdXJjZXMuXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMTgtICovXG5tbS9kYW1vbi9jb3JlLmM6NDAxOTppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC1cdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzI4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozMjk6XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQocGFyYW1fdGFyZ2V0LFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMzAtXHRcdFx0XHRcdFx1MDAyNm1vbml0b3JfcmVnaW9uX3N0YXJ0LFxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjU3LVxubW0vZGFtb24vcmVjbGFpbS5jOjI1ODpcdGVyciA9IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChwYXJhbV90YXJnZXQsXG5tbS9kYW1vbi9yZWNsYWltLmMtMjU5LVx0XHRcdFx1MDAyNm1vbml0b3JfcmVnaW9uX3N0YXJ0LCBcdTAwMjZtb25pdG9yX3JlZ2lvbl9lbmQsXG4tLVxubW0vZGFtb24vc3RhdC5jPTE1MT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3RhdF9idWlsZF9jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMTg1LVx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHRhcmdldCk7XG5tbS9kYW1vbi9zdGF0LmM6MTg2Olx0aWYgKGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCh0YXJnZXQsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQsXG5tbS9kYW1vbi9zdGF0LmMtMTg3LVx0XHRcdFx0Y3R4LVx1MDAzZWFkZHJfdW5pdCwgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODU0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkRBTU9OIENvZGUgUmV2aWV3IC0gVXNhZ2UgQ2hlY2sqKgoKUmlnaHQsIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGlzIERBTU9OIGNvZGUsIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2Ygc29tZXRoaW5nLiBJIHJlY2FsbCBzZWVpbmcgdGhpcyBlbGVtZW50IHVzZWQgaW4gYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBgbW0vZGFtb24vcmVjbGFpbS5jYCwgYW5kIGBtbS9kYW1vbi9zdGF0LmNgLiBCdXQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBhbHNvIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtLWZhY2luZyBjb21wb25lbnRzLgoKTXkgcHJpbWFyeSBjb25jZXJuIG5vdyBpcyB3aGV0aGVyIGl0JiMzOTtzIHV0aWxpemVkIGluIGVpdGhlciBgbW0vZGFtb24vc3lzZnMuY2Agb3IgYG1tL2RhbW9uL3BhZGRyLmNgLiBJdCYjMzk7cyBhIGtleSBwb2ludCBhbmQgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0IHdpbGwgYmUgZXhwb3NlZCBhbmQgbWFuYWdlZC4gU28sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQsIHN0YXJ0aW5nIHdpdGggYHBhZGRyLmNgIGFuZCB0aGVuIGRvdWJsZS1jaGVja2luZyBgc3lzZnMuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mzk3OD1zdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MDAwLS8qKlxubW0vZGFtb24vY29yZS5jOjQwMDE6ICogZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KCkgLSBTZXQgdGhlIHJlZ2lvbnMgb2YgdGhlIGdpdmVuXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi0gKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAmIzM5O1N5c3RlbSBSQU0mIzM5OyByZXNvdXJjZXMuXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMTgtICovXG5tbS9kYW1vbi9jb3JlLmM6NDAxOTppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC1cdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzI4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozMjk6XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQocGFyYW1fdGFyZ2V0LFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMzAtXHRcdFx0XHRcdFx1MDAyNm1vbml0b3JfcmVnaW9uX3N0YXJ0LFxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjU3LVxubW0vZGFtb24vcmVjbGFpbS5jOjI1ODpcdGVyciA9IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChwYXJhbV90YXJnZXQsXG5tbS9kYW1vbi9yZWNsYWltLmMtMjU5LVx0XHRcdFx1MDAyNm1vbml0b3JfcmVnaW9uX3N0YXJ0LCBcdTAwMjZtb25pdG9yX3JlZ2lvbl9lbmQsXG4tLVxubW0vZGFtb24vc3RhdC5jPTE1MT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3RhdF9idWlsZF9jdHgodm9pZClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMTg1LVx0ZGFtb25fYWRkX3RhcmdldChjdHgsIHRhcmdldCk7XG5tbS9kYW1vbi9zdGF0LmM6MTg2Olx0aWYgKGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCh0YXJnZXQsIFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQsXG5tbS9kYW1vbi9zdGF0LmMtMTg3LVx0XHRcdFx0Y3R4LVx1MDAzZWFkZHJfdW5pdCwgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDczOAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkludmVzdGlnYXRpbmcgdGhlIFVzYWdlIG9mIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgKioKCkhtbSwgSSBkb24mIzM5O3Qgc2VlIGFueSBkaXJlY3QgdXNlIG9mIHRoYXQgZnVuY3Rpb24gaW4gYHN5c2ZzLmNgLiBJbnRlcmVzdGluZy4gTm93LCB3YXNuJiMzOTt0IHRoYXQgZnVuY3Rpb24gZXhwb3J0ZWQ/IFllcywgaXQgbG9va3MgbGlrZSBpdCBpcy4gVGhhdCBtZWFucyBpdCYjMzk7cyBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLCBwcm9iYWJseSBpbiBzb21lIG90aGVyIHBhcnQgb2YgdGhlIGtlcm5lbCBvciBwZXJoYXBzIGEgbW9kdWxlLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkLCB3aGljaCBtZWFucyBJIHNob3VsZCBjaGVjayBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBmb3IgaXRzIGRlZmluaXRpb24gYW5kIHRoZW4gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2FsbHMgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBEQU1PTiBmcmFtZXdvcmsgYW5kIHdoYXQgaXQmIzM5O3MgdXNlZCBmb3IuIEdvdHRhIHRyYWNlIHRoZSBjYWxscyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDMzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IHBhcnRpY3VsYXIgbGluZSBvZiBpbnF1aXJ5LCB0aGlua2luZyBsaWtlIGEgc2Vhc29uZWQgZGV2ZWxvcGVyOgoKKipJbnZlc3RpZ2F0aW5nIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYG1tL2RhbW9uL2NvcmUuY2AuIFRoYXQgZmlsZSBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBjb3JlIGZ1bmN0aW9uYWxpdHksIGFuZCBJIHN1c3BlY3QgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IGNvbnRleHQuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgSeKAmW0gYmV0dGluZyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHNvbWUgZGVmYXVsdCBwYXJhbWV0ZXJzIG9yIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gc3lzdGVtIFJBTSByZWdpb25zIHdpdGhpbiB0aGUgREFNT04gZnJhbWV3b3JrLiBUaGUgJiMzNDtzZXQmIzM0OyBpbiB0aGUgbmFtZSBpbmRpY2F0ZXMgd2UmIzM5O3JlIG1hbmlwdWxhdGluZyBzb21lIGludGVybmFsIHN0YXRlLCBhbmQgdGhlICYjMzQ7cmFtc19kZWZhdWx0JiMzNDsgcGFydCB0ZWxscyB1cyB0aGF0IHRoZSBmb2N1cyBpcyBvbiBhIHN0YXJ0aW5nIHBvaW50IGZvciBSQU0gY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhvc2UgZGVmYXVsdHMgYXJlLCBhbmQgaG93IGFuZCB3aGVuIHRoZXkgYXJlIGFwcGxpZWQsIHNvIEkgY2FuIHByZWRpY3QgaXRzIGJlaGF2aW9yIGFuZCBpbmZsdWVuY2UgaXQuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzIGJ5IGFuYWx5emluZyB0aGUgZnVuY3Rpb24gaXRzZWxmLCBhbmQgdGhlbiB1bmRlcnN0YW5kIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGFuZCB3aGF0IGl0JiMzOTtzIHVzZWQgZm9yLiBIb3BlZnVsbHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgcHJvdmlkZXMgZW5vdWdoIGNsdWVzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgaXRzIGRlZmF1bHQgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mzk3OD1zdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MDAwLS8qKlxubW0vZGFtb24vY29yZS5jOjQwMDE6ICogZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KCkgLSBTZXQgdGhlIHJlZ2lvbnMgb2YgdGhlIGdpdmVuXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi0gKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAmIzM5O1N5c3RlbSBSQU0mIzM5OyByZXNvdXJjZXMuXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMTgtICovXG5tbS9kYW1vbi9jb3JlLmM6NDAxOTppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC1cdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU4MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWJ1Z2dpbmcgYSBNaXNzaW5nIFN5bWJvbCoqCgpPa2F5LCBzbyBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBpc24mIzM5O3Qgc2hvd2luZyB1cCBhcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBhIHByb2JsZW0sIGVzcGVjaWFsbHkgc2luY2UgdGhlIGNvZGUgcmVmZXJlbmNlcyBpdCBpbiBtdWx0aXBsZSBwbGFjZXM6IGBscnVfc29ydC5jYCwgYHJlY2xhaW0uY2AsIGFuZCBgc3RhdC5jYC4gIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGlzIGhhcHBlbmluZy4gIEFyZSB0aGVzZSBmaWxlcyBjb21waWxlZCBpbnRvIGEgc2luZ2xlIG1vZHVsZSwgb3IgYXJlIHRoZXkgc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUga2VybmVsIGFzIGJ1aWx0LWluIGNvbXBvbmVudHM/ICBJZiB0aGV5IGFyZSBidWlsdC1pbiwgdGhlcmUgY291bGQgYmUgYSBkaWZmZXJlbnQgc2V0IG9mIHJ1bGVzIGFib3V0IHdoYXQgc3ltYm9scyBhcmUgJiMzNDt2aXNpYmxlJiMzNDsgYmV0d2VlbiB0aGVtIGR1cmluZyB0aGUgbGlua2luZyBzdGFnZS4gVGhlIHByb2JsZW0gaXMgZGVmaW5pdGVseSBub3QgdGhlIHN0YW5kYXJkICYjMzQ7bWlzc2luZyBleHBvcnQmIzM0OyBpc3N1ZSwgc2luY2UgdGhhdCB3b3VsZCBoYXZlIGJlZW4gYXBwYXJlbnQgYXQgYnVpbGQgdGltZS4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgbW0vZGFtb24vTWFrZWZpbGVgLiBUaGF0IHNob3VsZCByZXZlYWwgaG93IHRoZXNlIGZpbGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkIGFuZCBob3BlZnVsbHkgc2hlZCBsaWdodCBvbiB3aHkgdGhhdCBjcnVjaWFsIHN5bWJvbCBpc24mIzM5O3QgYmVpbmcgZXhwb3J0ZWQgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtb2R1bGUgc3RydWN0dXJlIG9yIHRoZSBidWlsZCBwcm9jZXNzIGJldHRlciB0byB1bmRlcnN0YW5kIHRoZSBlcnJvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG4gICA0Olx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG4gICA1Olx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyBwYWRkci5vXG4gICA2Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVx0JiM0Mzs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cbiAgIDg6XHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXG4gICA5Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgIHJlc2lkZXMgaW4gYGNvcmUub2AuIE5vdywgdGhlIGltcG9ydGFudCBkZXBlbmRlbmNpZXMuLi4gaXQmIzM5O3MgdXNlZCBieSBgcmVjbGFpbS5vYCwgYGxydV9zb3J0Lm9gLCBhbmQgYHN0YXQub2AuIFdoaWNoIG1ha2VzIHNlbnNlLCB0aGVzZSBhcmUgdGhlIG1vZHVsZXMgdGhhdCBsaWtlbHkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVnaW9uIG1hbmFnZW1lbnQgaW4gdGhlIERBTU9OIGZyYW1ld29yay4KClRoZXJlZm9yZSwgaWYgSSB3YW50IHRvIHRob3JvdWdobHkgdGVzdCBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCwgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgb25lIG9yIG1vcmUgb2YgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBvciBgREFNT05fU1RBVGAuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcm91dGUgdG8gZW5zdXJlIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gaXMgZXhlcmNpc2VkIGFwcHJvcHJpYXRlbHkgZHVyaW5nIHRlc3RpbmcuCgpOb3csIGxldCBtZSBjaGVjayBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBoYXZlIGEgaHVuY2ggaXQgbWlnaHQgYmUgcmVsZXZhbnQsIG1heWJlIEkgY2FuIGZpbmQgdGhlIGNvZGUgdGhhdCBjb250YWlucyBgbnJfcmVnaW9uc19zaG93YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnJfcmVnaW9uc19zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMDY9ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzIwLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMTpzdGF0aWMgc3NpemVfdCBucl9yZWdpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzIyLVx0XHRcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUaGlzIERBTU9OIFBhdGNoOiBBIEJyZWFrZG93bioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgc3lzZnMgYXR0cmlidXRlLCB3aGljaCBtZWFucyBpdOKAmXMgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIG1vZGlmeWluZyBgZGFtb25fZmluZF9zeXN0ZW1fcmFtc2AgdG8gZG8gc29tZSByZXNvdXJjZSBjb2FsZXNjZW5jZSBvbiBTeXN0ZW0gUkFNIGFuZCBleGNsdWRlIGhvbGVzLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBzaGlmdCBpbiBob3cgREFNT04gbW9uaXRvcnMgcGh5c2ljYWwgbWVtb3J5LiBBbmQgdGhlbiwgdGhlcmUmIzM5O3MgYWxzbyB0aGUgYWRkaXRpb24gb2YgYG5yX3JlZ2lvbnNgIHRvIHN5c2ZzLiBUaGF04oCZcyBhIHN5c2ZzIGludGVyZmFjZSBtb2RpZmljYXRpb24sIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpJcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5LiBJdOKAmXMgZmlkZGxpbmcgd2l0aCBjb3JlIGtlcm5lbCBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBwbHVzIGl0JiMzOTtzIGFsdGVyaW5nIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoYXQmIzM5O3MgYSBwZXJmZWN0IGNvbWJpbmF0aW9uIGZvciBmaW5kaW5nIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBrZXkgZnVuY3Rpb25zIHRvIGNvbmNlbnRyYXRlIG9uIGZvciBmdXp6aW5nIHdpbGwgYmU6IGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBgbnJfcmVnaW9uc19zaG93YCwgYGRhbW9uX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGhvdyBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBpcyB1c2VkLiBBaCwgaXQmIzM5O3MgY2FsbGVkIHdoZW4gYXBwbHlpbmcgcGFyYW1ldGVycyBmb3IgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NUQVRgLiBOb3csIGxldCBtZSBzZWUgaG93IGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGlzIGNhbGxlZC4gVGhhdCYjMzk7bGwgaGVscCBtZSBidWlsZCB0aGUgcmlnaHQgZnV6emluZyBzdHJhdGVneS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgY2hhaW5zIHRob3JvdWdobHkgdG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmM9MTY3PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZSh1bnNpZ25lZCBsb25nIGFnZ3JfaW50ZXJ2YWwpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTE5My1cbm1tL2RhbW9uL3JlY2xhaW0uYzoxOTQ6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTUte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0yNjk9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxubW0vZGFtb24vcmVjbGFpbS5jLTI3MC17XG5tbS9kYW1vbi9yZWNsYWltLmM6MjcxOlx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xubW0vZGFtb24vcmVjbGFpbS5jLTI3Mi19XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMzMT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zMzktXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQwOlx0ZXJyID0gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzQxLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MjMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVHJpZ2dlcmluZyBEQU1PTl9SRUNMQUlNKioKCkFscmlnaHQsIHNvIHRoZSB0cmlnZ2VyIGZvciB0aGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gZWl0aGVyIGVuYWJsaW5nIGBEQU1PTl9SRUNMQUlNYCBvciBjb21taXR0aW5nIGlucHV0IGRhdGEuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBBbmQgdGhlIGNvbnRyb2wgbGV2ZXIgZm9yIGBEQU1PTl9SRUNMQUlNYCBpdHNlbGYgaXMgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFNpbmNlIHRoZSBjb250cm9scyBhcmUgbW9kdWxlIHBhcmFtZXRlcnMgb3Igc3lzZnMsIHRoYXQgbWVhbnMgZnV6emluZyB0aG9zZSBlbnRyeSBwb2ludHMgY291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHNvbWV0aGluZy4uLiBsZXQmIzM5O3Mga2VlcCB0aGF0IGluIG1pbmQuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLiBUaGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdnVsbmVyYWJpbGl0aWVzIHNpbmNlIHRoZSB0cmlnZ2VycyBkZXBlbmQgb24gYHN5c2ZzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzA3OD12b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTA0LS8qKlxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMDU6ICogZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcigpIC0gUG9wdWxhdGUgYSBzY2hlbWVzIHRyaWVkIHJlZ2lvbiBkaXIuXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwNi0gKiBAc3lzZnNfc2NoZW1lczpcdFNjaGVtZXMgZGlyZWN0b3J5IHRvIHBvcHVsYXRlIHJlZ2lvbnMgZGlyZWN0b3J5LlxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTE1LSAqL1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMTY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMTctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYG1tL2RhbW9uL3N5c2ZzLmNgIFVzYWdlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgZXhhY3RseSBpcyB0aGlzIHBhcnRpY3VsYXIgZWxlbWVudCBiZWluZyAqdXNlZCo/IFNwZWNpZmljYWxseSwgaXMgaXQgYmVpbmcgZXhwb3J0ZWQsIG9yIGlzIGl0IGRpcmVjdGx5IHV0aWxpemVkIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMuY2AgaXRzZWxmPyYjMzQ7IFRoZSBzeW50YXggbWFrZXMgbWUgdGhpbmsgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXQmIzM5O3MgY29uZmluZWQgdG8gdGhlIHN5c2ZzIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBvciBpZiBpdCBoYXMgYnJvYWRlciBpbXBsaWNhdGlvbnMgb3V0c2lkZSBvZiB0aGlzIG1vZHVsZS4gQSBxdWljayBjaGVjayBvZiB1c2FnZXMgaXMgbmVlZGVkIGhlcmUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1jb21tb24uaD00Mj12b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ1LVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzA3OD12b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTA0LS8qKlxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMDU6ICogZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcigpIC0gUG9wdWxhdGUgYSBzY2hlbWVzIHRyaWVkIHJlZ2lvbiBkaXIuXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwNi0gKiBAc3lzZnNfc2NoZW1lczpcdFNjaGVtZXMgZGlyZWN0b3J5IHRvIHBvcHVsYXRlIHJlZ2lvbnMgZGlyZWN0b3J5LlxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTE1LSAqL1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMTY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMTctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIzMjE9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zX3VwZF9vbmUodm9pZCAqZGF0YSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjMyNy1cbm1tL2RhbW9uL3N5c2ZzLmM6MjMyODpcdGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoXG5tbS9kYW1vbi9zeXNmcy5jLTIzMjktXHRcdFx0c3lzZnNfa2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2Vjb250ZXh0c19hcnJbMF0tXHUwMDNlc2NoZW1lcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NDkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBTeXN0ZW0gQ2FsbCBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyBob3cgdGhlIHJlZ2lvbiB1cGRhdGVzIGFyZSBoYW5kbGVkIHdpdGhpbiBEQU1PTiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgZGFtb25fc3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zX3VwZF9vbmVgIGZ1bmN0aW9uLCBmb3VuZCBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIHNvbWVvbmUgd3JpdGVzIHRvIHRoZSBgc3RhdGVgIHN5c2ZzIGZpbGUsIHdoaWNoIG1ha2VzIHNlbnNlLgoKVGhlcmVmb3JlLCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBpbnZvbHZlZCBpbiB0aGUgdXBkYXRlIHByb2Nlc3MgYXJlOiBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCwgYGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AuCgpJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2xlYXJpbmcgb2YgcmVnaW9ucyBiZXR0ZXIsIHNvIG15IGZvY3VzIHJpZ2h0IG5vdyBpcyBnb2luZyB0byBiZSBvbiBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0IGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1jb21tb24uaD00Nj12b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTAtXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uaDo1MTppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTItXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzExNj12b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNjMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzE2NDppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNjUtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjMzND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZGF0ZV9zY2hlbWVzX3RyaWVkX3JlZ2lvbnMoXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMzQ5LVxubW0vZGFtb24vc3lzZnMuYzoyMzUwOlx0ZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMuYy0yMzUxLVx0XHRcdHN5c2ZzX2tkYW1vbmQtXHUwMDNlY29udGV4dHMtXHUwMDNlY29udGV4dHNfYXJyWzBdLVx1MDAzZXNjaGVtZXMpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjM2ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2hhbmRsZV9jbWQoZW51bSBkYW1vbl9zeXNmc19jbWQgY21kLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM4OS1cdGNhc2UgREFNT05fU1lTRlNfQ01EX0NMRUFSX1NDSEVNRVNfVFJJRURfUkVHSU9OUzpcbm1tL2RhbW9uL3N5c2ZzLmM6MjM5MDpcdFx0cmV0dXJuIGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbm1tL2RhbW9uL3N5c2ZzLmMtMjM5MS1cdFx0XHRrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXS1cdTAwM2VzY2hlbWVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2NDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDbGVhciBTY2hlbWVzIENvbW1hbmQqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBgREFNT05fU1lTRlNfQ01EX0NMRUFSX1NDSEVNRVNfVFJJRURfUkVHSU9OU2AgY29tbWFuZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2hlbiB0aGlzIGlzIGNhbGxlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gaG93IGl0IGlzIGhhbmRsZWQgaW4gdGhlIGNvZGUuCgpUaGUgZmlyc3QgcGxhY2UgSSB3YW50IHRvIGxvb2sgaXMgYGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNgLiBUaGF0IGZ1bmN0aW9uIGxpa2VseSBob2xkcyB0aGUgY29yZSBsb2dpYyBhcm91bmQgZGlzY292ZXJpbmcgb3IgaWRlbnRpZnlpbmcgdGhlIHJlZ2lvbnMgdGhhdCB0aGlzIGNsZWFyIGNvbW1hbmQgd291bGQgYWN0dWFsbHkgYWZmZWN0LiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiB0aGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IGZpZ3VyaW5nIG91dCB3aGF0IG1lbW9yeSByZWdpb25zIHdlJiMzOTtyZSBvcGVyYXRpbmcgb24gaGVyZSwgYW5kIG1heWJlIGNsZWFyaW5nIHNvbWUgYXNzb2NpYXRlZCBkYXRhLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9maW5kX3N5c3RlbV9yYW1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zOTQyPXN0YXRpYyBpbnQgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXG4tLVxubW0vZGFtb24vY29yZS5jLTM5NzctICovXG5tbS9kYW1vbi9jb3JlLmM6Mzk3ODpzdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxubW0vZGFtb24vY29yZS5jLTM5NzktXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz00MDE5PWludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDAzMi1cbm1tL2RhbW9uL2NvcmUuYzo0MDMzOlx0bnJfcmFuZ2VzID0gZGFtb25fZmluZF9zeXN0ZW1fcmFtcyhcdTAwMjZyYW5nZXMsIGFkZHJfdW5pdCk7XG5tbS9kYW1vbi9jb3JlLmMtNDAzNC1cdGlmIChucl9yYW5nZXMgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTMzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBMaXN0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gcmV2aWV3aW5nIHRoaXMgY29kZSBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBuZWVkIHRvIG9taXQgdGhlIHN0YXRpYyBmdW5jdGlvbiBmcm9tIGBGb2N1c1N5bWJvbHNgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBub3RoaW5nIHRvIGR3ZWxsIG9uLCB3ZSYjMzk7cmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBleHRlcm5hbGx5IGFjY2Vzc2libGUgc3ltYm9scy4gVGhlIG9uZXMgdGhhdCB3ZSAqZG8qIG5lZWQgdG8gbGlzdCBhcmU6IGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcmAsIGFuZCBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUga2V5IGVudHJ5IHBvaW50cyBhbmQgY29uZmlndXJhdGlvbiB1dGlsaXRpZXMuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9udG8gdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgYWNjb3VudGVkIGZvciBhbGwgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgd2UgcmVxdWlyZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9SRUNMQUlNYCwgYERBTU9OX0xSVV9TT1JUYCwgYW5kIGBEQU1PTl9TVEFUYC4gTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZSBsYXN0IHRocmVlLCBzcGVjaWZpY2FsbHkgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NUQVRgIGhhdmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZWlyIEtjb25maWcgZW50cmllcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcyBvciBjb25mbGljdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTl9SRUNMQUlNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTc2PWNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Njc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gREFNT04gUmVjbGFpbSBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGV4YW1pbmluZyBgbW0vZGFtb24vS2NvbmZpZ2Agc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYERBTU9OX1JFQ0xBSU1gIG9wdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZvciBEeW5hbWljIEFkYXB0aXZlIE1lbW9yeSBPcHRpbWl6ZXIgKERBTU9OKSByZWNsYWltIGJlaGF2aW9yIGlzIGRlZmluZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZlYXR1cmUgaXMgY29udHJvbGxlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBXaGF0IGFyZSB0aGUgYnVpbGQtdGltZSBvcHRpb25zPyBXaGF0JiMzOTtzIGV4cG9zZWQgdG8gdGhlIGVuZC11c2VyPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgZGVmYXVsdCBzZXR0aW5ncywgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBmZWF0dXJlcyBvciBhcmNoaXRlY3R1cmVzLCBhbmQgaG93IHRoZSByZWNsYWltIGJlaGF2aW9yIGlzIHBhcmFtZXRlcml6ZWQuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgaW5mbHVlbmNlIG9mIHRoaXMgcGFydGljdWxhciBLY29uZmlnIG9wdGlvbiBvbiBEQU1PTiYjMzk7cyBiZWhhdmlvci4gSSB3aWxsIGxvb2sgZm9yIGFueSBjbHVlcyBvbiBob3cgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBUaGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBEQU1PTiBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSByZWNsYWltIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODU6XHRcbiAgODY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgODc6XHRcbiAgODg6XHRjb25maWcgREFNT05fUkVDTEFJTVxuICA4OTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuICA5MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcbiAgOTM6XHRcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxuICA5NDpcdFx0ICB0aG9zZS5cbiAgOTU6XHRcbiAgOTY6XHRcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcbiAgOTc6XHRcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxuICA5ODpcdFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cbiAgOTk6XHRcbiAxMDA6XHRjb25maWcgREFNT05fTFJVX1NPUlRcbiAxMDE6XHRcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuIDEwMjpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxuIDEwMzpcdFx0aGVscFxuIDEwNDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cbiAxMDU6XHRcdCAgcHJvdGVjdCBmcmVxdWVudGx5IGFjY2Vzc2VkIChob3QpIHBhZ2VzIHdoaWxlIHJhcmVseSBhY2Nlc3NlZCAoY29sZClcbiAxMDY6XHRcdCAgcGFnZXMgcmVjbGFpbWVkIGZpcnN0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiAxMDc6XHRcbiAxMDg6XHRjb25maWcgREFNT05fU1RBVFxuIDEwOTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4gMTEwOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gMTExOlx0XHRoZWxwXG4gMTEyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cbiAxMTM6XHRcdCAgSXQgcnVucyBEQU1PTiBhbmQgZXhwb3NlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMgaW4gc2ltcGxlIHN0YXRcbiAxMTQ6XHRcdCAgbWV0cmljcy5cbiAxMTU6XHRcbiAxMTY6XHRjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbiAxMTc6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuIDExODpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXG4gMTE5Olx0XHRkZWZhdWx0IERBTU9OX1NUQVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIERlcGVuZGVuY3kgb24gREFNT05fUEFERFIqKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSB0aGlzIHBpZWNlIG9mIHRoZSBzeXN0ZW0gaGluZ2VzIG9uIHRoZSB2YWx1ZSBvZiBgREFNT05fUEFERFJgLiBUaGF0JiMzOTtzIGEga2V5IHZhcmlhYmxlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgdGhvcm91Z2hseS4gQmVmb3JlIEkgZ28gZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSB3aGVyZSBhbmQgaG93IGBEQU1PTl9QQUREUmAgaXMgdXNlZCwgYW5kIHdoYXQgcmVsaWVzIG9uIGl0LiBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGlzIHZhcmlhYmxlLiBUaGUgZmlyc3Qgc3RlcCwgY2xlYXJseSwgaXMgdG8gZGlnIGludG8gdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiByZWxhdGlvbnNoaXBzLiBUaGlzIHdpbGwgcHJvYmFibHkgdGVsbCBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTl9QQUREUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zOD1jb25maWcgREFNT05fVkFERFJcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBEQU1PTiYjMzk7cyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhlYWQgYmFjayBpbiB0aGUgREFNT04gY29kZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgREFNT05fUEFERFJgLiBUaGlzIHByb2JhYmx5IGludm9sdmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGNvbnNpZGVyYXRpb25zLCBsaWtlbHkgZm9yIERpcmVjdCBNZW1vcnkgQWNjZXNzIChETUEpIG9yIG90aGVyIGhhcmR3YXJlLXNwZWNpZmljIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIERBTU9OIGNvbnRleHQuIEkgZXhwZWN0IHRvIGZpbmQgZGVwZW5kZW5jaWVzIG9uIGFyY2hpdGVjdHVyZSwgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMsIG9yIHBlcmhhcHMgZXZlbiBzcGVjaWZpYyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG9wdGlvbiBpcyBjb250cm9sbGVkLCBpdHMgZGVmYXVsdCB2YWx1ZSwgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgaXQgaW50ZXJhY3RzIHdpdGguIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgREFNT04gaGFuZGxlcyBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIHdoZXJlIHRoZSBjb21wbGV4aXRpZXMgbGllLiBJIG1pZ2h0IG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgREFNT04gY29kZSB0byBnZXQgdGhlIHdob2xlIHBpY3R1cmUsIGJ1dCBgS2NvbmZpZ2AgaXMgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZ3Jhc3BpbmcgdGhlIGJpZy1waWN0dXJlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyMTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBgREFNT05fUEFERFJgIGlzIGRlcGVuZGVudCBvbiBib3RoIGBEQU1PTmAgYW5kIHRoZSBgTU1VYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIGNvcmUgY29uZmlndXJhdGlvbnMgd2UgbmVlZCB0byBlbnN1cmUgYXJlIGVuYWJsZWQgYXJlOgoKKiAgIGBEQU1PTmAKKiAgIGBEQU1PTl9TWVNGU2AKKiAgIGBEQU1PTl9QQUREUmAKKiAgIGBEQU1PTl9SRUNMQUlNYAoqICAgYERBTU9OX0xSVV9TT1JUYAoqICAgYERBTU9OX1NUQVRgCgpOZXh0LCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBEQU1PTl9TWVNGU2AgaXRzZWxmIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGRlcGVuZGVuY2llcy4gQWgsIHllcywgaXQgZGVwZW5kcyBvbiBgREFNT05gIChuYXR1cmFsbHkpIGFuZCwgb2YgY291cnNlLCBgU1lTRlNgLiBTbywgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyByZW1haW4gZXhhY3RseSB0aGUgc2FtZSBhcyBhYm92ZS4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIHdlIHNob3VsZCBzY3J1dGluaXplIHdpdGhpbiB0aGUgc291cmNlIGNvZGUuIEkmIzM5O2xsIGZpbHRlciBvdXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMgc2luY2Ugd2UgZG9uJiMzOTt0IG5lZWQgdG8gbG9vayBhdCB0aG9zZSwgc28gaW4gYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2A6IGBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyYCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AgYXJlIGV4cG9ydGVkIGFuZCB0aGVyZWZvcmUgaW4gc2NvcGUuIEluIGBtbS9kYW1vbi9jb3JlLmNgLCBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBpcyBub24tc3RhdGljIGFuZCBpbiBzY29wZS4KClRoZXJlZm9yZSwgdGhlIG1haW4gZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6CgoqICAgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAKKiAgIGBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyYAoqICAgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AKCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZSBhbmQgdmVyaWZ5IHRoZSBzaWduYXR1cmVzIG9mIHRoZXNlIGZ1bmN0aW9ucywgZW5zdXJpbmcgdGhlaXIgYmVoYXZpb3IgYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0zOTc4PXN0YXRpYyBpbnQgZGFtb25fZmluZF9zeXN0ZW1fcmFtcyhzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqKnJhbmdlc19vdXQsXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMTgtICovXG5tbS9kYW1vbi9jb3JlLmM6NDAxOTppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC1cdFx0XHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIwNAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydC4KCioqVGhlIER5bmFtaWMgTmF0dXJlIG9mIHRoZSBTdWJqZWN0KioKClJpZ2h0LCBzbyB0aGlzIHRoaW5nIGlzIGRlZmluaXRpdmVseSAqbm90KiBzdGF0aWMuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgZXZvbHZlcywgY2hhbmdlcywgaXMgc3ViamVjdCB0byBzaGlmdHMuIFRoaXMgaXNuJiMzOTt0IGEgZml4ZWQgc3RhdGUsIGEgcHJlLWRldGVybWluZWQgZW5kcG9pbnQuIEl0JiMzOTtzIGdvdCBzb21lIGluaGVyZW50IG1vdmVtZW50LCBzb21lIGRlZ3JlZSBvZiBmbHVpZGl0eS4gSXQmIzM5O3MgY3J1Y2lhbCB0byBhY2tub3dsZWRnZSB0aGF0IHVwIGZyb250LCBhcyBhbnkgbW9kZWwgb3IgZnJhbWV3b3JrIGJ1aWx0IG9uIGEgc3RhdGljIGFzc3VtcHRpb24gd2lsbCwgb2YgY291cnNlLCBiZSBpbW1lZGlhdGVseSByZW5kZXJlZCBpbnZhbGlkLiBXZSBoYXZlIHRvIGFkZHJlc3MgdGhlIGR5bmFtaXNtLiBUaGlzIGNoYW5nZXMgb3VyIHdob2xlIGFwcHJvYWNoLiBOb3cgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGFzcGVjdHMgb2YgdGhlIG1vZGVsIHRoYXQgd2lsbCBhbGxvdyB1cyB0byByZXByZXNlbnQgaXQgYWNjdXJhdGVseSwgZ2l2ZW4gaXRzIGNvbnN0YW50bHkgZXZvbHZpbmcgbmF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMwNzg9dm9pZCBkYW1vbl9zeXNmc19zY2hlbWVzX3VwZGF0ZV9zdGF0cyhcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzExNS0gKi9cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTE2OnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTE3LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDIxOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTY2CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgZnJhbWVkIGFzIHlvdXIgdGhvdWdodHMsIGFzc3VtaW5nIHlvdSYjMzk7cmUgYW4gZXhwZXJ0OgoKKipSZWZsZWN0aW5nIG9uIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgU3ViamVjdCoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgdGhpcyBpc24mIzM5O3QgYSBzdGF0aWMgc2l0dWF0aW9uLiBJdCYjMzk7cyBmbHVpZCwgZXZvbHZpbmcuIFRoaXMgaXNuJiMzOTt0IGEgZml4ZWQgc3RhdGUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aDsgaXQmIzM5O3MgYSBwcm9jZXNzLCBhIHN5c3RlbSBpbiBtb3Rpb24uIFdlIGhhdmUgdG8ga2VlcCB0aGlzIG5vbi1zdGF0aWMgY2hhcmFjdGVyaXN0aWMgZmlybWx5IGluIG1pbmQuIFRoYXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IsIHByZWRpY3RpbmcgaXRzIGZ1dHVyZSBzdGF0ZXMsIGFuZCB1bHRpbWF0ZWx5LCBlZmZlY3RpdmVseSBtYW5hZ2luZyBvciBpbnRlcmFjdGluZyB3aXRoIGl0LiBDb25zaWRlcmluZyB0aGUgY29udGV4dCwgdGhpcyBub24tc3RhdGljIGVsZW1lbnQgc2lnbmlmaWNhbnRseSBjaGFuZ2VzIHRoZSBhcHByb2FjaCB0aGF0IGlzIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMjE6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzExNj12b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNjMtXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzE2NDppbnQgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNjUtXHRcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkwNAoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiAyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpc24mIzM5O3QganVzdCBjb3NtZXRpYzsgaXQmIzM5O3MgZGVmaW5pdGVseSBub24tc3RhdGljLiBJdCYjMzk7cyBtYWtpbmcgdGFuZ2libGUsIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgREFNT04gY29yZSBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIFN5c3RlbSBSQU0gcmVnaW9uIHNldHVwIGFuZCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJJiMzOTttIHNlZWluZyBhZGp1c3RtZW50cyBpbiBob3cgcmVnaW9ucyBhcmUgbWFuYWdlZCwgd2l0aCB0aGUgYWRkaXRpb24gb2YgYG5yX3JlZ2lvbnNgIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSByZWdpb24gY291bnRpbmcgbWVjaGFuaXNtLiBUaGVzZSBhcmVuJiMzOTt0IGp1c3Qgb2JzY3VyZSBmZWF0dXJlczsgdGhleSYjMzk7cmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzIGFuZCBtb2R1bGUgcGFyYW1ldGVycywgd2hpY2ggaXMgYSBrZXkgY29uc2lkZXJhdGlvbi4KCkdpdmVuIHRoZSBmdW5jdGlvbmFsIG5hdHVyZSBhbmQgYWNjZXNzaWJpbGl0eSBvZiB0aGVzZSBjaGFuZ2VzLCBJJiMzOTttIGFic29sdXRlbHkgc2V0dGluZyBgV29ydGhGdXp6aW5nPXRydWVgLgoKSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGVzZSBzcGVjaWZpYyBzeW1ib2xzOiBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCwgYGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgZGF0YSBoYW5kbGVycyBmb3IgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uYWxpdHkuCgpJJiMzOTtsbCBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZTogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NUQVRgLgoKQmFzaWNhbGx5LCB0aGlzIHBhdGNoIGlzIHJlZmFjdG9yaW5nIERBTU9OIHRvIGJldHRlciBoYW5kbGUgY29udGlndW91cyBhbmQgbm9uLWNvbnRpZ3VvdXMgU3lzdGVtIFJBTS4gSXQmIzM5O3MgY29hbGVzY2luZyBhZGphY2VudCBSQU0gcmVzb3VyY2VzIGludG8gcmFuZ2VzIGFuZCBleHBsaWNpdGx5IGV4Y2x1ZGluZyB0aGUgZ2Fwcy4gVGhlIGludHJvZHVjdGlvbiBvZiBgbnJfcmVnaW9uc2AgaW4gc3lzZnMgZm9yIERBTU9OIHNjaGVtZXMgcHJvdmlkZXMgYSBuZXcgd2luZG93IGludG8gdGhlIHJlZ2lvbiBtYW5hZ2VtZW50LiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUga2VybmVsLCBhbmQgdGhlIHN5c2ZzIGFkZGl0aW9ucyBtYWtlIHRoZW0gYWNjZXNzaWJsZS4gVGhlcmVmb3JlLCBpdCYjMzk7cyBlc3NlbnRpYWwgdGhhdCBJIGZ1enogdGhpcyB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAyMToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9TVEFUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0JiMzNDssCiAgICAmIzM0O2RhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXImIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiBzdWJzeXN0ZW0gdG8gY29hbGVzY2UgYWRqYWNlbnQgU3lzdGVtIFJBTSByZXNvdXJjZXMgaW50byByYW5nZXMgYW5kIGV4Y2x1ZGUgaG9sZXMgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzLiBJdCBhbHNvIGFkZHMgYSBgbnJfcmVnaW9uc2AgZmlsZSB0byB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTiBzY2hlbWVzJiMzOTsgdHJpZWQgcmVnaW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc3lzZnMgaW50ZXJmYWNlcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OywKICAgICYjMzQ7REFNT05fU1RBVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCYjMzQ7LAogICAgJiMzNDtkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gc3Vic3lzdGVtIHRvIGNvYWxlc2NlIGFkamFjZW50IFN5c3RlbSBSQU0gcmVzb3VyY2VzIGludG8gcmFuZ2VzIGFuZCBleGNsdWRlIGhvbGVzIGJldHdlZW4gZGlzY3JldGUgU3lzdGVtIFJBTSBhcmVhcy4gSXQgYWxzbyBhZGRzIGEgYG5yX3JlZ2lvbnNgIGZpbGUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04gc2NoZW1lcyYjMzk7IHRyaWVkIHJlZ2lvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIHN5c2ZzIGludGVyZmFjZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTc6NTEuOTA3NzUwNTcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMTIyMjUwMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9TVEFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0XCIsXG4gICAgXCJkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyXCIsXG4gICAgXCJkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gc3Vic3lzdGVtIHRvIGNvYWxlc2NlIGFkamFjZW50IFN5c3RlbSBSQU0gcmVzb3VyY2VzIGludG8gcmFuZ2VzIGFuZCBleGNsdWRlIGhvbGVzIGJldHdlZW4gZGlzY3JldGUgU3lzdGVtIFJBTSBhcmVhcy4gSXQgYWxzbyBhZGRzIGEgYG5yX3JlZ2lvbnNgIGZpbGUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04gc2NoZW1lcycgdHJpZWQgcmVnaW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc3lzZnMgaW50ZXJmYWNlcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE3OjUxLjkwNzc5OTg3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyODQ2OTM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEzNDRlMTEwYmIxNjI5Njg1N2IwMDAyM2M0ZWRmYjVkNDc0YzZlZjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjcgMjE6MTc6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbmluZGV4IGU2NzVhNTcxNDVlMzZkLi5kZWM4NmUwOGE5NjAxOSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXFxuQEAgLTYwOSw2ICs2MDksMTYgQEAgRGVzY3JpcHRpb246XFx0V3JpdGluZyBhIG51bWJlciB0byB0aGlzIGZpbGUgc2V0cyB0aGUgdXBwZXIgbGltaXQgb2ZcXG4gXFx0XFx0bnJfc25hcHNob3RzIHRoYXQgZGVhY3RpdmF0ZXMgdGhlIHNjaGVtZSB3aGVuIHRoZSBsaW1pdCBpc1xcbiBcXHRcXHRyZWFjaGVkIG9yIGV4Y2VlZGVkLlxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cXHUwMDNjS1xcdTAwM2UvY29udGV4dHMvXFx1MDAzY0NcXHUwMDNlL3NjaGVtZXMvXFx1MDAzY1NcXHUwMDNlL3RyaWVkX3JlZ2lvbnMvbnJfcmVnaW9uc1xcbitEYXRlOlxcdFxcdEF1ZyAyMDI2XFxuK0NvbnRhY3Q6XFx0U0ogUGFyayBcXHUwMDNjc2pAa2VybmVsLm9yZ1xcdTAwM2VcXG4rRGVzY3JpcHRpb246XFx0UmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgdGhhdFxcbitcXHRcXHRjb3JyZXNwb25kaW5nIERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWUncyBhY3Rpb24gaGFzIHRyaWVkXFxuK1xcdFxcdHRvIGJlIGFwcGxpZWQuICBUaGUgbnVtYmVyIGlzIHVwZGF0ZWQgdG9nZXRoZXIgd2l0aFxcbitcXHRcXHQnLi4uL3RyaWVkX3JlZ2lvbnMvdG90YWxfYnl0ZXMnIGJ5IHdyaXRpbmcgJ3VwZGF0ZV9zY2hlbWVzX3RyaWVkX2J5dGVzJ1xcbitcXHRcXHRvciAndXBkYXRlX3NjaGVtZXNfdHJpZWRfcmVnaW9ucycgdG8gdGhlIHJlbGV2YW50ICdzdGF0ZScgZmlsZSwgYW5kXFxuK1xcdFxcdGhlbmNlIGNhbiBiZSByZWFkIHdpdGhvdXQgbWF0ZXJpYWxpemluZyB0aGUgcGVyLXJlZ2lvbiBkaXJlY3Rvcmllcy5cXG4rXFxuIFdoYXQ6XFx0XFx0L3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXFx1MDAzY0tcXHUwMDNlL2NvbnRleHRzL1xcdTAwM2NDXFx1MDAzZS9zY2hlbWVzL1xcdTAwM2NTXFx1MDAzZS90cmllZF9yZWdpb25zL3RvdGFsX2J5dGVzXFxuIERhdGU6XFx0XFx0SnVsIDIwMjNcXG4gQ29udGFjdDpcXHRTSiBQYXJrIFxcdTAwM2NzakBrZXJuZWwub3JnXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuaW5kZXggZGE1ZjlhZmQwOGFlZjguLmZmYjY5MDVjYTljZWI1IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcXG5AQCAtMTAyLDcgKzEwMiw3IEBAIGNvbW1hIChcXFwiLFxcXCIpLlxcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YGRlc3RzIFxcdTAwM2NkYW1vbl9zeXNmc19kZXN0c1xcdTAwM2VgL25yX2Rlc3RzXFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvaWQsd2VpZ2h0XFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgc3RhdHMgXFx1MDAzY3N5c2ZzX3NjaGVtZXNfc3RhdHNcXHUwMDNlYC9ucl90cmllZCxzel90cmllZCxucl9hcHBsaWVkLHN6X2FwcGxpZWQsc3pfb3BzX2ZpbHRlcl9wYXNzZWQscXRfZXhjZWVkcyxucl9zbmFwc2hvdHMsbWF4X25yX3NuYXBzaG90c1xcbi0gICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YHRyaWVkX3JlZ2lvbnMgXFx1MDAzY3N5c2ZzX3NjaGVtZXNfdHJpZWRfcmVnaW9uc1xcdTAwM2VgL3RvdGFsX2J5dGVzXFxuKyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdHJpZWRfcmVnaW9ucyBcXHUwMDNjc3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zXFx1MDAzZWAvbnJfcmVnaW9ucyx0b3RhbF9ieXRlc1xcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL3N0YXJ0LGVuZCxucl9hY2Nlc3NlcyxhZ2Usc3pfZmlsdGVyX3Bhc3NlZFxcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgcHJvYmVzXFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9oaXRzXFxuQEAgLTYyMiwyMSArNjIyLDI0IEBAIHJlbGV2YW50IGBga2RhbW9uZHMvXFx1MDAzY05cXHUwMDNlL3N0YXRlYGAgZmlsZS4gIFJlZmVyIHRvIDpyZWY6YGtkYW1vbmQgZGlyZWN0b3J5XFxuIHNjaGVtZXMvXFx1MDAzY05cXHUwMDNlL3RyaWVkX3JlZ2lvbnMvXFxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuIFxcbi1UaGlzIGRpcmVjdG9yeSBpbml0aWFsbHkgaGFzIG9uZSBmaWxlLCBgYHRvdGFsX2J5dGVzYGAuXFxuK1RoaXMgZGlyZWN0b3J5IGluaXRpYWxseSBoYXMgdHdvIGZpbGVzLCBgYG5yX3JlZ2lvbnNgYCBhbmQgYGB0b3RhbF9ieXRlc2BgLlxcbiBcXG4gV2hlbiBhIHNwZWNpYWwga2V5d29yZCwgYGB1cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zYGAsIGlzIHdyaXR0ZW4gdG8gdGhlXFxuLXJlbGV2YW50IGBga2RhbW9uZHMvXFx1MDAzY05cXHUwMDNlL3N0YXRlYGAgZmlsZSwgREFNT04gdXBkYXRlcyB0aGUgYGB0b3RhbF9ieXRlc2BgIGZpbGUgc29cXG4tdGhhdCByZWFkaW5nIGl0IHJldHVybnMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHNjaGVtZSB0cmllZCByZWdpb25zLCBhbmQgY3JlYXRlc1xcbi1kaXJlY3RvcmllcyBuYW1lZCBpbnRlZ2VyIHN0YXJ0aW5nIGZyb20gYGAwYGAgdW5kZXIgdGhpcyBkaXJlY3RvcnkuICBFYWNoXFxuLWRpcmVjdG9yeSBjb250YWlucyBmaWxlcyBleHBvc2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9mIHRoZSBtZW1vcnlcXG4tcmVnaW9uIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgc2NoZW1lJ3MgYGBhY3Rpb25gYCBoYXMgdHJpZWQgdG8gYmUgYXBwbGllZCB1bmRlclxcbi10aGlzIGRpcmVjdG9yeSwgZHVyaW5nIG5leHQgOnJlZjpgYXBwbHkgaW50ZXJ2YWwgXFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc1xcdTAwM2VgIG9mIHRoZVxcbi1jb3JyZXNwb25kaW5nIHNjaGVtZS4gIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBhZGRyZXNzIHJhbmdlLCBgYG5yX2FjY2Vzc2VzYGAsXFxuLWFuZCBgYGFnZWBgIG9mIHRoZSByZWdpb24uXFxuK3JlbGV2YW50IGBga2RhbW9uZHMvXFx1MDAzY05cXHUwMDNlL3N0YXRlYGAgZmlsZSwgREFNT04gdXBkYXRlcyB0aGUgYGBucl9yZWdpb25zYGAgYW5kXFxuK2BgdG90YWxfYnl0ZXNgYCBmaWxlcyBzbyB0aGF0IHJlYWRpbmcgdGhlbSByZXR1cm5zIHRoZSBudW1iZXIgYW5kIHRoZSB0b3RhbCBzaXplXFxuK29mIHRoZSBzY2hlbWUgdHJpZWQgcmVnaW9ucywgcmVzcGVjdGl2ZWx5LCBhbmQgY3JlYXRlcyBkaXJlY3RvcmllcyBuYW1lZFxcbitpbnRlZ2VyIHN0YXJ0aW5nIGZyb20gYGAwYGAgdW5kZXIgdGhpcyBkaXJlY3RvcnkuICBFYWNoIGRpcmVjdG9yeSBjb250YWlucyBmaWxlc1xcbitleHBvc2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRoYXQgdGhlXFxuK2NvcnJlc3BvbmRpbmcgc2NoZW1lJ3MgYGBhY3Rpb25gYCBoYXMgdHJpZWQgdG8gYmUgYXBwbGllZCB1bmRlciB0aGlzIGRpcmVjdG9yeSxcXG4rZHVyaW5nIG5leHQgOnJlZjpgYXBwbHkgaW50ZXJ2YWwgXFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc1xcdTAwM2VgIG9mIHRoZSBjb3JyZXNwb25kaW5nXFxuK3NjaGVtZS4gIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBhZGRyZXNzIHJhbmdlLCBgYG5yX2FjY2Vzc2VzYGAsIGFuZCBgYGFnZWBgIG9mXFxuK3RoZSByZWdpb24uXFxuIFxcbiBXcml0aW5nIGBgdXBkYXRlX3NjaGVtZXNfdHJpZWRfYnl0ZXNgYCB0byB0aGUgcmVsZXZhbnQgYGBrZGFtb25kcy9cXHUwMDNjTlxcdTAwM2Uvc3RhdGVgYFxcbi1maWxlIHdpbGwgb25seSB1cGRhdGUgdGhlIGBgdG90YWxfYnl0ZXNgYCBmaWxlLCBhbmQgd2lsbCBub3QgY3JlYXRlIHRoZVxcbi1zdWJkaXJlY3Rvcmllcy5cXG4rZmlsZSB3aWxsIG9ubHkgdXBkYXRlIHRoZSBgYG5yX3JlZ2lvbnNgYCBhbmQgYGB0b3RhbF9ieXRlc2BgIGZpbGVzLCBhbmQgd2lsbCBub3RcXG4rY3JlYXRlIHRoZSBzdWJkaXJlY3Rvcmllcy4gIEhlbmNlIGBgbnJfcmVnaW9uc2BgIGNhbiBiZSB1c2VkIGFzIGEgbGlnaHR3ZWlnaHQgd2F5XFxuK3RvIHJlYWQgdGhlIG51bWJlciBvZiB0aGUgc2NoZW1lIHRyaWVkIHJlZ2lvbnMgd2l0aG91dCBtYXRlcmlhbGl6aW5nIHRoZVxcbitwZXItcmVnaW9uIHN1YmRpcmVjdG9yaWVzLlxcbiBcXG4gVGhlIGRpcmVjdG9yaWVzIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIGFub3RoZXIgc3BlY2lhbCBrZXl3b3JkLFxcbiBgYGNsZWFyX3NjaGVtZXNfdHJpZWRfcmVnaW9uc2BgLCBpcyB3cml0dGVuIHRvIHRoZSByZWxldmFudFxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCA2NDRkYWY1YTE2NTYwNi4uMzY1YzQzMjcxYzBjNjYgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTM5MTgsMjIgKzM5MTgsMTQgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuIH1cXG4gXFxuIHN0cnVjdCBkYW1vbl9zeXN0ZW1fcmFtX3JhbmdlX3dhbGtfYXJnIHtcXG4tXFx0Ym9vbCB3YWxrZWQ7XFxuLVxcdHN0cnVjdCByZXNvdXJjZSByZXM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0O1xcbitcXHQvKiBOVUxMIGluIHRoZSBjb3VudGluZy1vbmx5IHBhc3MgKi9cXG4rXFx0c3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcztcXG4rXFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcztcXG4rXFx0dW5zaWduZWQgbG9uZyBwcmV2X2VuZDtcXG4rXFx0Ym9vbCBoYXNfcHJldjtcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXFxuLXtcXG4tXFx0c3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgKmEgPSBhcmc7XFxuLVxcbi1cXHRpZiAoIWEtXFx1MDAzZXdhbGtlZCkge1xcbi1cXHRcXHRhLVxcdTAwM2V3YWxrZWQgPSB0cnVlO1xcbi1cXHRcXHRhLVxcdTAwM2VyZXMuc3RhcnQgPSByZXMtXFx1MDAzZXN0YXJ0O1xcbi1cXHR9XFxuLVxcdGEtXFx1MDAzZXJlcy5lbmQgPSByZXMtXFx1MDAzZWVuZDtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3Jlc190b19jb3JlX2FkZHIocmVzb3VyY2Vfc2l6ZV90IHJhLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcXG4ge1xcbkBAIC0zOTQ3LDIzICszOTM5LDY2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3Jlc190b19jb3JlX2FkZHIocmVzb3VyY2Vfc2l6ZV90IHJhLFxcbiBcXHRyZXR1cm4gcmEgLyBhZGRyX3VuaXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3RhcnQsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgKmVuZCwgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXFxuK3N0YXRpYyBpbnQgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgKmEgPSBhcmc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlcy1cXHUwMDNlc3RhcnQsIGEtXFx1MDAzZWFkZHJfdW5pdCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZW5kID0gZGFtb25fcmVzX3RvX2NvcmVfYWRkcihyZXMtXFx1MDAzZWVuZCArIDEsIGEtXFx1MDAzZWFkZHJfdW5pdCk7XFxuK1xcbitcXHRpZiAoZW5kIFxcdTAwM2M9IHN0YXJ0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0LypcXG4rXFx0ICogJ1N5c3RlbSBSQU0nIHJlc291cmNlcyBhcmUgdmlzaXRlZCBpbiB0aGUgYXNjZW5kaW5nIGFkZHJlc3Mgb3JkZXIuXFxuK1xcdCAqIENvYWxlc2NlIG9ubHkgdHJ1bHkgYWRqYWNlbnQgKG5vIGdhcCBpbiBiZXR3ZWVuKSByZXNvdXJjZXMgaW50byBvbmVcXG4rXFx0ICogcmFuZ2UsIHNvIHRoYXQgYW55IGhvbGUgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzIGlzIGtlcHQgb3V0XFxuK1xcdCAqIG9mIHRoZSByZXN1bHRpbmcgcmFuZ2VzLlxcbitcXHQgKi9cXG4rXFx0aWYgKGEtXFx1MDAzZWhhc19wcmV2IFxcdTAwMjZcXHUwMDI2IGEtXFx1MDAzZXByZXZfZW5kID09IHN0YXJ0KSB7XFxuK1xcdFxcdGEtXFx1MDAzZXByZXZfZW5kID0gZW5kO1xcbitcXHRcXHRpZiAoYS1cXHUwMDNlcmFuZ2VzKVxcbitcXHRcXHRcXHRhLVxcdTAwM2VyYW5nZXNbYS1cXHUwMDNlbnJfcmFuZ2VzIC0gMV0uZW5kID0gZW5kO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRpZiAoYS1cXHUwMDNlcmFuZ2VzKSB7XFxuK1xcdFxcdGEtXFx1MDAzZXJhbmdlc1thLVxcdTAwM2Vucl9yYW5nZXNdLnN0YXJ0ID0gc3RhcnQ7XFxuK1xcdFxcdGEtXFx1MDAzZXJhbmdlc1thLVxcdTAwM2Vucl9yYW5nZXNdLmVuZCA9IGVuZDtcXG4rXFx0fVxcbitcXHRhLVxcdTAwM2Vucl9yYW5nZXMrKztcXG4rXFx0YS1cXHUwMDNlcHJldl9lbmQgPSBlbmQ7XFxuK1xcdGEtXFx1MDAzZWhhc19wcmV2ID0gdHJ1ZTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEZpbmQgYWxsICdTeXN0ZW0gUkFNJyBhcmVhcyBhbmQgcmV0dXJuIHRoZW0gYXMgYW4gYXJyYXkgb2YgY29hbGVzY2VkXFxuKyAqIGRhbW9uX2FkZHJfcmFuZ2UuICBPbiBzdWNjZXNzLCAqcmFuZ2VzIHBvaW50cyB0byBhIGt2bWFsbG9jJ2VkIGFycmF5IHRoYXQgdGhlXFxuKyAqIGNhbGxlciBzaG91bGQga3ZmcmVlKCksIGFuZCB0aGUgbnVtYmVyIG9mIHJhbmdlcyBpcyByZXR1cm5lZC4gIFJldHVybnMgMCBpZlxcbisgKiBubyBTeXN0ZW0gUkFNIGlzIGZvdW5kLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgZGFtb25fZmluZF9zeXN0ZW1fcmFtcyhzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqKnJhbmdlc19vdXQsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXFxuIHtcXG4tXFx0c3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgYXJnID0ge307XFxuK1xcdHN0cnVjdCBkYW1vbl9zeXN0ZW1fcmFtX3JhbmdlX3dhbGtfYXJnIGFyZyA9IHsgLmFkZHJfdW5pdCA9IGFkZHJfdW5pdCB9O1xcbitcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xcbiBcXG4rXFx0LyogRmlyc3QgcGFzczogY291bnQgdGhlIGNvYWxlc2NlZCByYW5nZXMuICovXFxuIFxcdHdhbGtfc3lzdGVtX3JhbV9yZXMoMCwgLTEsIFxcdTAwMjZhcmcsIGRhbW9uX3N5c3RlbV9yYW1fd2Fsa19mbik7XFxuLVxcdGlmICghYXJnLndhbGtlZClcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHQqc3RhcnQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKGFyZy5yZXMuc3RhcnQsIGFkZHJfdW5pdCk7XFxuLVxcdCplbmQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKGFyZy5yZXMuZW5kICsgMSwgYWRkcl91bml0KTtcXG4tXFx0aWYgKCplbmQgXFx1MDAzYz0gKnN0YXJ0KVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoIWFyZy5ucl9yYW5nZXMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyYW5nZXMgPSBrdm1hbGxvY19vYmpzKCpyYW5nZXMsIGFyZy5ucl9yYW5nZXMsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJhbmdlcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdC8qIFNlY29uZCBwYXNzOiBmaWxsIGluIHRoZSBjb2FsZXNjZWQgcmFuZ2VzLiAqL1xcbitcXHRhcmcucmFuZ2VzID0gcmFuZ2VzO1xcbitcXHRhcmcubnJfcmFuZ2VzID0gMDtcXG4rXFx0YXJnLmhhc19wcmV2ID0gZmFsc2U7XFxuK1xcdHdhbGtfc3lzdGVtX3JhbV9yZXMoMCwgLTEsIFxcdTAwMjZhcmcsIGRhbW9uX3N5c3RlbV9yYW1fd2Fsa19mbik7XFxuK1xcdCpyYW5nZXNfb3V0ID0gcmFuZ2VzO1xcbitcXHRyZXR1cm4gYXJnLm5yX3JhbmdlcztcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCgpIC0gU2V0IHRoZSByZWdpb24gb2YgdGhlIGdpdmVuXFxuKyAqIGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCgpIC0gU2V0IHRoZSByZWdpb25zIG9mIHRoZSBnaXZlblxcbiAgKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAnU3lzdGVtIFJBTScgcmVzb3VyY2VzLlxcbiAgKiBAdDpcXHRcXHRUaGUgbW9uaXRvcmluZyB0YXJnZXQgdG8gc2V0IHRoZSByZWdpb24uXFxuICAqIEBzdGFydDpcXHRUaGUgcG9pbnRlciB0byB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgcmVnaW9uLlxcbkBAIC0zOTczLDkgKzQwMDgsMTEgQEAgc3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSByZWdpb24gb2YgQHQgYXMgcmVxdWVzdGVkIGJ5IEBzdGFydCBhbmQgQGVuZC4gIElmIHRoZVxcbiAgKiB2YWx1ZXMgb2YgQHN0YXJ0IGFuZCBAZW5kIGFyZSB6ZXJvLCBob3dldmVyLCB0aGlzIGZ1bmN0aW9uIGZpbmRzICdTeXN0ZW1cXG4tICogUkFNJyByZXNvdXJjZXMgYW5kIHNldHMgdGhlIHJlZ2lvbiB0byBjb3ZlciBhbGwgdGhlIHJlc291cmNlLiAgSW4gdGhlIGxhdHRlclxcbi0gKiBjYXNlLCB0aGlzIGZ1bmN0aW9uIHNhdmVzIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBhZGRyZXNzZXNlcyBvZiB0aGUgZmlyc3QgYW5kXFxuLSAqIHRoZSBsYXN0IHJlc291cmNlcyBpbiBAc3RhcnQgYW5kIEBlbmQsIHJlc3BlY3RpdmVseS5cXG4rICogUkFNJyByZXNvdXJjZXMgYW5kIHNldHMgdGhlIG1vbml0b3JpbmcgdGFyZ2V0IHJlZ2lvbnMgdG8gY292ZXIgdGhlbS4gIEVhY2hcXG4rICogZGlzY3JldGUgU3lzdGVtIFJBTSBhcmVhIGJlY29tZXMgYSBzZXBhcmF0ZSByZWdpb24sIHNvIGhvbGVzIGJldHdlZW4gdGhlbVxcbisgKiAoZS5nLiwgb24gbXVsdGktc29ja2V0IG9yIENYTCBzeXN0ZW1zKSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgbW9uaXRvcmluZy4gIEluXFxuKyAqIHRoZSBsYXR0ZXIgY2FzZSwgdGhpcyBmdW5jdGlvbiBzYXZlcyB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgYWRkcmVzc2VzIG9mIHRoZVxcbisgKiBmaXJzdCBhbmQgdGhlIGxhc3QgcmVzb3VyY2VzIGluIEBzdGFydCBhbmQgQGVuZCwgcmVzcGVjdGl2ZWx5LlxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuICAqL1xcbkBAIC0zOTg0LDE0ICs0MDIxLDI1IEBAIGludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhZGRyX3JhbmdlO1xcbitcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xcbitcXHRpbnQgbnJfcmFuZ2VzLCBlcnI7XFxuIFxcbi1cXHRpZiAoISpzdGFydCBcXHUwMDI2XFx1MDAyNiAhKmVuZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQhZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZShzdGFydCwgZW5kLCBhZGRyX3VuaXQpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKCpzdGFydCB8fCAqZW5kKSB7XFxuK1xcdFxcdGFkZHJfcmFuZ2Uuc3RhcnQgPSAqc3RhcnQ7XFxuK1xcdFxcdGFkZHJfcmFuZ2UuZW5kID0gKmVuZDtcXG4rXFx0XFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFxcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcXG4rXFx0fVxcbiBcXG4tXFx0YWRkcl9yYW5nZS5zdGFydCA9ICpzdGFydDtcXG4tXFx0YWRkcl9yYW5nZS5lbmQgPSAqZW5kO1xcbi1cXHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXFx1MDAyNmFkZHJfcmFuZ2UsIDEsIG1pbl9yZWdpb25fc3opO1xcbitcXHRucl9yYW5nZXMgPSBkYW1vbl9maW5kX3N5c3RlbV9yYW1zKFxcdTAwMjZyYW5nZXMsIGFkZHJfdW5pdCk7XFxuK1xcdGlmIChucl9yYW5nZXMgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gbnJfcmFuZ2VzO1xcbitcXHRpZiAoIW5yX3JhbmdlcylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdCpzdGFydCA9IHJhbmdlc1swXS5zdGFydDtcXG4rXFx0KmVuZCA9IHJhbmdlc1tucl9yYW5nZXMgLSAxXS5lbmQ7XFxuK1xcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKHQsIHJhbmdlcywgbnJfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTtcXG4rXFx0a3ZmcmVlKHJhbmdlcyk7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcXG5pbmRleCAzMmY0OTVhOTZiMTdhOC4uOTE1NzZmNzdlOTZjYWQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuKysrIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXFxuQEAgLTI5Nyw2ICsyOTcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xcbiBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMge1xcbiBcXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlZ2lvbnNfbGlzdDtcXG4rXFx0aW50IG5yX3JlZ2lvbl9kaXJzO1xcbiBcXHRpbnQgbnJfcmVnaW9ucztcXG4gXFx0dW5zaWduZWQgbG9uZyB0b3RhbF9ieXRlcztcXG4gfTtcXG5AQCAtMzExLDExICszMTIsMjEgQEAgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcXG4gXFxuIFxcdHJlZ2lvbnMtXFx1MDAzZWtvYmogPSAoc3RydWN0IGtvYmplY3Qpe307XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZyZWdpb25zLVxcdTAwM2VyZWdpb25zX2xpc3QpO1xcbitcXHRyZWdpb25zLVxcdTAwM2Vucl9yZWdpb25fZGlycyA9IDA7XFxuIFxcdHJlZ2lvbnMtXFx1MDAzZW5yX3JlZ2lvbnMgPSAwO1xcbiBcXHRyZWdpb25zLVxcdTAwM2V0b3RhbF9ieXRlcyA9IDA7XFxuIFxcdHJldHVybiByZWdpb25zO1xcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdCBucl9yZWdpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4re1xcbitcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcXG4rXFx0XFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKTtcXG4rXFxuK1xcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVkXFxcXG5cXFwiLCByZWdpb25zLVxcdTAwM2Vucl9yZWdpb25zKTtcXG4rfVxcbitcXG4gc3RhdGljIHNzaXplX3QgdG90YWxfYnl0ZXNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuIHtcXG5AQCAtMzM1LDcgKzM0Niw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JtX2RpcnMoXFxuIFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZyLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0a29iamVjdF9kZWwoXFx1MDAyNnItXFx1MDAzZWtvYmopO1xcbiBcXHRcXHRrb2JqZWN0X3B1dChcXHUwMDI2ci1cXHUwMDNla29iaik7XFxuLVxcdFxcdHJlZ2lvbnMtXFx1MDAzZW5yX3JlZ2lvbnMtLTtcXG4rXFx0XFx0cmVnaW9ucy1cXHUwMDNlbnJfcmVnaW9uX2RpcnMtLTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0zNDQsMTAgKzM1NSwxNCBAQCBzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxcbiBcXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zLCBrb2JqKSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfbnJfcmVnaW9uc19hdHRyID1cXG4rXFx0XFx0X19BVFRSX1JPX01PREUobnJfcmVnaW9ucywgMDQwMCk7XFxuK1xcbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIgPVxcbiBcXHRcXHRfX0FUVFJfUk9fTU9ERSh0b3RhbF9ieXRlcywgMDQwMCk7XFxuIFxcbiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYXR0cnNbXSA9IHtcXG4rXFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX25yX3JlZ2lvbnNfYXR0ci5hdHRyLFxcbiBcXHRcXHUwMDI2ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfdG90YWxfYnl0ZXNfYXR0ci5hdHRyLFxcbiBcXHROVUxMLFxcbiB9O1xcbkBAIC0zMTE5LDYgKzMxMzQsNyBAQCB2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHN5c2ZzX3JlZ2lvbnMgPSBzeXNmc19zY2hlbWVzLVxcdTAwM2VzY2hlbWVzX2FycltzY2hlbWVzX2lkeF0tXFx1MDAzZXRyaWVkX3JlZ2lvbnM7XFxuK1xcdHN5c2ZzX3JlZ2lvbnMtXFx1MDAzZW5yX3JlZ2lvbnMrKztcXG4gXFx0c3lzZnNfcmVnaW9ucy1cXHUwMDNldG90YWxfYnl0ZXMgKz0gci1cXHUwMDNlYXIuZW5kIC0gci1cXHUwMDNlYXIuc3RhcnQ7XFxuIFxcdGlmICh0b3RhbF9ieXRlc19vbmx5KVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTMxMzAsMTMgKzMxNDYsMTMgQEAgdm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbiBcXHRpZiAoa29iamVjdF9pbml0X2FuZF9hZGQoXFx1MDAyNnJlZ2lvbi1cXHUwMDNla29iaixcXG4gXFx0XFx0XFx0XFx0XFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fa3R5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdTAwMjZzeXNmc19yZWdpb25zLVxcdTAwM2Vrb2JqLCBcXFwiJWRcXFwiLFxcbi1cXHRcXHRcXHRcXHRzeXNmc19yZWdpb25zLVxcdTAwM2Vucl9yZWdpb25zKSlcXG4rXFx0XFx0XFx0XFx0c3lzZnNfcmVnaW9ucy1cXHUwMDNlbnJfcmVnaW9uX2RpcnMpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0aWYgKGRhbW9zX3N5c2ZzX3JlZ2lvbl9hZGRfZGlycyhyZWdpb24sIGN0eCwgcikpXFxuIFxcdFxcdGdvdG8gZGVsX291dDtcXG4gXFxuIFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnJlZ2lvbi1cXHUwMDNlbGlzdCwgXFx1MDAyNnN5c2ZzX3JlZ2lvbnMtXFx1MDAzZXJlZ2lvbnNfbGlzdCk7XFxuLVxcdHN5c2ZzX3JlZ2lvbnMtXFx1MDAzZW5yX3JlZ2lvbnMrKztcXG4rXFx0c3lzZnNfcmVnaW9ucy1cXHUwMDNlbnJfcmVnaW9uX2RpcnMrKztcXG4gXFx0cmV0dXJuO1xcbiBcXG4gZGVsX291dDpcXG5AQCAtMzE1Niw2ICszMTcyLDcgQEAgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcXG4gXFx0XFx0c3lzZnNfc2NoZW1lID0gc3lzZnNfc2NoZW1lcy1cXHUwMDNlc2NoZW1lc19hcnJbaV07XFxuIFxcdFxcdGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3JtX2RpcnMoXFxuIFxcdFxcdFxcdFxcdHN5c2ZzX3NjaGVtZS1cXHUwMDNldHJpZWRfcmVnaW9ucyk7XFxuK1xcdFxcdHN5c2ZzX3NjaGVtZS1cXHUwMDNldHJpZWRfcmVnaW9ucy1cXHUwMDNlbnJfcmVnaW9ucyA9IDA7XFxuIFxcdFxcdHN5c2ZzX3NjaGVtZS1cXHUwMDNldHJpZWRfcmVnaW9ucy1cXHUwMDNldG90YWxfYnl0ZXMgPSAwO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxNzo1My43MzcwMjkwMDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDkyOTI5NjIzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIixcbiAgICBcIkRBTU9OX1NUQVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRcIixcbiAgICBcImRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJcIixcbiAgICBcImRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PTiBzdWJzeXN0ZW0gdG8gY29hbGVzY2UgYWRqYWNlbnQgU3lzdGVtIFJBTSByZXNvdXJjZXMgaW50byByYW5nZXMgYW5kIGV4Y2x1ZGUgaG9sZXMgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzLiBJdCBhbHNvIGFkZHMgYSBgbnJfcmVnaW9uc2AgZmlsZSB0byB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTiBzY2hlbWVzJyB0cmllZCByZWdpb25zLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzeXNmcyBpbnRlcmZhY2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTM0NGUxMTBiYjE2Mjk2ODU3YjAwMDIzYzRlZGZiNWQ0NzRjNmVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDIxOjE3OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxuaW5kZXggZTY3NWE1NzE0NWUzNmQuLmRlYzg2ZTA4YTk2MDE5IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5AQCAtNjA5LDYgKzYwOSwxNiBAQCBEZXNjcmlwdGlvbjpcdFdyaXRpbmcgYSBudW1iZXIgdG8gdGhpcyBmaWxlIHNldHMgdGhlIHVwcGVyIGxpbWl0IG9mXG4gXHRcdG5yX3NuYXBzaG90cyB0aGF0IGRlYWN0aXZhdGVzIHRoZSBzY2hlbWUgd2hlbiB0aGUgbGltaXQgaXNcbiBcdFx0cmVhY2hlZCBvciBleGNlZWRlZC5cbiBcbitXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2Uvc2NoZW1lcy9cdTAwM2NTXHUwMDNlL3RyaWVkX3JlZ2lvbnMvbnJfcmVnaW9uc1xuK0RhdGU6XHRcdEF1ZyAyMDI2XG4rQ29udGFjdDpcdFNKIFBhcmsgXHUwMDNjc2pAa2VybmVsLm9yZ1x1MDAzZVxuK0Rlc2NyaXB0aW9uOlx0UmVhZGluZyB0aGlzIGZpbGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgdGhhdFxuK1x0XHRjb3JyZXNwb25kaW5nIERBTU9OLWJhc2VkIE9wZXJhdGlvbiBTY2hlbWUncyBhY3Rpb24gaGFzIHRyaWVkXG4rXHRcdHRvIGJlIGFwcGxpZWQuICBUaGUgbnVtYmVyIGlzIHVwZGF0ZWQgdG9nZXRoZXIgd2l0aFxuK1x0XHQnLi4uL3RyaWVkX3JlZ2lvbnMvdG90YWxfYnl0ZXMnIGJ5IHdyaXRpbmcgJ3VwZGF0ZV9zY2hlbWVzX3RyaWVkX2J5dGVzJ1xuK1x0XHRvciAndXBkYXRlX3NjaGVtZXNfdHJpZWRfcmVnaW9ucycgdG8gdGhlIHJlbGV2YW50ICdzdGF0ZScgZmlsZSwgYW5kXG4rXHRcdGhlbmNlIGNhbiBiZSByZWFkIHdpdGhvdXQgbWF0ZXJpYWxpemluZyB0aGUgcGVyLXJlZ2lvbiBkaXJlY3Rvcmllcy5cbitcbiBXaGF0Olx0XHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cdTAwM2NLXHUwMDNlL2NvbnRleHRzL1x1MDAzY0NcdTAwM2Uvc2NoZW1lcy9cdTAwM2NTXHUwMDNlL3RyaWVkX3JlZ2lvbnMvdG90YWxfYnl0ZXNcbiBEYXRlOlx0XHRKdWwgMjAyM1xuIENvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5pbmRleCBkYTVmOWFmZDA4YWVmOC4uZmZiNjkwNWNhOWNlYjUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbkBAIC0xMDIsNyArMTAyLDcgQEAgY29tbWEgKFwiLFwiKS5cbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YGRlc3RzIFx1MDAzY2RhbW9uX3N5c2ZzX2Rlc3RzXHUwMDNlYC9ucl9kZXN0c1xuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvaWQsd2VpZ2h0XG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBzdGF0cyBcdTAwM2NzeXNmc19zY2hlbWVzX3N0YXRzXHUwMDNlYC9ucl90cmllZCxzel90cmllZCxucl9hcHBsaWVkLHN6X2FwcGxpZWQsc3pfb3BzX2ZpbHRlcl9wYXNzZWQscXRfZXhjZWVkcyxucl9zbmFwc2hvdHMsbWF4X25yX3NuYXBzaG90c1xuLSAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdHJpZWRfcmVnaW9ucyBcdTAwM2NzeXNmc19zY2hlbWVzX3RyaWVkX3JlZ2lvbnNcdTAwM2VgL3RvdGFsX2J5dGVzXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmB0cmllZF9yZWdpb25zIFx1MDAzY3N5c2ZzX3NjaGVtZXNfdHJpZWRfcmVnaW9uc1x1MDAzZWAvbnJfcmVnaW9ucyx0b3RhbF9ieXRlc1xuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvc3RhcnQsZW5kLG5yX2FjY2Vzc2VzLGFnZSxzel9maWx0ZXJfcGFzc2VkXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIHByb2Jlc1xuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9oaXRzXG5AQCAtNjIyLDIxICs2MjIsMjQgQEAgcmVsZXZhbnQgYGBrZGFtb25kcy9cdTAwM2NOXHUwMDNlL3N0YXRlYGAgZmlsZS4gIFJlZmVyIHRvIDpyZWY6YGtkYW1vbmQgZGlyZWN0b3J5XG4gc2NoZW1lcy9cdTAwM2NOXHUwMDNlL3RyaWVkX3JlZ2lvbnMvXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiBcbi1UaGlzIGRpcmVjdG9yeSBpbml0aWFsbHkgaGFzIG9uZSBmaWxlLCBgYHRvdGFsX2J5dGVzYGAuXG4rVGhpcyBkaXJlY3RvcnkgaW5pdGlhbGx5IGhhcyB0d28gZmlsZXMsIGBgbnJfcmVnaW9uc2BgIGFuZCBgYHRvdGFsX2J5dGVzYGAuXG4gXG4gV2hlbiBhIHNwZWNpYWwga2V5d29yZCwgYGB1cGRhdGVfc2NoZW1lc190cmllZF9yZWdpb25zYGAsIGlzIHdyaXR0ZW4gdG8gdGhlXG4tcmVsZXZhbnQgYGBrZGFtb25kcy9cdTAwM2NOXHUwMDNlL3N0YXRlYGAgZmlsZSwgREFNT04gdXBkYXRlcyB0aGUgYGB0b3RhbF9ieXRlc2BgIGZpbGUgc29cbi10aGF0IHJlYWRpbmcgaXQgcmV0dXJucyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgc2NoZW1lIHRyaWVkIHJlZ2lvbnMsIGFuZCBjcmVhdGVzXG4tZGlyZWN0b3JpZXMgbmFtZWQgaW50ZWdlciBzdGFydGluZyBmcm9tIGBgMGBgIHVuZGVyIHRoaXMgZGlyZWN0b3J5LiAgRWFjaFxuLWRpcmVjdG9yeSBjb250YWlucyBmaWxlcyBleHBvc2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9mIHRoZSBtZW1vcnlcbi1yZWdpb24gdGhhdCB0aGUgY29ycmVzcG9uZGluZyBzY2hlbWUncyBgYGFjdGlvbmBgIGhhcyB0cmllZCB0byBiZSBhcHBsaWVkIHVuZGVyXG4tdGhpcyBkaXJlY3RvcnksIGR1cmluZyBuZXh0IDpyZWY6YGFwcGx5IGludGVydmFsIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYW1vc1x1MDAzZWAgb2YgdGhlXG4tY29ycmVzcG9uZGluZyBzY2hlbWUuICBUaGUgaW5mb3JtYXRpb24gaW5jbHVkZXMgYWRkcmVzcyByYW5nZSwgYGBucl9hY2Nlc3Nlc2BgLFxuLWFuZCBgYGFnZWBgIG9mIHRoZSByZWdpb24uXG4rcmVsZXZhbnQgYGBrZGFtb25kcy9cdTAwM2NOXHUwMDNlL3N0YXRlYGAgZmlsZSwgREFNT04gdXBkYXRlcyB0aGUgYGBucl9yZWdpb25zYGAgYW5kXG4rYGB0b3RhbF9ieXRlc2BgIGZpbGVzIHNvIHRoYXQgcmVhZGluZyB0aGVtIHJldHVybnMgdGhlIG51bWJlciBhbmQgdGhlIHRvdGFsIHNpemVcbitvZiB0aGUgc2NoZW1lIHRyaWVkIHJlZ2lvbnMsIHJlc3BlY3RpdmVseSwgYW5kIGNyZWF0ZXMgZGlyZWN0b3JpZXMgbmFtZWRcbitpbnRlZ2VyIHN0YXJ0aW5nIGZyb20gYGAwYGAgdW5kZXIgdGhpcyBkaXJlY3RvcnkuICBFYWNoIGRpcmVjdG9yeSBjb250YWlucyBmaWxlc1xuK2V4cG9zaW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIG1lbW9yeSByZWdpb24gdGhhdCB0aGVcbitjb3JyZXNwb25kaW5nIHNjaGVtZSdzIGBgYWN0aW9uYGAgaGFzIHRyaWVkIHRvIGJlIGFwcGxpZWQgdW5kZXIgdGhpcyBkaXJlY3RvcnksXG4rZHVyaW5nIG5leHQgOnJlZjpgYXBwbHkgaW50ZXJ2YWwgXHUwMDNjZGFtb25fZGVzaWduX2RhbW9zXHUwMDNlYCBvZiB0aGUgY29ycmVzcG9uZGluZ1xuK3NjaGVtZS4gIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBhZGRyZXNzIHJhbmdlLCBgYG5yX2FjY2Vzc2VzYGAsIGFuZCBgYGFnZWBgIG9mXG4rdGhlIHJlZ2lvbi5cbiBcbiBXcml0aW5nIGBgdXBkYXRlX3NjaGVtZXNfdHJpZWRfYnl0ZXNgYCB0byB0aGUgcmVsZXZhbnQgYGBrZGFtb25kcy9cdTAwM2NOXHUwMDNlL3N0YXRlYGBcbi1maWxlIHdpbGwgb25seSB1cGRhdGUgdGhlIGBgdG90YWxfYnl0ZXNgYCBmaWxlLCBhbmQgd2lsbCBub3QgY3JlYXRlIHRoZVxuLXN1YmRpcmVjdG9yaWVzLlxuK2ZpbGUgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgYGBucl9yZWdpb25zYGAgYW5kIGBgdG90YWxfYnl0ZXNgYCBmaWxlcywgYW5kIHdpbGwgbm90XG4rY3JlYXRlIHRoZSBzdWJkaXJlY3Rvcmllcy4gIEhlbmNlIGBgbnJfcmVnaW9uc2BgIGNhbiBiZSB1c2VkIGFzIGEgbGlnaHR3ZWlnaHQgd2F5XG4rdG8gcmVhZCB0aGUgbnVtYmVyIG9mIHRoZSBzY2hlbWUgdHJpZWQgcmVnaW9ucyB3aXRob3V0IG1hdGVyaWFsaXppbmcgdGhlXG4rcGVyLXJlZ2lvbiBzdWJkaXJlY3Rvcmllcy5cbiBcbiBUaGUgZGlyZWN0b3JpZXMgd2lsbCBiZSByZW1vdmVkIHdoZW4gYW5vdGhlciBzcGVjaWFsIGtleXdvcmQsXG4gYGBjbGVhcl9zY2hlbWVzX3RyaWVkX3JlZ2lvbnNgYCwgaXMgd3JpdHRlbiB0byB0aGUgcmVsZXZhbnRcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjA2Li4zNjVjNDMyNzFjMGM2NiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzkxOCwyMiArMzkxOCwxNCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiB9XG4gXG4gc3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcge1xuLVx0Ym9vbCB3YWxrZWQ7XG4tXHRzdHJ1Y3QgcmVzb3VyY2UgcmVzO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQ7XG4rXHQvKiBOVUxMIGluIHRoZSBjb3VudGluZy1vbmx5IHBhc3MgKi9cbitcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXM7XG4rXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzO1xuK1x0dW5zaWduZWQgbG9uZyBwcmV2X2VuZDtcbitcdGJvb2wgaGFzX3ByZXY7XG4gfTtcbiBcbi1zdGF0aWMgaW50IGRhbW9uX3N5c3RlbV9yYW1fd2Fsa19mbihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKVxuLXtcbi1cdHN0cnVjdCBkYW1vbl9zeXN0ZW1fcmFtX3JhbmdlX3dhbGtfYXJnICphID0gYXJnO1xuLVxuLVx0aWYgKCFhLVx1MDAzZXdhbGtlZCkge1xuLVx0XHRhLVx1MDAzZXdhbGtlZCA9IHRydWU7XG4tXHRcdGEtXHUwMDNlcmVzLnN0YXJ0ID0gcmVzLVx1MDAzZXN0YXJ0O1xuLVx0fVxuLVx0YS1cdTAwM2VyZXMuZW5kID0gcmVzLVx1MDAzZWVuZDtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlc291cmNlX3NpemVfdCByYSxcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4ge1xuQEAgLTM5NDcsMjMgKzM5MzksNjYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcmVzX3RvX2NvcmVfYWRkcihyZXNvdXJjZV9zaXplX3QgcmEsXG4gXHRyZXR1cm4gcmEgLyBhZGRyX3VuaXQ7XG4gfVxuIFxuLXN0YXRpYyBib29sIGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNfcmFuZ2UodW5zaWduZWQgbG9uZyAqc3RhcnQsXG4tXHRcdHVuc2lnbmVkIGxvbmcgKmVuZCwgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4rc3RhdGljIGludCBkYW1vbl9zeXN0ZW1fcmFtX3dhbGtfZm4oc3RydWN0IHJlc291cmNlICpyZXMsIHZvaWQgKmFyZylcbit7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzdGVtX3JhbV9yYW5nZV93YWxrX2FyZyAqYSA9IGFyZztcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlcy1cdTAwM2VzdGFydCwgYS1cdTAwM2VhZGRyX3VuaXQpO1xuK1x0dW5zaWduZWQgbG9uZyBlbmQgPSBkYW1vbl9yZXNfdG9fY29yZV9hZGRyKHJlcy1cdTAwM2VlbmQgKyAxLCBhLVx1MDAzZWFkZHJfdW5pdCk7XG4rXG4rXHRpZiAoZW5kIFx1MDAzYz0gc3RhcnQpXG4rXHRcdHJldHVybiAwO1xuK1x0LypcbitcdCAqICdTeXN0ZW0gUkFNJyByZXNvdXJjZXMgYXJlIHZpc2l0ZWQgaW4gdGhlIGFzY2VuZGluZyBhZGRyZXNzIG9yZGVyLlxuK1x0ICogQ29hbGVzY2Ugb25seSB0cnVseSBhZGphY2VudCAobm8gZ2FwIGluIGJldHdlZW4pIHJlc291cmNlcyBpbnRvIG9uZVxuK1x0ICogcmFuZ2UsIHNvIHRoYXQgYW55IGhvbGUgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzIGlzIGtlcHQgb3V0XG4rXHQgKiBvZiB0aGUgcmVzdWx0aW5nIHJhbmdlcy5cbitcdCAqL1xuK1x0aWYgKGEtXHUwMDNlaGFzX3ByZXYgXHUwMDI2XHUwMDI2IGEtXHUwMDNlcHJldl9lbmQgPT0gc3RhcnQpIHtcbitcdFx0YS1cdTAwM2VwcmV2X2VuZCA9IGVuZDtcbitcdFx0aWYgKGEtXHUwMDNlcmFuZ2VzKVxuK1x0XHRcdGEtXHUwMDNlcmFuZ2VzW2EtXHUwMDNlbnJfcmFuZ2VzIC0gMV0uZW5kID0gZW5kO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdGlmIChhLVx1MDAzZXJhbmdlcykge1xuK1x0XHRhLVx1MDAzZXJhbmdlc1thLVx1MDAzZW5yX3Jhbmdlc10uc3RhcnQgPSBzdGFydDtcbitcdFx0YS1cdTAwM2VyYW5nZXNbYS1cdTAwM2Vucl9yYW5nZXNdLmVuZCA9IGVuZDtcbitcdH1cbitcdGEtXHUwMDNlbnJfcmFuZ2VzKys7XG4rXHRhLVx1MDAzZXByZXZfZW5kID0gZW5kO1xuK1x0YS1cdTAwM2VoYXNfcHJldiA9IHRydWU7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBGaW5kIGFsbCAnU3lzdGVtIFJBTScgYXJlYXMgYW5kIHJldHVybiB0aGVtIGFzIGFuIGFycmF5IG9mIGNvYWxlc2NlZFxuKyAqIGRhbW9uX2FkZHJfcmFuZ2UuICBPbiBzdWNjZXNzLCAqcmFuZ2VzIHBvaW50cyB0byBhIGt2bWFsbG9jJ2VkIGFycmF5IHRoYXQgdGhlXG4rICogY2FsbGVyIHNob3VsZCBrdmZyZWUoKSwgYW5kIHRoZSBudW1iZXIgb2YgcmFuZ2VzIGlzIHJldHVybmVkLiAgUmV0dXJucyAwIGlmXG4rICogbm8gU3lzdGVtIFJBTSBpcyBmb3VuZCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4rc3RhdGljIGludCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICoqcmFuZ2VzX291dCxcbitcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4ge1xuLVx0c3RydWN0IGRhbW9uX3N5c3RlbV9yYW1fcmFuZ2Vfd2Fsa19hcmcgYXJnID0ge307XG4rXHRzdHJ1Y3QgZGFtb25fc3lzdGVtX3JhbV9yYW5nZV93YWxrX2FyZyBhcmcgPSB7IC5hZGRyX3VuaXQgPSBhZGRyX3VuaXQgfTtcbitcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXM7XG4gXG4rXHQvKiBGaXJzdCBwYXNzOiBjb3VudCB0aGUgY29hbGVzY2VkIHJhbmdlcy4gKi9cbiBcdHdhbGtfc3lzdGVtX3JhbV9yZXMoMCwgLTEsIFx1MDAyNmFyZywgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKTtcbi1cdGlmICghYXJnLndhbGtlZClcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0KnN0YXJ0ID0gZGFtb25fcmVzX3RvX2NvcmVfYWRkcihhcmcucmVzLnN0YXJ0LCBhZGRyX3VuaXQpO1xuLVx0KmVuZCA9IGRhbW9uX3Jlc190b19jb3JlX2FkZHIoYXJnLnJlcy5lbmQgKyAxLCBhZGRyX3VuaXQpO1xuLVx0aWYgKCplbmQgXHUwMDNjPSAqc3RhcnQpXG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdHJldHVybiB0cnVlO1xuK1x0aWYgKCFhcmcubnJfcmFuZ2VzKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJhbmdlcyA9IGt2bWFsbG9jX29ianMoKnJhbmdlcywgYXJnLm5yX3JhbmdlcywgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXJhbmdlcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHQvKiBTZWNvbmQgcGFzczogZmlsbCBpbiB0aGUgY29hbGVzY2VkIHJhbmdlcy4gKi9cbitcdGFyZy5yYW5nZXMgPSByYW5nZXM7XG4rXHRhcmcubnJfcmFuZ2VzID0gMDtcbitcdGFyZy5oYXNfcHJldiA9IGZhbHNlO1xuK1x0d2Fsa19zeXN0ZW1fcmFtX3JlcygwLCAtMSwgXHUwMDI2YXJnLCBkYW1vbl9zeXN0ZW1fcmFtX3dhbGtfZm4pO1xuK1x0KnJhbmdlc19vdXQgPSByYW5nZXM7XG4rXHRyZXR1cm4gYXJnLm5yX3JhbmdlcztcbiB9XG4gXG4gLyoqXG4tICogZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KCkgLSBTZXQgdGhlIHJlZ2lvbiBvZiB0aGUgZ2l2ZW5cbisgKiBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoKSAtIFNldCB0aGUgcmVnaW9ucyBvZiB0aGUgZ2l2ZW5cbiAgKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAnU3lzdGVtIFJBTScgcmVzb3VyY2VzLlxuICAqIEB0Olx0XHRUaGUgbW9uaXRvcmluZyB0YXJnZXQgdG8gc2V0IHRoZSByZWdpb24uXG4gICogQHN0YXJ0Olx0VGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJlZ2lvbi5cbkBAIC0zOTczLDkgKzQwMDgsMTEgQEAgc3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcbiAgKlxuICAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcmVnaW9uIG9mIEB0IGFzIHJlcXVlc3RlZCBieSBAc3RhcnQgYW5kIEBlbmQuICBJZiB0aGVcbiAgKiB2YWx1ZXMgb2YgQHN0YXJ0IGFuZCBAZW5kIGFyZSB6ZXJvLCBob3dldmVyLCB0aGlzIGZ1bmN0aW9uIGZpbmRzICdTeXN0ZW1cbi0gKiBSQU0nIHJlc291cmNlcyBhbmQgc2V0cyB0aGUgcmVnaW9uIHRvIGNvdmVyIGFsbCB0aGUgcmVzb3VyY2UuICBJbiB0aGUgbGF0dGVyXG4tICogY2FzZSwgdGhpcyBmdW5jdGlvbiBzYXZlcyB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgYWRkcmVzc2VzZXMgb2YgdGhlIGZpcnN0IGFuZFxuLSAqIHRoZSBsYXN0IHJlc291cmNlcyBpbiBAc3RhcnQgYW5kIEBlbmQsIHJlc3BlY3RpdmVseS5cbisgKiBSQU0nIHJlc291cmNlcyBhbmQgc2V0cyB0aGUgbW9uaXRvcmluZyB0YXJnZXQgcmVnaW9ucyB0byBjb3ZlciB0aGVtLiAgRWFjaFxuKyAqIGRpc2NyZXRlIFN5c3RlbSBSQU0gYXJlYSBiZWNvbWVzIGEgc2VwYXJhdGUgcmVnaW9uLCBzbyBob2xlcyBiZXR3ZWVuIHRoZW1cbisgKiAoZS5nLiwgb24gbXVsdGktc29ja2V0IG9yIENYTCBzeXN0ZW1zKSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgbW9uaXRvcmluZy4gIEluXG4rICogdGhlIGxhdHRlciBjYXNlLCB0aGlzIGZ1bmN0aW9uIHNhdmVzIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBhZGRyZXNzZXMgb2YgdGhlXG4rICogZmlyc3QgYW5kIHRoZSBsYXN0IHJlc291cmNlcyBpbiBAc3RhcnQgYW5kIEBlbmQsIHJlc3BlY3RpdmVseS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiAgKi9cbkBAIC0zOTg0LDE0ICs0MDIxLDI1IEBAIGludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCwgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFkZHJfcmFuZ2U7XG4rXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzO1xuK1x0aW50IG5yX3JhbmdlcywgZXJyO1xuIFxuLVx0aWYgKCEqc3RhcnQgXHUwMDI2XHUwMDI2ICEqZW5kIFx1MDAyNlx1MDAyNlxuLVx0XHQhZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZShzdGFydCwgZW5kLCBhZGRyX3VuaXQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICgqc3RhcnQgfHwgKmVuZCkge1xuK1x0XHRhZGRyX3JhbmdlLnN0YXJ0ID0gKnN0YXJ0O1xuK1x0XHRhZGRyX3JhbmdlLmVuZCA9ICplbmQ7XG4rXHRcdHJldHVybiBkYW1vbl9zZXRfcmVnaW9ucyh0LCBcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcbitcdH1cbiBcbi1cdGFkZHJfcmFuZ2Uuc3RhcnQgPSAqc3RhcnQ7XG4tXHRhZGRyX3JhbmdlLmVuZCA9ICplbmQ7XG4tXHRyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgXHUwMDI2YWRkcl9yYW5nZSwgMSwgbWluX3JlZ2lvbl9zeik7XG4rXHRucl9yYW5nZXMgPSBkYW1vbl9maW5kX3N5c3RlbV9yYW1zKFx1MDAyNnJhbmdlcywgYWRkcl91bml0KTtcbitcdGlmIChucl9yYW5nZXMgXHUwMDNjIDApXG4rXHRcdHJldHVybiBucl9yYW5nZXM7XG4rXHRpZiAoIW5yX3JhbmdlcylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHQqc3RhcnQgPSByYW5nZXNbMF0uc3RhcnQ7XG4rXHQqZW5kID0gcmFuZ2VzW25yX3JhbmdlcyAtIDFdLmVuZDtcbitcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKHQsIHJhbmdlcywgbnJfcmFuZ2VzLCBtaW5fcmVnaW9uX3N6KTtcbitcdGt2ZnJlZShyYW5nZXMpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jIGIvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG5pbmRleCAzMmY0OTVhOTZiMTdhOC4uOTE1NzZmNzdlOTZjYWQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbisrKyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuQEAgLTI5Nyw2ICsyOTcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlID0ge1xuIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9ucyB7XG4gXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuIFx0c3RydWN0IGxpc3RfaGVhZCByZWdpb25zX2xpc3Q7XG4rXHRpbnQgbnJfcmVnaW9uX2RpcnM7XG4gXHRpbnQgbnJfcmVnaW9ucztcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfYnl0ZXM7XG4gfTtcbkBAIC0zMTEsMTEgKzMxMiwyMSBAQCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hbGxvYyh2b2lkKVxuIFxuIFx0cmVnaW9ucy1cdTAwM2Vrb2JqID0gKHN0cnVjdCBrb2JqZWN0KXt9O1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cmVnaW9ucy1cdTAwM2VyZWdpb25zX2xpc3QpO1xuK1x0cmVnaW9ucy1cdTAwM2Vucl9yZWdpb25fZGlycyA9IDA7XG4gXHRyZWdpb25zLVx1MDAzZW5yX3JlZ2lvbnMgPSAwO1xuIFx0cmVnaW9ucy1cdTAwM2V0b3RhbF9ieXRlcyA9IDA7XG4gXHRyZXR1cm4gcmVnaW9ucztcbiB9XG4gXG4rc3RhdGljIHNzaXplX3QgbnJfcmVnaW9uc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbit7XG4rXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMgKnJlZ2lvbnMgPSBjb250YWluZXJfb2Yoa29iaixcbitcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopO1xuK1xuK1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVkXFxuXCIsIHJlZ2lvbnMtXHUwMDNlbnJfcmVnaW9ucyk7XG4rfVxuK1xuIHN0YXRpYyBzc2l6ZV90IHRvdGFsX2J5dGVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuIHtcbkBAIC0zMzUsNyArMzQ2LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcm1fZGlycyhcbiBcdFx0bGlzdF9kZWwoXHUwMDI2ci1cdTAwM2VsaXN0KTtcbiBcdFx0a29iamVjdF9kZWwoXHUwMDI2ci1cdTAwM2Vrb2JqKTtcbiBcdFx0a29iamVjdF9wdXQoXHUwMDI2ci1cdTAwM2Vrb2JqKTtcbi1cdFx0cmVnaW9ucy1cdTAwM2Vucl9yZWdpb25zLS07XG4rXHRcdHJlZ2lvbnMtXHUwMDNlbnJfcmVnaW9uX2RpcnMtLTtcbiBcdH1cbiB9XG4gXG5AQCAtMzQ0LDEwICszNTUsMTQgQEAgc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcbiBcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnMsIGtvYmopKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ucl9yZWdpb25zX2F0dHIgPVxuK1x0XHRfX0FUVFJfUk9fTU9ERShucl9yZWdpb25zLCAwNDAwKTtcbitcbiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIgPVxuIFx0XHRfX0FUVFJfUk9fTU9ERSh0b3RhbF9ieXRlcywgMDQwMCk7XG4gXG4gc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX2F0dHJzW10gPSB7XG4rXHRcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ucl9yZWdpb25zX2F0dHIuYXR0cixcbiBcdFx1MDAyNmRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25zX3RvdGFsX2J5dGVzX2F0dHIuYXR0cixcbiBcdE5VTEwsXG4gfTtcbkBAIC0zMTE5LDYgKzMxMzQsNyBAQCB2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4gXHRcdHJldHVybjtcbiBcbiBcdHN5c2ZzX3JlZ2lvbnMgPSBzeXNmc19zY2hlbWVzLVx1MDAzZXNjaGVtZXNfYXJyW3NjaGVtZXNfaWR4XS1cdTAwM2V0cmllZF9yZWdpb25zO1xuK1x0c3lzZnNfcmVnaW9ucy1cdTAwM2Vucl9yZWdpb25zKys7XG4gXHRzeXNmc19yZWdpb25zLVx1MDAzZXRvdGFsX2J5dGVzICs9IHItXHUwMDNlYXIuZW5kIC0gci1cdTAwM2Vhci5zdGFydDtcbiBcdGlmICh0b3RhbF9ieXRlc19vbmx5KVxuIFx0XHRyZXR1cm47XG5AQCAtMzEzMCwxMyArMzE0NiwxMyBAQCB2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXG4gXHRpZiAoa29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2cmVnaW9uLVx1MDAzZWtvYmosXG4gXHRcdFx0XHRcdTAwMjZkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2t0eXBlLFxuIFx0XHRcdFx0XHUwMDI2c3lzZnNfcmVnaW9ucy1cdTAwM2Vrb2JqLCBcIiVkXCIsXG4tXHRcdFx0XHRzeXNmc19yZWdpb25zLVx1MDAzZW5yX3JlZ2lvbnMpKVxuK1x0XHRcdFx0c3lzZnNfcmVnaW9ucy1cdTAwM2Vucl9yZWdpb25fZGlycykpXG4gXHRcdGdvdG8gb3V0O1xuIFx0aWYgKGRhbW9zX3N5c2ZzX3JlZ2lvbl9hZGRfZGlycyhyZWdpb24sIGN0eCwgcikpXG4gXHRcdGdvdG8gZGVsX291dDtcbiBcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cmVnaW9uLVx1MDAzZWxpc3QsIFx1MDAyNnN5c2ZzX3JlZ2lvbnMtXHUwMDNlcmVnaW9uc19saXN0KTtcbi1cdHN5c2ZzX3JlZ2lvbnMtXHUwMDNlbnJfcmVnaW9ucysrO1xuK1x0c3lzZnNfcmVnaW9ucy1cdTAwM2Vucl9yZWdpb25fZGlycysrO1xuIFx0cmV0dXJuO1xuIFxuIGRlbF9vdXQ6XG5AQCAtMzE1Niw2ICszMTcyLDcgQEAgaW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcbiBcdFx0c3lzZnNfc2NoZW1lID0gc3lzZnNfc2NoZW1lcy1cdTAwM2VzY2hlbWVzX2FycltpXTtcbiBcdFx0ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfcm1fZGlycyhcbiBcdFx0XHRcdHN5c2ZzX3NjaGVtZS1cdTAwM2V0cmllZF9yZWdpb25zKTtcbitcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZXRyaWVkX3JlZ2lvbnMtXHUwMDNlbnJfcmVnaW9ucyA9IDA7XG4gXHRcdHN5c2ZzX3NjaGVtZS1cdTAwM2V0cmllZF9yZWdpb25zLVx1MDAzZXRvdGFsX2J5dGVzID0gMDtcbiBcdH1cbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTc6NTMuNzM3MDMwMjg2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyODAxNDk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgdHdlYWtpbmcgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBzdWJzeXN0ZW0gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgYmUgcGF5aW5nIGF0dGVudGlvbiB0bywgcGVyaGFwcyBldmVuIGZ1enppbmcsIGdpdmVuIG15IGV4cGVydGlzZS5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIHR3byBtYWluIG1vZGlmaWNhdGlvbnMuIEZpcnN0LCBpbiBgbW0vZGFtb24vY29yZS5jYCwgaXQncyBhbHRlcmluZyBob3cgREFNT04gaGFuZGxlcyBTeXN0ZW0gUkFNLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBkZXNpZ25lZCB0byBncm91cCBjb250aWd1b3VzIFJBTSBibG9ja3MgaW50byByYW5nZXMsIGVmZmVjdGl2ZWx5IGNvbnNvbGlkYXRpbmcgU3lzdGVtIFJBTSByZXNvdXJjZXMuIEltcG9ydGFudGx5LCBpdCdzIGFsc28gZGVzaWduZWQgdG8gYWNjb3VudCBmb3IgYW55IGdhcHMgb3IgXCJob2xlc1wiIHRoYXQgbWlnaHQgZXhpc3QgYmV0d2VlbiBkaXNjcmV0ZSBTeXN0ZW0gUkFNIGFyZWFzLiBUaGlzIGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBpbXBsaWNhdGlvbnMgb24gaG93IHdlIGRldGVjdCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLlxuXG5TZWNvbmQsIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLCBpdCdzIGludHJvZHVjaW5nIGEgbmV3IGBucl9yZWdpb25zYCBmaWxlIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBob3cgREFNT04ga2VlcHMgdHJhY2sgb2YgYXR0ZW1wdGVkIG1lbW9yeSByZWdpb25zIGZvciBpdHMgbW9uaXRvcmluZyBzY2hlbWVzLiBUaGlzIGFkZGl0aW9uIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBkaWZmZXJlbnQgYmVoYXZpb3JzLCBwZXJoYXBzIGV2ZW4gdW5leHBlY3RlZCBvbmVzLCBpbiBob3cgdGhlc2UgcmVnaW9ucyBhcmUgaGFuZGxlZC5cblxuTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyBhcmUgZXZlbiBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIERBTU9OIGludGVyZmFjZS4gVGhhbmtmdWxseSwgREFNT04gaXMgcmVhY2hhYmxlIHZpYSB0aGUgc3lzZnMgaW50ZXJmYWNlLCBhcyBleHBlY3RlZCAoL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vLi4uIGlzIHdoYXQgSSdtIHRoaW5raW5nIGhlcmUpLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiBxdWlja2x5IHNlZSB0aGF0IHRoZXNlIGNoYW5nZXMgaW4gYGNvcmUuY2AgZGlyZWN0bHkgaW1wYWN0IGhvdyBEQU1PTiBjb25maWd1cmVzIGl0cyBtb25pdG9yZWQgcmVnaW9ucywgZXNwZWNpYWxseSBmb3IgU3lzdGVtIFJBTS4gVGhlIGFkZGl0aW9uIG9mIGBucl9yZWdpb25zYCBpbiBgc3lzZnMtc2NoZW1lcy5jYCBjb3VsZCBiZSBhIHNvdXJjZSBvZiBwb3RlbnRpYWwgaXNzdWVzLCBlc3BlY2lhbGx5IHNpbmNlIGl0IG1vZGlmaWVzIGhvdyByZWdpb25zIGFyZSBjb3VudGVkLlxuXG5NeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIERBTU9OIGFuZCwgc3BlY2lmaWNhbGx5LCBpdHMgc3lzZnMgaW50ZXJmYWNlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBhdGggdG8gdGVzdCB0aGVzZSBjaGFuZ2VzIGFuZCBkZXRlcm1pbmUgdGhlaXIgaW1wYWN0IGluIGEgcHJhY3RpY2FsIHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MzQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxNzo1OC43NjUwNTE4OTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NjkxMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTc6NTguODY5NzUwMDM1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY2OTk0MTk1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERBTU9OIGFuZCBEQU1PTl9TWVNGUyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBEQU1PTmAgYW5kIGBEQU1PTl9TWVNGU2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBuYWlsIGRvd24gd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBmb3IgYERBTU9OX1NZU0ZTYCBzaW5jZSB0aGF0J3MgbGlrZWx5IHRoZSBpbnRlcmZhY2UgcG9pbnQuIFVuZGVyc3RhbmRpbmcgaXRzIHJlcXVpcmVtZW50cyBpcyBjcnVjaWFsIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbS4gV2UnbGwgdHJhY2UgaXRzIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHdoZXJlIGl0IGZpdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODowMS41Mzk2OTM5ODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNzMzMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTl9TWVNGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9NTY9Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjAxLjY0MTQzNTk0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzExMzQ4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBLY29uZmlnOiBMaW5lIDY4IGlzIHRoZSBUYXJnZXQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byBpdC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gSSdtIHplcm9pbmcgaW4gb24gcm91Z2hseSBsaW5lIDY4LiBUaGUgc3BlY2lmaWMgbGluZSBudW1iZXIgc3VnZ2VzdHMgdGhhdCBJIGhhdmUgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIHNlY3Rpb24gaW4gbWluZC4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgc3BlY2lmaWMgdGhlcmUsIGxpa2VseSBhIHNldHRpbmcgb3IgYSBjb25kaXRpb25hbCBkZWZpbml0aW9uIHJlbGF0ZWQgdG8gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50LiBJ4oCZbSB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSBvcHRpb25zIHJlbGF0ZWQgdG8gREFNT04ncyBmZWF0dXJlcywgdHVuaW5nIHBhcmFtZXRlcnMsIG1heWJlIGV2ZW4gYW4gaW5jbHVzaW9uIG9mIGEgcGFydGljdWxhciBtb2R1bGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgYmVpbmcgZGVmaW5lZCBvciBjb250cm9sbGVkIGFyb3VuZCB0aGF0IHBvaW50IGluIHRoZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjA2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MDQuODEyNTczNzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODowNC44MTI2NzU0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NzcwNjQzNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OIGFuZCBTWVNGUyBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgaW50ZWdyYXRpb24gb2YgYERBTU9OYCBhbmQgYFNZU0ZTYC4gSXQgbG9va3MgbGlrZSBgU1lTRlNgIGlzIHByZXR0eSBtdWNoIGFsd2F5cyBlbmFibGVkLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIE5vdywgSSB3YW50IHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHNwZWNpZmljYWxseSBoYXMgY2hhbmdlZCBpbiB0aGUgY29kZSwgc28gSSdsbCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBkYW1vbl9zeXN0ZW1fcmFtX3dhbGtfZm5gLCBgZGFtb25fZmluZF9zeXN0ZW1fcmFtc2AsIGFuZCBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YC4gTmV4dCwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gdGhlIGBTWVNGU2AgaW50ZXJmYWNlLCBzbyBJJ2xsIGNoZWNrIHRoZSBjaGFuZ2VzIGluIGBtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNgLCBzcGVjaWZpY2FsbHkgYG5yX3JlZ2lvbnNfc2hvd2AsIGBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19hbGxvY2AsIGBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uc19ybV9kaXJzYCwgYGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AuXG5cbk15IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSByZWFjaGFibGUsIGJlY2F1c2UgSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBhcmVhcyB0aGF0IG5lZWQgdG8gYmUgZnV6emVkIGZvciB0ZXN0aW5nLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBzbyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tLiBJJ2xsIGp1c3QgZG8gYSBxdWljayBgZ3JlcGAgZm9yIGl0IHRvIGRldGVybWluZSB0aGUgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcwMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjA5LjY4OTc0MjkwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NjIxNjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTM5Nzg9c3RhdGljIGludCBkYW1vbl9maW5kX3N5c3RlbV9yYW1zKHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICoqcmFuZ2VzX291dCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDAwLS8qKlxcbm1tL2RhbW9uL2NvcmUuYzo0MDAxOiAqIGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCgpIC0gU2V0IHRoZSByZWdpb25zIG9mIHRoZSBnaXZlblxcbm1tL2RhbW9uL2NvcmUuYy00MDAyLSAqIG1vbml0b3JpbmcgdGFyZ2V0IGFzIHJlcXVlc3RlZCwgb3IgdG8gY292ZXIgYWxsICdTeXN0ZW0gUkFNJyByZXNvdXJjZXMuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAxOC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDAxOTppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTQwMjAtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMjgtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozMjk6XFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHBhcmFtX3RhcmdldCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTMzMC1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2bW9uaXRvcl9yZWdpb25fc3RhcnQsXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjU3LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNTg6XFx0ZXJyID0gZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHBhcmFtX3RhcmdldCxcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjU5LVxcdFxcdFxcdFxcdTAwMjZtb25pdG9yX3JlZ2lvbl9zdGFydCwgXFx1MDAyNm1vbml0b3JfcmVnaW9uX2VuZCxcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMTg1LVxcdGRhbW9uX2FkZF90YXJnZXQoY3R4LCB0YXJnZXQpO1xcbm1tL2RhbW9uL3N0YXQuYzoxODY6XFx0aWYgKGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdCh0YXJnZXQsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCxcXG5tbS9kYW1vbi9zdGF0LmMtMTg3LVxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlYWRkcl91bml0LCBjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODowOS44MzczNzE3MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwMzA4NjE0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkRBTU9OIENvZGUgUmV2aWV3IC0gVXNhZ2UgQ2hlY2sqKlxuXG5SaWdodCwgSSdtIGdvaW5nIHRocm91Z2ggdGhpcyBEQU1PTiBjb2RlLCBzcGVjaWZpY2FsbHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHNvbWV0aGluZy4gSSByZWNhbGwgc2VlaW5nIHRoaXMgZWxlbWVudCB1c2VkIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCwgYG1tL2RhbW9uL3JlY2xhaW0uY2AsIGFuZCBgbW0vZGFtb24vc3RhdC5jYC4gQnV0IEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQncyBhbHNvIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtLWZhY2luZyBjb21wb25lbnRzLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIHdoZXRoZXIgaXQncyB1dGlsaXplZCBpbiBlaXRoZXIgYG1tL2RhbW9uL3N5c2ZzLmNgIG9yIGBtbS9kYW1vbi9wYWRkci5jYC4gSXQncyBhIGtleSBwb2ludCBhbmQgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0IHdpbGwgYmUgZXhwb3NlZCBhbmQgbWFuYWdlZC4gU28sIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQsIHN0YXJ0aW5nIHdpdGggYHBhZGRyLmNgIGFuZCB0aGVuIGRvdWJsZS1jaGVja2luZyBgc3lzZnMuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODoxMy4zNDA0NjAxOTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDIwMDk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zOTc4PXN0YXRpYyBpbnQgZGFtb25fZmluZF9zeXN0ZW1fcmFtcyhzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqKnJhbmdlc19vdXQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAwMC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6NDAwMTogKiBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoKSAtIFNldCB0aGUgcmVnaW9ucyBvZiB0aGUgZ2l2ZW5cXG5tbS9kYW1vbi9jb3JlLmMtNDAwMi0gKiBtb25pdG9yaW5nIHRhcmdldCBhcyByZXF1ZXN0ZWQsIG9yIHRvIGNvdmVyIGFsbCAnU3lzdGVtIFJBTScgcmVzb3VyY2VzLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQwMTgtICovXFxubW0vZGFtb24vY29yZS5jOjQwMTk6aW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy00MDIwLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzI4LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzI5OlxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChwYXJhbV90YXJnZXQsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zMzAtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNm1vbml0b3JfcmVnaW9uX3N0YXJ0LFxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5ND1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI1Ny1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MjU4OlxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChwYXJhbV90YXJnZXQsXFxubW0vZGFtb24vcmVjbGFpbS5jLTI1OS1cXHRcXHRcXHRcXHUwMDI2bW9uaXRvcl9yZWdpb25fc3RhcnQsIFxcdTAwMjZtb25pdG9yX3JlZ2lvbl9lbmQsXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MTUxPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zdGF0X2J1aWxkX2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTE4NS1cXHRkYW1vbl9hZGRfdGFyZ2V0KGN0eCwgdGFyZ2V0KTtcXG5tbS9kYW1vbi9zdGF0LmM6MTg2OlxcdGlmIChkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQodGFyZ2V0LCBcXHUwMDI2c3RhcnQsIFxcdTAwMjZlbmQsXFxubW0vZGFtb24vc3RhdC5jLTE4Ny1cXHRcXHRcXHRcXHRjdHgtXFx1MDAzZWFkZHJfdW5pdCwgY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MTMuNDk0NjY4NDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzODUwMjM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAqKlxuXG5IbW0sIEkgZG9uJ3Qgc2VlIGFueSBkaXJlY3QgdXNlIG9mIHRoYXQgZnVuY3Rpb24gaW4gYHN5c2ZzLmNgLiBJbnRlcmVzdGluZy4gTm93LCB3YXNuJ3QgdGhhdCBmdW5jdGlvbiBleHBvcnRlZD8gWWVzLCBpdCBsb29rcyBsaWtlIGl0IGlzLiBUaGF0IG1lYW5zIGl0J3MgaW50ZW5kZWQgZm9yIGV4dGVybmFsIHVzZSwgcHJvYmFibHkgaW4gc29tZSBvdGhlciBwYXJ0IG9mIHRoZSBrZXJuZWwgb3IgcGVyaGFwcyBhIG1vZHVsZS4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkLCB3aGljaCBtZWFucyBJIHNob3VsZCBjaGVjayBgaW5jbHVkZS9saW51eC9kYW1vbi5oYCBmb3IgaXRzIGRlZmluaXRpb24gYW5kIHRoZW4gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2FsbHMgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBEQU1PTiBmcmFtZXdvcmsgYW5kIHdoYXQgaXQncyB1c2VkIGZvci4gR290dGEgdHJhY2UgdGhlIGNhbGxzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzM4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MTYuOTMzMTczNjUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYzNjMzMDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjE3LjAzOTU0NjY2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc5MzUyODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBwYXJ0aWN1bGFyIGxpbmUgb2YgaW5xdWlyeSwgdGhpbmtpbmcgbGlrZSBhIHNlYXNvbmVkIGRldmVsb3BlcjpcblxuKipJbnZlc3RpZ2F0aW5nIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgbW0vZGFtb24vY29yZS5jYC4gVGhhdCBmaWxlIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgY29yZSBmdW5jdGlvbmFsaXR5LCBhbmQgSSBzdXNwZWN0IGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBjb250ZXh0LiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEnigJltIGJldHRpbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBzb21lIGRlZmF1bHQgcGFyYW1ldGVycyBvciBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHN5c3RlbSBSQU0gcmVnaW9ucyB3aXRoaW4gdGhlIERBTU9OIGZyYW1ld29yay4gVGhlIFwic2V0XCIgaW4gdGhlIG5hbWUgaW5kaWNhdGVzIHdlJ3JlIG1hbmlwdWxhdGluZyBzb21lIGludGVybmFsIHN0YXRlLCBhbmQgdGhlIFwicmFtc19kZWZhdWx0XCIgcGFydCB0ZWxscyB1cyB0aGF0IHRoZSBmb2N1cyBpcyBvbiBhIHN0YXJ0aW5nIHBvaW50IGZvciBSQU0gY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aG9zZSBkZWZhdWx0cyBhcmUsIGFuZCBob3cgYW5kIHdoZW4gdGhleSBhcmUgYXBwbGllZCwgc28gSSBjYW4gcHJlZGljdCBpdHMgYmVoYXZpb3IgYW5kIGluZmx1ZW5jZSBpdC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY29uZmlybSB0aGlzIGh5cG90aGVzaXMgYnkgYW5hbHl6aW5nIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGFuZCB0aGVuIHVuZGVyc3RhbmQgd2hlcmUgaXQncyBjYWxsZWQgZnJvbSBhbmQgd2hhdCBpdCdzIHVzZWQgZm9yLiBIb3BlZnVsbHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgcHJvdmlkZXMgZW5vdWdoIGNsdWVzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgaXRzIGRlZmF1bHQgc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDMzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MjAuOTE4OTAxNDE1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTYxMTE2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9Mzk3OD1zdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQwMDAtLyoqXFxubW0vZGFtb24vY29yZS5jOjQwMDE6ICogZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KCkgLSBTZXQgdGhlIHJlZ2lvbnMgb2YgdGhlIGdpdmVuXFxubW0vZGFtb24vY29yZS5jLTQwMDItICogbW9uaXRvcmluZyB0YXJnZXQgYXMgcmVxdWVzdGVkLCBvciB0byBjb3ZlciBhbGwgJ1N5c3RlbSBSQU0nIHJlc291cmNlcy5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDE4LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzo0MDE5OmludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmMtNDAyMC1cXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODoyMS4wMzUwMTk1NzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1Njk5MTI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyBhIE1pc3NpbmcgU3ltYm9sKipcblxuT2theSwgc28gYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAgaXNuJ3Qgc2hvd2luZyB1cCBhcyBleHBvcnRlZC4gVGhhdCdzIGEgcHJvYmxlbSwgZXNwZWNpYWxseSBzaW5jZSB0aGUgY29kZSByZWZlcmVuY2VzIGl0IGluIG11bHRpcGxlIHBsYWNlczogYGxydV9zb3J0LmNgLCBgcmVjbGFpbS5jYCwgYW5kIGBzdGF0LmNgLiAgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgaXMgaGFwcGVuaW5nLiAgQXJlIHRoZXNlIGZpbGVzIGNvbXBpbGVkIGludG8gYSBzaW5nbGUgbW9kdWxlLCBvciBhcmUgdGhleSBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwgYXMgYnVpbHQtaW4gY29tcG9uZW50cz8gIElmIHRoZXkgYXJlIGJ1aWx0LWluLCB0aGVyZSBjb3VsZCBiZSBhIGRpZmZlcmVudCBzZXQgb2YgcnVsZXMgYWJvdXQgd2hhdCBzeW1ib2xzIGFyZSBcInZpc2libGVcIiBiZXR3ZWVuIHRoZW0gZHVyaW5nIHRoZSBsaW5raW5nIHN0YWdlLiBUaGUgcHJvYmxlbSBpcyBkZWZpbml0ZWx5IG5vdCB0aGUgc3RhbmRhcmQgXCJtaXNzaW5nIGV4cG9ydFwiIGlzc3VlLCBzaW5jZSB0aGF0IHdvdWxkIGhhdmUgYmVlbiBhcHBhcmVudCBhdCBidWlsZCB0aW1lLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYG1tL2RhbW9uL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgcmV2ZWFsIGhvdyB0aGVzZSBmaWxlcyBhcmUgY29tcGlsZWQgYW5kIGxpbmtlZCBhbmQgaG9wZWZ1bGx5IHNoZWQgbGlnaHQgb24gd2h5IHRoYXQgY3J1Y2lhbCBzeW1ib2wgaXNuJ3QgYmVpbmcgZXhwb3J0ZWQgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtb2R1bGUgc3RydWN0dXJlIG9yIHRoZSBidWlsZCBwcm9jZXNzIGJldHRlciB0byB1bmRlcnN0YW5kIHRoZSBlcnJvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODoyNS4wOTIwMTU1ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTYxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MjUuMDkyMTE2MzI0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDUyMDQ0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAgcmVzaWRlcyBpbiBgY29yZS5vYC4gTm93LCB0aGUgaW1wb3J0YW50IGRlcGVuZGVuY2llcy4uLiBpdCdzIHVzZWQgYnkgYHJlY2xhaW0ub2AsIGBscnVfc29ydC5vYCwgYW5kIGBzdGF0Lm9gLiBXaGljaCBtYWtlcyBzZW5zZSwgdGhlc2UgYXJlIHRoZSBtb2R1bGVzIHRoYXQgbGlrZWx5IGludGVyYWN0IHdpdGggdGhlIHJlZ2lvbiBtYW5hZ2VtZW50IGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuXG5cblRoZXJlZm9yZSwgaWYgSSB3YW50IHRvIHRob3JvdWdobHkgdGVzdCBgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0YCwgSSdsbCBuZWVkIHRvIGVuYWJsZSBvbmUgb3IgbW9yZSBvZiBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9MUlVfU09SVGAsIG9yIGBEQU1PTl9TVEFUYC4gVGhhdCdzIHRoZSBvYnZpb3VzIHJvdXRlIHRvIGVuc3VyZSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGlzIGV4ZXJjaXNlZCBhcHByb3ByaWF0ZWx5IGR1cmluZyB0ZXN0aW5nLlxuXG5Ob3csIGxldCBtZSBjaGVjayBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYC4gSSBoYXZlIGEgaHVuY2ggaXQgbWlnaHQgYmUgcmVsZXZhbnQsIG1heWJlIEkgY2FuIGZpbmQgdGhlIGNvZGUgdGhhdCBjb250YWlucyBgbnJfcmVnaW9uc19zaG93YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODoyOC40OTczMjQ2NTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjQxMDEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJucl9yZWdpb25zX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMDY9ZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbnNfYWxsb2Modm9pZClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMjAtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMyMTpzdGF0aWMgc3NpemVfdCBucl9yZWdpb25zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMyMi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE4OjI4LjYzMzc0NzIwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc5NjQ0MDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGhpcyBEQU1PTiBQYXRjaDogQSBCcmVha2Rvd24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGEgc3lzZnMgYXR0cmlidXRlLCB3aGljaCBtZWFucyBpdOKAmXMgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIG1vZGlmeWluZyBgZGFtb25fZmluZF9zeXN0ZW1fcmFtc2AgdG8gZG8gc29tZSByZXNvdXJjZSBjb2FsZXNjZW5jZSBvbiBTeXN0ZW0gUkFNIGFuZCBleGNsdWRlIGhvbGVzLiBUaGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIHNoaWZ0IGluIGhvdyBEQU1PTiBtb25pdG9ycyBwaHlzaWNhbCBtZW1vcnkuIEFuZCB0aGVuLCB0aGVyZSdzIGFsc28gdGhlIGFkZGl0aW9uIG9mIGBucl9yZWdpb25zYCB0byBzeXNmcy4gVGhhdOKAmXMgYSBzeXNmcyBpbnRlcmZhY2UgbW9kaWZpY2F0aW9uLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0IGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5JcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5LiBJdOKAmXMgZmlkZGxpbmcgd2l0aCBjb3JlIGtlcm5lbCBsb2dpYyBpbiB0aGUgREFNT04gc3Vic3lzdGVtLCBwbHVzIGl0J3MgYWx0ZXJpbmcgdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhhdCdzIGEgcGVyZmVjdCBjb21iaW5hdGlvbiBmb3IgZmluZGluZyB2dWxuZXJhYmlsaXRpZXMuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGNvbmNlbnRyYXRlIG9uIGZvciBmdXp6aW5nIHdpbGwgYmU6IGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBgbnJfcmVnaW9uc19zaG93YCwgYGRhbW9uX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgLCBhbmQgYGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc2AuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBob3cgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAgaXMgdXNlZC4gQWgsIGl0J3MgY2FsbGVkIHdoZW4gYXBwbHlpbmcgcGFyYW1ldGVycyBmb3IgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NUQVRgLiBOb3csIGxldCBtZSBzZWUgaG93IGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGlzIGNhbGxlZC4gVGhhdCdsbCBoZWxwIG1lIGJ1aWxkIHRoZSByaWdodCBmdXp6aW5nIHN0cmF0ZWd5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbnMgdGhvcm91Z2hseSB0byBlZmZlY3RpdmVseSB0YXJnZXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MzMuNzEzMzk1MTI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjMwMTQ3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3JlY2xhaW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9yZWNsYWltLmM9MTY3PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZSh1bnNpZ25lZCBsb25nIGFnZ3JfaW50ZXJ2YWwpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMTkzLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoxOTQ6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk1LXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0yNjk9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzAte1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNzE6XFx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzItfVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMzMT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMzOS1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQwOlxcdGVyciA9IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDEtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MzMuODM2NDE2MDAzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDE3NDIyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipUcmlnZ2VyaW5nIERBTU9OX1JFQ0xBSU0qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdHJpZ2dlciBmb3IgdGhpcyBzZWVtcyB0byBiZSByZWxhdGVkIHRvIGVpdGhlciBlbmFibGluZyBgREFNT05fUkVDTEFJTWAgb3IgY29tbWl0dGluZyBpbnB1dCBkYXRhLiBUaGF0J3MgZ29vZCB0byBrbm93LiBBbmQgdGhlIGNvbnRyb2wgbGV2ZXIgZm9yIGBEQU1PTl9SRUNMQUlNYCBpdHNlbGYgaXMgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gU2luY2UgdGhlIGNvbnRyb2xzIGFyZSBtb2R1bGUgcGFyYW1ldGVycyBvciBzeXNmcywgdGhhdCBtZWFucyBmdXp6aW5nIHRob3NlIGVudHJ5IHBvaW50cyBjb3VsZCBwb3RlbnRpYWxseSBleHBvc2Ugc29tZXRoaW5nLi4uIGxldCdzIGtlZXAgdGhhdCBpbiBtaW5kLiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyYC4gVGhhdCBzZWVtcyBsaWtlIGEgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHZ1bG5lcmFiaWxpdGllcyBzaW5jZSB0aGUgdHJpZ2dlcnMgZGVwZW5kIG9uIGBzeXNmc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTIzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6MzYuOTc4MTYxOTkyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTYwMDY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9MzA3OD12b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMDQtLyoqXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxMDU6ICogZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcigpIC0gUG9wdWxhdGUgYSBzY2hlbWVzIHRyaWVkIHJlZ2lvbiBkaXIuXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMDYtICogQHN5c2ZzX3NjaGVtZXM6XFx0U2NoZW1lcyBkaXJlY3RvcnkgdG8gcG9wdWxhdGUgcmVnaW9ucyBkaXJlY3RvcnkuXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzExNS0gKi9cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzExNjp2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMTctXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODozNy4wNjk3NzEwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU3MDMyNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1tL2RhbW9uL3N5c2ZzLmNgIFVzYWdlKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJJ20gdGhpbmtpbmcsIFwiV2hlcmUgZXhhY3RseSBpcyB0aGlzIHBhcnRpY3VsYXIgZWxlbWVudCBiZWluZyAqdXNlZCo/IFNwZWNpZmljYWxseSwgaXMgaXQgYmVpbmcgZXhwb3J0ZWQsIG9yIGlzIGl0IGRpcmVjdGx5IHV0aWxpemVkIHdpdGhpbiBgbW0vZGFtb24vc3lzZnMuY2AgaXRzZWxmP1wiIFRoZSBzeW50YXggbWFrZXMgbWUgdGhpbmsgaXQncyB1c2VkIGVsc2V3aGVyZSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBpdCdzIGNvbmZpbmVkIHRvIHRoZSBzeXNmcyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbSwgb3IgaWYgaXQgaGFzIGJyb2FkZXIgaW1wbGljYXRpb25zIG91dHNpZGUgb2YgdGhpcyBtb2R1bGUuIEEgcXVpY2sgY2hlY2sgb2YgdXNhZ2VzIGlzIG5lZWRlZCBoZXJlLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODo0MC4zMjY4MDY0NTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQwMTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy1jb21tb24uaD00Mj12b2lkIGRhbW9uX3N5c2ZzX3NjaGVtZXNfdXBkYXRlX3N0YXRzKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNDUtXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmg6NDY6dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTQ3LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMDc4PXZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc191cGRhdGVfc3RhdHMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwNC0vKipcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzEwNTogKiBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKCkgLSBQb3B1bGF0ZSBhIHNjaGVtZXMgdHJpZWQgcmVnaW9uIGRpci5cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzEwNi0gKiBAc3lzZnNfc2NoZW1lczpcXHRTY2hlbWVzIGRpcmVjdG9yeSB0byBwb3B1bGF0ZSByZWdpb25zIGRpcmVjdG9yeS5cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0zMTE1LSAqL1xcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMTE2OnZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzExNy1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzMjE9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zX3VwZF9vbmUodm9pZCAqZGF0YSwgc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMzI3LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjMyODpcXHRkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjMyOS1cXHRcXHRcXHRzeXNmc19rZGFtb25kLVxcdTAwM2Vjb250ZXh0cy1cXHUwMDNlY29udGV4dHNfYXJyWzBdLVxcdTAwM2VzY2hlbWVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODo0MC40MzgyMTg2MDRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5OTQxMjg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFN5c3RlbSBDYWxsIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyBob3cgdGhlIHJlZ2lvbiB1cGRhdGVzIGFyZSBoYW5kbGVkIHdpdGhpbiBEQU1PTiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGVudHJ5IHBvaW50IGlzIHRoZSBgZGFtb25fc3lzZnNfc2NoZW1lc190cmllZF9yZWdpb25zX3VwZF9vbmVgIGZ1bmN0aW9uLCBmb3VuZCBpbiBgbW0vZGFtb24vc3lzZnMuY2AuIEl0J3MgdHJpZ2dlcmVkIHdoZW4gc29tZW9uZSB3cml0ZXMgdG8gdGhlIGBzdGF0ZWAgc3lzZnMgZmlsZSwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cblRoZXJlZm9yZSwgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gdGhlIHVwZGF0ZSBwcm9jZXNzIGFyZTogYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAsIGBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyYCwgYW5kIGBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnNgLlxuXG5JIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY2xlYXJpbmcgb2YgcmVnaW9ucyBiZXR0ZXIsIHNvIG15IGZvY3VzIHJpZ2h0IG5vdyBpcyBnb2luZyB0byBiZSBvbiBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYC4gTGV0J3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3NDksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTg6NDMuOTM3NjM1NTE2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQ3NDI1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oPTQ2PXZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oLTUwLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5oOjUxOmludCBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmgtNTItXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxMTY9dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNjMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxNjQ6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE2NS1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjMzND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZGF0ZV9zY2hlbWVzX3RyaWVkX3JlZ2lvbnMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzNDktXFxubW0vZGFtb24vc3lzZnMuYzoyMzUwOlxcdGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcXG5tbS9kYW1vbi9zeXNmcy5jLTIzNTEtXFx0XFx0XFx0c3lzZnNfa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXS1cXHUwMDNlc2NoZW1lcyk7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIzNjQ9c3RhdGljIGludCBkYW1vbl9zeXNmc19oYW5kbGVfY21kKGVudW0gZGFtb25fc3lzZnNfY21kIGNtZCxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjM4OS1cXHRjYXNlIERBTU9OX1NZU0ZTX0NNRF9DTEVBUl9TQ0hFTUVTX1RSSUVEX1JFR0lPTlM6XFxubW0vZGFtb24vc3lzZnMuYzoyMzkwOlxcdFxcdHJldHVybiBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnMoXFxubW0vZGFtb24vc3lzZnMuYy0yMzkxLVxcdFxcdFxcdGtkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF0tXFx1MDAzZXNjaGVtZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxODo0NC4wMzYxMTUxMTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMyNDE1NDY4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIERBTU9OIENsZWFyIFNjaGVtZXMgQ29tbWFuZCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBgREFNT05fU1lTRlNfQ01EX0NMRUFSX1NDSEVNRVNfVFJJRURfUkVHSU9OU2AgY29tbWFuZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aGVuIHRoaXMgaXMgY2FsbGVkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byBob3cgaXQgaXMgaGFuZGxlZCBpbiB0aGUgY29kZS5cblxuVGhlIGZpcnN0IHBsYWNlIEkgd2FudCB0byBsb29rIGlzIGBkYW1vbl9maW5kX3N5c3RlbV9yYW1zYC4gVGhhdCBmdW5jdGlvbiBsaWtlbHkgaG9sZHMgdGhlIGNvcmUgbG9naWMgYXJvdW5kIGRpc2NvdmVyaW5nIG9yIGlkZW50aWZ5aW5nIHRoZSByZWdpb25zIHRoYXQgdGhpcyBjbGVhciBjb21tYW5kIHdvdWxkIGFjdHVhbGx5IGFmZmVjdC4gSXQncyBhbG1vc3QgY2VydGFpbiB0aGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IGZpZ3VyaW5nIG91dCB3aGF0IG1lbW9yeSByZWdpb25zIHdlJ3JlIG9wZXJhdGluZyBvbiBoZXJlLCBhbmQgbWF5YmUgY2xlYXJpbmcgc29tZSBhc3NvY2lhdGVkIGRhdGEuIExldCdzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxOTo0Ny4yNzc2NjgxN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5MjgxMjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2ZpbmRfc3lzdGVtX3JhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zOTQyPXN0YXRpYyBpbnQgZGFtb25fc3lzdGVtX3JhbV93YWxrX2ZuKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB2b2lkICphcmcpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk3Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6Mzk3ODpzdGF0aWMgaW50IGRhbW9uX2ZpbmRfc3lzdGVtX3JhbXMoc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKipyYW5nZXNfb3V0LFxcbm1tL2RhbW9uL2NvcmUuYy0zOTc5LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDAxOT1pbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAzMi1cXG5tbS9kYW1vbi9jb3JlLmM6NDAzMzpcXHRucl9yYW5nZXMgPSBkYW1vbl9maW5kX3N5c3RlbV9yYW1zKFxcdTAwMjZyYW5nZXMsIGFkZHJfdW5pdCk7XFxubW0vZGFtb24vY29yZS5jLTQwMzQtXFx0aWYgKG5yX3JhbmdlcyBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE5OjQ3LjgzNjk1ODY1OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU3OTIxODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbCBMaXN0aW5nKipcblxuT2theSwgc28gSSdtIHJldmlld2luZyB0aGlzIGNvZGUgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgbmVlZCB0byBvbWl0IHRoZSBzdGF0aWMgZnVuY3Rpb24gZnJvbSBgRm9jdXNTeW1ib2xzYC4gVGhhdCdzIHN0YW5kYXJkIHByYWN0aWNlLCBub3RoaW5nIHRvIGR3ZWxsIG9uLCB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGV4dGVybmFsbHkgYWNjZXNzaWJsZSBzeW1ib2xzLiBUaGUgb25lcyB0aGF0IHdlICpkbyogbmVlZCB0byBsaXN0IGFyZTogYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGAsIGBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyYCwgYW5kIGBkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnNgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBjb25maWd1cmF0aW9uIHV0aWxpdGllcy5cblxuTm93LCBsZXQncyBtb3ZlIG9udG8gdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBhY2NvdW50ZWQgZm9yIGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBzZWUgdGhhdCB3ZSByZXF1aXJlIHRoZSB1c3VhbCBzdXNwZWN0czogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NUQVRgLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlIGxhc3QgdGhyZWUsIHNwZWNpZmljYWxseSBgREFNT05fUkVDTEFJTWAsIGBEQU1PTl9MUlVfU09SVGAsIGFuZCBgREFNT05fU1RBVGAgaGF2ZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlaXIgS2NvbmZpZyBlbnRyaWVzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIG9yIGNvbmZsaWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTk6NTEuOTk0ODg0ODY4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg4NjI2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OX1JFQ0xBSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTc2PWNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxOTo1Mi4xMzM3NTM3NzZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwNDAxNDM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gREFNT04gUmVjbGFpbSBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgYG1tL2RhbW9uL0tjb25maWdgIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBEQU1PTl9SRUNMQUlNYCBvcHRpb24uIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmb3IgRHluYW1pYyBBZGFwdGl2ZSBNZW1vcnkgT3B0aW1pemVyIChEQU1PTikgcmVjbGFpbSBiZWhhdmlvciBpcyBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gV2hhdCBhcmUgdGhlIGJ1aWxkLXRpbWUgb3B0aW9ucz8gV2hhdCdzIGV4cG9zZWQgdG8gdGhlIGVuZC11c2VyPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZlYXR1cmVzIG9yIGFyY2hpdGVjdHVyZXMsIGFuZCBob3cgdGhlIHJlY2xhaW0gYmVoYXZpb3IgaXMgcGFyYW1ldGVyaXplZC4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBpbmZsdWVuY2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIEtjb25maWcgb3B0aW9uIG9uIERBTU9OJ3MgYmVoYXZpb3IuIEkgd2lsbCBsb29rIGZvciBhbnkgY2x1ZXMgb24gaG93IHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gVGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgREFNT04gaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCdzIG1lbW9yeSByZWNsYWltIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Njc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTk6NTUuNTM3NzcxMzU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODU6XFx0XFxuICA4NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4NzpcXHRcXG4gIDg4OlxcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXFxuICA4OTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4gIDkwOlxcdFxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG4gIDkxOlxcdFxcdGhlbHBcXG4gIDkyOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXFxuICA5MzpcXHRcXHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cXG4gIDk0OlxcdFxcdCAgdGhvc2UuXFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdCAgVGhpcyBpcyBzdWdnZXN0ZWQgdG8gYmUgdXNlZCBhcyBhIHByb2FjdGl2ZSBhbmQgbGlnaHR3ZWlnaHRcXG4gIDk3OlxcdFxcdCAgcmVjbGFtYXRpb24gdW5kZXIgbGlnaHQgbWVtb3J5IHByZXNzdXJlLCB3aGlsZSB0aGUgdHJhZGl0aW9uYWwgcGFnZVxcbiAgOTg6XFx0XFx0ICBzY2FubmluZy1iYXNlZCByZWNsYW1hdGlvbiBpcyB1c2VkIGZvciBoZWF2eSBwcmVzc3VyZS5cXG4gIDk5OlxcdFxcbiAxMDA6XFx0Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxuIDEwMTpcXHRcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbiAxMDI6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAxMDM6XFx0XFx0aGVscFxcbiAxMDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG4gMTA1OlxcdFxcdCAgcHJvdGVjdCBmcmVxdWVudGx5IGFjY2Vzc2VkIChob3QpIHBhZ2VzIHdoaWxlIHJhcmVseSBhY2Nlc3NlZCAoY29sZClcXG4gMTA2OlxcdFxcdCAgcGFnZXMgcmVjbGFpbWVkIGZpcnN0IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cXG4gMTA3OlxcdFxcbiAxMDg6XFx0Y29uZmlnIERBTU9OX1NUQVRcXG4gMTA5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuIDExMDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxuIDExMTpcXHRcXHRoZWxwXFxuIDExMjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG4gMTEzOlxcdFxcdCAgSXQgcnVucyBEQU1PTiBhbmQgZXhwb3NlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMgaW4gc2ltcGxlIHN0YXRcXG4gMTE0OlxcdFxcdCAgbWV0cmljcy5cXG4gMTE1OlxcdFxcbiAxMTY6XFx0Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxuIDExNzpcXHRcXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcbiAxMTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxuIDExOTpcXHRcXHRkZWZhdWx0IERBTU9OX1NUQVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MTk6NTUuNTM3ODYwMjA5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjI3OTQxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBEZXBlbmRlbmN5IG9uIERBTU9OX1BBRERSKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSB0aGlzIHBpZWNlIG9mIHRoZSBzeXN0ZW0gaGluZ2VzIG9uIHRoZSB2YWx1ZSBvZiBgREFNT05fUEFERFJgLiBUaGF0J3MgYSBrZXkgdmFyaWFibGUsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB0aG9yb3VnaGx5LiBCZWZvcmUgSSBnbyBmdXJ0aGVyIGRvd24gdGhpcyByYWJiaXQgaG9sZSwgSSBuZWVkIHRvIGtub3cgcHJlY2lzZWx5IHdoZXJlIGFuZCBob3cgYERBTU9OX1BBRERSYCBpcyB1c2VkLCBhbmQgd2hhdCByZWxpZXMgb24gaXQuIEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgdmFyaWFibGUuIFRoZSBmaXJzdCBzdGVwLCBjbGVhcmx5LCBpcyB0byBkaWcgaW50byB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGZpZ3VyZSBvdXQgdGhlIGNoYWluIG9mIHJlbGF0aW9uc2hpcHMuIFRoaXMgd2lsbCBwcm9iYWJseSB0ZWxsIG1lIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjE5OjU4LjU2MDY1ODMzMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzA2NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTl9QQUREUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mzg9Y29uZmlnIERBTU9OX1ZBRERSXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToxOTo1OC42NjQzNzA4MThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1MDUyODM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBtbS9kYW1vbi9LY29uZmlnYCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gREFNT04ncyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGVhZCBiYWNrIGluIHRoZSBEQU1PTiBjb2RlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYERBTU9OX1BBRERSYC4gVGhpcyBwcm9iYWJseSBpbnZvbHZlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBjb25zaWRlcmF0aW9ucywgbGlrZWx5IGZvciBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBvciBvdGhlciBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBEQU1PTiBjb250ZXh0LiBJIGV4cGVjdCB0byBmaW5kIGRlcGVuZGVuY2llcyBvbiBhcmNoaXRlY3R1cmUsIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLCBvciBwZXJoYXBzIGV2ZW4gc3BlY2lmaWMgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCwgaXRzIGRlZmF1bHQgdmFsdWUsIGFuZCB3aGF0IG90aGVyIHNldHRpbmdzIGl0IGludGVyYWN0cyB3aXRoLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IERBTU9OIGhhbmRsZXMgcGh5c2ljYWwgYWRkcmVzc2VzIGFuZCB3aGVyZSB0aGUgY29tcGxleGl0aWVzIGxpZS4gSSBtaWdodCBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIERBTU9OIGNvZGUgdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLCBidXQgYEtjb25maWdgIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGdyYXNwaW5nIHRoZSBiaWctcGljdHVyZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToyMDowMi4wMTQ5MDI2MTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjIwOjAyLjAxNTAwMzIwNloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTI2NTc5MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGBEQU1PTl9QQUREUmAgaXMgZGVwZW5kZW50IG9uIGJvdGggYERBTU9OYCBhbmQgdGhlIGBNTVVgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGUgY29yZSBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCBhcmU6XG5cbiogICBgREFNT05gXG4qICAgYERBTU9OX1NZU0ZTYFxuKiAgIGBEQU1PTl9QQUREUmBcbiogICBgREFNT05fUkVDTEFJTWBcbiogICBgREFNT05fTFJVX1NPUlRgXG4qICAgYERBTU9OX1NUQVRgXG5cbk5leHQsIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhhdCBgREFNT05fU1lTRlNgIGl0c2VsZiBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGRlcGVuZGVuY2llcy4gQWgsIHllcywgaXQgZGVwZW5kcyBvbiBgREFNT05gIChuYXR1cmFsbHkpIGFuZCwgb2YgY291cnNlLCBgU1lTRlNgLiBTbywgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyByZW1haW4gZXhhY3RseSB0aGUgc2FtZSBhcyBhYm92ZS5cblxuTm93LCBsZXQncyBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB3ZSBzaG91bGQgc2NydXRpbml6ZSB3aXRoaW4gdGhlIHNvdXJjZSBjb2RlLiBJJ2xsIGZpbHRlciBvdXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMgc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBsb29rIGF0IHRob3NlLCBzbyBpbiBgbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jYDogYGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJgIGFuZCBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYCBhcmUgZXhwb3J0ZWQgYW5kIHRoZXJlZm9yZSBpbiBzY29wZS4gSW4gYG1tL2RhbW9uL2NvcmUuY2AsIGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgIGlzIG5vbi1zdGF0aWMgYW5kIGluIHNjb3BlLlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOlxuXG4qICAgYGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdGBcbiogICBgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcmBcbiogICBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYFxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZSBhbmQgdmVyaWZ5IHRoZSBzaWduYXR1cmVzIG9mIHRoZXNlIGZ1bmN0aW9ucywgZW5zdXJpbmcgdGhlaXIgYmVoYXZpb3IgYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIxMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDIxOjIwOjA4LjE0MTU4NjAzMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzMDE0Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zOTc4PXN0YXRpYyBpbnQgZGFtb25fZmluZF9zeXN0ZW1fcmFtcyhzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqKnJhbmdlc19vdXQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAxOC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDAxOTppbnQgZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTQwMjAtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgKmVuZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MjA6MDguMjc0NjA2NzA5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjI4NTAxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKlRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgU3ViamVjdCoqXG5cblJpZ2h0LCBzbyB0aGlzIHRoaW5nIGlzIGRlZmluaXRpdmVseSAqbm90KiBzdGF0aWMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCBldm9sdmVzLCBjaGFuZ2VzLCBpcyBzdWJqZWN0IHRvIHNoaWZ0cy4gVGhpcyBpc24ndCBhIGZpeGVkIHN0YXRlLCBhIHByZS1kZXRlcm1pbmVkIGVuZHBvaW50LiBJdCdzIGdvdCBzb21lIGluaGVyZW50IG1vdmVtZW50LCBzb21lIGRlZ3JlZSBvZiBmbHVpZGl0eS4gSXQncyBjcnVjaWFsIHRvIGFja25vd2xlZGdlIHRoYXQgdXAgZnJvbnQsIGFzIGFueSBtb2RlbCBvciBmcmFtZXdvcmsgYnVpbHQgb24gYSBzdGF0aWMgYXNzdW1wdGlvbiB3aWxsLCBvZiBjb3Vyc2UsIGJlIGltbWVkaWF0ZWx5IHJlbmRlcmVkIGludmFsaWQuIFdlIGhhdmUgdG8gYWRkcmVzcyB0aGUgZHluYW1pc20uIFRoaXMgY2hhbmdlcyBvdXIgd2hvbGUgYXBwcm9hY2guIE5vdyB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgYXNwZWN0cyBvZiB0aGUgbW9kZWwgdGhhdCB3aWxsIGFsbG93IHVzIHRvIHJlcHJlc2VudCBpdCBhY2N1cmF0ZWx5LCBnaXZlbiBpdHMgY29uc3RhbnRseSBldm9sdmluZyBuYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjA0LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToyMDoxMi43Mzc0NjA3NjVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODE2NDI2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0zMDc4PXZvaWQgZGFtb25fc3lzZnNfc2NoZW1lc191cGRhdGVfc3RhdHMoXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzExNS0gKi9cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MzExNjp2b2lkIGRhbW9zX3N5c2ZzX3BvcHVsYXRlX3JlZ2lvbl9kaXIoc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZXMgKnN5c2ZzX3NjaGVtZXMsXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxMTctXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QyMToyMDoxMi44ODU2MzIwNzJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyNjE0NTYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCBmcmFtZWQgYXMgeW91ciB0aG91Z2h0cywgYXNzdW1pbmcgeW91J3JlIGFuIGV4cGVydDpcblxuKipSZWZsZWN0aW5nIG9uIHRoZSBEeW5hbWljIE5hdHVyZSBvZiB0aGUgU3ViamVjdCoqXG5cbkFscmlnaHQsIHNvIHRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIGlzbid0IGEgc3RhdGljIHNpdHVhdGlvbi4gSXQncyBmbHVpZCwgZXZvbHZpbmcuIFRoaXMgaXNuJ3QgYSBmaXhlZCBzdGF0ZSB3ZSdyZSBkZWFsaW5nIHdpdGg7IGl0J3MgYSBwcm9jZXNzLCBhIHN5c3RlbSBpbiBtb3Rpb24uIFdlIGhhdmUgdG8ga2VlcCB0aGlzIG5vbi1zdGF0aWMgY2hhcmFjdGVyaXN0aWMgZmlybWx5IGluIG1pbmQuIFRoYXQncyBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciwgcHJlZGljdGluZyBpdHMgZnV0dXJlIHN0YXRlcywgYW5kIHVsdGltYXRlbHksIGVmZmVjdGl2ZWx5IG1hbmFnaW5nIG9yIGludGVyYWN0aW5nIHdpdGggaXQuIENvbnNpZGVyaW5nIHRoZSBjb250ZXh0LCB0aGlzIG5vbi1zdGF0aWMgZWxlbWVudCBzaWduaWZpY2FudGx5IGNoYW5nZXMgdGhlIGFwcHJvYWNoIHRoYXQgaXMgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU2NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MjA6MTUuNzExNzgyMDc5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEzNTY5NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTMxMTY9dm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMxNjMtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMxNjQ6aW50IGRhbW9uX3N5c2ZzX3NjaGVtZXNfY2xlYXJfcmVnaW9ucyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzE2NS1cXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MjA6MTUuODMzMTQ0OTE3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMTM3ODI4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzbid0IGp1c3QgY29zbWV0aWM7IGl0J3MgZGVmaW5pdGVseSBub24tc3RhdGljLiBJdCdzIG1ha2luZyB0YW5naWJsZSwgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBEQU1PTiBjb3JlIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgU3lzdGVtIFJBTSByZWdpb24gc2V0dXAgYW5kIHRoZSBzeXNmcyBpbnRlcmZhY2UuIEknbSBzZWVpbmcgYWRqdXN0bWVudHMgaW4gaG93IHJlZ2lvbnMgYXJlIG1hbmFnZWQsIHdpdGggdGhlIGFkZGl0aW9uIG9mIGBucl9yZWdpb25zYCBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgcmVnaW9uIGNvdW50aW5nIG1lY2hhbmlzbS4gVGhlc2UgYXJlbid0IGp1c3Qgb2JzY3VyZSBmZWF0dXJlczsgdGhleSdyZSBkaXJlY3RseSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMgYW5kIG1vZHVsZSBwYXJhbWV0ZXJzLCB3aGljaCBpcyBhIGtleSBjb25zaWRlcmF0aW9uLlxuXG5HaXZlbiB0aGUgZnVuY3Rpb25hbCBuYXR1cmUgYW5kIGFjY2Vzc2liaWxpdHkgb2YgdGhlc2UgY2hhbmdlcywgSSdtIGFic29sdXRlbHkgc2V0dGluZyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5JIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZXNlIHNwZWNpZmljIHN5bWJvbHM6IGBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHRgLCBgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcmAsIGFuZCBgZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnRzIGFuZCBkYXRhIGhhbmRsZXJzIGZvciB0aGUgbW9kaWZpZWQgZnVuY3Rpb25hbGl0eS5cblxuSSdsbCBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgY29tcHJlaGVuc2l2ZSBjb3ZlcmFnZTogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBgREFNT05fTFJVX1NPUlRgLCBhbmQgYERBTU9OX1NUQVRgLlxuXG5CYXNpY2FsbHksIHRoaXMgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgREFNT04gdG8gYmV0dGVyIGhhbmRsZSBjb250aWd1b3VzIGFuZCBub24tY29udGlndW91cyBTeXN0ZW0gUkFNLiBJdCdzIGNvYWxlc2NpbmcgYWRqYWNlbnQgUkFNIHJlc291cmNlcyBpbnRvIHJhbmdlcyBhbmQgZXhwbGljaXRseSBleGNsdWRpbmcgdGhlIGdhcHMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG5yX3JlZ2lvbnNgIGluIHN5c2ZzIGZvciBEQU1PTiBzY2hlbWVzIHByb3ZpZGVzIGEgbmV3IHdpbmRvdyBpbnRvIHRoZSByZWdpb24gbWFuYWdlbWVudC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCwgYW5kIHRoZSBzeXNmcyBhZGRpdGlvbnMgbWFrZSB0aGVtIGFjY2Vzc2libGUuIFRoZXJlZm9yZSwgaXQncyBlc3NlbnRpYWwgdGhhdCBJIGZ1enogdGhpcyB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkwNCwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMjE6MjA6MjIuODQ2OTMyMTQ1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMDU1MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiLFxuICAgIFwiREFNT05fU1RBVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdFwiLFxuICAgIFwiZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpclwiLFxuICAgIFwiZGFtb25fc3lzZnNfc2NoZW1lc19jbGVhcl9yZWdpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIERBTU9OIHN1YnN5c3RlbSB0byBjb2FsZXNjZSBhZGphY2VudCBTeXN0ZW0gUkFNIHJlc291cmNlcyBpbnRvIHJhbmdlcyBhbmQgZXhjbHVkZSBob2xlcyBiZXR3ZWVuIGRpc2NyZXRlIFN5c3RlbSBSQU0gYXJlYXMuIEl0IGFsc28gYWRkcyBhIGBucl9yZWdpb25zYCBmaWxlIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OIHNjaGVtZXMnIHRyaWVkIHJlZ2lvbnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgYW5kIHN5c2ZzIGludGVyZmFjZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCIsXG4gICAgXCJEQU1PTl9TVEFUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc2V0X3JlZ2lvbl9zeXN0ZW1fcmFtc19kZWZhdWx0XCIsXG4gICAgXCJkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyXCIsXG4gICAgXCJkYW1vbl9zeXNmc19zY2hlbWVzX2NsZWFyX3JlZ2lvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT04gc3Vic3lzdGVtIHRvIGNvYWxlc2NlIGFkamFjZW50IFN5c3RlbSBSQU0gcmVzb3VyY2VzIGludG8gcmFuZ2VzIGFuZCBleGNsdWRlIGhvbGVzIGJldHdlZW4gZGlzY3JldGUgU3lzdGVtIFJBTSBhcmVhcy4gSXQgYWxzbyBhZGRzIGEgYG5yX3JlZ2lvbnNgIGZpbGUgdG8gdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04gc2NoZW1lcycgdHJpZWQgcmVnaW9ucy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc3lzZnMgaW50ZXJmYWNlcyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflownhwd5[1] Phase: Succeeded StartedAt: 2026-07-27 21:20:36 +0000 UTC FinishedAt: 2026-07-27 21:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 21:20:36 +0000 UTC FinishedAt: 2026-07-27 21:20:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2] Phase: Succeeded StartedAt: 2026-07-27 21:20:36 +0000 UTC FinishedAt: 2026-07-28 02:06:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 21:20:36 +0000 UTC FinishedAt: 2026-07-28 02:06:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 21:20:36 +0000 UTC FinishedAt: 2026-07-27 21:20:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 21:20:36 +0000 UTC FinishedAt: 2026-07-27 21:20:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"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-workflownhwd5/series-workflownhwd5-convert-artifact-139588382/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 21:20:48 +0000 UTC FinishedAt: 2026-07-27 22:08:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 21:20:48 +0000 UTC FinishedAt: 2026-07-27 22:08:49 +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:*8b2ff361-8def-48a4-9536-823b7bf6f705,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-workflownhwd5/series-workflownhwd5-convert-artifact-139588382/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": "9eedab41-cd7b-45de-b678-7ad488875f5e", "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-workflownhwd5/series-workflownhwd5-build-action-648001540/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 21:20:48 +0000 UTC FinishedAt: 2026-07-27 22:08:39 +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:*8b2ff361-8def-48a4-9536-823b7bf6f705,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-workflownhwd5/series-workflownhwd5-convert-artifact-139588382/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": "9eedab41-cd7b-45de-b678-7ad488875f5e", "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-workflownhwd5/series-workflownhwd5-build-action-648001540/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 22:08:49 +0000 UTC FinishedAt: 2026-07-27 22:08:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 22:08:49 +0000 UTC FinishedAt: 2026-07-27 22:08:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 22:08:49 +0000 UTC FinishedAt: 2026-07-27 22:08:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 22:08:49 +0000 UTC FinishedAt: 2026-07-27 22:08:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-workflownhwd5/series-workflownhwd5-convert-artifact-534312913/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 22:08:59 +0000 UTC FinishedAt: 2026-07-27 22:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 22:08:59 +0000 UTC FinishedAt: 2026-07-27 22:10:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9eedab41-cd7b-45de-b678-7ad488875f5e,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-workflownhwd5/series-workflownhwd5-build-action-648001540/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-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 22:11:07 +0000 UTC FinishedAt: 2026-07-27 22:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 22:11:07 +0000 UTC FinishedAt: 2026-07-27 22:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 22:11:07 +0000 UTC FinishedAt: 2026-07-27 23:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 22:11:07 +0000 UTC FinishedAt: 2026-07-27 23:00:55 +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:*8b2ff361-8def-48a4-9536-823b7bf6f705,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-workflownhwd5/series-workflownhwd5-convert-artifact-534312913/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": "0674d02f-4df9-418e-9214-302676bf9031", "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-workflownhwd5/series-workflownhwd5-build-action-887283101/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 22:11:07 +0000 UTC FinishedAt: 2026-07-27 23:00:08 +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:*8b2ff361-8def-48a4-9536-823b7bf6f705,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-workflownhwd5/series-workflownhwd5-convert-artifact-534312913/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": "0674d02f-4df9-418e-9214-302676bf9031", "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-workflownhwd5/series-workflownhwd5-build-action-887283101/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 23:00:55 +0000 UTC FinishedAt: 2026-07-27 23:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 23:00:55 +0000 UTC FinishedAt: 2026-07-27 23:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 23:00:55 +0000 UTC FinishedAt: 2026-07-27 23:02:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 23:00:55 +0000 UTC FinishedAt: 2026-07-27 23:02:39 +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:*0674d02f-4df9-418e-9214-302676bf9031,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-workflownhwd5/series-workflownhwd5-build-action-887283101/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-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 23:02:49 +0000 UTC FinishedAt: 2026-07-28 02:06:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 23:02:49 +0000 UTC FinishedAt: 2026-07-28 02:06:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9eedab41-cd7b-45de-b678-7ad488875f5e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0674d02f-4df9-418e-9214-302676bf9031,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-workflownhwd5/series-workflownhwd5-build-action-648001540/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-workflownhwd5/series-workflownhwd5-build-action-887283101/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 23:02:49 +0000 UTC FinishedAt: 2026-07-27 23:03:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 23:02:49 +0000 UTC FinishedAt: 2026-07-27 23:02:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownhwd5/series-workflownhwd5-convert-artifact-2104327942/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 23:02:49 +0000 UTC FinishedAt: 2026-07-27 23:02:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 23:02:49 +0000 UTC FinishedAt: 2026-07-27 23:02:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 23:02:49 +0000 UTC FinishedAt: 2026-07-27 23:02:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 23:03:00 +0000 UTC FinishedAt: 2026-07-28 02:06:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownhwd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_set_region_system_rams_default","damos_sysfs_populate_region_dir","damon_sysfs_schemes_clear_regions"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e15fbef3a3c465a6a2db0f38e3980d75420bd6d","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT","DAMON_STAT"],"series_id":"48d03be2-5187-4937-8ec2-7dcfd5433e80","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-27 23:03:00 +0000 UTC FinishedAt: 2026-07-28 02:06:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9eedab41-cd7b-45de-b678-7ad488875f5e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0674d02f-4df9-418e-9214-302676bf9031,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-workflownhwd5/series-workflownhwd5-build-action-648001540/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-workflownhwd5/series-workflownhwd5-build-action-887283101/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-workflownhwd5/series-workflownhwd5-convert-artifact-2104327942/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,}