Name: series-workflowsjzdx Phase: Succeeded StartedAt: 2026-09-05 08:53:08 +0000 UTC FinishedAt: 2026-09-05 13:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[0] Phase: Succeeded StartedAt: 2026-09-05 08:53:08 +0000 UTC FinishedAt: 2026-09-05 09:35:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 08:53:08 +0000 UTC FinishedAt: 2026-09-05 09:35:01 +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": "e81d06906b1675bcfdf559fada6725466c7efcc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "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": "e81d06906b1675bcfdf559fada6725466c7efcc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "series_id": "271e24aa-bca2-47d4-be7b-4a6c82c69d3a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_ptep_mkold", "damon_folio_mkold_one", "damon_folio_mkold", "damon_mkold_pmd_entry", "damos_va_filter_young_match" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHRlcF9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb19ta29sZF9vbmUmIzM0OywKICAgICYjMzQ7ZGFtb25fZm9saW9fbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25fbWtvbGRfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGRhbW9uX3B0ZXBfbWtvbGQoKWAgaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AgdG8gcGFzcyBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYCBpbnN0ZWFkIG9mIHRoZSByYXcgYGFkZHJgLCBlbnN1cmluZyBhcmNoaXRlY3R1cmFsIGNvbXBhdGliaWxpdHkgd2hlcmUgcGFnZS1hbGlnbmVkIGFkZHJlc3NlcyBhcmUgZXhwZWN0ZWQuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBpbnRyb2R1Y2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRhbW9uX3B0ZXBfbWtvbGQoKSBpbiBtbS9kYW1vbi9vcHMtY29tbW9uLmMgdG8gYWxpZ24gdGhlIHZpcnR1YWwgYWRkcmVzcyBwYXNzZWQgdG8gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIHVzaW5nIFBBR0VfQUxJR05fRE9XTigpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IG1vbml0b3JpbmcgbG9naWMgaW4gREFNT04sIHdoaWNoIGlzIGNvbnRyb2xsYWJsZSB2aWEgc3lzZnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGR1cmluZyBwYWdlIHRhYmxlIHdhbGtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWJlNzk0MzE4YTg2M2ZjYWYxMThkMGU5Mzg0OTE0ZDEwZDQxM2IzOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDk6MzQ6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5pbmRleCA3YTJlNDBiYzdiYWVkLi43MjE5YzYwOGIxOTUyIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbkBAIC02MSw3ICYjNDM7NjEsMTIgQEAgdm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJcbiBcdCAqIGRldmljZSBhc3BlY3RzLlxuIFx0ICovXG4gXHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKVxuLVx0XHR5b3VuZyB8PSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkciwgcHRlKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBcmNoIGltcGxlbWVudGF0aW9uIG9mIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKSBtYXlcbiYjNDM7XHRcdCAqIHJlcXVpcmUgYWxpZ25lZCBAYWRkclxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR5b3VuZyB8PSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgUEFHRV9BTElHTl9ET1dOKGFkZHIpLFxuJiM0MztcdFx0XHRcdHB0ZSk7XG4gXHR5b3VuZyB8PSBtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSk7XG4gXHRpZiAoeW91bmcpXG4gXHRcdGZvbGlvX3NldF95b3VuZyhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9wdGVwX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX2ZvbGlvX21rb2xkX29uZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb19ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9ta29sZF9wbWRfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRhbW9uX3B0ZXBfbWtvbGQoKSBpbiBtbS9kYW1vbi9vcHMtY29tbW9uLmMgdG8gYWxpZ24gdGhlIHZpcnR1YWwgYWRkcmVzcyBwYXNzZWQgdG8gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIHVzaW5nIFBBR0VfQUxJR05fRE9XTigpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IG1vbml0b3JpbmcgbG9naWMgaW4gREFNT04sIHdoaWNoIGlzIGNvbnRyb2xsYWJsZSB2aWEgc3lzZnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGR1cmluZyBwYWdlIHRhYmxlIHdhbGtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWJlNzk0MzE4YTg2M2ZjYWYxMThkMGU5Mzg0OTE0ZDEwZDQxM2IzOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDk6MzQ6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKaW5kZXggN2EyZTQwYmM3YmFlZC4uNzIxOWM2MDhiMTk1MiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL29wcy1jb21tb24uYwpAQCAtNjEsNyAmIzQzOzYxLDEyIEBAIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyCiAJICogZGV2aWNlIGFzcGVjdHMuCiAJICovCiAJaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkKLQkJeW91bmcgfD0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFkZHIsIHB0ZSk7CiYjNDM7CQkvKgomIzQzOwkJICogQXJjaCBpbXBsZW1lbnRhdGlvbiBvZiBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCkgbWF5CiYjNDM7CQkgKiByZXF1aXJlIGFsaWduZWQgQGFkZHIKJiM0MzsJCSAqLwomIzQzOwkJeW91bmcgfD0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIFBBR0VfQUxJR05fRE9XTihhZGRyKSwKJiM0MzsJCQkJcHRlKTsKIAl5b3VuZyB8PSBtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcodm1hLSZndDt2bV9tbSwgYWRkciwgYWRkciAmIzQzOyBQQUdFX1NJWkUpOwogCWlmICh5b3VuZykKIAkJZm9saW9fc2V0X3lvdW5nKGZvbGlvKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2MQoJCQkJCQkJb3V0cHV0OiA1OQoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGF0IGNvbW1pdCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2Ugd2l0aGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhbHRlcmluZyB0aGUgYGRhbW9uX3B0ZXBfbWtvbGRgIGZ1bmN0aW9uLiBSaWdodCwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZzogaXQmIzM5O3MgYWRqdXN0aW5nIHRoZSBjYWxsIHRvIGBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nYC4gUHJldmlvdXNseSwgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGNhbGwsIGJ1dCBub3cgdGhlcmUmIzM5O3MgdGhpcyBhZGRlZCBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCBiZWZvcmUgcGFzc2luZyBgYWRkcmAgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAuCgpUaGUgY29tbWVudCBpcyBrZXk6ICYjMzQ7QXJjaCBpbXBsZW1lbnRhdGlvbiBvZiBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYCBtYXkgcmVxdWlyZSBhbGlnbmVkIGBAYWRkcmAuJiMzNDsgU28sIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJlcXVpcmVtZW50cyBvciBwb3RlbnRpYWwgYWxpZ25tZW50IGlzc3VlcyB0aGF0IGhhdmUgYmVlbiBpZGVudGlmaWVkLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyBjb21wYXRpYmlsaXR5IGFuZCBhdm9pZGluZyBhbnkgc3VidGxlIGJ1Z3Mgb24gY2VydGFpbiBhcmNoaXRlY3R1cmVzIHRoYXQgbWlnaHQgYmUgc2Vuc2l0aXZlIHRvIHVuYWxpZ25lZCBhZGRyZXNzZXMgd2hlbiBjaGVja2luZyBhbmQgY2xlYXJpbmcgdGhlICYjMzQ7eW91bmcmIzM0OyBiaXQgaW4gcGFnZSB0YWJsZSBlbnRyaWVzLgoKVG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gZ28gYnJvYWRlci4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIGluIGRldGFpbCwgYWxvbmcgd2l0aCBvdGhlciBEQU1PTiBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgY2FsbGVycyBvZiBgZGFtb25fcHRlcF9ta29sZGAgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSwgYW5kIGhvdyB3aWRlbHkgaXQgaW1wYWN0cyB0aGUgZXhpc3RpbmcgREFNT04gaW1wbGVtZW50YXRpb24uIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciByZWxhdGVkIGBLY29uZmlnYCBvcHRpb25zIHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBtYXkgYmUgY29udHJvbGxlZCBieSBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zLgoKVGltZSB0byBmaXJlIHVwIGByZWFkLWZpbGVgIGFuZCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHRoZSB3aWRlciBwaWN0dXJlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3B0ZXBfbWtvbGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vb3BzLWNvbW1vbi5jPTI0PXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy00MS1cbm1tL2RhbW9uL29wcy1jb21tb24uYzo0Mjp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL2RhbW9uL29wcy1jb21tb24uYy00My17XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE2ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTcxLVx0XHRpZiAocHZtdy5wdGUpXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTcyOlx0XHRcdGRhbW9uX3B0ZXBfbWtvbGQocHZtdy5wdGUsIHZtYSwgYWRkcik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTczLVx0XHRlbHNlXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTg9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oLTktXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTA6dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oLTExLXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTI1OD1zdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy0yNzgtXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vdmFkZHIuYzoyNzk6XHRkYW1vbl9wdGVwX21rb2xkKHB0ZSwgd2Fsay1cdTAwM2V2bWEsIGFkZHIpO1xubW0vZGFtb24vdmFkZHIuYy0yODAtb3V0OlxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NTEzPXN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy01MjctXHRpZiAoeW91bmcgXHUwMDI2XHUwMDI2IHB0ZXApXG5tbS9kYW1vbi92YWRkci5jOjUyODpcdFx0ZGFtb25fcHRlcF9ta29sZChwdGVwLCB2bWEsIGFkZHIpO1xubW0vZGFtb24vdmFkZHIuYy01MjktXHRlbHNlIGlmICh5b3VuZyBcdTAwMjZcdTAwMjYgcG1kcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL29wcy1jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gIDQzOlx0e1xuICA0NDpcdFx0cHRlX3QgcHRldmFsID0gcHRlcF9nZXQocHRlKTtcbiAgNDU6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gIDQ2Olx0XHRib29sIHlvdW5nID0gZmFsc2U7XG4gIDQ3Olx0XHR1bnNpZ25lZCBsb25nIHBmbjtcbiAgNDg6XHRcbiAgNDk6XHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpXG4gIDUwOlx0XHRcdHBmbiA9IHB0ZV9wZm4ocHRldmFsKTtcbiAgNTE6XHRcdGVsc2VcbiAgNTI6XHRcdFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCkpO1xuICA1MzpcdFxuICA1NDpcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8ocGZuKTtcbiAgNTU6XHRcdGlmICghZm9saW8pXG4gIDU2Olx0XHRcdHJldHVybjtcbiAgNTc6XHRcbiAgNTg6XHRcdC8qXG4gIDU5Olx0XHQgKiBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdCBhY3R1YWxseSBtYXAgcGFnZXNcbiAgNjA6XHRcdCAqIGFyZSBcJiMzNDtvbGRcJiMzNDsgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlIG9mIGFueVxuICA2MTpcdFx0ICogZGV2aWNlIGFzcGVjdHMuXG4gIDYyOlx0XHQgKi9cbiAgNjM6XHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpXG4gIDY0Olx0XHRcdC8qXG4gIDY1Olx0XHRcdCAqIEFyY2ggaW1wbGVtZW50YXRpb24gb2YgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIG1heVxuICA2NjpcdFx0XHQgKiByZXF1aXJlIGFsaWduZWQgQGFkZHJcbiAgNjc6XHRcdFx0ICovXG4gIDY4Olx0XHRcdHlvdW5nIHw9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBQQUdFX0FMSUdOX0RPV04oYWRkciksXG4gIDY5Olx0XHRcdFx0XHRwdGUpO1xuICA3MDpcdFx0eW91bmcgfD0gbW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgYWRkciAmIzQzOyBQQUdFX1NJWkUpO1xuICA3MTpcdFx0aWYgKHlvdW5nKVxuICA3MjpcdFx0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuICA3MzpcdFxuICA3NDpcdFx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuICA3NTpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiAgNzY6XHR9XG4gIDc3Olx0XG4gIDc4Olx0dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gIDc5Olx0e1xuICA4MDpcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiAgODE6XHRcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7XG4gIDgyOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuICA4MzpcdFx0Ym9vbCB5b3VuZyA9IGZhbHNlO1xuICA4NDpcdFx0dW5zaWduZWQgbG9uZyBwZm47XG4gIDg1Olx0XG4gIDg2Olx0XHRpZiAobGlrZWx5KHBtZF9wcmVzZW50KHBtZHZhbCkpKVxuICA4NzpcdFx0XHRwZm4gPSBwbWRfcGZuKHBtZHZhbCk7XG4gIDg4Olx0XHRlbHNlXG4gIDg5Olx0XHRcdHBmbiA9IHNvZnRsZWFmX3RvX3Bmbihzb2Z0bGVhZl9mcm9tX3BtZChwbWR2YWwpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczoKCioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgREFNT04gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gREFNT04uIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIGZpbmQgdGhvc2U/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGVzcGVjaWFsbHkgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW1gKSBhcmVhLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSB3aXRoaW4gdGhlIGBtbS9kYW1vbmAgZGlyZWN0b3J5LiBUaGUgS2NvbmZpZyBmaWxlIHRoZXJlIHNob3VsZCBiZSB0aGUgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBvcGVuIGBtbS9kYW1vbi9LY29uZmlnYCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3B0aW9ucyBmb3IgZW5hYmxpbmcsIGRpc2FibGluZywgYW5kIGN1c3RvbWl6aW5nIERBTU9OLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBvcHMtY29tbW9uLm9gIGlzIGJlaW5nIGNvbnN0cnVjdGVkLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgaW4gdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgb2JqZWN0IGZpbGUgY29tcGlsYXRpb24gZGV0YWlscyByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8gZ28gYW5kIGV4YW1pbmUgdGhhdCBgTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHN0ZXBzIGFuZCBkZXBlbmRlbmNpZXMgaW52b2x2ZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzLCBzb3VyY2UgZmlsZXMsIGFuZCBsaW5raW5nIGluc3RydWN0aW9ucyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYG9wcy1jb21tb24ub2AuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG4gICA0Olx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG4gICA1Olx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyBwYWRkci5vXG4gICA2Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVx0JiM0Mzs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cbiAgIDg6XHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXG4gICA5Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBXb3J0aHkgb2YgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIHNwZWNpZmljYWxseSB3aGVuIGVpdGhlciBgQ09ORklHX0RBTU9OX1ZBRERSYCBvciBgQ09ORklHX0RBTU9OX1BBRERSYCBpcyBlbmFibGVkLiBEQU1PTiwgcmlnaHQsIGl0JiMzOTtzIGEgY29yZSBNTSBzdWJzeXN0ZW0sIGZ1bGx5IGNvbmZpZ3VyYWJsZSB0aHJvdWdoIHN5c2ZzIGFuZCB0aG9zZSBEQU1PTiBtb2R1bGVzLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgZnV6emluZywgbGV0JiMzOTtzIHNlZS4KCkkgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBzZXR1cHMgbGlrZSBRRU1VL0dDRS4gWWVwLCBEQU1PTiYjMzk7cyBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMsIGFuZCBkZWJ1Z2ZzIGlmIGl0IGlzIGVuYWJsZWQuIFN5emthbGxlciwgaW4gcGFydGljdWxhciwgaGl0cyB0aGVzZSBpbnRlcmZhY2VzLgoKVGhpcyBwYXRjaCBpcyBhbHRlcmluZyB0aGUgYGRhbW9uX3B0ZXBfbWtvbGRgIGZ1bmN0aW9uLCBkaXJlY3RseSBtb2RpZnlpbmcgZXhlY3V0YWJsZSBDIGNvZGUgaW4gYG1tL2AuIEl0JiMzOTtzIHR3ZWFraW5nIGhvdyBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZ2AgaXMgY2FsbGVkLCBieSBhbGlnbmluZyB0aGUgYGFkZHJgIGFyZ3VtZW50IHRvIHRoZSBwYWdlIGJvdW5kYXJ5LgoKTm93LCBsZXQmIzM5O3MgY2hlY2sgdGhlIGZ1enppbmcgY3JpdGVyaWEuICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzogQ29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4mIzM0OwoKQmluZ28uIFRoaXMgY2xlYXJseSBtb2RpZmllcyBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYC4gKipXb3J0aEZ1enppbmcgaXMgdHJ1ZS4qKiBJIGRvbiYjMzk7dCBzZWUgYW55IGNhdmVhdHMgdGhlcmUuIEl0JiMzOTtzIGluIGEgY29yZSBzdWJzeXN0ZW0uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhvc2UgRm9jdXNTeW1ib2xzLiBXaGljaCBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGltcGFjdGVkIG9yIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlPyBPYnZpb3VzbHksIGBkYW1vbl9wdGVwX21rb2xkYCBpcyB0aGUgbWFpbiB0YXJnZXQuIEl0cyBjYWxsZXJzIGFuZCByZWxhdGVkIG9wZXJhdGlvbnMgYXJlOiBgZGFtb25fZm9saW9fbWtvbGRfb25lYCwgYGRhbW9uX21rb2xkX3BtZF9lbnRyeWAsIGBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2hgLCBhbmQgYGRhbW9uX3BhX21rb2xkYCBvciB0aGUgZXF1aXZhbGVudCBmb3IgcGh5c2ljYWwgYWRkcmVzc2VzLgoKVGltZSB0byBkbyBhIHRob3JvdWdoIGNoZWNrIG9mIGFsbCBjYWxsZXJzIG9mIGBkYW1vbl9wdGVwX21rb2xkYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGRpZyBkZWVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9wdGVwX21rb2xkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL29wcy1jb21tb24uYz0yND1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDEtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDI6dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDMte1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNjQ9c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3MS1cdFx0aWYgKHB2bXcucHRlKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3MjpcdFx0XHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3My1cdFx0ZWxzZVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaD04PXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjEwOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xMS12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG4tLVxubW0vZGFtb24vdmFkZHIuYz0yNTg9c3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjc4LVx0XHRnb3RvIG91dDtcbm1tL2RhbW9uL3ZhZGRyLmM6Mjc5Olx0ZGFtb25fcHRlcF9ta29sZChwdGUsIHdhbGstXHUwMDNldm1hLCBhZGRyKTtcbm1tL2RhbW9uL3ZhZGRyLmMtMjgwLW91dDpcbi0tXG5tbS9kYW1vbi92YWRkci5jPTUxMz1zdGF0aWMgYm9vbCBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTI3LVx0aWYgKHlvdW5nIFx1MDAyNlx1MDAyNiBwdGVwKVxubW0vZGFtb24vdmFkZHIuYzo1Mjg6XHRcdGRhbW9uX3B0ZXBfbWtvbGQocHRlcCwgdm1hLCBhZGRyKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNTI5LVx0ZWxzZSBpZiAoeW91bmcgXHUwMDI2XHUwMDI2IHBtZHApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW46IGBkYW1vbl9mb2xpb19ta29sZF9vbmVgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IHRyYWNlIGl0cyBjYWxsIGdyYXBoLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIElzIGl0IHVzZWQgZGlyZWN0bHkgd2l0aGluIGEgY3JpdGljYWwgcGF0aCwgb3IgaXMgaXQgc2V2ZXJhbCBsYXllcnMgZGVlcCBpbiBhIHV0aWxpdHkgbW9kdWxlPyBBcmUgdGhlcmUgbXVsdGlwbGUgY2FsbCBzaXRlcywgYW5kIGlmIHNvLCBhcmUgdGhleSB1c2VkIHVuZGVyIHNpbWlsYXIgY29uZGl0aW9ucz8gVGhlIGNhbGxpbmcgY29udGV4dCBpcyBwYXJhbW91bnQsIEkgbmVlZCB0byBrbm93IHdoeSBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBldmVuIGJlaW5nIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgaW1tZWRpYXRlbHkgcmV2ZWFsIHRoZSBwb3RlbnRpYWwgcmlzay4gQmFzZWQgb24gd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIEkmIzM5O2xsIGJlIGFibGUgdG8gZGVjaWRlIHRoZSBiZXN0IHBhdGggdG8gYWRkcmVzcyBhbnkgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9mb2xpb19ta29sZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9vcHMtY29tbW9uLmM9MTU1PWludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE2My1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNjQ6c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTY1LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3OC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNzk6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE4MC17XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgxLVx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxODI6XHRcdC5ybWFwX29uZSA9IGRhbW9uX2ZvbGlvX21rb2xkX29uZSxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xODMtXHRcdC5hbm9uX2xvY2sgPSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQsXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI2Nj1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI5MC1cdFx0aWYgKG1hdGNoZWQpXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjkxOlx0XHRcdGRhbW9uX2ZvbGlvX21rb2xkKGZvbGlvKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yOTItXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaD0xMT12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTI6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xMy1ib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9Mzg9c3RhdGljIHZvaWQgZGFtb25fcGFfbWtvbGQocGh5c19hZGRyX3QgcGFkZHIpXG4tLVxubW0vZGFtb24vcGFkZHIuYy00NC1cbm1tL2RhbW9uL3BhZGRyLmM6NDU6XHRkYW1vbl9mb2xpb19ta29sZChmb2xpbyk7XG5tbS9kYW1vbi9wYWRkci5jLTQ2LVx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg1NQoJCQkJCQkJb3V0cHV0OiAyMDYKCQkJCQkJCXRob3VnaHRzOiAzMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGlkZW50aWZ5aW5nIHRoZSBrZXkgZm9jdXMgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEkgc2VlIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWVzIGZsYWdnZWQ6IGBkYW1vbl9wdGVwX21rb2xkYCwgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAsIGBkYW1vbl9mb2xpb19ta29sZGAsIGBkYW1vbl9ta29sZF9wbWRfZW50cnlgLCBhbmQgYGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBrZWVwIGEgY2xvc2UgZXllIG9uIGZvciB0aGlzIHBhcnRpY3VsYXIgYW5hbHlzaXMuCgpOZXh0LCBJJiMzOTttIGNoZWNraW5nIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIERBTU9OIGFuZCB0aGUgY29yZSBjb2RlIHdpdGhpbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4KCk5vdywgSSYjMzk7bSBjb25maXJtaW5nIGEga25vd24gcXVhbnRpdHk7IGBQQUdFX0FMSUdOX0RPV05gIGlzIHN0YW5kYXJkLiBJJiMzOTt2ZSBub3RlZCB0aGF0IGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIGBkYW1vbl9wdGVwX21rb2xkYCBpbiBjb25qdW5jdGlvbiB3aXRoIGBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nYCwgd2hpY2ggaXMgZXhwZWN0ZWQgYmVoYXZpb3IuCgpJJiMzOTttIGRvaW5nIGEgZG91YmxlLWNoZWNrIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFnYWluLCBzdHJpcHBpbmcgdGhlICYjMzQ7Q09ORklHXyYjMzQ7IHByZWZpeCB0byBnZXQgdGhlIGJhcmUga2VybmVsIGNvbmZpZyBuYW1lczogJiMzNDtEQU1PTiYjMzQ7LCAmIzM0O0RBTU9OX1ZBRERSJiMzNDssICYjMzQ7REFNT05fUEFERFImIzM0OywgYW5kICYjMzQ7REFNT05fU1lTRlMmIzM0Oy4gVGhpcyBpcyBjcnVjaWFsIGZvciBjb25zaXN0ZW5jeSB3aGVuIEkgc2V0IHRoZSByZXN1bHRzLgoKRmluYWxseSwgSSYjMzk7bSByZXZpZXdpbmcgdGhlIHJlcXVpcmVkIGZvcm1hdCBmb3IgJiMzNDtzZXQtcmVzdWx0cy4mIzM0OyBJIG5lZWQgdG8gcHJlc2VudCB0aGlzIGluZm9ybWF0aW9uIGNvbmNpc2VseSwgaW5jbHVkaW5nIHRoZSBFbmFibGVDb25maWdzIGFzIGEgbGlzdCBvZiBzdHJpbmdzIChubyBDT05GSUdfIHByZWZpeCksIHRoZSBGb2N1c1N5bWJvbHMsIGEgYnJpZWYgZXhwbGFuYXRpb24gb2YgbXkgcmVhc29uaW5nLCBhbmQgYSBib29sZWFuIGZvciBgV29ydGhGdXp6aW5nYC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3B0ZXBfbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25fZm9saW9fbWtvbGRfb25lJiMzNDssCiAgICAmIzM0O2RhbW9uX2ZvbGlvX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX21rb2xkX3BtZF9lbnRyeSYjMzQ7LAogICAgJiMzNDtkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGFtb25fcHRlcF9ta29sZCgpIGluIG1tL2RhbW9uL29wcy1jb21tb24uYyB0byBhbGlnbiB0aGUgdmlydHVhbCBhZGRyZXNzIHBhc3NlZCB0byBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCkgdXNpbmcgUEFHRV9BTElHTl9ET1dOKCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBsb2dpYyBpbiBEQU1PTiwgd2hpY2ggaXMgY29udHJvbGxhYmxlIHZpYSBzeXNmcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzIGFuZCBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgb2NjdXIgZHVyaW5nIHBhZ2UgdGFibGUgd2Fsa3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHRlcF9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb19ta29sZF9vbmUmIzM0OywKICAgICYjMzQ7ZGFtb25fZm9saW9fbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25fbWtvbGRfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkYW1vbl9wdGVwX21rb2xkKCkgaW4gbW0vZGFtb24vb3BzLWNvbW1vbi5jIHRvIGFsaWduIHRoZSB2aXJ0dWFsIGFkZHJlc3MgcGFzc2VkIHRvIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKSB1c2luZyBQQUdFX0FMSUdOX0RPV04oKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIGxvZ2ljIGluIERBTU9OLCB3aGljaCBpcyBjb250cm9sbGFibGUgdmlhIHN5c2ZzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB2ZXJpZnkgY29ycmVjdG5lc3MgYW5kIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvY2N1ciBkdXJpbmcgcGFnZSB0YWJsZSB3YWxrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGRhbW9uX3B0ZXBfbWtvbGQoKWAgaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AgdG8gcGFzcyBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYCBpbnN0ZWFkIG9mIHRoZSByYXcgYGFkZHJgLCBlbnN1cmluZyBhcmNoaXRlY3R1cmFsIGNvbXBhdGliaWxpdHkgd2hlcmUgcGFnZS1hbGlnbmVkIGFkZHJlc3NlcyBhcmUgZXhwZWN0ZWQuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBpbnRyb2R1Y2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YmU3OTQzMThhODYzZmNhZjExOGQwZTkzODQ5MTRkMTBkNDEzYjM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwOTozNDowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uYwppbmRleCA3YTJlNDBiYzdiYWVkLi43MjE5YzYwOGIxOTUyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCkBAIC02MSw3ICYjNDM7NjEsMTIgQEAgdm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIKIAkgKiBkZXZpY2UgYXNwZWN0cy4KIAkgKi8KIAlpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKQotCQl5b3VuZyB8PSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkciwgcHRlKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBcmNoIGltcGxlbWVudGF0aW9uIG9mIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKSBtYXkKJiM0MzsJCSAqIHJlcXVpcmUgYWxpZ25lZCBAYWRkcgomIzQzOwkJICovCiYjNDM7CQl5b3VuZyB8PSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgUEFHRV9BTElHTl9ET1dOKGFkZHIpLAomIzQzOwkJCQlwdGUpOwogCXlvdW5nIHw9IG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyh2bWEtJmd0O3ZtX21tLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSk7CiAJaWYgKHlvdW5nKQogCQlmb2xpb19zZXRfeW91bmcoZm9saW8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIGEgcmVxdWVzdCBjYW1lIGluIHJlZ2FyZGluZyBhIHBhdGNoIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIGFuZCB3aGV0aGVyIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyByZXF1ZXN0IGlzIHNhZmUuIExldCYjMzk7cyBjbGFzc2lmeSBpdDogaXQmIzM5O3MgYSBkZWZlbnNpdmUgc2VjdXJpdHkgYXNzZXNzbWVudCBhbmQga2VybmVsIHNhbml0aXplciBldmFsdWF0aW9uLiBObyBtYWxpY2lvdXMgaW50ZW50LCBubyBleHBsb2l0IGdlbmVyYXRpb24sIG5vdGhpbmcgb2ZmZW5zaXZlLiBTZWVtcyBwZXJmZWN0bHkgZmluZSB0byBwcm9jZWVkLgoKTm93LCB0byB0aGUgcGF0Y2ggaXRzZWxmLiBJJiMzOTttIHNlZWluZyBhIGRpZmY6IEl0JiMzOTtzIG1vZGlmeWluZyBob3cgdGhlIGB5b3VuZ2AgYml0IGlzIGhhbmRsZWQgaW4gdGhlIHBhZ2UgdGFibGUgZW50cnksIHNwZWNpZmljYWxseSB3aXRoaW4gYGRhbW9uX3B0ZXBfbWtvbGRgLiBUaGUgY2hhbmdlIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGBQQUdFX0FMSUdOX0RPV05gIHRvIHRoZSBhZGRyZXNzIHBhc3NlZCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYC4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhhdCBzb21lIGFyY2hpdGVjdHVyZXMgbWlnaHQgcmVxdWlyZSB0aGUgYWRkcmVzcyB0byBiZSBhbGlnbmVkLiBUaGlzIGlzIGNydWNpYWw6IGFuIHVuYWxpZ25lZCBhY2Nlc3MgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiwgc28gdGhlcmUmIzM5O3MgYSByZWFzb24gZm9yIGNvbmNlcm4uIAoKVG8gZ2FpbiBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgbm93IHRha2UgYSBsb29rIGF0IGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIHRvIHNlZSBob3cgYGRhbW9uX3B0ZXBfbWtvbGRgIGZpdHMgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgREFNT04uIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGUgY2hhbmdlLiBUaGlzIGNoYW5nZSwgd2hpbGUgc2VlbWluZ2x5IHNtYWxsLCB0b3VjaGVzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbi4gSWYgdGhlcmUgaXMgYSBidWcsIGl0IGNvdWxkIGxlYWQgdG8gc2lnbmlmaWNhbnQgcHJvYmxlbXMuIEkgd2lsbCBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL29wcy1jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gIDQzOlx0e1xuICA0NDpcdFx0cHRlX3QgcHRldmFsID0gcHRlcF9nZXQocHRlKTtcbiAgNDU6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gIDQ2Olx0XHRib29sIHlvdW5nID0gZmFsc2U7XG4gIDQ3Olx0XHR1bnNpZ25lZCBsb25nIHBmbjtcbiAgNDg6XHRcbiAgNDk6XHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpXG4gIDUwOlx0XHRcdHBmbiA9IHB0ZV9wZm4ocHRldmFsKTtcbiAgNTE6XHRcdGVsc2VcbiAgNTI6XHRcdFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCkpO1xuICA1MzpcdFxuICA1NDpcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8ocGZuKTtcbiAgNTU6XHRcdGlmICghZm9saW8pXG4gIDU2Olx0XHRcdHJldHVybjtcbiAgNTc6XHRcbiAgNTg6XHRcdC8qXG4gIDU5Olx0XHQgKiBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdCBhY3R1YWxseSBtYXAgcGFnZXNcbiAgNjA6XHRcdCAqIGFyZSBcJiMzNDtvbGRcJiMzNDsgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlIG9mIGFueVxuICA2MTpcdFx0ICogZGV2aWNlIGFzcGVjdHMuXG4gIDYyOlx0XHQgKi9cbiAgNjM6XHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpXG4gIDY0Olx0XHRcdC8qXG4gIDY1Olx0XHRcdCAqIEFyY2ggaW1wbGVtZW50YXRpb24gb2YgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIG1heVxuICA2NjpcdFx0XHQgKiByZXF1aXJlIGFsaWduZWQgQGFkZHJcbiAgNjc6XHRcdFx0ICovXG4gIDY4Olx0XHRcdHlvdW5nIHw9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBQQUdFX0FMSUdOX0RPV04oYWRkciksXG4gIDY5Olx0XHRcdFx0XHRwdGUpO1xuICA3MDpcdFx0eW91bmcgfD0gbW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgYWRkciAmIzQzOyBQQUdFX1NJWkUpO1xuICA3MTpcdFx0aWYgKHlvdW5nKVxuICA3MjpcdFx0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuICA3MzpcdFxuICA3NDpcdFx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuICA3NTpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiAgNzY6XHR9XG4gIDc3Olx0XG4gIDc4Olx0dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gIDc5Olx0e1xuICA4MDpcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiAgODE6XHRcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7XG4gIDgyOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuICA4MzpcdFx0Ym9vbCB5b3VuZyA9IGZhbHNlO1xuICA4NDpcdFx0dW5zaWduZWQgbG9uZyBwZm47XG4gIDg1Olx0XG4gIDg2Olx0XHRpZiAobGlrZWx5KHBtZF9wcmVzZW50KHBtZHZhbCkpKVxuICA4NzpcdFx0XHRwZm4gPSBwbWRfcGZuKHBtZHZhbCk7XG4gIDg4Olx0XHRlbHNlXG4gIDg5Olx0XHRcdHBmbiA9IHNvZnRsZWFmX3RvX3Bmbihzb2Z0bGVhZl9mcm9tX3BtZChwbWR2YWwpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY3MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqVHJhY2luZyB0aGUgQ2FsbGVyJiMzOTtzIExpbmVhZ2U6IGBkYW1vbl9wdGVwX21rb2xkYCoqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjayBkb3duIHdobyYjMzk7cyBjYWxsaW5nIGBkYW1vbl9wdGVwX21rb2xkYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBmZWVscyBpbXBvcnRhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoYXQgdGhhdCBmdW5jdGlvbiBsaWtlbHkgKmRvZXMqIOKAkyBwdGVwIGltcGxpZXMgcGFnZSB0YWJsZSBlbnRyeSBtYW5pcHVsYXRpb24sIGFuZCB0aGUgJiMzNDtta29sZCYjMzQ7IHN0cm9uZ2x5IHN1Z2dlc3RzIHNvbWV0aGluZyB0byBkbyB3aXRoIG1hcmtpbmcgb3IgaGFuZGxpbmcgb2xkZXIgUFRFIGVudHJpZXMsIHBvc3NpYmx5IGZvciBhZ2luZyBvciBldmljdGlvbiBzdHJhdGVnaWVzLiBCdXQgSSBjYW4mIzM5O3QganVtcCB0byBjb25jbHVzaW9ucy4gRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBUaGF0IGdpdmVzIG1lIHRoZSBpbW1lZGlhdGUgYW5kIG5lY2Vzc2FyeSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgZGVwZW5kZW50IG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9wdGVwX21rb2xkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL29wcy1jb21tb24uYz0yND1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDEtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDI6dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDMte1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNjQ9c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3MS1cdFx0aWYgKHB2bXcucHRlKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3MjpcdFx0XHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3My1cdFx0ZWxzZVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaD04PXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjEwOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xMS12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG4tLVxubW0vZGFtb24vdmFkZHIuYz0yNTg9c3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjc4LVx0XHRnb3RvIG91dDtcbm1tL2RhbW9uL3ZhZGRyLmM6Mjc5Olx0ZGFtb25fcHRlcF9ta29sZChwdGUsIHdhbGstXHUwMDNldm1hLCBhZGRyKTtcbm1tL2RhbW9uL3ZhZGRyLmMtMjgwLW91dDpcbi0tXG5tbS9kYW1vbi92YWRkci5jPTUxMz1zdGF0aWMgYm9vbCBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTI3LVx0aWYgKHlvdW5nIFx1MDAyNlx1MDAyNiBwdGVwKVxubW0vZGFtb24vdmFkZHIuYzo1Mjg6XHRcdGRhbW9uX3B0ZXBfbWtvbGQocHRlcCwgdm1hLCBhZGRyKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNTI5LVx0ZWxzZSBpZiAoeW91bmcgXHUwMDI2XHUwMDI2IHBtZHApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MDIKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogMzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHRoZSBgZGFtb25fcHRlcF9ta29sZCgpYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyB0aGUgY2FsbCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYC4gVGhlIGNoYW5nZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBub3cgcGFzc2luZyBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBgYWRkcmAgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAuIFRoZSBqdXN0aWZpY2F0aW9uLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgY2VydGFpbiBhcmNoaXRlY3R1cmVzIG1pZ2h0ICpyZXF1aXJlKiB0aGlzIHBhZ2UgYWxpZ25tZW50IGZvciBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIE1ha2VzIHNlbnNlLiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgcXVpcmtzIGFyZSBhbHdheXMgZnVuLgoKTm93LCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDogRG9lcyB0aGlzIGhhdmUgYW55IG9mIHRoZSBjb21tb24gcGl0ZmFsbHM/CgoxLiAgRG9lcyB0aGlzIHRvdWNoIG9yIGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/IE5vLCBub3QgYXQgYWxsLgoyLiAgQW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwb2ludGVycywgb3IgYnVmZmVycyBpbnRyb2R1Y2VkPyBOb3BlLCBub3RoaW5nIGxpa2UgdGhhdC4KMy4gIEFyZSB0aGVyZSBhbnkgY2hhbmdlcyB0byBicmFuY2ggY29uZGl0aW9ucyByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4KNC4gIElzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBhbGxvY2F0ZWQgb3IgYWx0ZXJlZCBpbiBpdHMgaW5pdGlhbGl6YXRpb24/IE5lZ2F0aXZlLgo1LiAgRG9lcyB0aGlzIGNyZWF0ZSBhbnkgcmlzayBvZiByZWFkaW5nIG9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZT8gTm8sIGRlZmluaXRlbHkgbm90LgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCB3aGljaCBhcHBlYXJzIHRvIGJlIHB1cmVseSBhbiBhbGlnbm1lbnQgYWRqdXN0bWVudCB0byBhbiBleGlzdGluZyBwYXJhbWV0ZXIsIEkgbmVlZCB0byBjb25zaWRlciBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBLTVNBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gSG93ZXZlciwgdGhpcyBwYXRjaCBpcyBsaXRlcmFsbHkganVzdCBhbiBhbGlnbm1lbnQgY2hhbmdlLiBXZSYjMzk7cmUgbm90IHJlYWRpbmcsIHdyaXRpbmcsIGFsbG9jYXRpbmcsIG9yIGxlYWtpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIHNhbml0aXplcnMgYXJlIGdvaW5nIHRvIGhhbmRsZSB0aGUgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLCBidXQgaGVyZSB0aGVyZSYjMzk7cyBub3QgZXZlbiBhIGhpbnQgb2YgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LiBBbHJpZ2h0LCB0aW1lIHRvIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nIG9uZSBsYXN0IHRpbWUuIEFsbCBhc3BlY3RzIGNvdmVyZWQsIHNvIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGRhbW9uX3B0ZXBfbWtvbGQoKWAgaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AgdG8gcGFzcyBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYCBpbnN0ZWFkIG9mIHRoZSByYXcgYGFkZHJgLCBlbnN1cmluZyBhcmNoaXRlY3R1cmFsIGNvbXBhdGliaWxpdHkgd2hlcmUgcGFnZS1hbGlnbmVkIGFkZHJlc3NlcyBhcmUgZXhwZWN0ZWQuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBpbnRyb2R1Y2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBkYW1vbl9wdGVwX21rb2xkKClgIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIHRvIHBhc3MgYFBBR0VfQUxJR05fRE9XTihhZGRyKWAgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAgaW5zdGVhZCBvZiB0aGUgcmF3IGBhZGRyYCwgZW5zdXJpbmcgYXJjaGl0ZWN0dXJhbCBjb21wYXRpYmlsaXR5IHdoZXJlIHBhZ2UtYWxpZ25lZCBhZGRyZXNzZXMgYXJlIGV4cGVjdGVkLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgaW50cm9kdWNlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBvciBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGRldGVjdGlvbi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDowNC41NTkwMTA0NDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA1MzcxNTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3B0ZXBfbWtvbGRcIixcbiAgICBcImRhbW9uX2ZvbGlvX21rb2xkX29uZVwiLFxuICAgIFwiZGFtb25fZm9saW9fbWtvbGRcIixcbiAgICBcImRhbW9uX21rb2xkX3BtZF9lbnRyeVwiLFxuICAgIFwiZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBkYW1vbl9wdGVwX21rb2xkKClgIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIHRvIHBhc3MgYFBBR0VfQUxJR05fRE9XTihhZGRyKWAgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAgaW5zdGVhZCBvZiB0aGUgcmF3IGBhZGRyYCwgZW5zdXJpbmcgYXJjaGl0ZWN0dXJhbCBjb21wYXRpYmlsaXR5IHdoZXJlIHBhZ2UtYWxpZ25lZCBhZGRyZXNzZXMgYXJlIGV4cGVjdGVkLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBpbnRyb2R1Y2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGFtb25fcHRlcF9ta29sZCgpIGluIG1tL2RhbW9uL29wcy1jb21tb24uYyB0byBhbGlnbiB0aGUgdmlydHVhbCBhZGRyZXNzIHBhc3NlZCB0byBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCkgdXNpbmcgUEFHRV9BTElHTl9ET1dOKCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBsb2dpYyBpbiBEQU1PTiwgd2hpY2ggaXMgY29udHJvbGxhYmxlIHZpYSBzeXNmcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzIGFuZCBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgb2NjdXIgZHVyaW5nIHBhZ2UgdGFibGUgd2Fsa3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjM0OjA0LjU1OTAxNDU1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY3Mzg2MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWJlNzk0MzE4YTg2M2ZjYWYxMThkMGU5Mzg0OTE0ZDEwZDQxM2IzOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDA5OjM0OjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xcbmluZGV4IDdhMmU0MGJjN2JhZWQuLjcyMTljNjA4YjE5NTIgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuQEAgLTYxLDcgKzYxLDEyIEBAIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyXFxuIFxcdCAqIGRldmljZSBhc3BlY3RzLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSlcXG4tXFx0XFx0eW91bmcgfD0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFkZHIsIHB0ZSk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEFyY2ggaW1wbGVtZW50YXRpb24gb2YgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIG1heVxcbitcXHRcXHQgKiByZXF1aXJlIGFsaWduZWQgQGFkZHJcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHlvdW5nIHw9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBQQUdFX0FMSUdOX0RPV04oYWRkciksXFxuK1xcdFxcdFxcdFxcdHB0ZSk7XFxuIFxcdHlvdW5nIHw9IG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBhZGRyICsgUEFHRV9TSVpFKTtcXG4gXFx0aWYgKHlvdW5nKVxcbiBcXHRcXHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDowNC45MjcwMDEzNDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1NjY1MTk2MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHRlcF9ta29sZFwiLFxuICAgIFwiZGFtb25fZm9saW9fbWtvbGRfb25lXCIsXG4gICAgXCJkYW1vbl9mb2xpb19ta29sZFwiLFxuICAgIFwiZGFtb25fbWtvbGRfcG1kX2VudHJ5XCIsXG4gICAgXCJkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkYW1vbl9wdGVwX21rb2xkKCkgaW4gbW0vZGFtb24vb3BzLWNvbW1vbi5jIHRvIGFsaWduIHRoZSB2aXJ0dWFsIGFkZHJlc3MgcGFzc2VkIHRvIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKSB1c2luZyBQQUdFX0FMSUdOX0RPV04oKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIGxvZ2ljIGluIERBTU9OLCB3aGljaCBpcyBjb250cm9sbGFibGUgdmlhIHN5c2ZzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB2ZXJpZnkgY29ycmVjdG5lc3MgYW5kIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvY2N1ciBkdXJpbmcgcGFnZSB0YWJsZSB3YWxrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YmU3OTQzMThhODYzZmNhZjExOGQwZTkzODQ5MTRkMTBkNDEzYjM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwOTozNDowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggN2EyZTQwYmM3YmFlZC4uNzIxOWM2MDhiMTk1MiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtNjEsNyArNjEsMTIgQEAgdm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJcbiBcdCAqIGRldmljZSBhc3BlY3RzLlxuIFx0ICovXG4gXHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKVxuLVx0XHR5b3VuZyB8PSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkciwgcHRlKTtcbitcdFx0LypcbitcdFx0ICogQXJjaCBpbXBsZW1lbnRhdGlvbiBvZiBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCkgbWF5XG4rXHRcdCAqIHJlcXVpcmUgYWxpZ25lZCBAYWRkclxuK1x0XHQgKi9cbitcdFx0eW91bmcgfD0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIFBBR0VfQUxJR05fRE9XTihhZGRyKSxcbitcdFx0XHRcdHB0ZSk7XG4gXHR5b3VuZyB8PSBtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBhZGRyICsgUEFHRV9TSVpFKTtcbiBcdGlmICh5b3VuZylcbiBcdFx0Zm9saW9fc2V0X3lvdW5nKGZvbGlvKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjM0OjA0LjkyNzAwMjgzN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NzA5MjM5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoYXQgY29tbWl0LCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZSB3aXRoaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgYWx0ZXJpbmcgdGhlIGBkYW1vbl9wdGVwX21rb2xkYCBmdW5jdGlvbi4gUmlnaHQsIGhlcmUncyB3aGF0J3MgaGFwcGVuaW5nOiBpdCdzIGFkanVzdGluZyB0aGUgY2FsbCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZ2AuIFByZXZpb3VzbHksIGl0IHdhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjYWxsLCBidXQgbm93IHRoZXJlJ3MgdGhpcyBhZGRlZCBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCBiZWZvcmUgcGFzc2luZyBgYWRkcmAgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAuXG5cblRoZSBjb21tZW50IGlzIGtleTogXCJBcmNoIGltcGxlbWVudGF0aW9uIG9mIGBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKClgIG1heSByZXF1aXJlIGFsaWduZWQgYEBhZGRyYC5cIiBTbywgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIG9yIHBvdGVudGlhbCBhbGlnbm1lbnQgaXNzdWVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQuIEl0J3MgYWJvdXQgZW5zdXJpbmcgY29tcGF0aWJpbGl0eSBhbmQgYXZvaWRpbmcgYW55IHN1YnRsZSBidWdzIG9uIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcyB0aGF0IG1pZ2h0IGJlIHNlbnNpdGl2ZSB0byB1bmFsaWduZWQgYWRkcmVzc2VzIHdoZW4gY2hlY2tpbmcgYW5kIGNsZWFyaW5nIHRoZSBcInlvdW5nXCIgYml0IGluIHBhZ2UgdGFibGUgZW50cmllcy5cblxuVG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gZ28gYnJvYWRlci4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgYG1tL2RhbW9uL29wcy1jb21tb24uY2AgaW4gZGV0YWlsLCBhbG9uZyB3aXRoIG90aGVyIERBTU9OIGZpbGVzLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIGNhbGxlcnMgb2YgYGRhbW9uX3B0ZXBfbWtvbGRgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UsIGFuZCBob3cgd2lkZWx5IGl0IGltcGFjdHMgdGhlIGV4aXN0aW5nIERBTU9OIGltcGxlbWVudGF0aW9uLiBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgcmVsYXRlZCBgS2NvbmZpZ2Agb3B0aW9ucyB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgbWF5IGJlIGNvbnRyb2xsZWQgYnkgY2VydGFpbiBjb25maWd1cmF0aW9ucy5cblxuVGltZSB0byBmaXJlIHVwIGByZWFkLWZpbGVgIGFuZCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHRoZSB3aWRlciBwaWN0dXJlIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTYxLCJPdXRwdXRUb2tlbnMiOjU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MzQ6MTAuMzk3OTI5MTI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjE2MTcyMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcHRlcF9ta29sZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9vcHMtY29tbW9uLmM9MjQ9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDEtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjQyOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00My17XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTY0PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3MS1cXHRcXHRpZiAocHZtdy5wdGUpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3MjpcXHRcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzMtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTg9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMDp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTExLXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjU4PXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjc4LVxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL3ZhZGRyLmM6Mjc5OlxcdGRhbW9uX3B0ZXBfbWtvbGQocHRlLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMjgwLW91dDpcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NTEzPXN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTUyNy1cXHRpZiAoeW91bmcgXFx1MDAyNlxcdTAwMjYgcHRlcClcXG5tbS9kYW1vbi92YWRkci5jOjUyODpcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB0ZXAsIHZtYSwgYWRkcik7XFxubW0vZGFtb24vdmFkZHIuYy01MjktXFx0ZWxzZSBpZiAoeW91bmcgXFx1MDAyNlxcdTAwMjYgcG1kcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MzQ6MTIuMTU5NTUwMDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vb3BzLWNvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdH1cXG4gIDQxOlxcdFxcbiAgNDI6XFx0dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuICA0MzpcXHR7XFxuICA0NDpcXHRcXHRwdGVfdCBwdGV2YWwgPSBwdGVwX2dldChwdGUpO1xcbiAgNDU6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gIDQ2OlxcdFxcdGJvb2wgeW91bmcgPSBmYWxzZTtcXG4gIDQ3OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKVxcbiAgNTA6XFx0XFx0XFx0cGZuID0gcHRlX3BmbihwdGV2YWwpO1xcbiAgNTE6XFx0XFx0ZWxzZVxcbiAgNTI6XFx0XFx0XFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCkpO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhwZm4pO1xcbiAgNTU6XFx0XFx0aWYgKCFmb2xpbylcXG4gIDU2OlxcdFxcdFxcdHJldHVybjtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0LypcXG4gIDU5OlxcdFxcdCAqIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0IGFjdHVhbGx5IG1hcCBwYWdlc1xcbiAgNjA6XFx0XFx0ICogYXJlIFxcXCJvbGRcXFwiIGZyb20gYSBDUFUgcGVyc3BlY3RpdmUuIFRoZSBNTVUgbm90aWZpZXIgdGFrZXMgY2FyZSBvZiBhbnlcXG4gIDYxOlxcdFxcdCAqIGRldmljZSBhc3BlY3RzLlxcbiAgNjI6XFx0XFx0ICovXFxuICA2MzpcXHRcXHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKVxcbiAgNjQ6XFx0XFx0XFx0LypcXG4gIDY1OlxcdFxcdFxcdCAqIEFyY2ggaW1wbGVtZW50YXRpb24gb2YgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIG1heVxcbiAgNjY6XFx0XFx0XFx0ICogcmVxdWlyZSBhbGlnbmVkIEBhZGRyXFxuICA2NzpcXHRcXHRcXHQgKi9cXG4gIDY4OlxcdFxcdFxcdHlvdW5nIHw9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBQQUdFX0FMSUdOX0RPV04oYWRkciksXFxuICA2OTpcXHRcXHRcXHRcXHRcXHRwdGUpO1xcbiAgNzA6XFx0XFx0eW91bmcgfD0gbW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUpO1xcbiAgNzE6XFx0XFx0aWYgKHlvdW5nKVxcbiAgNzI6XFx0XFx0XFx0Zm9saW9fc2V0X3lvdW5nKGZvbGlvKTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xcbiAgNzU6XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gIDc2OlxcdH1cXG4gIDc3OlxcdFxcbiAgNzg6XFx0dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuICA3OTpcXHR7XFxuICA4MDpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuICA4MTpcXHRcXHRwbWRfdCBwbWR2YWwgPSBwbWRwX2dldChwbWQpO1xcbiAgODI6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gIDgzOlxcdFxcdGJvb2wgeW91bmcgPSBmYWxzZTtcXG4gIDg0OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRpZiAobGlrZWx5KHBtZF9wcmVzZW50KHBtZHZhbCkpKVxcbiAgODc6XFx0XFx0XFx0cGZuID0gcG1kX3BmbihwbWR2YWwpO1xcbiAgODg6XFx0XFx0ZWxzZVxcbiAgODk6XFx0XFx0XFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKHNvZnRsZWFmX2Zyb21fcG1kKHBtZHZhbCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDoxMi4xNTk2NTU2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTQ2NTM5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGlzOlxuXG4qKkNoZWNraW5nIEtjb25maWcgZm9yIERBTU9OIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gREFNT04uIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIGZpbmQgdGhvc2U/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGVzcGVjaWFsbHkgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW1gKSBhcmVhLiBMZXQncyBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IHdpdGhpbiB0aGUgYG1tL2RhbW9uYCBkaXJlY3RvcnkuIFRoZSBLY29uZmlnIGZpbGUgdGhlcmUgc2hvdWxkIGJlIHRoZSBwbGFjZSB0byBzdGFydC4gTGV0J3Mgb3BlbiBgbW0vZGFtb24vS2NvbmZpZ2AgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3B0aW9ucyBmb3IgZW5hYmxpbmcsIGRpc2FibGluZywgYW5kIGN1c3RvbWl6aW5nIERBTU9OLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDoxMy44NzQzMTE3NDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA0MTpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDQyOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNDU6XFx0XFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBEQU1PTl9QQUREUlxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA1MDpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDUxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNTQ6XFx0XFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNTk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDoxMy44NzQzODEyOTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzM0NzExMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgb3BzLWNvbW1vbi5vYCBpcyBiZWluZyBjb25zdHJ1Y3RlZC4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgaW4gdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBvYmplY3QgZmlsZSBjb21waWxhdGlvbiBkZXRhaWxzIHJlc2lkZS4gSSdsbCBuZWVkIHRvIGdvIGFuZCBleGFtaW5lIHRoYXQgYE1ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBzdGVwcyBhbmQgZGVwZW5kZW5jaWVzIGludm9sdmVkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzLCBzb3VyY2UgZmlsZXMsIGFuZCBsaW5raW5nIGluc3RydWN0aW9ucyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYG9wcy1jb21tb24ub2AuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MzQ6MTUuNjA5MDk0NDI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MzQ6MTUuNjA5MTUyMDQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMDYyNjg4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gV29ydGh5IG9mIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgc3BlY2lmaWNhbGx5IHdoZW4gZWl0aGVyIGBDT05GSUdfREFNT05fVkFERFJgIG9yIGBDT05GSUdfREFNT05fUEFERFJgIGlzIGVuYWJsZWQuIERBTU9OLCByaWdodCwgaXQncyBhIGNvcmUgTU0gc3Vic3lzdGVtLCBmdWxseSBjb25maWd1cmFibGUgdGhyb3VnaCBzeXNmcyBhbmQgdGhvc2UgREFNT04gbW9kdWxlcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGZ1enppbmcsIGxldCdzIHNlZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgc2V0dXBzIGxpa2UgUUVNVS9HQ0UuIFllcCwgREFNT04ncyBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMsIGFuZCBkZWJ1Z2ZzIGlmIGl0IGlzIGVuYWJsZWQuIFN5emthbGxlciwgaW4gcGFydGljdWxhciwgaGl0cyB0aGVzZSBpbnRlcmZhY2VzLlxuXG5UaGlzIHBhdGNoIGlzIGFsdGVyaW5nIHRoZSBgZGFtb25fcHRlcF9ta29sZGAgZnVuY3Rpb24sIGRpcmVjdGx5IG1vZGlmeWluZyBleGVjdXRhYmxlIEMgY29kZSBpbiBgbW0vYC4gSXQncyB0d2Vha2luZyBob3cgYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmdgIGlzIGNhbGxlZCwgYnkgYWxpZ25pbmcgdGhlIGBhZGRyYCBhcmd1bWVudCB0byB0aGUgcGFnZSBib3VuZGFyeS5cblxuTm93LCBsZXQncyBjaGVjayB0aGUgZnV6emluZyBjcml0ZXJpYS4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOiBDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlwiXG5cbkJpbmdvLiBUaGlzIGNsZWFybHkgbW9kaWZpZXMgYG1tL2RhbW9uL29wcy1jb21tb24uY2AuICoqV29ydGhGdXp6aW5nIGlzIHRydWUuKiogSSBkb24ndCBzZWUgYW55IGNhdmVhdHMgdGhlcmUuIEl0J3MgaW4gYSBjb3JlIHN1YnN5c3RlbS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhvc2UgRm9jdXNTeW1ib2xzLiBXaGljaCBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGltcGFjdGVkIG9yIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlPyBPYnZpb3VzbHksIGBkYW1vbl9wdGVwX21rb2xkYCBpcyB0aGUgbWFpbiB0YXJnZXQuIEl0cyBjYWxsZXJzIGFuZCByZWxhdGVkIG9wZXJhdGlvbnMgYXJlOiBgZGFtb25fZm9saW9fbWtvbGRfb25lYCwgYGRhbW9uX21rb2xkX3BtZF9lbnRyeWAsIGBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2hgLCBhbmQgYGRhbW9uX3BhX21rb2xkYCBvciB0aGUgZXF1aXZhbGVudCBmb3IgcGh5c2ljYWwgYWRkcmVzc2VzLlxuXG5UaW1lIHRvIGRvIGEgdGhvcm91Z2ggY2hlY2sgb2YgYWxsIGNhbGxlcnMgb2YgYGRhbW9uX3B0ZXBfbWtvbGRgIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDoxOS43MTU0MjI0ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDAyMDk0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcHRlcF9ta29sZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9vcHMtY29tbW9uLmM9MjQ9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDEtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjQyOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00My17XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTY0PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3MS1cXHRcXHRpZiAocHZtdy5wdGUpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3MjpcXHRcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzMtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTg9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMDp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTExLXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjU4PXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjc4LVxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL3ZhZGRyLmM6Mjc5OlxcdGRhbW9uX3B0ZXBfbWtvbGQocHRlLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMjgwLW91dDpcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NTEzPXN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTUyNy1cXHRpZiAoeW91bmcgXFx1MDAyNlxcdTAwMjYgcHRlcClcXG5tbS9kYW1vbi92YWRkci5jOjUyODpcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB0ZXAsIHZtYSwgYWRkcik7XFxubW0vZGFtb24vdmFkZHIuYy01MjktXFx0ZWxzZSBpZiAoeW91bmcgXFx1MDAyNlxcdTAwMjYgcG1kcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MzQ6MjEuMzU1NjM3NTIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODY5NzM1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgRGVwZW5kZW5jeSBDaGFpbjogYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGBkYW1vbl9mb2xpb19ta29sZF9vbmVgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSB0cmFjZSBpdHMgY2FsbCBncmFwaC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBJcyBpdCB1c2VkIGRpcmVjdGx5IHdpdGhpbiBhIGNyaXRpY2FsIHBhdGgsIG9yIGlzIGl0IHNldmVyYWwgbGF5ZXJzIGRlZXAgaW4gYSB1dGlsaXR5IG1vZHVsZT8gQXJlIHRoZXJlIG11bHRpcGxlIGNhbGwgc2l0ZXMsIGFuZCBpZiBzbywgYXJlIHRoZXkgdXNlZCB1bmRlciBzaW1pbGFyIGNvbmRpdGlvbnM/IFRoZSBjYWxsaW5nIGNvbnRleHQgaXMgcGFyYW1vdW50LCBJIG5lZWQgdG8ga25vdyB3aHkgYW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZXZlbiBiZWluZyBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGltbWVkaWF0ZWx5IHJldmVhbCB0aGUgcG90ZW50aWFsIHJpc2suIEJhc2VkIG9uIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkIEknbGwgYmUgYWJsZSB0byBkZWNpZGUgdGhlIGJlc3QgcGF0aCB0byBhZGRyZXNzIGFueSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNDEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDoyNS4yNDI2MTQwNjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTE2NjgyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fZm9saW9fbWtvbGRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vb3BzLWNvbW1vbi5jPTE1NT1pbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE2My1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTY0OnN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjUtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3OC1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTc5OnZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgwLXtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgxLVxcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE4MjpcXHRcXHQucm1hcF9vbmUgPSBkYW1vbl9mb2xpb19ta29sZF9vbmUsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE4My1cXHRcXHQuYW5vbl9sb2NrID0gZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI2Nj1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjkwLVxcdFxcdGlmIChtYXRjaGVkKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyOTE6XFx0XFx0XFx0ZGFtb25fZm9saW9fbWtvbGQoZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yOTItXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9MTE9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMjp2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xMy1ib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0zOD1zdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDQtXFxubW0vZGFtb24vcGFkZHIuYzo0NTpcXHRkYW1vbl9mb2xpb19ta29sZChmb2xpbyk7XFxubW0vZGFtb24vcGFkZHIuYy00Ni1cXHRmb2xpb19wdXQoZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDoyNi42OTQyODkxMDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgxMzg1MjY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gaWRlbnRpZnlpbmcgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIERBTU9OIHN1YnN5c3RlbS4gSSBzZWUgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb24gbmFtZXMgZmxhZ2dlZDogYGRhbW9uX3B0ZXBfbWtvbGRgLCBgZGFtb25fZm9saW9fbWtvbGRfb25lYCwgYGRhbW9uX2ZvbGlvX21rb2xkYCwgYGRhbW9uX21rb2xkX3BtZF9lbnRyeWAsIGFuZCBgZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gZm9yIHRoaXMgcGFydGljdWxhciBhbmFseXNpcy5cblxuTmV4dCwgSSdtIGNoZWNraW5nIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIERBTU9OIGFuZCB0aGUgY29yZSBjb2RlIHdpdGhpbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYC4gSSd2ZSBjb25maXJtZWQgdGhhdCBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1NZU0ZTYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIEknbSBjb25maXJtaW5nIGEga25vd24gcXVhbnRpdHk7IGBQQUdFX0FMSUdOX0RPV05gIGlzIHN0YW5kYXJkLiBJJ3ZlIG5vdGVkIHRoYXQgaXQncyBiZWluZyB1c2VkIHdpdGhpbiBgZGFtb25fcHRlcF9ta29sZGAgaW4gY29uanVuY3Rpb24gd2l0aCBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZ2AsIHdoaWNoIGlzIGV4cGVjdGVkIGJlaGF2aW9yLlxuXG5JJ20gZG9pbmcgYSBkb3VibGUtY2hlY2sgb24gdGhvc2UgY29uZmlndXJhdGlvbnMgYWdhaW4sIHN0cmlwcGluZyB0aGUgXCJDT05GSUdfXCIgcHJlZml4IHRvIGdldCB0aGUgYmFyZSBrZXJuZWwgY29uZmlnIG5hbWVzOiBcIkRBTU9OXCIsIFwiREFNT05fVkFERFJcIiwgXCJEQU1PTl9QQUREUlwiLCBhbmQgXCJEQU1PTl9TWVNGU1wiLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNvbnNpc3RlbmN5IHdoZW4gSSBzZXQgdGhlIHJlc3VsdHMuXG5cbkZpbmFsbHksIEknbSByZXZpZXdpbmcgdGhlIHJlcXVpcmVkIGZvcm1hdCBmb3IgXCJzZXQtcmVzdWx0cy5cIiBJIG5lZWQgdG8gcHJlc2VudCB0aGlzIGluZm9ybWF0aW9uIGNvbmNpc2VseSwgaW5jbHVkaW5nIHRoZSBFbmFibGVDb25maWdzIGFzIGEgbGlzdCBvZiBzdHJpbmdzIChubyBDT05GSUdfIHByZWZpeCksIHRoZSBGb2N1c1N5bWJvbHMsIGEgYnJpZWYgZXhwbGFuYXRpb24gb2YgbXkgcmVhc29uaW5nLCBhbmQgYSBib29sZWFuIGZvciBgV29ydGhGdXp6aW5nYC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NTUsIk91dHB1dFRva2VucyI6MjA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjM0OjMwLjUwODE0NTE0NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MDQ5NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3B0ZXBfbWtvbGRcIixcbiAgICBcImRhbW9uX2ZvbGlvX21rb2xkX29uZVwiLFxuICAgIFwiZGFtb25fZm9saW9fbWtvbGRcIixcbiAgICBcImRhbW9uX21rb2xkX3BtZF9lbnRyeVwiLFxuICAgIFwiZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGFtb25fcHRlcF9ta29sZCgpIGluIG1tL2RhbW9uL29wcy1jb21tb24uYyB0byBhbGlnbiB0aGUgdmlydHVhbCBhZGRyZXNzIHBhc3NlZCB0byBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCkgdXNpbmcgUEFHRV9BTElHTl9ET1dOKCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBsb2dpYyBpbiBEQU1PTiwgd2hpY2ggaXMgY29udHJvbGxhYmxlIHZpYSBzeXNmcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzIGFuZCBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgb2NjdXIgZHVyaW5nIHBhZ2UgdGFibGUgd2Fsa3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9wdGVwX21rb2xkXCIsXG4gICAgXCJkYW1vbl9mb2xpb19ta29sZF9vbmVcIixcbiAgICBcImRhbW9uX2ZvbGlvX21rb2xkXCIsXG4gICAgXCJkYW1vbl9ta29sZF9wbWRfZW50cnlcIixcbiAgICBcImRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRhbW9uX3B0ZXBfbWtvbGQoKSBpbiBtbS9kYW1vbi9vcHMtY29tbW9uLmMgdG8gYWxpZ24gdGhlIHZpcnR1YWwgYWRkcmVzcyBwYXNzZWQgdG8gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIHVzaW5nIFBBR0VfQUxJR05fRE9XTigpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IG1vbml0b3JpbmcgbG9naWMgaW4gREFNT04sIHdoaWNoIGlzIGNvbnRyb2xsYWJsZSB2aWEgc3lzZnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGR1cmluZyBwYWdlIHRhYmxlIHdhbGtzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDozMC41OTIyMDE0MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMjA1MTQ5OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDozMC41OTI2MTc2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5MDIwMDk0ODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBkYW1vbl9wdGVwX21rb2xkKClgIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIHRvIHBhc3MgYFBBR0VfQUxJR05fRE9XTihhZGRyKWAgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAgaW5zdGVhZCBvZiB0aGUgcmF3IGBhZGRyYCwgZW5zdXJpbmcgYXJjaGl0ZWN0dXJhbCBjb21wYXRpYmlsaXR5IHdoZXJlIHBhZ2UtYWxpZ25lZCBhZGRyZXNzZXMgYXJlIGV4cGVjdGVkLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBpbnRyb2R1Y2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWJlNzk0MzE4YTg2M2ZjYWYxMThkMGU5Mzg0OTE0ZDEwZDQxM2IzOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDk6MzQ6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbmluZGV4IDdhMmU0MGJjN2JhZWQuLjcyMTljNjA4YjE5NTIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuQEAgLTYxLDcgKzYxLDEyIEBAIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyXG4gXHQgKiBkZXZpY2UgYXNwZWN0cy5cbiBcdCAqL1xuIFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSlcbi1cdFx0eW91bmcgfD0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFkZHIsIHB0ZSk7XG4rXHRcdC8qXG4rXHRcdCAqIEFyY2ggaW1wbGVtZW50YXRpb24gb2YgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIG1heVxuK1x0XHQgKiByZXF1aXJlIGFsaWduZWQgQGFkZHJcbitcdFx0ICovXG4rXHRcdHlvdW5nIHw9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBQQUdFX0FMSUdOX0RPV04oYWRkciksXG4rXHRcdFx0XHRwdGUpO1xuIFx0eW91bmcgfD0gbW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgYWRkciArIFBBR0VfU0laRSk7XG4gXHRpZiAoeW91bmcpXG4gXHRcdGZvbGlvX3NldF95b3VuZyhmb2xpbyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDozMC41OTI2MTg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExODI1ODExMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBmb3IgYG1tL2RhbW9uL29wcy1jb21tb24uY2AqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIGEgcmVxdWVzdCBjYW1lIGluIHJlZ2FyZGluZyBhIHBhdGNoIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIGFuZCB3aGV0aGVyIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyByZXF1ZXN0IGlzIHNhZmUuIExldCdzIGNsYXNzaWZ5IGl0OiBpdCdzIGEgZGVmZW5zaXZlIHNlY3VyaXR5IGFzc2Vzc21lbnQgYW5kIGtlcm5lbCBzYW5pdGl6ZXIgZXZhbHVhdGlvbi4gTm8gbWFsaWNpb3VzIGludGVudCwgbm8gZXhwbG9pdCBnZW5lcmF0aW9uLCBub3RoaW5nIG9mZmVuc2l2ZS4gU2VlbXMgcGVyZmVjdGx5IGZpbmUgdG8gcHJvY2VlZC5cblxuTm93LCB0byB0aGUgcGF0Y2ggaXRzZWxmLiBJJ20gc2VlaW5nIGEgZGlmZjogSXQncyBtb2RpZnlpbmcgaG93IHRoZSBgeW91bmdgIGJpdCBpcyBoYW5kbGVkIGluIHRoZSBwYWdlIHRhYmxlIGVudHJ5LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkYW1vbl9wdGVwX21rb2xkYC4gVGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBgUEFHRV9BTElHTl9ET1dOYCB0byB0aGUgYWRkcmVzcyBwYXNzZWQgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAuIFRoZSBjb21tZW50IHN1Z2dlc3RzIHRoYXQgc29tZSBhcmNoaXRlY3R1cmVzIG1pZ2h0IHJlcXVpcmUgdGhlIGFkZHJlc3MgdG8gYmUgYWxpZ25lZC4gVGhpcyBpcyBjcnVjaWFsOiBhbiB1bmFsaWduZWQgYWNjZXNzIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24sIHNvIHRoZXJlJ3MgYSByZWFzb24gZm9yIGNvbmNlcm4uIFxuXG5UbyBnYWluIGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nLCBJJ2xsIG5vdyB0YWtlIGEgbG9vayBhdCBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCB0byBzZWUgaG93IGBkYW1vbl9wdGVwX21rb2xkYCBmaXRzIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIERBTU9OLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlIGNoYW5nZS4gVGhpcyBjaGFuZ2UsIHdoaWxlIHNlZW1pbmdseSBzbWFsbCwgdG91Y2hlcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24uIElmIHRoZXJlIGlzIGEgYnVnLCBpdCBjb3VsZCBsZWFkIHRvIHNpZ25pZmljYW50IHByb2JsZW1zLiBJIHdpbGwgaW52ZXN0aWdhdGUgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjM0OjQyLjQxODQzMjI4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9vcHMtY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0fVxcbiAgNDE6XFx0XFxuICA0MjpcXHR2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gIDQzOlxcdHtcXG4gIDQ0OlxcdFxcdHB0ZV90IHB0ZXZhbCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuICA0NTpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiAgNDY6XFx0XFx0Ym9vbCB5b3VuZyA9IGZhbHNlO1xcbiAgNDc6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuICA0ODpcXHRcXG4gIDQ5OlxcdFxcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpXFxuICA1MDpcXHRcXHRcXHRwZm4gPSBwdGVfcGZuKHB0ZXZhbCk7XFxuICA1MTpcXHRcXHRlbHNlXFxuICA1MjpcXHRcXHRcXHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oc29mdGxlYWZfZnJvbV9wdGUocHRldmFsKSk7XFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKHBmbik7XFxuICA1NTpcXHRcXHRpZiAoIWZvbGlvKVxcbiAgNTY6XFx0XFx0XFx0cmV0dXJuO1xcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHQvKlxcbiAgNTk6XFx0XFx0ICogUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXQgYWN0dWFsbHkgbWFwIHBhZ2VzXFxuICA2MDpcXHRcXHQgKiBhcmUgXFxcIm9sZFxcXCIgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlIG9mIGFueVxcbiAgNjE6XFx0XFx0ICogZGV2aWNlIGFzcGVjdHMuXFxuICA2MjpcXHRcXHQgKi9cXG4gIDYzOlxcdFxcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpXFxuICA2NDpcXHRcXHRcXHQvKlxcbiAgNjU6XFx0XFx0XFx0ICogQXJjaCBpbXBsZW1lbnRhdGlvbiBvZiBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCkgbWF5XFxuICA2NjpcXHRcXHRcXHQgKiByZXF1aXJlIGFsaWduZWQgQGFkZHJcXG4gIDY3OlxcdFxcdFxcdCAqL1xcbiAgNjg6XFx0XFx0XFx0eW91bmcgfD0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIFBBR0VfQUxJR05fRE9XTihhZGRyKSxcXG4gIDY5OlxcdFxcdFxcdFxcdFxcdHB0ZSk7XFxuICA3MDpcXHRcXHR5b3VuZyB8PSBtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgYWRkciArIFBBR0VfU0laRSk7XFxuICA3MTpcXHRcXHRpZiAoeW91bmcpXFxuICA3MjpcXHRcXHRcXHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XFxuICA3NTpcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiAgNzY6XFx0fVxcbiAgNzc6XFx0XFxuICA3ODpcXHR2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gIDc5OlxcdHtcXG4gIDgwOlxcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gIDgxOlxcdFxcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7XFxuICA4MjpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiAgODM6XFx0XFx0Ym9vbCB5b3VuZyA9IGZhbHNlO1xcbiAgODQ6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdGlmIChsaWtlbHkocG1kX3ByZXNlbnQocG1kdmFsKSkpXFxuICA4NzpcXHRcXHRcXHRwZm4gPSBwbWRfcGZuKHBtZHZhbCk7XFxuICA4ODpcXHRcXHRlbHNlXFxuICA4OTpcXHRcXHRcXHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oc29mdGxlYWZfZnJvbV9wbWQocG1kdmFsKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjM0OjQyLjQxODUwOTk3OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzg5MTA0MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgQ2FsbGVyJ3MgTGluZWFnZTogYGRhbW9uX3B0ZXBfbWtvbGRgKipcblxuQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2sgZG93biB3aG8ncyBjYWxsaW5nIGBkYW1vbl9wdGVwX21rb2xkYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBmZWVscyBpbXBvcnRhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGxpa2VseSAqZG9lcyog4oCTIHB0ZXAgaW1wbGllcyBwYWdlIHRhYmxlIGVudHJ5IG1hbmlwdWxhdGlvbiwgYW5kIHRoZSBcIm1rb2xkXCIgc3Ryb25nbHkgc3VnZ2VzdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggbWFya2luZyBvciBoYW5kbGluZyBvbGRlciBQVEUgZW50cmllcywgcG9zc2libHkgZm9yIGFnaW5nIG9yIGV2aWN0aW9uIHN0cmF0ZWdpZXMuIEJ1dCBJIGNhbid0IGp1bXAgdG8gY29uY2x1c2lvbnMuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gVGhhdCBnaXZlcyBtZSB0aGUgaW1tZWRpYXRlIGFuZCBuZWNlc3NhcnkgY29udGV4dC4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgZGVwZW5kZW50IG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjczLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDo0NC4yMDc2MTc3NjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODIyNjA5NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcHRlcF9ta29sZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9vcHMtY29tbW9uLmM9MjQ9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDEtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjQyOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00My17XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTY0PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3MS1cXHRcXHRpZiAocHZtdy5wdGUpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3MjpcXHRcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzMtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTg9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMDp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTExLXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjU4PXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjc4LVxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL3ZhZGRyLmM6Mjc5OlxcdGRhbW9uX3B0ZXBfbWtvbGQocHRlLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMjgwLW91dDpcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NTEzPXN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTUyNy1cXHRpZiAoeW91bmcgXFx1MDAyNlxcdTAwMjYgcHRlcClcXG5tbS9kYW1vbi92YWRkci5jOjUyODpcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB0ZXAsIHZtYSwgYWRkcik7XFxubW0vZGFtb24vdmFkZHIuYy01MjktXFx0ZWxzZSBpZiAoeW91bmcgXFx1MDAyNlxcdTAwMjYgcG1kcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MzQ6NDUuNjg5ODg0Mjg3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MjI4MDgxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHRoZSBgZGFtb25fcHRlcF9ta29sZCgpYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyB0aGUgY2FsbCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYC4gVGhlIGNoYW5nZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIG5vdyBwYXNzaW5nIGBQQUdFX0FMSUdOX0RPV04oYWRkcilgIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGBhZGRyYCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYC4gVGhlIGp1c3RpZmljYXRpb24sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCBjZXJ0YWluIGFyY2hpdGVjdHVyZXMgbWlnaHQgKnJlcXVpcmUqIHRoaXMgcGFnZSBhbGlnbm1lbnQgZm9yIGBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKClgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gTWFrZXMgc2Vuc2UuIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBxdWlya3MgYXJlIGFsd2F5cyBmdW4uXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDogRG9lcyB0aGlzIGhhdmUgYW55IG9mIHRoZSBjb21tb24gcGl0ZmFsbHM/XG5cbjEuICBEb2VzIHRoaXMgdG91Y2ggb3IgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8gTm8sIG5vdCBhdCBhbGwuXG4yLiAgQW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwb2ludGVycywgb3IgYnVmZmVycyBpbnRyb2R1Y2VkPyBOb3BlLCBub3RoaW5nIGxpa2UgdGhhdC5cbjMuICBBcmUgdGhlcmUgYW55IGNoYW5nZXMgdG8gYnJhbmNoIGNvbmRpdGlvbnMgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uXG40LiAgSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGFsbG9jYXRlZCBvciBhbHRlcmVkIGluIGl0cyBpbml0aWFsaXphdGlvbj8gTmVnYXRpdmUuXG41LiAgRG9lcyB0aGlzIGNyZWF0ZSBhbnkgcmlzayBvZiByZWFkaW5nIG9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZT8gTm8sIGRlZmluaXRlbHkgbm90LlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIHdoaWNoIGFwcGVhcnMgdG8gYmUgcHVyZWx5IGFuIGFsaWdubWVudCBhZGp1c3RtZW50IHRvIGFuIGV4aXN0aW5nIHBhcmFtZXRlciwgSSBuZWVkIHRvIGNvbnNpZGVyIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikuIEtNU0FOIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYW5kIGluZm9ybWF0aW9uIGxlYWtzLiBIb3dldmVyLCB0aGlzIHBhdGNoIGlzIGxpdGVyYWxseSBqdXN0IGFuIGFsaWdubWVudCBjaGFuZ2UuIFdlJ3JlIG5vdCByZWFkaW5nLCB3cml0aW5nLCBhbGxvY2F0aW5nLCBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBnb2luZyB0byBoYW5kbGUgdGhlIGdlbmVyYWwgbWVtb3J5IHNhZmV0eSBjb25jZXJucywgYnV0IGhlcmUgdGhlcmUncyBub3QgZXZlbiBhIGhpbnQgb2YgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJ20gY29uZmlkZW50IGluIHRoYXQgYXNzZXNzbWVudC4gQWxyaWdodCwgdGltZSB0byBkb3VibGUtY2hlY2sgZXZlcnl0aGluZyBvbmUgbGFzdCB0aW1lLiBBbGwgYXNwZWN0cyBjb3ZlcmVkLCBzbyBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MDIsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjM0OjQ5LjYxMjY5NDk2M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgZGFtb25fcHRlcF9ta29sZCgpYCBpbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCB0byBwYXNzIGBQQUdFX0FMSUdOX0RPV04oYWRkcilgIHRvIGBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKClgIGluc3RlYWQgb2YgdGhlIHJhdyBgYWRkcmAsIGVuc3VyaW5nIGFyY2hpdGVjdHVyYWwgY29tcGF0aWJpbGl0eSB3aGVyZSBwYWdlLWFsaWduZWQgYWRkcmVzc2VzIGFyZSBleHBlY3RlZC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgaW50cm9kdWNlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBvciBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGRldGVjdGlvbi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGRhbW9uX3B0ZXBfbWtvbGQoKWAgaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AgdG8gcGFzcyBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYCBpbnN0ZWFkIG9mIHRoZSByYXcgYGFkZHJgLCBlbnN1cmluZyBhcmNoaXRlY3R1cmFsIGNvbXBhdGliaWxpdHkgd2hlcmUgcGFnZS1hbGlnbmVkIGFkZHJlc3NlcyBhcmUgZXhwZWN0ZWQuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGludHJvZHVjZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBkZXRlY3Rpb24uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsjzdx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 08:53:08 +0000 UTC FinishedAt: 2026-09-05 09:34:51 +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": "e81d06906b1675bcfdf559fada6725466c7efcc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "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": "e81d06906b1675bcfdf559fada6725466c7efcc5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "series_id": "271e24aa-bca2-47d4-be7b-4a6c82c69d3a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_ptep_mkold", "damon_folio_mkold_one", "damon_folio_mkold", "damon_mkold_pmd_entry", "damos_va_filter_young_match" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHRlcF9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb19ta29sZF9vbmUmIzM0OywKICAgICYjMzQ7ZGFtb25fZm9saW9fbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25fbWtvbGRfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGRhbW9uX3B0ZXBfbWtvbGQoKWAgaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AgdG8gcGFzcyBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYCBpbnN0ZWFkIG9mIHRoZSByYXcgYGFkZHJgLCBlbnN1cmluZyBhcmNoaXRlY3R1cmFsIGNvbXBhdGliaWxpdHkgd2hlcmUgcGFnZS1hbGlnbmVkIGFkZHJlc3NlcyBhcmUgZXhwZWN0ZWQuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBpbnRyb2R1Y2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRhbW9uX3B0ZXBfbWtvbGQoKSBpbiBtbS9kYW1vbi9vcHMtY29tbW9uLmMgdG8gYWxpZ24gdGhlIHZpcnR1YWwgYWRkcmVzcyBwYXNzZWQgdG8gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIHVzaW5nIFBBR0VfQUxJR05fRE9XTigpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IG1vbml0b3JpbmcgbG9naWMgaW4gREFNT04sIHdoaWNoIGlzIGNvbnRyb2xsYWJsZSB2aWEgc3lzZnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGR1cmluZyBwYWdlIHRhYmxlIHdhbGtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWJlNzk0MzE4YTg2M2ZjYWYxMThkMGU5Mzg0OTE0ZDEwZDQxM2IzOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDk6MzQ6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5pbmRleCA3YTJlNDBiYzdiYWVkLi43MjE5YzYwOGIxOTUyIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbkBAIC02MSw3ICYjNDM7NjEsMTIgQEAgdm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJcbiBcdCAqIGRldmljZSBhc3BlY3RzLlxuIFx0ICovXG4gXHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKVxuLVx0XHR5b3VuZyB8PSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkciwgcHRlKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBcmNoIGltcGxlbWVudGF0aW9uIG9mIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKSBtYXlcbiYjNDM7XHRcdCAqIHJlcXVpcmUgYWxpZ25lZCBAYWRkclxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR5b3VuZyB8PSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgUEFHRV9BTElHTl9ET1dOKGFkZHIpLFxuJiM0MztcdFx0XHRcdHB0ZSk7XG4gXHR5b3VuZyB8PSBtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSk7XG4gXHRpZiAoeW91bmcpXG4gXHRcdGZvbGlvX3NldF95b3VuZyhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9wdGVwX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX2ZvbGlvX21rb2xkX29uZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb19ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9ta29sZF9wbWRfZW50cnkmIzM0OywKICAgICYjMzQ7ZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRhbW9uX3B0ZXBfbWtvbGQoKSBpbiBtbS9kYW1vbi9vcHMtY29tbW9uLmMgdG8gYWxpZ24gdGhlIHZpcnR1YWwgYWRkcmVzcyBwYXNzZWQgdG8gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIHVzaW5nIFBBR0VfQUxJR05fRE9XTigpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IG1vbml0b3JpbmcgbG9naWMgaW4gREFNT04sIHdoaWNoIGlzIGNvbnRyb2xsYWJsZSB2aWEgc3lzZnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGR1cmluZyBwYWdlIHRhYmxlIHdhbGtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWJlNzk0MzE4YTg2M2ZjYWYxMThkMGU5Mzg0OTE0ZDEwZDQxM2IzOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDk6MzQ6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKaW5kZXggN2EyZTQwYmM3YmFlZC4uNzIxOWM2MDhiMTk1MiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL29wcy1jb21tb24uYwpAQCAtNjEsNyAmIzQzOzYxLDEyIEBAIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyCiAJICogZGV2aWNlIGFzcGVjdHMuCiAJICovCiAJaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkKLQkJeW91bmcgfD0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFkZHIsIHB0ZSk7CiYjNDM7CQkvKgomIzQzOwkJICogQXJjaCBpbXBsZW1lbnRhdGlvbiBvZiBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCkgbWF5CiYjNDM7CQkgKiByZXF1aXJlIGFsaWduZWQgQGFkZHIKJiM0MzsJCSAqLwomIzQzOwkJeW91bmcgfD0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIFBBR0VfQUxJR05fRE9XTihhZGRyKSwKJiM0MzsJCQkJcHRlKTsKIAl5b3VuZyB8PSBtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcodm1hLSZndDt2bV9tbSwgYWRkciwgYWRkciAmIzQzOyBQQUdFX1NJWkUpOwogCWlmICh5b3VuZykKIAkJZm9saW9fc2V0X3lvdW5nKGZvbGlvKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2MQoJCQkJCQkJb3V0cHV0OiA1OQoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGF0IGNvbW1pdCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2Ugd2l0aGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhbHRlcmluZyB0aGUgYGRhbW9uX3B0ZXBfbWtvbGRgIGZ1bmN0aW9uLiBSaWdodCwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZzogaXQmIzM5O3MgYWRqdXN0aW5nIHRoZSBjYWxsIHRvIGBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nYC4gUHJldmlvdXNseSwgaXQgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGNhbGwsIGJ1dCBub3cgdGhlcmUmIzM5O3MgdGhpcyBhZGRlZCBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCBiZWZvcmUgcGFzc2luZyBgYWRkcmAgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAuCgpUaGUgY29tbWVudCBpcyBrZXk6ICYjMzQ7QXJjaCBpbXBsZW1lbnRhdGlvbiBvZiBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYCBtYXkgcmVxdWlyZSBhbGlnbmVkIGBAYWRkcmAuJiMzNDsgU28sIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJlcXVpcmVtZW50cyBvciBwb3RlbnRpYWwgYWxpZ25tZW50IGlzc3VlcyB0aGF0IGhhdmUgYmVlbiBpZGVudGlmaWVkLiBJdCYjMzk7cyBhYm91dCBlbnN1cmluZyBjb21wYXRpYmlsaXR5IGFuZCBhdm9pZGluZyBhbnkgc3VidGxlIGJ1Z3Mgb24gY2VydGFpbiBhcmNoaXRlY3R1cmVzIHRoYXQgbWlnaHQgYmUgc2Vuc2l0aXZlIHRvIHVuYWxpZ25lZCBhZGRyZXNzZXMgd2hlbiBjaGVja2luZyBhbmQgY2xlYXJpbmcgdGhlICYjMzQ7eW91bmcmIzM0OyBiaXQgaW4gcGFnZSB0YWJsZSBlbnRyaWVzLgoKVG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gZ28gYnJvYWRlci4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIGluIGRldGFpbCwgYWxvbmcgd2l0aCBvdGhlciBEQU1PTiBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgY2FsbGVycyBvZiBgZGFtb25fcHRlcF9ta29sZGAgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSwgYW5kIGhvdyB3aWRlbHkgaXQgaW1wYWN0cyB0aGUgZXhpc3RpbmcgREFNT04gaW1wbGVtZW50YXRpb24uIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciByZWxhdGVkIGBLY29uZmlnYCBvcHRpb25zIHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBtYXkgYmUgY29udHJvbGxlZCBieSBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zLgoKVGltZSB0byBmaXJlIHVwIGByZWFkLWZpbGVgIGFuZCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHRoZSB3aWRlciBwaWN0dXJlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3B0ZXBfbWtvbGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vb3BzLWNvbW1vbi5jPTI0PXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy00MS1cbm1tL2RhbW9uL29wcy1jb21tb24uYzo0Mjp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbm1tL2RhbW9uL29wcy1jb21tb24uYy00My17XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE2ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTcxLVx0XHRpZiAocHZtdy5wdGUpXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTcyOlx0XHRcdGRhbW9uX3B0ZXBfbWtvbGQocHZtdy5wdGUsIHZtYSwgYWRkcik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTczLVx0XHRlbHNlXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTg9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oLTktXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTA6dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5oLTExLXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTI1OD1zdGF0aWMgaW50IGRhbW9uX21rb2xkX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy0yNzgtXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vdmFkZHIuYzoyNzk6XHRkYW1vbl9wdGVwX21rb2xkKHB0ZSwgd2Fsay1cdTAwM2V2bWEsIGFkZHIpO1xubW0vZGFtb24vdmFkZHIuYy0yODAtb3V0OlxuLS1cbm1tL2RhbW9uL3ZhZGRyLmM9NTEzPXN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXG4tLVxubW0vZGFtb24vdmFkZHIuYy01MjctXHRpZiAoeW91bmcgXHUwMDI2XHUwMDI2IHB0ZXApXG5tbS9kYW1vbi92YWRkci5jOjUyODpcdFx0ZGFtb25fcHRlcF9ta29sZChwdGVwLCB2bWEsIGFkZHIpO1xubW0vZGFtb24vdmFkZHIuYy01MjktXHRlbHNlIGlmICh5b3VuZyBcdTAwMjZcdTAwMjYgcG1kcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL29wcy1jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gIDQzOlx0e1xuICA0NDpcdFx0cHRlX3QgcHRldmFsID0gcHRlcF9nZXQocHRlKTtcbiAgNDU6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gIDQ2Olx0XHRib29sIHlvdW5nID0gZmFsc2U7XG4gIDQ3Olx0XHR1bnNpZ25lZCBsb25nIHBmbjtcbiAgNDg6XHRcbiAgNDk6XHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpXG4gIDUwOlx0XHRcdHBmbiA9IHB0ZV9wZm4ocHRldmFsKTtcbiAgNTE6XHRcdGVsc2VcbiAgNTI6XHRcdFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCkpO1xuICA1MzpcdFxuICA1NDpcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8ocGZuKTtcbiAgNTU6XHRcdGlmICghZm9saW8pXG4gIDU2Olx0XHRcdHJldHVybjtcbiAgNTc6XHRcbiAgNTg6XHRcdC8qXG4gIDU5Olx0XHQgKiBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdCBhY3R1YWxseSBtYXAgcGFnZXNcbiAgNjA6XHRcdCAqIGFyZSBcJiMzNDtvbGRcJiMzNDsgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlIG9mIGFueVxuICA2MTpcdFx0ICogZGV2aWNlIGFzcGVjdHMuXG4gIDYyOlx0XHQgKi9cbiAgNjM6XHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpXG4gIDY0Olx0XHRcdC8qXG4gIDY1Olx0XHRcdCAqIEFyY2ggaW1wbGVtZW50YXRpb24gb2YgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIG1heVxuICA2NjpcdFx0XHQgKiByZXF1aXJlIGFsaWduZWQgQGFkZHJcbiAgNjc6XHRcdFx0ICovXG4gIDY4Olx0XHRcdHlvdW5nIHw9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBQQUdFX0FMSUdOX0RPV04oYWRkciksXG4gIDY5Olx0XHRcdFx0XHRwdGUpO1xuICA3MDpcdFx0eW91bmcgfD0gbW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgYWRkciAmIzQzOyBQQUdFX1NJWkUpO1xuICA3MTpcdFx0aWYgKHlvdW5nKVxuICA3MjpcdFx0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuICA3MzpcdFxuICA3NDpcdFx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuICA3NTpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiAgNzY6XHR9XG4gIDc3Olx0XG4gIDc4Olx0dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gIDc5Olx0e1xuICA4MDpcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiAgODE6XHRcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7XG4gIDgyOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuICA4MzpcdFx0Ym9vbCB5b3VuZyA9IGZhbHNlO1xuICA4NDpcdFx0dW5zaWduZWQgbG9uZyBwZm47XG4gIDg1Olx0XG4gIDg2Olx0XHRpZiAobGlrZWx5KHBtZF9wcmVzZW50KHBtZHZhbCkpKVxuICA4NzpcdFx0XHRwZm4gPSBwbWRfcGZuKHBtZHZhbCk7XG4gIDg4Olx0XHRlbHNlXG4gIDg5Olx0XHRcdHBmbiA9IHNvZnRsZWFmX3RvX3Bmbihzb2Z0bGVhZl9mcm9tX3BtZChwbWR2YWwpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBpczoKCioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgREFNT04gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gREFNT04uIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIGZpbmQgdGhvc2U/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGVzcGVjaWFsbHkgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW1gKSBhcmVhLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSB3aXRoaW4gdGhlIGBtbS9kYW1vbmAgZGlyZWN0b3J5LiBUaGUgS2NvbmZpZyBmaWxlIHRoZXJlIHNob3VsZCBiZSB0aGUgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBvcGVuIGBtbS9kYW1vbi9LY29uZmlnYCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3B0aW9ucyBmb3IgZW5hYmxpbmcsIGRpc2FibGluZywgYW5kIGN1c3RvbWl6aW5nIERBTU9OLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmVmb3JlIHByb2NlZWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIERBTU9OXG4gICA2Olx0XHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXG4gICA5Olx0XHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxuICAxMDpcdFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuICAxMTpcdFxuICAxMjpcdFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcbiAgMTM6XHRcdCAgbW9yZSBpbmZvcm1hdGlvbi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG4gIDE2Olx0XHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIERBTU9OXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cbiAgMjA6XHRcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG4gIDIxOlx0XHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXG4gIDIyOlx0XHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNTpcdFxuICAyNjpcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG4gIDI3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjg6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgMjk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDMwOlx0XHRoZWxwXG4gIDMxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxuICAzMjpcdFxuICAzMzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgMzQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDM1Olx0XG4gIDM2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIERBTU9OX1ZBRERSXG4gIDM5Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDQxOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNDI6XHRcdGRlZmF1bHQgREFNT05cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA0NTpcdFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIERBTU9OX1BBRERSXG4gIDQ4Olx0XHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiAgNDk6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA1MDpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDUxOlx0XHRkZWZhdWx0IERBTU9OXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNTQ6XHRcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXG4gIDU1Olx0XG4gIDU2Olx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcbiAgNTc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDU4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDU5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA2MDpcdFx0aGVscFxuICA2MTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxuICA2MjpcdFxuICA2MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgNjQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDY1Olx0XG4gIDY2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIERBTU9OX1NZU0ZTXG4gIDY5Olx0XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgU1lTRlNcbiAgNzE6XHRcdGRlZmF1bHQgREFNT05cbiAgNzI6XHRcdGhlbHBcbiAgNzM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXG4gIDc0Olx0XHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxuICA3NTpcdFxuICA3NjpcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG4gIDc3Olx0XHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDc4Olx0XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDc5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICA4MDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBvcHMtY29tbW9uLm9gIGlzIGJlaW5nIGNvbnN0cnVjdGVkLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgaW4gdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgb2JqZWN0IGZpbGUgY29tcGlsYXRpb24gZGV0YWlscyByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8gZ28gYW5kIGV4YW1pbmUgdGhhdCBgTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHN0ZXBzIGFuZCBkZXBlbmRlbmNpZXMgaW52b2x2ZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzLCBzb3VyY2UgZmlsZXMsIGFuZCBsaW5raW5nIGluc3RydWN0aW9ucyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYG9wcy1jb21tb24ub2AuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG4gICA0Olx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG4gICA1Olx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyBwYWRkci5vXG4gICA2Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVx0JiM0Mzs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cbiAgIDg6XHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXG4gICA5Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBXb3J0aHkgb2YgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIHNwZWNpZmljYWxseSB3aGVuIGVpdGhlciBgQ09ORklHX0RBTU9OX1ZBRERSYCBvciBgQ09ORklHX0RBTU9OX1BBRERSYCBpcyBlbmFibGVkLiBEQU1PTiwgcmlnaHQsIGl0JiMzOTtzIGEgY29yZSBNTSBzdWJzeXN0ZW0sIGZ1bGx5IGNvbmZpZ3VyYWJsZSB0aHJvdWdoIHN5c2ZzIGFuZCB0aG9zZSBEQU1PTiBtb2R1bGVzLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgZnV6emluZywgbGV0JiMzOTtzIHNlZS4KCkkgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBzZXR1cHMgbGlrZSBRRU1VL0dDRS4gWWVwLCBEQU1PTiYjMzk7cyBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMsIGFuZCBkZWJ1Z2ZzIGlmIGl0IGlzIGVuYWJsZWQuIFN5emthbGxlciwgaW4gcGFydGljdWxhciwgaGl0cyB0aGVzZSBpbnRlcmZhY2VzLgoKVGhpcyBwYXRjaCBpcyBhbHRlcmluZyB0aGUgYGRhbW9uX3B0ZXBfbWtvbGRgIGZ1bmN0aW9uLCBkaXJlY3RseSBtb2RpZnlpbmcgZXhlY3V0YWJsZSBDIGNvZGUgaW4gYG1tL2AuIEl0JiMzOTtzIHR3ZWFraW5nIGhvdyBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZ2AgaXMgY2FsbGVkLCBieSBhbGlnbmluZyB0aGUgYGFkZHJgIGFyZ3VtZW50IHRvIHRoZSBwYWdlIGJvdW5kYXJ5LgoKTm93LCBsZXQmIzM5O3MgY2hlY2sgdGhlIGZ1enppbmcgY3JpdGVyaWEuICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzogQ29yZSBTdWJzeXN0ZW1zOiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4mIzM0OwoKQmluZ28uIFRoaXMgY2xlYXJseSBtb2RpZmllcyBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYC4gKipXb3J0aEZ1enppbmcgaXMgdHJ1ZS4qKiBJIGRvbiYjMzk7dCBzZWUgYW55IGNhdmVhdHMgdGhlcmUuIEl0JiMzOTtzIGluIGEgY29yZSBzdWJzeXN0ZW0uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhvc2UgRm9jdXNTeW1ib2xzLiBXaGljaCBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGltcGFjdGVkIG9yIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlPyBPYnZpb3VzbHksIGBkYW1vbl9wdGVwX21rb2xkYCBpcyB0aGUgbWFpbiB0YXJnZXQuIEl0cyBjYWxsZXJzIGFuZCByZWxhdGVkIG9wZXJhdGlvbnMgYXJlOiBgZGFtb25fZm9saW9fbWtvbGRfb25lYCwgYGRhbW9uX21rb2xkX3BtZF9lbnRyeWAsIGBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2hgLCBhbmQgYGRhbW9uX3BhX21rb2xkYCBvciB0aGUgZXF1aXZhbGVudCBmb3IgcGh5c2ljYWwgYWRkcmVzc2VzLgoKVGltZSB0byBkbyBhIHRob3JvdWdoIGNoZWNrIG9mIGFsbCBjYWxsZXJzIG9mIGBkYW1vbl9wdGVwX21rb2xkYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIFRoaXMgaXMgd2hlcmUgSSBuZWVkIHRvIGRpZyBkZWVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9wdGVwX21rb2xkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL29wcy1jb21tb24uYz0yND1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDEtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDI6dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDMte1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNjQ9c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3MS1cdFx0aWYgKHB2bXcucHRlKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3MjpcdFx0XHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3My1cdFx0ZWxzZVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaD04PXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjEwOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xMS12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG4tLVxubW0vZGFtb24vdmFkZHIuYz0yNTg9c3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjc4LVx0XHRnb3RvIG91dDtcbm1tL2RhbW9uL3ZhZGRyLmM6Mjc5Olx0ZGFtb25fcHRlcF9ta29sZChwdGUsIHdhbGstXHUwMDNldm1hLCBhZGRyKTtcbm1tL2RhbW9uL3ZhZGRyLmMtMjgwLW91dDpcbi0tXG5tbS9kYW1vbi92YWRkci5jPTUxMz1zdGF0aWMgYm9vbCBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTI3LVx0aWYgKHlvdW5nIFx1MDAyNlx1MDAyNiBwdGVwKVxubW0vZGFtb24vdmFkZHIuYzo1Mjg6XHRcdGRhbW9uX3B0ZXBfbWtvbGQocHRlcCwgdm1hLCBhZGRyKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNTI5LVx0ZWxzZSBpZiAoeW91bmcgXHUwMDI2XHUwMDI2IHBtZHApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIERlcGVuZGVuY3kgQ2hhaW46IGBkYW1vbl9mb2xpb19ta29sZF9vbmVgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IHRyYWNlIGl0cyBjYWxsIGdyYXBoLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIElzIGl0IHVzZWQgZGlyZWN0bHkgd2l0aGluIGEgY3JpdGljYWwgcGF0aCwgb3IgaXMgaXQgc2V2ZXJhbCBsYXllcnMgZGVlcCBpbiBhIHV0aWxpdHkgbW9kdWxlPyBBcmUgdGhlcmUgbXVsdGlwbGUgY2FsbCBzaXRlcywgYW5kIGlmIHNvLCBhcmUgdGhleSB1c2VkIHVuZGVyIHNpbWlsYXIgY29uZGl0aW9ucz8gVGhlIGNhbGxpbmcgY29udGV4dCBpcyBwYXJhbW91bnQsIEkgbmVlZCB0byBrbm93IHdoeSBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBldmVuIGJlaW5nIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgaW1tZWRpYXRlbHkgcmV2ZWFsIHRoZSBwb3RlbnRpYWwgcmlzay4gQmFzZWQgb24gd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIEkmIzM5O2xsIGJlIGFibGUgdG8gZGVjaWRlIHRoZSBiZXN0IHBhdGggdG8gYWRkcmVzcyBhbnkgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9mb2xpb19ta29sZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9vcHMtY29tbW9uLmM9MTU1PWludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE2My1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNjQ6c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTY1LVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3OC1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNzk6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE4MC17XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgxLVx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxODI6XHRcdC5ybWFwX29uZSA9IGRhbW9uX2ZvbGlvX21rb2xkX29uZSxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xODMtXHRcdC5hbm9uX2xvY2sgPSBmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQsXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI2Nj1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTI5MC1cdFx0aWYgKG1hdGNoZWQpXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjkxOlx0XHRcdGRhbW9uX2ZvbGlvX21rb2xkKGZvbGlvKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yOTItXHRcdGJyZWFrO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaD0xMT12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTI6dm9pZCBkYW1vbl9mb2xpb19ta29sZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xMy1ib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9Mzg9c3RhdGljIHZvaWQgZGFtb25fcGFfbWtvbGQocGh5c19hZGRyX3QgcGFkZHIpXG4tLVxubW0vZGFtb24vcGFkZHIuYy00NC1cbm1tL2RhbW9uL3BhZGRyLmM6NDU6XHRkYW1vbl9mb2xpb19ta29sZChmb2xpbyk7XG5tbS9kYW1vbi9wYWRkci5jLTQ2LVx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg1NQoJCQkJCQkJb3V0cHV0OiAyMDYKCQkJCQkJCXRob3VnaHRzOiAzMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGlkZW50aWZ5aW5nIHRoZSBrZXkgZm9jdXMgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIEkgc2VlIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWVzIGZsYWdnZWQ6IGBkYW1vbl9wdGVwX21rb2xkYCwgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAsIGBkYW1vbl9mb2xpb19ta29sZGAsIGBkYW1vbl9ta29sZF9wbWRfZW50cnlgLCBhbmQgYGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBrZWVwIGEgY2xvc2UgZXllIG9uIGZvciB0aGlzIHBhcnRpY3VsYXIgYW5hbHlzaXMuCgpOZXh0LCBJJiMzOTttIGNoZWNraW5nIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIERBTU9OIGFuZCB0aGUgY29yZSBjb2RlIHdpdGhpbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4KCk5vdywgSSYjMzk7bSBjb25maXJtaW5nIGEga25vd24gcXVhbnRpdHk7IGBQQUdFX0FMSUdOX0RPV05gIGlzIHN0YW5kYXJkLiBJJiMzOTt2ZSBub3RlZCB0aGF0IGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIGBkYW1vbl9wdGVwX21rb2xkYCBpbiBjb25qdW5jdGlvbiB3aXRoIGBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nYCwgd2hpY2ggaXMgZXhwZWN0ZWQgYmVoYXZpb3IuCgpJJiMzOTttIGRvaW5nIGEgZG91YmxlLWNoZWNrIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFnYWluLCBzdHJpcHBpbmcgdGhlICYjMzQ7Q09ORklHXyYjMzQ7IHByZWZpeCB0byBnZXQgdGhlIGJhcmUga2VybmVsIGNvbmZpZyBuYW1lczogJiMzNDtEQU1PTiYjMzQ7LCAmIzM0O0RBTU9OX1ZBRERSJiMzNDssICYjMzQ7REFNT05fUEFERFImIzM0OywgYW5kICYjMzQ7REFNT05fU1lTRlMmIzM0Oy4gVGhpcyBpcyBjcnVjaWFsIGZvciBjb25zaXN0ZW5jeSB3aGVuIEkgc2V0IHRoZSByZXN1bHRzLgoKRmluYWxseSwgSSYjMzk7bSByZXZpZXdpbmcgdGhlIHJlcXVpcmVkIGZvcm1hdCBmb3IgJiMzNDtzZXQtcmVzdWx0cy4mIzM0OyBJIG5lZWQgdG8gcHJlc2VudCB0aGlzIGluZm9ybWF0aW9uIGNvbmNpc2VseSwgaW5jbHVkaW5nIHRoZSBFbmFibGVDb25maWdzIGFzIGEgbGlzdCBvZiBzdHJpbmdzIChubyBDT05GSUdfIHByZWZpeCksIHRoZSBGb2N1c1N5bWJvbHMsIGEgYnJpZWYgZXhwbGFuYXRpb24gb2YgbXkgcmVhc29uaW5nLCBhbmQgYSBib29sZWFuIGZvciBgV29ydGhGdXp6aW5nYC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3B0ZXBfbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25fZm9saW9fbWtvbGRfb25lJiMzNDssCiAgICAmIzM0O2RhbW9uX2ZvbGlvX21rb2xkJiMzNDssCiAgICAmIzM0O2RhbW9uX21rb2xkX3BtZF9lbnRyeSYjMzQ7LAogICAgJiMzNDtkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGFtb25fcHRlcF9ta29sZCgpIGluIG1tL2RhbW9uL29wcy1jb21tb24uYyB0byBhbGlnbiB0aGUgdmlydHVhbCBhZGRyZXNzIHBhc3NlZCB0byBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCkgdXNpbmcgUEFHRV9BTElHTl9ET1dOKCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBsb2dpYyBpbiBEQU1PTiwgd2hpY2ggaXMgY29udHJvbGxhYmxlIHZpYSBzeXNmcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzIGFuZCBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgb2NjdXIgZHVyaW5nIHBhZ2UgdGFibGUgd2Fsa3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHRlcF9ta29sZCYjMzQ7LAogICAgJiMzNDtkYW1vbl9mb2xpb19ta29sZF9vbmUmIzM0OywKICAgICYjMzQ7ZGFtb25fZm9saW9fbWtvbGQmIzM0OywKICAgICYjMzQ7ZGFtb25fbWtvbGRfcG1kX2VudHJ5JiMzNDssCiAgICAmIzM0O2RhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkYW1vbl9wdGVwX21rb2xkKCkgaW4gbW0vZGFtb24vb3BzLWNvbW1vbi5jIHRvIGFsaWduIHRoZSB2aXJ0dWFsIGFkZHJlc3MgcGFzc2VkIHRvIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKSB1c2luZyBQQUdFX0FMSUdOX0RPV04oKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIGxvZ2ljIGluIERBTU9OLCB3aGljaCBpcyBjb250cm9sbGFibGUgdmlhIHN5c2ZzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB2ZXJpZnkgY29ycmVjdG5lc3MgYW5kIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvY2N1ciBkdXJpbmcgcGFnZSB0YWJsZSB3YWxrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGRhbW9uX3B0ZXBfbWtvbGQoKWAgaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AgdG8gcGFzcyBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYCBpbnN0ZWFkIG9mIHRoZSByYXcgYGFkZHJgLCBlbnN1cmluZyBhcmNoaXRlY3R1cmFsIGNvbXBhdGliaWxpdHkgd2hlcmUgcGFnZS1hbGlnbmVkIGFkZHJlc3NlcyBhcmUgZXhwZWN0ZWQuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBpbnRyb2R1Y2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YmU3OTQzMThhODYzZmNhZjExOGQwZTkzODQ5MTRkMTBkNDEzYjM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwOTozNDowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uYwppbmRleCA3YTJlNDBiYzdiYWVkLi43MjE5YzYwOGIxOTUyIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jCkBAIC02MSw3ICYjNDM7NjEsMTIgQEAgdm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIKIAkgKiBkZXZpY2UgYXNwZWN0cy4KIAkgKi8KIAlpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKQotCQl5b3VuZyB8PSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkciwgcHRlKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBcmNoIGltcGxlbWVudGF0aW9uIG9mIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKSBtYXkKJiM0MzsJCSAqIHJlcXVpcmUgYWxpZ25lZCBAYWRkcgomIzQzOwkJICovCiYjNDM7CQl5b3VuZyB8PSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgUEFHRV9BTElHTl9ET1dOKGFkZHIpLAomIzQzOwkJCQlwdGUpOwogCXlvdW5nIHw9IG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyh2bWEtJmd0O3ZtX21tLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSk7CiAJaWYgKHlvdW5nKQogCQlmb2xpb19zZXRfeW91bmcoZm9saW8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIGEgcmVxdWVzdCBjYW1lIGluIHJlZ2FyZGluZyBhIHBhdGNoIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIGFuZCB3aGV0aGVyIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyByZXF1ZXN0IGlzIHNhZmUuIExldCYjMzk7cyBjbGFzc2lmeSBpdDogaXQmIzM5O3MgYSBkZWZlbnNpdmUgc2VjdXJpdHkgYXNzZXNzbWVudCBhbmQga2VybmVsIHNhbml0aXplciBldmFsdWF0aW9uLiBObyBtYWxpY2lvdXMgaW50ZW50LCBubyBleHBsb2l0IGdlbmVyYXRpb24sIG5vdGhpbmcgb2ZmZW5zaXZlLiBTZWVtcyBwZXJmZWN0bHkgZmluZSB0byBwcm9jZWVkLgoKTm93LCB0byB0aGUgcGF0Y2ggaXRzZWxmLiBJJiMzOTttIHNlZWluZyBhIGRpZmY6IEl0JiMzOTtzIG1vZGlmeWluZyBob3cgdGhlIGB5b3VuZ2AgYml0IGlzIGhhbmRsZWQgaW4gdGhlIHBhZ2UgdGFibGUgZW50cnksIHNwZWNpZmljYWxseSB3aXRoaW4gYGRhbW9uX3B0ZXBfbWtvbGRgLiBUaGUgY2hhbmdlIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGBQQUdFX0FMSUdOX0RPV05gIHRvIHRoZSBhZGRyZXNzIHBhc3NlZCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYC4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhhdCBzb21lIGFyY2hpdGVjdHVyZXMgbWlnaHQgcmVxdWlyZSB0aGUgYWRkcmVzcyB0byBiZSBhbGlnbmVkLiBUaGlzIGlzIGNydWNpYWw6IGFuIHVuYWxpZ25lZCBhY2Nlc3MgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiwgc28gdGhlcmUmIzM5O3MgYSByZWFzb24gZm9yIGNvbmNlcm4uIAoKVG8gZ2FpbiBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgbm93IHRha2UgYSBsb29rIGF0IGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIHRvIHNlZSBob3cgYGRhbW9uX3B0ZXBfbWtvbGRgIGZpdHMgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgREFNT04uIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGUgY2hhbmdlLiBUaGlzIGNoYW5nZSwgd2hpbGUgc2VlbWluZ2x5IHNtYWxsLCB0b3VjaGVzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbi4gSWYgdGhlcmUgaXMgYSBidWcsIGl0IGNvdWxkIGxlYWQgdG8gc2lnbmlmaWNhbnQgcHJvYmxlbXMuIEkgd2lsbCBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL29wcy1jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gIDQzOlx0e1xuICA0NDpcdFx0cHRlX3QgcHRldmFsID0gcHRlcF9nZXQocHRlKTtcbiAgNDU6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gIDQ2Olx0XHRib29sIHlvdW5nID0gZmFsc2U7XG4gIDQ3Olx0XHR1bnNpZ25lZCBsb25nIHBmbjtcbiAgNDg6XHRcbiAgNDk6XHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpXG4gIDUwOlx0XHRcdHBmbiA9IHB0ZV9wZm4ocHRldmFsKTtcbiAgNTE6XHRcdGVsc2VcbiAgNTI6XHRcdFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCkpO1xuICA1MzpcdFxuICA1NDpcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8ocGZuKTtcbiAgNTU6XHRcdGlmICghZm9saW8pXG4gIDU2Olx0XHRcdHJldHVybjtcbiAgNTc6XHRcbiAgNTg6XHRcdC8qXG4gIDU5Olx0XHQgKiBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdCBhY3R1YWxseSBtYXAgcGFnZXNcbiAgNjA6XHRcdCAqIGFyZSBcJiMzNDtvbGRcJiMzNDsgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlIG9mIGFueVxuICA2MTpcdFx0ICogZGV2aWNlIGFzcGVjdHMuXG4gIDYyOlx0XHQgKi9cbiAgNjM6XHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpXG4gIDY0Olx0XHRcdC8qXG4gIDY1Olx0XHRcdCAqIEFyY2ggaW1wbGVtZW50YXRpb24gb2YgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIG1heVxuICA2NjpcdFx0XHQgKiByZXF1aXJlIGFsaWduZWQgQGFkZHJcbiAgNjc6XHRcdFx0ICovXG4gIDY4Olx0XHRcdHlvdW5nIHw9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBQQUdFX0FMSUdOX0RPV04oYWRkciksXG4gIDY5Olx0XHRcdFx0XHRwdGUpO1xuICA3MDpcdFx0eW91bmcgfD0gbW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgYWRkciAmIzQzOyBQQUdFX1NJWkUpO1xuICA3MTpcdFx0aWYgKHlvdW5nKVxuICA3MjpcdFx0XHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xuICA3MzpcdFxuICA3NDpcdFx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xuICA3NTpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiAgNzY6XHR9XG4gIDc3Olx0XG4gIDc4Olx0dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gIDc5Olx0e1xuICA4MDpcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiAgODE6XHRcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7XG4gIDgyOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuICA4MzpcdFx0Ym9vbCB5b3VuZyA9IGZhbHNlO1xuICA4NDpcdFx0dW5zaWduZWQgbG9uZyBwZm47XG4gIDg1Olx0XG4gIDg2Olx0XHRpZiAobGlrZWx5KHBtZF9wcmVzZW50KHBtZHZhbCkpKVxuICA4NzpcdFx0XHRwZm4gPSBwbWRfcGZuKHBtZHZhbCk7XG4gIDg4Olx0XHRlbHNlXG4gIDg5Olx0XHRcdHBmbiA9IHNvZnRsZWFmX3RvX3Bmbihzb2Z0bGVhZl9mcm9tX3BtZChwbWR2YWwpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY3MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqVHJhY2luZyB0aGUgQ2FsbGVyJiMzOTtzIExpbmVhZ2U6IGBkYW1vbl9wdGVwX21rb2xkYCoqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjayBkb3duIHdobyYjMzk7cyBjYWxsaW5nIGBkYW1vbl9wdGVwX21rb2xkYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBmZWVscyBpbXBvcnRhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoYXQgdGhhdCBmdW5jdGlvbiBsaWtlbHkgKmRvZXMqIOKAkyBwdGVwIGltcGxpZXMgcGFnZSB0YWJsZSBlbnRyeSBtYW5pcHVsYXRpb24sIGFuZCB0aGUgJiMzNDtta29sZCYjMzQ7IHN0cm9uZ2x5IHN1Z2dlc3RzIHNvbWV0aGluZyB0byBkbyB3aXRoIG1hcmtpbmcgb3IgaGFuZGxpbmcgb2xkZXIgUFRFIGVudHJpZXMsIHBvc3NpYmx5IGZvciBhZ2luZyBvciBldmljdGlvbiBzdHJhdGVnaWVzLiBCdXQgSSBjYW4mIzM5O3QganVtcCB0byBjb25jbHVzaW9ucy4gRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBUaGF0IGdpdmVzIG1lIHRoZSBpbW1lZGlhdGUgYW5kIG5lY2Vzc2FyeSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgZGVwZW5kZW50IG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9wdGVwX21rb2xkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL29wcy1jb21tb24uYz0yND1zdHJ1Y3QgZm9saW8gKmRhbW9uX2dldF9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDEtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6NDI6dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDMte1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNjQ9c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3MS1cdFx0aWYgKHB2bXcucHRlKVxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3MjpcdFx0XHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3My1cdFx0ZWxzZVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uaD04PXN0cnVjdCBmb2xpbyAqZGFtb25fZ2V0X2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxubW0vZGFtb24vb3BzLWNvbW1vbi5oOjEwOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xMS12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XG4tLVxubW0vZGFtb24vdmFkZHIuYz0yNTg9c3RhdGljIGludCBkYW1vbl9ta29sZF9wbWRfZW50cnkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjc4LVx0XHRnb3RvIG91dDtcbm1tL2RhbW9uL3ZhZGRyLmM6Mjc5Olx0ZGFtb25fcHRlcF9ta29sZChwdGUsIHdhbGstXHUwMDNldm1hLCBhZGRyKTtcbm1tL2RhbW9uL3ZhZGRyLmMtMjgwLW91dDpcbi0tXG5tbS9kYW1vbi92YWRkci5jPTUxMz1zdGF0aWMgYm9vbCBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2goc3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNTI3LVx0aWYgKHlvdW5nIFx1MDAyNlx1MDAyNiBwdGVwKVxubW0vZGFtb24vdmFkZHIuYzo1Mjg6XHRcdGRhbW9uX3B0ZXBfbWtvbGQocHRlcCwgdm1hLCBhZGRyKTtcbm1tL2RhbW9uL3ZhZGRyLmMtNTI5LVx0ZWxzZSBpZiAoeW91bmcgXHUwMDI2XHUwMDI2IHBtZHApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MDIKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogMzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHRoZSBgZGFtb25fcHRlcF9ta29sZCgpYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyB0aGUgY2FsbCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYC4gVGhlIGNoYW5nZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBub3cgcGFzc2luZyBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBgYWRkcmAgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAuIFRoZSBqdXN0aWZpY2F0aW9uLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgY2VydGFpbiBhcmNoaXRlY3R1cmVzIG1pZ2h0ICpyZXF1aXJlKiB0aGlzIHBhZ2UgYWxpZ25tZW50IGZvciBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIE1ha2VzIHNlbnNlLiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgcXVpcmtzIGFyZSBhbHdheXMgZnVuLgoKTm93LCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDogRG9lcyB0aGlzIGhhdmUgYW55IG9mIHRoZSBjb21tb24gcGl0ZmFsbHM/CgoxLiAgRG9lcyB0aGlzIHRvdWNoIG9yIGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/IE5vLCBub3QgYXQgYWxsLgoyLiAgQW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwb2ludGVycywgb3IgYnVmZmVycyBpbnRyb2R1Y2VkPyBOb3BlLCBub3RoaW5nIGxpa2UgdGhhdC4KMy4gIEFyZSB0aGVyZSBhbnkgY2hhbmdlcyB0byBicmFuY2ggY29uZGl0aW9ucyByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4KNC4gIElzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBhbGxvY2F0ZWQgb3IgYWx0ZXJlZCBpbiBpdHMgaW5pdGlhbGl6YXRpb24/IE5lZ2F0aXZlLgo1LiAgRG9lcyB0aGlzIGNyZWF0ZSBhbnkgcmlzayBvZiByZWFkaW5nIG9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZT8gTm8sIGRlZmluaXRlbHkgbm90LgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCB3aGljaCBhcHBlYXJzIHRvIGJlIHB1cmVseSBhbiBhbGlnbm1lbnQgYWRqdXN0bWVudCB0byBhbiBleGlzdGluZyBwYXJhbWV0ZXIsIEkgbmVlZCB0byBjb25zaWRlciBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBLTVNBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGFuZCBpbmZvcm1hdGlvbiBsZWFrcy4gSG93ZXZlciwgdGhpcyBwYXRjaCBpcyBsaXRlcmFsbHkganVzdCBhbiBhbGlnbm1lbnQgY2hhbmdlLiBXZSYjMzk7cmUgbm90IHJlYWRpbmcsIHdyaXRpbmcsIGFsbG9jYXRpbmcsIG9yIGxlYWtpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIHNhbml0aXplcnMgYXJlIGdvaW5nIHRvIGhhbmRsZSB0aGUgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zLCBidXQgaGVyZSB0aGVyZSYjMzk7cyBub3QgZXZlbiBhIGhpbnQgb2YgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhhdCBhc3Nlc3NtZW50LiBBbHJpZ2h0LCB0aW1lIHRvIGRvdWJsZS1jaGVjayBldmVyeXRoaW5nIG9uZSBsYXN0IHRpbWUuIEFsbCBhc3BlY3RzIGNvdmVyZWQsIHNvIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYGRhbW9uX3B0ZXBfbWtvbGQoKWAgaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AgdG8gcGFzcyBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYCBpbnN0ZWFkIG9mIHRoZSByYXcgYGFkZHJgLCBlbnN1cmluZyBhcmNoaXRlY3R1cmFsIGNvbXBhdGliaWxpdHkgd2hlcmUgcGFnZS1hbGlnbmVkIGFkZHJlc3NlcyBhcmUgZXhwZWN0ZWQuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBpbnRyb2R1Y2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGBkYW1vbl9wdGVwX21rb2xkKClgIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIHRvIHBhc3MgYFBBR0VfQUxJR05fRE9XTihhZGRyKWAgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAgaW5zdGVhZCBvZiB0aGUgcmF3IGBhZGRyYCwgZW5zdXJpbmcgYXJjaGl0ZWN0dXJhbCBjb21wYXRpYmlsaXR5IHdoZXJlIHBhZ2UtYWxpZ25lZCBhZGRyZXNzZXMgYXJlIGV4cGVjdGVkLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgaW50cm9kdWNlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBvciBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGRldGVjdGlvbi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDowNC41NTkwMTA0NDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA1MzcxNTY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3B0ZXBfbWtvbGRcIixcbiAgICBcImRhbW9uX2ZvbGlvX21rb2xkX29uZVwiLFxuICAgIFwiZGFtb25fZm9saW9fbWtvbGRcIixcbiAgICBcImRhbW9uX21rb2xkX3BtZF9lbnRyeVwiLFxuICAgIFwiZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBkYW1vbl9wdGVwX21rb2xkKClgIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIHRvIHBhc3MgYFBBR0VfQUxJR05fRE9XTihhZGRyKWAgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAgaW5zdGVhZCBvZiB0aGUgcmF3IGBhZGRyYCwgZW5zdXJpbmcgYXJjaGl0ZWN0dXJhbCBjb21wYXRpYmlsaXR5IHdoZXJlIHBhZ2UtYWxpZ25lZCBhZGRyZXNzZXMgYXJlIGV4cGVjdGVkLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBpbnRyb2R1Y2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGFtb25fcHRlcF9ta29sZCgpIGluIG1tL2RhbW9uL29wcy1jb21tb24uYyB0byBhbGlnbiB0aGUgdmlydHVhbCBhZGRyZXNzIHBhc3NlZCB0byBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCkgdXNpbmcgUEFHRV9BTElHTl9ET1dOKCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBsb2dpYyBpbiBEQU1PTiwgd2hpY2ggaXMgY29udHJvbGxhYmxlIHZpYSBzeXNmcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzIGFuZCBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgb2NjdXIgZHVyaW5nIHBhZ2UgdGFibGUgd2Fsa3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjM0OjA0LjU1OTAxNDU1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY3Mzg2MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWJlNzk0MzE4YTg2M2ZjYWYxMThkMGU5Mzg0OTE0ZDEwZDQxM2IzOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDA5OjM0OjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xcbmluZGV4IDdhMmU0MGJjN2JhZWQuLjcyMTljNjA4YjE5NTIgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuQEAgLTYxLDcgKzYxLDEyIEBAIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyXFxuIFxcdCAqIGRldmljZSBhc3BlY3RzLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSlcXG4tXFx0XFx0eW91bmcgfD0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFkZHIsIHB0ZSk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEFyY2ggaW1wbGVtZW50YXRpb24gb2YgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIG1heVxcbitcXHRcXHQgKiByZXF1aXJlIGFsaWduZWQgQGFkZHJcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHlvdW5nIHw9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBQQUdFX0FMSUdOX0RPV04oYWRkciksXFxuK1xcdFxcdFxcdFxcdHB0ZSk7XFxuIFxcdHlvdW5nIHw9IG1tdV9ub3RpZmllcl9jbGVhcl95b3VuZyh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBhZGRyICsgUEFHRV9TSVpFKTtcXG4gXFx0aWYgKHlvdW5nKVxcbiBcXHRcXHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDowNC45MjcwMDEzNDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1NjY1MTk2MjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHRlcF9ta29sZFwiLFxuICAgIFwiZGFtb25fZm9saW9fbWtvbGRfb25lXCIsXG4gICAgXCJkYW1vbl9mb2xpb19ta29sZFwiLFxuICAgIFwiZGFtb25fbWtvbGRfcG1kX2VudHJ5XCIsXG4gICAgXCJkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkYW1vbl9wdGVwX21rb2xkKCkgaW4gbW0vZGFtb24vb3BzLWNvbW1vbi5jIHRvIGFsaWduIHRoZSB2aXJ0dWFsIGFkZHJlc3MgcGFzc2VkIHRvIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKSB1c2luZyBQQUdFX0FMSUdOX0RPV04oKS4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIGxvZ2ljIGluIERBTU9OLCB3aGljaCBpcyBjb250cm9sbGFibGUgdmlhIHN5c2ZzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB2ZXJpZnkgY29ycmVjdG5lc3MgYW5kIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvY2N1ciBkdXJpbmcgcGFnZSB0YWJsZSB3YWxrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YmU3OTQzMThhODYzZmNhZjExOGQwZTkzODQ5MTRkMTBkNDEzYjM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwOTozNDowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggN2EyZTQwYmM3YmFlZC4uNzIxOWM2MDhiMTk1MiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xuKysrIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG5AQCAtNjEsNyArNjEsMTIgQEAgdm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJcbiBcdCAqIGRldmljZSBhc3BlY3RzLlxuIFx0ICovXG4gXHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKVxuLVx0XHR5b3VuZyB8PSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkciwgcHRlKTtcbitcdFx0LypcbitcdFx0ICogQXJjaCBpbXBsZW1lbnRhdGlvbiBvZiBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCkgbWF5XG4rXHRcdCAqIHJlcXVpcmUgYWxpZ25lZCBAYWRkclxuK1x0XHQgKi9cbitcdFx0eW91bmcgfD0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIFBBR0VfQUxJR05fRE9XTihhZGRyKSxcbitcdFx0XHRcdHB0ZSk7XG4gXHR5b3VuZyB8PSBtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBhZGRyICsgUEFHRV9TSVpFKTtcbiBcdGlmICh5b3VuZylcbiBcdFx0Zm9saW9fc2V0X3lvdW5nKGZvbGlvKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjM0OjA0LjkyNzAwMjgzN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0NzA5MjM5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoYXQgY29tbWl0LCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZSB3aXRoaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgYWx0ZXJpbmcgdGhlIGBkYW1vbl9wdGVwX21rb2xkYCBmdW5jdGlvbi4gUmlnaHQsIGhlcmUncyB3aGF0J3MgaGFwcGVuaW5nOiBpdCdzIGFkanVzdGluZyB0aGUgY2FsbCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZ2AuIFByZXZpb3VzbHksIGl0IHdhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjYWxsLCBidXQgbm93IHRoZXJlJ3MgdGhpcyBhZGRlZCBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCBiZWZvcmUgcGFzc2luZyBgYWRkcmAgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAuXG5cblRoZSBjb21tZW50IGlzIGtleTogXCJBcmNoIGltcGxlbWVudGF0aW9uIG9mIGBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKClgIG1heSByZXF1aXJlIGFsaWduZWQgYEBhZGRyYC5cIiBTbywgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVxdWlyZW1lbnRzIG9yIHBvdGVudGlhbCBhbGlnbm1lbnQgaXNzdWVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQuIEl0J3MgYWJvdXQgZW5zdXJpbmcgY29tcGF0aWJpbGl0eSBhbmQgYXZvaWRpbmcgYW55IHN1YnRsZSBidWdzIG9uIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcyB0aGF0IG1pZ2h0IGJlIHNlbnNpdGl2ZSB0byB1bmFsaWduZWQgYWRkcmVzc2VzIHdoZW4gY2hlY2tpbmcgYW5kIGNsZWFyaW5nIHRoZSBcInlvdW5nXCIgYml0IGluIHBhZ2UgdGFibGUgZW50cmllcy5cblxuVG8gZ2V0IGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gZ28gYnJvYWRlci4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgYG1tL2RhbW9uL29wcy1jb21tb24uY2AgaW4gZGV0YWlsLCBhbG9uZyB3aXRoIG90aGVyIERBTU9OIGZpbGVzLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgYWxsIGNhbGxlcnMgb2YgYGRhbW9uX3B0ZXBfbWtvbGRgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UsIGFuZCBob3cgd2lkZWx5IGl0IGltcGFjdHMgdGhlIGV4aXN0aW5nIERBTU9OIGltcGxlbWVudGF0aW9uLiBJIGFsc28gd2FudCB0byBjaGVjayBmb3IgcmVsYXRlZCBgS2NvbmZpZ2Agb3B0aW9ucyB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgbWF5IGJlIGNvbnRyb2xsZWQgYnkgY2VydGFpbiBjb25maWd1cmF0aW9ucy5cblxuVGltZSB0byBmaXJlIHVwIGByZWFkLWZpbGVgIGFuZCBgZ3JlcHBlcmAgYW5kIHNlZSB3aGF0IHRoZSB3aWRlciBwaWN0dXJlIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTYxLCJPdXRwdXRUb2tlbnMiOjU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MzQ6MTAuMzk3OTI5MTI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjE2MTcyMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcHRlcF9ta29sZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9vcHMtY29tbW9uLmM9MjQ9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDEtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjQyOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00My17XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTY0PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3MS1cXHRcXHRpZiAocHZtdy5wdGUpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3MjpcXHRcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzMtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTg9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMDp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTExLXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjU4PXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjc4LVxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL3ZhZGRyLmM6Mjc5OlxcdGRhbW9uX3B0ZXBfbWtvbGQocHRlLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMjgwLW91dDpcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NTEzPXN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTUyNy1cXHRpZiAoeW91bmcgXFx1MDAyNlxcdTAwMjYgcHRlcClcXG5tbS9kYW1vbi92YWRkci5jOjUyODpcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB0ZXAsIHZtYSwgYWRkcik7XFxubW0vZGFtb24vdmFkZHIuYy01MjktXFx0ZWxzZSBpZiAoeW91bmcgXFx1MDAyNlxcdTAwMjYgcG1kcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MzQ6MTIuMTU5NTUwMDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vb3BzLWNvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdH1cXG4gIDQxOlxcdFxcbiAgNDI6XFx0dm9pZCBkYW1vbl9wdGVwX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuICA0MzpcXHR7XFxuICA0NDpcXHRcXHRwdGVfdCBwdGV2YWwgPSBwdGVwX2dldChwdGUpO1xcbiAgNDU6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gIDQ2OlxcdFxcdGJvb2wgeW91bmcgPSBmYWxzZTtcXG4gIDQ3OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKVxcbiAgNTA6XFx0XFx0XFx0cGZuID0gcHRlX3BmbihwdGV2YWwpO1xcbiAgNTE6XFx0XFx0ZWxzZVxcbiAgNTI6XFx0XFx0XFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCkpO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhwZm4pO1xcbiAgNTU6XFx0XFx0aWYgKCFmb2xpbylcXG4gIDU2OlxcdFxcdFxcdHJldHVybjtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0LypcXG4gIDU5OlxcdFxcdCAqIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0IGFjdHVhbGx5IG1hcCBwYWdlc1xcbiAgNjA6XFx0XFx0ICogYXJlIFxcXCJvbGRcXFwiIGZyb20gYSBDUFUgcGVyc3BlY3RpdmUuIFRoZSBNTVUgbm90aWZpZXIgdGFrZXMgY2FyZSBvZiBhbnlcXG4gIDYxOlxcdFxcdCAqIGRldmljZSBhc3BlY3RzLlxcbiAgNjI6XFx0XFx0ICovXFxuICA2MzpcXHRcXHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKVxcbiAgNjQ6XFx0XFx0XFx0LypcXG4gIDY1OlxcdFxcdFxcdCAqIEFyY2ggaW1wbGVtZW50YXRpb24gb2YgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIG1heVxcbiAgNjY6XFx0XFx0XFx0ICogcmVxdWlyZSBhbGlnbmVkIEBhZGRyXFxuICA2NzpcXHRcXHRcXHQgKi9cXG4gIDY4OlxcdFxcdFxcdHlvdW5nIHw9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBQQUdFX0FMSUdOX0RPV04oYWRkciksXFxuICA2OTpcXHRcXHRcXHRcXHRcXHRwdGUpO1xcbiAgNzA6XFx0XFx0eW91bmcgfD0gbW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUpO1xcbiAgNzE6XFx0XFx0aWYgKHlvdW5nKVxcbiAgNzI6XFx0XFx0XFx0Zm9saW9fc2V0X3lvdW5nKGZvbGlvKTtcXG4gIDczOlxcdFxcbiAgNzQ6XFx0XFx0Zm9saW9fc2V0X2lkbGUoZm9saW8pO1xcbiAgNzU6XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gIDc2OlxcdH1cXG4gIDc3OlxcdFxcbiAgNzg6XFx0dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuICA3OTpcXHR7XFxuICA4MDpcXHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuICA4MTpcXHRcXHRwbWRfdCBwbWR2YWwgPSBwbWRwX2dldChwbWQpO1xcbiAgODI6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gIDgzOlxcdFxcdGJvb2wgeW91bmcgPSBmYWxzZTtcXG4gIDg0OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRpZiAobGlrZWx5KHBtZF9wcmVzZW50KHBtZHZhbCkpKVxcbiAgODc6XFx0XFx0XFx0cGZuID0gcG1kX3BmbihwbWR2YWwpO1xcbiAgODg6XFx0XFx0ZWxzZVxcbiAgODk6XFx0XFx0XFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKHNvZnRsZWFmX2Zyb21fcG1kKHBtZHZhbCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDoxMi4xNTk2NTU2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTQ2NTM5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IGlzOlxuXG4qKkNoZWNraW5nIEtjb25maWcgZm9yIERBTU9OIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gREFNT04uIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIGZpbmQgdGhvc2U/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGVzcGVjaWFsbHkgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IChgbW1gKSBhcmVhLiBMZXQncyBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IHdpdGhpbiB0aGUgYG1tL2RhbW9uYCBkaXJlY3RvcnkuIFRoZSBLY29uZmlnIGZpbGUgdGhlcmUgc2hvdWxkIGJlIHRoZSBwbGFjZSB0byBzdGFydC4gTGV0J3Mgb3BlbiBgbW0vZGFtb24vS2NvbmZpZ2AgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gVGhpcyBzaG91bGQgcHJvdmlkZSBtZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3B0aW9ucyBmb3IgZW5hYmxpbmcsIGRpc2FibGluZywgYW5kIGN1c3RvbWl6aW5nIERBTU9OLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDoxMy44NzQzMTE3NDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdG1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBEQU1PTlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGJ1aWxkcyBhIGZyYW1ld29yayB0aGF0IGFsbG93cyBrZXJuZWwgc3Vic3lzdGVtcyB0byBtb25pdG9yXFxuICAgOTpcXHRcXHQgIGFjY2VzcyBmcmVxdWVuY3kgb2YgZWFjaCBtZW1vcnkgcmVnaW9uLiBUaGUgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWZ1bFxcbiAgMTA6XFx0XFx0ICBmb3IgcGVyZm9ybWFuY2UtY2VudHJpYyBEUkFNIGxldmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxcbiAgMTM6XFx0XFx0ICBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxuICAxNjpcXHRcXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gREFNT05cXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxcbiAgMjA6XFx0XFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcXG4gIDIxOlxcdFxcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cXG4gIDIyOlxcdFxcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG4gIDI3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgMzQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgREFNT05fVkFERFJcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA0MTpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDQyOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNDU6XFx0XFx0ICB0aGF0IHdvcmsgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGNvbmZpZyBEQU1PTl9QQUREUlxcbiAgNDg6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4gIDQ5OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgTU1VXFxuICA1MDpcXHRcXHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcXG4gIDUxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxcbiAgNTQ6XFx0XFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNTk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDYwOlxcdFxcdGhlbHBcXG4gIDYxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHZpcnR1YWwgYWRkcmVzc2VzIG9wZXJhdGlvbnMgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDY0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDY3OlxcdFxcbiAgNjg6XFx0Y29uZmlnIERBTU9OX1NZU0ZTXFxuICA2OTpcXHRcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuICA3MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxuICA3MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA3MjpcXHRcXHRoZWxwXFxuICA3MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbiAgNzQ6XFx0XFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4gIDc3OlxcdFxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA3OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDoxMy44NzQzODEyOTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzM0NzExMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgb3BzLWNvbW1vbi5vYCBpcyBiZWluZyBjb25zdHJ1Y3RlZC4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgaW4gdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBgbW0vZGFtb24vYCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBvYmplY3QgZmlsZSBjb21waWxhdGlvbiBkZXRhaWxzIHJlc2lkZS4gSSdsbCBuZWVkIHRvIGdvIGFuZCBleGFtaW5lIHRoYXQgYE1ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBzdGVwcyBhbmQgZGVwZW5kZW5jaWVzIGludm9sdmVkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzLCBzb3VyY2UgZmlsZXMsIGFuZCBsaW5raW5nIGluc3RydWN0aW9ucyB0aGF0IGFyZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYG9wcy1jb21tb24ub2AuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MzQ6MTUuNjA5MDk0NDI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MzQ6MTUuNjA5MTUyMDQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMDYyNjg4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gV29ydGh5IG9mIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgc3BlY2lmaWNhbGx5IHdoZW4gZWl0aGVyIGBDT05GSUdfREFNT05fVkFERFJgIG9yIGBDT05GSUdfREFNT05fUEFERFJgIGlzIGVuYWJsZWQuIERBTU9OLCByaWdodCwgaXQncyBhIGNvcmUgTU0gc3Vic3lzdGVtLCBmdWxseSBjb25maWd1cmFibGUgdGhyb3VnaCBzeXNmcyBhbmQgdGhvc2UgREFNT04gbW9kdWxlcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGZ1enppbmcsIGxldCdzIHNlZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgc2V0dXBzIGxpa2UgUUVNVS9HQ0UuIFllcCwgREFNT04ncyBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMsIGFuZCBkZWJ1Z2ZzIGlmIGl0IGlzIGVuYWJsZWQuIFN5emthbGxlciwgaW4gcGFydGljdWxhciwgaGl0cyB0aGVzZSBpbnRlcmZhY2VzLlxuXG5UaGlzIHBhdGNoIGlzIGFsdGVyaW5nIHRoZSBgZGFtb25fcHRlcF9ta29sZGAgZnVuY3Rpb24sIGRpcmVjdGx5IG1vZGlmeWluZyBleGVjdXRhYmxlIEMgY29kZSBpbiBgbW0vYC4gSXQncyB0d2Vha2luZyBob3cgYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmdgIGlzIGNhbGxlZCwgYnkgYWxpZ25pbmcgdGhlIGBhZGRyYCBhcmd1bWVudCB0byB0aGUgcGFnZSBib3VuZGFyeS5cblxuTm93LCBsZXQncyBjaGVjayB0aGUgZnV6emluZyBjcml0ZXJpYS4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOiBDb3JlIFN1YnN5c3RlbXM6IEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlwiXG5cbkJpbmdvLiBUaGlzIGNsZWFybHkgbW9kaWZpZXMgYG1tL2RhbW9uL29wcy1jb21tb24uY2AuICoqV29ydGhGdXp6aW5nIGlzIHRydWUuKiogSSBkb24ndCBzZWUgYW55IGNhdmVhdHMgdGhlcmUuIEl0J3MgaW4gYSBjb3JlIHN1YnN5c3RlbS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhvc2UgRm9jdXNTeW1ib2xzLiBXaGljaCBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGltcGFjdGVkIG9yIGV4ZXJjaXNlIHRoZSBtb2RpZmllZCBjb2RlPyBPYnZpb3VzbHksIGBkYW1vbl9wdGVwX21rb2xkYCBpcyB0aGUgbWFpbiB0YXJnZXQuIEl0cyBjYWxsZXJzIGFuZCByZWxhdGVkIG9wZXJhdGlvbnMgYXJlOiBgZGFtb25fZm9saW9fbWtvbGRfb25lYCwgYGRhbW9uX21rb2xkX3BtZF9lbnRyeWAsIGBkYW1vc192YV9maWx0ZXJfeW91bmdfbWF0Y2hgLCBhbmQgYGRhbW9uX3BhX21rb2xkYCBvciB0aGUgZXF1aXZhbGVudCBmb3IgcGh5c2ljYWwgYWRkcmVzc2VzLlxuXG5UaW1lIHRvIGRvIGEgdGhvcm91Z2ggY2hlY2sgb2YgYWxsIGNhbGxlcnMgb2YgYGRhbW9uX3B0ZXBfbWtvbGRgIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gVGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDoxOS43MTU0MjI0ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDAyMDk0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcHRlcF9ta29sZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9vcHMtY29tbW9uLmM9MjQ9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDEtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjQyOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00My17XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTY0PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3MS1cXHRcXHRpZiAocHZtdy5wdGUpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3MjpcXHRcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzMtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTg9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMDp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTExLXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjU4PXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjc4LVxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL3ZhZGRyLmM6Mjc5OlxcdGRhbW9uX3B0ZXBfbWtvbGQocHRlLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMjgwLW91dDpcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NTEzPXN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTUyNy1cXHRpZiAoeW91bmcgXFx1MDAyNlxcdTAwMjYgcHRlcClcXG5tbS9kYW1vbi92YWRkci5jOjUyODpcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB0ZXAsIHZtYSwgYWRkcik7XFxubW0vZGFtb24vdmFkZHIuYy01MjktXFx0ZWxzZSBpZiAoeW91bmcgXFx1MDAyNlxcdTAwMjYgcG1kcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MzQ6MjEuMzU1NjM3NTIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODY5NzM1ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgRGVwZW5kZW5jeSBDaGFpbjogYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGBkYW1vbl9mb2xpb19ta29sZF9vbmVgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbW1lZGlhdGVseSB0cmFjZSBpdHMgY2FsbCBncmFwaC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBJcyBpdCB1c2VkIGRpcmVjdGx5IHdpdGhpbiBhIGNyaXRpY2FsIHBhdGgsIG9yIGlzIGl0IHNldmVyYWwgbGF5ZXJzIGRlZXAgaW4gYSB1dGlsaXR5IG1vZHVsZT8gQXJlIHRoZXJlIG11bHRpcGxlIGNhbGwgc2l0ZXMsIGFuZCBpZiBzbywgYXJlIHRoZXkgdXNlZCB1bmRlciBzaW1pbGFyIGNvbmRpdGlvbnM/IFRoZSBjYWxsaW5nIGNvbnRleHQgaXMgcGFyYW1vdW50LCBJIG5lZWQgdG8ga25vdyB3aHkgYW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZXZlbiBiZWluZyBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGltbWVkaWF0ZWx5IHJldmVhbCB0aGUgcG90ZW50aWFsIHJpc2suIEJhc2VkIG9uIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkIEknbGwgYmUgYWJsZSB0byBkZWNpZGUgdGhlIGJlc3QgcGF0aCB0byBhZGRyZXNzIGFueSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNDEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDoyNS4yNDI2MTQwNjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTE2NjgyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fZm9saW9fbWtvbGRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vb3BzLWNvbW1vbi5jPTE1NT1pbnQgZGFtb25fY29sZF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE2My1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTY0OnN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjUtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3OC1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTc5OnZvaWQgZGFtb25fZm9saW9fbWtvbGQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgwLXtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTgxLVxcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE4MjpcXHRcXHQucm1hcF9vbmUgPSBkYW1vbl9mb2xpb19ta29sZF9vbmUsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE4My1cXHRcXHQuYW5vbl9sb2NrID0gZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTI2Nj1ib29sIGRhbW9zX2ZvbGlvX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjkwLVxcdFxcdGlmIChtYXRjaGVkKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyOTE6XFx0XFx0XFx0ZGFtb25fZm9saW9fbWtvbGQoZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yOTItXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9MTE9dm9pZCBkYW1vbl9wbWRwX21rb2xkKHBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMjp2b2lkIGRhbW9uX2ZvbGlvX21rb2xkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xMy1ib29sIGRhbW9uX2ZvbGlvX3lvdW5nKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0zOD1zdGF0aWMgdm9pZCBkYW1vbl9wYV9ta29sZChwaHlzX2FkZHJfdCBwYWRkcilcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDQtXFxubW0vZGFtb24vcGFkZHIuYzo0NTpcXHRkYW1vbl9mb2xpb19ta29sZChmb2xpbyk7XFxubW0vZGFtb24vcGFkZHIuYy00Ni1cXHRmb2xpb19wdXQoZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDoyNi42OTQyODkxMDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgxMzg1MjY1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIERBTU9OIENvbmZpZ3VyYXRpb24gYW5kIFN5bWJvbHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gaWRlbnRpZnlpbmcgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIERBTU9OIHN1YnN5c3RlbS4gSSBzZWUgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb24gbmFtZXMgZmxhZ2dlZDogYGRhbW9uX3B0ZXBfbWtvbGRgLCBgZGFtb25fZm9saW9fbWtvbGRfb25lYCwgYGRhbW9uX2ZvbGlvX21rb2xkYCwgYGRhbW9uX21rb2xkX3BtZF9lbnRyeWAsIGFuZCBgZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gZm9yIHRoaXMgcGFydGljdWxhciBhbmFseXNpcy5cblxuTmV4dCwgSSdtIGNoZWNraW5nIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIERBTU9OIGFuZCB0aGUgY29yZSBjb2RlIHdpdGhpbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYC4gSSd2ZSBjb25maXJtZWQgdGhhdCBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1NZU0ZTYCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIEknbSBjb25maXJtaW5nIGEga25vd24gcXVhbnRpdHk7IGBQQUdFX0FMSUdOX0RPV05gIGlzIHN0YW5kYXJkLiBJJ3ZlIG5vdGVkIHRoYXQgaXQncyBiZWluZyB1c2VkIHdpdGhpbiBgZGFtb25fcHRlcF9ta29sZGAgaW4gY29uanVuY3Rpb24gd2l0aCBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZ2AsIHdoaWNoIGlzIGV4cGVjdGVkIGJlaGF2aW9yLlxuXG5JJ20gZG9pbmcgYSBkb3VibGUtY2hlY2sgb24gdGhvc2UgY29uZmlndXJhdGlvbnMgYWdhaW4sIHN0cmlwcGluZyB0aGUgXCJDT05GSUdfXCIgcHJlZml4IHRvIGdldCB0aGUgYmFyZSBrZXJuZWwgY29uZmlnIG5hbWVzOiBcIkRBTU9OXCIsIFwiREFNT05fVkFERFJcIiwgXCJEQU1PTl9QQUREUlwiLCBhbmQgXCJEQU1PTl9TWVNGU1wiLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNvbnNpc3RlbmN5IHdoZW4gSSBzZXQgdGhlIHJlc3VsdHMuXG5cbkZpbmFsbHksIEknbSByZXZpZXdpbmcgdGhlIHJlcXVpcmVkIGZvcm1hdCBmb3IgXCJzZXQtcmVzdWx0cy5cIiBJIG5lZWQgdG8gcHJlc2VudCB0aGlzIGluZm9ybWF0aW9uIGNvbmNpc2VseSwgaW5jbHVkaW5nIHRoZSBFbmFibGVDb25maWdzIGFzIGEgbGlzdCBvZiBzdHJpbmdzIChubyBDT05GSUdfIHByZWZpeCksIHRoZSBGb2N1c1N5bWJvbHMsIGEgYnJpZWYgZXhwbGFuYXRpb24gb2YgbXkgcmVhc29uaW5nLCBhbmQgYSBib29sZWFuIGZvciBgV29ydGhGdXp6aW5nYC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NTUsIk91dHB1dFRva2VucyI6MjA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjM0OjMwLjUwODE0NTE0NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MDQ5NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3B0ZXBfbWtvbGRcIixcbiAgICBcImRhbW9uX2ZvbGlvX21rb2xkX29uZVwiLFxuICAgIFwiZGFtb25fZm9saW9fbWtvbGRcIixcbiAgICBcImRhbW9uX21rb2xkX3BtZF9lbnRyeVwiLFxuICAgIFwiZGFtb3NfdmFfZmlsdGVyX3lvdW5nX21hdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGFtb25fcHRlcF9ta29sZCgpIGluIG1tL2RhbW9uL29wcy1jb21tb24uYyB0byBhbGlnbiB0aGUgdmlydHVhbCBhZGRyZXNzIHBhc3NlZCB0byBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCkgdXNpbmcgUEFHRV9BTElHTl9ET1dOKCkuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBsb2dpYyBpbiBEQU1PTiwgd2hpY2ggaXMgY29udHJvbGxhYmxlIHZpYSBzeXNmcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzIGFuZCBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgb2NjdXIgZHVyaW5nIHBhZ2UgdGFibGUgd2Fsa3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9wdGVwX21rb2xkXCIsXG4gICAgXCJkYW1vbl9mb2xpb19ta29sZF9vbmVcIixcbiAgICBcImRhbW9uX2ZvbGlvX21rb2xkXCIsXG4gICAgXCJkYW1vbl9ta29sZF9wbWRfZW50cnlcIixcbiAgICBcImRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRhbW9uX3B0ZXBfbWtvbGQoKSBpbiBtbS9kYW1vbi9vcHMtY29tbW9uLmMgdG8gYWxpZ24gdGhlIHZpcnR1YWwgYWRkcmVzcyBwYXNzZWQgdG8gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIHVzaW5nIFBBR0VfQUxJR05fRE9XTigpLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IG1vbml0b3JpbmcgbG9naWMgaW4gREFNT04sIHdoaWNoIGlzIGNvbnRyb2xsYWJsZSB2aWEgc3lzZnMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBhbmQgZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGR1cmluZyBwYWdlIHRhYmxlIHdhbGtzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDozMC41OTIyMDE0MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwMjA1MTQ5OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDozMC41OTI2MTc2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5MDIwMDk0ODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGBkYW1vbl9wdGVwX21rb2xkKClgIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIHRvIHBhc3MgYFBBR0VfQUxJR05fRE9XTihhZGRyKWAgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAgaW5zdGVhZCBvZiB0aGUgcmF3IGBhZGRyYCwgZW5zdXJpbmcgYXJjaGl0ZWN0dXJhbCBjb21wYXRpYmlsaXR5IHdoZXJlIHBhZ2UtYWxpZ25lZCBhZGRyZXNzZXMgYXJlIGV4cGVjdGVkLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIGFueSBuZXcgbWVtb3J5LCBpbnRyb2R1Y2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBhbHRlciBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIGNvcHkgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWJlNzk0MzE4YTg2M2ZjYWYxMThkMGU5Mzg0OTE0ZDEwZDQxM2IzOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDk6MzQ6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9vcHMtY29tbW9uLmMgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbmluZGV4IDdhMmU0MGJjN2JhZWQuLjcyMTljNjA4YjE5NTIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuQEAgLTYxLDcgKzYxLDEyIEBAIHZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyXG4gXHQgKiBkZXZpY2UgYXNwZWN0cy5cbiBcdCAqL1xuIFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSlcbi1cdFx0eW91bmcgfD0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFkZHIsIHB0ZSk7XG4rXHRcdC8qXG4rXHRcdCAqIEFyY2ggaW1wbGVtZW50YXRpb24gb2YgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpIG1heVxuK1x0XHQgKiByZXF1aXJlIGFsaWduZWQgQGFkZHJcbitcdFx0ICovXG4rXHRcdHlvdW5nIHw9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBQQUdFX0FMSUdOX0RPV04oYWRkciksXG4rXHRcdFx0XHRwdGUpO1xuIFx0eW91bmcgfD0gbW11X25vdGlmaWVyX2NsZWFyX3lvdW5nKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgYWRkciArIFBBR0VfU0laRSk7XG4gXHRpZiAoeW91bmcpXG4gXHRcdGZvbGlvX3NldF95b3VuZyhmb2xpbyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDozMC41OTI2MTg1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExODI1ODExMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiBmb3IgYG1tL2RhbW9uL29wcy1jb21tb24uY2AqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIGEgcmVxdWVzdCBjYW1lIGluIHJlZ2FyZGluZyBhIHBhdGNoIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIGFuZCB3aGV0aGVyIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyByZXF1ZXN0IGlzIHNhZmUuIExldCdzIGNsYXNzaWZ5IGl0OiBpdCdzIGEgZGVmZW5zaXZlIHNlY3VyaXR5IGFzc2Vzc21lbnQgYW5kIGtlcm5lbCBzYW5pdGl6ZXIgZXZhbHVhdGlvbi4gTm8gbWFsaWNpb3VzIGludGVudCwgbm8gZXhwbG9pdCBnZW5lcmF0aW9uLCBub3RoaW5nIG9mZmVuc2l2ZS4gU2VlbXMgcGVyZmVjdGx5IGZpbmUgdG8gcHJvY2VlZC5cblxuTm93LCB0byB0aGUgcGF0Y2ggaXRzZWxmLiBJJ20gc2VlaW5nIGEgZGlmZjogSXQncyBtb2RpZnlpbmcgaG93IHRoZSBgeW91bmdgIGJpdCBpcyBoYW5kbGVkIGluIHRoZSBwYWdlIHRhYmxlIGVudHJ5LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkYW1vbl9wdGVwX21rb2xkYC4gVGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBgUEFHRV9BTElHTl9ET1dOYCB0byB0aGUgYWRkcmVzcyBwYXNzZWQgdG8gYHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoKWAuIFRoZSBjb21tZW50IHN1Z2dlc3RzIHRoYXQgc29tZSBhcmNoaXRlY3R1cmVzIG1pZ2h0IHJlcXVpcmUgdGhlIGFkZHJlc3MgdG8gYmUgYWxpZ25lZC4gVGhpcyBpcyBjcnVjaWFsOiBhbiB1bmFsaWduZWQgYWNjZXNzIGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24sIHNvIHRoZXJlJ3MgYSByZWFzb24gZm9yIGNvbmNlcm4uIFxuXG5UbyBnYWluIGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nLCBJJ2xsIG5vdyB0YWtlIGEgbG9vayBhdCBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCB0byBzZWUgaG93IGBkYW1vbl9wdGVwX21rb2xkYCBmaXRzIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIERBTU9OLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlIGNoYW5nZS4gVGhpcyBjaGFuZ2UsIHdoaWxlIHNlZW1pbmdseSBzbWFsbCwgdG91Y2hlcyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24uIElmIHRoZXJlIGlzIGEgYnVnLCBpdCBjb3VsZCBsZWFkIHRvIHNpZ25pZmljYW50IHByb2JsZW1zLiBJIHdpbGwgaW52ZXN0aWdhdGUgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjM0OjQyLjQxODQzMjI4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9vcHMtY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0fVxcbiAgNDE6XFx0XFxuICA0MjpcXHR2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gIDQzOlxcdHtcXG4gIDQ0OlxcdFxcdHB0ZV90IHB0ZXZhbCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuICA0NTpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiAgNDY6XFx0XFx0Ym9vbCB5b3VuZyA9IGZhbHNlO1xcbiAgNDc6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuICA0ODpcXHRcXG4gIDQ5OlxcdFxcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpXFxuICA1MDpcXHRcXHRcXHRwZm4gPSBwdGVfcGZuKHB0ZXZhbCk7XFxuICA1MTpcXHRcXHRlbHNlXFxuICA1MjpcXHRcXHRcXHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oc29mdGxlYWZfZnJvbV9wdGUocHRldmFsKSk7XFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKHBmbik7XFxuICA1NTpcXHRcXHRpZiAoIWZvbGlvKVxcbiAgNTY6XFx0XFx0XFx0cmV0dXJuO1xcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHQvKlxcbiAgNTk6XFx0XFx0ICogUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXQgYWN0dWFsbHkgbWFwIHBhZ2VzXFxuICA2MDpcXHRcXHQgKiBhcmUgXFxcIm9sZFxcXCIgZnJvbSBhIENQVSBwZXJzcGVjdGl2ZS4gVGhlIE1NVSBub3RpZmllciB0YWtlcyBjYXJlIG9mIGFueVxcbiAgNjE6XFx0XFx0ICogZGV2aWNlIGFzcGVjdHMuXFxuICA2MjpcXHRcXHQgKi9cXG4gIDYzOlxcdFxcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpXFxuICA2NDpcXHRcXHRcXHQvKlxcbiAgNjU6XFx0XFx0XFx0ICogQXJjaCBpbXBsZW1lbnRhdGlvbiBvZiBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCkgbWF5XFxuICA2NjpcXHRcXHRcXHQgKiByZXF1aXJlIGFsaWduZWQgQGFkZHJcXG4gIDY3OlxcdFxcdFxcdCAqL1xcbiAgNjg6XFx0XFx0XFx0eW91bmcgfD0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIFBBR0VfQUxJR05fRE9XTihhZGRyKSxcXG4gIDY5OlxcdFxcdFxcdFxcdFxcdHB0ZSk7XFxuICA3MDpcXHRcXHR5b3VuZyB8PSBtbXVfbm90aWZpZXJfY2xlYXJfeW91bmcodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgYWRkciArIFBBR0VfU0laRSk7XFxuICA3MTpcXHRcXHRpZiAoeW91bmcpXFxuICA3MjpcXHRcXHRcXHRmb2xpb19zZXRfeW91bmcoZm9saW8pO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRmb2xpb19zZXRfaWRsZShmb2xpbyk7XFxuICA3NTpcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiAgNzY6XFx0fVxcbiAgNzc6XFx0XFxuICA3ODpcXHR2b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gIDc5OlxcdHtcXG4gIDgwOlxcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gIDgxOlxcdFxcdHBtZF90IHBtZHZhbCA9IHBtZHBfZ2V0KHBtZCk7XFxuICA4MjpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiAgODM6XFx0XFx0Ym9vbCB5b3VuZyA9IGZhbHNlO1xcbiAgODQ6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdGlmIChsaWtlbHkocG1kX3ByZXNlbnQocG1kdmFsKSkpXFxuICA4NzpcXHRcXHRcXHRwZm4gPSBwbWRfcGZuKHBtZHZhbCk7XFxuICA4ODpcXHRcXHRlbHNlXFxuICA4OTpcXHRcXHRcXHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oc29mdGxlYWZfZnJvbV9wbWQocG1kdmFsKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjM0OjQyLjQxODUwOTk3OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzg5MTA0MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgQ2FsbGVyJ3MgTGluZWFnZTogYGRhbW9uX3B0ZXBfbWtvbGRgKipcblxuQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2sgZG93biB3aG8ncyBjYWxsaW5nIGBkYW1vbl9wdGVwX21rb2xkYC4gVGhhdCBmdW5jdGlvbiBuYW1lIGl0c2VsZiBmZWVscyBpbXBvcnRhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGxpa2VseSAqZG9lcyog4oCTIHB0ZXAgaW1wbGllcyBwYWdlIHRhYmxlIGVudHJ5IG1hbmlwdWxhdGlvbiwgYW5kIHRoZSBcIm1rb2xkXCIgc3Ryb25nbHkgc3VnZ2VzdHMgc29tZXRoaW5nIHRvIGRvIHdpdGggbWFya2luZyBvciBoYW5kbGluZyBvbGRlciBQVEUgZW50cmllcywgcG9zc2libHkgZm9yIGFnaW5nIG9yIGV2aWN0aW9uIHN0cmF0ZWdpZXMuIEJ1dCBJIGNhbid0IGp1bXAgdG8gY29uY2x1c2lvbnMuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gVGhhdCBnaXZlcyBtZSB0aGUgaW1tZWRpYXRlIGFuZCBuZWNlc3NhcnkgY29udGV4dC4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgZGVwZW5kZW50IG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjczLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwOTozNDo0NC4yMDc2MTc3NjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODIyNjA5NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcHRlcF9ta29sZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9vcHMtY29tbW9uLmM9MjQ9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtNDEtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjQyOnZvaWQgZGFtb25fcHRlcF9ta29sZChwdGVfdCAqcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy00My17XFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTY0PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE3MS1cXHRcXHRpZiAocHZtdy5wdGUpXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE3MjpcXHRcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB2bXcucHRlLCB2bWEsIGFkZHIpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNzMtXFx0XFx0ZWxzZVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTg9c3RydWN0IGZvbGlvICpkYW1vbl9nZXRfZm9saW8odW5zaWduZWQgbG9uZyBwZm4pO1xcbm1tL2RhbW9uL29wcy1jb21tb24uaC05LVxcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxMDp2b2lkIGRhbW9uX3B0ZXBfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcik7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5oLTExLXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9MjU4PXN0YXRpYyBpbnQgZGFtb25fbWtvbGRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMjc4LVxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL3ZhZGRyLmM6Mjc5OlxcdGRhbW9uX3B0ZXBfbWtvbGQocHRlLCB3YWxrLVxcdTAwM2V2bWEsIGFkZHIpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMjgwLW91dDpcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9NTEzPXN0YXRpYyBib29sIGRhbW9zX3ZhX2ZpbHRlcl95b3VuZ19tYXRjaChzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTUyNy1cXHRpZiAoeW91bmcgXFx1MDAyNlxcdTAwMjYgcHRlcClcXG5tbS9kYW1vbi92YWRkci5jOjUyODpcXHRcXHRkYW1vbl9wdGVwX21rb2xkKHB0ZXAsIHZtYSwgYWRkcik7XFxubW0vZGFtb24vdmFkZHIuYy01MjktXFx0ZWxzZSBpZiAoeW91bmcgXFx1MDAyNlxcdTAwMjYgcG1kcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDk6MzQ6NDUuNjg5ODg0Mjg3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MjI4MDgxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHRoZSBgZGFtb25fcHRlcF9ta29sZCgpYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyB0aGUgY2FsbCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYC4gVGhlIGNoYW5nZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIG5vdyBwYXNzaW5nIGBQQUdFX0FMSUdOX0RPV04oYWRkcilgIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGBhZGRyYCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYC4gVGhlIGp1c3RpZmljYXRpb24sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCBjZXJ0YWluIGFyY2hpdGVjdHVyZXMgbWlnaHQgKnJlcXVpcmUqIHRoaXMgcGFnZSBhbGlnbm1lbnQgZm9yIGBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKClgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gTWFrZXMgc2Vuc2UuIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBxdWlya3MgYXJlIGFsd2F5cyBmdW4uXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDogRG9lcyB0aGlzIGhhdmUgYW55IG9mIHRoZSBjb21tb24gcGl0ZmFsbHM/XG5cbjEuICBEb2VzIHRoaXMgdG91Y2ggb3IgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8gTm8sIG5vdCBhdCBhbGwuXG4yLiAgQW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwb2ludGVycywgb3IgYnVmZmVycyBpbnRyb2R1Y2VkPyBOb3BlLCBub3RoaW5nIGxpa2UgdGhhdC5cbjMuICBBcmUgdGhlcmUgYW55IGNoYW5nZXMgdG8gYnJhbmNoIGNvbmRpdGlvbnMgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uXG40LiAgSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGFsbG9jYXRlZCBvciBhbHRlcmVkIGluIGl0cyBpbml0aWFsaXphdGlvbj8gTmVnYXRpdmUuXG41LiAgRG9lcyB0aGlzIGNyZWF0ZSBhbnkgcmlzayBvZiByZWFkaW5nIG9yIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXJzcGFjZT8gTm8sIGRlZmluaXRlbHkgbm90LlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIHdoaWNoIGFwcGVhcnMgdG8gYmUgcHVyZWx5IGFuIGFsaWdubWVudCBhZGp1c3RtZW50IHRvIGFuIGV4aXN0aW5nIHBhcmFtZXRlciwgSSBuZWVkIHRvIGNvbnNpZGVyIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikuIEtNU0FOIGlzIGFsbCBhYm91dCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYW5kIGluZm9ybWF0aW9uIGxlYWtzLiBIb3dldmVyLCB0aGlzIHBhdGNoIGlzIGxpdGVyYWxseSBqdXN0IGFuIGFsaWdubWVudCBjaGFuZ2UuIFdlJ3JlIG5vdCByZWFkaW5nLCB3cml0aW5nLCBhbGxvY2F0aW5nLCBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBnb2luZyB0byBoYW5kbGUgdGhlIGdlbmVyYWwgbWVtb3J5IHNhZmV0eSBjb25jZXJucywgYnV0IGhlcmUgdGhlcmUncyBub3QgZXZlbiBhIGhpbnQgb2YgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJ20gY29uZmlkZW50IGluIHRoYXQgYXNzZXNzbWVudC4gQWxyaWdodCwgdGltZSB0byBkb3VibGUtY2hlY2sgZXZlcnl0aGluZyBvbmUgbGFzdCB0aW1lLiBBbGwgYXNwZWN0cyBjb3ZlcmVkLCBzbyBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MDIsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA5OjM0OjQ5LjYxMjY5NDk2M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBgZGFtb25fcHRlcF9ta29sZCgpYCBpbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCB0byBwYXNzIGBQQUdFX0FMSUdOX0RPV04oYWRkcilgIHRvIGBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKClgIGluc3RlYWQgb2YgdGhlIHJhdyBgYWRkcmAsIGVuc3VyaW5nIGFyY2hpdGVjdHVyYWwgY29tcGF0aWJpbGl0eSB3aGVyZSBwYWdlLWFsaWduZWQgYWRkcmVzc2VzIGFyZSBleHBlY3RlZC5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBhbnkgbmV3IG1lbW9yeSwgaW50cm9kdWNlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgYWx0ZXIgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBvciBjb3B5IGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIGRldGVjdGlvbi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYGRhbW9uX3B0ZXBfbWtvbGQoKWAgaW4gYG1tL2RhbW9uL29wcy1jb21tb24uY2AgdG8gcGFzcyBgUEFHRV9BTElHTl9ET1dOKGFkZHIpYCB0byBgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygpYCBpbnN0ZWFkIG9mIHRoZSByYXcgYGFkZHJgLCBlbnN1cmluZyBhcmNoaXRlY3R1cmFsIGNvbXBhdGliaWxpdHkgd2hlcmUgcGFnZS1hbGlnbmVkIGFkZHJlc3NlcyBhcmUgZXhwZWN0ZWQuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgYW55IG5ldyBtZW1vcnksIGludHJvZHVjZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIGFsdGVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgb3IgY29weSBhbnkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBkZXRlY3Rpb24uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsjzdx[1] Phase: Succeeded StartedAt: 2026-09-05 09:35:01 +0000 UTC FinishedAt: 2026-09-05 09:35:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 09:35:01 +0000 UTC FinishedAt: 2026-09-05 09:35:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2] Phase: Succeeded StartedAt: 2026-09-05 09:35:01 +0000 UTC FinishedAt: 2026-09-05 13:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:35:01 +0000 UTC FinishedAt: 2026-09-05 13:16:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:35:01 +0000 UTC FinishedAt: 2026-09-05 09:35:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:35:01 +0000 UTC FinishedAt: 2026-09-05 09:35:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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-workflowsjzdx/series-workflowsjzdx-convert-artifact-848092988/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:35:11 +0000 UTC FinishedAt: 2026-09-05 09:53:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:35:11 +0000 UTC FinishedAt: 2026-09-05 09:53:11 +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:*8461c4e1-9bfc-4857-bfc2-2bced551a368,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-workflowsjzdx/series-workflowsjzdx-convert-artifact-848092988/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": "74b604d0-84bd-4fae-a91f-3d5cab04671f", "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-workflowsjzdx/series-workflowsjzdx-build-action-3193008234/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:35:11 +0000 UTC FinishedAt: 2026-09-05 09:53:01 +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:*8461c4e1-9bfc-4857-bfc2-2bced551a368,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-workflowsjzdx/series-workflowsjzdx-convert-artifact-848092988/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": "74b604d0-84bd-4fae-a91f-3d5cab04671f", "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-workflowsjzdx/series-workflowsjzdx-build-action-3193008234/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:53:11 +0000 UTC FinishedAt: 2026-09-05 09:53:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:53:11 +0000 UTC FinishedAt: 2026-09-05 09:53:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:53:11 +0000 UTC FinishedAt: 2026-09-05 09:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:53:11 +0000 UTC FinishedAt: 2026-09-05 09:53:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-workflowsjzdx/series-workflowsjzdx-convert-artifact-1339369339/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:53:21 +0000 UTC FinishedAt: 2026-09-05 09:55:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:53:21 +0000 UTC FinishedAt: 2026-09-05 09:55:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*74b604d0-84bd-4fae-a91f-3d5cab04671f,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-workflowsjzdx/series-workflowsjzdx-build-action-3193008234/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-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:55:15 +0000 UTC FinishedAt: 2026-09-05 09:55:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:55:15 +0000 UTC FinishedAt: 2026-09-05 09:55:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:55:15 +0000 UTC FinishedAt: 2026-09-05 10:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:55:15 +0000 UTC FinishedAt: 2026-09-05 10:12:06 +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:*8461c4e1-9bfc-4857-bfc2-2bced551a368,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-workflowsjzdx/series-workflowsjzdx-convert-artifact-1339369339/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": "6d48d24f-6d7f-4247-9aa8-d8affde3c7df", "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-workflowsjzdx/series-workflowsjzdx-build-action-3121847199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 09:55:15 +0000 UTC FinishedAt: 2026-09-05 10:11:56 +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:*8461c4e1-9bfc-4857-bfc2-2bced551a368,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-workflowsjzdx/series-workflowsjzdx-convert-artifact-1339369339/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": "6d48d24f-6d7f-4247-9aa8-d8affde3c7df", "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-workflowsjzdx/series-workflowsjzdx-build-action-3121847199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 10:12:06 +0000 UTC FinishedAt: 2026-09-05 10:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 10:12:06 +0000 UTC FinishedAt: 2026-09-05 10:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 10:12:06 +0000 UTC FinishedAt: 2026-09-05 10:14:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 10:12:06 +0000 UTC FinishedAt: 2026-09-05 10:13:54 +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:*6d48d24f-6d7f-4247-9aa8-d8affde3c7df,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-workflowsjzdx/series-workflowsjzdx-build-action-3121847199/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-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 10:14:04 +0000 UTC FinishedAt: 2026-09-05 13:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 10:14:04 +0000 UTC FinishedAt: 2026-09-05 13:16:10 +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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"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:*74b604d0-84bd-4fae-a91f-3d5cab04671f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6d48d24f-6d7f-4247-9aa8-d8affde3c7df,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-workflowsjzdx/series-workflowsjzdx-build-action-3193008234/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-workflowsjzdx/series-workflowsjzdx-build-action-3121847199/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 10:14:04 +0000 UTC FinishedAt: 2026-09-05 10:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 10:14:04 +0000 UTC FinishedAt: 2026-09-05 10:14:08 +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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"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-workflowsjzdx/series-workflowsjzdx-convert-artifact-3591285620/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 10:14:04 +0000 UTC FinishedAt: 2026-09-05 10:14:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 10:14:04 +0000 UTC FinishedAt: 2026-09-05 10:14:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 10:14:04 +0000 UTC FinishedAt: 2026-09-05 10:14:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 10:14:14 +0000 UTC FinishedAt: 2026-09-05 13:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjzdx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_ptep_mkold","damon_folio_mkold_one","damon_folio_mkold","damon_mkold_pmd_entry","damos_va_filter_young_match"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e81d06906b1675bcfdf559fada6725466c7efcc5","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"271e24aa-bca2-47d4-be7b-4a6c82c69d3a","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-09-05 10:14:14 +0000 UTC FinishedAt: 2026-09-05 13:16:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*74b604d0-84bd-4fae-a91f-3d5cab04671f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6d48d24f-6d7f-4247-9aa8-d8affde3c7df,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-workflowsjzdx/series-workflowsjzdx-build-action-3193008234/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-workflowsjzdx/series-workflowsjzdx-build-action-3121847199/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-workflowsjzdx/series-workflowsjzdx-convert-artifact-3591285620/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,}