Name: series-workflow9r4bw Phase: Succeeded StartedAt: 2026-09-14 22:29:10 +0000 UTC FinishedAt: 2026-09-15 01:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[0] Phase: Succeeded StartedAt: 2026-09-14 22:29:10 +0000 UTC FinishedAt: 2026-09-14 23:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 22:29:10 +0000 UTC FinishedAt: 2026-09-14 23:43:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_CH9200", "USB_USBNET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_CH9200", "USB_USBNET" ], "series_id": "a3c4cc4c-004f-43ca-8d0f-96f6bb376d96" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ch9200_bind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaDkyMDBfYmluZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcmV0dXJuIHZhbHVlIGVycm9yIGNoZWNrcyBmb3IgY2FsbHMgdG8gY29udHJvbF93cml0ZSgpIGluIGNoOTIwMF9iaW5kKCkuIFRoZSBkYXRhIGJ1ZmZlciBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpIGlzIGZ1bGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGVhY2ggY2FsbCwgYW5kIHJldHVybmluZyBhbiBlcnJvciBjb2RlIHVwb24gZmFpbHVyZSBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGFjY2Vzc2VkLCBhbmQgY29udHJvbCBmbG93IGlzIG5vdCBhbHRlcmVkIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciByZXR1cm4gY2hlY2tzIGZvciBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSBkdXJpbmcgVVNCIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIENIOTIwMCBVU0IgZXRoZXJuZXQgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgVVNCIFJhdyBHYWRnZXQgLyBkdW1teV9oY2QpIG1hdGNoaW5nIGl0cyBVU0IgVklEL1BJRC4gRnV6emluZyB3aXRoIFVTQiBmYXVsdCBpbmplY3Rpb24gb3IgdW5leHBlY3RlZCBjb250cm9sIHJlc3BvbnNlcyBjYW4gdGVzdCB0aGVzZSBuZXdseSBpbnRyb2R1Y2VkIGVycm9yIGV4aXQgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNTJmMWE4MTBkZjNjMjk2Yzk3YjUzNGJjNTZiZWRkMzBlZDg0MjBiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjM6NDA6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG5pbmRleCBhMjA2ZmZhNzZmMWI5Li5hYjNjZDM5MDJlZDcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbkBAIC0zNjAsMzIgJiM0MzszNjAsNDQgQEAgc3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0ZGF0YVsxXSA9IDB4MEY7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHhBMDtcbiBcdGRhdGFbMV0gPSAweDkwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweDMwO1xuIFx0ZGF0YVsxXSA9IDB4MDA7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweDE3O1xuIFx0ZGF0YVsxXSA9IDB4RDg7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gXHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHQvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi9cbiBcdGRhdGFbMF0gPSAweDAxO1xuIFx0ZGF0YVsxXSA9IDB4MDA7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxuIFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuJiM0MztcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4NUY7XG4gXHRkYXRhWzFdID0gMHgwRDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0NUUkwsIGRhdGEsIDB4MDIsXG4gXHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiBcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0NIOTIwMCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2g5MjAwX2JpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciByZXR1cm4gY2hlY2tzIGZvciBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSBkdXJpbmcgVVNCIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIENIOTIwMCBVU0IgZXRoZXJuZXQgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgVVNCIFJhdyBHYWRnZXQgLyBkdW1teV9oY2QpIG1hdGNoaW5nIGl0cyBVU0IgVklEL1BJRC4gRnV6emluZyB3aXRoIFVTQiBmYXVsdCBpbmplY3Rpb24gb3IgdW5leHBlY3RlZCBjb250cm9sIHJlc3BvbnNlcyBjYW4gdGVzdCB0aGVzZSBuZXdseSBpbnRyb2R1Y2VkIGVycm9yIGV4aXQgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNTJmMWE4MTBkZjNjMjk2Yzk3YjUzNGJjNTZiZWRkMzBlZDg0MjBiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjM6NDA6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMKaW5kZXggYTIwNmZmYTc2ZjFiOS4uYWIzY2QzOTAyZWQ3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYwpAQCAtMzYwLDMyICYjNDM7MzYwLDQ0IEBAIHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIAlkYXRhWzFdID0gMHgwRjsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsCiAJCQkgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJZGF0YVswXSA9IDB4QTA7CiAJZGF0YVsxXSA9IDB4OTA7CiAJcmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSwKIAkJCSAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlkYXRhWzBdID0gMHgzMDsKIAlkYXRhWzFdID0gMHgwMDsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSwKIAkJCSAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlkYXRhWzBdID0gMHgxNzsKIAlkYXRhWzFdID0gMHhEODsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsCiAJCQkgICAgICAgZGF0YSwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJLyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovCiAJZGF0YVswXSA9IDB4MDE7CiAJZGF0YVsxXSA9IDB4MDA7CiAJcmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMiwKIAkJCSAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlkYXRhWzBdID0gMHg1RjsKIAlkYXRhWzFdID0gMHgwRDsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLAogCQkJICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCXJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpOwogCWV0aF9od19hZGRyX3NldChkZXYtJmd0O25ldCwgYWRkcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBhIFVTQiBOZXR3b3JrIERyaXZlcioqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhcyBJIGxvb2sgYXQgdGhpcyBwYXRjaC4gVGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgdGhpcyBkaWZmIGFmZmVjdGluZyB0aGUgYGNoOTIwMC5jYCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgYW1kNjQgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgYW5kIGlmIGl0IGludHJvZHVjZXMgYW55IHJlZ3Jlc3Npb25zIG9yIHBvdGVudGlhbCBpc3N1ZXMsIGVzcGVjaWFsbHkgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpGaXJzdCwgSSBzZWUgYSBzZXJpZXMgb2YgYGNvbnRyb2xfd3JpdGVgIGNhbGxzIGJlaW5nIGFkZGVkIHdpdGhpbiB0aGUgYGNoOTIwMF9iaW5kYCBmdW5jdGlvbi4gRWFjaCBvZiB0aGVzZSBjYWxscyB3cml0ZXMgZGF0YSB0byBkaWZmZXJlbnQgcmVnaXN0ZXJzIChNQUNfUkVHX1RIUkVTSE9MRCwgTUFDX1JFR19GSUZPX0RFUFRILCBNQUNfUkVHX1BBVVNFLCBldGMuKS4gVGhlIHNpZ25pZmljYW50IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYW4gYGlmIChyZXR2YWwgJmx0OyAwKWAgY2hlY2sgKmFmdGVyKiBlYWNoIHdyaXRlLiBUaGlzIGlzIGEgY3J1Y2lhbCBhZGRpdGlvbiB0byB2ZXJpZnkgdGhlIHJlc3VsdCBvZiBVU0IgY29udHJvbCB0cmFuc2Zlci4gVGhpcyBpcyBnb29kIGNvZGluZyBwcmFjdGljZSwgZW5zdXJpbmcgdGhhdCB0aGUgZHJpdmVyIGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgdGhlc2UgY29uZmlndXJhdGlvbiB3cml0ZXMuIFdpdGhvdXQgdGhpcywgYSBmYWlsdXJlIHdvdWxkIGJlIG1hc2tlZCwgYW5kIHRoZSBkZXZpY2UgbWlnaHQgbm90IGluaXRpYWxpemUgY29ycmVjdGx5LCBsZWFkaW5nIHRvIHBvdGVudGlhbGx5IHN1YnRsZSBidWdzIG9yLCBpbiBhIHdvcnNlLWNhc2Ugc2NlbmFyaW8sIGRldmljZSBsb2NrdXAuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoaXMgZHJpdmVyJiMzOTtzIHJlbGV2YW5jZSBpbiBhIHRlc3RpbmcgZW52aXJvbm1lbnQuIFNpbmNlIHRoaXMgaXMgYSBVU0IgbmV0d29yayBkcml2ZXIsIGl0IG5hdHVyYWxseSB1c2VzIFVTQiB0byBjb25uZWN0LiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIFN5emthbGxlciBzZXR1cCBhbmQgd2hldGhlciBVU0IgZGV2aWNlcyBjYW4gYmUgZWZmZWN0aXZlbHkgZW11bGF0ZWQuIEZvcnR1bmF0ZWx5LCBVU0IgcmF3IGdhZGdldCBhbmQgdmhjaS9EdW1teSBIQ0QgYXJlIGluZGVlZCByZWFjaGFibGUgdGhyb3VnaCBTeXprYWxsZXIuIFRoaXMgbWVhbnMgSSBjYW4gbGlrZWx5IHRlc3QgdGhpcyBkcml2ZXIgdXNpbmcgU3l6a2FsbGVyJiMzOTtzIFVTQiBlbXVsYXRpb24gY2FwYWJpbGl0aWVzLiBUaGUgU3l6a2FsbGVyIGRvY3VtZW50YXRpb24gY29uZmlybXMgdGhhdCBVU0IgbmV0IGRyaXZlcnMgY2FuIGJlIHJlYWNoZWQgdmlhIFVTQiBnYWRnZXQvcmF3IGdhZGdldCBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhpcyBkcml2ZXIgaW4gaXRzIG9yaWdpbmFsIGNvbnRleHQuIEkmIzM5O2xsIGNoZWNrIGl0cyBhc3NvY2lhdGVkIEtjb25maWcgZW50cnkgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYnVpbHQgYW5kIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCB1bmRlciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4gRmluYWxseSwgSSB3aWxsIGNhcmVmdWxseSBhc3Nlc3MgaWYgdGhpcyBwYXRjaCBtYXkgaW5kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBIb3dldmVyLCBmb3Igbm93LCB0aGUgYWRkZWQgZXJyb3IgY2hlY2tpbmcgaXMgYSBzdGVwIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGZ1bmN0aW9uIHRoYXQgdXNlcyB0aGUgcmV0dmFsIGZvciB2YWxpZGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU5OT1jb25maWcgVVNCX1ZMNjAwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjEzLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjE0OmNvbmZpZyBVU0JfTkVUX0NIOTIwMFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjE1LVx0dHJpc3RhdGUgXCYjMzQ7UWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19NQklNKVx0JiM0Mzs9IGNkY19tYmltLm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfVVNCX05FVF9DSDkyMDApXHQmIzQzOz0gY2g5MjAwLm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZS00My1vYmotJChDT05GSUdfVVNCX05FVF9BUUMxMTEpXHQmIzQzOz0gYXFjMTExLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBVU0IgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhcnRpY3VsYXIgVVNCIG5ldHdvcmsgZHJpdmVyIHNpdHVhdGlvbiwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL2AgZGlyZWN0b3J5LiBHaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgYXJvdW5kIGxpbmUgNjE0IGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGNyaXRpY2FsIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGF0IGFyZWEsIGFuZCBteSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoYXQgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgYmVzdCBncmFzcGVkIGJ5IGdldHRpbmcgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBsb2dpYy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEwOlx0XHQgIDRHIG1vZGVtIGZyb20gVmVyaXpvbjpcbiA2MTE6XHRcbiA2MTI6XHRcdCAgaHR0cDovL3VidW50dWZvcnVtcy5vcmcvc2hvd3Bvc3QucGhwP3A9MTA1ODk2NDdcdTAwMjZwb3N0Y291bnQ9MTdcbiA2MTM6XHRcbiA2MTQ6XHRjb25maWcgVVNCX05FVF9DSDkyMDBcbiA2MTU6XHRcdHRyaXN0YXRlIFwmIzM0O1FpbmdIZW5nIENIOTIwMCBVU0IgZXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuIDYxNjpcdFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG4gNjE3Olx0XHRzZWxlY3QgTUlJXG4gNjE4Olx0XHRoZWxwXG4gNjE5Olx0XHQgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFVTQiBldGhlcm5ldCBhZGFwdGVyIHdpdGggYSBRaW5IZW5nXG4gNjIwOlx0XHQgIENIOTIwMCBjaGlwc2V0LlxuIDYyMTpcdFxuIDYyMjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA2MjM6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNoOTIwMC5cbiA2MjQ6XHRcbiA2MjU6XHRjb25maWcgVVNCX05FVF9BUUMxMTFcbiA2MjY6XHRcdHRyaXN0YXRlIFwmIzM0O0FxdWFudGlhIEFRdGlvbiBVU0IgdG8gNS8yLjVHYkUgQ29udHJvbGxlcnMgc3VwcG9ydFwmIzM0O1xuIDYyNzpcdFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG4gNjI4Olx0XHRzZWxlY3QgQ1JDMzJcbiA2Mjk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDk1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIFVTQl9VU0JORVQgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGNydWNpYWwgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFVTQl9VU0JORVRgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGNvcnJlY3RseSBkZWZpbmVkLCBhbmQgdGhhdCB3ZSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgdGhlIHJlbGF0aW9uc2hpcHMgaW52b2x2ZWQg4oCTIGJvdGggZXhwbGljaXQgYW5kIGltcGxpY2l0LiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgcGFyYW1vdW50IHRvIGF2b2lkIGFueSB1bmV4cGVjdGVkIGJ1aWxkIGVycm9ycyBvciBydW50aW1lIGNvbmZsaWN0cy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSBgVVNCYCwgb2J2aW91c2x5LCBidXQgSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHRoZSByZXF1aXJlZCBzdWItZmVhdHVyZXMgYXJlIGhhbmRsZWQgYW5kIGFueSBwb3RlbnRpYWwgcGxhdGZvcm0tc3BlY2lmaWMgbnVhbmNlcyBhcmUgdGFrZW4gaW50byBhY2NvdW50LiBJdCYjMzk7cyBhIGtleSBzdGVwIHRvIGNvbmZpcm0gd2UgYXJlIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9VU0JORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTEzPWNvbmZpZyBVU0JfTEFONzhYWFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEzMS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjEzMjpjb25maWcgVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMzLVx0dHJpc3RhdGUgXCYjMzQ7TXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODEwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBmcm9tIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2A6CgoqKkFuYWx5emluZyBLY29uZmlnJiMzOTtzIFVTQiBOZXR3b3JraW5nIE9wdGlvbnMqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGxpbmVzIDEzMCB0aHJvdWdoIDE1MCBvZiBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgVVNCIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSnVzdCBnbGFuY2luZyBhdCB0aGUgY29udGV4dCwgaXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNlY3Rpb24gZGV2b3RlZCB0byBVU0IgbmV0d29yayBhZGFwdGVycywgdGhlIHZhcmlvdXMgdHlwZXMgc3VwcG9ydGVkLCBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLgoKSSBzZWUgYSBsb3Qgb2YgY29uZGl0aW9uYWwgbG9naWMgaGVyZSwgcHJvYmFibHkgaW52b2x2aW5nICpzZWxlY3QqIHN0YXRlbWVudHMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGNvbXBsZXhpdHkgYWx3YXlzIGxpZXMuIFdoaWNoIFVTQiBuZXR3b3JrIGRldmljZXMgYXJlICphY3R1YWxseSogZW5hYmxlZCBpcyBnb2luZyB0byBoaW5nZSBvbiBob3cgdGhlc2UgY29uZGl0aW9uYWwgc3RhdGVtZW50cyByZXNvbHZlLiBJIGV4cGVjdCB0byBzZWUgYFVTQl9ORVRfRFJJVkVSU2AsIHdoaWNoIHdpbGwgZ2l2ZSBhIGhpZ2ggbGV2ZWwgZW5hYmxpbmcgb2YgdGhlIFVTQiBuZXR3b3JrIGRyaXZlcnMuIFRoaXMgc2VlbXMgbGlrZSB0aGUgZ2F0ZXdheSBvcHRpb24uIEFmdGVyIHRoYXQgSSBhbnRpY2lwYXRlIGluZGl2aWR1YWwgZGV2aWNlIHN1cHBvcnQsIHBvc3NpYmx5IGdyb3VwZWQgYnkgY2hpcHNldCBvciB2ZW5kb3IsIHRoYXQgaXMgc2VsZWN0ZWQgYnkgdGhlIGdlbmVyYWwgZW5hYmxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhlc2Ugc2VsZWN0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIChvbmx5IG9uZSBjYW4gYmUgc2VsZWN0ZWQpIG9yIHdoZXRoZXIgbXVsdGlwbGUgZGV2aWNlcyBjYW4gYmUgc3VwcG9ydGVkIHNpbXVsdGFuZW91c2x5LgoKVGhlIGluY2x1c2lvbiBvZiBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBpcyBjcnVjaWFsLiBUaGlzIGlzIGhvdyB0aGUga2VybmVsIG1ha2VzIHN1cmUgdGhlIFVTQiBzdWJzeXN0ZW0gb3Igc29tZSBvdGhlciByZXF1aXJlZCBwaWVjZSBvZiB0aGUgcHV6emxlIGlzIHByZXNlbnQgYW5kIG9wZXJhdGlvbmFsIGJlZm9yZSBlbmFibGluZyB0aGUgY29ycmVzcG9uZGluZyBuZXR3b3JrIGRyaXZlci4gSSYjMzk7bGwgYmUgbG9va2luZyB0byB0cmFjZSB0aG9zZSBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBkZXZpY2UgdHJlZS4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHdhdGNoIGZvciBhbnkgYHNlbGVjdGAgc3RhdGVtZW50cywgYXMgdGhhdOKAmXMgdXN1YWxseSBob3cgbW9yZSBnZW5lcmFsIHNldHRpbmdzIHRyaWdnZXIgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gVGhlIGxpbmVzIEkmIzM5O20gbG9va2luZyBhdCBhcmUgdGhlIGtleSB0byBkZWNpZGluZyB3aGF0IHRoZSBrZXJuZWwgd2lsbCBhY3R1YWxseSBzdXBwb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxhbjc4eHguXG4gMTMxOlx0XG4gMTMyOlx0Y29uZmlnIFVTQl9VU0JORVRcbiAxMzM6XHRcdHRyaXN0YXRlIFwmIzM0O011bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gMTM0Olx0XHRzZWxlY3QgTUlJXG4gMTM1Olx0XHRoZWxwXG4gMTM2Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHNldmVyYWwga2luZHMgb2YgbmV0d29yayBsaW5rcyBvdmVyIFVTQixcbiAxMzc6XHRcdCAgd2l0aCBcJiMzNDttaW5pZHJpdmVyc1wmIzM0OyBidWlsdCBhcm91bmQgYSBjb21tb24gbmV0d29yayBkcml2ZXIgY29yZVxuIDEzODpcdFx0ICB0aGF0IHN1cHBvcnRzIGRlZXAgcXVldWVzIGZvciBlZmZpY2llbnQgdHJhbnNmZXJzLiAgKFRoaXMgZ2l2ZXNcbiAxMzk6XHRcdCAgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggc21hbGwgcGFja2V0cyBhbmQgYXQgaGlnaCBzcGVlZHMpLlxuIDE0MDpcdFxuIDE0MTpcdFx0ICBUaGUgVVNCIGhvc3QgcnVucyBcJiMzNDt1c2JuZXRcJiMzNDssIGFuZCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBsaW5rIG1pZ2h0IGJlOlxuIDE0MjpcdFxuIDE0MzpcdFx0ICAtIEFub3RoZXIgVVNCIGhvc3QsIHdoZW4gdXNpbmcgVVNCIFwmIzM0O25ldHdvcmtcJiMzNDsgb3IgXCYjMzQ7ZGF0YSB0cmFuc2ZlclwmIzM0O1xuIDE0NDpcdFx0ICAgIGNhYmxlcy4gIFRoZXNlIGFyZSBvZnRlbiB1c2VkIHRvIG5ldHdvcmsgbGFwdG9wcyB0byBQQ3MsIGxpa2VcbiAxNDU6XHRcdCAgICBcJiMzNDtMYXBsaW5rXCYjMzQ7IHBhcmFsbGVsIGNhYmxlcyBvciBzb21lIG1vdGhlcmJvYXJkcy4gIFRoZXNlIHJlbHlcbiAxNDY6XHRcdCAgICBvbiBzcGVjaWFsaXplZCBjaGlwcyBmcm9tIG1hbnkgc3VwcGxpZXJzLlxuIDE0NzpcdFxuIDE0ODpcdFx0ICAtIEFuIGludGVsbGlnZW50IFVTQiBnYWRnZXQsIHBlcmhhcHMgZW1iZWRkaW5nIGEgTGludXggc3lzdGVtLlxuIDE0OTpcdFx0ICAgIFRoZXNlIGluY2x1ZGUgUERBcyBydW5uaW5nIExpbnV4IChpUGFxLCBZb3B5LCBaYXVydXMsIGFuZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipLY29uZmlnIE1lbnUgRGVwZW5kZW5jeSBDaGVjayoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaW1lIHRvIGdldCBmYW1pbGlhciB3aXRoIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGhvdyB0aGUgbWVudSBzdHJ1Y3R1cmUgaXMgc2V0IHVwLCBzcGVjaWZpY2FsbHkgdGhlIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSBkbyB0aGUgb3ZlcmFsbCBuZXR3b3JrLXJlbGF0ZWQgb3B0aW9ucyBsaWtlIGBORVRfRVRIRVJORVRgIGNvbWUgaW50byBwbGF5PyYjMzQ7IEkgc2hvdWxkIHNjYW4gdGhlIHRvcCBvZiB0aGUgZmlsZSwgb3IgaWYgdGhhdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cywgSSYjMzk7bGwgbmVlZCB0byB1c2UgYG1lbnVjb25maWdgIHRvIG5hdmlnYXRlIGFuZCBmaW5kIHRoZSBtZW51IGVudHJ5IGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgdHJhY2tpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBlbnN1cmluZyB0aGluZ3MgYXJlIHByb3Blcmx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3MuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIFVTQiBuZXR3b3JrIGRyaXZlcnMgZml0IGludG8gdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb21tZW50IFwmIzM0O0hvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuICAgNjpcdFx0ZGVwZW5kcyBvbiAhVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xuICAgOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIE5ldHdvcmsgQWRhcHRlcnNcJiMzNDtcbiAgMTA6XHRcdGRlZmF1bHQgVVNCIGlmIFVTQlxuICAxMTpcdFx0ZGVwZW5kcyBvbiBVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAxMjpcdFxuICAxMzpcdGlmIFVTQl9ORVRfRFJJVkVSU1xuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBVU0JfQ0FUQ1xuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0c2VsZWN0IENSQzMyXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgVVNCIEV0aGVybmV0XG4gIDIwOlx0XHQgIGRldmljZSBiYXNlZCBvbiB0aGUgRUwxMjEwQSBjaGlwLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6XG4gIDIxOlx0XHQgIEJlbGtpbiBGNVUwMTFcbiAgMjI6XHRcdCAgQmVsa2luIEY1VTExMVxuICAyMzpcdFx0ICBDQVRDIE5ldE1hdGVcbiAgMjQ6XHRcdCAgQ0FUQyBOZXRNYXRlIElJXG4gIDI1Olx0XHQgIHNtYXJ0QnJpZGdlcyBzbWFydE5JQ1xuICAyNjpcdFxuICAyNzpcdFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxuICAyODpcdFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXG4gIDI5Olx0XHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDMyOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjYXRjLlxuICAzMzpcdFxuICAzNDpcdGNvbmZpZyBVU0JfS0FXRVRIXG4gIDM1Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgS0xTSSBLTDVVU0IxMDEtYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMzY6XHRcdGhlbHBcbiAgMzc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIG9ubHlcbiAgMzg6XHRcdCAgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBLTFNJIEtMNUtVU0IxMDFCIGNoaXBzZXQ6XG4gIDM5Olx0XHQgIDNDb20gM0MxOTI1MFxuICA0MDpcdFx0ICBBRFMgVVNCLTEwQlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM3NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBVU0IgTmV0d29yayBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIFVTQiBuZXR3b3JrIGRyaXZlcnMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbS4gSXQgc2VlbXMgbGlrZSBgVVNCX05FVF9EUklWRVJTYCBpcyB0aGUgdG9wLWxldmVsIG9wdGlvbiwgYW5kIGl0JiMzOTtzIGNvbnRpbmdlbnQgb24gYm90aCBgVVNCYCBhbmQgYE5FVGAgYmVpbmcgZW5hYmxlZCDigJMgbWFrZXMgc2Vuc2UsIHJpZ2h0PyBXZSB3b3VsZG4mIzM5O3Qgd2FudCB0byBpbmNsdWRlIG5ldHdvcmsgZHJpdmVycyBpZiB3ZSBkaWRuJiMzOTt0IGhhdmUgVVNCIHN1cHBvcnQgYW5kIG5ldHdvcmtpbmcgZW5hYmxlZC4gVGhlbiB3ZSBoYXZlIGBVU0JfVVNCTkVUYCwgYW5vdGhlciBkcml2ZXIsIGFuZCBmaW5hbGx5IGBVU0JfTkVUX0NIOTIwMGAuCgpUbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBgY2g5MjAwYCBkcml2ZXIsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlLCBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCBhcm91bmQgbGluZSAzNjAgdG8gc2VlIHRoZSBmdW5jdGlvbiBgY2g5MjAwX2JpbmRgLiBUaGlzIHNob3VsZCBzaG93IG1lIHRoZSBmdWxsIGJpbmRpbmcgcHJvY2VzcyBhbmQgaG93IGl0IGlzIGxpbmtlZC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gdGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDU6XHRcdGlmIChyZXR2YWwpXG4gMzQ2Olx0XHRcdHJldHVybiByZXR2YWw7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRkZXYtXHUwMDNlbWlpLmRldiA9IGRldi1cdTAwM2VuZXQ7XG4gMzQ5Olx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XG4gMzUwOlx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcbiAzNTE6XHRcdGRldi1cdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcbiAzNTI6XHRcbiAzNTM6XHRcdGRldi1cdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweDFmO1xuIDM1NDpcdFxuIDM1NTpcdFx0ZGV2LVx1MDAzZWhhcmRfbXR1ID0gZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgZGV2LVx1MDAzZW5ldC1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4gMzU2Olx0XHRkZXYtXHUwMDNlcnhfdXJiX3NpemUgPSAyNCAqIDY0ICYjNDM7IDE2O1xuIDM1NzpcdFx0bWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbiAzNTg6XHRcbiAzNTk6XHRcdGRhdGFbMF0gPSAweDAxO1xuIDM2MDpcdFx0ZGF0YVsxXSA9IDB4MEY7XG4gMzYxOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gMzYyOlx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzYzOlx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIDM2NDpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM2NTpcdFxuIDM2NjpcdFx0ZGF0YVswXSA9IDB4QTA7XG4gMzY3Olx0XHRkYXRhWzFdID0gMHg5MDtcbiAzNjg6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG4gMzY5Olx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzcwOlx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIDM3MTpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM3MjpcdFxuIDM3MzpcdFx0ZGF0YVswXSA9IDB4MzA7XG4gMzc0Olx0XHRkYXRhWzFdID0gMHgwMDtcbiAzNzU6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxuIDM3NjpcdFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM3NzpcdFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiAzNzg6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzNzk6XHRcbiAzODA6XHRcdGRhdGFbMF0gPSAweDE3O1xuIDM4MTpcdFx0ZGF0YVsxXSA9IDB4RDg7XG4gMzgyOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gMzgzOlx0XHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzg0Olx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIDM4NTpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM4NjpcdFxuIDM4NzpcdFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXG4gMzg4Olx0XHRkYXRhWzBdID0gMHgwMTtcbiAzODk6XHRcdGRhdGFbMV0gPSAweDAwO1xuIDM5MDpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcbiAzOTE6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzOTI6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gMzkzOlx0XHRcdHJldHVybiByZXR2YWw7XG4gMzk0Olx0XG4gMzk1Olx0XHRkYXRhWzBdID0gMHg1RjtcbiAzOTY6XHRcdGRhdGFbMV0gPSAweDBEO1xuIDM5NzpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbiAzOTg6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzOTk6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gNDAwOlx0XHRcdHJldHVybiByZXR2YWw7XG4gNDAxOlx0XG4gNDAyOlx0XHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiA0MDM6XHRcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiA0MDQ6XHRcbiA0MDU6XHRcdHJldHVybiByZXR2YWw7XG4gNDA2Olx0fVxuIDQwNzpcdFxuIDQwODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XG4gNDA5Olx0XHQuZGVzY3JpcHRpb24gPSBcJiMzNDtDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclwmIzM0OyxcbiA0MTA6XHRcdC5mbGFncyA9IEZMQUdfRVRIRVIsXG4gNDExOlx0XHQuYmluZCA9IGNoOTIwMF9iaW5kLFxuIDQxMjpcdFx0LnJ4X2ZpeHVwID0gY2g5MjAwX3J4X2ZpeHVwLFxuIDQxMzpcdFx0LnR4X2ZpeHVwID0gY2g5MjAwX3R4X2ZpeHVwLFxuIDQxNDpcdFx0LnN0YXR1cyA9IGNoOTIwMF9zdGF0dXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIGBjaDkyMDBfYmluZGAuIEkgcmVjYWxsIHNlZWluZyB0aGF0IGZ1bmN0aW9uIG1lbnRpb25lZCBlYXJsaWVyLCBhcm91bmQgbGluZXMgMzIwIHRvIDM0NSBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgaG93IHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gSSYjMzk7bGwgbmVlZCB0byByZS1leGFtaW5lIHRoYXQgc2VjdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRcdFx0XHRcdCAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzMjE6XHRcdHJkX21hY19sZW4gJiM0Mzs9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCwgTUFDX1JFR19TVEFUSU9OX00sXG4gMzIyOlx0XHRcdFx0XHQgICBtYWNfYWRkciAmIzQzOyAyLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDMyMzpcdFx0cmRfbWFjX2xlbiAmIzQzOz0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBNQUNfUkVHX1NUQVRJT05fSCxcbiAzMjQ6XHRcdFx0XHRcdCAgIG1hY19hZGRyICYjNDM7IDQsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzI1Olx0XHRpZiAocmRfbWFjX2xlbiAhPSBFVEhfQUxFTilcbiAzMjY6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAzMjc6XHRcbiAzMjg6XHRcdGRhdGFbMF0gPSBtYWNfYWRkcls1XTtcbiAzMjk6XHRcdGRhdGFbMV0gPSBtYWNfYWRkcls0XTtcbiAzMzA6XHRcdGRhdGFbMl0gPSBtYWNfYWRkclszXTtcbiAzMzE6XHRcdGRhdGFbM10gPSBtYWNfYWRkclsyXTtcbiAzMzI6XHRcdGRhdGFbNF0gPSBtYWNfYWRkclsxXTtcbiAzMzM6XHRcdGRhdGFbNV0gPSBtYWNfYWRkclswXTtcbiAzMzQ6XHRcbiAzMzU6XHRcdHJldHVybiBlcnI7XG4gMzM2Olx0fVxuIDMzNzpcdFxuIDMzODpcdHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiAzMzk6XHR7XG4gMzQwOlx0XHRpbnQgcmV0dmFsID0gMDtcbiAzNDE6XHRcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcbiAzNDI6XHRcdHU4IGFkZHJbRVRIX0FMRU5dO1xuIDM0MzpcdFxuIDM0NDpcdFx0cmV0dmFsID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbiAzNDU6XHRcdGlmIChyZXR2YWwpXG4gMzQ2Olx0XHRcdHJldHVybiByZXR2YWw7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRkZXYtXHUwMDNlbWlpLmRldiA9IGRldi1cdTAwM2VuZXQ7XG4gMzQ5Olx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NjQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgY2g5MjAwX2JpbmRgIENhbGxiYWNrKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyB1bmRlcnN0YW5kaW5nIHRoZSBsaWZlY3ljbGUgb2YgYGNoOTIwMF9iaW5kYCwgdGhlIGAuYmluZGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgc3RydWN0IGRyaXZlcl9pbmZvIGNoOTIwMF9pbmZvYCBzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKndoZW4qIGRvZXMgdGhpcyBmdW5jdGlvbiBnZXQgaW52b2tlZD8gVGltZSB0byB0cmFjZSBpdHMgZXhlY3V0aW9uIHBhdGguCgpUaGUgbG9naWNhbCBwbGFjZSB0byBsb29rIGlzIHdpdGhpbiB0aGUgYHVzYm5ldGAgZnJhbWV3b3JrLCBzaW5jZSB0aGUgYGNoOTIwMGAgZHJpdmVyIGlzIGJ1aWx0IG9uIGl0LiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYHVzYm5ldGAgY29yZSBjYWxscyB0aGUgYGluZm8tJmd0O2JpbmRgIGZ1bmN0aW9uLiBUaGF0IHN1Z2dlc3RzIGxvb2tpbmcgYXQgYHVzYm5ldF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWRldiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKnByb2QpYC4gQmluZ28hIFRoZXJlIGl0IGlzOiBgaW5mby0mZ3Q7YmluZChkZXYsIHVpbnRlcmZhY2UpYC4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBjYWxsLgoKTm93LCBob3cgZG9lcyBgY2g5MjAwYCBnZXQgcmVnaXN0ZXJlZCB3aXRoIGB1c2JuZXRgIGluIHRoZSBmaXJzdCBwbGFjZT8gVG8gY29uZmlybSB0aGUgZnVsbCBzZXR1cCwgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBsaW5lcyA0MTAgdG8gNDQwIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIHJlZ2lzdHJhdGlvbiBvY2N1cnMuIFRoYXQgd2lsbCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgYGNoOTIwMGAgZHJpdmVyIGFuZCB0aGUgYHVzYm5ldGAgZnJhbWV3b3JrLCBhbmQgaG93IHRoYXQgbGVhZHMgdG8gdGhlIGV4ZWN1dGlvbiBvZiBgY2g5MjAwX2JpbmRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDEwOlx0XHQuZmxhZ3MgPSBGTEFHX0VUSEVSLFxuIDQxMTpcdFx0LmJpbmQgPSBjaDkyMDBfYmluZCxcbiA0MTI6XHRcdC5yeF9maXh1cCA9IGNoOTIwMF9yeF9maXh1cCxcbiA0MTM6XHRcdC50eF9maXh1cCA9IGNoOTIwMF90eF9maXh1cCxcbiA0MTQ6XHRcdC5zdGF0dXMgPSBjaDkyMDBfc3RhdHVzLFxuIDQxNTpcdFx0LmxpbmtfcmVzZXQgPSBjaDkyMDBfbGlua19yZXNldCxcbiA0MTY6XHRcdC5yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxuIDQxNzpcdH07XG4gNDE4Olx0XG4gNDE5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNoOTIwMF9wcm9kdWN0c1tdID0ge1xuIDQyMDpcdFx0e1xuIDQyMTpcdFx0IFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpLFxuIDQyMjpcdFx0IC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKVx1MDAyNmNoOTIwMF9pbmZvLFxuIDQyMzpcdFx0IH0sXG4gNDI0Olx0XHR7fSxcbiA0MjU6XHR9O1xuIDQyNjpcdFxuIDQyNzpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBjaDkyMDBfcHJvZHVjdHMpO1xuIDQyODpcdFxuIDQyOTpcdHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjaDkyMDBfZHJpdmVyID0ge1xuIDQzMDpcdFx0Lm5hbWUgPSBcJiMzNDtjaDkyMDBcJiMzNDssXG4gNDMxOlx0XHQuaWRfdGFibGUgPSBjaDkyMDBfcHJvZHVjdHMsXG4gNDMyOlx0XHQucHJvYmUgPSB1c2JuZXRfcHJvYmUsXG4gNDMzOlx0XHQuZGlzY29ubmVjdCA9IHVzYm5ldF9kaXNjb25uZWN0LFxuIDQzNDpcdFx0LnN1c3BlbmQgPSB1c2JuZXRfc3VzcGVuZCxcbiA0MzU6XHRcdC5yZXN1bWUgPSB1c2JuZXRfcmVzdW1lLFxuIDQzNjpcdH07XG4gNDM3Olx0XG4gNDM4Olx0bW9kdWxlX3VzYl9kcml2ZXIoY2g5MjAwX2RyaXZlcik7XG4gNDM5Olx0XG4gNDQwOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1FpbkhlbmcgQ0g5MjAwIFVTQiBOZXR3b3JrIGRldmljZVwmIzM0Oyk7XG4gNDQxOlx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGNoOTIwMCBEcml2ZXImIzM5O3MgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGNoOTIwMF9wcm9kdWN0c2AgZW50cnk6IGBVU0JfREVWSUNFKDB4MUE4NiwgMHhFMDkyKWAuICBJbiB0aGUgY29udGV4dCBvZiBzeXprYWxsZXIsIHRoaXMgaXMgYSBkZXZpY2UgSSBjYW4gcmVhZGlseSBlbXVsYXRlLiBTeXprYWxsZXImIzM5O3MgVVNCIGVtdWxhdGlvbiBhbGxvd3MgbWUgdG8gY29ubmVjdCAqYW55KiBVU0IgZGV2aWNlIHdpdGggYSBkZWZpbmVkIHZlbmRvciBhbmQgcHJvZHVjdCBJRCDigJMgYW5kIHRoaXMgb25lJiMzOTtzIGF2YWlsYWJsZS4gIFdoZW4gdGhhdCB2aXJ0dWFsIGRldmljZSBjb25uZWN0cywgYHVzYm5ldF9wcm9iZWAgZ2V0cyBjYWxsZWQuICBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBoYXBwZW5zOiBgdXNibmV0X3Byb2JlYCB0aGVuIGNhbGxzIGBjaDkyMDBfYmluZGAuCgpQcmV2aW91c2x5LCBJIHNlZSB0aGVyZSYjMzk7cyBhIHByb2JsZW0gaW4gYGNoOTIwMF9iaW5kYC4gVGhlIGNvZGUgaXNzdWVzIHNldmVyYWwgYGNvbnRyb2xfd3JpdGVgIGNhbGxzLCBidXQgY3J1Y2lhbGx5LCB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIHRob3NlIGNhbGxzIHdlcmUgKmlnbm9yZWQqISAgU28sIGlmIGEgYGNvbnRyb2xfd3JpdGVgIGZhaWxlZOKAlHNheSwgZHVlIHRvIGEgdGltZW91dCwgYSBVU0IgdHJhbnNmZXIgZXJyb3IsIG9yIGlmIHRoZSBlbXVsYXRlZCBkZXZpY2UgZGVjaWRlZCB0byByZXR1cm4gYW4gZXJyb3Ig4oCTIHRoZSBjb2RlIGp1c3Qga2VwdCBvbiBnb2luZy4gSXQgd291bGQgYmxpdGhlbHkgcHJvY2VlZCB0byBgZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7IGV0aF9od19hZGRyX3NldChkZXYtJmd0O25ldCwgYWRkcik7IHJldHVybiByZXR2YWw7YC4gVGFsayBhYm91dCBhIHBvdGVudGlhbCBmb3Igc29tZSBzZXJpb3VzIGluc3RhYmlsaXR5IQoKTm93LCB0aGUgZml4IGlzIGluOiBhbnkgZmFpbHVyZSBpbiBhIGBjb250cm9sX3dyaXRlYCBjYWxsIHdpbGwgaW1tZWRpYXRlbHkgYWJvcnQgYGNoOTIwMF9iaW5kYC4gSXQmIzM5O2xsIHJldHVybiB0aGUgZXJyb3IgY29kZSAoYHJldHZhbGApLCB3aGljaCB3aWxsLCBpbiB0dXJuLCBjYXVzZSBgdXNibmV0X3Byb2JlYCB0byBmYWlsIGFuZCwgdWx0aW1hdGVseSwgdGVhciBkb3duIHRoZSBkZXZpY2UgKGBkZXZgKS4gIFRoaXMgaXMgYSBnb29kIHN0ZXAsIHByZXZlbnRpbmcgZnVydGhlciBleGVjdXRpb24gYW5kIHBvdGVudGlhbGx5IG1hc2tpbmcgYnVncy4KCkJ1dC4uLndhaXQgYSBtaW51dGUuIElzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqPyAgTGV0JiMzOTtzIGNoZWNrIHRoZSBjcml0ZXJpYS4gTXkgZXhwZXJpZW5jZSB3aXRoIHRoaXMgdHlwZSBvZiBkZWJ1Z2dpbmcgdGVsbHMgbWUgdGhhdCwgaW4gU2VjdGlvbiAzIG9mIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uLCB0aGUga2V5IGlzIHRoZSBwcmVzZW5jZSBvZiB2aXJ0dWFsIGJ1c2VzLiBBbmQgeXVwLCB0aGVyZSB0aGV5IGFyZTogdmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuICBTcGVjaWZpY2FsbHksIFVTQiBkcml2ZXJzIGFyZSBhY2Nlc3NpYmxlIHZpYSBVU0IgcmF3IGdhZGdldCwgdmhjaSwgYW5kIGR1bW15X2hjZCBlbXVsYXRpb24uIEFuZCBzeXprYWxsZXIgKmV4cGxpY2l0bHkqIHRhcmdldHMgdGhlc2UgVVNCIGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgdXNibmV0IGRyaXZlcnMgdmlhIGBzeXpfdXNiX2Nvbm5lY3RgLiBZZXMsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZS4KCkkgbmVlZCBtb3JlIGNvbnRleHQsIHRob3VnaC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgZ2l0IGNvbW1pdHMgb3Igc2ltaWxhciBwYXRjaGVzIHRoYXQgZXhwbGFpbiB0aGUgaGlzdG9yeSBvZiB0aGlzLCB0byBrbm93IHdoYXQgcHJvbXB0ZWQgdGhpcyBjaGFuZ2UgYW5kIHVuZGVyc3RhbmQgaXRzIGltcGFjdCwgYW5kIHRvIGtub3cgd2hhdCBjb25kaXRpb25zIHdvdWxkIHRyaWdnZXIgdGhpcyBidWcuIEkmIzM5O2xsIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZSBvciB0aGUgZ2l0IGxvZyBvZiBgY2g5MjAwLmNgIGl0c2VsZi4gVGhpcyBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbnRyb2xfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTk5PXN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTM2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjEzNzpzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTM4LVx0XHRcdCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTE5Nz1zdGF0aWMgdm9pZCBjaDkyMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTEtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjEyOlx0Y29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIGxvYyAqIDIsIGJ1ZmYsIDB4MDIsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjEzLVx0XHQgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0zMzg9c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjAtXHRkYXRhWzFdID0gMHgwRjtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNjE6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzYyLVx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjctXHRkYXRhWzFdID0gMHg5MDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNjg6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2OS1cdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzc0LVx0ZGF0YVsxXSA9IDB4MDA7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Mzc1Olx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzc2LVx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zODEtXHRkYXRhWzFdID0gMHhEODtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozODI6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzgzLVx0XHRcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zODktXHRkYXRhWzFdID0gMHgwMDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozOTA6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM5MS1cdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzk2LVx0ZGF0YVsxXSA9IDB4MEQ7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Mzk3Olx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTgtXHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTE3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ0g5MjAwIERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgY29udHJvbF93cml0ZWAgZnVuY3Rpb24gaXMgd29ya2luZyB3aXRoaW4gdGhlIENIOTIwMCBVU0IgbmV0d29yayBkcml2ZXIuIExldCYjMzk7cyBzdGFydCBieSBoZWFkaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIG9wZW4gdXAgYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AgaW1tZWRpYXRlbHkuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2sgdG8gc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSG9wZWZ1bGx5LCB0aGUgZGVmaW5pdGlvbiB0aGVyZSB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLiBJJiMzOTttIGFzc3VtaW5nIGl0IGhhbmRsZXMgdGhvc2Ugc3RhbmRhcmQgVVNCIGNvbnRyb2wgdHJhbnNmZXJzLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gdG8gY29uZmlybSBhbmQgZ2V0IHRoZSBmaW5lIGRldGFpbHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHRzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG4gMTM4Olx0XHRcdFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcbiAxMzk6XHRcdFx0XHQgdm9pZCAqZGF0YSwgdW5zaWduZWQgc2hvcnQgc2l6ZSwgaW50IHRpbWVvdXQpXG4gMTQwOlx0e1xuIDE0MTpcdFx0dW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDtcbiAxNDI6XHRcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdF90eXBlO1xuIDE0MzpcdFx0aW50IGVyciA9IDA7XG4gMTQ0Olx0XG4gMTQ1Olx0XHRpZiAocmVxdWVzdCA9PSBSRVFVRVNUX1dSSVRFKVxuIDE0NjpcdFx0XHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuIDE0NzpcdFx0XHRcdFx0VVNCX1JFQ0lQX09USEVSKTtcbiAxNDg6XHRcdGVsc2VcbiAxNDk6XHRcdFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcbiAxNTA6XHRcdFx0XHRcdFVTQl9SRUNJUF9ERVZJQ0UpO1xuIDE1MTpcdFxuIDE1MjpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDslcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxuXCYjMzQ7LFxuIDE1MzpcdFx0XHQgICBfX2Z1bmNfXywgaW5kZXgsIHNpemUpO1xuIDE1NDpcdFxuIDE1NTpcdFx0aWYgKGRhdGEpIHtcbiAxNTY6XHRcdFx0YnVmID0ga21lbWR1cChkYXRhLCBzaXplLCBHRlBfS0VSTkVMKTtcbiAxNTc6XHRcdFx0aWYgKCFidWYpIHtcbiAxNTg6XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDE1OTpcdFx0XHRcdGdvdG8gZXJyX291dDtcbiAxNjA6XHRcdFx0fVxuIDE2MTpcdFx0fVxuIDE2MjpcdFxuIDE2MzpcdFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cdTAwM2V1ZGV2LFxuIDE2NDpcdFx0XHRcdCAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtXHUwMDNldWRldiwgMCksXG4gMTY1Olx0XHRcdFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcbiAxNjY6XHRcdFx0XHQgICAgICB0aW1lb3V0KTtcbiAxNjc6XHRcdGlmIChlcnIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBlcnIgXHUwMDNjIHNpemUpXG4gMTY4Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMTY5Olx0XHRrZnJlZShidWYpO1xuIDE3MDpcdFxuIDE3MTpcdFx0cmV0dXJuIDA7XG4gMTcyOlx0XG4gMTczOlx0ZXJyX291dDpcbiAxNzQ6XHRcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjkzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBgY29udHJvbF93cml0ZWAgLSBBIENyaXRpY2FsIE92ZXJzaWdodCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJIG5lZWQgdG8gcmV2aXNpdCB0aGlzIGBjb250cm9sX3dyaXRlYCBmdW5jdGlvbjsgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIHBvdGVudGlhbGx5IGF3cnkgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgYXQgbGluZXMgMTY3LTE3Mi4gKkhlcmUqIHdlIGdvOgpgYGBjCgkJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi0mZ3Q7dWRldiwKCQkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtJmd0O3VkZXYsIDApLAoJCQkJICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSwKCQkJCSAgICAgIHRpbWVvdXQpOwoJCWlmIChlcnIgJmd0Oz0gMCAmYW1wOyZhbXA7IGVyciAmbHQ7IHNpemUpCgkJCWVyciA9IC1FSU5WQUw7CgkJa2ZyZWUoYnVmKTsKCgkJcmV0dXJuIDA7CgplcnJfb3V0OgoJCXJldHVybiBlcnI7CmBgYApUaGF0IGBrZnJlZShidWYpYCBpcyBkZWZpbml0ZWx5IGdldHRpbmcgbXkgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIHJlZ2FyZGxlc3Mgb2YgdGhlIG91dGNvbWUgb2YgYHVzYl9jb250cm9sX21zZ2AsIHRoZSBidWZmZXIgaXMgKmFsd2F5cyogZnJlZWQgYW5kIHRoZSBmdW5jdGlvbiAqYWx3YXlzKiByZXR1cm5zIDAgYWZ0ZXIgYSBzdWNjZXNzZnVsIGJ1ZmZlciBhbGxvY2F0aW9uLiBObywgbm8sIHdhaXQuLi4gbGV0IG1lIHJlLWV4YW1pbmUgdGhpcy4gTG9vaywgbGluZSAxNzEgKmFsd2F5cyogcmV0dXJucyAwIGlmIHdlIGdldCBwYXN0IHRoZSBidWZmZXIgYWxsb2NhdGlvbi4gRXZlbiBpZiBgdXNiX2NvbnRyb2xfbXNnYCBmYWlscywgdGhlIGVycm9yIGNvZGUgZ2V0cyBzZXQsIGFuZCAqdGhlbiogdGhlIGZ1bmN0aW9uIHNpbXBseSByZXR1cm5zIDAhIElzIHRoYXQgdHJ1ZT8gQW0gSSByZWFkaW5nIHRoaXMgY29ycmVjdGx5PyBJJiMzOTttIGdvaW5nIHRvIGJhY2sgdXAgYW5kIHJlLXJlYWQgdGhlIGVudGlyZSBzZWN0aW9uIGZyb20gMTYwLTE4MCB0byBiZSBjZXJ0YWluLiBJIG5lZWQgdG8gYmUgKnN1cmUqIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZSBoZXJlLiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgYnVnIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYwOlx0XHRcdH1cbiAxNjE6XHRcdH1cbiAxNjI6XHRcbiAxNjM6XHRcdGVyciA9IHVzYl9jb250cm9sX21zZyhkZXYtXHUwMDNldWRldixcbiAxNjQ6XHRcdFx0XHQgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LVx1MDAzZXVkZXYsIDApLFxuIDE2NTpcdFx0XHRcdCAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdHlwZSwgdmFsdWUsIGluZGV4LCBidWYsIHNpemUsXG4gMTY2Olx0XHRcdFx0ICAgICAgdGltZW91dCk7XG4gMTY3Olx0XHRpZiAoZXJyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZXJyIFx1MDAzYyBzaXplKVxuIDE2ODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDE2OTpcdFx0a2ZyZWUoYnVmKTtcbiAxNzA6XHRcbiAxNzE6XHRcdHJldHVybiAwO1xuIDE3MjpcdFxuIDE3MzpcdGVycl9vdXQ6XG4gMTc0Olx0XHRyZXR1cm4gZXJyO1xuIDE3NTpcdH1cbiAxNzY6XHRcbiAxNzc6XHRzdGF0aWMgaW50IGNoOTIwMF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYylcbiAxNzg6XHR7XG4gMTc5Olx0XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIDE4MDpcdFx0dW5zaWduZWQgY2hhciBidWZmWzJdO1xuIDE4MTpcdFx0aW50IHJldDtcbiAxODI6XHRcbiAxODM6XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDslcyBwaHlfaWQ6JTAyeCBsb2M6JTAyeFxcblwmIzM0OyxcbiAxODQ6XHRcdFx0ICAgX19mdW5jX18sIHBoeV9pZCwgbG9jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFVTQiBEcml2ZXIgUGF0Y2ggYW5kIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBub3RpY2VkIGEgaGFyZGNvZGVkIGByZXR1cm4gMGAgaW4gYGNvbnRyb2xfd3JpdGVgIGF0IGxpbmUgMTcxLiBCdXQgd2FpdCwgaXQmIzM5O3Mgbm90IGFsd2F5cyB6ZXJvLCBpdCBjYW4gcmV0dXJuIGAtRU5PTUVNYCBpZiBga21lbWR1cGAgZmFpbHMuIFRoYXQmIzM5O3MgYSBwb2ludC4KClRoZSBtb3JlIHJlY2VudCBwYXRjaCBhZGRzIGBpZiAocmV0dmFsICZsdDsgMCkgcmV0dXJuIHJldHZhbDtgIGluIGBjaDkyMDBfYmluZGAuIFRoaXMgbWVhbnMgdGhlIGNvZGUgbm93IGV4cGxpY2l0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNvbnRyb2xfd3JpdGVgIGFuZCByZXR1cm5zIGVhcmx5IGlmIGl0JiMzOTtzIG5lZ2F0aXZlLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgcHJldmlvdXNseSwgdGhlIGByZXR2YWxgIGZyb20gYGNvbnRyb2xfd3JpdGVgIHdhcyBvdmVyd3JpdHRlbiBieSBzdWJzZXF1ZW50IGNhbGxzLiBJdCBsb29rcyBsaWtlIGEgYnVnLWZpeCB0byBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBmcm9tIGBjb250cm9sX3dyaXRlYC4gQW5kIGlmIHRoZSBga21lbWR1cGAgZmFpbHMsIHRoYXQgcmV0dXJucyBgLUVOT01FTWAuIEl0IG1ha2VzIGBjb250cm9sX3dyaXRlYCByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZS4KCk5vdywgY291bGQgYGNvbnRyb2xfd3JpdGVgIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIG90aGVyIHRoYW4gYC1FTk9NRU1gPyBObywgYmVjYXVzZSBgZGF0YWAgaXMgbm9uLW51bGwuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBwYXRjaCBpcyBwYXJ0IG9mIGEgc2VyaWVzIG9yIGhpc3Rvcnkgb2YgY29tbWl0cywgYnV0IGdyZXBwZXIgb3IgcmVhZGluZyB0aGUgZmlsZSB3aWxsIHByb3ZpZGUgbW9yZSBkZXRhaWwuCgpSaWdodCwgdGhlIGRpZmYgb25seSB0b3VjaGVzIGBjaDkyMDAuY2Agd2l0aGluIGBjaDkyMDBfYmluZGAuIFRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSBob3cgZXJyb3JzIGZyb20gYGNvbnRyb2xfd3JpdGVgIGFyZSBoYW5kbGVkIGluIGBjaDkyMDBfYmluZGAuIEJlZm9yZSwgdGhlIHJldHVybiB2YWx1ZSB3YXMgaWdub3JlZCwgYW5kIG5vdyBpdCYjMzk7cyBjaGVja2VkLiBUaGlzIG1lYW5zIGBjb250cm9sX3dyaXRlYCAqY2FuKiByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSwgc3BlY2lmaWNhbGx5IGAtRU5PTUVNYCwgZHVlIHRvIGEgYGttZW1kdXBgIGZhaWx1cmUuIExvb2tzIGxpa2UgYSBidWctZml4LgoKVGhlIGtleSBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IFRoaXMgaXMgYSBjb3JlIGNvbmNlcHQuIEdpdmVuIHRoYXQgYGNoOTIwMGAgaXMgYSBVU0IgZHJpdmVyLCBpdCAqaXMqIHJlYWNoYWJsZS4gVVNCIGRyaXZlcnMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB2aXJ0dWFsIGJ1c2VzIHN1Y2ggYXMgVVNCIGdhZGdldCwgdmhjaSwgb3IgZHVtbXlfaGNkLiBgY2g5MjAwYCBpcyBpbiBgZHJpdmVycy9uZXQvdXNiL2AsIG1ha2luZyBpdCBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIuIFRoZSBjb2RlIGNvbnRhaW5zOgoKYGBgYwpzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2g5MjAwX3Byb2R1Y3RzW10gPSB7Cgl7CgkgVVNCX0RFVklDRSgweDFBODYsIDB4RTA5MiksCgkgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmFtcDtjaDkyMDBfaW5mbywKCSB9LAoJe30sCn07CmBgYAoKVGhpcyBtZWFucyB0aGF0IHdoZW4gc3l6a2FsbGVyIGNvbm5lY3RzIGEgVVNCIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgVklEIGFuZCBQSUQsIHRoZSBgY2g5MjAwX2RyaXZlcmAgd2lsbCBiZSBtYXRjaGVkLCB0cmlnZ2VyaW5nIGB1c2JuZXRfcHJvYmVgLCB3aGljaCBjYWxscyBgY2g5MjAwX2JpbmRgLiBUaGUgYWRkZWQgZXJyb3ItaGFuZGxpbmcgcGF0Y2ggcGF0aHMgKndpbGwqIGJlIGV4ZWN1dGVkIQoKTW9yZW92ZXIsIGl0JiMzOTtzIGVhc2lseSB0cmlnZ2VyYWJsZS4gSWYgd2UgZW1wbG95IGZhdWx0IGluamVjdGlvbiwgc3BlY2lmaWNhbGx5IGttYWxsb2Mgb3IgZmFpbHNsYWIsIHdlIGNhbiBpbmR1Y2UgYSBgLUVOT01FTWAgZnJvbSBga21lbWR1cGAgaW4gYGNvbnRyb2xfd3JpdGVgLiBUaGVuLCB0aGF0IGVycm9yIHdpbGwgYmUgcHJvcGFnYXRlZCB0aHJvdWdoIHRoZSBuZXcgYGlmYCBjb25kaXRpb24gaW4gYGNoOTIwMF9iaW5kYC4KCkdpdmVuIGFsbCBvZiB0aGlzLCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGB1c2JuZXRfcHJvYmVgIGhhbmRsZXMgYGluZm8tJmd0O2JpbmRgIHByb3Blcmx5IHRvIHZlcmlmeSB0aGVyZSBhcmUgbm8gbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYHVzYm5ldF9wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXR1cyA9IGluZm8tXHUwMDNlYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MTcyNj11c2JuZXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVkZXYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpwcm9kKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xODA3LVx0XHRuZXQtXHUwMDNlbWF4X210dSA9IEVUSF9NQVhfTVRVO1xuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjE4MDg6XHRcdHN0YXR1cyA9IGluZm8tXHUwMDNlYmluZChkZXYsIHVkZXYpO1xuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTE4MDktXHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzQ3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgdXNibmV0LmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCBkcml2ZXIsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxODA4LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHdoZW4gSSYjMzk7bSB0cmFja2luZyBkb3duIGFuIGlzc3VlIGluIHRoZSBVU0IgbmV0d29ya2luZyBzdGFjay4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHNvbWV0aGluZyBzcGVjaWZpYyB0byBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRhdGEgdHJhbnNmZXIsIHBlcmhhcHMgcmVsYXRlZCB0byBwYWNrZXQgZnJhbWluZywgYnVmZmVyIG1hbmFnZW1lbnQsIG9yIG1heWJlIGV2ZW4gYW4gaW50ZXJydXB0IGhhbmRsaW5nIGlzc3VlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlIHJldmVhbHMuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCB0YWtlIGEgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDU6XHRcdC8vIE5PVEUgbmV0LVx1MDAzZW5hbWUgc3RpbGwgbm90IHVzYWJsZSAuLi5cbjE4MDY6XHRcdGlmIChpbmZvLVx1MDAzZWJpbmQpIHtcbjE4MDc6XHRcdFx0bmV0LVx1MDAzZW1heF9tdHUgPSBFVEhfTUFYX01UVTtcbjE4MDg6XHRcdFx0c3RhdHVzID0gaW5mby1cdTAwM2ViaW5kKGRldiwgdWRldik7XG4xODA5Olx0XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4xODEwOlx0XHRcdFx0Z290byBvdXQxO1xuMTgxMTpcdFxuMTgxMjpcdFx0XHQvKiBoZXVyaXN0aWM6IHJlbmFtZSB0byBcJiMzNDtldGglZFwmIzM0OyBpZiB3ZSBhcmUgbm90IHN1cmUgdGhpcyBsaW5rXG4xODEzOlx0XHRcdCAqIGlzIHR3by1ob3N0ICh0aGVzZSBsaW5rcyBrZWVwIFwmIzM0O3VzYiVkXCYjMzQ7KVxuMTgxNDpcdFx0XHQgKi9cbjE4MTU6XHRcdFx0aWYgKChkZXYtXHUwMDNlZHJpdmVyX2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IEZMQUdfRVRIRVIpICE9IDAgXHUwMDI2XHUwMDI2XG4xODE2Olx0XHRcdCAgICAhdXNibmV0X25lZWRzX3VzYl9uYW1lX2Zvcm1hdChkZXYsIG5ldCkpXG4xODE3Olx0XHRcdFx0c3Ryc2NweShuZXQtXHUwMDNlbmFtZSwgXCYjMzQ7ZXRoJWRcJiMzNDssIHNpemVvZihuZXQtXHUwMDNlbmFtZSkpO1xuMTgxODpcdFx0XHQvKiBXTEFOIGRldmljZXMgc2hvdWxkIGFsd2F5cyBiZSBuYW1lZCBcJiMzNDt3bGFuJWRcJiMzNDsgKi9cbjE4MTk6XHRcdFx0aWYgKChkZXYtXHUwMDNlZHJpdmVyX2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IEZMQUdfV0xBTikgIT0gMClcbjE4MjA6XHRcdFx0XHRzdHJzY3B5KG5ldC1cdTAwM2VuYW1lLCBcJiMzNDt3bGFuJWRcJiMzNDssIHNpemVvZihuZXQtXHUwMDNlbmFtZSkpO1xuMTgyMTpcdFx0XHQvKiBXV0FOIGRldmljZXMgc2hvdWxkIGFsd2F5cyBiZSBuYW1lZCBcJiMzNDt3d2FuJWRcJiMzNDsgKi9cbjE4MjI6XHRcdFx0aWYgKChkZXYtXHUwMDNlZHJpdmVyX2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IEZMQUdfV1dBTikgIT0gMClcbjE4MjM6XHRcdFx0XHRzdHJzY3B5KG5ldC1cdTAwM2VuYW1lLCBcJiMzNDt3d2FuJWRcJiMzNDssIHNpemVvZihuZXQtXHUwMDNlbmFtZSkpO1xuMTgyNDpcdFxuMTgyNTpcdFx0XHQvKiBkZXZpY2VzIHRoYXQgY2Fubm90IGRvIEFSUCAqL1xuMTgyNjpcdFx0XHRpZiAoKGRldi1cdTAwM2Vkcml2ZXJfaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRkxBR19OT0FSUCkgIT0gMClcbjE4Mjc6XHRcdFx0XHRuZXQtXHUwMDNlZmxhZ3MgfD0gSUZGX05PQVJQO1xuMTgyODpcdFxuMTgyOTpcdFx0XHRpZiAoKGRldi1cdTAwM2Vkcml2ZXJfaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRkxBR19OT01BWE1UVSkgPT0gMCBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEVycm9yIEhhbmRsaW5nIGluIHRoZSBgaW5mby0mZ3Q7YmluZGAgQ2FsbCoqCgpSaWdodCwgc28gYGluZm8tJmd0O2JpbmRgIGp1c3QgZmFpbGVkLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyBuZWdhdGl2ZS4gVGhhdCBtZWFucyB3ZSBqdW1wIHRvIGBnb3RvIG91dDFgLiBNeSBmb2N1cyBpcyBub3cgbGFzZXItc2hhcnAgb24gd2hhdCBoYXBwZW5zIGF0IHRoZSBgb3V0MWAgbGFiZWwsIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgY2xlYW51cCBwYXRoIHdlJiMzOTtyZSB0YWtpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyByZWxlYXNlZCwgd2hhdCBzdGF0ZSBpcyBiZWluZyByZXNldCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciByYWNlIGNvbmRpdGlvbnMgaW50cm9kdWNlZCBieSB0aGlzIGVhcmx5IGV4aXQuIExldCBtZSBjb25zdWx0IGxpbmVzIDE4NTAtMTg4MCwgYXMgSSBleHBlY3QgdGhlIGVycm9yIGhhbmRsaW5nIGluIGBvdXQxYCB0byBiZSBkZWZpbmVkIHRoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIG1lbW9yeSBkZWFsbG9jYXRpb25zLCBzb2NrZXQgY2xvc2VzLCBhbnkga2luZCBvZiByZXNvdXJjZSBjbGVhbnVwLCBhbmQgYWxzbyBhbnkgb3RoZXIgcmVsZXZhbnQgZXJyb3IgaGFuZGxpbmcgb3IgbG9nZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NTA6XHRcdFx0XHRzdGF0dXMgPSAwO1xuMTg1MTpcdFxuMTg1MjpcdFx0XHRpZiAoc3RhdHVzID09IDAgXHUwMDI2XHUwMDI2ICF1c2JfY2hlY2tfYnVsa19lbmRwb2ludHModWRldiwgZXBfYWRkcnMpKVxuMTg1MzpcdFx0XHRcdHN0YXR1cyA9IC1FSU5WQUw7XG4xODU0Olx0XHR9XG4xODU1Olx0XHRpZiAoc3RhdHVzIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZXN0YXR1cylcbjE4NTY6XHRcdFx0c3RhdHVzID0gaW5pdF9zdGF0dXMoZGV2LCB1ZGV2KTtcbjE4NTc6XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4xODU4Olx0XHRcdGdvdG8gb3V0MztcbjE4NTk6XHRcbjE4NjA6XHRcdGlmICghZGV2LVx1MDAzZXJ4X3VyYl9zaXplKVxuMTg2MTpcdFx0XHRkZXYtXHUwMDNlcnhfdXJiX3NpemUgPSBkZXYtXHUwMDNlaGFyZF9tdHU7XG4xODYyOlx0XHRkZXYtXHUwMDNlbWF4cGFja2V0ID0gdXNiX21heHBhY2tldChkZXYtXHUwMDNldWRldiwgZGV2LVx1MDAzZW91dCk7XG4xODYzOlx0XHRpZiAoZGV2LVx1MDAzZW1heHBhY2tldCA9PSAwKSB7XG4xODY0Olx0XHRcdC8qIHRoYXQgaXMgYSBicm9rZW4gZGV2aWNlICovXG4xODY1Olx0XHRcdHN0YXR1cyA9IC1FTk9ERVY7XG4xODY2Olx0XHRcdGdvdG8gb3V0NDtcbjE4Njc6XHRcdH1cbjE4Njg6XHRcbjE4Njk6XHRcdC8qIHRoaXMgZmxhZ3MgdGhlIGRldmljZSBmb3IgdXNlciBzcGFjZSAqL1xuMTg3MDpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldC1cdTAwM2VkZXZfYWRkcikpXG4xODcxOlx0XHRcdGV0aF9od19hZGRyX3JhbmRvbShuZXQpO1xuMTg3MjpcdFxuMTg3MzpcdFx0aWYgKChkZXYtXHUwMDNlZHJpdmVyX2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IEZMQUdfV0xBTikgIT0gMClcbjE4NzQ6XHRcdFx0U0VUX05FVERFVl9ERVZUWVBFKG5ldCwgXHUwMDI2d2xhbl90eXBlKTtcbjE4NzU6XHRcdGlmICgoZGV2LVx1MDAzZWRyaXZlcl9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBGTEFHX1dXQU4pICE9IDApXG4xODc2Olx0XHRcdFNFVF9ORVRERVZfREVWVFlQRShuZXQsIFx1MDAyNnd3YW5fdHlwZSk7XG4xODc3Olx0XG4xODc4Olx0XHQvKiBpbml0aWFsaXplIG1heCByeF9xbGVuIGFuZCB0eF9xbGVuICovXG4xODc5Olx0XHR1c2JuZXRfdXBkYXRlX21heF9xbGVuKGRldik7XG4xODgwOlx0XG4xODgxOlx0XHRpZiAoZGV2LVx1MDAzZWNhbl9kbWFfc2cgXHUwMDI2XHUwMDI2ICEoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRkxBR19TRU5EX1pMUCkgXHUwMDI2XHUwMDI2XG4xODgyOlx0XHRcdCEoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRkxBR19NVUxUSV9QQUNLRVQpKSB7XG4xODgzOlx0XHRcdGRldi1cdTAwM2VwYWRkaW5nX3BrdCA9IGt6YWxsb2MoMSwgR0ZQX0tFUk5FTCk7XG4xODg0Olx0XHRcdGlmICghZGV2LVx1MDAzZXBhZGRpbmdfcGt0KSB7XG4xODg1Olx0XHRcdFx0c3RhdHVzID0gLUVOT01FTTtcbjE4ODY6XHRcdFx0XHRnb3RvIG91dDQ7XG4xODg3Olx0XHRcdH1cbjE4ODg6XHRcdH1cbjE4ODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMzkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyBVU0JuZXQgUHJvYmUgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGB1c2JuZXRfcHJvYmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgZHJpdmVyIGhhbmRsZXMgcG90ZW50aWFsIGZhaWx1cmVzIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2xlYW51cCBsYWJlbHMsIHByb2JhYmx5IGluIHRoZSB2aWNpbml0eSBvZiBsaW5lcyAxOTIwIHRvIDE5NTAuIFRoYXQgc2VjdGlvbiBpcyB1c3VhbGx5IHdoZXJlIHRoZXkgZGVmaW5lIHRob3NlIGVycm9yIGhhbmRsaW5nIGxhYmVscywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIHdoaWNoIHBhcnRzIG9mIHRoZSBpbml0aWFsaXphdGlvbiBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgY2xlYW5lZCB1cCBpZiBzb21ldGhpbmcgZ29lcyBzaWRld2F5cy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgb3JkZXIgb2YgcmVzb3VyY2UgYWxsb2NhdGlvbiB0byBzZWUgd2hpY2ggb3JkZXIgdGhleSBhcHBlYXIuIFRoaXMgaXMgY3JpdGljYWwsIHNpbmNlIGEgbWlzc2VkIGNsZWFudXAgY291bGQgbGVhZCB0byByZXNvdXJjZSBsZWFrcywgd2hpY2ggYXJlIHNvbWV0aGluZyBJIGFtIHF1aXRlIGZhbWlsaWFyIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTE1Olx0XHRpZiAoaW5mby1cdTAwM2V1bmJpbmQpXG4xOTE2Olx0XHRcdGluZm8tXHUwMDNldW5iaW5kKGRldiwgdWRldik7XG4xOTE3Olx0b3V0MTpcbjE5MTg6XHRcdC8qIHN1YmRyaXZlcnMgbXVzdCB1bmRvIGFsbCB0aGV5IGRpZCBpbiBiaW5kKCkgaWYgdGhleVxuMTkxOTpcdFx0ICogZmFpbCBpdCwgYnV0IHdlIG1heSBmYWlsIGxhdGVyIGFuZCBhIGRlZmVycmVkIGtldmVudFxuMTkyMDpcdFx0ICogbWF5IHRyaWdnZXIgYW4gZXJyb3IgcmVzdWJtaXR0aW5nIGl0c2VsZiBhbmQsIHdvcnNlLFxuMTkyMTpcdFx0ICogc2NoZWR1bGUgYSB0aW1lci4gU28gd2Uga2lsbCBpdCBhbGwganVzdCBpbiBjYXNlLlxuMTkyMjpcdFx0ICovXG4xOTIzOlx0XHR1c2JuZXRfbWFya19nb2luZ19hd2F5KGRldik7XG4xOTI0Olx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VrZXZlbnQpO1xuMTkyNTpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2ZGV2LVx1MDAzZWRlbGF5KTtcbjE5MjY6XHRcdGZyZWVfbmV0ZGV2KG5ldCk7XG4xOTI3Olx0b3V0OlxuMTkyODpcdFx0cmV0dXJuIHN0YXR1cztcbjE5Mjk6XHR9XG4xOTMwOlx0RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3Byb2JlKTtcbjE5MzE6XHRcbjE5MzI6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTkzMzpcdFxuMTkzNDpcdC8qXG4xOTM1Olx0ICogc3VzcGVuZCB0aGUgd2hvbGUgZHJpdmVyIGFzIHNvb24gYXMgdGhlIGZpcnN0IGludGVyZmFjZSBpcyBzdXNwZW5kZWRcbjE5MzY6XHQgKiByZXN1bWUgb25seSB3aGVuIHRoZSBsYXN0IGludGVyZmFjZSBpcyByZXN1bWVkXG4xOTM3Olx0ICovXG4xOTM4Olx0XG4xOTM5Olx0aW50IHVzYm5ldF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbjE5NDA6XHR7XG4xOTQxOlx0XHRzdHJ1Y3QgdXNibmV0XHRcdCpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuMTk0MjpcdFxuMTk0MzpcdFx0aWYgKCFkZXYtXHUwMDNlc3VzcGVuZF9jb3VudCYjNDM7JiM0MzspIHtcbjE5NDQ6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNldHhxLmxvY2spO1xuMTk0NTpcdFx0XHQvKiBkb24mIzM5O3QgYXV0b3N1c3BlbmQgd2hpbGUgdHJhbnNtaXR0aW5nICovXG4xOTQ2Olx0XHRcdGlmIChkZXYtXHUwMDNldHhxLnFsZW4gXHUwMDI2XHUwMDI2IFBNU0dfSVNfQVVUTyhtZXNzYWdlKSkge1xuMTk0NzpcdFx0XHRcdGRldi1cdTAwM2VzdXNwZW5kX2NvdW50LS07XG4xOTQ4Olx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2V0eHEubG9jayk7XG4xOTQ5Olx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjE5NTA6XHRcdFx0fSBlbHNlIHtcbjE5NTE6XHRcdFx0XHRzZXRfYml0KEVWRU5UX0RFVl9BU0xFRVAsIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4xOTUyOlx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2V0eHEubG9jayk7XG4xOTUzOlx0XHRcdH1cbjE5NTQ6XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxOTIKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMTg5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBVU0IgQ0g5MjAwIEV0aGVybmV0IERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYHVzYm5ldF9wcm9iZWAgaGFuZGxlcyBlcnJvcnMgZnJvbSBgaW5mby0mZ3Q7YmluZGAgY2xlYW5seSwgc28gdGhhdCYjMzk7cyBnb29kLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlIGBjaDkyMDBgIGRyaXZlci4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYENPTkZJR19VU0JfTkVUX0NIOTIwMGAgaW4gdGhlIGtlcm5lbCBjb25maWcuCgpMb29raW5nIGF0IGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AsIEkgc2VlIHRoYXQgYFVTQl9ORVRfQ0g5MjAwYCBkZXBlbmRzIG9uIGBVU0JfVVNCTkVUYCwgd2hpY2ggaW4gdHVybiBzZWxlY3RzIGBNSUlgLiBUaGVuLCB0aGVyZSYjMzk7cyBgVVNCX05FVF9EUklWRVJTYCwgd2hpY2ggZGVwZW5kcyBvbiBib3RoIGBVU0JgIGFuZCBgTkVUYC4gU28sIHRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmUgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfQ0g5MjAwYCwgYFVTQmAsIGFuZCBgTkVUYC4gSG93ZXZlciwgbGlzdGluZyBgVVNCX05FVF9DSDkyMDBgLCBgVVNCX1VTQk5FVGAsIGFuZCBgVVNCX05FVF9EUklWRVJTYCAoYWxvbmcgd2l0aCBgVVNCYCkgc2hvdWxkIHN1ZmZpY2UsIGFzIGBzZWxlY3QgTUlJYCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBldmFsdWF0ZSBpdC4gRmlyc3QsIGlzIGl0IHJlYWNoYWJsZT8gWWVzLCBVU0IgZHJpdmVycyBhcmUgcGVyZmVjdGx5IHJlYWNoYWJsZSB0aHJvdWdoIHZpcnR1YWwgYnVzZXMsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBzeXprYWxsZXIgc2V0dXAgZW11bGF0ZXMgVVNCIGRldmljZXMgdmlhIER1bW15IEhDRCBhbmQgUmF3IEdhZGdldCwgYW5kIHRoaXMgaXMgZXhwbGljaXRseSBtZW50aW9uZWQgYXMgYSByZWFjaGFibGUgZHJpdmVyIHR5cGUuCgpEb2VzIGl0IGZhbGwgaW50byBhbnkgbmVnYXRpdmUgY3JpdGVyaWE/IE5vLiBJdCYjMzk7cyBub3QgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgb3IgYnVpbGQgc3lzdGVtIGNvZGUuIEl0JiMzOTtzIG5vdCBhIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIGEgcGh5c2ljYWwgQVNJQyB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZC4gQW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgdGhlIHByb2JlIHBhdGgsIG5vdCB0aGUgZHJpdmVyIHRlYXJkb3duLiBTbywgdGhlIGAuYmluZGAvcHJvYmUgcGF0aCBpcyBleGVjdXRlZC4KClNwZWNpZmljYWxseSwgdGhlIGBjaDkyMDBfYmluZGAgZnVuY3Rpb24gaXMgcmVhY2hhYmxlLiBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiBkeW5hbWljYWxseSBwbHVncyBhbmQgdW5wbHVncyBVU0IgZGV2aWNlcyBkdXJpbmcgc3l6a2FsbGVyIGZ1enppbmcuIFRoZSBiaW5kL3Byb2JlIHBhdGggd2lsbCBiZSBleGVjdXRlZCBldmVyeSB0aW1lIHN5emthbGxlciBzZW5kcyBhIFVTQiBhdHRhY2ggcmVxdWVzdCBmb3IgVklEIDB4MUE4NiBQSUQgMHhFMDkyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYGNoOTIwMF9iaW5kYCBpcyByZWFjaGFibGUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gWWVzLCBkZXNwaXRlIGJlaW5nIGBzdGF0aWNgLCBgY2g5MjAwX2JpbmRgICppcyogZGVmaW5pdGVseSBhIHN5bWJvbCBpbiB0aGUga2VybmVsIHN5bWJvbCB0YWJsZSBiZWNhdXNlIGl0JiMzOTtzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBhIGBzdHJ1Y3QgZHJpdmVyX2luZm9gLCBhbmQgdGh1cyBjYW5ub3QgYmUgaW5saW5lZC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBndWlkZWxpbmVzIG9uICYjMzQ7RXh0cmFjdGluZyBGb2N1c1N5bWJvbHMuJiMzNDsgSSBuZWVkIHRvIGF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBhbmQgdGFyZ2V0IHNwZWNpZmljIGxvZ2ljLiBUaGUgc3BlY2lmaWMgZnVuY3Rpb24gbW9kaWZpZWQgaXMgYGNoOTIwMF9iaW5kYC4gQ2hlY2tpbmcgdGhlIGRpZmYsIGl0JiMzOTtzIGNsZWFyIHRoYXQgb25seSBgY2g5MjAwX2JpbmRgIGlzIHRvdWNoZWQuCgpEb3VibGUtY2hlY2tpbmcgdGhlIGNvbmZpZ3MsIEkgY2FuIGNvbmZpcm0gYFVTQl9ORVRfQ0g5MjAwYCBhbmQgYFVTQl9VU0JORVRgIGFyZSByZXF1aXJlZCwgYWxvbmcgd2l0aCBgVVNCYCBhbmQgYE5FVGAuIFRoZSBgc2VsZWN0IE1JSWAgaXMgYXV0b21hdGljLgoKVG8gY29uZmlybSB0aGVyZSBpcyBubyBzdWJ0bGUgcmVhc29uIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCwgSSBhbSBkb3VibGUtY2hlY2tpbmcgdGhhdCBVU0IgZW11bGF0aW9uIGlzIHN1cHBvcnRlZCBpbiBRRU1VLCBhbmQgdGhhdCBgY2g5MjAwYCBkb2VzIG5vdCByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJpbmcgYSBwaHlzaWNhbCBBU0lDLiBBbGwgY2hlY2tzIG91dCwgYW5kIFVTQiBnYWRnZXQgYW5kIGR1bW15X2hjZCBhcmUgc3BlY2lmaWNhbGx5IGxpc3RlZCBhcyBzdXBwb3J0ZWQuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk15IGZvY3VzIHN5bWJvbCBpcyBgY2g5MjAwX2JpbmRgLgoKQ29uZmlnczogYFVTQl9ORVRfQ0g5MjAwYCwgYFVTQl9VU0JORVRgLgoKVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBhZGRzIGVycm9yIGNoZWNraW5nIGZvciBgY29udHJvbF93cml0ZSgpYCBjYWxscyBpbiBgY2g5MjAwX2JpbmQoKWAsIHdoaWNoIG5vdyBlYXJseSByZXR1cm5zIG9uIGZhaWx1cmUgZHVyaW5nIGRldmljZSBiaW5kaW5nLiBUaGUgZHJpdmVyIGlzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgVVNCIGVtdWxhdGlvbiAoUmF3IEdhZGdldCAvIER1bW15IEhDRCkgd2l0aCBkZXZpY2UgSUQgMHgxQTg2OjB4RTA5Mi4gRnV6emluZyBjYW4gdHJpZ2dlciBhbGxvY2F0aW9uL1VTQiBjb21tdW5pY2F0aW9uIGZhaWx1cmVzIHRvIGV4ZXJjaXNlIHRoZXNlIG5ld2x5IGFkZGVkIGVycm9yIHJldHVybiBwYXRocyBhbmQgdmVyaWZ5IHByb3BlciBjbGVhbnVwLgoKTm93LCBsZXQmIzM5O3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0NIOTIwMCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2g5MjAwX2JpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciByZXR1cm4gY2hlY2tzIGZvciBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSBkdXJpbmcgVVNCIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIENIOTIwMCBVU0IgZXRoZXJuZXQgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgVVNCIFJhdyBHYWRnZXQgLyBkdW1teV9oY2QpIG1hdGNoaW5nIGl0cyBVU0IgVklEL1BJRC4gRnV6emluZyB3aXRoIFVTQiBmYXVsdCBpbmplY3Rpb24gb3IgdW5leHBlY3RlZCBjb250cm9sIHJlc3BvbnNlcyBjYW4gdGVzdCB0aGVzZSBuZXdseSBpbnRyb2R1Y2VkIGVycm9yIGV4aXQgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaDkyMDBfYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIHJldHVybiBjaGVja3MgZm9yIGNvbnRyb2xfd3JpdGUoKSBjYWxscyBpbiBjaDkyMDBfYmluZCgpIGR1cmluZyBVU0IgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGUgQ0g5MjAwIFVTQiBldGhlcm5ldCBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgZXhlcmNpc2VkIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBVU0IgUmF3IEdhZGdldCAvIGR1bW15X2hjZCkgbWF0Y2hpbmcgaXRzIFVTQiBWSUQvUElELiBGdXp6aW5nIHdpdGggVVNCIGZhdWx0IGluamVjdGlvbiBvciB1bmV4cGVjdGVkIGNvbnRyb2wgcmVzcG9uc2VzIGNhbiB0ZXN0IHRoZXNlIG5ld2x5IGludHJvZHVjZWQgZXJyb3IgZXhpdCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcmV0dXJuIHZhbHVlIGVycm9yIGNoZWNrcyBmb3IgY2FsbHMgdG8gY29udHJvbF93cml0ZSgpIGluIGNoOTIwMF9iaW5kKCkuIFRoZSBkYXRhIGJ1ZmZlciBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpIGlzIGZ1bGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGVhY2ggY2FsbCwgYW5kIHJldHVybmluZyBhbiBlcnJvciBjb2RlIHVwb24gZmFpbHVyZSBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGFjY2Vzc2VkLCBhbmQgY29udHJvbCBmbG93IGlzIG5vdCBhbHRlcmVkIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM1MmYxYTgxMGRmM2MyOTZjOTdiNTM0YmM1NmJlZGQzMGVkODQyMGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAyMzo0MDozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYwppbmRleCBhMjA2ZmZhNzZmMWI5Li5hYjNjZDM5MDJlZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jCkBAIC0zNjAsMzIgJiM0MzszNjAsNDQgQEAgc3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogCWRhdGFbMV0gPSAweDBGOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSwKIAkJCSAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlkYXRhWzBdID0gMHhBMDsKIAlkYXRhWzFdID0gMHg5MDsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLAogCQkJICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweDMwOwogCWRhdGFbMV0gPSAweDAwOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLAogCQkJICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweDE3OwogCWRhdGFbMV0gPSAweEQ4OwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCwKIAkJCSAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAkvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi8KIAlkYXRhWzBdID0gMHgwMTsKIAlkYXRhWzFdID0gMHgwMDsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLAogCQkJICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweDVGOwogCWRhdGFbMV0gPSAweDBEOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0NUUkwsIGRhdGEsIDB4MDIsCiAJCQkgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJcmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7CiAJZXRoX2h3X2FkZHJfc2V0KGRldi0mZ3Q7bmV0LCBhZGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgVVNCIENIOTIwMCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhlIHBhdGNoIEkgbmVlZCB0byBhbmFseXplIGlzIHJlbGF0ZWQgdG8gdGhlIFVTQiBDSDkyMDAgZHJpdmVyLiBJIHJlbWVtYmVyIHRoYXQgdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIHdpbGwgYmUgbG9jYXRlZCBpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AgZmlsZS4gR2l2ZW4gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY29kZSBhcm91bmQgbGluZSAzNjAgaW4gdGhhdCBmaWxlLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoYXQgc2VjdGlvbiBpbnRvIHZpZXcgYW5kIGRpdmUgaW4uIFRpbWUgdG8gZ2V0IGRvd24gdG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRcdGRhdGFbMl0gPSBtYWNfYWRkclszXTtcbiAzMzE6XHRcdGRhdGFbM10gPSBtYWNfYWRkclsyXTtcbiAzMzI6XHRcdGRhdGFbNF0gPSBtYWNfYWRkclsxXTtcbiAzMzM6XHRcdGRhdGFbNV0gPSBtYWNfYWRkclswXTtcbiAzMzQ6XHRcbiAzMzU6XHRcdHJldHVybiBlcnI7XG4gMzM2Olx0fVxuIDMzNzpcdFxuIDMzODpcdHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiAzMzk6XHR7XG4gMzQwOlx0XHRpbnQgcmV0dmFsID0gMDtcbiAzNDE6XHRcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcbiAzNDI6XHRcdHU4IGFkZHJbRVRIX0FMRU5dO1xuIDM0MzpcdFxuIDM0NDpcdFx0cmV0dmFsID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbiAzNDU6XHRcdGlmIChyZXR2YWwpXG4gMzQ2Olx0XHRcdHJldHVybiByZXR2YWw7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRkZXYtXHUwMDNlbWlpLmRldiA9IGRldi1cdTAwM2VuZXQ7XG4gMzQ5Olx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XG4gMzUwOlx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcbiAzNTE6XHRcdGRldi1cdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcbiAzNTI6XHRcbiAzNTM6XHRcdGRldi1cdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweDFmO1xuIDM1NDpcdFxuIDM1NTpcdFx0ZGV2LVx1MDAzZWhhcmRfbXR1ID0gZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgZGV2LVx1MDAzZW5ldC1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4gMzU2Olx0XHRkZXYtXHUwMDNlcnhfdXJiX3NpemUgPSAyNCAqIDY0ICYjNDM7IDE2O1xuIDM1NzpcdFx0bWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbiAzNTg6XHRcbiAzNTk6XHRcdGRhdGFbMF0gPSAweDAxO1xuIDM2MDpcdFx0ZGF0YVsxXSA9IDB4MEY7XG4gMzYxOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gMzYyOlx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzYzOlx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIDM2NDpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM2NTpcdFxuIDM2NjpcdFx0ZGF0YVswXSA9IDB4QTA7XG4gMzY3Olx0XHRkYXRhWzFdID0gMHg5MDtcbiAzNjg6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG4gMzY5Olx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzcwOlx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIDM3MTpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM3MjpcdFxuIDM3MzpcdFx0ZGF0YVswXSA9IDB4MzA7XG4gMzc0Olx0XHRkYXRhWzFdID0gMHgwMDtcbiAzNzU6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxuIDM3NjpcdFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM3NzpcdFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiAzNzg6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzNzk6XHRcbiAzODA6XHRcdGRhdGFbMF0gPSAweDE3O1xuIDM4MTpcdFx0ZGF0YVsxXSA9IDB4RDg7XG4gMzgyOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gMzgzOlx0XHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzg0Olx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIDM4NTpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM4NjpcdFxuIDM4NzpcdFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXG4gMzg4Olx0XHRkYXRhWzBdID0gMHgwMTtcbiAzODk6XHRcdGRhdGFbMV0gPSAweDAwO1xuIDM5MDpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcbiAzOTE6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzOTI6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gMzkzOlx0XHRcdHJldHVybiByZXR2YWw7XG4gMzk0Olx0XG4gMzk1Olx0XHRkYXRhWzBdID0gMHg1RjtcbiAzOTY6XHRcdGRhdGFbMV0gPSAweDBEO1xuIDM5NzpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbiAzOTg6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzOTk6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gNDAwOlx0XHRcdHJldHVybiByZXR2YWw7XG4gNDAxOlx0XG4gNDAyOlx0XHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiA0MDM6XHRcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiA0MDQ6XHRcbiA0MDU6XHRcdHJldHVybiByZXR2YWw7XG4gNDA2Olx0fVxuIDQwNzpcdFxuIDQwODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XG4gNDA5Olx0XHQuZGVzY3JpcHRpb24gPSBcJiMzNDtDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2g6IGBjaDkyMDBfYmluZGAgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgZXJyb3IgY2hlY2tpbmcgd2l0aGluIHRoZSBgY2g5MjAwX2JpbmRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGNvbnRyb2xfd3JpdGVgIGlzIGNhbGxlZCByZXBlYXRlZGx5IHdpdGhpbiBgY2g5MjAwX2JpbmRgLiBQcmV2aW91c2x5LCBub25lIG9mIHRoZXNlIGNhbGxzJiMzOTsgcmV0dXJuIHZhbHVlcyB3ZXJlIGJlaW5nIGV4YW1pbmVkLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IG92ZXJzaWdodC4gVGhlIHBhdGNoIGNsZXZlcmx5IGFkZHJlc3NlcyB0aGlzIGJ5IGFkZGluZyBhIHNpbXBsZSBjaGVjayBhZnRlciBlYWNoIGBjb250cm9sX3dyaXRlYCBjYWxsOiBgaWYgKHJldHZhbCAmbHQ7IDApIHJldHVybiByZXR2YWw7YC4gVGhpcyBpcyBhIGNsYXNzaWMsIGJ1dCBvZnRlbiBvdmVybG9va2VkLCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgdGVjaG5pcXVlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiByb2J1c3QgY29kZSwgYW5kIGl0cyBpbmNsdXNpb24gaGVyZSBpcyBhIHdlbGNvbWUgaW1wcm92ZW1lbnQuCgpOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiAqaW5zaWRlKiB0aG9zZSBgY29udHJvbF93cml0ZWAgY2FsbHMuIEkgaGF2ZSB0byBsb29rIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBjb250cm9sX3dyaXRlYCBpdHNlbGYsIGFuZCBhbHNvIGBnZXRfbWFjX2FkZHJlc3NgLCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgYW5kIHRoZSBsaWtlbHkgaW1wYWN0IG9mIHRoZXNlIGFkZGVkIGNoZWNrcy4gV2UmIzM5O3JlIGVzc2VudGlhbGx5IGhhcmRlbmluZyB0aGUgZHJpdmVyIGhlcmUsIHNvIEkgbmVlZCB0byBhc3Nlc3MgaG93IGVmZmVjdGl2ZSB0aGUgYWRkZWQgZXJyb3IgY2hlY2tpbmcgaXMsIGFuZCB3aGF0IGZhaWx1cmUgc2NlbmFyaW9zIGFyZSBiZWluZyBhZGRyZXNzZWQuIEl0JiMzOTtzIHRpbWUgdG8gZGVsdmUgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjk1Olx0XG4gMjk2Olx0XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgcnhfb3ZlcmhlYWQpKSB7XG4gMjk3Olx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2LCBcJiMzNDt1bmV4cGVjdGVkIHRpbnkgcnggZnJhbWVcXG5cJiMzNDspO1xuIDI5ODpcdFx0XHRyZXR1cm4gMDtcbiAyOTk6XHRcdH1cbiAzMDA6XHRcbiAzMDE6XHRcdGxlbiA9IChza2ItXHUwMDNlZGF0YVtza2ItXHUwMDNlbGVuIC0gMTZdIHwgc2tiLVx1MDAzZWRhdGFbc2tiLVx1MDAzZWxlbiAtIDE1XSBcdTAwM2NcdTAwM2MgOCk7XG4gMzAyOlx0XHRza2JfdHJpbShza2IsIGxlbik7XG4gMzAzOlx0XG4gMzA0Olx0XHRyZXR1cm4gMTtcbiAzMDU6XHR9XG4gMzA2Olx0XG4gMzA3Olx0c3RhdGljIGludCBnZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuIDMwODpcdHtcbiAzMDk6XHRcdGludCBlcnIgPSAwO1xuIDMxMDpcdFx0dW5zaWduZWQgY2hhciBtYWNfYWRkclsweDA2XTtcbiAzMTE6XHRcdGludCByZF9tYWNfbGVuID0gMDtcbiAzMTI6XHRcbiAzMTM6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7JXM6XFxuXFx0dXNibmV0IFZJRDolMHggUElEOiUweFxcblwmIzM0OywgX19mdW5jX18sXG4gMzE0Olx0XHRcdCAgIGxlMTZfdG9fY3B1KGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpLFxuIDMxNTpcdFx0XHQgICBsZTE2X3RvX2NwdShkZXYtXHUwMDNldWRldi1cdTAwM2VkZXNjcmlwdG9yLmlkUHJvZHVjdCkpO1xuIDMxNjpcdFxuIDMxNzpcdFx0bWVtc2V0KG1hY19hZGRyLCAwLCBzaXplb2YobWFjX2FkZHIpKTtcbiAzMTg6XHRcdHJkX21hY19sZW4gPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsXG4gMzE5Olx0XHRcdFx0XHQgIE1BQ19SRUdfU1RBVElPTl9MLCBtYWNfYWRkciwgMHgwMixcbiAzMjA6XHRcdFx0XHRcdCAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzMjE6XHRcdHJkX21hY19sZW4gJiM0Mzs9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCwgTUFDX1JFR19TVEFUSU9OX00sXG4gMzIyOlx0XHRcdFx0XHQgICBtYWNfYWRkciAmIzQzOyAyLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDMyMzpcdFx0cmRfbWFjX2xlbiAmIzQzOz0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBNQUNfUkVHX1NUQVRJT05fSCxcbiAzMjQ6XHRcdFx0XHRcdCAgIG1hY19hZGRyICYjNDM7IDQsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzI1Olx0XHRpZiAocmRfbWFjX2xlbiAhPSBFVEhfQUxFTilcbiAzMjY6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAzMjc6XHRcbiAzMjg6XHRcdGRhdGFbMF0gPSBtYWNfYWRkcls1XTtcbiAzMjk6XHRcdGRhdGFbMV0gPSBtYWNfYWRkcls0XTtcbiAzMzA6XHRcdGRhdGFbMl0gPSBtYWNfYWRkclszXTtcbiAzMzE6XHRcdGRhdGFbM10gPSBtYWNfYWRkclsyXTtcbiAzMzI6XHRcdGRhdGFbNF0gPSBtYWNfYWRkclsxXTtcbiAzMzM6XHRcdGRhdGFbNV0gPSBtYWNfYWRkclswXTtcbiAzMzQ6XHRcbiAzMzU6XHRcdHJldHVybiBlcnI7XG4gMzM2Olx0fVxuIDMzNzpcdFxuIDMzODpcdHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiAzMzk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUmIzM5O3MgUG90ZW50aWFsIElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBmb2N1c2luZyBvbiBgZ2V0X21hY19hZGRyZXNzYC4gSSBzZWUgYSBgbWVtc2V0YCBjYWxsIHJpZ2h0IGF3YXk6IGBtZW1zZXQobWFjX2FkZHIsIDAsIHNpemVvZihtYWNfYWRkcikpO2AuIFRoYXQmIzM5O3MgZ29vZCDigJMgaW5pdGlhbGl6aW5nIHRoZSBNQUMgYWRkcmVzcyBidWZmZXIgaXMgYWx3YXlzIGEgc29saWQgcHJhY3RpY2UuIE5vdywgSSYjMzk7bSBzaGlmdGluZyBteSBhdHRlbnRpb24gdG8gYGNoOTIwMF9iaW5kYC4gVGhlIGNydWNpYWwgY2hhbmdlIGlzIHRoYXQgdGhlIGBjb250cm9sX3dyaXRlYCBjYWxsIG5vdyBpbmNsdWRlcyBhbiBlcnJvciBjaGVjazogYGlmIChyZXR2YWwgJmx0OyAwKSByZXR1cm4gcmV0dmFsO2AuCgpCZWZvcmUgdGhpcyBwYXRjaCwgd2UgaGFkIGEgcG90ZW50aWFsIGJ1ZzogYGNvbnRyb2xfd3JpdGVgIGNvdWxkIGZhaWwsIGJ1dCB0aGUgY29kZSB3b3VsZCBibGluZGx5IGNvbnRpbnVlIHRvIGNhbGwgYGdldF9tYWNfYWRkcmVzc2AgYW5kIGBldGhfaHdfYWRkcl9zZXRgLiBOb3csIHdpdGggdGhlIGNoZWNrLCBpZiBgY29udHJvbF93cml0ZWAgcmV0dXJucyBhbiBlcnJvciwgdGhlIGZ1bmN0aW9uIHdpbGwgYmFpbCBvdXQgZWFybHkuIFRoaXMgYmVncyB0aGUgcXVlc3Rpb246IGRvZXMgYGNoOTIwMF9iaW5kYCBsZWFrIG1lbW9yeSBvciB1c2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/CgpJJiMzOTttIG5vdGluZyB0aGF0IHRoZSBgYWRkcmAgdmFyaWFibGUgaW4gYGNoOTIwMF9iaW5kYCBpcyBkZWNsYXJlZCBhcyBgdTggYWRkcltFVEhfQUxFTl07YCB3aGljaCBpcyBnb29kLiBIb3dldmVyLCBpZiBgY29udHJvbF93cml0ZWAgZmFpbHMsIHRob3NlIGNhbGxzIHRvIGBnZXRfbWFjX2FkZHJlc3NgIGFuZCBgZXRoX2h3X2FkZHJfc2V0YCBhcmUgKmNvbXBsZXRlbHkqIHNraXBwZWQuIFRoZSBrZXkgaXMgbm93IHRoYXQgYGFkZHJgIGlzIG5vdCB1c2VkIGluIHRoZSBmYWlsdXJlIGNhc2UhCgpTbywgdGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGFkZHJgIGlzICpvbmx5KiB1c2VkIGlmIGBjb250cm9sX3dyaXRlYCBzdWNjZWVkcy4gVGhpcyBjaGFuZ2UgcHJldmVudHMgYSBwb3NzaWJsZSB1c2UtYWZ0ZXItZmFpbHVyZSBidWcuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGNvbnRyb2xfd3JpdGVgIGl0c2VsZiB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdFxuICAzMTpcdCNkZWZpbmUgUkVRVUVTVF9SRUFEXHQweDBFXG4gIDMyOlx0I2RlZmluZSBSRVFVRVNUX1dSSVRFXHQweDBGXG4gIDMzOlx0XG4gIDM0Olx0LyogQWRkcmVzcyBzcGFjZTpcbiAgMzU6XHQgKiAwMC02MyA6IE1JSVxuICAzNjpcdCAqIDY0LTEyODogTUFDXG4gIDM3Olx0ICpcbiAgMzg6XHQgKiBOb3RlOiBhbGwgYWNjZXNzZXMgbXVzdCBiZSAxNi1iaXRcbiAgMzk6XHQgKi9cbiAgNDA6XHRcbiAgNDE6XHQjZGVmaW5lIE1BQ19SRUdfQ1RSTCA2NFxuICA0MjpcdCNkZWZpbmUgTUFDX1JFR19TVEFUVVMgNjZcbiAgNDM6XHQjZGVmaW5lIE1BQ19SRUdfSU5URVJSVVBUX01BU0sgNjhcbiAgNDQ6XHQjZGVmaW5lIE1BQ19SRUdfUEhZX0NPTU1BTkQgNzBcbiAgNDU6XHQjZGVmaW5lIE1BQ19SRUdfUEhZX0RBVEEgNzJcbiAgNDY6XHQjZGVmaW5lIE1BQ19SRUdfU1RBVElPTl9MIDc0XG4gIDQ3Olx0I2RlZmluZSBNQUNfUkVHX1NUQVRJT05fTSA3NlxuICA0ODpcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX0ggNzhcbiAgNDk6XHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9MIDgwXG4gIDUwOlx0I2RlZmluZSBNQUNfUkVHX0hBU0hfTTEgODJcbiAgNTE6XHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9NMiA4NFxuICA1MjpcdCNkZWZpbmUgTUFDX1JFR19IQVNIX0ggODZcbiAgNTM6XHQjZGVmaW5lIE1BQ19SRUdfVEhSRVNIT0xEIDg4XG4gIDU0Olx0I2RlZmluZSBNQUNfUkVHX0ZJRk9fREVQVEggOTBcbiAgNTU6XHQjZGVmaW5lIE1BQ19SRUdfUEFVU0UgOTJcbiAgNTY6XHQjZGVmaW5lIE1BQ19SRUdfRkxPV19DT05UUk9MIDk0XG4gIDU3Olx0XG4gIDU4Olx0LyogQ29udHJvbCByZWdpc3RlciBiaXRzXG4gIDU5Olx0ICpcbiAgNjA6XHQgKiBOb3RlOiBiaXRzIDEzIGFuZCAxNSBhcmUgcmVzZXJ2ZWRcbiAgNjE6XHQgKi9cbiAgNjI6XHQjZGVmaW5lIExPT1BCQUNLXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxNClcbiAgNjM6XHQjZGVmaW5lIEJBU0UxMDBYXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxMilcbiAgNjQ6XHQjZGVmaW5lIE1CUFNfMTBcdFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMTEpXG4gIDY1Olx0I2RlZmluZSBEVVBMRVhfTU9ERVx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMTApXG4gIDY2Olx0I2RlZmluZSBQQVVTRV9GUkFNRVx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgOSlcbiAgNjc6XHQjZGVmaW5lIFBST01JU0NVT1VTXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA4KVxuICA2ODpcdCNkZWZpbmUgTVVMVElDQVNUXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA3KVxuICA2OTpcdCNkZWZpbmUgQlJPQURDQVNUXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA2KVxuICA3MDpcdCNkZWZpbmUgSEFTSFx0XHRcdCgweDAxIFx1MDAzY1x1MDAzYyA1KVxuICA3MTpcdCNkZWZpbmUgQVBQRU5EX1BBRFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNClcbiAgNzI6XHQjZGVmaW5lIEFQUEVORF9DUkNcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDMpXG4gIDczOlx0I2RlZmluZSBUUkFOU01JVFRFUl9BQ1RJT05cdCgweDAxIFx1MDAzY1x1MDAzYyAyKVxuICA3NDpcdCNkZWZpbmUgUkVDRUlWRVJfQUNUSU9OXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxKVxuICA3NTpcdCNkZWZpbmUgRE1BX0FDVElPTlx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMClcbiAgNzY6XHRcbiAgNzc6XHQvKiBTdGF0dXMgcmVnaXN0ZXIgYml0c1xuICA3ODpcdCAqXG4gIDc5Olx0ICogTm90ZTogYml0cyA3LTE1IGFyZSByZXNlcnZlZFxuICA4MDpcdCAqL1xuICA4MTpcdCNkZWZpbmUgQUxJR05NRU5UXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA2KVxuICA4MjpcdCNkZWZpbmUgRklGT19PVkVSX1JVTlx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNSlcbiAgODM6XHQjZGVmaW5lIEZJRk9fVU5ERVJfUlVOXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA0KVxuICA4NDpcdCNkZWZpbmUgUlhfRVJST1JcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDMpXG4gIDg1Olx0I2RlZmluZSBSWF9DT01QTEVURVx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMilcbiAgODY6XHQjZGVmaW5lIFRYX0VSUk9SXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxKVxuICA4NzpcdCNkZWZpbmUgVFhfQ09NUExFVEVcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDApXG4gIDg4Olx0XG4gIDg5Olx0LyogRklGTyBkZXB0aCByZWdpc3RlciBiaXRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgRGVmaW5pdGlvbiBvZiBgY29udHJvbF93cml0ZWAgaW4gYGNoOTIwMC5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgY29udHJvbF93cml0ZWAgd2l0aGluIHRoZSBgY2g5MjAwLmNgIHNvdXJjZSBmaWxlLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBzdGVwLiBJJiMzOTttIGxpa2VseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBvciBwZXJoYXBzIHRyb3VibGVzaG9vdCBhbiBpc3N1ZSByZWxhdGVkIHRvIGl0cyBiZWhhdmlvci4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgc3RyYWlnaHRmb3J3YXJkOiBsb2NhdGUgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGV4YW1pbmUgaXRzIGltcGxlbWVudGF0aW9uLCB1bmRlcnN0YW5kIGl0cyBwYXJhbWV0ZXJzLCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbW9kdWxlIGFuZCBwb3RlbnRpYWxseSB0aGUgaGFyZHdhcmUgaXQmIzM5O3MgY29udHJvbGxpbmcuIFRoZSBjb250ZXh0IGlzIGBjaDkyMDAuY2AsIHdoaWNoIEkmIzM5O20gYXNzdW1pbmcgaXMgdGhlIGRyaXZlciBmaWxlIGZvciB0aGUgQ0g5MjAwIGRldmljZS4gVGhlcmVmb3JlLCB1bmRlcnN0YW5kaW5nIGBjb250cm9sX3dyaXRlYCBjb3VsZCBnaXZlIG1lIGluc2lnaHRzIGludG8gaG93IHRoZSBkcml2ZXIgbWFuYWdlcyBjb250cm9sIHNpZ25hbHMgb3Igd3JpdGVzIGRhdGEgdG8gdGhlIGhhcmR3YXJlLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgZGV2aWNlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIGxpa2VseSB1c2UgbXkgSURFJiMzOTtzICYjMzQ7Z28gdG8gZGVmaW5pdGlvbiYjMzQ7IG9yIHNlYXJjaCBjYXBhYmlsaXRpZXMgdG8gcXVpY2tseSBsb2NhdGUgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbnRyb2xfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTk5PXN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTM2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjEzNzpzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTM4LVx0XHRcdCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTE5Nz1zdGF0aWMgdm9pZCBjaDkyMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTEtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjEyOlx0Y29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIGxvYyAqIDIsIGJ1ZmYsIDB4MDIsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjEzLVx0XHQgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0zMzg9c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjAtXHRkYXRhWzFdID0gMHgwRjtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNjE6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzYyLVx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjctXHRkYXRhWzFdID0gMHg5MDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNjg6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2OS1cdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzc0LVx0ZGF0YVsxXSA9IDB4MDA7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Mzc1Olx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzc2LVx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zODEtXHRkYXRhWzFdID0gMHhEODtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozODI6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzgzLVx0XHRcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zODktXHRkYXRhWzFdID0gMHgwMDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozOTA6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM5MS1cdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzk2LVx0ZGF0YVsxXSA9IDB4MEQ7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Mzk3Olx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTgtXHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxOTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkFuYWx5emluZyBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhpcyBkcml2ZXIsIHNwZWNpZmljYWxseSBmcm9tIGxpbmVzIDEzNSB0byAxNjAuIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggYSBjcnVjaWFsIGFzcGVjdCBvZiB0aGUgQ0g5MjAwIFVTQiBuZXR3b3JrIGFkYXB0ZXIsIHByb2JhYmx5IGluaXRpYWxpemF0aW9uLCBpbnRlcnJ1cHQgaGFuZGxpbmcgc2V0dXAsIG9yIHBvc3NpYmx5IHRoZSBjb3JlIGRhdGEgdHJhbnNmZXIgbG9naWMuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIGRldmljZSBjb21tdW5pY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgdmFyaWFibGUgYXNzaWdubWVudHMsIGFuZCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGFueSBjbGVhciBpbmRpY2F0aW9ucyBvZiBob3cgdGhlIGRldmljZSBpcyBjb25maWd1cmVkLCBob3cgZGF0YSBpcyByZWFkIG9yIHdyaXR0ZW4sIG9yIGFueSBlcnJvci1jaGVja2luZyB0aGF0JiMzOTtzIHBlcmZvcm1lZCBkdXJpbmcgdGhpcyBjcnVjaWFsIHBhcnQgb2YgdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb24uIEkgZXhwZWN0IHRvIHNlZSByZWZlcmVuY2VzIHRvIFVTQiBlbmRwb2ludHMsIFVSQnMsIGFuZCBwZXJoYXBzIHNvbWUgZGVzY3JpcHRvci1yZWxhdGVkIG9wZXJhdGlvbnMuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgc3RydWN0dXJlIHdpdGhpbiB0aGF0IGNvZGUgc2hvdWxkIHByb3ZpZGUgY29udGV4dCwgc28gdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSBjYW4gYmUgbW9yZSBlYXNpbHkgYXNzZXNzZWQuIE15IGV4cGVyaWVuY2Ugd2l0aCBvdGhlciBVU0IgbmV0d29yayBkcml2ZXJzIHNob3VsZCBhbHNvIHByb3ZpZGUgY2x1ZXMgZm9yIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzU6XHR9XG4gMTM2Olx0XG4gMTM3Olx0c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxuIDEzODpcdFx0XHRcdCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgaW5kZXgsXG4gMTM5Olx0XHRcdFx0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNob3J0IHNpemUsIGludCB0aW1lb3V0KVxuIDE0MDpcdHtcbiAxNDE6XHRcdHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7XG4gMTQyOlx0XHR1bnNpZ25lZCBjaGFyIHJlcXVlc3RfdHlwZTtcbiAxNDM6XHRcdGludCBlcnIgPSAwO1xuIDE0NDpcdFxuIDE0NTpcdFx0aWYgKHJlcXVlc3QgPT0gUkVRVUVTVF9XUklURSlcbiAxNDY6XHRcdFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcbiAxNDc6XHRcdFx0XHRcdFVTQl9SRUNJUF9PVEhFUik7XG4gMTQ4Olx0XHRlbHNlXG4gMTQ5Olx0XHRcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XG4gMTUwOlx0XHRcdFx0XHRVU0JfUkVDSVBfREVWSUNFKTtcbiAxNTE6XHRcbiAxNTI6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7JXMoKSBpbmRleD0weCUwMnggc2l6ZT0lZFxcblwmIzM0OyxcbiAxNTM6XHRcdFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcbiAxNTQ6XHRcbiAxNTU6XHRcdGlmIChkYXRhKSB7XG4gMTU2Olx0XHRcdGJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gMTU3Olx0XHRcdGlmICghYnVmKSB7XG4gMTU4Olx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAxNTk6XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gMTYwOlx0XHRcdH1cbiAxNjE6XHRcdH1cbiAxNjI6XHRcbiAxNjM6XHRcdGVyciA9IHVzYl9jb250cm9sX21zZyhkZXYtXHUwMDNldWRldixcbiAxNjQ6XHRcdFx0XHQgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LVx1MDAzZXVkZXYsIDApLFxuIDE2NTpcdFx0XHRcdCAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdHlwZSwgdmFsdWUsIGluZGV4LCBidWYsIHNpemUsXG4gMTY2Olx0XHRcdFx0ICAgICAgdGltZW91dCk7XG4gMTY3Olx0XHRpZiAoZXJyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZXJyIFx1MDAzYyBzaXplKVxuIDE2ODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDE2OTpcdFx0a2ZyZWUoYnVmKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwMwoJCQkJCQkJb3V0cHV0OiAxMzQKCQkJCQkJCXRob3VnaHRzOiA1NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXMgb2YgdGhlIENIOTIwMCBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgZXJyb3IgY2hlY2tpbmcgd2l0aGluIHRoZSBgY2g5MjAwX2JpbmQoKWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgY29udHJvbF93cml0ZSgpYC4gTG9va2luZyBhdCBgY29udHJvbF93cml0ZSgpYCwgaXQgZHVwbGljYXRlcyBhIHNtYWxsIGJ1ZmZlciAoYGRhdGFgLCBzaXplIDIpIHVzaW5nIGBrbWVtZHVwYCwgdGhlbiB1c2VzIGB1c2JfY29udHJvbF9tc2dgLiBUaGUgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGF0IGBkYXRhWzBdYCBhbmQgYGRhdGFbMV1gIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYGNvbnRyb2xfd3JpdGUoKWAgaXMgZXZlbiBjYWxsZWQuCgpUaGUgcGF0Y2ggaXRzZWxmIGp1c3QgYWRkcyBhbiBgaWYgKHJldHZhbCAmbHQ7IDApIHJldHVybiByZXR2YWw7YCBjaGVjayBhZnRlciBlYWNoIGBjb250cm9sX3dyaXRlKClgIGNhbGwgaW4gYGNoOTIwMF9iaW5kKClgLiBJZiBhIGNvbnRyb2wgd3JpdGUgZmFpbHMsIHRoZSBmdW5jdGlvbiBleGl0cyBlYXJseSwgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlLgoKU28sIHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBOby4gVGhlIGRhdGEgYmVpbmcgcGFzc2VkIHRvIGBjb250cm9sX3dyaXRlKClgIGlzIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQuIFJldHVybmluZyBlYXJseSBzaW1wbHkgbWVhbnMgd2UgYXZvaWQgZnVydGhlciBwb3RlbnRpYWxseSBkYW5nZXJvdXMgb3BlcmF0aW9ucyBkb3duIHRoZSBsaW5lLCBzdWNoIGFzIGNhbGxpbmcgYGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpYC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHJlYWQsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZS4gQW55IGVycm9yIGlzIHNpbXBseSBwcm9wYWdhdGVkIGJhY2sgdXAgdGhlIHN0YWNrIHRvIGB1c2JuZXRgLgoKQ2hlY2tpbmcgdGhlIGNhbGxlciwgYGNoOTIwMF9iaW5kKClgIGlzIGNhbGxlZCBmcm9tIGEgYGRyaXZlcl9pbmZvYCBzdHJ1Y3Qgd2l0aGluIGB1c2JuZXRgLiBJZiBgY2g5MjAwX2JpbmQoKWAgZmFpbHMgKHJldHVybnMgJmx0OyAwKSwgYHVzYm5ldF9wcm9iZWAgY2xlYW5zIHVwIGFuZCBmYWlscyB0aGUgZGV2aWNlIHByb2JpbmcuIEFsbCBzdGFuZGFyZCwgZXhwZWN0ZWQgYmVoYXZpb3IuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UmIzM5O3JlIGp1c3QgYWRkaW5nIGVycm9yIGhhbmRsaW5nLiBBbmQgc2luY2Ugd2UmIzM5O3JlIG9ubHkgYWRkaW5nIGVycm9yIGNoZWNrcywgdGhlIG5hdHVyZSBvZiB0aGVzZSBlcnJvcnMgaXMgZW50aXJlbHkgd2l0aGluIHRoZSByZWFsbSBvZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBvciBzdGFuZGFyZCBlcnJvciBkZXRlY3RvcnMuCgpOb3csIHJlZ2FyZGluZyBLTVNBTiwgdGhpcyBpcyB3aGVyZSB3ZSBnZXQgc3BlY2lmaWMuIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gSW4gdGhpcyBjYXNlLCB3ZSBoYXZlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYGRhdGFgIGJ1ZmZlciBwYXNzZWQgdG8gYGNvbnRyb2xfd3JpdGUoKWAgaXMgYWx3YXlzIGluaXRpYWxpemVkLCBjb250YWluaW5nIHR3byBjb25zdGFudCBieXRlcyBiZWZvcmUgZWFjaCBjYWxsLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIHJlYWQsIHBhc3NlZCB0byB1c2Vyc3BhY2UsIG9yIHVzZWQgaW4gYW55IGNvbmRpdGlvbmFsIGxvZ2ljLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IG5lZWRlZC4gVGhpcyBwYXRjaCBmYWxscyBmaXJtbHkgaW4gdGhlIHJlYWxtIG9mIGVycm9yIGhhbmRsaW5nIGFuZCBleGlzdGluZyBlcnJvciBkZXRlY3Rpb24gbWVjaGFuaXNtcy4gTm8gYE5lZWRzS01TQU5gIGlzIG5lY2Vzc2FyeSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHJldHVybiB2YWx1ZSBlcnJvciBjaGVja3MgZm9yIGNhbGxzIHRvIGNvbnRyb2xfd3JpdGUoKSBpbiBjaDkyMDBfYmluZCgpLiBUaGUgZGF0YSBidWZmZXIgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSBpcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byBlYWNoIGNhbGwsIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSB1cG9uIGZhaWx1cmUgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIGNvbnRyb2wgZmxvdyBpcyBub3QgYWx0ZXJlZCBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHJldHVybiB2YWx1ZSBlcnJvciBjaGVja3MgZm9yIGNhbGxzIHRvIGNvbnRyb2xfd3JpdGUoKSBpbiBjaDkyMDBfYmluZCgpLiBUaGUgZGF0YSBidWZmZXIgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSBpcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byBlYWNoIGNhbGwsIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSB1cG9uIGZhaWx1cmUgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIGNvbnRyb2wgZmxvdyBpcyBub3QgYWx0ZXJlZCBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQwOjM1LjgyNzYxNTMxNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTA2Mzg1OTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0NIOTIwMFwiLFxuICAgIFwiVVNCX1VTQk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoOTIwMF9iaW5kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHJldHVybiB2YWx1ZSBlcnJvciBjaGVja3MgZm9yIGNhbGxzIHRvIGNvbnRyb2xfd3JpdGUoKSBpbiBjaDkyMDBfYmluZCgpLiBUaGUgZGF0YSBidWZmZXIgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSBpcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byBlYWNoIGNhbGwsIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSB1cG9uIGZhaWx1cmUgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIGNvbnRyb2wgZmxvdyBpcyBub3QgYWx0ZXJlZCBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciByZXR1cm4gY2hlY2tzIGZvciBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSBkdXJpbmcgVVNCIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIENIOTIwMCBVU0IgZXRoZXJuZXQgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgVVNCIFJhdyBHYWRnZXQgLyBkdW1teV9oY2QpIG1hdGNoaW5nIGl0cyBVU0IgVklEL1BJRC4gRnV6emluZyB3aXRoIFVTQiBmYXVsdCBpbmplY3Rpb24gb3IgdW5leHBlY3RlZCBjb250cm9sIHJlc3BvbnNlcyBjYW4gdGVzdCB0aGVzZSBuZXdseSBpbnRyb2R1Y2VkIGVycm9yIGV4aXQgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQwOjM1LjgyNzYzMTk3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NTk4MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzUyZjFhODEwZGYzYzI5NmM5N2I1MzRiYzU2YmVkZDMwZWQ4NDIwYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMzo0MDozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcXG5pbmRleCBhMjA2ZmZhNzZmMWI5Li5hYjNjZDM5MDJlZDcyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xcbkBAIC0zNjAsMzIgKzM2MCw0NCBAQCBzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIFxcdGRhdGFbMV0gPSAweDBGO1xcbiBcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXFxuIFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gXFxuIFxcdGRhdGFbMF0gPSAweEEwO1xcbiBcXHRkYXRhWzFdID0gMHg5MDtcXG4gXFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcXG4gXFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0ZGF0YVswXSA9IDB4MzA7XFxuIFxcdGRhdGFbMV0gPSAweDAwO1xcbiBcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcXG4gXFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0ZGF0YVswXSA9IDB4MTc7XFxuIFxcdGRhdGFbMV0gPSAweEQ4O1xcbiBcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXFxuIFxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gXFxuIFxcdC8qIFVuZG9jdW1lbnRlZCByZWdpc3RlciAqL1xcbiBcXHRkYXRhWzBdID0gMHgwMTtcXG4gXFx0ZGF0YVsxXSA9IDB4MDA7XFxuIFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXFxuIFxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gXFxuIFxcdGRhdGFbMF0gPSAweDVGO1xcbiBcXHRkYXRhWzFdID0gMHgwRDtcXG4gXFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcXG4gXFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0cmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7XFxuIFxcdGV0aF9od19hZGRyX3NldChkZXYtXFx1MDAzZW5ldCwgYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQwOjM2LjMwMzA1NjE4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTU0NDA0Nzk5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9DSDkyMDBcIixcbiAgICBcIlVTQl9VU0JORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaDkyMDBfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgcmV0dXJuIGNoZWNrcyBmb3IgY29udHJvbF93cml0ZSgpIGNhbGxzIGluIGNoOTIwMF9iaW5kKCkgZHVyaW5nIFVTQiBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFRoZSBDSDkyMDAgVVNCIGV0aGVybmV0IGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4sIFVTQiBSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKSBtYXRjaGluZyBpdHMgVVNCIFZJRC9QSUQuIEZ1enppbmcgd2l0aCBVU0IgZmF1bHQgaW5qZWN0aW9uIG9yIHVuZXhwZWN0ZWQgY29udHJvbCByZXNwb25zZXMgY2FuIHRlc3QgdGhlc2UgbmV3bHkgaW50cm9kdWNlZCBlcnJvciBleGl0IHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM1MmYxYTgxMGRmM2MyOTZjOTdiNTM0YmM1NmJlZGQzMGVkODQyMGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMzo0MDozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuaW5kZXggYTIwNmZmYTc2ZjFiOS4uYWIzY2QzOTAyZWQ3MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG5AQCAtMzYwLDMyICszNjAsNDQgQEAgc3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0ZGF0YVsxXSA9IDB4MEY7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4QTA7XG4gXHRkYXRhWzFdID0gMHg5MDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4MzA7XG4gXHRkYXRhWzFdID0gMHgwMDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxuIFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldHZhbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweDE3O1xuIFx0ZGF0YVsxXSA9IDB4RDg7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gXHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXG4gXHRkYXRhWzBdID0gMHgwMTtcbiBcdGRhdGFbMV0gPSAweDAwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcbiBcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHg1RjtcbiBcdGRhdGFbMV0gPSAweDBEO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbiBcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiBcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQwOjM2LjMwMzA1ODAwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3MjMyNDAzMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgYSBVU0IgTmV0d29yayBEcml2ZXIqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgYXMgSSBsb29rIGF0IHRoaXMgcGF0Y2guIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgZGlmZiBhZmZlY3RpbmcgdGhlIGBjaDkyMDAuY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIGFtZDY0IGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGFuZCBpZiBpdCBpbnRyb2R1Y2VzIGFueSByZWdyZXNzaW9ucyBvciBwb3RlbnRpYWwgaXNzdWVzLCBlc3BlY2lhbGx5IGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5GaXJzdCwgSSBzZWUgYSBzZXJpZXMgb2YgYGNvbnRyb2xfd3JpdGVgIGNhbGxzIGJlaW5nIGFkZGVkIHdpdGhpbiB0aGUgYGNoOTIwMF9iaW5kYCBmdW5jdGlvbi4gRWFjaCBvZiB0aGVzZSBjYWxscyB3cml0ZXMgZGF0YSB0byBkaWZmZXJlbnQgcmVnaXN0ZXJzIChNQUNfUkVHX1RIUkVTSE9MRCwgTUFDX1JFR19GSUZPX0RFUFRILCBNQUNfUkVHX1BBVVNFLCBldGMuKS4gVGhlIHNpZ25pZmljYW50IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYW4gYGlmIChyZXR2YWwgXHUwMDNjIDApYCBjaGVjayAqYWZ0ZXIqIGVhY2ggd3JpdGUuIFRoaXMgaXMgYSBjcnVjaWFsIGFkZGl0aW9uIHRvIHZlcmlmeSB0aGUgcmVzdWx0IG9mIFVTQiBjb250cm9sIHRyYW5zZmVyLiBUaGlzIGlzIGdvb2QgY29kaW5nIHByYWN0aWNlLCBlbnN1cmluZyB0aGF0IHRoZSBkcml2ZXIgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGVzZSBjb25maWd1cmF0aW9uIHdyaXRlcy4gV2l0aG91dCB0aGlzLCBhIGZhaWx1cmUgd291bGQgYmUgbWFza2VkLCBhbmQgdGhlIGRldmljZSBtaWdodCBub3QgaW5pdGlhbGl6ZSBjb3JyZWN0bHksIGxlYWRpbmcgdG8gcG90ZW50aWFsbHkgc3VidGxlIGJ1Z3Mgb3IsIGluIGEgd29yc2UtY2FzZSBzY2VuYXJpbywgZGV2aWNlIGxvY2t1cC5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoaXMgZHJpdmVyJ3MgcmVsZXZhbmNlIGluIGEgdGVzdGluZyBlbnZpcm9ubWVudC4gU2luY2UgdGhpcyBpcyBhIFVTQiBuZXR3b3JrIGRyaXZlciwgaXQgbmF0dXJhbGx5IHVzZXMgVVNCIHRvIGNvbm5lY3QuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgU3l6a2FsbGVyIHNldHVwIGFuZCB3aGV0aGVyIFVTQiBkZXZpY2VzIGNhbiBiZSBlZmZlY3RpdmVseSBlbXVsYXRlZC4gRm9ydHVuYXRlbHksIFVTQiByYXcgZ2FkZ2V0IGFuZCB2aGNpL0R1bW15IEhDRCBhcmUgaW5kZWVkIHJlYWNoYWJsZSB0aHJvdWdoIFN5emthbGxlci4gVGhpcyBtZWFucyBJIGNhbiBsaWtlbHkgdGVzdCB0aGlzIGRyaXZlciB1c2luZyBTeXprYWxsZXIncyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcy4gVGhlIFN5emthbGxlciBkb2N1bWVudGF0aW9uIGNvbmZpcm1zIHRoYXQgVVNCIG5ldCBkcml2ZXJzIGNhbiBiZSByZWFjaGVkIHZpYSBVU0IgZ2FkZ2V0L3JhdyBnYWRnZXQgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhpcyBkcml2ZXIgaW4gaXRzIG9yaWdpbmFsIGNvbnRleHQuIEknbGwgY2hlY2sgaXRzIGFzc29jaWF0ZWQgS2NvbmZpZyBlbnRyeSB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJ1aWx0IGFuZCB3aGV0aGVyIGl0J3MgZW5hYmxlZCB1bmRlciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4gRmluYWxseSwgSSB3aWxsIGNhcmVmdWxseSBhc3Nlc3MgaWYgdGhpcyBwYXRjaCBtYXkgaW5kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBIb3dldmVyLCBmb3Igbm93LCB0aGUgYWRkZWQgZXJyb3IgY2hlY2tpbmcgaXMgYSBzdGVwIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24gdGhhdCB1c2VzIHRoZSByZXR2YWwgZm9yIHZhbGlkYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MTowMy41MzU0NjI5OTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNjc3NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVVNCX05FVF9DSDkyMDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU5OT1jb25maWcgVVNCX1ZMNjAwXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTMtXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjE0OmNvbmZpZyBVU0JfTkVUX0NIOTIwMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYxNS1cXHR0cmlzdGF0ZSBcXFwiUWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19NQklNKVxcdCs9IGNkY19tYmltLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0g5MjAwKVxcdCs9IGNoOTIwMC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTQzLW9iai0kKENPTkZJR19VU0JfTkVUX0FRQzExMSlcXHQrPSBhcWMxMTEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MTowMy41ODY3MzU2NTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODIwMjgwMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFVTQiBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhcnRpY3VsYXIgVVNCIG5ldHdvcmsgZHJpdmVyIHNpdHVhdGlvbiwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL2AgZGlyZWN0b3J5LiBHaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSBsb29raW5nIGF0LCBhcm91bmQgbGluZSA2MTQgZmVlbHMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gSXQncyBsaWtlbHkgdGhhdCBjcml0aWNhbCBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhhdCBhcmVhLCBhbmQgbXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGF0IGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGJlc3QgZ3Jhc3BlZCBieSBnZXR0aW5nIGRvd24gaW50byB0aGUgZGV0YWlscyBvZiB0aGUgbG9naWMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjA1LjQwNzAxODU5NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0XFx0ICA0RyBtb2RlbSBmcm9tIFZlcml6b246XFxuIDYxMTpcXHRcXG4gNjEyOlxcdFxcdCAgaHR0cDovL3VidW50dWZvcnVtcy5vcmcvc2hvd3Bvc3QucGhwP3A9MTA1ODk2NDdcXHUwMDI2cG9zdGNvdW50PTE3XFxuIDYxMzpcXHRcXG4gNjE0OlxcdGNvbmZpZyBVU0JfTkVUX0NIOTIwMFxcbiA2MTU6XFx0XFx0dHJpc3RhdGUgXFxcIlFpbmdIZW5nIENIOTIwMCBVU0IgZXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gNjE2OlxcdFxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbiA2MTc6XFx0XFx0c2VsZWN0IE1JSVxcbiA2MTg6XFx0XFx0aGVscFxcbiA2MTk6XFx0XFx0ICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBVU0IgZXRoZXJuZXQgYWRhcHRlciB3aXRoIGEgUWluSGVuZ1xcbiA2MjA6XFx0XFx0ICBDSDkyMDAgY2hpcHNldC5cXG4gNjIxOlxcdFxcbiA2MjI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNjIzOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNoOTIwMC5cXG4gNjI0OlxcdFxcbiA2MjU6XFx0Y29uZmlnIFVTQl9ORVRfQVFDMTExXFxuIDYyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiQXF1YW50aWEgQVF0aW9uIFVTQiB0byA1LzIuNUdiRSBDb250cm9sbGVycyBzdXBwb3J0XFxcIlxcbiA2Mjc6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuIDYyODpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gNjI5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MDUuNDA3MTI2MzY0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Njg0MjQ3NjYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIFVTQl9VU0JORVQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG92ZXJsb29rZWQgYW55IGNydWNpYWwgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFVTQl9VU0JORVRgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGNvcnJlY3RseSBkZWZpbmVkLCBhbmQgdGhhdCB3ZSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgdGhlIHJlbGF0aW9uc2hpcHMgaW52b2x2ZWQg4oCTIGJvdGggZXhwbGljaXQgYW5kIGltcGxpY2l0LiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgcGFyYW1vdW50IHRvIGF2b2lkIGFueSB1bmV4cGVjdGVkIGJ1aWxkIGVycm9ycyBvciBydW50aW1lIGNvbmZsaWN0cy4gSSdtIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGBVU0JgLCBvYnZpb3VzbHksIGJ1dCBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlIHJlcXVpcmVkIHN1Yi1mZWF0dXJlcyBhcmUgaGFuZGxlZCBhbmQgYW55IHBvdGVudGlhbCBwbGF0Zm9ybS1zcGVjaWZpYyBudWFuY2VzIGFyZSB0YWtlbiBpbnRvIGFjY291bnQuIEl0J3MgYSBrZXkgc3RlcCB0byBjb25maXJtIHdlIGFyZSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDk1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MToxMi4yNDk2MDYzNjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1Njc4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9VU0JORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTExMz1jb25maWcgVVNCX0xBTjc4WFhcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEzMS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoxMzI6Y29uZmlnIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzMtXFx0dHJpc3RhdGUgXFxcIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MToxMi4yOTcxNzk1MDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NDcxODM1MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBmcm9tIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2A6XG5cbioqQW5hbHl6aW5nIEtjb25maWcncyBVU0IgTmV0d29ya2luZyBPcHRpb25zKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGxpbmVzIDEzMCB0aHJvdWdoIDE1MCBvZiBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgVVNCIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSnVzdCBnbGFuY2luZyBhdCB0aGUgY29udGV4dCwgaXQncyBpbW1lZGlhdGVseSBjbGVhciB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzZWN0aW9uIGRldm90ZWQgdG8gVVNCIG5ldHdvcmsgYWRhcHRlcnMsIHRoZSB2YXJpb3VzIHR5cGVzIHN1cHBvcnRlZCwgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy5cblxuSSBzZWUgYSBsb3Qgb2YgY29uZGl0aW9uYWwgbG9naWMgaGVyZSwgcHJvYmFibHkgaW52b2x2aW5nICpzZWxlY3QqIHN0YXRlbWVudHMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZXBlbmRlbmNpZXMsIHRoYXQncyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5IGFsd2F5cyBsaWVzLiBXaGljaCBVU0IgbmV0d29yayBkZXZpY2VzIGFyZSAqYWN0dWFsbHkqIGVuYWJsZWQgaXMgZ29pbmcgdG8gaGluZ2Ugb24gaG93IHRoZXNlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgcmVzb2x2ZS4gSSBleHBlY3QgdG8gc2VlIGBVU0JfTkVUX0RSSVZFUlNgLCB3aGljaCB3aWxsIGdpdmUgYSBoaWdoIGxldmVsIGVuYWJsaW5nIG9mIHRoZSBVU0IgbmV0d29yayBkcml2ZXJzLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGdhdGV3YXkgb3B0aW9uLiBBZnRlciB0aGF0IEkgYW50aWNpcGF0ZSBpbmRpdmlkdWFsIGRldmljZSBzdXBwb3J0LCBwb3NzaWJseSBncm91cGVkIGJ5IGNoaXBzZXQgb3IgdmVuZG9yLCB0aGF0IGlzIHNlbGVjdGVkIGJ5IHRoZSBnZW5lcmFsIGVuYWJsaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoZXNlIHNlbGVjdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAob25seSBvbmUgY2FuIGJlIHNlbGVjdGVkKSBvciB3aGV0aGVyIG11bHRpcGxlIGRldmljZXMgY2FuIGJlIHN1cHBvcnRlZCBzaW11bHRhbmVvdXNseS5cblxuVGhlIGluY2x1c2lvbiBvZiBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBpcyBjcnVjaWFsLiBUaGlzIGlzIGhvdyB0aGUga2VybmVsIG1ha2VzIHN1cmUgdGhlIFVTQiBzdWJzeXN0ZW0gb3Igc29tZSBvdGhlciByZXF1aXJlZCBwaWVjZSBvZiB0aGUgcHV6emxlIGlzIHByZXNlbnQgYW5kIG9wZXJhdGlvbmFsIGJlZm9yZSBlbmFibGluZyB0aGUgY29ycmVzcG9uZGluZyBuZXR3b3JrIGRyaXZlci4gSSdsbCBiZSBsb29raW5nIHRvIHRyYWNlIHRob3NlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGRldmljZSB0cmVlLiBJJ20gYWxzbyBnb2luZyB0byB3YXRjaCBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMsIGFzIHRoYXTigJlzIHVzdWFsbHkgaG93IG1vcmUgZ2VuZXJhbCBzZXR0aW5ncyB0cmlnZ2VyIG1vcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIFRoZSBsaW5lcyBJJ20gbG9va2luZyBhdCBhcmUgdGhlIGtleSB0byBkZWNpZGluZyB3aGF0IHRoZSBrZXJuZWwgd2lsbCBhY3R1YWxseSBzdXBwb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODEwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MTkuNzY5MDE2NzQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsYW43OHh4LlxcbiAxMzE6XFx0XFxuIDEzMjpcXHRjb25maWcgVVNCX1VTQk5FVFxcbiAxMzM6XFx0XFx0dHJpc3RhdGUgXFxcIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXFxcIlxcbiAxMzQ6XFx0XFx0c2VsZWN0IE1JSVxcbiAxMzU6XFx0XFx0aGVscFxcbiAxMzY6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGtpbmRzIG9mIG5ldHdvcmsgbGlua3Mgb3ZlciBVU0IsXFxuIDEzNzpcXHRcXHQgIHdpdGggXFxcIm1pbmlkcml2ZXJzXFxcIiBidWlsdCBhcm91bmQgYSBjb21tb24gbmV0d29yayBkcml2ZXIgY29yZVxcbiAxMzg6XFx0XFx0ICB0aGF0IHN1cHBvcnRzIGRlZXAgcXVldWVzIGZvciBlZmZpY2llbnQgdHJhbnNmZXJzLiAgKFRoaXMgZ2l2ZXNcXG4gMTM5OlxcdFxcdCAgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggc21hbGwgcGFja2V0cyBhbmQgYXQgaGlnaCBzcGVlZHMpLlxcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHQgIFRoZSBVU0IgaG9zdCBydW5zIFxcXCJ1c2JuZXRcXFwiLCBhbmQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayBtaWdodCBiZTpcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0ICAtIEFub3RoZXIgVVNCIGhvc3QsIHdoZW4gdXNpbmcgVVNCIFxcXCJuZXR3b3JrXFxcIiBvciBcXFwiZGF0YSB0cmFuc2ZlclxcXCJcXG4gMTQ0OlxcdFxcdCAgICBjYWJsZXMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCB0byBuZXR3b3JrIGxhcHRvcHMgdG8gUENzLCBsaWtlXFxuIDE0NTpcXHRcXHQgICAgXFxcIkxhcGxpbmtcXFwiIHBhcmFsbGVsIGNhYmxlcyBvciBzb21lIG1vdGhlcmJvYXJkcy4gIFRoZXNlIHJlbHlcXG4gMTQ2OlxcdFxcdCAgICBvbiBzcGVjaWFsaXplZCBjaGlwcyBmcm9tIG1hbnkgc3VwcGxpZXJzLlxcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHQgIC0gQW4gaW50ZWxsaWdlbnQgVVNCIGdhZGdldCwgcGVyaGFwcyBlbWJlZGRpbmcgYSBMaW51eCBzeXN0ZW0uXFxuIDE0OTpcXHRcXHQgICAgVGhlc2UgaW5jbHVkZSBQREFzIHJ1bm5pbmcgTGludXggKGlQYXEsIFlvcHksIFphdXJ1cywgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjE5Ljc2OTEwNDU2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODg0NTQ1Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKktjb25maWcgTWVudSBEZXBlbmRlbmN5IENoZWNrKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaW1lIHRvIGdldCBmYW1pbGlhciB3aXRoIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGhvdyB0aGUgbWVudSBzdHJ1Y3R1cmUgaXMgc2V0IHVwLCBzcGVjaWZpY2FsbHkgdGhlIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nLCBcIldoZXJlIGRvIHRoZSBvdmVyYWxsIG5ldHdvcmstcmVsYXRlZCBvcHRpb25zIGxpa2UgYE5FVF9FVEhFUk5FVGAgY29tZSBpbnRvIHBsYXk/XCIgSSBzaG91bGQgc2NhbiB0aGUgdG9wIG9mIHRoZSBmaWxlLCBvciBpZiB0aGF0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMsIEknbGwgbmVlZCB0byB1c2UgYG1lbnVjb25maWdgIHRvIG5hdmlnYXRlIGFuZCBmaW5kIHRoZSBtZW51IGVudHJ5IGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgdHJhY2tpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBlbnN1cmluZyB0aGluZ3MgYXJlIHByb3Blcmx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3MuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIFVTQiBuZXR3b3JrIGRyaXZlcnMgZml0IGludG8gdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MjMuNjUzNjU0MzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29tbWVudCBcXFwiSG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XFxcIlxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiAhVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgIDc6XFx0XFxuICAgODpcXHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xcbiAgIDk6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBOZXR3b3JrIEFkYXB0ZXJzXFxcIlxcbiAgMTA6XFx0XFx0ZGVmYXVsdCBVU0IgaWYgVVNCXFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFVTQiBcXHUwMDI2XFx1MDAyNiBORVRcXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgVVNCX05FVF9EUklWRVJTXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBVU0JfQ0FUQ1xcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBVU0IgRXRoZXJuZXRcXG4gIDIwOlxcdFxcdCAgZGV2aWNlIGJhc2VkIG9uIHRoZSBFTDEyMTBBIGNoaXAuIFN1cHBvcnRlZCBkZXZpY2VzIGFyZTpcXG4gIDIxOlxcdFxcdCAgQmVsa2luIEY1VTAxMVxcbiAgMjI6XFx0XFx0ICBCZWxraW4gRjVVMTExXFxuICAyMzpcXHRcXHQgIENBVEMgTmV0TWF0ZVxcbiAgMjQ6XFx0XFx0ICBDQVRDIE5ldE1hdGUgSUlcXG4gIDI1OlxcdFxcdCAgc21hcnRCcmlkZ2VzIHNtYXJ0TklDXFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdCAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSxcXG4gIDI4OlxcdFxcdCAgdHlwaWNhbGx5IG9uIGV0aDAsIGlmIGl0IGlzIHRoZSBvbmx5IGV0aGVybmV0IGRldmljZSwgb3IgcGVyaGFwcyBvblxcbiAgMjk6XFx0XFx0ICBldGgxLCBpZiB5b3UgaGF2ZSBhIFBDSSBvciBJU0EgZXRoZXJuZXQgY2FyZCBpbnN0YWxsZWQuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAzMjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjYXRjLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRjb25maWcgVVNCX0tBV0VUSFxcbiAgMzU6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBLTFNJIEtMNVVTQjEwMS1iYXNlZCBldGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIG9ubHlcXG4gIDM4OlxcdFxcdCAgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBLTFNJIEtMNUtVU0IxMDFCIGNoaXBzZXQ6XFxuICAzOTpcXHRcXHQgIDNDb20gM0MxOTI1MFxcbiAgNDA6XFx0XFx0ICBBRFMgVVNCLTEwQlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MjMuNjUzNzU2ODUxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxMzI2OTE3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFVTQiBOZXR3b3JrIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZXNlIFVTQiBuZXR3b3JrIGRyaXZlcnMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbS4gSXQgc2VlbXMgbGlrZSBgVVNCX05FVF9EUklWRVJTYCBpcyB0aGUgdG9wLWxldmVsIG9wdGlvbiwgYW5kIGl0J3MgY29udGluZ2VudCBvbiBib3RoIGBVU0JgIGFuZCBgTkVUYCBiZWluZyBlbmFibGVkIOKAkyBtYWtlcyBzZW5zZSwgcmlnaHQ/IFdlIHdvdWxkbid0IHdhbnQgdG8gaW5jbHVkZSBuZXR3b3JrIGRyaXZlcnMgaWYgd2UgZGlkbid0IGhhdmUgVVNCIHN1cHBvcnQgYW5kIG5ldHdvcmtpbmcgZW5hYmxlZC4gVGhlbiB3ZSBoYXZlIGBVU0JfVVNCTkVUYCwgYW5vdGhlciBkcml2ZXIsIGFuZCBmaW5hbGx5IGBVU0JfTkVUX0NIOTIwMGAuXG5cblRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGBjaDkyMDBgIGRyaXZlciwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUsIGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGFyb3VuZCBsaW5lIDM2MCB0byBzZWUgdGhlIGZ1bmN0aW9uIGBjaDkyMDBfYmluZGAuIFRoaXMgc2hvdWxkIHNob3cgbWUgdGhlIGZ1bGwgYmluZGluZyBwcm9jZXNzIGFuZCBob3cgaXQgaXMgbGlua2VkLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIHRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MjUuNzg2NDUyNjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDU6XFx0XFx0aWYgKHJldHZhbClcXG4gMzQ2OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGRldi1cXHUwMDNlbWlpLmRldiA9IGRldi1cXHUwMDNlbmV0O1xcbiAzNDk6XFx0XFx0ZGV2LVxcdTAwM2VtaWkubWRpb19yZWFkID0gY2g5MjAwX21kaW9fcmVhZDtcXG4gMzUwOlxcdFxcdGRldi1cXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcXG4gMzUxOlxcdFxcdGRldi1cXHUwMDNlbWlpLnJlZ19udW1fbWFzayA9IDB4MWY7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdGRldi1cXHUwMDNlbWlpLnBoeV9pZF9tYXNrID0gMHgxZjtcXG4gMzU0OlxcdFxcbiAzNTU6XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX210dSA9IGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtdHUgKyBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbiAzNTY6XFx0XFx0ZGV2LVxcdTAwM2VyeF91cmJfc2l6ZSA9IDI0ICogNjQgKyAxNjtcXG4gMzU3OlxcdFxcdG1paV9ud2F5X3Jlc3RhcnQoXFx1MDAyNmRldi1cXHUwMDNlbWlpKTtcXG4gMzU4OlxcdFxcbiAzNTk6XFx0XFx0ZGF0YVswXSA9IDB4MDE7XFxuIDM2MDpcXHRcXHRkYXRhWzFdID0gMHgwRjtcXG4gMzYxOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcXG4gMzYyOlxcdFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzNjM6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIDM2NDpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNjU6XFx0XFxuIDM2NjpcXHRcXHRkYXRhWzBdID0gMHhBMDtcXG4gMzY3OlxcdFxcdGRhdGFbMV0gPSAweDkwO1xcbiAzNjg6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcXG4gMzY5OlxcdFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzNzA6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIDM3MTpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRkYXRhWzBdID0gMHgzMDtcXG4gMzc0OlxcdFxcdGRhdGFbMV0gPSAweDAwO1xcbiAzNzU6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXFxuIDM3NjpcXHRcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzc3OlxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiAzNzg6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzc5OlxcdFxcbiAzODA6XFx0XFx0ZGF0YVswXSA9IDB4MTc7XFxuIDM4MTpcXHRcXHRkYXRhWzFdID0gMHhEODtcXG4gMzgyOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcXG4gMzgzOlxcdFxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzODQ6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIDM4NTpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzODY6XFx0XFxuIDM4NzpcXHRcXHQvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi9cXG4gMzg4OlxcdFxcdGRhdGFbMF0gPSAweDAxO1xcbiAzODk6XFx0XFx0ZGF0YVsxXSA9IDB4MDA7XFxuIDM5MDpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxcbiAzOTE6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM5MjpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gMzkzOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM5NDpcXHRcXG4gMzk1OlxcdFxcdGRhdGFbMF0gPSAweDVGO1xcbiAzOTY6XFx0XFx0ZGF0YVsxXSA9IDB4MEQ7XFxuIDM5NzpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxcbiAzOTg6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM5OTpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gNDAwOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xcbiA0MDM6XFx0XFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cXHUwMDNlbmV0LCBhZGRyKTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDA2OlxcdH1cXG4gNDA3OlxcdFxcbiA0MDg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjaDkyMDBfaW5mbyA9IHtcXG4gNDA5OlxcdFxcdC5kZXNjcmlwdGlvbiA9IFxcXCJDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclxcXCIsXFxuIDQxMDpcXHRcXHQuZmxhZ3MgPSBGTEFHX0VUSEVSLFxcbiA0MTE6XFx0XFx0LmJpbmQgPSBjaDkyMDBfYmluZCxcXG4gNDEyOlxcdFxcdC5yeF9maXh1cCA9IGNoOTIwMF9yeF9maXh1cCxcXG4gNDEzOlxcdFxcdC50eF9maXh1cCA9IGNoOTIwMF90eF9maXh1cCxcXG4gNDE0OlxcdFxcdC5zdGF0dXMgPSBjaDkyMDBfc3RhdHVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MToyNS43ODY1NjcxOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjM2OTIxNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29udGV4dCBvZiBgY2g5MjAwX2JpbmRgLiBJIHJlY2FsbCBzZWVpbmcgdGhhdCBmdW5jdGlvbiBtZW50aW9uZWQgZWFybGllciwgYXJvdW5kIGxpbmVzIDMyMCB0byAzNDUgaW4gdGhlIGNvZGUuIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9mIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIEknbGwgbmVlZCB0byByZS1leGFtaW5lIHRoYXQgc2VjdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4OTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjI3LjQyMzQ5MDk2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdFxcdFxcdFxcdFxcdCAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzIxOlxcdFxcdHJkX21hY19sZW4gKz0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBNQUNfUkVHX1NUQVRJT05fTSxcXG4gMzIyOlxcdFxcdFxcdFxcdFxcdCAgIG1hY19hZGRyICsgMiwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzIzOlxcdFxcdHJkX21hY19sZW4gKz0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBNQUNfUkVHX1NUQVRJT05fSCxcXG4gMzI0OlxcdFxcdFxcdFxcdFxcdCAgIG1hY19hZGRyICsgNCwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzI1OlxcdFxcdGlmIChyZF9tYWNfbGVuICE9IEVUSF9BTEVOKVxcbiAzMjY6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0ZGF0YVswXSA9IG1hY19hZGRyWzVdO1xcbiAzMjk6XFx0XFx0ZGF0YVsxXSA9IG1hY19hZGRyWzRdO1xcbiAzMzA6XFx0XFx0ZGF0YVsyXSA9IG1hY19hZGRyWzNdO1xcbiAzMzE6XFx0XFx0ZGF0YVszXSA9IG1hY19hZGRyWzJdO1xcbiAzMzI6XFx0XFx0ZGF0YVs0XSA9IG1hY19hZGRyWzFdO1xcbiAzMzM6XFx0XFx0ZGF0YVs1XSA9IG1hY19hZGRyWzBdO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDMzOTpcXHR7XFxuIDM0MDpcXHRcXHRpbnQgcmV0dmFsID0gMDtcXG4gMzQxOlxcdFxcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcXG4gMzQyOlxcdFxcdHU4IGFkZHJbRVRIX0FMRU5dO1xcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRyZXR2YWwgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xcbiAzNDU6XFx0XFx0aWYgKHJldHZhbClcXG4gMzQ2OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGRldi1cXHUwMDNlbWlpLmRldiA9IGRldi1cXHUwMDNlbmV0O1xcbiAzNDk6XFx0XFx0ZGV2LVxcdTAwM2VtaWkubWRpb19yZWFkID0gY2g5MjAwX21kaW9fcmVhZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MjcuNDIzNTg1MTExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4NDY3NTgzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgY2g5MjAwX2JpbmRgIENhbGxiYWNrKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyByaWdodCBub3cgaXMgdW5kZXJzdGFuZGluZyB0aGUgbGlmZWN5Y2xlIG9mIGBjaDkyMDBfYmluZGAsIHRoZSBgLmJpbmRgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHN0cnVjdCBkcml2ZXJfaW5mbyBjaDkyMDBfaW5mb2Agc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICp3aGVuKiBkb2VzIHRoaXMgZnVuY3Rpb24gZ2V0IGludm9rZWQ/IFRpbWUgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBwYXRoLlxuXG5UaGUgbG9naWNhbCBwbGFjZSB0byBsb29rIGlzIHdpdGhpbiB0aGUgYHVzYm5ldGAgZnJhbWV3b3JrLCBzaW5jZSB0aGUgYGNoOTIwMGAgZHJpdmVyIGlzIGJ1aWx0IG9uIGl0LiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYHVzYm5ldGAgY29yZSBjYWxscyB0aGUgYGluZm8tXHUwMDNlYmluZGAgZnVuY3Rpb24uIFRoYXQgc3VnZ2VzdHMgbG9va2luZyBhdCBgdXNibmV0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1ZGV2LCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqcHJvZClgLiBCaW5nbyEgVGhlcmUgaXQgaXM6IGBpbmZvLVx1MDAzZWJpbmQoZGV2LCB1aW50ZXJmYWNlKWAuIFRoYXQncyB0aGUgY3J1Y2lhbCBjYWxsLlxuXG5Ob3csIGhvdyBkb2VzIGBjaDkyMDBgIGdldCByZWdpc3RlcmVkIHdpdGggYHVzYm5ldGAgaW4gdGhlIGZpcnN0IHBsYWNlPyBUbyBjb25maXJtIHRoZSBmdWxsIHNldHVwLCBJIG5lZWQgdG8gY29uc3VsdCB0aGUgYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5IGxpbmVzIDQxMCB0byA0NDAgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgcmVnaXN0cmF0aW9uIG9jY3Vycy4gVGhhdCB3aWxsIHBhaW50IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBgY2g5MjAwYCBkcml2ZXIgYW5kIHRoZSBgdXNibmV0YCBmcmFtZXdvcmssIGFuZCBob3cgdGhhdCBsZWFkcyB0byB0aGUgZXhlY3V0aW9uIG9mIGBjaDkyMDBfYmluZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NjQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MTozMC4yNzAzNDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxMDpcXHRcXHQuZmxhZ3MgPSBGTEFHX0VUSEVSLFxcbiA0MTE6XFx0XFx0LmJpbmQgPSBjaDkyMDBfYmluZCxcXG4gNDEyOlxcdFxcdC5yeF9maXh1cCA9IGNoOTIwMF9yeF9maXh1cCxcXG4gNDEzOlxcdFxcdC50eF9maXh1cCA9IGNoOTIwMF90eF9maXh1cCxcXG4gNDE0OlxcdFxcdC5zdGF0dXMgPSBjaDkyMDBfc3RhdHVzLFxcbiA0MTU6XFx0XFx0LmxpbmtfcmVzZXQgPSBjaDkyMDBfbGlua19yZXNldCxcXG4gNDE2OlxcdFxcdC5yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxcbiA0MTc6XFx0fTtcXG4gNDE4OlxcdFxcbiA0MTk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNoOTIwMF9wcm9kdWN0c1tdID0ge1xcbiA0MjA6XFx0XFx0e1xcbiA0MjE6XFx0XFx0IFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpLFxcbiA0MjI6XFx0XFx0IC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKVxcdTAwMjZjaDkyMDBfaW5mbyxcXG4gNDIzOlxcdFxcdCB9LFxcbiA0MjQ6XFx0XFx0e30sXFxuIDQyNTpcXHR9O1xcbiA0MjY6XFx0XFxuIDQyNzpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2g5MjAwX3Byb2R1Y3RzKTtcXG4gNDI4OlxcdFxcbiA0Mjk6XFx0c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNoOTIwMF9kcml2ZXIgPSB7XFxuIDQzMDpcXHRcXHQubmFtZSA9IFxcXCJjaDkyMDBcXFwiLFxcbiA0MzE6XFx0XFx0LmlkX3RhYmxlID0gY2g5MjAwX3Byb2R1Y3RzLFxcbiA0MzI6XFx0XFx0LnByb2JlID0gdXNibmV0X3Byb2JlLFxcbiA0MzM6XFx0XFx0LmRpc2Nvbm5lY3QgPSB1c2JuZXRfZGlzY29ubmVjdCxcXG4gNDM0OlxcdFxcdC5zdXNwZW5kID0gdXNibmV0X3N1c3BlbmQsXFxuIDQzNTpcXHRcXHQucmVzdW1lID0gdXNibmV0X3Jlc3VtZSxcXG4gNDM2OlxcdH07XFxuIDQzNzpcXHRcXG4gNDM4OlxcdG1vZHVsZV91c2JfZHJpdmVyKGNoOTIwMF9kcml2ZXIpO1xcbiA0Mzk6XFx0XFxuIDQ0MDpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlFpbkhlbmcgQ0g5MjAwIFVTQiBOZXR3b3JrIGRldmljZVxcXCIpO1xcbiA0NDE6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MTozMC4yNzA0MzUwNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NDk0MjI3NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBjaDkyMDAgRHJpdmVyJ3MgQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjaDkyMDBfcHJvZHVjdHNgIGVudHJ5OiBgVVNCX0RFVklDRSgweDFBODYsIDB4RTA5MilgLiAgSW4gdGhlIGNvbnRleHQgb2Ygc3l6a2FsbGVyLCB0aGlzIGlzIGEgZGV2aWNlIEkgY2FuIHJlYWRpbHkgZW11bGF0ZS4gU3l6a2FsbGVyJ3MgVVNCIGVtdWxhdGlvbiBhbGxvd3MgbWUgdG8gY29ubmVjdCAqYW55KiBVU0IgZGV2aWNlIHdpdGggYSBkZWZpbmVkIHZlbmRvciBhbmQgcHJvZHVjdCBJRCDigJMgYW5kIHRoaXMgb25lJ3MgYXZhaWxhYmxlLiAgV2hlbiB0aGF0IHZpcnR1YWwgZGV2aWNlIGNvbm5lY3RzLCBgdXNibmV0X3Byb2JlYCBnZXRzIGNhbGxlZC4gIFRoYXQncyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVuczogYHVzYm5ldF9wcm9iZWAgdGhlbiBjYWxscyBgY2g5MjAwX2JpbmRgLlxuXG5QcmV2aW91c2x5LCBJIHNlZSB0aGVyZSdzIGEgcHJvYmxlbSBpbiBgY2g5MjAwX2JpbmRgLiBUaGUgY29kZSBpc3N1ZXMgc2V2ZXJhbCBgY29udHJvbF93cml0ZWAgY2FsbHMsIGJ1dCBjcnVjaWFsbHksIHRoZSByZXR1cm4gdmFsdWVzIGZyb20gdGhvc2UgY2FsbHMgd2VyZSAqaWdub3JlZCohICBTbywgaWYgYSBgY29udHJvbF93cml0ZWAgZmFpbGVk4oCUc2F5LCBkdWUgdG8gYSB0aW1lb3V0LCBhIFVTQiB0cmFuc2ZlciBlcnJvciwgb3IgaWYgdGhlIGVtdWxhdGVkIGRldmljZSBkZWNpZGVkIHRvIHJldHVybiBhbiBlcnJvciDigJMgdGhlIGNvZGUganVzdCBrZXB0IG9uIGdvaW5nLiBJdCB3b3VsZCBibGl0aGVseSBwcm9jZWVkIHRvIGBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTsgZXRoX2h3X2FkZHJfc2V0KGRldi1cdTAwM2VuZXQsIGFkZHIpOyByZXR1cm4gcmV0dmFsO2AuIFRhbGsgYWJvdXQgYSBwb3RlbnRpYWwgZm9yIHNvbWUgc2VyaW91cyBpbnN0YWJpbGl0eSFcblxuTm93LCB0aGUgZml4IGlzIGluOiBhbnkgZmFpbHVyZSBpbiBhIGBjb250cm9sX3dyaXRlYCBjYWxsIHdpbGwgaW1tZWRpYXRlbHkgYWJvcnQgYGNoOTIwMF9iaW5kYC4gSXQnbGwgcmV0dXJuIHRoZSBlcnJvciBjb2RlIChgcmV0dmFsYCksIHdoaWNoIHdpbGwsIGluIHR1cm4sIGNhdXNlIGB1c2JuZXRfcHJvYmVgIHRvIGZhaWwgYW5kLCB1bHRpbWF0ZWx5LCB0ZWFyIGRvd24gdGhlIGRldmljZSAoYGRldmApLiAgVGhpcyBpcyBhIGdvb2Qgc3RlcCwgcHJldmVudGluZyBmdXJ0aGVyIGV4ZWN1dGlvbiBhbmQgcG90ZW50aWFsbHkgbWFza2luZyBidWdzLlxuXG5CdXQuLi53YWl0IGEgbWludXRlLiBJcyB0aGlzIGNvZGUgZXZlbiAqcmVhY2hhYmxlKj8gIExldCdzIGNoZWNrIHRoZSBjcml0ZXJpYS4gTXkgZXhwZXJpZW5jZSB3aXRoIHRoaXMgdHlwZSBvZiBkZWJ1Z2dpbmcgdGVsbHMgbWUgdGhhdCwgaW4gU2VjdGlvbiAzIG9mIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uLCB0aGUga2V5IGlzIHRoZSBwcmVzZW5jZSBvZiB2aXJ0dWFsIGJ1c2VzLiBBbmQgeXVwLCB0aGVyZSB0aGV5IGFyZTogdmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuICBTcGVjaWZpY2FsbHksIFVTQiBkcml2ZXJzIGFyZSBhY2Nlc3NpYmxlIHZpYSBVU0IgcmF3IGdhZGdldCwgdmhjaSwgYW5kIGR1bW15X2hjZCBlbXVsYXRpb24uIEFuZCBzeXprYWxsZXIgKmV4cGxpY2l0bHkqIHRhcmdldHMgdGhlc2UgVVNCIGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgdXNibmV0IGRyaXZlcnMgdmlhIGBzeXpfdXNiX2Nvbm5lY3RgLiBZZXMsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZS5cblxuSSBuZWVkIG1vcmUgY29udGV4dCwgdGhvdWdoLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGdpdCBjb21taXRzIG9yIHNpbWlsYXIgcGF0Y2hlcyB0aGF0IGV4cGxhaW4gdGhlIGhpc3Rvcnkgb2YgdGhpcywgdG8ga25vdyB3aGF0IHByb21wdGVkIHRoaXMgY2hhbmdlIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBhY3QsIGFuZCB0byBrbm93IHdoYXQgY29uZGl0aW9ucyB3b3VsZCB0cmlnZ2VyIHRoaXMgYnVnLiBJJ2xsIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZSBvciB0aGUgZ2l0IGxvZyBvZiBgY2g5MjAwLmNgIGl0c2VsZi4gVGhpcyBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTY3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MzQuNzY0NjY1Mjc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU4NTI1NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29udHJvbF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTk5PXN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzYtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjEzNzpzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTEzOC1cXHRcXHRcXHQgdW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTE5Nz1zdGF0aWMgdm9pZCBjaDkyMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIxMS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjEyOlxcdGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTMtXFx0XFx0ICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0zMzg9c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2MC1cXHRkYXRhWzFdID0gMHgwRjtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzYxOlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzYyLVxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2Ny1cXHRkYXRhWzFdID0gMHg5MDtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzY4OlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2OS1cXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNzQtXFx0ZGF0YVsxXSA9IDB4MDA7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM3NTpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzc2LVxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM4MS1cXHRkYXRhWzFdID0gMHhEODtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzgyOlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzgzLVxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM4OS1cXHRkYXRhWzFdID0gMHgwMDtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzkwOlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM5MS1cXHRcXHRcXHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTYtXFx0ZGF0YVsxXSA9IDB4MEQ7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM5NzpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTgtXFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjM1LjAyMDUyNDkyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDQ5NDI4MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDSDkyMDAgRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGNvbnRyb2xfd3JpdGVgIGZ1bmN0aW9uIGlzIHdvcmtpbmcgd2l0aGluIHRoZSBDSDkyMDAgVVNCIG5ldHdvcmsgZHJpdmVyLiBMZXQncyBzdGFydCBieSBoZWFkaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEknbGwgb3BlbiB1cCBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCBpbW1lZGlhdGVseS4gVGhhdCdzIHRoZSBmaXJzdCBwbGFjZSB0byBsb29rIHRvIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSG9wZWZ1bGx5LCB0aGUgZGVmaW5pdGlvbiB0aGVyZSB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLiBJJ20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aG9zZSBzdGFuZGFyZCBVU0IgY29udHJvbCB0cmFuc2ZlcnMsIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBjb25maXJtIGFuZCBnZXQgdGhlIGZpbmUgZGV0YWlscy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTE3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MzcuNDY5OTU2MzA2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzU6XFx0fVxcbiAxMzY6XFx0XFxuIDEzNzpcXHRzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXFxuIDEzODpcXHRcXHRcXHRcXHQgdW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IGluZGV4LFxcbiAxMzk6XFx0XFx0XFx0XFx0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNob3J0IHNpemUsIGludCB0aW1lb3V0KVxcbiAxNDA6XFx0e1xcbiAxNDE6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDtcXG4gMTQyOlxcdFxcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdF90eXBlO1xcbiAxNDM6XFx0XFx0aW50IGVyciA9IDA7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGlmIChyZXF1ZXN0ID09IFJFUVVFU1RfV1JJVEUpXFxuIDE0NjpcXHRcXHRcXHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAxNDc6XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX09USEVSKTtcXG4gMTQ4OlxcdFxcdGVsc2VcXG4gMTQ5OlxcdFxcdFxcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuIDE1MDpcXHRcXHRcXHRcXHRcXHRVU0JfUkVDSVBfREVWSUNFKTtcXG4gMTUxOlxcdFxcbiAxNTI6XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcIiVzKCkgaW5kZXg9MHglMDJ4IHNpemU9JWRcXFxcblxcXCIsXFxuIDE1MzpcXHRcXHRcXHQgICBfX2Z1bmNfXywgaW5kZXgsIHNpemUpO1xcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHRpZiAoZGF0YSkge1xcbiAxNTY6XFx0XFx0XFx0YnVmID0ga21lbWR1cChkYXRhLCBzaXplLCBHRlBfS0VSTkVMKTtcXG4gMTU3OlxcdFxcdFxcdGlmICghYnVmKSB7XFxuIDE1ODpcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAxNTk6XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiAxNjA6XFx0XFx0XFx0fVxcbiAxNjE6XFx0XFx0fVxcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRlcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LVxcdTAwM2V1ZGV2LFxcbiAxNjQ6XFx0XFx0XFx0XFx0ICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi1cXHUwMDNldWRldiwgMCksXFxuIDE2NTpcXHRcXHRcXHRcXHQgICAgICByZXF1ZXN0LCByZXF1ZXN0X3R5cGUsIHZhbHVlLCBpbmRleCwgYnVmLCBzaXplLFxcbiAxNjY6XFx0XFx0XFx0XFx0ICAgICAgdGltZW91dCk7XFxuIDE2NzpcXHRcXHRpZiAoZXJyIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgZXJyIFxcdTAwM2Mgc2l6ZSlcXG4gMTY4OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDE2OTpcXHRcXHRrZnJlZShidWYpO1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRyZXR1cm4gMDtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0ZXJyX291dDpcXG4gMTc0OlxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjM3LjQ3MDA1MTg5NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzYxNjU3MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBgY29udHJvbF93cml0ZWAgLSBBIENyaXRpY2FsIE92ZXJzaWdodCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIEkgbmVlZCB0byByZXZpc2l0IHRoaXMgYGNvbnRyb2xfd3JpdGVgIGZ1bmN0aW9uOyB0aGVyZSdzIHNvbWV0aGluZyBwb3RlbnRpYWxseSBhd3J5IGhlcmUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgbGluZXMgMTY3LTE3Mi4gKkhlcmUqIHdlIGdvOlxuYGBgY1xuXHRcdGVyciA9IHVzYl9jb250cm9sX21zZyhkZXYtXHUwMDNldWRldixcblx0XHRcdFx0ICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi1cdTAwM2V1ZGV2LCAwKSxcblx0XHRcdFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcblx0XHRcdFx0ICAgICAgdGltZW91dCk7XG5cdFx0aWYgKGVyciBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGVyciBcdTAwM2Mgc2l6ZSlcblx0XHRcdGVyciA9IC1FSU5WQUw7XG5cdFx0a2ZyZWUoYnVmKTtcblxuXHRcdHJldHVybiAwO1xuXG5lcnJfb3V0OlxuXHRcdHJldHVybiBlcnI7XG5gYGBcblRoYXQgYGtmcmVlKGJ1ZilgIGlzIGRlZmluaXRlbHkgZ2V0dGluZyBteSBhdHRlbnRpb24uIEl0IGxvb2tzIGxpa2UgcmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZSBvZiBgdXNiX2NvbnRyb2xfbXNnYCwgdGhlIGJ1ZmZlciBpcyAqYWx3YXlzKiBmcmVlZCBhbmQgdGhlIGZ1bmN0aW9uICphbHdheXMqIHJldHVybnMgMCBhZnRlciBhIHN1Y2Nlc3NmdWwgYnVmZmVyIGFsbG9jYXRpb24uIE5vLCBubywgd2FpdC4uLiBsZXQgbWUgcmUtZXhhbWluZSB0aGlzLiBMb29rLCBsaW5lIDE3MSAqYWx3YXlzKiByZXR1cm5zIDAgaWYgd2UgZ2V0IHBhc3QgdGhlIGJ1ZmZlciBhbGxvY2F0aW9uLiBFdmVuIGlmIGB1c2JfY29udHJvbF9tc2dgIGZhaWxzLCB0aGUgZXJyb3IgY29kZSBnZXRzIHNldCwgYW5kICp0aGVuKiB0aGUgZnVuY3Rpb24gc2ltcGx5IHJldHVybnMgMCEgSXMgdGhhdCB0cnVlPyBBbSBJIHJlYWRpbmcgdGhpcyBjb3JyZWN0bHk/IEknbSBnb2luZyB0byBiYWNrIHVwIGFuZCByZS1yZWFkIHRoZSBlbnRpcmUgc2VjdGlvbiBmcm9tIDE2MC0xODAgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIGJlICpzdXJlKiBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZSBoZXJlLiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgYnVnIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjQwLjIzMTcxMjQxN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcdFxcdH1cXG4gMTYxOlxcdFxcdH1cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cXHUwMDNldWRldixcXG4gMTY0OlxcdFxcdFxcdFxcdCAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtXFx1MDAzZXVkZXYsIDApLFxcbiAxNjU6XFx0XFx0XFx0XFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcXG4gMTY2OlxcdFxcdFxcdFxcdCAgICAgIHRpbWVvdXQpO1xcbiAxNjc6XFx0XFx0aWYgKGVyciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGVyciBcXHUwMDNjIHNpemUpXFxuIDE2ODpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAxNjk6XFx0XFx0a2ZyZWUoYnVmKTtcXG4gMTcwOlxcdFxcbiAxNzE6XFx0XFx0cmV0dXJuIDA7XFxuIDE3MjpcXHRcXG4gMTczOlxcdGVycl9vdXQ6XFxuIDE3NDpcXHRcXHRyZXR1cm4gZXJyO1xcbiAxNzU6XFx0fVxcbiAxNzY6XFx0XFxuIDE3NzpcXHRzdGF0aWMgaW50IGNoOTIwMF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYylcXG4gMTc4OlxcdHtcXG4gMTc5OlxcdFxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIDE4MDpcXHRcXHR1bnNpZ25lZCBjaGFyIGJ1ZmZbMl07XFxuIDE4MTpcXHRcXHRpbnQgcmV0O1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcIiVzIHBoeV9pZDolMDJ4IGxvYzolMDJ4XFxcXG5cXFwiLFxcbiAxODQ6XFx0XFx0XFx0ICAgX19mdW5jX18sIHBoeV9pZCwgbG9jKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6NDAuMjMxODExODY3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExOTA4MDMwNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFVTQiBEcml2ZXIgUGF0Y2ggYW5kIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90aWNlZCBhIGhhcmRjb2RlZCBgcmV0dXJuIDBgIGluIGBjb250cm9sX3dyaXRlYCBhdCBsaW5lIDE3MS4gQnV0IHdhaXQsIGl0J3Mgbm90IGFsd2F5cyB6ZXJvLCBpdCBjYW4gcmV0dXJuIGAtRU5PTUVNYCBpZiBga21lbWR1cGAgZmFpbHMuIFRoYXQncyBhIHBvaW50LlxuXG5UaGUgbW9yZSByZWNlbnQgcGF0Y2ggYWRkcyBgaWYgKHJldHZhbCBcdTAwM2MgMCkgcmV0dXJuIHJldHZhbDtgIGluIGBjaDkyMDBfYmluZGAuIFRoaXMgbWVhbnMgdGhlIGNvZGUgbm93IGV4cGxpY2l0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNvbnRyb2xfd3JpdGVgIGFuZCByZXR1cm5zIGVhcmx5IGlmIGl0J3MgbmVnYXRpdmUuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBwcmV2aW91c2x5LCB0aGUgYHJldHZhbGAgZnJvbSBgY29udHJvbF93cml0ZWAgd2FzIG92ZXJ3cml0dGVuIGJ5IHN1YnNlcXVlbnQgY2FsbHMuIEl0IGxvb2tzIGxpa2UgYSBidWctZml4IHRvIGhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzIGZyb20gYGNvbnRyb2xfd3JpdGVgLiBBbmQgaWYgdGhlIGBrbWVtZHVwYCBmYWlscywgdGhhdCByZXR1cm5zIGAtRU5PTUVNYC4gSXQgbWFrZXMgYGNvbnRyb2xfd3JpdGVgIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlLlxuXG5Ob3csIGNvdWxkIGBjb250cm9sX3dyaXRlYCByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSBvdGhlciB0aGFuIGAtRU5PTUVNYD8gTm8sIGJlY2F1c2UgYGRhdGFgIGlzIG5vbi1udWxsLiBMZXQncyBzZWUgaWYgdGhpcyBwYXRjaCBpcyBwYXJ0IG9mIGEgc2VyaWVzIG9yIGhpc3Rvcnkgb2YgY29tbWl0cywgYnV0IGdyZXBwZXIgb3IgcmVhZGluZyB0aGUgZmlsZSB3aWxsIHByb3ZpZGUgbW9yZSBkZXRhaWwuXG5cblJpZ2h0LCB0aGUgZGlmZiBvbmx5IHRvdWNoZXMgYGNoOTIwMC5jYCB3aXRoaW4gYGNoOTIwMF9iaW5kYC4gVGhpcyBwYXRjaCAqZG9lcyogbW9kaWZ5IGhvdyBlcnJvcnMgZnJvbSBgY29udHJvbF93cml0ZWAgYXJlIGhhbmRsZWQgaW4gYGNoOTIwMF9iaW5kYC4gQmVmb3JlLCB0aGUgcmV0dXJuIHZhbHVlIHdhcyBpZ25vcmVkLCBhbmQgbm93IGl0J3MgY2hlY2tlZC4gVGhpcyBtZWFucyBgY29udHJvbF93cml0ZWAgKmNhbiogcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUsIHNwZWNpZmljYWxseSBgLUVOT01FTWAsIGR1ZSB0byBhIGBrbWVtZHVwYCBmYWlsdXJlLiBMb29rcyBsaWtlIGEgYnVnLWZpeC5cblxuVGhlIGtleSBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IFRoaXMgaXMgYSBjb3JlIGNvbmNlcHQuIEdpdmVuIHRoYXQgYGNoOTIwMGAgaXMgYSBVU0IgZHJpdmVyLCBpdCAqaXMqIHJlYWNoYWJsZS4gVVNCIGRyaXZlcnMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB2aXJ0dWFsIGJ1c2VzIHN1Y2ggYXMgVVNCIGdhZGdldCwgdmhjaSwgb3IgZHVtbXlfaGNkLiBgY2g5MjAwYCBpcyBpbiBgZHJpdmVycy9uZXQvdXNiL2AsIG1ha2luZyBpdCBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIuIFRoZSBjb2RlIGNvbnRhaW5zOlxuXG5gYGBjXG5zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2g5MjAwX3Byb2R1Y3RzW10gPSB7XG5cdHtcblx0IFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpLFxuXHQgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y2g5MjAwX2luZm8sXG5cdCB9LFxuXHR7fSxcbn07XG5gYGBcblxuVGhpcyBtZWFucyB0aGF0IHdoZW4gc3l6a2FsbGVyIGNvbm5lY3RzIGEgVVNCIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgVklEIGFuZCBQSUQsIHRoZSBgY2g5MjAwX2RyaXZlcmAgd2lsbCBiZSBtYXRjaGVkLCB0cmlnZ2VyaW5nIGB1c2JuZXRfcHJvYmVgLCB3aGljaCBjYWxscyBgY2g5MjAwX2JpbmRgLiBUaGUgYWRkZWQgZXJyb3ItaGFuZGxpbmcgcGF0Y2ggcGF0aHMgKndpbGwqIGJlIGV4ZWN1dGVkIVxuXG5Nb3Jlb3ZlciwgaXQncyBlYXNpbHkgdHJpZ2dlcmFibGUuIElmIHdlIGVtcGxveSBmYXVsdCBpbmplY3Rpb24sIHNwZWNpZmljYWxseSBrbWFsbG9jIG9yIGZhaWxzbGFiLCB3ZSBjYW4gaW5kdWNlIGEgYC1FTk9NRU1gIGZyb20gYGttZW1kdXBgIGluIGBjb250cm9sX3dyaXRlYC4gVGhlbiwgdGhhdCBlcnJvciB3aWxsIGJlIHByb3BhZ2F0ZWQgdGhyb3VnaCB0aGUgbmV3IGBpZmAgY29uZGl0aW9uIGluIGBjaDkyMDBfYmluZGAuXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCBsZXQncyB2ZXJpZnkgaWYgYHVzYm5ldF9wcm9iZWAgaGFuZGxlcyBgaW5mby1cdTAwM2ViaW5kYCBwcm9wZXJseSB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYHVzYm5ldF9wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjUyLjEzOTg0NDkwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1Njk4NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXR1cyA9IGluZm8tXFx1MDAzZWJpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0xNzI2PXVzYm5ldF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWRldiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKnByb2QpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTgwNy1cXHRcXHRuZXQtXFx1MDAzZW1heF9tdHUgPSBFVEhfTUFYX01UVTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTgwODpcXHRcXHRzdGF0dXMgPSBpbmZvLVxcdTAwM2ViaW5kKGRldiwgdWRldik7XFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTE4MDktXFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjUyLjM1NTU0OTI4M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNTE3MDgyNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB1c2JuZXQuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCBkcml2ZXIsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxODA4LiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgd2hlbiBJJ20gdHJhY2tpbmcgZG93biBhbiBpc3N1ZSBpbiB0aGUgVVNCIG5ldHdvcmtpbmcgc3RhY2suIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHNvbWV0aGluZyBzcGVjaWZpYyB0byBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRhdGEgdHJhbnNmZXIsIHBlcmhhcHMgcmVsYXRlZCB0byBwYWNrZXQgZnJhbWluZywgYnVmZmVyIG1hbmFnZW1lbnQsIG9yIG1heWJlIGV2ZW4gYW4gaW50ZXJydXB0IGhhbmRsaW5nIGlzc3VlLiBMZXQncyBzZWUgd2hhdCB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUgcmV2ZWFscy4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjU1Ljg3MjYzNTg3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MDUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MDU6XFx0XFx0Ly8gTk9URSBuZXQtXFx1MDAzZW5hbWUgc3RpbGwgbm90IHVzYWJsZSAuLi5cXG4xODA2OlxcdFxcdGlmIChpbmZvLVxcdTAwM2ViaW5kKSB7XFxuMTgwNzpcXHRcXHRcXHRuZXQtXFx1MDAzZW1heF9tdHUgPSBFVEhfTUFYX01UVTtcXG4xODA4OlxcdFxcdFxcdHN0YXR1cyA9IGluZm8tXFx1MDAzZWJpbmQoZGV2LCB1ZGV2KTtcXG4xODA5OlxcdFxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbjE4MTA6XFx0XFx0XFx0XFx0Z290byBvdXQxO1xcbjE4MTE6XFx0XFxuMTgxMjpcXHRcXHRcXHQvKiBoZXVyaXN0aWM6IHJlbmFtZSB0byBcXFwiZXRoJWRcXFwiIGlmIHdlIGFyZSBub3Qgc3VyZSB0aGlzIGxpbmtcXG4xODEzOlxcdFxcdFxcdCAqIGlzIHR3by1ob3N0ICh0aGVzZSBsaW5rcyBrZWVwIFxcXCJ1c2IlZFxcXCIpXFxuMTgxNDpcXHRcXHRcXHQgKi9cXG4xODE1OlxcdFxcdFxcdGlmICgoZGV2LVxcdTAwM2Vkcml2ZXJfaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGTEFHX0VUSEVSKSAhPSAwIFxcdTAwMjZcXHUwMDI2XFxuMTgxNjpcXHRcXHRcXHQgICAgIXVzYm5ldF9uZWVkc191c2JfbmFtZV9mb3JtYXQoZGV2LCBuZXQpKVxcbjE4MTc6XFx0XFx0XFx0XFx0c3Ryc2NweShuZXQtXFx1MDAzZW5hbWUsIFxcXCJldGglZFxcXCIsIHNpemVvZihuZXQtXFx1MDAzZW5hbWUpKTtcXG4xODE4OlxcdFxcdFxcdC8qIFdMQU4gZGV2aWNlcyBzaG91bGQgYWx3YXlzIGJlIG5hbWVkIFxcXCJ3bGFuJWRcXFwiICovXFxuMTgxOTpcXHRcXHRcXHRpZiAoKGRldi1cXHUwMDNlZHJpdmVyX2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkxBR19XTEFOKSAhPSAwKVxcbjE4MjA6XFx0XFx0XFx0XFx0c3Ryc2NweShuZXQtXFx1MDAzZW5hbWUsIFxcXCJ3bGFuJWRcXFwiLCBzaXplb2YobmV0LVxcdTAwM2VuYW1lKSk7XFxuMTgyMTpcXHRcXHRcXHQvKiBXV0FOIGRldmljZXMgc2hvdWxkIGFsd2F5cyBiZSBuYW1lZCBcXFwid3dhbiVkXFxcIiAqL1xcbjE4MjI6XFx0XFx0XFx0aWYgKChkZXYtXFx1MDAzZWRyaXZlcl9pbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZMQUdfV1dBTikgIT0gMClcXG4xODIzOlxcdFxcdFxcdFxcdHN0cnNjcHkobmV0LVxcdTAwM2VuYW1lLCBcXFwid3dhbiVkXFxcIiwgc2l6ZW9mKG5ldC1cXHUwMDNlbmFtZSkpO1xcbjE4MjQ6XFx0XFxuMTgyNTpcXHRcXHRcXHQvKiBkZXZpY2VzIHRoYXQgY2Fubm90IGRvIEFSUCAqL1xcbjE4MjY6XFx0XFx0XFx0aWYgKChkZXYtXFx1MDAzZWRyaXZlcl9pbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZMQUdfTk9BUlApICE9IDApXFxuMTgyNzpcXHRcXHRcXHRcXHRuZXQtXFx1MDAzZWZsYWdzIHw9IElGRl9OT0FSUDtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0XFx0aWYgKChkZXYtXFx1MDAzZWRyaXZlcl9pbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZMQUdfTk9NQVhNVFUpID09IDAgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6NTUuODcyNzgzNjAxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1Mzc2OTQ2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgRXJyb3IgSGFuZGxpbmcgaW4gdGhlIGBpbmZvLVx1MDAzZWJpbmRgIENhbGwqKlxuXG5SaWdodCwgc28gYGluZm8tXHUwMDNlYmluZGAganVzdCBmYWlsZWQsIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIG5lZ2F0aXZlLiBUaGF0IG1lYW5zIHdlIGp1bXAgdG8gYGdvdG8gb3V0MWAuIE15IGZvY3VzIGlzIG5vdyBsYXNlci1zaGFycCBvbiB3aGF0IGhhcHBlbnMgYXQgdGhlIGBvdXQxYCBsYWJlbCwgYmVjYXVzZSB0aGF0J3MgdGhlIGNsZWFudXAgcGF0aCB3ZSdyZSB0YWtpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyByZWxlYXNlZCwgd2hhdCBzdGF0ZSBpcyBiZWluZyByZXNldCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciByYWNlIGNvbmRpdGlvbnMgaW50cm9kdWNlZCBieSB0aGlzIGVhcmx5IGV4aXQuIExldCBtZSBjb25zdWx0IGxpbmVzIDE4NTAtMTg4MCwgYXMgSSBleHBlY3QgdGhlIGVycm9yIGhhbmRsaW5nIGluIGBvdXQxYCB0byBiZSBkZWZpbmVkIHRoZXJlLiBJJ20gbG9va2luZyBmb3IgbWVtb3J5IGRlYWxsb2NhdGlvbnMsIHNvY2tldCBjbG9zZXMsIGFueSBraW5kIG9mIHJlc291cmNlIGNsZWFudXAsIGFuZCBhbHNvIGFueSBvdGhlciByZWxldmFudCBlcnJvciBoYW5kbGluZyBvciBsb2dnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ0MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6NTkuNDEwNDgwNzQ5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODY3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvdXNibmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg1MDpcXHRcXHRcXHRcXHRzdGF0dXMgPSAwO1xcbjE4NTE6XFx0XFxuMTg1MjpcXHRcXHRcXHRpZiAoc3RhdHVzID09IDAgXFx1MDAyNlxcdTAwMjYgIXVzYl9jaGVja19idWxrX2VuZHBvaW50cyh1ZGV2LCBlcF9hZGRycykpXFxuMTg1MzpcXHRcXHRcXHRcXHRzdGF0dXMgPSAtRUlOVkFMO1xcbjE4NTQ6XFx0XFx0fVxcbjE4NTU6XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlc3RhdHVzKVxcbjE4NTY6XFx0XFx0XFx0c3RhdHVzID0gaW5pdF9zdGF0dXMoZGV2LCB1ZGV2KTtcXG4xODU3OlxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbjE4NTg6XFx0XFx0XFx0Z290byBvdXQzO1xcbjE4NTk6XFx0XFxuMTg2MDpcXHRcXHRpZiAoIWRldi1cXHUwMDNlcnhfdXJiX3NpemUpXFxuMTg2MTpcXHRcXHRcXHRkZXYtXFx1MDAzZXJ4X3VyYl9zaXplID0gZGV2LVxcdTAwM2VoYXJkX210dTtcXG4xODYyOlxcdFxcdGRldi1cXHUwMDNlbWF4cGFja2V0ID0gdXNiX21heHBhY2tldChkZXYtXFx1MDAzZXVkZXYsIGRldi1cXHUwMDNlb3V0KTtcXG4xODYzOlxcdFxcdGlmIChkZXYtXFx1MDAzZW1heHBhY2tldCA9PSAwKSB7XFxuMTg2NDpcXHRcXHRcXHQvKiB0aGF0IGlzIGEgYnJva2VuIGRldmljZSAqL1xcbjE4NjU6XFx0XFx0XFx0c3RhdHVzID0gLUVOT0RFVjtcXG4xODY2OlxcdFxcdFxcdGdvdG8gb3V0NDtcXG4xODY3OlxcdFxcdH1cXG4xODY4OlxcdFxcbjE4Njk6XFx0XFx0LyogdGhpcyBmbGFncyB0aGUgZGV2aWNlIGZvciB1c2VyIHNwYWNlICovXFxuMTg3MDpcXHRcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0LVxcdTAwM2VkZXZfYWRkcikpXFxuMTg3MTpcXHRcXHRcXHRldGhfaHdfYWRkcl9yYW5kb20obmV0KTtcXG4xODcyOlxcdFxcbjE4NzM6XFx0XFx0aWYgKChkZXYtXFx1MDAzZWRyaXZlcl9pbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZMQUdfV0xBTikgIT0gMClcXG4xODc0OlxcdFxcdFxcdFNFVF9ORVRERVZfREVWVFlQRShuZXQsIFxcdTAwMjZ3bGFuX3R5cGUpO1xcbjE4NzU6XFx0XFx0aWYgKChkZXYtXFx1MDAzZWRyaXZlcl9pbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZMQUdfV1dBTikgIT0gMClcXG4xODc2OlxcdFxcdFxcdFNFVF9ORVRERVZfREVWVFlQRShuZXQsIFxcdTAwMjZ3d2FuX3R5cGUpO1xcbjE4Nzc6XFx0XFxuMTg3ODpcXHRcXHQvKiBpbml0aWFsaXplIG1heCByeF9xbGVuIGFuZCB0eF9xbGVuICovXFxuMTg3OTpcXHRcXHR1c2JuZXRfdXBkYXRlX21heF9xbGVuKGRldik7XFxuMTg4MDpcXHRcXG4xODgxOlxcdFxcdGlmIChkZXYtXFx1MDAzZWNhbl9kbWFfc2cgXFx1MDAyNlxcdTAwMjYgIShpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZMQUdfU0VORF9aTFApIFxcdTAwMjZcXHUwMDI2XFxuMTg4MjpcXHRcXHRcXHQhKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkxBR19NVUxUSV9QQUNLRVQpKSB7XFxuMTg4MzpcXHRcXHRcXHRkZXYtXFx1MDAzZXBhZGRpbmdfcGt0ID0ga3phbGxvYygxLCBHRlBfS0VSTkVMKTtcXG4xODg0OlxcdFxcdFxcdGlmICghZGV2LVxcdTAwM2VwYWRkaW5nX3BrdCkge1xcbjE4ODU6XFx0XFx0XFx0XFx0c3RhdHVzID0gLUVOT01FTTtcXG4xODg2OlxcdFxcdFxcdFxcdGdvdG8gb3V0NDtcXG4xODg3OlxcdFxcdFxcdH1cXG4xODg4OlxcdFxcdH1cXG4xODg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MTo1OS40MTA2MjEwNjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI1NTg0MTIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBVU0JuZXQgUHJvYmUgRXJyb3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgYHVzYm5ldF9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBkcml2ZXIgaGFuZGxlcyBwb3RlbnRpYWwgZmFpbHVyZXMgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGNsZWFudXAgbGFiZWxzLCBwcm9iYWJseSBpbiB0aGUgdmljaW5pdHkgb2YgbGluZXMgMTkyMCB0byAxOTUwLiBUaGF0IHNlY3Rpb24gaXMgdXN1YWxseSB3aGVyZSB0aGV5IGRlZmluZSB0aG9zZSBlcnJvciBoYW5kbGluZyBsYWJlbHMsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIHdoaWNoIHBhcnRzIG9mIHRoZSBpbml0aWFsaXphdGlvbiBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgY2xlYW5lZCB1cCBpZiBzb21ldGhpbmcgZ29lcyBzaWRld2F5cy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBvcmRlciBvZiByZXNvdXJjZSBhbGxvY2F0aW9uIHRvIHNlZSB3aGljaCBvcmRlciB0aGV5IGFwcGVhci4gVGhpcyBpcyBjcml0aWNhbCwgc2luY2UgYSBtaXNzZWQgY2xlYW51cCBjb3VsZCBsZWFkIHRvIHJlc291cmNlIGxlYWtzLCB3aGljaCBhcmUgc29tZXRoaW5nIEkgYW0gcXVpdGUgZmFtaWxpYXIgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjAxLjY2NjQ2NTQ1MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MTU6XFx0XFx0aWYgKGluZm8tXFx1MDAzZXVuYmluZClcXG4xOTE2OlxcdFxcdFxcdGluZm8tXFx1MDAzZXVuYmluZChkZXYsIHVkZXYpO1xcbjE5MTc6XFx0b3V0MTpcXG4xOTE4OlxcdFxcdC8qIHN1YmRyaXZlcnMgbXVzdCB1bmRvIGFsbCB0aGV5IGRpZCBpbiBiaW5kKCkgaWYgdGhleVxcbjE5MTk6XFx0XFx0ICogZmFpbCBpdCwgYnV0IHdlIG1heSBmYWlsIGxhdGVyIGFuZCBhIGRlZmVycmVkIGtldmVudFxcbjE5MjA6XFx0XFx0ICogbWF5IHRyaWdnZXIgYW4gZXJyb3IgcmVzdWJtaXR0aW5nIGl0c2VsZiBhbmQsIHdvcnNlLFxcbjE5MjE6XFx0XFx0ICogc2NoZWR1bGUgYSB0aW1lci4gU28gd2Uga2lsbCBpdCBhbGwganVzdCBpbiBjYXNlLlxcbjE5MjI6XFx0XFx0ICovXFxuMTkyMzpcXHRcXHR1c2JuZXRfbWFya19nb2luZ19hd2F5KGRldik7XFxuMTkyNDpcXHRcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZkZXYtXFx1MDAzZWtldmVudCk7XFxuMTkyNTpcXHRcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2ZGV2LVxcdTAwM2VkZWxheSk7XFxuMTkyNjpcXHRcXHRmcmVlX25ldGRldihuZXQpO1xcbjE5Mjc6XFx0b3V0OlxcbjE5Mjg6XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4xOTI5OlxcdH1cXG4xOTMwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9wcm9iZSk7XFxuMTkzMTpcXHRcXG4xOTMyOlxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuMTkzMzpcXHRcXG4xOTM0OlxcdC8qXFxuMTkzNTpcXHQgKiBzdXNwZW5kIHRoZSB3aG9sZSBkcml2ZXIgYXMgc29vbiBhcyB0aGUgZmlyc3QgaW50ZXJmYWNlIGlzIHN1c3BlbmRlZFxcbjE5MzY6XFx0ICogcmVzdW1lIG9ubHkgd2hlbiB0aGUgbGFzdCBpbnRlcmZhY2UgaXMgcmVzdW1lZFxcbjE5Mzc6XFx0ICovXFxuMTkzODpcXHRcXG4xOTM5OlxcdGludCB1c2JuZXRfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXFxuMTk0MDpcXHR7XFxuMTk0MTpcXHRcXHRzdHJ1Y3QgdXNibmV0XFx0XFx0KmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuMTk0MjpcXHRcXG4xOTQzOlxcdFxcdGlmICghZGV2LVxcdTAwM2VzdXNwZW5kX2NvdW50KyspIHtcXG4xOTQ0OlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmRldi1cXHUwMDNldHhxLmxvY2spO1xcbjE5NDU6XFx0XFx0XFx0LyogZG9uJ3QgYXV0b3N1c3BlbmQgd2hpbGUgdHJhbnNtaXR0aW5nICovXFxuMTk0NjpcXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2V0eHEucWxlbiBcXHUwMDI2XFx1MDAyNiBQTVNHX0lTX0FVVE8obWVzc2FnZSkpIHtcXG4xOTQ3OlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlc3VzcGVuZF9jb3VudC0tO1xcbjE5NDg6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZkZXYtXFx1MDAzZXR4cS5sb2NrKTtcXG4xOTQ5OlxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTk1MDpcXHRcXHRcXHR9IGVsc2Uge1xcbjE5NTE6XFx0XFx0XFx0XFx0c2V0X2JpdChFVkVOVF9ERVZfQVNMRUVQLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuMTk1MjpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmRldi1cXHUwMDNldHhxLmxvY2spO1xcbjE5NTM6XFx0XFx0XFx0fVxcbjE5NTQ6XFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDI6MDEuNjY2NjA5MDAxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk5OTI1MjA5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpczogVVNCIENIOTIwMCBFdGhlcm5ldCBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgdXNibmV0X3Byb2JlYCBoYW5kbGVzIGVycm9ycyBmcm9tIGBpbmZvLVx1MDAzZWJpbmRgIGNsZWFubHksIHNvIHRoYXQncyBnb29kLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlIGBjaDkyMDBgIGRyaXZlci4gSSdsbCBzdGFydCBieSBjaGVja2luZyBgQ09ORklHX1VTQl9ORVRfQ0g5MjAwYCBpbiB0aGUga2VybmVsIGNvbmZpZy5cblxuTG9va2luZyBhdCBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgLCBJIHNlZSB0aGF0IGBVU0JfTkVUX0NIOTIwMGAgZGVwZW5kcyBvbiBgVVNCX1VTQk5FVGAsIHdoaWNoIGluIHR1cm4gc2VsZWN0cyBgTUlJYC4gVGhlbiwgdGhlcmUncyBgVVNCX05FVF9EUklWRVJTYCwgd2hpY2ggZGVwZW5kcyBvbiBib3RoIGBVU0JgIGFuZCBgTkVUYC4gU28sIHRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmUgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfQ0g5MjAwYCwgYFVTQmAsIGFuZCBgTkVUYC4gSG93ZXZlciwgbGlzdGluZyBgVVNCX05FVF9DSDkyMDBgLCBgVVNCX1VTQk5FVGAsIGFuZCBgVVNCX05FVF9EUklWRVJTYCAoYWxvbmcgd2l0aCBgVVNCYCkgc2hvdWxkIHN1ZmZpY2UsIGFzIGBzZWxlY3QgTUlJYCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZz8gTGV0J3MgZXZhbHVhdGUgaXQuIEZpcnN0LCBpcyBpdCByZWFjaGFibGU/IFllcywgVVNCIGRyaXZlcnMgYXJlIHBlcmZlY3RseSByZWFjaGFibGUgdGhyb3VnaCB2aXJ0dWFsIGJ1c2VzLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgc3l6a2FsbGVyIHNldHVwIGVtdWxhdGVzIFVTQiBkZXZpY2VzIHZpYSBEdW1teSBIQ0QgYW5kIFJhdyBHYWRnZXQsIGFuZCB0aGlzIGlzIGV4cGxpY2l0bHkgbWVudGlvbmVkIGFzIGEgcmVhY2hhYmxlIGRyaXZlciB0eXBlLlxuXG5Eb2VzIGl0IGZhbGwgaW50byBhbnkgbmVnYXRpdmUgY3JpdGVyaWE/IE5vLiBJdCdzIG5vdCBkb2N1bWVudGF0aW9uLCBsb2dnaW5nLCBvciBidWlsZCBzeXN0ZW0gY29kZS4gSXQncyBub3QgYSBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIEFTSUMgdGhhdCBpc24ndCBlbXVsYXRlZC4gQW5kIGl0J3MgZGVmaW5pdGVseSB0aGUgcHJvYmUgcGF0aCwgbm90IHRoZSBkcml2ZXIgdGVhcmRvd24uIFNvLCB0aGUgYC5iaW5kYC9wcm9iZSBwYXRoIGlzIGV4ZWN1dGVkLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBgY2g5MjAwX2JpbmRgIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZS4gVVNCIGdhZGdldCBlbXVsYXRpb24gZHluYW1pY2FsbHkgcGx1Z3MgYW5kIHVucGx1Z3MgVVNCIGRldmljZXMgZHVyaW5nIHN5emthbGxlciBmdXp6aW5nLiBUaGUgYmluZC9wcm9iZSBwYXRoIHdpbGwgYmUgZXhlY3V0ZWQgZXZlcnkgdGltZSBzeXprYWxsZXIgc2VuZHMgYSBVU0IgYXR0YWNoIHJlcXVlc3QgZm9yIFZJRCAweDFBODYgUElEIDB4RTA5Mi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBjaDkyMDBfYmluZGAgaXMgcmVhY2hhYmxlLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gWWVzLCBkZXNwaXRlIGJlaW5nIGBzdGF0aWNgLCBgY2g5MjAwX2JpbmRgICppcyogZGVmaW5pdGVseSBhIHN5bWJvbCBpbiB0aGUga2VybmVsIHN5bWJvbCB0YWJsZSBiZWNhdXNlIGl0J3MgYSBmdW5jdGlvbiBwb2ludGVyIGluIGEgYHN0cnVjdCBkcml2ZXJfaW5mb2AsIGFuZCB0aHVzIGNhbm5vdCBiZSBpbmxpbmVkLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBndWlkZWxpbmVzIG9uIFwiRXh0cmFjdGluZyBGb2N1c1N5bWJvbHMuXCIgSSBuZWVkIHRvIGF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBhbmQgdGFyZ2V0IHNwZWNpZmljIGxvZ2ljLiBUaGUgc3BlY2lmaWMgZnVuY3Rpb24gbW9kaWZpZWQgaXMgYGNoOTIwMF9iaW5kYC4gQ2hlY2tpbmcgdGhlIGRpZmYsIGl0J3MgY2xlYXIgdGhhdCBvbmx5IGBjaDkyMDBfYmluZGAgaXMgdG91Y2hlZC5cblxuRG91YmxlLWNoZWNraW5nIHRoZSBjb25maWdzLCBJIGNhbiBjb25maXJtIGBVU0JfTkVUX0NIOTIwMGAgYW5kIGBVU0JfVVNCTkVUYCBhcmUgcmVxdWlyZWQsIGFsb25nIHdpdGggYFVTQmAgYW5kIGBORVRgLiBUaGUgYHNlbGVjdCBNSUlgIGlzIGF1dG9tYXRpYy5cblxuVG8gY29uZmlybSB0aGVyZSBpcyBubyBzdWJ0bGUgcmVhc29uIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCwgSSBhbSBkb3VibGUtY2hlY2tpbmcgdGhhdCBVU0IgZW11bGF0aW9uIGlzIHN1cHBvcnRlZCBpbiBRRU1VLCBhbmQgdGhhdCBgY2g5MjAwYCBkb2VzIG5vdCByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJpbmcgYSBwaHlzaWNhbCBBU0lDLiBBbGwgY2hlY2tzIG91dCwgYW5kIFVTQiBnYWRnZXQgYW5kIGR1bW15X2hjZCBhcmUgc3BlY2lmaWNhbGx5IGxpc3RlZCBhcyBzdXBwb3J0ZWQuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5NeSBmb2N1cyBzeW1ib2wgaXMgYGNoOTIwMF9iaW5kYC5cblxuQ29uZmlnczogYFVTQl9ORVRfQ0g5MjAwYCwgYFVTQl9VU0JORVRgLlxuXG5UaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgZm9yIGBjb250cm9sX3dyaXRlKClgIGNhbGxzIGluIGBjaDkyMDBfYmluZCgpYCwgd2hpY2ggbm93IGVhcmx5IHJldHVybnMgb24gZmFpbHVyZSBkdXJpbmcgZGV2aWNlIGJpbmRpbmcuIFRoZSBkcml2ZXIgaXMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBVU0IgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gRHVtbXkgSENEKSB3aXRoIGRldmljZSBJRCAweDFBODY6MHhFMDkyLiBGdXp6aW5nIGNhbiB0cmlnZ2VyIGFsbG9jYXRpb24vVVNCIGNvbW11bmljYXRpb24gZmFpbHVyZXMgdG8gZXhlcmNpc2UgdGhlc2UgbmV3bHkgYWRkZWQgZXJyb3IgcmV0dXJuIHBhdGhzIGFuZCB2ZXJpZnkgcHJvcGVyIGNsZWFudXAuXG5cbk5vdywgbGV0J3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTkyLCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MjoxMS42NTkxMzI3NzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM5OTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9DSDkyMDBcIixcbiAgICBcIlVTQl9VU0JORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaDkyMDBfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgcmV0dXJuIGNoZWNrcyBmb3IgY29udHJvbF93cml0ZSgpIGNhbGxzIGluIGNoOTIwMF9iaW5kKCkgZHVyaW5nIFVTQiBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFRoZSBDSDkyMDAgVVNCIGV0aGVybmV0IGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4sIFVTQiBSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKSBtYXRjaGluZyBpdHMgVVNCIFZJRC9QSUQuIEZ1enppbmcgd2l0aCBVU0IgZmF1bHQgaW5qZWN0aW9uIG9yIHVuZXhwZWN0ZWQgY29udHJvbCByZXNwb25zZXMgY2FuIHRlc3QgdGhlc2UgbmV3bHkgaW50cm9kdWNlZCBlcnJvciBleGl0IHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfQ0g5MjAwXCIsXG4gICAgXCJVU0JfVVNCTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2g5MjAwX2JpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIHJldHVybiBjaGVja3MgZm9yIGNvbnRyb2xfd3JpdGUoKSBjYWxscyBpbiBjaDkyMDBfYmluZCgpIGR1cmluZyBVU0IgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGUgQ0g5MjAwIFVTQiBldGhlcm5ldCBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgZXhlcmNpc2VkIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBVU0IgUmF3IEdhZGdldCAvIGR1bW15X2hjZCkgbWF0Y2hpbmcgaXRzIFVTQiBWSUQvUElELiBGdXp6aW5nIHdpdGggVVNCIGZhdWx0IGluamVjdGlvbiBvciB1bmV4cGVjdGVkIGNvbnRyb2wgcmVzcG9uc2VzIGNhbiB0ZXN0IHRoZXNlIG5ld2x5IGludHJvZHVjZWQgZXJyb3IgZXhpdCBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDI6MTEuNzQzNTQwNzI0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTE0NzkyMzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjExLjc0NDE3NDY3NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5MTQ3MjgzMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHJldHVybiB2YWx1ZSBlcnJvciBjaGVja3MgZm9yIGNhbGxzIHRvIGNvbnRyb2xfd3JpdGUoKSBpbiBjaDkyMDBfYmluZCgpLiBUaGUgZGF0YSBidWZmZXIgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSBpcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byBlYWNoIGNhbGwsIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSB1cG9uIGZhaWx1cmUgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIGNvbnRyb2wgZmxvdyBpcyBub3QgYWx0ZXJlZCBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzUyZjFhODEwZGYzYzI5NmM5N2I1MzRiYzU2YmVkZDMwZWQ4NDIwYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDIzOjQwOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG5pbmRleCBhMjA2ZmZhNzZmMWI5Li5hYjNjZDM5MDJlZDcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbkBAIC0zNjAsMzIgKzM2MCw0NCBAQCBzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRkYXRhWzFdID0gMHgwRjtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHhBMDtcbiBcdGRhdGFbMV0gPSAweDkwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHgzMDtcbiBcdGRhdGFbMV0gPSAweDAwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4MTc7XG4gXHRkYXRhWzFdID0gMHhEODtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcbiBcdFx0XHQgICAgICAgZGF0YSwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHQvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi9cbiBcdGRhdGFbMF0gPSAweDAxO1xuIFx0ZGF0YVsxXSA9IDB4MDA7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxuIFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldHZhbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweDVGO1xuIFx0ZGF0YVsxXSA9IDB4MEQ7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxuIFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldHZhbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xuIFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cdTAwM2VuZXQsIGFkZHIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDI6MTEuNzQ0MTc2NDc0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc5MDY5NjA4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBVU0IgQ0g5MjAwIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBJIG5lZWQgdG8gYW5hbHl6ZSBpcyByZWxhdGVkIHRvIHRoZSBVU0IgQ0g5MjAwIGRyaXZlci4gSSByZW1lbWJlciB0aGF0IHRoZSByZWxldmFudCBzb3VyY2UgY29kZSB3aWxsIGJlIGxvY2F0ZWQgaW4gdGhlIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUuIEdpdmVuIHdoYXQgSSdtIGxvb2tpbmcgYXQsIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY29kZSBhcm91bmQgbGluZSAzNjAgaW4gdGhhdCBmaWxlLiBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhhdCBzZWN0aW9uIGludG8gdmlldyBhbmQgZGl2ZSBpbi4gVGltZSB0byBnZXQgZG93biB0byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDI6MTkuNjUxMTQwODM2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzA6XFx0XFx0ZGF0YVsyXSA9IG1hY19hZGRyWzNdO1xcbiAzMzE6XFx0XFx0ZGF0YVszXSA9IG1hY19hZGRyWzJdO1xcbiAzMzI6XFx0XFx0ZGF0YVs0XSA9IG1hY19hZGRyWzFdO1xcbiAzMzM6XFx0XFx0ZGF0YVs1XSA9IG1hY19hZGRyWzBdO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDMzOTpcXHR7XFxuIDM0MDpcXHRcXHRpbnQgcmV0dmFsID0gMDtcXG4gMzQxOlxcdFxcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcXG4gMzQyOlxcdFxcdHU4IGFkZHJbRVRIX0FMRU5dO1xcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRyZXR2YWwgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xcbiAzNDU6XFx0XFx0aWYgKHJldHZhbClcXG4gMzQ2OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGRldi1cXHUwMDNlbWlpLmRldiA9IGRldi1cXHUwMDNlbmV0O1xcbiAzNDk6XFx0XFx0ZGV2LVxcdTAwM2VtaWkubWRpb19yZWFkID0gY2g5MjAwX21kaW9fcmVhZDtcXG4gMzUwOlxcdFxcdGRldi1cXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcXG4gMzUxOlxcdFxcdGRldi1cXHUwMDNlbWlpLnJlZ19udW1fbWFzayA9IDB4MWY7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdGRldi1cXHUwMDNlbWlpLnBoeV9pZF9tYXNrID0gMHgxZjtcXG4gMzU0OlxcdFxcbiAzNTU6XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX210dSA9IGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtdHUgKyBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbiAzNTY6XFx0XFx0ZGV2LVxcdTAwM2VyeF91cmJfc2l6ZSA9IDI0ICogNjQgKyAxNjtcXG4gMzU3OlxcdFxcdG1paV9ud2F5X3Jlc3RhcnQoXFx1MDAyNmRldi1cXHUwMDNlbWlpKTtcXG4gMzU4OlxcdFxcbiAzNTk6XFx0XFx0ZGF0YVswXSA9IDB4MDE7XFxuIDM2MDpcXHRcXHRkYXRhWzFdID0gMHgwRjtcXG4gMzYxOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcXG4gMzYyOlxcdFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzNjM6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIDM2NDpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNjU6XFx0XFxuIDM2NjpcXHRcXHRkYXRhWzBdID0gMHhBMDtcXG4gMzY3OlxcdFxcdGRhdGFbMV0gPSAweDkwO1xcbiAzNjg6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcXG4gMzY5OlxcdFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzNzA6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIDM3MTpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRkYXRhWzBdID0gMHgzMDtcXG4gMzc0OlxcdFxcdGRhdGFbMV0gPSAweDAwO1xcbiAzNzU6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXFxuIDM3NjpcXHRcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzc3OlxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiAzNzg6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzc5OlxcdFxcbiAzODA6XFx0XFx0ZGF0YVswXSA9IDB4MTc7XFxuIDM4MTpcXHRcXHRkYXRhWzFdID0gMHhEODtcXG4gMzgyOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcXG4gMzgzOlxcdFxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzODQ6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIDM4NTpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzODY6XFx0XFxuIDM4NzpcXHRcXHQvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi9cXG4gMzg4OlxcdFxcdGRhdGFbMF0gPSAweDAxO1xcbiAzODk6XFx0XFx0ZGF0YVsxXSA9IDB4MDA7XFxuIDM5MDpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxcbiAzOTE6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM5MjpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gMzkzOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM5NDpcXHRcXG4gMzk1OlxcdFxcdGRhdGFbMF0gPSAweDVGO1xcbiAzOTY6XFx0XFx0ZGF0YVsxXSA9IDB4MEQ7XFxuIDM5NzpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxcbiAzOTg6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM5OTpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gNDAwOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xcbiA0MDM6XFx0XFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cXHUwMDNlbmV0LCBhZGRyKTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDA2OlxcdH1cXG4gNDA3OlxcdFxcbiA0MDg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjaDkyMDBfaW5mbyA9IHtcXG4gNDA5OlxcdFxcdC5kZXNjcmlwdGlvbiA9IFxcXCJDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjE5LjY1MTIyODUwNloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MTM1NDQ0Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2g6IGBjaDkyMDBfYmluZGAgRXJyb3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgZXJyb3IgY2hlY2tpbmcgd2l0aGluIHRoZSBgY2g5MjAwX2JpbmRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGNvbnRyb2xfd3JpdGVgIGlzIGNhbGxlZCByZXBlYXRlZGx5IHdpdGhpbiBgY2g5MjAwX2JpbmRgLiBQcmV2aW91c2x5LCBub25lIG9mIHRoZXNlIGNhbGxzJyByZXR1cm4gdmFsdWVzIHdlcmUgYmVpbmcgZXhhbWluZWQsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgb3ZlcnNpZ2h0LiBUaGUgcGF0Y2ggY2xldmVybHkgYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgc2ltcGxlIGNoZWNrIGFmdGVyIGVhY2ggYGNvbnRyb2xfd3JpdGVgIGNhbGw6IGBpZiAocmV0dmFsIFx1MDAzYyAwKSByZXR1cm4gcmV0dmFsO2AuIFRoaXMgaXMgYSBjbGFzc2ljLCBidXQgb2Z0ZW4gb3Zlcmxvb2tlZCwgZGVmZW5zaXZlIHByb2dyYW1taW5nIHRlY2huaXF1ZS4gSXQncyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiByb2J1c3QgY29kZSwgYW5kIGl0cyBpbmNsdXNpb24gaGVyZSBpcyBhIHdlbGNvbWUgaW1wcm92ZW1lbnQuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gKmluc2lkZSogdGhvc2UgYGNvbnRyb2xfd3JpdGVgIGNhbGxzLiBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgY29udHJvbF93cml0ZWAgaXRzZWxmLCBhbmQgYWxzbyBgZ2V0X21hY19hZGRyZXNzYCwgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIGFuZCB0aGUgbGlrZWx5IGltcGFjdCBvZiB0aGVzZSBhZGRlZCBjaGVja3MuIFdlJ3JlIGVzc2VudGlhbGx5IGhhcmRlbmluZyB0aGUgZHJpdmVyIGhlcmUsIHNvIEkgbmVlZCB0byBhc3Nlc3MgaG93IGVmZmVjdGl2ZSB0aGUgYWRkZWQgZXJyb3IgY2hlY2tpbmcgaXMsIGFuZCB3aGF0IGZhaWx1cmUgc2NlbmFyaW9zIGFyZSBiZWluZyBhZGRyZXNzZWQuIEl0J3MgdGltZSB0byBkZWx2ZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjI2Ljc4NjY3NjA2NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk1OlxcdFxcbiAyOTY6XFx0XFx0aWYgKHVubGlrZWx5KHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgcnhfb3ZlcmhlYWQpKSB7XFxuIDI5NzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldiwgXFxcInVuZXhwZWN0ZWQgdGlueSByeCBmcmFtZVxcXFxuXFxcIik7XFxuIDI5ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjk5OlxcdFxcdH1cXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0bGVuID0gKHNrYi1cXHUwMDNlZGF0YVtza2ItXFx1MDAzZWxlbiAtIDE2XSB8IHNrYi1cXHUwMDNlZGF0YVtza2ItXFx1MDAzZWxlbiAtIDE1XSBcXHUwMDNjXFx1MDAzYyA4KTtcXG4gMzAyOlxcdFxcdHNrYl90cmltKHNrYiwgbGVuKTtcXG4gMzAzOlxcdFxcbiAzMDQ6XFx0XFx0cmV0dXJuIDE7XFxuIDMwNTpcXHR9XFxuIDMwNjpcXHRcXG4gMzA3OlxcdHN0YXRpYyBpbnQgZ2V0X21hY19hZGRyZXNzKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciAqZGF0YSlcXG4gMzA4OlxcdHtcXG4gMzA5OlxcdFxcdGludCBlcnIgPSAwO1xcbiAzMTA6XFx0XFx0dW5zaWduZWQgY2hhciBtYWNfYWRkclsweDA2XTtcXG4gMzExOlxcdFxcdGludCByZF9tYWNfbGVuID0gMDtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcIiVzOlxcXFxuXFxcXHR1c2JuZXQgVklEOiUweCBQSUQ6JTB4XFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4gMzE0OlxcdFxcdFxcdCAgIGxlMTZfdG9fY3B1KGRldi1cXHUwMDNldWRldi1cXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvciksXFxuIDMxNTpcXHRcXHRcXHQgICBsZTE2X3RvX2NwdShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7XFxuIDMxNjpcXHRcXG4gMzE3OlxcdFxcdG1lbXNldChtYWNfYWRkciwgMCwgc2l6ZW9mKG1hY19hZGRyKSk7XFxuIDMxODpcXHRcXHRyZF9tYWNfbGVuID0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLFxcbiAzMTk6XFx0XFx0XFx0XFx0XFx0ICBNQUNfUkVHX1NUQVRJT05fTCwgbWFjX2FkZHIsIDB4MDIsXFxuIDMyMDpcXHRcXHRcXHRcXHRcXHQgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDMyMTpcXHRcXHRyZF9tYWNfbGVuICs9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCwgTUFDX1JFR19TVEFUSU9OX00sXFxuIDMyMjpcXHRcXHRcXHRcXHRcXHQgICBtYWNfYWRkciArIDIsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDMyMzpcXHRcXHRyZF9tYWNfbGVuICs9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCwgTUFDX1JFR19TVEFUSU9OX0gsXFxuIDMyNDpcXHRcXHRcXHRcXHRcXHQgICBtYWNfYWRkciArIDQsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDMyNTpcXHRcXHRpZiAocmRfbWFjX2xlbiAhPSBFVEhfQUxFTilcXG4gMzI2OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdGRhdGFbMF0gPSBtYWNfYWRkcls1XTtcXG4gMzI5OlxcdFxcdGRhdGFbMV0gPSBtYWNfYWRkcls0XTtcXG4gMzMwOlxcdFxcdGRhdGFbMl0gPSBtYWNfYWRkclszXTtcXG4gMzMxOlxcdFxcdGRhdGFbM10gPSBtYWNfYWRkclsyXTtcXG4gMzMyOlxcdFxcdGRhdGFbNF0gPSBtYWNfYWRkclsxXTtcXG4gMzMzOlxcdFxcdGRhdGFbNV0gPSBtYWNfYWRkclswXTtcXG4gMzM0OlxcdFxcbiAzMzU6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzM2OlxcdH1cXG4gMzM3OlxcdFxcbiAzMzg6XFx0c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbiAzMzk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MjoyNi43ODY3NTM2NjRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzc3Mzk3NzA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSdzIFBvdGVudGlhbCBJc3N1ZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gZm9jdXNpbmcgb24gYGdldF9tYWNfYWRkcmVzc2AuIEkgc2VlIGEgYG1lbXNldGAgY2FsbCByaWdodCBhd2F5OiBgbWVtc2V0KG1hY19hZGRyLCAwLCBzaXplb2YobWFjX2FkZHIpKTtgLiBUaGF0J3MgZ29vZCDigJMgaW5pdGlhbGl6aW5nIHRoZSBNQUMgYWRkcmVzcyBidWZmZXIgaXMgYWx3YXlzIGEgc29saWQgcHJhY3RpY2UuIE5vdywgSSdtIHNoaWZ0aW5nIG15IGF0dGVudGlvbiB0byBgY2g5MjAwX2JpbmRgLiBUaGUgY3J1Y2lhbCBjaGFuZ2UgaXMgdGhhdCB0aGUgYGNvbnRyb2xfd3JpdGVgIGNhbGwgbm93IGluY2x1ZGVzIGFuIGVycm9yIGNoZWNrOiBgaWYgKHJldHZhbCBcdTAwM2MgMCkgcmV0dXJuIHJldHZhbDtgLlxuXG5CZWZvcmUgdGhpcyBwYXRjaCwgd2UgaGFkIGEgcG90ZW50aWFsIGJ1ZzogYGNvbnRyb2xfd3JpdGVgIGNvdWxkIGZhaWwsIGJ1dCB0aGUgY29kZSB3b3VsZCBibGluZGx5IGNvbnRpbnVlIHRvIGNhbGwgYGdldF9tYWNfYWRkcmVzc2AgYW5kIGBldGhfaHdfYWRkcl9zZXRgLiBOb3csIHdpdGggdGhlIGNoZWNrLCBpZiBgY29udHJvbF93cml0ZWAgcmV0dXJucyBhbiBlcnJvciwgdGhlIGZ1bmN0aW9uIHdpbGwgYmFpbCBvdXQgZWFybHkuIFRoaXMgYmVncyB0aGUgcXVlc3Rpb246IGRvZXMgYGNoOTIwMF9iaW5kYCBsZWFrIG1lbW9yeSBvciB1c2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/XG5cbkknbSBub3RpbmcgdGhhdCB0aGUgYGFkZHJgIHZhcmlhYmxlIGluIGBjaDkyMDBfYmluZGAgaXMgZGVjbGFyZWQgYXMgYHU4IGFkZHJbRVRIX0FMRU5dO2Agd2hpY2ggaXMgZ29vZC4gSG93ZXZlciwgaWYgYGNvbnRyb2xfd3JpdGVgIGZhaWxzLCB0aG9zZSBjYWxscyB0byBgZ2V0X21hY19hZGRyZXNzYCBhbmQgYGV0aF9od19hZGRyX3NldGAgYXJlICpjb21wbGV0ZWx5KiBza2lwcGVkLiBUaGUga2V5IGlzIG5vdyB0aGF0IGBhZGRyYCBpcyBub3QgdXNlZCBpbiB0aGUgZmFpbHVyZSBjYXNlIVxuXG5TbywgdGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGFkZHJgIGlzICpvbmx5KiB1c2VkIGlmIGBjb250cm9sX3dyaXRlYCBzdWNjZWVkcy4gVGhpcyBjaGFuZ2UgcHJldmVudHMgYSBwb3NzaWJsZSB1c2UtYWZ0ZXItZmFpbHVyZSBidWcuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGNvbnRyb2xfd3JpdGVgIGl0c2VsZiB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MjozMC41NjA3MzQwOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcbiAgMzE6XFx0I2RlZmluZSBSRVFVRVNUX1JFQURcXHQweDBFXFxuICAzMjpcXHQjZGVmaW5lIFJFUVVFU1RfV1JJVEVcXHQweDBGXFxuICAzMzpcXHRcXG4gIDM0OlxcdC8qIEFkZHJlc3Mgc3BhY2U6XFxuICAzNTpcXHQgKiAwMC02MyA6IE1JSVxcbiAgMzY6XFx0ICogNjQtMTI4OiBNQUNcXG4gIDM3OlxcdCAqXFxuICAzODpcXHQgKiBOb3RlOiBhbGwgYWNjZXNzZXMgbXVzdCBiZSAxNi1iaXRcXG4gIDM5OlxcdCAqL1xcbiAgNDA6XFx0XFxuICA0MTpcXHQjZGVmaW5lIE1BQ19SRUdfQ1RSTCA2NFxcbiAgNDI6XFx0I2RlZmluZSBNQUNfUkVHX1NUQVRVUyA2NlxcbiAgNDM6XFx0I2RlZmluZSBNQUNfUkVHX0lOVEVSUlVQVF9NQVNLIDY4XFxuICA0NDpcXHQjZGVmaW5lIE1BQ19SRUdfUEhZX0NPTU1BTkQgNzBcXG4gIDQ1OlxcdCNkZWZpbmUgTUFDX1JFR19QSFlfREFUQSA3MlxcbiAgNDY6XFx0I2RlZmluZSBNQUNfUkVHX1NUQVRJT05fTCA3NFxcbiAgNDc6XFx0I2RlZmluZSBNQUNfUkVHX1NUQVRJT05fTSA3NlxcbiAgNDg6XFx0I2RlZmluZSBNQUNfUkVHX1NUQVRJT05fSCA3OFxcbiAgNDk6XFx0I2RlZmluZSBNQUNfUkVHX0hBU0hfTCA4MFxcbiAgNTA6XFx0I2RlZmluZSBNQUNfUkVHX0hBU0hfTTEgODJcXG4gIDUxOlxcdCNkZWZpbmUgTUFDX1JFR19IQVNIX00yIDg0XFxuICA1MjpcXHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9IIDg2XFxuICA1MzpcXHQjZGVmaW5lIE1BQ19SRUdfVEhSRVNIT0xEIDg4XFxuICA1NDpcXHQjZGVmaW5lIE1BQ19SRUdfRklGT19ERVBUSCA5MFxcbiAgNTU6XFx0I2RlZmluZSBNQUNfUkVHX1BBVVNFIDkyXFxuICA1NjpcXHQjZGVmaW5lIE1BQ19SRUdfRkxPV19DT05UUk9MIDk0XFxuICA1NzpcXHRcXG4gIDU4OlxcdC8qIENvbnRyb2wgcmVnaXN0ZXIgYml0c1xcbiAgNTk6XFx0ICpcXG4gIDYwOlxcdCAqIE5vdGU6IGJpdHMgMTMgYW5kIDE1IGFyZSByZXNlcnZlZFxcbiAgNjE6XFx0ICovXFxuICA2MjpcXHQjZGVmaW5lIExPT1BCQUNLXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMTQpXFxuICA2MzpcXHQjZGVmaW5lIEJBU0UxMDBYXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMTIpXFxuICA2NDpcXHQjZGVmaW5lIE1CUFNfMTBcXHRcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxMSlcXG4gIDY1OlxcdCNkZWZpbmUgRFVQTEVYX01PREVcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxMClcXG4gIDY2OlxcdCNkZWZpbmUgUEFVU0VfRlJBTUVcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA5KVxcbiAgNjc6XFx0I2RlZmluZSBQUk9NSVNDVU9VU1xcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDgpXFxuICA2ODpcXHQjZGVmaW5lIE1VTFRJQ0FTVFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDcpXFxuICA2OTpcXHQjZGVmaW5lIEJST0FEQ0FTVFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDYpXFxuICA3MDpcXHQjZGVmaW5lIEhBU0hcXHRcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA1KVxcbiAgNzE6XFx0I2RlZmluZSBBUFBFTkRfUEFEXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNClcXG4gIDcyOlxcdCNkZWZpbmUgQVBQRU5EX0NSQ1xcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDMpXFxuICA3MzpcXHQjZGVmaW5lIFRSQU5TTUlUVEVSX0FDVElPTlxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDIpXFxuICA3NDpcXHQjZGVmaW5lIFJFQ0VJVkVSX0FDVElPTlxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDEpXFxuICA3NTpcXHQjZGVmaW5lIERNQV9BQ1RJT05cXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAwKVxcbiAgNzY6XFx0XFxuICA3NzpcXHQvKiBTdGF0dXMgcmVnaXN0ZXIgYml0c1xcbiAgNzg6XFx0ICpcXG4gIDc5OlxcdCAqIE5vdGU6IGJpdHMgNy0xNSBhcmUgcmVzZXJ2ZWRcXG4gIDgwOlxcdCAqL1xcbiAgODE6XFx0I2RlZmluZSBBTElHTk1FTlRcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA2KVxcbiAgODI6XFx0I2RlZmluZSBGSUZPX09WRVJfUlVOXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNSlcXG4gIDgzOlxcdCNkZWZpbmUgRklGT19VTkRFUl9SVU5cXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA0KVxcbiAgODQ6XFx0I2RlZmluZSBSWF9FUlJPUlxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDMpXFxuICA4NTpcXHQjZGVmaW5lIFJYX0NPTVBMRVRFXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMilcXG4gIDg2OlxcdCNkZWZpbmUgVFhfRVJST1JcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxKVxcbiAgODc6XFx0I2RlZmluZSBUWF9DT01QTEVURVxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDApXFxuICA4ODpcXHRcXG4gIDg5OlxcdC8qIEZJRk8gZGVwdGggcmVnaXN0ZXIgYml0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MjozMC41NjA4NDE2OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3ODIwMDU4MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgRGVmaW5pdGlvbiBvZiBgY29udHJvbF93cml0ZWAgaW4gYGNoOTIwMC5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBjb250cm9sX3dyaXRlYCB3aXRoaW4gdGhlIGBjaDkyMDAuY2Agc291cmNlIGZpbGUuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHN0ZXAuIEknbSBsaWtlbHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgb3IgcGVyaGFwcyB0cm91Ymxlc2hvb3QgYW4gaXNzdWUgcmVsYXRlZCB0byBpdHMgYmVoYXZpb3IuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogbG9jYXRlIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBleGFtaW5lIGl0cyBpbXBsZW1lbnRhdGlvbiwgdW5kZXJzdGFuZCBpdHMgcGFyYW1ldGVycywgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZSBhbmQgcG90ZW50aWFsbHkgdGhlIGhhcmR3YXJlIGl0J3MgY29udHJvbGxpbmcuIFRoZSBjb250ZXh0IGlzIGBjaDkyMDAuY2AsIHdoaWNoIEknbSBhc3N1bWluZyBpcyB0aGUgZHJpdmVyIGZpbGUgZm9yIHRoZSBDSDkyMDAgZGV2aWNlLiBUaGVyZWZvcmUsIHVuZGVyc3RhbmRpbmcgYGNvbnRyb2xfd3JpdGVgIGNvdWxkIGdpdmUgbWUgaW5zaWdodHMgaW50byBob3cgdGhlIGRyaXZlciBtYW5hZ2VzIGNvbnRyb2wgc2lnbmFscyBvciB3cml0ZXMgZGF0YSB0byB0aGUgaGFyZHdhcmUsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBkZXZpY2UgZnVuY3Rpb25hbGl0eS4gSSdsbCBsaWtlbHkgdXNlIG15IElERSdzIFwiZ28gdG8gZGVmaW5pdGlvblwiIG9yIHNlYXJjaCBjYXBhYmlsaXRpZXMgdG8gcXVpY2tseSBsb2NhdGUgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjM4LjM4MDkwMzc0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMxMTIwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29udHJvbF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTk5PXN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzYtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjEzNzpzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTEzOC1cXHRcXHRcXHQgdW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTE5Nz1zdGF0aWMgdm9pZCBjaDkyMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIxMS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjEyOlxcdGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTMtXFx0XFx0ICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0zMzg9c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2MC1cXHRkYXRhWzFdID0gMHgwRjtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzYxOlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzYyLVxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2Ny1cXHRkYXRhWzFdID0gMHg5MDtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzY4OlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2OS1cXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNzQtXFx0ZGF0YVsxXSA9IDB4MDA7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM3NTpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzc2LVxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM4MS1cXHRkYXRhWzFdID0gMHhEODtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzgyOlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzgzLVxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM4OS1cXHRkYXRhWzFdID0gMHgwMDtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzkwOlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM5MS1cXHRcXHRcXHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTYtXFx0ZGF0YVsxXSA9IDB4MEQ7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM5NzpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTgtXFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjM4LjY2NDAyMzM3MloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTY3ODA2MDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkFuYWx5emluZyBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIGluIHRoaXMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZnJvbSBsaW5lcyAxMzUgdG8gMTYwLiBJIHN1c3BlY3QgdGhpcyBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIGEgY3J1Y2lhbCBhc3BlY3Qgb2YgdGhlIENIOTIwMCBVU0IgbmV0d29yayBhZGFwdGVyLCBwcm9iYWJseSBpbml0aWFsaXphdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nIHNldHVwLCBvciBwb3NzaWJseSB0aGUgY29yZSBkYXRhIHRyYW5zZmVyIGxvZ2ljLiBHaXZlbiB0aGUgY29udGV4dCwgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIGRldmljZSBjb21tdW5pY2F0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3Iga2V5IGZ1bmN0aW9uIGNhbGxzLCB2YXJpYWJsZSBhc3NpZ25tZW50cywgYW5kIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgY2xlYXIgaW5kaWNhdGlvbnMgb2YgaG93IHRoZSBkZXZpY2UgaXMgY29uZmlndXJlZCwgaG93IGRhdGEgaXMgcmVhZCBvciB3cml0dGVuLCBvciBhbnkgZXJyb3ItY2hlY2tpbmcgdGhhdCdzIHBlcmZvcm1lZCBkdXJpbmcgdGhpcyBjcnVjaWFsIHBhcnQgb2YgdGhlIGRyaXZlcidzIG9wZXJhdGlvbi4gSSBleHBlY3QgdG8gc2VlIHJlZmVyZW5jZXMgdG8gVVNCIGVuZHBvaW50cywgVVJCcywgYW5kIHBlcmhhcHMgc29tZSBkZXNjcmlwdG9yLXJlbGF0ZWQgb3BlcmF0aW9ucy4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSBzdHJ1Y3R1cmUgd2l0aGluIHRoYXQgY29kZSBzaG91bGQgcHJvdmlkZSBjb250ZXh0LCBzbyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IGNhbiBiZSBtb3JlIGVhc2lseSBhc3Nlc3NlZC4gTXkgZXhwZXJpZW5jZSB3aXRoIG90aGVyIFVTQiBuZXR3b3JrIGRyaXZlcnMgc2hvdWxkIGFsc28gcHJvdmlkZSBjbHVlcyBmb3IgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjQwLjgzMTgzMjA2M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxcbiAxMzg6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcXG4gMTM5OlxcdFxcdFxcdFxcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaG9ydCBzaXplLCBpbnQgdGltZW91dClcXG4gMTQwOlxcdHtcXG4gMTQxOlxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7XFxuIDE0MjpcXHRcXHR1bnNpZ25lZCBjaGFyIHJlcXVlc3RfdHlwZTtcXG4gMTQzOlxcdFxcdGludCBlcnIgPSAwO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRpZiAocmVxdWVzdCA9PSBSRVFVRVNUX1dSSVRFKVxcbiAxNDY6XFx0XFx0XFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdFVTQl9SRUNJUF9PVEhFUik7XFxuIDE0ODpcXHRcXHRlbHNlXFxuIDE0OTpcXHRcXHRcXHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX0RFVklDRSk7XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCIlcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxcXG5cXFwiLFxcbiAxNTM6XFx0XFx0XFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKGRhdGEpIHtcXG4gMTU2OlxcdFxcdFxcdGJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDE1NzpcXHRcXHRcXHRpZiAoIWJ1Zikge1xcbiAxNTg6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMTU5OlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gMTYwOlxcdFxcdFxcdH1cXG4gMTYxOlxcdFxcdH1cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cXHUwMDNldWRldixcXG4gMTY0OlxcdFxcdFxcdFxcdCAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtXFx1MDAzZXVkZXYsIDApLFxcbiAxNjU6XFx0XFx0XFx0XFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcXG4gMTY2OlxcdFxcdFxcdFxcdCAgICAgIHRpbWVvdXQpO1xcbiAxNjc6XFx0XFx0aWYgKGVyciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGVyciBcXHUwMDNjIHNpemUpXFxuIDE2ODpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAxNjk6XFx0XFx0a2ZyZWUoYnVmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDI6NDAuODMxOTI4MDM0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwMDU5NDk5MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFuYWx5c2lzIG9mIHRoZSBDSDkyMDAgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGVycm9yIGNoZWNraW5nIHdpdGhpbiB0aGUgYGNoOTIwMF9iaW5kKClgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgY29udHJvbF93cml0ZSgpYC4gTG9va2luZyBhdCBgY29udHJvbF93cml0ZSgpYCwgaXQgZHVwbGljYXRlcyBhIHNtYWxsIGJ1ZmZlciAoYGRhdGFgLCBzaXplIDIpIHVzaW5nIGBrbWVtZHVwYCwgdGhlbiB1c2VzIGB1c2JfY29udHJvbF9tc2dgLiBUaGUgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGF0IGBkYXRhWzBdYCBhbmQgYGRhdGFbMV1gIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYGNvbnRyb2xfd3JpdGUoKWAgaXMgZXZlbiBjYWxsZWQuXG5cblRoZSBwYXRjaCBpdHNlbGYganVzdCBhZGRzIGFuIGBpZiAocmV0dmFsIFx1MDAzYyAwKSByZXR1cm4gcmV0dmFsO2AgY2hlY2sgYWZ0ZXIgZWFjaCBgY29udHJvbF93cml0ZSgpYCBjYWxsIGluIGBjaDkyMDBfYmluZCgpYC4gSWYgYSBjb250cm9sIHdyaXRlIGZhaWxzLCB0aGUgZnVuY3Rpb24gZXhpdHMgZWFybHksIHJldHVybmluZyB0aGUgZXJyb3IgY29kZS5cblxuU28sIHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBOby4gVGhlIGRhdGEgYmVpbmcgcGFzc2VkIHRvIGBjb250cm9sX3dyaXRlKClgIGlzIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQuIFJldHVybmluZyBlYXJseSBzaW1wbHkgbWVhbnMgd2UgYXZvaWQgZnVydGhlciBwb3RlbnRpYWxseSBkYW5nZXJvdXMgb3BlcmF0aW9ucyBkb3duIHRoZSBsaW5lLCBzdWNoIGFzIGNhbGxpbmcgYGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpYC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHJlYWQsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZS4gQW55IGVycm9yIGlzIHNpbXBseSBwcm9wYWdhdGVkIGJhY2sgdXAgdGhlIHN0YWNrIHRvIGB1c2JuZXRgLlxuXG5DaGVja2luZyB0aGUgY2FsbGVyLCBgY2g5MjAwX2JpbmQoKWAgaXMgY2FsbGVkIGZyb20gYSBgZHJpdmVyX2luZm9gIHN0cnVjdCB3aXRoaW4gYHVzYm5ldGAuIElmIGBjaDkyMDBfYmluZCgpYCBmYWlscyAocmV0dXJucyBcdTAwM2MgMCksIGB1c2JuZXRfcHJvYmVgIGNsZWFucyB1cCBhbmQgZmFpbHMgdGhlIGRldmljZSBwcm9iaW5nLiBBbGwgc3RhbmRhcmQsIGV4cGVjdGVkIGJlaGF2aW9yLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSdyZSBqdXN0IGFkZGluZyBlcnJvciBoYW5kbGluZy4gQW5kIHNpbmNlIHdlJ3JlIG9ubHkgYWRkaW5nIGVycm9yIGNoZWNrcywgdGhlIG5hdHVyZSBvZiB0aGVzZSBlcnJvcnMgaXMgZW50aXJlbHkgd2l0aGluIHRoZSByZWFsbSBvZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBvciBzdGFuZGFyZCBlcnJvciBkZXRlY3RvcnMuXG5cbk5vdywgcmVnYXJkaW5nIEtNU0FOLCB0aGlzIGlzIHdoZXJlIHdlIGdldCBzcGVjaWZpYy4gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBJbiB0aGlzIGNhc2UsIHdlIGhhdmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgZGF0YWAgYnVmZmVyIHBhc3NlZCB0byBgY29udHJvbF93cml0ZSgpYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQsIGNvbnRhaW5pbmcgdHdvIGNvbnN0YW50IGJ5dGVzIGJlZm9yZSBlYWNoIGNhbGwuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgcmVhZCwgcGFzc2VkIHRvIHVzZXJzcGFjZSwgb3IgdXNlZCBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24ndCBuZWVkZWQuIFRoaXMgcGF0Y2ggZmFsbHMgZmlybWx5IGluIHRoZSByZWFsbSBvZiBlcnJvciBoYW5kbGluZyBhbmQgZXhpc3RpbmcgZXJyb3IgZGV0ZWN0aW9uIG1lY2hhbmlzbXMuIE5vIGBOZWVkc0tNU0FOYCBpcyBuZWNlc3NhcnkgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwMywiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0Mjo1MC44OTE0MzA1NjJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcmV0dXJuIHZhbHVlIGVycm9yIGNoZWNrcyBmb3IgY2FsbHMgdG8gY29udHJvbF93cml0ZSgpIGluIGNoOTIwMF9iaW5kKCkuIFRoZSBkYXRhIGJ1ZmZlciBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpIGlzIGZ1bGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGVhY2ggY2FsbCwgYW5kIHJldHVybmluZyBhbiBlcnJvciBjb2RlIHVwb24gZmFpbHVyZSBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGFjY2Vzc2VkLCBhbmQgY29udHJvbCBmbG93IGlzIG5vdCBhbHRlcmVkIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHJldHVybiB2YWx1ZSBlcnJvciBjaGVja3MgZm9yIGNhbGxzIHRvIGNvbnRyb2xfd3JpdGUoKSBpbiBjaDkyMDBfYmluZCgpLiBUaGUgZGF0YSBidWZmZXIgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSBpcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byBlYWNoIGNhbGwsIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSB1cG9uIGZhaWx1cmUgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIGNvbnRyb2wgZmxvdyBpcyBub3QgYWx0ZXJlZCBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow9r4bw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 22:29:10 +0000 UTC FinishedAt: 2026-09-14 23:42:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_CH9200", "USB_USBNET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_NET_CH9200", "USB_USBNET" ], "series_id": "a3c4cc4c-004f-43ca-8d0f-96f6bb376d96" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ch9200_bind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaDkyMDBfYmluZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcmV0dXJuIHZhbHVlIGVycm9yIGNoZWNrcyBmb3IgY2FsbHMgdG8gY29udHJvbF93cml0ZSgpIGluIGNoOTIwMF9iaW5kKCkuIFRoZSBkYXRhIGJ1ZmZlciBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpIGlzIGZ1bGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGVhY2ggY2FsbCwgYW5kIHJldHVybmluZyBhbiBlcnJvciBjb2RlIHVwb24gZmFpbHVyZSBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGFjY2Vzc2VkLCBhbmQgY29udHJvbCBmbG93IGlzIG5vdCBhbHRlcmVkIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciByZXR1cm4gY2hlY2tzIGZvciBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSBkdXJpbmcgVVNCIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIENIOTIwMCBVU0IgZXRoZXJuZXQgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgVVNCIFJhdyBHYWRnZXQgLyBkdW1teV9oY2QpIG1hdGNoaW5nIGl0cyBVU0IgVklEL1BJRC4gRnV6emluZyB3aXRoIFVTQiBmYXVsdCBpbmplY3Rpb24gb3IgdW5leHBlY3RlZCBjb250cm9sIHJlc3BvbnNlcyBjYW4gdGVzdCB0aGVzZSBuZXdseSBpbnRyb2R1Y2VkIGVycm9yIGV4aXQgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNTJmMWE4MTBkZjNjMjk2Yzk3YjUzNGJjNTZiZWRkMzBlZDg0MjBiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjM6NDA6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG5pbmRleCBhMjA2ZmZhNzZmMWI5Li5hYjNjZDM5MDJlZDcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbkBAIC0zNjAsMzIgJiM0MzszNjAsNDQgQEAgc3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0ZGF0YVsxXSA9IDB4MEY7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHhBMDtcbiBcdGRhdGFbMV0gPSAweDkwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweDMwO1xuIFx0ZGF0YVsxXSA9IDB4MDA7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweDE3O1xuIFx0ZGF0YVsxXSA9IDB4RDg7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gXHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHQvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi9cbiBcdGRhdGFbMF0gPSAweDAxO1xuIFx0ZGF0YVsxXSA9IDB4MDA7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxuIFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuJiM0MztcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4NUY7XG4gXHRkYXRhWzFdID0gMHgwRDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0NUUkwsIGRhdGEsIDB4MDIsXG4gXHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiBcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0NIOTIwMCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2g5MjAwX2JpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciByZXR1cm4gY2hlY2tzIGZvciBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSBkdXJpbmcgVVNCIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIENIOTIwMCBVU0IgZXRoZXJuZXQgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgVVNCIFJhdyBHYWRnZXQgLyBkdW1teV9oY2QpIG1hdGNoaW5nIGl0cyBVU0IgVklEL1BJRC4gRnV6emluZyB3aXRoIFVTQiBmYXVsdCBpbmplY3Rpb24gb3IgdW5leHBlY3RlZCBjb250cm9sIHJlc3BvbnNlcyBjYW4gdGVzdCB0aGVzZSBuZXdseSBpbnRyb2R1Y2VkIGVycm9yIGV4aXQgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNTJmMWE4MTBkZjNjMjk2Yzk3YjUzNGJjNTZiZWRkMzBlZDg0MjBiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjM6NDA6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMKaW5kZXggYTIwNmZmYTc2ZjFiOS4uYWIzY2QzOTAyZWQ3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYwpAQCAtMzYwLDMyICYjNDM7MzYwLDQ0IEBAIHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIAlkYXRhWzFdID0gMHgwRjsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsCiAJCQkgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJZGF0YVswXSA9IDB4QTA7CiAJZGF0YVsxXSA9IDB4OTA7CiAJcmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSwKIAkJCSAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlkYXRhWzBdID0gMHgzMDsKIAlkYXRhWzFdID0gMHgwMDsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSwKIAkJCSAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlkYXRhWzBdID0gMHgxNzsKIAlkYXRhWzFdID0gMHhEODsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsCiAJCQkgICAgICAgZGF0YSwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJLyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovCiAJZGF0YVswXSA9IDB4MDE7CiAJZGF0YVsxXSA9IDB4MDA7CiAJcmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMiwKIAkJCSAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlkYXRhWzBdID0gMHg1RjsKIAlkYXRhWzFdID0gMHgwRDsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLAogCQkJICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCXJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpOwogCWV0aF9od19hZGRyX3NldChkZXYtJmd0O25ldCwgYWRkcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBhIFVTQiBOZXR3b3JrIERyaXZlcioqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyBhcyBJIGxvb2sgYXQgdGhpcyBwYXRjaC4gVGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgdGhpcyBkaWZmIGFmZmVjdGluZyB0aGUgYGNoOTIwMC5jYCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgYW1kNjQgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgYW5kIGlmIGl0IGludHJvZHVjZXMgYW55IHJlZ3Jlc3Npb25zIG9yIHBvdGVudGlhbCBpc3N1ZXMsIGVzcGVjaWFsbHkgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpGaXJzdCwgSSBzZWUgYSBzZXJpZXMgb2YgYGNvbnRyb2xfd3JpdGVgIGNhbGxzIGJlaW5nIGFkZGVkIHdpdGhpbiB0aGUgYGNoOTIwMF9iaW5kYCBmdW5jdGlvbi4gRWFjaCBvZiB0aGVzZSBjYWxscyB3cml0ZXMgZGF0YSB0byBkaWZmZXJlbnQgcmVnaXN0ZXJzIChNQUNfUkVHX1RIUkVTSE9MRCwgTUFDX1JFR19GSUZPX0RFUFRILCBNQUNfUkVHX1BBVVNFLCBldGMuKS4gVGhlIHNpZ25pZmljYW50IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYW4gYGlmIChyZXR2YWwgJmx0OyAwKWAgY2hlY2sgKmFmdGVyKiBlYWNoIHdyaXRlLiBUaGlzIGlzIGEgY3J1Y2lhbCBhZGRpdGlvbiB0byB2ZXJpZnkgdGhlIHJlc3VsdCBvZiBVU0IgY29udHJvbCB0cmFuc2Zlci4gVGhpcyBpcyBnb29kIGNvZGluZyBwcmFjdGljZSwgZW5zdXJpbmcgdGhhdCB0aGUgZHJpdmVyIGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgdGhlc2UgY29uZmlndXJhdGlvbiB3cml0ZXMuIFdpdGhvdXQgdGhpcywgYSBmYWlsdXJlIHdvdWxkIGJlIG1hc2tlZCwgYW5kIHRoZSBkZXZpY2UgbWlnaHQgbm90IGluaXRpYWxpemUgY29ycmVjdGx5LCBsZWFkaW5nIHRvIHBvdGVudGlhbGx5IHN1YnRsZSBidWdzIG9yLCBpbiBhIHdvcnNlLWNhc2Ugc2NlbmFyaW8sIGRldmljZSBsb2NrdXAuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoaXMgZHJpdmVyJiMzOTtzIHJlbGV2YW5jZSBpbiBhIHRlc3RpbmcgZW52aXJvbm1lbnQuIFNpbmNlIHRoaXMgaXMgYSBVU0IgbmV0d29yayBkcml2ZXIsIGl0IG5hdHVyYWxseSB1c2VzIFVTQiB0byBjb25uZWN0LiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIFN5emthbGxlciBzZXR1cCBhbmQgd2hldGhlciBVU0IgZGV2aWNlcyBjYW4gYmUgZWZmZWN0aXZlbHkgZW11bGF0ZWQuIEZvcnR1bmF0ZWx5LCBVU0IgcmF3IGdhZGdldCBhbmQgdmhjaS9EdW1teSBIQ0QgYXJlIGluZGVlZCByZWFjaGFibGUgdGhyb3VnaCBTeXprYWxsZXIuIFRoaXMgbWVhbnMgSSBjYW4gbGlrZWx5IHRlc3QgdGhpcyBkcml2ZXIgdXNpbmcgU3l6a2FsbGVyJiMzOTtzIFVTQiBlbXVsYXRpb24gY2FwYWJpbGl0aWVzLiBUaGUgU3l6a2FsbGVyIGRvY3VtZW50YXRpb24gY29uZmlybXMgdGhhdCBVU0IgbmV0IGRyaXZlcnMgY2FuIGJlIHJlYWNoZWQgdmlhIFVTQiBnYWRnZXQvcmF3IGdhZGdldCBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhpcyBkcml2ZXIgaW4gaXRzIG9yaWdpbmFsIGNvbnRleHQuIEkmIzM5O2xsIGNoZWNrIGl0cyBhc3NvY2lhdGVkIEtjb25maWcgZW50cnkgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYnVpbHQgYW5kIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCB1bmRlciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4gRmluYWxseSwgSSB3aWxsIGNhcmVmdWxseSBhc3Nlc3MgaWYgdGhpcyBwYXRjaCBtYXkgaW5kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBIb3dldmVyLCBmb3Igbm93LCB0aGUgYWRkZWQgZXJyb3IgY2hlY2tpbmcgaXMgYSBzdGVwIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGZ1bmN0aW9uIHRoYXQgdXNlcyB0aGUgcmV0dmFsIGZvciB2YWxpZGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU5OT1jb25maWcgVVNCX1ZMNjAwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjEzLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjE0OmNvbmZpZyBVU0JfTkVUX0NIOTIwMFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjE1LVx0dHJpc3RhdGUgXCYjMzQ7UWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19NQklNKVx0JiM0Mzs9IGNkY19tYmltLm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfVVNCX05FVF9DSDkyMDApXHQmIzQzOz0gY2g5MjAwLm9cbmRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZS00My1vYmotJChDT05GSUdfVVNCX05FVF9BUUMxMTEpXHQmIzQzOz0gYXFjMTExLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBVU0IgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhcnRpY3VsYXIgVVNCIG5ldHdvcmsgZHJpdmVyIHNpdHVhdGlvbiwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL2AgZGlyZWN0b3J5LiBHaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgYXJvdW5kIGxpbmUgNjE0IGZlZWxzIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGNob2ljZXMuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGNyaXRpY2FsIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGF0IGFyZWEsIGFuZCBteSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoYXQgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgYmVzdCBncmFzcGVkIGJ5IGdldHRpbmcgZG93biBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBsb2dpYy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEwOlx0XHQgIDRHIG1vZGVtIGZyb20gVmVyaXpvbjpcbiA2MTE6XHRcbiA2MTI6XHRcdCAgaHR0cDovL3VidW50dWZvcnVtcy5vcmcvc2hvd3Bvc3QucGhwP3A9MTA1ODk2NDdcdTAwMjZwb3N0Y291bnQ9MTdcbiA2MTM6XHRcbiA2MTQ6XHRjb25maWcgVVNCX05FVF9DSDkyMDBcbiA2MTU6XHRcdHRyaXN0YXRlIFwmIzM0O1FpbmdIZW5nIENIOTIwMCBVU0IgZXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuIDYxNjpcdFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG4gNjE3Olx0XHRzZWxlY3QgTUlJXG4gNjE4Olx0XHRoZWxwXG4gNjE5Olx0XHQgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFVTQiBldGhlcm5ldCBhZGFwdGVyIHdpdGggYSBRaW5IZW5nXG4gNjIwOlx0XHQgIENIOTIwMCBjaGlwc2V0LlxuIDYyMTpcdFxuIDYyMjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA2MjM6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNoOTIwMC5cbiA2MjQ6XHRcbiA2MjU6XHRjb25maWcgVVNCX05FVF9BUUMxMTFcbiA2MjY6XHRcdHRyaXN0YXRlIFwmIzM0O0FxdWFudGlhIEFRdGlvbiBVU0IgdG8gNS8yLjVHYkUgQ29udHJvbGxlcnMgc3VwcG9ydFwmIzM0O1xuIDYyNzpcdFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG4gNjI4Olx0XHRzZWxlY3QgQ1JDMzJcbiA2Mjk6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDk1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIFVTQl9VU0JORVQgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IGNydWNpYWwgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFVTQl9VU0JORVRgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGNvcnJlY3RseSBkZWZpbmVkLCBhbmQgdGhhdCB3ZSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgdGhlIHJlbGF0aW9uc2hpcHMgaW52b2x2ZWQg4oCTIGJvdGggZXhwbGljaXQgYW5kIGltcGxpY2l0LiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgcGFyYW1vdW50IHRvIGF2b2lkIGFueSB1bmV4cGVjdGVkIGJ1aWxkIGVycm9ycyBvciBydW50aW1lIGNvbmZsaWN0cy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSBgVVNCYCwgb2J2aW91c2x5LCBidXQgSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHRoZSByZXF1aXJlZCBzdWItZmVhdHVyZXMgYXJlIGhhbmRsZWQgYW5kIGFueSBwb3RlbnRpYWwgcGxhdGZvcm0tc3BlY2lmaWMgbnVhbmNlcyBhcmUgdGFrZW4gaW50byBhY2NvdW50LiBJdCYjMzk7cyBhIGtleSBzdGVwIHRvIGNvbmZpcm0gd2UgYXJlIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9VU0JORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTEzPWNvbmZpZyBVU0JfTEFONzhYWFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEzMS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjEzMjpjb25maWcgVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMzLVx0dHJpc3RhdGUgXCYjMzQ7TXVsdGktcHVycG9zZSBVU0IgTmV0d29ya2luZyBGcmFtZXdvcmtcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODEwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBmcm9tIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2A6CgoqKkFuYWx5emluZyBLY29uZmlnJiMzOTtzIFVTQiBOZXR3b3JraW5nIE9wdGlvbnMqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGxpbmVzIDEzMCB0aHJvdWdoIDE1MCBvZiBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgVVNCIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSnVzdCBnbGFuY2luZyBhdCB0aGUgY29udGV4dCwgaXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNlY3Rpb24gZGV2b3RlZCB0byBVU0IgbmV0d29yayBhZGFwdGVycywgdGhlIHZhcmlvdXMgdHlwZXMgc3VwcG9ydGVkLCBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLgoKSSBzZWUgYSBsb3Qgb2YgY29uZGl0aW9uYWwgbG9naWMgaGVyZSwgcHJvYmFibHkgaW52b2x2aW5nICpzZWxlY3QqIHN0YXRlbWVudHMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVwZW5kZW5jaWVzLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGNvbXBsZXhpdHkgYWx3YXlzIGxpZXMuIFdoaWNoIFVTQiBuZXR3b3JrIGRldmljZXMgYXJlICphY3R1YWxseSogZW5hYmxlZCBpcyBnb2luZyB0byBoaW5nZSBvbiBob3cgdGhlc2UgY29uZGl0aW9uYWwgc3RhdGVtZW50cyByZXNvbHZlLiBJIGV4cGVjdCB0byBzZWUgYFVTQl9ORVRfRFJJVkVSU2AsIHdoaWNoIHdpbGwgZ2l2ZSBhIGhpZ2ggbGV2ZWwgZW5hYmxpbmcgb2YgdGhlIFVTQiBuZXR3b3JrIGRyaXZlcnMuIFRoaXMgc2VlbXMgbGlrZSB0aGUgZ2F0ZXdheSBvcHRpb24uIEFmdGVyIHRoYXQgSSBhbnRpY2lwYXRlIGluZGl2aWR1YWwgZGV2aWNlIHN1cHBvcnQsIHBvc3NpYmx5IGdyb3VwZWQgYnkgY2hpcHNldCBvciB2ZW5kb3IsIHRoYXQgaXMgc2VsZWN0ZWQgYnkgdGhlIGdlbmVyYWwgZW5hYmxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgdGhlc2Ugc2VsZWN0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIChvbmx5IG9uZSBjYW4gYmUgc2VsZWN0ZWQpIG9yIHdoZXRoZXIgbXVsdGlwbGUgZGV2aWNlcyBjYW4gYmUgc3VwcG9ydGVkIHNpbXVsdGFuZW91c2x5LgoKVGhlIGluY2x1c2lvbiBvZiBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBpcyBjcnVjaWFsLiBUaGlzIGlzIGhvdyB0aGUga2VybmVsIG1ha2VzIHN1cmUgdGhlIFVTQiBzdWJzeXN0ZW0gb3Igc29tZSBvdGhlciByZXF1aXJlZCBwaWVjZSBvZiB0aGUgcHV6emxlIGlzIHByZXNlbnQgYW5kIG9wZXJhdGlvbmFsIGJlZm9yZSBlbmFibGluZyB0aGUgY29ycmVzcG9uZGluZyBuZXR3b3JrIGRyaXZlci4gSSYjMzk7bGwgYmUgbG9va2luZyB0byB0cmFjZSB0aG9zZSBkZXBlbmRlbmNpZXMgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBkZXZpY2UgdHJlZS4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHdhdGNoIGZvciBhbnkgYHNlbGVjdGAgc3RhdGVtZW50cywgYXMgdGhhdOKAmXMgdXN1YWxseSBob3cgbW9yZSBnZW5lcmFsIHNldHRpbmdzIHRyaWdnZXIgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gVGhlIGxpbmVzIEkmIzM5O20gbG9va2luZyBhdCBhcmUgdGhlIGtleSB0byBkZWNpZGluZyB3aGF0IHRoZSBrZXJuZWwgd2lsbCBhY3R1YWxseSBzdXBwb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxhbjc4eHguXG4gMTMxOlx0XG4gMTMyOlx0Y29uZmlnIFVTQl9VU0JORVRcbiAxMzM6XHRcdHRyaXN0YXRlIFwmIzM0O011bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gMTM0Olx0XHRzZWxlY3QgTUlJXG4gMTM1Olx0XHRoZWxwXG4gMTM2Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHNldmVyYWwga2luZHMgb2YgbmV0d29yayBsaW5rcyBvdmVyIFVTQixcbiAxMzc6XHRcdCAgd2l0aCBcJiMzNDttaW5pZHJpdmVyc1wmIzM0OyBidWlsdCBhcm91bmQgYSBjb21tb24gbmV0d29yayBkcml2ZXIgY29yZVxuIDEzODpcdFx0ICB0aGF0IHN1cHBvcnRzIGRlZXAgcXVldWVzIGZvciBlZmZpY2llbnQgdHJhbnNmZXJzLiAgKFRoaXMgZ2l2ZXNcbiAxMzk6XHRcdCAgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggc21hbGwgcGFja2V0cyBhbmQgYXQgaGlnaCBzcGVlZHMpLlxuIDE0MDpcdFxuIDE0MTpcdFx0ICBUaGUgVVNCIGhvc3QgcnVucyBcJiMzNDt1c2JuZXRcJiMzNDssIGFuZCB0aGUgb3RoZXIgZW5kIG9mIHRoZSBsaW5rIG1pZ2h0IGJlOlxuIDE0MjpcdFxuIDE0MzpcdFx0ICAtIEFub3RoZXIgVVNCIGhvc3QsIHdoZW4gdXNpbmcgVVNCIFwmIzM0O25ldHdvcmtcJiMzNDsgb3IgXCYjMzQ7ZGF0YSB0cmFuc2ZlclwmIzM0O1xuIDE0NDpcdFx0ICAgIGNhYmxlcy4gIFRoZXNlIGFyZSBvZnRlbiB1c2VkIHRvIG5ldHdvcmsgbGFwdG9wcyB0byBQQ3MsIGxpa2VcbiAxNDU6XHRcdCAgICBcJiMzNDtMYXBsaW5rXCYjMzQ7IHBhcmFsbGVsIGNhYmxlcyBvciBzb21lIG1vdGhlcmJvYXJkcy4gIFRoZXNlIHJlbHlcbiAxNDY6XHRcdCAgICBvbiBzcGVjaWFsaXplZCBjaGlwcyBmcm9tIG1hbnkgc3VwcGxpZXJzLlxuIDE0NzpcdFxuIDE0ODpcdFx0ICAtIEFuIGludGVsbGlnZW50IFVTQiBnYWRnZXQsIHBlcmhhcHMgZW1iZWRkaW5nIGEgTGludXggc3lzdGVtLlxuIDE0OTpcdFx0ICAgIFRoZXNlIGluY2x1ZGUgUERBcyBydW5uaW5nIExpbnV4IChpUGFxLCBZb3B5LCBaYXVydXMsIGFuZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipLY29uZmlnIE1lbnUgRGVwZW5kZW5jeSBDaGVjayoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaW1lIHRvIGdldCBmYW1pbGlhciB3aXRoIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGhvdyB0aGUgbWVudSBzdHJ1Y3R1cmUgaXMgc2V0IHVwLCBzcGVjaWZpY2FsbHkgdGhlIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSBkbyB0aGUgb3ZlcmFsbCBuZXR3b3JrLXJlbGF0ZWQgb3B0aW9ucyBsaWtlIGBORVRfRVRIRVJORVRgIGNvbWUgaW50byBwbGF5PyYjMzQ7IEkgc2hvdWxkIHNjYW4gdGhlIHRvcCBvZiB0aGUgZmlsZSwgb3IgaWYgdGhhdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cywgSSYjMzk7bGwgbmVlZCB0byB1c2UgYG1lbnVjb25maWdgIHRvIG5hdmlnYXRlIGFuZCBmaW5kIHRoZSBtZW51IGVudHJ5IGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgdHJhY2tpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBlbnN1cmluZyB0aGluZ3MgYXJlIHByb3Blcmx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3MuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIFVTQiBuZXR3b3JrIGRyaXZlcnMgZml0IGludG8gdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb21tZW50IFwmIzM0O0hvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuICAgNjpcdFx0ZGVwZW5kcyBvbiAhVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xuICAgOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIE5ldHdvcmsgQWRhcHRlcnNcJiMzNDtcbiAgMTA6XHRcdGRlZmF1bHQgVVNCIGlmIFVTQlxuICAxMTpcdFx0ZGVwZW5kcyBvbiBVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAxMjpcdFxuICAxMzpcdGlmIFVTQl9ORVRfRFJJVkVSU1xuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBVU0JfQ0FUQ1xuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0c2VsZWN0IENSQzMyXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgVVNCIEV0aGVybmV0XG4gIDIwOlx0XHQgIGRldmljZSBiYXNlZCBvbiB0aGUgRUwxMjEwQSBjaGlwLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6XG4gIDIxOlx0XHQgIEJlbGtpbiBGNVUwMTFcbiAgMjI6XHRcdCAgQmVsa2luIEY1VTExMVxuICAyMzpcdFx0ICBDQVRDIE5ldE1hdGVcbiAgMjQ6XHRcdCAgQ0FUQyBOZXRNYXRlIElJXG4gIDI1Olx0XHQgIHNtYXJ0QnJpZGdlcyBzbWFydE5JQ1xuICAyNjpcdFxuICAyNzpcdFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxuICAyODpcdFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXG4gIDI5Olx0XHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDMyOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjYXRjLlxuICAzMzpcdFxuICAzNDpcdGNvbmZpZyBVU0JfS0FXRVRIXG4gIDM1Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgS0xTSSBLTDVVU0IxMDEtYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMzY6XHRcdGhlbHBcbiAgMzc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIG9ubHlcbiAgMzg6XHRcdCAgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBLTFNJIEtMNUtVU0IxMDFCIGNoaXBzZXQ6XG4gIDM5Olx0XHQgIDNDb20gM0MxOTI1MFxuICA0MDpcdFx0ICBBRFMgVVNCLTEwQlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM3NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBVU0IgTmV0d29yayBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIFVTQiBuZXR3b3JrIGRyaXZlcnMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbS4gSXQgc2VlbXMgbGlrZSBgVVNCX05FVF9EUklWRVJTYCBpcyB0aGUgdG9wLWxldmVsIG9wdGlvbiwgYW5kIGl0JiMzOTtzIGNvbnRpbmdlbnQgb24gYm90aCBgVVNCYCBhbmQgYE5FVGAgYmVpbmcgZW5hYmxlZCDigJMgbWFrZXMgc2Vuc2UsIHJpZ2h0PyBXZSB3b3VsZG4mIzM5O3Qgd2FudCB0byBpbmNsdWRlIG5ldHdvcmsgZHJpdmVycyBpZiB3ZSBkaWRuJiMzOTt0IGhhdmUgVVNCIHN1cHBvcnQgYW5kIG5ldHdvcmtpbmcgZW5hYmxlZC4gVGhlbiB3ZSBoYXZlIGBVU0JfVVNCTkVUYCwgYW5vdGhlciBkcml2ZXIsIGFuZCBmaW5hbGx5IGBVU0JfTkVUX0NIOTIwMGAuCgpUbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBgY2g5MjAwYCBkcml2ZXIsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlLCBpbiBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCBhcm91bmQgbGluZSAzNjAgdG8gc2VlIHRoZSBmdW5jdGlvbiBgY2g5MjAwX2JpbmRgLiBUaGlzIHNob3VsZCBzaG93IG1lIHRoZSBmdWxsIGJpbmRpbmcgcHJvY2VzcyBhbmQgaG93IGl0IGlzIGxpbmtlZC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgc28gdGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDU6XHRcdGlmIChyZXR2YWwpXG4gMzQ2Olx0XHRcdHJldHVybiByZXR2YWw7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRkZXYtXHUwMDNlbWlpLmRldiA9IGRldi1cdTAwM2VuZXQ7XG4gMzQ5Olx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XG4gMzUwOlx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcbiAzNTE6XHRcdGRldi1cdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcbiAzNTI6XHRcbiAzNTM6XHRcdGRldi1cdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweDFmO1xuIDM1NDpcdFxuIDM1NTpcdFx0ZGV2LVx1MDAzZWhhcmRfbXR1ID0gZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgZGV2LVx1MDAzZW5ldC1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4gMzU2Olx0XHRkZXYtXHUwMDNlcnhfdXJiX3NpemUgPSAyNCAqIDY0ICYjNDM7IDE2O1xuIDM1NzpcdFx0bWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbiAzNTg6XHRcbiAzNTk6XHRcdGRhdGFbMF0gPSAweDAxO1xuIDM2MDpcdFx0ZGF0YVsxXSA9IDB4MEY7XG4gMzYxOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gMzYyOlx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzYzOlx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIDM2NDpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM2NTpcdFxuIDM2NjpcdFx0ZGF0YVswXSA9IDB4QTA7XG4gMzY3Olx0XHRkYXRhWzFdID0gMHg5MDtcbiAzNjg6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG4gMzY5Olx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzcwOlx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIDM3MTpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM3MjpcdFxuIDM3MzpcdFx0ZGF0YVswXSA9IDB4MzA7XG4gMzc0Olx0XHRkYXRhWzFdID0gMHgwMDtcbiAzNzU6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxuIDM3NjpcdFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM3NzpcdFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiAzNzg6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzNzk6XHRcbiAzODA6XHRcdGRhdGFbMF0gPSAweDE3O1xuIDM4MTpcdFx0ZGF0YVsxXSA9IDB4RDg7XG4gMzgyOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gMzgzOlx0XHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzg0Olx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIDM4NTpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM4NjpcdFxuIDM4NzpcdFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXG4gMzg4Olx0XHRkYXRhWzBdID0gMHgwMTtcbiAzODk6XHRcdGRhdGFbMV0gPSAweDAwO1xuIDM5MDpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcbiAzOTE6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzOTI6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gMzkzOlx0XHRcdHJldHVybiByZXR2YWw7XG4gMzk0Olx0XG4gMzk1Olx0XHRkYXRhWzBdID0gMHg1RjtcbiAzOTY6XHRcdGRhdGFbMV0gPSAweDBEO1xuIDM5NzpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbiAzOTg6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzOTk6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gNDAwOlx0XHRcdHJldHVybiByZXR2YWw7XG4gNDAxOlx0XG4gNDAyOlx0XHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiA0MDM6XHRcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiA0MDQ6XHRcbiA0MDU6XHRcdHJldHVybiByZXR2YWw7XG4gNDA2Olx0fVxuIDQwNzpcdFxuIDQwODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XG4gNDA5Olx0XHQuZGVzY3JpcHRpb24gPSBcJiMzNDtDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclwmIzM0OyxcbiA0MTA6XHRcdC5mbGFncyA9IEZMQUdfRVRIRVIsXG4gNDExOlx0XHQuYmluZCA9IGNoOTIwMF9iaW5kLFxuIDQxMjpcdFx0LnJ4X2ZpeHVwID0gY2g5MjAwX3J4X2ZpeHVwLFxuIDQxMzpcdFx0LnR4X2ZpeHVwID0gY2g5MjAwX3R4X2ZpeHVwLFxuIDQxNDpcdFx0LnN0YXR1cyA9IGNoOTIwMF9zdGF0dXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIGBjaDkyMDBfYmluZGAuIEkgcmVjYWxsIHNlZWluZyB0aGF0IGZ1bmN0aW9uIG1lbnRpb25lZCBlYXJsaWVyLCBhcm91bmQgbGluZXMgMzIwIHRvIDM0NSBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb2YgaG93IHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncy4gSSYjMzk7bGwgbmVlZCB0byByZS1leGFtaW5lIHRoYXQgc2VjdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRcdFx0XHRcdCAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzMjE6XHRcdHJkX21hY19sZW4gJiM0Mzs9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCwgTUFDX1JFR19TVEFUSU9OX00sXG4gMzIyOlx0XHRcdFx0XHQgICBtYWNfYWRkciAmIzQzOyAyLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDMyMzpcdFx0cmRfbWFjX2xlbiAmIzQzOz0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBNQUNfUkVHX1NUQVRJT05fSCxcbiAzMjQ6XHRcdFx0XHRcdCAgIG1hY19hZGRyICYjNDM7IDQsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzI1Olx0XHRpZiAocmRfbWFjX2xlbiAhPSBFVEhfQUxFTilcbiAzMjY6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAzMjc6XHRcbiAzMjg6XHRcdGRhdGFbMF0gPSBtYWNfYWRkcls1XTtcbiAzMjk6XHRcdGRhdGFbMV0gPSBtYWNfYWRkcls0XTtcbiAzMzA6XHRcdGRhdGFbMl0gPSBtYWNfYWRkclszXTtcbiAzMzE6XHRcdGRhdGFbM10gPSBtYWNfYWRkclsyXTtcbiAzMzI6XHRcdGRhdGFbNF0gPSBtYWNfYWRkclsxXTtcbiAzMzM6XHRcdGRhdGFbNV0gPSBtYWNfYWRkclswXTtcbiAzMzQ6XHRcbiAzMzU6XHRcdHJldHVybiBlcnI7XG4gMzM2Olx0fVxuIDMzNzpcdFxuIDMzODpcdHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiAzMzk6XHR7XG4gMzQwOlx0XHRpbnQgcmV0dmFsID0gMDtcbiAzNDE6XHRcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcbiAzNDI6XHRcdHU4IGFkZHJbRVRIX0FMRU5dO1xuIDM0MzpcdFxuIDM0NDpcdFx0cmV0dmFsID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbiAzNDU6XHRcdGlmIChyZXR2YWwpXG4gMzQ2Olx0XHRcdHJldHVybiByZXR2YWw7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRkZXYtXHUwMDNlbWlpLmRldiA9IGRldi1cdTAwM2VuZXQ7XG4gMzQ5Olx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NjQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgY2g5MjAwX2JpbmRgIENhbGxiYWNrKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyB1bmRlcnN0YW5kaW5nIHRoZSBsaWZlY3ljbGUgb2YgYGNoOTIwMF9iaW5kYCwgdGhlIGAuYmluZGAgY2FsbGJhY2sgd2l0aGluIHRoZSBgc3RydWN0IGRyaXZlcl9pbmZvIGNoOTIwMF9pbmZvYCBzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKndoZW4qIGRvZXMgdGhpcyBmdW5jdGlvbiBnZXQgaW52b2tlZD8gVGltZSB0byB0cmFjZSBpdHMgZXhlY3V0aW9uIHBhdGguCgpUaGUgbG9naWNhbCBwbGFjZSB0byBsb29rIGlzIHdpdGhpbiB0aGUgYHVzYm5ldGAgZnJhbWV3b3JrLCBzaW5jZSB0aGUgYGNoOTIwMGAgZHJpdmVyIGlzIGJ1aWx0IG9uIGl0LiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYHVzYm5ldGAgY29yZSBjYWxscyB0aGUgYGluZm8tJmd0O2JpbmRgIGZ1bmN0aW9uLiBUaGF0IHN1Z2dlc3RzIGxvb2tpbmcgYXQgYHVzYm5ldF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWRldiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKnByb2QpYC4gQmluZ28hIFRoZXJlIGl0IGlzOiBgaW5mby0mZ3Q7YmluZChkZXYsIHVpbnRlcmZhY2UpYC4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBjYWxsLgoKTm93LCBob3cgZG9lcyBgY2g5MjAwYCBnZXQgcmVnaXN0ZXJlZCB3aXRoIGB1c2JuZXRgIGluIHRoZSBmaXJzdCBwbGFjZT8gVG8gY29uZmlybSB0aGUgZnVsbCBzZXR1cCwgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBsaW5lcyA0MTAgdG8gNDQwIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlIHJlZ2lzdHJhdGlvbiBvY2N1cnMuIFRoYXQgd2lsbCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgYGNoOTIwMGAgZHJpdmVyIGFuZCB0aGUgYHVzYm5ldGAgZnJhbWV3b3JrLCBhbmQgaG93IHRoYXQgbGVhZHMgdG8gdGhlIGV4ZWN1dGlvbiBvZiBgY2g5MjAwX2JpbmRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDEwOlx0XHQuZmxhZ3MgPSBGTEFHX0VUSEVSLFxuIDQxMTpcdFx0LmJpbmQgPSBjaDkyMDBfYmluZCxcbiA0MTI6XHRcdC5yeF9maXh1cCA9IGNoOTIwMF9yeF9maXh1cCxcbiA0MTM6XHRcdC50eF9maXh1cCA9IGNoOTIwMF90eF9maXh1cCxcbiA0MTQ6XHRcdC5zdGF0dXMgPSBjaDkyMDBfc3RhdHVzLFxuIDQxNTpcdFx0LmxpbmtfcmVzZXQgPSBjaDkyMDBfbGlua19yZXNldCxcbiA0MTY6XHRcdC5yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxuIDQxNzpcdH07XG4gNDE4Olx0XG4gNDE5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNoOTIwMF9wcm9kdWN0c1tdID0ge1xuIDQyMDpcdFx0e1xuIDQyMTpcdFx0IFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpLFxuIDQyMjpcdFx0IC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKVx1MDAyNmNoOTIwMF9pbmZvLFxuIDQyMzpcdFx0IH0sXG4gNDI0Olx0XHR7fSxcbiA0MjU6XHR9O1xuIDQyNjpcdFxuIDQyNzpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBjaDkyMDBfcHJvZHVjdHMpO1xuIDQyODpcdFxuIDQyOTpcdHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjaDkyMDBfZHJpdmVyID0ge1xuIDQzMDpcdFx0Lm5hbWUgPSBcJiMzNDtjaDkyMDBcJiMzNDssXG4gNDMxOlx0XHQuaWRfdGFibGUgPSBjaDkyMDBfcHJvZHVjdHMsXG4gNDMyOlx0XHQucHJvYmUgPSB1c2JuZXRfcHJvYmUsXG4gNDMzOlx0XHQuZGlzY29ubmVjdCA9IHVzYm5ldF9kaXNjb25uZWN0LFxuIDQzNDpcdFx0LnN1c3BlbmQgPSB1c2JuZXRfc3VzcGVuZCxcbiA0MzU6XHRcdC5yZXN1bWUgPSB1c2JuZXRfcmVzdW1lLFxuIDQzNjpcdH07XG4gNDM3Olx0XG4gNDM4Olx0bW9kdWxlX3VzYl9kcml2ZXIoY2g5MjAwX2RyaXZlcik7XG4gNDM5Olx0XG4gNDQwOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1FpbkhlbmcgQ0g5MjAwIFVTQiBOZXR3b3JrIGRldmljZVwmIzM0Oyk7XG4gNDQxOlx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGNoOTIwMCBEcml2ZXImIzM5O3MgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGNoOTIwMF9wcm9kdWN0c2AgZW50cnk6IGBVU0JfREVWSUNFKDB4MUE4NiwgMHhFMDkyKWAuICBJbiB0aGUgY29udGV4dCBvZiBzeXprYWxsZXIsIHRoaXMgaXMgYSBkZXZpY2UgSSBjYW4gcmVhZGlseSBlbXVsYXRlLiBTeXprYWxsZXImIzM5O3MgVVNCIGVtdWxhdGlvbiBhbGxvd3MgbWUgdG8gY29ubmVjdCAqYW55KiBVU0IgZGV2aWNlIHdpdGggYSBkZWZpbmVkIHZlbmRvciBhbmQgcHJvZHVjdCBJRCDigJMgYW5kIHRoaXMgb25lJiMzOTtzIGF2YWlsYWJsZS4gIFdoZW4gdGhhdCB2aXJ0dWFsIGRldmljZSBjb25uZWN0cywgYHVzYm5ldF9wcm9iZWAgZ2V0cyBjYWxsZWQuICBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBoYXBwZW5zOiBgdXNibmV0X3Byb2JlYCB0aGVuIGNhbGxzIGBjaDkyMDBfYmluZGAuCgpQcmV2aW91c2x5LCBJIHNlZSB0aGVyZSYjMzk7cyBhIHByb2JsZW0gaW4gYGNoOTIwMF9iaW5kYC4gVGhlIGNvZGUgaXNzdWVzIHNldmVyYWwgYGNvbnRyb2xfd3JpdGVgIGNhbGxzLCBidXQgY3J1Y2lhbGx5LCB0aGUgcmV0dXJuIHZhbHVlcyBmcm9tIHRob3NlIGNhbGxzIHdlcmUgKmlnbm9yZWQqISAgU28sIGlmIGEgYGNvbnRyb2xfd3JpdGVgIGZhaWxlZOKAlHNheSwgZHVlIHRvIGEgdGltZW91dCwgYSBVU0IgdHJhbnNmZXIgZXJyb3IsIG9yIGlmIHRoZSBlbXVsYXRlZCBkZXZpY2UgZGVjaWRlZCB0byByZXR1cm4gYW4gZXJyb3Ig4oCTIHRoZSBjb2RlIGp1c3Qga2VwdCBvbiBnb2luZy4gSXQgd291bGQgYmxpdGhlbHkgcHJvY2VlZCB0byBgZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7IGV0aF9od19hZGRyX3NldChkZXYtJmd0O25ldCwgYWRkcik7IHJldHVybiByZXR2YWw7YC4gVGFsayBhYm91dCBhIHBvdGVudGlhbCBmb3Igc29tZSBzZXJpb3VzIGluc3RhYmlsaXR5IQoKTm93LCB0aGUgZml4IGlzIGluOiBhbnkgZmFpbHVyZSBpbiBhIGBjb250cm9sX3dyaXRlYCBjYWxsIHdpbGwgaW1tZWRpYXRlbHkgYWJvcnQgYGNoOTIwMF9iaW5kYC4gSXQmIzM5O2xsIHJldHVybiB0aGUgZXJyb3IgY29kZSAoYHJldHZhbGApLCB3aGljaCB3aWxsLCBpbiB0dXJuLCBjYXVzZSBgdXNibmV0X3Byb2JlYCB0byBmYWlsIGFuZCwgdWx0aW1hdGVseSwgdGVhciBkb3duIHRoZSBkZXZpY2UgKGBkZXZgKS4gIFRoaXMgaXMgYSBnb29kIHN0ZXAsIHByZXZlbnRpbmcgZnVydGhlciBleGVjdXRpb24gYW5kIHBvdGVudGlhbGx5IG1hc2tpbmcgYnVncy4KCkJ1dC4uLndhaXQgYSBtaW51dGUuIElzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqPyAgTGV0JiMzOTtzIGNoZWNrIHRoZSBjcml0ZXJpYS4gTXkgZXhwZXJpZW5jZSB3aXRoIHRoaXMgdHlwZSBvZiBkZWJ1Z2dpbmcgdGVsbHMgbWUgdGhhdCwgaW4gU2VjdGlvbiAzIG9mIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uLCB0aGUga2V5IGlzIHRoZSBwcmVzZW5jZSBvZiB2aXJ0dWFsIGJ1c2VzLiBBbmQgeXVwLCB0aGVyZSB0aGV5IGFyZTogdmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuICBTcGVjaWZpY2FsbHksIFVTQiBkcml2ZXJzIGFyZSBhY2Nlc3NpYmxlIHZpYSBVU0IgcmF3IGdhZGdldCwgdmhjaSwgYW5kIGR1bW15X2hjZCBlbXVsYXRpb24uIEFuZCBzeXprYWxsZXIgKmV4cGxpY2l0bHkqIHRhcmdldHMgdGhlc2UgVVNCIGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgdXNibmV0IGRyaXZlcnMgdmlhIGBzeXpfdXNiX2Nvbm5lY3RgLiBZZXMsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZS4KCkkgbmVlZCBtb3JlIGNvbnRleHQsIHRob3VnaC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgZ2l0IGNvbW1pdHMgb3Igc2ltaWxhciBwYXRjaGVzIHRoYXQgZXhwbGFpbiB0aGUgaGlzdG9yeSBvZiB0aGlzLCB0byBrbm93IHdoYXQgcHJvbXB0ZWQgdGhpcyBjaGFuZ2UgYW5kIHVuZGVyc3RhbmQgaXRzIGltcGFjdCwgYW5kIHRvIGtub3cgd2hhdCBjb25kaXRpb25zIHdvdWxkIHRyaWdnZXIgdGhpcyBidWcuIEkmIzM5O2xsIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZSBvciB0aGUgZ2l0IGxvZyBvZiBgY2g5MjAwLmNgIGl0c2VsZi4gVGhpcyBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbnRyb2xfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTk5PXN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTM2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjEzNzpzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTM4LVx0XHRcdCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTE5Nz1zdGF0aWMgdm9pZCBjaDkyMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTEtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjEyOlx0Y29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIGxvYyAqIDIsIGJ1ZmYsIDB4MDIsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjEzLVx0XHQgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0zMzg9c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjAtXHRkYXRhWzFdID0gMHgwRjtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNjE6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzYyLVx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjctXHRkYXRhWzFdID0gMHg5MDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNjg6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2OS1cdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzc0LVx0ZGF0YVsxXSA9IDB4MDA7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Mzc1Olx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzc2LVx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zODEtXHRkYXRhWzFdID0gMHhEODtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozODI6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzgzLVx0XHRcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zODktXHRkYXRhWzFdID0gMHgwMDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozOTA6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM5MS1cdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzk2LVx0ZGF0YVsxXSA9IDB4MEQ7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Mzk3Olx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTgtXHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTE3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ0g5MjAwIERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgY29udHJvbF93cml0ZWAgZnVuY3Rpb24gaXMgd29ya2luZyB3aXRoaW4gdGhlIENIOTIwMCBVU0IgbmV0d29yayBkcml2ZXIuIExldCYjMzk7cyBzdGFydCBieSBoZWFkaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIG9wZW4gdXAgYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AgaW1tZWRpYXRlbHkuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2sgdG8gc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSG9wZWZ1bGx5LCB0aGUgZGVmaW5pdGlvbiB0aGVyZSB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLiBJJiMzOTttIGFzc3VtaW5nIGl0IGhhbmRsZXMgdGhvc2Ugc3RhbmRhcmQgVVNCIGNvbnRyb2wgdHJhbnNmZXJzLCBidXQgSSBuZWVkIHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gdG8gY29uZmlybSBhbmQgZ2V0IHRoZSBmaW5lIGRldGFpbHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHRzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG4gMTM4Olx0XHRcdFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcbiAxMzk6XHRcdFx0XHQgdm9pZCAqZGF0YSwgdW5zaWduZWQgc2hvcnQgc2l6ZSwgaW50IHRpbWVvdXQpXG4gMTQwOlx0e1xuIDE0MTpcdFx0dW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDtcbiAxNDI6XHRcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdF90eXBlO1xuIDE0MzpcdFx0aW50IGVyciA9IDA7XG4gMTQ0Olx0XG4gMTQ1Olx0XHRpZiAocmVxdWVzdCA9PSBSRVFVRVNUX1dSSVRFKVxuIDE0NjpcdFx0XHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxuIDE0NzpcdFx0XHRcdFx0VVNCX1JFQ0lQX09USEVSKTtcbiAxNDg6XHRcdGVsc2VcbiAxNDk6XHRcdFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcbiAxNTA6XHRcdFx0XHRcdFVTQl9SRUNJUF9ERVZJQ0UpO1xuIDE1MTpcdFxuIDE1MjpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDslcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxuXCYjMzQ7LFxuIDE1MzpcdFx0XHQgICBfX2Z1bmNfXywgaW5kZXgsIHNpemUpO1xuIDE1NDpcdFxuIDE1NTpcdFx0aWYgKGRhdGEpIHtcbiAxNTY6XHRcdFx0YnVmID0ga21lbWR1cChkYXRhLCBzaXplLCBHRlBfS0VSTkVMKTtcbiAxNTc6XHRcdFx0aWYgKCFidWYpIHtcbiAxNTg6XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDE1OTpcdFx0XHRcdGdvdG8gZXJyX291dDtcbiAxNjA6XHRcdFx0fVxuIDE2MTpcdFx0fVxuIDE2MjpcdFxuIDE2MzpcdFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cdTAwM2V1ZGV2LFxuIDE2NDpcdFx0XHRcdCAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtXHUwMDNldWRldiwgMCksXG4gMTY1Olx0XHRcdFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcbiAxNjY6XHRcdFx0XHQgICAgICB0aW1lb3V0KTtcbiAxNjc6XHRcdGlmIChlcnIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBlcnIgXHUwMDNjIHNpemUpXG4gMTY4Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMTY5Olx0XHRrZnJlZShidWYpO1xuIDE3MDpcdFxuIDE3MTpcdFx0cmV0dXJuIDA7XG4gMTcyOlx0XG4gMTczOlx0ZXJyX291dDpcbiAxNzQ6XHRcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjkzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBgY29udHJvbF93cml0ZWAgLSBBIENyaXRpY2FsIE92ZXJzaWdodCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJIG5lZWQgdG8gcmV2aXNpdCB0aGlzIGBjb250cm9sX3dyaXRlYCBmdW5jdGlvbjsgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIHBvdGVudGlhbGx5IGF3cnkgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgYXQgbGluZXMgMTY3LTE3Mi4gKkhlcmUqIHdlIGdvOgpgYGBjCgkJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi0mZ3Q7dWRldiwKCQkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtJmd0O3VkZXYsIDApLAoJCQkJICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSwKCQkJCSAgICAgIHRpbWVvdXQpOwoJCWlmIChlcnIgJmd0Oz0gMCAmYW1wOyZhbXA7IGVyciAmbHQ7IHNpemUpCgkJCWVyciA9IC1FSU5WQUw7CgkJa2ZyZWUoYnVmKTsKCgkJcmV0dXJuIDA7CgplcnJfb3V0OgoJCXJldHVybiBlcnI7CmBgYApUaGF0IGBrZnJlZShidWYpYCBpcyBkZWZpbml0ZWx5IGdldHRpbmcgbXkgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIHJlZ2FyZGxlc3Mgb2YgdGhlIG91dGNvbWUgb2YgYHVzYl9jb250cm9sX21zZ2AsIHRoZSBidWZmZXIgaXMgKmFsd2F5cyogZnJlZWQgYW5kIHRoZSBmdW5jdGlvbiAqYWx3YXlzKiByZXR1cm5zIDAgYWZ0ZXIgYSBzdWNjZXNzZnVsIGJ1ZmZlciBhbGxvY2F0aW9uLiBObywgbm8sIHdhaXQuLi4gbGV0IG1lIHJlLWV4YW1pbmUgdGhpcy4gTG9vaywgbGluZSAxNzEgKmFsd2F5cyogcmV0dXJucyAwIGlmIHdlIGdldCBwYXN0IHRoZSBidWZmZXIgYWxsb2NhdGlvbi4gRXZlbiBpZiBgdXNiX2NvbnRyb2xfbXNnYCBmYWlscywgdGhlIGVycm9yIGNvZGUgZ2V0cyBzZXQsIGFuZCAqdGhlbiogdGhlIGZ1bmN0aW9uIHNpbXBseSByZXR1cm5zIDAhIElzIHRoYXQgdHJ1ZT8gQW0gSSByZWFkaW5nIHRoaXMgY29ycmVjdGx5PyBJJiMzOTttIGdvaW5nIHRvIGJhY2sgdXAgYW5kIHJlLXJlYWQgdGhlIGVudGlyZSBzZWN0aW9uIGZyb20gMTYwLTE4MCB0byBiZSBjZXJ0YWluLiBJIG5lZWQgdG8gYmUgKnN1cmUqIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZSBoZXJlLiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgYnVnIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYwOlx0XHRcdH1cbiAxNjE6XHRcdH1cbiAxNjI6XHRcbiAxNjM6XHRcdGVyciA9IHVzYl9jb250cm9sX21zZyhkZXYtXHUwMDNldWRldixcbiAxNjQ6XHRcdFx0XHQgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LVx1MDAzZXVkZXYsIDApLFxuIDE2NTpcdFx0XHRcdCAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdHlwZSwgdmFsdWUsIGluZGV4LCBidWYsIHNpemUsXG4gMTY2Olx0XHRcdFx0ICAgICAgdGltZW91dCk7XG4gMTY3Olx0XHRpZiAoZXJyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZXJyIFx1MDAzYyBzaXplKVxuIDE2ODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDE2OTpcdFx0a2ZyZWUoYnVmKTtcbiAxNzA6XHRcbiAxNzE6XHRcdHJldHVybiAwO1xuIDE3MjpcdFxuIDE3MzpcdGVycl9vdXQ6XG4gMTc0Olx0XHRyZXR1cm4gZXJyO1xuIDE3NTpcdH1cbiAxNzY6XHRcbiAxNzc6XHRzdGF0aWMgaW50IGNoOTIwMF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYylcbiAxNzg6XHR7XG4gMTc5Olx0XHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIDE4MDpcdFx0dW5zaWduZWQgY2hhciBidWZmWzJdO1xuIDE4MTpcdFx0aW50IHJldDtcbiAxODI6XHRcbiAxODM6XHRcdG5ldGRldl9kYmcobmV0ZGV2LCBcJiMzNDslcyBwaHlfaWQ6JTAyeCBsb2M6JTAyeFxcblwmIzM0OyxcbiAxODQ6XHRcdFx0ICAgX19mdW5jX18sIHBoeV9pZCwgbG9jKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMzEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFVTQiBEcml2ZXIgUGF0Y2ggYW5kIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBub3RpY2VkIGEgaGFyZGNvZGVkIGByZXR1cm4gMGAgaW4gYGNvbnRyb2xfd3JpdGVgIGF0IGxpbmUgMTcxLiBCdXQgd2FpdCwgaXQmIzM5O3Mgbm90IGFsd2F5cyB6ZXJvLCBpdCBjYW4gcmV0dXJuIGAtRU5PTUVNYCBpZiBga21lbWR1cGAgZmFpbHMuIFRoYXQmIzM5O3MgYSBwb2ludC4KClRoZSBtb3JlIHJlY2VudCBwYXRjaCBhZGRzIGBpZiAocmV0dmFsICZsdDsgMCkgcmV0dXJuIHJldHZhbDtgIGluIGBjaDkyMDBfYmluZGAuIFRoaXMgbWVhbnMgdGhlIGNvZGUgbm93IGV4cGxpY2l0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNvbnRyb2xfd3JpdGVgIGFuZCByZXR1cm5zIGVhcmx5IGlmIGl0JiMzOTtzIG5lZ2F0aXZlLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgcHJldmlvdXNseSwgdGhlIGByZXR2YWxgIGZyb20gYGNvbnRyb2xfd3JpdGVgIHdhcyBvdmVyd3JpdHRlbiBieSBzdWJzZXF1ZW50IGNhbGxzLiBJdCBsb29rcyBsaWtlIGEgYnVnLWZpeCB0byBoYW5kbGUgcG90ZW50aWFsIGVycm9ycyBmcm9tIGBjb250cm9sX3dyaXRlYC4gQW5kIGlmIHRoZSBga21lbWR1cGAgZmFpbHMsIHRoYXQgcmV0dXJucyBgLUVOT01FTWAuIEl0IG1ha2VzIGBjb250cm9sX3dyaXRlYCByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZS4KCk5vdywgY291bGQgYGNvbnRyb2xfd3JpdGVgIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIG90aGVyIHRoYW4gYC1FTk9NRU1gPyBObywgYmVjYXVzZSBgZGF0YWAgaXMgbm9uLW51bGwuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBwYXRjaCBpcyBwYXJ0IG9mIGEgc2VyaWVzIG9yIGhpc3Rvcnkgb2YgY29tbWl0cywgYnV0IGdyZXBwZXIgb3IgcmVhZGluZyB0aGUgZmlsZSB3aWxsIHByb3ZpZGUgbW9yZSBkZXRhaWwuCgpSaWdodCwgdGhlIGRpZmYgb25seSB0b3VjaGVzIGBjaDkyMDAuY2Agd2l0aGluIGBjaDkyMDBfYmluZGAuIFRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSBob3cgZXJyb3JzIGZyb20gYGNvbnRyb2xfd3JpdGVgIGFyZSBoYW5kbGVkIGluIGBjaDkyMDBfYmluZGAuIEJlZm9yZSwgdGhlIHJldHVybiB2YWx1ZSB3YXMgaWdub3JlZCwgYW5kIG5vdyBpdCYjMzk7cyBjaGVja2VkLiBUaGlzIG1lYW5zIGBjb250cm9sX3dyaXRlYCAqY2FuKiByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSwgc3BlY2lmaWNhbGx5IGAtRU5PTUVNYCwgZHVlIHRvIGEgYGttZW1kdXBgIGZhaWx1cmUuIExvb2tzIGxpa2UgYSBidWctZml4LgoKVGhlIGtleSBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IFRoaXMgaXMgYSBjb3JlIGNvbmNlcHQuIEdpdmVuIHRoYXQgYGNoOTIwMGAgaXMgYSBVU0IgZHJpdmVyLCBpdCAqaXMqIHJlYWNoYWJsZS4gVVNCIGRyaXZlcnMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB2aXJ0dWFsIGJ1c2VzIHN1Y2ggYXMgVVNCIGdhZGdldCwgdmhjaSwgb3IgZHVtbXlfaGNkLiBgY2g5MjAwYCBpcyBpbiBgZHJpdmVycy9uZXQvdXNiL2AsIG1ha2luZyBpdCBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIuIFRoZSBjb2RlIGNvbnRhaW5zOgoKYGBgYwpzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2g5MjAwX3Byb2R1Y3RzW10gPSB7Cgl7CgkgVVNCX0RFVklDRSgweDFBODYsIDB4RTA5MiksCgkgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmFtcDtjaDkyMDBfaW5mbywKCSB9LAoJe30sCn07CmBgYAoKVGhpcyBtZWFucyB0aGF0IHdoZW4gc3l6a2FsbGVyIGNvbm5lY3RzIGEgVVNCIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgVklEIGFuZCBQSUQsIHRoZSBgY2g5MjAwX2RyaXZlcmAgd2lsbCBiZSBtYXRjaGVkLCB0cmlnZ2VyaW5nIGB1c2JuZXRfcHJvYmVgLCB3aGljaCBjYWxscyBgY2g5MjAwX2JpbmRgLiBUaGUgYWRkZWQgZXJyb3ItaGFuZGxpbmcgcGF0Y2ggcGF0aHMgKndpbGwqIGJlIGV4ZWN1dGVkIQoKTW9yZW92ZXIsIGl0JiMzOTtzIGVhc2lseSB0cmlnZ2VyYWJsZS4gSWYgd2UgZW1wbG95IGZhdWx0IGluamVjdGlvbiwgc3BlY2lmaWNhbGx5IGttYWxsb2Mgb3IgZmFpbHNsYWIsIHdlIGNhbiBpbmR1Y2UgYSBgLUVOT01FTWAgZnJvbSBga21lbWR1cGAgaW4gYGNvbnRyb2xfd3JpdGVgLiBUaGVuLCB0aGF0IGVycm9yIHdpbGwgYmUgcHJvcGFnYXRlZCB0aHJvdWdoIHRoZSBuZXcgYGlmYCBjb25kaXRpb24gaW4gYGNoOTIwMF9iaW5kYC4KCkdpdmVuIGFsbCBvZiB0aGlzLCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGB1c2JuZXRfcHJvYmVgIGhhbmRsZXMgYGluZm8tJmd0O2JpbmRgIHByb3Blcmx5IHRvIHZlcmlmeSB0aGVyZSBhcmUgbm8gbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlIGZyZWUuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYHVzYm5ldF9wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXR1cyA9IGluZm8tXHUwMDNlYmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MTcyNj11c2JuZXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVkZXYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpwcm9kKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xODA3LVx0XHRuZXQtXHUwMDNlbWF4X210dSA9IEVUSF9NQVhfTVRVO1xuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjE4MDg6XHRcdHN0YXR1cyA9IGluZm8tXHUwMDNlYmluZChkZXYsIHVkZXYpO1xuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTE4MDktXHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzQ3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgdXNibmV0LmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCBkcml2ZXIsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxODA4LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHdoZW4gSSYjMzk7bSB0cmFja2luZyBkb3duIGFuIGlzc3VlIGluIHRoZSBVU0IgbmV0d29ya2luZyBzdGFjay4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IHNvbWV0aGluZyBzcGVjaWZpYyB0byBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRhdGEgdHJhbnNmZXIsIHBlcmhhcHMgcmVsYXRlZCB0byBwYWNrZXQgZnJhbWluZywgYnVmZmVyIG1hbmFnZW1lbnQsIG9yIG1heWJlIGV2ZW4gYW4gaW50ZXJydXB0IGhhbmRsaW5nIGlzc3VlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlIHJldmVhbHMuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCB0YWtlIGEgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MDU6XHRcdC8vIE5PVEUgbmV0LVx1MDAzZW5hbWUgc3RpbGwgbm90IHVzYWJsZSAuLi5cbjE4MDY6XHRcdGlmIChpbmZvLVx1MDAzZWJpbmQpIHtcbjE4MDc6XHRcdFx0bmV0LVx1MDAzZW1heF9tdHUgPSBFVEhfTUFYX01UVTtcbjE4MDg6XHRcdFx0c3RhdHVzID0gaW5mby1cdTAwM2ViaW5kKGRldiwgdWRldik7XG4xODA5Olx0XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4xODEwOlx0XHRcdFx0Z290byBvdXQxO1xuMTgxMTpcdFxuMTgxMjpcdFx0XHQvKiBoZXVyaXN0aWM6IHJlbmFtZSB0byBcJiMzNDtldGglZFwmIzM0OyBpZiB3ZSBhcmUgbm90IHN1cmUgdGhpcyBsaW5rXG4xODEzOlx0XHRcdCAqIGlzIHR3by1ob3N0ICh0aGVzZSBsaW5rcyBrZWVwIFwmIzM0O3VzYiVkXCYjMzQ7KVxuMTgxNDpcdFx0XHQgKi9cbjE4MTU6XHRcdFx0aWYgKChkZXYtXHUwMDNlZHJpdmVyX2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IEZMQUdfRVRIRVIpICE9IDAgXHUwMDI2XHUwMDI2XG4xODE2Olx0XHRcdCAgICAhdXNibmV0X25lZWRzX3VzYl9uYW1lX2Zvcm1hdChkZXYsIG5ldCkpXG4xODE3Olx0XHRcdFx0c3Ryc2NweShuZXQtXHUwMDNlbmFtZSwgXCYjMzQ7ZXRoJWRcJiMzNDssIHNpemVvZihuZXQtXHUwMDNlbmFtZSkpO1xuMTgxODpcdFx0XHQvKiBXTEFOIGRldmljZXMgc2hvdWxkIGFsd2F5cyBiZSBuYW1lZCBcJiMzNDt3bGFuJWRcJiMzNDsgKi9cbjE4MTk6XHRcdFx0aWYgKChkZXYtXHUwMDNlZHJpdmVyX2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IEZMQUdfV0xBTikgIT0gMClcbjE4MjA6XHRcdFx0XHRzdHJzY3B5KG5ldC1cdTAwM2VuYW1lLCBcJiMzNDt3bGFuJWRcJiMzNDssIHNpemVvZihuZXQtXHUwMDNlbmFtZSkpO1xuMTgyMTpcdFx0XHQvKiBXV0FOIGRldmljZXMgc2hvdWxkIGFsd2F5cyBiZSBuYW1lZCBcJiMzNDt3d2FuJWRcJiMzNDsgKi9cbjE4MjI6XHRcdFx0aWYgKChkZXYtXHUwMDNlZHJpdmVyX2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IEZMQUdfV1dBTikgIT0gMClcbjE4MjM6XHRcdFx0XHRzdHJzY3B5KG5ldC1cdTAwM2VuYW1lLCBcJiMzNDt3d2FuJWRcJiMzNDssIHNpemVvZihuZXQtXHUwMDNlbmFtZSkpO1xuMTgyNDpcdFxuMTgyNTpcdFx0XHQvKiBkZXZpY2VzIHRoYXQgY2Fubm90IGRvIEFSUCAqL1xuMTgyNjpcdFx0XHRpZiAoKGRldi1cdTAwM2Vkcml2ZXJfaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRkxBR19OT0FSUCkgIT0gMClcbjE4Mjc6XHRcdFx0XHRuZXQtXHUwMDNlZmxhZ3MgfD0gSUZGX05PQVJQO1xuMTgyODpcdFxuMTgyOTpcdFx0XHRpZiAoKGRldi1cdTAwM2Vkcml2ZXJfaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRkxBR19OT01BWE1UVSkgPT0gMCBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIEVycm9yIEhhbmRsaW5nIGluIHRoZSBgaW5mby0mZ3Q7YmluZGAgQ2FsbCoqCgpSaWdodCwgc28gYGluZm8tJmd0O2JpbmRgIGp1c3QgZmFpbGVkLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyBuZWdhdGl2ZS4gVGhhdCBtZWFucyB3ZSBqdW1wIHRvIGBnb3RvIG91dDFgLiBNeSBmb2N1cyBpcyBub3cgbGFzZXItc2hhcnAgb24gd2hhdCBoYXBwZW5zIGF0IHRoZSBgb3V0MWAgbGFiZWwsIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgY2xlYW51cCBwYXRoIHdlJiMzOTtyZSB0YWtpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyByZWxlYXNlZCwgd2hhdCBzdGF0ZSBpcyBiZWluZyByZXNldCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciByYWNlIGNvbmRpdGlvbnMgaW50cm9kdWNlZCBieSB0aGlzIGVhcmx5IGV4aXQuIExldCBtZSBjb25zdWx0IGxpbmVzIDE4NTAtMTg4MCwgYXMgSSBleHBlY3QgdGhlIGVycm9yIGhhbmRsaW5nIGluIGBvdXQxYCB0byBiZSBkZWZpbmVkIHRoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIG1lbW9yeSBkZWFsbG9jYXRpb25zLCBzb2NrZXQgY2xvc2VzLCBhbnkga2luZCBvZiByZXNvdXJjZSBjbGVhbnVwLCBhbmQgYWxzbyBhbnkgb3RoZXIgcmVsZXZhbnQgZXJyb3IgaGFuZGxpbmcgb3IgbG9nZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NTA6XHRcdFx0XHRzdGF0dXMgPSAwO1xuMTg1MTpcdFxuMTg1MjpcdFx0XHRpZiAoc3RhdHVzID09IDAgXHUwMDI2XHUwMDI2ICF1c2JfY2hlY2tfYnVsa19lbmRwb2ludHModWRldiwgZXBfYWRkcnMpKVxuMTg1MzpcdFx0XHRcdHN0YXR1cyA9IC1FSU5WQUw7XG4xODU0Olx0XHR9XG4xODU1Olx0XHRpZiAoc3RhdHVzIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZXN0YXR1cylcbjE4NTY6XHRcdFx0c3RhdHVzID0gaW5pdF9zdGF0dXMoZGV2LCB1ZGV2KTtcbjE4NTc6XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4xODU4Olx0XHRcdGdvdG8gb3V0MztcbjE4NTk6XHRcbjE4NjA6XHRcdGlmICghZGV2LVx1MDAzZXJ4X3VyYl9zaXplKVxuMTg2MTpcdFx0XHRkZXYtXHUwMDNlcnhfdXJiX3NpemUgPSBkZXYtXHUwMDNlaGFyZF9tdHU7XG4xODYyOlx0XHRkZXYtXHUwMDNlbWF4cGFja2V0ID0gdXNiX21heHBhY2tldChkZXYtXHUwMDNldWRldiwgZGV2LVx1MDAzZW91dCk7XG4xODYzOlx0XHRpZiAoZGV2LVx1MDAzZW1heHBhY2tldCA9PSAwKSB7XG4xODY0Olx0XHRcdC8qIHRoYXQgaXMgYSBicm9rZW4gZGV2aWNlICovXG4xODY1Olx0XHRcdHN0YXR1cyA9IC1FTk9ERVY7XG4xODY2Olx0XHRcdGdvdG8gb3V0NDtcbjE4Njc6XHRcdH1cbjE4Njg6XHRcbjE4Njk6XHRcdC8qIHRoaXMgZmxhZ3MgdGhlIGRldmljZSBmb3IgdXNlciBzcGFjZSAqL1xuMTg3MDpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldC1cdTAwM2VkZXZfYWRkcikpXG4xODcxOlx0XHRcdGV0aF9od19hZGRyX3JhbmRvbShuZXQpO1xuMTg3MjpcdFxuMTg3MzpcdFx0aWYgKChkZXYtXHUwMDNlZHJpdmVyX2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IEZMQUdfV0xBTikgIT0gMClcbjE4NzQ6XHRcdFx0U0VUX05FVERFVl9ERVZUWVBFKG5ldCwgXHUwMDI2d2xhbl90eXBlKTtcbjE4NzU6XHRcdGlmICgoZGV2LVx1MDAzZWRyaXZlcl9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBGTEFHX1dXQU4pICE9IDApXG4xODc2Olx0XHRcdFNFVF9ORVRERVZfREVWVFlQRShuZXQsIFx1MDAyNnd3YW5fdHlwZSk7XG4xODc3Olx0XG4xODc4Olx0XHQvKiBpbml0aWFsaXplIG1heCByeF9xbGVuIGFuZCB0eF9xbGVuICovXG4xODc5Olx0XHR1c2JuZXRfdXBkYXRlX21heF9xbGVuKGRldik7XG4xODgwOlx0XG4xODgxOlx0XHRpZiAoZGV2LVx1MDAzZWNhbl9kbWFfc2cgXHUwMDI2XHUwMDI2ICEoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRkxBR19TRU5EX1pMUCkgXHUwMDI2XHUwMDI2XG4xODgyOlx0XHRcdCEoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRkxBR19NVUxUSV9QQUNLRVQpKSB7XG4xODgzOlx0XHRcdGRldi1cdTAwM2VwYWRkaW5nX3BrdCA9IGt6YWxsb2MoMSwgR0ZQX0tFUk5FTCk7XG4xODg0Olx0XHRcdGlmICghZGV2LVx1MDAzZXBhZGRpbmdfcGt0KSB7XG4xODg1Olx0XHRcdFx0c3RhdHVzID0gLUVOT01FTTtcbjE4ODY6XHRcdFx0XHRnb3RvIG91dDQ7XG4xODg3Olx0XHRcdH1cbjE4ODg6XHRcdH1cbjE4ODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMzkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyBVU0JuZXQgUHJvYmUgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGB1c2JuZXRfcHJvYmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgZHJpdmVyIGhhbmRsZXMgcG90ZW50aWFsIGZhaWx1cmVzIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2xlYW51cCBsYWJlbHMsIHByb2JhYmx5IGluIHRoZSB2aWNpbml0eSBvZiBsaW5lcyAxOTIwIHRvIDE5NTAuIFRoYXQgc2VjdGlvbiBpcyB1c3VhbGx5IHdoZXJlIHRoZXkgZGVmaW5lIHRob3NlIGVycm9yIGhhbmRsaW5nIGxhYmVscywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIHdoaWNoIHBhcnRzIG9mIHRoZSBpbml0aWFsaXphdGlvbiBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgY2xlYW5lZCB1cCBpZiBzb21ldGhpbmcgZ29lcyBzaWRld2F5cy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgb3JkZXIgb2YgcmVzb3VyY2UgYWxsb2NhdGlvbiB0byBzZWUgd2hpY2ggb3JkZXIgdGhleSBhcHBlYXIuIFRoaXMgaXMgY3JpdGljYWwsIHNpbmNlIGEgbWlzc2VkIGNsZWFudXAgY291bGQgbGVhZCB0byByZXNvdXJjZSBsZWFrcywgd2hpY2ggYXJlIHNvbWV0aGluZyBJIGFtIHF1aXRlIGZhbWlsaWFyIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTE1Olx0XHRpZiAoaW5mby1cdTAwM2V1bmJpbmQpXG4xOTE2Olx0XHRcdGluZm8tXHUwMDNldW5iaW5kKGRldiwgdWRldik7XG4xOTE3Olx0b3V0MTpcbjE5MTg6XHRcdC8qIHN1YmRyaXZlcnMgbXVzdCB1bmRvIGFsbCB0aGV5IGRpZCBpbiBiaW5kKCkgaWYgdGhleVxuMTkxOTpcdFx0ICogZmFpbCBpdCwgYnV0IHdlIG1heSBmYWlsIGxhdGVyIGFuZCBhIGRlZmVycmVkIGtldmVudFxuMTkyMDpcdFx0ICogbWF5IHRyaWdnZXIgYW4gZXJyb3IgcmVzdWJtaXR0aW5nIGl0c2VsZiBhbmQsIHdvcnNlLFxuMTkyMTpcdFx0ICogc2NoZWR1bGUgYSB0aW1lci4gU28gd2Uga2lsbCBpdCBhbGwganVzdCBpbiBjYXNlLlxuMTkyMjpcdFx0ICovXG4xOTIzOlx0XHR1c2JuZXRfbWFya19nb2luZ19hd2F5KGRldik7XG4xOTI0Olx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmRldi1cdTAwM2VrZXZlbnQpO1xuMTkyNTpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2ZGV2LVx1MDAzZWRlbGF5KTtcbjE5MjY6XHRcdGZyZWVfbmV0ZGV2KG5ldCk7XG4xOTI3Olx0b3V0OlxuMTkyODpcdFx0cmV0dXJuIHN0YXR1cztcbjE5Mjk6XHR9XG4xOTMwOlx0RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3Byb2JlKTtcbjE5MzE6XHRcbjE5MzI6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTkzMzpcdFxuMTkzNDpcdC8qXG4xOTM1Olx0ICogc3VzcGVuZCB0aGUgd2hvbGUgZHJpdmVyIGFzIHNvb24gYXMgdGhlIGZpcnN0IGludGVyZmFjZSBpcyBzdXNwZW5kZWRcbjE5MzY6XHQgKiByZXN1bWUgb25seSB3aGVuIHRoZSBsYXN0IGludGVyZmFjZSBpcyByZXN1bWVkXG4xOTM3Olx0ICovXG4xOTM4Olx0XG4xOTM5Olx0aW50IHVzYm5ldF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSlcbjE5NDA6XHR7XG4xOTQxOlx0XHRzdHJ1Y3QgdXNibmV0XHRcdCpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpO1xuMTk0MjpcdFxuMTk0MzpcdFx0aWYgKCFkZXYtXHUwMDNlc3VzcGVuZF9jb3VudCYjNDM7JiM0MzspIHtcbjE5NDQ6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNldHhxLmxvY2spO1xuMTk0NTpcdFx0XHQvKiBkb24mIzM5O3QgYXV0b3N1c3BlbmQgd2hpbGUgdHJhbnNtaXR0aW5nICovXG4xOTQ2Olx0XHRcdGlmIChkZXYtXHUwMDNldHhxLnFsZW4gXHUwMDI2XHUwMDI2IFBNU0dfSVNfQVVUTyhtZXNzYWdlKSkge1xuMTk0NzpcdFx0XHRcdGRldi1cdTAwM2VzdXNwZW5kX2NvdW50LS07XG4xOTQ4Olx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2V0eHEubG9jayk7XG4xOTQ5Olx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjE5NTA6XHRcdFx0fSBlbHNlIHtcbjE5NTE6XHRcdFx0XHRzZXRfYml0KEVWRU5UX0RFVl9BU0xFRVAsIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4xOTUyOlx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2V0eHEubG9jayk7XG4xOTUzOlx0XHRcdH1cbjE5NTQ6XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxOTIKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMTg5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBVU0IgQ0g5MjAwIEV0aGVybmV0IERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYHVzYm5ldF9wcm9iZWAgaGFuZGxlcyBlcnJvcnMgZnJvbSBgaW5mby0mZ3Q7YmluZGAgY2xlYW5seSwgc28gdGhhdCYjMzk7cyBnb29kLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlIGBjaDkyMDBgIGRyaXZlci4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYENPTkZJR19VU0JfTkVUX0NIOTIwMGAgaW4gdGhlIGtlcm5lbCBjb25maWcuCgpMb29raW5nIGF0IGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AsIEkgc2VlIHRoYXQgYFVTQl9ORVRfQ0g5MjAwYCBkZXBlbmRzIG9uIGBVU0JfVVNCTkVUYCwgd2hpY2ggaW4gdHVybiBzZWxlY3RzIGBNSUlgLiBUaGVuLCB0aGVyZSYjMzk7cyBgVVNCX05FVF9EUklWRVJTYCwgd2hpY2ggZGVwZW5kcyBvbiBib3RoIGBVU0JgIGFuZCBgTkVUYC4gU28sIHRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmUgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfQ0g5MjAwYCwgYFVTQmAsIGFuZCBgTkVUYC4gSG93ZXZlciwgbGlzdGluZyBgVVNCX05FVF9DSDkyMDBgLCBgVVNCX1VTQk5FVGAsIGFuZCBgVVNCX05FVF9EUklWRVJTYCAoYWxvbmcgd2l0aCBgVVNCYCkgc2hvdWxkIHN1ZmZpY2UsIGFzIGBzZWxlY3QgTUlJYCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBldmFsdWF0ZSBpdC4gRmlyc3QsIGlzIGl0IHJlYWNoYWJsZT8gWWVzLCBVU0IgZHJpdmVycyBhcmUgcGVyZmVjdGx5IHJlYWNoYWJsZSB0aHJvdWdoIHZpcnR1YWwgYnVzZXMsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSBzeXprYWxsZXIgc2V0dXAgZW11bGF0ZXMgVVNCIGRldmljZXMgdmlhIER1bW15IEhDRCBhbmQgUmF3IEdhZGdldCwgYW5kIHRoaXMgaXMgZXhwbGljaXRseSBtZW50aW9uZWQgYXMgYSByZWFjaGFibGUgZHJpdmVyIHR5cGUuCgpEb2VzIGl0IGZhbGwgaW50byBhbnkgbmVnYXRpdmUgY3JpdGVyaWE/IE5vLiBJdCYjMzk7cyBub3QgZG9jdW1lbnRhdGlvbiwgbG9nZ2luZywgb3IgYnVpbGQgc3lzdGVtIGNvZGUuIEl0JiMzOTtzIG5vdCBhIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIGEgcGh5c2ljYWwgQVNJQyB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZC4gQW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgdGhlIHByb2JlIHBhdGgsIG5vdCB0aGUgZHJpdmVyIHRlYXJkb3duLiBTbywgdGhlIGAuYmluZGAvcHJvYmUgcGF0aCBpcyBleGVjdXRlZC4KClNwZWNpZmljYWxseSwgdGhlIGBjaDkyMDBfYmluZGAgZnVuY3Rpb24gaXMgcmVhY2hhYmxlLiBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiBkeW5hbWljYWxseSBwbHVncyBhbmQgdW5wbHVncyBVU0IgZGV2aWNlcyBkdXJpbmcgc3l6a2FsbGVyIGZ1enppbmcuIFRoZSBiaW5kL3Byb2JlIHBhdGggd2lsbCBiZSBleGVjdXRlZCBldmVyeSB0aW1lIHN5emthbGxlciBzZW5kcyBhIFVTQiBhdHRhY2ggcmVxdWVzdCBmb3IgVklEIDB4MUE4NiBQSUQgMHhFMDkyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYGNoOTIwMF9iaW5kYCBpcyByZWFjaGFibGUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gWWVzLCBkZXNwaXRlIGJlaW5nIGBzdGF0aWNgLCBgY2g5MjAwX2JpbmRgICppcyogZGVmaW5pdGVseSBhIHN5bWJvbCBpbiB0aGUga2VybmVsIHN5bWJvbCB0YWJsZSBiZWNhdXNlIGl0JiMzOTtzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBhIGBzdHJ1Y3QgZHJpdmVyX2luZm9gLCBhbmQgdGh1cyBjYW5ub3QgYmUgaW5saW5lZC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBndWlkZWxpbmVzIG9uICYjMzQ7RXh0cmFjdGluZyBGb2N1c1N5bWJvbHMuJiMzNDsgSSBuZWVkIHRvIGF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBhbmQgdGFyZ2V0IHNwZWNpZmljIGxvZ2ljLiBUaGUgc3BlY2lmaWMgZnVuY3Rpb24gbW9kaWZpZWQgaXMgYGNoOTIwMF9iaW5kYC4gQ2hlY2tpbmcgdGhlIGRpZmYsIGl0JiMzOTtzIGNsZWFyIHRoYXQgb25seSBgY2g5MjAwX2JpbmRgIGlzIHRvdWNoZWQuCgpEb3VibGUtY2hlY2tpbmcgdGhlIGNvbmZpZ3MsIEkgY2FuIGNvbmZpcm0gYFVTQl9ORVRfQ0g5MjAwYCBhbmQgYFVTQl9VU0JORVRgIGFyZSByZXF1aXJlZCwgYWxvbmcgd2l0aCBgVVNCYCBhbmQgYE5FVGAuIFRoZSBgc2VsZWN0IE1JSWAgaXMgYXV0b21hdGljLgoKVG8gY29uZmlybSB0aGVyZSBpcyBubyBzdWJ0bGUgcmVhc29uIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCwgSSBhbSBkb3VibGUtY2hlY2tpbmcgdGhhdCBVU0IgZW11bGF0aW9uIGlzIHN1cHBvcnRlZCBpbiBRRU1VLCBhbmQgdGhhdCBgY2g5MjAwYCBkb2VzIG5vdCByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJpbmcgYSBwaHlzaWNhbCBBU0lDLiBBbGwgY2hlY2tzIG91dCwgYW5kIFVTQiBnYWRnZXQgYW5kIGR1bW15X2hjZCBhcmUgc3BlY2lmaWNhbGx5IGxpc3RlZCBhcyBzdXBwb3J0ZWQuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk15IGZvY3VzIHN5bWJvbCBpcyBgY2g5MjAwX2JpbmRgLgoKQ29uZmlnczogYFVTQl9ORVRfQ0g5MjAwYCwgYFVTQl9VU0JORVRgLgoKVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBhZGRzIGVycm9yIGNoZWNraW5nIGZvciBgY29udHJvbF93cml0ZSgpYCBjYWxscyBpbiBgY2g5MjAwX2JpbmQoKWAsIHdoaWNoIG5vdyBlYXJseSByZXR1cm5zIG9uIGZhaWx1cmUgZHVyaW5nIGRldmljZSBiaW5kaW5nLiBUaGUgZHJpdmVyIGlzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgVVNCIGVtdWxhdGlvbiAoUmF3IEdhZGdldCAvIER1bW15IEhDRCkgd2l0aCBkZXZpY2UgSUQgMHgxQTg2OjB4RTA5Mi4gRnV6emluZyBjYW4gdHJpZ2dlciBhbGxvY2F0aW9uL1VTQiBjb21tdW5pY2F0aW9uIGZhaWx1cmVzIHRvIGV4ZXJjaXNlIHRoZXNlIG5ld2x5IGFkZGVkIGVycm9yIHJldHVybiBwYXRocyBhbmQgdmVyaWZ5IHByb3BlciBjbGVhbnVwLgoKTm93LCBsZXQmIzM5O3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfTkVUX0NIOTIwMCYjMzQ7LAogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2g5MjAwX2JpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciByZXR1cm4gY2hlY2tzIGZvciBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSBkdXJpbmcgVVNCIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIENIOTIwMCBVU0IgZXRoZXJuZXQgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgVVNCIFJhdyBHYWRnZXQgLyBkdW1teV9oY2QpIG1hdGNoaW5nIGl0cyBVU0IgVklEL1BJRC4gRnV6emluZyB3aXRoIFVTQiBmYXVsdCBpbmplY3Rpb24gb3IgdW5leHBlY3RlZCBjb250cm9sIHJlc3BvbnNlcyBjYW4gdGVzdCB0aGVzZSBuZXdseSBpbnRyb2R1Y2VkIGVycm9yIGV4aXQgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9ORVRfQ0g5MjAwJiMzNDssCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaDkyMDBfYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIHJldHVybiBjaGVja3MgZm9yIGNvbnRyb2xfd3JpdGUoKSBjYWxscyBpbiBjaDkyMDBfYmluZCgpIGR1cmluZyBVU0IgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGUgQ0g5MjAwIFVTQiBldGhlcm5ldCBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgZXhlcmNpc2VkIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBVU0IgUmF3IEdhZGdldCAvIGR1bW15X2hjZCkgbWF0Y2hpbmcgaXRzIFVTQiBWSUQvUElELiBGdXp6aW5nIHdpdGggVVNCIGZhdWx0IGluamVjdGlvbiBvciB1bmV4cGVjdGVkIGNvbnRyb2wgcmVzcG9uc2VzIGNhbiB0ZXN0IHRoZXNlIG5ld2x5IGludHJvZHVjZWQgZXJyb3IgZXhpdCBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgcmV0dXJuIHZhbHVlIGVycm9yIGNoZWNrcyBmb3IgY2FsbHMgdG8gY29udHJvbF93cml0ZSgpIGluIGNoOTIwMF9iaW5kKCkuIFRoZSBkYXRhIGJ1ZmZlciBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpIGlzIGZ1bGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGVhY2ggY2FsbCwgYW5kIHJldHVybmluZyBhbiBlcnJvciBjb2RlIHVwb24gZmFpbHVyZSBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGFjY2Vzc2VkLCBhbmQgY29udHJvbCBmbG93IGlzIG5vdCBhbHRlcmVkIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgS01TQU4gZnV6emluZy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM1MmYxYTgxMGRmM2MyOTZjOTdiNTM0YmM1NmJlZGQzMGVkODQyMGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAyMzo0MDozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYwppbmRleCBhMjA2ZmZhNzZmMWI5Li5hYjNjZDM5MDJlZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jCkBAIC0zNjAsMzIgJiM0MzszNjAsNDQgQEAgc3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogCWRhdGFbMV0gPSAweDBGOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSwKIAkJCSAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAlkYXRhWzBdID0gMHhBMDsKIAlkYXRhWzFdID0gMHg5MDsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLAogCQkJICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweDMwOwogCWRhdGFbMV0gPSAweDAwOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLAogCQkJICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweDE3OwogCWRhdGFbMV0gPSAweEQ4OwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCwKIAkJCSAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0dmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXR2YWw7CiAKIAkvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi8KIAlkYXRhWzBdID0gMHgwMTsKIAlkYXRhWzFdID0gMHgwMDsKIAlyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLAogCQkJICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXR2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldHZhbDsKIAogCWRhdGFbMF0gPSAweDVGOwogCWRhdGFbMV0gPSAweDBEOwogCXJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0NUUkwsIGRhdGEsIDB4MDIsCiAJCQkgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0dmFsOwogCiAJcmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7CiAJZXRoX2h3X2FkZHJfc2V0KGRldi0mZ3Q7bmV0LCBhZGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgVVNCIENIOTIwMCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhlIHBhdGNoIEkgbmVlZCB0byBhbmFseXplIGlzIHJlbGF0ZWQgdG8gdGhlIFVTQiBDSDkyMDAgZHJpdmVyLiBJIHJlbWVtYmVyIHRoYXQgdGhlIHJlbGV2YW50IHNvdXJjZSBjb2RlIHdpbGwgYmUgbG9jYXRlZCBpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AgZmlsZS4gR2l2ZW4gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY29kZSBhcm91bmQgbGluZSAzNjAgaW4gdGhhdCBmaWxlLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoYXQgc2VjdGlvbiBpbnRvIHZpZXcgYW5kIGRpdmUgaW4uIFRpbWUgdG8gZ2V0IGRvd24gdG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzA6XHRcdGRhdGFbMl0gPSBtYWNfYWRkclszXTtcbiAzMzE6XHRcdGRhdGFbM10gPSBtYWNfYWRkclsyXTtcbiAzMzI6XHRcdGRhdGFbNF0gPSBtYWNfYWRkclsxXTtcbiAzMzM6XHRcdGRhdGFbNV0gPSBtYWNfYWRkclswXTtcbiAzMzQ6XHRcbiAzMzU6XHRcdHJldHVybiBlcnI7XG4gMzM2Olx0fVxuIDMzNzpcdFxuIDMzODpcdHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiAzMzk6XHR7XG4gMzQwOlx0XHRpbnQgcmV0dmFsID0gMDtcbiAzNDE6XHRcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcbiAzNDI6XHRcdHU4IGFkZHJbRVRIX0FMRU5dO1xuIDM0MzpcdFxuIDM0NDpcdFx0cmV0dmFsID0gdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LCBpbnRmKTtcbiAzNDU6XHRcdGlmIChyZXR2YWwpXG4gMzQ2Olx0XHRcdHJldHVybiByZXR2YWw7XG4gMzQ3Olx0XG4gMzQ4Olx0XHRkZXYtXHUwMDNlbWlpLmRldiA9IGRldi1cdTAwM2VuZXQ7XG4gMzQ5Olx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fcmVhZCA9IGNoOTIwMF9tZGlvX3JlYWQ7XG4gMzUwOlx0XHRkZXYtXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcbiAzNTE6XHRcdGRldi1cdTAwM2VtaWkucmVnX251bV9tYXNrID0gMHgxZjtcbiAzNTI6XHRcbiAzNTM6XHRcdGRldi1cdTAwM2VtaWkucGh5X2lkX21hc2sgPSAweDFmO1xuIDM1NDpcdFxuIDM1NTpcdFx0ZGV2LVx1MDAzZWhhcmRfbXR1ID0gZGV2LVx1MDAzZW5ldC1cdTAwM2VtdHUgJiM0MzsgZGV2LVx1MDAzZW5ldC1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4gMzU2Olx0XHRkZXYtXHUwMDNlcnhfdXJiX3NpemUgPSAyNCAqIDY0ICYjNDM7IDE2O1xuIDM1NzpcdFx0bWlpX253YXlfcmVzdGFydChcdTAwMjZkZXYtXHUwMDNlbWlpKTtcbiAzNTg6XHRcbiAzNTk6XHRcdGRhdGFbMF0gPSAweDAxO1xuIDM2MDpcdFx0ZGF0YVsxXSA9IDB4MEY7XG4gMzYxOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gMzYyOlx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzYzOlx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIDM2NDpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM2NTpcdFxuIDM2NjpcdFx0ZGF0YVswXSA9IDB4QTA7XG4gMzY3Olx0XHRkYXRhWzFdID0gMHg5MDtcbiAzNjg6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG4gMzY5Olx0XHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzcwOlx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIDM3MTpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM3MjpcdFxuIDM3MzpcdFx0ZGF0YVswXSA9IDB4MzA7XG4gMzc0Olx0XHRkYXRhWzFdID0gMHgwMDtcbiAzNzU6XHRcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxuIDM3NjpcdFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDM3NzpcdFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiAzNzg6XHRcdFx0cmV0dXJuIHJldHZhbDtcbiAzNzk6XHRcbiAzODA6XHRcdGRhdGFbMF0gPSAweDE3O1xuIDM4MTpcdFx0ZGF0YVsxXSA9IDB4RDg7XG4gMzgyOlx0XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gMzgzOlx0XHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzg0Olx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIDM4NTpcdFx0XHRyZXR1cm4gcmV0dmFsO1xuIDM4NjpcdFxuIDM4NzpcdFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXG4gMzg4Olx0XHRkYXRhWzBdID0gMHgwMTtcbiAzODk6XHRcdGRhdGFbMV0gPSAweDAwO1xuIDM5MDpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcbiAzOTE6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzOTI6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gMzkzOlx0XHRcdHJldHVybiByZXR2YWw7XG4gMzk0Olx0XG4gMzk1Olx0XHRkYXRhWzBdID0gMHg1RjtcbiAzOTY6XHRcdGRhdGFbMV0gPSAweDBEO1xuIDM5NzpcdFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbiAzOTg6XHRcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzOTk6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gNDAwOlx0XHRcdHJldHVybiByZXR2YWw7XG4gNDAxOlx0XG4gNDAyOlx0XHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiA0MDM6XHRcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiA0MDQ6XHRcbiA0MDU6XHRcdHJldHVybiByZXR2YWw7XG4gNDA2Olx0fVxuIDQwNzpcdFxuIDQwODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gY2g5MjAwX2luZm8gPSB7XG4gNDA5Olx0XHQuZGVzY3JpcHRpb24gPSBcJiMzNDtDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2g6IGBjaDkyMDBfYmluZGAgRXJyb3IgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgZXJyb3IgY2hlY2tpbmcgd2l0aGluIHRoZSBgY2g5MjAwX2JpbmRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGNvbnRyb2xfd3JpdGVgIGlzIGNhbGxlZCByZXBlYXRlZGx5IHdpdGhpbiBgY2g5MjAwX2JpbmRgLiBQcmV2aW91c2x5LCBub25lIG9mIHRoZXNlIGNhbGxzJiMzOTsgcmV0dXJuIHZhbHVlcyB3ZXJlIGJlaW5nIGV4YW1pbmVkLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IG92ZXJzaWdodC4gVGhlIHBhdGNoIGNsZXZlcmx5IGFkZHJlc3NlcyB0aGlzIGJ5IGFkZGluZyBhIHNpbXBsZSBjaGVjayBhZnRlciBlYWNoIGBjb250cm9sX3dyaXRlYCBjYWxsOiBgaWYgKHJldHZhbCAmbHQ7IDApIHJldHVybiByZXR2YWw7YC4gVGhpcyBpcyBhIGNsYXNzaWMsIGJ1dCBvZnRlbiBvdmVybG9va2VkLCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgdGVjaG5pcXVlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiByb2J1c3QgY29kZSwgYW5kIGl0cyBpbmNsdXNpb24gaGVyZSBpcyBhIHdlbGNvbWUgaW1wcm92ZW1lbnQuCgpOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiAqaW5zaWRlKiB0aG9zZSBgY29udHJvbF93cml0ZWAgY2FsbHMuIEkgaGF2ZSB0byBsb29rIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBjb250cm9sX3dyaXRlYCBpdHNlbGYsIGFuZCBhbHNvIGBnZXRfbWFjX2FkZHJlc3NgLCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMgYW5kIHRoZSBsaWtlbHkgaW1wYWN0IG9mIHRoZXNlIGFkZGVkIGNoZWNrcy4gV2UmIzM5O3JlIGVzc2VudGlhbGx5IGhhcmRlbmluZyB0aGUgZHJpdmVyIGhlcmUsIHNvIEkgbmVlZCB0byBhc3Nlc3MgaG93IGVmZmVjdGl2ZSB0aGUgYWRkZWQgZXJyb3IgY2hlY2tpbmcgaXMsIGFuZCB3aGF0IGZhaWx1cmUgc2NlbmFyaW9zIGFyZSBiZWluZyBhZGRyZXNzZWQuIEl0JiMzOTtzIHRpbWUgdG8gZGVsdmUgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjk1Olx0XG4gMjk2Olx0XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgcnhfb3ZlcmhlYWQpKSB7XG4gMjk3Olx0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2LCBcJiMzNDt1bmV4cGVjdGVkIHRpbnkgcnggZnJhbWVcXG5cJiMzNDspO1xuIDI5ODpcdFx0XHRyZXR1cm4gMDtcbiAyOTk6XHRcdH1cbiAzMDA6XHRcbiAzMDE6XHRcdGxlbiA9IChza2ItXHUwMDNlZGF0YVtza2ItXHUwMDNlbGVuIC0gMTZdIHwgc2tiLVx1MDAzZWRhdGFbc2tiLVx1MDAzZWxlbiAtIDE1XSBcdTAwM2NcdTAwM2MgOCk7XG4gMzAyOlx0XHRza2JfdHJpbShza2IsIGxlbik7XG4gMzAzOlx0XG4gMzA0Olx0XHRyZXR1cm4gMTtcbiAzMDU6XHR9XG4gMzA2Olx0XG4gMzA3Olx0c3RhdGljIGludCBnZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuIDMwODpcdHtcbiAzMDk6XHRcdGludCBlcnIgPSAwO1xuIDMxMDpcdFx0dW5zaWduZWQgY2hhciBtYWNfYWRkclsweDA2XTtcbiAzMTE6XHRcdGludCByZF9tYWNfbGVuID0gMDtcbiAzMTI6XHRcbiAzMTM6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7JXM6XFxuXFx0dXNibmV0IFZJRDolMHggUElEOiUweFxcblwmIzM0OywgX19mdW5jX18sXG4gMzE0Olx0XHRcdCAgIGxlMTZfdG9fY3B1KGRldi1cdTAwM2V1ZGV2LVx1MDAzZWRlc2NyaXB0b3IuaWRWZW5kb3IpLFxuIDMxNTpcdFx0XHQgICBsZTE2X3RvX2NwdShkZXYtXHUwMDNldWRldi1cdTAwM2VkZXNjcmlwdG9yLmlkUHJvZHVjdCkpO1xuIDMxNjpcdFxuIDMxNzpcdFx0bWVtc2V0KG1hY19hZGRyLCAwLCBzaXplb2YobWFjX2FkZHIpKTtcbiAzMTg6XHRcdHJkX21hY19sZW4gPSBjb250cm9sX3JlYWQoZGV2LCBSRVFVRVNUX1JFQUQsIDAsXG4gMzE5Olx0XHRcdFx0XHQgIE1BQ19SRUdfU1RBVElPTl9MLCBtYWNfYWRkciwgMHgwMixcbiAzMjA6XHRcdFx0XHRcdCAgQ09OVFJPTF9USU1FT1VUX01TKTtcbiAzMjE6XHRcdHJkX21hY19sZW4gJiM0Mzs9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCwgTUFDX1JFR19TVEFUSU9OX00sXG4gMzIyOlx0XHRcdFx0XHQgICBtYWNfYWRkciAmIzQzOyAyLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuIDMyMzpcdFx0cmRfbWFjX2xlbiAmIzQzOz0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBNQUNfUkVHX1NUQVRJT05fSCxcbiAzMjQ6XHRcdFx0XHRcdCAgIG1hY19hZGRyICYjNDM7IDQsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4gMzI1Olx0XHRpZiAocmRfbWFjX2xlbiAhPSBFVEhfQUxFTilcbiAzMjY6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiAzMjc6XHRcbiAzMjg6XHRcdGRhdGFbMF0gPSBtYWNfYWRkcls1XTtcbiAzMjk6XHRcdGRhdGFbMV0gPSBtYWNfYWRkcls0XTtcbiAzMzA6XHRcdGRhdGFbMl0gPSBtYWNfYWRkclszXTtcbiAzMzE6XHRcdGRhdGFbM10gPSBtYWNfYWRkclsyXTtcbiAzMzI6XHRcdGRhdGFbNF0gPSBtYWNfYWRkclsxXTtcbiAzMzM6XHRcdGRhdGFbNV0gPSBtYWNfYWRkclswXTtcbiAzMzQ6XHRcbiAzMzU6XHRcdHJldHVybiBlcnI7XG4gMzM2Olx0fVxuIDMzNzpcdFxuIDMzODpcdHN0YXRpYyBpbnQgY2g5MjAwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbiAzMzk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUmIzM5O3MgUG90ZW50aWFsIElzc3VlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBmb2N1c2luZyBvbiBgZ2V0X21hY19hZGRyZXNzYC4gSSBzZWUgYSBgbWVtc2V0YCBjYWxsIHJpZ2h0IGF3YXk6IGBtZW1zZXQobWFjX2FkZHIsIDAsIHNpemVvZihtYWNfYWRkcikpO2AuIFRoYXQmIzM5O3MgZ29vZCDigJMgaW5pdGlhbGl6aW5nIHRoZSBNQUMgYWRkcmVzcyBidWZmZXIgaXMgYWx3YXlzIGEgc29saWQgcHJhY3RpY2UuIE5vdywgSSYjMzk7bSBzaGlmdGluZyBteSBhdHRlbnRpb24gdG8gYGNoOTIwMF9iaW5kYC4gVGhlIGNydWNpYWwgY2hhbmdlIGlzIHRoYXQgdGhlIGBjb250cm9sX3dyaXRlYCBjYWxsIG5vdyBpbmNsdWRlcyBhbiBlcnJvciBjaGVjazogYGlmIChyZXR2YWwgJmx0OyAwKSByZXR1cm4gcmV0dmFsO2AuCgpCZWZvcmUgdGhpcyBwYXRjaCwgd2UgaGFkIGEgcG90ZW50aWFsIGJ1ZzogYGNvbnRyb2xfd3JpdGVgIGNvdWxkIGZhaWwsIGJ1dCB0aGUgY29kZSB3b3VsZCBibGluZGx5IGNvbnRpbnVlIHRvIGNhbGwgYGdldF9tYWNfYWRkcmVzc2AgYW5kIGBldGhfaHdfYWRkcl9zZXRgLiBOb3csIHdpdGggdGhlIGNoZWNrLCBpZiBgY29udHJvbF93cml0ZWAgcmV0dXJucyBhbiBlcnJvciwgdGhlIGZ1bmN0aW9uIHdpbGwgYmFpbCBvdXQgZWFybHkuIFRoaXMgYmVncyB0aGUgcXVlc3Rpb246IGRvZXMgYGNoOTIwMF9iaW5kYCBsZWFrIG1lbW9yeSBvciB1c2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/CgpJJiMzOTttIG5vdGluZyB0aGF0IHRoZSBgYWRkcmAgdmFyaWFibGUgaW4gYGNoOTIwMF9iaW5kYCBpcyBkZWNsYXJlZCBhcyBgdTggYWRkcltFVEhfQUxFTl07YCB3aGljaCBpcyBnb29kLiBIb3dldmVyLCBpZiBgY29udHJvbF93cml0ZWAgZmFpbHMsIHRob3NlIGNhbGxzIHRvIGBnZXRfbWFjX2FkZHJlc3NgIGFuZCBgZXRoX2h3X2FkZHJfc2V0YCBhcmUgKmNvbXBsZXRlbHkqIHNraXBwZWQuIFRoZSBrZXkgaXMgbm93IHRoYXQgYGFkZHJgIGlzIG5vdCB1c2VkIGluIHRoZSBmYWlsdXJlIGNhc2UhCgpTbywgdGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGFkZHJgIGlzICpvbmx5KiB1c2VkIGlmIGBjb250cm9sX3dyaXRlYCBzdWNjZWVkcy4gVGhpcyBjaGFuZ2UgcHJldmVudHMgYSBwb3NzaWJsZSB1c2UtYWZ0ZXItZmFpbHVyZSBidWcuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGNvbnRyb2xfd3JpdGVgIGl0c2VsZiB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdFxuICAzMTpcdCNkZWZpbmUgUkVRVUVTVF9SRUFEXHQweDBFXG4gIDMyOlx0I2RlZmluZSBSRVFVRVNUX1dSSVRFXHQweDBGXG4gIDMzOlx0XG4gIDM0Olx0LyogQWRkcmVzcyBzcGFjZTpcbiAgMzU6XHQgKiAwMC02MyA6IE1JSVxuICAzNjpcdCAqIDY0LTEyODogTUFDXG4gIDM3Olx0ICpcbiAgMzg6XHQgKiBOb3RlOiBhbGwgYWNjZXNzZXMgbXVzdCBiZSAxNi1iaXRcbiAgMzk6XHQgKi9cbiAgNDA6XHRcbiAgNDE6XHQjZGVmaW5lIE1BQ19SRUdfQ1RSTCA2NFxuICA0MjpcdCNkZWZpbmUgTUFDX1JFR19TVEFUVVMgNjZcbiAgNDM6XHQjZGVmaW5lIE1BQ19SRUdfSU5URVJSVVBUX01BU0sgNjhcbiAgNDQ6XHQjZGVmaW5lIE1BQ19SRUdfUEhZX0NPTU1BTkQgNzBcbiAgNDU6XHQjZGVmaW5lIE1BQ19SRUdfUEhZX0RBVEEgNzJcbiAgNDY6XHQjZGVmaW5lIE1BQ19SRUdfU1RBVElPTl9MIDc0XG4gIDQ3Olx0I2RlZmluZSBNQUNfUkVHX1NUQVRJT05fTSA3NlxuICA0ODpcdCNkZWZpbmUgTUFDX1JFR19TVEFUSU9OX0ggNzhcbiAgNDk6XHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9MIDgwXG4gIDUwOlx0I2RlZmluZSBNQUNfUkVHX0hBU0hfTTEgODJcbiAgNTE6XHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9NMiA4NFxuICA1MjpcdCNkZWZpbmUgTUFDX1JFR19IQVNIX0ggODZcbiAgNTM6XHQjZGVmaW5lIE1BQ19SRUdfVEhSRVNIT0xEIDg4XG4gIDU0Olx0I2RlZmluZSBNQUNfUkVHX0ZJRk9fREVQVEggOTBcbiAgNTU6XHQjZGVmaW5lIE1BQ19SRUdfUEFVU0UgOTJcbiAgNTY6XHQjZGVmaW5lIE1BQ19SRUdfRkxPV19DT05UUk9MIDk0XG4gIDU3Olx0XG4gIDU4Olx0LyogQ29udHJvbCByZWdpc3RlciBiaXRzXG4gIDU5Olx0ICpcbiAgNjA6XHQgKiBOb3RlOiBiaXRzIDEzIGFuZCAxNSBhcmUgcmVzZXJ2ZWRcbiAgNjE6XHQgKi9cbiAgNjI6XHQjZGVmaW5lIExPT1BCQUNLXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxNClcbiAgNjM6XHQjZGVmaW5lIEJBU0UxMDBYXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxMilcbiAgNjQ6XHQjZGVmaW5lIE1CUFNfMTBcdFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMTEpXG4gIDY1Olx0I2RlZmluZSBEVVBMRVhfTU9ERVx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMTApXG4gIDY2Olx0I2RlZmluZSBQQVVTRV9GUkFNRVx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgOSlcbiAgNjc6XHQjZGVmaW5lIFBST01JU0NVT1VTXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA4KVxuICA2ODpcdCNkZWZpbmUgTVVMVElDQVNUXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA3KVxuICA2OTpcdCNkZWZpbmUgQlJPQURDQVNUXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA2KVxuICA3MDpcdCNkZWZpbmUgSEFTSFx0XHRcdCgweDAxIFx1MDAzY1x1MDAzYyA1KVxuICA3MTpcdCNkZWZpbmUgQVBQRU5EX1BBRFx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNClcbiAgNzI6XHQjZGVmaW5lIEFQUEVORF9DUkNcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDMpXG4gIDczOlx0I2RlZmluZSBUUkFOU01JVFRFUl9BQ1RJT05cdCgweDAxIFx1MDAzY1x1MDAzYyAyKVxuICA3NDpcdCNkZWZpbmUgUkVDRUlWRVJfQUNUSU9OXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxKVxuICA3NTpcdCNkZWZpbmUgRE1BX0FDVElPTlx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMClcbiAgNzY6XHRcbiAgNzc6XHQvKiBTdGF0dXMgcmVnaXN0ZXIgYml0c1xuICA3ODpcdCAqXG4gIDc5Olx0ICogTm90ZTogYml0cyA3LTE1IGFyZSByZXNlcnZlZFxuICA4MDpcdCAqL1xuICA4MTpcdCNkZWZpbmUgQUxJR05NRU5UXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA2KVxuICA4MjpcdCNkZWZpbmUgRklGT19PVkVSX1JVTlx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgNSlcbiAgODM6XHQjZGVmaW5lIEZJRk9fVU5ERVJfUlVOXHRcdCgweDAxIFx1MDAzY1x1MDAzYyA0KVxuICA4NDpcdCNkZWZpbmUgUlhfRVJST1JcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDMpXG4gIDg1Olx0I2RlZmluZSBSWF9DT01QTEVURVx0XHQoMHgwMSBcdTAwM2NcdTAwM2MgMilcbiAgODY6XHQjZGVmaW5lIFRYX0VSUk9SXHRcdCgweDAxIFx1MDAzY1x1MDAzYyAxKVxuICA4NzpcdCNkZWZpbmUgVFhfQ09NUExFVEVcdFx0KDB4MDEgXHUwMDNjXHUwMDNjIDApXG4gIDg4Olx0XG4gIDg5Olx0LyogRklGTyBkZXB0aCByZWdpc3RlciBiaXRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgRGVmaW5pdGlvbiBvZiBgY29udHJvbF93cml0ZWAgaW4gYGNoOTIwMC5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgY29udHJvbF93cml0ZWAgd2l0aGluIHRoZSBgY2g5MjAwLmNgIHNvdXJjZSBmaWxlLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBzdGVwLiBJJiMzOTttIGxpa2VseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBvciBwZXJoYXBzIHRyb3VibGVzaG9vdCBhbiBpc3N1ZSByZWxhdGVkIHRvIGl0cyBiZWhhdmlvci4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgc3RyYWlnaHRmb3J3YXJkOiBsb2NhdGUgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGV4YW1pbmUgaXRzIGltcGxlbWVudGF0aW9uLCB1bmRlcnN0YW5kIGl0cyBwYXJhbWV0ZXJzLCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbW9kdWxlIGFuZCBwb3RlbnRpYWxseSB0aGUgaGFyZHdhcmUgaXQmIzM5O3MgY29udHJvbGxpbmcuIFRoZSBjb250ZXh0IGlzIGBjaDkyMDAuY2AsIHdoaWNoIEkmIzM5O20gYXNzdW1pbmcgaXMgdGhlIGRyaXZlciBmaWxlIGZvciB0aGUgQ0g5MjAwIGRldmljZS4gVGhlcmVmb3JlLCB1bmRlcnN0YW5kaW5nIGBjb250cm9sX3dyaXRlYCBjb3VsZCBnaXZlIG1lIGluc2lnaHRzIGludG8gaG93IHRoZSBkcml2ZXIgbWFuYWdlcyBjb250cm9sIHNpZ25hbHMgb3Igd3JpdGVzIGRhdGEgdG8gdGhlIGhhcmR3YXJlLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgZGV2aWNlIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIGxpa2VseSB1c2UgbXkgSURFJiMzOTtzICYjMzQ7Z28gdG8gZGVmaW5pdGlvbiYjMzQ7IG9yIHNlYXJjaCBjYXBhYmlsaXRpZXMgdG8gcXVpY2tseSBsb2NhdGUgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbnRyb2xfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvY2g5MjAwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTk5PXN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTM2LVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjEzNzpzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMTM4LVx0XHRcdCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTE5Nz1zdGF0aWMgdm9pZCBjaDkyMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTEtXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjEyOlx0Y29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIGxvYyAqIDIsIGJ1ZmYsIDB4MDIsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMjEzLVx0XHQgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0zMzg9c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjAtXHRkYXRhWzFdID0gMHgwRjtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNjE6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzYyLVx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNjctXHRkYXRhWzFdID0gMHg5MDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozNjg6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GSUZPX0RFUFRILCBkYXRhLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2OS1cdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzc0LVx0ZGF0YVsxXSA9IDB4MDA7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Mzc1Olx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzc2LVx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zODEtXHRkYXRhWzFdID0gMHhEODtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozODI6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzgzLVx0XHRcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zODktXHRkYXRhWzFdID0gMHgwMDtcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYzozOTA6XHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM5MS1cdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzk2LVx0ZGF0YVsxXSA9IDB4MEQ7XG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6Mzk3Olx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTgtXHRcdFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxOTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkFuYWx5emluZyBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhpcyBkcml2ZXIsIHNwZWNpZmljYWxseSBmcm9tIGxpbmVzIDEzNSB0byAxNjAuIEkgc3VzcGVjdCB0aGlzIHNlY3Rpb24gbGlrZWx5IGRlYWxzIHdpdGggYSBjcnVjaWFsIGFzcGVjdCBvZiB0aGUgQ0g5MjAwIFVTQiBuZXR3b3JrIGFkYXB0ZXIsIHByb2JhYmx5IGluaXRpYWxpemF0aW9uLCBpbnRlcnJ1cHQgaGFuZGxpbmcgc2V0dXAsIG9yIHBvc3NpYmx5IHRoZSBjb3JlIGRhdGEgdHJhbnNmZXIgbG9naWMuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIGRldmljZSBjb21tdW5pY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGtleSBmdW5jdGlvbiBjYWxscywgdmFyaWFibGUgYXNzaWdubWVudHMsIGFuZCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGFueSBjbGVhciBpbmRpY2F0aW9ucyBvZiBob3cgdGhlIGRldmljZSBpcyBjb25maWd1cmVkLCBob3cgZGF0YSBpcyByZWFkIG9yIHdyaXR0ZW4sIG9yIGFueSBlcnJvci1jaGVja2luZyB0aGF0JiMzOTtzIHBlcmZvcm1lZCBkdXJpbmcgdGhpcyBjcnVjaWFsIHBhcnQgb2YgdGhlIGRyaXZlciYjMzk7cyBvcGVyYXRpb24uIEkgZXhwZWN0IHRvIHNlZSByZWZlcmVuY2VzIHRvIFVTQiBlbmRwb2ludHMsIFVSQnMsIGFuZCBwZXJoYXBzIHNvbWUgZGVzY3JpcHRvci1yZWxhdGVkIG9wZXJhdGlvbnMuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGUgc3RydWN0dXJlIHdpdGhpbiB0aGF0IGNvZGUgc2hvdWxkIHByb3ZpZGUgY29udGV4dCwgc28gdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSBjYW4gYmUgbW9yZSBlYXNpbHkgYXNzZXNzZWQuIE15IGV4cGVyaWVuY2Ugd2l0aCBvdGhlciBVU0IgbmV0d29yayBkcml2ZXJzIHNob3VsZCBhbHNvIHByb3ZpZGUgY2x1ZXMgZm9yIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzU6XHR9XG4gMTM2Olx0XG4gMTM3Olx0c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxuIDEzODpcdFx0XHRcdCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgaW5kZXgsXG4gMTM5Olx0XHRcdFx0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNob3J0IHNpemUsIGludCB0aW1lb3V0KVxuIDE0MDpcdHtcbiAxNDE6XHRcdHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7XG4gMTQyOlx0XHR1bnNpZ25lZCBjaGFyIHJlcXVlc3RfdHlwZTtcbiAxNDM6XHRcdGludCBlcnIgPSAwO1xuIDE0NDpcdFxuIDE0NTpcdFx0aWYgKHJlcXVlc3QgPT0gUkVRVUVTVF9XUklURSlcbiAxNDY6XHRcdFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcbiAxNDc6XHRcdFx0XHRcdFVTQl9SRUNJUF9PVEhFUik7XG4gMTQ4Olx0XHRlbHNlXG4gMTQ5Olx0XHRcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XG4gMTUwOlx0XHRcdFx0XHRVU0JfUkVDSVBfREVWSUNFKTtcbiAxNTE6XHRcbiAxNTI6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7JXMoKSBpbmRleD0weCUwMnggc2l6ZT0lZFxcblwmIzM0OyxcbiAxNTM6XHRcdFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcbiAxNTQ6XHRcbiAxNTU6XHRcdGlmIChkYXRhKSB7XG4gMTU2Olx0XHRcdGJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gMTU3Olx0XHRcdGlmICghYnVmKSB7XG4gMTU4Olx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAxNTk6XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gMTYwOlx0XHRcdH1cbiAxNjE6XHRcdH1cbiAxNjI6XHRcbiAxNjM6XHRcdGVyciA9IHVzYl9jb250cm9sX21zZyhkZXYtXHUwMDNldWRldixcbiAxNjQ6XHRcdFx0XHQgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LVx1MDAzZXVkZXYsIDApLFxuIDE2NTpcdFx0XHRcdCAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdHlwZSwgdmFsdWUsIGluZGV4LCBidWYsIHNpemUsXG4gMTY2Olx0XHRcdFx0ICAgICAgdGltZW91dCk7XG4gMTY3Olx0XHRpZiAoZXJyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZXJyIFx1MDAzYyBzaXplKVxuIDE2ODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDE2OTpcdFx0a2ZyZWUoYnVmKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwMwoJCQkJCQkJb3V0cHV0OiAxMzQKCQkJCQkJCXRob3VnaHRzOiA1NzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXMgb2YgdGhlIENIOTIwMCBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgZXJyb3IgY2hlY2tpbmcgd2l0aGluIHRoZSBgY2g5MjAwX2JpbmQoKWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgY29udHJvbF93cml0ZSgpYC4gTG9va2luZyBhdCBgY29udHJvbF93cml0ZSgpYCwgaXQgZHVwbGljYXRlcyBhIHNtYWxsIGJ1ZmZlciAoYGRhdGFgLCBzaXplIDIpIHVzaW5nIGBrbWVtZHVwYCwgdGhlbiB1c2VzIGB1c2JfY29udHJvbF9tc2dgLiBUaGUgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGF0IGBkYXRhWzBdYCBhbmQgYGRhdGFbMV1gIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYGNvbnRyb2xfd3JpdGUoKWAgaXMgZXZlbiBjYWxsZWQuCgpUaGUgcGF0Y2ggaXRzZWxmIGp1c3QgYWRkcyBhbiBgaWYgKHJldHZhbCAmbHQ7IDApIHJldHVybiByZXR2YWw7YCBjaGVjayBhZnRlciBlYWNoIGBjb250cm9sX3dyaXRlKClgIGNhbGwgaW4gYGNoOTIwMF9iaW5kKClgLiBJZiBhIGNvbnRyb2wgd3JpdGUgZmFpbHMsIHRoZSBmdW5jdGlvbiBleGl0cyBlYXJseSwgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlLgoKU28sIHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBOby4gVGhlIGRhdGEgYmVpbmcgcGFzc2VkIHRvIGBjb250cm9sX3dyaXRlKClgIGlzIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQuIFJldHVybmluZyBlYXJseSBzaW1wbHkgbWVhbnMgd2UgYXZvaWQgZnVydGhlciBwb3RlbnRpYWxseSBkYW5nZXJvdXMgb3BlcmF0aW9ucyBkb3duIHRoZSBsaW5lLCBzdWNoIGFzIGNhbGxpbmcgYGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpYC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHJlYWQsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZS4gQW55IGVycm9yIGlzIHNpbXBseSBwcm9wYWdhdGVkIGJhY2sgdXAgdGhlIHN0YWNrIHRvIGB1c2JuZXRgLgoKQ2hlY2tpbmcgdGhlIGNhbGxlciwgYGNoOTIwMF9iaW5kKClgIGlzIGNhbGxlZCBmcm9tIGEgYGRyaXZlcl9pbmZvYCBzdHJ1Y3Qgd2l0aGluIGB1c2JuZXRgLiBJZiBgY2g5MjAwX2JpbmQoKWAgZmFpbHMgKHJldHVybnMgJmx0OyAwKSwgYHVzYm5ldF9wcm9iZWAgY2xlYW5zIHVwIGFuZCBmYWlscyB0aGUgZGV2aWNlIHByb2JpbmcuIEFsbCBzdGFuZGFyZCwgZXhwZWN0ZWQgYmVoYXZpb3IuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UmIzM5O3JlIGp1c3QgYWRkaW5nIGVycm9yIGhhbmRsaW5nLiBBbmQgc2luY2Ugd2UmIzM5O3JlIG9ubHkgYWRkaW5nIGVycm9yIGNoZWNrcywgdGhlIG5hdHVyZSBvZiB0aGVzZSBlcnJvcnMgaXMgZW50aXJlbHkgd2l0aGluIHRoZSByZWFsbSBvZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBvciBzdGFuZGFyZCBlcnJvciBkZXRlY3RvcnMuCgpOb3csIHJlZ2FyZGluZyBLTVNBTiwgdGhpcyBpcyB3aGVyZSB3ZSBnZXQgc3BlY2lmaWMuIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gSW4gdGhpcyBjYXNlLCB3ZSBoYXZlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYGRhdGFgIGJ1ZmZlciBwYXNzZWQgdG8gYGNvbnRyb2xfd3JpdGUoKWAgaXMgYWx3YXlzIGluaXRpYWxpemVkLCBjb250YWluaW5nIHR3byBjb25zdGFudCBieXRlcyBiZWZvcmUgZWFjaCBjYWxsLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIHJlYWQsIHBhc3NlZCB0byB1c2Vyc3BhY2UsIG9yIHVzZWQgaW4gYW55IGNvbmRpdGlvbmFsIGxvZ2ljLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJiMzOTt0IG5lZWRlZC4gVGhpcyBwYXRjaCBmYWxscyBmaXJtbHkgaW4gdGhlIHJlYWxtIG9mIGVycm9yIGhhbmRsaW5nIGFuZCBleGlzdGluZyBlcnJvciBkZXRlY3Rpb24gbWVjaGFuaXNtcy4gTm8gYE5lZWRzS01TQU5gIGlzIG5lY2Vzc2FyeSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHJldHVybiB2YWx1ZSBlcnJvciBjaGVja3MgZm9yIGNhbGxzIHRvIGNvbnRyb2xfd3JpdGUoKSBpbiBjaDkyMDBfYmluZCgpLiBUaGUgZGF0YSBidWZmZXIgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSBpcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byBlYWNoIGNhbGwsIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSB1cG9uIGZhaWx1cmUgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIGNvbnRyb2wgZmxvdyBpcyBub3QgYWx0ZXJlZCBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHJldHVybiB2YWx1ZSBlcnJvciBjaGVja3MgZm9yIGNhbGxzIHRvIGNvbnRyb2xfd3JpdGUoKSBpbiBjaDkyMDBfYmluZCgpLiBUaGUgZGF0YSBidWZmZXIgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSBpcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byBlYWNoIGNhbGwsIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSB1cG9uIGZhaWx1cmUgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIGNvbnRyb2wgZmxvdyBpcyBub3QgYWx0ZXJlZCBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIEtNU0FOIGZ1enppbmcuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQwOjM1LjgyNzYxNTMxNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTA2Mzg1OTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfTkVUX0NIOTIwMFwiLFxuICAgIFwiVVNCX1VTQk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoOTIwMF9iaW5kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHJldHVybiB2YWx1ZSBlcnJvciBjaGVja3MgZm9yIGNhbGxzIHRvIGNvbnRyb2xfd3JpdGUoKSBpbiBjaDkyMDBfYmluZCgpLiBUaGUgZGF0YSBidWZmZXIgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSBpcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byBlYWNoIGNhbGwsIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSB1cG9uIGZhaWx1cmUgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIGNvbnRyb2wgZmxvdyBpcyBub3QgYWx0ZXJlZCBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciByZXR1cm4gY2hlY2tzIGZvciBjb250cm9sX3dyaXRlKCkgY2FsbHMgaW4gY2g5MjAwX2JpbmQoKSBkdXJpbmcgVVNCIGRldmljZSBpbml0aWFsaXphdGlvbi4gVGhlIENIOTIwMCBVU0IgZXRoZXJuZXQgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgVVNCIFJhdyBHYWRnZXQgLyBkdW1teV9oY2QpIG1hdGNoaW5nIGl0cyBVU0IgVklEL1BJRC4gRnV6emluZyB3aXRoIFVTQiBmYXVsdCBpbmplY3Rpb24gb3IgdW5leHBlY3RlZCBjb250cm9sIHJlc3BvbnNlcyBjYW4gdGVzdCB0aGVzZSBuZXdseSBpbnRyb2R1Y2VkIGVycm9yIGV4aXQgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQwOjM1LjgyNzYzMTk3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NTk4MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzUyZjFhODEwZGYzYzI5NmM5N2I1MzRiYzU2YmVkZDMwZWQ4NDIwYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMzo0MDozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcXG5pbmRleCBhMjA2ZmZhNzZmMWI5Li5hYjNjZDM5MDJlZDcyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xcbkBAIC0zNjAsMzIgKzM2MCw0NCBAQCBzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIFxcdGRhdGFbMV0gPSAweDBGO1xcbiBcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXFxuIFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gXFxuIFxcdGRhdGFbMF0gPSAweEEwO1xcbiBcXHRkYXRhWzFdID0gMHg5MDtcXG4gXFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcXG4gXFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0ZGF0YVswXSA9IDB4MzA7XFxuIFxcdGRhdGFbMV0gPSAweDAwO1xcbiBcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcXG4gXFx0XFx0XFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0ZGF0YVswXSA9IDB4MTc7XFxuIFxcdGRhdGFbMV0gPSAweEQ4O1xcbiBcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXFxuIFxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gXFxuIFxcdC8qIFVuZG9jdW1lbnRlZCByZWdpc3RlciAqL1xcbiBcXHRkYXRhWzBdID0gMHgwMTtcXG4gXFx0ZGF0YVsxXSA9IDB4MDA7XFxuIFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXFxuIFxcdFxcdFxcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gXFxuIFxcdGRhdGFbMF0gPSAweDVGO1xcbiBcXHRkYXRhWzFdID0gMHgwRDtcXG4gXFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcXG4gXFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4gXFx0cmV0dmFsID0gZ2V0X21hY19hZGRyZXNzKGRldiwgYWRkcik7XFxuIFxcdGV0aF9od19hZGRyX3NldChkZXYtXFx1MDAzZW5ldCwgYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQwOjM2LjMwMzA1NjE4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTU0NDA0Nzk5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9DSDkyMDBcIixcbiAgICBcIlVTQl9VU0JORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaDkyMDBfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgcmV0dXJuIGNoZWNrcyBmb3IgY29udHJvbF93cml0ZSgpIGNhbGxzIGluIGNoOTIwMF9iaW5kKCkgZHVyaW5nIFVTQiBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFRoZSBDSDkyMDAgVVNCIGV0aGVybmV0IGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4sIFVTQiBSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKSBtYXRjaGluZyBpdHMgVVNCIFZJRC9QSUQuIEZ1enppbmcgd2l0aCBVU0IgZmF1bHQgaW5qZWN0aW9uIG9yIHVuZXhwZWN0ZWQgY29udHJvbCByZXNwb25zZXMgY2FuIHRlc3QgdGhlc2UgbmV3bHkgaW50cm9kdWNlZCBlcnJvciBleGl0IHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM1MmYxYTgxMGRmM2MyOTZjOTdiNTM0YmM1NmJlZGQzMGVkODQyMGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMzo0MDozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYyBiL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuaW5kZXggYTIwNmZmYTc2ZjFiOS4uYWIzY2QzOTAyZWQ3MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG5AQCAtMzYwLDMyICszNjAsNDQgQEAgc3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIFx0ZGF0YVsxXSA9IDB4MEY7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19USFJFU0hPTEQsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4QTA7XG4gXHRkYXRhWzFdID0gMHg5MDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4MzA7XG4gXHRkYXRhWzFdID0gMHgwMDtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1BBVVNFLCBkYXRhLFxuIFx0XHRcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldHZhbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweDE3O1xuIFx0ZGF0YVsxXSA9IDB4RDg7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19GTE9XX0NPTlRST0wsXG4gXHRcdFx0ICAgICAgIGRhdGEsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0LyogVW5kb2N1bWVudGVkIHJlZ2lzdGVyICovXG4gXHRkYXRhWzBdID0gMHgwMTtcbiBcdGRhdGFbMV0gPSAweDAwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIDI1NCwgZGF0YSwgMHgwMixcbiBcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHg1RjtcbiBcdGRhdGFbMV0gPSAweDBEO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfQ1RSTCwgZGF0YSwgMHgwMixcbiBcdFx0XHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRyZXR2YWwgPSBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTtcbiBcdGV0aF9od19hZGRyX3NldChkZXYtXHUwMDNlbmV0LCBhZGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQwOjM2LjMwMzA1ODAwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3MjMyNDAzMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgYSBVU0IgTmV0d29yayBEcml2ZXIqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgYXMgSSBsb29rIGF0IHRoaXMgcGF0Y2guIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgZGlmZiBhZmZlY3RpbmcgdGhlIGBjaDkyMDAuY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIGFtZDY0IGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGFuZCBpZiBpdCBpbnRyb2R1Y2VzIGFueSByZWdyZXNzaW9ucyBvciBwb3RlbnRpYWwgaXNzdWVzLCBlc3BlY2lhbGx5IGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5GaXJzdCwgSSBzZWUgYSBzZXJpZXMgb2YgYGNvbnRyb2xfd3JpdGVgIGNhbGxzIGJlaW5nIGFkZGVkIHdpdGhpbiB0aGUgYGNoOTIwMF9iaW5kYCBmdW5jdGlvbi4gRWFjaCBvZiB0aGVzZSBjYWxscyB3cml0ZXMgZGF0YSB0byBkaWZmZXJlbnQgcmVnaXN0ZXJzIChNQUNfUkVHX1RIUkVTSE9MRCwgTUFDX1JFR19GSUZPX0RFUFRILCBNQUNfUkVHX1BBVVNFLCBldGMuKS4gVGhlIHNpZ25pZmljYW50IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYW4gYGlmIChyZXR2YWwgXHUwMDNjIDApYCBjaGVjayAqYWZ0ZXIqIGVhY2ggd3JpdGUuIFRoaXMgaXMgYSBjcnVjaWFsIGFkZGl0aW9uIHRvIHZlcmlmeSB0aGUgcmVzdWx0IG9mIFVTQiBjb250cm9sIHRyYW5zZmVyLiBUaGlzIGlzIGdvb2QgY29kaW5nIHByYWN0aWNlLCBlbnN1cmluZyB0aGF0IHRoZSBkcml2ZXIgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGVzZSBjb25maWd1cmF0aW9uIHdyaXRlcy4gV2l0aG91dCB0aGlzLCBhIGZhaWx1cmUgd291bGQgYmUgbWFza2VkLCBhbmQgdGhlIGRldmljZSBtaWdodCBub3QgaW5pdGlhbGl6ZSBjb3JyZWN0bHksIGxlYWRpbmcgdG8gcG90ZW50aWFsbHkgc3VidGxlIGJ1Z3Mgb3IsIGluIGEgd29yc2UtY2FzZSBzY2VuYXJpbywgZGV2aWNlIGxvY2t1cC5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoaXMgZHJpdmVyJ3MgcmVsZXZhbmNlIGluIGEgdGVzdGluZyBlbnZpcm9ubWVudC4gU2luY2UgdGhpcyBpcyBhIFVTQiBuZXR3b3JrIGRyaXZlciwgaXQgbmF0dXJhbGx5IHVzZXMgVVNCIHRvIGNvbm5lY3QuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgU3l6a2FsbGVyIHNldHVwIGFuZCB3aGV0aGVyIFVTQiBkZXZpY2VzIGNhbiBiZSBlZmZlY3RpdmVseSBlbXVsYXRlZC4gRm9ydHVuYXRlbHksIFVTQiByYXcgZ2FkZ2V0IGFuZCB2aGNpL0R1bW15IEhDRCBhcmUgaW5kZWVkIHJlYWNoYWJsZSB0aHJvdWdoIFN5emthbGxlci4gVGhpcyBtZWFucyBJIGNhbiBsaWtlbHkgdGVzdCB0aGlzIGRyaXZlciB1c2luZyBTeXprYWxsZXIncyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcy4gVGhlIFN5emthbGxlciBkb2N1bWVudGF0aW9uIGNvbmZpcm1zIHRoYXQgVVNCIG5ldCBkcml2ZXJzIGNhbiBiZSByZWFjaGVkIHZpYSBVU0IgZ2FkZ2V0L3JhdyBnYWRnZXQgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhpcyBkcml2ZXIgaW4gaXRzIG9yaWdpbmFsIGNvbnRleHQuIEknbGwgY2hlY2sgaXRzIGFzc29jaWF0ZWQgS2NvbmZpZyBlbnRyeSB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJ1aWx0IGFuZCB3aGV0aGVyIGl0J3MgZW5hYmxlZCB1bmRlciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4gRmluYWxseSwgSSB3aWxsIGNhcmVmdWxseSBhc3Nlc3MgaWYgdGhpcyBwYXRjaCBtYXkgaW5kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzLiBIb3dldmVyLCBmb3Igbm93LCB0aGUgYWRkZWQgZXJyb3IgY2hlY2tpbmcgaXMgYSBzdGVwIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24gdGhhdCB1c2VzIHRoZSByZXR2YWwgZm9yIHZhbGlkYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MTowMy41MzU0NjI5OTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyNjc3NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVVNCX05FVF9DSDkyMDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU5OT1jb25maWcgVVNCX1ZMNjAwXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTMtXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NjE0OmNvbmZpZyBVU0JfTkVUX0NIOTIwMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYxNS1cXHR0cmlzdGF0ZSBcXFwiUWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19NQklNKVxcdCs9IGNkY19tYmltLm9cXG5kcml2ZXJzL25ldC91c2IvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0g5MjAwKVxcdCs9IGNoOTIwMC5vXFxuZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlLTQzLW9iai0kKENPTkZJR19VU0JfTkVUX0FRQzExMSlcXHQrPSBhcWMxMTEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MTowMy41ODY3MzU2NTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODIwMjgwMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFVTQiBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhcnRpY3VsYXIgVVNCIG5ldHdvcmsgZHJpdmVyIHNpdHVhdGlvbiwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL2AgZGlyZWN0b3J5LiBHaXZlbiB0aGUgY29udGV4dCBvZiB3aGF0IEknbSBsb29raW5nIGF0LCBhcm91bmQgbGluZSA2MTQgZmVlbHMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gY2hvaWNlcy4gSXQncyBsaWtlbHkgdGhhdCBjcml0aWNhbCBkZWZpbml0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhhdCBhcmVhLCBhbmQgbXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGF0IGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGJlc3QgZ3Jhc3BlZCBieSBnZXR0aW5nIGRvd24gaW50byB0aGUgZGV0YWlscyBvZiB0aGUgbG9naWMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjA1LjQwNzAxODU5NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0XFx0ICA0RyBtb2RlbSBmcm9tIFZlcml6b246XFxuIDYxMTpcXHRcXG4gNjEyOlxcdFxcdCAgaHR0cDovL3VidW50dWZvcnVtcy5vcmcvc2hvd3Bvc3QucGhwP3A9MTA1ODk2NDdcXHUwMDI2cG9zdGNvdW50PTE3XFxuIDYxMzpcXHRcXG4gNjE0OlxcdGNvbmZpZyBVU0JfTkVUX0NIOTIwMFxcbiA2MTU6XFx0XFx0dHJpc3RhdGUgXFxcIlFpbmdIZW5nIENIOTIwMCBVU0IgZXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gNjE2OlxcdFxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbiA2MTc6XFx0XFx0c2VsZWN0IE1JSVxcbiA2MTg6XFx0XFx0aGVscFxcbiA2MTk6XFx0XFx0ICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBVU0IgZXRoZXJuZXQgYWRhcHRlciB3aXRoIGEgUWluSGVuZ1xcbiA2MjA6XFx0XFx0ICBDSDkyMDAgY2hpcHNldC5cXG4gNjIxOlxcdFxcbiA2MjI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNjIzOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNoOTIwMC5cXG4gNjI0OlxcdFxcbiA2MjU6XFx0Y29uZmlnIFVTQl9ORVRfQVFDMTExXFxuIDYyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiQXF1YW50aWEgQVF0aW9uIFVTQiB0byA1LzIuNUdiRSBDb250cm9sbGVycyBzdXBwb3J0XFxcIlxcbiA2Mjc6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuIDYyODpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gNjI5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MDUuNDA3MTI2MzY0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Njg0MjQ3NjYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIFVTQl9VU0JORVQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG92ZXJsb29rZWQgYW55IGNydWNpYWwgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYFVTQl9VU0JORVRgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGNvcnJlY3RseSBkZWZpbmVkLCBhbmQgdGhhdCB3ZSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgdGhlIHJlbGF0aW9uc2hpcHMgaW52b2x2ZWQg4oCTIGJvdGggZXhwbGljaXQgYW5kIGltcGxpY2l0LiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgcGFyYW1vdW50IHRvIGF2b2lkIGFueSB1bmV4cGVjdGVkIGJ1aWxkIGVycm9ycyBvciBydW50aW1lIGNvbmZsaWN0cy4gSSdtIHRoaW5raW5nIGFib3V0IHRoaW5ncyBsaWtlIGBVU0JgLCBvYnZpb3VzbHksIGJ1dCBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlIHJlcXVpcmVkIHN1Yi1mZWF0dXJlcyBhcmUgaGFuZGxlZCBhbmQgYW55IHBvdGVudGlhbCBwbGF0Zm9ybS1zcGVjaWZpYyBudWFuY2VzIGFyZSB0YWtlbiBpbnRvIGFjY291bnQuIEl0J3MgYSBrZXkgc3RlcCB0byBjb25maXJtIHdlIGFyZSBjb3ZlcmluZyBhbGwgdGhlIGJhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDk1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MToxMi4yNDk2MDYzNjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1Njc4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9VU0JORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTExMz1jb25maWcgVVNCX0xBTjc4WFhcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEzMS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoxMzI6Y29uZmlnIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzMtXFx0dHJpc3RhdGUgXFxcIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MToxMi4yOTcxNzk1MDVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3NDcxODM1MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBmcm9tIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2A6XG5cbioqQW5hbHl6aW5nIEtjb25maWcncyBVU0IgTmV0d29ya2luZyBPcHRpb25zKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGxpbmVzIDEzMCB0aHJvdWdoIDE1MCBvZiBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgVVNCIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSnVzdCBnbGFuY2luZyBhdCB0aGUgY29udGV4dCwgaXQncyBpbW1lZGlhdGVseSBjbGVhciB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzZWN0aW9uIGRldm90ZWQgdG8gVVNCIG5ldHdvcmsgYWRhcHRlcnMsIHRoZSB2YXJpb3VzIHR5cGVzIHN1cHBvcnRlZCwgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy5cblxuSSBzZWUgYSBsb3Qgb2YgY29uZGl0aW9uYWwgbG9naWMgaGVyZSwgcHJvYmFibHkgaW52b2x2aW5nICpzZWxlY3QqIHN0YXRlbWVudHMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZXBlbmRlbmNpZXMsIHRoYXQncyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5IGFsd2F5cyBsaWVzLiBXaGljaCBVU0IgbmV0d29yayBkZXZpY2VzIGFyZSAqYWN0dWFsbHkqIGVuYWJsZWQgaXMgZ29pbmcgdG8gaGluZ2Ugb24gaG93IHRoZXNlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgcmVzb2x2ZS4gSSBleHBlY3QgdG8gc2VlIGBVU0JfTkVUX0RSSVZFUlNgLCB3aGljaCB3aWxsIGdpdmUgYSBoaWdoIGxldmVsIGVuYWJsaW5nIG9mIHRoZSBVU0IgbmV0d29yayBkcml2ZXJzLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGdhdGV3YXkgb3B0aW9uLiBBZnRlciB0aGF0IEkgYW50aWNpcGF0ZSBpbmRpdmlkdWFsIGRldmljZSBzdXBwb3J0LCBwb3NzaWJseSBncm91cGVkIGJ5IGNoaXBzZXQgb3IgdmVuZG9yLCB0aGF0IGlzIHNlbGVjdGVkIGJ5IHRoZSBnZW5lcmFsIGVuYWJsaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoZXNlIHNlbGVjdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAob25seSBvbmUgY2FuIGJlIHNlbGVjdGVkKSBvciB3aGV0aGVyIG11bHRpcGxlIGRldmljZXMgY2FuIGJlIHN1cHBvcnRlZCBzaW11bHRhbmVvdXNseS5cblxuVGhlIGluY2x1c2lvbiBvZiBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBpcyBjcnVjaWFsLiBUaGlzIGlzIGhvdyB0aGUga2VybmVsIG1ha2VzIHN1cmUgdGhlIFVTQiBzdWJzeXN0ZW0gb3Igc29tZSBvdGhlciByZXF1aXJlZCBwaWVjZSBvZiB0aGUgcHV6emxlIGlzIHByZXNlbnQgYW5kIG9wZXJhdGlvbmFsIGJlZm9yZSBlbmFibGluZyB0aGUgY29ycmVzcG9uZGluZyBuZXR3b3JrIGRyaXZlci4gSSdsbCBiZSBsb29raW5nIHRvIHRyYWNlIHRob3NlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGRldmljZSB0cmVlLiBJJ20gYWxzbyBnb2luZyB0byB3YXRjaCBmb3IgYW55IGBzZWxlY3RgIHN0YXRlbWVudHMsIGFzIHRoYXTigJlzIHVzdWFsbHkgaG93IG1vcmUgZ2VuZXJhbCBzZXR0aW5ncyB0cmlnZ2VyIG1vcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIFRoZSBsaW5lcyBJJ20gbG9va2luZyBhdCBhcmUgdGhlIGtleSB0byBkZWNpZGluZyB3aGF0IHRoZSBrZXJuZWwgd2lsbCBhY3R1YWxseSBzdXBwb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODEwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MTkuNzY5MDE2NzQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsYW43OHh4LlxcbiAxMzE6XFx0XFxuIDEzMjpcXHRjb25maWcgVVNCX1VTQk5FVFxcbiAxMzM6XFx0XFx0dHJpc3RhdGUgXFxcIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXFxcIlxcbiAxMzQ6XFx0XFx0c2VsZWN0IE1JSVxcbiAxMzU6XFx0XFx0aGVscFxcbiAxMzY6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGtpbmRzIG9mIG5ldHdvcmsgbGlua3Mgb3ZlciBVU0IsXFxuIDEzNzpcXHRcXHQgIHdpdGggXFxcIm1pbmlkcml2ZXJzXFxcIiBidWlsdCBhcm91bmQgYSBjb21tb24gbmV0d29yayBkcml2ZXIgY29yZVxcbiAxMzg6XFx0XFx0ICB0aGF0IHN1cHBvcnRzIGRlZXAgcXVldWVzIGZvciBlZmZpY2llbnQgdHJhbnNmZXJzLiAgKFRoaXMgZ2l2ZXNcXG4gMTM5OlxcdFxcdCAgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggc21hbGwgcGFja2V0cyBhbmQgYXQgaGlnaCBzcGVlZHMpLlxcbiAxNDA6XFx0XFxuIDE0MTpcXHRcXHQgIFRoZSBVU0IgaG9zdCBydW5zIFxcXCJ1c2JuZXRcXFwiLCBhbmQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayBtaWdodCBiZTpcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0ICAtIEFub3RoZXIgVVNCIGhvc3QsIHdoZW4gdXNpbmcgVVNCIFxcXCJuZXR3b3JrXFxcIiBvciBcXFwiZGF0YSB0cmFuc2ZlclxcXCJcXG4gMTQ0OlxcdFxcdCAgICBjYWJsZXMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCB0byBuZXR3b3JrIGxhcHRvcHMgdG8gUENzLCBsaWtlXFxuIDE0NTpcXHRcXHQgICAgXFxcIkxhcGxpbmtcXFwiIHBhcmFsbGVsIGNhYmxlcyBvciBzb21lIG1vdGhlcmJvYXJkcy4gIFRoZXNlIHJlbHlcXG4gMTQ2OlxcdFxcdCAgICBvbiBzcGVjaWFsaXplZCBjaGlwcyBmcm9tIG1hbnkgc3VwcGxpZXJzLlxcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHQgIC0gQW4gaW50ZWxsaWdlbnQgVVNCIGdhZGdldCwgcGVyaGFwcyBlbWJlZGRpbmcgYSBMaW51eCBzeXN0ZW0uXFxuIDE0OTpcXHRcXHQgICAgVGhlc2UgaW5jbHVkZSBQREFzIHJ1bm5pbmcgTGludXggKGlQYXEsIFlvcHksIFphdXJ1cywgYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjE5Ljc2OTEwNDU2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozODg0NTQ1Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKktjb25maWcgTWVudSBEZXBlbmRlbmN5IENoZWNrKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaW1lIHRvIGdldCBmYW1pbGlhciB3aXRoIHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGhvdyB0aGUgbWVudSBzdHJ1Y3R1cmUgaXMgc2V0IHVwLCBzcGVjaWZpY2FsbHkgdGhlIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nLCBcIldoZXJlIGRvIHRoZSBvdmVyYWxsIG5ldHdvcmstcmVsYXRlZCBvcHRpb25zIGxpa2UgYE5FVF9FVEhFUk5FVGAgY29tZSBpbnRvIHBsYXk/XCIgSSBzaG91bGQgc2NhbiB0aGUgdG9wIG9mIHRoZSBmaWxlLCBvciBpZiB0aGF0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMsIEknbGwgbmVlZCB0byB1c2UgYG1lbnVjb25maWdgIHRvIG5hdmlnYXRlIGFuZCBmaW5kIHRoZSBtZW51IGVudHJ5IGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgdHJhY2tpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBlbnN1cmluZyB0aGluZ3MgYXJlIHByb3Blcmx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3MuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIFVTQiBuZXR3b3JrIGRyaXZlcnMgZml0IGludG8gdGhlIGJyb2FkZXIga2VybmVsIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MjMuNjUzNjU0MzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29tbWVudCBcXFwiSG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XFxcIlxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiAhVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgIDc6XFx0XFxuICAgODpcXHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xcbiAgIDk6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBOZXR3b3JrIEFkYXB0ZXJzXFxcIlxcbiAgMTA6XFx0XFx0ZGVmYXVsdCBVU0IgaWYgVVNCXFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFVTQiBcXHUwMDI2XFx1MDAyNiBORVRcXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgVVNCX05FVF9EUklWRVJTXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBVU0JfQ0FUQ1xcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBVU0IgRXRoZXJuZXRcXG4gIDIwOlxcdFxcdCAgZGV2aWNlIGJhc2VkIG9uIHRoZSBFTDEyMTBBIGNoaXAuIFN1cHBvcnRlZCBkZXZpY2VzIGFyZTpcXG4gIDIxOlxcdFxcdCAgQmVsa2luIEY1VTAxMVxcbiAgMjI6XFx0XFx0ICBCZWxraW4gRjVVMTExXFxuICAyMzpcXHRcXHQgIENBVEMgTmV0TWF0ZVxcbiAgMjQ6XFx0XFx0ICBDQVRDIE5ldE1hdGUgSUlcXG4gIDI1OlxcdFxcdCAgc21hcnRCcmlkZ2VzIHNtYXJ0TklDXFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdCAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSxcXG4gIDI4OlxcdFxcdCAgdHlwaWNhbGx5IG9uIGV0aDAsIGlmIGl0IGlzIHRoZSBvbmx5IGV0aGVybmV0IGRldmljZSwgb3IgcGVyaGFwcyBvblxcbiAgMjk6XFx0XFx0ICBldGgxLCBpZiB5b3UgaGF2ZSBhIFBDSSBvciBJU0EgZXRoZXJuZXQgY2FyZCBpbnN0YWxsZWQuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAzMjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjYXRjLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRjb25maWcgVVNCX0tBV0VUSFxcbiAgMzU6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBLTFNJIEtMNVVTQjEwMS1iYXNlZCBldGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIG9ubHlcXG4gIDM4OlxcdFxcdCAgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBLTFNJIEtMNUtVU0IxMDFCIGNoaXBzZXQ6XFxuICAzOTpcXHRcXHQgIDNDb20gM0MxOTI1MFxcbiAgNDA6XFx0XFx0ICBBRFMgVVNCLTEwQlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MjMuNjUzNzU2ODUxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxMzI2OTE3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFVTQiBOZXR3b3JrIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZXNlIFVTQiBuZXR3b3JrIGRyaXZlcnMsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbS4gSXQgc2VlbXMgbGlrZSBgVVNCX05FVF9EUklWRVJTYCBpcyB0aGUgdG9wLWxldmVsIG9wdGlvbiwgYW5kIGl0J3MgY29udGluZ2VudCBvbiBib3RoIGBVU0JgIGFuZCBgTkVUYCBiZWluZyBlbmFibGVkIOKAkyBtYWtlcyBzZW5zZSwgcmlnaHQ/IFdlIHdvdWxkbid0IHdhbnQgdG8gaW5jbHVkZSBuZXR3b3JrIGRyaXZlcnMgaWYgd2UgZGlkbid0IGhhdmUgVVNCIHN1cHBvcnQgYW5kIG5ldHdvcmtpbmcgZW5hYmxlZC4gVGhlbiB3ZSBoYXZlIGBVU0JfVVNCTkVUYCwgYW5vdGhlciBkcml2ZXIsIGFuZCBmaW5hbGx5IGBVU0JfTkVUX0NIOTIwMGAuXG5cblRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGBjaDkyMDBgIGRyaXZlciwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUsIGluIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGFyb3VuZCBsaW5lIDM2MCB0byBzZWUgdGhlIGZ1bmN0aW9uIGBjaDkyMDBfYmluZGAuIFRoaXMgc2hvdWxkIHNob3cgbWUgdGhlIGZ1bGwgYmluZGluZyBwcm9jZXNzIGFuZCBob3cgaXQgaXMgbGlua2VkLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIHRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MjUuNzg2NDUyNjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDU6XFx0XFx0aWYgKHJldHZhbClcXG4gMzQ2OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGRldi1cXHUwMDNlbWlpLmRldiA9IGRldi1cXHUwMDNlbmV0O1xcbiAzNDk6XFx0XFx0ZGV2LVxcdTAwM2VtaWkubWRpb19yZWFkID0gY2g5MjAwX21kaW9fcmVhZDtcXG4gMzUwOlxcdFxcdGRldi1cXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcXG4gMzUxOlxcdFxcdGRldi1cXHUwMDNlbWlpLnJlZ19udW1fbWFzayA9IDB4MWY7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdGRldi1cXHUwMDNlbWlpLnBoeV9pZF9tYXNrID0gMHgxZjtcXG4gMzU0OlxcdFxcbiAzNTU6XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX210dSA9IGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtdHUgKyBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbiAzNTY6XFx0XFx0ZGV2LVxcdTAwM2VyeF91cmJfc2l6ZSA9IDI0ICogNjQgKyAxNjtcXG4gMzU3OlxcdFxcdG1paV9ud2F5X3Jlc3RhcnQoXFx1MDAyNmRldi1cXHUwMDNlbWlpKTtcXG4gMzU4OlxcdFxcbiAzNTk6XFx0XFx0ZGF0YVswXSA9IDB4MDE7XFxuIDM2MDpcXHRcXHRkYXRhWzFdID0gMHgwRjtcXG4gMzYxOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcXG4gMzYyOlxcdFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzNjM6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIDM2NDpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNjU6XFx0XFxuIDM2NjpcXHRcXHRkYXRhWzBdID0gMHhBMDtcXG4gMzY3OlxcdFxcdGRhdGFbMV0gPSAweDkwO1xcbiAzNjg6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcXG4gMzY5OlxcdFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzNzA6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIDM3MTpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRkYXRhWzBdID0gMHgzMDtcXG4gMzc0OlxcdFxcdGRhdGFbMV0gPSAweDAwO1xcbiAzNzU6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXFxuIDM3NjpcXHRcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzc3OlxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiAzNzg6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzc5OlxcdFxcbiAzODA6XFx0XFx0ZGF0YVswXSA9IDB4MTc7XFxuIDM4MTpcXHRcXHRkYXRhWzFdID0gMHhEODtcXG4gMzgyOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcXG4gMzgzOlxcdFxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzODQ6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIDM4NTpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzODY6XFx0XFxuIDM4NzpcXHRcXHQvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi9cXG4gMzg4OlxcdFxcdGRhdGFbMF0gPSAweDAxO1xcbiAzODk6XFx0XFx0ZGF0YVsxXSA9IDB4MDA7XFxuIDM5MDpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxcbiAzOTE6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM5MjpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gMzkzOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM5NDpcXHRcXG4gMzk1OlxcdFxcdGRhdGFbMF0gPSAweDVGO1xcbiAzOTY6XFx0XFx0ZGF0YVsxXSA9IDB4MEQ7XFxuIDM5NzpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxcbiAzOTg6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM5OTpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gNDAwOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xcbiA0MDM6XFx0XFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cXHUwMDNlbmV0LCBhZGRyKTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDA2OlxcdH1cXG4gNDA3OlxcdFxcbiA0MDg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjaDkyMDBfaW5mbyA9IHtcXG4gNDA5OlxcdFxcdC5kZXNjcmlwdGlvbiA9IFxcXCJDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclxcXCIsXFxuIDQxMDpcXHRcXHQuZmxhZ3MgPSBGTEFHX0VUSEVSLFxcbiA0MTE6XFx0XFx0LmJpbmQgPSBjaDkyMDBfYmluZCxcXG4gNDEyOlxcdFxcdC5yeF9maXh1cCA9IGNoOTIwMF9yeF9maXh1cCxcXG4gNDEzOlxcdFxcdC50eF9maXh1cCA9IGNoOTIwMF90eF9maXh1cCxcXG4gNDE0OlxcdFxcdC5zdGF0dXMgPSBjaDkyMDBfc3RhdHVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MToyNS43ODY1NjcxOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjM2OTIxNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29udGV4dCBvZiBgY2g5MjAwX2JpbmRgLiBJIHJlY2FsbCBzZWVpbmcgdGhhdCBmdW5jdGlvbiBtZW50aW9uZWQgZWFybGllciwgYXJvdW5kIGxpbmVzIDMyMCB0byAzNDUgaW4gdGhlIGNvZGUuIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9mIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIEknbGwgbmVlZCB0byByZS1leGFtaW5lIHRoYXQgc2VjdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4OTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjI3LjQyMzQ5MDk2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdFxcdFxcdFxcdFxcdCAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzIxOlxcdFxcdHJkX21hY19sZW4gKz0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBNQUNfUkVHX1NUQVRJT05fTSxcXG4gMzIyOlxcdFxcdFxcdFxcdFxcdCAgIG1hY19hZGRyICsgMiwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzIzOlxcdFxcdHJkX21hY19sZW4gKz0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLCBNQUNfUkVHX1NUQVRJT05fSCxcXG4gMzI0OlxcdFxcdFxcdFxcdFxcdCAgIG1hY19hZGRyICsgNCwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzI1OlxcdFxcdGlmIChyZF9tYWNfbGVuICE9IEVUSF9BTEVOKVxcbiAzMjY6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0ZGF0YVswXSA9IG1hY19hZGRyWzVdO1xcbiAzMjk6XFx0XFx0ZGF0YVsxXSA9IG1hY19hZGRyWzRdO1xcbiAzMzA6XFx0XFx0ZGF0YVsyXSA9IG1hY19hZGRyWzNdO1xcbiAzMzE6XFx0XFx0ZGF0YVszXSA9IG1hY19hZGRyWzJdO1xcbiAzMzI6XFx0XFx0ZGF0YVs0XSA9IG1hY19hZGRyWzFdO1xcbiAzMzM6XFx0XFx0ZGF0YVs1XSA9IG1hY19hZGRyWzBdO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDMzOTpcXHR7XFxuIDM0MDpcXHRcXHRpbnQgcmV0dmFsID0gMDtcXG4gMzQxOlxcdFxcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcXG4gMzQyOlxcdFxcdHU4IGFkZHJbRVRIX0FMRU5dO1xcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRyZXR2YWwgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xcbiAzNDU6XFx0XFx0aWYgKHJldHZhbClcXG4gMzQ2OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGRldi1cXHUwMDNlbWlpLmRldiA9IGRldi1cXHUwMDNlbmV0O1xcbiAzNDk6XFx0XFx0ZGV2LVxcdTAwM2VtaWkubWRpb19yZWFkID0gY2g5MjAwX21kaW9fcmVhZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MjcuNDIzNTg1MTExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4NDY3NTgzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgY2g5MjAwX2JpbmRgIENhbGxiYWNrKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyByaWdodCBub3cgaXMgdW5kZXJzdGFuZGluZyB0aGUgbGlmZWN5Y2xlIG9mIGBjaDkyMDBfYmluZGAsIHRoZSBgLmJpbmRgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHN0cnVjdCBkcml2ZXJfaW5mbyBjaDkyMDBfaW5mb2Agc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICp3aGVuKiBkb2VzIHRoaXMgZnVuY3Rpb24gZ2V0IGludm9rZWQ/IFRpbWUgdG8gdHJhY2UgaXRzIGV4ZWN1dGlvbiBwYXRoLlxuXG5UaGUgbG9naWNhbCBwbGFjZSB0byBsb29rIGlzIHdpdGhpbiB0aGUgYHVzYm5ldGAgZnJhbWV3b3JrLCBzaW5jZSB0aGUgYGNoOTIwMGAgZHJpdmVyIGlzIGJ1aWx0IG9uIGl0LiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYHVzYm5ldGAgY29yZSBjYWxscyB0aGUgYGluZm8tXHUwMDNlYmluZGAgZnVuY3Rpb24uIFRoYXQgc3VnZ2VzdHMgbG9va2luZyBhdCBgdXNibmV0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1ZGV2LCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqcHJvZClgLiBCaW5nbyEgVGhlcmUgaXQgaXM6IGBpbmZvLVx1MDAzZWJpbmQoZGV2LCB1aW50ZXJmYWNlKWAuIFRoYXQncyB0aGUgY3J1Y2lhbCBjYWxsLlxuXG5Ob3csIGhvdyBkb2VzIGBjaDkyMDBgIGdldCByZWdpc3RlcmVkIHdpdGggYHVzYm5ldGAgaW4gdGhlIGZpcnN0IHBsYWNlPyBUbyBjb25maXJtIHRoZSBmdWxsIHNldHVwLCBJIG5lZWQgdG8gY29uc3VsdCB0aGUgYGRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5IGxpbmVzIDQxMCB0byA0NDAgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGUgcmVnaXN0cmF0aW9uIG9jY3Vycy4gVGhhdCB3aWxsIHBhaW50IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBgY2g5MjAwYCBkcml2ZXIgYW5kIHRoZSBgdXNibmV0YCBmcmFtZXdvcmssIGFuZCBob3cgdGhhdCBsZWFkcyB0byB0aGUgZXhlY3V0aW9uIG9mIGBjaDkyMDBfYmluZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NjQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MTozMC4yNzAzNDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxMDpcXHRcXHQuZmxhZ3MgPSBGTEFHX0VUSEVSLFxcbiA0MTE6XFx0XFx0LmJpbmQgPSBjaDkyMDBfYmluZCxcXG4gNDEyOlxcdFxcdC5yeF9maXh1cCA9IGNoOTIwMF9yeF9maXh1cCxcXG4gNDEzOlxcdFxcdC50eF9maXh1cCA9IGNoOTIwMF90eF9maXh1cCxcXG4gNDE0OlxcdFxcdC5zdGF0dXMgPSBjaDkyMDBfc3RhdHVzLFxcbiA0MTU6XFx0XFx0LmxpbmtfcmVzZXQgPSBjaDkyMDBfbGlua19yZXNldCxcXG4gNDE2OlxcdFxcdC5yZXNldCA9IGNoOTIwMF9saW5rX3Jlc2V0LFxcbiA0MTc6XFx0fTtcXG4gNDE4OlxcdFxcbiA0MTk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNoOTIwMF9wcm9kdWN0c1tdID0ge1xcbiA0MjA6XFx0XFx0e1xcbiA0MjE6XFx0XFx0IFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpLFxcbiA0MjI6XFx0XFx0IC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKVxcdTAwMjZjaDkyMDBfaW5mbyxcXG4gNDIzOlxcdFxcdCB9LFxcbiA0MjQ6XFx0XFx0e30sXFxuIDQyNTpcXHR9O1xcbiA0MjY6XFx0XFxuIDQyNzpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2g5MjAwX3Byb2R1Y3RzKTtcXG4gNDI4OlxcdFxcbiA0Mjk6XFx0c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNoOTIwMF9kcml2ZXIgPSB7XFxuIDQzMDpcXHRcXHQubmFtZSA9IFxcXCJjaDkyMDBcXFwiLFxcbiA0MzE6XFx0XFx0LmlkX3RhYmxlID0gY2g5MjAwX3Byb2R1Y3RzLFxcbiA0MzI6XFx0XFx0LnByb2JlID0gdXNibmV0X3Byb2JlLFxcbiA0MzM6XFx0XFx0LmRpc2Nvbm5lY3QgPSB1c2JuZXRfZGlzY29ubmVjdCxcXG4gNDM0OlxcdFxcdC5zdXNwZW5kID0gdXNibmV0X3N1c3BlbmQsXFxuIDQzNTpcXHRcXHQucmVzdW1lID0gdXNibmV0X3Jlc3VtZSxcXG4gNDM2OlxcdH07XFxuIDQzNzpcXHRcXG4gNDM4OlxcdG1vZHVsZV91c2JfZHJpdmVyKGNoOTIwMF9kcml2ZXIpO1xcbiA0Mzk6XFx0XFxuIDQ0MDpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlFpbkhlbmcgQ0g5MjAwIFVTQiBOZXR3b3JrIGRldmljZVxcXCIpO1xcbiA0NDE6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MTozMC4yNzA0MzUwNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NDk0MjI3NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBjaDkyMDAgRHJpdmVyJ3MgQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjaDkyMDBfcHJvZHVjdHNgIGVudHJ5OiBgVVNCX0RFVklDRSgweDFBODYsIDB4RTA5MilgLiAgSW4gdGhlIGNvbnRleHQgb2Ygc3l6a2FsbGVyLCB0aGlzIGlzIGEgZGV2aWNlIEkgY2FuIHJlYWRpbHkgZW11bGF0ZS4gU3l6a2FsbGVyJ3MgVVNCIGVtdWxhdGlvbiBhbGxvd3MgbWUgdG8gY29ubmVjdCAqYW55KiBVU0IgZGV2aWNlIHdpdGggYSBkZWZpbmVkIHZlbmRvciBhbmQgcHJvZHVjdCBJRCDigJMgYW5kIHRoaXMgb25lJ3MgYXZhaWxhYmxlLiAgV2hlbiB0aGF0IHZpcnR1YWwgZGV2aWNlIGNvbm5lY3RzLCBgdXNibmV0X3Byb2JlYCBnZXRzIGNhbGxlZC4gIFRoYXQncyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVuczogYHVzYm5ldF9wcm9iZWAgdGhlbiBjYWxscyBgY2g5MjAwX2JpbmRgLlxuXG5QcmV2aW91c2x5LCBJIHNlZSB0aGVyZSdzIGEgcHJvYmxlbSBpbiBgY2g5MjAwX2JpbmRgLiBUaGUgY29kZSBpc3N1ZXMgc2V2ZXJhbCBgY29udHJvbF93cml0ZWAgY2FsbHMsIGJ1dCBjcnVjaWFsbHksIHRoZSByZXR1cm4gdmFsdWVzIGZyb20gdGhvc2UgY2FsbHMgd2VyZSAqaWdub3JlZCohICBTbywgaWYgYSBgY29udHJvbF93cml0ZWAgZmFpbGVk4oCUc2F5LCBkdWUgdG8gYSB0aW1lb3V0LCBhIFVTQiB0cmFuc2ZlciBlcnJvciwgb3IgaWYgdGhlIGVtdWxhdGVkIGRldmljZSBkZWNpZGVkIHRvIHJldHVybiBhbiBlcnJvciDigJMgdGhlIGNvZGUganVzdCBrZXB0IG9uIGdvaW5nLiBJdCB3b3VsZCBibGl0aGVseSBwcm9jZWVkIHRvIGBnZXRfbWFjX2FkZHJlc3MoZGV2LCBhZGRyKTsgZXRoX2h3X2FkZHJfc2V0KGRldi1cdTAwM2VuZXQsIGFkZHIpOyByZXR1cm4gcmV0dmFsO2AuIFRhbGsgYWJvdXQgYSBwb3RlbnRpYWwgZm9yIHNvbWUgc2VyaW91cyBpbnN0YWJpbGl0eSFcblxuTm93LCB0aGUgZml4IGlzIGluOiBhbnkgZmFpbHVyZSBpbiBhIGBjb250cm9sX3dyaXRlYCBjYWxsIHdpbGwgaW1tZWRpYXRlbHkgYWJvcnQgYGNoOTIwMF9iaW5kYC4gSXQnbGwgcmV0dXJuIHRoZSBlcnJvciBjb2RlIChgcmV0dmFsYCksIHdoaWNoIHdpbGwsIGluIHR1cm4sIGNhdXNlIGB1c2JuZXRfcHJvYmVgIHRvIGZhaWwgYW5kLCB1bHRpbWF0ZWx5LCB0ZWFyIGRvd24gdGhlIGRldmljZSAoYGRldmApLiAgVGhpcyBpcyBhIGdvb2Qgc3RlcCwgcHJldmVudGluZyBmdXJ0aGVyIGV4ZWN1dGlvbiBhbmQgcG90ZW50aWFsbHkgbWFza2luZyBidWdzLlxuXG5CdXQuLi53YWl0IGEgbWludXRlLiBJcyB0aGlzIGNvZGUgZXZlbiAqcmVhY2hhYmxlKj8gIExldCdzIGNoZWNrIHRoZSBjcml0ZXJpYS4gTXkgZXhwZXJpZW5jZSB3aXRoIHRoaXMgdHlwZSBvZiBkZWJ1Z2dpbmcgdGVsbHMgbWUgdGhhdCwgaW4gU2VjdGlvbiAzIG9mIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uLCB0aGUga2V5IGlzIHRoZSBwcmVzZW5jZSBvZiB2aXJ0dWFsIGJ1c2VzLiBBbmQgeXVwLCB0aGVyZSB0aGV5IGFyZTogdmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuICBTcGVjaWZpY2FsbHksIFVTQiBkcml2ZXJzIGFyZSBhY2Nlc3NpYmxlIHZpYSBVU0IgcmF3IGdhZGdldCwgdmhjaSwgYW5kIGR1bW15X2hjZCBlbXVsYXRpb24uIEFuZCBzeXprYWxsZXIgKmV4cGxpY2l0bHkqIHRhcmdldHMgdGhlc2UgVVNCIGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgdXNibmV0IGRyaXZlcnMgdmlhIGBzeXpfdXNiX2Nvbm5lY3RgLiBZZXMsIHRoZSBjb2RlIGlzIHJlYWNoYWJsZS5cblxuSSBuZWVkIG1vcmUgY29udGV4dCwgdGhvdWdoLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGdpdCBjb21taXRzIG9yIHNpbWlsYXIgcGF0Y2hlcyB0aGF0IGV4cGxhaW4gdGhlIGhpc3Rvcnkgb2YgdGhpcywgdG8ga25vdyB3aGF0IHByb21wdGVkIHRoaXMgY2hhbmdlIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBhY3QsIGFuZCB0byBrbm93IHdoYXQgY29uZGl0aW9ucyB3b3VsZCB0cmlnZ2VyIHRoaXMgYnVnLiBJJ2xsIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZSBvciB0aGUgZ2l0IGxvZyBvZiBgY2g5MjAwLmNgIGl0c2VsZi4gVGhpcyBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTY3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MzQuNzY0NjY1Mjc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU4NTI1NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29udHJvbF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTk5PXN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzYtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjEzNzpzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTEzOC1cXHRcXHRcXHQgdW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTE5Nz1zdGF0aWMgdm9pZCBjaDkyMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIxMS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjEyOlxcdGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTMtXFx0XFx0ICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0zMzg9c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2MC1cXHRkYXRhWzFdID0gMHgwRjtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzYxOlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzYyLVxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2Ny1cXHRkYXRhWzFdID0gMHg5MDtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzY4OlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2OS1cXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNzQtXFx0ZGF0YVsxXSA9IDB4MDA7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM3NTpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzc2LVxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM4MS1cXHRkYXRhWzFdID0gMHhEODtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzgyOlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzgzLVxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM4OS1cXHRkYXRhWzFdID0gMHgwMDtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzkwOlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM5MS1cXHRcXHRcXHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTYtXFx0ZGF0YVsxXSA9IDB4MEQ7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM5NzpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTgtXFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjM1LjAyMDUyNDkyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDQ5NDI4MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDSDkyMDAgRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGNvbnRyb2xfd3JpdGVgIGZ1bmN0aW9uIGlzIHdvcmtpbmcgd2l0aGluIHRoZSBDSDkyMDAgVVNCIG5ldHdvcmsgZHJpdmVyLiBMZXQncyBzdGFydCBieSBoZWFkaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEknbGwgb3BlbiB1cCBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCBpbW1lZGlhdGVseS4gVGhhdCdzIHRoZSBmaXJzdCBwbGFjZSB0byBsb29rIHRvIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSG9wZWZ1bGx5LCB0aGUgZGVmaW5pdGlvbiB0aGVyZSB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLiBJJ20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aG9zZSBzdGFuZGFyZCBVU0IgY29udHJvbCB0cmFuc2ZlcnMsIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBjb25maXJtIGFuZCBnZXQgdGhlIGZpbmUgZGV0YWlscy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTE3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6MzcuNDY5OTU2MzA2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzU6XFx0fVxcbiAxMzY6XFx0XFxuIDEzNzpcXHRzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXFxuIDEzODpcXHRcXHRcXHRcXHQgdW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IGluZGV4LFxcbiAxMzk6XFx0XFx0XFx0XFx0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNob3J0IHNpemUsIGludCB0aW1lb3V0KVxcbiAxNDA6XFx0e1xcbiAxNDE6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDtcXG4gMTQyOlxcdFxcdHVuc2lnbmVkIGNoYXIgcmVxdWVzdF90eXBlO1xcbiAxNDM6XFx0XFx0aW50IGVyciA9IDA7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGlmIChyZXF1ZXN0ID09IFJFUVVFU1RfV1JJVEUpXFxuIDE0NjpcXHRcXHRcXHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAxNDc6XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX09USEVSKTtcXG4gMTQ4OlxcdFxcdGVsc2VcXG4gMTQ5OlxcdFxcdFxcdHJlcXVlc3RfdHlwZSA9IChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8XFxuIDE1MDpcXHRcXHRcXHRcXHRcXHRVU0JfUkVDSVBfREVWSUNFKTtcXG4gMTUxOlxcdFxcbiAxNTI6XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcIiVzKCkgaW5kZXg9MHglMDJ4IHNpemU9JWRcXFxcblxcXCIsXFxuIDE1MzpcXHRcXHRcXHQgICBfX2Z1bmNfXywgaW5kZXgsIHNpemUpO1xcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHRpZiAoZGF0YSkge1xcbiAxNTY6XFx0XFx0XFx0YnVmID0ga21lbWR1cChkYXRhLCBzaXplLCBHRlBfS0VSTkVMKTtcXG4gMTU3OlxcdFxcdFxcdGlmICghYnVmKSB7XFxuIDE1ODpcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiAxNTk6XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiAxNjA6XFx0XFx0XFx0fVxcbiAxNjE6XFx0XFx0fVxcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRlcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LVxcdTAwM2V1ZGV2LFxcbiAxNjQ6XFx0XFx0XFx0XFx0ICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi1cXHUwMDNldWRldiwgMCksXFxuIDE2NTpcXHRcXHRcXHRcXHQgICAgICByZXF1ZXN0LCByZXF1ZXN0X3R5cGUsIHZhbHVlLCBpbmRleCwgYnVmLCBzaXplLFxcbiAxNjY6XFx0XFx0XFx0XFx0ICAgICAgdGltZW91dCk7XFxuIDE2NzpcXHRcXHRpZiAoZXJyIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgZXJyIFxcdTAwM2Mgc2l6ZSlcXG4gMTY4OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDE2OTpcXHRcXHRrZnJlZShidWYpO1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRyZXR1cm4gMDtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0ZXJyX291dDpcXG4gMTc0OlxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjM3LjQ3MDA1MTg5NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzYxNjU3MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBgY29udHJvbF93cml0ZWAgLSBBIENyaXRpY2FsIE92ZXJzaWdodCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIEkgbmVlZCB0byByZXZpc2l0IHRoaXMgYGNvbnRyb2xfd3JpdGVgIGZ1bmN0aW9uOyB0aGVyZSdzIHNvbWV0aGluZyBwb3RlbnRpYWxseSBhd3J5IGhlcmUuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgYXQgbGluZXMgMTY3LTE3Mi4gKkhlcmUqIHdlIGdvOlxuYGBgY1xuXHRcdGVyciA9IHVzYl9jb250cm9sX21zZyhkZXYtXHUwMDNldWRldixcblx0XHRcdFx0ICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi1cdTAwM2V1ZGV2LCAwKSxcblx0XHRcdFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcblx0XHRcdFx0ICAgICAgdGltZW91dCk7XG5cdFx0aWYgKGVyciBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGVyciBcdTAwM2Mgc2l6ZSlcblx0XHRcdGVyciA9IC1FSU5WQUw7XG5cdFx0a2ZyZWUoYnVmKTtcblxuXHRcdHJldHVybiAwO1xuXG5lcnJfb3V0OlxuXHRcdHJldHVybiBlcnI7XG5gYGBcblRoYXQgYGtmcmVlKGJ1ZilgIGlzIGRlZmluaXRlbHkgZ2V0dGluZyBteSBhdHRlbnRpb24uIEl0IGxvb2tzIGxpa2UgcmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZSBvZiBgdXNiX2NvbnRyb2xfbXNnYCwgdGhlIGJ1ZmZlciBpcyAqYWx3YXlzKiBmcmVlZCBhbmQgdGhlIGZ1bmN0aW9uICphbHdheXMqIHJldHVybnMgMCBhZnRlciBhIHN1Y2Nlc3NmdWwgYnVmZmVyIGFsbG9jYXRpb24uIE5vLCBubywgd2FpdC4uLiBsZXQgbWUgcmUtZXhhbWluZSB0aGlzLiBMb29rLCBsaW5lIDE3MSAqYWx3YXlzKiByZXR1cm5zIDAgaWYgd2UgZ2V0IHBhc3QgdGhlIGJ1ZmZlciBhbGxvY2F0aW9uLiBFdmVuIGlmIGB1c2JfY29udHJvbF9tc2dgIGZhaWxzLCB0aGUgZXJyb3IgY29kZSBnZXRzIHNldCwgYW5kICp0aGVuKiB0aGUgZnVuY3Rpb24gc2ltcGx5IHJldHVybnMgMCEgSXMgdGhhdCB0cnVlPyBBbSBJIHJlYWRpbmcgdGhpcyBjb3JyZWN0bHk/IEknbSBnb2luZyB0byBiYWNrIHVwIGFuZCByZS1yZWFkIHRoZSBlbnRpcmUgc2VjdGlvbiBmcm9tIDE2MC0xODAgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIGJlICpzdXJlKiBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZSBoZXJlLiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgYnVnIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjQwLjIzMTcxMjQxN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTYwOlxcdFxcdFxcdH1cXG4gMTYxOlxcdFxcdH1cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cXHUwMDNldWRldixcXG4gMTY0OlxcdFxcdFxcdFxcdCAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtXFx1MDAzZXVkZXYsIDApLFxcbiAxNjU6XFx0XFx0XFx0XFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcXG4gMTY2OlxcdFxcdFxcdFxcdCAgICAgIHRpbWVvdXQpO1xcbiAxNjc6XFx0XFx0aWYgKGVyciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGVyciBcXHUwMDNjIHNpemUpXFxuIDE2ODpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAxNjk6XFx0XFx0a2ZyZWUoYnVmKTtcXG4gMTcwOlxcdFxcbiAxNzE6XFx0XFx0cmV0dXJuIDA7XFxuIDE3MjpcXHRcXG4gMTczOlxcdGVycl9vdXQ6XFxuIDE3NDpcXHRcXHRyZXR1cm4gZXJyO1xcbiAxNzU6XFx0fVxcbiAxNzY6XFx0XFxuIDE3NzpcXHRzdGF0aWMgaW50IGNoOTIwMF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBoeV9pZCwgaW50IGxvYylcXG4gMTc4OlxcdHtcXG4gMTc5OlxcdFxcdHN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIDE4MDpcXHRcXHR1bnNpZ25lZCBjaGFyIGJ1ZmZbMl07XFxuIDE4MTpcXHRcXHRpbnQgcmV0O1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRuZXRkZXZfZGJnKG5ldGRldiwgXFxcIiVzIHBoeV9pZDolMDJ4IGxvYzolMDJ4XFxcXG5cXFwiLFxcbiAxODQ6XFx0XFx0XFx0ICAgX19mdW5jX18sIHBoeV9pZCwgbG9jKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6NDAuMjMxODExODY3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExOTA4MDMwNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFVTQiBEcml2ZXIgUGF0Y2ggYW5kIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbm90aWNlZCBhIGhhcmRjb2RlZCBgcmV0dXJuIDBgIGluIGBjb250cm9sX3dyaXRlYCBhdCBsaW5lIDE3MS4gQnV0IHdhaXQsIGl0J3Mgbm90IGFsd2F5cyB6ZXJvLCBpdCBjYW4gcmV0dXJuIGAtRU5PTUVNYCBpZiBga21lbWR1cGAgZmFpbHMuIFRoYXQncyBhIHBvaW50LlxuXG5UaGUgbW9yZSByZWNlbnQgcGF0Y2ggYWRkcyBgaWYgKHJldHZhbCBcdTAwM2MgMCkgcmV0dXJuIHJldHZhbDtgIGluIGBjaDkyMDBfYmluZGAuIFRoaXMgbWVhbnMgdGhlIGNvZGUgbm93IGV4cGxpY2l0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNvbnRyb2xfd3JpdGVgIGFuZCByZXR1cm5zIGVhcmx5IGlmIGl0J3MgbmVnYXRpdmUuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBwcmV2aW91c2x5LCB0aGUgYHJldHZhbGAgZnJvbSBgY29udHJvbF93cml0ZWAgd2FzIG92ZXJ3cml0dGVuIGJ5IHN1YnNlcXVlbnQgY2FsbHMuIEl0IGxvb2tzIGxpa2UgYSBidWctZml4IHRvIGhhbmRsZSBwb3RlbnRpYWwgZXJyb3JzIGZyb20gYGNvbnRyb2xfd3JpdGVgLiBBbmQgaWYgdGhlIGBrbWVtZHVwYCBmYWlscywgdGhhdCByZXR1cm5zIGAtRU5PTUVNYC4gSXQgbWFrZXMgYGNvbnRyb2xfd3JpdGVgIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlLlxuXG5Ob3csIGNvdWxkIGBjb250cm9sX3dyaXRlYCByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSBvdGhlciB0aGFuIGAtRU5PTUVNYD8gTm8sIGJlY2F1c2UgYGRhdGFgIGlzIG5vbi1udWxsLiBMZXQncyBzZWUgaWYgdGhpcyBwYXRjaCBpcyBwYXJ0IG9mIGEgc2VyaWVzIG9yIGhpc3Rvcnkgb2YgY29tbWl0cywgYnV0IGdyZXBwZXIgb3IgcmVhZGluZyB0aGUgZmlsZSB3aWxsIHByb3ZpZGUgbW9yZSBkZXRhaWwuXG5cblJpZ2h0LCB0aGUgZGlmZiBvbmx5IHRvdWNoZXMgYGNoOTIwMC5jYCB3aXRoaW4gYGNoOTIwMF9iaW5kYC4gVGhpcyBwYXRjaCAqZG9lcyogbW9kaWZ5IGhvdyBlcnJvcnMgZnJvbSBgY29udHJvbF93cml0ZWAgYXJlIGhhbmRsZWQgaW4gYGNoOTIwMF9iaW5kYC4gQmVmb3JlLCB0aGUgcmV0dXJuIHZhbHVlIHdhcyBpZ25vcmVkLCBhbmQgbm93IGl0J3MgY2hlY2tlZC4gVGhpcyBtZWFucyBgY29udHJvbF93cml0ZWAgKmNhbiogcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUsIHNwZWNpZmljYWxseSBgLUVOT01FTWAsIGR1ZSB0byBhIGBrbWVtZHVwYCBmYWlsdXJlLiBMb29rcyBsaWtlIGEgYnVnLWZpeC5cblxuVGhlIGtleSBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IFRoaXMgaXMgYSBjb3JlIGNvbmNlcHQuIEdpdmVuIHRoYXQgYGNoOTIwMGAgaXMgYSBVU0IgZHJpdmVyLCBpdCAqaXMqIHJlYWNoYWJsZS4gVVNCIGRyaXZlcnMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB2aXJ0dWFsIGJ1c2VzIHN1Y2ggYXMgVVNCIGdhZGdldCwgdmhjaSwgb3IgZHVtbXlfaGNkLiBgY2g5MjAwYCBpcyBpbiBgZHJpdmVycy9uZXQvdXNiL2AsIG1ha2luZyBpdCBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIuIFRoZSBjb2RlIGNvbnRhaW5zOlxuXG5gYGBjXG5zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2g5MjAwX3Byb2R1Y3RzW10gPSB7XG5cdHtcblx0IFVTQl9ERVZJQ0UoMHgxQTg2LCAweEUwOTIpLFxuXHQgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y2g5MjAwX2luZm8sXG5cdCB9LFxuXHR7fSxcbn07XG5gYGBcblxuVGhpcyBtZWFucyB0aGF0IHdoZW4gc3l6a2FsbGVyIGNvbm5lY3RzIGEgVVNCIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgVklEIGFuZCBQSUQsIHRoZSBgY2g5MjAwX2RyaXZlcmAgd2lsbCBiZSBtYXRjaGVkLCB0cmlnZ2VyaW5nIGB1c2JuZXRfcHJvYmVgLCB3aGljaCBjYWxscyBgY2g5MjAwX2JpbmRgLiBUaGUgYWRkZWQgZXJyb3ItaGFuZGxpbmcgcGF0Y2ggcGF0aHMgKndpbGwqIGJlIGV4ZWN1dGVkIVxuXG5Nb3Jlb3ZlciwgaXQncyBlYXNpbHkgdHJpZ2dlcmFibGUuIElmIHdlIGVtcGxveSBmYXVsdCBpbmplY3Rpb24sIHNwZWNpZmljYWxseSBrbWFsbG9jIG9yIGZhaWxzbGFiLCB3ZSBjYW4gaW5kdWNlIGEgYC1FTk9NRU1gIGZyb20gYGttZW1kdXBgIGluIGBjb250cm9sX3dyaXRlYC4gVGhlbiwgdGhhdCBlcnJvciB3aWxsIGJlIHByb3BhZ2F0ZWQgdGhyb3VnaCB0aGUgbmV3IGBpZmAgY29uZGl0aW9uIGluIGBjaDkyMDBfYmluZGAuXG5cbkdpdmVuIGFsbCBvZiB0aGlzLCBsZXQncyB2ZXJpZnkgaWYgYHVzYm5ldF9wcm9iZWAgaGFuZGxlcyBgaW5mby1cdTAwM2ViaW5kYCBwcm9wZXJseSB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZSBmcmVlLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYHVzYm5ldF9wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjUyLjEzOTg0NDkwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1Njk4NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXR1cyA9IGluZm8tXFx1MDAzZWJpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0xNzI2PXVzYm5ldF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWRldiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKnByb2QpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTgwNy1cXHRcXHRuZXQtXFx1MDAzZW1heF9tdHUgPSBFVEhfTUFYX01UVTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTgwODpcXHRcXHRzdGF0dXMgPSBpbmZvLVxcdTAwM2ViaW5kKGRldiwgdWRldik7XFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTE4MDktXFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjUyLjM1NTU0OTI4M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNTE3MDgyNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGB1c2JuZXQuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGluIHRoZSBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCBkcml2ZXIsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxODA4LiBUaGF0J3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgd2hlbiBJJ20gdHJhY2tpbmcgZG93biBhbiBpc3N1ZSBpbiB0aGUgVVNCIG5ldHdvcmtpbmcgc3RhY2suIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHNvbWV0aGluZyBzcGVjaWZpYyB0byBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRhdGEgdHJhbnNmZXIsIHBlcmhhcHMgcmVsYXRlZCB0byBwYWNrZXQgZnJhbWluZywgYnVmZmVyIG1hbmFnZW1lbnQsIG9yIG1heWJlIGV2ZW4gYW4gaW50ZXJydXB0IGhhbmRsaW5nIGlzc3VlLiBMZXQncyBzZWUgd2hhdCB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUgcmV2ZWFscy4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjc0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQxOjU1Ljg3MjYzNTg3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MDUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MDU6XFx0XFx0Ly8gTk9URSBuZXQtXFx1MDAzZW5hbWUgc3RpbGwgbm90IHVzYWJsZSAuLi5cXG4xODA2OlxcdFxcdGlmIChpbmZvLVxcdTAwM2ViaW5kKSB7XFxuMTgwNzpcXHRcXHRcXHRuZXQtXFx1MDAzZW1heF9tdHUgPSBFVEhfTUFYX01UVTtcXG4xODA4OlxcdFxcdFxcdHN0YXR1cyA9IGluZm8tXFx1MDAzZWJpbmQoZGV2LCB1ZGV2KTtcXG4xODA5OlxcdFxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbjE4MTA6XFx0XFx0XFx0XFx0Z290byBvdXQxO1xcbjE4MTE6XFx0XFxuMTgxMjpcXHRcXHRcXHQvKiBoZXVyaXN0aWM6IHJlbmFtZSB0byBcXFwiZXRoJWRcXFwiIGlmIHdlIGFyZSBub3Qgc3VyZSB0aGlzIGxpbmtcXG4xODEzOlxcdFxcdFxcdCAqIGlzIHR3by1ob3N0ICh0aGVzZSBsaW5rcyBrZWVwIFxcXCJ1c2IlZFxcXCIpXFxuMTgxNDpcXHRcXHRcXHQgKi9cXG4xODE1OlxcdFxcdFxcdGlmICgoZGV2LVxcdTAwM2Vkcml2ZXJfaW5mby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGTEFHX0VUSEVSKSAhPSAwIFxcdTAwMjZcXHUwMDI2XFxuMTgxNjpcXHRcXHRcXHQgICAgIXVzYm5ldF9uZWVkc191c2JfbmFtZV9mb3JtYXQoZGV2LCBuZXQpKVxcbjE4MTc6XFx0XFx0XFx0XFx0c3Ryc2NweShuZXQtXFx1MDAzZW5hbWUsIFxcXCJldGglZFxcXCIsIHNpemVvZihuZXQtXFx1MDAzZW5hbWUpKTtcXG4xODE4OlxcdFxcdFxcdC8qIFdMQU4gZGV2aWNlcyBzaG91bGQgYWx3YXlzIGJlIG5hbWVkIFxcXCJ3bGFuJWRcXFwiICovXFxuMTgxOTpcXHRcXHRcXHRpZiAoKGRldi1cXHUwMDNlZHJpdmVyX2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkxBR19XTEFOKSAhPSAwKVxcbjE4MjA6XFx0XFx0XFx0XFx0c3Ryc2NweShuZXQtXFx1MDAzZW5hbWUsIFxcXCJ3bGFuJWRcXFwiLCBzaXplb2YobmV0LVxcdTAwM2VuYW1lKSk7XFxuMTgyMTpcXHRcXHRcXHQvKiBXV0FOIGRldmljZXMgc2hvdWxkIGFsd2F5cyBiZSBuYW1lZCBcXFwid3dhbiVkXFxcIiAqL1xcbjE4MjI6XFx0XFx0XFx0aWYgKChkZXYtXFx1MDAzZWRyaXZlcl9pbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZMQUdfV1dBTikgIT0gMClcXG4xODIzOlxcdFxcdFxcdFxcdHN0cnNjcHkobmV0LVxcdTAwM2VuYW1lLCBcXFwid3dhbiVkXFxcIiwgc2l6ZW9mKG5ldC1cXHUwMDNlbmFtZSkpO1xcbjE4MjQ6XFx0XFxuMTgyNTpcXHRcXHRcXHQvKiBkZXZpY2VzIHRoYXQgY2Fubm90IGRvIEFSUCAqL1xcbjE4MjY6XFx0XFx0XFx0aWYgKChkZXYtXFx1MDAzZWRyaXZlcl9pbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZMQUdfTk9BUlApICE9IDApXFxuMTgyNzpcXHRcXHRcXHRcXHRuZXQtXFx1MDAzZWZsYWdzIHw9IElGRl9OT0FSUDtcXG4xODI4OlxcdFxcbjE4Mjk6XFx0XFx0XFx0aWYgKChkZXYtXFx1MDAzZWRyaXZlcl9pbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZMQUdfTk9NQVhNVFUpID09IDAgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6NTUuODcyNzgzNjAxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1Mzc2OTQ2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgRXJyb3IgSGFuZGxpbmcgaW4gdGhlIGBpbmZvLVx1MDAzZWJpbmRgIENhbGwqKlxuXG5SaWdodCwgc28gYGluZm8tXHUwMDNlYmluZGAganVzdCBmYWlsZWQsIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIG5lZ2F0aXZlLiBUaGF0IG1lYW5zIHdlIGp1bXAgdG8gYGdvdG8gb3V0MWAuIE15IGZvY3VzIGlzIG5vdyBsYXNlci1zaGFycCBvbiB3aGF0IGhhcHBlbnMgYXQgdGhlIGBvdXQxYCBsYWJlbCwgYmVjYXVzZSB0aGF0J3MgdGhlIGNsZWFudXAgcGF0aCB3ZSdyZSB0YWtpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyByZWxlYXNlZCwgd2hhdCBzdGF0ZSBpcyBiZWluZyByZXNldCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciByYWNlIGNvbmRpdGlvbnMgaW50cm9kdWNlZCBieSB0aGlzIGVhcmx5IGV4aXQuIExldCBtZSBjb25zdWx0IGxpbmVzIDE4NTAtMTg4MCwgYXMgSSBleHBlY3QgdGhlIGVycm9yIGhhbmRsaW5nIGluIGBvdXQxYCB0byBiZSBkZWZpbmVkIHRoZXJlLiBJJ20gbG9va2luZyBmb3IgbWVtb3J5IGRlYWxsb2NhdGlvbnMsIHNvY2tldCBjbG9zZXMsIGFueSBraW5kIG9mIHJlc291cmNlIGNsZWFudXAsIGFuZCBhbHNvIGFueSBvdGhlciByZWxldmFudCBlcnJvciBoYW5kbGluZyBvciBsb2dnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ0MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDE6NTkuNDEwNDgwNzQ5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODY3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvdXNibmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg1MDpcXHRcXHRcXHRcXHRzdGF0dXMgPSAwO1xcbjE4NTE6XFx0XFxuMTg1MjpcXHRcXHRcXHRpZiAoc3RhdHVzID09IDAgXFx1MDAyNlxcdTAwMjYgIXVzYl9jaGVja19idWxrX2VuZHBvaW50cyh1ZGV2LCBlcF9hZGRycykpXFxuMTg1MzpcXHRcXHRcXHRcXHRzdGF0dXMgPSAtRUlOVkFMO1xcbjE4NTQ6XFx0XFx0fVxcbjE4NTU6XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlc3RhdHVzKVxcbjE4NTY6XFx0XFx0XFx0c3RhdHVzID0gaW5pdF9zdGF0dXMoZGV2LCB1ZGV2KTtcXG4xODU3OlxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbjE4NTg6XFx0XFx0XFx0Z290byBvdXQzO1xcbjE4NTk6XFx0XFxuMTg2MDpcXHRcXHRpZiAoIWRldi1cXHUwMDNlcnhfdXJiX3NpemUpXFxuMTg2MTpcXHRcXHRcXHRkZXYtXFx1MDAzZXJ4X3VyYl9zaXplID0gZGV2LVxcdTAwM2VoYXJkX210dTtcXG4xODYyOlxcdFxcdGRldi1cXHUwMDNlbWF4cGFja2V0ID0gdXNiX21heHBhY2tldChkZXYtXFx1MDAzZXVkZXYsIGRldi1cXHUwMDNlb3V0KTtcXG4xODYzOlxcdFxcdGlmIChkZXYtXFx1MDAzZW1heHBhY2tldCA9PSAwKSB7XFxuMTg2NDpcXHRcXHRcXHQvKiB0aGF0IGlzIGEgYnJva2VuIGRldmljZSAqL1xcbjE4NjU6XFx0XFx0XFx0c3RhdHVzID0gLUVOT0RFVjtcXG4xODY2OlxcdFxcdFxcdGdvdG8gb3V0NDtcXG4xODY3OlxcdFxcdH1cXG4xODY4OlxcdFxcbjE4Njk6XFx0XFx0LyogdGhpcyBmbGFncyB0aGUgZGV2aWNlIGZvciB1c2VyIHNwYWNlICovXFxuMTg3MDpcXHRcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0LVxcdTAwM2VkZXZfYWRkcikpXFxuMTg3MTpcXHRcXHRcXHRldGhfaHdfYWRkcl9yYW5kb20obmV0KTtcXG4xODcyOlxcdFxcbjE4NzM6XFx0XFx0aWYgKChkZXYtXFx1MDAzZWRyaXZlcl9pbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZMQUdfV0xBTikgIT0gMClcXG4xODc0OlxcdFxcdFxcdFNFVF9ORVRERVZfREVWVFlQRShuZXQsIFxcdTAwMjZ3bGFuX3R5cGUpO1xcbjE4NzU6XFx0XFx0aWYgKChkZXYtXFx1MDAzZWRyaXZlcl9pbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZMQUdfV1dBTikgIT0gMClcXG4xODc2OlxcdFxcdFxcdFNFVF9ORVRERVZfREVWVFlQRShuZXQsIFxcdTAwMjZ3d2FuX3R5cGUpO1xcbjE4Nzc6XFx0XFxuMTg3ODpcXHRcXHQvKiBpbml0aWFsaXplIG1heCByeF9xbGVuIGFuZCB0eF9xbGVuICovXFxuMTg3OTpcXHRcXHR1c2JuZXRfdXBkYXRlX21heF9xbGVuKGRldik7XFxuMTg4MDpcXHRcXG4xODgxOlxcdFxcdGlmIChkZXYtXFx1MDAzZWNhbl9kbWFfc2cgXFx1MDAyNlxcdTAwMjYgIShpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZMQUdfU0VORF9aTFApIFxcdTAwMjZcXHUwMDI2XFxuMTg4MjpcXHRcXHRcXHQhKGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkxBR19NVUxUSV9QQUNLRVQpKSB7XFxuMTg4MzpcXHRcXHRcXHRkZXYtXFx1MDAzZXBhZGRpbmdfcGt0ID0ga3phbGxvYygxLCBHRlBfS0VSTkVMKTtcXG4xODg0OlxcdFxcdFxcdGlmICghZGV2LVxcdTAwM2VwYWRkaW5nX3BrdCkge1xcbjE4ODU6XFx0XFx0XFx0XFx0c3RhdHVzID0gLUVOT01FTTtcXG4xODg2OlxcdFxcdFxcdFxcdGdvdG8gb3V0NDtcXG4xODg3OlxcdFxcdFxcdH1cXG4xODg4OlxcdFxcdH1cXG4xODg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MTo1OS40MTA2MjEwNjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI1NTg0MTIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyBVU0JuZXQgUHJvYmUgRXJyb3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgYHVzYm5ldF9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBkcml2ZXIgaGFuZGxlcyBwb3RlbnRpYWwgZmFpbHVyZXMgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGNsZWFudXAgbGFiZWxzLCBwcm9iYWJseSBpbiB0aGUgdmljaW5pdHkgb2YgbGluZXMgMTkyMCB0byAxOTUwLiBUaGF0IHNlY3Rpb24gaXMgdXN1YWxseSB3aGVyZSB0aGV5IGRlZmluZSB0aG9zZSBlcnJvciBoYW5kbGluZyBsYWJlbHMsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIHdoaWNoIHBhcnRzIG9mIHRoZSBpbml0aWFsaXphdGlvbiBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgY2xlYW5lZCB1cCBpZiBzb21ldGhpbmcgZ29lcyBzaWRld2F5cy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBvcmRlciBvZiByZXNvdXJjZSBhbGxvY2F0aW9uIHRvIHNlZSB3aGljaCBvcmRlciB0aGV5IGFwcGVhci4gVGhpcyBpcyBjcml0aWNhbCwgc2luY2UgYSBtaXNzZWQgY2xlYW51cCBjb3VsZCBsZWFkIHRvIHJlc291cmNlIGxlYWtzLCB3aGljaCBhcmUgc29tZXRoaW5nIEkgYW0gcXVpdGUgZmFtaWxpYXIgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjAxLjY2NjQ2NTQ1MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MTU6XFx0XFx0aWYgKGluZm8tXFx1MDAzZXVuYmluZClcXG4xOTE2OlxcdFxcdFxcdGluZm8tXFx1MDAzZXVuYmluZChkZXYsIHVkZXYpO1xcbjE5MTc6XFx0b3V0MTpcXG4xOTE4OlxcdFxcdC8qIHN1YmRyaXZlcnMgbXVzdCB1bmRvIGFsbCB0aGV5IGRpZCBpbiBiaW5kKCkgaWYgdGhleVxcbjE5MTk6XFx0XFx0ICogZmFpbCBpdCwgYnV0IHdlIG1heSBmYWlsIGxhdGVyIGFuZCBhIGRlZmVycmVkIGtldmVudFxcbjE5MjA6XFx0XFx0ICogbWF5IHRyaWdnZXIgYW4gZXJyb3IgcmVzdWJtaXR0aW5nIGl0c2VsZiBhbmQsIHdvcnNlLFxcbjE5MjE6XFx0XFx0ICogc2NoZWR1bGUgYSB0aW1lci4gU28gd2Uga2lsbCBpdCBhbGwganVzdCBpbiBjYXNlLlxcbjE5MjI6XFx0XFx0ICovXFxuMTkyMzpcXHRcXHR1c2JuZXRfbWFya19nb2luZ19hd2F5KGRldik7XFxuMTkyNDpcXHRcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZkZXYtXFx1MDAzZWtldmVudCk7XFxuMTkyNTpcXHRcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2ZGV2LVxcdTAwM2VkZWxheSk7XFxuMTkyNjpcXHRcXHRmcmVlX25ldGRldihuZXQpO1xcbjE5Mjc6XFx0b3V0OlxcbjE5Mjg6XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4xOTI5OlxcdH1cXG4xOTMwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9wcm9iZSk7XFxuMTkzMTpcXHRcXG4xOTMyOlxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuMTkzMzpcXHRcXG4xOTM0OlxcdC8qXFxuMTkzNTpcXHQgKiBzdXNwZW5kIHRoZSB3aG9sZSBkcml2ZXIgYXMgc29vbiBhcyB0aGUgZmlyc3QgaW50ZXJmYWNlIGlzIHN1c3BlbmRlZFxcbjE5MzY6XFx0ICogcmVzdW1lIG9ubHkgd2hlbiB0aGUgbGFzdCBpbnRlcmZhY2UgaXMgcmVzdW1lZFxcbjE5Mzc6XFx0ICovXFxuMTkzODpcXHRcXG4xOTM5OlxcdGludCB1c2JuZXRfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpXFxuMTk0MDpcXHR7XFxuMTk0MTpcXHRcXHRzdHJ1Y3QgdXNibmV0XFx0XFx0KmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7XFxuMTk0MjpcXHRcXG4xOTQzOlxcdFxcdGlmICghZGV2LVxcdTAwM2VzdXNwZW5kX2NvdW50KyspIHtcXG4xOTQ0OlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmRldi1cXHUwMDNldHhxLmxvY2spO1xcbjE5NDU6XFx0XFx0XFx0LyogZG9uJ3QgYXV0b3N1c3BlbmQgd2hpbGUgdHJhbnNtaXR0aW5nICovXFxuMTk0NjpcXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2V0eHEucWxlbiBcXHUwMDI2XFx1MDAyNiBQTVNHX0lTX0FVVE8obWVzc2FnZSkpIHtcXG4xOTQ3OlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlc3VzcGVuZF9jb3VudC0tO1xcbjE5NDg6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZkZXYtXFx1MDAzZXR4cS5sb2NrKTtcXG4xOTQ5OlxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTk1MDpcXHRcXHRcXHR9IGVsc2Uge1xcbjE5NTE6XFx0XFx0XFx0XFx0c2V0X2JpdChFVkVOVF9ERVZfQVNMRUVQLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuMTk1MjpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmRldi1cXHUwMDNldHhxLmxvY2spO1xcbjE5NTM6XFx0XFx0XFx0fVxcbjE5NTQ6XFx0XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDI6MDEuNjY2NjA5MDAxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk5OTI1MjA5NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpczogVVNCIENIOTIwMCBFdGhlcm5ldCBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgdXNibmV0X3Byb2JlYCBoYW5kbGVzIGVycm9ycyBmcm9tIGBpbmZvLVx1MDAzZWJpbmRgIGNsZWFubHksIHNvIHRoYXQncyBnb29kLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgdGhlIGBjaDkyMDBgIGRyaXZlci4gSSdsbCBzdGFydCBieSBjaGVja2luZyBgQ09ORklHX1VTQl9ORVRfQ0g5MjAwYCBpbiB0aGUga2VybmVsIGNvbmZpZy5cblxuTG9va2luZyBhdCBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgLCBJIHNlZSB0aGF0IGBVU0JfTkVUX0NIOTIwMGAgZGVwZW5kcyBvbiBgVVNCX1VTQk5FVGAsIHdoaWNoIGluIHR1cm4gc2VsZWN0cyBgTUlJYC4gVGhlbiwgdGhlcmUncyBgVVNCX05FVF9EUklWRVJTYCwgd2hpY2ggZGVwZW5kcyBvbiBib3RoIGBVU0JgIGFuZCBgTkVUYC4gU28sIHRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmUgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JfVVNCTkVUYCwgYFVTQl9ORVRfQ0g5MjAwYCwgYFVTQmAsIGFuZCBgTkVUYC4gSG93ZXZlciwgbGlzdGluZyBgVVNCX05FVF9DSDkyMDBgLCBgVVNCX1VTQk5FVGAsIGFuZCBgVVNCX05FVF9EUklWRVJTYCAoYWxvbmcgd2l0aCBgVVNCYCkgc2hvdWxkIHN1ZmZpY2UsIGFzIGBzZWxlY3QgTUlJYCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgcGF0Y2ggd29ydGggZnV6emluZz8gTGV0J3MgZXZhbHVhdGUgaXQuIEZpcnN0LCBpcyBpdCByZWFjaGFibGU/IFllcywgVVNCIGRyaXZlcnMgYXJlIHBlcmZlY3RseSByZWFjaGFibGUgdGhyb3VnaCB2aXJ0dWFsIGJ1c2VzLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgc3l6a2FsbGVyIHNldHVwIGVtdWxhdGVzIFVTQiBkZXZpY2VzIHZpYSBEdW1teSBIQ0QgYW5kIFJhdyBHYWRnZXQsIGFuZCB0aGlzIGlzIGV4cGxpY2l0bHkgbWVudGlvbmVkIGFzIGEgcmVhY2hhYmxlIGRyaXZlciB0eXBlLlxuXG5Eb2VzIGl0IGZhbGwgaW50byBhbnkgbmVnYXRpdmUgY3JpdGVyaWE/IE5vLiBJdCdzIG5vdCBkb2N1bWVudGF0aW9uLCBsb2dnaW5nLCBvciBidWlsZCBzeXN0ZW0gY29kZS4gSXQncyBub3QgYSBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhIHBoeXNpY2FsIEFTSUMgdGhhdCBpc24ndCBlbXVsYXRlZC4gQW5kIGl0J3MgZGVmaW5pdGVseSB0aGUgcHJvYmUgcGF0aCwgbm90IHRoZSBkcml2ZXIgdGVhcmRvd24uIFNvLCB0aGUgYC5iaW5kYC9wcm9iZSBwYXRoIGlzIGV4ZWN1dGVkLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBgY2g5MjAwX2JpbmRgIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZS4gVVNCIGdhZGdldCBlbXVsYXRpb24gZHluYW1pY2FsbHkgcGx1Z3MgYW5kIHVucGx1Z3MgVVNCIGRldmljZXMgZHVyaW5nIHN5emthbGxlciBmdXp6aW5nLiBUaGUgYmluZC9wcm9iZSBwYXRoIHdpbGwgYmUgZXhlY3V0ZWQgZXZlcnkgdGltZSBzeXprYWxsZXIgc2VuZHMgYSBVU0IgYXR0YWNoIHJlcXVlc3QgZm9yIFZJRCAweDFBODYgUElEIDB4RTA5Mi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBjaDkyMDBfYmluZGAgaXMgcmVhY2hhYmxlLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gWWVzLCBkZXNwaXRlIGJlaW5nIGBzdGF0aWNgLCBgY2g5MjAwX2JpbmRgICppcyogZGVmaW5pdGVseSBhIHN5bWJvbCBpbiB0aGUga2VybmVsIHN5bWJvbCB0YWJsZSBiZWNhdXNlIGl0J3MgYSBmdW5jdGlvbiBwb2ludGVyIGluIGEgYHN0cnVjdCBkcml2ZXJfaW5mb2AsIGFuZCB0aHVzIGNhbm5vdCBiZSBpbmxpbmVkLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBndWlkZWxpbmVzIG9uIFwiRXh0cmFjdGluZyBGb2N1c1N5bWJvbHMuXCIgSSBuZWVkIHRvIGF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBhbmQgdGFyZ2V0IHNwZWNpZmljIGxvZ2ljLiBUaGUgc3BlY2lmaWMgZnVuY3Rpb24gbW9kaWZpZWQgaXMgYGNoOTIwMF9iaW5kYC4gQ2hlY2tpbmcgdGhlIGRpZmYsIGl0J3MgY2xlYXIgdGhhdCBvbmx5IGBjaDkyMDBfYmluZGAgaXMgdG91Y2hlZC5cblxuRG91YmxlLWNoZWNraW5nIHRoZSBjb25maWdzLCBJIGNhbiBjb25maXJtIGBVU0JfTkVUX0NIOTIwMGAgYW5kIGBVU0JfVVNCTkVUYCBhcmUgcmVxdWlyZWQsIGFsb25nIHdpdGggYFVTQmAgYW5kIGBORVRgLiBUaGUgYHNlbGVjdCBNSUlgIGlzIGF1dG9tYXRpYy5cblxuVG8gY29uZmlybSB0aGVyZSBpcyBubyBzdWJ0bGUgcmVhc29uIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCwgSSBhbSBkb3VibGUtY2hlY2tpbmcgdGhhdCBVU0IgZW11bGF0aW9uIGlzIHN1cHBvcnRlZCBpbiBRRU1VLCBhbmQgdGhhdCBgY2g5MjAwYCBkb2VzIG5vdCByZXF1aXJlIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJpbmcgYSBwaHlzaWNhbCBBU0lDLiBBbGwgY2hlY2tzIG91dCwgYW5kIFVTQiBnYWRnZXQgYW5kIGR1bW15X2hjZCBhcmUgc3BlY2lmaWNhbGx5IGxpc3RlZCBhcyBzdXBwb3J0ZWQuXG5cblRoZXJlZm9yZSwgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5NeSBmb2N1cyBzeW1ib2wgaXMgYGNoOTIwMF9iaW5kYC5cblxuQ29uZmlnczogYFVTQl9ORVRfQ0g5MjAwYCwgYFVTQl9VU0JORVRgLlxuXG5UaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIHBhdGNoIGFkZHMgZXJyb3IgY2hlY2tpbmcgZm9yIGBjb250cm9sX3dyaXRlKClgIGNhbGxzIGluIGBjaDkyMDBfYmluZCgpYCwgd2hpY2ggbm93IGVhcmx5IHJldHVybnMgb24gZmFpbHVyZSBkdXJpbmcgZGV2aWNlIGJpbmRpbmcuIFRoZSBkcml2ZXIgaXMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBVU0IgZW11bGF0aW9uIChSYXcgR2FkZ2V0IC8gRHVtbXkgSENEKSB3aXRoIGRldmljZSBJRCAweDFBODY6MHhFMDkyLiBGdXp6aW5nIGNhbiB0cmlnZ2VyIGFsbG9jYXRpb24vVVNCIGNvbW11bmljYXRpb24gZmFpbHVyZXMgdG8gZXhlcmNpc2UgdGhlc2UgbmV3bHkgYWRkZWQgZXJyb3IgcmV0dXJuIHBhdGhzIGFuZCB2ZXJpZnkgcHJvcGVyIGNsZWFudXAuXG5cbk5vdywgbGV0J3MgaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTkyLCJPdXRwdXRUb2tlbnMiOjE1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MjoxMS42NTkxMzI3NzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDM5OTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX05FVF9DSDkyMDBcIixcbiAgICBcIlVTQl9VU0JORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaDkyMDBfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgcmV0dXJuIGNoZWNrcyBmb3IgY29udHJvbF93cml0ZSgpIGNhbGxzIGluIGNoOTIwMF9iaW5kKCkgZHVyaW5nIFVTQiBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIFRoZSBDSDkyMDAgVVNCIGV0aGVybmV0IGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4sIFVTQiBSYXcgR2FkZ2V0IC8gZHVtbXlfaGNkKSBtYXRjaGluZyBpdHMgVVNCIFZJRC9QSUQuIEZ1enppbmcgd2l0aCBVU0IgZmF1bHQgaW5qZWN0aW9uIG9yIHVuZXhwZWN0ZWQgY29udHJvbCByZXNwb25zZXMgY2FuIHRlc3QgdGhlc2UgbmV3bHkgaW50cm9kdWNlZCBlcnJvciBleGl0IHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9ORVRfQ0g5MjAwXCIsXG4gICAgXCJVU0JfVVNCTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2g5MjAwX2JpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIHJldHVybiBjaGVja3MgZm9yIGNvbnRyb2xfd3JpdGUoKSBjYWxscyBpbiBjaDkyMDBfYmluZCgpIGR1cmluZyBVU0IgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBUaGUgQ0g5MjAwIFVTQiBldGhlcm5ldCBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgZXhlcmNpc2VkIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBVU0IgUmF3IEdhZGdldCAvIGR1bW15X2hjZCkgbWF0Y2hpbmcgaXRzIFVTQiBWSUQvUElELiBGdXp6aW5nIHdpdGggVVNCIGZhdWx0IGluamVjdGlvbiBvciB1bmV4cGVjdGVkIGNvbnRyb2wgcmVzcG9uc2VzIGNhbiB0ZXN0IHRoZXNlIG5ld2x5IGludHJvZHVjZWQgZXJyb3IgZXhpdCBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDI6MTEuNzQzNTQwNzI0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTE0NzkyMzM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjExLjc0NDE3NDY3NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5MTQ3MjgzMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHJldHVybiB2YWx1ZSBlcnJvciBjaGVja3MgZm9yIGNhbGxzIHRvIGNvbnRyb2xfd3JpdGUoKSBpbiBjaDkyMDBfYmluZCgpLiBUaGUgZGF0YSBidWZmZXIgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSBpcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byBlYWNoIGNhbGwsIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSB1cG9uIGZhaWx1cmUgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIGNvbnRyb2wgZmxvdyBpcyBub3QgYWx0ZXJlZCBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzUyZjFhODEwZGYzYzI5NmM5N2I1MzRiYzU2YmVkZDMwZWQ4NDIwYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDIzOjQwOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jIGIvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG5pbmRleCBhMjA2ZmZhNzZmMWI5Li5hYjNjZDM5MDJlZDcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXG4rKysgYi9kcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcbkBAIC0zNjAsMzIgKzM2MCw0NCBAQCBzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gXHRkYXRhWzFdID0gMHgwRjtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHhBMDtcbiBcdGRhdGFbMV0gPSAweDkwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcbiBcdFx0XHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHRkYXRhWzBdID0gMHgzMDtcbiBcdGRhdGFbMV0gPSAweDAwO1xuIFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXG4gXHRcdFx0ICAgICAgIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0dmFsO1xuIFxuIFx0ZGF0YVswXSA9IDB4MTc7XG4gXHRkYXRhWzFdID0gMHhEODtcbiBcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcbiBcdFx0XHQgICAgICAgZGF0YSwgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcbitcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXR2YWw7XG4gXG4gXHQvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi9cbiBcdGRhdGFbMF0gPSAweDAxO1xuIFx0ZGF0YVsxXSA9IDB4MDA7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxuIFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldHZhbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdGRhdGFbMF0gPSAweDVGO1xuIFx0ZGF0YVsxXSA9IDB4MEQ7XG4gXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxuIFx0XHRcdCAgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldHZhbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldHZhbDtcbiBcbiBcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xuIFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cdTAwM2VuZXQsIGFkZHIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDI6MTEuNzQ0MTc2NDc0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc5MDY5NjA4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBVU0IgQ0g5MjAwIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBJIG5lZWQgdG8gYW5hbHl6ZSBpcyByZWxhdGVkIHRvIHRoZSBVU0IgQ0g5MjAwIGRyaXZlci4gSSByZW1lbWJlciB0aGF0IHRoZSByZWxldmFudCBzb3VyY2UgY29kZSB3aWxsIGJlIGxvY2F0ZWQgaW4gdGhlIGBkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNgIGZpbGUuIEdpdmVuIHdoYXQgSSdtIGxvb2tpbmcgYXQsIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgY29kZSBhcm91bmQgbGluZSAzNjAgaW4gdGhhdCBmaWxlLiBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhhdCBzZWN0aW9uIGludG8gdmlldyBhbmQgZGl2ZSBpbi4gVGltZSB0byBnZXQgZG93biB0byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDI6MTkuNjUxMTQwODM2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMzA6XFx0XFx0ZGF0YVsyXSA9IG1hY19hZGRyWzNdO1xcbiAzMzE6XFx0XFx0ZGF0YVszXSA9IG1hY19hZGRyWzJdO1xcbiAzMzI6XFx0XFx0ZGF0YVs0XSA9IG1hY19hZGRyWzFdO1xcbiAzMzM6XFx0XFx0ZGF0YVs1XSA9IG1hY19hZGRyWzBdO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRzdGF0aWMgaW50IGNoOTIwMF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDMzOTpcXHR7XFxuIDM0MDpcXHRcXHRpbnQgcmV0dmFsID0gMDtcXG4gMzQxOlxcdFxcdHVuc2lnbmVkIGNoYXIgZGF0YVsyXTtcXG4gMzQyOlxcdFxcdHU4IGFkZHJbRVRIX0FMRU5dO1xcbiAzNDM6XFx0XFxuIDM0NDpcXHRcXHRyZXR2YWwgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xcbiAzNDU6XFx0XFx0aWYgKHJldHZhbClcXG4gMzQ2OlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdGRldi1cXHUwMDNlbWlpLmRldiA9IGRldi1cXHUwMDNlbmV0O1xcbiAzNDk6XFx0XFx0ZGV2LVxcdTAwM2VtaWkubWRpb19yZWFkID0gY2g5MjAwX21kaW9fcmVhZDtcXG4gMzUwOlxcdFxcdGRldi1cXHUwMDNlbWlpLm1kaW9fd3JpdGUgPSBjaDkyMDBfbWRpb193cml0ZTtcXG4gMzUxOlxcdFxcdGRldi1cXHUwMDNlbWlpLnJlZ19udW1fbWFzayA9IDB4MWY7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdGRldi1cXHUwMDNlbWlpLnBoeV9pZF9tYXNrID0gMHgxZjtcXG4gMzU0OlxcdFxcbiAzNTU6XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX210dSA9IGRldi1cXHUwMDNlbmV0LVxcdTAwM2VtdHUgKyBkZXYtXFx1MDAzZW5ldC1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbiAzNTY6XFx0XFx0ZGV2LVxcdTAwM2VyeF91cmJfc2l6ZSA9IDI0ICogNjQgKyAxNjtcXG4gMzU3OlxcdFxcdG1paV9ud2F5X3Jlc3RhcnQoXFx1MDAyNmRldi1cXHUwMDNlbWlpKTtcXG4gMzU4OlxcdFxcbiAzNTk6XFx0XFx0ZGF0YVswXSA9IDB4MDE7XFxuIDM2MDpcXHRcXHRkYXRhWzFdID0gMHgwRjtcXG4gMzYxOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcXG4gMzYyOlxcdFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzNjM6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIDM2NDpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNjU6XFx0XFxuIDM2NjpcXHRcXHRkYXRhWzBdID0gMHhBMDtcXG4gMzY3OlxcdFxcdGRhdGFbMV0gPSAweDkwO1xcbiAzNjg6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfRklGT19ERVBUSCwgZGF0YSxcXG4gMzY5OlxcdFxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzNzA6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIDM3MTpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRkYXRhWzBdID0gMHgzMDtcXG4gMzc0OlxcdFxcdGRhdGFbMV0gPSAweDAwO1xcbiAzNzU6XFx0XFx0cmV0dmFsID0gY29udHJvbF93cml0ZShkZXYsIFJFUVVFU1RfV1JJVEUsIDAsIE1BQ19SRUdfUEFVU0UsIGRhdGEsXFxuIDM3NjpcXHRcXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4gMzc3OlxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiAzNzg6XFx0XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gMzc5OlxcdFxcbiAzODA6XFx0XFx0ZGF0YVswXSA9IDB4MTc7XFxuIDM4MTpcXHRcXHRkYXRhWzFdID0gMHhEODtcXG4gMzgyOlxcdFxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcXG4gMzgzOlxcdFxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbiAzODQ6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIDM4NTpcXHRcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAzODY6XFx0XFxuIDM4NzpcXHRcXHQvKiBVbmRvY3VtZW50ZWQgcmVnaXN0ZXIgKi9cXG4gMzg4OlxcdFxcdGRhdGFbMF0gPSAweDAxO1xcbiAzODk6XFx0XFx0ZGF0YVsxXSA9IDB4MDA7XFxuIDM5MDpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgMjU0LCBkYXRhLCAweDAyLFxcbiAzOTE6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM5MjpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gMzkzOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDM5NDpcXHRcXG4gMzk1OlxcdFxcdGRhdGFbMF0gPSAweDVGO1xcbiAzOTY6XFx0XFx0ZGF0YVsxXSA9IDB4MEQ7XFxuIDM5NzpcXHRcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxcbiAzOTg6XFx0XFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDM5OTpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gNDAwOlxcdFxcdFxcdHJldHVybiByZXR2YWw7XFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdHJldHZhbCA9IGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpO1xcbiA0MDM6XFx0XFx0ZXRoX2h3X2FkZHJfc2V0KGRldi1cXHUwMDNlbmV0LCBhZGRyKTtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gNDA2OlxcdH1cXG4gNDA3OlxcdFxcbiA0MDg6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBjaDkyMDBfaW5mbyA9IHtcXG4gNDA5OlxcdFxcdC5kZXNjcmlwdGlvbiA9IFxcXCJDSDkyMDAgVVNCIHRvIE5ldHdvcmsgQWRhcHRvclxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjE5LjY1MTIyODUwNloiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MTM1NDQ0Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2g6IGBjaDkyMDBfYmluZGAgRXJyb3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgZXJyb3IgY2hlY2tpbmcgd2l0aGluIHRoZSBgY2g5MjAwX2JpbmRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGNvbnRyb2xfd3JpdGVgIGlzIGNhbGxlZCByZXBlYXRlZGx5IHdpdGhpbiBgY2g5MjAwX2JpbmRgLiBQcmV2aW91c2x5LCBub25lIG9mIHRoZXNlIGNhbGxzJyByZXR1cm4gdmFsdWVzIHdlcmUgYmVpbmcgZXhhbWluZWQsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgb3ZlcnNpZ2h0LiBUaGUgcGF0Y2ggY2xldmVybHkgYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgc2ltcGxlIGNoZWNrIGFmdGVyIGVhY2ggYGNvbnRyb2xfd3JpdGVgIGNhbGw6IGBpZiAocmV0dmFsIFx1MDAzYyAwKSByZXR1cm4gcmV0dmFsO2AuIFRoaXMgaXMgYSBjbGFzc2ljLCBidXQgb2Z0ZW4gb3Zlcmxvb2tlZCwgZGVmZW5zaXZlIHByb2dyYW1taW5nIHRlY2huaXF1ZS4gSXQncyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiByb2J1c3QgY29kZSwgYW5kIGl0cyBpbmNsdXNpb24gaGVyZSBpcyBhIHdlbGNvbWUgaW1wcm92ZW1lbnQuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gKmluc2lkZSogdGhvc2UgYGNvbnRyb2xfd3JpdGVgIGNhbGxzLiBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgY29udHJvbF93cml0ZWAgaXRzZWxmLCBhbmQgYWxzbyBgZ2V0X21hY19hZGRyZXNzYCwgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIGFuZCB0aGUgbGlrZWx5IGltcGFjdCBvZiB0aGVzZSBhZGRlZCBjaGVja3MuIFdlJ3JlIGVzc2VudGlhbGx5IGhhcmRlbmluZyB0aGUgZHJpdmVyIGhlcmUsIHNvIEkgbmVlZCB0byBhc3Nlc3MgaG93IGVmZmVjdGl2ZSB0aGUgYWRkZWQgZXJyb3IgY2hlY2tpbmcgaXMsIGFuZCB3aGF0IGZhaWx1cmUgc2NlbmFyaW9zIGFyZSBiZWluZyBhZGRyZXNzZWQuIEl0J3MgdGltZSB0byBkZWx2ZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjI2Ljc4NjY3NjA2NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk1OlxcdFxcbiAyOTY6XFx0XFx0aWYgKHVubGlrZWx5KHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgcnhfb3ZlcmhlYWQpKSB7XFxuIDI5NzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldiwgXFxcInVuZXhwZWN0ZWQgdGlueSByeCBmcmFtZVxcXFxuXFxcIik7XFxuIDI5ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjk5OlxcdFxcdH1cXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0bGVuID0gKHNrYi1cXHUwMDNlZGF0YVtza2ItXFx1MDAzZWxlbiAtIDE2XSB8IHNrYi1cXHUwMDNlZGF0YVtza2ItXFx1MDAzZWxlbiAtIDE1XSBcXHUwMDNjXFx1MDAzYyA4KTtcXG4gMzAyOlxcdFxcdHNrYl90cmltKHNrYiwgbGVuKTtcXG4gMzAzOlxcdFxcbiAzMDQ6XFx0XFx0cmV0dXJuIDE7XFxuIDMwNTpcXHR9XFxuIDMwNjpcXHRcXG4gMzA3OlxcdHN0YXRpYyBpbnQgZ2V0X21hY19hZGRyZXNzKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciAqZGF0YSlcXG4gMzA4OlxcdHtcXG4gMzA5OlxcdFxcdGludCBlcnIgPSAwO1xcbiAzMTA6XFx0XFx0dW5zaWduZWQgY2hhciBtYWNfYWRkclsweDA2XTtcXG4gMzExOlxcdFxcdGludCByZF9tYWNfbGVuID0gMDtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0XFx0bmV0ZGV2X2RiZyhkZXYtXFx1MDAzZW5ldCwgXFxcIiVzOlxcXFxuXFxcXHR1c2JuZXQgVklEOiUweCBQSUQ6JTB4XFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4gMzE0OlxcdFxcdFxcdCAgIGxlMTZfdG9fY3B1KGRldi1cXHUwMDNldWRldi1cXHUwMDNlZGVzY3JpcHRvci5pZFZlbmRvciksXFxuIDMxNTpcXHRcXHRcXHQgICBsZTE2X3RvX2NwdShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7XFxuIDMxNjpcXHRcXG4gMzE3OlxcdFxcdG1lbXNldChtYWNfYWRkciwgMCwgc2l6ZW9mKG1hY19hZGRyKSk7XFxuIDMxODpcXHRcXHRyZF9tYWNfbGVuID0gY29udHJvbF9yZWFkKGRldiwgUkVRVUVTVF9SRUFELCAwLFxcbiAzMTk6XFx0XFx0XFx0XFx0XFx0ICBNQUNfUkVHX1NUQVRJT05fTCwgbWFjX2FkZHIsIDB4MDIsXFxuIDMyMDpcXHRcXHRcXHRcXHRcXHQgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDMyMTpcXHRcXHRyZF9tYWNfbGVuICs9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCwgTUFDX1JFR19TVEFUSU9OX00sXFxuIDMyMjpcXHRcXHRcXHRcXHRcXHQgICBtYWNfYWRkciArIDIsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDMyMzpcXHRcXHRyZF9tYWNfbGVuICs9IGNvbnRyb2xfcmVhZChkZXYsIFJFUVVFU1RfUkVBRCwgMCwgTUFDX1JFR19TVEFUSU9OX0gsXFxuIDMyNDpcXHRcXHRcXHRcXHRcXHQgICBtYWNfYWRkciArIDQsIDB4MDIsIENPTlRST0xfVElNRU9VVF9NUyk7XFxuIDMyNTpcXHRcXHRpZiAocmRfbWFjX2xlbiAhPSBFVEhfQUxFTilcXG4gMzI2OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdGRhdGFbMF0gPSBtYWNfYWRkcls1XTtcXG4gMzI5OlxcdFxcdGRhdGFbMV0gPSBtYWNfYWRkcls0XTtcXG4gMzMwOlxcdFxcdGRhdGFbMl0gPSBtYWNfYWRkclszXTtcXG4gMzMxOlxcdFxcdGRhdGFbM10gPSBtYWNfYWRkclsyXTtcXG4gMzMyOlxcdFxcdGRhdGFbNF0gPSBtYWNfYWRkclsxXTtcXG4gMzMzOlxcdFxcdGRhdGFbNV0gPSBtYWNfYWRkclswXTtcXG4gMzM0OlxcdFxcbiAzMzU6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzM2OlxcdH1cXG4gMzM3OlxcdFxcbiAzMzg6XFx0c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbiAzMzk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MjoyNi43ODY3NTM2NjRaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzc3Mzk3NzA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSdzIFBvdGVudGlhbCBJc3N1ZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gZm9jdXNpbmcgb24gYGdldF9tYWNfYWRkcmVzc2AuIEkgc2VlIGEgYG1lbXNldGAgY2FsbCByaWdodCBhd2F5OiBgbWVtc2V0KG1hY19hZGRyLCAwLCBzaXplb2YobWFjX2FkZHIpKTtgLiBUaGF0J3MgZ29vZCDigJMgaW5pdGlhbGl6aW5nIHRoZSBNQUMgYWRkcmVzcyBidWZmZXIgaXMgYWx3YXlzIGEgc29saWQgcHJhY3RpY2UuIE5vdywgSSdtIHNoaWZ0aW5nIG15IGF0dGVudGlvbiB0byBgY2g5MjAwX2JpbmRgLiBUaGUgY3J1Y2lhbCBjaGFuZ2UgaXMgdGhhdCB0aGUgYGNvbnRyb2xfd3JpdGVgIGNhbGwgbm93IGluY2x1ZGVzIGFuIGVycm9yIGNoZWNrOiBgaWYgKHJldHZhbCBcdTAwM2MgMCkgcmV0dXJuIHJldHZhbDtgLlxuXG5CZWZvcmUgdGhpcyBwYXRjaCwgd2UgaGFkIGEgcG90ZW50aWFsIGJ1ZzogYGNvbnRyb2xfd3JpdGVgIGNvdWxkIGZhaWwsIGJ1dCB0aGUgY29kZSB3b3VsZCBibGluZGx5IGNvbnRpbnVlIHRvIGNhbGwgYGdldF9tYWNfYWRkcmVzc2AgYW5kIGBldGhfaHdfYWRkcl9zZXRgLiBOb3csIHdpdGggdGhlIGNoZWNrLCBpZiBgY29udHJvbF93cml0ZWAgcmV0dXJucyBhbiBlcnJvciwgdGhlIGZ1bmN0aW9uIHdpbGwgYmFpbCBvdXQgZWFybHkuIFRoaXMgYmVncyB0aGUgcXVlc3Rpb246IGRvZXMgYGNoOTIwMF9iaW5kYCBsZWFrIG1lbW9yeSBvciB1c2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/XG5cbkknbSBub3RpbmcgdGhhdCB0aGUgYGFkZHJgIHZhcmlhYmxlIGluIGBjaDkyMDBfYmluZGAgaXMgZGVjbGFyZWQgYXMgYHU4IGFkZHJbRVRIX0FMRU5dO2Agd2hpY2ggaXMgZ29vZC4gSG93ZXZlciwgaWYgYGNvbnRyb2xfd3JpdGVgIGZhaWxzLCB0aG9zZSBjYWxscyB0byBgZ2V0X21hY19hZGRyZXNzYCBhbmQgYGV0aF9od19hZGRyX3NldGAgYXJlICpjb21wbGV0ZWx5KiBza2lwcGVkLiBUaGUga2V5IGlzIG5vdyB0aGF0IGBhZGRyYCBpcyBub3QgdXNlZCBpbiB0aGUgZmFpbHVyZSBjYXNlIVxuXG5TbywgdGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGFkZHJgIGlzICpvbmx5KiB1c2VkIGlmIGBjb250cm9sX3dyaXRlYCBzdWNjZWVkcy4gVGhpcyBjaGFuZ2UgcHJldmVudHMgYSBwb3NzaWJsZSB1c2UtYWZ0ZXItZmFpbHVyZSBidWcuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGNvbnRyb2xfd3JpdGVgIGl0c2VsZiB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MjozMC41NjA3MzQwOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcbiAgMzE6XFx0I2RlZmluZSBSRVFVRVNUX1JFQURcXHQweDBFXFxuICAzMjpcXHQjZGVmaW5lIFJFUVVFU1RfV1JJVEVcXHQweDBGXFxuICAzMzpcXHRcXG4gIDM0OlxcdC8qIEFkZHJlc3Mgc3BhY2U6XFxuICAzNTpcXHQgKiAwMC02MyA6IE1JSVxcbiAgMzY6XFx0ICogNjQtMTI4OiBNQUNcXG4gIDM3OlxcdCAqXFxuICAzODpcXHQgKiBOb3RlOiBhbGwgYWNjZXNzZXMgbXVzdCBiZSAxNi1iaXRcXG4gIDM5OlxcdCAqL1xcbiAgNDA6XFx0XFxuICA0MTpcXHQjZGVmaW5lIE1BQ19SRUdfQ1RSTCA2NFxcbiAgNDI6XFx0I2RlZmluZSBNQUNfUkVHX1NUQVRVUyA2NlxcbiAgNDM6XFx0I2RlZmluZSBNQUNfUkVHX0lOVEVSUlVQVF9NQVNLIDY4XFxuICA0NDpcXHQjZGVmaW5lIE1BQ19SRUdfUEhZX0NPTU1BTkQgNzBcXG4gIDQ1OlxcdCNkZWZpbmUgTUFDX1JFR19QSFlfREFUQSA3MlxcbiAgNDY6XFx0I2RlZmluZSBNQUNfUkVHX1NUQVRJT05fTCA3NFxcbiAgNDc6XFx0I2RlZmluZSBNQUNfUkVHX1NUQVRJT05fTSA3NlxcbiAgNDg6XFx0I2RlZmluZSBNQUNfUkVHX1NUQVRJT05fSCA3OFxcbiAgNDk6XFx0I2RlZmluZSBNQUNfUkVHX0hBU0hfTCA4MFxcbiAgNTA6XFx0I2RlZmluZSBNQUNfUkVHX0hBU0hfTTEgODJcXG4gIDUxOlxcdCNkZWZpbmUgTUFDX1JFR19IQVNIX00yIDg0XFxuICA1MjpcXHQjZGVmaW5lIE1BQ19SRUdfSEFTSF9IIDg2XFxuICA1MzpcXHQjZGVmaW5lIE1BQ19SRUdfVEhSRVNIT0xEIDg4XFxuICA1NDpcXHQjZGVmaW5lIE1BQ19SRUdfRklGT19ERVBUSCA5MFxcbiAgNTU6XFx0I2RlZmluZSBNQUNfUkVHX1BBVVNFIDkyXFxuICA1NjpcXHQjZGVmaW5lIE1BQ19SRUdfRkxPV19DT05UUk9MIDk0XFxuICA1NzpcXHRcXG4gIDU4OlxcdC8qIENvbnRyb2wgcmVnaXN0ZXIgYml0c1xcbiAgNTk6XFx0ICpcXG4gIDYwOlxcdCAqIE5vdGU6IGJpdHMgMTMgYW5kIDE1IGFyZSByZXNlcnZlZFxcbiAgNjE6XFx0ICovXFxuICA2MjpcXHQjZGVmaW5lIExPT1BCQUNLXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMTQpXFxuICA2MzpcXHQjZGVmaW5lIEJBU0UxMDBYXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMTIpXFxuICA2NDpcXHQjZGVmaW5lIE1CUFNfMTBcXHRcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxMSlcXG4gIDY1OlxcdCNkZWZpbmUgRFVQTEVYX01PREVcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxMClcXG4gIDY2OlxcdCNkZWZpbmUgUEFVU0VfRlJBTUVcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA5KVxcbiAgNjc6XFx0I2RlZmluZSBQUk9NSVNDVU9VU1xcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDgpXFxuICA2ODpcXHQjZGVmaW5lIE1VTFRJQ0FTVFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDcpXFxuICA2OTpcXHQjZGVmaW5lIEJST0FEQ0FTVFxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDYpXFxuICA3MDpcXHQjZGVmaW5lIEhBU0hcXHRcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA1KVxcbiAgNzE6XFx0I2RlZmluZSBBUFBFTkRfUEFEXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNClcXG4gIDcyOlxcdCNkZWZpbmUgQVBQRU5EX0NSQ1xcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDMpXFxuICA3MzpcXHQjZGVmaW5lIFRSQU5TTUlUVEVSX0FDVElPTlxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDIpXFxuICA3NDpcXHQjZGVmaW5lIFJFQ0VJVkVSX0FDVElPTlxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDEpXFxuICA3NTpcXHQjZGVmaW5lIERNQV9BQ1RJT05cXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAwKVxcbiAgNzY6XFx0XFxuICA3NzpcXHQvKiBTdGF0dXMgcmVnaXN0ZXIgYml0c1xcbiAgNzg6XFx0ICpcXG4gIDc5OlxcdCAqIE5vdGU6IGJpdHMgNy0xNSBhcmUgcmVzZXJ2ZWRcXG4gIDgwOlxcdCAqL1xcbiAgODE6XFx0I2RlZmluZSBBTElHTk1FTlRcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA2KVxcbiAgODI6XFx0I2RlZmluZSBGSUZPX09WRVJfUlVOXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgNSlcXG4gIDgzOlxcdCNkZWZpbmUgRklGT19VTkRFUl9SVU5cXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyA0KVxcbiAgODQ6XFx0I2RlZmluZSBSWF9FUlJPUlxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDMpXFxuICA4NTpcXHQjZGVmaW5lIFJYX0NPTVBMRVRFXFx0XFx0KDB4MDEgXFx1MDAzY1xcdTAwM2MgMilcXG4gIDg2OlxcdCNkZWZpbmUgVFhfRVJST1JcXHRcXHQoMHgwMSBcXHUwMDNjXFx1MDAzYyAxKVxcbiAgODc6XFx0I2RlZmluZSBUWF9DT01QTEVURVxcdFxcdCgweDAxIFxcdTAwM2NcXHUwMDNjIDApXFxuICA4ODpcXHRcXG4gIDg5OlxcdC8qIEZJRk8gZGVwdGggcmVnaXN0ZXIgYml0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0MjozMC41NjA4NDE2OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3ODIwMDU4MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgRGVmaW5pdGlvbiBvZiBgY29udHJvbF93cml0ZWAgaW4gYGNoOTIwMC5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBjb250cm9sX3dyaXRlYCB3aXRoaW4gdGhlIGBjaDkyMDAuY2Agc291cmNlIGZpbGUuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHN0ZXAuIEknbSBsaWtlbHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMgb3IgcGVyaGFwcyB0cm91Ymxlc2hvb3QgYW4gaXNzdWUgcmVsYXRlZCB0byBpdHMgYmVoYXZpb3IuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHN0cmFpZ2h0Zm9yd2FyZDogbG9jYXRlIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBleGFtaW5lIGl0cyBpbXBsZW1lbnRhdGlvbiwgdW5kZXJzdGFuZCBpdHMgcGFyYW1ldGVycywgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZSBhbmQgcG90ZW50aWFsbHkgdGhlIGhhcmR3YXJlIGl0J3MgY29udHJvbGxpbmcuIFRoZSBjb250ZXh0IGlzIGBjaDkyMDAuY2AsIHdoaWNoIEknbSBhc3N1bWluZyBpcyB0aGUgZHJpdmVyIGZpbGUgZm9yIHRoZSBDSDkyMDAgZGV2aWNlLiBUaGVyZWZvcmUsIHVuZGVyc3RhbmRpbmcgYGNvbnRyb2xfd3JpdGVgIGNvdWxkIGdpdmUgbWUgaW5zaWdodHMgaW50byBob3cgdGhlIGRyaXZlciBtYW5hZ2VzIGNvbnRyb2wgc2lnbmFscyBvciB3cml0ZXMgZGF0YSB0byB0aGUgaGFyZHdhcmUsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBkZXZpY2UgZnVuY3Rpb25hbGl0eS4gSSdsbCBsaWtlbHkgdXNlIG15IElERSdzIFwiZ28gdG8gZGVmaW5pdGlvblwiIG9yIHNlYXJjaCBjYXBhYmlsaXRpZXMgdG8gcXVpY2tseSBsb2NhdGUgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjM4LjM4MDkwMzc0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMxMTIwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29udHJvbF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTk5PXN0YXRpYyBpbnQgY29udHJvbF9yZWFkKHN0cnVjdCB1c2JuZXQgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0xMzYtXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjEzNzpzdGF0aWMgaW50IGNvbnRyb2xfd3JpdGUoc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTEzOC1cXHRcXHRcXHQgdW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jPTE5Nz1zdGF0aWMgdm9pZCBjaDkyMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTIxMS1cXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MjEyOlxcdGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBsb2MgKiAyLCBidWZmLCAweDAyLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0yMTMtXFx0XFx0ICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYz0zMzg9c3RhdGljIGludCBjaDkyMDBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2MC1cXHRkYXRhWzFdID0gMHgwRjtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzYxOlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX1RIUkVTSE9MRCwgZGF0YSxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzYyLVxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2Ny1cXHRkYXRhWzFdID0gMHg5MDtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzY4OlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZJRk9fREVQVEgsIGRhdGEsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM2OS1cXHRcXHRcXHQgICAgICAgMHgwMiwgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zNzQtXFx0ZGF0YVsxXSA9IDB4MDA7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM3NTpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19QQVVTRSwgZGF0YSxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzc2LVxcdFxcdFxcdCAgICAgICAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM4MS1cXHRkYXRhWzFdID0gMHhEODtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzgyOlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCBNQUNfUkVHX0ZMT1dfQ09OVFJPTCxcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmMtMzgzLVxcdFxcdFxcdCAgICAgICBkYXRhLCAweDAyLCBDT05UUk9MX1RJTUVPVVRfTVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM4OS1cXHRkYXRhWzFdID0gMHgwMDtcXG5kcml2ZXJzL25ldC91c2IvY2g5MjAwLmM6MzkwOlxcdHJldHZhbCA9IGNvbnRyb2xfd3JpdGUoZGV2LCBSRVFVRVNUX1dSSVRFLCAwLCAyNTQsIGRhdGEsIDB4MDIsXFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jLTM5MS1cXHRcXHRcXHQgICAgICAgQ09OVFJPTF9USU1FT1VUX01TKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTYtXFx0ZGF0YVsxXSA9IDB4MEQ7XFxuZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jOjM5NzpcXHRyZXR2YWwgPSBjb250cm9sX3dyaXRlKGRldiwgUkVRVUVTVF9XUklURSwgMCwgTUFDX1JFR19DVFJMLCBkYXRhLCAweDAyLFxcbmRyaXZlcnMvbmV0L3VzYi9jaDkyMDAuYy0zOTgtXFx0XFx0XFx0ICAgICAgIENPTlRST0xfVElNRU9VVF9NUyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjM4LjY2NDAyMzM3MloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTY3ODA2MDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkFuYWx5emluZyBgZHJpdmVycy9uZXQvdXNiL2NoOTIwMC5jYCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIGluIHRoaXMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZnJvbSBsaW5lcyAxMzUgdG8gMTYwLiBJIHN1c3BlY3QgdGhpcyBzZWN0aW9uIGxpa2VseSBkZWFscyB3aXRoIGEgY3J1Y2lhbCBhc3BlY3Qgb2YgdGhlIENIOTIwMCBVU0IgbmV0d29yayBhZGFwdGVyLCBwcm9iYWJseSBpbml0aWFsaXphdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nIHNldHVwLCBvciBwb3NzaWJseSB0aGUgY29yZSBkYXRhIHRyYW5zZmVyIGxvZ2ljLiBHaXZlbiB0aGUgY29udGV4dCwgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIGRldmljZSBjb21tdW5pY2F0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayBmb3Iga2V5IGZ1bmN0aW9uIGNhbGxzLCB2YXJpYWJsZSBhc3NpZ25tZW50cywgYW5kIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgY2xlYXIgaW5kaWNhdGlvbnMgb2YgaG93IHRoZSBkZXZpY2UgaXMgY29uZmlndXJlZCwgaG93IGRhdGEgaXMgcmVhZCBvciB3cml0dGVuLCBvciBhbnkgZXJyb3ItY2hlY2tpbmcgdGhhdCdzIHBlcmZvcm1lZCBkdXJpbmcgdGhpcyBjcnVjaWFsIHBhcnQgb2YgdGhlIGRyaXZlcidzIG9wZXJhdGlvbi4gSSBleHBlY3QgdG8gc2VlIHJlZmVyZW5jZXMgdG8gVVNCIGVuZHBvaW50cywgVVJCcywgYW5kIHBlcmhhcHMgc29tZSBkZXNjcmlwdG9yLXJlbGF0ZWQgb3BlcmF0aW9ucy4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSBzdHJ1Y3R1cmUgd2l0aGluIHRoYXQgY29kZSBzaG91bGQgcHJvdmlkZSBjb250ZXh0LCBzbyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IGNhbiBiZSBtb3JlIGVhc2lseSBhc3Nlc3NlZC4gTXkgZXhwZXJpZW5jZSB3aXRoIG90aGVyIFVTQiBuZXR3b3JrIGRyaXZlcnMgc2hvdWxkIGFsc28gcHJvdmlkZSBjbHVlcyBmb3IgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIzOjQyOjQwLjgzMTgzMjA2M1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvY2g5MjAwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0c3RhdGljIGludCBjb250cm9sX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgdW5zaWduZWQgY2hhciByZXF1ZXN0LFxcbiAxMzg6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBpbmRleCxcXG4gMTM5OlxcdFxcdFxcdFxcdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBzaG9ydCBzaXplLCBpbnQgdGltZW91dClcXG4gMTQwOlxcdHtcXG4gMTQxOlxcdFxcdHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7XFxuIDE0MjpcXHRcXHR1bnNpZ25lZCBjaGFyIHJlcXVlc3RfdHlwZTtcXG4gMTQzOlxcdFxcdGludCBlcnIgPSAwO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRpZiAocmVxdWVzdCA9PSBSRVFVRVNUX1dSSVRFKVxcbiAxNDY6XFx0XFx0XFx0cmVxdWVzdF90eXBlID0gKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHxcXG4gMTQ3OlxcdFxcdFxcdFxcdFxcdFVTQl9SRUNJUF9PVEhFUik7XFxuIDE0ODpcXHRcXHRlbHNlXFxuIDE0OTpcXHRcXHRcXHRyZXF1ZXN0X3R5cGUgPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfFxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0VVNCX1JFQ0lQX0RFVklDRSk7XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCIlcygpIGluZGV4PTB4JTAyeCBzaXplPSVkXFxcXG5cXFwiLFxcbiAxNTM6XFx0XFx0XFx0ICAgX19mdW5jX18sIGluZGV4LCBzaXplKTtcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0aWYgKGRhdGEpIHtcXG4gMTU2OlxcdFxcdFxcdGJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDE1NzpcXHRcXHRcXHRpZiAoIWJ1Zikge1xcbiAxNTg6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMTU5OlxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gMTYwOlxcdFxcdFxcdH1cXG4gMTYxOlxcdFxcdH1cXG4gMTYyOlxcdFxcbiAxNjM6XFx0XFx0ZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldi1cXHUwMDNldWRldixcXG4gMTY0OlxcdFxcdFxcdFxcdCAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtXFx1MDAzZXVkZXYsIDApLFxcbiAxNjU6XFx0XFx0XFx0XFx0ICAgICAgcmVxdWVzdCwgcmVxdWVzdF90eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1Ziwgc2l6ZSxcXG4gMTY2OlxcdFxcdFxcdFxcdCAgICAgIHRpbWVvdXQpO1xcbiAxNjc6XFx0XFx0aWYgKGVyciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGVyciBcXHUwMDNjIHNpemUpXFxuIDE2ODpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAxNjk6XFx0XFx0a2ZyZWUoYnVmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjM6NDI6NDAuODMxOTI4MDM0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEwMDU5NDk5MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFuYWx5c2lzIG9mIHRoZSBDSDkyMDAgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGVycm9yIGNoZWNraW5nIHdpdGhpbiB0aGUgYGNoOTIwMF9iaW5kKClgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgY29udHJvbF93cml0ZSgpYC4gTG9va2luZyBhdCBgY29udHJvbF93cml0ZSgpYCwgaXQgZHVwbGljYXRlcyBhIHNtYWxsIGJ1ZmZlciAoYGRhdGFgLCBzaXplIDIpIHVzaW5nIGBrbWVtZHVwYCwgdGhlbiB1c2VzIGB1c2JfY29udHJvbF9tc2dgLiBUaGUgaW1wb3J0YW50IHBhcnQgaGVyZSBpcyB0aGF0IGBkYXRhWzBdYCBhbmQgYGRhdGFbMV1gIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYGNvbnRyb2xfd3JpdGUoKWAgaXMgZXZlbiBjYWxsZWQuXG5cblRoZSBwYXRjaCBpdHNlbGYganVzdCBhZGRzIGFuIGBpZiAocmV0dmFsIFx1MDAzYyAwKSByZXR1cm4gcmV0dmFsO2AgY2hlY2sgYWZ0ZXIgZWFjaCBgY29udHJvbF93cml0ZSgpYCBjYWxsIGluIGBjaDkyMDBfYmluZCgpYC4gSWYgYSBjb250cm9sIHdyaXRlIGZhaWxzLCB0aGUgZnVuY3Rpb24gZXhpdHMgZWFybHksIHJldHVybmluZyB0aGUgZXJyb3IgY29kZS5cblxuU28sIHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBOby4gVGhlIGRhdGEgYmVpbmcgcGFzc2VkIHRvIGBjb250cm9sX3dyaXRlKClgIGlzIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQuIFJldHVybmluZyBlYXJseSBzaW1wbHkgbWVhbnMgd2UgYXZvaWQgZnVydGhlciBwb3RlbnRpYWxseSBkYW5nZXJvdXMgb3BlcmF0aW9ucyBkb3duIHRoZSBsaW5lLCBzdWNoIGFzIGNhbGxpbmcgYGdldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHIpYC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHJlYWQsIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGFuZCBubyBjb3BpZXMgdG8gdXNlciBzcGFjZS4gQW55IGVycm9yIGlzIHNpbXBseSBwcm9wYWdhdGVkIGJhY2sgdXAgdGhlIHN0YWNrIHRvIGB1c2JuZXRgLlxuXG5DaGVja2luZyB0aGUgY2FsbGVyLCBgY2g5MjAwX2JpbmQoKWAgaXMgY2FsbGVkIGZyb20gYSBgZHJpdmVyX2luZm9gIHN0cnVjdCB3aXRoaW4gYHVzYm5ldGAuIElmIGBjaDkyMDBfYmluZCgpYCBmYWlscyAocmV0dXJucyBcdTAwM2MgMCksIGB1c2JuZXRfcHJvYmVgIGNsZWFucyB1cCBhbmQgZmFpbHMgdGhlIGRldmljZSBwcm9iaW5nLiBBbGwgc3RhbmRhcmQsIGV4cGVjdGVkIGJlaGF2aW9yLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSdyZSBqdXN0IGFkZGluZyBlcnJvciBoYW5kbGluZy4gQW5kIHNpbmNlIHdlJ3JlIG9ubHkgYWRkaW5nIGVycm9yIGNoZWNrcywgdGhlIG5hdHVyZSBvZiB0aGVzZSBlcnJvcnMgaXMgZW50aXJlbHkgd2l0aGluIHRoZSByZWFsbSBvZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBvciBzdGFuZGFyZCBlcnJvciBkZXRlY3RvcnMuXG5cbk5vdywgcmVnYXJkaW5nIEtNU0FOLCB0aGlzIGlzIHdoZXJlIHdlIGdldCBzcGVjaWZpYy4gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBJbiB0aGlzIGNhc2UsIHdlIGhhdmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgZGF0YWAgYnVmZmVyIHBhc3NlZCB0byBgY29udHJvbF93cml0ZSgpYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQsIGNvbnRhaW5pbmcgdHdvIGNvbnN0YW50IGJ5dGVzIGJlZm9yZSBlYWNoIGNhbGwuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgcmVhZCwgcGFzc2VkIHRvIHVzZXJzcGFjZSwgb3IgdXNlZCBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24ndCBuZWVkZWQuIFRoaXMgcGF0Y2ggZmFsbHMgZmlybWx5IGluIHRoZSByZWFsbSBvZiBlcnJvciBoYW5kbGluZyBhbmQgZXhpc3RpbmcgZXJyb3IgZGV0ZWN0aW9uIG1lY2hhbmlzbXMuIE5vIGBOZWVkc0tNU0FOYCBpcyBuZWNlc3NhcnkgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwMywiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMzo0Mjo1MC44OTE0MzA1NjJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgcmV0dXJuIHZhbHVlIGVycm9yIGNoZWNrcyBmb3IgY2FsbHMgdG8gY29udHJvbF93cml0ZSgpIGluIGNoOTIwMF9iaW5kKCkuIFRoZSBkYXRhIGJ1ZmZlciBwYXNzZWQgdG8gY29udHJvbF93cml0ZSgpIGlzIGZ1bGx5IGluaXRpYWxpemVkIHByaW9yIHRvIGVhY2ggY2FsbCwgYW5kIHJldHVybmluZyBhbiBlcnJvciBjb2RlIHVwb24gZmFpbHVyZSBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIGFjY2Vzc2VkLCBhbmQgY29udHJvbCBmbG93IGlzIG5vdCBhbHRlcmVkIGluIGEgd2F5IHRoYXQgbGVhZHMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgS01TQU4gZnV6emluZy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHJldHVybiB2YWx1ZSBlcnJvciBjaGVja3MgZm9yIGNhbGxzIHRvIGNvbnRyb2xfd3JpdGUoKSBpbiBjaDkyMDBfYmluZCgpLiBUaGUgZGF0YSBidWZmZXIgcGFzc2VkIHRvIGNvbnRyb2xfd3JpdGUoKSBpcyBmdWxseSBpbml0aWFsaXplZCBwcmlvciB0byBlYWNoIGNhbGwsIGFuZCByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSB1cG9uIGZhaWx1cmUgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciBhY2Nlc3NlZCwgYW5kIGNvbnRyb2wgZmxvdyBpcyBub3QgYWx0ZXJlZCBpbiBhIHdheSB0aGF0IGxlYWRzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIEtNU0FOIGZ1enppbmcuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow9r4bw[1] Phase: Succeeded StartedAt: 2026-09-14 23:43:02 +0000 UTC FinishedAt: 2026-09-14 23:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 23:43:02 +0000 UTC FinishedAt: 2026-09-14 23:43:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2] Phase: Succeeded StartedAt: 2026-09-14 23:43:02 +0000 UTC FinishedAt: 2026-09-15 01:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-14 23:43:02 +0000 UTC FinishedAt: 2026-09-15 01:21:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 23:43:02 +0000 UTC FinishedAt: 2026-09-14 23:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 23:43:02 +0000 UTC FinishedAt: 2026-09-14 23:43:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9r4bw/series-workflow9r4bw-convert-artifact-2331233360/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 23:43:23 +0000 UTC FinishedAt: 2026-09-14 23:59:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 23:43:23 +0000 UTC FinishedAt: 2026-09-14 23:59: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:*cc4e82ee-8f48-466b-8a56-fa5682288a02,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-workflow9r4bw/series-workflow9r4bw-convert-artifact-2331233360/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": "2cce8571-fcb8-4926-ac35-9b00ae3d6c21", "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-workflow9r4bw/series-workflow9r4bw-build-action-3446061782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 23:43:23 +0000 UTC FinishedAt: 2026-09-14 23:59:43 +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:*cc4e82ee-8f48-466b-8a56-fa5682288a02,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-workflow9r4bw/series-workflow9r4bw-convert-artifact-2331233360/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": "2cce8571-fcb8-4926-ac35-9b00ae3d6c21", "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-workflow9r4bw/series-workflow9r4bw-build-action-3446061782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 23:59:53 +0000 UTC FinishedAt: 2026-09-14 23:59:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 23:59:53 +0000 UTC FinishedAt: 2026-09-14 23:59:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 23:59:53 +0000 UTC FinishedAt: 2026-09-15 00:00:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 23:59:53 +0000 UTC FinishedAt: 2026-09-14 23:59:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9r4bw/series-workflow9r4bw-convert-artifact-3499990455/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 00:00:03 +0000 UTC FinishedAt: 2026-09-15 00:01:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 00:00:03 +0000 UTC FinishedAt: 2026-09-15 00:01:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2cce8571-fcb8-4926-ac35-9b00ae3d6c21,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-workflow9r4bw/series-workflow9r4bw-build-action-3446061782/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-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 00:01:59 +0000 UTC FinishedAt: 2026-09-15 00:01:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 00:01:59 +0000 UTC FinishedAt: 2026-09-15 00:01:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 00:01:59 +0000 UTC FinishedAt: 2026-09-15 00:21:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 00:01:59 +0000 UTC FinishedAt: 2026-09-15 00:21:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cc4e82ee-8f48-466b-8a56-fa5682288a02,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-workflow9r4bw/series-workflow9r4bw-convert-artifact-3499990455/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": "0439a1a2-95cf-4710-993d-9ff567a612d5", "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-workflow9r4bw/series-workflow9r4bw-build-action-974191995/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 00:01:59 +0000 UTC FinishedAt: 2026-09-15 00:20:54 +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:*cc4e82ee-8f48-466b-8a56-fa5682288a02,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-workflow9r4bw/series-workflow9r4bw-convert-artifact-3499990455/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": "0439a1a2-95cf-4710-993d-9ff567a612d5", "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-workflow9r4bw/series-workflow9r4bw-build-action-974191995/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 00:21:04 +0000 UTC FinishedAt: 2026-09-15 00:21:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 00:21:04 +0000 UTC FinishedAt: 2026-09-15 00:21:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 00:21:04 +0000 UTC FinishedAt: 2026-09-15 00:23:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 00:21:04 +0000 UTC FinishedAt: 2026-09-15 00:22:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0439a1a2-95cf-4710-993d-9ff567a612d5,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-workflow9r4bw/series-workflow9r4bw-build-action-974191995/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-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 00:23:04 +0000 UTC FinishedAt: 2026-09-15 01:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 00:23:04 +0000 UTC FinishedAt: 2026-09-15 01:21:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},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:*2cce8571-fcb8-4926-ac35-9b00ae3d6c21,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0439a1a2-95cf-4710-993d-9ff567a612d5,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-workflow9r4bw/series-workflow9r4bw-build-action-3446061782/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-workflow9r4bw/series-workflow9r4bw-build-action-974191995/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 00:23:04 +0000 UTC FinishedAt: 2026-09-15 00:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 00:23:04 +0000 UTC FinishedAt: 2026-09-15 00:23:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},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-workflow9r4bw/series-workflow9r4bw-convert-artifact-1227741168/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 00:23:04 +0000 UTC FinishedAt: 2026-09-15 00:23:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 00:23:04 +0000 UTC FinishedAt: 2026-09-15 00:23:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 00:23:04 +0000 UTC FinishedAt: 2026-09-15 00:23:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 00:23:14 +0000 UTC FinishedAt: 2026-09-15 01:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9r4bw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ch9200_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_NET_CH9200","USB_USBNET"],"series_id":"a3c4cc4c-004f-43ca-8d0f-96f6bb376d96","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 00:23:14 +0000 UTC FinishedAt: 2026-09-15 01:21:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2cce8571-fcb8-4926-ac35-9b00ae3d6c21,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0439a1a2-95cf-4710-993d-9ff567a612d5,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-workflow9r4bw/series-workflow9r4bw-build-action-3446061782/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-workflow9r4bw/series-workflow9r4bw-build-action-974191995/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-workflow9r4bw/series-workflow9r4bw-convert-artifact-1227741168/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,}