Name: series-workflow4jgsp Phase: Succeeded StartedAt: 2026-08-10 07:55:05 +0000 UTC FinishedAt: 2026-08-10 12:11:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[0] Phase: Succeeded StartedAt: 2026-08-10 07:55:05 +0000 UTC FinishedAt: 2026-08-10 08:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 07:55:05 +0000 UTC FinishedAt: 2026-08-10 08:26:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6b8c8af514d739d0335f5579b585e02babe8a727", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6b8c8af514d739d0335f5579b585e02babe8a727", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "3e2ee030-232f-4d1b-937a-2f6362225dd6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_css_alloc" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jc3NfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBhc3NpZ25tZW50IHRvIGBtZW1jZy1cdTAwM2VtZW1zdy50cmFja19mYWlsY250YCBkdXJpbmcgbWVtY2cgYWxsb2NhdGlvbi4gVGhlIGBtZW1jZ2Agc3RydWN0dXJlIGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoaXMgaXMgYSBsb2dpY2FsIGZpeCBmb3IgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZpb3IsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgYnVncyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmFibGVzIHRyYWNraW5nIG9mIGZhaWxjbnQgZm9yIHRoZSBtZW1zdyAobWVtb3J5JiM0Mztzd2FwKSBjb3VudGVyIGluIG1lbWNnIHYxIGJ5IGluaXRpYWxpemluZyBtZW1zdy50cmFja19mYWlsY250IHRvICFtZW1jZ19vbl9kZmwgaW4gbWVtX2Nncm91cF9jc3NfYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OWYxZmY2NDI4MDZiNWI2ZjJmNjZhNTk0OGVjMWJmZjNmY2Y3NDUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDg6MjA6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2OTM5YTRmYmI5OTE0Li40ZmZlNWIzNzMzZDliIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00MjM1LDYgJiM0Mzs0MjM1LDcgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIFx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcbiBcdFx0bWVtY2ctXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuJiM0MztcdFx0bWVtY2ctXHUwMDNlbWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XG4gXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlb29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC1cdTAwM2Vvb21fa2lsbF9kaXNhYmxlKSk7XG4gXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIFx1MDAyNnBhcmVudC1cdTAwM2VrbWVtLCBmYWxzZSk7XG4gXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXRjcG1lbSwgXHUwMDI2cGFyZW50LVx1MDAzZXRjcG1lbSwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuYWJsZXMgdHJhY2tpbmcgb2YgZmFpbGNudCBmb3IgdGhlIG1lbXN3IChtZW1vcnkmIzQzO3N3YXApIGNvdW50ZXIgaW4gbWVtY2cgdjEgYnkgaW5pdGlhbGl6aW5nIG1lbXN3LnRyYWNrX2ZhaWxjbnQgdG8gIW1lbWNnX29uX2RmbCBpbiBtZW1fY2dyb3VwX2Nzc19hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgbGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc5ZjFmZjY0MjgwNmI1YjZmMmY2NmE1OTQ4ZWMxYmZmM2ZjZjc0NTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwODoyMDozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA2OTM5YTRmYmI5OTE0Li40ZmZlNWIzNzMzZDliIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00MjM1LDYgJiM0Mzs0MjM1LDcgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpCiAjaWZkZWYgQ09ORklHX01FTUNHX1YxCiAJCVdSSVRFX09OQ0UobWVtY2ctJmd0O3N3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTsKIAkJbWVtY2ctJmd0O21lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDsKJiM0MzsJCW1lbWNnLSZndDttZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDsKIAkJV1JJVEVfT05DRShtZW1jZy0mZ3Q7b29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC0mZ3Q7b29tX2tpbGxfZGlzYWJsZSkpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmYW1wO21lbWNnLSZndDtrbWVtLCAmYW1wO3BhcmVudC0mZ3Q7a21lbSwgZmFsc2UpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmYW1wO21lbWNnLSZndDt0Y3BtZW0sICZhbXA7cGFyZW50LSZndDt0Y3BtZW0sIGZhbHNlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqUGF0Y2ggQW5hbHlzaXM6IGBtbS9tZW1jb250cm9sLmNgIE1vZGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdG91Y2hpbmcgYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYSBjaGFuZ2Ugd2l0aGluIHRoZSBgbWVtX2Nncm91cF9jc3NfYWxsb2MoKWAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGZ1bmN0aW9uIOKAkyBpdCYjMzk7cyBjcnVjaWFsIGZvciBhbGxvY2F0aW5nIHRoZSBjb250cm9sIHN0cnVjdHVyZXMgZm9yIG1lbW9yeSBjZ3JvdXBzLiBUaGUgcGF0Y2gsIHdpdGhpbiB0aGUgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgIGJsb2NrLCBzZXRzIGBtZW1jZy0mZ3Q7bWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7YC4gVGhpcyBsaW5lIGlzIGtleSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZWNpZGluZyB3aGV0aGVyIHRvIHRyYWNrIG1lbW9yeSBzd2FwIGZhaWx1cmUgY291bnRzLCBiYXNlZCBvbiBpZiB0aGUgbWVtb3J5IGNncm91cCBpcyBvbiB0aGUgZGVmYXVsdCBmYWlsdXJlLWxldmVsLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGBtZW1fY2dyb3VwX2Nzc19hbGxvY2AgaW4gdGhlIGNvZGUgaXRzZWxmLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoZXJlIHRoaXMgYXNzaWdubWVudCBmaXRzIGludG8gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBjb25kaXRpb25hbGx5IHRyYWNraW5nIGBmYWlsY250YCBiYXNlZCBvbiB0aGF0IGAhbWVtY2dfb25fZGZsYCBjb25kaXRpb24/IEkmIzM5O20gd29uZGVyaW5nIHdoYXQgYG1lbWNnX29uX2RmbGAgcmVwcmVzZW50cy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0IG1pZ2h0IGJlIGFib3V0IHByaW9yaXRpemluZyB0cmFja2luZyBmb3Igbm9uLWRlZmF1bHQgY29uZmlndXJhdGlvbnMgb3IgcGVyaGFwcyBsZWdhY3kgaW1wbGVtZW50YXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgcHVycG9zZS4gVGhlIHdob2xlIHBvaW50IGhlcmUgaXMsIGNsZWFybHksIGFib3V0IG1vbml0b3JpbmcgZmFpbHVyZXMgaW4gbWVtb3J5LXN3YXBwaW5nIG9wZXJhdGlvbnMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiAqd2hlbiogdGhhdCB0cmFja2luZyBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY3NzX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00MjEyPXN0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqIF9fcmVmXG5tbS9tZW1jb250cm9sLmM6NDIxMzptZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbm1tL21lbWNvbnRyb2wuYy00MjE0LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE1ND1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG5tbS9tZW1jb250cm9sLmM6NTE1NTpcdC5jc3NfYWxsb2MgPSBtZW1fY2dyb3VwX2Nzc19hbGxvYyxcbm1tL21lbWNvbnRyb2wuYy01MTU2LVx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENncm91cCBBbGxvY2F0aW9uIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLCB3aGljaCBJIGtub3cgaXMgdGhlIGNvcmUgYWxsb2NhdGlvbiBmdW5jdGlvbiBmb3IgbWVtb3J5IGNncm91cHMuIFRoZSBjaGFuZ2UgSSYjMzk7bSBleGFtaW5pbmcgaW5pdGlhbGl6ZXMgYG1lbXN3LnRyYWNrX2ZhaWxjbnRgIHRvIGAhbWVtY2dfb25fZGZsYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBmdW5jdGlvbmFsbHkgc3BlYWtpbmcuIEkgc2VlIHdoYXQmIzM5O3MgYmVpbmcgZG9uZS4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpcyB0aGlzIGB0cmFja19mYWlsY250YCBhY3R1YWxseSAqdXNlZCogYW55d2hlcmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhhdCB2YXJpYWJsZSB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgaGFzIGFueSByZWFsLXdvcmxkIGVmZmVjdC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJhY2tfZmFpbGNudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDIxMz1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIzNi1cdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XG5tbS9tZW1jb250cm9sLmM6NDIzNzpcdFx0bWVtY2ctXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xubW0vbWVtY29udHJvbC5jOjQyMzg6XHRcdG1lbWNnLVx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xubW0vbWVtY29udHJvbC5jLTQyMzktXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlb29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC1cdTAwM2Vvb21fa2lsbF9kaXNhYmxlKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEwMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkRpdmluZyBpbnRvIGBwYWdlX2NvdW50ZXJgIGFuZCBgdHJhY2tfZmFpbGNudGAqKgoKSG1tLCBub3cgdGhhdCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0LCBpc24mIzM5O3QgYHRyYWNrX2ZhaWxjbnRgIGEgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IHBhZ2VfY291bnRlcmA/IEkgYmV0dGVyIGNvbmZpcm0gdGhhdC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIGZvciB0aGF0IHN0cnVjdC4gTG9va3MgbGlrZSBJJiMzOTtsbCBuZWVkIHRvIGdvIHRvIGBpbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oYCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIGRldGFpbHMgcmlnaHQuIEdvdHRhIGJlIHByZWNpc2Ugd2hlbiBkZWFsaW5nIHdpdGggbG93LWxldmVsIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgbGlrZSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYWNrX2ZhaWxjbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg9MTA9c3RydWN0IHBhZ2VfY291bnRlciB7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaC0zNy1cdGJvb2wgcHJvdGVjdGlvbl9zdXBwb3J0O1xuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaDozODpcdGJvb2wgdHJhY2tfZmFpbGNudDtcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgtMzktXHR1bnNpZ25lZCBsb25nIG1pbjtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oPTU1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgtNjItXHRjb3VudGVyLVx1MDAzZXByb3RlY3Rpb25fc3VwcG9ydCA9IHByb3RlY3Rpb25fc3VwcG9ydDtcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg6NjM6XHRjb3VudGVyLVx1MDAzZXRyYWNrX2ZhaWxjbnQgPSBmYWxzZTtcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgtNjQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG1lbXN3IEZhaWxjbnQgVHJhY2tpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZW5hYmxpbmcgdGhlIHRyYWNraW5nIG9mIGBmYWlsY250YCBmb3IgdGhlIGBtZW1zd2AgY291bnRlciB3aXRoaW4gbWVtY2cgdjEuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBlbmhhbmNlbWVudCwgbm8gZG91YnQgYWJvdXQgaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGlzIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGxvb2sgZm9yIHRoZSByZWxldmFudCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gQWgsIGhlcmUgd2UgYXJlLCBpdCYjMzk7cyB1c2luZyBgI2lmZGVmIENPTkZJR19NRU1DR19WMWAuIE15IG5leHQgbW92ZSBpcyB0byBjaGVjayBgbW0vS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgaW5pdC9LY29uZmlnYCB0byBwaW5wb2ludCB0aGUgY29uZmlndXJhdGlvbiBkZWZpbml0aW9uIGZvciBgTUVNQ0dfVjFgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd2lsbCBmaW5kIHRoZSBjcnVjaWFsIGRldGFpbHMgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0dfVjEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwOTM9Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4tLVxuaW5pdC9LY29uZmlnLTEwOTktXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAxLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ29udHJvbCBHcm91cCBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgY3VycmVudCBjb25maWcgaXMgYE1FTUNHX1YxYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCwgcmlnaHQ/IE15IGluaXRpYWwgZm9jdXMgaXMgYWx3YXlzIG9uIHdoYXQmIzM5O3MgZXhwbGljaXRseSAqZW5hYmxlZCouIEJ1dC4uLiBob2xkIG9uIGEgc2Vjb25kLiBJc24mIzM5O3QgdGhlcmUgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGdyb3Vwcz8gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgc2ltcGxlciwgbWF5YmUganVzdCBgTUVNQ0dgPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYSBkaWZmZXJlbmNlIGJldHdlZW4gYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCwgb3IgaWYgb25lIHN1cGVyc2VkZXMgdGhlIG90aGVyLiBLbm93aW5nIGhvdyB0aGVzZSBvcHRpb25zIGludGVyYWN0IGlzIGNydWNpYWwgYmVmb3JlIHByb2NlZWRpbmcuIFRoaXMgZGlmZmVyZW5jZSBjYW4gY2hhbmdlIGhvdyByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBpc29sYXRpb24gd29yayBzaWduaWZpY2FudGx5LiBJIGhhdmUgdG8gbG9vayBpbnRvIHRoaXMgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjc9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzYtXG5pbml0L0tjb25maWc6MTA3Nzpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc4LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDg1LVxuaW5pdC9LY29uZmlnOjEwODY6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDg3LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDkyLVxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5NC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5OS1cbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDEtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI1MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IG9mIE1FTUNHX1YxKioKCk9rYXksIHNvIGBNRU1DR19WMWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgTUVNQ0dgLiBNYWtlcyBzZW5zZSwgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSByZWxhdGlvbnNoaXAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgY2hlY2sgYGluaXQvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgZGVjbGFyZWQgZm9yIGBNRU1DR19WMWAuIEkmIzM5O2xsIGNvbmZpcm0gaG93IGBNRU1DR2AgcmVsYXRlcyB0byBgTUVNQ0dfVjFgIGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBidWlsZC10aW1lIHJlcXVpcmVtZW50cy4gVGhpcyBpbml0aWFsIGxvb2sgc2hvdWxkIHRlbGwgbWUgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgZGVjbGFyZWQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB0d28gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTU6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTY6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTc6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTg6XHRcdGRlZmF1bHQgeVxuMTA5OTpcdFxuMTEwMDpcdGNvbmZpZyBNRU1DR19WMVxuMTEwMTpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTAyOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTAzOlx0XHRkZWZhdWx0IG5cbjExMDQ6XHRcdGhlbHBcbjExMDU6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTA2Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4xMTA3Olx0XHQgIHdoaWNoIGhhdmVuJiMzOTt0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxuMTEwODpcdFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcbjExMDk6XHRcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXG4xMTEwOlx0XG4xMTExOlx0XHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcbjExMTI6XHRcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxuMTExMzpcdFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXG4xMTE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MDQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTWVtb3J5IENvbnRyb2wgR3JvdXAgSW52ZXN0aWdhdGlvbiAtIEluaXRpYWwgRm9jdXMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1lbW9yeSBjb250cm9sIGdyb3VwcyBoZXJlIOKAkyBzcGVjaWZpY2FsbHksIGBNRU1DR2AgYW5kIGBNRU1DR19WMWAuIFNlZW1zIGxpa2UgdGhvc2UgYXJlIHRoZSBwcmltYXJ5IHBsYXllcnMuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzOiB3aGljaCBmdW5jdGlvbiBzaG91bGQgSSBiZSBjb25jZW50cmF0aW5nIG9uPyBUaGlua2luZyBhYm91dCBpdCwgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoaW5ncy4gVGhhdCBzdWdnZXN0cyBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwsIGJlaW5nIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBOb3csIGEgbW9yZSBzcGVjaWZpYyBnb2FsOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9uKHMpIHdoaWNoIHVzZSBgdHJhY2tfZmFpbGNudGAuIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIGZpbmQgdGhhdD8gUHJvYmFibHkgd2l0aGluIHRoZSByZWFsbSBvZiBwYWdlIGNvdW50ZXIgbG9naWMuIEVpdGhlciBgcGFnZV9jb3VudGVyLmNgIG9yIGBwYWdlX2NvdW50ZXIuaGAgc2hvdWxkIGJlIHRoZSBrZXkgZmlsZXMgdG8gaW52ZXN0aWdhdGUgZm9yIGFueSB0cmFjZXMgb2YgYHRyYWNrX2ZhaWxjbnRgIHVzYWdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFja19mYWlsY250JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9jb3VudGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9jb3VudGVyLmM9MTE4PWJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbi0tXG5tbS9wYWdlX2NvdW50ZXIuYy0xMjMtXHRib29sIHByb3RlY3Rpb24gPSB0cmFja19wcm90ZWN0aW9uKGNvdW50ZXIpO1xubW0vcGFnZV9jb3VudGVyLmM6MTI0Olx0Ym9vbCB0cmFja19mYWlsY250ID0gY291bnRlci1cdTAwM2V0cmFja19mYWlsY250O1xubW0vcGFnZV9jb3VudGVyLmMtMTI1LVxuLS1cbm1tL3BhZ2VfY291bnRlci5jLTE0OS1cdFx0XHQgKi9cbm1tL3BhZ2VfY291bnRlci5jOjE1MDpcdFx0XHRpZiAodHJhY2tfZmFpbGNudClcbm1tL3BhZ2VfY291bnRlci5jLTE1MS1cdFx0XHRcdGRhdGFfcmFjZShjLVx1MDAzZWZhaWxjbnQmIzQzOyYjNDM7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI2OAoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBQZXJmb3JtYW5jZSBJbXBhY3Qgb2YgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkgc2VlIGBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZWAgaXMgdXNpbmcgc29tZXRoaW5nLi4uIGFoLCByaWdodC4gVGhhdCBmdW5jdGlvbiBpcyBhIGtub3duIGhvdCBwYXRoLiBUaGF0IHJhaXNlcyBhbiBpbW1lZGlhdGUgcmVkIGZsYWcuIFRoZSBwYXRjaCBpdHNlbGYgaXMgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYC4gTGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyAtIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzIHRoYXQgSSBzaG91bGQga2VlcCBhbiBleWUgb24/IEFscmlnaHQsIGxvb2tzIGxpa2UgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCBpcyBjYWxsZWQgd2hlbiBhIG5ldyBtZW1vcnkgY2dyb3VwIGlzIHNwdW4gdXAuIEdpdmVuIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgcG90ZW50aWFsIGZvciBpdCB0byBiZSBoaXQgYSBsb3QgaW4gY29udGFpbmVyIGVudmlyb25tZW50cywgaXQgc2VlbXMgbGlrZSBhIHZlcnkgd29ydGh3aGlsZSBwbGFjZSB0byBmb2N1cyBteSBlbmVyZ3kuIFdlJiMzOTtsbCBjb25jZW50cmF0ZSBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Nzc19hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmFibGVzIHRyYWNraW5nIG9mIGZhaWxjbnQgZm9yIHRoZSBtZW1zdyAobWVtb3J5JiM0Mztzd2FwKSBjb3VudGVyIGluIG1lbWNnIHYxIGJ5IGluaXRpYWxpemluZyBtZW1zdy50cmFja19mYWlsY250IHRvICFtZW1jZ19vbl9kZmwgaW4gbWVtX2Nncm91cF9jc3NfYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jc3NfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5hYmxlcyB0cmFja2luZyBvZiBmYWlsY250IGZvciB0aGUgbWVtc3cgKG1lbW9yeSYjNDM7c3dhcCkgY291bnRlciBpbiBtZW1jZyB2MSBieSBpbml0aWFsaXppbmcgbWVtc3cudHJhY2tfZmFpbGNudCB0byAhbWVtY2dfb25fZGZsIGluIG1lbV9jZ3JvdXBfY3NzX2FsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBsZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGFzc2lnbm1lbnQgdG8gYG1lbWNnLVx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnRgIGR1cmluZyBtZW1jZyBhbGxvY2F0aW9uLiBUaGUgYG1lbWNnYCBzdHJ1Y3R1cmUgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhpcyBpcyBhIGxvZ2ljYWwgZml4IGZvciBtZW1vcnkgY29udHJvbGxlciBiZWhhdmlvciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWNhbCBidWdzIGhlcmUuIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc5ZjFmZjY0MjgwNmI1YjZmMmY2NmE1OTQ4ZWMxYmZmM2ZjZjc0NTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwODoyMDozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA2OTM5YTRmYmI5OTE0Li40ZmZlNWIzNzMzZDliIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00MjM1LDYgJiM0Mzs0MjM1LDcgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpCiAjaWZkZWYgQ09ORklHX01FTUNHX1YxCiAJCVdSSVRFX09OQ0UobWVtY2ctJmd0O3N3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTsKIAkJbWVtY2ctJmd0O21lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDsKJiM0MzsJCW1lbWNnLSZndDttZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDsKIAkJV1JJVEVfT05DRShtZW1jZy0mZ3Q7b29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC0mZ3Q7b29tX2tpbGxfZGlzYWJsZSkpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmYW1wO21lbWNnLSZndDtrbWVtLCAmYW1wO3BhcmVudC0mZ3Q7a21lbSwgZmFsc2UpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmYW1wO21lbWNnLSZndDt0Y3BtZW0sICZhbXA7cGFyZW50LSZndDt0Y3BtZW0sIGZhbHNlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtY29udHJvbCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGFkZGluZyBvbmUgbGluZSB0byBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpbnNpZGUgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jKClgLCBpdCYjMzk7cyBzZXR0aW5nIGBtZW1jZy0mZ3Q7bWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7YC4gSG1tLCBzbyBpdCYjMzk7cyBpbml0aWFsaXppbmcgdGhpcyBgdHJhY2tfZmFpbGNudGAgZmllbGQgd2l0aGluIGBtZW1jZy0mZ3Q7bWVtc3dgLiBSaWdodCwgaXQmIzM5O3Mgc2V0dGluZyBhIGJvb2xlYW4gZmxhZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS4gSXMgaXQganVzdCBpbml0aWFsaXppbmcgc29tZXRoaW5nIHRoYXQgKm1pZ2h0KiBoYXZlIGJlZW4gdW5pbml0aWFsaXplZCwgb3Igc2ltcGx5IHNldHRpbmcgaXQgdG8gYSBkZWZpbmVkIHZhbHVlPyBJIGJldHRlciBkaWcgaW50byBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIHRvIGJlIGNlcnRhaW4uCgpMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgbWVtY2dgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgc29tZXdoZXJlIGluIHRoYXQgZnVuY3Rpb24sIHByb2JhYmx5IHdpdGggc29tZXRoaW5nIGxpa2UgYGt6YWxsb2NgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiB0aGF0IHdvdWxkIHplcm8taW5pdGlhbGl6ZSB0aGUgbWVtb3J5LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0byBiZSAxMDAlIHN1cmUgd2UgYXJlIGluIGdvb2Qgc2hhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY3NzX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00MjEyPXN0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqIF9fcmVmXG5tbS9tZW1jb250cm9sLmM6NDIxMzptZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbm1tL21lbWNvbnRyb2wuYy00MjE0LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE1ND1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG5tbS9tZW1jb250cm9sLmM6NTE1NTpcdC5jc3NfYWxsb2MgPSBtZW1fY2dyb3VwX2Nzc19hbGxvYyxcbm1tL21lbWNvbnRyb2wuYy01MTU2LVx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCBmdW5jdGlvbi4gSXTigJlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGhhdmUgYW55IGNoYW5jZSB0byB1bmRlcnN0YW5kIHRoZSBkZWVwZXIgcGFydHMgb2YgaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBjcmVhdGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhleSBhcmUgdHJ5aW5nIHRvIGRvIGhlcmUuCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGludG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIxMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjEyOlx0c3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICogX19yZWZcbjQyMTM6XHRtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbjQyMTQ6XHR7XG40MjE1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gbWVtX2Nncm91cF9mcm9tX2NzcyhwYXJlbnRfY3NzKTtcbjQyMTY6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKm9sZF9tZW1jZztcbjQyMTc6XHRcdGJvb2wgbWVtY2dfb25fZGZsID0gY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKTtcbjQyMTg6XHRcbjQyMTk6XHRcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cocGFyZW50KTtcbjQyMjA6XHRcdG1lbWNnID0gbWVtX2Nncm91cF9hbGxvYyhwYXJlbnQpO1xuNDIyMTpcdFx0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xuNDIyMjpcdFx0aWYgKElTX0VSUihtZW1jZykpXG40MjIzOlx0XHRcdHJldHVybiBFUlJfQ0FTVChtZW1jZyk7XG40MjI0Olx0XG40MjI1Olx0XHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTtcbjQyMjY6XHRcdG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTtcbjQyMjc6XHQjaWZkZWYgQ09ORklHX1pTV0FQXG40MjI4Olx0XHRtZW1jZy1cdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xuNDIyOTpcdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2V6c3dhcF93cml0ZWJhY2ssIHRydWUpO1xuNDIzMDpcdCNlbmRpZlxuNDIzMTpcdFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xuNDIzMjpcdFx0aWYgKHBhcmVudCkge1xuNDIzMzpcdFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIFx1MDAyNnBhcmVudC1cdTAwM2VtZW1vcnksIG1lbWNnX29uX2RmbCk7XG40MjM0Olx0XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFx1MDAyNnBhcmVudC1cdTAwM2Vzd2FwLCBmYWxzZSk7XG40MjM1Olx0I2lmZGVmIENPTkZJR19NRU1DR19WMVxuNDIzNjpcdFx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcbjQyMzc6XHRcdFx0bWVtY2ctXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuNDIzODpcdFx0XHRtZW1jZy1cdTAwM2VtZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcbjQyMzk6XHRcdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vvb21fa2lsbF9kaXNhYmxlLCBSRUFEX09OQ0UocGFyZW50LVx1MDAzZW9vbV9raWxsX2Rpc2FibGUpKTtcbjQyNDA6XHRcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNla21lbSwgXHUwMDI2cGFyZW50LVx1MDAzZWttZW0sIGZhbHNlKTtcbjQyNDE6XHRcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNldGNwbWVtLCBcdTAwMjZwYXJlbnQtXHUwMDNldGNwbWVtLCBmYWxzZSk7XG40MjQyOlx0I2VuZGlmXG40MjQzOlx0XHR9IGVsc2Uge1xuNDI0NDpcdFx0XHRpbml0X21lbWNnX3N0YXRzKCk7XG40MjQ1Olx0XHRcdGluaXRfbWVtY2dfZXZlbnRzKCk7XG40MjQ2Olx0XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgTlVMTCwgdHJ1ZSk7XG40MjQ3Olx0XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcbjQyNDg6XHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXG40MjQ5Olx0XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIE5VTEwsIGZhbHNlKTtcbjQyNTA6XHRcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNldGNwbWVtLCBOVUxMLCBmYWxzZSk7XG40MjUxOlx0I2VuZGlmXG40MjUyOlx0XHRcdHJvb3RfbWVtX2Nncm91cCA9IG1lbWNnO1xuNDI1MzpcdFx0XHRyZXR1cm4gXHUwMDI2bWVtY2ctXHUwMDNlY3NzO1xuNDI1NDpcdFx0fVxuNDI1NTpcdFxuNDI1NjpcdFx0aWYgKG1lbWNnX29uX2RmbCBcdTAwMjZcdTAwMjYgIWNncm91cF9tZW1vcnlfbm9zb2NrZXQpXG40MjU3Olx0XHRcdHN0YXRpY19icmFuY2hfaW5jKFx1MDAyNm1lbWNnX3NvY2tldHNfZW5hYmxlZF9rZXkpO1xuNDI1ODpcdFxuNDI1OTpcdFx0aWYgKCFjZ3JvdXBfbWVtb3J5X25vYnBmKVxuNDI2MDpcdFx0XHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZtZW1jZ19icGZfZW5hYmxlZF9rZXkpO1xuNDI2MTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkZpeGluZyBhIE1lbW9yeSBDb250cm9sbGVyIFRyYWNraW5nIElzc3VlKioKCkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBhY2NvdW50aW5nLiBUaGUgY29yZSBvZiB0aGUgZml4IHNlZW1zIHRvIGJlIGluaXRpYWxpemluZyBgbWVtY2ctJmd0O21lbXN3LnRyYWNrX2ZhaWxjbnRgIHdpdGggYCFtZW1jZ19vbl9kZmxgLiBCYXNpY2FsbHksIHRoaXMgdmFyaWFibGUmIzM5O3MgYmVlbiBoYXZpbmcgaW5pdGlhbGl6YXRpb24gaXNzdWVzLCB3aGljaCBpcyBjYXVzaW5nIHByb2JsZW1zIHdpdGggdHJhY2tpbmcgZmFpbGVkIG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRoaW4gdGhlIG1lbW9yeSBzd2FwIGFjY291bnRpbmcgc3lzdGVtLiBSaWdodCwgZ290IGl0LgoKTm93LCBsZXQmIzM5O3MgYmFjayB1cCBhIHNlY29uZCB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIGhlcmUuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIHRoYXQmIzM5O3MgdG9wIG9mIG1pbmQgaXMgKmhvdyogdGhlIGBtZW1jZ2Agc3RydWN0dXJlLCB0byB3aGljaCB0aGlzIGZpeCBhcHBsaWVzLCBpcyBhY3R1YWxseSBnZXR0aW5nIGluaXRpYWxpemVkIGluIHRoZSBmaXJzdCBwbGFjZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBzZWUgaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBhbGxvY2F0ZWQsIHJpZ2h0PyBJdCYjMzk7cyBhbGxvY2F0ZWQgdmlhIGBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudClgLiBPa2F5LCBzbyBsZXQmIzM5O3MgY2hlY2sgdGhhdCBvdXQuIFdlIHNob3VsZCBjaGVjayB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZSBuZXh0IHRvIGJlIDEwMCUgc3VyZSB3ZSYjMzk7cmUgYWRkcmVzc2luZyB0aGUgcm9vdCBjYXVzZS4gVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgdGVsbCB1cyBpZiB0aGlzIGZpeCBpcyBzdWZmaWNpZW50IG9yIHBvdGVudGlhbGx5IGhpZGluZyBhbm90aGVyIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00MTM1PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZnJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTQxNDEtXG5tbS9tZW1jb250cm9sLmM6NDE0MjpzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wuYy00MTQzLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDIxMz1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIxOS1cdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cocGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYzo0MjIwOlx0bWVtY2cgPSBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudCk7XG5tbS9tZW1jb250cm9sLmMtNDIyMS1cdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG1lbV9jZ3JvdXBfYWxsb2NgIGZ1bmN0aW9uLgoKKipBbmFseXppbmcgYG1lbV9jZ3JvdXBfYWxsb2NgKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBoYXBwZW5zIHdpdGhpbiBhIG1lbW9yeSBjZ3JvdXAuIExldCYjMzk7cyBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXF1ZXN0cyBmb3IgbWVtb3J5IHdpdGhpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVjaGFuaWNzLCBzcGVjaWZpY2FsbHk6IGhvdyBpcyB0aGUgbWVtb3J5IGFjY291bnRpbmcgaGFuZGxlZD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjaGVja3Mgb3IgbGltaXRzIGVuZm9yY2VkIGhlcmU/IEkmIzM5O2xsIG5lZWQgdG8ga25vdyBpZiBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIG1vcmUgZ2VuZXJhbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLiBJIG5lZWQgdG8gbm90ZSBhbnkgc3BlY2lmaWMgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgb3Igb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMgdXNlZCwgYW5kIGFueSBpbnRlZ3JhdGlvbiB3aXRoIE5VTUEgaWYgYXBwbGljYWJsZS4gQW55IGVycm9yIGhhbmRsaW5nIGlzIGdvaW5nIHRvIGJlIGNyaXRpY2FsLCB0b28uIEkgd2FudCB0byBzZWUgaG93IGFsbG9jYXRpb24gZmFpbHVyZXMgYXJlIG1hbmFnZWQsIGFuZCBob3cgdGhlIHN5c3RlbSBiZWhhdmVzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGF0IHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxNDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDE0MjpcdHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuNDE0MzpcdHtcbjQxNDQ6XHRcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XG40MTQ1Olx0XHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgX19wZXJjcHUgKnBzdGF0Y19wY3B1O1xuNDE0NjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDE0NzpcdFx0aW50IG5vZGUsIGNwdTtcbjQxNDg6XHRcdGludCBfX21heWJlX3VudXNlZCBpO1xuNDE0OTpcdFx0bG9uZyBlcnJvcjtcbjQxNTA6XHRcbjQxNTE6XHRcdG1lbWNnID0ga21lbV9jYWNoZV96YWxsb2MobWVtY2dfY2FjaGVwLCBHRlBfS0VSTkVMKTtcbjQxNTI6XHRcdGlmICghbWVtY2cpXG40MTUzOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuNDE1NDpcdFxuNDE1NTpcdFx0ZXJyb3IgPSB4YV9hbGxvYyhcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5pZCwgTlVMTCxcbjQxNTY6XHRcdFx0XHQgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTtcbjQxNTc6XHRcdGlmIChlcnJvcilcbjQxNTg6XHRcdFx0Z290byBmYWlsO1xuNDE1OTpcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuNDE2MDpcdFxuNDE2MTpcdFx0bWVtY2ctXHUwMDNldm1zdGF0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtZW1jZ192bXN0YXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuNDE2MjpcdFx0aWYgKCFtZW1jZy1cdTAwM2V2bXN0YXRzKVxuNDE2MzpcdFx0XHRnb3RvIGZhaWw7XG40MTY0Olx0XG40MTY1Olx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1LFxuNDE2NjpcdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuNDE2NzpcdFx0aWYgKCFtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSlcbjQxNjg6XHRcdFx0Z290byBmYWlsO1xuNDE2OTpcdFxuNDE3MDpcdFx0aWYgKCFtZW1jZzFfYWxsb2NfZXZlbnRzKG1lbWNnKSlcbjQxNzE6XHRcdFx0Z290byBmYWlsO1xuNDE3MjpcdFxuNDE3MzpcdFx0cHN0YXRjX3BjcHUgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0c19wZXJjcHUgOiBOVUxMO1xuNDE3NDpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuNDE3NTpcdFx0XHRzdGF0YyA9IHBlcl9jcHVfcHRyKG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xuNDE3NjpcdFx0XHRzdGF0Yy1cdTAwM2VwYXJlbnRfcGNwdSA9IHBzdGF0Y19wY3B1O1xuNDE3NzpcdFx0XHRzdGF0Yy1cdTAwM2V2bXN0YXRzID0gbWVtY2ctXHUwMDNldm1zdGF0cztcbjQxNzg6XHRcdH1cbjQxNzk6XHRcbjQxODA6XHRcdGZvcl9lYWNoX25vZGUobm9kZSlcbjQxODE6XHRcdFx0aWYgKCFhbGxvY19tZW1fY2dyb3VwX3Blcl9ub2RlX2luZm8obWVtY2csIG5vZGUpKVxuNDE4MjpcdFx0XHRcdGdvdG8gZmFpbDtcbjQxODM6XHRcbjQxODQ6XHRcdGlmIChtZW1jZ193Yl9kb21haW5faW5pdChtZW1jZywgR0ZQX0tFUk5FTCkpXG40MTg1Olx0XHRcdGdvdG8gZmFpbDtcbjQxODY6XHRcbjQxODc6XHRcdElOSVRfV09SSyhcdTAwMjZtZW1jZy1cdTAwM2VoaWdoX3dvcmssIGhpZ2hfd29ya19mdW5jKTtcbjQxODg6XHRcdHZtcHJlc3N1cmVfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2V2bXByZXNzdXJlKTtcbjQxODk6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9wZWFrcyk7XG40MTkwOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwX3BlYWtzKTtcbjQxOTE6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXBlYWtzX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU1CgkJCQkJCQlvdXRwdXQ6IDEyOAoJCQkJCQkJdGhvdWdodHM6IDcyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIHNpbmdsZSBsaW5lIHdpdGhpbiBgbWVtX2Nncm91cF9jc3NfYWxsb2MoKWA6IGBtZW1jZy0mZ3Q7bWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcywgd2hpY2ggaXMgd2hhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QuIExldCYjMzk7cyBicmVhayBpdCBkb3duLgoKRmlyc3QsIEkgc2VlIHRoYXQgYG1lbWNnYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC4gVGhlcmVmb3JlLCBiZWZvcmUgdGhlIHBhdGNoLCBgbWVtY2ctJmd0O21lbXN3LnRyYWNrX2ZhaWxjbnRgIHdvdWxkIGhhdmUgYmVlbiB6ZXJvLiBUaGlzIHBhdGNoIHNpbXBseSBzZXRzIGEgYm9vbGVhbiBmbGFnLCBgdHJhY2tfZmFpbGNudGAsIHdpdGhpbiB0aGUgYG1lbXN3YCBwYWdlIGNvdW50ZXIgc3RydWN0dXJlLgoKVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGZsYWcgaXMgYmVpbmcgKnNldCogdG8gYSBrbm93biB2YWx1ZSAoYCFtZW1jZ19vbl9kZmxgKSwgbm90ICpyZWFkKiBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSYjMzk7cyBubyBzY2VuYXJpbyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGEgY29udHJvbCBmbG93IGRlY2lzaW9uLiBJdCYjMzk7cyBqdXN0IGEgdmFyaWFibGUgYmVpbmcgYXNzaWduZWQgYSB2YWx1ZSBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgbWVtY2dgIHN0cnVjdHVyZS4KCldhaXQsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgdHJhY2tfZmFpbGNudGAgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBzb21lIHdlaXJkIHVuaW9uIG9yIHNvbWV0aGluZy4gSXQmIzM5O3MgYSBib29sZWFuIG9yIGFuIGludC4gSXQgd2FzIG1pc3NpbmcsIGFuZCBub3cgaXQmIzM5O3Mgbm90LiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgb25seSBhIGNoYW5nZSBpbiBiZWhhdmlvdXIgb2YgdGhlIHBhZ2UgY291bnRlci4gVGhlIHBhdGNoIGlzIHNpbXBseSBpbml0aWFsaXppbmcgYSBmaWVsZCB0byBhIHNwZWNpZmljIHZhbHVlIGluc3RlYWQgb2YgbGVhdmluZyBpdCBhdCB0aGUgemVybyBpbml0aWFsIHZhbHVlIHRoYXQgYGttZW1fY2FjaGVfemFsbG9jYCB3b3VsZCBoYXZlIHNldC4KCk9rYXksIGxldCYjMzk7cyB2ZXJpZnkgaG93IGBtZW1zd2AgZ2V0cyBpbml0aWFsaXplZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyB0aGUgYHBhZ2VfY291bnRlcmAgaXMgaW5pdGlhbGl6ZWQuIExldCYjMzk7cyBzZWUuLi4gYG1lbWNnLSZndDttZW1zd2AgaXMgYSBgcGFnZV9jb3VudGVyYC4gQWgsIEkgc2VlIHRoYXQgdGhlIGBwYWdlX2NvdW50ZXJfaW5pdGAgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBgbWVtY2ctJmd0O21lbW9yeWAsIGBtZW1jZy0mZ3Q7c3dhcGAsIGBtZW1jZy0mZ3Q7a21lbWAsIGBtZW1jZy0mZ3Q7dGNwbWVtYCwgYnV0IG5vdCBgbWVtc3dgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYG1lbXN3YCBnZXRzIGluaXRpYWxpemVkLgoKQWhhISBMb29raW5nIGNsb3NlciBhdCBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLCBJIHNlZSB0aGF0IHRoZSBgbWVtc3dgIGlzIGluaXRpYWxpemVkIHRoZXJlLCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgIGJsb2NrLiBTcGVjaWZpY2FsbHksIEkgZmluZDoKCmBgYGMKCQlXUklURV9PTkNFKG1lbWNnLSZndDtzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7CgkJbWVtY2ctJmd0O21lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDsKCQltZW1jZy0mZ3Q7bWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7CgkJV1JJVEVfT05DRShtZW1jZy0mZ3Q7b29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC0mZ3Q7b29tX2tpbGxfZGlzYWJsZSkpOwoJCXBhZ2VfY291bnRlcl9pbml0KCZhbXA7bWVtY2ctJmd0O2ttZW0sICZhbXA7cGFyZW50LSZndDtrbWVtLCBmYWxzZSk7CgkJcGFnZV9jb3VudGVyX2luaXQoJmFtcDttZW1jZy0mZ3Q7dGNwbWVtLCAmYW1wO3BhcmVudC0mZ3Q7dGNwbWVtLCBmYWxzZSk7CmBgYAoKU28gaXQgKmlzKiBpbml0aWFsaXplZCwgYW5kIHRoaXMgcGF0Y2gganVzdCBzZXRzIGB0cmFja19mYWlsY250YCBkdXJpbmcgYWxsb2NhdGlvbi4gVGhlcmUgaXMgKm5vKiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkLCBhbmQgdGhlcmVmb3JlIEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIHRvb2xzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBUaGUgcGF0Y2ggc2ltcGx5IGVuc3VyZXMgdGhhdCBgbWVtc3cudHJhY2tfZmFpbGNudGAgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkIGR1cmluZyBtZW1jZyBhbGxvY2F0aW9uLCBhbmQgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIGEgbG9naWNhbCBjb3JyZWN0aW9uLiBOZWVkc0tNU0FOID0gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGFzc2lnbm1lbnQgdG8gYG1lbWNnLVx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnRgIGR1cmluZyBtZW1jZyBhbGxvY2F0aW9uLiBUaGUgYG1lbWNnYCBzdHJ1Y3R1cmUgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhpcyBpcyBhIGxvZ2ljYWwgZml4IGZvciBtZW1vcnkgY29udHJvbGxlciBiZWhhdmlvciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWNhbCBidWdzIGhlcmUuIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBhc3NpZ25tZW50IHRvIGBtZW1jZy1cdTAwM2VtZW1zdy50cmFja19mYWlsY250YCBkdXJpbmcgbWVtY2cgYWxsb2NhdGlvbi4gVGhlIGBtZW1jZ2Agc3RydWN0dXJlIGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoaXMgaXMgYSBsb2dpY2FsIGZpeCBmb3IgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZpb3IsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgYnVncyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyMDozMi4zNTIxNjk5NTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI2Mjc5MDY5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9jc3NfYWxsb2NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGFzc2lnbm1lbnQgdG8gYG1lbWNnLVxcdTAwM2VtZW1zdy50cmFja19mYWlsY250YCBkdXJpbmcgbWVtY2cgYWxsb2NhdGlvbi4gVGhlIGBtZW1jZ2Agc3RydWN0dXJlIGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoaXMgaXMgYSBsb2dpY2FsIGZpeCBmb3IgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZpb3IsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgYnVncyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuYWJsZXMgdHJhY2tpbmcgb2YgZmFpbGNudCBmb3IgdGhlIG1lbXN3IChtZW1vcnkrc3dhcCkgY291bnRlciBpbiBtZW1jZyB2MSBieSBpbml0aWFsaXppbmcgbWVtc3cudHJhY2tfZmFpbGNudCB0byAhbWVtY2dfb25fZGZsIGluIG1lbV9jZ3JvdXBfY3NzX2FsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBsZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyMDozMi4zNTIxNzY1MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDMwMjM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc5ZjFmZjY0MjgwNmI1YjZmMmY2NmE1OTQ4ZWMxYmZmM2ZjZjc0NTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDg6MjA6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggNjkzOWE0ZmJiOTkxNC4uNGZmZTViMzczM2Q5YiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNDIzNSw2ICs0MjM1LDcgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gXFx0XFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xcbiBcXHRcXHRtZW1jZy1cXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xcbitcXHRcXHRtZW1jZy1cXHUwMDNlbWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuIFxcdFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZW9vbV9raWxsX2Rpc2FibGUsIFJFQURfT05DRShwYXJlbnQtXFx1MDAzZW9vbV9raWxsX2Rpc2FibGUpKTtcXG4gXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBcXHUwMDI2cGFyZW50LVxcdTAwM2VrbWVtLCBmYWxzZSk7XFxuIFxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNldGNwbWVtLCBcXHUwMDI2cGFyZW50LVxcdTAwM2V0Y3BtZW0sIGZhbHNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjA6MzIuODIzMTgxMTAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjUxNTAzMjkxODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY3NzX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyB0cmFja2luZyBvZiBmYWlsY250IGZvciB0aGUgbWVtc3cgKG1lbW9yeStzd2FwKSBjb3VudGVyIGluIG1lbWNnIHYxIGJ5IGluaXRpYWxpemluZyBtZW1zdy50cmFja19mYWlsY250IHRvICFtZW1jZ19vbl9kZmwgaW4gbWVtX2Nncm91cF9jc3NfYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc5ZjFmZjY0MjgwNmI1YjZmMmY2NmE1OTQ4ZWMxYmZmM2ZjZjc0NTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwODoyMDozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNjkzOWE0ZmJiOTkxNC4uNGZmZTViMzczM2Q5YiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNDIzNSw2ICs0MjM1LDcgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIFx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcbiBcdFx0bWVtY2ctXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuK1x0XHRtZW1jZy1cdTAwM2VtZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcbiBcdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vvb21fa2lsbF9kaXNhYmxlLCBSRUFEX09OQ0UocGFyZW50LVx1MDAzZW9vbV9raWxsX2Rpc2FibGUpKTtcbiBcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNla21lbSwgXHUwMDI2cGFyZW50LVx1MDAzZWttZW0sIGZhbHNlKTtcbiBcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNldGNwbWVtLCBcdTAwMjZwYXJlbnQtXHUwMDNldGNwbWVtLCBmYWxzZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyMDozMi44MjMxODIzNzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE0Nzg5NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKlBhdGNoIEFuYWx5c2lzOiBgbW0vbWVtY29udHJvbC5jYCBNb2RpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGNoYW5nZSB3aXRoaW4gdGhlIGBtZW1fY2dyb3VwX2Nzc19hbGxvYygpYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgZnVuY3Rpb24g4oCTIGl0J3MgY3J1Y2lhbCBmb3IgYWxsb2NhdGluZyB0aGUgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBtZW1vcnkgY2dyb3Vwcy4gVGhlIHBhdGNoLCB3aXRoaW4gdGhlIGAjaWZkZWYgQ09ORklHX01FTUNHX1YxYCBibG9jaywgc2V0cyBgbWVtY2ctXHUwMDNlbWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7YC4gVGhpcyBsaW5lIGlzIGtleSwgaXQgbG9va3MgbGlrZSBpdCdzIGRlY2lkaW5nIHdoZXRoZXIgdG8gdHJhY2sgbWVtb3J5IHN3YXAgZmFpbHVyZSBjb3VudHMsIGJhc2VkIG9uIGlmIHRoZSBtZW1vcnkgY2dyb3VwIGlzIG9uIHRoZSBkZWZhdWx0IGZhaWx1cmUtbGV2ZWwuXG5cbkdpdmVuIHRoaXMsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGRpdmUgaW50byBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIGluIHRoZSBjb2RlIGl0c2VsZi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGVyZSB0aGlzIGFzc2lnbm1lbnQgZml0cyBpbnRvIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MuIFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgY29uZGl0aW9uYWxseSB0cmFja2luZyBgZmFpbGNudGAgYmFzZWQgb24gdGhhdCBgIW1lbWNnX29uX2RmbGAgY29uZGl0aW9uPyBJJ20gd29uZGVyaW5nIHdoYXQgYG1lbWNnX29uX2RmbGAgcmVwcmVzZW50cy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0IG1pZ2h0IGJlIGFib3V0IHByaW9yaXRpemluZyB0cmFja2luZyBmb3Igbm9uLWRlZmF1bHQgY29uZmlndXJhdGlvbnMgb3IgcGVyaGFwcyBsZWdhY3kgaW1wbGVtZW50YXRpb25zLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlLiBUaGUgd2hvbGUgcG9pbnQgaGVyZSBpcywgY2xlYXJseSwgYWJvdXQgbW9uaXRvcmluZyBmYWlsdXJlcyBpbiBtZW1vcnktc3dhcHBpbmcgb3BlcmF0aW9ucywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mICp3aGVuKiB0aGF0IHRyYWNraW5nIGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjIwOjM3LjkzNzk3NDM2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk4MDE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2Nzc19hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQyMTI9c3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICogX19yZWZcXG5tbS9tZW1jb250cm9sLmM6NDIxMzptZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG5tbS9tZW1jb250cm9sLmMtNDIxNC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE1ND1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxubW0vbWVtY29udHJvbC5jOjUxNTU6XFx0LmNzc19hbGxvYyA9IG1lbV9jZ3JvdXBfY3NzX2FsbG9jLFxcbm1tL21lbWNvbnRyb2wuYy01MTU2LVxcdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyMDozNy45ODc5NjA2MjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQzNDU4Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENncm91cCBBbGxvY2F0aW9uIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCwgd2hpY2ggSSBrbm93IGlzIHRoZSBjb3JlIGFsbG9jYXRpb24gZnVuY3Rpb24gZm9yIG1lbW9yeSBjZ3JvdXBzLiBUaGUgY2hhbmdlIEknbSBleGFtaW5pbmcgaW5pdGlhbGl6ZXMgYG1lbXN3LnRyYWNrX2ZhaWxjbnRgIHRvIGAhbWVtY2dfb25fZGZsYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBmdW5jdGlvbmFsbHkgc3BlYWtpbmcuIEkgc2VlIHdoYXQncyBiZWluZyBkb25lLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgdGhpcyBgdHJhY2tfZmFpbGNudGAgYWN0dWFsbHkgKnVzZWQqIGFueXdoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgaW5pdGlhbGl6YXRpb24uIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhhdCB2YXJpYWJsZSB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgaGFzIGFueSByZWFsLXdvcmxkIGVmZmVjdC4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjIwOjQyLjAzMTQyMjYzMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA5MjIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFja19mYWlsY250XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDIxMz1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MjM2LVxcdFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcXG5tbS9tZW1jb250cm9sLmM6NDIzNzpcXHRcXHRtZW1jZy1cXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xcbm1tL21lbWNvbnRyb2wuYzo0MjM4OlxcdFxcdG1lbWNnLVxcdTAwM2VtZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcXG5tbS9tZW1jb250cm9sLmMtNDIzOS1cXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2Vvb21fa2lsbF9kaXNhYmxlLCBSRUFEX09OQ0UocGFyZW50LVxcdTAwM2Vvb21fa2lsbF9kaXNhYmxlKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjIwOjQyLjA3NjUyMDgzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNjkzNDczOTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqRGl2aW5nIGludG8gYHBhZ2VfY291bnRlcmAgYW5kIGB0cmFja19mYWlsY250YCoqXG5cbkhtbSwgbm93IHRoYXQgSSdtIHRoaW5raW5nIGFib3V0IGl0LCBpc24ndCBgdHJhY2tfZmFpbGNudGAgYSBmaWVsZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgcGFnZV9jb3VudGVyYD8gSSBiZXR0ZXIgY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gZm9yIHRoYXQgc3RydWN0LiBMb29rcyBsaWtlIEknbGwgbmVlZCB0byBnbyB0byBgaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaGAgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBkZXRhaWxzIHJpZ2h0LiBHb3R0YSBiZSBwcmVjaXNlIHdoZW4gZGVhbGluZyB3aXRoIGxvdy1sZXZlbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjE5LjAxMTI2MzQ0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTExOTg5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhY2tfZmFpbGNudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg9MTA9c3RydWN0IHBhZ2VfY291bnRlciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTM3LVxcdGJvb2wgcHJvdGVjdGlvbl9zdXBwb3J0O1xcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg6Mzg6XFx0Ym9vbCB0cmFja19mYWlsY250O1xcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgtMzktXFx0dW5zaWduZWQgbG9uZyBtaW47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oPTU1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaC02Mi1cXHRjb3VudGVyLVxcdTAwM2Vwcm90ZWN0aW9uX3N1cHBvcnQgPSBwcm90ZWN0aW9uX3N1cHBvcnQ7XFxuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaDo2MzpcXHRjb3VudGVyLVxcdTAwM2V0cmFja19mYWlsY250ID0gZmFsc2U7XFxuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaC02NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjE5LjU2MjQ2ODExMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjg5MzIxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtZW1zdyBGYWlsY250IFRyYWNraW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZW5hYmxpbmcgdGhlIHRyYWNraW5nIG9mIGBmYWlsY250YCBmb3IgdGhlIGBtZW1zd2AgY291bnRlciB3aXRoaW4gbWVtY2cgdjEuIEl0J3MgYSBmdW5jdGlvbmFsIGVuaGFuY2VtZW50LCBubyBkb3VidCBhYm91dCBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoaXMgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gbG9vayBmb3IgdGhlIHJlbGV2YW50IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBBaCwgaGVyZSB3ZSBhcmUsIGl0J3MgdXNpbmcgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLiBNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgYG1tL0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gYGluaXQvS2NvbmZpZ2AgdG8gcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbiBmb3IgYE1FTUNHX1YxYC4gVGhhdCdzIHdoZXJlIEkgd2lsbCBmaW5kIHRoZSBjcnVjaWFsIGRldGFpbHMgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjQ6MjMuODkxNDAyODk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk2NjQ0NTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR19WMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA5Mz1jb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk5LVxcbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAxLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjI1LjU4ODA1MjgyNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE5MzgwNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb250cm9sIEdyb3VwIENvbmZpZ3VyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgY3VycmVudCBjb25maWcgaXMgYE1FTUNHX1YxYC4gVGhhdCdzIHRoZSBiYXNlbGluZSB3ZSdyZSB3b3JraW5nIHdpdGgsIHJpZ2h0PyBNeSBpbml0aWFsIGZvY3VzIGlzIGFsd2F5cyBvbiB3aGF0J3MgZXhwbGljaXRseSAqZW5hYmxlZCouIEJ1dC4uLiBob2xkIG9uIGEgc2Vjb25kLiBJc24ndCB0aGVyZSBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzPyBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBzaW1wbGVyLCBtYXliZSBqdXN0IGBNRU1DR2A/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSdzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGBNRU1DR2AgYW5kIGBNRU1DR19WMWAsIG9yIGlmIG9uZSBzdXBlcnNlZGVzIHRoZSBvdGhlci4gS25vd2luZyBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcmFjdCBpcyBjcnVjaWFsIGJlZm9yZSBwcm9jZWVkaW5nLiBUaGlzIGRpZmZlcmVuY2UgY2FuIGNoYW5nZSBob3cgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgaXNvbGF0aW9uIHdvcmsgc2lnbmlmaWNhbnRseS4gSSBoYXZlIHRvIGxvb2sgaW50byB0aGlzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxMywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjI5LjMwNzQzODg4NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNTU5NzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjc9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ni1cXG5pbml0L0tjb25maWc6MTA3Nzpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OC1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg1LVxcbmluaXQvS2NvbmZpZzoxMDg2OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODctXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTItXFxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTQtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTktXFxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDEtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjQ6MzEuMDEzMDQxMTk0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODIyNzgyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IG9mIE1FTUNHX1YxKipcblxuT2theSwgc28gYE1FTUNHX1YxYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBNRU1DR2AuIE1ha2VzIHNlbnNlLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIHJlbGF0aW9uc2hpcC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbGwgY2hlY2sgYGluaXQvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGRlY2xhcmVkIGZvciBgTUVNQ0dfVjFgLiBJJ2xsIGNvbmZpcm0gaG93IGBNRU1DR2AgcmVsYXRlcyB0byBgTUVNQ0dfVjFgIGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBidWlsZC10aW1lIHJlcXVpcmVtZW50cy4gVGhpcyBpbml0aWFsIGxvb2sgc2hvdWxkIHRlbGwgbWUgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgZGVjbGFyZWQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB0d28gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjM0Ljk5NTMyMjQ5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwOTU6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5ODpcXHRcXHRkZWZhdWx0IHlcXG4xMDk5OlxcdFxcbjExMDA6XFx0Y29uZmlnIE1FTUNHX1YxXFxuMTEwMTpcXHRcXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjExMDI6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjExMDM6XFx0XFx0ZGVmYXVsdCBuXFxuMTEwNDpcXHRcXHRoZWxwXFxuMTEwNTpcXHRcXHQgIExlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZCBieVxcbjExMDY6XFx0XFx0ICBjZ3JvdXAgdjIgaW1wbGVtZW50YXRpb24uIFRoZSB2MSBpcyB0aGVyZSBmb3IgbGVnYWN5IGFwcGxpY2F0aW9uc1xcbjExMDc6XFx0XFx0ICB3aGljaCBoYXZlbid0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxcbjExMDg6XFx0XFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcXG4xMTA5OlxcdFxcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXFxuMTExMDpcXHRcXG4xMTExOlxcdFxcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxcbjExMTI6XFx0XFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXFxuMTExMzpcXHRcXHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cXG4xMTE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNDozNC45OTU0OTgxODdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMTg2MTU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKk1lbW9yeSBDb250cm9sIEdyb3VwIEludmVzdGlnYXRpb24gLSBJbml0aWFsIEZvY3VzKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGhlcmUg4oCTIHNwZWNpZmljYWxseSwgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYC4gU2VlbXMgbGlrZSB0aG9zZSBhcmUgdGhlIHByaW1hcnkgcGxheWVycy4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IHdoaWNoIGZ1bmN0aW9uIHNob3VsZCBJIGJlIGNvbmNlbnRyYXRpbmcgb24/IFRoaW5raW5nIGFib3V0IGl0LCB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhpbmdzLiBUaGF0IHN1Z2dlc3RzIGBtZW1fY2dyb3VwX2Nzc19hbGxvY2AgaXMgZ29pbmcgdG8gYmUgY2VudHJhbCwgYmVpbmcgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24uIE5vdywgYSBtb3JlIHNwZWNpZmljIGdvYWw6IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZnVuY3Rpb24ocykgd2hpY2ggdXNlIGB0cmFja19mYWlsY250YC4gV2hlcmUgd291bGQgSSBleHBlY3QgdG8gZmluZCB0aGF0PyBQcm9iYWJseSB3aXRoaW4gdGhlIHJlYWxtIG9mIHBhZ2UgY291bnRlciBsb2dpYy4gRWl0aGVyIGBwYWdlX2NvdW50ZXIuY2Agb3IgYHBhZ2VfY291bnRlci5oYCBzaG91bGQgYmUgdGhlIGtleSBmaWxlcyB0byBpbnZlc3RpZ2F0ZSBmb3IgYW55IHRyYWNlcyBvZiBgdHJhY2tfZmFpbGNudGAgdXNhZ2UuIExldCdzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjQ6MzguODE3MzYyNjM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcyODU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFja19mYWlsY250XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfY291bnRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfY291bnRlci5jPTExOD1ib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYy0xMjMtXFx0Ym9vbCBwcm90ZWN0aW9uID0gdHJhY2tfcHJvdGVjdGlvbihjb3VudGVyKTtcXG5tbS9wYWdlX2NvdW50ZXIuYzoxMjQ6XFx0Ym9vbCB0cmFja19mYWlsY250ID0gY291bnRlci1cXHUwMDNldHJhY2tfZmFpbGNudDtcXG5tbS9wYWdlX2NvdW50ZXIuYy0xMjUtXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYy0xNDktXFx0XFx0XFx0ICovXFxubW0vcGFnZV9jb3VudGVyLmM6MTUwOlxcdFxcdFxcdGlmICh0cmFja19mYWlsY250KVxcbm1tL3BhZ2VfY291bnRlci5jLTE1MS1cXHRcXHRcXHRcXHRkYXRhX3JhY2UoYy1cXHUwMDNlZmFpbGNudCsrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjQ6MzguODY1MDk2MTczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzk5MDM2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgUGVyZm9ybWFuY2UgSW1wYWN0IG9mIGBtZW1fY2dyb3VwX2Nzc19hbGxvY2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSBzZWUgYHBhZ2VfY291bnRlcl90cnlfY2hhcmdlYCBpcyB1c2luZyBzb21ldGhpbmcuLi4gYWgsIHJpZ2h0LiBUaGF0IGZ1bmN0aW9uIGlzIGEga25vd24gaG90IHBhdGguIFRoYXQgcmFpc2VzIGFuIGltbWVkaWF0ZSByZWQgZmxhZy4gVGhlIHBhdGNoIGl0c2VsZiBpcyBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLiBMZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyAtIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzIHRoYXQgSSBzaG91bGQga2VlcCBhbiBleWUgb24/IEFscmlnaHQsIGxvb2tzIGxpa2UgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCBpcyBjYWxsZWQgd2hlbiBhIG5ldyBtZW1vcnkgY2dyb3VwIGlzIHNwdW4gdXAuIEdpdmVuIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgcG90ZW50aWFsIGZvciBpdCB0byBiZSBoaXQgYSBsb3QgaW4gY29udGFpbmVyIGVudmlyb25tZW50cywgaXQgc2VlbXMgbGlrZSBhIHZlcnkgd29ydGh3aGlsZSBwbGFjZSB0byBmb2N1cyBteSBlbmVyZ3kuIFdlJ2xsIGNvbmNlbnRyYXRlIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNjgsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjQ6NDQuMjQ1MDAyMzUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE0NjYxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY3NzX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyB0cmFja2luZyBvZiBmYWlsY250IGZvciB0aGUgbWVtc3cgKG1lbW9yeStzd2FwKSBjb3VudGVyIGluIG1lbWNnIHYxIGJ5IGluaXRpYWxpemluZyBtZW1zdy50cmFja19mYWlsY250IHRvICFtZW1jZ19vbl9kZmwgaW4gbWVtX2Nncm91cF9jc3NfYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9jc3NfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmFibGVzIHRyYWNraW5nIG9mIGZhaWxjbnQgZm9yIHRoZSBtZW1zdyAobWVtb3J5K3N3YXApIGNvdW50ZXIgaW4gbWVtY2cgdjEgYnkgaW5pdGlhbGl6aW5nIG1lbXN3LnRyYWNrX2ZhaWxjbnQgdG8gIW1lbWNnX29uX2RmbCBpbiBtZW1fY2dyb3VwX2Nzc19hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgbGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjQ6NDQuMzI2NDc3ODMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDY1MzU4ODYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjQ0LjMyNzA4NTc2MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MDY1Mjk3NTcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYXNzaWdubWVudCB0byBgbWVtY2ctXFx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnRgIGR1cmluZyBtZW1jZyBhbGxvY2F0aW9uLiBUaGUgYG1lbWNnYCBzdHJ1Y3R1cmUgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhpcyBpcyBhIGxvZ2ljYWwgZml4IGZvciBtZW1vcnkgY29udHJvbGxlciBiZWhhdmlvciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWNhbCBidWdzIGhlcmUuIEtNU0FOIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzlmMWZmNjQyODA2YjViNmYyZjY2YTU5NDhlYzFiZmYzZmNmNzQ1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA4OjIwOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2OTM5YTRmYmI5OTE0Li40ZmZlNWIzNzMzZDliIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00MjM1LDYgKzQyMzUsNyBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xuIFx0XHRtZW1jZy1cdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XG4rXHRcdG1lbWNnLVx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuIFx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZW9vbV9raWxsX2Rpc2FibGUsIFJFQURfT05DRShwYXJlbnQtXHUwMDNlb29tX2tpbGxfZGlzYWJsZSkpO1xuIFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBcdTAwMjZwYXJlbnQtXHUwMDNla21lbSwgZmFsc2UpO1xuIFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2V0Y3BtZW0sIFx1MDAyNnBhcmVudC1cdTAwM2V0Y3BtZW0sIGZhbHNlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjQ0LjMyNzA4Njc1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM3NDMwOTc3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1jb250cm9sIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGFkZGluZyBvbmUgbGluZSB0byBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpbnNpZGUgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jKClgLCBpdCdzIHNldHRpbmcgYG1lbWNnLVx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO2AuIEhtbSwgc28gaXQncyBpbml0aWFsaXppbmcgdGhpcyBgdHJhY2tfZmFpbGNudGAgZmllbGQgd2l0aGluIGBtZW1jZy1cdTAwM2VtZW1zd2AuIFJpZ2h0LCBpdCdzIHNldHRpbmcgYSBib29sZWFuIGZsYWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgd2UgYXJlbid0IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS4gSXMgaXQganVzdCBpbml0aWFsaXppbmcgc29tZXRoaW5nIHRoYXQgKm1pZ2h0KiBoYXZlIGJlZW4gdW5pbml0aWFsaXplZCwgb3Igc2ltcGx5IHNldHRpbmcgaXQgdG8gYSBkZWZpbmVkIHZhbHVlPyBJIGJldHRlciBkaWcgaW50byBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIHRvIGJlIGNlcnRhaW4uXG5cbkxldCdzIHNlZS4uLiB0aGUgYG1lbWNnYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHNvbWV3aGVyZSBpbiB0aGF0IGZ1bmN0aW9uLCBwcm9iYWJseSB3aXRoIHNvbWV0aGluZyBsaWtlIGBremFsbG9jYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gdGhhdCB3b3VsZCB6ZXJvLWluaXRpYWxpemUgdGhlIG1lbW9yeS4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgMTAwJSBzdXJlIHdlIGFyZSBpbiBnb29kIHNoYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjU6MTQuNzAxNDAyMDYyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIwMzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2Nzc19hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQyMTI9c3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICogX19yZWZcXG5tbS9tZW1jb250cm9sLmM6NDIxMzptZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG5tbS9tZW1jb250cm9sLmMtNDIxNC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE1ND1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxubW0vbWVtY29udHJvbC5jOjUxNTU6XFx0LmNzc19hbGxvYyA9IG1lbV9jZ3JvdXBfY3NzX2FsbG9jLFxcbm1tL21lbWNvbnRyb2wuYy01MTU2LVxcdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNToxNC43NDc2MTAyMjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk4NjE2NzczNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgbWVtX2Nncm91cF9jc3NfYWxsb2NgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCBmdW5jdGlvbi4gSXTigJlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGhhdmUgYW55IGNoYW5jZSB0byB1bmRlcnN0YW5kIHRoZSBkZWVwZXIgcGFydHMgb2YgaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBjcmVhdGVkLiBMZXQncyBzZWUgd2hhdCB0aGV5IGFyZSB0cnlpbmcgdG8gZG8gaGVyZS5cblxuT2theSwgbGV0J3MgZ2V0IGludG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNTozNC42MDkyOTE4MDVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjEyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjEyOlxcdHN0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqIF9fcmVmXFxuNDIxMzpcXHRtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG40MjE0OlxcdHtcXG40MjE1OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHBhcmVudF9jc3MpO1xcbjQyMTY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqb2xkX21lbWNnO1xcbjQyMTc6XFx0XFx0Ym9vbCBtZW1jZ19vbl9kZmwgPSBjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpO1xcbjQyMTg6XFx0XFxuNDIxOTpcXHRcXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKHBhcmVudCk7XFxuNDIyMDpcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfYWxsb2MocGFyZW50KTtcXG40MjIxOlxcdFxcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcXG40MjIyOlxcdFxcdGlmIChJU19FUlIobWVtY2cpKVxcbjQyMjM6XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKG1lbWNnKTtcXG40MjI0OlxcdFxcbjQyMjU6XFx0XFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTtcXG40MjI2OlxcdFxcdG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTtcXG40MjI3OlxcdCNpZmRlZiBDT05GSUdfWlNXQVBcXG40MjI4OlxcdFxcdG1lbWNnLVxcdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xcbjQyMjk6XFx0XFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlenN3YXBfd3JpdGViYWNrLCB0cnVlKTtcXG40MjMwOlxcdCNlbmRpZlxcbjQyMzE6XFx0XFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgUEFHRV9DT1VOVEVSX01BWCk7XFxuNDIzMjpcXHRcXHRpZiAocGFyZW50KSB7XFxuNDIzMzpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgXFx1MDAyNnBhcmVudC1cXHUwMDNlbWVtb3J5LCBtZW1jZ19vbl9kZmwpO1xcbjQyMzQ6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBcXHUwMDI2cGFyZW50LVxcdTAwM2Vzd2FwLCBmYWxzZSk7XFxuNDIzNTpcXHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuNDIzNjpcXHRcXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XFxuNDIzNzpcXHRcXHRcXHRtZW1jZy1cXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xcbjQyMzg6XFx0XFx0XFx0bWVtY2ctXFx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xcbjQyMzk6XFx0XFx0XFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlb29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC1cXHUwMDNlb29tX2tpbGxfZGlzYWJsZSkpO1xcbjQyNDA6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBcXHUwMDI2cGFyZW50LVxcdTAwM2VrbWVtLCBmYWxzZSk7XFxuNDI0MTpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXRjcG1lbSwgXFx1MDAyNnBhcmVudC1cXHUwMDNldGNwbWVtLCBmYWxzZSk7XFxuNDI0MjpcXHQjZW5kaWZcXG40MjQzOlxcdFxcdH0gZWxzZSB7XFxuNDI0NDpcXHRcXHRcXHRpbml0X21lbWNnX3N0YXRzKCk7XFxuNDI0NTpcXHRcXHRcXHRpbml0X21lbWNnX2V2ZW50cygpO1xcbjQyNDY6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIE5VTEwsIHRydWUpO1xcbjQyNDc6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBOVUxMLCBmYWxzZSk7XFxuNDI0ODpcXHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuNDI0OTpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIE5VTEwsIGZhbHNlKTtcXG40MjUwOlxcdFxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNldGNwbWVtLCBOVUxMLCBmYWxzZSk7XFxuNDI1MTpcXHQjZW5kaWZcXG40MjUyOlxcdFxcdFxcdHJvb3RfbWVtX2Nncm91cCA9IG1lbWNnO1xcbjQyNTM6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzO1xcbjQyNTQ6XFx0XFx0fVxcbjQyNTU6XFx0XFxuNDI1NjpcXHRcXHRpZiAobWVtY2dfb25fZGZsIFxcdTAwMjZcXHUwMDI2ICFjZ3JvdXBfbWVtb3J5X25vc29ja2V0KVxcbjQyNTc6XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9pbmMoXFx1MDAyNm1lbWNnX3NvY2tldHNfZW5hYmxlZF9rZXkpO1xcbjQyNTg6XFx0XFxuNDI1OTpcXHRcXHRpZiAoIWNncm91cF9tZW1vcnlfbm9icGYpXFxuNDI2MDpcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2luYyhcXHUwMDI2bWVtY2dfYnBmX2VuYWJsZWRfa2V5KTtcXG40MjYxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNTozNC42MDk2MzEzOTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzOTU3MTc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipGaXhpbmcgYSBNZW1vcnkgQ29udHJvbGxlciBUcmFja2luZyBJc3N1ZSoqXG5cbkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBhY2NvdW50aW5nLiBUaGUgY29yZSBvZiB0aGUgZml4IHNlZW1zIHRvIGJlIGluaXRpYWxpemluZyBgbWVtY2ctXHUwMDNlbWVtc3cudHJhY2tfZmFpbGNudGAgd2l0aCBgIW1lbWNnX29uX2RmbGAuIEJhc2ljYWxseSwgdGhpcyB2YXJpYWJsZSdzIGJlZW4gaGF2aW5nIGluaXRpYWxpemF0aW9uIGlzc3Vlcywgd2hpY2ggaXMgY2F1c2luZyBwcm9ibGVtcyB3aXRoIHRyYWNraW5nIGZhaWxlZCBtZW1vcnkgYWxsb2NhdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgc3dhcCBhY2NvdW50aW5nIHN5c3RlbS4gUmlnaHQsIGdvdCBpdC5cblxuTm93LCBsZXQncyBiYWNrIHVwIGEgc2Vjb25kIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVGhlIGNydWNpYWwgcXVlc3Rpb24gdGhhdCdzIHRvcCBvZiBtaW5kIGlzICpob3cqIHRoZSBgbWVtY2dgIHN0cnVjdHVyZSwgdG8gd2hpY2ggdGhpcyBmaXggYXBwbGllcywgaXMgYWN0dWFsbHkgZ2V0dGluZyBpbml0aWFsaXplZCBpbiB0aGUgZmlyc3QgcGxhY2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBzZWUgaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBhbGxvY2F0ZWQsIHJpZ2h0PyBJdCdzIGFsbG9jYXRlZCB2aWEgYG1lbV9jZ3JvdXBfYWxsb2MocGFyZW50KWAuIE9rYXksIHNvIGxldCdzIGNoZWNrIHRoYXQgb3V0LiBXZSBzaG91bGQgY2hlY2sgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmUgbmV4dCB0byBiZSAxMDAlIHN1cmUgd2UncmUgYWRkcmVzc2luZyB0aGUgcm9vdCBjYXVzZS4gVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgdGVsbCB1cyBpZiB0aGlzIGZpeCBpcyBzdWZmaWNpZW50IG9yIHBvdGVudGlhbGx5IGhpZGluZyBhbm90aGVyIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNTozOS4yNDkyMDYxNDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTE0ODI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDEzNT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2ZyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQxNDEtXFxubW0vbWVtY29udHJvbC5jOjQxNDI6c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC5jLTQxNDMte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMTM9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIxOS1cXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jOjQyMjA6XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jLTQyMjEtXFx0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNTozOS43MTAzNjAxODVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNjM4MjMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG1lbV9jZ3JvdXBfYWxsb2NgIGZ1bmN0aW9uLlxuXG4qKkFuYWx5emluZyBgbWVtX2Nncm91cF9hbGxvY2AqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IGFsbG9jYXRpb24gaGFwcGVucyB3aXRoaW4gYSBtZW1vcnkgY2dyb3VwLiBMZXQncyBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXF1ZXN0cyBmb3IgbWVtb3J5IHdpdGhpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZWNoYW5pY3MsIHNwZWNpZmljYWxseTogaG93IGlzIHRoZSBtZW1vcnkgYWNjb3VudGluZyBoYW5kbGVkPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGNoZWNrcyBvciBsaW1pdHMgZW5mb3JjZWQgaGVyZT8gSSdsbCBuZWVkIHRvIGtub3cgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBtb3JlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gSSBuZWVkIHRvIG5vdGUgYW55IHNwZWNpZmljIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIG9yIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIHVzZWQsIGFuZCBhbnkgaW50ZWdyYXRpb24gd2l0aCBOVU1BIGlmIGFwcGxpY2FibGUuIEFueSBlcnJvciBoYW5kbGluZyBpcyBnb2luZyB0byBiZSBjcml0aWNhbCwgdG9vLiBJIHdhbnQgdG8gc2VlIGhvdyBhbGxvY2F0aW9uIGZhaWx1cmVzIGFyZSBtYW5hZ2VkLCBhbmQgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGF0IHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzU0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjU6NDMuMzM2NzQ1MTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTQyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTQyOlxcdHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbjQxNDM6XFx0e1xcbjQxNDQ6XFx0XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1ICpzdGF0YztcXG40MTQ1OlxcdFxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqcHN0YXRjX3BjcHU7XFxuNDE0NjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNDE0NzpcXHRcXHRpbnQgbm9kZSwgY3B1O1xcbjQxNDg6XFx0XFx0aW50IF9fbWF5YmVfdW51c2VkIGk7XFxuNDE0OTpcXHRcXHRsb25nIGVycm9yO1xcbjQxNTA6XFx0XFxuNDE1MTpcXHRcXHRtZW1jZyA9IGttZW1fY2FjaGVfemFsbG9jKG1lbWNnX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuNDE1MjpcXHRcXHRpZiAoIW1lbWNnKVxcbjQxNTM6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuNDE1NDpcXHRcXG40MTU1OlxcdFxcdGVycm9yID0geGFfYWxsb2MoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFxcdTAwMjZtZW1jZy1cXHUwMDNlaWQuaWQsIE5VTEwsXFxuNDE1NjpcXHRcXHRcXHRcXHQgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTtcXG40MTU3OlxcdFxcdGlmIChlcnJvcilcXG40MTU4OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MTU5OlxcdFxcdGVycm9yID0gLUVOT01FTTtcXG40MTYwOlxcdFxcbjQxNjE6XFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbWVtY2dfdm1zdGF0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG40MTYyOlxcdFxcdGlmICghbWVtY2ctXFx1MDAzZXZtc3RhdHMpXFxuNDE2MzpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDE2NDpcXHRcXG40MTY1OlxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1LFxcbjQxNjY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuNDE2NzpcXHRcXHRpZiAoIW1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSlcXG40MTY4OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MTY5OlxcdFxcbjQxNzA6XFx0XFx0aWYgKCFtZW1jZzFfYWxsb2NfZXZlbnRzKG1lbWNnKSlcXG40MTcxOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MTcyOlxcdFxcbjQxNzM6XFx0XFx0cHN0YXRjX3BjcHUgPSBwYXJlbnQgPyBwYXJlbnQtXFx1MDAzZXZtc3RhdHNfcGVyY3B1IDogTlVMTDtcXG40MTc0OlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG40MTc1OlxcdFxcdFxcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xcbjQxNzY6XFx0XFx0XFx0c3RhdGMtXFx1MDAzZXBhcmVudF9wY3B1ID0gcHN0YXRjX3BjcHU7XFxuNDE3NzpcXHRcXHRcXHRzdGF0Yy1cXHUwMDNldm1zdGF0cyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzO1xcbjQxNzg6XFx0XFx0fVxcbjQxNzk6XFx0XFxuNDE4MDpcXHRcXHRmb3JfZWFjaF9ub2RlKG5vZGUpXFxuNDE4MTpcXHRcXHRcXHRpZiAoIWFsbG9jX21lbV9jZ3JvdXBfcGVyX25vZGVfaW5mbyhtZW1jZywgbm9kZSkpXFxuNDE4MjpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDE4MzpcXHRcXG40MTg0OlxcdFxcdGlmIChtZW1jZ193Yl9kb21haW5faW5pdChtZW1jZywgR0ZQX0tFUk5FTCkpXFxuNDE4NTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDE4NjpcXHRcXG40MTg3OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2bWVtY2ctXFx1MDAzZWhpZ2hfd29yaywgaGlnaF93b3JrX2Z1bmMpO1xcbjQxODg6XFx0XFx0dm1wcmVzc3VyZV9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNldm1wcmVzc3VyZSk7XFxuNDE4OTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9wZWFrcyk7XFxuNDE5MDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXBfcGVha3MpO1xcbjQxOTE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VwZWFrc19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjU6NDMuMzM3MjE0MTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE2NDI4MjE2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIHNpbmdsZSBsaW5lIHdpdGhpbiBgbWVtX2Nncm91cF9jc3NfYWxsb2MoKWA6IGBtZW1jZy1cdTAwM2VtZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGludHJvZHVjZXMgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB3aGljaCBpcyB3aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4gTGV0J3MgYnJlYWsgaXQgZG93bi5cblxuRmlyc3QsIEkgc2VlIHRoYXQgYG1lbWNnYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC4gVGhlcmVmb3JlLCBiZWZvcmUgdGhlIHBhdGNoLCBgbWVtY2ctXHUwMDNlbWVtc3cudHJhY2tfZmFpbGNudGAgd291bGQgaGF2ZSBiZWVuIHplcm8uIFRoaXMgcGF0Y2ggc2ltcGx5IHNldHMgYSBib29sZWFuIGZsYWcsIGB0cmFja19mYWlsY250YCwgd2l0aGluIHRoZSBgbWVtc3dgIHBhZ2UgY291bnRlciBzdHJ1Y3R1cmUuXG5cblRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBmbGFnIGlzIGJlaW5nICpzZXQqIHRvIGEga25vd24gdmFsdWUgKGAhbWVtY2dfb25fZGZsYCksIG5vdCAqcmVhZCogZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUncyBubyBzY2VuYXJpbyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGEgY29udHJvbCBmbG93IGRlY2lzaW9uLiBJdCdzIGp1c3QgYSB2YXJpYWJsZSBiZWluZyBhc3NpZ25lZCBhIHZhbHVlIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBtZW1jZ2Agc3RydWN0dXJlLlxuXG5XYWl0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHRyYWNrX2ZhaWxjbnRgIHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBzb21lIHdlaXJkIHVuaW9uIG9yIHNvbWV0aGluZy4gSXQncyBhIGJvb2xlYW4gb3IgYW4gaW50LiBJdCB3YXMgbWlzc2luZywgYW5kIG5vdyBpdCdzIG5vdC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUsIG9ubHkgYSBjaGFuZ2UgaW4gYmVoYXZpb3VyIG9mIHRoZSBwYWdlIGNvdW50ZXIuIFRoZSBwYXRjaCBpcyBzaW1wbHkgaW5pdGlhbGl6aW5nIGEgZmllbGQgdG8gYSBzcGVjaWZpYyB2YWx1ZSBpbnN0ZWFkIG9mIGxlYXZpbmcgaXQgYXQgdGhlIHplcm8gaW5pdGlhbCB2YWx1ZSB0aGF0IGBrbWVtX2NhY2hlX3phbGxvY2Agd291bGQgaGF2ZSBzZXQuXG5cbk9rYXksIGxldCdzIHZlcmlmeSBob3cgYG1lbXN3YCBnZXRzIGluaXRpYWxpemVkLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgdGhlIGBwYWdlX2NvdW50ZXJgIGlzIGluaXRpYWxpemVkLiBMZXQncyBzZWUuLi4gYG1lbWNnLVx1MDAzZW1lbXN3YCBpcyBhIGBwYWdlX2NvdW50ZXJgLiBBaCwgSSBzZWUgdGhhdCB0aGUgYHBhZ2VfY291bnRlcl9pbml0YCBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGBtZW1jZy1cdTAwM2VtZW1vcnlgLCBgbWVtY2ctXHUwMDNlc3dhcGAsIGBtZW1jZy1cdTAwM2VrbWVtYCwgYG1lbWNnLVx1MDAzZXRjcG1lbWAsIGJ1dCBub3QgYG1lbXN3YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBtZW1zd2AgZ2V0cyBpbml0aWFsaXplZC5cblxuQWhhISBMb29raW5nIGNsb3NlciBhdCBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLCBJIHNlZSB0aGF0IHRoZSBgbWVtc3dgIGlzIGluaXRpYWxpemVkIHRoZXJlLCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgIGJsb2NrLiBTcGVjaWZpY2FsbHksIEkgZmluZDpcblxuYGBgY1xuXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xuXHRcdG1lbWNnLVx1MDAzZW1lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcblx0XHRtZW1jZy1cdTAwM2VtZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcblx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZW9vbV9raWxsX2Rpc2FibGUsIFJFQURfT05DRShwYXJlbnQtXHUwMDNlb29tX2tpbGxfZGlzYWJsZSkpO1xuXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIFx1MDAyNnBhcmVudC1cdTAwM2VrbWVtLCBmYWxzZSk7XG5cdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNldGNwbWVtLCBcdTAwMjZwYXJlbnQtXHUwMDNldGNwbWVtLCBmYWxzZSk7XG5gYGBcblxuU28gaXQgKmlzKiBpbml0aWFsaXplZCwgYW5kIHRoaXMgcGF0Y2gganVzdCBzZXRzIGB0cmFja19mYWlsY250YCBkdXJpbmcgYWxsb2NhdGlvbi4gVGhlcmUgaXMgKm5vKiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkLCBhbmQgdGhlcmVmb3JlIEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIHRvb2xzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBUaGUgcGF0Y2ggc2ltcGx5IGVuc3VyZXMgdGhhdCBgbWVtc3cudHJhY2tfZmFpbGNudGAgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkIGR1cmluZyBtZW1jZyBhbGxvY2F0aW9uLCBhbmQgdGhlcmUncyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgYSBsb2dpY2FsIGNvcnJlY3Rpb24uIE5lZWRzS01TQU4gPSBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE1NSwiT3V0cHV0VG9rZW5zIjoxMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNjowNC45ODAwMzk5NTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGFzc2lnbm1lbnQgdG8gYG1lbWNnLVxcdTAwM2VtZW1zdy50cmFja19mYWlsY250YCBkdXJpbmcgbWVtY2cgYWxsb2NhdGlvbi4gVGhlIGBtZW1jZ2Agc3RydWN0dXJlIGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoaXMgaXMgYSBsb2dpY2FsIGZpeCBmb3IgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZpb3IsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgYnVncyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGFzc2lnbm1lbnQgdG8gYG1lbWNnLVxcdTAwM2VtZW1zdy50cmFja19mYWlsY250YCBkdXJpbmcgbWVtY2cgYWxsb2NhdGlvbi4gVGhlIGBtZW1jZ2Agc3RydWN0dXJlIGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoaXMgaXMgYSBsb2dpY2FsIGZpeCBmb3IgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZpb3IsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgYnVncyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jgsp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 07:55:05 +0000 UTC FinishedAt: 2026-08-10 08:26:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6b8c8af514d739d0335f5579b585e02babe8a727", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6b8c8af514d739d0335f5579b585e02babe8a727", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "3e2ee030-232f-4d1b-937a-2f6362225dd6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_css_alloc" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jc3NfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBhc3NpZ25tZW50IHRvIGBtZW1jZy1cdTAwM2VtZW1zdy50cmFja19mYWlsY250YCBkdXJpbmcgbWVtY2cgYWxsb2NhdGlvbi4gVGhlIGBtZW1jZ2Agc3RydWN0dXJlIGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoaXMgaXMgYSBsb2dpY2FsIGZpeCBmb3IgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZpb3IsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgYnVncyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmFibGVzIHRyYWNraW5nIG9mIGZhaWxjbnQgZm9yIHRoZSBtZW1zdyAobWVtb3J5JiM0Mztzd2FwKSBjb3VudGVyIGluIG1lbWNnIHYxIGJ5IGluaXRpYWxpemluZyBtZW1zdy50cmFja19mYWlsY250IHRvICFtZW1jZ19vbl9kZmwgaW4gbWVtX2Nncm91cF9jc3NfYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OWYxZmY2NDI4MDZiNWI2ZjJmNjZhNTk0OGVjMWJmZjNmY2Y3NDUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDg6MjA6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2OTM5YTRmYmI5OTE0Li40ZmZlNWIzNzMzZDliIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00MjM1LDYgJiM0Mzs0MjM1LDcgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIFx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcbiBcdFx0bWVtY2ctXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuJiM0MztcdFx0bWVtY2ctXHUwMDNlbWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XG4gXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlb29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC1cdTAwM2Vvb21fa2lsbF9kaXNhYmxlKSk7XG4gXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIFx1MDAyNnBhcmVudC1cdTAwM2VrbWVtLCBmYWxzZSk7XG4gXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXRjcG1lbSwgXHUwMDI2cGFyZW50LVx1MDAzZXRjcG1lbSwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfY3NzX2FsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuYWJsZXMgdHJhY2tpbmcgb2YgZmFpbGNudCBmb3IgdGhlIG1lbXN3IChtZW1vcnkmIzQzO3N3YXApIGNvdW50ZXIgaW4gbWVtY2cgdjEgYnkgaW5pdGlhbGl6aW5nIG1lbXN3LnRyYWNrX2ZhaWxjbnQgdG8gIW1lbWNnX29uX2RmbCBpbiBtZW1fY2dyb3VwX2Nzc19hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgbGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc5ZjFmZjY0MjgwNmI1YjZmMmY2NmE1OTQ4ZWMxYmZmM2ZjZjc0NTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwODoyMDozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA2OTM5YTRmYmI5OTE0Li40ZmZlNWIzNzMzZDliIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00MjM1LDYgJiM0Mzs0MjM1LDcgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpCiAjaWZkZWYgQ09ORklHX01FTUNHX1YxCiAJCVdSSVRFX09OQ0UobWVtY2ctJmd0O3N3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTsKIAkJbWVtY2ctJmd0O21lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDsKJiM0MzsJCW1lbWNnLSZndDttZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDsKIAkJV1JJVEVfT05DRShtZW1jZy0mZ3Q7b29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC0mZ3Q7b29tX2tpbGxfZGlzYWJsZSkpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmYW1wO21lbWNnLSZndDtrbWVtLCAmYW1wO3BhcmVudC0mZ3Q7a21lbSwgZmFsc2UpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmYW1wO21lbWNnLSZndDt0Y3BtZW0sICZhbXA7cGFyZW50LSZndDt0Y3BtZW0sIGZhbHNlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqUGF0Y2ggQW5hbHlzaXM6IGBtbS9tZW1jb250cm9sLmNgIE1vZGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdG91Y2hpbmcgYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYSBjaGFuZ2Ugd2l0aGluIHRoZSBgbWVtX2Nncm91cF9jc3NfYWxsb2MoKWAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGZ1bmN0aW9uIOKAkyBpdCYjMzk7cyBjcnVjaWFsIGZvciBhbGxvY2F0aW5nIHRoZSBjb250cm9sIHN0cnVjdHVyZXMgZm9yIG1lbW9yeSBjZ3JvdXBzLiBUaGUgcGF0Y2gsIHdpdGhpbiB0aGUgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgIGJsb2NrLCBzZXRzIGBtZW1jZy0mZ3Q7bWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7YC4gVGhpcyBsaW5lIGlzIGtleSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBkZWNpZGluZyB3aGV0aGVyIHRvIHRyYWNrIG1lbW9yeSBzd2FwIGZhaWx1cmUgY291bnRzLCBiYXNlZCBvbiBpZiB0aGUgbWVtb3J5IGNncm91cCBpcyBvbiB0aGUgZGVmYXVsdCBmYWlsdXJlLWxldmVsLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGBtZW1fY2dyb3VwX2Nzc19hbGxvY2AgaW4gdGhlIGNvZGUgaXRzZWxmLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoZXJlIHRoaXMgYXNzaWdubWVudCBmaXRzIGludG8gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBjb25kaXRpb25hbGx5IHRyYWNraW5nIGBmYWlsY250YCBiYXNlZCBvbiB0aGF0IGAhbWVtY2dfb25fZGZsYCBjb25kaXRpb24/IEkmIzM5O20gd29uZGVyaW5nIHdoYXQgYG1lbWNnX29uX2RmbGAgcmVwcmVzZW50cy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0IG1pZ2h0IGJlIGFib3V0IHByaW9yaXRpemluZyB0cmFja2luZyBmb3Igbm9uLWRlZmF1bHQgY29uZmlndXJhdGlvbnMgb3IgcGVyaGFwcyBsZWdhY3kgaW1wbGVtZW50YXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgcHVycG9zZS4gVGhlIHdob2xlIHBvaW50IGhlcmUgaXMsIGNsZWFybHksIGFib3V0IG1vbml0b3JpbmcgZmFpbHVyZXMgaW4gbWVtb3J5LXN3YXBwaW5nIG9wZXJhdGlvbnMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiAqd2hlbiogdGhhdCB0cmFja2luZyBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY3NzX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00MjEyPXN0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqIF9fcmVmXG5tbS9tZW1jb250cm9sLmM6NDIxMzptZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbm1tL21lbWNvbnRyb2wuYy00MjE0LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE1ND1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG5tbS9tZW1jb250cm9sLmM6NTE1NTpcdC5jc3NfYWxsb2MgPSBtZW1fY2dyb3VwX2Nzc19hbGxvYyxcbm1tL21lbWNvbnRyb2wuYy01MTU2LVx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENncm91cCBBbGxvY2F0aW9uIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLCB3aGljaCBJIGtub3cgaXMgdGhlIGNvcmUgYWxsb2NhdGlvbiBmdW5jdGlvbiBmb3IgbWVtb3J5IGNncm91cHMuIFRoZSBjaGFuZ2UgSSYjMzk7bSBleGFtaW5pbmcgaW5pdGlhbGl6ZXMgYG1lbXN3LnRyYWNrX2ZhaWxjbnRgIHRvIGAhbWVtY2dfb25fZGZsYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBmdW5jdGlvbmFsbHkgc3BlYWtpbmcuIEkgc2VlIHdoYXQmIzM5O3MgYmVpbmcgZG9uZS4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpcyB0aGlzIGB0cmFja19mYWlsY250YCBhY3R1YWxseSAqdXNlZCogYW55d2hlcmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhhdCB2YXJpYWJsZSB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgaGFzIGFueSByZWFsLXdvcmxkIGVmZmVjdC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJhY2tfZmFpbGNudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDIxMz1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIzNi1cdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XG5tbS9tZW1jb250cm9sLmM6NDIzNzpcdFx0bWVtY2ctXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xubW0vbWVtY29udHJvbC5jOjQyMzg6XHRcdG1lbWNnLVx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xubW0vbWVtY29udHJvbC5jLTQyMzktXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlb29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC1cdTAwM2Vvb21fa2lsbF9kaXNhYmxlKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEwMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkRpdmluZyBpbnRvIGBwYWdlX2NvdW50ZXJgIGFuZCBgdHJhY2tfZmFpbGNudGAqKgoKSG1tLCBub3cgdGhhdCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0LCBpc24mIzM5O3QgYHRyYWNrX2ZhaWxjbnRgIGEgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IHBhZ2VfY291bnRlcmA/IEkgYmV0dGVyIGNvbmZpcm0gdGhhdC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIGZvciB0aGF0IHN0cnVjdC4gTG9va3MgbGlrZSBJJiMzOTtsbCBuZWVkIHRvIGdvIHRvIGBpbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oYCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIGRldGFpbHMgcmlnaHQuIEdvdHRhIGJlIHByZWNpc2Ugd2hlbiBkZWFsaW5nIHdpdGggbG93LWxldmVsIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgbGlrZSB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYWNrX2ZhaWxjbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg9MTA9c3RydWN0IHBhZ2VfY291bnRlciB7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaC0zNy1cdGJvb2wgcHJvdGVjdGlvbl9zdXBwb3J0O1xuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaDozODpcdGJvb2wgdHJhY2tfZmFpbGNudDtcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgtMzktXHR1bnNpZ25lZCBsb25nIG1pbjtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oPTU1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgtNjItXHRjb3VudGVyLVx1MDAzZXByb3RlY3Rpb25fc3VwcG9ydCA9IHByb3RlY3Rpb25fc3VwcG9ydDtcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg6NjM6XHRjb3VudGVyLVx1MDAzZXRyYWNrX2ZhaWxjbnQgPSBmYWxzZTtcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgtNjQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG1lbXN3IEZhaWxjbnQgVHJhY2tpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZW5hYmxpbmcgdGhlIHRyYWNraW5nIG9mIGBmYWlsY250YCBmb3IgdGhlIGBtZW1zd2AgY291bnRlciB3aXRoaW4gbWVtY2cgdjEuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBlbmhhbmNlbWVudCwgbm8gZG91YnQgYWJvdXQgaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGlzIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGxvb2sgZm9yIHRoZSByZWxldmFudCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gQWgsIGhlcmUgd2UgYXJlLCBpdCYjMzk7cyB1c2luZyBgI2lmZGVmIENPTkZJR19NRU1DR19WMWAuIE15IG5leHQgbW92ZSBpcyB0byBjaGVjayBgbW0vS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgaW5pdC9LY29uZmlnYCB0byBwaW5wb2ludCB0aGUgY29uZmlndXJhdGlvbiBkZWZpbml0aW9uIGZvciBgTUVNQ0dfVjFgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd2lsbCBmaW5kIHRoZSBjcnVjaWFsIGRldGFpbHMgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0dfVjEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwOTM9Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4tLVxuaW5pdC9LY29uZmlnLTEwOTktXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAxLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgQ29udHJvbCBHcm91cCBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgY3VycmVudCBjb25maWcgaXMgYE1FTUNHX1YxYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCwgcmlnaHQ/IE15IGluaXRpYWwgZm9jdXMgaXMgYWx3YXlzIG9uIHdoYXQmIzM5O3MgZXhwbGljaXRseSAqZW5hYmxlZCouIEJ1dC4uLiBob2xkIG9uIGEgc2Vjb25kLiBJc24mIzM5O3QgdGhlcmUgYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIG1lbW9yeSBjb250cm9sIGdyb3Vwcz8gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgc2ltcGxlciwgbWF5YmUganVzdCBgTUVNQ0dgPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYSBkaWZmZXJlbmNlIGJldHdlZW4gYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCwgb3IgaWYgb25lIHN1cGVyc2VkZXMgdGhlIG90aGVyLiBLbm93aW5nIGhvdyB0aGVzZSBvcHRpb25zIGludGVyYWN0IGlzIGNydWNpYWwgYmVmb3JlIHByb2NlZWRpbmcuIFRoaXMgZGlmZmVyZW5jZSBjYW4gY2hhbmdlIGhvdyByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBpc29sYXRpb24gd29yayBzaWduaWZpY2FudGx5LiBJIGhhdmUgdG8gbG9vayBpbnRvIHRoaXMgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjc9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzYtXG5pbml0L0tjb25maWc6MTA3Nzpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc4LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDg1LVxuaW5pdC9LY29uZmlnOjEwODY6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDg3LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDkyLVxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5NC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5OS1cbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDEtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI1MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IG9mIE1FTUNHX1YxKioKCk9rYXksIHNvIGBNRU1DR19WMWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgTUVNQ0dgLiBNYWtlcyBzZW5zZSwgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSByZWxhdGlvbnNoaXAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgY2hlY2sgYGluaXQvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgZGVjbGFyZWQgZm9yIGBNRU1DR19WMWAuIEkmIzM5O2xsIGNvbmZpcm0gaG93IGBNRU1DR2AgcmVsYXRlcyB0byBgTUVNQ0dfVjFgIGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBidWlsZC10aW1lIHJlcXVpcmVtZW50cy4gVGhpcyBpbml0aWFsIGxvb2sgc2hvdWxkIHRlbGwgbWUgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgZGVjbGFyZWQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB0d28gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTU6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTY6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTc6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTg6XHRcdGRlZmF1bHQgeVxuMTA5OTpcdFxuMTEwMDpcdGNvbmZpZyBNRU1DR19WMVxuMTEwMTpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTAyOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTAzOlx0XHRkZWZhdWx0IG5cbjExMDQ6XHRcdGhlbHBcbjExMDU6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTA2Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4xMTA3Olx0XHQgIHdoaWNoIGhhdmVuJiMzOTt0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxuMTEwODpcdFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcbjExMDk6XHRcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXG4xMTEwOlx0XG4xMTExOlx0XHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcbjExMTI6XHRcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxuMTExMzpcdFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXG4xMTE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MDQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTWVtb3J5IENvbnRyb2wgR3JvdXAgSW52ZXN0aWdhdGlvbiAtIEluaXRpYWwgRm9jdXMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1lbW9yeSBjb250cm9sIGdyb3VwcyBoZXJlIOKAkyBzcGVjaWZpY2FsbHksIGBNRU1DR2AgYW5kIGBNRU1DR19WMWAuIFNlZW1zIGxpa2UgdGhvc2UgYXJlIHRoZSBwcmltYXJ5IHBsYXllcnMuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzOiB3aGljaCBmdW5jdGlvbiBzaG91bGQgSSBiZSBjb25jZW50cmF0aW5nIG9uPyBUaGlua2luZyBhYm91dCBpdCwgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHRyYWNlIHRoaW5ncy4gVGhhdCBzdWdnZXN0cyBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwsIGJlaW5nIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBOb3csIGEgbW9yZSBzcGVjaWZpYyBnb2FsOiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1bmN0aW9uKHMpIHdoaWNoIHVzZSBgdHJhY2tfZmFpbGNudGAuIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIGZpbmQgdGhhdD8gUHJvYmFibHkgd2l0aGluIHRoZSByZWFsbSBvZiBwYWdlIGNvdW50ZXIgbG9naWMuIEVpdGhlciBgcGFnZV9jb3VudGVyLmNgIG9yIGBwYWdlX2NvdW50ZXIuaGAgc2hvdWxkIGJlIHRoZSBrZXkgZmlsZXMgdG8gaW52ZXN0aWdhdGUgZm9yIGFueSB0cmFjZXMgb2YgYHRyYWNrX2ZhaWxjbnRgIHVzYWdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cmFja19mYWlsY250JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9jb3VudGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9jb3VudGVyLmM9MTE4PWJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbi0tXG5tbS9wYWdlX2NvdW50ZXIuYy0xMjMtXHRib29sIHByb3RlY3Rpb24gPSB0cmFja19wcm90ZWN0aW9uKGNvdW50ZXIpO1xubW0vcGFnZV9jb3VudGVyLmM6MTI0Olx0Ym9vbCB0cmFja19mYWlsY250ID0gY291bnRlci1cdTAwM2V0cmFja19mYWlsY250O1xubW0vcGFnZV9jb3VudGVyLmMtMTI1LVxuLS1cbm1tL3BhZ2VfY291bnRlci5jLTE0OS1cdFx0XHQgKi9cbm1tL3BhZ2VfY291bnRlci5jOjE1MDpcdFx0XHRpZiAodHJhY2tfZmFpbGNudClcbm1tL3BhZ2VfY291bnRlci5jLTE1MS1cdFx0XHRcdGRhdGFfcmFjZShjLVx1MDAzZWZhaWxjbnQmIzQzOyYjNDM7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI2OAoJCQkJCQkJb3V0cHV0OiAxMTgKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBQZXJmb3JtYW5jZSBJbXBhY3Qgb2YgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkgc2VlIGBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZWAgaXMgdXNpbmcgc29tZXRoaW5nLi4uIGFoLCByaWdodC4gVGhhdCBmdW5jdGlvbiBpcyBhIGtub3duIGhvdCBwYXRoLiBUaGF0IHJhaXNlcyBhbiBpbW1lZGlhdGUgcmVkIGZsYWcuIFRoZSBwYXRjaCBpdHNlbGYgaXMgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYC4gTGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyAtIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzIHRoYXQgSSBzaG91bGQga2VlcCBhbiBleWUgb24/IEFscmlnaHQsIGxvb2tzIGxpa2UgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCBpcyBjYWxsZWQgd2hlbiBhIG5ldyBtZW1vcnkgY2dyb3VwIGlzIHNwdW4gdXAuIEdpdmVuIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgcG90ZW50aWFsIGZvciBpdCB0byBiZSBoaXQgYSBsb3QgaW4gY29udGFpbmVyIGVudmlyb25tZW50cywgaXQgc2VlbXMgbGlrZSBhIHZlcnkgd29ydGh3aGlsZSBwbGFjZSB0byBmb2N1cyBteSBlbmVyZ3kuIFdlJiMzOTtsbCBjb25jZW50cmF0ZSBvbiB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX2Nzc19hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmFibGVzIHRyYWNraW5nIG9mIGZhaWxjbnQgZm9yIHRoZSBtZW1zdyAobWVtb3J5JiM0Mztzd2FwKSBjb3VudGVyIGluIG1lbWNnIHYxIGJ5IGluaXRpYWxpemluZyBtZW1zdy50cmFja19mYWlsY250IHRvICFtZW1jZ19vbl9kZmwgaW4gbWVtX2Nncm91cF9jc3NfYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9jc3NfYWxsb2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZW5hYmxlcyB0cmFja2luZyBvZiBmYWlsY250IGZvciB0aGUgbWVtc3cgKG1lbW9yeSYjNDM7c3dhcCkgY291bnRlciBpbiBtZW1jZyB2MSBieSBpbml0aWFsaXppbmcgbWVtc3cudHJhY2tfZmFpbGNudCB0byAhbWVtY2dfb25fZGZsIGluIG1lbV9jZ3JvdXBfY3NzX2FsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBsZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGFzc2lnbm1lbnQgdG8gYG1lbWNnLVx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnRgIGR1cmluZyBtZW1jZyBhbGxvY2F0aW9uLiBUaGUgYG1lbWNnYCBzdHJ1Y3R1cmUgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhpcyBpcyBhIGxvZ2ljYWwgZml4IGZvciBtZW1vcnkgY29udHJvbGxlciBiZWhhdmlvciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWNhbCBidWdzIGhlcmUuIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc5ZjFmZjY0MjgwNmI1YjZmMmY2NmE1OTQ4ZWMxYmZmM2ZjZjc0NTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwODoyMDozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA2OTM5YTRmYmI5OTE0Li40ZmZlNWIzNzMzZDliIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00MjM1LDYgJiM0Mzs0MjM1LDcgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpCiAjaWZkZWYgQ09ORklHX01FTUNHX1YxCiAJCVdSSVRFX09OQ0UobWVtY2ctJmd0O3N3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTsKIAkJbWVtY2ctJmd0O21lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDsKJiM0MzsJCW1lbWNnLSZndDttZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDsKIAkJV1JJVEVfT05DRShtZW1jZy0mZ3Q7b29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC0mZ3Q7b29tX2tpbGxfZGlzYWJsZSkpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmYW1wO21lbWNnLSZndDtrbWVtLCAmYW1wO3BhcmVudC0mZ3Q7a21lbSwgZmFsc2UpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmYW1wO21lbWNnLSZndDt0Y3BtZW0sICZhbXA7cGFyZW50LSZndDt0Y3BtZW0sIGZhbHNlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtY29udHJvbCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0JiMzOTtzIGFkZGluZyBvbmUgbGluZSB0byBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpbnNpZGUgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jKClgLCBpdCYjMzk7cyBzZXR0aW5nIGBtZW1jZy0mZ3Q7bWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7YC4gSG1tLCBzbyBpdCYjMzk7cyBpbml0aWFsaXppbmcgdGhpcyBgdHJhY2tfZmFpbGNudGAgZmllbGQgd2l0aGluIGBtZW1jZy0mZ3Q7bWVtc3dgLiBSaWdodCwgaXQmIzM5O3Mgc2V0dGluZyBhIGJvb2xlYW4gZmxhZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS4gSXMgaXQganVzdCBpbml0aWFsaXppbmcgc29tZXRoaW5nIHRoYXQgKm1pZ2h0KiBoYXZlIGJlZW4gdW5pbml0aWFsaXplZCwgb3Igc2ltcGx5IHNldHRpbmcgaXQgdG8gYSBkZWZpbmVkIHZhbHVlPyBJIGJldHRlciBkaWcgaW50byBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIHRvIGJlIGNlcnRhaW4uCgpMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgbWVtY2dgIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgc29tZXdoZXJlIGluIHRoYXQgZnVuY3Rpb24sIHByb2JhYmx5IHdpdGggc29tZXRoaW5nIGxpa2UgYGt6YWxsb2NgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiB0aGF0IHdvdWxkIHplcm8taW5pdGlhbGl6ZSB0aGUgbWVtb3J5LiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0byBiZSAxMDAlIHN1cmUgd2UgYXJlIGluIGdvb2Qgc2hhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfY3NzX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00MjEyPXN0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqIF9fcmVmXG5tbS9tZW1jb250cm9sLmM6NDIxMzptZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbm1tL21lbWNvbnRyb2wuYy00MjE0LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTE1ND1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG5tbS9tZW1jb250cm9sLmM6NTE1NTpcdC5jc3NfYWxsb2MgPSBtZW1fY2dyb3VwX2Nzc19hbGxvYyxcbm1tL21lbWNvbnRyb2wuYy01MTU2LVx0LmNzc19vbmxpbmUgPSBtZW1fY2dyb3VwX2Nzc19vbmxpbmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCBmdW5jdGlvbi4gSXTigJlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGhhdmUgYW55IGNoYW5jZSB0byB1bmRlcnN0YW5kIHRoZSBkZWVwZXIgcGFydHMgb2YgaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBjcmVhdGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhleSBhcmUgdHJ5aW5nIHRvIGRvIGhlcmUuCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGludG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIxMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjEyOlx0c3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICogX19yZWZcbjQyMTM6XHRtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbjQyMTQ6XHR7XG40MjE1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gbWVtX2Nncm91cF9mcm9tX2NzcyhwYXJlbnRfY3NzKTtcbjQyMTY6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKm9sZF9tZW1jZztcbjQyMTc6XHRcdGJvb2wgbWVtY2dfb25fZGZsID0gY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKTtcbjQyMTg6XHRcbjQyMTk6XHRcdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cocGFyZW50KTtcbjQyMjA6XHRcdG1lbWNnID0gbWVtX2Nncm91cF9hbGxvYyhwYXJlbnQpO1xuNDIyMTpcdFx0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xuNDIyMjpcdFx0aWYgKElTX0VSUihtZW1jZykpXG40MjIzOlx0XHRcdHJldHVybiBFUlJfQ0FTVChtZW1jZyk7XG40MjI0Olx0XG40MjI1Olx0XHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTtcbjQyMjY6XHRcdG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTtcbjQyMjc6XHQjaWZkZWYgQ09ORklHX1pTV0FQXG40MjI4Olx0XHRtZW1jZy1cdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xuNDIyOTpcdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2V6c3dhcF93cml0ZWJhY2ssIHRydWUpO1xuNDIzMDpcdCNlbmRpZlxuNDIzMTpcdFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xuNDIzMjpcdFx0aWYgKHBhcmVudCkge1xuNDIzMzpcdFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIFx1MDAyNnBhcmVudC1cdTAwM2VtZW1vcnksIG1lbWNnX29uX2RmbCk7XG40MjM0Olx0XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFx1MDAyNnBhcmVudC1cdTAwM2Vzd2FwLCBmYWxzZSk7XG40MjM1Olx0I2lmZGVmIENPTkZJR19NRU1DR19WMVxuNDIzNjpcdFx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcbjQyMzc6XHRcdFx0bWVtY2ctXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuNDIzODpcdFx0XHRtZW1jZy1cdTAwM2VtZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcbjQyMzk6XHRcdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vvb21fa2lsbF9kaXNhYmxlLCBSRUFEX09OQ0UocGFyZW50LVx1MDAzZW9vbV9raWxsX2Rpc2FibGUpKTtcbjQyNDA6XHRcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNla21lbSwgXHUwMDI2cGFyZW50LVx1MDAzZWttZW0sIGZhbHNlKTtcbjQyNDE6XHRcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNldGNwbWVtLCBcdTAwMjZwYXJlbnQtXHUwMDNldGNwbWVtLCBmYWxzZSk7XG40MjQyOlx0I2VuZGlmXG40MjQzOlx0XHR9IGVsc2Uge1xuNDI0NDpcdFx0XHRpbml0X21lbWNnX3N0YXRzKCk7XG40MjQ1Olx0XHRcdGluaXRfbWVtY2dfZXZlbnRzKCk7XG40MjQ2Olx0XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgTlVMTCwgdHJ1ZSk7XG40MjQ3Olx0XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcbjQyNDg6XHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXG40MjQ5Olx0XHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIE5VTEwsIGZhbHNlKTtcbjQyNTA6XHRcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNldGNwbWVtLCBOVUxMLCBmYWxzZSk7XG40MjUxOlx0I2VuZGlmXG40MjUyOlx0XHRcdHJvb3RfbWVtX2Nncm91cCA9IG1lbWNnO1xuNDI1MzpcdFx0XHRyZXR1cm4gXHUwMDI2bWVtY2ctXHUwMDNlY3NzO1xuNDI1NDpcdFx0fVxuNDI1NTpcdFxuNDI1NjpcdFx0aWYgKG1lbWNnX29uX2RmbCBcdTAwMjZcdTAwMjYgIWNncm91cF9tZW1vcnlfbm9zb2NrZXQpXG40MjU3Olx0XHRcdHN0YXRpY19icmFuY2hfaW5jKFx1MDAyNm1lbWNnX3NvY2tldHNfZW5hYmxlZF9rZXkpO1xuNDI1ODpcdFxuNDI1OTpcdFx0aWYgKCFjZ3JvdXBfbWVtb3J5X25vYnBmKVxuNDI2MDpcdFx0XHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZtZW1jZ19icGZfZW5hYmxlZF9rZXkpO1xuNDI2MTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkZpeGluZyBhIE1lbW9yeSBDb250cm9sbGVyIFRyYWNraW5nIElzc3VlKioKCkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBhY2NvdW50aW5nLiBUaGUgY29yZSBvZiB0aGUgZml4IHNlZW1zIHRvIGJlIGluaXRpYWxpemluZyBgbWVtY2ctJmd0O21lbXN3LnRyYWNrX2ZhaWxjbnRgIHdpdGggYCFtZW1jZ19vbl9kZmxgLiBCYXNpY2FsbHksIHRoaXMgdmFyaWFibGUmIzM5O3MgYmVlbiBoYXZpbmcgaW5pdGlhbGl6YXRpb24gaXNzdWVzLCB3aGljaCBpcyBjYXVzaW5nIHByb2JsZW1zIHdpdGggdHJhY2tpbmcgZmFpbGVkIG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRoaW4gdGhlIG1lbW9yeSBzd2FwIGFjY291bnRpbmcgc3lzdGVtLiBSaWdodCwgZ290IGl0LgoKTm93LCBsZXQmIzM5O3MgYmFjayB1cCBhIHNlY29uZCB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIGhlcmUuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIHRoYXQmIzM5O3MgdG9wIG9mIG1pbmQgaXMgKmhvdyogdGhlIGBtZW1jZ2Agc3RydWN0dXJlLCB0byB3aGljaCB0aGlzIGZpeCBhcHBsaWVzLCBpcyBhY3R1YWxseSBnZXR0aW5nIGluaXRpYWxpemVkIGluIHRoZSBmaXJzdCBwbGFjZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCYjMzk7cyBzZWUgaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBhbGxvY2F0ZWQsIHJpZ2h0PyBJdCYjMzk7cyBhbGxvY2F0ZWQgdmlhIGBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudClgLiBPa2F5LCBzbyBsZXQmIzM5O3MgY2hlY2sgdGhhdCBvdXQuIFdlIHNob3VsZCBjaGVjayB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZSBuZXh0IHRvIGJlIDEwMCUgc3VyZSB3ZSYjMzk7cmUgYWRkcmVzc2luZyB0aGUgcm9vdCBjYXVzZS4gVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgdGVsbCB1cyBpZiB0aGlzIGZpeCBpcyBzdWZmaWNpZW50IG9yIHBvdGVudGlhbGx5IGhpZGluZyBhbm90aGVyIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00MTM1PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZnJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTQxNDEtXG5tbS9tZW1jb250cm9sLmM6NDE0MjpzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wuYy00MTQzLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDIxMz1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIxOS1cdG9sZF9tZW1jZyA9IHNldF9hY3RpdmVfbWVtY2cocGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYzo0MjIwOlx0bWVtY2cgPSBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudCk7XG5tbS9tZW1jb250cm9sLmMtNDIyMS1cdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDg6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG1lbV9jZ3JvdXBfYWxsb2NgIGZ1bmN0aW9uLgoKKipBbmFseXppbmcgYG1lbV9jZ3JvdXBfYWxsb2NgKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgYWxsb2NhdGlvbiBoYXBwZW5zIHdpdGhpbiBhIG1lbW9yeSBjZ3JvdXAuIExldCYjMzk7cyBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXF1ZXN0cyBmb3IgbWVtb3J5IHdpdGhpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbWVjaGFuaWNzLCBzcGVjaWZpY2FsbHk6IGhvdyBpcyB0aGUgbWVtb3J5IGFjY291bnRpbmcgaGFuZGxlZD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjaGVja3Mgb3IgbGltaXRzIGVuZm9yY2VkIGhlcmU/IEkmIzM5O2xsIG5lZWQgdG8ga25vdyBpZiBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIG1vcmUgZ2VuZXJhbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLiBJIG5lZWQgdG8gbm90ZSBhbnkgc3BlY2lmaWMgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgb3Igb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMgdXNlZCwgYW5kIGFueSBpbnRlZ3JhdGlvbiB3aXRoIE5VTUEgaWYgYXBwbGljYWJsZS4gQW55IGVycm9yIGhhbmRsaW5nIGlzIGdvaW5nIHRvIGJlIGNyaXRpY2FsLCB0b28uIEkgd2FudCB0byBzZWUgaG93IGFsbG9jYXRpb24gZmFpbHVyZXMgYXJlIG1hbmFnZWQsIGFuZCBob3cgdGhlIHN5c3RlbSBiZWhhdmVzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGF0IHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxNDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDE0MjpcdHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuNDE0MzpcdHtcbjQxNDQ6XHRcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XG40MTQ1Olx0XHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgX19wZXJjcHUgKnBzdGF0Y19wY3B1O1xuNDE0NjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNDE0NzpcdFx0aW50IG5vZGUsIGNwdTtcbjQxNDg6XHRcdGludCBfX21heWJlX3VudXNlZCBpO1xuNDE0OTpcdFx0bG9uZyBlcnJvcjtcbjQxNTA6XHRcbjQxNTE6XHRcdG1lbWNnID0ga21lbV9jYWNoZV96YWxsb2MobWVtY2dfY2FjaGVwLCBHRlBfS0VSTkVMKTtcbjQxNTI6XHRcdGlmICghbWVtY2cpXG40MTUzOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuNDE1NDpcdFxuNDE1NTpcdFx0ZXJyb3IgPSB4YV9hbGxvYyhcdTAwMjZtZW1fY2dyb3VwX3ByaXZhdGVfaWRzLCBcdTAwMjZtZW1jZy1cdTAwM2VpZC5pZCwgTlVMTCxcbjQxNTY6XHRcdFx0XHQgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTtcbjQxNTc6XHRcdGlmIChlcnJvcilcbjQxNTg6XHRcdFx0Z290byBmYWlsO1xuNDE1OTpcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuNDE2MDpcdFxuNDE2MTpcdFx0bWVtY2ctXHUwMDNldm1zdGF0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtZW1jZ192bXN0YXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuNDE2MjpcdFx0aWYgKCFtZW1jZy1cdTAwM2V2bXN0YXRzKVxuNDE2MzpcdFx0XHRnb3RvIGZhaWw7XG40MTY0Olx0XG40MTY1Olx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1LFxuNDE2NjpcdFx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuNDE2NzpcdFx0aWYgKCFtZW1jZy1cdTAwM2V2bXN0YXRzX3BlcmNwdSlcbjQxNjg6XHRcdFx0Z290byBmYWlsO1xuNDE2OTpcdFxuNDE3MDpcdFx0aWYgKCFtZW1jZzFfYWxsb2NfZXZlbnRzKG1lbWNnKSlcbjQxNzE6XHRcdFx0Z290byBmYWlsO1xuNDE3MjpcdFxuNDE3MzpcdFx0cHN0YXRjX3BjcHUgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0c19wZXJjcHUgOiBOVUxMO1xuNDE3NDpcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuNDE3NTpcdFx0XHRzdGF0YyA9IHBlcl9jcHVfcHRyKG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xuNDE3NjpcdFx0XHRzdGF0Yy1cdTAwM2VwYXJlbnRfcGNwdSA9IHBzdGF0Y19wY3B1O1xuNDE3NzpcdFx0XHRzdGF0Yy1cdTAwM2V2bXN0YXRzID0gbWVtY2ctXHUwMDNldm1zdGF0cztcbjQxNzg6XHRcdH1cbjQxNzk6XHRcbjQxODA6XHRcdGZvcl9lYWNoX25vZGUobm9kZSlcbjQxODE6XHRcdFx0aWYgKCFhbGxvY19tZW1fY2dyb3VwX3Blcl9ub2RlX2luZm8obWVtY2csIG5vZGUpKVxuNDE4MjpcdFx0XHRcdGdvdG8gZmFpbDtcbjQxODM6XHRcbjQxODQ6XHRcdGlmIChtZW1jZ193Yl9kb21haW5faW5pdChtZW1jZywgR0ZQX0tFUk5FTCkpXG40MTg1Olx0XHRcdGdvdG8gZmFpbDtcbjQxODY6XHRcbjQxODc6XHRcdElOSVRfV09SSyhcdTAwMjZtZW1jZy1cdTAwM2VoaWdoX3dvcmssIGhpZ2hfd29ya19mdW5jKTtcbjQxODg6XHRcdHZtcHJlc3N1cmVfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2V2bXByZXNzdXJlKTtcbjQxODk6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9wZWFrcyk7XG40MTkwOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwX3BlYWtzKTtcbjQxOTE6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXBlYWtzX2xvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwODoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU1CgkJCQkJCQlvdXRwdXQ6IDEyOAoJCQkJCQkJdGhvdWdodHM6IDcyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIHNpbmdsZSBsaW5lIHdpdGhpbiBgbWVtX2Nncm91cF9jc3NfYWxsb2MoKWA6IGBtZW1jZy0mZ3Q7bWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpbnRyb2R1Y2VzIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcywgd2hpY2ggaXMgd2hhdCBLTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QuIExldCYjMzk7cyBicmVhayBpdCBkb3duLgoKRmlyc3QsIEkgc2VlIHRoYXQgYG1lbWNnYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC4gVGhlcmVmb3JlLCBiZWZvcmUgdGhlIHBhdGNoLCBgbWVtY2ctJmd0O21lbXN3LnRyYWNrX2ZhaWxjbnRgIHdvdWxkIGhhdmUgYmVlbiB6ZXJvLiBUaGlzIHBhdGNoIHNpbXBseSBzZXRzIGEgYm9vbGVhbiBmbGFnLCBgdHJhY2tfZmFpbGNudGAsIHdpdGhpbiB0aGUgYG1lbXN3YCBwYWdlIGNvdW50ZXIgc3RydWN0dXJlLgoKVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGZsYWcgaXMgYmVpbmcgKnNldCogdG8gYSBrbm93biB2YWx1ZSAoYCFtZW1jZ19vbl9kZmxgKSwgbm90ICpyZWFkKiBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSYjMzk7cyBubyBzY2VuYXJpbyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGEgY29udHJvbCBmbG93IGRlY2lzaW9uLiBJdCYjMzk7cyBqdXN0IGEgdmFyaWFibGUgYmVpbmcgYXNzaWduZWQgYSB2YWx1ZSBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgbWVtY2dgIHN0cnVjdHVyZS4KCldhaXQsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgdHJhY2tfZmFpbGNudGAgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBzb21lIHdlaXJkIHVuaW9uIG9yIHNvbWV0aGluZy4gSXQmIzM5O3MgYSBib29sZWFuIG9yIGFuIGludC4gSXQgd2FzIG1pc3NpbmcsIGFuZCBub3cgaXQmIzM5O3Mgbm90LiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZSwgb25seSBhIGNoYW5nZSBpbiBiZWhhdmlvdXIgb2YgdGhlIHBhZ2UgY291bnRlci4gVGhlIHBhdGNoIGlzIHNpbXBseSBpbml0aWFsaXppbmcgYSBmaWVsZCB0byBhIHNwZWNpZmljIHZhbHVlIGluc3RlYWQgb2YgbGVhdmluZyBpdCBhdCB0aGUgemVybyBpbml0aWFsIHZhbHVlIHRoYXQgYGttZW1fY2FjaGVfemFsbG9jYCB3b3VsZCBoYXZlIHNldC4KCk9rYXksIGxldCYjMzk7cyB2ZXJpZnkgaG93IGBtZW1zd2AgZ2V0cyBpbml0aWFsaXplZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyB0aGUgYHBhZ2VfY291bnRlcmAgaXMgaW5pdGlhbGl6ZWQuIExldCYjMzk7cyBzZWUuLi4gYG1lbWNnLSZndDttZW1zd2AgaXMgYSBgcGFnZV9jb3VudGVyYC4gQWgsIEkgc2VlIHRoYXQgdGhlIGBwYWdlX2NvdW50ZXJfaW5pdGAgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBgbWVtY2ctJmd0O21lbW9yeWAsIGBtZW1jZy0mZ3Q7c3dhcGAsIGBtZW1jZy0mZ3Q7a21lbWAsIGBtZW1jZy0mZ3Q7dGNwbWVtYCwgYnV0IG5vdCBgbWVtc3dgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYG1lbXN3YCBnZXRzIGluaXRpYWxpemVkLgoKQWhhISBMb29raW5nIGNsb3NlciBhdCBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLCBJIHNlZSB0aGF0IHRoZSBgbWVtc3dgIGlzIGluaXRpYWxpemVkIHRoZXJlLCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgIGJsb2NrLiBTcGVjaWZpY2FsbHksIEkgZmluZDoKCmBgYGMKCQlXUklURV9PTkNFKG1lbWNnLSZndDtzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7CgkJbWVtY2ctJmd0O21lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDsKCQltZW1jZy0mZ3Q7bWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7CgkJV1JJVEVfT05DRShtZW1jZy0mZ3Q7b29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC0mZ3Q7b29tX2tpbGxfZGlzYWJsZSkpOwoJCXBhZ2VfY291bnRlcl9pbml0KCZhbXA7bWVtY2ctJmd0O2ttZW0sICZhbXA7cGFyZW50LSZndDtrbWVtLCBmYWxzZSk7CgkJcGFnZV9jb3VudGVyX2luaXQoJmFtcDttZW1jZy0mZ3Q7dGNwbWVtLCAmYW1wO3BhcmVudC0mZ3Q7dGNwbWVtLCBmYWxzZSk7CmBgYAoKU28gaXQgKmlzKiBpbml0aWFsaXplZCwgYW5kIHRoaXMgcGF0Y2gganVzdCBzZXRzIGB0cmFja19mYWlsY250YCBkdXJpbmcgYWxsb2NhdGlvbi4gVGhlcmUgaXMgKm5vKiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkLCBhbmQgdGhlcmVmb3JlIEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIHRvb2xzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBUaGUgcGF0Y2ggc2ltcGx5IGVuc3VyZXMgdGhhdCBgbWVtc3cudHJhY2tfZmFpbGNudGAgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkIGR1cmluZyBtZW1jZyBhbGxvY2F0aW9uLCBhbmQgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIGlzIGEgbG9naWNhbCBjb3JyZWN0aW9uLiBOZWVkc0tNU0FOID0gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGFzc2lnbm1lbnQgdG8gYG1lbWNnLVx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnRgIGR1cmluZyBtZW1jZyBhbGxvY2F0aW9uLiBUaGUgYG1lbWNnYCBzdHJ1Y3R1cmUgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhpcyBpcyBhIGxvZ2ljYWwgZml4IGZvciBtZW1vcnkgY29udHJvbGxlciBiZWhhdmlvciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWNhbCBidWdzIGhlcmUuIEtNU0FOIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbWlzc2luZyBhc3NpZ25tZW50IHRvIGBtZW1jZy1cdTAwM2VtZW1zdy50cmFja19mYWlsY250YCBkdXJpbmcgbWVtY2cgYWxsb2NhdGlvbi4gVGhlIGBtZW1jZ2Agc3RydWN0dXJlIGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoaXMgaXMgYSBsb2dpY2FsIGZpeCBmb3IgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZpb3IsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgYnVncyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyMDozMi4zNTIxNjk5NTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzI2Mjc5MDY5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9jc3NfYWxsb2NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGFzc2lnbm1lbnQgdG8gYG1lbWNnLVxcdTAwM2VtZW1zdy50cmFja19mYWlsY250YCBkdXJpbmcgbWVtY2cgYWxsb2NhdGlvbi4gVGhlIGBtZW1jZ2Agc3RydWN0dXJlIGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoaXMgaXMgYSBsb2dpY2FsIGZpeCBmb3IgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZpb3IsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgYnVncyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuYWJsZXMgdHJhY2tpbmcgb2YgZmFpbGNudCBmb3IgdGhlIG1lbXN3IChtZW1vcnkrc3dhcCkgY291bnRlciBpbiBtZW1jZyB2MSBieSBpbml0aWFsaXppbmcgbWVtc3cudHJhY2tfZmFpbGNudCB0byAhbWVtY2dfb25fZGZsIGluIG1lbV9jZ3JvdXBfY3NzX2FsbG9jLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBsZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyMDozMi4zNTIxNzY1MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDMwMjM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc5ZjFmZjY0MjgwNmI1YjZmMmY2NmE1OTQ4ZWMxYmZmM2ZjZjc0NTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDg6MjA6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggNjkzOWE0ZmJiOTkxNC4uNGZmZTViMzczM2Q5YiAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNDIzNSw2ICs0MjM1LDcgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gXFx0XFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xcbiBcXHRcXHRtZW1jZy1cXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xcbitcXHRcXHRtZW1jZy1cXHUwMDNlbWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XFxuIFxcdFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZW9vbV9raWxsX2Rpc2FibGUsIFJFQURfT05DRShwYXJlbnQtXFx1MDAzZW9vbV9raWxsX2Rpc2FibGUpKTtcXG4gXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBcXHUwMDI2cGFyZW50LVxcdTAwM2VrbWVtLCBmYWxzZSk7XFxuIFxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNldGNwbWVtLCBcXHUwMDI2cGFyZW50LVxcdTAwM2V0Y3BtZW0sIGZhbHNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjA6MzIuODIzMTgxMTAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjUxNTAzMjkxODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY3NzX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyB0cmFja2luZyBvZiBmYWlsY250IGZvciB0aGUgbWVtc3cgKG1lbW9yeStzd2FwKSBjb3VudGVyIGluIG1lbWNnIHYxIGJ5IGluaXRpYWxpemluZyBtZW1zdy50cmFja19mYWlsY250IHRvICFtZW1jZ19vbl9kZmwgaW4gbWVtX2Nncm91cF9jc3NfYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc5ZjFmZjY0MjgwNmI1YjZmMmY2NmE1OTQ4ZWMxYmZmM2ZjZjc0NTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwODoyMDozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNjkzOWE0ZmJiOTkxNC4uNGZmZTViMzczM2Q5YiAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNDIzNSw2ICs0MjM1LDcgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIFx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcbiBcdFx0bWVtY2ctXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuK1x0XHRtZW1jZy1cdTAwM2VtZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcbiBcdFx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vvb21fa2lsbF9kaXNhYmxlLCBSRUFEX09OQ0UocGFyZW50LVx1MDAzZW9vbV9raWxsX2Rpc2FibGUpKTtcbiBcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNla21lbSwgXHUwMDI2cGFyZW50LVx1MDAzZWttZW0sIGZhbHNlKTtcbiBcdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNldGNwbWVtLCBcdTAwMjZwYXJlbnQtXHUwMDNldGNwbWVtLCBmYWxzZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyMDozMi44MjMxODIzNzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE0Nzg5NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKlBhdGNoIEFuYWx5c2lzOiBgbW0vbWVtY29udHJvbC5jYCBNb2RpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCB0b3VjaGluZyBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGNoYW5nZSB3aXRoaW4gdGhlIGBtZW1fY2dyb3VwX2Nzc19hbGxvYygpYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgZnVuY3Rpb24g4oCTIGl0J3MgY3J1Y2lhbCBmb3IgYWxsb2NhdGluZyB0aGUgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBtZW1vcnkgY2dyb3Vwcy4gVGhlIHBhdGNoLCB3aXRoaW4gdGhlIGAjaWZkZWYgQ09ORklHX01FTUNHX1YxYCBibG9jaywgc2V0cyBgbWVtY2ctXHUwMDNlbWVtc3cudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7YC4gVGhpcyBsaW5lIGlzIGtleSwgaXQgbG9va3MgbGlrZSBpdCdzIGRlY2lkaW5nIHdoZXRoZXIgdG8gdHJhY2sgbWVtb3J5IHN3YXAgZmFpbHVyZSBjb3VudHMsIGJhc2VkIG9uIGlmIHRoZSBtZW1vcnkgY2dyb3VwIGlzIG9uIHRoZSBkZWZhdWx0IGZhaWx1cmUtbGV2ZWwuXG5cbkdpdmVuIHRoaXMsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGRpdmUgaW50byBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIGluIHRoZSBjb2RlIGl0c2VsZi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGVyZSB0aGlzIGFzc2lnbm1lbnQgZml0cyBpbnRvIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MuIFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgY29uZGl0aW9uYWxseSB0cmFja2luZyBgZmFpbGNudGAgYmFzZWQgb24gdGhhdCBgIW1lbWNnX29uX2RmbGAgY29uZGl0aW9uPyBJJ20gd29uZGVyaW5nIHdoYXQgYG1lbWNnX29uX2RmbGAgcmVwcmVzZW50cy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0IG1pZ2h0IGJlIGFib3V0IHByaW9yaXRpemluZyB0cmFja2luZyBmb3Igbm9uLWRlZmF1bHQgY29uZmlndXJhdGlvbnMgb3IgcGVyaGFwcyBsZWdhY3kgaW1wbGVtZW50YXRpb25zLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlLiBUaGUgd2hvbGUgcG9pbnQgaGVyZSBpcywgY2xlYXJseSwgYWJvdXQgbW9uaXRvcmluZyBmYWlsdXJlcyBpbiBtZW1vcnktc3dhcHBpbmcgb3BlcmF0aW9ucywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mICp3aGVuKiB0aGF0IHRyYWNraW5nIGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjIwOjM3LjkzNzk3NDM2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk4MDE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2Nzc19hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQyMTI9c3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICogX19yZWZcXG5tbS9tZW1jb250cm9sLmM6NDIxMzptZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG5tbS9tZW1jb250cm9sLmMtNDIxNC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE1ND1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxubW0vbWVtY29udHJvbC5jOjUxNTU6XFx0LmNzc19hbGxvYyA9IG1lbV9jZ3JvdXBfY3NzX2FsbG9jLFxcbm1tL21lbWNvbnRyb2wuYy01MTU2LVxcdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyMDozNy45ODc5NjA2MjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQzNDU4Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENncm91cCBBbGxvY2F0aW9uIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCwgd2hpY2ggSSBrbm93IGlzIHRoZSBjb3JlIGFsbG9jYXRpb24gZnVuY3Rpb24gZm9yIG1lbW9yeSBjZ3JvdXBzLiBUaGUgY2hhbmdlIEknbSBleGFtaW5pbmcgaW5pdGlhbGl6ZXMgYG1lbXN3LnRyYWNrX2ZhaWxjbnRgIHRvIGAhbWVtY2dfb25fZGZsYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBmdW5jdGlvbmFsbHkgc3BlYWtpbmcuIEkgc2VlIHdoYXQncyBiZWluZyBkb25lLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgdGhpcyBgdHJhY2tfZmFpbGNudGAgYWN0dWFsbHkgKnVzZWQqIGFueXdoZXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgaW5pdGlhbGl6YXRpb24uIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhhdCB2YXJpYWJsZSB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgaGFzIGFueSByZWFsLXdvcmxkIGVmZmVjdC4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjIwOjQyLjAzMTQyMjYzMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA5MjIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFja19mYWlsY250XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDIxMz1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MjM2LVxcdFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcXG5tbS9tZW1jb250cm9sLmM6NDIzNzpcXHRcXHRtZW1jZy1cXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xcbm1tL21lbWNvbnRyb2wuYzo0MjM4OlxcdFxcdG1lbWNnLVxcdTAwM2VtZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcXG5tbS9tZW1jb250cm9sLmMtNDIzOS1cXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2Vvb21fa2lsbF9kaXNhYmxlLCBSRUFEX09OQ0UocGFyZW50LVxcdTAwM2Vvb21fa2lsbF9kaXNhYmxlKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjIwOjQyLjA3NjUyMDgzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNjkzNDczOTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqRGl2aW5nIGludG8gYHBhZ2VfY291bnRlcmAgYW5kIGB0cmFja19mYWlsY250YCoqXG5cbkhtbSwgbm93IHRoYXQgSSdtIHRoaW5raW5nIGFib3V0IGl0LCBpc24ndCBgdHJhY2tfZmFpbGNudGAgYSBmaWVsZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgcGFnZV9jb3VudGVyYD8gSSBiZXR0ZXIgY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gZm9yIHRoYXQgc3RydWN0LiBMb29rcyBsaWtlIEknbGwgbmVlZCB0byBnbyB0byBgaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaGAgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBkZXRhaWxzIHJpZ2h0LiBHb3R0YSBiZSBwcmVjaXNlIHdoZW4gZGVhbGluZyB3aXRoIGxvdy1sZXZlbCBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjE5LjAxMTI2MzQ0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTExOTg5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJhY2tfZmFpbGNudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg9MTA9c3RydWN0IHBhZ2VfY291bnRlciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oLTM3LVxcdGJvb2wgcHJvdGVjdGlvbl9zdXBwb3J0O1xcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmg6Mzg6XFx0Ym9vbCB0cmFja19mYWlsY250O1xcbmluY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgtMzktXFx0dW5zaWduZWQgbG9uZyBtaW47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oPTU1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX2NvdW50ZXJfaW5pdChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaC02Mi1cXHRjb3VudGVyLVxcdTAwM2Vwcm90ZWN0aW9uX3N1cHBvcnQgPSBwcm90ZWN0aW9uX3N1cHBvcnQ7XFxuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaDo2MzpcXHRjb3VudGVyLVxcdTAwM2V0cmFja19mYWlsY250ID0gZmFsc2U7XFxuaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaC02NC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjE5LjU2MjQ2ODExMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjg5MzIxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBtZW1zdyBGYWlsY250IFRyYWNraW5nIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZW5hYmxpbmcgdGhlIHRyYWNraW5nIG9mIGBmYWlsY250YCBmb3IgdGhlIGBtZW1zd2AgY291bnRlciB3aXRoaW4gbWVtY2cgdjEuIEl0J3MgYSBmdW5jdGlvbmFsIGVuaGFuY2VtZW50LCBubyBkb3VidCBhYm91dCBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoaXMgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gbG9vayBmb3IgdGhlIHJlbGV2YW50IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBBaCwgaGVyZSB3ZSBhcmUsIGl0J3MgdXNpbmcgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLiBNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgYG1tL0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gYGluaXQvS2NvbmZpZ2AgdG8gcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbiBmb3IgYE1FTUNHX1YxYC4gVGhhdCdzIHdoZXJlIEkgd2lsbCBmaW5kIHRoZSBjcnVjaWFsIGRldGFpbHMgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjQ6MjMuODkxNDAyODk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk2NjQ0NTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR19WMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA5Mz1jb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk5LVxcbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAxLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjI1LjU4ODA1MjgyNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE5MzgwNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBDb250cm9sIEdyb3VwIENvbmZpZ3VyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgY3VycmVudCBjb25maWcgaXMgYE1FTUNHX1YxYC4gVGhhdCdzIHRoZSBiYXNlbGluZSB3ZSdyZSB3b3JraW5nIHdpdGgsIHJpZ2h0PyBNeSBpbml0aWFsIGZvY3VzIGlzIGFsd2F5cyBvbiB3aGF0J3MgZXhwbGljaXRseSAqZW5hYmxlZCouIEJ1dC4uLiBob2xkIG9uIGEgc2Vjb25kLiBJc24ndCB0aGVyZSBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbnRyb2wgZ3JvdXBzPyBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBzaW1wbGVyLCBtYXliZSBqdXN0IGBNRU1DR2A/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSdzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGBNRU1DR2AgYW5kIGBNRU1DR19WMWAsIG9yIGlmIG9uZSBzdXBlcnNlZGVzIHRoZSBvdGhlci4gS25vd2luZyBob3cgdGhlc2Ugb3B0aW9ucyBpbnRlcmFjdCBpcyBjcnVjaWFsIGJlZm9yZSBwcm9jZWVkaW5nLiBUaGlzIGRpZmZlcmVuY2UgY2FuIGNoYW5nZSBob3cgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgaXNvbGF0aW9uIHdvcmsgc2lnbmlmaWNhbnRseS4gSSBoYXZlIHRvIGxvb2sgaW50byB0aGlzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgxMywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjI5LjMwNzQzODg4NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNTU5NzkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjc9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ni1cXG5pbml0L0tjb25maWc6MTA3Nzpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OC1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg1LVxcbmluaXQvS2NvbmZpZzoxMDg2OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODctXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTItXFxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTQtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTktXFxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDEtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjQ6MzEuMDEzMDQxMTk0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODIyNzgyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IG9mIE1FTUNHX1YxKipcblxuT2theSwgc28gYE1FTUNHX1YxYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBNRU1DR2AuIE1ha2VzIHNlbnNlLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIHJlbGF0aW9uc2hpcC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbGwgY2hlY2sgYGluaXQvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGRlY2xhcmVkIGZvciBgTUVNQ0dfVjFgLiBJJ2xsIGNvbmZpcm0gaG93IGBNRU1DR2AgcmVsYXRlcyB0byBgTUVNQ0dfVjFgIGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBidWlsZC10aW1lIHJlcXVpcmVtZW50cy4gVGhpcyBpbml0aWFsIGxvb2sgc2hvdWxkIHRlbGwgbWUgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgZGVjbGFyZWQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB0d28gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI1MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjM0Ljk5NTMyMjQ5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwOTU6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjEwOTY6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbjEwOTc6XFx0XFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5ODpcXHRcXHRkZWZhdWx0IHlcXG4xMDk5OlxcdFxcbjExMDA6XFx0Y29uZmlnIE1FTUNHX1YxXFxuMTEwMTpcXHRcXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjExMDI6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DR1xcbjExMDM6XFx0XFx0ZGVmYXVsdCBuXFxuMTEwNDpcXHRcXHRoZWxwXFxuMTEwNTpcXHRcXHQgIExlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZCBieVxcbjExMDY6XFx0XFx0ICBjZ3JvdXAgdjIgaW1wbGVtZW50YXRpb24uIFRoZSB2MSBpcyB0aGVyZSBmb3IgbGVnYWN5IGFwcGxpY2F0aW9uc1xcbjExMDc6XFx0XFx0ICB3aGljaCBoYXZlbid0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxcbjExMDg6XFx0XFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcXG4xMTA5OlxcdFxcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXFxuMTExMDpcXHRcXG4xMTExOlxcdFxcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxcbjExMTI6XFx0XFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXFxuMTExMzpcXHRcXHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cXG4xMTE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNDozNC45OTU0OTgxODdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMTg2MTU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKk1lbW9yeSBDb250cm9sIEdyb3VwIEludmVzdGlnYXRpb24gLSBJbml0aWFsIEZvY3VzKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGhlcmUg4oCTIHNwZWNpZmljYWxseSwgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYC4gU2VlbXMgbGlrZSB0aG9zZSBhcmUgdGhlIHByaW1hcnkgcGxheWVycy4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IHdoaWNoIGZ1bmN0aW9uIHNob3VsZCBJIGJlIGNvbmNlbnRyYXRpbmcgb24/IFRoaW5raW5nIGFib3V0IGl0LCB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGlzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgdGhpbmdzLiBUaGF0IHN1Z2dlc3RzIGBtZW1fY2dyb3VwX2Nzc19hbGxvY2AgaXMgZ29pbmcgdG8gYmUgY2VudHJhbCwgYmVpbmcgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24uIE5vdywgYSBtb3JlIHNwZWNpZmljIGdvYWw6IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZnVuY3Rpb24ocykgd2hpY2ggdXNlIGB0cmFja19mYWlsY250YC4gV2hlcmUgd291bGQgSSBleHBlY3QgdG8gZmluZCB0aGF0PyBQcm9iYWJseSB3aXRoaW4gdGhlIHJlYWxtIG9mIHBhZ2UgY291bnRlciBsb2dpYy4gRWl0aGVyIGBwYWdlX2NvdW50ZXIuY2Agb3IgYHBhZ2VfY291bnRlci5oYCBzaG91bGQgYmUgdGhlIGtleSBmaWxlcyB0byBpbnZlc3RpZ2F0ZSBmb3IgYW55IHRyYWNlcyBvZiBgdHJhY2tfZmFpbGNudGAgdXNhZ2UuIExldCdzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjQ6MzguODE3MzYyNjM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcyODU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFja19mYWlsY250XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfY291bnRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2VfY291bnRlci5jPTExOD1ib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYy0xMjMtXFx0Ym9vbCBwcm90ZWN0aW9uID0gdHJhY2tfcHJvdGVjdGlvbihjb3VudGVyKTtcXG5tbS9wYWdlX2NvdW50ZXIuYzoxMjQ6XFx0Ym9vbCB0cmFja19mYWlsY250ID0gY291bnRlci1cXHUwMDNldHJhY2tfZmFpbGNudDtcXG5tbS9wYWdlX2NvdW50ZXIuYy0xMjUtXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYy0xNDktXFx0XFx0XFx0ICovXFxubW0vcGFnZV9jb3VudGVyLmM6MTUwOlxcdFxcdFxcdGlmICh0cmFja19mYWlsY250KVxcbm1tL3BhZ2VfY291bnRlci5jLTE1MS1cXHRcXHRcXHRcXHRkYXRhX3JhY2UoYy1cXHUwMDNlZmFpbGNudCsrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjQ6MzguODY1MDk2MTczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzk5MDM2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgUGVyZm9ybWFuY2UgSW1wYWN0IG9mIGBtZW1fY2dyb3VwX2Nzc19hbGxvY2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSBzZWUgYHBhZ2VfY291bnRlcl90cnlfY2hhcmdlYCBpcyB1c2luZyBzb21ldGhpbmcuLi4gYWgsIHJpZ2h0LiBUaGF0IGZ1bmN0aW9uIGlzIGEga25vd24gaG90IHBhdGguIFRoYXQgcmFpc2VzIGFuIGltbWVkaWF0ZSByZWQgZmxhZy4gVGhlIHBhdGNoIGl0c2VsZiBpcyBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLiBMZXQncyBqdXN0IG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyAtIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzIHRoYXQgSSBzaG91bGQga2VlcCBhbiBleWUgb24/IEFscmlnaHQsIGxvb2tzIGxpa2UgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCBpcyBjYWxsZWQgd2hlbiBhIG5ldyBtZW1vcnkgY2dyb3VwIGlzIHNwdW4gdXAuIEdpdmVuIGl0cyByb2xlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB0aGUgcG90ZW50aWFsIGZvciBpdCB0byBiZSBoaXQgYSBsb3QgaW4gY29udGFpbmVyIGVudmlyb25tZW50cywgaXQgc2VlbXMgbGlrZSBhIHZlcnkgd29ydGh3aGlsZSBwbGFjZSB0byBmb2N1cyBteSBlbmVyZ3kuIFdlJ2xsIGNvbmNlbnRyYXRlIG9uIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNjgsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjQ6NDQuMjQ1MDAyMzUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE0NjYxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfY3NzX2FsbG9jXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyB0cmFja2luZyBvZiBmYWlsY250IGZvciB0aGUgbWVtc3cgKG1lbW9yeStzd2FwKSBjb3VudGVyIGluIG1lbWNnIHYxIGJ5IGluaXRpYWxpemluZyBtZW1zdy50cmFja19mYWlsY250IHRvICFtZW1jZ19vbl9kZmwgaW4gbWVtX2Nncm91cF9jc3NfYWxsb2MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIGxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9jc3NfYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmFibGVzIHRyYWNraW5nIG9mIGZhaWxjbnQgZm9yIHRoZSBtZW1zdyAobWVtb3J5K3N3YXApIGNvdW50ZXIgaW4gbWVtY2cgdjEgYnkgaW5pdGlhbGl6aW5nIG1lbXN3LnRyYWNrX2ZhaWxjbnQgdG8gIW1lbWNnX29uX2RmbCBpbiBtZW1fY2dyb3VwX2Nzc19hbGxvYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgbGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjQ6NDQuMzI2NDc3ODMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDY1MzU4ODYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjQ0LjMyNzA4NTc2MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MDY1Mjk3NTcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG1pc3NpbmcgYXNzaWdubWVudCB0byBgbWVtY2ctXFx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnRgIGR1cmluZyBtZW1jZyBhbGxvY2F0aW9uLiBUaGUgYG1lbWNnYCBzdHJ1Y3R1cmUgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEgYGttZW1fY2FjaGVfemFsbG9jYCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZC4gVGhpcyBpcyBhIGxvZ2ljYWwgZml4IGZvciBtZW1vcnkgY29udHJvbGxlciBiZWhhdmlvciwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWNhbCBidWdzIGhlcmUuIEtNU0FOIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzlmMWZmNjQyODA2YjViNmYyZjY2YTU5NDhlYzFiZmYzZmNmNzQ1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA4OjIwOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA2OTM5YTRmYmI5OTE0Li40ZmZlNWIzNzMzZDliIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00MjM1LDYgKzQyMzUsNyBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xuIFx0XHRtZW1jZy1cdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XG4rXHRcdG1lbWNnLVx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xuIFx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZW9vbV9raWxsX2Rpc2FibGUsIFJFQURfT05DRShwYXJlbnQtXHUwMDNlb29tX2tpbGxfZGlzYWJsZSkpO1xuIFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBcdTAwMjZwYXJlbnQtXHUwMDNla21lbSwgZmFsc2UpO1xuIFx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2V0Y3BtZW0sIFx1MDAyNnBhcmVudC1cdTAwM2V0Y3BtZW0sIGZhbHNlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA4OjI0OjQ0LjMyNzA4Njc1MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDM3NDMwOTc3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1jb250cm9sIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGFkZGluZyBvbmUgbGluZSB0byBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBpbnNpZGUgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jKClgLCBpdCdzIHNldHRpbmcgYG1lbWNnLVx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO2AuIEhtbSwgc28gaXQncyBpbml0aWFsaXppbmcgdGhpcyBgdHJhY2tfZmFpbGNudGAgZmllbGQgd2l0aGluIGBtZW1jZy1cdTAwM2VtZW1zd2AuIFJpZ2h0LCBpdCdzIHNldHRpbmcgYSBib29sZWFuIGZsYWcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgd2UgYXJlbid0IGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaGVyZS4gSXMgaXQganVzdCBpbml0aWFsaXppbmcgc29tZXRoaW5nIHRoYXQgKm1pZ2h0KiBoYXZlIGJlZW4gdW5pbml0aWFsaXplZCwgb3Igc2ltcGx5IHNldHRpbmcgaXQgdG8gYSBkZWZpbmVkIHZhbHVlPyBJIGJldHRlciBkaWcgaW50byBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIHRvIGJlIGNlcnRhaW4uXG5cbkxldCdzIHNlZS4uLiB0aGUgYG1lbWNnYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHNvbWV3aGVyZSBpbiB0aGF0IGZ1bmN0aW9uLCBwcm9iYWJseSB3aXRoIHNvbWV0aGluZyBsaWtlIGBremFsbG9jYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gdGhhdCB3b3VsZCB6ZXJvLWluaXRpYWxpemUgdGhlIG1lbW9yeS4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgMTAwJSBzdXJlIHdlIGFyZSBpbiBnb29kIHNoYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjU6MTQuNzAxNDAyMDYyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIwMzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2Nzc19hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQyMTI9c3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICogX19yZWZcXG5tbS9tZW1jb250cm9sLmM6NDIxMzptZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG5tbS9tZW1jb250cm9sLmMtNDIxNC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE1ND1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxubW0vbWVtY29udHJvbC5jOjUxNTU6XFx0LmNzc19hbGxvYyA9IG1lbV9jZ3JvdXBfY3NzX2FsbG9jLFxcbm1tL21lbWNvbnRyb2wuYy01MTU2LVxcdC5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNToxNC43NDc2MTAyMjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk4NjE2NzczNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgbWVtX2Nncm91cF9jc3NfYWxsb2NgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCBmdW5jdGlvbi4gSXTigJlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbWVtb3J5IGNncm91cCBhbGxvY2F0aW9uLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGhhdmUgYW55IGNoYW5jZSB0byB1bmRlcnN0YW5kIHRoZSBkZWVwZXIgcGFydHMgb2YgaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBjcmVhdGVkLiBMZXQncyBzZWUgd2hhdCB0aGV5IGFyZSB0cnlpbmcgdG8gZG8gaGVyZS5cblxuT2theSwgbGV0J3MgZ2V0IGludG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNTozNC42MDkyOTE4MDVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjEyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjEyOlxcdHN0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqIF9fcmVmXFxuNDIxMzpcXHRtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG40MjE0OlxcdHtcXG40MjE1OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHBhcmVudF9jc3MpO1xcbjQyMTY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqb2xkX21lbWNnO1xcbjQyMTc6XFx0XFx0Ym9vbCBtZW1jZ19vbl9kZmwgPSBjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpO1xcbjQyMTg6XFx0XFxuNDIxOTpcXHRcXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKHBhcmVudCk7XFxuNDIyMDpcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfYWxsb2MocGFyZW50KTtcXG40MjIxOlxcdFxcdHNldF9hY3RpdmVfbWVtY2cob2xkX21lbWNnKTtcXG40MjIyOlxcdFxcdGlmIChJU19FUlIobWVtY2cpKVxcbjQyMjM6XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKG1lbWNnKTtcXG40MjI0OlxcdFxcbjQyMjU6XFx0XFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTtcXG40MjI2OlxcdFxcdG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTtcXG40MjI3OlxcdCNpZmRlZiBDT05GSUdfWlNXQVBcXG40MjI4OlxcdFxcdG1lbWNnLVxcdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xcbjQyMjk6XFx0XFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlenN3YXBfd3JpdGViYWNrLCB0cnVlKTtcXG40MjMwOlxcdCNlbmRpZlxcbjQyMzE6XFx0XFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgUEFHRV9DT1VOVEVSX01BWCk7XFxuNDIzMjpcXHRcXHRpZiAocGFyZW50KSB7XFxuNDIzMzpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgXFx1MDAyNnBhcmVudC1cXHUwMDNlbWVtb3J5LCBtZW1jZ19vbl9kZmwpO1xcbjQyMzQ6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBcXHUwMDI2cGFyZW50LVxcdTAwM2Vzd2FwLCBmYWxzZSk7XFxuNDIzNTpcXHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuNDIzNjpcXHRcXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XFxuNDIzNzpcXHRcXHRcXHRtZW1jZy1cXHUwMDNlbWVtb3J5LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xcbjQyMzg6XFx0XFx0XFx0bWVtY2ctXFx1MDAzZW1lbXN3LnRyYWNrX2ZhaWxjbnQgPSAhbWVtY2dfb25fZGZsO1xcbjQyMzk6XFx0XFx0XFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlb29tX2tpbGxfZGlzYWJsZSwgUkVBRF9PTkNFKHBhcmVudC1cXHUwMDNlb29tX2tpbGxfZGlzYWJsZSkpO1xcbjQyNDA6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBcXHUwMDI2cGFyZW50LVxcdTAwM2VrbWVtLCBmYWxzZSk7XFxuNDI0MTpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXRjcG1lbSwgXFx1MDAyNnBhcmVudC1cXHUwMDNldGNwbWVtLCBmYWxzZSk7XFxuNDI0MjpcXHQjZW5kaWZcXG40MjQzOlxcdFxcdH0gZWxzZSB7XFxuNDI0NDpcXHRcXHRcXHRpbml0X21lbWNnX3N0YXRzKCk7XFxuNDI0NTpcXHRcXHRcXHRpbml0X21lbWNnX2V2ZW50cygpO1xcbjQyNDY6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIE5VTEwsIHRydWUpO1xcbjQyNDc6XFx0XFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBOVUxMLCBmYWxzZSk7XFxuNDI0ODpcXHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuNDI0OTpcXHRcXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIE5VTEwsIGZhbHNlKTtcXG40MjUwOlxcdFxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNldGNwbWVtLCBOVUxMLCBmYWxzZSk7XFxuNDI1MTpcXHQjZW5kaWZcXG40MjUyOlxcdFxcdFxcdHJvb3RfbWVtX2Nncm91cCA9IG1lbWNnO1xcbjQyNTM6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZtZW1jZy1cXHUwMDNlY3NzO1xcbjQyNTQ6XFx0XFx0fVxcbjQyNTU6XFx0XFxuNDI1NjpcXHRcXHRpZiAobWVtY2dfb25fZGZsIFxcdTAwMjZcXHUwMDI2ICFjZ3JvdXBfbWVtb3J5X25vc29ja2V0KVxcbjQyNTc6XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9pbmMoXFx1MDAyNm1lbWNnX3NvY2tldHNfZW5hYmxlZF9rZXkpO1xcbjQyNTg6XFx0XFxuNDI1OTpcXHRcXHRpZiAoIWNncm91cF9tZW1vcnlfbm9icGYpXFxuNDI2MDpcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2luYyhcXHUwMDI2bWVtY2dfYnBmX2VuYWJsZWRfa2V5KTtcXG40MjYxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNTozNC42MDk2MzEzOTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzOTU3MTc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipGaXhpbmcgYSBNZW1vcnkgQ29udHJvbGxlciBUcmFja2luZyBJc3N1ZSoqXG5cbkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSBhY2NvdW50aW5nLiBUaGUgY29yZSBvZiB0aGUgZml4IHNlZW1zIHRvIGJlIGluaXRpYWxpemluZyBgbWVtY2ctXHUwMDNlbWVtc3cudHJhY2tfZmFpbGNudGAgd2l0aCBgIW1lbWNnX29uX2RmbGAuIEJhc2ljYWxseSwgdGhpcyB2YXJpYWJsZSdzIGJlZW4gaGF2aW5nIGluaXRpYWxpemF0aW9uIGlzc3Vlcywgd2hpY2ggaXMgY2F1c2luZyBwcm9ibGVtcyB3aXRoIHRyYWNraW5nIGZhaWxlZCBtZW1vcnkgYWxsb2NhdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgc3dhcCBhY2NvdW50aW5nIHN5c3RlbS4gUmlnaHQsIGdvdCBpdC5cblxuTm93LCBsZXQncyBiYWNrIHVwIGEgc2Vjb25kIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgaGVyZS4gVGhlIGNydWNpYWwgcXVlc3Rpb24gdGhhdCdzIHRvcCBvZiBtaW5kIGlzICpob3cqIHRoZSBgbWVtY2dgIHN0cnVjdHVyZSwgdG8gd2hpY2ggdGhpcyBmaXggYXBwbGllcywgaXMgYWN0dWFsbHkgZ2V0dGluZyBpbml0aWFsaXplZCBpbiB0aGUgZmlyc3QgcGxhY2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBzZWUgaG93IG1lbW9yeSBjZ3JvdXBzIGFyZSBhbGxvY2F0ZWQsIHJpZ2h0PyBJdCdzIGFsbG9jYXRlZCB2aWEgYG1lbV9jZ3JvdXBfYWxsb2MocGFyZW50KWAuIE9rYXksIHNvIGxldCdzIGNoZWNrIHRoYXQgb3V0LiBXZSBzaG91bGQgY2hlY2sgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmUgbmV4dCB0byBiZSAxMDAlIHN1cmUgd2UncmUgYWRkcmVzc2luZyB0aGUgcm9vdCBjYXVzZS4gVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgdGVsbCB1cyBpZiB0aGlzIGZpeCBpcyBzdWZmaWNpZW50IG9yIHBvdGVudGlhbGx5IGhpZGluZyBhbm90aGVyIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNTozOS4yNDkyMDYxNDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTE0ODI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbWNvbnRyb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDEzNT1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2ZyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQxNDEtXFxubW0vbWVtY29udHJvbC5jOjQxNDI6c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC5jLTQxNDMte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMTM9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIxOS1cXHRvbGRfbWVtY2cgPSBzZXRfYWN0aXZlX21lbWNnKHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jOjQyMjA6XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2FsbG9jKHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jLTQyMjEtXFx0c2V0X2FjdGl2ZV9tZW1jZyhvbGRfbWVtY2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNTozOS43MTAzNjAxODVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNjM4MjMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG1lbV9jZ3JvdXBfYWxsb2NgIGZ1bmN0aW9uLlxuXG4qKkFuYWx5emluZyBgbWVtX2Nncm91cF9hbGxvY2AqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IGFsbG9jYXRpb24gaGFwcGVucyB3aXRoaW4gYSBtZW1vcnkgY2dyb3VwLiBMZXQncyBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXF1ZXN0cyBmb3IgbWVtb3J5IHdpdGhpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZWNoYW5pY3MsIHNwZWNpZmljYWxseTogaG93IGlzIHRoZSBtZW1vcnkgYWNjb3VudGluZyBoYW5kbGVkPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGNoZWNrcyBvciBsaW1pdHMgZW5mb3JjZWQgaGVyZT8gSSdsbCBuZWVkIHRvIGtub3cgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBtb3JlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gSSBuZWVkIHRvIG5vdGUgYW55IHNwZWNpZmljIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIG9yIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIHVzZWQsIGFuZCBhbnkgaW50ZWdyYXRpb24gd2l0aCBOVU1BIGlmIGFwcGxpY2FibGUuIEFueSBlcnJvciBoYW5kbGluZyBpcyBnb2luZyB0byBiZSBjcml0aWNhbCwgdG9vLiBJIHdhbnQgdG8gc2VlIGhvdyBhbGxvY2F0aW9uIGZhaWx1cmVzIGFyZSBtYW5hZ2VkLCBhbmQgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGF0IHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzU0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjU6NDMuMzM2NzQ1MTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTQyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTQyOlxcdHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9hbGxvYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbjQxNDM6XFx0e1xcbjQxNDQ6XFx0XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1ICpzdGF0YztcXG40MTQ1OlxcdFxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqcHN0YXRjX3BjcHU7XFxuNDE0NjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNDE0NzpcXHRcXHRpbnQgbm9kZSwgY3B1O1xcbjQxNDg6XFx0XFx0aW50IF9fbWF5YmVfdW51c2VkIGk7XFxuNDE0OTpcXHRcXHRsb25nIGVycm9yO1xcbjQxNTA6XFx0XFxuNDE1MTpcXHRcXHRtZW1jZyA9IGttZW1fY2FjaGVfemFsbG9jKG1lbWNnX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuNDE1MjpcXHRcXHRpZiAoIW1lbWNnKVxcbjQxNTM6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuNDE1NDpcXHRcXG40MTU1OlxcdFxcdGVycm9yID0geGFfYWxsb2MoXFx1MDAyNm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZHMsIFxcdTAwMjZtZW1jZy1cXHUwMDNlaWQuaWQsIE5VTEwsXFxuNDE1NjpcXHRcXHRcXHRcXHQgWEFfTElNSVQoMSwgTUVNX0NHUk9VUF9JRF9NQVgpLCBHRlBfS0VSTkVMKTtcXG40MTU3OlxcdFxcdGlmIChlcnJvcilcXG40MTU4OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MTU5OlxcdFxcdGVycm9yID0gLUVOT01FTTtcXG40MTYwOlxcdFxcbjQxNjE6XFx0XFx0bWVtY2ctXFx1MDAzZXZtc3RhdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgbWVtY2dfdm1zdGF0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG40MTYyOlxcdFxcdGlmICghbWVtY2ctXFx1MDAzZXZtc3RhdHMpXFxuNDE2MzpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDE2NDpcXHRcXG40MTY1OlxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1LFxcbjQxNjY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuNDE2NzpcXHRcXHRpZiAoIW1lbWNnLVxcdTAwM2V2bXN0YXRzX3BlcmNwdSlcXG40MTY4OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MTY5OlxcdFxcbjQxNzA6XFx0XFx0aWYgKCFtZW1jZzFfYWxsb2NfZXZlbnRzKG1lbWNnKSlcXG40MTcxOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG40MTcyOlxcdFxcbjQxNzM6XFx0XFx0cHN0YXRjX3BjcHUgPSBwYXJlbnQgPyBwYXJlbnQtXFx1MDAzZXZtc3RhdHNfcGVyY3B1IDogTlVMTDtcXG40MTc0OlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG40MTc1OlxcdFxcdFxcdHN0YXRjID0gcGVyX2NwdV9wdHIobWVtY2ctXFx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xcbjQxNzY6XFx0XFx0XFx0c3RhdGMtXFx1MDAzZXBhcmVudF9wY3B1ID0gcHN0YXRjX3BjcHU7XFxuNDE3NzpcXHRcXHRcXHRzdGF0Yy1cXHUwMDNldm1zdGF0cyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzO1xcbjQxNzg6XFx0XFx0fVxcbjQxNzk6XFx0XFxuNDE4MDpcXHRcXHRmb3JfZWFjaF9ub2RlKG5vZGUpXFxuNDE4MTpcXHRcXHRcXHRpZiAoIWFsbG9jX21lbV9jZ3JvdXBfcGVyX25vZGVfaW5mbyhtZW1jZywgbm9kZSkpXFxuNDE4MjpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDE4MzpcXHRcXG40MTg0OlxcdFxcdGlmIChtZW1jZ193Yl9kb21haW5faW5pdChtZW1jZywgR0ZQX0tFUk5FTCkpXFxuNDE4NTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuNDE4NjpcXHRcXG40MTg3OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2bWVtY2ctXFx1MDAzZWhpZ2hfd29yaywgaGlnaF93b3JrX2Z1bmMpO1xcbjQxODg6XFx0XFx0dm1wcmVzc3VyZV9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNldm1wcmVzc3VyZSk7XFxuNDE4OTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9wZWFrcyk7XFxuNDE5MDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXBfcGVha3MpO1xcbjQxOTE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VwZWFrc19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDg6MjU6NDMuMzM3MjE0MTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE2NDI4MjE2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIHNpbmdsZSBsaW5lIHdpdGhpbiBgbWVtX2Nncm91cF9jc3NfYWxsb2MoKWA6IGBtZW1jZy1cdTAwM2VtZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGludHJvZHVjZXMgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB3aGljaCBpcyB3aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGRldGVjdC4gTGV0J3MgYnJlYWsgaXQgZG93bi5cblxuRmlyc3QsIEkgc2VlIHRoYXQgYG1lbWNnYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jKClgLCBtZWFuaW5nIHRoZSBtZW1vcnkgaXMgemVyby1pbml0aWFsaXplZC4gVGhlcmVmb3JlLCBiZWZvcmUgdGhlIHBhdGNoLCBgbWVtY2ctXHUwMDNlbWVtc3cudHJhY2tfZmFpbGNudGAgd291bGQgaGF2ZSBiZWVuIHplcm8uIFRoaXMgcGF0Y2ggc2ltcGx5IHNldHMgYSBib29sZWFuIGZsYWcsIGB0cmFja19mYWlsY250YCwgd2l0aGluIHRoZSBgbWVtc3dgIHBhZ2UgY291bnRlciBzdHJ1Y3R1cmUuXG5cblRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBmbGFnIGlzIGJlaW5nICpzZXQqIHRvIGEga25vd24gdmFsdWUgKGAhbWVtY2dfb25fZGZsYCksIG5vdCAqcmVhZCogZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUncyBubyBzY2VuYXJpbyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGEgY29udHJvbCBmbG93IGRlY2lzaW9uLiBJdCdzIGp1c3QgYSB2YXJpYWJsZSBiZWluZyBhc3NpZ25lZCBhIHZhbHVlIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGBtZW1jZ2Agc3RydWN0dXJlLlxuXG5XYWl0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHRyYWNrX2ZhaWxjbnRgIHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBzb21lIHdlaXJkIHVuaW9uIG9yIHNvbWV0aGluZy4gSXQncyBhIGJvb2xlYW4gb3IgYW4gaW50LiBJdCB3YXMgbWlzc2luZywgYW5kIG5vdyBpdCdzIG5vdC4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUsIG9ubHkgYSBjaGFuZ2UgaW4gYmVoYXZpb3VyIG9mIHRoZSBwYWdlIGNvdW50ZXIuIFRoZSBwYXRjaCBpcyBzaW1wbHkgaW5pdGlhbGl6aW5nIGEgZmllbGQgdG8gYSBzcGVjaWZpYyB2YWx1ZSBpbnN0ZWFkIG9mIGxlYXZpbmcgaXQgYXQgdGhlIHplcm8gaW5pdGlhbCB2YWx1ZSB0aGF0IGBrbWVtX2NhY2hlX3phbGxvY2Agd291bGQgaGF2ZSBzZXQuXG5cbk9rYXksIGxldCdzIHZlcmlmeSBob3cgYG1lbXN3YCBnZXRzIGluaXRpYWxpemVkLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBob3cgdGhlIGBwYWdlX2NvdW50ZXJgIGlzIGluaXRpYWxpemVkLiBMZXQncyBzZWUuLi4gYG1lbWNnLVx1MDAzZW1lbXN3YCBpcyBhIGBwYWdlX2NvdW50ZXJgLiBBaCwgSSBzZWUgdGhhdCB0aGUgYHBhZ2VfY291bnRlcl9pbml0YCBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGBtZW1jZy1cdTAwM2VtZW1vcnlgLCBgbWVtY2ctXHUwMDNlc3dhcGAsIGBtZW1jZy1cdTAwM2VrbWVtYCwgYG1lbWNnLVx1MDAzZXRjcG1lbWAsIGJ1dCBub3QgYG1lbXN3YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBtZW1zd2AgZ2V0cyBpbml0aWFsaXplZC5cblxuQWhhISBMb29raW5nIGNsb3NlciBhdCBgbWVtX2Nncm91cF9jc3NfYWxsb2NgLCBJIHNlZSB0aGF0IHRoZSBgbWVtc3dgIGlzIGluaXRpYWxpemVkIHRoZXJlLCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgIGJsb2NrLiBTcGVjaWZpY2FsbHksIEkgZmluZDpcblxuYGBgY1xuXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xuXHRcdG1lbWNnLVx1MDAzZW1lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcblx0XHRtZW1jZy1cdTAwM2VtZW1zdy50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcblx0XHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZW9vbV9raWxsX2Rpc2FibGUsIFJFQURfT05DRShwYXJlbnQtXHUwMDNlb29tX2tpbGxfZGlzYWJsZSkpO1xuXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIFx1MDAyNnBhcmVudC1cdTAwM2VrbWVtLCBmYWxzZSk7XG5cdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNldGNwbWVtLCBcdTAwMjZwYXJlbnQtXHUwMDNldGNwbWVtLCBmYWxzZSk7XG5gYGBcblxuU28gaXQgKmlzKiBpbml0aWFsaXplZCwgYW5kIHRoaXMgcGF0Y2gganVzdCBzZXRzIGB0cmFja19mYWlsY250YCBkdXJpbmcgYWxsb2NhdGlvbi4gVGhlcmUgaXMgKm5vKiB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkLCBhbmQgdGhlcmVmb3JlIEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIHRvb2xzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzLiBUaGUgcGF0Y2ggc2ltcGx5IGVuc3VyZXMgdGhhdCBgbWVtc3cudHJhY2tfZmFpbGNudGAgaXMgY29ycmVjdGx5IGluaXRpYWxpemVkIGR1cmluZyBtZW1jZyBhbGxvY2F0aW9uLCBhbmQgdGhlcmUncyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoaXMgaXMgYSBsb2dpY2FsIGNvcnJlY3Rpb24uIE5lZWRzS01TQU4gPSBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE1NSwiT3V0cHV0VG9rZW5zIjoxMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwODoyNjowNC45ODAwMzk5NTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGFzc2lnbm1lbnQgdG8gYG1lbWNnLVxcdTAwM2VtZW1zdy50cmFja19mYWlsY250YCBkdXJpbmcgbWVtY2cgYWxsb2NhdGlvbi4gVGhlIGBtZW1jZ2Agc3RydWN0dXJlIGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoaXMgaXMgYSBsb2dpY2FsIGZpeCBmb3IgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZpb3IsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgYnVncyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBtaXNzaW5nIGFzc2lnbm1lbnQgdG8gYG1lbWNnLVxcdTAwM2VtZW1zdy50cmFja19mYWlsY250YCBkdXJpbmcgbWVtY2cgYWxsb2NhdGlvbi4gVGhlIGBtZW1jZ2Agc3RydWN0dXJlIGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGBrbWVtX2NhY2hlX3phbGxvY2AsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciBsZWFrZWQuIFRoaXMgaXMgYSBsb2dpY2FsIGZpeCBmb3IgbWVtb3J5IGNvbnRyb2xsZXIgYmVoYXZpb3IsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZS4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljYWwgYnVncyBoZXJlLiBLTVNBTiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jgsp[1] Phase: Succeeded StartedAt: 2026-08-10 08:26:16 +0000 UTC FinishedAt: 2026-08-10 08:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 08:26:16 +0000 UTC FinishedAt: 2026-08-10 08:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2] Phase: Succeeded StartedAt: 2026-08-10 08:26:16 +0000 UTC FinishedAt: 2026-08-10 12:11:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 08:26:16 +0000 UTC FinishedAt: 2026-08-10 12:11:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 08:26:16 +0000 UTC FinishedAt: 2026-08-10 08:26:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 08:26:16 +0000 UTC FinishedAt: 2026-08-10 08:26:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow4jgsp/series-workflow4jgsp-convert-artifact-2784398564/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 08:26:26 +0000 UTC FinishedAt: 2026-08-10 08:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 08:26:26 +0000 UTC FinishedAt: 2026-08-10 08:43:03 +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:*e1d024fe-4040-42d0-85dd-f0f89e8760bd,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-workflow4jgsp/series-workflow4jgsp-convert-artifact-2784398564/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": "0b656bf6-bab2-4839-b86d-ed45f1145345", "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-workflow4jgsp/series-workflow4jgsp-build-action-3508677922/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 08:26:26 +0000 UTC FinishedAt: 2026-08-10 08:42:53 +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:*e1d024fe-4040-42d0-85dd-f0f89e8760bd,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-workflow4jgsp/series-workflow4jgsp-convert-artifact-2784398564/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": "0b656bf6-bab2-4839-b86d-ed45f1145345", "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-workflow4jgsp/series-workflow4jgsp-build-action-3508677922/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 08:43:03 +0000 UTC FinishedAt: 2026-08-10 08:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 08:43:03 +0000 UTC FinishedAt: 2026-08-10 08:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 08:43:03 +0000 UTC FinishedAt: 2026-08-10 08:43:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 08:43:03 +0000 UTC FinishedAt: 2026-08-10 08:43:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow4jgsp/series-workflow4jgsp-convert-artifact-3442758371/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 08:43:13 +0000 UTC FinishedAt: 2026-08-10 08:45:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 08:43:13 +0000 UTC FinishedAt: 2026-08-10 08:44:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0b656bf6-bab2-4839-b86d-ed45f1145345,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-workflow4jgsp/series-workflow4jgsp-build-action-3508677922/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-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 08:45:07 +0000 UTC FinishedAt: 2026-08-10 08:45:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 08:45:07 +0000 UTC FinishedAt: 2026-08-10 08:45:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 08:45:07 +0000 UTC FinishedAt: 2026-08-10 09:03:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 08:45:07 +0000 UTC FinishedAt: 2026-08-10 09:03:23 +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:*e1d024fe-4040-42d0-85dd-f0f89e8760bd,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-workflow4jgsp/series-workflow4jgsp-convert-artifact-3442758371/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": "aaeb8beb-7c71-43f7-9e94-af35ab7929f0", "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-workflow4jgsp/series-workflow4jgsp-build-action-1531551639/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 08:45:07 +0000 UTC FinishedAt: 2026-08-10 09:03:13 +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:*e1d024fe-4040-42d0-85dd-f0f89e8760bd,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-workflow4jgsp/series-workflow4jgsp-convert-artifact-3442758371/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": "aaeb8beb-7c71-43f7-9e94-af35ab7929f0", "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-workflow4jgsp/series-workflow4jgsp-build-action-1531551639/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 09:03:23 +0000 UTC FinishedAt: 2026-08-10 09:03:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 09:03:23 +0000 UTC FinishedAt: 2026-08-10 09:03:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 09:03:23 +0000 UTC FinishedAt: 2026-08-10 09:05:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 09:03:23 +0000 UTC FinishedAt: 2026-08-10 09:05:11 +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:*aaeb8beb-7c71-43f7-9e94-af35ab7929f0,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-workflow4jgsp/series-workflow4jgsp-build-action-1531551639/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-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 09:05:21 +0000 UTC FinishedAt: 2026-08-10 12:11:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 09:05:21 +0000 UTC FinishedAt: 2026-08-10 12:11:09 +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":["mem_cgroup_css_alloc"],"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:*0b656bf6-bab2-4839-b86d-ed45f1145345,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aaeb8beb-7c71-43f7-9e94-af35ab7929f0,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-workflow4jgsp/series-workflow4jgsp-build-action-3508677922/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-workflow4jgsp/series-workflow4jgsp-build-action-1531551639/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 09:05:21 +0000 UTC FinishedAt: 2026-08-10 09:05:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 09:05:21 +0000 UTC FinishedAt: 2026-08-10 09:05:26 +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":["mem_cgroup_css_alloc"],"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-workflow4jgsp/series-workflow4jgsp-convert-artifact-3015842044/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 09:05:21 +0000 UTC FinishedAt: 2026-08-10 09:05:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 09:05:21 +0000 UTC FinishedAt: 2026-08-10 09:05:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 09:05:22 +0000 UTC FinishedAt: 2026-08-10 09:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 09:05:32 +0000 UTC FinishedAt: 2026-08-10 12:11:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4jgsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_css_alloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"3e2ee030-232f-4d1b-937a-2f6362225dd6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 09:05:32 +0000 UTC FinishedAt: 2026-08-10 12:10:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0b656bf6-bab2-4839-b86d-ed45f1145345,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aaeb8beb-7c71-43f7-9e94-af35ab7929f0,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-workflow4jgsp/series-workflow4jgsp-build-action-3508677922/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-workflow4jgsp/series-workflow4jgsp-build-action-1531551639/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-workflow4jgsp/series-workflow4jgsp-convert-artifact-3015842044/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,}