Name: series-workflowtxdfx Phase: Succeeded StartedAt: 2026-08-07 16:57:39 +0000 UTC FinishedAt: 2026-08-07 21:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[0] Phase: Succeeded StartedAt: 2026-08-07 16:57:39 +0000 UTC FinishedAt: 2026-08-07 17:41:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 16:57:39 +0000 UTC FinishedAt: 2026-08-07 17:41:32 +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": "fcaeecb8b0cd44f77d03b28de0671258d4db18f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "fcaeecb8b0cd44f77d03b28de0671258d4db18f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hsr_forward_skb", "dev_disable_gro", "netif_disable_gro" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGhhbmRsZSBHU08gKEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQpIHN1cGVyLXBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtIGJlZm9yZSBmb3J3YXJkaW5nLCBhbmQgZGlzYWJsZXMgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgb24gZW5zbGF2ZWQgZGV2aWNlcy4gSXQgYWxzbyBhZGp1c3RzIGxvY2tpbmcgYXJvdW5kIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBza2Igc2VnbWVudGF0aW9uIChgX19za2JfZ3NvX3NlZ21lbnRgKSwgYW5kIHJlYWRpbmcgcGFja2V0IGhlYWRlcnMgdXNpbmcgdGhlIHN0YW5kYXJkIGBza2JfaGVhZGVyX3BvaW50ZXJgIGZ1bmN0aW9uLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgcHJvdG9jb2wgdG8gaGFuZGxlIEdTTyBzdXBlci1wYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBhZGRzIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIHRvIHRoZSBjb3JlIG5ldHdvcmsgZGV2aWNlIEFQSSB0byBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgZGV2aWNlLCBhbmQgdXNlcyB0aGlzIHRvIGRpc2FibGUgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNGRhMTdlOTY2MWQ5YjNkM2E1NDQ1OGI0MDVlN2ZkZjZhZDE2MmUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNzo0MDowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NC4uZWJhMmMyNmE0OWJhOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0zNDM0LDYgJiM0MzszNDM0LDggQEAgdm9pZCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBuZXRpZl9jbG9zZV9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGJvb2wgdW5saW5rKTtcbiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuJiM0Mzt2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuJiM0Mzt2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2xvb3BiYWNrX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpuZXdza2IpO1xuIHUxNiBkZXZfcGlja190eF96ZXJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2Rldik7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNTkzM2M1ZGFiMDllZS4uZjIwZDVhYjBjZjcyOSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTE4NDAsNiAmIzQzOzE4NDAsMjEgQEAgdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0fVxuIH1cbiBcbiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuJiM0MztcbiYjNDM7XHRkZXYtXHUwMDNld2FudGVkX2ZlYXR1cmVzIFx1MDAyNj0gfihORVRJRl9GX0dSTyB8IE5FVElGX0ZfR1JPX0hXKTtcbiYjNDM7XHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoZGV2LCBsb3dlcl9kZXYsIGl0ZXIpIHtcbiYjNDM7XHRcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xuJiM0MztcdFx0bmV0aWZfZGlzYWJsZV9ncm8obG93ZXJfZGV2KTtcbiYjNDM7XHRcdG5ldGRldl91bmxvY2tfb3BzKGxvd2VyX2Rldik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqXHRkZXZfZGlzYWJsZV9ncm9faHcgLSBkaXNhYmxlIEhXIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4gICpcdEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9hcGkuYyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuaW5kZXggNDM3OTQ3ZGQwOGVkNS4uM2NhMjUxNWFkMDQ4NiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldl9hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2X2FwaS5jXG5AQCAtMjY5LDYgJiM0MzsyNjksMjcgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZGV2X2Rpc2FibGVfZ3JvKCkgLSBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4mIzQzOyAqIEBkZXY6IGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBCZXN0LWVmZm9ydCBkaXNhYmxlIG9mIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0XG4mIzQzOyAqIGRldmljZS4gIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZFxuJiM0MzsgKiBwYWNrZXRzIG1heSBiZSBmb3J3YXJkZWQgdG8gYW5vdGhlciBpbnRlcmZhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBkaXNhYmxlIGlzIGJlc3QtZWZmb3J0OiBhIGRldmljZSB3aXRoIGEgZml4ZWQtb24gZmVhdHVyZSAoZm9yXG4mIzQzOyAqIGV4YW1wbGUgR1JPX0hXIG9uIGEgdmlydGlvLW5ldCBkZXZpY2UgbmVnb3RpYXRlZCB3aXRob3V0XG4mIzQzOyAqIFZJUlRJT19ORVRfRl9DVFJMX0dVRVNUX09GRkxPQURTKSBrZWVwcyBpdCBlbmFibGVkLiAgQ2FsbGVycyB0aGF0XG4mIzQzOyAqIG5lZWQgYSBoYXJkIGd1YXJhbnRlZSBtdXN0IGluc3BlY3QgdGhlIHJlc3VsdGluZyBmZWF0dXJlIHN0YXRlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuJiM0MztcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XG4mIzQzO1x0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2dybyk7XG4mIzQzO1xuIC8qKlxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxuICAqIEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjUuLjI0OGNiYjE0MmUyMWUgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbkBAIC0yMzIsOSAmIzQzOzIzMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0c2tiLVx1MDAzZWRldiA9IG1hc3Rlci1cdTAwM2VkZXY7XG4gXHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG5AQCAtMzM1LDYgJiM0MzszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRcdGhzcl9zdGFnLVx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVx1MDAzZXNlcXVlbmNlX25yKTtcbiBcdFx0aHNyLVx1MDAzZXNlcXVlbmNlX25yJiM0MzsmIzQzOztcbiBcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gdHlwZTtcbiBcdC8qIEhTUnYwIGhhcyA2IHVudXNlZCBieXRlcyBhZnRlciB0aGUgTUFDICovXG5AQCAtMzU2LDE0ICYjNDM7MzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCk7XG4gXHR9XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4mIzQzO1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0cmV0dXJuO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbkBAIC0zOTAsNiAmIzQzOzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVx1MDAzZXN1cF9zZXF1ZW5jZV9ucik7XG4gXHRoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yJiM0MzsmIzQzOztcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REO1xuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xuIFxuQEAgLTM5NywxMyAmIzQzOzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiBcdGhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIG1hc3Rlci1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFxuLVx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuJiM0MztcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIH1cbiBcbiAvKiBBbm5vdW5jZSAoc3VwZXJ2aXNpb24gZnJhbWUpIHRpbWVyIGZ1bmN0aW9uXG5AQCAtNjU5LDcgJiM0Mzs2NTIsNyBAQCB2b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4gXG4gXHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfSElHSERNQSB8XG4tXHRcdFx0ICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8XG4mIzQzO1x0XHRcdCAgIE5FVElGX0ZfSFdfQ1NVTSB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbmluZGV4IDA3NzQ5ODFhNjVjMTYuLmY0MjY5NGNmNDMwOTkgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9nc28uaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2hzcl9tYWluLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtoc3JfZnJhbWVyZWcuaFwmIzM0O1xuIFxuQEAgLTYyMSw5ICYjNDM7NjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxuIFx0ICAgIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4gXHRcdC8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovXG4tXHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdFx0ZnJhbWUtXHUwMDNlc2VxdWVuY2VfbnIgPSBoc3ItXHUwMDNlc2VxdWVuY2VfbnI7XG4gXHRcdGhzci1cdTAwM2VzZXF1ZW5jZV9uciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHR9XG4gfVxuIFxuQEAgLTczMSw3ICYjNDM7NzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbiB9XG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cbi12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4mIzQzO3N0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX3NrYl9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIHtcbiBcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyBmcmFtZTtcbiBcbkBAIC03NDYsOCAmIzQzOzc0OCw4IEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdCAqIFNvIGNoZWNrIGFuZCBpbmNyZW1lbnQgc3RhdHMgZm9yIG1hc3RlciBwb3J0IG9ubHkgaGVyZS5cbiBcdCAqL1xuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4tXHRcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X3BhY2tldHMmIzQzOyYjNDM7O1xuLVx0XHRwb3J0LVx1MDAzZWRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XHRcdERFVl9TVEFUU19JTkMocG9ydC1cdTAwM2VkZXYsIHR4X3BhY2tldHMpO1xuJiM0MztcdFx0REVWX1NUQVRTX0FERChwb3J0LVx1MDAzZWRldiwgdHhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuIFx0fVxuIFxuIFx0a2ZyZWVfc2tiKGZyYW1lLnNrYl9oc3IpO1xuQEAgLTc1Nyw2ICYjNDM7NzU5LDEwNSBAQCB2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4gXG4gb3V0X2Ryb3A6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdERFVl9TVEFUU19JTkMocG9ydC1cdTAwM2VkZXYsIHR4X2Ryb3BwZWQpO1xuJiM0MztcdGtmcmVlX3NrYihza2IpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xuJiM0MzsgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuXG4mIzQzOyAqL1xuJiM0MzsvKiBFZmZlY3RpdmUgZnJhbWUgcHJvdG9jb2wgb2YgYSAocG9zc2libHkgVkxBTi10YWdnZWQpIHNrYiwgb3IgMCB3aGVuXG4mIzQzOyAqIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIG9yIHRoZSB0YWdnaW5nIGV4Y2VlZHMgd2hhdCBIU1Igc3VwcG9ydHMuXG4mIzQzOyAqIEhTUiBzdXBwb3J0cyBvbmUgODAyLjFRIEMtdGFnIG9ubHksIG1hdGNoaW5nIGZpbGxfZnJhbWVfaW5mbygpOiBhblxuJiM0MzsgKiBhY2NlbGVyYXRlZCB0YWcgbXVzdCBiZSBhIEMtdGFnIHdpdGggYSBub24tVkxBTiBpbm5lciBwcm90b2NvbDsgYW5cbiYjNDM7ICogaW4tYmFuZCB0YWcgaXMgdW53cmFwcGVkIGV4YWN0bHkgb25jZSBhbmQgYSByZXNpZHVhbCBWTEFOIEV0aGVyVHlwZVxuJiM0MzsgKiBpcyByZWplY3RlZC4gUmVhZC1vbmx5OyBubyBzdGF0ZSBpcyBrZXB0IGJleW9uZCB0aGUgaW1tZWRpYXRlXG4mIzQzOyAqIHByb3RvY29sIHZhbHVlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIF9fYmUxNiBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGV0aGhkciBlaDtcbiYjNDM7XHRzdHJ1Y3Qgdmxhbl9oZHIgdmg7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGV0aGhkciAqZXRoO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB2bGFuX2hkciAqdmhkcjtcbiYjNDM7XHRfX2JlMTYgcHJvdG87XG4mIzQzO1xuJiM0MztcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4mIzQzO1x0XHQvKiBIU1Igc3VwcG9ydHMgb25lIDgwMi4xUSBDLXRhZyBvbmx5LiAqL1xuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2V2bGFuX3Byb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBza2ItXHUwMDNlcHJvdG9jb2w7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRldGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCAwLCBzaXplb2YoZWgpLCBcdTAwMjZlaCk7XG4mIzQzO1x0aWYgKCFldGgpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cHJvdG8gPSBldGgtXHUwMDNlaF9wcm90bztcbiYjNDM7XHRpZiAoIWV0aF90eXBlX3ZsYW4ocHJvdG8pKVxuJiM0MztcdFx0cmV0dXJuIHByb3RvO1xuJiM0MztcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dmhkciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIEVUSF9ITEVOLCBzaXplb2YodmgpLCBcdTAwMjZ2aCk7XG4mIzQzO1x0aWYgKCF2aGRyKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHByb3RvID0gdmhkci1cdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvO1xuJiM0MztcdGlmIChldGhfdHlwZV92bGFuKHByb3RvKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJvdG87XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpzZWdzLCAqbmV4dDtcbiYjNDM7XHRfX2JlMTYgcHJvdG87XG4mIzQzO1xuJiM0MztcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcbiYjNDM7XHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENvbmZvcm1pbmcgcGxhaW4tcHJvdG9jb2wgR1NPIHN1cGVyLXBhY2tldHMgY2FycnkgdHJhaWxlci1mcmVlXG4mIzQzO1x0ICogc2VuZGVyIHBheWxvYWQgYW5kIGFyZSBzZWdtZW50ZWQgaGVyZTogZWFjaCBzZWdtZW50IGlzIGRlbGl2ZXJlZFxuJiM0MztcdCAqIG9yIGZvcndhcmRlZCBhcyBpdHMgb3duIHdpcmUgZnJhbWUsIG9uIGFueSBpbmdyZXNzIHJvbGUuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZ2F0ZSBpcyBjb250ZW50LWJhc2VkLCBub3QgcG9ydC1iYXNlZC4gQW4gYWdncmVnYXRlIHdob3NlXG4mIzQzO1x0ICogZWZmZWN0aXZlIHByb3RvY29sIGlzIEVUSF9QX0hTUiBvciBFVEhfUF9QUlAgY2Fubm90IGJlIHNhZmVseVxuJiM0MztcdCAqIHNlZ21lbnRlZCBhbmQgaXMgZHJvcHBlZCwgYXMgaXMgYW55IHNrYiB3aG9zZSBoZWFkZXIgY2Fubm90IGJlXG4mIzQzO1x0ICogcmVhZCBvciB3aG9zZSB0YWdnaW5nIGV4Y2VlZHMgdGhlIHNpbmdsZSA4MDIuMVEgQy10YWcgSFNSXG4mIzQzO1x0ICogc3VwcG9ydHMuIFdpdGggTkVUSUZfRl9IV19IU1JfVEFHX1JNIHRoZSBsb3dlciBoYXMgYWxyZWFkeVxuJiM0MztcdCAqIHN0cmlwcGVkIHRoZSB0YWcsIHNvIHN1Y2ggYWdncmVnYXRlcyBhcnJpdmUgcGxhaW4gYW5kIGFyZVxuJiM0MztcdCAqIHNlZ21lbnRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwcm90byA9IGhzcl9nc29fZWZmZWN0aXZlX3Byb3RvKHNrYik7XG4mIzQzO1x0aWYgKCFwcm90bylcbiYjNDM7XHRcdGdvdG8gZHJvcF9nc287IC8qIGNsYXNzaWZpY2F0aW9uIGZhaWx1cmUsIGZhaWwtc2FmZSAqL1xuJiM0MztcdGlmIChwcm90byA9PSBodG9ucyhFVEhfUF9IU1IpIHx8IHByb3RvID09IGh0b25zKEVUSF9QX1BSUCkpXG4mIzQzO1x0XHRnb3RvIGRyb3BfZ3NvO1xuJiM0MztcbiYjNDM7XHQvKiBmZWF0dXJlcyA9IDA6IHJlcXVlc3QgZnVsbCBzb2Z0d2FyZSBzZWdtZW50YXRpb24uIHR4X3BhdGggaXMgdHJ1ZVxuJiM0MztcdCAqIG9ubHkgZm9yIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYWZmaWMgb24gdGhlIG1hc3RlcjsgaW5ncmVzcyBmcm9tXG4mIzQzO1x0ICogdGhlIGludGVybGluayBmb2xsb3dzIFJYIGNoZWNrc3VtIHNlbWFudGljcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZWdzID0gX19za2JfZ3NvX3NlZ21lbnQoc2tiLCAwLCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUik7XG4mIzQzO1x0aWYgKElTX0VSUihzZWdzKSB8fCB1bmxpa2VseSghc2VncykpXG4mIzQzO1x0XHRnb3RvIGRyb3BfZ3NvO1xuJiM0MztcbiYjNDM7XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdHdoaWxlIChzZWdzKSB7XG4mIzQzO1x0XHRuZXh0ID0gc2Vncy1cdTAwM2VuZXh0O1xuJiM0MztcdFx0c2Vncy1cdTAwM2VuZXh0ID0gTlVMTDtcbiYjNDM7XHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7XG4mIzQzO1x0XHRzZWdzID0gbmV4dDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuO1xuJiM0MztcbiYjNDM7ZHJvcF9nc286XG4mIzQzO1x0REVWX1NUQVRTX0lOQyhwb3J0LVx1MDAzZWRldiwgdHhfZHJvcHBlZCk7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbmluZGV4IDAxYzczYjRiNTBkZGQuLmFhMjE1NGIxOWMwYjkgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5AQCAtNzMsMTYgJiM0Mzs3Myw3IEBAIHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0fVxuIFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbiBcbi1cdC8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhXG4tXHQgKiBzZXF1ZW5jZSBudW1iZXIgYW5kIHJlcXVpcmUgc3luY2hyb25pc2F0aW9uIHZzIG90aGVyIHNlbmRlci5cbi1cdCAqL1xuLVx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHR9IGVsc2Uge1xuLVx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdH1cbiYjNDM7XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbiBcbiBmaW5pc2hfY29uc3VtZTpcbiBcdHJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEO1xuQEAgLTE3MSw2ICYjNDM7MTYyLDExIEBAIHN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdGdvdG8gZmFpbF9yeF9oYW5kbGVyO1xuIFx0ZGV2X2Rpc2FibGVfbHJvKGRldik7XG4gXG4mIzQzO1x0LyogR1JPIGRpc2FibGluZyBpcyBiZXN0LWVmZm9ydDogZGV2aWNlcyB3aXRoIGZpeGVkLW9uXG4mIzQzO1x0ICogR1JPL0dST19IVyBjYW5ub3QgYmUgZm9yY2VkIG9mZi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkZXZfZGlzYWJsZV9ncm8oZGV2KTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiBcbiBmYWlsX3J4X2hhbmRsZXI6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbmluZGV4IDMxZmI5MzI2Y2Y1MzMuLjBkMTA1NDc2ZTdjNTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXG4gXG4gVEVTVF9QUk9HUyA6PSBcXFxuJiM0MztcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmViY2JkOWZjNDFlYzRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxuQEAgLTAsMCAmIzQzOzEsNjMxIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcbiYjNDM7I1xuJiM0MzsjICAxLiBFbnNsYXZpbmcgYSBkZXZpY2UgdG8gYW4gSFNSIG1hc3RlciBkaXNhYmxlcyBHUk8gb24gaXRcbiYjNDM7IyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cbiYjNDM7IyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXG4mIzQzOyMgIDMuIEEgVENQIHN0cmVhbSBmcm9tIGEgVFNPLWVuYWJsZWQgU0FOICh3aGljaCB0aGVyZWZvcmUgZW1pdHMgR1NPXG4mIzQzOyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6XG4mIzQzOyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xuJiM0MzsjICAgICB0aGUgU0FOIGFuZCBwZXItZnJhbWUtc2l6ZWQgdHJhZmZpYyBsZWF2aW5nIHRoZSBEVVQmIzM5O3MgTEFOIHBvcnRzLlxuJiM0MzsjXG4mIzQzOyMgVG9wb2xvZ3kgKDEwMC42NC4wLjAvMjQpOlxuJiM0MzsjXG4mIzQzOyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXG4mIzQzOyMgICYjNDM7LS0tLS0tLS0tLS0mIzQzOyAgaW50ZXJsaW5rICAmIzQzOy0tLS0tLS0tLS0tLS0tLSYjNDM7ICBMQU4gQS9CICAmIzQzOy0tLS0tLS0tLS0tJiM0MztcbiYjNDM7IyAgfCBzMCBbMC4xXSAgfC0tLS0tLS0tLS0tLS18IGRfaWwgICBoc3IwICAgfC0tLS0tLS0tLS0tfCBoc3IxIFswLjNdfFxuJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHxcbiYjNDM7IyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzQzOy0tLS0tLS0tLS0tLS0tLSYjNDM7ICAgICAgICAgICAmIzQzOy0tLS0tLS0tLS0tJiM0MztcbiYjNDM7I1xuJiM0MzsjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCYjMzk7cyBmb3J3YXJkIHBhdGhcbiYjNDM7IyAoaW50ZXJsaW5rIFJYIC1cdTAwM2UgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kXG4mIzQzOyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXG4mIzQzO1xuJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4mIzQzO1xuJiM0MztzYW5faXA9XCYjMzQ7MTAwLjY0LjAuMVwmIzM0O1xuJiM0MztwZWVyX2lwPVwmIzM0OzEwMC42NC4wLjNcJiMzNDtcbiYjNDM7XG4mIzQzOyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKTpcbiYjNDM7IyBTQU5fQVZHX01JTiBwcm92ZXMgR1NPIHN1cGVyLXBhY2tldHMgbGVmdCB0aGUgU0FOOyBMQU5fQVZHX01BWCBpcyBhXG4mIzQzOyMgZ3VhcmQgd2l0aCBtYXJnaW4sIG5vdCB0aGUgcHJvdG9jb2wgbWF4aW11bSAoc2VlIGRvX3Rzb19zdHJlYW1fdGVzdCkuXG4mIzQzO1NBTl9BVkdfTUlOPTIwNDhcbiYjNDM7TEFOX0FWR19NQVg9MTUxNFxuJiM0MztcbiYjNDM7aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztzZXJ2ZXJfd3JhcHBlcj1cJiMzNDtcJiMzNDtcbiYjNDM7YWN0aXZlX3Nydl9ucz1cJiMzNDtcJiMzNDtcbiYjNDM7d29ya2Rpcj1cJiMzNDtcJiMzNDtcbiYjNDM7cGlkZmlsZT1cJiMzNDtcJiMzNDtcbiYjNDM7bnNfZHV0PVwmIzM0O1wmIzM0O1xuJiM0Mztuc19zYW49XCYjMzQ7XCYjMzQ7XG4mIzQzO25zX3BlZXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO25zX2xzPVwmIzM0O1wmIzM0O1xuJiM0MztyY2ZpbGU9XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsjIERlbGV0ZSB0aGUgcGVyLXNlcnZlciBwcml2YXRlIHdvcmsgZGlyZWN0b3J5IGFuZCByZXNldCBpdHNcbiYjNDM7IyB2YXJpYWJsZXMuIENhbGxlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgcmVhcCBhbmQgZnJvbSB0aGUgRVhJVFxuJiM0MzsjIHRyYXAsIHdoaWNoIG93bnMgYWxsIGZhaWx1cmUgcGF0aHMuXG4mIzQzO2NsZWFudXBfd29ya2RpcigpXG4mIzQzO3tcbiYjNDM7XHQjIHJlbW92ZSBvbmx5IHRoZSBrbm93biBub24tZW1wdHkgcHJpdmF0ZSBkaXJlY3RvcnlcbiYjNDM7XHRpZiBbIC1uIFwmIzM0OyR7d29ya2Rpcn1cJiMzNDsgXSBcdTAwMjZcdTAwMjYgWyAtZCBcJiMzNDske3dvcmtkaXJ9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdHJtIC1yZiBcJiMzNDske3dvcmtkaXJ9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XHR3b3JrZGlyPVwmIzM0O1wmIzM0O1xuJiM0MztcdHBpZGZpbGU9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0cmNmaWxlPVwmIzM0O1wmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjbGVhbnVwKClcbiYjNDM7e1xuJiM0MztcdCMgU2VydmVyIGNsZWFudXAgdGFyZ2V0cyBvbmx5IHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGN1cnJlbnRseVxuJiM0MztcdCMgYWN0aXZlIHNlcnZlciAocmVjb3JkZWQgYnkgc3RhcnRfaXBlcmZfc2VydmVyKTsgYWZ0ZXIgYVxuJiM0MztcdCMgc3VjY2Vzc2Z1bCByZWFwIG5vdGhpbmcgaXMgYWN0aXZlLlxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHthY3RpdmVfc3J2X25zfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHQjIGV4YWN0LVBJRCBraWxsIG9ubHkgYWZ0ZXIgUkUtdmFsaWRhdGluZyBpZGVudGl0eSAoZ3VhcmRzXG4mIzQzO1x0XHQjIGFnYWluc3QgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApXG4mIzQzO1x0XHRpZiBbIC1uIFwmIzM0OyR7aXBlcmZfcGlkfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiB2YWxpZF9zZXJ2ZXJfcGlkIFwmIzM0OyR7YWN0aXZlX3Nydl9uc31cJiMzNDsgXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRcdGtpbGwgXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRcdGZpXG4mIzQzO1x0XHRpcGVyZl9waWQ9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0XHRpZiBbIC1uIFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1c1xuJiM0MztcdFx0XHQjIGJvdW5kIHNvIGEgbGl2ZS1idXQtdW5wdWJsaXNoZWQgc2VydmVyIGNhbiBuZXZlclxuJiM0MztcdFx0XHQjIGhhbmcgY2xlYW51cFxuJiM0MztcdFx0XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdFx0XHRraWxsIC0wIFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcbiYjNDM7XHRcdFx0XHRzbGVlcCAwLjFcbiYjNDM7XHRcdFx0ZG9uZVxuJiM0MztcdFx0XHRraWxsIFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRcdFx0d2FpdCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0XHRcdHNlcnZlcl93cmFwcGVyPVwmIzM0O1wmIzM0O1xuJiM0MztcdFx0ZmlcbiYjNDM7XHRcdCMgbGFzdCByZXNvcnQsIG5hbWVzcGFjZS1zY29wZWQgb25seTogVEVSTSB0aGUgaXBlcmYzXG4mIzQzO1x0XHQjIHByb2Nlc3NlcyB0aGF0IGFjdHVhbGx5IGxpdmUgaW4gdGhlIGFjdGl2ZSBzZXJ2ZXIgbmV0bnMsXG4mIzQzO1x0XHQjIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlbiBTSUdLSUxMIGFueSBzdXJ2aXZvciBiZWZvcmVcbiYjNDM7XHRcdCMgdG91Y2hpbmcgdGhlIG5hbWVzcGFjZSBuYW1lLiBBIGJsaW5kIHBraWxsIHdvdWxkIHNjYW5cbiYjNDM7XHRcdCMgdGhlIGhvc3QgUElEIHNwYWNlIGFuZCBoaXQgdW5yZWxhdGVkIHRlc3RzLlxuJiM0MztcdFx0bG9jYWwgX3AgX3N0aWxsXG4mIzQzO1x0XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwmIzM0OyR7YWN0aXZlX3Nydl9uc31cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCk7IGRvXG4mIzQzO1x0XHRcdGlmIGlzX2lwZXJmM19waWQgXCYjMzQ7JF9wXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRcdFx0a2lsbCBcJiMzNDskX3BcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFx0XHRmaVxuJiM0MztcdFx0ZG9uZVxuJiM0MztcdFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4mIzQzO1x0XHRcdF9zdGlsbD0wXG4mIzQzO1x0XHRcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCYjMzQ7JHthY3RpdmVfc3J2X25zfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbiYjNDM7XHRcdFx0XHRpZiBpc19pcGVyZjNfcGlkIFwmIzM0OyRfcFwmIzM0OzsgdGhlblxuJiM0MztcdFx0XHRcdFx0X3N0aWxsPTFcbiYjNDM7XHRcdFx0XHRcdGJyZWFrXG4mIzQzO1x0XHRcdFx0ZmlcbiYjNDM7XHRcdFx0ZG9uZVxuJiM0MztcdFx0XHRbIFwmIzM0OyRfc3RpbGxcJiMzNDsgLWVxIDAgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbiYjNDM7XHRcdFx0c2xlZXAgMC4xXG4mIzQzO1x0XHRkb25lXG4mIzQzO1x0XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwmIzM0OyR7YWN0aXZlX3Nydl9uc31cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCk7IGRvXG4mIzQzO1x0XHRcdGlmIGlzX2lwZXJmM19waWQgXCYjMzQ7JF9wXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRcdFx0a2lsbCAtOSBcJiMzNDskX3BcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFx0XHRmaVxuJiM0MztcdFx0ZG9uZVxuJiM0MztcdGZpXG4mIzQzO1x0YWN0aXZlX3Nydl9ucz1cJiMzNDtcJiMzNDtcbiYjNDM7XHRjbGVhbnVwX3dvcmtkaXJcbiYjNDM7XHRjbGVhbnVwX2FsbF9uc1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7Y2hlY2tfdG9vbCgpXG4mIzQzO3tcbiYjNDM7XHRpZiAhIGNvbW1hbmQgLXYgXCYjMzQ7JDFcJiMzNDsgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVwmIzM0O1xuJiM0MztcdFx0ZXhpdCAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7bnN4KClcbiYjNDM7e1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JDFcJiMzNDsgYmFzaCAtYyBcJiMzNDskMlwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztpc19pcGVyZjNfcGlkKClcbiYjNDM7e1xuJiM0MztcdFsgXCYjMzQ7JChjYXQgL3Byb2MvXCYjMzQ7JDFcJiMzNDsvY29tbSAyXHUwMDNlL2Rldi9udWxsKVwmIzM0OyA9IFwmIzM0O2lwZXJmM1wmIzM0OyBdXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgQm91bmRlZCByZWFwIG9mIHRoZSBvbmUtc2hvdCBzZXJ2ZXI6IHdhaXQgYXQgbW9zdCA1cyBmb3IgaXQgdG9cbiYjNDM7IyBleGl0LCB0aGVuIHJlYXAgdGhlIHdyYXBwZXIgYW5kIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIGl0cyByZWFsXG4mIzQzOyMgc3RhdHVzLiBBIHN0dWNrIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyB0aGUgc2NyaXB0LlxuJiM0MztyZWFwX2lwZXJmX3NlcnZlcigpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBzZXJ2ZXJfcmNcbiYjNDM7XG4mIzQzO1x0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4mIzQzO1x0XHRraWxsIC0wIFwmIzM0OyR7aXBlcmZfcGlkfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXG4mIzQzO1x0XHRzbGVlcCAwLjFcbiYjNDM7XHRkb25lXG4mIzQzO1x0aWYga2lsbCAtMCBcJiMzNDske2lwZXJmX3BpZH1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgZXhpdCB3aXRoaW4gNXNcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0d2FpdCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0O1xuJiM0MztcdHNlcnZlcl93cmFwcGVyPVwmIzM0O1wmIzM0O1xuJiM0MztcdGlmIFsgISAtcyBcJiMzNDske3JjZmlsZX1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIHN0YXR1cyBmaWxlIG1pc3NpbmcgKCR7cmNmaWxlfSlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0c2VydmVyX3JjPSQoY2F0IFwmIzM0OyR7cmNmaWxlfVwmIzM0OylcbiYjNDM7XHRpZiAhIFtbIFwmIzM0OyRzZXJ2ZXJfcmNcJiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IFsgXCYjMzQ7JHNlcnZlcl9yY1wmIzM0OyAtbmUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JiMzOTske3NlcnZlcl9yY30mIzM5O1wmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XHRpcGVyZl9waWQ9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0Y2xlYW51cF93b3JrZGlyXG4mIzQzO1x0YWN0aXZlX3Nydl9ucz1cJiMzNDtcJiMzNDtcbiYjNDM7XHRyZXR1cm4gMFxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIERlY2ltYWwtY291bnRlciB2YWxpZGF0aW9uIGZvciB0aGUgc25hcHNob3QgYmxvY2tzOiBldmVyeSB2YWx1ZSBtdXN0XG4mIzQzOyMgYmUgYSBwbGFpbiBkZWNpbWFsIG51bWJlci4gQSBwYXJzZSBmYWlsdXJlIGluIHJlYWRfdHhfY291bnRlcnMgeWllbGRzXG4mIzQzOyMgZW1wdHkvZ2FyYmxlZCBmaWVsZHMsIHdoaWNoIHRoaXMgY2hlY2sgdHVybnMgaW50byBhbiBpbW1lZGlhdGUgRkFJTC5cbiYjNDM7dmFsaWRfZGVjaW1hbHMoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgdlxuJiM0MztcbiYjNDM7XHRmb3IgdiBpbiBcJiMzNDskQFwmIzM0OzsgZG9cbiYjNDM7XHRcdFtbIFwmIzM0OyR2XCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCByZXR1cm4gMVxuJiM0MztcdGRvbmVcbiYjNDM7XHRyZXR1cm4gMFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzZXR1cF90b3BvKClcbiYjNDM7e1xuJiM0MztcdHNldHVwX25zIG5zX2R1dCBuc19zYW4gbnNfcGVlciB8fCBleGl0ICQ/XG4mIzQzO1xuJiM0MztcdGlwIGxpbmsgYWRkIGRfYSBuZXRucyBcJiMzNDskbnNfZHV0XCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zIFwmIzM0OyRuc19wZWVyXCYjMzQ7XG4mIzQzO1x0aXAgbGluayBhZGQgZF9iIG5ldG5zIFwmIzM0OyRuc19kdXRcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2IgbmV0bnMgXCYjMzQ7JG5zX3BlZXJcJiMzNDtcbiYjNDM7XHRpcCBsaW5rIGFkZCBkX2lsIG5ldG5zIFwmIzM0OyRuc19kdXRcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzMCBuZXRucyBcJiMzNDskbnNfc2FuXCYjMzQ7XG4mIzQzO1xuJiM0MztcdCMgSFNSIHRhZ3MgYWRkIDYgYnl0ZXMgcGVyIGZyYW1lOyBnaXZlIHRoZSBMQU4gbGVncyBoZWFkcm9vbS5cbiYjNDM7XHRmb3IgaWZhY2UgaW4gZF9hIGRfYjsgZG9cbiYjNDM7XHRcdG5zeCBcJiMzNDskbnNfZHV0XCYjMzQ7IFwmIzM0O2lwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgXFxcbiYjNDM7XHRcdFx0aXAgbGluayBzZXQgJGlmYWNlIHVwXCYjMzQ7XG4mIzQzO1x0ZG9uZVxuJiM0MztcdGZvciBpZmFjZSBpbiBwX2EgcF9iOyBkb1xuJiM0MztcdFx0bnN4IFwmIzM0OyRuc19wZWVyXCYjMzQ7IFwmIzM0O2lwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgXFxcbiYjNDM7XHRcdFx0aXAgbGluayBzZXQgJGlmYWNlIHVwXCYjMzQ7XG4mIzQzO1x0ZG9uZVxuJiM0MztcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX2R1dFwmIzM0OyBcJiMzNDtpcCBsaW5rIHNldCBkX2lsIHVwXCYjMzQ7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgczAgdXA7IGlwIGFkZHIgYWRkICRzYW5faXAvMjQgZGV2IHMwXCYjMzQ7XG4mIzQzO1xuJiM0MztcdG5zeCBcJiMzNDskbnNfZHV0XCYjMzQ7IFwmIzM0O2lwIGxpbmsgYWRkIGhzcjAgdHlwZSBoc3IgXFxcbiYjNDM7XHRcdHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcXFxuJiM0MztcdFx0aXAgbGluayBzZXQgaHNyMCB1cFwmIzM0O1xuJiM0MztcdG5zeCBcJiMzNDskbnNfcGVlclwmIzM0OyBcJiMzNDtpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFxcXG4mIzQzO1x0XHRzbGF2ZTEgcF9hIHNsYXZlMiBwX2IgcHJvdG8gMDsgXFxcbiYjNDM7XHRcdGlwIGxpbmsgc2V0IGhzcjEgdXA7IGlwIGFkZHIgYWRkICRwZWVyX2lwLzI0IGRldiBoc3IxXCYjMzQ7XG4mIzQzO1xuJiM0MztcdCMgTGV0IHRoZSBub2RlcyBzZWUgZWFjaCBvdGhlciYjMzk7cyBzdXBlcnZpc2lvbiBmcmFtZXMuXG4mIzQzO1x0c2xlZXAgMlxuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGVja19mZWF0dXJlKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPVwmIzM0OyQxXCYjMzQ7XG4mIzQzO1x0bG9jYWwgaWZhY2U9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBmZWF0dXJlPVwmIzM0OyQzXCYjMzQ7XG4mIzQzO1x0bG9jYWwgd2FudD1cJiMzNDskNFwmIzM0O1xuJiM0MztcbiYjNDM7XHRpZiBuc3ggXCYjMzQ7JG5zXCYjMzQ7IFwmIzM0O2V0aHRvb2wgLWsgJGlmYWNlXCYjMzQ7IHwgZ3JlcCAtcSBcJiMzNDteJGZlYXR1cmU6ICR3YW50XCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0lORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgJHdhbnQgWyBPSyBdXCYjMzQ7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG5vdCAkd2FudFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRmaVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIE9mZi1vci1hYnNlbnQgdmFyaWFudDogZmFpbHMgb25seSB3aGVuIHRoZSBmZWF0dXJlIGlzIHByZXNlbnQgQU5EIG9uLFxuJiM0MzsjIHNvIGRldmljZXMgdGhhdCBzaW1wbHkgZG8gbm90IGxpc3QgdGhlIGZlYXR1cmUgZG8gbm90IGZhaWwgaXQuXG4mIzQzO2NoZWNrX2ZlYXR1cmVfbm90X29uKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPVwmIzM0OyQxXCYjMzQ7XG4mIzQzO1x0bG9jYWwgaWZhY2U9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBmZWF0dXJlPVwmIzM0OyQzXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIG5zeCBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7ZXRodG9vbCAtayAkaWZhY2VcJiMzNDsgfCBncmVwIC1xIFwmIzM0O14kZmVhdHVyZTogb25cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBvblwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0lORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgbm90IG9uIFsgT0sgXVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO2RvX2dyb19mZWF0dXJlX2NoZWNrcygpXG4mIzQzO3tcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgR1JPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2EgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGRfYiBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9pbCBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbiYjNDM7XHRzdG9wX2lmX2Vycm9yIFwmIzM0O0dSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEhXLUdSTy5cJiMzNDtcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9hIHJ4LWdyby1odyBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iIHJ4LWdyby1odyBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9pbCByeC1ncm8taHcgb2ZmXG4mIzQzO1x0c3RvcF9pZl9lcnJvciBcJiMzNDtIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCB0aGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTy5cJiMzNDtcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgaHNyMCBnZW5lcmljLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBoc3IwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlX25vdF9vbiBcJiMzNDskbnNfZHV0XCYjMzQ7IGhzcjAgdHgtdWRwLXNlZ21lbnRhdGlvblxuJiM0MztcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwmIzM0OyRuc19kdXRcJiMzNDsgaHNyMCB0eC1nc28tbGlzdFxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7SFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy1mYW1pbHkgZmVhdHVyZXMuXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2FsbG9jX3dvcmtkaXIoKVxuJiM0Mzt7XG4mIzQzO1x0IyBBbGxvY2F0ZWQgb25seSBoZXJlLCBsb25nIGFmdGVyIHRoZSBpbml0aWFsIHRvcG9sb2d5IGNsZWFudXAsIHNvXG4mIzQzO1x0IyBjbGVhbnVwKCkgYXQgc2V0dXBfdG9wbygpIHRpbWUgY2FuIG5ldmVyIHJlbW92ZSBpdC4gbWt0ZW1wIGZhaWx1cmVcbiYjNDM7XHQjIGlzIGEgaGFyZCB0ZXN0IGZhaWx1cmUuXG4mIzQzO1x0d29ya2Rpcj0kKG1rdGVtcCAtZCAvdG1wL2hzcl9ncm9fdGVzdC5YWFhYWFgpIHx8IHtcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogbWt0ZW1wIC1kIGZhaWxlZFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZXhpdCAxXG4mIzQzO1x0fVxuJiM0MztcdGNobW9kIDcwMCBcJiMzNDske3dvcmtkaXJ9XCYjMzQ7XG4mIzQzO1x0cGlkZmlsZT1cJiMzNDske3dvcmtkaXJ9L2lwZXJmLnBpZFwmIzM0O1xuJiM0MztcdHJjZmlsZT1cJiMzNDske3dvcmtkaXJ9L2lwZXJmLnJjXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgTnVtZXJpYywgYWxpdmUsIGNvbW0gPT0gaXBlcmYzLCBhbmQgcmVhbGx5IG93bmVkIGJ5IHRoZSBnaXZlbiBuZXRucy5cbiYjNDM7dmFsaWRfc2VydmVyX3BpZCgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBwbnM9XCYjMzQ7JDFcJiMzNDsgcD1cJiMzNDskMlwmIzM0O1xuJiM0MztcbiYjNDM7XHRbWyBcJiMzNDskcFwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV0gfHwgcmV0dXJuIDFcbiYjNDM7XHRraWxsIC0wIFwmIzM0OyRwXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIDFcbiYjNDM7XHRbIFwmIzM0OyQoY2F0IC9wcm9jL1wmIzM0OyRwXCYjMzQ7L2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcJiMzNDsgPSBcJiMzNDtpcGVyZjNcJiMzNDsgXSB8fCByZXR1cm4gMVxuJiM0MztcdGlwIG5ldG5zIHBpZHMgXCYjMzQ7JHBuc1wmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHwgZ3JlcCAtcXggXCYjMzQ7JHBcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhcnRfaXBlcmZfc2VydmVyKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIHNydl9ucz1cJiMzNDskMVwmIzM0O1xuJiM0MztcdGxvY2FsIHNydl9pcD1cJiMzNDskezI6LX1cJiMzNDtcbiYjNDM7XHRsb2NhbCBjYW5kaWRhdGVfcGlkXG4mIzQzO1xuJiM0MztcdCMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHNcbiYjNDM7XHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxuJiM0MztcdGFsbG9jX3dvcmtkaXJcbiYjNDM7XHQjIHJlY29yZCB0aGUgc2VydmVyIG5hbWVzcGFjZSBmb3IgY2xlYW51cCgpIGJlZm9yZVxuJiM0MztcdCMgYW55dGhpbmcgY2FuIGZhaWwgd2l0aCB0aGUgc2VydmVyIHJ1bm5pbmdcbiYjNDM7XHRhY3RpdmVfc3J2X25zPVwmIzM0OyRzcnZfbnNcJiMzNDtcbiYjNDM7XHQoIG5zeCBcJiMzNDskc3J2X25zXCYjMzQ7IFwmIzM0O2lwZXJmMyAtcyAtMSAke3Nydl9pcDomIzQzOy1CICRzcnZfaXB9IFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2IFxcXG4mIzQzO1x0XHRlY2hvIFxcJCEgXHUwMDNlICR7cGlkZmlsZX07IFxcXG4mIzQzO1x0XHR3YWl0IFxcJCE7IFxcXG4mIzQzO1x0XHRlY2hvIFxcJD8gXHUwMDNlICR7cmNmaWxlfVwmIzM0OyApIFx1MDAyNlxuJiM0MztcdHNlcnZlcl93cmFwcGVyPSQhXG4mIzQzO1x0IyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvXG4mIzQzO1x0IyBhcHBlYXIgaW5zdGVhZCBvZiByYWNpbmcgdGhlIHJlYWRcbiYjNDM7XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdFsgLXMgXCYjMzQ7JHtwaWRmaWxlfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiBicmVha1xuJiM0MztcdFx0c2xlZXAgMC4xXG4mIzQzO1x0ZG9uZVxuJiM0MztcdGlmIFsgISAtcyBcJiMzNDske3BpZGZpbGV9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWRcJiMzNDsgXFxcbiYjNDM7XHRcdFx0XCYjMzQ7KG5vIHBpZGZpbGUpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcdGNhbmRpZGF0ZV9waWQ9JChcdTAwM2NcJiMzNDske3BpZGZpbGV9XCYjMzQ7KVxuJiM0MztcdGlmICEgdmFsaWRfc2VydmVyX3BpZCBcJiMzNDskc3J2X25zXCYjMzQ7IFwmIzM0OyR7Y2FuZGlkYXRlX3BpZH1cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJiMzOTske2NhbmRpZGF0ZV9waWR9JiMzOTtcJiMzNDsgXFxcbiYjNDM7XHRcdFx0XCYjMzQ7ZmFpbGVkIHZhbGlkYXRpb25cJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0IyBwdWJsaXNoIG9ubHkgYWZ0ZXIgZnVsbCB2YWxpZGF0aW9uXG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0OyR7Y2FuZGlkYXRlX3BpZH1cJiMzNDtcbiYjNDM7XHRzbGVlcCAxXG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBQcmludCBcJiMzNDtcdTAwM2NieXRlc1x1MDAzZSBcdTAwM2NwYWNrZXRzXHUwMDNlXCYjMzQ7IGZvciBleGFjdGx5IG9uZSBUWCByZWNvcmQgb2YgbnMvZGV2OyBhbnl0aGluZ1xuJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC5cbiYjNDM7cmVhZF90eF9jb3VudGVycygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBucz1cJiMzNDskMVwmIzM0OyBkZXY9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBvdXQgY250XG4mIzQzO1xuJiM0MztcdG91dD0kKG5zeCBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7aXAgLXMgbGluayBzaG93ICRkZXZcJiMzNDsgfCBcXFxuJiM0MztcdFx0YXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OylcbiYjNDM7XHRjbnQ9JChlY2hvIFwmIzM0OyRvdXRcJiMzNDsgfCBncmVwIC1jICYjMzk7XlswLTldKiBbMC05XSokJiMzOTspXG4mIzQzO1x0aWYgWyBcJiMzNDskY250XCYjMzQ7IC1uZSAxIF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2XCYjMzQ7IFxcXG4mIzQzO1x0XHRcdFwmIzM0OyhyZWNvcmRzPSRjbnQpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7XG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBQcmludCBcJiMzNDtcdTAwM2NieXRlc1x1MDAzZSBcdTAwM2NwYWNrZXRzXHUwMDNlXCYjMzQ7IGZvciBleGFjdGx5IG9uZSBSWCByZWNvcmQgb2YgbnMvZGV2OyB0aGVcbiYjNDM7IyBzYW1lIHNpbmdsZS1yZWNvcmQgZGlzY2lwbGluZSBhcyByZWFkX3R4X2NvdW50ZXJzLlxuJiM0MztyZWFkX3J4X2NvdW50ZXJzKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPVwmIzM0OyQxXCYjMzQ7IGRldj1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIG91dCBjbnRcbiYjNDM7XG4mIzQzO1x0b3V0PSQobnN4IFwmIzM0OyRuc1wmIzM0OyBcJiMzNDtpcCAtcyBsaW5rIHNob3cgJGRldlwmIzM0OyB8IFxcXG4mIzQzO1x0XHRhd2sgJiMzOTsvXiAmIzQzO1JYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfSYjMzk7KVxuJiM0MztcdGNudD0kKGVjaG8gXCYjMzQ7JG91dFwmIzM0OyB8IGdyZXAgLWMgJiMzOTteWzAtOV0qIFswLTldKiQmIzM5OylcbiYjNDM7XHRpZiBbIFwmIzM0OyRjbnRcJiMzNDsgLW5lIDEgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBjYW5ub3QgcGFyc2UgUlggY291bnRlcnMgb2YgJG5zLyRkZXZcJiMzNDsgXFxcbiYjNDM7XHRcdFx0XCYjMzQ7KHJlY29yZHM9JGNudClcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XHRlY2hvIFwmIzM0OyRvdXRcJiMzNDtcbiYjNDM7XHRyZXR1cm4gMFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztldmFsX2NvdW50ZXJfZGVsdGEoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbmFtZT1cJiMzNDskMVwmIzM0OyBiMD1cJiMzNDskMlwmIzM0OyBwMD1cJiMzNDskM1wmIzM0OyBiMT1cJiMzNDskNFwmIzM0OyBwMT1cJiMzNDskNVwmIzM0OyBvcD1cJiMzNDskNlwmIzM0OyBsaW1pdD1cJiMzNDskN1wmIzM0O1xuJiM0MztcdGxvY2FsIGJkIHBkXG4mIzQzO1xuJiM0MztcdGlmICEgW1sgXCYjMzQ7JGIwXCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBcdTAwMjZcdTAwMjYgXCYjMzQ7JGIxXCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBcdTAwMjZcdTAwMjYgXFxcbiYjNDM7XHRcdFwmIzM0OyRwMFwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXHUwMDI2XHUwMDI2IFwmIzM0OyRwMVwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWVcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0YmQ9JCgoYjEgLSBiMCkpXG4mIzQzO1x0cGQ9JCgocDEgLSBwMCkpXG4mIzQzO1x0aWYgWyBcJiMzNDskYmRcJiMzNDsgLWx0IDAgXSB8fCBbIFwmIzM0OyRwZFwmIzM0OyAtbGUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGNvdW50ZXIgZGVsdGEgaW52YWxpZCBmb3IgJG5hbWVcJiMzNDsgXFxcbiYjNDM7XHRcdFx0XCYjMzQ7KGJ5dGVzPSRiZCBwa3RzPSRwZClcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0aWYgWyBcJiMzNDskb3BcJiMzNDsgPSBcJiMzNDtndFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRpZiBbIFwmIzM0OyRiZFwmIzM0OyAtbGUgJCgocGQgKiBsaW1pdCkpIF07IHRoZW5cbiYjNDM7XHRcdFx0ZWNobyBcJiMzNDtGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXHUwMDNjPSAkbGltaXRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdFx0cmV0PTFcbiYjNDM7XHRcdFx0cmV0dXJuIDFcbiYjNDM7XHRcdGZpXG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0aWYgWyBcJiMzNDskYmRcJiMzNDsgLWd0ICQoKHBkICogbGltaXQpKSBdOyB0aGVuXG4mIzQzO1x0XHRcdGVjaG8gXCYjMzQ7RkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkIFx1MDAzZSAkbGltaXRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdFx0cmV0PTFcbiYjNDM7XHRcdFx0cmV0dXJuIDFcbiYjNDM7XHRcdGZpXG4mIzQzO1x0ZmlcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDsob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdXCYjMzQ7XG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBMQU4tc2xhdmUgcGxhaW4tR1NPIHJlZ3Jlc3Npb246IGEgcGxhaW4gU0FOIGFnZ3JlZ2F0ZSBlbnRlcmluZyBhIFBSUFxuJiM0MzsjIExBTiBzbGF2ZSBtdXN0IGJlIHNlZ21lbnRlZCBhdCB0aGUgZm9yd2FyZCBlbnRyeSwgbm90IGRyb3BwZWQuIFBSUFxuJiM0MzsjIGRyb3BzIHNsYXZlLXRvLXNsYXZlIGZvcndhcmRpbmcgYnkgZGVzaWduIChwcnBfZHJvcF9mcmFtZSksIHNvIHRoZVxuJiM0MzsjIGNvbnN1bWVyIG9mIExBTi1zbGF2ZSBTQU4gdHJhZmZpYyBpcyBsb2NhbCBkZWxpdmVyeSB0byB0aGUgbWFzdGVyLlxuJiM0MzsjIFR3byBpbmRlcGVuZGVudCBvcmFjbGVzOiB0aGUgU0FOLXNpZGUgcHJvb2YgdGhhdCBhZ2dyZWdhdGVzIHJlYWxseVxuJiM0MzsjIGFycml2ZWQgYXQgdGhlIERVVCwgYW5kIHRoZSB2b2x1bWUgJiM0MzsgcGVyLWZyYW1lIHNoYXBlIG9mIHRoZSBsb2NhbFxuJiM0MzsjIGRlbGl2ZXJ5LiBPbiB0aGUgYnJva2VuIGdhdGUgdGhlIGFnZ3JlZ2F0ZXMgYXJlIGRyb3BwZWQgYW5kIFRDUFxuJiM0MzsjIGNyYXdscyBvbiByZXRyYW5zbWl0dGVkIHNpbmdsZSBzZWdtZW50cywgc2VwYXJhdGluZyB0aGUga2VybmVscyBieVxuJiM0MzsjIGFuIG9yZGVyIG9mIG1hZ25pdHVkZSBpbiBkZWxpdmVyZWQgYnl0ZXMuXG4mIzQzO2RvX2xhbnNhbl9nc29fdGVzdCgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBwcnBfaXA9XCYjMzQ7MTAuOTkuMS4xXCYjMzQ7IGxzX2lwPVwmIzM0OzEwLjk5LjEuMTBcJiMzNDtcbiYjNDM7XHRsb2NhbCBvdXQgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXG4mIzQzO1x0bG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSByX2IwIHJfcDAgcl9iMSByX3AxXG4mIzQzO1xuJiM0MztcdHNldHVwX25zIG5zX2xzIHx8IGV4aXQgJD9cbiYjNDM7XG4mIzQzO1x0aXAgbGluayBhZGQgZF9wYSBuZXRucyBcJiMzNDskbnNfZHV0XCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgbHNfYSBuZXRucyBcJiMzNDskbnNfbHNcJiMzNDtcbiYjNDM7XHRpcCBsaW5rIGFkZCBkX3BiIG5ldG5zIFwmIzM0OyRuc19kdXRcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBsc19wIG5ldG5zIFwmIzM0OyRuc19sc1wmIzM0O1xuJiM0MztcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX2R1dFwmIzM0OyBcJiMzNDtpcCBsaW5rIHNldCBkX3BhIG10dSAxNjAwIHVwXCYjMzQ7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19kdXRcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgZF9wYiBtdHUgMTYwMCB1cFwmIzM0O1xuJiM0MztcdG5zeCBcJiMzNDskbnNfbHNcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgbHNfYSBtdHUgMTYwMCB1cDsgXFxcbiYjNDM7XHRcdGlwIGxpbmsgc2V0IGxzX3AgbXR1IDE2MDAgdXA7IGlwIGFkZHIgYWRkICRsc19pcC8yNCBkZXYgbHNfYVwmIzM0O1xuJiM0MztcbiYjNDM7XHQjIFBSUCBEVVQgd2l0aCB0aGUgU0FOIG9uIGEgTEFOIHNsYXZlOiBwbGFpbiBTQU4gYWdncmVnYXRlcyBhcmVcbiYjNDM7XHQjIHZhbGlkIHRyYWZmaWMgb24gYSBQUlAgTEFOIGFuZCBtdXN0IG5vdCBiZSBkcm9wcGVkLlxuJiM0MztcdG5zeCBcJiMzNDskbnNfZHV0XCYjMzQ7IFwmIzM0O2lwIGxpbmsgYWRkIHBycDAgdHlwZSBoc3IgXFxcbiYjNDM7XHRcdHNsYXZlMSBkX3BhIHNsYXZlMiBkX3BiIHByb3RvIDE7IFxcXG4mIzQzO1x0XHRpcCBsaW5rIHNldCBwcnAwIHVwOyBpcCBhZGRyIGFkZCAkcHJwX2lwLzI0IGRldiBwcnAwXCYjMzQ7XG4mIzQzO1xuJiM0MztcdCMgTGV0IHN1cGVydmlzaW9uIGZyYW1lcyBjb252ZXJnZS5cbiYjNDM7XHRzbGVlcCAyXG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgTEFOLXNpZGUgU0FOIGludGVyZmFjZS5cJiMzNDtcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX2xzXCYjMzQ7IFwmIzM0O2V0aHRvb2wgLUsgbHNfYSB0c28gb24gZ3NvIG9uXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfbHNcJiMzNDsgbHNfYSB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb25cbiYjNDM7XHRzdG9wX2lmX2Vycm9yIFwmIzM0O0NvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBMQU4tc2lkZSBTQU4gaW50ZXJmYWNlLlwmIzM0O1xuJiM0MztcbiYjNDM7XHRzdGFydF9pcGVyZl9zZXJ2ZXIgXCYjMzQ7JG5zX2R1dFwmIzM0OyBcJiMzNDskcHJwX2lwXCYjMzQ7IHx8IHJldHVyblxuJiM0MztcbiYjNDM7XHRyZWFkIC1yIHJfYjAgcl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3J4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgcHJwMClcbiYjNDM7RU9GXG4mIzQzO1x0cmVhZCAtciBzYW5fYjAgc2FuX3AwIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfdHhfY291bnRlcnMgXCYjMzQ7JG5zX2xzXCYjMzQ7IGxzX2EpXG4mIzQzO0VPRlxuJiM0MztcdGlmICEgdmFsaWRfZGVjaW1hbHMgXCYjMzQ7JHJfYjBcJiMzNDsgXCYjMzQ7JHJfcDBcJiMzNDsgXCYjMzQ7JHNhbl9iMFwmIzM0OyBcJiMzNDskc2FuX3AwXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGJhc2VsaW5lIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0aWYgISBvdXQ9JChuc3ggXCYjMzQ7JG5zX2xzXCYjMzQ7IFwmIzM0O3RpbWVvdXQgNjAgaXBlcmYzIC1jICRwcnBfaXAgLU0gMTQ0NiBcXFxuJiM0MztcdFx0LWIgMkcgLXQgMTBcJiMzNDsgMlx1MDAzZVx1MDAyNjEpOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IExBTi1zbGF2ZSBHU08gbG9jYWwtZGVsaXZlcnkgc3RyZWFtIGZhaWxlZDpcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7JG91dFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdHJlYWQgLXIgcl9iMSByX3AxIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfcnhfY291bnRlcnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyBwcnAwKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQocmVhZF90eF9jb3VudGVycyBcJiMzNDskbnNfbHNcJiMzNDsgbHNfYSlcbiYjNDM7RU9GXG4mIzQzO1x0aWYgISB2YWxpZF9kZWNpbWFscyBcJiMzNDskcl9iMVwmIzM0OyBcJiMzNDskcl9wMVwmIzM0OyBcJiMzNDskc2FuX2IxXCYjMzQ7IFwmIzM0OyRzYW5fcDFcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogZmluYWwgY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHQjIE9yYWNsZSAxIC0gYWdncmVnYXRlcyByZWFsbHkgYXJyaXZlZDogdGhlIFNBTiBlbWl0dGVkXG4mIzQzO1x0IyBzdXBlci1wYWNrZXRzIHRvd2FyZCB0aGUgRFVULlxuJiM0MztcdGV2YWxfY291bnRlcl9kZWx0YSBcJiMzNDtTQU4gbHNfYSBUWFwmIzM0OyBcJiMzNDskc2FuX2IwXCYjMzQ7IFwmIzM0OyRzYW5fcDBcJiMzNDsgXFxcbiYjNDM7XHRcdFwmIzM0OyRzYW5fYjFcJiMzNDsgXCYjMzQ7JHNhbl9wMVwmIzM0OyBndCBcJiMzNDskU0FOX0FWR19NSU5cJiMzNDtcbiYjNDM7XHRbIFwmIzM0OyR7cmV0Oi0wfVwmIzM0OyAtZXEgMCBdIHx8IHJldHVyblxuJiM0MztcbiYjNDM7XHQjIE9yYWNsZSAyIC0gbG9jYWwgZGVsaXZlcnkgb2YgdGhvc2UgYWdncmVnYXRlczogdm9sdW1lIGFuZFxuJiM0MztcdCMgcGVyLWZyYW1lIHNoYXBlIG9uIHRoZSBQUlAgbWFzdGVyLiBUaGUgdm9sdW1lIGdhdGUgc2VwYXJhdGVzXG4mIzQzO1x0IyBmdWxsIGRlbGl2ZXJ5IGZyb20gdGhlIHJldHJhbnNtaXQgY3Jhd2wgdGhlIGJyb2tlbiBnYXRlIGxlYXZlcztcbiYjNDM7XHQjIHRoZSBhdmVyYWdlIGdhdGUgcHJvdmVzIHRoZSBieXRlcyBhcnJpdmVkIHBlci1mcmFtZS5cbiYjNDM7XHRpZiBbICQoKHJfYjEgLSByX2IwKSkgLWx0IDEwMDAwMDAwMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IExBTi1zbGF2ZSBsb2NhbCBkZWxpdmVyeSBkZWdyYWRlZFwmIzM0OyBcXFxuJiM0MztcdFx0XHRcJiMzNDsocHJwMCBSWCBkZWx0YSAkKChyX2IxIC0gcl9iMCkpIGJ5dGVzIFx1MDAzYyAxMDAwMDAwMDApXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XHRpZiBbICQoKHJfYjEgLSByX2IwKSkgLWd0ICQoKCAocl9wMSAtIHJfcDApICogTEFOX0FWR19NQVggKSkgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBsb2NhbCBkZWxpdmVyeSBub3QgcGVyLWZyYW1lXCYjMzQ7IFxcXG4mIzQzO1x0XHRcdFwmIzM0OyhhdmcgJCgoIChyX2IxIC0gcl9iMCkgLyAocl9wMSAtIHJfcDApICkpIFx1MDAzZSAkTEFOX0FWR19NQVgpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IExBTi1zbGF2ZSBsb2NhbCBkZWxpdmVyeSBwcnAwIFJYIGRlbHRhXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDskKChyX2IxIC0gcl9iMCkpIGJ5dGVzIC8gJCgocl9wMSAtIHJfcDApKSBwa3RzIFsgT0sgXVwmIzM0O1xuJiM0MztcdHJlYXBfaXBlcmZfc2VydmVyIHx8IHJldHVyblxuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogTEFOLXNsYXZlIHBsYWluLUdTTyByZWdyZXNzaW9uIFsgT0sgXVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztkb190c29fc3RyZWFtX3Rlc3QoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgb3V0IHNlbmRlcl9yZXRyXG4mIzQzO1x0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXG4mIzQzO1x0bG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSBiX2IwIGJfcDAgYl9iMSBiX3AxXG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cJiMzNDtcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX3NhblwmIzM0OyBcJiMzNDtldGh0b29sIC1LIHMwIHRzbyBvbiBnc28gb25cJiMzNDtcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19zYW5cJiMzNDsgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXG4mIzQzO1x0c3RvcF9pZl9lcnJvciBcJiMzNDtDb3VsZCBub3QgZW5hYmxlIFRTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cJiMzNDtcbiYjNDM7XHRzdGFydF9pcGVyZl9zZXJ2ZXIgXCYjMzQ7JG5zX3BlZXJcJiMzNDsgfHwgcmV0dXJuXG4mIzQzO1xuJiM0MztcdCMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZVxuJiM0MztcdCMgbXVzdCBleGNlZWQgU0FOX0FWR19NSU4gKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IEdTTyBzdXBlci1wYWNrZXRzXG4mIzQzO1x0IyByZWFsbHkgbGVmdCB0aGUgU0FOKTsgZWFjaCBEVVQgTEFOIGxlZyBtdXN0IHN0YXkgdW5kZXIgTEFOX0FWR19NQVhcbiYjNDM7XHQjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlXG4mIzQzO1x0IyBhcmUgYWdncmVnYXRlIGRpc2NyaW1pbmF0b3JzLCBub3QgYSBwZXItZnJhbWUgbWF4aW11bSBwcm9vZi5cbiYjNDM7XHRzYW5fYjA9MDsgc2FuX3AwPTA7IGFfYjA9MDsgYV9wMD0wOyBiX2IwPTA7IGJfcDA9MFxuJiM0MztcdHJlYWQgLXIgc2FuX2IwIHNhbl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19zYW5cJiMzNDsgczApXG4mIzQzO0VPRlxuJiM0MztcdHJlYWQgLXIgYV9iMCBhX3AwIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfdHhfY291bnRlcnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2EpXG4mIzQzO0VPRlxuJiM0MztcdHJlYWQgLXIgYl9iMCBiX3AwIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfdHhfY291bnRlcnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2IpXG4mIzQzO0VPRlxuJiM0MztcdGlmICEgdmFsaWRfZGVjaW1hbHMgXCYjMzQ7JHNhbl9iMFwmIzM0OyBcJiMzNDskc2FuX3AwXCYjMzQ7IFwmIzM0OyRhX2IwXCYjMzQ7IFwmIzM0OyRhX3AwXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDskYl9iMFwmIzM0OyBcJiMzNDskYl9wMFwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBiYXNlbGluZSBUWCBjb3VudGVyIHNuYXBzaG90IGludmFsaWRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdCMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eVxuJiM0MztcdCMgYWJvdmUsIG5vdCBtYXggdGhyb3VnaHB1dDsgcmV0cmFuc21pdHMgYXJlIGluZm9ybWF0aW9uYWwgb25seS5cbiYjNDM7XHQjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhXG4mIzQzO1x0IyBmdW5jdGlvbmFsIHByb2JsZW0uXG4mIzQzO1x0aWYgISBvdXQ9JChuc3ggXCYjMzQ7JG5zX3NhblwmIzM0OyBcJiMzNDt0aW1lb3V0IDYwIGlwZXJmMyAtYyAkcGVlcl9pcCAtTSAxNDQ2IFxcXG4mIzQzO1x0XHQtYiAyRyAtdCAxMFwmIzM0OyAyXHUwMDNlXHUwMDI2MSk7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIGNsaWVudCBmYWlsZWQ6XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyRvdXRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm5cbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQocmVhZF90eF9jb3VudGVycyBcJiMzNDskbnNfc2FuXCYjMzQ7IHMwKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIGFfYjEgYV9wMSBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9hKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIGJfYjEgYl9wMSBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iKVxuJiM0MztFT0ZcbiYjNDM7XHRpZiAhIHZhbGlkX2RlY2ltYWxzIFwmIzM0OyRzYW5fYjFcJiMzNDsgXCYjMzQ7JHNhbl9wMVwmIzM0OyBcJiMzNDskYV9iMVwmIzM0OyBcJiMzNDskYV9wMVwmIzM0OyBcXFxuJiM0MztcdFx0XCYjMzQ7JGJfYjFcJiMzNDsgXCYjMzQ7JGJfcDFcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRldmFsX2NvdW50ZXJfZGVsdGEgXCYjMzQ7U0FOIHMwIFRYXCYjMzQ7IFwmIzM0OyRzYW5fYjBcJiMzNDsgXCYjMzQ7JHNhbl9wMFwmIzM0OyBcJiMzNDskc2FuX2IxXCYjMzQ7IFwmIzM0OyRzYW5fcDFcJiMzNDsgXFxcbiYjNDM7XHRcdGd0IFwmIzM0OyRTQU5fQVZHX01JTlwmIzM0O1xuJiM0MztcdGV2YWxfY291bnRlcl9kZWx0YSBcJiMzNDtEVVQgZF9hIFRYXCYjMzQ7IFwmIzM0OyRhX2IwXCYjMzQ7IFwmIzM0OyRhX3AwXCYjMzQ7IFwmIzM0OyRhX2IxXCYjMzQ7IFwmIzM0OyRhX3AxXCYjMzQ7IFxcXG4mIzQzO1x0XHRsZSBcJiMzNDskTEFOX0FWR19NQVhcJiMzNDtcbiYjNDM7XHRldmFsX2NvdW50ZXJfZGVsdGEgXCYjMzQ7RFVUIGRfYiBUWFwmIzM0OyBcJiMzNDskYl9iMFwmIzM0OyBcJiMzNDskYl9wMFwmIzM0OyBcJiMzNDskYl9iMVwmIzM0OyBcJiMzNDskYl9wMVwmIzM0OyBcXFxuJiM0MztcdFx0bGUgXCYjMzQ7JExBTl9BVkdfTUFYXCYjMzQ7XG4mIzQzO1x0WyBcJiMzNDske3JldDotMH1cJiMzNDsgLWVxIDAgXSB8fCByZXR1cm5cbiYjNDM7XG4mIzQzO1x0IyBzdWNjZXNzIHBhdGg6IGJvdW5kZWQgcmVhcCB3aXRoIHRoZSBzZXJ2ZXImIzM5O3MgcmVhbCBzdGF0dXNcbiYjNDM7XHRyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm5cbiYjNDM7XG4mIzQzO1x0IyBzZWNvbmRhcnkgaGVhbHRoIHNpZ25hbCBvbmx5OiBhbmNob3JlZCwgc2luZ2xlLW1hdGNoLCBudW1lcmljIOKAlFxuJiM0MztcdCMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlclxuJiM0MztcdCMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLlxuJiM0MztcdHNlbmRlcl9yZXRyPSQoZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgYXdrICYjMzk7L3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0mIzM5OylcbiYjNDM7XHRpZiBbIFwmIzM0OyQoZWNobyBcJiMzNDskc2VuZGVyX3JldHJcJiMzNDsgfCBncmVwIC1FYyAmIzM5O15bMC05XSYjNDM7JCYjMzk7KVwmIzM0OyAtbmUgMSBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGNhbm5vdCBwYXJzZSBzZW5kZXIgcmV0cmFuc21pdHMgcmVsaWFibHlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7JG91dFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7XCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDtzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKVwmIzM0O1xuJiM0MztcdGVjaG8gXCYjMzQ7JG91dFwmIzM0OyB8IGdyZXAgLUUgXCYjMzQ7c2VuZGVyfHJlY2VpdmVyXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoZWNrX3ByZXJlcXVpc2l0ZXNcbiYjNDM7Y2hlY2tfdG9vbCBldGh0b29sXG4mIzQzO2NoZWNrX3Rvb2wgaXBlcmYzXG4mIzQzO2NoZWNrX3Rvb2wgdGltZW91dFxuJiM0MztcbiYjNDM7IyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LlxuJiM0MztpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xaSBpbnRlcmxpbms7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IGlwcm91dGUyIGhhcyBubyBIU1IgaW50ZXJsaW5rIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3NldHVwX3RvcG9cbiYjNDM7XG4mIzQzO2VjaG8gXCYjMzQ7SU5GTzogSW5pdGlhbCB2YWxpZGF0aW9uIHBpbmcgKFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgRFVUKS5cJiMzNDtcbiYjNDM7ZG9fcGluZyBcJiMzNDskbnNfc2FuXCYjMzQ7IFwmIzM0OyRwZWVyX2lwXCYjMzQ7XG4mIzQzO3N0b3BfaWZfZXJyb3IgXCYjMzQ7SW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC5cJiMzNDtcbiYjNDM7XG4mIzQzO2RvX2dyb19mZWF0dXJlX2NoZWNrc1xuJiM0Mztkb190c29fc3RyZWFtX3Rlc3RcbiYjNDM7c3RvcF9pZl9lcnJvciBcJiMzNDtHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC5cJiMzNDtcbiYjNDM7XG4mIzQzO2RvX2xhbnNhbl9nc29fdGVzdFxuJiM0MztzdG9wX2lmX2Vycm9yIFwmIzM0O0xBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbiBmYWlsZWQuXCYjMzQ7XG4mIzQzO1xuJiM0MztlY2hvIFwmIzM0O0lORk86IEFsbCBnb29kLlwmIzM0O1xuJiM0MztjbGVhbnVwXG4mIzQzO2V4aXQgJHJldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIU1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OywKICAgICYjMzQ7ZGV2X2Rpc2FibGVfZ3JvJiMzNDssCiAgICAmIzM0O25ldGlmX2Rpc2FibGVfZ3JvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHByb3RvY29sIHRvIGhhbmRsZSBHU08gc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byB0aGUgY29yZSBuZXR3b3JrIGRldmljZSBBUEkgdG8gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIGRldmljZSwgYW5kIHVzZXMgdGhpcyB0byBkaXNhYmxlIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcGFja2V0IHByb2Nlc3NpbmcgYW5kIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzRkYTE3ZTk2NjFkOWIzZDNhNTQ0NThiNDA1ZTdmZGY2YWQxNjJlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTc6NDA6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA5OTgxZDYzN2Y4YjU0Li5lYmEyYzI2YTQ5YmE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTM0MzQsNiAmIzQzOzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgbmV0aWZfY2xvc2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHVubGluayk7CiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKJiM0Mzt2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7CiB1MTYgZGV2X3BpY2tfdHhfemVybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1OTMzYzVkYWIwOWVlLi5mMjBkNWFiMGNmNzI5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTg0MCw2ICYjNDM7MTg0MCwyMSBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJfQogfQogCiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKJiM0MzsKJiM0MzsJZGV2LSZndDt3YW50ZWRfZmVhdHVyZXMgJmFtcDs9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7CiYjNDM7CW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKJiM0MzsKJiM0MzsJbmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikgewomIzQzOwkJbmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7CiYjNDM7CQluZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpOwomIzQzOwkJbmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qKgogICoJZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZQogICoJQGRldjogZGV2aWNlCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmMKaW5kZXggNDM3OTQ3ZGQwOGVkNS4uM2NhMjUxNWFkMDQ4NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2X2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hcGkuYwpAQCAtMjY5LDYgJiM0MzsyNjksMjcgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTsKIAomIzQzOy8qKgomIzQzOyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZQomIzQzOyAqIEBkZXY6IGRldmljZQomIzQzOyAqCiYjNDM7ICogQmVzdC1lZmZvcnQgZGlzYWJsZSBvZiBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldAomIzQzOyAqIGRldmljZS4gIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZAomIzQzOyAqIHBhY2tldHMgbWF5IGJlIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS4KJiM0MzsgKgomIzQzOyAqIFRoZSBkaXNhYmxlIGlzIGJlc3QtZWZmb3J0OiBhIGRldmljZSB3aXRoIGEgZml4ZWQtb24gZmVhdHVyZSAoZm9yCiYjNDM7ICogZXhhbXBsZSBHUk9fSFcgb24gYSB2aXJ0aW8tbmV0IGRldmljZSBuZWdvdGlhdGVkIHdpdGhvdXQKJiM0MzsgKiBWSVJUSU9fTkVUX0ZfQ1RSTF9HVUVTVF9PRkZMT0FEUykga2VlcHMgaXQgZW5hYmxlZC4gIENhbGxlcnMgdGhhdAomIzQzOyAqIG5lZWQgYSBoYXJkIGd1YXJhbnRlZSBtdXN0IGluc3BlY3QgdGhlIHJlc3VsdGluZyBmZWF0dXJlIHN0YXRlLgomIzQzOyAqLwomIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsJbmV0aWZfZGlzYWJsZV9ncm8oZGV2KTsKJiM0MzsJbmV0ZGV2X3VubG9ja19vcHMoZGV2KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pOwomIzQzOwogLyoqCiAgKiBkZXZfc2V0X3Byb21pc2N1aXR5KCkgLSB1cGRhdGUgcHJvbWlzY3VpdHkgY291bnQgb24gYSBkZXZpY2UKICAqIEBkZXY6IGRldmljZQpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwppbmRleCA1NTU1YjcxYWIxOWI1Li4yNDhjYmIxNDJlMjFlIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwpAQCAtMjMyLDkgJiM0MzsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXNrYi0mZ3Q7ZGV2ID0gbWFzdGVyLSZndDtkZXY7CiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCXNrYl9yZXNldF9tYWNfbGVuKHNrYik7Ci0JCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJCWhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAl9IGVsc2UgewogCQlkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMzM1LDYgJiM0MzszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsCiAJCWhzcl9zdGFnLSZndDtzZXF1ZW5jZV9uciA9IGh0b25zKGhzci0mZ3Q7c2VxdWVuY2VfbnIpOwogCQloc3ItJmd0O3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKIAl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gdHlwZTsKIAkvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqLwpAQCAtMzU2LDE0ICYjNDM7MzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwKIAkJZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94KTsKIAl9CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCkBAIC0zOTAsNiAmIzQzOzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJaHNyX3N0YWctJmd0O3NlcXVlbmNlX25yID0gaHRvbnMoaHNyLSZndDtzdXBfc2VxdWVuY2VfbnIpOwogCWhzci0mZ3Q7c3VwX3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7CiAKQEAgLTM5NywxMyAmIzQzOzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlciwKIAloc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTsKIAlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIG1hc3Rlci0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTsKLQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiB9CiAKIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb24KQEAgLTY1OSw3ICYjNDM7NjUyLDcgQEAgdm9pZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiAKIAlkZXYtJmd0O2h3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfAotCQkJICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8CiYjNDM7CQkJICAgTkVUSUZfRl9IV19DU1VNIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjsKIApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCmluZGV4IDA3NzQ5ODFhNjVjMTYuLmY0MjY5NGNmNDMwOTkgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9nc28uaCZndDsKICNpbmNsdWRlICYjMzQ7aHNyX21haW4uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2hzcl9mcmFtZXJlZy5oJiMzNDsKIApAQCAtNjIxLDkgJiM0Mzs2MjIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChwb3J0LSZndDt0eXBlID09IEhTUl9QVF9NQVNURVIgfHwKIAkgICAgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7CiAJCS8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovCi0JCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAkJZnJhbWUtJmd0O3NlcXVlbmNlX25yID0gaHNyLSZndDtzZXF1ZW5jZV9ucjsKIAkJaHNyLSZndDtzZXF1ZW5jZV9uciYjNDM7JiM0Mzs7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJfQogfQogCkBAIC03MzEsNyAmIzQzOzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsCiB9CiAKIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovCi12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiYjNDM7c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lOwogCkBAIC03NDYsOCAmIzQzOzc0OCw4IEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKIAkgKiBTbyBjaGVjayBhbmQgaW5jcmVtZW50IHN0YXRzIGZvciBtYXN0ZXIgcG9ydCBvbmx5IGhlcmUuCiAJICovCiAJaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUiB8fCBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHsKLQkJcG9ydC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9wYWNrZXRzJiM0MzsmIzQzOzsKLQkJcG9ydC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLSZndDtsZW47CiYjNDM7CQlERVZfU1RBVFNfSU5DKHBvcnQtJmd0O2RldiwgdHhfcGFja2V0cyk7CiYjNDM7CQlERVZfU1RBVFNfQUREKHBvcnQtJmd0O2RldiwgdHhfYnl0ZXMsIHNrYi0mZ3Q7bGVuKTsKIAl9CiAKIAlrZnJlZV9za2IoZnJhbWUuc2tiX2hzcik7CkBAIC03NTcsNiAmIzQzOzc1OSwxMDUgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQogCiBvdXRfZHJvcDoKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlwb3J0LSZndDtkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwlERVZfU1RBVFNfSU5DKHBvcnQtJmd0O2RldiwgdHhfZHJvcHBlZCk7CiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzbwomIzQzOyAqIGVhY2ggd2lyZSBmcmFtZSBnZXRzIGl0cyBvd24gSFNSL1BSUCB0YWcgYW5kIHNlcXVlbmNlIG51bWJlci4KJiM0MzsgKi8KJiM0MzsvKiBFZmZlY3RpdmUgZnJhbWUgcHJvdG9jb2wgb2YgYSAocG9zc2libHkgVkxBTi10YWdnZWQpIHNrYiwgb3IgMCB3aGVuCiYjNDM7ICogaXQgY2Fubm90IGJlIGRldGVybWluZWQgb3IgdGhlIHRhZ2dpbmcgZXhjZWVkcyB3aGF0IEhTUiBzdXBwb3J0cy4KJiM0MzsgKiBIU1Igc3VwcG9ydHMgb25lIDgwMi4xUSBDLXRhZyBvbmx5LCBtYXRjaGluZyBmaWxsX2ZyYW1lX2luZm8oKTogYW4KJiM0MzsgKiBhY2NlbGVyYXRlZCB0YWcgbXVzdCBiZSBhIEMtdGFnIHdpdGggYSBub24tVkxBTiBpbm5lciBwcm90b2NvbDsgYW4KJiM0MzsgKiBpbi1iYW5kIHRhZyBpcyB1bndyYXBwZWQgZXhhY3RseSBvbmNlIGFuZCBhIHJlc2lkdWFsIFZMQU4gRXRoZXJUeXBlCiYjNDM7ICogaXMgcmVqZWN0ZWQuIFJlYWQtb25seTsgbm8gc3RhdGUgaXMga2VwdCBiZXlvbmQgdGhlIGltbWVkaWF0ZQomIzQzOyAqIHByb3RvY29sIHZhbHVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBfX2JlMTYgaHNyX2dzb19lZmZlY3RpdmVfcHJvdG8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGhoZHIgZWg7CiYjNDM7CXN0cnVjdCB2bGFuX2hkciB2aDsKJiM0MzsJY29uc3Qgc3RydWN0IGV0aGhkciAqZXRoOwomIzQzOwljb25zdCBzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHI7CiYjNDM7CV9fYmUxNiBwcm90bzsKJiM0MzsKJiM0MzsJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKJiM0MzsJCS8qIEhTUiBzdXBwb3J0cyBvbmUgODAyLjFRIEMtdGFnIG9ubHkuICovCiYjNDM7CQlpZiAoc2tiLSZndDt2bGFuX3Byb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChldGhfdHlwZV92bGFuKHNrYi0mZ3Q7cHJvdG9jb2wpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHNrYi0mZ3Q7cHJvdG9jb2w7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXRoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKGVoKSwgJmFtcDtlaCk7CiYjNDM7CWlmICghZXRoKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXByb3RvID0gZXRoLSZndDtoX3Byb3RvOwomIzQzOwlpZiAoIWV0aF90eXBlX3ZsYW4ocHJvdG8pKQomIzQzOwkJcmV0dXJuIHByb3RvOwomIzQzOwlpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXZoZHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBFVEhfSExFTiwgc2l6ZW9mKHZoKSwgJmFtcDt2aCk7CiYjNDM7CWlmICghdmhkcikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwcm90byA9IHZoZHItJmd0O2hfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CiYjNDM7CWlmIChldGhfdHlwZV92bGFuKHByb3RvKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gcHJvdG87CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpzZWdzLCAqbmV4dDsKJiM0MzsJX19iZTE2IHByb3RvOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7CiYjNDM7CQloc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ29uZm9ybWluZyBwbGFpbi1wcm90b2NvbCBHU08gc3VwZXItcGFja2V0cyBjYXJyeSB0cmFpbGVyLWZyZWUKJiM0MzsJICogc2VuZGVyIHBheWxvYWQgYW5kIGFyZSBzZWdtZW50ZWQgaGVyZTogZWFjaCBzZWdtZW50IGlzIGRlbGl2ZXJlZAomIzQzOwkgKiBvciBmb3J3YXJkZWQgYXMgaXRzIG93biB3aXJlIGZyYW1lLCBvbiBhbnkgaW5ncmVzcyByb2xlLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZ2F0ZSBpcyBjb250ZW50LWJhc2VkLCBub3QgcG9ydC1iYXNlZC4gQW4gYWdncmVnYXRlIHdob3NlCiYjNDM7CSAqIGVmZmVjdGl2ZSBwcm90b2NvbCBpcyBFVEhfUF9IU1Igb3IgRVRIX1BfUFJQIGNhbm5vdCBiZSBzYWZlbHkKJiM0MzsJICogc2VnbWVudGVkIGFuZCBpcyBkcm9wcGVkLCBhcyBpcyBhbnkgc2tiIHdob3NlIGhlYWRlciBjYW5ub3QgYmUKJiM0MzsJICogcmVhZCBvciB3aG9zZSB0YWdnaW5nIGV4Y2VlZHMgdGhlIHNpbmdsZSA4MDIuMVEgQy10YWcgSFNSCiYjNDM7CSAqIHN1cHBvcnRzLiBXaXRoIE5FVElGX0ZfSFdfSFNSX1RBR19STSB0aGUgbG93ZXIgaGFzIGFscmVhZHkKJiM0MzsJICogc3RyaXBwZWQgdGhlIHRhZywgc28gc3VjaCBhZ2dyZWdhdGVzIGFycml2ZSBwbGFpbiBhbmQgYXJlCiYjNDM7CSAqIHNlZ21lbnRlZC4KJiM0MzsJICovCiYjNDM7CXByb3RvID0gaHNyX2dzb19lZmZlY3RpdmVfcHJvdG8oc2tiKTsKJiM0MzsJaWYgKCFwcm90bykKJiM0MzsJCWdvdG8gZHJvcF9nc287IC8qIGNsYXNzaWZpY2F0aW9uIGZhaWx1cmUsIGZhaWwtc2FmZSAqLwomIzQzOwlpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSB8fCBwcm90byA9PSBodG9ucyhFVEhfUF9QUlApKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsKJiM0MzsJLyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWUKJiM0MzsJICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb20KJiM0MzsJICogdGhlIGludGVybGluayBmb2xsb3dzIFJYIGNoZWNrc3VtIHNlbWFudGljcy4KJiM0MzsJICovCiYjNDM7CXNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUik7CiYjNDM7CWlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsKJiM0MzsJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJd2hpbGUgKHNlZ3MpIHsKJiM0MzsJCW5leHQgPSBzZWdzLSZndDtuZXh0OwomIzQzOwkJc2Vncy0mZ3Q7bmV4dCA9IE5VTEw7CiYjNDM7CQloc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpOwomIzQzOwkJc2VncyA9IG5leHQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO2Ryb3BfZ3NvOgomIzQzOwlERVZfU1RBVFNfSU5DKHBvcnQtJmd0O2RldiwgdHhfZHJvcHBlZCk7CiAJa2ZyZWVfc2tiKHNrYik7CiB9CmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9zbGF2ZS5jIGIvbmV0L2hzci9oc3Jfc2xhdmUuYwppbmRleCAwMWM3M2I0YjUwZGRkLi5hYTIxNTRiMTljMGI5IDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX3NsYXZlLmMKQEAgLTczLDE2ICYjNDM7NzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYikKIAl9CiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAotCS8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhCi0JICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuCi0JICovCi0JaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykgewotCQlzcGluX2xvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCQloc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCX0gZWxzZSB7Ci0JCWhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpOwotCX0KJiM0MzsJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7CiAKIGZpbmlzaF9jb25zdW1lOgogCXJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEOwpAQCAtMTcxLDYgJiM0MzsxNjIsMTEgQEAgc3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJZ290byBmYWlsX3J4X2hhbmRsZXI7CiAJZGV2X2Rpc2FibGVfbHJvKGRldik7CiAKJiM0MzsJLyogR1JPIGRpc2FibGluZyBpcyBiZXN0LWVmZm9ydDogZGV2aWNlcyB3aXRoIGZpeGVkLW9uCiYjNDM7CSAqIEdSTy9HUk9fSFcgY2Fubm90IGJlIGZvcmNlZCBvZmYuCiYjNDM7CSAqLwomIzQzOwlkZXZfZGlzYWJsZV9ncm8oZGV2KTsKJiM0MzsKIAlyZXR1cm4gMDsKIAogZmFpbF9yeF9oYW5kbGVyOgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKaW5kZXggMzFmYjkzMjZjZjUzMy4uMGQxMDU0NzZlN2M1MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCkBAIC0zLDYgJiM0MzszLDcgQEAKIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLgogCiBURVNUX1BST0dTIDo9IFwKJiM0MzsJaHNyX2dyb19zdXBlcnBhY2tldC5zaCBcCiAJaHNyX3Bpbmcuc2ggXAogCWhzcl9yZWRib3guc2ggXAogCWxpbmtfZmF1bHRzLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi5lYmNiZDlmYzQxZWM0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoCkBAIC0wLDAgJiM0MzsxLDYzMSBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyMKJiM0MzsjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czoKJiM0MzsjCiYjNDM7IyAgMS4gRW5zbGF2aW5nIGEgZGV2aWNlIHRvIGFuIEhTUiBtYXN0ZXIgZGlzYWJsZXMgR1JPIG9uIGl0CiYjNDM7IyAgICAgKGRldl9kaXNhYmxlX2dybygpKS4KJiM0MzsjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy4KJiM0MzsjICAzLiBBIFRDUCBzdHJlYW0gZnJvbSBhIFRTTy1lbmFibGVkIFNBTiAod2hpY2ggdGhlcmVmb3JlIGVtaXRzIEdTTwomIzQzOyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6CiYjNDM7IyAgICAgaW50ZXJmYWNlLWNvdW50ZXIgZGVsdGFzIHNob3cgc3VwZXItcGFja2V0LXNpemVkIGZyYW1lcyBsZWF2aW5nCiYjNDM7IyAgICAgdGhlIFNBTiBhbmQgcGVyLWZyYW1lLXNpemVkIHRyYWZmaWMgbGVhdmluZyB0aGUgRFVUJiMzOTtzIExBTiBwb3J0cy4KJiM0MzsjCiYjNDM7IyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6CiYjNDM7IwomIzQzOyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyCiYjNDM7IyAgJiM0MzstLS0tLS0tLS0tLSYjNDM7ICBpbnRlcmxpbmsgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgIExBTiBBL0IgICYjNDM7LS0tLS0tLS0tLS0mIzQzOwomIzQzOyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXwKJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHwKJiM0MzsjICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0mIzQzOwomIzQzOyMKJiM0MzsjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCYjMzk7cyBmb3J3YXJkIHBhdGgKJiM0MzsjIChpbnRlcmxpbmsgUlggLSZndDsgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kCiYjNDM7IyBmb3J3YXJkZWQgYnkgdGhlIERVVC4KJiM0MzsKJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoCiYjNDM7CiYjNDM7c2FuX2lwPSYjMzQ7MTAwLjY0LjAuMSYjMzQ7CiYjNDM7cGVlcl9pcD0mIzM0OzEwMC42NC4wLjMmIzM0OwomIzQzOwomIzQzOyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKToKJiM0MzsjIFNBTl9BVkdfTUlOIHByb3ZlcyBHU08gc3VwZXItcGFja2V0cyBsZWZ0IHRoZSBTQU47IExBTl9BVkdfTUFYIGlzIGEKJiM0MzsjIGd1YXJkIHdpdGggbWFyZ2luLCBub3QgdGhlIHByb3RvY29sIG1heGltdW0gKHNlZSBkb190c29fc3RyZWFtX3Rlc3QpLgomIzQzO1NBTl9BVkdfTUlOPTIwNDgKJiM0MztMQU5fQVZHX01BWD0xNTE0CiYjNDM7CiYjNDM7aXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MztzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7YWN0aXZlX3Nydl9ucz0mIzM0OyYjMzQ7CiYjNDM7d29ya2Rpcj0mIzM0OyYjMzQ7CiYjNDM7cGlkZmlsZT0mIzM0OyYjMzQ7CiYjNDM7bnNfZHV0PSYjMzQ7JiMzNDsKJiM0Mztuc19zYW49JiMzNDsmIzM0OwomIzQzO25zX3BlZXI9JiMzNDsmIzM0OwomIzQzO25zX2xzPSYjMzQ7JiMzNDsKJiM0MztyY2ZpbGU9JiMzNDsmIzM0OwomIzQzOwomIzQzOyMgRGVsZXRlIHRoZSBwZXItc2VydmVyIHByaXZhdGUgd29yayBkaXJlY3RvcnkgYW5kIHJlc2V0IGl0cwomIzQzOyMgdmFyaWFibGVzLiBDYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlYXAgYW5kIGZyb20gdGhlIEVYSVQKJiM0MzsjIHRyYXAsIHdoaWNoIG93bnMgYWxsIGZhaWx1cmUgcGF0aHMuCiYjNDM7Y2xlYW51cF93b3JrZGlyKCkKJiM0Mzt7CiYjNDM7CSMgcmVtb3ZlIG9ubHkgdGhlIGtub3duIG5vbi1lbXB0eSBwcml2YXRlIGRpcmVjdG9yeQomIzQzOwlpZiBbIC1uICYjMzQ7JHt3b3JrZGlyfSYjMzQ7IF0gJmFtcDsmYW1wOyBbIC1kICYjMzQ7JHt3b3JrZGlyfSYjMzQ7IF07IHRoZW4KJiM0MzsJCXJtIC1yZiAmIzM0OyR7d29ya2Rpcn0mIzM0OwomIzQzOwlmaQomIzQzOwl3b3JrZGlyPSYjMzQ7JiMzNDsKJiM0MzsJcGlkZmlsZT0mIzM0OyYjMzQ7CiYjNDM7CXJjZmlsZT0mIzM0OyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJIyBTZXJ2ZXIgY2xlYW51cCB0YXJnZXRzIG9ubHkgdGhlIG5hbWVzcGFjZSBvZiB0aGUgY3VycmVudGx5CiYjNDM7CSMgYWN0aXZlIHNlcnZlciAocmVjb3JkZWQgYnkgc3RhcnRfaXBlcmZfc2VydmVyKTsgYWZ0ZXIgYQomIzQzOwkjIHN1Y2Nlc3NmdWwgcmVhcCBub3RoaW5nIGlzIGFjdGl2ZS4KJiM0MzsJaWYgWyAtbiAmIzM0OyR7YWN0aXZlX3Nydl9uc30mIzM0OyBdOyB0aGVuCiYjNDM7CQkjIGV4YWN0LVBJRCBraWxsIG9ubHkgYWZ0ZXIgUkUtdmFsaWRhdGluZyBpZGVudGl0eSAoZ3VhcmRzCiYjNDM7CQkjIGFnYWluc3QgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApCiYjNDM7CQlpZiBbIC1uICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgXSAmYW1wOyZhbXA7IHZhbGlkX3NlcnZlcl9waWQgJiMzNDske2FjdGl2ZV9zcnZfbnN9JiMzNDsgJiMzNDske2lwZXJmX3BpZH0mIzM0OzsgdGhlbgomIzQzOwkJCWtpbGwgJiMzNDske2lwZXJmX3BpZH0mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwkJZmkKJiM0MzsJCWlwZXJmX3BpZD0mIzM0OyYjMzQ7CiYjNDM7CQlpZiBbIC1uICYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn0mIzM0OyBdOyB0aGVuCiYjNDM7CQkJIyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cwomIzQzOwkJCSMgYm91bmQgc28gYSBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyCiYjNDM7CQkJIyBoYW5nIGNsZWFudXAKJiM0MzsJCQlmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG8KJiM0MzsJCQkJa2lsbCAtMCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwgfHwgYnJlYWsKJiM0MzsJCQkJc2xlZXAgMC4xCiYjNDM7CQkJZG9uZQomIzQzOwkJCWtpbGwgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQkJd2FpdCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCQlzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7CQlmaQomIzQzOwkJIyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjMKJiM0MzsJCSMgcHJvY2Vzc2VzIHRoYXQgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgYWN0aXZlIHNlcnZlciBuZXRucywKJiM0MzsJCSMgcG9sbCBmb3IgYm91bmRlZCBleGl0LCB0aGVuIFNJR0tJTEwgYW55IHN1cnZpdm9yIGJlZm9yZQomIzQzOwkJIyB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmQgcGtpbGwgd291bGQgc2NhbgomIzQzOwkJIyB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuCiYjNDM7CQlsb2NhbCBfcCBfc3RpbGwKJiM0MzsJCWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDske2FjdGl2ZV9zcnZfbnN9JiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJCWlmIGlzX2lwZXJmM19waWQgJiMzNDskX3AmIzM0OzsgdGhlbgomIzQzOwkJCQlraWxsICYjMzQ7JF9wJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCQlmaQomIzQzOwkJZG9uZQomIzQzOwkJZm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvCiYjNDM7CQkJX3N0aWxsPTAKJiM0MzsJCQlmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzICYjMzQ7JHthY3RpdmVfc3J2X25zfSYjMzQ7IDImZ3Q7L2Rldi9udWxsKTsgZG8KJiM0MzsJCQkJaWYgaXNfaXBlcmYzX3BpZCAmIzM0OyRfcCYjMzQ7OyB0aGVuCiYjNDM7CQkJCQlfc3RpbGw9MQomIzQzOwkJCQkJYnJlYWsKJiM0MzsJCQkJZmkKJiM0MzsJCQlkb25lCiYjNDM7CQkJWyAmIzM0OyRfc3RpbGwmIzM0OyAtZXEgMCBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCQlzbGVlcCAwLjEKJiM0MzsJCWRvbmUKJiM0MzsJCWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDske2FjdGl2ZV9zcnZfbnN9JiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJCWlmIGlzX2lwZXJmM19waWQgJiMzNDskX3AmIzM0OzsgdGhlbgomIzQzOwkJCQlraWxsIC05ICYjMzQ7JF9wJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCQlmaQomIzQzOwkJZG9uZQomIzQzOwlmaQomIzQzOwlhY3RpdmVfc3J2X25zPSYjMzQ7JiMzNDsKJiM0MzsJY2xlYW51cF93b3JrZGlyCiYjNDM7CWNsZWFudXBfYWxsX25zCiYjNDM7fQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7Y2hlY2tfdG9vbCgpCiYjNDM7ewomIzQzOwlpZiAhIGNvbW1hbmQgLXYgJiMzNDskMSYjMzQ7ICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7U0tJUDogQ291bGQgbm90IHJ1biB0ZXN0IHdpdGhvdXQgJDEmIzM0OwomIzQzOwkJZXhpdCAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO25zeCgpCiYjNDM7ewomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JDEmIzM0OyBiYXNoIC1jICYjMzQ7JDImIzM0OwomIzQzO30KJiM0MzsKJiM0Mztpc19pcGVyZjNfcGlkKCkKJiM0Mzt7CiYjNDM7CVsgJiMzNDskKGNhdCAvcHJvYy8mIzM0OyQxJiMzNDsvY29tbSAyJmd0Oy9kZXYvbnVsbCkmIzM0OyA9ICYjMzQ7aXBlcmYzJiMzNDsgXQomIzQzO30KJiM0MzsKJiM0MzsjIEJvdW5kZWQgcmVhcCBvZiB0aGUgb25lLXNob3Qgc2VydmVyOiB3YWl0IGF0IG1vc3QgNXMgZm9yIGl0IHRvCiYjNDM7IyBleGl0LCB0aGVuIHJlYXAgdGhlIHdyYXBwZXIgYW5kIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIGl0cyByZWFsCiYjNDM7IyBzdGF0dXMuIEEgc3R1Y2sgc2VydmVyIGNhbiBuZXZlciBoYW5nIHRoZSBzY3JpcHQuCiYjNDM7cmVhcF9pcGVyZl9zZXJ2ZXIoKQomIzQzO3sKJiM0MzsJbG9jYWwgc2VydmVyX3JjCiYjNDM7CiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJa2lsbCAtMCAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8IGJyZWFrCiYjNDM7CQlzbGVlcCAwLjEKJiM0MzsJZG9uZQomIzQzOwlpZiBraWxsIC0wICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgZXhpdCB3aXRoaW4gNXMmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CXdhaXQgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7CiYjNDM7CXNlcnZlcl93cmFwcGVyPSYjMzQ7JiMzNDsKJiM0MzsJaWYgWyAhIC1zICYjMzQ7JHtyY2ZpbGV9JiMzNDsgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgc3RhdHVzIGZpbGUgbWlzc2luZyAoJHtyY2ZpbGV9KSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJc2VydmVyX3JjPSQoY2F0ICYjMzQ7JHtyY2ZpbGV9JiMzNDspCiYjNDM7CWlmICEgW1sgJiMzNDskc2VydmVyX3JjJiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IFsgJiMzNDskc2VydmVyX3JjJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JiMzOTske3NlcnZlcl9yY30mIzM5OyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJaXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MzsJY2xlYW51cF93b3JrZGlyCiYjNDM7CWFjdGl2ZV9zcnZfbnM9JiMzNDsmIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIERlY2ltYWwtY291bnRlciB2YWxpZGF0aW9uIGZvciB0aGUgc25hcHNob3QgYmxvY2tzOiBldmVyeSB2YWx1ZSBtdXN0CiYjNDM7IyBiZSBhIHBsYWluIGRlY2ltYWwgbnVtYmVyLiBBIHBhcnNlIGZhaWx1cmUgaW4gcmVhZF90eF9jb3VudGVycyB5aWVsZHMKJiM0MzsjIGVtcHR5L2dhcmJsZWQgZmllbGRzLCB3aGljaCB0aGlzIGNoZWNrIHR1cm5zIGludG8gYW4gaW1tZWRpYXRlIEZBSUwuCiYjNDM7dmFsaWRfZGVjaW1hbHMoKQomIzQzO3sKJiM0MzsJbG9jYWwgdgomIzQzOwomIzQzOwlmb3IgdiBpbiAmIzM0OyRAJiMzNDs7IGRvCiYjNDM7CQlbWyAmIzM0OyR2JiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IHJldHVybiAxCiYjNDM7CWRvbmUKJiM0MzsJcmV0dXJuIDAKJiM0Mzt9CiYjNDM7CiYjNDM7c2V0dXBfdG9wbygpCiYjNDM7ewomIzQzOwlzZXR1cF9ucyBuc19kdXQgbnNfc2FuIG5zX3BlZXIgfHwgZXhpdCAkPwomIzQzOwomIzQzOwlpcCBsaW5rIGFkZCBkX2EgbmV0bnMgJiMzNDskbnNfZHV0JiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2EgbmV0bnMgJiMzNDskbnNfcGVlciYjMzQ7CiYjNDM7CWlwIGxpbmsgYWRkIGRfYiBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyAmIzM0OyRuc19wZWVyJiMzNDsKJiM0MzsJaXAgbGluayBhZGQgZF9pbCBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zICYjMzQ7JG5zX3NhbiYjMzQ7CiYjNDM7CiYjNDM7CSMgSFNSIHRhZ3MgYWRkIDYgYnl0ZXMgcGVyIGZyYW1lOyBnaXZlIHRoZSBMQU4gbGVncyBoZWFkcm9vbS4KJiM0MzsJZm9yIGlmYWNlIGluIGRfYSBkX2I7IGRvCiYjNDM7CQluc3ggJiMzNDskbnNfZHV0JiMzNDsgJiMzNDtpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFwKJiM0MzsJCQlpcCBsaW5rIHNldCAkaWZhY2UgdXAmIzM0OwomIzQzOwlkb25lCiYjNDM7CWZvciBpZmFjZSBpbiBwX2EgcF9iOyBkbwomIzQzOwkJbnN4ICYjMzQ7JG5zX3BlZXImIzM0OyAmIzM0O2lwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgXAomIzQzOwkJCWlwIGxpbmsgc2V0ICRpZmFjZSB1cCYjMzQ7CiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBzZXQgZF9pbCB1cCYjMzQ7CiYjNDM7CW5zeCAmIzM0OyRuc19zYW4mIzM0OyAmIzM0O2lwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMCYjMzQ7CiYjNDM7CiYjNDM7CW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgYWRkIGhzcjAgdHlwZSBoc3IgXAomIzQzOwkJc2xhdmUxIGRfYSBzbGF2ZTIgZF9iIGludGVybGluayBkX2lsIHByb3RvIDA7IFwKJiM0MzsJCWlwIGxpbmsgc2V0IGhzcjAgdXAmIzM0OwomIzQzOwluc3ggJiMzNDskbnNfcGVlciYjMzQ7ICYjMzQ7aXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcCiYjNDM7CQlzbGF2ZTEgcF9hIHNsYXZlMiBwX2IgcHJvdG8gMDsgXAomIzQzOwkJaXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjEmIzM0OwomIzQzOwomIzQzOwkjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXImIzM5O3Mgc3VwZXJ2aXNpb24gZnJhbWVzLgomIzQzOwlzbGVlcCAyCiYjNDM7fQomIzQzOwomIzQzO2NoZWNrX2ZlYXR1cmUoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGlmYWNlPSYjMzQ7JDImIzM0OwomIzQzOwlsb2NhbCBmZWF0dXJlPSYjMzQ7JDMmIzM0OwomIzQzOwlsb2NhbCB3YW50PSYjMzQ7JDQmIzM0OwomIzQzOwomIzQzOwlpZiBuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2V0aHRvb2wgLWsgJGlmYWNlJiMzNDsgfCBncmVwIC1xICYjMzQ7XiRmZWF0dXJlOiAkd2FudCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF0mIzM0OwomIzQzOwllbHNlCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7IyBPZmYtb3ItYWJzZW50IHZhcmlhbnQ6IGZhaWxzIG9ubHkgd2hlbiB0aGUgZmVhdHVyZSBpcyBwcmVzZW50IEFORCBvbiwKJiM0MzsjIHNvIGRldmljZXMgdGhhdCBzaW1wbHkgZG8gbm90IGxpc3QgdGhlIGZlYXR1cmUgZG8gbm90IGZhaWwgaXQuCiYjNDM7Y2hlY2tfZmVhdHVyZV9ub3Rfb24oKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGlmYWNlPSYjMzQ7JDImIzM0OwomIzQzOwlsb2NhbCBmZWF0dXJlPSYjMzQ7JDMmIzM0OwomIzQzOwomIzQzOwlpZiBuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2V0aHRvb2wgLWsgJGlmYWNlJiMzNDsgfCBncmVwIC1xICYjMzQ7XiRmZWF0dXJlOiBvbiYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBvbiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwllbHNlCiYjNDM7CQllY2hvICYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdJiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKCkKJiM0Mzt7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy4mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2IgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9pbCBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0dSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy4mIzM0OwomIzQzOwomIzQzOwllY2hvICYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBIVy1HUk8uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2EgcngtZ3JvLWh3IG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYiByeC1ncm8taHcgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9pbCByeC1ncm8taHcgb2ZmCiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuJiMzNDsKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmVfbm90X29uICYjMzQ7JG5zX2R1dCYjMzQ7IGhzcjAgdHgtdWRwLXNlZ21lbnRhdGlvbgomIzQzOwljaGVja19mZWF0dXJlX25vdF9vbiAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIHR4LWdzby1saXN0CiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPLWZhbWlseSBmZWF0dXJlcy4mIzM0OwomIzQzO30KJiM0MzsKJiM0MzthbGxvY193b3JrZGlyKCkKJiM0Mzt7CiYjNDM7CSMgQWxsb2NhdGVkIG9ubHkgaGVyZSwgbG9uZyBhZnRlciB0aGUgaW5pdGlhbCB0b3BvbG9neSBjbGVhbnVwLCBzbwomIzQzOwkjIGNsZWFudXAoKSBhdCBzZXR1cF90b3BvKCkgdGltZSBjYW4gbmV2ZXIgcmVtb3ZlIGl0LiBta3RlbXAgZmFpbHVyZQomIzQzOwkjIGlzIGEgaGFyZCB0ZXN0IGZhaWx1cmUuCiYjNDM7CXdvcmtkaXI9JChta3RlbXAgLWQgL3RtcC9oc3JfZ3JvX3Rlc3QuWFhYWFhYKSB8fCB7CiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbWt0ZW1wIC1kIGZhaWxlZCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0IDEKJiM0MzsJfQomIzQzOwljaG1vZCA3MDAgJiMzNDske3dvcmtkaXJ9JiMzNDsKJiM0MzsJcGlkZmlsZT0mIzM0OyR7d29ya2Rpcn0vaXBlcmYucGlkJiMzNDsKJiM0MzsJcmNmaWxlPSYjMzQ7JHt3b3JrZGlyfS9pcGVyZi5yYyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzOyMgTnVtZXJpYywgYWxpdmUsIGNvbW0gPT0gaXBlcmYzLCBhbmQgcmVhbGx5IG93bmVkIGJ5IHRoZSBnaXZlbiBuZXRucy4KJiM0Mzt2YWxpZF9zZXJ2ZXJfcGlkKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHBucz0mIzM0OyQxJiMzNDsgcD0mIzM0OyQyJiMzNDsKJiM0MzsKJiM0MzsJW1sgJiMzNDskcCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCByZXR1cm4gMQomIzQzOwlraWxsIC0wICYjMzQ7JHAmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCByZXR1cm4gMQomIzQzOwlbICYjMzQ7JChjYXQgL3Byb2MvJiMzNDskcCYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF0gfHwgcmV0dXJuIDEKJiM0MzsJaXAgbmV0bnMgcGlkcyAmIzM0OyRwbnMmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IGdyZXAgLXF4ICYjMzQ7JHAmIzM0OwomIzQzO30KJiM0MzsKJiM0MztzdGFydF9pcGVyZl9zZXJ2ZXIoKQomIzQzO3sKJiM0MzsJbG9jYWwgc3J2X25zPSYjMzQ7JDEmIzM0OwomIzQzOwlsb2NhbCBzcnZfaXA9JiMzNDskezI6LX0mIzM0OwomIzQzOwlsb2NhbCBjYW5kaWRhdGVfcGlkCiYjNDM7CiYjNDM7CSMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHMKJiM0MzsJIyByZWFsIGV4aXQgc3RhdHVzIChuZXRucyBzaGFyZXMgdGhlIFBJRCBuYW1lc3BhY2UgYW5kIHRoZSBob3N0IGZzKS4KJiM0MzsJYWxsb2Nfd29ya2RpcgomIzQzOwkjIHJlY29yZCB0aGUgc2VydmVyIG5hbWVzcGFjZSBmb3IgY2xlYW51cCgpIGJlZm9yZQomIzQzOwkjIGFueXRoaW5nIGNhbiBmYWlsIHdpdGggdGhlIHNlcnZlciBydW5uaW5nCiYjNDM7CWFjdGl2ZV9zcnZfbnM9JiMzNDskc3J2X25zJiMzNDsKJiM0MzsJKCBuc3ggJiMzNDskc3J2X25zJiMzNDsgJiMzNDtpcGVyZjMgLXMgLTEgJHtzcnZfaXA6JiM0MzstQiAkc3J2X2lwfSAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MSAmYW1wOyBcCiYjNDM7CQllY2hvIFwkISAmZ3Q7ICR7cGlkZmlsZX07IFwKJiM0MzsJCXdhaXQgXCQhOyBcCiYjNDM7CQllY2hvIFwkPyAmZ3Q7ICR7cmNmaWxlfSYjMzQ7ICkgJmFtcDsKJiM0MzsJc2VydmVyX3dyYXBwZXI9JCEKJiM0MzsJIyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvCiYjNDM7CSMgYXBwZWFyIGluc3RlYWQgb2YgcmFjaW5nIHRoZSByZWFkCiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJWyAtcyAmIzM0OyR7cGlkZmlsZX0mIzM0OyBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCXNsZWVwIDAuMQomIzQzOwlkb25lCiYjNDM7CWlmIFsgISAtcyAmIzM0OyR7cGlkZmlsZX0mIzM0OyBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQmIzM0OyBcCiYjNDM7CQkJJiMzNDsobm8gcGlkZmlsZSkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWNhbmRpZGF0ZV9waWQ9JCgmbHQ7JiMzNDske3BpZGZpbGV9JiMzNDspCiYjNDM7CWlmICEgdmFsaWRfc2VydmVyX3BpZCAmIzM0OyRzcnZfbnMmIzM0OyAmIzM0OyR7Y2FuZGlkYXRlX3BpZH0mIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgcGlkICYjMzk7JHtjYW5kaWRhdGVfcGlkfSYjMzk7JiMzNDsgXAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHZhbGlkYXRpb24mIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CSMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvbgomIzQzOwlpcGVyZl9waWQ9JiMzNDske2NhbmRpZGF0ZV9waWR9JiMzNDsKJiM0MzsJc2xlZXAgMQomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIFByaW50ICYjMzQ7Jmx0O2J5dGVzJmd0OyAmbHQ7cGFja2V0cyZndDsmIzM0OyBmb3IgZXhhY3RseSBvbmUgVFggcmVjb3JkIG9mIG5zL2RldjsgYW55dGhpbmcKJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC4KJiM0MztyZWFkX3R4X2NvdW50ZXJzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSYjMzQ7JDEmIzM0OyBkZXY9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIG91dCBjbnQKJiM0MzsKJiM0MzsJb3V0PSQobnN4ICYjMzQ7JG5zJiMzNDsgJiMzNDtpcCAtcyBsaW5rIHNob3cgJGRldiYjMzQ7IHwgXAomIzQzOwkJYXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OykKJiM0MzsJY250PSQoZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLWMgJiMzOTteWzAtOV0qIFswLTldKiQmIzM5OykKJiM0MzsJaWYgWyAmIzM0OyRjbnQmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2JiMzNDsgXAomIzQzOwkJCSYjMzQ7KHJlY29yZHM9JGNudCkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJZWNobyAmIzM0OyRvdXQmIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIFByaW50ICYjMzQ7Jmx0O2J5dGVzJmd0OyAmbHQ7cGFja2V0cyZndDsmIzM0OyBmb3IgZXhhY3RseSBvbmUgUlggcmVjb3JkIG9mIG5zL2RldjsgdGhlCiYjNDM7IyBzYW1lIHNpbmdsZS1yZWNvcmQgZGlzY2lwbGluZSBhcyByZWFkX3R4X2NvdW50ZXJzLgomIzQzO3JlYWRfcnhfY291bnRlcnMoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7IGRldj0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgb3V0IGNudAomIzQzOwomIzQzOwlvdXQ9JChuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2lwIC1zIGxpbmsgc2hvdyAkZGV2JiMzNDsgfCBcCiYjNDM7CQlhd2sgJiMzOTsvXiAmIzQzO1JYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfSYjMzk7KQomIzQzOwljbnQ9JChlY2hvICYjMzQ7JG91dCYjMzQ7IHwgZ3JlcCAtYyAmIzM5O15bMC05XSogWzAtOV0qJCYjMzk7KQomIzQzOwlpZiBbICYjMzQ7JGNudCYjMzQ7IC1uZSAxIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBjYW5ub3QgcGFyc2UgUlggY291bnRlcnMgb2YgJG5zLyRkZXYmIzM0OyBcCiYjNDM7CQkJJiMzNDsocmVjb3Jkcz0kY250KSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwllY2hvICYjMzQ7JG91dCYjMzQ7CiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwomIzQzO2V2YWxfY291bnRlcl9kZWx0YSgpCiYjNDM7ewomIzQzOwlsb2NhbCBuYW1lPSYjMzQ7JDEmIzM0OyBiMD0mIzM0OyQyJiMzNDsgcDA9JiMzNDskMyYjMzQ7IGIxPSYjMzQ7JDQmIzM0OyBwMT0mIzM0OyQ1JiMzNDsgb3A9JiMzNDskNiYjMzQ7IGxpbWl0PSYjMzQ7JDcmIzM0OwomIzQzOwlsb2NhbCBiZCBwZAomIzQzOwomIzQzOwlpZiAhIFtbICYjMzQ7JGIwJiMzNDsgPX4gXlswLTldJiM0MzskICZhbXA7JmFtcDsgJiMzNDskYjEmIzM0OyA9fiBeWzAtOV0mIzQzOyQgJmFtcDsmYW1wOyBcCiYjNDM7CQkmIzM0OyRwMCYjMzQ7ID1+IF5bMC05XSYjNDM7JCAmYW1wOyZhbXA7ICYjMzQ7JHAxJiMzNDsgPX4gXlswLTldJiM0MzskIF1dOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWUmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWJkPSQoKGIxIC0gYjApKQomIzQzOwlwZD0kKChwMSAtIHAwKSkKJiM0MzsJaWYgWyAmIzM0OyRiZCYjMzQ7IC1sdCAwIF0gfHwgWyAmIzM0OyRwZCYjMzQ7IC1sZSAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBjb3VudGVyIGRlbHRhIGludmFsaWQgZm9yICRuYW1lJiMzNDsgXAomIzQzOwkJCSYjMzQ7KGJ5dGVzPSRiZCBwa3RzPSRwZCkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWlmIFsgJiMzNDskb3AmIzM0OyA9ICYjMzQ7Z3QmIzM0OyBdOyB0aGVuCiYjNDM7CQlpZiBbICYjMzQ7JGJkJiMzNDsgLWxlICQoKHBkICogbGltaXQpKSBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0O0ZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCAmbHQ7PSAkbGltaXQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJCXJldD0xCiYjNDM7CQkJcmV0dXJuIDEKJiM0MzsJCWZpCiYjNDM7CWVsc2UKJiM0MzsJCWlmIFsgJiMzNDskYmQmIzM0OyAtZ3QgJCgocGQgKiBsaW1pdCkpIF07IHRoZW4KJiM0MzsJCQllY2hvICYjMzQ7RkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkICZndDsgJGxpbWl0JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCQlyZXQ9MQomIzQzOwkJCXJldHVybiAxCiYjNDM7CQlmaQomIzQzOwlmaQomIzQzOwllY2hvICYjMzQ7SU5GTzogJG5hbWUgY291bnRlciBkZWx0YSBieXRlcz0kYmQgcGFja2V0cz0kcGQmIzM0OyBcCiYjNDM7CQkmIzM0OyhvcCAkb3AgbGltaXQgJGxpbWl0KSBbIE9LIF0mIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbjogYSBwbGFpbiBTQU4gYWdncmVnYXRlIGVudGVyaW5nIGEgUFJQCiYjNDM7IyBMQU4gc2xhdmUgbXVzdCBiZSBzZWdtZW50ZWQgYXQgdGhlIGZvcndhcmQgZW50cnksIG5vdCBkcm9wcGVkLiBQUlAKJiM0MzsjIGRyb3BzIHNsYXZlLXRvLXNsYXZlIGZvcndhcmRpbmcgYnkgZGVzaWduIChwcnBfZHJvcF9mcmFtZSksIHNvIHRoZQomIzQzOyMgY29uc3VtZXIgb2YgTEFOLXNsYXZlIFNBTiB0cmFmZmljIGlzIGxvY2FsIGRlbGl2ZXJ5IHRvIHRoZSBtYXN0ZXIuCiYjNDM7IyBUd28gaW5kZXBlbmRlbnQgb3JhY2xlczogdGhlIFNBTi1zaWRlIHByb29mIHRoYXQgYWdncmVnYXRlcyByZWFsbHkKJiM0MzsjIGFycml2ZWQgYXQgdGhlIERVVCwgYW5kIHRoZSB2b2x1bWUgJiM0MzsgcGVyLWZyYW1lIHNoYXBlIG9mIHRoZSBsb2NhbAomIzQzOyMgZGVsaXZlcnkuIE9uIHRoZSBicm9rZW4gZ2F0ZSB0aGUgYWdncmVnYXRlcyBhcmUgZHJvcHBlZCBhbmQgVENQCiYjNDM7IyBjcmF3bHMgb24gcmV0cmFuc21pdHRlZCBzaW5nbGUgc2VnbWVudHMsIHNlcGFyYXRpbmcgdGhlIGtlcm5lbHMgYnkKJiM0MzsjIGFuIG9yZGVyIG9mIG1hZ25pdHVkZSBpbiBkZWxpdmVyZWQgYnl0ZXMuCiYjNDM7ZG9fbGFuc2FuX2dzb190ZXN0KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHBycF9pcD0mIzM0OzEwLjk5LjEuMSYjMzQ7IGxzX2lwPSYjMzQ7MTAuOTkuMS4xMCYjMzQ7CiYjNDM7CWxvY2FsIG91dCBzYW5fYjAgc2FuX3AwIHNhbl9iMSBzYW5fcDEKJiM0MzsJbG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSByX2IwIHJfcDAgcl9iMSByX3AxCiYjNDM7CiYjNDM7CXNldHVwX25zIG5zX2xzIHx8IGV4aXQgJD8KJiM0MzsKJiM0MzsJaXAgbGluayBhZGQgZF9wYSBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIGxzX2EgbmV0bnMgJiMzNDskbnNfbHMmIzM0OwomIzQzOwlpcCBsaW5rIGFkZCBkX3BiIG5ldG5zICYjMzQ7JG5zX2R1dCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgbHNfcCBuZXRucyAmIzM0OyRuc19scyYjMzQ7CiYjNDM7CiYjNDM7CW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgc2V0IGRfcGEgbXR1IDE2MDAgdXAmIzM0OwomIzQzOwluc3ggJiMzNDskbnNfZHV0JiMzNDsgJiMzNDtpcCBsaW5rIHNldCBkX3BiIG10dSAxNjAwIHVwJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX2xzJiMzNDsgJiMzNDtpcCBsaW5rIHNldCBsc19hIG10dSAxNjAwIHVwOyBcCiYjNDM7CQlpcCBsaW5rIHNldCBsc19wIG10dSAxNjAwIHVwOyBpcCBhZGRyIGFkZCAkbHNfaXAvMjQgZGV2IGxzX2EmIzM0OwomIzQzOwomIzQzOwkjIFBSUCBEVVQgd2l0aCB0aGUgU0FOIG9uIGEgTEFOIHNsYXZlOiBwbGFpbiBTQU4gYWdncmVnYXRlcyBhcmUKJiM0MzsJIyB2YWxpZCB0cmFmZmljIG9uIGEgUFJQIExBTiBhbmQgbXVzdCBub3QgYmUgZHJvcHBlZC4KJiM0MzsJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBhZGQgcHJwMCB0eXBlIGhzciBcCiYjNDM7CQlzbGF2ZTEgZF9wYSBzbGF2ZTIgZF9wYiBwcm90byAxOyBcCiYjNDM7CQlpcCBsaW5rIHNldCBwcnAwIHVwOyBpcCBhZGRyIGFkZCAkcHJwX2lwLzI0IGRldiBwcnAwJiMzNDsKJiM0MzsKJiM0MzsJIyBMZXQgc3VwZXJ2aXNpb24gZnJhbWVzIGNvbnZlcmdlLgomIzQzOwlzbGVlcCAyCiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBFbmFibGluZyBUU08vR1NPIG9uIHRoZSBMQU4tc2lkZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CW5zeCAmIzM0OyRuc19scyYjMzQ7ICYjMzQ7ZXRodG9vbCAtSyBsc19hIHRzbyBvbiBnc28gb24mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2xzJiMzNDsgbHNfYSB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb24KJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0NvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBMQU4tc2lkZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CiYjNDM7CXN0YXJ0X2lwZXJmX3NlcnZlciAmIzM0OyRuc19kdXQmIzM0OyAmIzM0OyRwcnBfaXAmIzM0OyB8fCByZXR1cm4KJiM0MzsKJiM0MzsJcmVhZCAtciByX2IwIHJfcDAgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfcnhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgcHJwMCkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBzYW5fYjAgc2FuX3AwICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX2xzJiMzNDsgbHNfYSkKJiM0MztFT0YKJiM0MzsJaWYgISB2YWxpZF9kZWNpbWFscyAmIzM0OyRyX2IwJiMzNDsgJiMzNDskcl9wMCYjMzQ7ICYjMzQ7JHNhbl9iMCYjMzQ7ICYjMzQ7JHNhbl9wMCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogYmFzZWxpbmUgY291bnRlciBzbmFwc2hvdCBpbnZhbGlkJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwomIzQzOwlpZiAhIG91dD0kKG5zeCAmIzM0OyRuc19scyYjMzQ7ICYjMzQ7dGltZW91dCA2MCBpcGVyZjMgLWMgJHBycF9pcCAtTSAxNDQ2IFwKJiM0MzsJCS1iIDJHIC10IDEwJiMzNDsgMiZndDsmYW1wOzEpOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogTEFOLXNsYXZlIEdTTyBsb2NhbC1kZWxpdmVyeSBzdHJlYW0gZmFpbGVkOiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CXJlYWQgLXIgcl9iMSByX3AxICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3J4X2NvdW50ZXJzICYjMzQ7JG5zX2R1dCYjMzQ7IHBycDApCiYjNDM7RU9GCiYjNDM7CXJlYWQgLXIgc2FuX2IxIHNhbl9wMSAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19scyYjMzQ7IGxzX2EpCiYjNDM7RU9GCiYjNDM7CWlmICEgdmFsaWRfZGVjaW1hbHMgJiMzNDskcl9iMSYjMzQ7ICYjMzQ7JHJfcDEmIzM0OyAmIzM0OyRzYW5fYjEmIzM0OyAmIzM0OyRzYW5fcDEmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGZpbmFsIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsKJiM0MzsJIyBPcmFjbGUgMSAtIGFnZ3JlZ2F0ZXMgcmVhbGx5IGFycml2ZWQ6IHRoZSBTQU4gZW1pdHRlZAomIzQzOwkjIHN1cGVyLXBhY2tldHMgdG93YXJkIHRoZSBEVVQuCiYjNDM7CWV2YWxfY291bnRlcl9kZWx0YSAmIzM0O1NBTiBsc19hIFRYJiMzNDsgJiMzNDskc2FuX2IwJiMzNDsgJiMzNDskc2FuX3AwJiMzNDsgXAomIzQzOwkJJiMzNDskc2FuX2IxJiMzNDsgJiMzNDskc2FuX3AxJiMzNDsgZ3QgJiMzNDskU0FOX0FWR19NSU4mIzM0OwomIzQzOwlbICYjMzQ7JHtyZXQ6LTB9JiMzNDsgLWVxIDAgXSB8fCByZXR1cm4KJiM0MzsKJiM0MzsJIyBPcmFjbGUgMiAtIGxvY2FsIGRlbGl2ZXJ5IG9mIHRob3NlIGFnZ3JlZ2F0ZXM6IHZvbHVtZSBhbmQKJiM0MzsJIyBwZXItZnJhbWUgc2hhcGUgb24gdGhlIFBSUCBtYXN0ZXIuIFRoZSB2b2x1bWUgZ2F0ZSBzZXBhcmF0ZXMKJiM0MzsJIyBmdWxsIGRlbGl2ZXJ5IGZyb20gdGhlIHJldHJhbnNtaXQgY3Jhd2wgdGhlIGJyb2tlbiBnYXRlIGxlYXZlczsKJiM0MzsJIyB0aGUgYXZlcmFnZSBnYXRlIHByb3ZlcyB0aGUgYnl0ZXMgYXJyaXZlZCBwZXItZnJhbWUuCiYjNDM7CWlmIFsgJCgocl9iMSAtIHJfYjApKSAtbHQgMTAwMDAwMDAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBMQU4tc2xhdmUgbG9jYWwgZGVsaXZlcnkgZGVncmFkZWQmIzM0OyBcCiYjNDM7CQkJJiMzNDsocHJwMCBSWCBkZWx0YSAkKChyX2IxIC0gcl9iMCkpIGJ5dGVzICZsdDsgMTAwMDAwMDAwKSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWlmIFsgJCgocl9iMSAtIHJfYjApKSAtZ3QgJCgoIChyX3AxIC0gcl9wMCkgKiBMQU5fQVZHX01BWCApKSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbG9jYWwgZGVsaXZlcnkgbm90IHBlci1mcmFtZSYjMzQ7IFwKJiM0MzsJCQkmIzM0OyhhdmcgJCgoIChyX2IxIC0gcl9iMCkgLyAocl9wMSAtIHJfcDApICkpICZndDsgJExBTl9BVkdfTUFYKSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBMQU4tc2xhdmUgbG9jYWwgZGVsaXZlcnkgcHJwMCBSWCBkZWx0YSYjMzQ7IFwKJiM0MzsJCSYjMzQ7JCgocl9iMSAtIHJfYjApKSBieXRlcyAvICQoKHJfcDEgLSByX3AwKSkgcGt0cyBbIE9LIF0mIzM0OwomIzQzOwlyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm4KJiM0MzsJZWNobyAmIzM0O0lORk86IExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbiBbIE9LIF0mIzM0OwomIzQzO30KJiM0MzsKJiM0Mztkb190c29fc3RyZWFtX3Rlc3QoKQomIzQzO3sKJiM0MzsJbG9jYWwgb3V0IHNlbmRlcl9yZXRyCiYjNDM7CWxvY2FsIHNhbl9iMCBzYW5fcDAgc2FuX2IxIHNhbl9wMQomIzQzOwlsb2NhbCBhX2IwIGFfcDAgYV9iMSBhX3AxIGJfYjAgYl9wMCBiX2IxIGJfcDEKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IEVuYWJsaW5nIFRTTy9HU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7ZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19zYW4mIzM0OyBzMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb24KJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0NvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtJmd0OyBwZWVyIHRocm91Z2ggdGhlIEhTUiBEVVQuJiMzNDsKJiM0MzsJc3RhcnRfaXBlcmZfc2VydmVyICYjMzQ7JG5zX3BlZXImIzM0OyB8fCByZXR1cm4KJiM0MzsKJiM0MzsJIyBDb3VudGVyIHNuYXBzaG90cyBhcm91bmQgdGhlIHN0cmVhbSB3aW5kb3cuIFRoZSBTQU4tc2lkZSBhdmVyYWdlCiYjNDM7CSMgbXVzdCBleGNlZWQgU0FOX0FWR19NSU4gKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IEdTTyBzdXBlci1wYWNrZXRzCiYjNDM7CSMgcmVhbGx5IGxlZnQgdGhlIFNBTik7IGVhY2ggRFVUIExBTiBsZWcgbXVzdCBzdGF5IHVuZGVyIExBTl9BVkdfTUFYCiYjNDM7CSMgKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IGJ1bGsgb3V0cHV0IHdhcyBzZWdtZW50ZWQgcGVyLWZyYW1lKS4gVGhlc2UKJiM0MzsJIyBhcmUgYWdncmVnYXRlIGRpc2NyaW1pbmF0b3JzLCBub3QgYSBwZXItZnJhbWUgbWF4aW11bSBwcm9vZi4KJiM0MzsJc2FuX2IwPTA7IHNhbl9wMD0wOyBhX2IwPTA7IGFfcDA9MDsgYl9iMD0wOyBiX3AwPTAKJiM0MzsJcmVhZCAtciBzYW5fYjAgc2FuX3AwICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX3NhbiYjMzQ7IHMwKQomIzQzO0VPRgomIzQzOwlyZWFkIC1yIGFfYjAgYV9wMCAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19kdXQmIzM0OyBkX2EpCiYjNDM7RU9GCiYjNDM7CXJlYWQgLXIgYl9iMCBiX3AwICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYikKJiM0MztFT0YKJiM0MzsJaWYgISB2YWxpZF9kZWNpbWFscyAmIzM0OyRzYW5fYjAmIzM0OyAmIzM0OyRzYW5fcDAmIzM0OyAmIzM0OyRhX2IwJiMzNDsgJiMzNDskYV9wMCYjMzQ7IFwKJiM0MzsJCSYjMzQ7JGJfYjAmIzM0OyAmIzM0OyRiX3AwJiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBiYXNlbGluZSBUWCBjb3VudGVyIHNuYXBzaG90IGludmFsaWQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CiYjNDM7CSMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eQomIzQzOwkjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuCiYjNDM7CSMgVW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJIGVkZ2UgcmF0ZXMgd2l0aG91dCBpbmRpY2F0aW5nIGEKJiM0MzsJIyBmdW5jdGlvbmFsIHByb2JsZW0uCiYjNDM7CWlmICEgb3V0PSQobnN4ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7dGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcCiYjNDM7CQktYiAyRyAtdCAxMCYjMzQ7IDImZ3Q7JmFtcDsxKTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBjbGllbnQgZmFpbGVkOiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CXJlYWQgLXIgc2FuX2IxIHNhbl9wMSAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19zYW4mIzM0OyBzMCkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBhX2IxIGFfcDEgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgZF9hKQomIzQzO0VPRgomIzQzOwlyZWFkIC1yIGJfYjEgYl9wMSAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19kdXQmIzM0OyBkX2IpCiYjNDM7RU9GCiYjNDM7CWlmICEgdmFsaWRfZGVjaW1hbHMgJiMzNDskc2FuX2IxJiMzNDsgJiMzNDskc2FuX3AxJiMzNDsgJiMzNDskYV9iMSYjMzQ7ICYjMzQ7JGFfcDEmIzM0OyBcCiYjNDM7CQkmIzM0OyRiX2IxJiMzNDsgJiMzNDskYl9wMSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtTQU4gczAgVFgmIzM0OyAmIzM0OyRzYW5fYjAmIzM0OyAmIzM0OyRzYW5fcDAmIzM0OyAmIzM0OyRzYW5fYjEmIzM0OyAmIzM0OyRzYW5fcDEmIzM0OyBcCiYjNDM7CQlndCAmIzM0OyRTQU5fQVZHX01JTiYjMzQ7CiYjNDM7CWV2YWxfY291bnRlcl9kZWx0YSAmIzM0O0RVVCBkX2EgVFgmIzM0OyAmIzM0OyRhX2IwJiMzNDsgJiMzNDskYV9wMCYjMzQ7ICYjMzQ7JGFfYjEmIzM0OyAmIzM0OyRhX3AxJiMzNDsgXAomIzQzOwkJbGUgJiMzNDskTEFOX0FWR19NQVgmIzM0OwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtEVVQgZF9iIFRYJiMzNDsgJiMzNDskYl9iMCYjMzQ7ICYjMzQ7JGJfcDAmIzM0OyAmIzM0OyRiX2IxJiMzNDsgJiMzNDskYl9wMSYjMzQ7IFwKJiM0MzsJCWxlICYjMzQ7JExBTl9BVkdfTUFYJiMzNDsKJiM0MzsJWyAmIzM0OyR7cmV0Oi0wfSYjMzQ7IC1lcSAwIF0gfHwgcmV0dXJuCiYjNDM7CiYjNDM7CSMgc3VjY2VzcyBwYXRoOiBib3VuZGVkIHJlYXAgd2l0aCB0aGUgc2VydmVyJiMzOTtzIHJlYWwgc3RhdHVzCiYjNDM7CXJlYXBfaXBlcmZfc2VydmVyIHx8IHJldHVybgomIzQzOwomIzQzOwkjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUCiYjNDM7CSMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlcgomIzQzOwkjIGdhdGVzICh0aGUgY291bnRlciBpbmVxdWFsaXRpZXMgYWJvdmUgYXJlIHRoZSBwcmltYXJ5IGV2aWRlbmNlKS4KJiM0MzsJc2VuZGVyX3JldHI9JChlY2hvICYjMzQ7JG91dCYjMzQ7IHwgYXdrICYjMzk7L3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0mIzM5OykKJiM0MzsJaWYgWyAmIzM0OyQoZWNobyAmIzM0OyRzZW5kZXJfcmV0ciYjMzQ7IHwgZ3JlcCAtRWMgJiMzOTteWzAtOV0mIzQzOyQmIzM5OykmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIHNlbmRlciByZXRyYW5zbWl0cyByZWxpYWJseSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7JiMzNDsgXAomIzQzOwkJJiMzNDtzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDskb3V0JiMzNDsgfCBncmVwIC1FICYjMzQ7c2VuZGVyfHJlY2VpdmVyJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hlY2tfcHJlcmVxdWlzaXRlcwomIzQzO2NoZWNrX3Rvb2wgZXRodG9vbAomIzQzO2NoZWNrX3Rvb2wgaXBlcmYzCiYjNDM7Y2hlY2tfdG9vbCB0aW1lb3V0CiYjNDM7CiYjNDM7IyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LgomIzQzO2lmICEgaXAgbGluayBoZWxwIGhzciAyJmd0OyZhbXA7MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydCYjMzQ7CiYjNDM7CWV4aXQgJGtzZnRfc2tpcAomIzQzO2ZpCiYjNDM7CiYjNDM7c2V0dXBfdG9wbwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC0mZ3Q7IHBlZXIgdGhyb3VnaCB0aGUgRFVUKS4mIzM0OwomIzQzO2RvX3BpbmcgJiMzNDskbnNfc2FuJiMzNDsgJiMzNDskcGVlcl9pcCYjMzQ7CiYjNDM7c3RvcF9pZl9lcnJvciAmIzM0O0luaXRpYWwgdmFsaWRhdGlvbiBmYWlsZWQuJiMzNDsKJiM0MzsKJiM0Mztkb19ncm9fZmVhdHVyZV9jaGVja3MKJiM0Mztkb190c29fc3RyZWFtX3Rlc3QKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7R1NPIHN1cGVyLXBhY2tldCBzdHJlYW0gdGVzdCBmYWlsZWQuJiMzNDsKJiM0MzsKJiM0Mztkb19sYW5zYW5fZ3NvX3Rlc3QKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7TEFOLXNsYXZlIHBsYWluLUdTTyByZWdyZXNzaW9uIGZhaWxlZC4mIzM0OwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBBbGwgZ29vZC4mIzM0OwomIzQzO2NsZWFudXAKJiM0MztleGl0ICRyZXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIU1IgR1NPIFN1cGVyLVBhY2tldCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYG5ldGlmX2Rpc2FibGVfZ3JvYCBhbmQgYGRldl9kaXNhYmxlX2dyb2AgaW50byB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBhZGRpdGlvbiB0byB0aGUgZGV2aWNlIEFQSSwgcmVhbGx5LiAgVGhlIG1haW4gdGhydXN0IHNlZW1zIHRvIGJlIGVuYWJsaW5nIEhTUiB0byBwcm9wZXJseSBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgSFNSIGZpbGVzOiBgaHNyX2RldmljZS5jYCwgYGhzcl9mb3J3YXJkLmNgLCBhbmQgYGhzcl9zbGF2ZS5jYC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGNoYW5nZXMgdG8gYGhzcl9mb3J3YXJkLmNgLiAgTGV0JiMzOTtzIHNlZS4uLgoKQWgsIHllcywgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQgR1NPIHNlZ21lbnRhdGlvbiB3aXRoaW4gYGhzcl9mb3J3YXJkX3NrYmAuICBJZiB0aGUgU0tCIGlzbiYjMzk7dCBhIEdTTyBwYWNrZXQsIGl0IGp1c3QgZm9yd2FyZHMgaXQgYXMtaXMuIE1ha2VzIHNlbnNlLiBCdXQgaWYgaXQgKmlzKiBhIEdTTyBwYWNrZXQsIGl0JiMzOTtzIHNlZ21lbnRlZCB1c2luZyBgX19za2JfZ3NvX3NlZ21lbnRgIGFuZCB0aGVuIGVhY2ggc2VnbWVudCBpcyBmb3J3YXJkZWQgaW5kaXZpZHVhbGx5LiBUaGF0JiMzOTtzIHRoZSBjb3JyZWN0IGFwcHJvYWNoLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgZGlzYWJsaW5nIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcyBpbiBgaHNyX3BvcnRkZXZfc2V0dXBgIHRvby4gIE1ha2VzIHNlbnNlLCB3ZSBjYW4mIzM5O3QgaGF2ZSBib3RoIEdSTyBhbmQgc2VnbWVudGF0aW9uLiAgVGhlIGNvbW1lbnQgbWVudGlvbnMgdGhhdCBkaXNhYmxpbmcgR1JPIGlzICYjMzQ7YmVzdC1lZmZvcnQsJiMzNDsgd2hpY2ggbWVhbnMgdGhlIGRyaXZlciBoYXMgdG8gcmVzcGVjdCBpdC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBhbmQgbWlnaHQgbmVlZCBtb3JlIGRpc2N1c3Npb24gcmVnYXJkaW5nIGhhcmR3YXJlIHN1cHBvcnQuCgpUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlLCBpbXBhY3RpbmcgYm90aCB0aGUgY29yZSBuZXR3b3JrIGRldmljZSBBUEkgKGBkZXZfZGlzYWJsZV9ncm9gKSBhbmQgaG93IEhTUiBvcGVyYXRlcyBpbnRlcm5hbGx5LgoKVGhlIGtleSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIGFib3V0IHRlc3RpbmcuIENhbiBIU1IgYmUgdGVzdGVkIGVmZmVjdGl2ZWx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIEdvb2QuIFRoZXkmIzM5O3ZlIGFkZGVkIGEgc2VsZnRlc3Qgc3BlY2lmaWNhbGx5IGZvciBgaHNyX2dyb19zdXBlcnBhY2tldC5zaGAuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24g4oCTIHRoYXQgbWVhbnMgaXQmIzM5O3MgZGVtb25zdHJhYmxlLiBJdCBzZWVtcyBsaWtlIHVzaW5nIHZldGggZGV2aWNlcyBzaG91bGQgd29yaywgc2luY2UgSFNSIGlzIGVzc2VudGlhbGx5IGEgc29mdHdhcmUtZGVmaW5lZCBwcm90b2NvbC4gIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxpY2F0ZSBpdCBsaWtlIGJvbmRpbmcgb3IgYnJpZGdpbmcuCgpOb3csIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSBIU1IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQgbWUgZ28gZmluZCBgbmV0L2hzci9LY29uZmlnYCB0byBjb25maXJtIGV2ZXJ5dGhpbmcgaXMgd2hlcmUgSSBleHBlY3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhTUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWctNS1cbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1Jcbm5ldC9oc3IvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNjYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgSFNSKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgSFNSIGltcGxlbWVudGF0aW9uLiBUaGUga2V5IGNvbmZpZyBvcHRpb24sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgYEhTUmAuIE5vdywgdG8gZmluZCB0aGUgbW9zdCBmcnVpdGZ1bCBhcmVhcyBmb3IgZnV6emluZywgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGZ1bmN0aW9ucy4KClJpZ2h0IG9mZiB0aGUgYmF0LCBgaHNyX2ZvcndhcmRfc2tiYCBzZWVtcyBsaWtlIGEgcHJpbWUgdGFyZ2V0LiBJdCYjMzk7cyBnb3QgdGhlIHJpbmcgb2YgYSBjb3JlIHByb2Nlc3NpbmcgZnVuY3Rpb24uIFRoZW4gdGhlcmUmIzM5O3MgYGhzcl9oYW5kbGVfZnJhbWVgLCB3aGljaCBpcyB0aGUgUlggaGFuZGxlciBmb3IgSFNSIHNsYXZlIGRldmljZXMgLSBhbHNvIGxpa2VseSB0byBiZSB2YWx1YWJsZS4gYGhzcl9kZXZfeG1pdGAgaXMgdGhlIFRYIGhhbmRsZXIgZm9yIHRoZSBIU1IgbWFzdGVyIGRldmljZSwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGluIHNjb3BlLiBJIHNlZSB0aGF0IGBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90b2AgaXMgc3RhdGljLCBtZWFuaW5nIEkgY2FuJiMzOTt0IGRpcmVjdGx5IHRhcmdldCBpdC4gSG93ZXZlciwgaXQgKmlzKiBjYWxsZWQgYnkgYGhzcl9mb3J3YXJkX3NrYmAsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBkdXJpbmcgYW5hbHlzaXMsIG9yIGJ5IGZ1enppbmcgYGhzcl9mb3J3YXJkX3NrYmAgSSB3aWxsIGltcGxpY2l0bHkgYmUgdGVzdGluZyBgaHNyX2dzb19lZmZlY3RpdmVfcHJvdG9gLiBgZGV2X2Rpc2FibGVfZ3JvYCBpcyBleHBvcnRlZCwgc28gaXQmIzM5O3MgY2FsbGJsZSBieSBvdGhlciBtb2R1bGVzLCBidXQgaXQgbG9va3MgbGlrZSBhIHNpbXBsZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgYW5kIGh1bnQgZm9yIGFueSBleHBvcnRlZCBvciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLCBhcyB0aGVzZSBhcmUgdGhlIG9uZXMgSSYjMzk7bGwgYmUgYWJsZSB0byBkaXJlY3RseSB0YXJnZXQgd2l0aCBteSBmdXp6aW5nIGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgaHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2ZvcndhcmQuYz03Nzc9c3RhdGljIF9fYmUxNiBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MTQtXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6ODE1OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBIU1IgRnJhbWUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBIU1IgaW1wbGVtZW50YXRpb24gYW5kIEkmIzM5O3ZlIGdvdCBhIHNwZWNpZmljIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZC4gYGhzcl9mb3J3YXJkX3NrYmAuLi4gSSBub3RpY2VkIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEJ1dCB3aGF0IGFib3V0IHRoZSBvdGhlciBtYWpvciBmdW5jdGlvbiBpbnZvbHZlZCBpbiBoYW5kbGluZyBIU1IgZnJhbWVzLCBgaHNyX2hhbmRsZV9mcmFtZWA/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSBzY29wZSBhbmQgdmlzaWJpbGl0eSBvZiB0aGF0IG9uZS4gSXMgaXQgYWxzbyBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGUgSFNSIG1vZHVsZSwgb3IgaXMgaXQgYXBwcm9wcmlhdGVseSBsaW1pdGVkIGluIGl0cyBzY29wZT8gVW5kZXJzdGFuZGluZyB0aGUgc3RhdGljL25vbi1zdGF0aWMgc3RhdHVzIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbW9kdWxlJiMzOTtzIHN0cnVjdHVyZSBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29yayBzdGFjay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGZ1bmN0aW9uJiMzOTtzIHZpc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2hhbmRsZV9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX3NsYXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3Jfc2xhdmUuYz0xOT1ib29sIGhzcl9pbnZhbGlkX2Rhbl9pbmdyZXNzX2ZyYW1lKF9fYmUxNiBwcm90b2NvbClcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTIzLVxubmV0L2hzci9oc3Jfc2xhdmUuYzoyNDpzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMjUte1xuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmM9ODU9Ym9vbCBoc3JfcG9ydF9leGlzdHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODYte1xubmV0L2hzci9oc3Jfc2xhdmUuYzo4NzpcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVx1MDAzZXJ4X2hhbmRsZXIpID09IGhzcl9oYW5kbGVfZnJhbWU7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg4LX1cbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTEzMj1zdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTU5LVxubmV0L2hzci9oc3Jfc2xhdmUuYzoxNjA6XHRyZXMgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcihkZXYsIGhzcl9oYW5kbGVfZnJhbWUsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy0xNjEtXHRpZiAocmVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqSW50ZXJuYWwgSFNSIEZyYW1lIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBjb2RlIGFuZCBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgZnJhbWVzIGFyZSBtYW5hZ2VkLiBUaGUga2V5IHRha2Vhd2F5IGhlcmUgaXMgdGhhdCBgaHNyX2hhbmRsZV9mcmFtZWAgaXMgZGVjbGFyZWQgYXMgKnN0YXRpYyouIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgYSBmaWxlLWxvY2FsIGZ1bmN0aW9uLiBJdCYjMzk7cyBub3QgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0IGl0JiMzOTtzIGRlZmluZWQgaW4uIFRoYXTigJlzIHByb2JhYmx5IGJlY2F1c2UgaXQmIzM5O3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCBub3QgcGFydCBvZiB0aGUgSFNSIEFQSSB0aGF0JiMzOTtzIGV4cG9zZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEl0JiMzOTtzIGRvaW5nIHNvbWV0aGluZyBzcGVjaWZpYyB3aXRoaW4gdGhlIEhTUiBkZXZpY2UgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBhbmQgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4KClRoZW4sIHRoZXJl4oCZcyBgaHNyX2Rldl94bWl0YCwgd2hpY2ggSSYjMzk7bSBzZWVpbmcgZGVmaW5lZCBpbiBgbmV0L2hzci9oc3JfZGV2aWNlLmNgLiBUaGF04oCZcyBteSBwcmltYXJ5IHBvaW50IG9mIGludGVyZXN0LiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gb2YgZnJhbWVzIGZyb20gdGhlIEhTUiBkZXZpY2UuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIEhTUiBkZXZpY2VzIHRvIHNlbmQgZnJhbWVzLiBJIHNob3VsZCBjaGVjayBpZiBpdCBoYW5kbGVzIGFueSBzcGVjaWFsIEhTUi1zcGVjaWZpYyBoZWFkZXIgZm9ybWF0dGluZyBvciBwYWNrZXQgZHVwbGljYXRpb24sIGFzIEhTUiBpcyBhYm91dCByZWR1bmRhbmN5LiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gaW1wbGVtZW50aW5nIHRoZSByZWR1bmRhbmN5IG1lY2hhbmlzbXMuIEkgYmV0IHRoaXMgaXMgd2hlcmUgdGhlIEhTUi1zcGVjaWZpYyBsb2dpYyByZXNpZGVzIGZvciBzZW5kaW5nIHBhY2tldHMuIEnigJlsbCBkaWcgaW50byB0aGlzIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2Ugc3RlcHMgaW52b2x2ZWQgaW4gdHJhbnNtaXR0aW5nIEhTUiBmcmFtZXMgZnJvbSBhIGRldmljZSBwZXJzcGVjdGl2ZSwgaW5jbHVkaW5nIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBkcml2ZXIgYW5kLCBwZXJoYXBzLCB0aGUgaW1wbGljYXRpb25zIG9uIHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoc3JfZGV2X3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz0yMTY9c3RhdGljIG5ldGRldl9mZWF0dXJlc190IGhzcl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjMtXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzoyMjQ6c3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjI1LXtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz01OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoc3JfZGV2aWNlX29wcyA9IHtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MDEtXHQubmRvX3N0b3AgPSBoc3JfZGV2X2Nsb3NlLFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjAyOlx0Lm5kb19zdGFydF94bWl0ID0gaHNyX2Rldl94bWl0LFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjAzLVx0Lm5kb19jaGFuZ2VfcnhfZmxhZ3MgPSBoc3JfY2hhbmdlX3J4X2ZsYWdzLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTY2ND1ib29sIGlzX2hzcl9tYXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2NS17XG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NjY6XHRyZXR1cm4gKGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0ID09IGhzcl9kZXZfeG1pdCk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02NjctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQyMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqRm9jdXNpbmcgaW4gb24gSFNSIFBhY2tldCBUcmFuc21pc3Npb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBIU1IgcGFja2V0IHRyYW5zbWlzc2lvbiB3b3JrcywgYW5kIEkgc2VlIGBoc3JfZGV2X3htaXRgIGlzIGRlZmluZWQgYXMgc3RhdGljLiBUaGF0IGxpbWl0cyBteSBhYmlsaXR5IHRvIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUsIGFuZCBzdWdnZXN0cyBJIG5lZWQgdG8gZmluZCBhIGJldHRlciBlbnRyeSBwb2ludCwgYSBzeW1ib2wgdGhhdCYjMzk7cyBtb3JlIGFjY2Vzc2libGUgZm9yIGRlZXAgYW5hbHlzaXMuIFJpZ2h0LCB0aGF0IG1ha2VzIGBoc3JfZm9yd2FyZF9za2JgIGEgbXVjaCBiZXR0ZXIgZm9jYWwgcG9pbnQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSBjb3JlIGZvcndhcmRpbmcgbG9naWMsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4uCgpOb3csIHdoaWxlIEkmIzM5O20gYXQgaXQsIEkgc2hvdWxkIGFsc28gbWFrZSBhIG5vdGUgb2YgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIFRoZXkmIzM5O3JlIHByb2JhYmx5IGluIGBuZXQvY29yZS9kZXYuY2AgYW5kIGBuZXQvY29yZS9kZXZfYXBpLmNgLiBUaGVzZSBhcmUgd29ydGggYSBsb29rIGJlY2F1c2UgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgY2FuIHNpZ25pZmljYW50bHkgaW1wYWN0IHBhY2tldCBwcm9jZXNzaW5nLCBzbyBhbnkgbG9naWMgdGhhdCBpbnRlcmFjdHMgd2l0aCBpdCBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgcGVyZm9ybWFuY2Ugb3IgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGUgSFNSIGNvbnRleHQsIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggSFNSJiMzOTtzIGR1cGxpY2F0ZSBwYWNrZXQgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIGRldl9kaXNhYmxlX2dybyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYXBpLmM9MjcwPUVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMjg0LSAqL1xubmV0L2NvcmUvZGV2X2FwaS5jOjI4NTp2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2X2FwaS5jLTI4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODc2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyBgbmV0aWZfZGlzYWJsZV9ncm9gIGluIGBuZXQvY29yZS9kZXYuY2AqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG5ldGlmX2Rpc2FibGVfZ3JvYCB3aXRoaW4gYG5ldC9jb3JlL2Rldi5jYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gVGhpcyBmdW5jdGlvbiwgYnkgaXRzIHZlcnkgbmFtZSwgaXMgYWxsIGFib3V0IGRpc2FibGluZyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKS4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgaXNuJiMzOTt0IGl0PyBJdCBhbGxvd3MgdGhlIG5ldHdvcmsgc3RhY2sgdG8gY29hbGVzY2UgbXVsdGlwbGUgaW5jb21pbmcgcGFja2V0cyBpbnRvIGxhcmdlciBmcmFtZXMsIHJlZHVjaW5nIHByb2Nlc3Npbmcgb3ZlcmhlYWQsIGVzcGVjaWFsbHkgZm9yIGhpZ2gtYmFuZHdpZHRoIHNjZW5hcmlvcy4gU28sIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGlzIGRpc2FibGU/IFdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgbmVjZXNzaXRhdGUgc2FjcmlmaWNpbmcgR1JPJiMzOTtzIGVmZmljaWVuY3k/CgpNeSBtaW5kIGlzIGFscmVhZHkgcmFjaW5nIHdpdGggcXVlc3Rpb25zOiBJcyB0aGlzIGJlaW5nIGNhbGxlZCBkdWUgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBsaW1pdGF0aW9uPyBBIHNvZnR3YXJlLXJlbGF0ZWQgaW5jb21wYXRpYmlsaXR5IHdpdGggYSBwYXJ0aWN1bGFyIHByb3RvY29sIG9yIGRyaXZlcj8gQXJlIHRoZXJlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IGFyaXNlIGZyb20gdXNpbmcgR1JPIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBjYWxsaW5nIHNpdGVzLCB0aGUgYXJndW1lbnRzIHBhc3NlZC4uLiBldmVyeXRoaW5nLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgcmF0aW9uYWxlIGJlaGluZCBkaXNhYmxpbmcgdGhpcyBrZXkgb3B0aW1pemF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRyYWRlb2ZmcyB0aGUgc3lzdGVtIGlzIG1ha2luZyBoZXJlLiBXaGF0JiMzOTtzIHRoZSBjb3N0IG9mIHRoaXMgZGlzYWJsZSBpbiB0ZXJtcyBvZiB0aHJvdWdocHV0LCBsYXRlbmN5LCBhbmQgQ1BVIGN5Y2xlcz8gSXMgaXQgYSBwZXJtYW5lbnQgZGlzYWJsZSBvciBhIGNvbmRpdGlvbmFsIG9uZT8gVWx0aW1hdGVseSwgSSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoaXMgaXMgdGhlICpyaWdodCogZGVjaXNpb24sIGEgd2VsbC1pbmZvcm1lZCB0cmFkZS1vZmYsIGFuZCBub3QgYSBxdWljayBmaXggdGhhdCBpbnRyb2R1Y2VzIGEgaGlkZGVuIHBlcmZvcm1hbmNlIGhpdCBsYXRlci4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHRoZSBuZXR3b3JrIGRldmljZSBzdGF0ZSBvciBwb3RlbnRpYWwgaXNzdWVzLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBwaWVjZSB0aGF0IGNvdWxkIHNoZWQgbGlnaHQgb24gc29tZSB1bmRlcmx5aW5nIGRldmljZSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgbmV0aWZfZGlzYWJsZV9ncm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xODI1PXZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xODQyLVxubmV0L2NvcmUvZGV2LmM6MTg0Mzp2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXYuYy0xODQ0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIEdSTyBEaXNhYmxlbWVudCBpbiBIU1IqKgoKTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyByZXZvbHZlcyBhcm91bmQgdGhlIHN5bWJvbHMgYGhzcl9mb3J3YXJkX3NrYmAsIGBkZXZfZGlzYWJsZV9ncm9gLCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYC4gVGhlc2UgYXJlIHRoZSBrZXkgcGllY2VzIG9mIGNvZGUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaW4gdGhlIGNvbnRleHQgb2YgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgZGlzYWJsZW1lbnQsIHNwZWNpZmljYWxseSBhcyBpdCByZWxhdGVzIHRvIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkuIEkgbmVlZCB0byBkZXRlcm1pbmUgKndoeSogdGhlc2UgYXJlIHNpZ25pZmljYW50IGFuZCwgY3J1Y2lhbGx5LCBob3cgdGhleSBpbnRlcmFjdC4KCkJleW9uZCB0aGF0LCBJIG5lZWQgdG8gaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3Igc3ltYm9scyByZWxhdGVkIHRvIEdSTyBkaXNhYmxlbWVudCB3aXRoaW4gdGhlIEhTUiBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBIU1JgIGRpcmVjdGx5LiBJdCYjMzk7cyB0aGUgbW9zdCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LgoKRmluYWxseSwgYSBkZXBlbmRlbmN5IGFuYWx5c2lzLiBJcyB0aGVyZSBhbnl0aGluZyB0aGF0IGBIU1JgIHJlbGllcyBvbiwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoaXMgR1JPIGRpc2FibGVtZW50PyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGZhY3RvcnMgdG8gY29uc2lkZXI/IEtub3dpbmcgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgYW5kIHdoYXQgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBpcyBjcml0aWNhbCB0byBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBJRUMgNjI0MzktMyBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5XG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBIU1JcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0hpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcdTAwMjYgUFJQKVwmIzM0O1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBUaGlzIGVuYWJsZXMgSUVDIDYyNDM5IGRlZmluZWQgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3NcbiAgMTA6XHRcdCAgUmVkdW5kYW5jeSAoSFNSKSBhbmQgUGFyYWxsZWwgUmVkdW5kYW5jeSBQcm90b2NvbCAoUFJQKS5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhXG4gIDEzOlx0XHQgIERBTkggKFwmIzM0O0RvdWJseSBhdHRhY2hlZCBub2RlIGltcGxlbWVudGluZyBIU1JcJiMzNDspIG9yIERBTlAgKFwmIzM0O0RvdWJseVxuICAxNDpcdFx0ICBhdHRhY2hlZCBub2RlIGltcGxlbWVudGluZyBQUlBcJiMzNDspLiBGb3IgdGhpcyB0byB3b3JrLCB5b3VyIExpbnV4IGJveFxuICAxNTpcdFx0ICBuZWVkcyAoYXQgbGVhc3QpIHR3byBwaHlzaWNhbCBFdGhlcm5ldCBpbnRlcmZhY2VzLlxuICAxNjpcdFxuICAxNzpcdFx0ICBGb3IgREFOSCwgaXQgbXVzdCBiZSBjb25uZWN0ZWQgYXMgYSBub2RlIGluIGEgcmluZyBuZXR3b3JrIHRvZ2V0aGVyXG4gIDE4Olx0XHQgIHdpdGggb3RoZXIgSFNSIGNhcGFibGUgbm9kZXMuIEFsbCBFdGhlcm5ldCBmcmFtZXMgc2VudCBvdmVyIHRoZSBIU1JcbiAgMTk6XHRcdCAgZGV2aWNlIHdpbGwgYmUgc2VudCBpbiBib3RoIGRpcmVjdGlvbnMgb24gdGhlIHJpbmcgKG92ZXIgYm90aCBzbGF2ZVxuICAyMDpcdFx0ICBwb3J0cyksIGdpdmluZyBhIHJlZHVuZGFudCwgaW5zdGFudCBmYWlsLW92ZXIgbmV0d29yay4gRWFjaCBIU1Igbm9kZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAyMwoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiAzMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSFNSIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBnb29kLCBubyBuZXcgZGVwZW5kZW5jaWVzIGZvciB0aGUgYEhTUmAgbW9kdWxlIGl0c2VsZiwgdGhhdCYjMzk7cyBhbHdheXMgYSBwbHVzLiBOb3csIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXPigKYgdGhpcyBwYXRjaCBpcyBhZGRpbmcgYG5ldGlmX2Rpc2FibGVfZ3JvYCBhbmQgYGRldl9kaXNhYmxlX2dyb2AuIFRoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGFzIGNvcmUgbmV0d29yayBkZXZpY2UgQVBJIG1vZGlmaWNhdGlvbnMsIHdoaWNoIGFyZSBhbHdheXMgaW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgdGhlIGludGVudCBpcyB0byBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0d29yayBkZXZpY2UsIGFuZCBoZXJlLCB0aGV5JiMzOTtyZSB1c2luZyBpdCB0byBzaHV0IGRvd24gR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBTbWFydC4gR1JPIGNhbiBzb21ldGltZXMgY2F1c2UgaXNzdWVzIHdpdGggY29tcGxleCBwcm90b2NvbHMsIHNvIGRpc2FibGluZyBpdCBpbiBzcGVjaWZpYyBjb250ZXh0cyBpcyBhIHJlYXNvbmFibGUgYXBwcm9hY2guCgpUaGUgY3J1Y2lhbCBiaXQsIHRob3VnaCwgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgaHNyX2ZvcndhcmRfc2tiYC4gVGhleSYjMzk7cmUgYWRhcHRpbmcgaXQgdG8gaGFuZGxlIEdTTyAoR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCkgcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0uIFRoaXMgc3VnZ2VzdHMgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgSFNSIGlzIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBsYXJnZSBwYWNrZXRzLCBhbmQgZGlyZWN0bHkgaW1wYWN0cyB0aGUgY29yZSBwYWNrZXQgZm9yd2FyZGluZyBsb2dpYy4gVGhhdOKAmXMgYSBrZXkgY2hhbmdlIHRvIGludmVzdGlnYXRlLiBUaGVuIHdlIGhhdmUgY2hhbmdlcyBpbiBgaHNyX2Rldl94bWl0YCBhbmQgYHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lYCB0byBhZGp1c3QgbG9ja2luZywgd2hpY2ggaXMgYSBkZWZpbml0ZSBzaWduYWwgb2YgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nLiBMb2NraW5nIG1vZGlmaWNhdGlvbnMgYWx3YXlzIGRlc2VydmUgc2NydXRpbnkuCgpGdW5jdGlvbmFsbHksIHdlJiMzOTtyZSBsb29raW5nIGF0IGNoYW5nZXMgaW4gdGhlIEhTUiBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIG5ldHdvcmsgZGV2aWNlIEFQSS4gU2luY2UgSFNSIGlzIGNvbW1vbmx5IGRlcGxveWVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhpbmsgdmV0aCBkZXZpY2VzIOKAkyB0aGVzZSBjaGFuZ2VzIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgd2l0aCB2aXJ0dWFsIGludGVyZmFjZXMuIFRoYXQgbWFrZXMgdGhlbSBwZXJmZWN0IGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgdGVzdGluZyBhcmUgYGhzcl9mb3J3YXJkX3NrYmAsIGBkZXZfZGlzYWJsZV9ncm9gLCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYC4gV2l0aCB0aGUgYEhTUmAgY29uZmlnIGVuYWJsZWQsIG9mIGNvdXJzZS4KClRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoZSBpc3N1ZSBvZiBHU08gc3VwZXItcGFja2V0cyB3aXRoaW4gdGhlIEhTUiBwcm90b2NvbCBieSBzZWdtZW50aW5nIHRoZW0uIEFkZGl0aW9uYWxseSBpdCYjMzk7cyBlbnN1cmluZyB0aGF0IEdSTywgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBpc24mIzM5O3QgY2F1c2luZyBwcm9ibGVtcyBhbmQgaXMgZGlzYWJsZWQgb24gcmVsZXZhbnQgSFNSIGRldmljZXMsIHdoaWNoIGlzIGEgc291bmQgZGVzaWduIGNob2ljZS4gU2luY2UgdGhpcyBkZWFscyB3aXRoIHBhY2tldCBoYW5kbGluZywgaXQgd2lsbCBiZSBlc3NlbnRpYWwgdG8gdGVzdCBpdCB0byBlbnN1cmUgaXQgb3BlcmF0ZXMgY29ycmVjdGx5IGluIHZhcmlvdXMgc2NlbmFyaW9zIHRvIGVuc3VyZSBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkgYXJlIG1haW50YWluZWQuIFRoaXMgcGF0Y2ggbmVlZHMgYSBnb29kIGZ1enppbmcgc2Vzc2lvbiwgYW5kIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBjb25jdXJyZW5jeSBhc3BlY3RzIG9mIHRoZSBsb2NraW5nIGFkanVzdG1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgICAmIzM0O2Rldl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtuZXRpZl9kaXNhYmxlX2dybyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBwcm90b2NvbCB0byBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtIGluIGBoc3JfZm9yd2FyZF9za2JgLiBJdCBhbHNvIGFkZHMgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgdG8gdGhlIGNvcmUgbmV0d29yayBkZXZpY2UgQVBJIHRvIGRpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgb24gYSBkZXZpY2UsIGFuZCB1c2VzIHRoaXMgdG8gZGlzYWJsZSBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHBhY2tldCBwcm9jZXNzaW5nIGFuZCBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgICAmIzM0O2Rldl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtuZXRpZl9kaXNhYmxlX2dybyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBwcm90b2NvbCB0byBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtIGluIGBoc3JfZm9yd2FyZF9za2JgLiBJdCBhbHNvIGFkZHMgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgdG8gdGhlIGNvcmUgbmV0d29yayBkZXZpY2UgQVBJIHRvIGRpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgb24gYSBkZXZpY2UsIGFuZCB1c2VzIHRoaXMgdG8gZGlzYWJsZSBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHBhY2tldCBwcm9jZXNzaW5nIGFuZCBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGhhbmRsZSBHU08gKEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQpIHN1cGVyLXBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtIGJlZm9yZSBmb3J3YXJkaW5nLCBhbmQgZGlzYWJsZXMgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgb24gZW5zbGF2ZWQgZGV2aWNlcy4gSXQgYWxzbyBhZGp1c3RzIGxvY2tpbmcgYXJvdW5kIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBza2Igc2VnbWVudGF0aW9uIChgX19za2JfZ3NvX3NlZ21lbnRgKSwgYW5kIHJlYWRpbmcgcGFja2V0IGhlYWRlcnMgdXNpbmcgdGhlIHN0YW5kYXJkIGBza2JfaGVhZGVyX3BvaW50ZXJgIGZ1bmN0aW9uLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzRkYTE3ZTk2NjFkOWIzZDNhNTQ0NThiNDA1ZTdmZGY2YWQxNjJlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTc6NDA6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA5OTgxZDYzN2Y4YjU0Li5lYmEyYzI2YTQ5YmE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTM0MzQsNiAmIzQzOzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgbmV0aWZfY2xvc2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHVubGluayk7CiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKJiM0Mzt2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7CiB1MTYgZGV2X3BpY2tfdHhfemVybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1OTMzYzVkYWIwOWVlLi5mMjBkNWFiMGNmNzI5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTg0MCw2ICYjNDM7MTg0MCwyMSBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJfQogfQogCiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKJiM0MzsKJiM0MzsJZGV2LSZndDt3YW50ZWRfZmVhdHVyZXMgJmFtcDs9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7CiYjNDM7CW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKJiM0MzsKJiM0MzsJbmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikgewomIzQzOwkJbmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7CiYjNDM7CQluZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpOwomIzQzOwkJbmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qKgogICoJZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZQogICoJQGRldjogZGV2aWNlCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmMKaW5kZXggNDM3OTQ3ZGQwOGVkNS4uM2NhMjUxNWFkMDQ4NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2X2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hcGkuYwpAQCAtMjY5LDYgJiM0MzsyNjksMjcgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTsKIAomIzQzOy8qKgomIzQzOyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZQomIzQzOyAqIEBkZXY6IGRldmljZQomIzQzOyAqCiYjNDM7ICogQmVzdC1lZmZvcnQgZGlzYWJsZSBvZiBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldAomIzQzOyAqIGRldmljZS4gIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZAomIzQzOyAqIHBhY2tldHMgbWF5IGJlIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS4KJiM0MzsgKgomIzQzOyAqIFRoZSBkaXNhYmxlIGlzIGJlc3QtZWZmb3J0OiBhIGRldmljZSB3aXRoIGEgZml4ZWQtb24gZmVhdHVyZSAoZm9yCiYjNDM7ICogZXhhbXBsZSBHUk9fSFcgb24gYSB2aXJ0aW8tbmV0IGRldmljZSBuZWdvdGlhdGVkIHdpdGhvdXQKJiM0MzsgKiBWSVJUSU9fTkVUX0ZfQ1RSTF9HVUVTVF9PRkZMT0FEUykga2VlcHMgaXQgZW5hYmxlZC4gIENhbGxlcnMgdGhhdAomIzQzOyAqIG5lZWQgYSBoYXJkIGd1YXJhbnRlZSBtdXN0IGluc3BlY3QgdGhlIHJlc3VsdGluZyBmZWF0dXJlIHN0YXRlLgomIzQzOyAqLwomIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsJbmV0aWZfZGlzYWJsZV9ncm8oZGV2KTsKJiM0MzsJbmV0ZGV2X3VubG9ja19vcHMoZGV2KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pOwomIzQzOwogLyoqCiAgKiBkZXZfc2V0X3Byb21pc2N1aXR5KCkgLSB1cGRhdGUgcHJvbWlzY3VpdHkgY291bnQgb24gYSBkZXZpY2UKICAqIEBkZXY6IGRldmljZQpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwppbmRleCA1NTU1YjcxYWIxOWI1Li4yNDhjYmIxNDJlMjFlIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwpAQCAtMjMyLDkgJiM0MzsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXNrYi0mZ3Q7ZGV2ID0gbWFzdGVyLSZndDtkZXY7CiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCXNrYl9yZXNldF9tYWNfbGVuKHNrYik7Ci0JCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJCWhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAl9IGVsc2UgewogCQlkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMzM1LDYgJiM0MzszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsCiAJCWhzcl9zdGFnLSZndDtzZXF1ZW5jZV9uciA9IGh0b25zKGhzci0mZ3Q7c2VxdWVuY2VfbnIpOwogCQloc3ItJmd0O3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKIAl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gdHlwZTsKIAkvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqLwpAQCAtMzU2LDE0ICYjNDM7MzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwKIAkJZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94KTsKIAl9CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCkBAIC0zOTAsNiAmIzQzOzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJaHNyX3N0YWctJmd0O3NlcXVlbmNlX25yID0gaHRvbnMoaHNyLSZndDtzdXBfc2VxdWVuY2VfbnIpOwogCWhzci0mZ3Q7c3VwX3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7CiAKQEAgLTM5NywxMyAmIzQzOzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlciwKIAloc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTsKIAlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIG1hc3Rlci0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTsKLQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiB9CiAKIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb24KQEAgLTY1OSw3ICYjNDM7NjUyLDcgQEAgdm9pZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiAKIAlkZXYtJmd0O2h3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfAotCQkJICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8CiYjNDM7CQkJICAgTkVUSUZfRl9IV19DU1VNIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjsKIApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCmluZGV4IDA3NzQ5ODFhNjVjMTYuLmY0MjY5NGNmNDMwOTkgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9nc28uaCZndDsKICNpbmNsdWRlICYjMzQ7aHNyX21haW4uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2hzcl9mcmFtZXJlZy5oJiMzNDsKIApAQCAtNjIxLDkgJiM0Mzs2MjIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChwb3J0LSZndDt0eXBlID09IEhTUl9QVF9NQVNURVIgfHwKIAkgICAgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7CiAJCS8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovCi0JCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAkJZnJhbWUtJmd0O3NlcXVlbmNlX25yID0gaHNyLSZndDtzZXF1ZW5jZV9ucjsKIAkJaHNyLSZndDtzZXF1ZW5jZV9uciYjNDM7JiM0Mzs7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJfQogfQogCkBAIC03MzEsNyAmIzQzOzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsCiB9CiAKIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovCi12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiYjNDM7c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lOwogCkBAIC03NDYsOCAmIzQzOzc0OCw4IEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKIAkgKiBTbyBjaGVjayBhbmQgaW5jcmVtZW50IHN0YXRzIGZvciBtYXN0ZXIgcG9ydCBvbmx5IGhlcmUuCiAJICovCiAJaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUiB8fCBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHsKLQkJcG9ydC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9wYWNrZXRzJiM0MzsmIzQzOzsKLQkJcG9ydC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLSZndDtsZW47CiYjNDM7CQlERVZfU1RBVFNfSU5DKHBvcnQtJmd0O2RldiwgdHhfcGFja2V0cyk7CiYjNDM7CQlERVZfU1RBVFNfQUREKHBvcnQtJmd0O2RldiwgdHhfYnl0ZXMsIHNrYi0mZ3Q7bGVuKTsKIAl9CiAKIAlrZnJlZV9za2IoZnJhbWUuc2tiX2hzcik7CkBAIC03NTcsNiAmIzQzOzc1OSwxMDUgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQogCiBvdXRfZHJvcDoKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlwb3J0LSZndDtkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwlERVZfU1RBVFNfSU5DKHBvcnQtJmd0O2RldiwgdHhfZHJvcHBlZCk7CiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzbwomIzQzOyAqIGVhY2ggd2lyZSBmcmFtZSBnZXRzIGl0cyBvd24gSFNSL1BSUCB0YWcgYW5kIHNlcXVlbmNlIG51bWJlci4KJiM0MzsgKi8KJiM0MzsvKiBFZmZlY3RpdmUgZnJhbWUgcHJvdG9jb2wgb2YgYSAocG9zc2libHkgVkxBTi10YWdnZWQpIHNrYiwgb3IgMCB3aGVuCiYjNDM7ICogaXQgY2Fubm90IGJlIGRldGVybWluZWQgb3IgdGhlIHRhZ2dpbmcgZXhjZWVkcyB3aGF0IEhTUiBzdXBwb3J0cy4KJiM0MzsgKiBIU1Igc3VwcG9ydHMgb25lIDgwMi4xUSBDLXRhZyBvbmx5LCBtYXRjaGluZyBmaWxsX2ZyYW1lX2luZm8oKTogYW4KJiM0MzsgKiBhY2NlbGVyYXRlZCB0YWcgbXVzdCBiZSBhIEMtdGFnIHdpdGggYSBub24tVkxBTiBpbm5lciBwcm90b2NvbDsgYW4KJiM0MzsgKiBpbi1iYW5kIHRhZyBpcyB1bndyYXBwZWQgZXhhY3RseSBvbmNlIGFuZCBhIHJlc2lkdWFsIFZMQU4gRXRoZXJUeXBlCiYjNDM7ICogaXMgcmVqZWN0ZWQuIFJlYWQtb25seTsgbm8gc3RhdGUgaXMga2VwdCBiZXlvbmQgdGhlIGltbWVkaWF0ZQomIzQzOyAqIHByb3RvY29sIHZhbHVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBfX2JlMTYgaHNyX2dzb19lZmZlY3RpdmVfcHJvdG8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGhoZHIgZWg7CiYjNDM7CXN0cnVjdCB2bGFuX2hkciB2aDsKJiM0MzsJY29uc3Qgc3RydWN0IGV0aGhkciAqZXRoOwomIzQzOwljb25zdCBzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHI7CiYjNDM7CV9fYmUxNiBwcm90bzsKJiM0MzsKJiM0MzsJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKJiM0MzsJCS8qIEhTUiBzdXBwb3J0cyBvbmUgODAyLjFRIEMtdGFnIG9ubHkuICovCiYjNDM7CQlpZiAoc2tiLSZndDt2bGFuX3Byb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChldGhfdHlwZV92bGFuKHNrYi0mZ3Q7cHJvdG9jb2wpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHNrYi0mZ3Q7cHJvdG9jb2w7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXRoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKGVoKSwgJmFtcDtlaCk7CiYjNDM7CWlmICghZXRoKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXByb3RvID0gZXRoLSZndDtoX3Byb3RvOwomIzQzOwlpZiAoIWV0aF90eXBlX3ZsYW4ocHJvdG8pKQomIzQzOwkJcmV0dXJuIHByb3RvOwomIzQzOwlpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXZoZHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBFVEhfSExFTiwgc2l6ZW9mKHZoKSwgJmFtcDt2aCk7CiYjNDM7CWlmICghdmhkcikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwcm90byA9IHZoZHItJmd0O2hfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CiYjNDM7CWlmIChldGhfdHlwZV92bGFuKHByb3RvKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gcHJvdG87CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpzZWdzLCAqbmV4dDsKJiM0MzsJX19iZTE2IHByb3RvOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7CiYjNDM7CQloc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ29uZm9ybWluZyBwbGFpbi1wcm90b2NvbCBHU08gc3VwZXItcGFja2V0cyBjYXJyeSB0cmFpbGVyLWZyZWUKJiM0MzsJICogc2VuZGVyIHBheWxvYWQgYW5kIGFyZSBzZWdtZW50ZWQgaGVyZTogZWFjaCBzZWdtZW50IGlzIGRlbGl2ZXJlZAomIzQzOwkgKiBvciBmb3J3YXJkZWQgYXMgaXRzIG93biB3aXJlIGZyYW1lLCBvbiBhbnkgaW5ncmVzcyByb2xlLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZ2F0ZSBpcyBjb250ZW50LWJhc2VkLCBub3QgcG9ydC1iYXNlZC4gQW4gYWdncmVnYXRlIHdob3NlCiYjNDM7CSAqIGVmZmVjdGl2ZSBwcm90b2NvbCBpcyBFVEhfUF9IU1Igb3IgRVRIX1BfUFJQIGNhbm5vdCBiZSBzYWZlbHkKJiM0MzsJICogc2VnbWVudGVkIGFuZCBpcyBkcm9wcGVkLCBhcyBpcyBhbnkgc2tiIHdob3NlIGhlYWRlciBjYW5ub3QgYmUKJiM0MzsJICogcmVhZCBvciB3aG9zZSB0YWdnaW5nIGV4Y2VlZHMgdGhlIHNpbmdsZSA4MDIuMVEgQy10YWcgSFNSCiYjNDM7CSAqIHN1cHBvcnRzLiBXaXRoIE5FVElGX0ZfSFdfSFNSX1RBR19STSB0aGUgbG93ZXIgaGFzIGFscmVhZHkKJiM0MzsJICogc3RyaXBwZWQgdGhlIHRhZywgc28gc3VjaCBhZ2dyZWdhdGVzIGFycml2ZSBwbGFpbiBhbmQgYXJlCiYjNDM7CSAqIHNlZ21lbnRlZC4KJiM0MzsJICovCiYjNDM7CXByb3RvID0gaHNyX2dzb19lZmZlY3RpdmVfcHJvdG8oc2tiKTsKJiM0MzsJaWYgKCFwcm90bykKJiM0MzsJCWdvdG8gZHJvcF9nc287IC8qIGNsYXNzaWZpY2F0aW9uIGZhaWx1cmUsIGZhaWwtc2FmZSAqLwomIzQzOwlpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSB8fCBwcm90byA9PSBodG9ucyhFVEhfUF9QUlApKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsKJiM0MzsJLyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWUKJiM0MzsJICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb20KJiM0MzsJICogdGhlIGludGVybGluayBmb2xsb3dzIFJYIGNoZWNrc3VtIHNlbWFudGljcy4KJiM0MzsJICovCiYjNDM7CXNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUik7CiYjNDM7CWlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsKJiM0MzsJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJd2hpbGUgKHNlZ3MpIHsKJiM0MzsJCW5leHQgPSBzZWdzLSZndDtuZXh0OwomIzQzOwkJc2Vncy0mZ3Q7bmV4dCA9IE5VTEw7CiYjNDM7CQloc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpOwomIzQzOwkJc2VncyA9IG5leHQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO2Ryb3BfZ3NvOgomIzQzOwlERVZfU1RBVFNfSU5DKHBvcnQtJmd0O2RldiwgdHhfZHJvcHBlZCk7CiAJa2ZyZWVfc2tiKHNrYik7CiB9CmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9zbGF2ZS5jIGIvbmV0L2hzci9oc3Jfc2xhdmUuYwppbmRleCAwMWM3M2I0YjUwZGRkLi5hYTIxNTRiMTljMGI5IDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX3NsYXZlLmMKQEAgLTczLDE2ICYjNDM7NzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYikKIAl9CiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAotCS8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhCi0JICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuCi0JICovCi0JaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykgewotCQlzcGluX2xvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCQloc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCX0gZWxzZSB7Ci0JCWhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpOwotCX0KJiM0MzsJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7CiAKIGZpbmlzaF9jb25zdW1lOgogCXJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEOwpAQCAtMTcxLDYgJiM0MzsxNjIsMTEgQEAgc3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJZ290byBmYWlsX3J4X2hhbmRsZXI7CiAJZGV2X2Rpc2FibGVfbHJvKGRldik7CiAKJiM0MzsJLyogR1JPIGRpc2FibGluZyBpcyBiZXN0LWVmZm9ydDogZGV2aWNlcyB3aXRoIGZpeGVkLW9uCiYjNDM7CSAqIEdSTy9HUk9fSFcgY2Fubm90IGJlIGZvcmNlZCBvZmYuCiYjNDM7CSAqLwomIzQzOwlkZXZfZGlzYWJsZV9ncm8oZGV2KTsKJiM0MzsKIAlyZXR1cm4gMDsKIAogZmFpbF9yeF9oYW5kbGVyOgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKaW5kZXggMzFmYjkzMjZjZjUzMy4uMGQxMDU0NzZlN2M1MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCkBAIC0zLDYgJiM0MzszLDcgQEAKIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLgogCiBURVNUX1BST0dTIDo9IFwKJiM0MzsJaHNyX2dyb19zdXBlcnBhY2tldC5zaCBcCiAJaHNyX3Bpbmcuc2ggXAogCWhzcl9yZWRib3guc2ggXAogCWxpbmtfZmF1bHRzLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi5lYmNiZDlmYzQxZWM0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoCkBAIC0wLDAgJiM0MzsxLDYzMSBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyMKJiM0MzsjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czoKJiM0MzsjCiYjNDM7IyAgMS4gRW5zbGF2aW5nIGEgZGV2aWNlIHRvIGFuIEhTUiBtYXN0ZXIgZGlzYWJsZXMgR1JPIG9uIGl0CiYjNDM7IyAgICAgKGRldl9kaXNhYmxlX2dybygpKS4KJiM0MzsjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy4KJiM0MzsjICAzLiBBIFRDUCBzdHJlYW0gZnJvbSBhIFRTTy1lbmFibGVkIFNBTiAod2hpY2ggdGhlcmVmb3JlIGVtaXRzIEdTTwomIzQzOyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6CiYjNDM7IyAgICAgaW50ZXJmYWNlLWNvdW50ZXIgZGVsdGFzIHNob3cgc3VwZXItcGFja2V0LXNpemVkIGZyYW1lcyBsZWF2aW5nCiYjNDM7IyAgICAgdGhlIFNBTiBhbmQgcGVyLWZyYW1lLXNpemVkIHRyYWZmaWMgbGVhdmluZyB0aGUgRFVUJiMzOTtzIExBTiBwb3J0cy4KJiM0MzsjCiYjNDM7IyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6CiYjNDM7IwomIzQzOyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyCiYjNDM7IyAgJiM0MzstLS0tLS0tLS0tLSYjNDM7ICBpbnRlcmxpbmsgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgIExBTiBBL0IgICYjNDM7LS0tLS0tLS0tLS0mIzQzOwomIzQzOyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXwKJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHwKJiM0MzsjICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0mIzQzOwomIzQzOyMKJiM0MzsjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCYjMzk7cyBmb3J3YXJkIHBhdGgKJiM0MzsjIChpbnRlcmxpbmsgUlggLSZndDsgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kCiYjNDM7IyBmb3J3YXJkZWQgYnkgdGhlIERVVC4KJiM0MzsKJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoCiYjNDM7CiYjNDM7c2FuX2lwPSYjMzQ7MTAwLjY0LjAuMSYjMzQ7CiYjNDM7cGVlcl9pcD0mIzM0OzEwMC42NC4wLjMmIzM0OwomIzQzOwomIzQzOyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKToKJiM0MzsjIFNBTl9BVkdfTUlOIHByb3ZlcyBHU08gc3VwZXItcGFja2V0cyBsZWZ0IHRoZSBTQU47IExBTl9BVkdfTUFYIGlzIGEKJiM0MzsjIGd1YXJkIHdpdGggbWFyZ2luLCBub3QgdGhlIHByb3RvY29sIG1heGltdW0gKHNlZSBkb190c29fc3RyZWFtX3Rlc3QpLgomIzQzO1NBTl9BVkdfTUlOPTIwNDgKJiM0MztMQU5fQVZHX01BWD0xNTE0CiYjNDM7CiYjNDM7aXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MztzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7YWN0aXZlX3Nydl9ucz0mIzM0OyYjMzQ7CiYjNDM7d29ya2Rpcj0mIzM0OyYjMzQ7CiYjNDM7cGlkZmlsZT0mIzM0OyYjMzQ7CiYjNDM7bnNfZHV0PSYjMzQ7JiMzNDsKJiM0Mztuc19zYW49JiMzNDsmIzM0OwomIzQzO25zX3BlZXI9JiMzNDsmIzM0OwomIzQzO25zX2xzPSYjMzQ7JiMzNDsKJiM0MztyY2ZpbGU9JiMzNDsmIzM0OwomIzQzOwomIzQzOyMgRGVsZXRlIHRoZSBwZXItc2VydmVyIHByaXZhdGUgd29yayBkaXJlY3RvcnkgYW5kIHJlc2V0IGl0cwomIzQzOyMgdmFyaWFibGVzLiBDYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlYXAgYW5kIGZyb20gdGhlIEVYSVQKJiM0MzsjIHRyYXAsIHdoaWNoIG93bnMgYWxsIGZhaWx1cmUgcGF0aHMuCiYjNDM7Y2xlYW51cF93b3JrZGlyKCkKJiM0Mzt7CiYjNDM7CSMgcmVtb3ZlIG9ubHkgdGhlIGtub3duIG5vbi1lbXB0eSBwcml2YXRlIGRpcmVjdG9yeQomIzQzOwlpZiBbIC1uICYjMzQ7JHt3b3JrZGlyfSYjMzQ7IF0gJmFtcDsmYW1wOyBbIC1kICYjMzQ7JHt3b3JrZGlyfSYjMzQ7IF07IHRoZW4KJiM0MzsJCXJtIC1yZiAmIzM0OyR7d29ya2Rpcn0mIzM0OwomIzQzOwlmaQomIzQzOwl3b3JrZGlyPSYjMzQ7JiMzNDsKJiM0MzsJcGlkZmlsZT0mIzM0OyYjMzQ7CiYjNDM7CXJjZmlsZT0mIzM0OyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJIyBTZXJ2ZXIgY2xlYW51cCB0YXJnZXRzIG9ubHkgdGhlIG5hbWVzcGFjZSBvZiB0aGUgY3VycmVudGx5CiYjNDM7CSMgYWN0aXZlIHNlcnZlciAocmVjb3JkZWQgYnkgc3RhcnRfaXBlcmZfc2VydmVyKTsgYWZ0ZXIgYQomIzQzOwkjIHN1Y2Nlc3NmdWwgcmVhcCBub3RoaW5nIGlzIGFjdGl2ZS4KJiM0MzsJaWYgWyAtbiAmIzM0OyR7YWN0aXZlX3Nydl9uc30mIzM0OyBdOyB0aGVuCiYjNDM7CQkjIGV4YWN0LVBJRCBraWxsIG9ubHkgYWZ0ZXIgUkUtdmFsaWRhdGluZyBpZGVudGl0eSAoZ3VhcmRzCiYjNDM7CQkjIGFnYWluc3QgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApCiYjNDM7CQlpZiBbIC1uICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgXSAmYW1wOyZhbXA7IHZhbGlkX3NlcnZlcl9waWQgJiMzNDske2FjdGl2ZV9zcnZfbnN9JiMzNDsgJiMzNDske2lwZXJmX3BpZH0mIzM0OzsgdGhlbgomIzQzOwkJCWtpbGwgJiMzNDske2lwZXJmX3BpZH0mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwkJZmkKJiM0MzsJCWlwZXJmX3BpZD0mIzM0OyYjMzQ7CiYjNDM7CQlpZiBbIC1uICYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn0mIzM0OyBdOyB0aGVuCiYjNDM7CQkJIyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cwomIzQzOwkJCSMgYm91bmQgc28gYSBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyCiYjNDM7CQkJIyBoYW5nIGNsZWFudXAKJiM0MzsJCQlmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG8KJiM0MzsJCQkJa2lsbCAtMCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwgfHwgYnJlYWsKJiM0MzsJCQkJc2xlZXAgMC4xCiYjNDM7CQkJZG9uZQomIzQzOwkJCWtpbGwgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQkJd2FpdCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCQlzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7CQlmaQomIzQzOwkJIyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjMKJiM0MzsJCSMgcHJvY2Vzc2VzIHRoYXQgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgYWN0aXZlIHNlcnZlciBuZXRucywKJiM0MzsJCSMgcG9sbCBmb3IgYm91bmRlZCBleGl0LCB0aGVuIFNJR0tJTEwgYW55IHN1cnZpdm9yIGJlZm9yZQomIzQzOwkJIyB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmQgcGtpbGwgd291bGQgc2NhbgomIzQzOwkJIyB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuCiYjNDM7CQlsb2NhbCBfcCBfc3RpbGwKJiM0MzsJCWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDske2FjdGl2ZV9zcnZfbnN9JiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJCWlmIGlzX2lwZXJmM19waWQgJiMzNDskX3AmIzM0OzsgdGhlbgomIzQzOwkJCQlraWxsICYjMzQ7JF9wJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCQlmaQomIzQzOwkJZG9uZQomIzQzOwkJZm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvCiYjNDM7CQkJX3N0aWxsPTAKJiM0MzsJCQlmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzICYjMzQ7JHthY3RpdmVfc3J2X25zfSYjMzQ7IDImZ3Q7L2Rldi9udWxsKTsgZG8KJiM0MzsJCQkJaWYgaXNfaXBlcmYzX3BpZCAmIzM0OyRfcCYjMzQ7OyB0aGVuCiYjNDM7CQkJCQlfc3RpbGw9MQomIzQzOwkJCQkJYnJlYWsKJiM0MzsJCQkJZmkKJiM0MzsJCQlkb25lCiYjNDM7CQkJWyAmIzM0OyRfc3RpbGwmIzM0OyAtZXEgMCBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCQlzbGVlcCAwLjEKJiM0MzsJCWRvbmUKJiM0MzsJCWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDske2FjdGl2ZV9zcnZfbnN9JiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJCWlmIGlzX2lwZXJmM19waWQgJiMzNDskX3AmIzM0OzsgdGhlbgomIzQzOwkJCQlraWxsIC05ICYjMzQ7JF9wJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCQlmaQomIzQzOwkJZG9uZQomIzQzOwlmaQomIzQzOwlhY3RpdmVfc3J2X25zPSYjMzQ7JiMzNDsKJiM0MzsJY2xlYW51cF93b3JrZGlyCiYjNDM7CWNsZWFudXBfYWxsX25zCiYjNDM7fQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7Y2hlY2tfdG9vbCgpCiYjNDM7ewomIzQzOwlpZiAhIGNvbW1hbmQgLXYgJiMzNDskMSYjMzQ7ICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7U0tJUDogQ291bGQgbm90IHJ1biB0ZXN0IHdpdGhvdXQgJDEmIzM0OwomIzQzOwkJZXhpdCAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO25zeCgpCiYjNDM7ewomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JDEmIzM0OyBiYXNoIC1jICYjMzQ7JDImIzM0OwomIzQzO30KJiM0MzsKJiM0Mztpc19pcGVyZjNfcGlkKCkKJiM0Mzt7CiYjNDM7CVsgJiMzNDskKGNhdCAvcHJvYy8mIzM0OyQxJiMzNDsvY29tbSAyJmd0Oy9kZXYvbnVsbCkmIzM0OyA9ICYjMzQ7aXBlcmYzJiMzNDsgXQomIzQzO30KJiM0MzsKJiM0MzsjIEJvdW5kZWQgcmVhcCBvZiB0aGUgb25lLXNob3Qgc2VydmVyOiB3YWl0IGF0IG1vc3QgNXMgZm9yIGl0IHRvCiYjNDM7IyBleGl0LCB0aGVuIHJlYXAgdGhlIHdyYXBwZXIgYW5kIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIGl0cyByZWFsCiYjNDM7IyBzdGF0dXMuIEEgc3R1Y2sgc2VydmVyIGNhbiBuZXZlciBoYW5nIHRoZSBzY3JpcHQuCiYjNDM7cmVhcF9pcGVyZl9zZXJ2ZXIoKQomIzQzO3sKJiM0MzsJbG9jYWwgc2VydmVyX3JjCiYjNDM7CiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJa2lsbCAtMCAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8IGJyZWFrCiYjNDM7CQlzbGVlcCAwLjEKJiM0MzsJZG9uZQomIzQzOwlpZiBraWxsIC0wICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgZXhpdCB3aXRoaW4gNXMmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CXdhaXQgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7CiYjNDM7CXNlcnZlcl93cmFwcGVyPSYjMzQ7JiMzNDsKJiM0MzsJaWYgWyAhIC1zICYjMzQ7JHtyY2ZpbGV9JiMzNDsgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgc3RhdHVzIGZpbGUgbWlzc2luZyAoJHtyY2ZpbGV9KSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJc2VydmVyX3JjPSQoY2F0ICYjMzQ7JHtyY2ZpbGV9JiMzNDspCiYjNDM7CWlmICEgW1sgJiMzNDskc2VydmVyX3JjJiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IFsgJiMzNDskc2VydmVyX3JjJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JiMzOTske3NlcnZlcl9yY30mIzM5OyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJaXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MzsJY2xlYW51cF93b3JrZGlyCiYjNDM7CWFjdGl2ZV9zcnZfbnM9JiMzNDsmIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIERlY2ltYWwtY291bnRlciB2YWxpZGF0aW9uIGZvciB0aGUgc25hcHNob3QgYmxvY2tzOiBldmVyeSB2YWx1ZSBtdXN0CiYjNDM7IyBiZSBhIHBsYWluIGRlY2ltYWwgbnVtYmVyLiBBIHBhcnNlIGZhaWx1cmUgaW4gcmVhZF90eF9jb3VudGVycyB5aWVsZHMKJiM0MzsjIGVtcHR5L2dhcmJsZWQgZmllbGRzLCB3aGljaCB0aGlzIGNoZWNrIHR1cm5zIGludG8gYW4gaW1tZWRpYXRlIEZBSUwuCiYjNDM7dmFsaWRfZGVjaW1hbHMoKQomIzQzO3sKJiM0MzsJbG9jYWwgdgomIzQzOwomIzQzOwlmb3IgdiBpbiAmIzM0OyRAJiMzNDs7IGRvCiYjNDM7CQlbWyAmIzM0OyR2JiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IHJldHVybiAxCiYjNDM7CWRvbmUKJiM0MzsJcmV0dXJuIDAKJiM0Mzt9CiYjNDM7CiYjNDM7c2V0dXBfdG9wbygpCiYjNDM7ewomIzQzOwlzZXR1cF9ucyBuc19kdXQgbnNfc2FuIG5zX3BlZXIgfHwgZXhpdCAkPwomIzQzOwomIzQzOwlpcCBsaW5rIGFkZCBkX2EgbmV0bnMgJiMzNDskbnNfZHV0JiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2EgbmV0bnMgJiMzNDskbnNfcGVlciYjMzQ7CiYjNDM7CWlwIGxpbmsgYWRkIGRfYiBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyAmIzM0OyRuc19wZWVyJiMzNDsKJiM0MzsJaXAgbGluayBhZGQgZF9pbCBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zICYjMzQ7JG5zX3NhbiYjMzQ7CiYjNDM7CiYjNDM7CSMgSFNSIHRhZ3MgYWRkIDYgYnl0ZXMgcGVyIGZyYW1lOyBnaXZlIHRoZSBMQU4gbGVncyBoZWFkcm9vbS4KJiM0MzsJZm9yIGlmYWNlIGluIGRfYSBkX2I7IGRvCiYjNDM7CQluc3ggJiMzNDskbnNfZHV0JiMzNDsgJiMzNDtpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFwKJiM0MzsJCQlpcCBsaW5rIHNldCAkaWZhY2UgdXAmIzM0OwomIzQzOwlkb25lCiYjNDM7CWZvciBpZmFjZSBpbiBwX2EgcF9iOyBkbwomIzQzOwkJbnN4ICYjMzQ7JG5zX3BlZXImIzM0OyAmIzM0O2lwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgXAomIzQzOwkJCWlwIGxpbmsgc2V0ICRpZmFjZSB1cCYjMzQ7CiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBzZXQgZF9pbCB1cCYjMzQ7CiYjNDM7CW5zeCAmIzM0OyRuc19zYW4mIzM0OyAmIzM0O2lwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMCYjMzQ7CiYjNDM7CiYjNDM7CW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgYWRkIGhzcjAgdHlwZSBoc3IgXAomIzQzOwkJc2xhdmUxIGRfYSBzbGF2ZTIgZF9iIGludGVybGluayBkX2lsIHByb3RvIDA7IFwKJiM0MzsJCWlwIGxpbmsgc2V0IGhzcjAgdXAmIzM0OwomIzQzOwluc3ggJiMzNDskbnNfcGVlciYjMzQ7ICYjMzQ7aXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcCiYjNDM7CQlzbGF2ZTEgcF9hIHNsYXZlMiBwX2IgcHJvdG8gMDsgXAomIzQzOwkJaXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjEmIzM0OwomIzQzOwomIzQzOwkjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXImIzM5O3Mgc3VwZXJ2aXNpb24gZnJhbWVzLgomIzQzOwlzbGVlcCAyCiYjNDM7fQomIzQzOwomIzQzO2NoZWNrX2ZlYXR1cmUoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGlmYWNlPSYjMzQ7JDImIzM0OwomIzQzOwlsb2NhbCBmZWF0dXJlPSYjMzQ7JDMmIzM0OwomIzQzOwlsb2NhbCB3YW50PSYjMzQ7JDQmIzM0OwomIzQzOwomIzQzOwlpZiBuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2V0aHRvb2wgLWsgJGlmYWNlJiMzNDsgfCBncmVwIC1xICYjMzQ7XiRmZWF0dXJlOiAkd2FudCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF0mIzM0OwomIzQzOwllbHNlCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7IyBPZmYtb3ItYWJzZW50IHZhcmlhbnQ6IGZhaWxzIG9ubHkgd2hlbiB0aGUgZmVhdHVyZSBpcyBwcmVzZW50IEFORCBvbiwKJiM0MzsjIHNvIGRldmljZXMgdGhhdCBzaW1wbHkgZG8gbm90IGxpc3QgdGhlIGZlYXR1cmUgZG8gbm90IGZhaWwgaXQuCiYjNDM7Y2hlY2tfZmVhdHVyZV9ub3Rfb24oKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGlmYWNlPSYjMzQ7JDImIzM0OwomIzQzOwlsb2NhbCBmZWF0dXJlPSYjMzQ7JDMmIzM0OwomIzQzOwomIzQzOwlpZiBuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2V0aHRvb2wgLWsgJGlmYWNlJiMzNDsgfCBncmVwIC1xICYjMzQ7XiRmZWF0dXJlOiBvbiYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBvbiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwllbHNlCiYjNDM7CQllY2hvICYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdJiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKCkKJiM0Mzt7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy4mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2IgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9pbCBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0dSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy4mIzM0OwomIzQzOwomIzQzOwllY2hvICYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBIVy1HUk8uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2EgcngtZ3JvLWh3IG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYiByeC1ncm8taHcgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9pbCByeC1ncm8taHcgb2ZmCiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuJiMzNDsKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmVfbm90X29uICYjMzQ7JG5zX2R1dCYjMzQ7IGhzcjAgdHgtdWRwLXNlZ21lbnRhdGlvbgomIzQzOwljaGVja19mZWF0dXJlX25vdF9vbiAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIHR4LWdzby1saXN0CiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPLWZhbWlseSBmZWF0dXJlcy4mIzM0OwomIzQzO30KJiM0MzsKJiM0MzthbGxvY193b3JrZGlyKCkKJiM0Mzt7CiYjNDM7CSMgQWxsb2NhdGVkIG9ubHkgaGVyZSwgbG9uZyBhZnRlciB0aGUgaW5pdGlhbCB0b3BvbG9neSBjbGVhbnVwLCBzbwomIzQzOwkjIGNsZWFudXAoKSBhdCBzZXR1cF90b3BvKCkgdGltZSBjYW4gbmV2ZXIgcmVtb3ZlIGl0LiBta3RlbXAgZmFpbHVyZQomIzQzOwkjIGlzIGEgaGFyZCB0ZXN0IGZhaWx1cmUuCiYjNDM7CXdvcmtkaXI9JChta3RlbXAgLWQgL3RtcC9oc3JfZ3JvX3Rlc3QuWFhYWFhYKSB8fCB7CiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbWt0ZW1wIC1kIGZhaWxlZCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0IDEKJiM0MzsJfQomIzQzOwljaG1vZCA3MDAgJiMzNDske3dvcmtkaXJ9JiMzNDsKJiM0MzsJcGlkZmlsZT0mIzM0OyR7d29ya2Rpcn0vaXBlcmYucGlkJiMzNDsKJiM0MzsJcmNmaWxlPSYjMzQ7JHt3b3JrZGlyfS9pcGVyZi5yYyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzOyMgTnVtZXJpYywgYWxpdmUsIGNvbW0gPT0gaXBlcmYzLCBhbmQgcmVhbGx5IG93bmVkIGJ5IHRoZSBnaXZlbiBuZXRucy4KJiM0Mzt2YWxpZF9zZXJ2ZXJfcGlkKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHBucz0mIzM0OyQxJiMzNDsgcD0mIzM0OyQyJiMzNDsKJiM0MzsKJiM0MzsJW1sgJiMzNDskcCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCByZXR1cm4gMQomIzQzOwlraWxsIC0wICYjMzQ7JHAmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCByZXR1cm4gMQomIzQzOwlbICYjMzQ7JChjYXQgL3Byb2MvJiMzNDskcCYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF0gfHwgcmV0dXJuIDEKJiM0MzsJaXAgbmV0bnMgcGlkcyAmIzM0OyRwbnMmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IGdyZXAgLXF4ICYjMzQ7JHAmIzM0OwomIzQzO30KJiM0MzsKJiM0MztzdGFydF9pcGVyZl9zZXJ2ZXIoKQomIzQzO3sKJiM0MzsJbG9jYWwgc3J2X25zPSYjMzQ7JDEmIzM0OwomIzQzOwlsb2NhbCBzcnZfaXA9JiMzNDskezI6LX0mIzM0OwomIzQzOwlsb2NhbCBjYW5kaWRhdGVfcGlkCiYjNDM7CiYjNDM7CSMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHMKJiM0MzsJIyByZWFsIGV4aXQgc3RhdHVzIChuZXRucyBzaGFyZXMgdGhlIFBJRCBuYW1lc3BhY2UgYW5kIHRoZSBob3N0IGZzKS4KJiM0MzsJYWxsb2Nfd29ya2RpcgomIzQzOwkjIHJlY29yZCB0aGUgc2VydmVyIG5hbWVzcGFjZSBmb3IgY2xlYW51cCgpIGJlZm9yZQomIzQzOwkjIGFueXRoaW5nIGNhbiBmYWlsIHdpdGggdGhlIHNlcnZlciBydW5uaW5nCiYjNDM7CWFjdGl2ZV9zcnZfbnM9JiMzNDskc3J2X25zJiMzNDsKJiM0MzsJKCBuc3ggJiMzNDskc3J2X25zJiMzNDsgJiMzNDtpcGVyZjMgLXMgLTEgJHtzcnZfaXA6JiM0MzstQiAkc3J2X2lwfSAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MSAmYW1wOyBcCiYjNDM7CQllY2hvIFwkISAmZ3Q7ICR7cGlkZmlsZX07IFwKJiM0MzsJCXdhaXQgXCQhOyBcCiYjNDM7CQllY2hvIFwkPyAmZ3Q7ICR7cmNmaWxlfSYjMzQ7ICkgJmFtcDsKJiM0MzsJc2VydmVyX3dyYXBwZXI9JCEKJiM0MzsJIyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvCiYjNDM7CSMgYXBwZWFyIGluc3RlYWQgb2YgcmFjaW5nIHRoZSByZWFkCiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJWyAtcyAmIzM0OyR7cGlkZmlsZX0mIzM0OyBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCXNsZWVwIDAuMQomIzQzOwlkb25lCiYjNDM7CWlmIFsgISAtcyAmIzM0OyR7cGlkZmlsZX0mIzM0OyBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQmIzM0OyBcCiYjNDM7CQkJJiMzNDsobm8gcGlkZmlsZSkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWNhbmRpZGF0ZV9waWQ9JCgmbHQ7JiMzNDske3BpZGZpbGV9JiMzNDspCiYjNDM7CWlmICEgdmFsaWRfc2VydmVyX3BpZCAmIzM0OyRzcnZfbnMmIzM0OyAmIzM0OyR7Y2FuZGlkYXRlX3BpZH0mIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgcGlkICYjMzk7JHtjYW5kaWRhdGVfcGlkfSYjMzk7JiMzNDsgXAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHZhbGlkYXRpb24mIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CSMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvbgomIzQzOwlpcGVyZl9waWQ9JiMzNDske2NhbmRpZGF0ZV9waWR9JiMzNDsKJiM0MzsJc2xlZXAgMQomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIFByaW50ICYjMzQ7Jmx0O2J5dGVzJmd0OyAmbHQ7cGFja2V0cyZndDsmIzM0OyBmb3IgZXhhY3RseSBvbmUgVFggcmVjb3JkIG9mIG5zL2RldjsgYW55dGhpbmcKJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC4KJiM0MztyZWFkX3R4X2NvdW50ZXJzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSYjMzQ7JDEmIzM0OyBkZXY9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIG91dCBjbnQKJiM0MzsKJiM0MzsJb3V0PSQobnN4ICYjMzQ7JG5zJiMzNDsgJiMzNDtpcCAtcyBsaW5rIHNob3cgJGRldiYjMzQ7IHwgXAomIzQzOwkJYXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OykKJiM0MzsJY250PSQoZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLWMgJiMzOTteWzAtOV0qIFswLTldKiQmIzM5OykKJiM0MzsJaWYgWyAmIzM0OyRjbnQmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2JiMzNDsgXAomIzQzOwkJCSYjMzQ7KHJlY29yZHM9JGNudCkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJZWNobyAmIzM0OyRvdXQmIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIFByaW50ICYjMzQ7Jmx0O2J5dGVzJmd0OyAmbHQ7cGFja2V0cyZndDsmIzM0OyBmb3IgZXhhY3RseSBvbmUgUlggcmVjb3JkIG9mIG5zL2RldjsgdGhlCiYjNDM7IyBzYW1lIHNpbmdsZS1yZWNvcmQgZGlzY2lwbGluZSBhcyByZWFkX3R4X2NvdW50ZXJzLgomIzQzO3JlYWRfcnhfY291bnRlcnMoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7IGRldj0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgb3V0IGNudAomIzQzOwomIzQzOwlvdXQ9JChuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2lwIC1zIGxpbmsgc2hvdyAkZGV2JiMzNDsgfCBcCiYjNDM7CQlhd2sgJiMzOTsvXiAmIzQzO1JYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfSYjMzk7KQomIzQzOwljbnQ9JChlY2hvICYjMzQ7JG91dCYjMzQ7IHwgZ3JlcCAtYyAmIzM5O15bMC05XSogWzAtOV0qJCYjMzk7KQomIzQzOwlpZiBbICYjMzQ7JGNudCYjMzQ7IC1uZSAxIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBjYW5ub3QgcGFyc2UgUlggY291bnRlcnMgb2YgJG5zLyRkZXYmIzM0OyBcCiYjNDM7CQkJJiMzNDsocmVjb3Jkcz0kY250KSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwllY2hvICYjMzQ7JG91dCYjMzQ7CiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwomIzQzO2V2YWxfY291bnRlcl9kZWx0YSgpCiYjNDM7ewomIzQzOwlsb2NhbCBuYW1lPSYjMzQ7JDEmIzM0OyBiMD0mIzM0OyQyJiMzNDsgcDA9JiMzNDskMyYjMzQ7IGIxPSYjMzQ7JDQmIzM0OyBwMT0mIzM0OyQ1JiMzNDsgb3A9JiMzNDskNiYjMzQ7IGxpbWl0PSYjMzQ7JDcmIzM0OwomIzQzOwlsb2NhbCBiZCBwZAomIzQzOwomIzQzOwlpZiAhIFtbICYjMzQ7JGIwJiMzNDsgPX4gXlswLTldJiM0MzskICZhbXA7JmFtcDsgJiMzNDskYjEmIzM0OyA9fiBeWzAtOV0mIzQzOyQgJmFtcDsmYW1wOyBcCiYjNDM7CQkmIzM0OyRwMCYjMzQ7ID1+IF5bMC05XSYjNDM7JCAmYW1wOyZhbXA7ICYjMzQ7JHAxJiMzNDsgPX4gXlswLTldJiM0MzskIF1dOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWUmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWJkPSQoKGIxIC0gYjApKQomIzQzOwlwZD0kKChwMSAtIHAwKSkKJiM0MzsJaWYgWyAmIzM0OyRiZCYjMzQ7IC1sdCAwIF0gfHwgWyAmIzM0OyRwZCYjMzQ7IC1sZSAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBjb3VudGVyIGRlbHRhIGludmFsaWQgZm9yICRuYW1lJiMzNDsgXAomIzQzOwkJCSYjMzQ7KGJ5dGVzPSRiZCBwa3RzPSRwZCkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWlmIFsgJiMzNDskb3AmIzM0OyA9ICYjMzQ7Z3QmIzM0OyBdOyB0aGVuCiYjNDM7CQlpZiBbICYjMzQ7JGJkJiMzNDsgLWxlICQoKHBkICogbGltaXQpKSBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0O0ZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCAmbHQ7PSAkbGltaXQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJCXJldD0xCiYjNDM7CQkJcmV0dXJuIDEKJiM0MzsJCWZpCiYjNDM7CWVsc2UKJiM0MzsJCWlmIFsgJiMzNDskYmQmIzM0OyAtZ3QgJCgocGQgKiBsaW1pdCkpIF07IHRoZW4KJiM0MzsJCQllY2hvICYjMzQ7RkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkICZndDsgJGxpbWl0JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCQlyZXQ9MQomIzQzOwkJCXJldHVybiAxCiYjNDM7CQlmaQomIzQzOwlmaQomIzQzOwllY2hvICYjMzQ7SU5GTzogJG5hbWUgY291bnRlciBkZWx0YSBieXRlcz0kYmQgcGFja2V0cz0kcGQmIzM0OyBcCiYjNDM7CQkmIzM0OyhvcCAkb3AgbGltaXQgJGxpbWl0KSBbIE9LIF0mIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbjogYSBwbGFpbiBTQU4gYWdncmVnYXRlIGVudGVyaW5nIGEgUFJQCiYjNDM7IyBMQU4gc2xhdmUgbXVzdCBiZSBzZWdtZW50ZWQgYXQgdGhlIGZvcndhcmQgZW50cnksIG5vdCBkcm9wcGVkLiBQUlAKJiM0MzsjIGRyb3BzIHNsYXZlLXRvLXNsYXZlIGZvcndhcmRpbmcgYnkgZGVzaWduIChwcnBfZHJvcF9mcmFtZSksIHNvIHRoZQomIzQzOyMgY29uc3VtZXIgb2YgTEFOLXNsYXZlIFNBTiB0cmFmZmljIGlzIGxvY2FsIGRlbGl2ZXJ5IHRvIHRoZSBtYXN0ZXIuCiYjNDM7IyBUd28gaW5kZXBlbmRlbnQgb3JhY2xlczogdGhlIFNBTi1zaWRlIHByb29mIHRoYXQgYWdncmVnYXRlcyByZWFsbHkKJiM0MzsjIGFycml2ZWQgYXQgdGhlIERVVCwgYW5kIHRoZSB2b2x1bWUgJiM0MzsgcGVyLWZyYW1lIHNoYXBlIG9mIHRoZSBsb2NhbAomIzQzOyMgZGVsaXZlcnkuIE9uIHRoZSBicm9rZW4gZ2F0ZSB0aGUgYWdncmVnYXRlcyBhcmUgZHJvcHBlZCBhbmQgVENQCiYjNDM7IyBjcmF3bHMgb24gcmV0cmFuc21pdHRlZCBzaW5nbGUgc2VnbWVudHMsIHNlcGFyYXRpbmcgdGhlIGtlcm5lbHMgYnkKJiM0MzsjIGFuIG9yZGVyIG9mIG1hZ25pdHVkZSBpbiBkZWxpdmVyZWQgYnl0ZXMuCiYjNDM7ZG9fbGFuc2FuX2dzb190ZXN0KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHBycF9pcD0mIzM0OzEwLjk5LjEuMSYjMzQ7IGxzX2lwPSYjMzQ7MTAuOTkuMS4xMCYjMzQ7CiYjNDM7CWxvY2FsIG91dCBzYW5fYjAgc2FuX3AwIHNhbl9iMSBzYW5fcDEKJiM0MzsJbG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSByX2IwIHJfcDAgcl9iMSByX3AxCiYjNDM7CiYjNDM7CXNldHVwX25zIG5zX2xzIHx8IGV4aXQgJD8KJiM0MzsKJiM0MzsJaXAgbGluayBhZGQgZF9wYSBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIGxzX2EgbmV0bnMgJiMzNDskbnNfbHMmIzM0OwomIzQzOwlpcCBsaW5rIGFkZCBkX3BiIG5ldG5zICYjMzQ7JG5zX2R1dCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgbHNfcCBuZXRucyAmIzM0OyRuc19scyYjMzQ7CiYjNDM7CiYjNDM7CW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgc2V0IGRfcGEgbXR1IDE2MDAgdXAmIzM0OwomIzQzOwluc3ggJiMzNDskbnNfZHV0JiMzNDsgJiMzNDtpcCBsaW5rIHNldCBkX3BiIG10dSAxNjAwIHVwJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX2xzJiMzNDsgJiMzNDtpcCBsaW5rIHNldCBsc19hIG10dSAxNjAwIHVwOyBcCiYjNDM7CQlpcCBsaW5rIHNldCBsc19wIG10dSAxNjAwIHVwOyBpcCBhZGRyIGFkZCAkbHNfaXAvMjQgZGV2IGxzX2EmIzM0OwomIzQzOwomIzQzOwkjIFBSUCBEVVQgd2l0aCB0aGUgU0FOIG9uIGEgTEFOIHNsYXZlOiBwbGFpbiBTQU4gYWdncmVnYXRlcyBhcmUKJiM0MzsJIyB2YWxpZCB0cmFmZmljIG9uIGEgUFJQIExBTiBhbmQgbXVzdCBub3QgYmUgZHJvcHBlZC4KJiM0MzsJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBhZGQgcHJwMCB0eXBlIGhzciBcCiYjNDM7CQlzbGF2ZTEgZF9wYSBzbGF2ZTIgZF9wYiBwcm90byAxOyBcCiYjNDM7CQlpcCBsaW5rIHNldCBwcnAwIHVwOyBpcCBhZGRyIGFkZCAkcHJwX2lwLzI0IGRldiBwcnAwJiMzNDsKJiM0MzsKJiM0MzsJIyBMZXQgc3VwZXJ2aXNpb24gZnJhbWVzIGNvbnZlcmdlLgomIzQzOwlzbGVlcCAyCiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBFbmFibGluZyBUU08vR1NPIG9uIHRoZSBMQU4tc2lkZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CW5zeCAmIzM0OyRuc19scyYjMzQ7ICYjMzQ7ZXRodG9vbCAtSyBsc19hIHRzbyBvbiBnc28gb24mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2xzJiMzNDsgbHNfYSB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb24KJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0NvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBMQU4tc2lkZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CiYjNDM7CXN0YXJ0X2lwZXJmX3NlcnZlciAmIzM0OyRuc19kdXQmIzM0OyAmIzM0OyRwcnBfaXAmIzM0OyB8fCByZXR1cm4KJiM0MzsKJiM0MzsJcmVhZCAtciByX2IwIHJfcDAgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfcnhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgcHJwMCkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBzYW5fYjAgc2FuX3AwICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX2xzJiMzNDsgbHNfYSkKJiM0MztFT0YKJiM0MzsJaWYgISB2YWxpZF9kZWNpbWFscyAmIzM0OyRyX2IwJiMzNDsgJiMzNDskcl9wMCYjMzQ7ICYjMzQ7JHNhbl9iMCYjMzQ7ICYjMzQ7JHNhbl9wMCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogYmFzZWxpbmUgY291bnRlciBzbmFwc2hvdCBpbnZhbGlkJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwomIzQzOwlpZiAhIG91dD0kKG5zeCAmIzM0OyRuc19scyYjMzQ7ICYjMzQ7dGltZW91dCA2MCBpcGVyZjMgLWMgJHBycF9pcCAtTSAxNDQ2IFwKJiM0MzsJCS1iIDJHIC10IDEwJiMzNDsgMiZndDsmYW1wOzEpOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogTEFOLXNsYXZlIEdTTyBsb2NhbC1kZWxpdmVyeSBzdHJlYW0gZmFpbGVkOiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CXJlYWQgLXIgcl9iMSByX3AxICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3J4X2NvdW50ZXJzICYjMzQ7JG5zX2R1dCYjMzQ7IHBycDApCiYjNDM7RU9GCiYjNDM7CXJlYWQgLXIgc2FuX2IxIHNhbl9wMSAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19scyYjMzQ7IGxzX2EpCiYjNDM7RU9GCiYjNDM7CWlmICEgdmFsaWRfZGVjaW1hbHMgJiMzNDskcl9iMSYjMzQ7ICYjMzQ7JHJfcDEmIzM0OyAmIzM0OyRzYW5fYjEmIzM0OyAmIzM0OyRzYW5fcDEmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGZpbmFsIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsKJiM0MzsJIyBPcmFjbGUgMSAtIGFnZ3JlZ2F0ZXMgcmVhbGx5IGFycml2ZWQ6IHRoZSBTQU4gZW1pdHRlZAomIzQzOwkjIHN1cGVyLXBhY2tldHMgdG93YXJkIHRoZSBEVVQuCiYjNDM7CWV2YWxfY291bnRlcl9kZWx0YSAmIzM0O1NBTiBsc19hIFRYJiMzNDsgJiMzNDskc2FuX2IwJiMzNDsgJiMzNDskc2FuX3AwJiMzNDsgXAomIzQzOwkJJiMzNDskc2FuX2IxJiMzNDsgJiMzNDskc2FuX3AxJiMzNDsgZ3QgJiMzNDskU0FOX0FWR19NSU4mIzM0OwomIzQzOwlbICYjMzQ7JHtyZXQ6LTB9JiMzNDsgLWVxIDAgXSB8fCByZXR1cm4KJiM0MzsKJiM0MzsJIyBPcmFjbGUgMiAtIGxvY2FsIGRlbGl2ZXJ5IG9mIHRob3NlIGFnZ3JlZ2F0ZXM6IHZvbHVtZSBhbmQKJiM0MzsJIyBwZXItZnJhbWUgc2hhcGUgb24gdGhlIFBSUCBtYXN0ZXIuIFRoZSB2b2x1bWUgZ2F0ZSBzZXBhcmF0ZXMKJiM0MzsJIyBmdWxsIGRlbGl2ZXJ5IGZyb20gdGhlIHJldHJhbnNtaXQgY3Jhd2wgdGhlIGJyb2tlbiBnYXRlIGxlYXZlczsKJiM0MzsJIyB0aGUgYXZlcmFnZSBnYXRlIHByb3ZlcyB0aGUgYnl0ZXMgYXJyaXZlZCBwZXItZnJhbWUuCiYjNDM7CWlmIFsgJCgocl9iMSAtIHJfYjApKSAtbHQgMTAwMDAwMDAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBMQU4tc2xhdmUgbG9jYWwgZGVsaXZlcnkgZGVncmFkZWQmIzM0OyBcCiYjNDM7CQkJJiMzNDsocHJwMCBSWCBkZWx0YSAkKChyX2IxIC0gcl9iMCkpIGJ5dGVzICZsdDsgMTAwMDAwMDAwKSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWlmIFsgJCgocl9iMSAtIHJfYjApKSAtZ3QgJCgoIChyX3AxIC0gcl9wMCkgKiBMQU5fQVZHX01BWCApKSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbG9jYWwgZGVsaXZlcnkgbm90IHBlci1mcmFtZSYjMzQ7IFwKJiM0MzsJCQkmIzM0OyhhdmcgJCgoIChyX2IxIC0gcl9iMCkgLyAocl9wMSAtIHJfcDApICkpICZndDsgJExBTl9BVkdfTUFYKSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBMQU4tc2xhdmUgbG9jYWwgZGVsaXZlcnkgcHJwMCBSWCBkZWx0YSYjMzQ7IFwKJiM0MzsJCSYjMzQ7JCgocl9iMSAtIHJfYjApKSBieXRlcyAvICQoKHJfcDEgLSByX3AwKSkgcGt0cyBbIE9LIF0mIzM0OwomIzQzOwlyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm4KJiM0MzsJZWNobyAmIzM0O0lORk86IExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbiBbIE9LIF0mIzM0OwomIzQzO30KJiM0MzsKJiM0Mztkb190c29fc3RyZWFtX3Rlc3QoKQomIzQzO3sKJiM0MzsJbG9jYWwgb3V0IHNlbmRlcl9yZXRyCiYjNDM7CWxvY2FsIHNhbl9iMCBzYW5fcDAgc2FuX2IxIHNhbl9wMQomIzQzOwlsb2NhbCBhX2IwIGFfcDAgYV9iMSBhX3AxIGJfYjAgYl9wMCBiX2IxIGJfcDEKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IEVuYWJsaW5nIFRTTy9HU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7ZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19zYW4mIzM0OyBzMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb24KJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0NvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtJmd0OyBwZWVyIHRocm91Z2ggdGhlIEhTUiBEVVQuJiMzNDsKJiM0MzsJc3RhcnRfaXBlcmZfc2VydmVyICYjMzQ7JG5zX3BlZXImIzM0OyB8fCByZXR1cm4KJiM0MzsKJiM0MzsJIyBDb3VudGVyIHNuYXBzaG90cyBhcm91bmQgdGhlIHN0cmVhbSB3aW5kb3cuIFRoZSBTQU4tc2lkZSBhdmVyYWdlCiYjNDM7CSMgbXVzdCBleGNlZWQgU0FOX0FWR19NSU4gKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IEdTTyBzdXBlci1wYWNrZXRzCiYjNDM7CSMgcmVhbGx5IGxlZnQgdGhlIFNBTik7IGVhY2ggRFVUIExBTiBsZWcgbXVzdCBzdGF5IHVuZGVyIExBTl9BVkdfTUFYCiYjNDM7CSMgKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IGJ1bGsgb3V0cHV0IHdhcyBzZWdtZW50ZWQgcGVyLWZyYW1lKS4gVGhlc2UKJiM0MzsJIyBhcmUgYWdncmVnYXRlIGRpc2NyaW1pbmF0b3JzLCBub3QgYSBwZXItZnJhbWUgbWF4aW11bSBwcm9vZi4KJiM0MzsJc2FuX2IwPTA7IHNhbl9wMD0wOyBhX2IwPTA7IGFfcDA9MDsgYl9iMD0wOyBiX3AwPTAKJiM0MzsJcmVhZCAtciBzYW5fYjAgc2FuX3AwICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX3NhbiYjMzQ7IHMwKQomIzQzO0VPRgomIzQzOwlyZWFkIC1yIGFfYjAgYV9wMCAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19kdXQmIzM0OyBkX2EpCiYjNDM7RU9GCiYjNDM7CXJlYWQgLXIgYl9iMCBiX3AwICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYikKJiM0MztFT0YKJiM0MzsJaWYgISB2YWxpZF9kZWNpbWFscyAmIzM0OyRzYW5fYjAmIzM0OyAmIzM0OyRzYW5fcDAmIzM0OyAmIzM0OyRhX2IwJiMzNDsgJiMzNDskYV9wMCYjMzQ7IFwKJiM0MzsJCSYjMzQ7JGJfYjAmIzM0OyAmIzM0OyRiX3AwJiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBiYXNlbGluZSBUWCBjb3VudGVyIHNuYXBzaG90IGludmFsaWQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CiYjNDM7CSMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eQomIzQzOwkjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuCiYjNDM7CSMgVW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJIGVkZ2UgcmF0ZXMgd2l0aG91dCBpbmRpY2F0aW5nIGEKJiM0MzsJIyBmdW5jdGlvbmFsIHByb2JsZW0uCiYjNDM7CWlmICEgb3V0PSQobnN4ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7dGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcCiYjNDM7CQktYiAyRyAtdCAxMCYjMzQ7IDImZ3Q7JmFtcDsxKTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBjbGllbnQgZmFpbGVkOiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CXJlYWQgLXIgc2FuX2IxIHNhbl9wMSAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19zYW4mIzM0OyBzMCkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBhX2IxIGFfcDEgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgZF9hKQomIzQzO0VPRgomIzQzOwlyZWFkIC1yIGJfYjEgYl9wMSAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19kdXQmIzM0OyBkX2IpCiYjNDM7RU9GCiYjNDM7CWlmICEgdmFsaWRfZGVjaW1hbHMgJiMzNDskc2FuX2IxJiMzNDsgJiMzNDskc2FuX3AxJiMzNDsgJiMzNDskYV9iMSYjMzQ7ICYjMzQ7JGFfcDEmIzM0OyBcCiYjNDM7CQkmIzM0OyRiX2IxJiMzNDsgJiMzNDskYl9wMSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtTQU4gczAgVFgmIzM0OyAmIzM0OyRzYW5fYjAmIzM0OyAmIzM0OyRzYW5fcDAmIzM0OyAmIzM0OyRzYW5fYjEmIzM0OyAmIzM0OyRzYW5fcDEmIzM0OyBcCiYjNDM7CQlndCAmIzM0OyRTQU5fQVZHX01JTiYjMzQ7CiYjNDM7CWV2YWxfY291bnRlcl9kZWx0YSAmIzM0O0RVVCBkX2EgVFgmIzM0OyAmIzM0OyRhX2IwJiMzNDsgJiMzNDskYV9wMCYjMzQ7ICYjMzQ7JGFfYjEmIzM0OyAmIzM0OyRhX3AxJiMzNDsgXAomIzQzOwkJbGUgJiMzNDskTEFOX0FWR19NQVgmIzM0OwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtEVVQgZF9iIFRYJiMzNDsgJiMzNDskYl9iMCYjMzQ7ICYjMzQ7JGJfcDAmIzM0OyAmIzM0OyRiX2IxJiMzNDsgJiMzNDskYl9wMSYjMzQ7IFwKJiM0MzsJCWxlICYjMzQ7JExBTl9BVkdfTUFYJiMzNDsKJiM0MzsJWyAmIzM0OyR7cmV0Oi0wfSYjMzQ7IC1lcSAwIF0gfHwgcmV0dXJuCiYjNDM7CiYjNDM7CSMgc3VjY2VzcyBwYXRoOiBib3VuZGVkIHJlYXAgd2l0aCB0aGUgc2VydmVyJiMzOTtzIHJlYWwgc3RhdHVzCiYjNDM7CXJlYXBfaXBlcmZfc2VydmVyIHx8IHJldHVybgomIzQzOwomIzQzOwkjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUCiYjNDM7CSMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlcgomIzQzOwkjIGdhdGVzICh0aGUgY291bnRlciBpbmVxdWFsaXRpZXMgYWJvdmUgYXJlIHRoZSBwcmltYXJ5IGV2aWRlbmNlKS4KJiM0MzsJc2VuZGVyX3JldHI9JChlY2hvICYjMzQ7JG91dCYjMzQ7IHwgYXdrICYjMzk7L3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0mIzM5OykKJiM0MzsJaWYgWyAmIzM0OyQoZWNobyAmIzM0OyRzZW5kZXJfcmV0ciYjMzQ7IHwgZ3JlcCAtRWMgJiMzOTteWzAtOV0mIzQzOyQmIzM5OykmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIHNlbmRlciByZXRyYW5zbWl0cyByZWxpYWJseSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7JiMzNDsgXAomIzQzOwkJJiMzNDtzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDskb3V0JiMzNDsgfCBncmVwIC1FICYjMzQ7c2VuZGVyfHJlY2VpdmVyJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hlY2tfcHJlcmVxdWlzaXRlcwomIzQzO2NoZWNrX3Rvb2wgZXRodG9vbAomIzQzO2NoZWNrX3Rvb2wgaXBlcmYzCiYjNDM7Y2hlY2tfdG9vbCB0aW1lb3V0CiYjNDM7CiYjNDM7IyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LgomIzQzO2lmICEgaXAgbGluayBoZWxwIGhzciAyJmd0OyZhbXA7MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydCYjMzQ7CiYjNDM7CWV4aXQgJGtzZnRfc2tpcAomIzQzO2ZpCiYjNDM7CiYjNDM7c2V0dXBfdG9wbwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC0mZ3Q7IHBlZXIgdGhyb3VnaCB0aGUgRFVUKS4mIzM0OwomIzQzO2RvX3BpbmcgJiMzNDskbnNfc2FuJiMzNDsgJiMzNDskcGVlcl9pcCYjMzQ7CiYjNDM7c3RvcF9pZl9lcnJvciAmIzM0O0luaXRpYWwgdmFsaWRhdGlvbiBmYWlsZWQuJiMzNDsKJiM0MzsKJiM0Mztkb19ncm9fZmVhdHVyZV9jaGVja3MKJiM0Mztkb190c29fc3RyZWFtX3Rlc3QKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7R1NPIHN1cGVyLXBhY2tldCBzdHJlYW0gdGVzdCBmYWlsZWQuJiMzNDsKJiM0MzsKJiM0Mztkb19sYW5zYW5fZ3NvX3Rlc3QKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7TEFOLXNsYXZlIHBsYWluLUdTTyByZWdyZXNzaW9uIGZhaWxlZC4mIzM0OwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBBbGwgZ29vZC4mIzM0OwomIzQzO2NsZWFudXAKJiM0MztleGl0ICRyZXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTU5CgkJCQkJCQlvdXRwdXQ6IDIwNQoJCQkJCQkJdGhvdWdodHM6IDE2MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbjogR1JPL0dTTyBQYXRjaCBmb3IgSFNSKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtZXNzaW5nIHdpdGggR1JPIGFuZCBHU08gd2l0aGluIHRoZSBIU1IgZnJhbWV3b3JrLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHJ1biBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBvbiB0aGlzIHRoaW5nLiBXZSYjMzk7cmUgbG9va2luZyBhdCBjaGFuZ2VzIHRoYXQ6CgoxLiAgRGlzYWJsZSBHUk8gb24gZGV2aWNlcyBlbnNsYXZlZCB0byBhbiBIU1IgbWFzdGVyLiBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgYWRkZWQgaGVyZS4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoyLiAgTW9kaWZ5IGhvdyBIU1IgaGFuZGxlcyBHU08gc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gYmVmb3JlIGZvcndhcmRpbmcuIFRoaXMgaXMgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydC4gSXQmIzM5O3MgZG9uZSB0aHJvdWdoIHRoZSBuZXcgYGhzcl9mb3J3YXJkX3NrYmAgZnVuY3Rpb24gYW5kIHRoZSB1c2FnZSBvZiBgX19za2JfZ3NvX3NlZ21lbnRgLiBUaGV5JiMzOTtyZSBhbHNvIGFkanVzdGluZyB0aGUgbG9ja2luZyBhcm91bmQgdGhlIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzIHdpdGhpbiB0aGUgSFNSIGNvZGUuCgpOb3csIGxldCYjMzk7cyBsb29rIGNsb3NlciBhdCB0aGUgY29kZS4gSSBzZWUgdGhleSYjMzk7cmUgZG9pbmcgYHNrYl9oZWFkZXJfcG9pbnRlcmAgY2FsbHMsIGFuZCB0aGVyZSBhcmUgc29tZSBidWZmZXJzLCBsaWtlIGBlaGAgYW5kIGB2aGAgdG8gaG9sZCB0aGUgRXRoZXJuZXQgYW5kIFZMQU4gaGVhZGVycy4gTm8gYmlnIGRlYWwsIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZS4gVGhlIHBhdGNoIGNhbGxzIGBfX3NrYl9nc29fc2VnbWVudGAuCgpUaGUgb2J2aW91cyBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPwoKUmlnaHQgb2ZmIHRoZSBiYXQsIEkgd2FudCB0byBydWxlIG91dCBhbnkgaW1tZWRpYXRlIEtNU0FOIGZsYWdzLiBUaGVyZSBhcmUgYSBmZXcgYXJlYXMgdGhhdCBjb25jZXJuIG1lLCBzbyBJIHdhbnQgdG8gYmUgdGhvcm91Z2guCgoqICAgYHNrYl9oZWFkZXJfcG9pbnRlcmAgLSBJdCBzZWVtcyBzYWZlIGJlY2F1c2UgaXQgZWl0aGVyIHJldHVybnMgYSBwb2ludGVyIHRvIGluaXRpYWxpemVkIGRhdGEgd2l0aGluIHRoZSBgc2tiYCBvciBpdCBmaWxscyB0aGUgZ2l2ZW4gYnVmZmVyLgoqICAgYF9fc2tiX2dzb19zZWdtZW50YCAtIEkmIzM5O20gYSBsaXR0bGUgbW9yZSBjb25jZXJuZWQgaGVyZSBiZWNhdXNlIGl0IGNyZWF0ZXMgbmV3IHNrYnMuIEJ1dCBgX19za2JfZ3NvX3NlZ21lbnRgIGlzIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBzbyBJJiMzOTttIG5vdCBvdmVybHkgd29ycmllZCBhYm91dCBpdC4gSXQmIzM5O3MgYSB3ZWxsLXRlc3RlZCBwYXJ0IG9mIHRoZSBrZXJuZWwuCgpJIG5lZWQgdG8gYmUgY2VydGFpbi4gU28sIHRoZXJlIGlzIG5vIG5ldyBrZXJuZWwgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIE5vIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBXZSBhcmUgZGVhbGluZyB3aXRoIHN0YW5kYXJkIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIHRoZSBHUk8vR1NPIGZlYXR1cmVzLCBhbmQgc29tZSBsb2NraW5nLgoKSSB0YWtlIGEgbG9vayBhdCB0aGUgbmV3bHkgYWRkZWQgZnVuY3Rpb24sIGBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90b2AuIEl0IHJlYWRzIGhlYWRlciBkYXRhIHVzaW5nIGBza2JfaGVhZGVyX3BvaW50ZXJgLiBJZiB0aGUgaGVhZGVyIGRhdGEgaXMgaW4gdGhlIGxpbmVhciBwYXJ0LCBpdCByZXR1cm5zIGEgcG9pbnRlcjsgb3RoZXJ3aXNlLCBpdCBjb3BpZXMgdGhlIGhlYWRlciBpbnRvIGEgbG9jYWwgYnVmZmVyLiBJIHNlZSBhIGZhbWlsaWFyIHBhdHRlcm4gdXNpbmcgYHNrYl9oZWFkZXJfcG9pbnRlcmA6CgpgYGBjCglldGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCAwLCBzaXplb2YoZWgpLCAmYW1wO2VoKTsKCWlmICghZXRoKQoJCXJldHVybiAwOwoJcHJvdG8gPSBldGgtJmd0O2hfcHJvdG87CmBgYAoKVGhpcyBwYXR0ZXJuIGlzIHdlbGwtdW5kZXJzdG9vZCwgc3RhbmRhcmQsIGFuZCBzYWZlLiBTbywgSSBzZWUgbm8gcG90ZW50aWFsIEtNU0FOIGlzc3VlcyBoZXJlLgoKRXNzZW50aWFsbHksIGFsbCB0aGUgbWVtb3J5IGFjY2VzcyBpcyBzYWZlLCBpbml0aWFsaXplZCBtZW1vcnksIHN0YW5kYXJkIG5ldHdvcmsgb3BlcmF0aW9ucy4gSSBoYXZlIHRvIHNheSwgYmFzZWQgb24gbXkgZXhwZXJ0IGFzc2Vzc21lbnQsIHRoZXJlJiMzOTtzIG5vIHNtb2tpbmcgZ3VuIGhlcmUgdGhhdCB3YXJyYW50cyBhIEtNU0FOIHJ1bi4gQW55IG1lbW9yeS1yZWxhdGVkIGlzc3VlcywgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvY2tpbmcgcHJvYmxlbXMsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gS01TQU4gaXMgb3ZlcmtpbGwgaW4gdGhpcyBjYXNlLgoKRmluYWwgYW5zd2VyOiBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSBzdGFuZGFyZCB0b29scyBzaG91bGQgYmUgc3VmZmljaWVudC4gVGhlIHBhdGNoIGZpeGVzIGEgYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGhhbmRsZSBHU08gKEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQpIHN1cGVyLXBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtIGJlZm9yZSBmb3J3YXJkaW5nLCBhbmQgZGlzYWJsZXMgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgb24gZW5zbGF2ZWQgZGV2aWNlcy4gSXQgYWxzbyBhZGp1c3RzIGxvY2tpbmcgYXJvdW5kIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBza2Igc2VnbWVudGF0aW9uIChgX19za2JfZ3NvX3NlZ21lbnRgKSwgYW5kIHJlYWRpbmcgcGFja2V0IGhlYWRlcnMgdXNpbmcgdGhlIHN0YW5kYXJkIGBza2JfaGVhZGVyX3BvaW50ZXJgIGZ1bmN0aW9uLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgdG8gaGFuZGxlIEdTTyAoR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCkgc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gYmVmb3JlIGZvcndhcmRpbmcsIGFuZCBkaXNhYmxlcyBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBvbiBlbnNsYXZlZCBkZXZpY2VzLiBJdCBhbHNvIGFkanVzdHMgbG9ja2luZyBhcm91bmQgc2VxdWVuY2UgbnVtYmVyIGluY3JlbWVudHMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgbG9naWMsIHNrYiBzZWdtZW50YXRpb24gKGBfX3NrYl9nc29fc2VnbWVudGApLCBhbmQgcmVhZGluZyBwYWNrZXQgaGVhZGVycyB1c2luZyB0aGUgc3RhbmRhcmQgYHNrYl9oZWFkZXJfcG9pbnRlcmAgZnVuY3Rpb24uIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDowMy45NDMzOTEzOTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzM4MDI4MjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgICBcImRldl9kaXNhYmxlX2dyb1wiLFxuICAgIFwibmV0aWZfZGlzYWJsZV9ncm9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgdG8gaGFuZGxlIEdTTyAoR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCkgc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gYmVmb3JlIGZvcndhcmRpbmcsIGFuZCBkaXNhYmxlcyBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBvbiBlbnNsYXZlZCBkZXZpY2VzLiBJdCBhbHNvIGFkanVzdHMgbG9ja2luZyBhcm91bmQgc2VxdWVuY2UgbnVtYmVyIGluY3JlbWVudHMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgbG9naWMsIHNrYiBzZWdtZW50YXRpb24gKGBfX3NrYl9nc29fc2VnbWVudGApLCBhbmQgcmVhZGluZyBwYWNrZXQgaGVhZGVycyB1c2luZyB0aGUgc3RhbmRhcmQgYHNrYl9oZWFkZXJfcG9pbnRlcmAgZnVuY3Rpb24uIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHByb3RvY29sIHRvIGhhbmRsZSBHU08gc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byB0aGUgY29yZSBuZXR3b3JrIGRldmljZSBBUEkgdG8gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIGRldmljZSwgYW5kIHVzZXMgdGhpcyB0byBkaXNhYmxlIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcGFja2V0IHByb2Nlc3NpbmcgYW5kIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDowMy45NDMzOTkxNzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjUwNjQ3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjNGRhMTdlOTY2MWQ5YjNkM2E1NDQ1OGI0MDVlN2ZkZjZhZDE2MmUyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTc6NDA6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCA5OTgxZDYzN2Y4YjU0Li5lYmEyYzI2YTQ5YmE4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuQEAgLTM0MzQsNiArMzQzNCw4IEBAIHZvaWQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xcbiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7XFxuIHUxNiBkZXZfcGlja190eF96ZXJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2Rldik7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCA1OTMzYzVkYWIwOWVlLi5mMjBkNWFiMGNmNzI5IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtMTg0MCw2ICsxODQwLDIxIEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0fVxcbiB9XFxuIFxcbit2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4rXFxuK1xcdGRldi1cXHUwMDNld2FudGVkX2ZlYXR1cmVzIFxcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XFxuK1xcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcXG4rXFxuK1xcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoZGV2LCBsb3dlcl9kZXYsIGl0ZXIpIHtcXG4rXFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XFxuK1xcdFxcdG5ldGlmX2Rpc2FibGVfZ3JvKGxvd2VyX2Rldik7XFxuK1xcdFxcdG5ldGRldl91bmxvY2tfb3BzKGxvd2VyX2Rldik7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyoqXFxuICAqXFx0ZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxcbiAgKlxcdEBkZXY6IGRldmljZVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmNcXG5pbmRleCA0Mzc5NDdkZDA4ZWQ1Li4zY2EyNTE1YWQwNDg2IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldl9hcGkuY1xcbisrKyBiL25ldC9jb3JlL2Rldl9hcGkuY1xcbkBAIC0yNjksNiArMjY5LDI3IEBAIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xcbiBcXG4rLyoqXFxuKyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxcbisgKiBAZGV2OiBkZXZpY2VcXG4rICpcXG4rICogQmVzdC1lZmZvcnQgZGlzYWJsZSBvZiBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldFxcbisgKiBkZXZpY2UuICBNdXN0IGJlIGNhbGxlZCB1bmRlciBSVE5MLiAgVGhpcyBpcyBuZWVkZWQgaWYgcmVjZWl2ZWRcXG4rICogcGFja2V0cyBtYXkgYmUgZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLlxcbisgKlxcbisgKiBUaGUgZGlzYWJsZSBpcyBiZXN0LWVmZm9ydDogYSBkZXZpY2Ugd2l0aCBhIGZpeGVkLW9uIGZlYXR1cmUgKGZvclxcbisgKiBleGFtcGxlIEdST19IVyBvbiBhIHZpcnRpby1uZXQgZGV2aWNlIG5lZ290aWF0ZWQgd2l0aG91dFxcbisgKiBWSVJUSU9fTkVUX0ZfQ1RSTF9HVUVTVF9PRkZMT0FEUykga2VlcHMgaXQgZW5hYmxlZC4gIENhbGxlcnMgdGhhdFxcbisgKiBuZWVkIGEgaGFyZCBndWFyYW50ZWUgbXVzdCBpbnNwZWN0IHRoZSByZXN1bHRpbmcgZmVhdHVyZSBzdGF0ZS5cXG4rICovXFxuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuK1xcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XFxuK1xcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pO1xcbitcXG4gLyoqXFxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxcbiAgKiBAZGV2OiBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbmluZGV4IDU1NTViNzFhYjE5YjUuLjI0OGNiYjE0MmUyMWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3JfZGV2aWNlLmNcXG4rKysgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbkBAIC0yMzIsOSArMjMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRza2ItXFx1MDAzZWRldiA9IG1hc3Rlci1cXHUwMDNlZGV2O1xcbiBcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xcbiBcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbkBAIC0zMzUsNiArMzMzLDcgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxcbiBcXHRcXHRoc3Jfc3RhZy1cXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXFx1MDAzZXNlcXVlbmNlX25yKTtcXG4gXFx0XFx0aHNyLVxcdTAwM2VzZXF1ZW5jZV9ucisrO1xcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xcbiBcXHQvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqL1xcbkBAIC0zNTYsMTQgKzM1NSwxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuIFxcdFxcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXFx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVxcdTAwM2VtYWNhZGRyZXNzX3JlZGJveCk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbitcXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuIFxcbiBcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLVxcdHJldHVybjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXFxuQEAgLTM5MCw2ICszODUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHRoc3Jfc3RhZy1cXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXFx1MDAzZXN1cF9zZXF1ZW5jZV9ucik7XFxuIFxcdGhzci1cXHUwMDNlc3VwX3NlcXVlbmNlX25yKys7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHRoc3Jfc3RhZy1cXHUwMDNldGx2LkhTUl9UTFZfdHlwZSA9IFBSUF9UTFZfTElGRV9DSEVDS19ERDtcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTtcXG4gXFxuQEAgLTM5NywxMyArMzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbiBcXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbiBcXG4tXFx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuK1xcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4gXFxuIFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XFxuLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiB9XFxuIFxcbiAvKiBBbm5vdW5jZSAoc3VwZXJ2aXNpb24gZnJhbWUpIHRpbWVyIGZ1bmN0aW9uXFxuQEAgLTY1OSw3ICs2NTIsNyBAQCB2b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuIFxcbiBcXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfFxcbi1cXHRcXHRcXHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcXG4rXFx0XFx0XFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcXG4gXFx0XFx0XFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxcbiBcXHRcXHRcXHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG5pbmRleCAwNzc0OTgxYTY1YzE2Li5mNDI2OTRjZjQzMDk5IDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZ3NvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJoc3JfbWFpbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaHNyX2ZyYW1lcmVnLmhcXFwiXFxuIFxcbkBAIC02MjEsOSArNjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxcbiBcXHQgICAgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XFxuIFxcdFxcdC8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovXFxuLVxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0XFx0ZnJhbWUtXFx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVxcdTAwM2VzZXF1ZW5jZV9ucjtcXG4gXFx0XFx0aHNyLVxcdTAwM2VzZXF1ZW5jZV9ucisrO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC03MzEsNyArNzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4gfVxcbiBcXG4gLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbitzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4ge1xcbiBcXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7XFxuIFxcbkBAIC03NDYsOCArNzQ4LDggQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbiBcXHQgKiBTbyBjaGVjayBhbmQgaW5jcmVtZW50IHN0YXRzIGZvciBtYXN0ZXIgcG9ydCBvbmx5IGhlcmUuXFxuIFxcdCAqL1xcbiBcXHRpZiAocG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8IHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xcbi1cXHRcXHRwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZXN0YXRzLnR4X3BhY2tldHMrKztcXG4tXFx0XFx0cG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXFx1MDAzZWxlbjtcXG4rXFx0XFx0REVWX1NUQVRTX0lOQyhwb3J0LVxcdTAwM2VkZXYsIHR4X3BhY2tldHMpO1xcbitcXHRcXHRERVZfU1RBVFNfQUREKHBvcnQtXFx1MDAzZWRldiwgdHhfYnl0ZXMsIHNrYi1cXHUwMDNlbGVuKTtcXG4gXFx0fVxcbiBcXG4gXFx0a2ZyZWVfc2tiKGZyYW1lLnNrYl9oc3IpO1xcbkBAIC03NTcsNiArNzU5LDEwNSBAQCB2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuIFxcbiBvdXRfZHJvcDpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdHBvcnQtXFx1MDAzZWRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRERVZfU1RBVFNfSU5DKHBvcnQtXFx1MDAzZWRldiwgdHhfZHJvcHBlZCk7XFxuK1xcdGtmcmVlX3NrYihza2IpO1xcbit9XFxuK1xcbisvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xcbisgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuXFxuKyAqL1xcbisvKiBFZmZlY3RpdmUgZnJhbWUgcHJvdG9jb2wgb2YgYSAocG9zc2libHkgVkxBTi10YWdnZWQpIHNrYiwgb3IgMCB3aGVuXFxuKyAqIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIG9yIHRoZSB0YWdnaW5nIGV4Y2VlZHMgd2hhdCBIU1Igc3VwcG9ydHMuXFxuKyAqIEhTUiBzdXBwb3J0cyBvbmUgODAyLjFRIEMtdGFnIG9ubHksIG1hdGNoaW5nIGZpbGxfZnJhbWVfaW5mbygpOiBhblxcbisgKiBhY2NlbGVyYXRlZCB0YWcgbXVzdCBiZSBhIEMtdGFnIHdpdGggYSBub24tVkxBTiBpbm5lciBwcm90b2NvbDsgYW5cXG4rICogaW4tYmFuZCB0YWcgaXMgdW53cmFwcGVkIGV4YWN0bHkgb25jZSBhbmQgYSByZXNpZHVhbCBWTEFOIEV0aGVyVHlwZVxcbisgKiBpcyByZWplY3RlZC4gUmVhZC1vbmx5OyBubyBzdGF0ZSBpcyBrZXB0IGJleW9uZCB0aGUgaW1tZWRpYXRlXFxuKyAqIHByb3RvY29sIHZhbHVlLlxcbisgKi9cXG4rc3RhdGljIF9fYmUxNiBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBldGhoZHIgZWg7XFxuK1xcdHN0cnVjdCB2bGFuX2hkciB2aDtcXG4rXFx0Y29uc3Qgc3RydWN0IGV0aGhkciAqZXRoO1xcbitcXHRjb25zdCBzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHI7XFxuK1xcdF9fYmUxNiBwcm90bztcXG4rXFxuK1xcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XFxuK1xcdFxcdC8qIEhTUiBzdXBwb3J0cyBvbmUgODAyLjFRIEMtdGFnIG9ubHkuICovXFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZXZsYW5fcHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0aWYgKGV0aF90eXBlX3ZsYW4oc2tiLVxcdTAwM2Vwcm90b2NvbCkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2Vwcm90b2NvbDtcXG4rXFx0fVxcbitcXG4rXFx0ZXRoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKGVoKSwgXFx1MDAyNmVoKTtcXG4rXFx0aWYgKCFldGgpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cHJvdG8gPSBldGgtXFx1MDAzZWhfcHJvdG87XFxuK1xcdGlmICghZXRoX3R5cGVfdmxhbihwcm90bykpXFxuK1xcdFxcdHJldHVybiBwcm90bztcXG4rXFx0aWYgKHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR2aGRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgRVRIX0hMRU4sIHNpemVvZih2aCksIFxcdTAwMjZ2aCk7XFxuK1xcdGlmICghdmhkcilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwcm90byA9IHZoZHItXFx1MDAzZWhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87XFxuK1xcdGlmIChldGhfdHlwZV92bGFuKHByb3RvKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gcHJvdG87XFxuK31cXG4rXFxuK3ZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKm5leHQ7XFxuK1xcdF9fYmUxNiBwcm90bztcXG4rXFxuK1xcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcXG4rXFx0XFx0aHNyX2ZvcndhcmRfc2tiX29uZShza2IsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIENvbmZvcm1pbmcgcGxhaW4tcHJvdG9jb2wgR1NPIHN1cGVyLXBhY2tldHMgY2FycnkgdHJhaWxlci1mcmVlXFxuK1xcdCAqIHNlbmRlciBwYXlsb2FkIGFuZCBhcmUgc2VnbWVudGVkIGhlcmU6IGVhY2ggc2VnbWVudCBpcyBkZWxpdmVyZWRcXG4rXFx0ICogb3IgZm9yd2FyZGVkIGFzIGl0cyBvd24gd2lyZSBmcmFtZSwgb24gYW55IGluZ3Jlc3Mgcm9sZS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGdhdGUgaXMgY29udGVudC1iYXNlZCwgbm90IHBvcnQtYmFzZWQuIEFuIGFnZ3JlZ2F0ZSB3aG9zZVxcbitcXHQgKiBlZmZlY3RpdmUgcHJvdG9jb2wgaXMgRVRIX1BfSFNSIG9yIEVUSF9QX1BSUCBjYW5ub3QgYmUgc2FmZWx5XFxuK1xcdCAqIHNlZ21lbnRlZCBhbmQgaXMgZHJvcHBlZCwgYXMgaXMgYW55IHNrYiB3aG9zZSBoZWFkZXIgY2Fubm90IGJlXFxuK1xcdCAqIHJlYWQgb3Igd2hvc2UgdGFnZ2luZyBleGNlZWRzIHRoZSBzaW5nbGUgODAyLjFRIEMtdGFnIEhTUlxcbitcXHQgKiBzdXBwb3J0cy4gV2l0aCBORVRJRl9GX0hXX0hTUl9UQUdfUk0gdGhlIGxvd2VyIGhhcyBhbHJlYWR5XFxuK1xcdCAqIHN0cmlwcGVkIHRoZSB0YWcsIHNvIHN1Y2ggYWdncmVnYXRlcyBhcnJpdmUgcGxhaW4gYW5kIGFyZVxcbitcXHQgKiBzZWdtZW50ZWQuXFxuK1xcdCAqL1xcbitcXHRwcm90byA9IGhzcl9nc29fZWZmZWN0aXZlX3Byb3RvKHNrYik7XFxuK1xcdGlmICghcHJvdG8pXFxuK1xcdFxcdGdvdG8gZHJvcF9nc287IC8qIGNsYXNzaWZpY2F0aW9uIGZhaWx1cmUsIGZhaWwtc2FmZSAqL1xcbitcXHRpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSB8fCBwcm90byA9PSBodG9ucyhFVEhfUF9QUlApKVxcbitcXHRcXHRnb3RvIGRyb3BfZ3NvO1xcbitcXG4rXFx0LyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWVcXG4rXFx0ICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb21cXG4rXFx0ICogdGhlIGludGVybGluayBmb2xsb3dzIFJYIGNoZWNrc3VtIHNlbWFudGljcy5cXG4rXFx0ICovXFxuK1xcdHNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUik7XFxuK1xcdGlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKVxcbitcXHRcXHRnb3RvIGRyb3BfZ3NvO1xcbitcXG4rXFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0d2hpbGUgKHNlZ3MpIHtcXG4rXFx0XFx0bmV4dCA9IHNlZ3MtXFx1MDAzZW5leHQ7XFxuK1xcdFxcdHNlZ3MtXFx1MDAzZW5leHQgPSBOVUxMO1xcbitcXHRcXHRoc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpO1xcbitcXHRcXHRzZWdzID0gbmV4dDtcXG4rXFx0fVxcbitcXHRyZXR1cm47XFxuK1xcbitkcm9wX2dzbzpcXG4rXFx0REVWX1NUQVRTX0lOQyhwb3J0LVxcdTAwM2VkZXYsIHR4X2Ryb3BwZWQpO1xcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9zbGF2ZS5jIGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbmluZGV4IDAxYzczYjRiNTBkZGQuLmFhMjE1NGIxOWMwYjkgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbisrKyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcXG5AQCAtNzMsMTYgKzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdH1cXG4gXFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcXG4gXFxuLVxcdC8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhXFxuLVxcdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xcbi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLVxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuLVxcdH1cXG4rXFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuIFxcbiBmaW5pc2hfY29uc3VtZTpcXG4gXFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XFxuQEAgLTE3MSw2ICsxNjIsMTEgQEAgc3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0Z290byBmYWlsX3J4X2hhbmRsZXI7XFxuIFxcdGRldl9kaXNhYmxlX2xybyhkZXYpO1xcbiBcXG4rXFx0LyogR1JPIGRpc2FibGluZyBpcyBiZXN0LWVmZm9ydDogZGV2aWNlcyB3aXRoIGZpeGVkLW9uXFxuK1xcdCAqIEdSTy9HUk9fSFcgY2Fubm90IGJlIGZvcmNlZCBvZmYuXFxuK1xcdCAqL1xcbitcXHRkZXZfZGlzYWJsZV9ncm8oZGV2KTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZmFpbF9yeF9oYW5kbGVyOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbmluZGV4IDMxZmI5MzI2Y2Y1MzMuLjBkMTA1NDc2ZTdjNTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG5AQCAtMyw2ICszLDcgQEBcXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXFxuIFxcbiBURVNUX1BST0dTIDo9IFxcXFxcXG4rXFx0aHNyX2dyb19zdXBlcnBhY2tldC5zaCBcXFxcXFxuIFxcdGhzcl9waW5nLnNoIFxcXFxcXG4gXFx0aHNyX3JlZGJveC5zaCBcXFxcXFxuIFxcdGxpbmtfZmF1bHRzLnNoIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lYmNiZDlmYzQxZWM0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxcbkBAIC0wLDAgKzEsNjMxIEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcXG4rI1xcbisjICAxLiBFbnNsYXZpbmcgYSBkZXZpY2UgdG8gYW4gSFNSIG1hc3RlciBkaXNhYmxlcyBHUk8gb24gaXRcXG4rIyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cXG4rIyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXFxuKyMgIDMuIEEgVENQIHN0cmVhbSBmcm9tIGEgVFNPLWVuYWJsZWQgU0FOICh3aGljaCB0aGVyZWZvcmUgZW1pdHMgR1NPXFxuKyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6XFxuKyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xcbisjICAgICB0aGUgU0FOIGFuZCBwZXItZnJhbWUtc2l6ZWQgdHJhZmZpYyBsZWF2aW5nIHRoZSBEVVQncyBMQU4gcG9ydHMuXFxuKyNcXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XFxuKyNcXG4rIyAgIG5zX3NhbiAgICAgICAgICAgICAgICAgICAgbnNfZHV0ICAgICAgICAgICAgICAgICAgICAgIG5zX3BlZXJcXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xcbisjICB8IHMwIFswLjFdICB8LS0tLS0tLS0tLS0tLXwgZF9pbCAgIGhzcjAgICB8LS0tLS0tLS0tLS18IGhzcjEgWzAuM118XFxuKyMgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHxcXG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xcbisjXFxuKyMgU0FOIHRyYWZmaWMgcmVhY2hlcyBuc19wZWVyIG9ubHkgdGhyb3VnaCBoc3IwJ3MgZm9yd2FyZCBwYXRoXFxuKyMgKGludGVybGluayBSWCAtXFx1MDAzZSBMQU4gQS9CIFRYKSwgc28gZXZlcnkgU0FOIGZyYW1lIGlzIHRhZ2dlZCBhbmRcXG4rIyBmb3J3YXJkZWQgYnkgdGhlIERVVC5cXG4rXFxuK3NvdXJjZSAuL2hzcl9jb21tb24uc2hcXG4rXFxuK3Nhbl9pcD1cXFwiMTAwLjY0LjAuMVxcXCJcXG4rcGVlcl9pcD1cXFwiMTAwLjY0LjAuM1xcXCJcXG4rXFxuKyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKTpcXG4rIyBTQU5fQVZHX01JTiBwcm92ZXMgR1NPIHN1cGVyLXBhY2tldHMgbGVmdCB0aGUgU0FOOyBMQU5fQVZHX01BWCBpcyBhXFxuKyMgZ3VhcmQgd2l0aCBtYXJnaW4sIG5vdCB0aGUgcHJvdG9jb2wgbWF4aW11bSAoc2VlIGRvX3Rzb19zdHJlYW1fdGVzdCkuXFxuK1NBTl9BVkdfTUlOPTIwNDhcXG4rTEFOX0FWR19NQVg9MTUxNFxcbitcXG4raXBlcmZfcGlkPVxcXCJcXFwiXFxuK3NlcnZlcl93cmFwcGVyPVxcXCJcXFwiXFxuK2FjdGl2ZV9zcnZfbnM9XFxcIlxcXCJcXG4rd29ya2Rpcj1cXFwiXFxcIlxcbitwaWRmaWxlPVxcXCJcXFwiXFxuK25zX2R1dD1cXFwiXFxcIlxcbituc19zYW49XFxcIlxcXCJcXG4rbnNfcGVlcj1cXFwiXFxcIlxcbituc19scz1cXFwiXFxcIlxcbityY2ZpbGU9XFxcIlxcXCJcXG4rXFxuKyMgRGVsZXRlIHRoZSBwZXItc2VydmVyIHByaXZhdGUgd29yayBkaXJlY3RvcnkgYW5kIHJlc2V0IGl0c1xcbisjIHZhcmlhYmxlcy4gQ2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCByZWFwIGFuZCBmcm9tIHRoZSBFWElUXFxuKyMgdHJhcCwgd2hpY2ggb3ducyBhbGwgZmFpbHVyZSBwYXRocy5cXG4rY2xlYW51cF93b3JrZGlyKClcXG4re1xcbitcXHQjIHJlbW92ZSBvbmx5IHRoZSBrbm93biBub24tZW1wdHkgcHJpdmF0ZSBkaXJlY3RvcnlcXG4rXFx0aWYgWyAtbiBcXFwiJHt3b3JrZGlyfVxcXCIgXSBcXHUwMDI2XFx1MDAyNiBbIC1kIFxcXCIke3dvcmtkaXJ9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdHJtIC1yZiBcXFwiJHt3b3JrZGlyfVxcXCJcXG4rXFx0ZmlcXG4rXFx0d29ya2Rpcj1cXFwiXFxcIlxcbitcXHRwaWRmaWxlPVxcXCJcXFwiXFxuK1xcdHJjZmlsZT1cXFwiXFxcIlxcbit9XFxuK1xcbitjbGVhbnVwKClcXG4re1xcbitcXHQjIFNlcnZlciBjbGVhbnVwIHRhcmdldHMgb25seSB0aGUgbmFtZXNwYWNlIG9mIHRoZSBjdXJyZW50bHlcXG4rXFx0IyBhY3RpdmUgc2VydmVyIChyZWNvcmRlZCBieSBzdGFydF9pcGVyZl9zZXJ2ZXIpOyBhZnRlciBhXFxuK1xcdCMgc3VjY2Vzc2Z1bCByZWFwIG5vdGhpbmcgaXMgYWN0aXZlLlxcbitcXHRpZiBbIC1uIFxcXCIke2FjdGl2ZV9zcnZfbnN9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdCMgZXhhY3QtUElEIGtpbGwgb25seSBhZnRlciBSRS12YWxpZGF0aW5nIGlkZW50aXR5IChndWFyZHNcXG4rXFx0XFx0IyBhZ2FpbnN0IFBJRCByZXVzZSBiZXR3ZWVuIHB1YmxpY2F0aW9uIGFuZCBjbGVhbnVwKVxcbitcXHRcXHRpZiBbIC1uIFxcXCIke2lwZXJmX3BpZH1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgdmFsaWRfc2VydmVyX3BpZCBcXFwiJHthY3RpdmVfc3J2X25zfVxcXCIgXFxcIiR7aXBlcmZfcGlkfVxcXCI7IHRoZW5cXG4rXFx0XFx0XFx0a2lsbCBcXFwiJHtpcGVyZl9waWR9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRcXHRmaVxcbitcXHRcXHRpcGVyZl9waWQ9XFxcIlxcXCJcXG4rXFx0XFx0aWYgWyAtbiBcXFwiJHtzZXJ2ZXJfd3JhcHBlcn1cXFwiIF07IHRoZW5cXG4rXFx0XFx0XFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1c1xcbitcXHRcXHRcXHQjIGJvdW5kIHNvIGEgbGl2ZS1idXQtdW5wdWJsaXNoZWQgc2VydmVyIGNhbiBuZXZlclxcbitcXHRcXHRcXHQjIGhhbmcgY2xlYW51cFxcbitcXHRcXHRcXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cXG4rXFx0XFx0XFx0XFx0a2lsbCAtMCBcXFwiJHtzZXJ2ZXJfd3JhcHBlcn1cXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXFxuK1xcdFxcdFxcdFxcdHNsZWVwIDAuMVxcbitcXHRcXHRcXHRkb25lXFxuK1xcdFxcdFxcdGtpbGwgXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRcXHRcXHR3YWl0IFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0XFx0c2VydmVyX3dyYXBwZXI9XFxcIlxcXCJcXG4rXFx0XFx0ZmlcXG4rXFx0XFx0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjNcXG4rXFx0XFx0IyBwcm9jZXNzZXMgdGhhdCBhY3R1YWxseSBsaXZlIGluIHRoZSBhY3RpdmUgc2VydmVyIG5ldG5zLFxcbitcXHRcXHQjIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlbiBTSUdLSUxMIGFueSBzdXJ2aXZvciBiZWZvcmVcXG4rXFx0XFx0IyB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmQgcGtpbGwgd291bGQgc2NhblxcbitcXHRcXHQjIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy5cXG4rXFx0XFx0bG9jYWwgX3AgX3N0aWxsXFxuK1xcdFxcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXFxcIiR7YWN0aXZlX3Nydl9uc31cXFwiIDJcXHUwMDNlL2Rldi9udWxsKTsgZG9cXG4rXFx0XFx0XFx0aWYgaXNfaXBlcmYzX3BpZCBcXFwiJF9wXFxcIjsgdGhlblxcbitcXHRcXHRcXHRcXHRraWxsIFxcXCIkX3BcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdFxcdFxcdGZpXFxuK1xcdFxcdGRvbmVcXG4rXFx0XFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXFxuK1xcdFxcdFxcdF9zdGlsbD0wXFxuK1xcdFxcdFxcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXFxcIiR7YWN0aXZlX3Nydl9uc31cXFwiIDJcXHUwMDNlL2Rldi9udWxsKTsgZG9cXG4rXFx0XFx0XFx0XFx0aWYgaXNfaXBlcmYzX3BpZCBcXFwiJF9wXFxcIjsgdGhlblxcbitcXHRcXHRcXHRcXHRcXHRfc3RpbGw9MVxcbitcXHRcXHRcXHRcXHRcXHRicmVha1xcbitcXHRcXHRcXHRcXHRmaVxcbitcXHRcXHRcXHRkb25lXFxuK1xcdFxcdFxcdFsgXFxcIiRfc3RpbGxcXFwiIC1lcSAwIF0gXFx1MDAyNlxcdTAwMjYgYnJlYWtcXG4rXFx0XFx0XFx0c2xlZXAgMC4xXFxuK1xcdFxcdGRvbmVcXG4rXFx0XFx0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcXFwiJHthY3RpdmVfc3J2X25zfVxcXCIgMlxcdTAwM2UvZGV2L251bGwpOyBkb1xcbitcXHRcXHRcXHRpZiBpc19pcGVyZjNfcGlkIFxcXCIkX3BcXFwiOyB0aGVuXFxuK1xcdFxcdFxcdFxcdGtpbGwgLTkgXFxcIiRfcFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0XFx0ZmlcXG4rXFx0XFx0ZG9uZVxcbitcXHRmaVxcbitcXHRhY3RpdmVfc3J2X25zPVxcXCJcXFwiXFxuK1xcdGNsZWFudXBfd29ya2RpclxcbitcXHRjbGVhbnVwX2FsbF9uc1xcbit9XFxuK1xcbit0cmFwIGNsZWFudXAgRVhJVFxcbitcXG4rY2hlY2tfdG9vbCgpXFxuK3tcXG4rXFx0aWYgISBjb21tYW5kIC12IFxcXCIkMVxcXCIgXFx1MDAzZSAvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVxcXCJcXG4rXFx0XFx0ZXhpdCAka3NmdF9za2lwXFxuK1xcdGZpXFxuK31cXG4rXFxuK25zeCgpXFxuK3tcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJDFcXFwiIGJhc2ggLWMgXFxcIiQyXFxcIlxcbit9XFxuK1xcbitpc19pcGVyZjNfcGlkKClcXG4re1xcbitcXHRbIFxcXCIkKGNhdCAvcHJvYy9cXFwiJDFcXFwiL2NvbW0gMlxcdTAwM2UvZGV2L251bGwpXFxcIiA9IFxcXCJpcGVyZjNcXFwiIF1cXG4rfVxcbitcXG4rIyBCb3VuZGVkIHJlYXAgb2YgdGhlIG9uZS1zaG90IHNlcnZlcjogd2FpdCBhdCBtb3N0IDVzIGZvciBpdCB0b1xcbisjIGV4aXQsIHRoZW4gcmVhcCB0aGUgd3JhcHBlciBhbmQgUkVRVUlSRSB0aGUgcmNmaWxlIHdpdGggaXRzIHJlYWxcXG4rIyBzdGF0dXMuIEEgc3R1Y2sgc2VydmVyIGNhbiBuZXZlciBoYW5nIHRoZSBzY3JpcHQuXFxuK3JlYXBfaXBlcmZfc2VydmVyKClcXG4re1xcbitcXHRsb2NhbCBzZXJ2ZXJfcmNcXG4rXFxuK1xcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xcbitcXHRcXHRraWxsIC0wIFxcXCIke2lwZXJmX3BpZH1cXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXFxuK1xcdFxcdHNsZWVwIDAuMVxcbitcXHRkb25lXFxuK1xcdGlmIGtpbGwgLTAgXFxcIiR7aXBlcmZfcGlkfVxcXCIgMlxcdTAwM2UvZGV2L251bGw7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IGV4aXQgd2l0aGluIDVzXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK1xcdHdhaXQgXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIlxcbitcXHRzZXJ2ZXJfd3JhcHBlcj1cXFwiXFxcIlxcbitcXHRpZiBbICEgLXMgXFxcIiR7cmNmaWxlfVxcXCIgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgc2VydmVyIHN0YXR1cyBmaWxlIG1pc3NpbmcgKCR7cmNmaWxlfSlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0c2VydmVyX3JjPSQoY2F0IFxcXCIke3JjZmlsZX1cXFwiKVxcbitcXHRpZiAhIFtbIFxcXCIkc2VydmVyX3JjXFxcIiA9fiBeWzAtOV0rJCBdXSB8fCBbIFxcXCIkc2VydmVyX3JjXFxcIiAtbmUgMCBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JyR7c2VydmVyX3JjfSdcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0aXBlcmZfcGlkPVxcXCJcXFwiXFxuK1xcdGNsZWFudXBfd29ya2RpclxcbitcXHRhY3RpdmVfc3J2X25zPVxcXCJcXFwiXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuKyMgRGVjaW1hbC1jb3VudGVyIHZhbGlkYXRpb24gZm9yIHRoZSBzbmFwc2hvdCBibG9ja3M6IGV2ZXJ5IHZhbHVlIG11c3RcXG4rIyBiZSBhIHBsYWluIGRlY2ltYWwgbnVtYmVyLiBBIHBhcnNlIGZhaWx1cmUgaW4gcmVhZF90eF9jb3VudGVycyB5aWVsZHNcXG4rIyBlbXB0eS9nYXJibGVkIGZpZWxkcywgd2hpY2ggdGhpcyBjaGVjayB0dXJucyBpbnRvIGFuIGltbWVkaWF0ZSBGQUlMLlxcbit2YWxpZF9kZWNpbWFscygpXFxuK3tcXG4rXFx0bG9jYWwgdlxcbitcXG4rXFx0Zm9yIHYgaW4gXFxcIiRAXFxcIjsgZG9cXG4rXFx0XFx0W1sgXFxcIiR2XFxcIiA9fiBeWzAtOV0rJCBdXSB8fCByZXR1cm4gMVxcbitcXHRkb25lXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuK3NldHVwX3RvcG8oKVxcbit7XFxuK1xcdHNldHVwX25zIG5zX2R1dCBuc19zYW4gbnNfcGVlciB8fCBleGl0ICQ/XFxuK1xcbitcXHRpcCBsaW5rIGFkZCBkX2EgbmV0bnMgXFxcIiRuc19kdXRcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zIFxcXCIkbnNfcGVlclxcXCJcXG4rXFx0aXAgbGluayBhZGQgZF9iIG5ldG5zIFxcXCIkbnNfZHV0XFxcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyBcXFwiJG5zX3BlZXJcXFwiXFxuK1xcdGlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgXFxcIiRuc19kdXRcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgczAgbmV0bnMgXFxcIiRuc19zYW5cXFwiXFxuK1xcbitcXHQjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uXFxuK1xcdGZvciBpZmFjZSBpbiBkX2EgZF9iOyBkb1xcbitcXHRcXHRuc3ggXFxcIiRuc19kdXRcXFwiIFxcXCJpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFxcXFxcXG4rXFx0XFx0XFx0aXAgbGluayBzZXQgJGlmYWNlIHVwXFxcIlxcbitcXHRkb25lXFxuK1xcdGZvciBpZmFjZSBpbiBwX2EgcF9iOyBkb1xcbitcXHRcXHRuc3ggXFxcIiRuc19wZWVyXFxcIiBcXFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcXFxcXFxuK1xcdFxcdFxcdGlwIGxpbmsgc2V0ICRpZmFjZSB1cFxcXCJcXG4rXFx0ZG9uZVxcbitcXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBzZXQgZF9pbCB1cFxcXCJcXG4rXFx0bnN4IFxcXCIkbnNfc2FuXFxcIiBcXFwiaXAgbGluayBzZXQgczAgdXA7IGlwIGFkZHIgYWRkICRzYW5faXAvMjQgZGV2IHMwXFxcIlxcbitcXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxcXFxuK1xcdFxcdHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcXFxcXFxuK1xcdFxcdGlwIGxpbmsgc2V0IGhzcjAgdXBcXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3BlZXJcXFwiIFxcXCJpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFxcXFxcXG4rXFx0XFx0c2xhdmUxIHBfYSBzbGF2ZTIgcF9iIHByb3RvIDA7IFxcXFxcXG4rXFx0XFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcXFwiXFxuK1xcbitcXHQjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXIncyBzdXBlcnZpc2lvbiBmcmFtZXMuXFxuK1xcdHNsZWVwIDJcXG4rfVxcbitcXG4rY2hlY2tfZmVhdHVyZSgpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBpZmFjZT1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIGZlYXR1cmU9XFxcIiQzXFxcIlxcbitcXHRsb2NhbCB3YW50PVxcXCIkNFxcXCJcXG4rXFxuK1xcdGlmIG5zeCBcXFwiJG5zXFxcIiBcXFwiZXRodG9vbCAtayAkaWZhY2VcXFwiIHwgZ3JlcCAtcSBcXFwiXiRmZWF0dXJlOiAkd2FudFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF1cXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0ZmlcXG4rfVxcbitcXG4rIyBPZmYtb3ItYWJzZW50IHZhcmlhbnQ6IGZhaWxzIG9ubHkgd2hlbiB0aGUgZmVhdHVyZSBpcyBwcmVzZW50IEFORCBvbixcXG4rIyBzbyBkZXZpY2VzIHRoYXQgc2ltcGx5IGRvIG5vdCBsaXN0IHRoZSBmZWF0dXJlIGRvIG5vdCBmYWlsIGl0LlxcbitjaGVja19mZWF0dXJlX25vdF9vbigpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBpZmFjZT1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIGZlYXR1cmU9XFxcIiQzXFxcIlxcbitcXG4rXFx0aWYgbnN4IFxcXCIkbnNcXFwiIFxcXCJldGh0b29sIC1rICRpZmFjZVxcXCIgfCBncmVwIC1xIFxcXCJeJGZlYXR1cmU6IG9uXFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG9uXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdGVsc2VcXG4rXFx0XFx0ZWNobyBcXFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdXFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbitkb19ncm9fZmVhdHVyZV9jaGVja3MoKVxcbit7XFxuK1xcdGVjaG8gXFxcIklORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgR1JPLlxcXCJcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX2R1dFxcXCIgZF9hIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2IgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfaWwgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cXFwiXFxuK1xcbitcXHRlY2hvIFxcXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEhXLUdSTy5cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfYSByeC1ncm8taHcgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfYiByeC1ncm8taHcgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfaWwgcngtZ3JvLWh3IG9mZlxcbitcXHRzdG9wX2lmX2Vycm9yIFxcXCJIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXFxcIlxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogQ2hlY2tpbmcgdGhhdCB0aGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTy5cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGhzcjAgZ2VuZXJpYy1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX2R1dFxcXCIgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFxcXCIkbnNfZHV0XFxcIiBoc3IwIHR4LXVkcC1zZWdtZW50YXRpb25cXG4rXFx0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXFxcIiRuc19kdXRcXFwiIGhzcjAgdHgtZ3NvLWxpc3RcXG4rXFx0c3RvcF9pZl9lcnJvciBcXFwiSFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy1mYW1pbHkgZmVhdHVyZXMuXFxcIlxcbit9XFxuK1xcbithbGxvY193b3JrZGlyKClcXG4re1xcbitcXHQjIEFsbG9jYXRlZCBvbmx5IGhlcmUsIGxvbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdG9wb2xvZ3kgY2xlYW51cCwgc29cXG4rXFx0IyBjbGVhbnVwKCkgYXQgc2V0dXBfdG9wbygpIHRpbWUgY2FuIG5ldmVyIHJlbW92ZSBpdC4gbWt0ZW1wIGZhaWx1cmVcXG4rXFx0IyBpcyBhIGhhcmQgdGVzdCBmYWlsdXJlLlxcbitcXHR3b3JrZGlyPSQobWt0ZW1wIC1kIC90bXAvaHNyX2dyb190ZXN0LlhYWFhYWCkgfHwge1xcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBta3RlbXAgLWQgZmFpbGVkXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGV4aXQgMVxcbitcXHR9XFxuK1xcdGNobW9kIDcwMCBcXFwiJHt3b3JrZGlyfVxcXCJcXG4rXFx0cGlkZmlsZT1cXFwiJHt3b3JrZGlyfS9pcGVyZi5waWRcXFwiXFxuK1xcdHJjZmlsZT1cXFwiJHt3b3JrZGlyfS9pcGVyZi5yY1xcXCJcXG4rfVxcbitcXG4rIyBOdW1lcmljLCBhbGl2ZSwgY29tbSA9PSBpcGVyZjMsIGFuZCByZWFsbHkgb3duZWQgYnkgdGhlIGdpdmVuIG5ldG5zLlxcbit2YWxpZF9zZXJ2ZXJfcGlkKClcXG4re1xcbitcXHRsb2NhbCBwbnM9XFxcIiQxXFxcIiBwPVxcXCIkMlxcXCJcXG4rXFxuK1xcdFtbIFxcXCIkcFxcXCIgPX4gXlswLTldKyQgXV0gfHwgcmV0dXJuIDFcXG4rXFx0a2lsbCAtMCBcXFwiJHBcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiAxXFxuK1xcdFsgXFxcIiQoY2F0IC9wcm9jL1xcXCIkcFxcXCIvY29tbSAyXFx1MDAzZS9kZXYvbnVsbClcXFwiID0gXFxcImlwZXJmM1xcXCIgXSB8fCByZXR1cm4gMVxcbitcXHRpcCBuZXRucyBwaWRzIFxcXCIkcG5zXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXF4IFxcXCIkcFxcXCJcXG4rfVxcbitcXG4rc3RhcnRfaXBlcmZfc2VydmVyKClcXG4re1xcbitcXHRsb2NhbCBzcnZfbnM9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBzcnZfaXA9XFxcIiR7MjotfVxcXCJcXG4rXFx0bG9jYWwgY2FuZGlkYXRlX3BpZFxcbitcXG4rXFx0IyBPbmUtc2hvdCBzZXJ2ZXIsIG5vIC1EOiB0aGUgd3JhcHBlciByZWNvcmRzIGl0cyBleGFjdCBQSUQgYW5kIGl0c1xcbitcXHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxcbitcXHRhbGxvY193b3JrZGlyXFxuK1xcdCMgcmVjb3JkIHRoZSBzZXJ2ZXIgbmFtZXNwYWNlIGZvciBjbGVhbnVwKCkgYmVmb3JlXFxuK1xcdCMgYW55dGhpbmcgY2FuIGZhaWwgd2l0aCB0aGUgc2VydmVyIHJ1bm5pbmdcXG4rXFx0YWN0aXZlX3Nydl9ucz1cXFwiJHNydl9uc1xcXCJcXG4rXFx0KCBuc3ggXFxcIiRzcnZfbnNcXFwiIFxcXCJpcGVyZjMgLXMgLTEgJHtzcnZfaXA6Ky1CICRzcnZfaXB9IFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNiBcXFxcXFxuK1xcdFxcdGVjaG8gXFxcXCQhIFxcdTAwM2UgJHtwaWRmaWxlfTsgXFxcXFxcbitcXHRcXHR3YWl0IFxcXFwkITsgXFxcXFxcbitcXHRcXHRlY2hvIFxcXFwkPyBcXHUwMDNlICR7cmNmaWxlfVxcXCIgKSBcXHUwMDI2XFxuK1xcdHNlcnZlcl93cmFwcGVyPSQhXFxuK1xcdCMgdGhlIHdyYXBwZXIgd3JpdGVzIHRoZSBwaWRmaWxlIGFzeW5jaHJvbm91c2x5OyB3YWl0IGZvciBpdCB0b1xcbitcXHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxcbitcXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cXG4rXFx0XFx0WyAtcyBcXFwiJHtwaWRmaWxlfVxcXCIgXSBcXHUwMDI2XFx1MDAyNiBicmVha1xcbitcXHRcXHRzbGVlcCAwLjFcXG4rXFx0ZG9uZVxcbitcXHRpZiBbICEgLXMgXFxcIiR7cGlkZmlsZX1cXFwiIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWRcXFwiIFxcXFxcXG4rXFx0XFx0XFx0XFxcIihubyBwaWRmaWxlKVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXHRjYW5kaWRhdGVfcGlkPSQoXFx1MDAzY1xcXCIke3BpZGZpbGV9XFxcIilcXG4rXFx0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFxcXCIkc3J2X25zXFxcIiBcXFwiJHtjYW5kaWRhdGVfcGlkfVxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJyR7Y2FuZGlkYXRlX3BpZH0nXFxcIiBcXFxcXFxuK1xcdFxcdFxcdFxcXCJmYWlsZWQgdmFsaWRhdGlvblxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXHQjIHB1Ymxpc2ggb25seSBhZnRlciBmdWxsIHZhbGlkYXRpb25cXG4rXFx0aXBlcmZfcGlkPVxcXCIke2NhbmRpZGF0ZV9waWR9XFxcIlxcbitcXHRzbGVlcCAxXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuKyMgUHJpbnQgXFxcIlxcdTAwM2NieXRlc1xcdTAwM2UgXFx1MDAzY3BhY2tldHNcXHUwMDNlXFxcIiBmb3IgZXhhY3RseSBvbmUgVFggcmVjb3JkIG9mIG5zL2RldjsgYW55dGhpbmdcXG4rIyBlbHNlIChtaXNzaW5nLCBkdXBsaWNhdGVkLCBub24tbnVtZXJpYykgaXMgYSBoYXJkIEZBSUwuXFxuK3JlYWRfdHhfY291bnRlcnMoKVxcbit7XFxuK1xcdGxvY2FsIG5zPVxcXCIkMVxcXCIgZGV2PVxcXCIkMlxcXCJcXG4rXFx0bG9jYWwgb3V0IGNudFxcbitcXG4rXFx0b3V0PSQobnN4IFxcXCIkbnNcXFwiIFxcXCJpcCAtcyBsaW5rIHNob3cgJGRldlxcXCIgfCBcXFxcXFxuK1xcdFxcdGF3ayAnL14gK1RYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfScpXFxuK1xcdGNudD0kKGVjaG8gXFxcIiRvdXRcXFwiIHwgZ3JlcCAtYyAnXlswLTldKiBbMC05XSokJylcXG4rXFx0aWYgWyBcXFwiJGNudFxcXCIgLW5lIDEgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBjYW5ub3QgcGFyc2UgVFggY291bnRlcnMgb2YgJG5zLyRkZXZcXFwiIFxcXFxcXG4rXFx0XFx0XFx0XFxcIihyZWNvcmRzPSRjbnQpXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK1xcdGVjaG8gXFxcIiRvdXRcXFwiXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuKyMgUHJpbnQgXFxcIlxcdTAwM2NieXRlc1xcdTAwM2UgXFx1MDAzY3BhY2tldHNcXHUwMDNlXFxcIiBmb3IgZXhhY3RseSBvbmUgUlggcmVjb3JkIG9mIG5zL2RldjsgdGhlXFxuKyMgc2FtZSBzaW5nbGUtcmVjb3JkIGRpc2NpcGxpbmUgYXMgcmVhZF90eF9jb3VudGVycy5cXG4rcmVhZF9yeF9jb3VudGVycygpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIiBkZXY9XFxcIiQyXFxcIlxcbitcXHRsb2NhbCBvdXQgY250XFxuK1xcbitcXHRvdXQ9JChuc3ggXFxcIiRuc1xcXCIgXFxcImlwIC1zIGxpbmsgc2hvdyAkZGV2XFxcIiB8IFxcXFxcXG4rXFx0XFx0YXdrICcvXiArUlg6L3tnZXRsaW5lOyBwcmludCAkMSwgJDJ9JylcXG4rXFx0Y250PSQoZWNobyBcXFwiJG91dFxcXCIgfCBncmVwIC1jICdeWzAtOV0qIFswLTldKiQnKVxcbitcXHRpZiBbIFxcXCIkY250XFxcIiAtbmUgMSBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGNhbm5vdCBwYXJzZSBSWCBjb3VudGVycyBvZiAkbnMvJGRldlxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiKHJlY29yZHM9JGNudClcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0ZWNobyBcXFwiJG91dFxcXCJcXG4rXFx0cmV0dXJuIDBcXG4rfVxcbitcXG4rZXZhbF9jb3VudGVyX2RlbHRhKClcXG4re1xcbitcXHRsb2NhbCBuYW1lPVxcXCIkMVxcXCIgYjA9XFxcIiQyXFxcIiBwMD1cXFwiJDNcXFwiIGIxPVxcXCIkNFxcXCIgcDE9XFxcIiQ1XFxcIiBvcD1cXFwiJDZcXFwiIGxpbWl0PVxcXCIkN1xcXCJcXG4rXFx0bG9jYWwgYmQgcGRcXG4rXFxuK1xcdGlmICEgW1sgXFxcIiRiMFxcXCIgPX4gXlswLTldKyQgXFx1MDAyNlxcdTAwMjYgXFxcIiRiMVxcXCIgPX4gXlswLTldKyQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbitcXHRcXHRcXFwiJHAwXFxcIiA9fiBeWzAtOV0rJCBcXHUwMDI2XFx1MDAyNiBcXFwiJHAxXFxcIiA9fiBeWzAtOV0rJCBdXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBub24tbnVtZXJpYyBjb3VudGVyIGlucHV0IGZvciAkbmFtZVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXHRiZD0kKChiMSAtIGIwKSlcXG4rXFx0cGQ9JCgocDEgLSBwMCkpXFxuK1xcdGlmIFsgXFxcIiRiZFxcXCIgLWx0IDAgXSB8fCBbIFxcXCIkcGRcXFwiIC1sZSAwIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogY291bnRlciBkZWx0YSBpbnZhbGlkIGZvciAkbmFtZVxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiKGJ5dGVzPSRiZCBwa3RzPSRwZClcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0aWYgWyBcXFwiJG9wXFxcIiA9IFxcXCJndFxcXCIgXTsgdGhlblxcbitcXHRcXHRpZiBbIFxcXCIkYmRcXFwiIC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxcbitcXHRcXHRcXHRlY2hvIFxcXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXFx1MDAzYz0gJGxpbWl0XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdHJldHVybiAxXFxuK1xcdFxcdGZpXFxuK1xcdGVsc2VcXG4rXFx0XFx0aWYgWyBcXFwiJGJkXFxcIiAtZ3QgJCgocGQgKiBsaW1pdCkpIF07IHRoZW5cXG4rXFx0XFx0XFx0ZWNobyBcXFwiRkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkIFxcdTAwM2UgJGxpbWl0XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdHJldHVybiAxXFxuK1xcdFxcdGZpXFxuK1xcdGZpXFxuK1xcdGVjaG8gXFxcIklORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCIob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdXFxcIlxcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbisjIExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbjogYSBwbGFpbiBTQU4gYWdncmVnYXRlIGVudGVyaW5nIGEgUFJQXFxuKyMgTEFOIHNsYXZlIG11c3QgYmUgc2VnbWVudGVkIGF0IHRoZSBmb3J3YXJkIGVudHJ5LCBub3QgZHJvcHBlZC4gUFJQXFxuKyMgZHJvcHMgc2xhdmUtdG8tc2xhdmUgZm9yd2FyZGluZyBieSBkZXNpZ24gKHBycF9kcm9wX2ZyYW1lKSwgc28gdGhlXFxuKyMgY29uc3VtZXIgb2YgTEFOLXNsYXZlIFNBTiB0cmFmZmljIGlzIGxvY2FsIGRlbGl2ZXJ5IHRvIHRoZSBtYXN0ZXIuXFxuKyMgVHdvIGluZGVwZW5kZW50IG9yYWNsZXM6IHRoZSBTQU4tc2lkZSBwcm9vZiB0aGF0IGFnZ3JlZ2F0ZXMgcmVhbGx5XFxuKyMgYXJyaXZlZCBhdCB0aGUgRFVULCBhbmQgdGhlIHZvbHVtZSArIHBlci1mcmFtZSBzaGFwZSBvZiB0aGUgbG9jYWxcXG4rIyBkZWxpdmVyeS4gT24gdGhlIGJyb2tlbiBnYXRlIHRoZSBhZ2dyZWdhdGVzIGFyZSBkcm9wcGVkIGFuZCBUQ1BcXG4rIyBjcmF3bHMgb24gcmV0cmFuc21pdHRlZCBzaW5nbGUgc2VnbWVudHMsIHNlcGFyYXRpbmcgdGhlIGtlcm5lbHMgYnlcXG4rIyBhbiBvcmRlciBvZiBtYWduaXR1ZGUgaW4gZGVsaXZlcmVkIGJ5dGVzLlxcbitkb19sYW5zYW5fZ3NvX3Rlc3QoKVxcbit7XFxuK1xcdGxvY2FsIHBycF9pcD1cXFwiMTAuOTkuMS4xXFxcIiBsc19pcD1cXFwiMTAuOTkuMS4xMFxcXCJcXG4rXFx0bG9jYWwgb3V0IHNhbl9iMCBzYW5fcDAgc2FuX2IxIHNhbl9wMVxcbitcXHRsb2NhbCBhX2IwIGFfcDAgYV9iMSBhX3AxIHJfYjAgcl9wMCByX2IxIHJfcDFcXG4rXFxuK1xcdHNldHVwX25zIG5zX2xzIHx8IGV4aXQgJD9cXG4rXFxuK1xcdGlwIGxpbmsgYWRkIGRfcGEgbmV0bnMgXFxcIiRuc19kdXRcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgbHNfYSBuZXRucyBcXFwiJG5zX2xzXFxcIlxcbitcXHRpcCBsaW5rIGFkZCBkX3BiIG5ldG5zIFxcXCIkbnNfZHV0XFxcIiB0eXBlIHZldGggcGVlciBuYW1lIGxzX3AgbmV0bnMgXFxcIiRuc19sc1xcXCJcXG4rXFxuK1xcdG5zeCBcXFwiJG5zX2R1dFxcXCIgXFxcImlwIGxpbmsgc2V0IGRfcGEgbXR1IDE2MDAgdXBcXFwiXFxuK1xcdG5zeCBcXFwiJG5zX2R1dFxcXCIgXFxcImlwIGxpbmsgc2V0IGRfcGIgbXR1IDE2MDAgdXBcXFwiXFxuK1xcdG5zeCBcXFwiJG5zX2xzXFxcIiBcXFwiaXAgbGluayBzZXQgbHNfYSBtdHUgMTYwMCB1cDsgXFxcXFxcbitcXHRcXHRpcCBsaW5rIHNldCBsc19wIG10dSAxNjAwIHVwOyBpcCBhZGRyIGFkZCAkbHNfaXAvMjQgZGV2IGxzX2FcXFwiXFxuK1xcbitcXHQjIFBSUCBEVVQgd2l0aCB0aGUgU0FOIG9uIGEgTEFOIHNsYXZlOiBwbGFpbiBTQU4gYWdncmVnYXRlcyBhcmVcXG4rXFx0IyB2YWxpZCB0cmFmZmljIG9uIGEgUFJQIExBTiBhbmQgbXVzdCBub3QgYmUgZHJvcHBlZC5cXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBhZGQgcHJwMCB0eXBlIGhzciBcXFxcXFxuK1xcdFxcdHNsYXZlMSBkX3BhIHNsYXZlMiBkX3BiIHByb3RvIDE7IFxcXFxcXG4rXFx0XFx0aXAgbGluayBzZXQgcHJwMCB1cDsgaXAgYWRkciBhZGQgJHBycF9pcC8yNCBkZXYgcHJwMFxcXCJcXG4rXFxuK1xcdCMgTGV0IHN1cGVydmlzaW9uIGZyYW1lcyBjb252ZXJnZS5cXG4rXFx0c2xlZXAgMlxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgTEFOLXNpZGUgU0FOIGludGVyZmFjZS5cXFwiXFxuK1xcdG5zeCBcXFwiJG5zX2xzXFxcIiBcXFwiZXRodG9vbCAtSyBsc19hIHRzbyBvbiBnc28gb25cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19sc1xcXCIgbHNfYSB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb25cXG4rXFx0c3RvcF9pZl9lcnJvciBcXFwiQ291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIExBTi1zaWRlIFNBTiBpbnRlcmZhY2UuXFxcIlxcbitcXG4rXFx0c3RhcnRfaXBlcmZfc2VydmVyIFxcXCIkbnNfZHV0XFxcIiBcXFwiJHBycF9pcFxcXCIgfHwgcmV0dXJuXFxuK1xcbitcXHRyZWFkIC1yIHJfYjAgcl9wMCBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfcnhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIHBycDApXFxuK0VPRlxcbitcXHRyZWFkIC1yIHNhbl9iMCBzYW5fcDAgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfbHNcXFwiIGxzX2EpXFxuK0VPRlxcbitcXHRpZiAhIHZhbGlkX2RlY2ltYWxzIFxcXCIkcl9iMFxcXCIgXFxcIiRyX3AwXFxcIiBcXFwiJHNhbl9iMFxcXCIgXFxcIiRzYW5fcDBcXFwiOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGJhc2VsaW5lIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXG4rXFx0aWYgISBvdXQ9JChuc3ggXFxcIiRuc19sc1xcXCIgXFxcInRpbWVvdXQgNjAgaXBlcmYzIC1jICRwcnBfaXAgLU0gMTQ0NiBcXFxcXFxuK1xcdFxcdC1iIDJHIC10IDEwXFxcIiAyXFx1MDAzZVxcdTAwMjYxKTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBMQU4tc2xhdmUgR1NPIGxvY2FsLWRlbGl2ZXJ5IHN0cmVhbSBmYWlsZWQ6XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGVjaG8gXFxcIiRvdXRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcbitcXHRyZWFkIC1yIHJfYjEgcl9wMSBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfcnhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIHBycDApXFxuK0VPRlxcbitcXHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfbHNcXFwiIGxzX2EpXFxuK0VPRlxcbitcXHRpZiAhIHZhbGlkX2RlY2ltYWxzIFxcXCIkcl9iMVxcXCIgXFxcIiRyX3AxXFxcIiBcXFwiJHNhbl9iMVxcXCIgXFxcIiRzYW5fcDFcXFwiOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGZpbmFsIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXG4rXFx0IyBPcmFjbGUgMSAtIGFnZ3JlZ2F0ZXMgcmVhbGx5IGFycml2ZWQ6IHRoZSBTQU4gZW1pdHRlZFxcbitcXHQjIHN1cGVyLXBhY2tldHMgdG93YXJkIHRoZSBEVVQuXFxuK1xcdGV2YWxfY291bnRlcl9kZWx0YSBcXFwiU0FOIGxzX2EgVFhcXFwiIFxcXCIkc2FuX2IwXFxcIiBcXFwiJHNhbl9wMFxcXCIgXFxcXFxcbitcXHRcXHRcXFwiJHNhbl9iMVxcXCIgXFxcIiRzYW5fcDFcXFwiIGd0IFxcXCIkU0FOX0FWR19NSU5cXFwiXFxuK1xcdFsgXFxcIiR7cmV0Oi0wfVxcXCIgLWVxIDAgXSB8fCByZXR1cm5cXG4rXFxuK1xcdCMgT3JhY2xlIDIgLSBsb2NhbCBkZWxpdmVyeSBvZiB0aG9zZSBhZ2dyZWdhdGVzOiB2b2x1bWUgYW5kXFxuK1xcdCMgcGVyLWZyYW1lIHNoYXBlIG9uIHRoZSBQUlAgbWFzdGVyLiBUaGUgdm9sdW1lIGdhdGUgc2VwYXJhdGVzXFxuK1xcdCMgZnVsbCBkZWxpdmVyeSBmcm9tIHRoZSByZXRyYW5zbWl0IGNyYXdsIHRoZSBicm9rZW4gZ2F0ZSBsZWF2ZXM7XFxuK1xcdCMgdGhlIGF2ZXJhZ2UgZ2F0ZSBwcm92ZXMgdGhlIGJ5dGVzIGFycml2ZWQgcGVyLWZyYW1lLlxcbitcXHRpZiBbICQoKHJfYjEgLSByX2IwKSkgLWx0IDEwMDAwMDAwMCBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IExBTi1zbGF2ZSBsb2NhbCBkZWxpdmVyeSBkZWdyYWRlZFxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiKHBycDAgUlggZGVsdGEgJCgocl9iMSAtIHJfYjApKSBieXRlcyBcXHUwMDNjIDEwMDAwMDAwMClcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcdGlmIFsgJCgocl9iMSAtIHJfYjApKSAtZ3QgJCgoIChyX3AxIC0gcl9wMCkgKiBMQU5fQVZHX01BWCApKSBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGxvY2FsIGRlbGl2ZXJ5IG5vdCBwZXItZnJhbWVcXFwiIFxcXFxcXG4rXFx0XFx0XFx0XFxcIihhdmcgJCgoIChyX2IxIC0gcl9iMCkgLyAocl9wMSAtIHJfcDApICkpIFxcdTAwM2UgJExBTl9BVkdfTUFYKVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFx0ZWNobyBcXFwiSU5GTzogTEFOLXNsYXZlIGxvY2FsIGRlbGl2ZXJ5IHBycDAgUlggZGVsdGFcXFwiIFxcXFxcXG4rXFx0XFx0XFxcIiQoKHJfYjEgLSByX2IwKSkgYnl0ZXMgLyAkKChyX3AxIC0gcl9wMCkpIHBrdHMgWyBPSyBdXFxcIlxcbitcXHRyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm5cXG4rXFx0ZWNobyBcXFwiSU5GTzogTEFOLXNsYXZlIHBsYWluLUdTTyByZWdyZXNzaW9uIFsgT0sgXVxcXCJcXG4rfVxcbitcXG4rZG9fdHNvX3N0cmVhbV90ZXN0KClcXG4re1xcbitcXHRsb2NhbCBvdXQgc2VuZGVyX3JldHJcXG4rXFx0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXFxuK1xcdGxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgYl9iMCBiX3AwIGJfYjEgYl9wMVxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcImV0aHRvb2wgLUsgczAgdHNvIG9uIGdzbyBvblxcXCJcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX3NhblxcXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkNvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLlxcXCJcXG4rXFxuK1xcdGVjaG8gXFxcIklORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC1cXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cXFwiXFxuK1xcdHN0YXJ0X2lwZXJmX3NlcnZlciBcXFwiJG5zX3BlZXJcXFwiIHx8IHJldHVyblxcbitcXG4rXFx0IyBDb3VudGVyIHNuYXBzaG90cyBhcm91bmQgdGhlIHN0cmVhbSB3aW5kb3cuIFRoZSBTQU4tc2lkZSBhdmVyYWdlXFxuK1xcdCMgbXVzdCBleGNlZWQgU0FOX0FWR19NSU4gKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IEdTTyBzdXBlci1wYWNrZXRzXFxuK1xcdCMgcmVhbGx5IGxlZnQgdGhlIFNBTik7IGVhY2ggRFVUIExBTiBsZWcgbXVzdCBzdGF5IHVuZGVyIExBTl9BVkdfTUFYXFxuK1xcdCMgKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IGJ1bGsgb3V0cHV0IHdhcyBzZWdtZW50ZWQgcGVyLWZyYW1lKS4gVGhlc2VcXG4rXFx0IyBhcmUgYWdncmVnYXRlIGRpc2NyaW1pbmF0b3JzLCBub3QgYSBwZXItZnJhbWUgbWF4aW11bSBwcm9vZi5cXG4rXFx0c2FuX2IwPTA7IHNhbl9wMD0wOyBhX2IwPTA7IGFfcDA9MDsgYl9iMD0wOyBiX3AwPTBcXG4rXFx0cmVhZCAtciBzYW5fYjAgc2FuX3AwIFxcdTAwM2NcXHUwMDNjRU9GXFxuKyQocmVhZF90eF9jb3VudGVycyBcXFwiJG5zX3NhblxcXCIgczApXFxuK0VPRlxcbitcXHRyZWFkIC1yIGFfYjAgYV9wMCBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIGRfYSlcXG4rRU9GXFxuK1xcdHJlYWQgLXIgYl9iMCBiX3AwIFxcdTAwM2NcXHUwMDNjRU9GXFxuKyQocmVhZF90eF9jb3VudGVycyBcXFwiJG5zX2R1dFxcXCIgZF9iKVxcbitFT0ZcXG4rXFx0aWYgISB2YWxpZF9kZWNpbWFscyBcXFwiJHNhbl9iMFxcXCIgXFxcIiRzYW5fcDBcXFwiIFxcXCIkYV9iMFxcXCIgXFxcIiRhX3AwXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCIkYl9iMFxcXCIgXFxcIiRiX3AwXFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBiYXNlbGluZSBUWCBjb3VudGVyIHNuYXBzaG90IGludmFsaWRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFxuK1xcdCMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eVxcbitcXHQjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuXFxuK1xcdCMgVW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJIGVkZ2UgcmF0ZXMgd2l0aG91dCBpbmRpY2F0aW5nIGFcXG4rXFx0IyBmdW5jdGlvbmFsIHByb2JsZW0uXFxuK1xcdGlmICEgb3V0PSQobnN4IFxcXCIkbnNfc2FuXFxcIiBcXFwidGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcXFxcXFxuK1xcdFxcdC1iIDJHIC10IDEwXFxcIiAyXFx1MDAzZVxcdTAwMjYxKTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgY2xpZW50IGZhaWxlZDpcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZWNobyBcXFwiJG91dFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFxuK1xcdHJlYWQgLXIgc2FuX2IxIHNhbl9wMSBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19zYW5cXFwiIHMwKVxcbitFT0ZcXG4rXFx0cmVhZCAtciBhX2IxIGFfcDEgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfZHV0XFxcIiBkX2EpXFxuK0VPRlxcbitcXHRyZWFkIC1yIGJfYjEgYl9wMSBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIGRfYilcXG4rRU9GXFxuK1xcdGlmICEgdmFsaWRfZGVjaW1hbHMgXFxcIiRzYW5fYjFcXFwiIFxcXCIkc2FuX3AxXFxcIiBcXFwiJGFfYjFcXFwiIFxcXCIkYV9wMVxcXCIgXFxcXFxcbitcXHRcXHRcXFwiJGJfYjFcXFwiIFxcXCIkYl9wMVxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK1xcbitcXHRldmFsX2NvdW50ZXJfZGVsdGEgXFxcIlNBTiBzMCBUWFxcXCIgXFxcIiRzYW5fYjBcXFwiIFxcXCIkc2FuX3AwXFxcIiBcXFwiJHNhbl9iMVxcXCIgXFxcIiRzYW5fcDFcXFwiIFxcXFxcXG4rXFx0XFx0Z3QgXFxcIiRTQU5fQVZHX01JTlxcXCJcXG4rXFx0ZXZhbF9jb3VudGVyX2RlbHRhIFxcXCJEVVQgZF9hIFRYXFxcIiBcXFwiJGFfYjBcXFwiIFxcXCIkYV9wMFxcXCIgXFxcIiRhX2IxXFxcIiBcXFwiJGFfcDFcXFwiIFxcXFxcXG4rXFx0XFx0bGUgXFxcIiRMQU5fQVZHX01BWFxcXCJcXG4rXFx0ZXZhbF9jb3VudGVyX2RlbHRhIFxcXCJEVVQgZF9iIFRYXFxcIiBcXFwiJGJfYjBcXFwiIFxcXCIkYl9wMFxcXCIgXFxcIiRiX2IxXFxcIiBcXFwiJGJfcDFcXFwiIFxcXFxcXG4rXFx0XFx0bGUgXFxcIiRMQU5fQVZHX01BWFxcXCJcXG4rXFx0WyBcXFwiJHtyZXQ6LTB9XFxcIiAtZXEgMCBdIHx8IHJldHVyblxcbitcXG4rXFx0IyBzdWNjZXNzIHBhdGg6IGJvdW5kZWQgcmVhcCB3aXRoIHRoZSBzZXJ2ZXIncyByZWFsIHN0YXR1c1xcbitcXHRyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm5cXG4rXFxuK1xcdCMgc2Vjb25kYXJ5IGhlYWx0aCBzaWduYWwgb25seTogYW5jaG9yZWQsIHNpbmdsZS1tYXRjaCwgbnVtZXJpYyDigJRcXG4rXFx0IyBhbnkgcGFyc2UgYW5vbWFseSBpcyBhIGxvdWQgRkFJTCwgYnV0IHRoZSB2YWx1ZSBpdHNlbGYgbm8gbG9uZ2VyXFxuK1xcdCMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLlxcbitcXHRzZW5kZXJfcmV0cj0kKGVjaG8gXFxcIiRvdXRcXFwiIHwgYXdrICcvc2VjIC4qIHNlbmRlciQvIHtwcmludCAkKE5GLTEpfScpXFxuK1xcdGlmIFsgXFxcIiQoZWNobyBcXFwiJHNlbmRlcl9yZXRyXFxcIiB8IGdyZXAgLUVjICdeWzAtOV0rJCcpXFxcIiAtbmUgMSBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGNhbm5vdCBwYXJzZSBzZW5kZXIgcmV0cmFuc21pdHMgcmVsaWFibHlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZWNobyBcXFwiJG91dFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFx0ZWNobyBcXFwiSU5GTzogVENQIHN0cmVhbSBkb25lO1xcXCIgXFxcXFxcbitcXHRcXHRcXFwic2VuZGVyIHJldHJhbnNtaXRzPSRzZW5kZXJfcmV0ciAoc2Vjb25kYXJ5IHNpZ25hbClcXFwiXFxuK1xcdGVjaG8gXFxcIiRvdXRcXFwiIHwgZ3JlcCAtRSBcXFwic2VuZGVyfHJlY2VpdmVyXFxcIlxcbit9XFxuK1xcbitjaGVja19wcmVyZXF1aXNpdGVzXFxuK2NoZWNrX3Rvb2wgZXRodG9vbFxcbitjaGVja190b29sIGlwZXJmM1xcbitjaGVja190b29sIHRpbWVvdXRcXG4rXFxuKyMgaXByb3V0ZTIgbXVzdCBrbm93IHRoZSBIU1IgaW50ZXJsaW5rIHN5bnRheC5cXG4raWYgISBpcCBsaW5rIGhlbHAgaHNyIDJcXHUwMDNlXFx1MDAyNjEgfCBncmVwIC1xaSBpbnRlcmxpbms7IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydFxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK2ZpXFxuK1xcbitzZXR1cF90b3BvXFxuK1xcbitlY2hvIFxcXCJJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC1cXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgRFVUKS5cXFwiXFxuK2RvX3BpbmcgXFxcIiRuc19zYW5cXFwiIFxcXCIkcGVlcl9pcFxcXCJcXG4rc3RvcF9pZl9lcnJvciBcXFwiSW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC5cXFwiXFxuK1xcbitkb19ncm9fZmVhdHVyZV9jaGVja3NcXG4rZG9fdHNvX3N0cmVhbV90ZXN0XFxuK3N0b3BfaWZfZXJyb3IgXFxcIkdTTyBzdXBlci1wYWNrZXQgc3RyZWFtIHRlc3QgZmFpbGVkLlxcXCJcXG4rXFxuK2RvX2xhbnNhbl9nc29fdGVzdFxcbitzdG9wX2lmX2Vycm9yIFxcXCJMQU4tc2xhdmUgcGxhaW4tR1NPIHJlZ3Jlc3Npb24gZmFpbGVkLlxcXCJcXG4rXFxuK2VjaG8gXFxcIklORk86IEFsbCBnb29kLlxcXCJcXG4rY2xlYW51cFxcbitleGl0ICRyZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6MDUuMjA5MjUxNDM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTU3OTY3NTE0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gICAgXCJkZXZfZGlzYWJsZV9ncm9cIixcbiAgICBcIm5ldGlmX2Rpc2FibGVfZ3JvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgcHJvdG9jb2wgdG8gaGFuZGxlIEdTTyBzdXBlci1wYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBhZGRzIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIHRvIHRoZSBjb3JlIG5ldHdvcmsgZGV2aWNlIEFQSSB0byBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgZGV2aWNlLCBhbmQgdXNlcyB0aGlzIHRvIGRpc2FibGUgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM0ZGExN2U5NjYxZDliM2QzYTU0NDU4YjQwNWU3ZmRmNmFkMTYyZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE3OjQwOjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDk5ODFkNjM3ZjhiNTQuLmViYTJjMjZhNDliYTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMzQzNCw2ICszNDM0LDggQEAgdm9pZCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBuZXRpZl9jbG9zZV9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGJvb2wgdW5saW5rKTtcbiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuK3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gaW50IGRldl9sb29wYmFja194bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2tiKTtcbiB1MTYgZGV2X3BpY2tfdHhfemVybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDU5MzNjNWRhYjA5ZWUuLmYyMGQ1YWIwY2Y3MjkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xODQwLDYgKzE4NDAsMjEgQEAgdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0fVxuIH1cbiBcbit2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjtcbitcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4rXG4rXHRkZXYtXHUwMDNld2FudGVkX2ZlYXR1cmVzIFx1MDAyNj0gfihORVRJRl9GX0dSTyB8IE5FVElGX0ZfR1JPX0hXKTtcbitcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcbitcbitcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoZGV2LCBsb3dlcl9kZXYsIGl0ZXIpIHtcbitcdFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XG4rXHRcdG5ldGlmX2Rpc2FibGVfZ3JvKGxvd2VyX2Rldik7XG4rXHRcdG5ldGRldl91bmxvY2tfb3BzKGxvd2VyX2Rldik7XG4rXHR9XG4rfVxuK1xuIC8qKlxuICAqXHRkZXZfZGlzYWJsZV9ncm9faHcgLSBkaXNhYmxlIEhXIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4gICpcdEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9hcGkuYyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuaW5kZXggNDM3OTQ3ZGQwOGVkNS4uM2NhMjUxNWFkMDQ4NiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldl9hcGkuY1xuKysrIGIvbmV0L2NvcmUvZGV2X2FwaS5jXG5AQCAtMjY5LDYgKzI2OSwyNyBAQCB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2xybyk7XG4gXG4rLyoqXG4rICogZGV2X2Rpc2FibGVfZ3JvKCkgLSBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4rICogQGRldjogZGV2aWNlXG4rICpcbisgKiBCZXN0LWVmZm9ydCBkaXNhYmxlIG9mIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0XG4rICogZGV2aWNlLiAgTXVzdCBiZSBjYWxsZWQgdW5kZXIgUlROTC4gIFRoaXMgaXMgbmVlZGVkIGlmIHJlY2VpdmVkXG4rICogcGFja2V0cyBtYXkgYmUgZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLlxuKyAqXG4rICogVGhlIGRpc2FibGUgaXMgYmVzdC1lZmZvcnQ6IGEgZGV2aWNlIHdpdGggYSBmaXhlZC1vbiBmZWF0dXJlIChmb3JcbisgKiBleGFtcGxlIEdST19IVyBvbiBhIHZpcnRpby1uZXQgZGV2aWNlIG5lZ290aWF0ZWQgd2l0aG91dFxuKyAqIFZJUlRJT19ORVRfRl9DVFJMX0dVRVNUX09GRkxPQURTKSBrZWVwcyBpdCBlbmFibGVkLiAgQ2FsbGVycyB0aGF0XG4rICogbmVlZCBhIGhhcmQgZ3VhcmFudGVlIG11c3QgaW5zcGVjdCB0aGUgcmVzdWx0aW5nIGZlYXR1cmUgc3RhdGUuXG4rICovXG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbitcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XG4rXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuK31cbitFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2dybyk7XG4rXG4gLyoqXG4gICogZGV2X3NldF9wcm9taXNjdWl0eSgpIC0gdXBkYXRlIHByb21pc2N1aXR5IGNvdW50IG9uIGEgZGV2aWNlXG4gICogQGRldjogZGV2aWNlXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuaW5kZXggNTU1NWI3MWFiMTliNS4uMjQ4Y2JiMTQyZTIxZSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4rKysgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTIzMiw5ICsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHNrYi1cdTAwM2VkZXYgPSBtYXN0ZXItXHUwMDNlZGV2O1xuIFx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFx0XHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuIFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuQEAgLTMzNSw2ICszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRcdGhzcl9zdGFnLVx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVx1MDAzZXNlcXVlbmNlX25yKTtcbiBcdFx0aHNyLVx1MDAzZXNlcXVlbmNlX25yKys7XG4gXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gdHlwZTtcbiBcdC8qIEhTUnYwIGhhcyA2IHVudXNlZCBieXRlcyBhZnRlciB0aGUgTUFDICovXG5AQCAtMzU2LDE0ICszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcbiBcdH1cbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbitcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdHJldHVybjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG5AQCAtMzkwLDYgKzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVx1MDAzZXN1cF9zZXF1ZW5jZV9ucik7XG4gXHRoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKys7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REO1xuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xuIFxuQEAgLTM5NywxMyArMzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XG4gXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgbWFzdGVyLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4rXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiB9XG4gXG4gLyogQW5ub3VuY2UgKHN1cGVydmlzaW9uIGZyYW1lKSB0aW1lciBmdW5jdGlvblxuQEAgLTY1OSw3ICs2NTIsNyBAQCB2b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4gXG4gXHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfSElHSERNQSB8XG4tXHRcdFx0ICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8XG4rXHRcdFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNi4uZjQyNjk0Y2Y0MzA5OSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuKysrIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5AQCAtMTIsNiArMTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9nc28uaFx1MDAzZVxuICNpbmNsdWRlIFwiaHNyX21haW4uaFwiXG4gI2luY2x1ZGUgXCJoc3JfZnJhbWVyZWcuaFwiXG4gXG5AQCAtNjIxLDkgKzYyMiwxMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3RkX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcbiBcdCAgICBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xuIFx0XHQvKiBTZXF1ZW5jZSBuciBmb3IgdGhlIG1hc3Rlci9pbnRlcmxpbmsgbm9kZSAqL1xuLVx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdFx0ZnJhbWUtXHUwMDNlc2VxdWVuY2VfbnIgPSBoc3ItXHUwMDNlc2VxdWVuY2VfbnI7XG4gXHRcdGhzci1cdTAwM2VzZXF1ZW5jZV9ucisrO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHR9XG4gfVxuIFxuQEAgLTczMSw3ICs3MzMsNyBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIH1cbiBcbiAvKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHJjdSByZWFkIGxvY2sgKGJlY2F1c2Ugb2YgdGhlIHBvcnQgcGFyYW1ldGVyKSAqL1xuLXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbitzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiB7XG4gXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7XG4gXG5AQCAtNzQ2LDggKzc0OCw4IEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdCAqIFNvIGNoZWNrIGFuZCBpbmNyZW1lbnQgc3RhdHMgZm9yIG1hc3RlciBwb3J0IG9ubHkgaGVyZS5cbiBcdCAqL1xuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4tXHRcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X3BhY2tldHMrKztcbi1cdFx0cG9ydC1cdTAwM2VkZXYtXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVx1MDAzZWxlbjtcbitcdFx0REVWX1NUQVRTX0lOQyhwb3J0LVx1MDAzZWRldiwgdHhfcGFja2V0cyk7XG4rXHRcdERFVl9TVEFUU19BREQocG9ydC1cdTAwM2VkZXYsIHR4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiBcdH1cbiBcbiBcdGtmcmVlX3NrYihmcmFtZS5za2JfaHNyKTtcbkBAIC03NTcsNiArNzU5LDEwNSBAQCB2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4gXG4gb3V0X2Ryb3A6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbitcdERFVl9TVEFUU19JTkMocG9ydC1cdTAwM2VkZXYsIHR4X2Ryb3BwZWQpO1xuK1x0a2ZyZWVfc2tiKHNrYik7XG4rfVxuK1xuKy8qIEdTTyBmYW4tb3V0IGZ1bm5lbDogdW5mb2xkIHN1cGVyLXBhY2tldHMgYmVmb3JlIHBlci1mcmFtZSBwcm9jZXNzaW5nIHNvXG4rICogZWFjaCB3aXJlIGZyYW1lIGdldHMgaXRzIG93biBIU1IvUFJQIHRhZyBhbmQgc2VxdWVuY2UgbnVtYmVyLlxuKyAqL1xuKy8qIEVmZmVjdGl2ZSBmcmFtZSBwcm90b2NvbCBvZiBhIChwb3NzaWJseSBWTEFOLXRhZ2dlZCkgc2tiLCBvciAwIHdoZW5cbisgKiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBvciB0aGUgdGFnZ2luZyBleGNlZWRzIHdoYXQgSFNSIHN1cHBvcnRzLlxuKyAqIEhTUiBzdXBwb3J0cyBvbmUgODAyLjFRIEMtdGFnIG9ubHksIG1hdGNoaW5nIGZpbGxfZnJhbWVfaW5mbygpOiBhblxuKyAqIGFjY2VsZXJhdGVkIHRhZyBtdXN0IGJlIGEgQy10YWcgd2l0aCBhIG5vbi1WTEFOIGlubmVyIHByb3RvY29sOyBhblxuKyAqIGluLWJhbmQgdGFnIGlzIHVud3JhcHBlZCBleGFjdGx5IG9uY2UgYW5kIGEgcmVzaWR1YWwgVkxBTiBFdGhlclR5cGVcbisgKiBpcyByZWplY3RlZC4gUmVhZC1vbmx5OyBubyBzdGF0ZSBpcyBrZXB0IGJleW9uZCB0aGUgaW1tZWRpYXRlXG4rICogcHJvdG9jb2wgdmFsdWUuXG4rICovXG4rc3RhdGljIF9fYmUxNiBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBldGhoZHIgZWg7XG4rXHRzdHJ1Y3Qgdmxhbl9oZHIgdmg7XG4rXHRjb25zdCBzdHJ1Y3QgZXRoaGRyICpldGg7XG4rXHRjb25zdCBzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHI7XG4rXHRfX2JlMTYgcHJvdG87XG4rXG4rXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xuK1x0XHQvKiBIU1Igc3VwcG9ydHMgb25lIDgwMi4xUSBDLXRhZyBvbmx5LiAqL1xuK1x0XHRpZiAoc2tiLVx1MDAzZXZsYW5fcHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gc2tiLVx1MDAzZXByb3RvY29sO1xuK1x0fVxuK1xuK1x0ZXRoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKGVoKSwgXHUwMDI2ZWgpO1xuK1x0aWYgKCFldGgpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cHJvdG8gPSBldGgtXHUwMDNlaF9wcm90bztcbitcdGlmICghZXRoX3R5cGVfdmxhbihwcm90bykpXG4rXHRcdHJldHVybiBwcm90bztcbitcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dmhkciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIEVUSF9ITEVOLCBzaXplb2YodmgpLCBcdTAwMjZ2aCk7XG4rXHRpZiAoIXZoZHIpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cHJvdG8gPSB2aGRyLVx1MDAzZWhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87XG4rXHRpZiAoZXRoX3R5cGVfdmxhbihwcm90bykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHByb3RvO1xuK31cbitcbit2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0O1xuK1x0X19iZTE2IHByb3RvO1xuK1xuK1x0aWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkge1xuK1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIENvbmZvcm1pbmcgcGxhaW4tcHJvdG9jb2wgR1NPIHN1cGVyLXBhY2tldHMgY2FycnkgdHJhaWxlci1mcmVlXG4rXHQgKiBzZW5kZXIgcGF5bG9hZCBhbmQgYXJlIHNlZ21lbnRlZCBoZXJlOiBlYWNoIHNlZ21lbnQgaXMgZGVsaXZlcmVkXG4rXHQgKiBvciBmb3J3YXJkZWQgYXMgaXRzIG93biB3aXJlIGZyYW1lLCBvbiBhbnkgaW5ncmVzcyByb2xlLlxuK1x0ICpcbitcdCAqIFRoZSBnYXRlIGlzIGNvbnRlbnQtYmFzZWQsIG5vdCBwb3J0LWJhc2VkLiBBbiBhZ2dyZWdhdGUgd2hvc2VcbitcdCAqIGVmZmVjdGl2ZSBwcm90b2NvbCBpcyBFVEhfUF9IU1Igb3IgRVRIX1BfUFJQIGNhbm5vdCBiZSBzYWZlbHlcbitcdCAqIHNlZ21lbnRlZCBhbmQgaXMgZHJvcHBlZCwgYXMgaXMgYW55IHNrYiB3aG9zZSBoZWFkZXIgY2Fubm90IGJlXG4rXHQgKiByZWFkIG9yIHdob3NlIHRhZ2dpbmcgZXhjZWVkcyB0aGUgc2luZ2xlIDgwMi4xUSBDLXRhZyBIU1JcbitcdCAqIHN1cHBvcnRzLiBXaXRoIE5FVElGX0ZfSFdfSFNSX1RBR19STSB0aGUgbG93ZXIgaGFzIGFscmVhZHlcbitcdCAqIHN0cmlwcGVkIHRoZSB0YWcsIHNvIHN1Y2ggYWdncmVnYXRlcyBhcnJpdmUgcGxhaW4gYW5kIGFyZVxuK1x0ICogc2VnbWVudGVkLlxuK1x0ICovXG4rXHRwcm90byA9IGhzcl9nc29fZWZmZWN0aXZlX3Byb3RvKHNrYik7XG4rXHRpZiAoIXByb3RvKVxuK1x0XHRnb3RvIGRyb3BfZ3NvOyAvKiBjbGFzc2lmaWNhdGlvbiBmYWlsdXJlLCBmYWlsLXNhZmUgKi9cbitcdGlmIChwcm90byA9PSBodG9ucyhFVEhfUF9IU1IpIHx8IHByb3RvID09IGh0b25zKEVUSF9QX1BSUCkpXG4rXHRcdGdvdG8gZHJvcF9nc287XG4rXG4rXHQvKiBmZWF0dXJlcyA9IDA6IHJlcXVlc3QgZnVsbCBzb2Z0d2FyZSBzZWdtZW50YXRpb24uIHR4X3BhdGggaXMgdHJ1ZVxuK1x0ICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb21cbitcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXG4rXHQgKi9cbitcdHNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKTtcbitcdGlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKVxuK1x0XHRnb3RvIGRyb3BfZ3NvO1xuK1xuK1x0Y29uc3VtZV9za2Ioc2tiKTtcbitcdHdoaWxlIChzZWdzKSB7XG4rXHRcdG5leHQgPSBzZWdzLVx1MDAzZW5leHQ7XG4rXHRcdHNlZ3MtXHUwMDNlbmV4dCA9IE5VTEw7XG4rXHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7XG4rXHRcdHNlZ3MgPSBuZXh0O1xuK1x0fVxuK1x0cmV0dXJuO1xuK1xuK2Ryb3BfZ3NvOlxuK1x0REVWX1NUQVRTX0lOQyhwb3J0LVx1MDAzZWRldiwgdHhfZHJvcHBlZCk7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbmluZGV4IDAxYzczYjRiNTBkZGQuLmFhMjE1NGIxOWMwYjkgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jXG4rKysgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5AQCAtNzMsMTYgKzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHR9XG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFxuLVx0LyogT25seSB0aGUgZnJhbWVzIHJlY2VpdmVkIG92ZXIgdGhlIGludGVybGluayBwb3J0IHdpbGwgYXNzaWduIGFcbi1cdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxuLVx0ICovXG4tXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0fVxuK1x0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4gXG4gZmluaXNoX2NvbnN1bWU6XG4gXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbkBAIC0xNzEsNiArMTYyLDExIEBAIHN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdGdvdG8gZmFpbF9yeF9oYW5kbGVyO1xuIFx0ZGV2X2Rpc2FibGVfbHJvKGRldik7XG4gXG4rXHQvKiBHUk8gZGlzYWJsaW5nIGlzIGJlc3QtZWZmb3J0OiBkZXZpY2VzIHdpdGggZml4ZWQtb25cbitcdCAqIEdSTy9HUk9fSFcgY2Fubm90IGJlIGZvcmNlZCBvZmYuXG4rXHQgKi9cbitcdGRldl9kaXNhYmxlX2dybyhkZXYpO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gZmFpbF9yeF9oYW5kbGVyOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzLi4wZDEwNTQ3NmU3YzUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuQEAgLTMsNiArMyw3IEBAXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXG4gXG4gVEVTVF9QUk9HUyA6PSBcXFxuK1x0aHNyX2dyb19zdXBlcnBhY2tldC5zaCBcXFxuIFx0aHNyX3Bpbmcuc2ggXFxcbiBcdGhzcl9yZWRib3guc2ggXFxcbiBcdGxpbmtfZmF1bHRzLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWJjYmQ5ZmM0MWVjNFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXG5AQCAtMCwwICsxLDYzMSBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcbisjXG4rIyAgMS4gRW5zbGF2aW5nIGEgZGV2aWNlIHRvIGFuIEhTUiBtYXN0ZXIgZGlzYWJsZXMgR1JPIG9uIGl0XG4rIyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cbisjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy5cbisjICAzLiBBIFRDUCBzdHJlYW0gZnJvbSBhIFRTTy1lbmFibGVkIFNBTiAod2hpY2ggdGhlcmVmb3JlIGVtaXRzIEdTT1xuKyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6XG4rIyAgICAgaW50ZXJmYWNlLWNvdW50ZXIgZGVsdGFzIHNob3cgc3VwZXItcGFja2V0LXNpemVkIGZyYW1lcyBsZWF2aW5nXG4rIyAgICAgdGhlIFNBTiBhbmQgcGVyLWZyYW1lLXNpemVkIHRyYWZmaWMgbGVhdmluZyB0aGUgRFVUJ3MgTEFOIHBvcnRzLlxuKyNcbisjIFRvcG9sb2d5ICgxMDAuNjQuMC4wLzI0KTpcbisjXG4rIyAgIG5zX3NhbiAgICAgICAgICAgICAgICAgICAgbnNfZHV0ICAgICAgICAgICAgICAgICAgICAgIG5zX3BlZXJcbisjICArLS0tLS0tLS0tLS0rICBpbnRlcmxpbmsgICstLS0tLS0tLS0tLS0tLS0rICBMQU4gQS9CICArLS0tLS0tLS0tLS0rXG4rIyAgfCBzMCBbMC4xXSAgfC0tLS0tLS0tLS0tLS18IGRfaWwgICBoc3IwICAgfC0tLS0tLS0tLS0tfCBoc3IxIFswLjNdfFxuKyMgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHxcbisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4rI1xuKyMgU0FOIHRyYWZmaWMgcmVhY2hlcyBuc19wZWVyIG9ubHkgdGhyb3VnaCBoc3IwJ3MgZm9yd2FyZCBwYXRoXG4rIyAoaW50ZXJsaW5rIFJYIC1cdTAwM2UgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kXG4rIyBmb3J3YXJkZWQgYnkgdGhlIERVVC5cbitcbitzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4rXG4rc2FuX2lwPVwiMTAwLjY0LjAuMVwiXG4rcGVlcl9pcD1cIjEwMC42NC4wLjNcIlxuK1xuKyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKTpcbisjIFNBTl9BVkdfTUlOIHByb3ZlcyBHU08gc3VwZXItcGFja2V0cyBsZWZ0IHRoZSBTQU47IExBTl9BVkdfTUFYIGlzIGFcbisjIGd1YXJkIHdpdGggbWFyZ2luLCBub3QgdGhlIHByb3RvY29sIG1heGltdW0gKHNlZSBkb190c29fc3RyZWFtX3Rlc3QpLlxuK1NBTl9BVkdfTUlOPTIwNDhcbitMQU5fQVZHX01BWD0xNTE0XG4rXG4raXBlcmZfcGlkPVwiXCJcbitzZXJ2ZXJfd3JhcHBlcj1cIlwiXG4rYWN0aXZlX3Nydl9ucz1cIlwiXG4rd29ya2Rpcj1cIlwiXG4rcGlkZmlsZT1cIlwiXG4rbnNfZHV0PVwiXCJcbituc19zYW49XCJcIlxuK25zX3BlZXI9XCJcIlxuK25zX2xzPVwiXCJcbityY2ZpbGU9XCJcIlxuK1xuKyMgRGVsZXRlIHRoZSBwZXItc2VydmVyIHByaXZhdGUgd29yayBkaXJlY3RvcnkgYW5kIHJlc2V0IGl0c1xuKyMgdmFyaWFibGVzLiBDYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlYXAgYW5kIGZyb20gdGhlIEVYSVRcbisjIHRyYXAsIHdoaWNoIG93bnMgYWxsIGZhaWx1cmUgcGF0aHMuXG4rY2xlYW51cF93b3JrZGlyKClcbit7XG4rXHQjIHJlbW92ZSBvbmx5IHRoZSBrbm93biBub24tZW1wdHkgcHJpdmF0ZSBkaXJlY3RvcnlcbitcdGlmIFsgLW4gXCIke3dvcmtkaXJ9XCIgXSBcdTAwMjZcdTAwMjYgWyAtZCBcIiR7d29ya2Rpcn1cIiBdOyB0aGVuXG4rXHRcdHJtIC1yZiBcIiR7d29ya2Rpcn1cIlxuK1x0ZmlcbitcdHdvcmtkaXI9XCJcIlxuK1x0cGlkZmlsZT1cIlwiXG4rXHRyY2ZpbGU9XCJcIlxuK31cbitcbitjbGVhbnVwKClcbit7XG4rXHQjIFNlcnZlciBjbGVhbnVwIHRhcmdldHMgb25seSB0aGUgbmFtZXNwYWNlIG9mIHRoZSBjdXJyZW50bHlcbitcdCMgYWN0aXZlIHNlcnZlciAocmVjb3JkZWQgYnkgc3RhcnRfaXBlcmZfc2VydmVyKTsgYWZ0ZXIgYVxuK1x0IyBzdWNjZXNzZnVsIHJlYXAgbm90aGluZyBpcyBhY3RpdmUuXG4rXHRpZiBbIC1uIFwiJHthY3RpdmVfc3J2X25zfVwiIF07IHRoZW5cbitcdFx0IyBleGFjdC1QSUQga2lsbCBvbmx5IGFmdGVyIFJFLXZhbGlkYXRpbmcgaWRlbnRpdHkgKGd1YXJkc1xuK1x0XHQjIGFnYWluc3QgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApXG4rXHRcdGlmIFsgLW4gXCIke2lwZXJmX3BpZH1cIiBdIFx1MDAyNlx1MDAyNiB2YWxpZF9zZXJ2ZXJfcGlkIFwiJHthY3RpdmVfc3J2X25zfVwiIFwiJHtpcGVyZl9waWR9XCI7IHRoZW5cbitcdFx0XHRraWxsIFwiJHtpcGVyZl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRmaVxuK1x0XHRpcGVyZl9waWQ9XCJcIlxuK1x0XHRpZiBbIC1uIFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIiBdOyB0aGVuXG4rXHRcdFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1c1xuK1x0XHRcdCMgYm91bmQgc28gYSBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyXG4rXHRcdFx0IyBoYW5nIGNsZWFudXBcbitcdFx0XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbitcdFx0XHRcdGtpbGwgLTAgXCIke3NlcnZlcl93cmFwcGVyfVwiIDJcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcbitcdFx0XHRcdHNsZWVwIDAuMVxuK1x0XHRcdGRvbmVcbitcdFx0XHRraWxsIFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRcdFx0d2FpdCBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRcdHNlcnZlcl93cmFwcGVyPVwiXCJcbitcdFx0ZmlcbitcdFx0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjNcbitcdFx0IyBwcm9jZXNzZXMgdGhhdCBhY3R1YWxseSBsaXZlIGluIHRoZSBhY3RpdmUgc2VydmVyIG5ldG5zLFxuK1x0XHQjIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlbiBTSUdLSUxMIGFueSBzdXJ2aXZvciBiZWZvcmVcbitcdFx0IyB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmQgcGtpbGwgd291bGQgc2NhblxuK1x0XHQjIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy5cbitcdFx0bG9jYWwgX3AgX3N0aWxsXG4rXHRcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCIke2FjdGl2ZV9zcnZfbnN9XCIgMlx1MDAzZS9kZXYvbnVsbCk7IGRvXG4rXHRcdFx0aWYgaXNfaXBlcmYzX3BpZCBcIiRfcFwiOyB0aGVuXG4rXHRcdFx0XHRraWxsIFwiJF9wXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRcdGZpXG4rXHRcdGRvbmVcbitcdFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFx0X3N0aWxsPTBcbitcdFx0XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwiJHthY3RpdmVfc3J2X25zfVwiIDJcdTAwM2UvZGV2L251bGwpOyBkb1xuK1x0XHRcdFx0aWYgaXNfaXBlcmYzX3BpZCBcIiRfcFwiOyB0aGVuXG4rXHRcdFx0XHRcdF9zdGlsbD0xXG4rXHRcdFx0XHRcdGJyZWFrXG4rXHRcdFx0XHRmaVxuK1x0XHRcdGRvbmVcbitcdFx0XHRbIFwiJF9zdGlsbFwiIC1lcSAwIF0gXHUwMDI2XHUwMDI2IGJyZWFrXG4rXHRcdFx0c2xlZXAgMC4xXG4rXHRcdGRvbmVcbitcdFx0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcIiR7YWN0aXZlX3Nydl9uc31cIiAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbitcdFx0XHRpZiBpc19pcGVyZjNfcGlkIFwiJF9wXCI7IHRoZW5cbitcdFx0XHRcdGtpbGwgLTkgXCIkX3BcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRcdFx0ZmlcbitcdFx0ZG9uZVxuK1x0ZmlcbitcdGFjdGl2ZV9zcnZfbnM9XCJcIlxuK1x0Y2xlYW51cF93b3JrZGlyXG4rXHRjbGVhbnVwX2FsbF9uc1xuK31cbitcbit0cmFwIGNsZWFudXAgRVhJVFxuK1xuK2NoZWNrX3Rvb2woKVxuK3tcbitcdGlmICEgY29tbWFuZCAtdiBcIiQxXCIgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuK1x0XHRlY2hvIFwiU0tJUDogQ291bGQgbm90IHJ1biB0ZXN0IHdpdGhvdXQgJDFcIlxuK1x0XHRleGl0ICRrc2Z0X3NraXBcbitcdGZpXG4rfVxuK1xuK25zeCgpXG4re1xuK1x0aXAgbmV0bnMgZXhlYyBcIiQxXCIgYmFzaCAtYyBcIiQyXCJcbit9XG4rXG4raXNfaXBlcmYzX3BpZCgpXG4re1xuK1x0WyBcIiQoY2F0IC9wcm9jL1wiJDFcIi9jb21tIDJcdTAwM2UvZGV2L251bGwpXCIgPSBcImlwZXJmM1wiIF1cbit9XG4rXG4rIyBCb3VuZGVkIHJlYXAgb2YgdGhlIG9uZS1zaG90IHNlcnZlcjogd2FpdCBhdCBtb3N0IDVzIGZvciBpdCB0b1xuKyMgZXhpdCwgdGhlbiByZWFwIHRoZSB3cmFwcGVyIGFuZCBSRVFVSVJFIHRoZSByY2ZpbGUgd2l0aCBpdHMgcmVhbFxuKyMgc3RhdHVzLiBBIHN0dWNrIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyB0aGUgc2NyaXB0LlxuK3JlYXBfaXBlcmZfc2VydmVyKClcbit7XG4rXHRsb2NhbCBzZXJ2ZXJfcmNcbitcbitcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRraWxsIC0wIFwiJHtpcGVyZl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbCB8fCBicmVha1xuK1x0XHRzbGVlcCAwLjFcbitcdGRvbmVcbitcdGlmIGtpbGwgLTAgXCIke2lwZXJmX3BpZH1cIiAyXHUwMDNlL2Rldi9udWxsOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgZXhpdCB3aXRoaW4gNXNcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdHdhaXQgXCIke3NlcnZlcl93cmFwcGVyfVwiXG4rXHRzZXJ2ZXJfd3JhcHBlcj1cIlwiXG4rXHRpZiBbICEgLXMgXCIke3JjZmlsZX1cIiBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBpcGVyZjMgc2VydmVyIHN0YXR1cyBmaWxlIG1pc3NpbmcgKCR7cmNmaWxlfSlcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdHNlcnZlcl9yYz0kKGNhdCBcIiR7cmNmaWxlfVwiKVxuK1x0aWYgISBbWyBcIiRzZXJ2ZXJfcmNcIiA9fiBeWzAtOV0rJCBdXSB8fCBbIFwiJHNlcnZlcl9yY1wiIC1uZSAwIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JyR7c2VydmVyX3JjfSdcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdGlwZXJmX3BpZD1cIlwiXG4rXHRjbGVhbnVwX3dvcmtkaXJcbitcdGFjdGl2ZV9zcnZfbnM9XCJcIlxuK1x0cmV0dXJuIDBcbit9XG4rXG4rIyBEZWNpbWFsLWNvdW50ZXIgdmFsaWRhdGlvbiBmb3IgdGhlIHNuYXBzaG90IGJsb2NrczogZXZlcnkgdmFsdWUgbXVzdFxuKyMgYmUgYSBwbGFpbiBkZWNpbWFsIG51bWJlci4gQSBwYXJzZSBmYWlsdXJlIGluIHJlYWRfdHhfY291bnRlcnMgeWllbGRzXG4rIyBlbXB0eS9nYXJibGVkIGZpZWxkcywgd2hpY2ggdGhpcyBjaGVjayB0dXJucyBpbnRvIGFuIGltbWVkaWF0ZSBGQUlMLlxuK3ZhbGlkX2RlY2ltYWxzKClcbit7XG4rXHRsb2NhbCB2XG4rXG4rXHRmb3IgdiBpbiBcIiRAXCI7IGRvXG4rXHRcdFtbIFwiJHZcIiA9fiBeWzAtOV0rJCBdXSB8fCByZXR1cm4gMVxuK1x0ZG9uZVxuK1x0cmV0dXJuIDBcbit9XG4rXG4rc2V0dXBfdG9wbygpXG4re1xuK1x0c2V0dXBfbnMgbnNfZHV0IG5zX3NhbiBuc19wZWVyIHx8IGV4aXQgJD9cbitcbitcdGlwIGxpbmsgYWRkIGRfYSBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYSBuZXRucyBcIiRuc19wZWVyXCJcbitcdGlwIGxpbmsgYWRkIGRfYiBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyBcIiRuc19wZWVyXCJcbitcdGlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgXCIkbnNfZHV0XCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzMCBuZXRucyBcIiRuc19zYW5cIlxuK1xuK1x0IyBIU1IgdGFncyBhZGQgNiBieXRlcyBwZXIgZnJhbWU7IGdpdmUgdGhlIExBTiBsZWdzIGhlYWRyb29tLlxuK1x0Zm9yIGlmYWNlIGluIGRfYSBkX2I7IGRvXG4rXHRcdG5zeCBcIiRuc19kdXRcIiBcImlwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgXFxcbitcdFx0XHRpcCBsaW5rIHNldCAkaWZhY2UgdXBcIlxuK1x0ZG9uZVxuK1x0Zm9yIGlmYWNlIGluIHBfYSBwX2I7IGRvXG4rXHRcdG5zeCBcIiRuc19wZWVyXCIgXCJpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFxcXG4rXHRcdFx0aXAgbGluayBzZXQgJGlmYWNlIHVwXCJcbitcdGRvbmVcbitcbitcdG5zeCBcIiRuc19kdXRcIiBcImlwIGxpbmsgc2V0IGRfaWwgdXBcIlxuK1x0bnN4IFwiJG5zX3NhblwiIFwiaXAgbGluayBzZXQgczAgdXA7IGlwIGFkZHIgYWRkICRzYW5faXAvMjQgZGV2IHMwXCJcbitcbitcdG5zeCBcIiRuc19kdXRcIiBcImlwIGxpbmsgYWRkIGhzcjAgdHlwZSBoc3IgXFxcbitcdFx0c2xhdmUxIGRfYSBzbGF2ZTIgZF9iIGludGVybGluayBkX2lsIHByb3RvIDA7IFxcXG4rXHRcdGlwIGxpbmsgc2V0IGhzcjAgdXBcIlxuK1x0bnN4IFwiJG5zX3BlZXJcIiBcImlwIGxpbmsgYWRkIGhzcjEgdHlwZSBoc3IgXFxcbitcdFx0c2xhdmUxIHBfYSBzbGF2ZTIgcF9iIHByb3RvIDA7IFxcXG4rXHRcdGlwIGxpbmsgc2V0IGhzcjEgdXA7IGlwIGFkZHIgYWRkICRwZWVyX2lwLzI0IGRldiBoc3IxXCJcbitcbitcdCMgTGV0IHRoZSBub2RlcyBzZWUgZWFjaCBvdGhlcidzIHN1cGVydmlzaW9uIGZyYW1lcy5cbitcdHNsZWVwIDJcbit9XG4rXG4rY2hlY2tfZmVhdHVyZSgpXG4re1xuK1x0bG9jYWwgbnM9XCIkMVwiXG4rXHRsb2NhbCBpZmFjZT1cIiQyXCJcbitcdGxvY2FsIGZlYXR1cmU9XCIkM1wiXG4rXHRsb2NhbCB3YW50PVwiJDRcIlxuK1xuK1x0aWYgbnN4IFwiJG5zXCIgXCJldGh0b29sIC1rICRpZmFjZVwiIHwgZ3JlcCAtcSBcIl4kZmVhdHVyZTogJHdhbnRcIjsgdGhlblxuK1x0XHRlY2hvIFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF1cIlxuK1x0ZWxzZVxuK1x0XHRlY2hvIFwiRkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0Zmlcbit9XG4rXG4rIyBPZmYtb3ItYWJzZW50IHZhcmlhbnQ6IGZhaWxzIG9ubHkgd2hlbiB0aGUgZmVhdHVyZSBpcyBwcmVzZW50IEFORCBvbixcbisjIHNvIGRldmljZXMgdGhhdCBzaW1wbHkgZG8gbm90IGxpc3QgdGhlIGZlYXR1cmUgZG8gbm90IGZhaWwgaXQuXG4rY2hlY2tfZmVhdHVyZV9ub3Rfb24oKVxuK3tcbitcdGxvY2FsIG5zPVwiJDFcIlxuK1x0bG9jYWwgaWZhY2U9XCIkMlwiXG4rXHRsb2NhbCBmZWF0dXJlPVwiJDNcIlxuK1xuK1x0aWYgbnN4IFwiJG5zXCIgXCJldGh0b29sIC1rICRpZmFjZVwiIHwgZ3JlcCAtcSBcIl4kZmVhdHVyZTogb25cIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBvblwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRlbHNlXG4rXHRcdGVjaG8gXCJJTkZPOiAkbnMvJGlmYWNlICRmZWF0dXJlIG5vdCBvbiBbIE9LIF1cIlxuK1x0Zmlcbit9XG4rXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKClcbit7XG4rXHRlY2hvIFwiSU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBHUk8uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9hIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2IgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfaWwgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXG4rXHRzdG9wX2lmX2Vycm9yIFwiR1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlwiXG4rXG4rXHRlY2hvIFwiSU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBIVy1HUk8uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9hIHJ4LWdyby1odyBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9iIHJ4LWdyby1odyBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9pbCByeC1ncm8taHcgb2ZmXG4rXHRzdG9wX2lmX2Vycm9yIFwiSFctR1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlwiXG4rXG4rXHRlY2hvIFwiSU5GTzogQ2hlY2tpbmcgdGhhdCB0aGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTy5cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuK1x0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXCIkbnNfZHV0XCIgaHNyMCB0eC11ZHAtc2VnbWVudGF0aW9uXG4rXHRjaGVja19mZWF0dXJlX25vdF9vbiBcIiRuc19kdXRcIiBoc3IwIHR4LWdzby1saXN0XG4rXHRzdG9wX2lmX2Vycm9yIFwiSFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy1mYW1pbHkgZmVhdHVyZXMuXCJcbit9XG4rXG4rYWxsb2Nfd29ya2RpcigpXG4re1xuK1x0IyBBbGxvY2F0ZWQgb25seSBoZXJlLCBsb25nIGFmdGVyIHRoZSBpbml0aWFsIHRvcG9sb2d5IGNsZWFudXAsIHNvXG4rXHQjIGNsZWFudXAoKSBhdCBzZXR1cF90b3BvKCkgdGltZSBjYW4gbmV2ZXIgcmVtb3ZlIGl0LiBta3RlbXAgZmFpbHVyZVxuK1x0IyBpcyBhIGhhcmQgdGVzdCBmYWlsdXJlLlxuK1x0d29ya2Rpcj0kKG1rdGVtcCAtZCAvdG1wL2hzcl9ncm9fdGVzdC5YWFhYWFgpIHx8IHtcbitcdFx0ZWNobyBcIkZBSUw6IG1rdGVtcCAtZCBmYWlsZWRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRleGl0IDFcbitcdH1cbitcdGNobW9kIDcwMCBcIiR7d29ya2Rpcn1cIlxuK1x0cGlkZmlsZT1cIiR7d29ya2Rpcn0vaXBlcmYucGlkXCJcbitcdHJjZmlsZT1cIiR7d29ya2Rpcn0vaXBlcmYucmNcIlxuK31cbitcbisjIE51bWVyaWMsIGFsaXZlLCBjb21tID09IGlwZXJmMywgYW5kIHJlYWxseSBvd25lZCBieSB0aGUgZ2l2ZW4gbmV0bnMuXG4rdmFsaWRfc2VydmVyX3BpZCgpXG4re1xuK1x0bG9jYWwgcG5zPVwiJDFcIiBwPVwiJDJcIlxuK1xuK1x0W1sgXCIkcFwiID1+IF5bMC05XSskIF1dIHx8IHJldHVybiAxXG4rXHRraWxsIC0wIFwiJHBcIiAyXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiAxXG4rXHRbIFwiJChjYXQgL3Byb2MvXCIkcFwiL2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcIiA9IFwiaXBlcmYzXCIgXSB8fCByZXR1cm4gMVxuK1x0aXAgbmV0bnMgcGlkcyBcIiRwbnNcIiAyXHUwMDNlL2Rldi9udWxsIHwgZ3JlcCAtcXggXCIkcFwiXG4rfVxuK1xuK3N0YXJ0X2lwZXJmX3NlcnZlcigpXG4re1xuK1x0bG9jYWwgc3J2X25zPVwiJDFcIlxuK1x0bG9jYWwgc3J2X2lwPVwiJHsyOi19XCJcbitcdGxvY2FsIGNhbmRpZGF0ZV9waWRcbitcbitcdCMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHNcbitcdCMgcmVhbCBleGl0IHN0YXR1cyAobmV0bnMgc2hhcmVzIHRoZSBQSUQgbmFtZXNwYWNlIGFuZCB0aGUgaG9zdCBmcykuXG4rXHRhbGxvY193b3JrZGlyXG4rXHQjIHJlY29yZCB0aGUgc2VydmVyIG5hbWVzcGFjZSBmb3IgY2xlYW51cCgpIGJlZm9yZVxuK1x0IyBhbnl0aGluZyBjYW4gZmFpbCB3aXRoIHRoZSBzZXJ2ZXIgcnVubmluZ1xuK1x0YWN0aXZlX3Nydl9ucz1cIiRzcnZfbnNcIlxuK1x0KCBuc3ggXCIkc3J2X25zXCIgXCJpcGVyZjMgLXMgLTEgJHtzcnZfaXA6Ky1CICRzcnZfaXB9IFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2IFxcXG4rXHRcdGVjaG8gXFwkISBcdTAwM2UgJHtwaWRmaWxlfTsgXFxcbitcdFx0d2FpdCBcXCQhOyBcXFxuK1x0XHRlY2hvIFxcJD8gXHUwMDNlICR7cmNmaWxlfVwiICkgXHUwMDI2XG4rXHRzZXJ2ZXJfd3JhcHBlcj0kIVxuK1x0IyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvXG4rXHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxuK1x0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFsgLXMgXCIke3BpZGZpbGV9XCIgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbitcdFx0c2xlZXAgMC4xXG4rXHRkb25lXG4rXHRpZiBbICEgLXMgXCIke3BpZGZpbGV9XCIgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWRcIiBcXFxuK1x0XHRcdFwiKG5vIHBpZGZpbGUpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRjYW5kaWRhdGVfcGlkPSQoXHUwMDNjXCIke3BpZGZpbGV9XCIpXG4rXHRpZiAhIHZhbGlkX3NlcnZlcl9waWQgXCIkc3J2X25zXCIgXCIke2NhbmRpZGF0ZV9waWR9XCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgcGlkICcke2NhbmRpZGF0ZV9waWR9J1wiIFxcXG4rXHRcdFx0XCJmYWlsZWQgdmFsaWRhdGlvblwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0IyBwdWJsaXNoIG9ubHkgYWZ0ZXIgZnVsbCB2YWxpZGF0aW9uXG4rXHRpcGVyZl9waWQ9XCIke2NhbmRpZGF0ZV9waWR9XCJcbitcdHNsZWVwIDFcbitcdHJldHVybiAwXG4rfVxuK1xuKyMgUHJpbnQgXCJcdTAwM2NieXRlc1x1MDAzZSBcdTAwM2NwYWNrZXRzXHUwMDNlXCIgZm9yIGV4YWN0bHkgb25lIFRYIHJlY29yZCBvZiBucy9kZXY7IGFueXRoaW5nXG4rIyBlbHNlIChtaXNzaW5nLCBkdXBsaWNhdGVkLCBub24tbnVtZXJpYykgaXMgYSBoYXJkIEZBSUwuXG4rcmVhZF90eF9jb3VudGVycygpXG4re1xuK1x0bG9jYWwgbnM9XCIkMVwiIGRldj1cIiQyXCJcbitcdGxvY2FsIG91dCBjbnRcbitcbitcdG91dD0kKG5zeCBcIiRuc1wiIFwiaXAgLXMgbGluayBzaG93ICRkZXZcIiB8IFxcXG4rXHRcdGF3ayAnL14gK1RYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfScpXG4rXHRjbnQ9JChlY2hvIFwiJG91dFwiIHwgZ3JlcCAtYyAnXlswLTldKiBbMC05XSokJylcbitcdGlmIFsgXCIkY250XCIgLW5lIDEgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2XCIgXFxcbitcdFx0XHRcIihyZWNvcmRzPSRjbnQpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRlY2hvIFwiJG91dFwiXG4rXHRyZXR1cm4gMFxuK31cbitcbisjIFByaW50IFwiXHUwMDNjYnl0ZXNcdTAwM2UgXHUwMDNjcGFja2V0c1x1MDAzZVwiIGZvciBleGFjdGx5IG9uZSBSWCByZWNvcmQgb2YgbnMvZGV2OyB0aGVcbisjIHNhbWUgc2luZ2xlLXJlY29yZCBkaXNjaXBsaW5lIGFzIHJlYWRfdHhfY291bnRlcnMuXG4rcmVhZF9yeF9jb3VudGVycygpXG4re1xuK1x0bG9jYWwgbnM9XCIkMVwiIGRldj1cIiQyXCJcbitcdGxvY2FsIG91dCBjbnRcbitcbitcdG91dD0kKG5zeCBcIiRuc1wiIFwiaXAgLXMgbGluayBzaG93ICRkZXZcIiB8IFxcXG4rXHRcdGF3ayAnL14gK1JYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfScpXG4rXHRjbnQ9JChlY2hvIFwiJG91dFwiIHwgZ3JlcCAtYyAnXlswLTldKiBbMC05XSokJylcbitcdGlmIFsgXCIkY250XCIgLW5lIDEgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogY2Fubm90IHBhcnNlIFJYIGNvdW50ZXJzIG9mICRucy8kZGV2XCIgXFxcbitcdFx0XHRcIihyZWNvcmRzPSRjbnQpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRlY2hvIFwiJG91dFwiXG4rXHRyZXR1cm4gMFxuK31cbitcbitldmFsX2NvdW50ZXJfZGVsdGEoKVxuK3tcbitcdGxvY2FsIG5hbWU9XCIkMVwiIGIwPVwiJDJcIiBwMD1cIiQzXCIgYjE9XCIkNFwiIHAxPVwiJDVcIiBvcD1cIiQ2XCIgbGltaXQ9XCIkN1wiXG4rXHRsb2NhbCBiZCBwZFxuK1xuK1x0aWYgISBbWyBcIiRiMFwiID1+IF5bMC05XSskIFx1MDAyNlx1MDAyNiBcIiRiMVwiID1+IF5bMC05XSskIFx1MDAyNlx1MDAyNiBcXFxuK1x0XHRcIiRwMFwiID1+IF5bMC05XSskIFx1MDAyNlx1MDAyNiBcIiRwMVwiID1+IF5bMC05XSskIF1dOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBub24tbnVtZXJpYyBjb3VudGVyIGlucHV0IGZvciAkbmFtZVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0YmQ9JCgoYjEgLSBiMCkpXG4rXHRwZD0kKChwMSAtIHAwKSlcbitcdGlmIFsgXCIkYmRcIiAtbHQgMCBdIHx8IFsgXCIkcGRcIiAtbGUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBjb3VudGVyIGRlbHRhIGludmFsaWQgZm9yICRuYW1lXCIgXFxcbitcdFx0XHRcIihieXRlcz0kYmQgcGt0cz0kcGQpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRpZiBbIFwiJG9wXCIgPSBcImd0XCIgXTsgdGhlblxuK1x0XHRpZiBbIFwiJGJkXCIgLWxlICQoKHBkICogbGltaXQpKSBdOyB0aGVuXG4rXHRcdFx0ZWNobyBcIkZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCBcdTAwM2M9ICRsaW1pdFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdFx0cmV0PTFcbitcdFx0XHRyZXR1cm4gMVxuK1x0XHRmaVxuK1x0ZWxzZVxuK1x0XHRpZiBbIFwiJGJkXCIgLWd0ICQoKHBkICogbGltaXQpKSBdOyB0aGVuXG4rXHRcdFx0ZWNobyBcIkZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCBcdTAwM2UgJGxpbWl0XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0XHRyZXQ9MVxuK1x0XHRcdHJldHVybiAxXG4rXHRcdGZpXG4rXHRmaVxuK1x0ZWNobyBcIklORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkXCIgXFxcbitcdFx0XCIob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdXCJcbitcdHJldHVybiAwXG4rfVxuK1xuKyMgTEFOLXNsYXZlIHBsYWluLUdTTyByZWdyZXNzaW9uOiBhIHBsYWluIFNBTiBhZ2dyZWdhdGUgZW50ZXJpbmcgYSBQUlBcbisjIExBTiBzbGF2ZSBtdXN0IGJlIHNlZ21lbnRlZCBhdCB0aGUgZm9yd2FyZCBlbnRyeSwgbm90IGRyb3BwZWQuIFBSUFxuKyMgZHJvcHMgc2xhdmUtdG8tc2xhdmUgZm9yd2FyZGluZyBieSBkZXNpZ24gKHBycF9kcm9wX2ZyYW1lKSwgc28gdGhlXG4rIyBjb25zdW1lciBvZiBMQU4tc2xhdmUgU0FOIHRyYWZmaWMgaXMgbG9jYWwgZGVsaXZlcnkgdG8gdGhlIG1hc3Rlci5cbisjIFR3byBpbmRlcGVuZGVudCBvcmFjbGVzOiB0aGUgU0FOLXNpZGUgcHJvb2YgdGhhdCBhZ2dyZWdhdGVzIHJlYWxseVxuKyMgYXJyaXZlZCBhdCB0aGUgRFVULCBhbmQgdGhlIHZvbHVtZSArIHBlci1mcmFtZSBzaGFwZSBvZiB0aGUgbG9jYWxcbisjIGRlbGl2ZXJ5LiBPbiB0aGUgYnJva2VuIGdhdGUgdGhlIGFnZ3JlZ2F0ZXMgYXJlIGRyb3BwZWQgYW5kIFRDUFxuKyMgY3Jhd2xzIG9uIHJldHJhbnNtaXR0ZWQgc2luZ2xlIHNlZ21lbnRzLCBzZXBhcmF0aW5nIHRoZSBrZXJuZWxzIGJ5XG4rIyBhbiBvcmRlciBvZiBtYWduaXR1ZGUgaW4gZGVsaXZlcmVkIGJ5dGVzLlxuK2RvX2xhbnNhbl9nc29fdGVzdCgpXG4re1xuK1x0bG9jYWwgcHJwX2lwPVwiMTAuOTkuMS4xXCIgbHNfaXA9XCIxMC45OS4xLjEwXCJcbitcdGxvY2FsIG91dCBzYW5fYjAgc2FuX3AwIHNhbl9iMSBzYW5fcDFcbitcdGxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgcl9iMCByX3AwIHJfYjEgcl9wMVxuK1xuK1x0c2V0dXBfbnMgbnNfbHMgfHwgZXhpdCAkP1xuK1xuK1x0aXAgbGluayBhZGQgZF9wYSBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIGxzX2EgbmV0bnMgXCIkbnNfbHNcIlxuK1x0aXAgbGluayBhZGQgZF9wYiBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIGxzX3AgbmV0bnMgXCIkbnNfbHNcIlxuK1xuK1x0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBzZXQgZF9wYSBtdHUgMTYwMCB1cFwiXG4rXHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIHNldCBkX3BiIG10dSAxNjAwIHVwXCJcbitcdG5zeCBcIiRuc19sc1wiIFwiaXAgbGluayBzZXQgbHNfYSBtdHUgMTYwMCB1cDsgXFxcbitcdFx0aXAgbGluayBzZXQgbHNfcCBtdHUgMTYwMCB1cDsgaXAgYWRkciBhZGQgJGxzX2lwLzI0IGRldiBsc19hXCJcbitcbitcdCMgUFJQIERVVCB3aXRoIHRoZSBTQU4gb24gYSBMQU4gc2xhdmU6IHBsYWluIFNBTiBhZ2dyZWdhdGVzIGFyZVxuK1x0IyB2YWxpZCB0cmFmZmljIG9uIGEgUFJQIExBTiBhbmQgbXVzdCBub3QgYmUgZHJvcHBlZC5cbitcdG5zeCBcIiRuc19kdXRcIiBcImlwIGxpbmsgYWRkIHBycDAgdHlwZSBoc3IgXFxcbitcdFx0c2xhdmUxIGRfcGEgc2xhdmUyIGRfcGIgcHJvdG8gMTsgXFxcbitcdFx0aXAgbGluayBzZXQgcHJwMCB1cDsgaXAgYWRkciBhZGQgJHBycF9pcC8yNCBkZXYgcHJwMFwiXG4rXG4rXHQjIExldCBzdXBlcnZpc2lvbiBmcmFtZXMgY29udmVyZ2UuXG4rXHRzbGVlcCAyXG4rXG4rXHRlY2hvIFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgTEFOLXNpZGUgU0FOIGludGVyZmFjZS5cIlxuK1x0bnN4IFwiJG5zX2xzXCIgXCJldGh0b29sIC1LIGxzX2EgdHNvIG9uIGdzbyBvblwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2xzXCIgbHNfYSB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb25cbitcdHN0b3BfaWZfZXJyb3IgXCJDb3VsZCBub3QgZW5hYmxlIFRTTyBvbiB0aGUgTEFOLXNpZGUgU0FOIGludGVyZmFjZS5cIlxuK1xuK1x0c3RhcnRfaXBlcmZfc2VydmVyIFwiJG5zX2R1dFwiIFwiJHBycF9pcFwiIHx8IHJldHVyblxuK1xuK1x0cmVhZCAtciByX2IwIHJfcDAgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3J4X2NvdW50ZXJzIFwiJG5zX2R1dFwiIHBycDApXG4rRU9GXG4rXHRyZWFkIC1yIHNhbl9iMCBzYW5fcDAgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX2xzXCIgbHNfYSlcbitFT0ZcbitcdGlmICEgdmFsaWRfZGVjaW1hbHMgXCIkcl9iMFwiIFwiJHJfcDBcIiBcIiRzYW5fYjBcIiBcIiRzYW5fcDBcIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogYmFzZWxpbmUgY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXG4rXHRpZiAhIG91dD0kKG5zeCBcIiRuc19sc1wiIFwidGltZW91dCA2MCBpcGVyZjMgLWMgJHBycF9pcCAtTSAxNDQ2IFxcXG4rXHRcdC1iIDJHIC10IDEwXCIgMlx1MDAzZVx1MDAyNjEpOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBMQU4tc2xhdmUgR1NPIGxvY2FsLWRlbGl2ZXJ5IHN0cmVhbSBmYWlsZWQ6XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0ZWNobyBcIiRvdXRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXG4rXHRyZWFkIC1yIHJfYjEgcl9wMSBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfcnhfY291bnRlcnMgXCIkbnNfZHV0XCIgcHJwMClcbitFT0ZcbitcdHJlYWQgLXIgc2FuX2IxIHNhbl9wMSBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfbHNcIiBsc19hKVxuK0VPRlxuK1x0aWYgISB2YWxpZF9kZWNpbWFscyBcIiRyX2IxXCIgXCIkcl9wMVwiIFwiJHNhbl9iMVwiIFwiJHNhbl9wMVwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBmaW5hbCBjb3VudGVyIHNuYXBzaG90IGludmFsaWRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcbitcdCMgT3JhY2xlIDEgLSBhZ2dyZWdhdGVzIHJlYWxseSBhcnJpdmVkOiB0aGUgU0FOIGVtaXR0ZWRcbitcdCMgc3VwZXItcGFja2V0cyB0b3dhcmQgdGhlIERVVC5cbitcdGV2YWxfY291bnRlcl9kZWx0YSBcIlNBTiBsc19hIFRYXCIgXCIkc2FuX2IwXCIgXCIkc2FuX3AwXCIgXFxcbitcdFx0XCIkc2FuX2IxXCIgXCIkc2FuX3AxXCIgZ3QgXCIkU0FOX0FWR19NSU5cIlxuK1x0WyBcIiR7cmV0Oi0wfVwiIC1lcSAwIF0gfHwgcmV0dXJuXG4rXG4rXHQjIE9yYWNsZSAyIC0gbG9jYWwgZGVsaXZlcnkgb2YgdGhvc2UgYWdncmVnYXRlczogdm9sdW1lIGFuZFxuK1x0IyBwZXItZnJhbWUgc2hhcGUgb24gdGhlIFBSUCBtYXN0ZXIuIFRoZSB2b2x1bWUgZ2F0ZSBzZXBhcmF0ZXNcbitcdCMgZnVsbCBkZWxpdmVyeSBmcm9tIHRoZSByZXRyYW5zbWl0IGNyYXdsIHRoZSBicm9rZW4gZ2F0ZSBsZWF2ZXM7XG4rXHQjIHRoZSBhdmVyYWdlIGdhdGUgcHJvdmVzIHRoZSBieXRlcyBhcnJpdmVkIHBlci1mcmFtZS5cbitcdGlmIFsgJCgocl9iMSAtIHJfYjApKSAtbHQgMTAwMDAwMDAwIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IExBTi1zbGF2ZSBsb2NhbCBkZWxpdmVyeSBkZWdyYWRlZFwiIFxcXG4rXHRcdFx0XCIocHJwMCBSWCBkZWx0YSAkKChyX2IxIC0gcl9iMCkpIGJ5dGVzIFx1MDAzYyAxMDAwMDAwMDApXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1x0aWYgWyAkKChyX2IxIC0gcl9iMCkpIC1ndCAkKCggKHJfcDEgLSByX3AwKSAqIExBTl9BVkdfTUFYICkpIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGxvY2FsIGRlbGl2ZXJ5IG5vdCBwZXItZnJhbWVcIiBcXFxuK1x0XHRcdFwiKGF2ZyAkKCggKHJfYjEgLSByX2IwKSAvIChyX3AxIC0gcl9wMCkgKSkgXHUwMDNlICRMQU5fQVZHX01BWClcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXHRlY2hvIFwiSU5GTzogTEFOLXNsYXZlIGxvY2FsIGRlbGl2ZXJ5IHBycDAgUlggZGVsdGFcIiBcXFxuK1x0XHRcIiQoKHJfYjEgLSByX2IwKSkgYnl0ZXMgLyAkKChyX3AxIC0gcl9wMCkpIHBrdHMgWyBPSyBdXCJcbitcdHJlYXBfaXBlcmZfc2VydmVyIHx8IHJldHVyblxuK1x0ZWNobyBcIklORk86IExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbiBbIE9LIF1cIlxuK31cbitcbitkb190c29fc3RyZWFtX3Rlc3QoKVxuK3tcbitcdGxvY2FsIG91dCBzZW5kZXJfcmV0clxuK1x0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXG4rXHRsb2NhbCBhX2IwIGFfcDAgYV9iMSBhX3AxIGJfYjAgYl9wMCBiX2IxIGJfcDFcbitcbitcdGVjaG8gXCJJTkZPOiBFbmFibGluZyBUU08vR1NPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLlwiXG4rXHRuc3ggXCIkbnNfc2FuXCIgXCJldGh0b29sIC1LIHMwIHRzbyBvbiBnc28gb25cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19zYW5cIiBzMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb25cbitcdHN0b3BfaWZfZXJyb3IgXCJDb3VsZCBub3QgZW5hYmxlIFRTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cIlxuK1xuK1x0ZWNobyBcIklORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC1cdTAwM2UgcGVlciB0aHJvdWdoIHRoZSBIU1IgRFVULlwiXG4rXHRzdGFydF9pcGVyZl9zZXJ2ZXIgXCIkbnNfcGVlclwiIHx8IHJldHVyblxuK1xuK1x0IyBDb3VudGVyIHNuYXBzaG90cyBhcm91bmQgdGhlIHN0cmVhbSB3aW5kb3cuIFRoZSBTQU4tc2lkZSBhdmVyYWdlXG4rXHQjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0c1xuK1x0IyByZWFsbHkgbGVmdCB0aGUgU0FOKTsgZWFjaCBEVVQgTEFOIGxlZyBtdXN0IHN0YXkgdW5kZXIgTEFOX0FWR19NQVhcbitcdCMgKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IGJ1bGsgb3V0cHV0IHdhcyBzZWdtZW50ZWQgcGVyLWZyYW1lKS4gVGhlc2VcbitcdCMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuXG4rXHRzYW5fYjA9MDsgc2FuX3AwPTA7IGFfYjA9MDsgYV9wMD0wOyBiX2IwPTA7IGJfcDA9MFxuK1x0cmVhZCAtciBzYW5fYjAgc2FuX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19zYW5cIiBzMClcbitFT0ZcbitcdHJlYWQgLXIgYV9iMCBhX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2EpXG4rRU9GXG4rXHRyZWFkIC1yIGJfYjAgYl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfZHV0XCIgZF9iKVxuK0VPRlxuK1x0aWYgISB2YWxpZF9kZWNpbWFscyBcIiRzYW5fYjBcIiBcIiRzYW5fcDBcIiBcIiRhX2IwXCIgXCIkYV9wMFwiIFxcXG4rXHRcdFwiJGJfYjBcIiBcIiRiX3AwXCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGJhc2VsaW5lIFRYIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1xuK1x0IyByYXRlLWNhcHBlZDogdGhlIFBSSU1BUlkgZGlzY3JpbWluYXRvciBpcyB0aGUgY291bnRlciBpbmVxdWFsaXR5XG4rXHQjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuXG4rXHQjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhXG4rXHQjIGZ1bmN0aW9uYWwgcHJvYmxlbS5cbitcdGlmICEgb3V0PSQobnN4IFwiJG5zX3NhblwiIFwidGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcXFxuK1x0XHQtYiAyRyAtdCAxMFwiIDJcdTAwM2VcdTAwMjYxKTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIGNsaWVudCBmYWlsZWQ6XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0ZWNobyBcIiRvdXRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXG4rXHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX3NhblwiIHMwKVxuK0VPRlxuK1x0cmVhZCAtciBhX2IxIGFfcDEgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX2R1dFwiIGRfYSlcbitFT0ZcbitcdHJlYWQgLXIgYl9iMSBiX3AxIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2IpXG4rRU9GXG4rXHRpZiAhIHZhbGlkX2RlY2ltYWxzIFwiJHNhbl9iMVwiIFwiJHNhbl9wMVwiIFwiJGFfYjFcIiBcIiRhX3AxXCIgXFxcbitcdFx0XCIkYl9iMVwiIFwiJGJfcDFcIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJTQU4gczAgVFhcIiBcIiRzYW5fYjBcIiBcIiRzYW5fcDBcIiBcIiRzYW5fYjFcIiBcIiRzYW5fcDFcIiBcXFxuK1x0XHRndCBcIiRTQU5fQVZHX01JTlwiXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJEVVQgZF9hIFRYXCIgXCIkYV9iMFwiIFwiJGFfcDBcIiBcIiRhX2IxXCIgXCIkYV9wMVwiIFxcXG4rXHRcdGxlIFwiJExBTl9BVkdfTUFYXCJcbitcdGV2YWxfY291bnRlcl9kZWx0YSBcIkRVVCBkX2IgVFhcIiBcIiRiX2IwXCIgXCIkYl9wMFwiIFwiJGJfYjFcIiBcIiRiX3AxXCIgXFxcbitcdFx0bGUgXCIkTEFOX0FWR19NQVhcIlxuK1x0WyBcIiR7cmV0Oi0wfVwiIC1lcSAwIF0gfHwgcmV0dXJuXG4rXG4rXHQjIHN1Y2Nlc3MgcGF0aDogYm91bmRlZCByZWFwIHdpdGggdGhlIHNlcnZlcidzIHJlYWwgc3RhdHVzXG4rXHRyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm5cbitcbitcdCMgc2Vjb25kYXJ5IGhlYWx0aCBzaWduYWwgb25seTogYW5jaG9yZWQsIHNpbmdsZS1tYXRjaCwgbnVtZXJpYyDigJRcbitcdCMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlclxuK1x0IyBnYXRlcyAodGhlIGNvdW50ZXIgaW5lcXVhbGl0aWVzIGFib3ZlIGFyZSB0aGUgcHJpbWFyeSBldmlkZW5jZSkuXG4rXHRzZW5kZXJfcmV0cj0kKGVjaG8gXCIkb3V0XCIgfCBhd2sgJy9zZWMgLiogc2VuZGVyJC8ge3ByaW50ICQoTkYtMSl9JylcbitcdGlmIFsgXCIkKGVjaG8gXCIkc2VuZGVyX3JldHJcIiB8IGdyZXAgLUVjICdeWzAtOV0rJCcpXCIgLW5lIDEgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogY2Fubm90IHBhcnNlIHNlbmRlciByZXRyYW5zbWl0cyByZWxpYWJseVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGVjaG8gXCIkb3V0XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1x0ZWNobyBcIklORk86IFRDUCBzdHJlYW0gZG9uZTtcIiBcXFxuK1x0XHRcInNlbmRlciByZXRyYW5zbWl0cz0kc2VuZGVyX3JldHIgKHNlY29uZGFyeSBzaWduYWwpXCJcbitcdGVjaG8gXCIkb3V0XCIgfCBncmVwIC1FIFwic2VuZGVyfHJlY2VpdmVyXCJcbit9XG4rXG4rY2hlY2tfcHJlcmVxdWlzaXRlc1xuK2NoZWNrX3Rvb2wgZXRodG9vbFxuK2NoZWNrX3Rvb2wgaXBlcmYzXG4rY2hlY2tfdG9vbCB0aW1lb3V0XG4rXG4rIyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LlxuK2lmICEgaXAgbGluayBoZWxwIGhzciAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IGlwcm91dGUyIGhhcyBubyBIU1IgaW50ZXJsaW5rIHN1cHBvcnRcIlxuK1x0ZXhpdCAka3NmdF9za2lwXG4rZmlcbitcbitzZXR1cF90b3BvXG4rXG4rZWNobyBcIklORk86IEluaXRpYWwgdmFsaWRhdGlvbiBwaW5nIChTQU4gLVx1MDAzZSBwZWVyIHRocm91Z2ggdGhlIERVVCkuXCJcbitkb19waW5nIFwiJG5zX3NhblwiIFwiJHBlZXJfaXBcIlxuK3N0b3BfaWZfZXJyb3IgXCJJbml0aWFsIHZhbGlkYXRpb24gZmFpbGVkLlwiXG4rXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzXG4rZG9fdHNvX3N0cmVhbV90ZXN0XG4rc3RvcF9pZl9lcnJvciBcIkdTTyBzdXBlci1wYWNrZXQgc3RyZWFtIHRlc3QgZmFpbGVkLlwiXG4rXG4rZG9fbGFuc2FuX2dzb190ZXN0XG4rc3RvcF9pZl9lcnJvciBcIkxBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbiBmYWlsZWQuXCJcbitcbitlY2hvIFwiSU5GTzogQWxsIGdvb2QuXCJcbitjbGVhbnVwXG4rZXhpdCAkcmV0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDowNS4yMDkyNTI3NDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjQ2MTM3NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSFNSIEdTTyBTdXBlci1QYWNrZXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBpbnRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGFkZGl0aW9uIHRvIHRoZSBkZXZpY2UgQVBJLCByZWFsbHkuICBUaGUgbWFpbiB0aHJ1c3Qgc2VlbXMgdG8gYmUgZW5hYmxpbmcgSFNSIHRvIHByb3Blcmx5IGhhbmRsZSBHU08gc3VwZXItcGFja2V0cy4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBIU1IgZmlsZXM6IGBoc3JfZGV2aWNlLmNgLCBgaHNyX2ZvcndhcmQuY2AsIGFuZCBgaHNyX3NsYXZlLmNgLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBjaGFuZ2VzIHRvIGBoc3JfZm9yd2FyZC5jYC4gIExldCdzIHNlZS4uLlxuXG5BaCwgeWVzLCB0aGV5J3ZlIGltcGxlbWVudGVkIEdTTyBzZWdtZW50YXRpb24gd2l0aGluIGBoc3JfZm9yd2FyZF9za2JgLiAgSWYgdGhlIFNLQiBpc24ndCBhIEdTTyBwYWNrZXQsIGl0IGp1c3QgZm9yd2FyZHMgaXQgYXMtaXMuIE1ha2VzIHNlbnNlLiBCdXQgaWYgaXQgKmlzKiBhIEdTTyBwYWNrZXQsIGl0J3Mgc2VnbWVudGVkIHVzaW5nIGBfX3NrYl9nc29fc2VnbWVudGAgYW5kIHRoZW4gZWFjaCBzZWdtZW50IGlzIGZvcndhcmRlZCBpbmRpdmlkdWFsbHkuIFRoYXQncyB0aGUgY29ycmVjdCBhcHByb2FjaC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGV4cGxpY2l0bHkgZGlzYWJsaW5nIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcyBpbiBgaHNyX3BvcnRkZXZfc2V0dXBgIHRvby4gIE1ha2VzIHNlbnNlLCB3ZSBjYW4ndCBoYXZlIGJvdGggR1JPIGFuZCBzZWdtZW50YXRpb24uICBUaGUgY29tbWVudCBtZW50aW9ucyB0aGF0IGRpc2FibGluZyBHUk8gaXMgXCJiZXN0LWVmZm9ydCxcIiB3aGljaCBtZWFucyB0aGUgZHJpdmVyIGhhcyB0byByZXNwZWN0IGl0LiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGFuZCBtaWdodCBuZWVkIG1vcmUgZGlzY3Vzc2lvbiByZWdhcmRpbmcgaGFyZHdhcmUgc3VwcG9ydC5cblxuVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGNoYW5nZSwgaW1wYWN0aW5nIGJvdGggdGhlIGNvcmUgbmV0d29yayBkZXZpY2UgQVBJIChgZGV2X2Rpc2FibGVfZ3JvYCkgYW5kIGhvdyBIU1Igb3BlcmF0ZXMgaW50ZXJuYWxseS5cblxuVGhlIGtleSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIGFib3V0IHRlc3RpbmcuIENhbiBIU1IgYmUgdGVzdGVkIGVmZmVjdGl2ZWx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIEdvb2QuIFRoZXkndmUgYWRkZWQgYSBzZWxmdGVzdCBzcGVjaWZpY2FsbHkgZm9yIGBoc3JfZ3JvX3N1cGVycGFja2V0LnNoYC4gVGhhdCdzIGEgZ29vZCBzaWduIOKAkyB0aGF0IG1lYW5zIGl0J3MgZGVtb25zdHJhYmxlLiBJdCBzZWVtcyBsaWtlIHVzaW5nIHZldGggZGV2aWNlcyBzaG91bGQgd29yaywgc2luY2UgSFNSIGlzIGVzc2VudGlhbGx5IGEgc29mdHdhcmUtZGVmaW5lZCBwcm90b2NvbC4gIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxpY2F0ZSBpdCBsaWtlIGJvbmRpbmcgb3IgYnJpZGdpbmcuXG5cbk5vdywgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhlIEhTUiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCBtZSBnbyBmaW5kIGBuZXQvaHNyL0tjb25maWdgIHRvIGNvbmZpcm0gZXZlcnl0aGluZyBpcyB3aGVyZSBJIGV4cGVjdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDoxNC44NTUzOTI3MjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxOTIwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhTUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9LY29uZmlnLTUtXFxubmV0L2hzci9LY29uZmlnOjY6Y29uZmlnIEhTUlxcbm5ldC9oc3IvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXFx1MDAyNiBQUlApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDoxNC44OTc1OTE3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjg3Mjk2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgSFNSKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIEhTUiBpbXBsZW1lbnRhdGlvbi4gVGhlIGtleSBjb25maWcgb3B0aW9uLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGBIU1JgLiBOb3csIHRvIGZpbmQgdGhlIG1vc3QgZnJ1aXRmdWwgYXJlYXMgZm9yIGZ1enppbmcsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMuXG5cblJpZ2h0IG9mZiB0aGUgYmF0LCBgaHNyX2ZvcndhcmRfc2tiYCBzZWVtcyBsaWtlIGEgcHJpbWUgdGFyZ2V0LiBJdCdzIGdvdCB0aGUgcmluZyBvZiBhIGNvcmUgcHJvY2Vzc2luZyBmdW5jdGlvbi4gVGhlbiB0aGVyZSdzIGBoc3JfaGFuZGxlX2ZyYW1lYCwgd2hpY2ggaXMgdGhlIFJYIGhhbmRsZXIgZm9yIEhTUiBzbGF2ZSBkZXZpY2VzIC0gYWxzbyBsaWtlbHkgdG8gYmUgdmFsdWFibGUuIGBoc3JfZGV2X3htaXRgIGlzIHRoZSBUWCBoYW5kbGVyIGZvciB0aGUgSFNSIG1hc3RlciBkZXZpY2UsIHNvIHRoYXQncyBkZWZpbml0ZWx5IGluIHNjb3BlLiBJIHNlZSB0aGF0IGBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90b2AgaXMgc3RhdGljLCBtZWFuaW5nIEkgY2FuJ3QgZGlyZWN0bHkgdGFyZ2V0IGl0LiBIb3dldmVyLCBpdCAqaXMqIGNhbGxlZCBieSBgaHNyX2ZvcndhcmRfc2tiYCwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGR1cmluZyBhbmFseXNpcywgb3IgYnkgZnV6emluZyBgaHNyX2ZvcndhcmRfc2tiYCBJIHdpbGwgaW1wbGljaXRseSBiZSB0ZXN0aW5nIGBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90b2AuIGBkZXZfZGlzYWJsZV9ncm9gIGlzIGV4cG9ydGVkLCBzbyBpdCdzIGNhbGxibGUgYnkgb3RoZXIgbW9kdWxlcywgYnV0IGl0IGxvb2tzIGxpa2UgYSBzaW1wbGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgYW5kIGh1bnQgZm9yIGFueSBleHBvcnRlZCBvciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLCBhcyB0aGVzZSBhcmUgdGhlIG9uZXMgSSdsbCBiZSBhYmxlIHRvIGRpcmVjdGx5IHRhcmdldCB3aXRoIG15IGZ1enppbmcgZWZmb3J0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNjYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6MjEuMjY2MzIzODA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTA2MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGhzcl9mb3J3YXJkX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZm9yd2FyZC5jPTc3Nz1zdGF0aWMgX19iZTE2IGhzcl9nc29fZWZmZWN0aXZlX3Byb3RvKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODE0LVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo4MTU6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDoyMS4zMTIyNDA1MjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzcyOTAyNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEhTUiBGcmFtZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBIU1IgaW1wbGVtZW50YXRpb24gYW5kIEkndmUgZ290IGEgc3BlY2lmaWMgcXVlc3Rpb24gYnVybmluZyBpbiBteSBtaW5kLiBgaHNyX2ZvcndhcmRfc2tiYC4uLiBJIG5vdGljZWQgaXQncyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBCdXQgd2hhdCBhYm91dCB0aGUgb3RoZXIgbWFqb3IgZnVuY3Rpb24gaW52b2x2ZWQgaW4gaGFuZGxpbmcgSFNSIGZyYW1lcywgYGhzcl9oYW5kbGVfZnJhbWVgPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgc2NvcGUgYW5kIHZpc2liaWxpdHkgb2YgdGhhdCBvbmUuIElzIGl0IGFsc28gYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIEhTUiBtb2R1bGUsIG9yIGlzIGl0IGFwcHJvcHJpYXRlbHkgbGltaXRlZCBpbiBpdHMgc2NvcGU/IFVuZGVyc3RhbmRpbmcgdGhlIHN0YXRpYy9ub24tc3RhdGljIHN0YXR1cyBvZiB0aGVzZSBmdW5jdGlvbnMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG1vZHVsZSdzIHN0cnVjdHVyZSBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29yayBzdGFjay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGZ1bmN0aW9uJ3MgdmlzaWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDoyNC42ODUxNDU5NTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNjIzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2hhbmRsZV9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL2hzcl9zbGF2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX3NsYXZlLmM9MTk9Ym9vbCBoc3JfaW52YWxpZF9kYW5faW5ncmVzc19mcmFtZShfX2JlMTYgcHJvdG9jb2wpXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTIzLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM6MjQ6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxubmV0L2hzci9oc3Jfc2xhdmUuYy0yNS17XFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTg1PWJvb2wgaHNyX3BvcnRfZXhpc3RzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2hzci9oc3Jfc2xhdmUuYy04Ni17XFxubmV0L2hzci9oc3Jfc2xhdmUuYzo4NzpcXHRyZXR1cm4gcmN1X2FjY2Vzc19wb2ludGVyKGRldi1cXHUwMDNlcnhfaGFuZGxlcikgPT0gaHNyX2hhbmRsZV9mcmFtZTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg4LX1cXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM9MTMyPXN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTE1OS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjE2MDpcXHRyZXMgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcihkZXYsIGhzcl9oYW5kbGVfZnJhbWUsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTYxLVxcdGlmIChyZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjQwOjI0LjczMTMxMjk3MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMzE5NDI5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdW5kZXJzdGFuZGluZywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludGVybmFsIEhTUiBGcmFtZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIGNvZGUgYW5kIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBmcmFtZXMgYXJlIG1hbmFnZWQuIFRoZSBrZXkgdGFrZWF3YXkgaGVyZSBpcyB0aGF0IGBoc3JfaGFuZGxlX2ZyYW1lYCBpcyBkZWNsYXJlZCBhcyAqc3RhdGljKi4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGEgZmlsZS1sb2NhbCBmdW5jdGlvbi4gSXQncyBub3QgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0IGl0J3MgZGVmaW5lZCBpbi4gVGhhdOKAmXMgcHJvYmFibHkgYmVjYXVzZSBpdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgbm90IHBhcnQgb2YgdGhlIEhTUiBBUEkgdGhhdCdzIGV4cG9zZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEl0J3MgZG9pbmcgc29tZXRoaW5nIHNwZWNpZmljIHdpdGhpbiB0aGUgSFNSIGRldmljZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB3aGVyZSBpdCdzIGNhbGxlZCBhbmQgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS5cblxuVGhlbiwgdGhlcmXigJlzIGBoc3JfZGV2X3htaXRgLCB3aGljaCBJJ20gc2VlaW5nIGRlZmluZWQgaW4gYG5ldC9oc3IvaHNyX2RldmljZS5jYC4gVGhhdOKAmXMgbXkgcHJpbWFyeSBwb2ludCBvZiBpbnRlcmVzdC4gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBhY3R1YWwgdHJhbnNtaXNzaW9uIG9mIGZyYW1lcyBmcm9tIHRoZSBIU1IgZGV2aWNlLiBHaXZlbiB0aGUgbmFtZSwgSSdkIGV4cGVjdCBpdCB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIEhTUiBkZXZpY2VzIHRvIHNlbmQgZnJhbWVzLiBJIHNob3VsZCBjaGVjayBpZiBpdCBoYW5kbGVzIGFueSBzcGVjaWFsIEhTUi1zcGVjaWZpYyBoZWFkZXIgZm9ybWF0dGluZyBvciBwYWNrZXQgZHVwbGljYXRpb24sIGFzIEhTUiBpcyBhYm91dCByZWR1bmRhbmN5LiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiBpbXBsZW1lbnRpbmcgdGhlIHJlZHVuZGFuY3kgbWVjaGFuaXNtcy4gSSBiZXQgdGhpcyBpcyB3aGVyZSB0aGUgSFNSLXNwZWNpZmljIGxvZ2ljIHJlc2lkZXMgZm9yIHNlbmRpbmcgcGFja2V0cy4gSeKAmWxsIGRpZyBpbnRvIHRoaXMgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBzdGVwcyBpbnZvbHZlZCBpbiB0cmFuc21pdHRpbmcgSFNSIGZyYW1lcyBmcm9tIGEgZGV2aWNlIHBlcnNwZWN0aXZlLCBpbmNsdWRpbmcgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRyaXZlciBhbmQsIHBlcmhhcHMsIHRoZSBpbXBsaWNhdGlvbnMgb24gcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjE4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6MzAuNzYzMjU4NjMyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTYyMDg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZGV2X3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjE2PXN0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCBoc3JfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjMtXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6MjI0OnN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjUte1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9NTk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaHNyX2RldmljZV9vcHMgPSB7XFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MDEtXFx0Lm5kb19zdG9wID0gaHNyX2Rldl9jbG9zZSxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2MDI6XFx0Lm5kb19zdGFydF94bWl0ID0gaHNyX2Rldl94bWl0LFxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYwMy1cXHQubmRvX2NoYW5nZV9yeF9mbGFncyA9IGhzcl9jaGFuZ2VfcnhfZmxhZ3MsXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz02NjQ9Ym9vbCBpc19oc3JfbWFzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjY1LXtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NjY6XFx0cmV0dXJuIChkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdGFydF94bWl0ID09IGhzcl9kZXZfeG1pdCk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjY3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6MzAuODEyODg3NTI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzODczNjQ4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipGb2N1c2luZyBpbiBvbiBIU1IgUGFja2V0IFRyYW5zbWlzc2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBIU1IgcGFja2V0IHRyYW5zbWlzc2lvbiB3b3JrcywgYW5kIEkgc2VlIGBoc3JfZGV2X3htaXRgIGlzIGRlZmluZWQgYXMgc3RhdGljLiBUaGF0IGxpbWl0cyBteSBhYmlsaXR5IHRvIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUsIGFuZCBzdWdnZXN0cyBJIG5lZWQgdG8gZmluZCBhIGJldHRlciBlbnRyeSBwb2ludCwgYSBzeW1ib2wgdGhhdCdzIG1vcmUgYWNjZXNzaWJsZSBmb3IgZGVlcCBhbmFseXNpcy4gUmlnaHQsIHRoYXQgbWFrZXMgYGhzcl9mb3J3YXJkX3NrYmAgYSBtdWNoIGJldHRlciBmb2NhbCBwb2ludCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgY29yZSBmb3J3YXJkaW5nIGxvZ2ljLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdtIGludGVyZXN0ZWQgaW4uXG5cbk5vdywgd2hpbGUgSSdtIGF0IGl0LCBJIHNob3VsZCBhbHNvIG1ha2UgYSBub3RlIG9mIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gLiBUaGV5J3JlIHByb2JhYmx5IGluIGBuZXQvY29yZS9kZXYuY2AgYW5kIGBuZXQvY29yZS9kZXZfYXBpLmNgLiBUaGVzZSBhcmUgd29ydGggYSBsb29rIGJlY2F1c2UgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgY2FuIHNpZ25pZmljYW50bHkgaW1wYWN0IHBhY2tldCBwcm9jZXNzaW5nLCBzbyBhbnkgbG9naWMgdGhhdCBpbnRlcmFjdHMgd2l0aCBpdCBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgcGVyZm9ybWFuY2Ugb3IgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGUgSFNSIGNvbnRleHQsIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggSFNSJ3MgZHVwbGljYXRlIHBhY2tldCBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDo0MC4yMDAyNTUzMTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjQ1MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGRldl9kaXNhYmxlX2dyb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9kZXZfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2X2FwaS5jPTI3MD1FWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2xybyk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMjg0LSAqL1xcbm5ldC9jb3JlL2Rldl9hcGkuYzoyODU6dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjg2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6NDAuMjUwNTEwMDQ3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MDkyMTA3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgYG5ldGlmX2Rpc2FibGVfZ3JvYCBpbiBgbmV0L2NvcmUvZGV2LmNgKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBgbmV0aWZfZGlzYWJsZV9ncm9gIHdpdGhpbiBgbmV0L2NvcmUvZGV2LmNgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgZnVuY3Rpb24sIGJ5IGl0cyB2ZXJ5IG5hbWUsIGlzIGFsbCBhYm91dCBkaXNhYmxpbmcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykuIFRoYXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgaXNuJ3QgaXQ/IEl0IGFsbG93cyB0aGUgbmV0d29yayBzdGFjayB0byBjb2FsZXNjZSBtdWx0aXBsZSBpbmNvbWluZyBwYWNrZXRzIGludG8gbGFyZ2VyIGZyYW1lcywgcmVkdWNpbmcgcHJvY2Vzc2luZyBvdmVyaGVhZCwgZXNwZWNpYWxseSBmb3IgaGlnaC1iYW5kd2lkdGggc2NlbmFyaW9zLiBTbywgd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBkaXNhYmxlPyBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IG5lY2Vzc2l0YXRlIHNhY3JpZmljaW5nIEdSTydzIGVmZmljaWVuY3k/XG5cbk15IG1pbmQgaXMgYWxyZWFkeSByYWNpbmcgd2l0aCBxdWVzdGlvbnM6IElzIHRoaXMgYmVpbmcgY2FsbGVkIGR1ZSB0byBhIHNwZWNpZmljIGhhcmR3YXJlIGxpbWl0YXRpb24/IEEgc29mdHdhcmUtcmVsYXRlZCBpbmNvbXBhdGliaWxpdHkgd2l0aCBhIHBhcnRpY3VsYXIgcHJvdG9jb2wgb3IgZHJpdmVyPyBBcmUgdGhlcmUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgYXJpc2UgZnJvbSB1c2luZyBHUk8gaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGNhbGxpbmcgc2l0ZXMsIHRoZSBhcmd1bWVudHMgcGFzc2VkLi4uIGV2ZXJ5dGhpbmcuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIGRpc2FibGluZyB0aGlzIGtleSBvcHRpbWl6YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJhZGVvZmZzIHRoZSBzeXN0ZW0gaXMgbWFraW5nIGhlcmUuIFdoYXQncyB0aGUgY29zdCBvZiB0aGlzIGRpc2FibGUgaW4gdGVybXMgb2YgdGhyb3VnaHB1dCwgbGF0ZW5jeSwgYW5kIENQVSBjeWNsZXM/IElzIGl0IGEgcGVybWFuZW50IGRpc2FibGUgb3IgYSBjb25kaXRpb25hbCBvbmU/IFVsdGltYXRlbHksIEkgd2FudCB0byBlbnN1cmUgdGhhdCB0aGlzIGlzIHRoZSAqcmlnaHQqIGRlY2lzaW9uLCBhIHdlbGwtaW5mb3JtZWQgdHJhZGUtb2ZmLCBhbmQgbm90IGEgcXVpY2sgZml4IHRoYXQgaW50cm9kdWNlcyBhIGhpZGRlbiBwZXJmb3JtYW5jZSBoaXQgbGF0ZXIuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHRoZSBuZXR3b3JrIGRldmljZSBzdGF0ZSBvciBwb3RlbnRpYWwgaXNzdWVzLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBwaWVjZSB0aGF0IGNvdWxkIHNoZWQgbGlnaHQgb24gc29tZSB1bmRlcmx5aW5nIGRldmljZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDo0Ny44NTk3MjM3ODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTk1Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIG5ldGlmX2Rpc2FibGVfZ3JvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTE4MjU9dm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTg0Mi1cXG5uZXQvY29yZS9kZXYuYzoxODQzOnZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXYuYy0xODQ0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6NDcuOTE0MzI4MTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDMzNDA2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgR1JPIERpc2FibGVtZW50IGluIEhTUioqXG5cbk15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgcmV2b2x2ZXMgYXJvdW5kIHRoZSBzeW1ib2xzIGBoc3JfZm9yd2FyZF9za2JgLCBgZGV2X2Rpc2FibGVfZ3JvYCwgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIFRoZXNlIGFyZSB0aGUga2V5IHBpZWNlcyBvZiBjb2RlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGluIHRoZSBjb250ZXh0IG9mIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGRpc2FibGVtZW50LCBzcGVjaWZpY2FsbHkgYXMgaXQgcmVsYXRlcyB0byBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpLiBJIG5lZWQgdG8gZGV0ZXJtaW5lICp3aHkqIHRoZXNlIGFyZSBzaWduaWZpY2FudCBhbmQsIGNydWNpYWxseSwgaG93IHRoZXkgaW50ZXJhY3QuXG5cbkJleW9uZCB0aGF0LCBJIG5lZWQgdG8gaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3Igc3ltYm9scyByZWxhdGVkIHRvIEdSTyBkaXNhYmxlbWVudCB3aXRoaW4gdGhlIEhTUiBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBIU1JgIGRpcmVjdGx5LiBJdCdzIHRoZSBtb3N0IG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuXG5cbkZpbmFsbHksIGEgZGVwZW5kZW5jeSBhbmFseXNpcy4gSXMgdGhlcmUgYW55dGhpbmcgdGhhdCBgSFNSYCByZWxpZXMgb24sIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byB0aGlzIEdSTyBkaXNhYmxlbWVudD8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBmYWN0b3JzIHRvIGNvbnNpZGVyPyBLbm93aW5nIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIGFuZCB3aGF0IHRob3NlIGRlcGVuZGVuY2llcyBhcmUgaXMgY3JpdGljYWwgdG8gYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzY5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6NTIuMTE3NjcxMjkzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9oc3IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJRUMgNjI0MzktMyBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5XFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBIU1JcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXFx1MDAyNiBQUlApXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgSUVDIDYyNDM5IGRlZmluZWQgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3NcXG4gIDEwOlxcdFxcdCAgUmVkdW5kYW5jeSAoSFNSKSBhbmQgUGFyYWxsZWwgUmVkdW5kYW5jeSBQcm90b2NvbCAoUFJQKS5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFcXG4gIDEzOlxcdFxcdCAgREFOSCAoXFxcIkRvdWJseSBhdHRhY2hlZCBub2RlIGltcGxlbWVudGluZyBIU1JcXFwiKSBvciBEQU5QIChcXFwiRG91Ymx5XFxuICAxNDpcXHRcXHQgIGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIFBSUFxcXCIpLiBGb3IgdGhpcyB0byB3b3JrLCB5b3VyIExpbnV4IGJveFxcbiAgMTU6XFx0XFx0ICBuZWVkcyAoYXQgbGVhc3QpIHR3byBwaHlzaWNhbCBFdGhlcm5ldCBpbnRlcmZhY2VzLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIEZvciBEQU5ILCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgaW4gYSByaW5nIG5ldHdvcmsgdG9nZXRoZXJcXG4gIDE4OlxcdFxcdCAgd2l0aCBvdGhlciBIU1IgY2FwYWJsZSBub2Rlcy4gQWxsIEV0aGVybmV0IGZyYW1lcyBzZW50IG92ZXIgdGhlIEhTUlxcbiAgMTk6XFx0XFx0ICBkZXZpY2Ugd2lsbCBiZSBzZW50IGluIGJvdGggZGlyZWN0aW9ucyBvbiB0aGUgcmluZyAob3ZlciBib3RoIHNsYXZlXFxuICAyMDpcXHRcXHQgIHBvcnRzKSwgZ2l2aW5nIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBFYWNoIEhTUiBub2RlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjQwOjUyLjExNzczNDcyM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODA4MDU4Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhTUiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGdvb2QsIG5vIG5ldyBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgSFNSYCBtb2R1bGUgaXRzZWxmLCB0aGF0J3MgYWx3YXlzIGEgcGx1cy4gTm93LCBsb29raW5nIGF0IHRoZSBjaGFuZ2Vz4oCmIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGBuZXRpZl9kaXNhYmxlX2dyb2AgYW5kIGBkZXZfZGlzYWJsZV9ncm9gLiBUaGF0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyBjb3JlIG5ldHdvcmsgZGV2aWNlIEFQSSBtb2RpZmljYXRpb25zLCB3aGljaCBhcmUgYWx3YXlzIGludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIHRoZSBpbnRlbnQgaXMgdG8gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldHdvcmsgZGV2aWNlLCBhbmQgaGVyZSwgdGhleSdyZSB1c2luZyBpdCB0byBzaHV0IGRvd24gR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBTbWFydC4gR1JPIGNhbiBzb21ldGltZXMgY2F1c2UgaXNzdWVzIHdpdGggY29tcGxleCBwcm90b2NvbHMsIHNvIGRpc2FibGluZyBpdCBpbiBzcGVjaWZpYyBjb250ZXh0cyBpcyBhIHJlYXNvbmFibGUgYXBwcm9hY2guXG5cblRoZSBjcnVjaWFsIGJpdCwgdGhvdWdoLCBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBoc3JfZm9yd2FyZF9za2JgLiBUaGV5J3JlIGFkYXB0aW5nIGl0IHRvIGhhbmRsZSBHU08gKEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQpIHBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtLiBUaGlzIHN1Z2dlc3RzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IEhTUiBpcyBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgbGFyZ2UgcGFja2V0cywgYW5kIGRpcmVjdGx5IGltcGFjdHMgdGhlIGNvcmUgcGFja2V0IGZvcndhcmRpbmcgbG9naWMuIFRoYXTigJlzIGEga2V5IGNoYW5nZSB0byBpbnZlc3RpZ2F0ZS4gVGhlbiB3ZSBoYXZlIGNoYW5nZXMgaW4gYGhzcl9kZXZfeG1pdGAgYW5kIGBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZWAgdG8gYWRqdXN0IGxvY2tpbmcsIHdoaWNoIGlzIGEgZGVmaW5pdGUgc2lnbmFsIG9mIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgdGhleSdyZSBhZGRyZXNzaW5nLiBMb2NraW5nIG1vZGlmaWNhdGlvbnMgYWx3YXlzIGRlc2VydmUgc2NydXRpbnkuXG5cbkZ1bmN0aW9uYWxseSwgd2UncmUgbG9va2luZyBhdCBjaGFuZ2VzIGluIHRoZSBIU1IgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBuZXR3b3JrIGRldmljZSBBUEkuIFNpbmNlIEhTUiBpcyBjb21tb25seSBkZXBsb3llZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHRoaW5rIHZldGggZGV2aWNlcyDigJMgdGhlc2UgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIHdpdGggdmlydHVhbCBpbnRlcmZhY2VzLiBUaGF0IG1ha2VzIHRoZW0gcGVyZmVjdCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gZHVyaW5nIHRlc3RpbmcgYXJlIGBoc3JfZm9yd2FyZF9za2JgLCBgZGV2X2Rpc2FibGVfZ3JvYCwgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIFdpdGggdGhlIGBIU1JgIGNvbmZpZyBlbmFibGVkLCBvZiBjb3Vyc2UuXG5cblRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoZSBpc3N1ZSBvZiBHU08gc3VwZXItcGFja2V0cyB3aXRoaW4gdGhlIEhTUiBwcm90b2NvbCBieSBzZWdtZW50aW5nIHRoZW0uIEFkZGl0aW9uYWxseSBpdCdzIGVuc3VyaW5nIHRoYXQgR1JPLCBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGlzbid0IGNhdXNpbmcgcHJvYmxlbXMgYW5kIGlzIGRpc2FibGVkIG9uIHJlbGV2YW50IEhTUiBkZXZpY2VzLCB3aGljaCBpcyBhIHNvdW5kIGRlc2lnbiBjaG9pY2UuIFNpbmNlIHRoaXMgZGVhbHMgd2l0aCBwYWNrZXQgaGFuZGxpbmcsIGl0IHdpbGwgYmUgZXNzZW50aWFsIHRvIHRlc3QgaXQgdG8gZW5zdXJlIGl0IG9wZXJhdGVzIGNvcnJlY3RseSBpbiB2YXJpb3VzIHNjZW5hcmlvcyB0byBlbnN1cmUgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGFyZSBtYWludGFpbmVkLiBUaGlzIHBhdGNoIG5lZWRzIGEgZ29vZCBmdXp6aW5nIHNlc3Npb24sIGFuZCBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgY29uY3VycmVuY3kgYXNwZWN0cyBvZiB0aGUgbG9ja2luZyBhZGp1c3RtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwMjMsIk91dHB1dFRva2VucyI6MTc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDE6MDAuOTI1Nzk1NDQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyMDI5MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHByb3RvY29sIHRvIGhhbmRsZSBHU08gc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byB0aGUgY29yZSBuZXR3b3JrIGRldmljZSBBUEkgdG8gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIGRldmljZSwgYW5kIHVzZXMgdGhpcyB0byBkaXNhYmxlIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcGFja2V0IHByb2Nlc3NpbmcgYW5kIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHByb3RvY29sIHRvIGhhbmRsZSBHU08gc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byB0aGUgY29yZSBuZXR3b3JrIGRldmljZSBBUEkgdG8gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIGRldmljZSwgYW5kIHVzZXMgdGhpcyB0byBkaXNhYmxlIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcGFja2V0IHByb2Nlc3NpbmcgYW5kIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MTowMS4wMDYwMDg0NDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzE3NjQ2Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDE6MDEuMDA2NTg0OTcxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwMzE3MDYzODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGhhbmRsZSBHU08gKEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQpIHN1cGVyLXBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtIGJlZm9yZSBmb3J3YXJkaW5nLCBhbmQgZGlzYWJsZXMgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgb24gZW5zbGF2ZWQgZGV2aWNlcy4gSXQgYWxzbyBhZGp1c3RzIGxvY2tpbmcgYXJvdW5kIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBza2Igc2VnbWVudGF0aW9uIChgX19za2JfZ3NvX3NlZ21lbnRgKSwgYW5kIHJlYWRpbmcgcGFja2V0IGhlYWRlcnMgdXNpbmcgdGhlIHN0YW5kYXJkIGBza2JfaGVhZGVyX3BvaW50ZXJgIGZ1bmN0aW9uLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNGRhMTdlOTY2MWQ5YjNkM2E1NDQ1OGI0MDVlN2ZkZjZhZDE2MmUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNzo0MDowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA5OTgxZDYzN2Y4YjU0Li5lYmEyYzI2YTQ5YmE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTM0MzQsNiArMzQzNCw4IEBAIHZvaWQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIHZvaWQgbmV0aWZfY2xvc2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHVubGluayk7XG4gdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbit2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7XG4gdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA1OTMzYzVkYWIwOWVlLi5mMjBkNWFiMGNmNzI5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTg0MCw2ICsxODQwLDIxIEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdH1cbiB9XG4gXG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcl9kZXY7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuK1xuK1x0ZGV2LVx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XG4rXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XG4rXG4rXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XG4rXHRcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xuK1x0XHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xuK1x0XHRuZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpO1xuK1x0fVxuK31cbitcbiAvKipcbiAgKlx0ZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuICAqXHRAZGV2OiBkZXZpY2VcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmNcbmluZGV4IDQzNzk0N2RkMDhlZDUuLjNjYTI1MTVhZDA0ODYgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXZfYXBpLmNcbisrKyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuQEAgLTI2OSw2ICsyNjksMjcgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xuIFxuKy8qKlxuKyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuKyAqIEBkZXY6IGRldmljZVxuKyAqXG4rICogQmVzdC1lZmZvcnQgZGlzYWJsZSBvZiBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldFxuKyAqIGRldmljZS4gIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZFxuKyAqIHBhY2tldHMgbWF5IGJlIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS5cbisgKlxuKyAqIFRoZSBkaXNhYmxlIGlzIGJlc3QtZWZmb3J0OiBhIGRldmljZSB3aXRoIGEgZml4ZWQtb24gZmVhdHVyZSAoZm9yXG4rICogZXhhbXBsZSBHUk9fSFcgb24gYSB2aXJ0aW8tbmV0IGRldmljZSBuZWdvdGlhdGVkIHdpdGhvdXRcbisgKiBWSVJUSU9fTkVUX0ZfQ1RSTF9HVUVTVF9PRkZMT0FEUykga2VlcHMgaXQgZW5hYmxlZC4gIENhbGxlcnMgdGhhdFxuKyAqIG5lZWQgYSBoYXJkIGd1YXJhbnRlZSBtdXN0IGluc3BlY3QgdGhlIHJlc3VsdGluZyBmZWF0dXJlIHN0YXRlLlxuKyAqL1xuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4rXHRuZXRpZl9kaXNhYmxlX2dybyhkZXYpO1xuK1x0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbit9XG4rRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pO1xuK1xuIC8qKlxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxuICAqIEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjUuLjI0OGNiYjE0MmUyMWUgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuKysrIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbkBAIC0yMzIsOSArMjMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2ItXHUwMDNlZGV2ID0gbWFzdGVyLVx1MDAzZWRldjtcbiBcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbkBAIC0zMzUsNiArMzMzLDcgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHRoc3Jfc3RhZy1cdTAwM2VzZXF1ZW5jZV9uciA9IGh0b25zKGhzci1cdTAwM2VzZXF1ZW5jZV9ucik7XG4gXHRcdGhzci1cdTAwM2VzZXF1ZW5jZV9ucisrO1xuIFx0fVxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFxuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfdHlwZSA9IHR5cGU7XG4gXHQvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqL1xuQEAgLTM1NiwxNCArMzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCk7XG4gXHR9XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4rXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRyZXR1cm47XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuQEAgLTM5MCw2ICszODUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRoc3Jfc3RhZy1cdTAwM2VzZXF1ZW5jZV9uciA9IGh0b25zKGhzci1cdTAwM2VzdXBfc2VxdWVuY2VfbnIpO1xuIFx0aHNyLVx1MDAzZXN1cF9zZXF1ZW5jZV9ucisrO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfdHlwZSA9IFBSUF9UTFZfTElGRV9DSEVDS19ERDtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTtcbiBcbkBAIC0zOTcsMTMgKzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiBcdGhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIG1hc3Rlci1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFxuLVx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuK1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gfVxuIFxuIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb25cbkBAIC02NTksNyArNjUyLDcgQEAgdm9pZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRkZXYtXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xuIFxuIFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfFxuLVx0XHRcdCAgIE5FVElGX0ZfR1NPX01BU0sgfCBORVRJRl9GX0hXX0NTVU0gfFxuK1x0XHRcdCAgIE5FVElGX0ZfSFdfQ1NVTSB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbmluZGV4IDA3NzQ5ODFhNjVjMTYuLmY0MjY5NGNmNDMwOTkgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2VcbiAjaW5jbHVkZSBcImhzcl9tYWluLmhcIlxuICNpbmNsdWRlIFwiaHNyX2ZyYW1lcmVnLmhcIlxuIFxuQEAgLTYyMSw5ICs2MjIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8XG4gXHQgICAgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbiBcdFx0LyogU2VxdWVuY2UgbnIgZm9yIHRoZSBtYXN0ZXIvaW50ZXJsaW5rIG5vZGUgKi9cbi1cdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGZyYW1lLVx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVx1MDAzZXNlcXVlbmNlX25yO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnIrKztcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fVxuIH1cbiBcbkBAIC03MzEsNyArNzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbiB9XG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cbi12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4rc3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4ge1xuIFx0c3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lO1xuIFxuQEAgLTc0Niw4ICs3NDgsOCBAQCB2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4gXHQgKiBTbyBjaGVjayBhbmQgaW5jcmVtZW50IHN0YXRzIGZvciBtYXN0ZXIgcG9ydCBvbmx5IGhlcmUuXG4gXHQgKi9cbiBcdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xuLVx0XHRwb3J0LVx1MDAzZWRldi1cdTAwM2VzdGF0cy50eF9wYWNrZXRzKys7XG4tXHRcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2J5dGVzICs9IHNrYi1cdTAwM2VsZW47XG4rXHRcdERFVl9TVEFUU19JTkMocG9ydC1cdTAwM2VkZXYsIHR4X3BhY2tldHMpO1xuK1x0XHRERVZfU1RBVFNfQUREKHBvcnQtXHUwMDNlZGV2LCB0eF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4gXHR9XG4gXG4gXHRrZnJlZV9za2IoZnJhbWUuc2tiX2hzcik7XG5AQCAtNzU3LDYgKzc1OSwxMDUgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIFxuIG91dF9kcm9wOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRwb3J0LVx1MDAzZWRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRERVZfU1RBVFNfSU5DKHBvcnQtXHUwMDNlZGV2LCB0eF9kcm9wcGVkKTtcbitcdGtmcmVlX3NrYihza2IpO1xuK31cbitcbisvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xuKyAqIGVhY2ggd2lyZSBmcmFtZSBnZXRzIGl0cyBvd24gSFNSL1BSUCB0YWcgYW5kIHNlcXVlbmNlIG51bWJlci5cbisgKi9cbisvKiBFZmZlY3RpdmUgZnJhbWUgcHJvdG9jb2wgb2YgYSAocG9zc2libHkgVkxBTi10YWdnZWQpIHNrYiwgb3IgMCB3aGVuXG4rICogaXQgY2Fubm90IGJlIGRldGVybWluZWQgb3IgdGhlIHRhZ2dpbmcgZXhjZWVkcyB3aGF0IEhTUiBzdXBwb3J0cy5cbisgKiBIU1Igc3VwcG9ydHMgb25lIDgwMi4xUSBDLXRhZyBvbmx5LCBtYXRjaGluZyBmaWxsX2ZyYW1lX2luZm8oKTogYW5cbisgKiBhY2NlbGVyYXRlZCB0YWcgbXVzdCBiZSBhIEMtdGFnIHdpdGggYSBub24tVkxBTiBpbm5lciBwcm90b2NvbDsgYW5cbisgKiBpbi1iYW5kIHRhZyBpcyB1bndyYXBwZWQgZXhhY3RseSBvbmNlIGFuZCBhIHJlc2lkdWFsIFZMQU4gRXRoZXJUeXBlXG4rICogaXMgcmVqZWN0ZWQuIFJlYWQtb25seTsgbm8gc3RhdGUgaXMga2VwdCBiZXlvbmQgdGhlIGltbWVkaWF0ZVxuKyAqIHByb3RvY29sIHZhbHVlLlxuKyAqL1xuK3N0YXRpYyBfX2JlMTYgaHNyX2dzb19lZmZlY3RpdmVfcHJvdG8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgZXRoaGRyIGVoO1xuK1x0c3RydWN0IHZsYW5faGRyIHZoO1xuK1x0Y29uc3Qgc3RydWN0IGV0aGhkciAqZXRoO1xuK1x0Y29uc3Qgc3RydWN0IHZsYW5faGRyICp2aGRyO1xuK1x0X19iZTE2IHByb3RvO1xuK1xuK1x0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcbitcdFx0LyogSFNSIHN1cHBvcnRzIG9uZSA4MDIuMVEgQy10YWcgb25seS4gKi9cbitcdFx0aWYgKHNrYi1cdTAwM2V2bGFuX3Byb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0aWYgKGV0aF90eXBlX3ZsYW4oc2tiLVx1MDAzZXByb3RvY29sKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHNrYi1cdTAwM2Vwcm90b2NvbDtcbitcdH1cbitcbitcdGV0aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIDAsIHNpemVvZihlaCksIFx1MDAyNmVoKTtcbitcdGlmICghZXRoKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHByb3RvID0gZXRoLVx1MDAzZWhfcHJvdG87XG4rXHRpZiAoIWV0aF90eXBlX3ZsYW4ocHJvdG8pKVxuK1x0XHRyZXR1cm4gcHJvdG87XG4rXHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHZoZHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBFVEhfSExFTiwgc2l6ZW9mKHZoKSwgXHUwMDI2dmgpO1xuK1x0aWYgKCF2aGRyKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHByb3RvID0gdmhkci1cdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvO1xuK1x0aWYgKGV0aF90eXBlX3ZsYW4ocHJvdG8pKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBwcm90bztcbit9XG4rXG4rdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuK3tcbitcdHN0cnVjdCBza19idWZmICpzZWdzLCAqbmV4dDtcbitcdF9fYmUxNiBwcm90bztcbitcbitcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcbitcdFx0aHNyX2ZvcndhcmRfc2tiX29uZShza2IsIHBvcnQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKiBDb25mb3JtaW5nIHBsYWluLXByb3RvY29sIEdTTyBzdXBlci1wYWNrZXRzIGNhcnJ5IHRyYWlsZXItZnJlZVxuK1x0ICogc2VuZGVyIHBheWxvYWQgYW5kIGFyZSBzZWdtZW50ZWQgaGVyZTogZWFjaCBzZWdtZW50IGlzIGRlbGl2ZXJlZFxuK1x0ICogb3IgZm9yd2FyZGVkIGFzIGl0cyBvd24gd2lyZSBmcmFtZSwgb24gYW55IGluZ3Jlc3Mgcm9sZS5cbitcdCAqXG4rXHQgKiBUaGUgZ2F0ZSBpcyBjb250ZW50LWJhc2VkLCBub3QgcG9ydC1iYXNlZC4gQW4gYWdncmVnYXRlIHdob3NlXG4rXHQgKiBlZmZlY3RpdmUgcHJvdG9jb2wgaXMgRVRIX1BfSFNSIG9yIEVUSF9QX1BSUCBjYW5ub3QgYmUgc2FmZWx5XG4rXHQgKiBzZWdtZW50ZWQgYW5kIGlzIGRyb3BwZWQsIGFzIGlzIGFueSBza2Igd2hvc2UgaGVhZGVyIGNhbm5vdCBiZVxuK1x0ICogcmVhZCBvciB3aG9zZSB0YWdnaW5nIGV4Y2VlZHMgdGhlIHNpbmdsZSA4MDIuMVEgQy10YWcgSFNSXG4rXHQgKiBzdXBwb3J0cy4gV2l0aCBORVRJRl9GX0hXX0hTUl9UQUdfUk0gdGhlIGxvd2VyIGhhcyBhbHJlYWR5XG4rXHQgKiBzdHJpcHBlZCB0aGUgdGFnLCBzbyBzdWNoIGFnZ3JlZ2F0ZXMgYXJyaXZlIHBsYWluIGFuZCBhcmVcbitcdCAqIHNlZ21lbnRlZC5cbitcdCAqL1xuK1x0cHJvdG8gPSBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90byhza2IpO1xuK1x0aWYgKCFwcm90bylcbitcdFx0Z290byBkcm9wX2dzbzsgLyogY2xhc3NpZmljYXRpb24gZmFpbHVyZSwgZmFpbC1zYWZlICovXG4rXHRpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSB8fCBwcm90byA9PSBodG9ucyhFVEhfUF9QUlApKVxuK1x0XHRnb3RvIGRyb3BfZ3NvO1xuK1xuK1x0LyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWVcbitcdCAqIG9ubHkgZm9yIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYWZmaWMgb24gdGhlIG1hc3RlcjsgaW5ncmVzcyBmcm9tXG4rXHQgKiB0aGUgaW50ZXJsaW5rIGZvbGxvd3MgUlggY2hlY2tzdW0gc2VtYW50aWNzLlxuK1x0ICovXG4rXHRzZWdzID0gX19za2JfZ3NvX3NlZ21lbnQoc2tiLCAwLCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUik7XG4rXHRpZiAoSVNfRVJSKHNlZ3MpIHx8IHVubGlrZWx5KCFzZWdzKSlcbitcdFx0Z290byBkcm9wX2dzbztcbitcbitcdGNvbnN1bWVfc2tiKHNrYik7XG4rXHR3aGlsZSAoc2Vncykge1xuK1x0XHRuZXh0ID0gc2Vncy1cdTAwM2VuZXh0O1xuK1x0XHRzZWdzLVx1MDAzZW5leHQgPSBOVUxMO1xuK1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpO1xuK1x0XHRzZWdzID0gbmV4dDtcbitcdH1cbitcdHJldHVybjtcbitcbitkcm9wX2dzbzpcbitcdERFVl9TVEFUU19JTkMocG9ydC1cdTAwM2VkZXYsIHR4X2Ryb3BwZWQpO1xuIFx0a2ZyZWVfc2tiKHNrYik7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX3NsYXZlLmMgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5pbmRleCAwMWM3M2I0YjUwZGRkLi5hYTIxNTRiMTljMGI5IDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuY1xuKysrIGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xuQEAgLTczLDE2ICs3Myw3IEBAIHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0fVxuIFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbiBcbi1cdC8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhXG4tXHQgKiBzZXF1ZW5jZSBudW1iZXIgYW5kIHJlcXVpcmUgc3luY2hyb25pc2F0aW9uIHZzIG90aGVyIHNlbmRlci5cbi1cdCAqL1xuLVx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHR9IGVsc2Uge1xuLVx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdH1cbitcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuIFxuIGZpbmlzaF9jb25zdW1lOlxuIFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG5AQCAtMTcxLDYgKzE2MiwxMSBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRnb3RvIGZhaWxfcnhfaGFuZGxlcjtcbiBcdGRldl9kaXNhYmxlX2xybyhkZXYpO1xuIFxuK1x0LyogR1JPIGRpc2FibGluZyBpcyBiZXN0LWVmZm9ydDogZGV2aWNlcyB3aXRoIGZpeGVkLW9uXG4rXHQgKiBHUk8vR1JPX0hXIGNhbm5vdCBiZSBmb3JjZWQgb2ZmLlxuK1x0ICovXG4rXHRkZXZfZGlzYWJsZV9ncm8oZGV2KTtcbitcbiBcdHJldHVybiAwO1xuIFxuIGZhaWxfcnhfaGFuZGxlcjpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuaW5kZXggMzFmYjkzMjZjZjUzMy4uMGQxMDU0NzZlN2M1MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbkBAIC0zLDYgKzMsNyBAQFxuIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFxuIFRFU1RfUFJPR1MgOj0gXFxcbitcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmViY2JkOWZjNDFlYzRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxuQEAgLTAsMCArMSw2MzEgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBUZXN0IEhTUiBoYW5kbGluZyBvZiBHUk8vR1NPIHN1cGVyLXBhY2tldHM6XG4rI1xuKyMgIDEuIEVuc2xhdmluZyBhIGRldmljZSB0byBhbiBIU1IgbWFzdGVyIGRpc2FibGVzIEdSTyBvbiBpdFxuKyMgICAgIChkZXZfZGlzYWJsZV9ncm8oKSkuXG4rIyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXG4rIyAgMy4gQSBUQ1Agc3RyZWFtIGZyb20gYSBUU08tZW5hYmxlZCBTQU4gKHdoaWNoIHRoZXJlZm9yZSBlbWl0cyBHU09cbisjICAgICBzdXBlci1wYWNrZXRzKSBpcyB1bmZvbGRlZCBhdCB0aGUgSFNSIGZvcndhcmQgZW50cnkuIEV2aWRlbmNlOlxuKyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xuKyMgICAgIHRoZSBTQU4gYW5kIHBlci1mcmFtZS1zaXplZCB0cmFmZmljIGxlYXZpbmcgdGhlIERVVCdzIExBTiBwb3J0cy5cbisjXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XG4rI1xuKyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xuKyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXxcbisjICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8XG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuKyNcbisjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCdzIGZvcndhcmQgcGF0aFxuKyMgKGludGVybGluayBSWCAtXHUwMDNlIExBTiBBL0IgVFgpLCBzbyBldmVyeSBTQU4gZnJhbWUgaXMgdGFnZ2VkIGFuZFxuKyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXG4rXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxuK1xuK3Nhbl9pcD1cIjEwMC42NC4wLjFcIlxuK3BlZXJfaXA9XCIxMDAuNjQuMC4zXCJcbitcbisjIEFnZ3JlZ2F0ZSBjb3VudGVyIHRocmVzaG9sZHMgZm9yIHRoZSBzdHJlYW0gdGVzdCAoYnl0ZXMvcGFja2V0cyk6XG4rIyBTQU5fQVZHX01JTiBwcm92ZXMgR1NPIHN1cGVyLXBhY2tldHMgbGVmdCB0aGUgU0FOOyBMQU5fQVZHX01BWCBpcyBhXG4rIyBndWFyZCB3aXRoIG1hcmdpbiwgbm90IHRoZSBwcm90b2NvbCBtYXhpbXVtIChzZWUgZG9fdHNvX3N0cmVhbV90ZXN0KS5cbitTQU5fQVZHX01JTj0yMDQ4XG4rTEFOX0FWR19NQVg9MTUxNFxuK1xuK2lwZXJmX3BpZD1cIlwiXG4rc2VydmVyX3dyYXBwZXI9XCJcIlxuK2FjdGl2ZV9zcnZfbnM9XCJcIlxuK3dvcmtkaXI9XCJcIlxuK3BpZGZpbGU9XCJcIlxuK25zX2R1dD1cIlwiXG4rbnNfc2FuPVwiXCJcbituc19wZWVyPVwiXCJcbituc19scz1cIlwiXG4rcmNmaWxlPVwiXCJcbitcbisjIERlbGV0ZSB0aGUgcGVyLXNlcnZlciBwcml2YXRlIHdvcmsgZGlyZWN0b3J5IGFuZCByZXNldCBpdHNcbisjIHZhcmlhYmxlcy4gQ2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCByZWFwIGFuZCBmcm9tIHRoZSBFWElUXG4rIyB0cmFwLCB3aGljaCBvd25zIGFsbCBmYWlsdXJlIHBhdGhzLlxuK2NsZWFudXBfd29ya2RpcigpXG4re1xuK1x0IyByZW1vdmUgb25seSB0aGUga25vd24gbm9uLWVtcHR5IHByaXZhdGUgZGlyZWN0b3J5XG4rXHRpZiBbIC1uIFwiJHt3b3JrZGlyfVwiIF0gXHUwMDI2XHUwMDI2IFsgLWQgXCIke3dvcmtkaXJ9XCIgXTsgdGhlblxuK1x0XHRybSAtcmYgXCIke3dvcmtkaXJ9XCJcbitcdGZpXG4rXHR3b3JrZGlyPVwiXCJcbitcdHBpZGZpbGU9XCJcIlxuK1x0cmNmaWxlPVwiXCJcbit9XG4rXG4rY2xlYW51cCgpXG4re1xuK1x0IyBTZXJ2ZXIgY2xlYW51cCB0YXJnZXRzIG9ubHkgdGhlIG5hbWVzcGFjZSBvZiB0aGUgY3VycmVudGx5XG4rXHQjIGFjdGl2ZSBzZXJ2ZXIgKHJlY29yZGVkIGJ5IHN0YXJ0X2lwZXJmX3NlcnZlcik7IGFmdGVyIGFcbitcdCMgc3VjY2Vzc2Z1bCByZWFwIG5vdGhpbmcgaXMgYWN0aXZlLlxuK1x0aWYgWyAtbiBcIiR7YWN0aXZlX3Nydl9uc31cIiBdOyB0aGVuXG4rXHRcdCMgZXhhY3QtUElEIGtpbGwgb25seSBhZnRlciBSRS12YWxpZGF0aW5nIGlkZW50aXR5IChndWFyZHNcbitcdFx0IyBhZ2FpbnN0IFBJRCByZXVzZSBiZXR3ZWVuIHB1YmxpY2F0aW9uIGFuZCBjbGVhbnVwKVxuK1x0XHRpZiBbIC1uIFwiJHtpcGVyZl9waWR9XCIgXSBcdTAwMjZcdTAwMjYgdmFsaWRfc2VydmVyX3BpZCBcIiR7YWN0aXZlX3Nydl9uc31cIiBcIiR7aXBlcmZfcGlkfVwiOyB0aGVuXG4rXHRcdFx0a2lsbCBcIiR7aXBlcmZfcGlkfVwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0ZmlcbitcdFx0aXBlcmZfcGlkPVwiXCJcbitcdFx0aWYgWyAtbiBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgXTsgdGhlblxuK1x0XHRcdCMgdGhlIHdyYXBwZXIgd2FpdHMgb24gdGhlIHNlcnZlcjsgcmVhcCBpdCB3aXRoIGEgNXNcbitcdFx0XHQjIGJvdW5kIHNvIGEgbGl2ZS1idXQtdW5wdWJsaXNoZWQgc2VydmVyIGNhbiBuZXZlclxuK1x0XHRcdCMgaGFuZyBjbGVhbnVwXG4rXHRcdFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFx0XHRraWxsIC0wIFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIiAyXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXG4rXHRcdFx0XHRzbGVlcCAwLjFcbitcdFx0XHRkb25lXG4rXHRcdFx0a2lsbCBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRcdHdhaXQgXCIke3NlcnZlcl93cmFwcGVyfVwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0XHRzZXJ2ZXJfd3JhcHBlcj1cIlwiXG4rXHRcdGZpXG4rXHRcdCMgbGFzdCByZXNvcnQsIG5hbWVzcGFjZS1zY29wZWQgb25seTogVEVSTSB0aGUgaXBlcmYzXG4rXHRcdCMgcHJvY2Vzc2VzIHRoYXQgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgYWN0aXZlIHNlcnZlciBuZXRucyxcbitcdFx0IyBwb2xsIGZvciBib3VuZGVkIGV4aXQsIHRoZW4gU0lHS0lMTCBhbnkgc3Vydml2b3IgYmVmb3JlXG4rXHRcdCMgdG91Y2hpbmcgdGhlIG5hbWVzcGFjZSBuYW1lLiBBIGJsaW5kIHBraWxsIHdvdWxkIHNjYW5cbitcdFx0IyB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuXG4rXHRcdGxvY2FsIF9wIF9zdGlsbFxuK1x0XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwiJHthY3RpdmVfc3J2X25zfVwiIDJcdTAwM2UvZGV2L251bGwpOyBkb1xuK1x0XHRcdGlmIGlzX2lwZXJmM19waWQgXCIkX3BcIjsgdGhlblxuK1x0XHRcdFx0a2lsbCBcIiRfcFwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0XHRmaVxuK1x0XHRkb25lXG4rXHRcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRcdF9zdGlsbD0wXG4rXHRcdFx0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcIiR7YWN0aXZlX3Nydl9uc31cIiAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbitcdFx0XHRcdGlmIGlzX2lwZXJmM19waWQgXCIkX3BcIjsgdGhlblxuK1x0XHRcdFx0XHRfc3RpbGw9MVxuK1x0XHRcdFx0XHRicmVha1xuK1x0XHRcdFx0ZmlcbitcdFx0XHRkb25lXG4rXHRcdFx0WyBcIiRfc3RpbGxcIiAtZXEgMCBdIFx1MDAyNlx1MDAyNiBicmVha1xuK1x0XHRcdHNsZWVwIDAuMVxuK1x0XHRkb25lXG4rXHRcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCIke2FjdGl2ZV9zcnZfbnN9XCIgMlx1MDAzZS9kZXYvbnVsbCk7IGRvXG4rXHRcdFx0aWYgaXNfaXBlcmYzX3BpZCBcIiRfcFwiOyB0aGVuXG4rXHRcdFx0XHRraWxsIC05IFwiJF9wXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRcdGZpXG4rXHRcdGRvbmVcbitcdGZpXG4rXHRhY3RpdmVfc3J2X25zPVwiXCJcbitcdGNsZWFudXBfd29ya2RpclxuK1x0Y2xlYW51cF9hbGxfbnNcbit9XG4rXG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbitjaGVja190b29sKClcbit7XG4rXHRpZiAhIGNvbW1hbmQgLXYgXCIkMVwiIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbitcdFx0ZWNobyBcIlNLSVA6IENvdWxkIG5vdCBydW4gdGVzdCB3aXRob3V0ICQxXCJcbitcdFx0ZXhpdCAka3NmdF9za2lwXG4rXHRmaVxuK31cbitcbituc3goKVxuK3tcbitcdGlwIG5ldG5zIGV4ZWMgXCIkMVwiIGJhc2ggLWMgXCIkMlwiXG4rfVxuK1xuK2lzX2lwZXJmM19waWQoKVxuK3tcbitcdFsgXCIkKGNhdCAvcHJvYy9cIiQxXCIvY29tbSAyXHUwMDNlL2Rldi9udWxsKVwiID0gXCJpcGVyZjNcIiBdXG4rfVxuK1xuKyMgQm91bmRlZCByZWFwIG9mIHRoZSBvbmUtc2hvdCBzZXJ2ZXI6IHdhaXQgYXQgbW9zdCA1cyBmb3IgaXQgdG9cbisjIGV4aXQsIHRoZW4gcmVhcCB0aGUgd3JhcHBlciBhbmQgUkVRVUlSRSB0aGUgcmNmaWxlIHdpdGggaXRzIHJlYWxcbisjIHN0YXR1cy4gQSBzdHVjayBzZXJ2ZXIgY2FuIG5ldmVyIGhhbmcgdGhlIHNjcmlwdC5cbityZWFwX2lwZXJmX3NlcnZlcigpXG4re1xuK1x0bG9jYWwgc2VydmVyX3JjXG4rXG4rXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbitcdFx0a2lsbCAtMCBcIiR7aXBlcmZfcGlkfVwiIDJcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcbitcdFx0c2xlZXAgMC4xXG4rXHRkb25lXG4rXHRpZiBraWxsIC0wIFwiJHtpcGVyZl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IGV4aXQgd2l0aGluIDVzXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHR3YWl0IFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIlxuK1x0c2VydmVyX3dyYXBwZXI9XCJcIlxuK1x0aWYgWyAhIC1zIFwiJHtyY2ZpbGV9XCIgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBzdGF0dXMgZmlsZSBtaXNzaW5nICgke3JjZmlsZX0pXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRzZXJ2ZXJfcmM9JChjYXQgXCIke3JjZmlsZX1cIilcbitcdGlmICEgW1sgXCIkc2VydmVyX3JjXCIgPX4gXlswLTldKyQgXV0gfHwgWyBcIiRzZXJ2ZXJfcmNcIiAtbmUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBpcGVyZjMgc2VydmVyIGV4aXRlZCB3aXRoIHJjPScke3NlcnZlcl9yY30nXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRpcGVyZl9waWQ9XCJcIlxuK1x0Y2xlYW51cF93b3JrZGlyXG4rXHRhY3RpdmVfc3J2X25zPVwiXCJcbitcdHJldHVybiAwXG4rfVxuK1xuKyMgRGVjaW1hbC1jb3VudGVyIHZhbGlkYXRpb24gZm9yIHRoZSBzbmFwc2hvdCBibG9ja3M6IGV2ZXJ5IHZhbHVlIG11c3RcbisjIGJlIGEgcGxhaW4gZGVjaW1hbCBudW1iZXIuIEEgcGFyc2UgZmFpbHVyZSBpbiByZWFkX3R4X2NvdW50ZXJzIHlpZWxkc1xuKyMgZW1wdHkvZ2FyYmxlZCBmaWVsZHMsIHdoaWNoIHRoaXMgY2hlY2sgdHVybnMgaW50byBhbiBpbW1lZGlhdGUgRkFJTC5cbit2YWxpZF9kZWNpbWFscygpXG4re1xuK1x0bG9jYWwgdlxuK1xuK1x0Zm9yIHYgaW4gXCIkQFwiOyBkb1xuK1x0XHRbWyBcIiR2XCIgPX4gXlswLTldKyQgXV0gfHwgcmV0dXJuIDFcbitcdGRvbmVcbitcdHJldHVybiAwXG4rfVxuK1xuK3NldHVwX3RvcG8oKVxuK3tcbitcdHNldHVwX25zIG5zX2R1dCBuc19zYW4gbnNfcGVlciB8fCBleGl0ICQ/XG4rXG4rXHRpcCBsaW5rIGFkZCBkX2EgbmV0bnMgXCIkbnNfZHV0XCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2EgbmV0bnMgXCIkbnNfcGVlclwiXG4rXHRpcCBsaW5rIGFkZCBkX2IgbmV0bnMgXCIkbnNfZHV0XCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2IgbmV0bnMgXCIkbnNfcGVlclwiXG4rXHRpcCBsaW5rIGFkZCBkX2lsIG5ldG5zIFwiJG5zX2R1dFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgczAgbmV0bnMgXCIkbnNfc2FuXCJcbitcbitcdCMgSFNSIHRhZ3MgYWRkIDYgYnl0ZXMgcGVyIGZyYW1lOyBnaXZlIHRoZSBMQU4gbGVncyBoZWFkcm9vbS5cbitcdGZvciBpZmFjZSBpbiBkX2EgZF9iOyBkb1xuK1x0XHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFxcXG4rXHRcdFx0aXAgbGluayBzZXQgJGlmYWNlIHVwXCJcbitcdGRvbmVcbitcdGZvciBpZmFjZSBpbiBwX2EgcF9iOyBkb1xuK1x0XHRuc3ggXCIkbnNfcGVlclwiIFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcXFxuK1x0XHRcdGlwIGxpbmsgc2V0ICRpZmFjZSB1cFwiXG4rXHRkb25lXG4rXG4rXHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIHNldCBkX2lsIHVwXCJcbitcdG5zeCBcIiRuc19zYW5cIiBcImlwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMFwiXG4rXG4rXHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIGFkZCBoc3IwIHR5cGUgaHNyIFxcXG4rXHRcdHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcXFxuK1x0XHRpcCBsaW5rIHNldCBoc3IwIHVwXCJcbitcdG5zeCBcIiRuc19wZWVyXCIgXCJpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFxcXG4rXHRcdHNsYXZlMSBwX2Egc2xhdmUyIHBfYiBwcm90byAwOyBcXFxuK1x0XHRpcCBsaW5rIHNldCBoc3IxIHVwOyBpcCBhZGRyIGFkZCAkcGVlcl9pcC8yNCBkZXYgaHNyMVwiXG4rXG4rXHQjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXIncyBzdXBlcnZpc2lvbiBmcmFtZXMuXG4rXHRzbGVlcCAyXG4rfVxuK1xuK2NoZWNrX2ZlYXR1cmUoKVxuK3tcbitcdGxvY2FsIG5zPVwiJDFcIlxuK1x0bG9jYWwgaWZhY2U9XCIkMlwiXG4rXHRsb2NhbCBmZWF0dXJlPVwiJDNcIlxuK1x0bG9jYWwgd2FudD1cIiQ0XCJcbitcbitcdGlmIG5zeCBcIiRuc1wiIFwiZXRodG9vbCAtayAkaWZhY2VcIiB8IGdyZXAgLXEgXCJeJGZlYXR1cmU6ICR3YW50XCI7IHRoZW5cbitcdFx0ZWNobyBcIklORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgJHdhbnQgWyBPSyBdXCJcbitcdGVsc2VcbitcdFx0ZWNobyBcIkZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgbm90ICR3YW50XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdGZpXG4rfVxuK1xuKyMgT2ZmLW9yLWFic2VudCB2YXJpYW50OiBmYWlscyBvbmx5IHdoZW4gdGhlIGZlYXR1cmUgaXMgcHJlc2VudCBBTkQgb24sXG4rIyBzbyBkZXZpY2VzIHRoYXQgc2ltcGx5IGRvIG5vdCBsaXN0IHRoZSBmZWF0dXJlIGRvIG5vdCBmYWlsIGl0LlxuK2NoZWNrX2ZlYXR1cmVfbm90X29uKClcbit7XG4rXHRsb2NhbCBucz1cIiQxXCJcbitcdGxvY2FsIGlmYWNlPVwiJDJcIlxuK1x0bG9jYWwgZmVhdHVyZT1cIiQzXCJcbitcbitcdGlmIG5zeCBcIiRuc1wiIFwiZXRodG9vbCAtayAkaWZhY2VcIiB8IGdyZXAgLXEgXCJeJGZlYXR1cmU6IG9uXCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgb25cIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0ZWxzZVxuK1x0XHRlY2hvIFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdXCJcbitcdGZpXG4rfVxuK1xuK2RvX2dyb19mZWF0dXJlX2NoZWNrcygpXG4re1xuK1x0ZWNobyBcIklORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgR1JPLlwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuK1x0c3RvcF9pZl9lcnJvciBcIkdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cIlxuK1xuK1x0ZWNobyBcIklORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgSFctR1JPLlwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYSByeC1ncm8taHcgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYiByeC1ncm8taHcgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfaWwgcngtZ3JvLWh3IG9mZlxuK1x0c3RvcF9pZl9lcnJvciBcIkhXLUdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cIlxuK1xuK1x0ZWNobyBcIklORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgaHNyMCBnZW5lcmljLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBoc3IwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwiJG5zX2R1dFwiIGhzcjAgdHgtdWRwLXNlZ21lbnRhdGlvblxuK1x0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXCIkbnNfZHV0XCIgaHNyMCB0eC1nc28tbGlzdFxuK1x0c3RvcF9pZl9lcnJvciBcIkhTUiBtYXN0ZXIgc3RpbGwgYWR2ZXJ0aXNlcyBHU08tZmFtaWx5IGZlYXR1cmVzLlwiXG4rfVxuK1xuK2FsbG9jX3dvcmtkaXIoKVxuK3tcbitcdCMgQWxsb2NhdGVkIG9ubHkgaGVyZSwgbG9uZyBhZnRlciB0aGUgaW5pdGlhbCB0b3BvbG9neSBjbGVhbnVwLCBzb1xuK1x0IyBjbGVhbnVwKCkgYXQgc2V0dXBfdG9wbygpIHRpbWUgY2FuIG5ldmVyIHJlbW92ZSBpdC4gbWt0ZW1wIGZhaWx1cmVcbitcdCMgaXMgYSBoYXJkIHRlc3QgZmFpbHVyZS5cbitcdHdvcmtkaXI9JChta3RlbXAgLWQgL3RtcC9oc3JfZ3JvX3Rlc3QuWFhYWFhYKSB8fCB7XG4rXHRcdGVjaG8gXCJGQUlMOiBta3RlbXAgLWQgZmFpbGVkXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCAxXG4rXHR9XG4rXHRjaG1vZCA3MDAgXCIke3dvcmtkaXJ9XCJcbitcdHBpZGZpbGU9XCIke3dvcmtkaXJ9L2lwZXJmLnBpZFwiXG4rXHRyY2ZpbGU9XCIke3dvcmtkaXJ9L2lwZXJmLnJjXCJcbit9XG4rXG4rIyBOdW1lcmljLCBhbGl2ZSwgY29tbSA9PSBpcGVyZjMsIGFuZCByZWFsbHkgb3duZWQgYnkgdGhlIGdpdmVuIG5ldG5zLlxuK3ZhbGlkX3NlcnZlcl9waWQoKVxuK3tcbitcdGxvY2FsIHBucz1cIiQxXCIgcD1cIiQyXCJcbitcbitcdFtbIFwiJHBcIiA9fiBeWzAtOV0rJCBdXSB8fCByZXR1cm4gMVxuK1x0a2lsbCAtMCBcIiRwXCIgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gMVxuK1x0WyBcIiQoY2F0IC9wcm9jL1wiJHBcIi9jb21tIDJcdTAwM2UvZGV2L251bGwpXCIgPSBcImlwZXJmM1wiIF0gfHwgcmV0dXJuIDFcbitcdGlwIG5ldG5zIHBpZHMgXCIkcG5zXCIgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXF4IFwiJHBcIlxuK31cbitcbitzdGFydF9pcGVyZl9zZXJ2ZXIoKVxuK3tcbitcdGxvY2FsIHNydl9ucz1cIiQxXCJcbitcdGxvY2FsIHNydl9pcD1cIiR7MjotfVwiXG4rXHRsb2NhbCBjYW5kaWRhdGVfcGlkXG4rXG4rXHQjIE9uZS1zaG90IHNlcnZlciwgbm8gLUQ6IHRoZSB3cmFwcGVyIHJlY29yZHMgaXRzIGV4YWN0IFBJRCBhbmQgaXRzXG4rXHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxuK1x0YWxsb2Nfd29ya2RpclxuK1x0IyByZWNvcmQgdGhlIHNlcnZlciBuYW1lc3BhY2UgZm9yIGNsZWFudXAoKSBiZWZvcmVcbitcdCMgYW55dGhpbmcgY2FuIGZhaWwgd2l0aCB0aGUgc2VydmVyIHJ1bm5pbmdcbitcdGFjdGl2ZV9zcnZfbnM9XCIkc3J2X25zXCJcbitcdCggbnN4IFwiJHNydl9uc1wiIFwiaXBlcmYzIC1zIC0xICR7c3J2X2lwOistQiAkc3J2X2lwfSBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNiBcXFxuK1x0XHRlY2hvIFxcJCEgXHUwMDNlICR7cGlkZmlsZX07IFxcXG4rXHRcdHdhaXQgXFwkITsgXFxcbitcdFx0ZWNobyBcXCQ/IFx1MDAzZSAke3JjZmlsZX1cIiApIFx1MDAyNlxuK1x0c2VydmVyX3dyYXBwZXI9JCFcbitcdCMgdGhlIHdyYXBwZXIgd3JpdGVzIHRoZSBwaWRmaWxlIGFzeW5jaHJvbm91c2x5OyB3YWl0IGZvciBpdCB0b1xuK1x0IyBhcHBlYXIgaW5zdGVhZCBvZiByYWNpbmcgdGhlIHJlYWRcbitcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRbIC1zIFwiJHtwaWRmaWxlfVwiIF0gXHUwMDI2XHUwMDI2IGJyZWFrXG4rXHRcdHNsZWVwIDAuMVxuK1x0ZG9uZVxuK1x0aWYgWyAhIC1zIFwiJHtwaWRmaWxlfVwiIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZGlkIG5vdCBwdWJsaXNoIGEgcGlkXCIgXFxcbitcdFx0XHRcIihubyBwaWRmaWxlKVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0Y2FuZGlkYXRlX3BpZD0kKFx1MDAzY1wiJHtwaWRmaWxlfVwiKVxuK1x0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFwiJHNydl9uc1wiIFwiJHtjYW5kaWRhdGVfcGlkfVwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBpcGVyZjMgc2VydmVyIHBpZCAnJHtjYW5kaWRhdGVfcGlkfSdcIiBcXFxuK1x0XHRcdFwiZmFpbGVkIHZhbGlkYXRpb25cIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdCMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvblxuK1x0aXBlcmZfcGlkPVwiJHtjYW5kaWRhdGVfcGlkfVwiXG4rXHRzbGVlcCAxXG4rXHRyZXR1cm4gMFxuK31cbitcbisjIFByaW50IFwiXHUwMDNjYnl0ZXNcdTAwM2UgXHUwMDNjcGFja2V0c1x1MDAzZVwiIGZvciBleGFjdGx5IG9uZSBUWCByZWNvcmQgb2YgbnMvZGV2OyBhbnl0aGluZ1xuKyMgZWxzZSAobWlzc2luZywgZHVwbGljYXRlZCwgbm9uLW51bWVyaWMpIGlzIGEgaGFyZCBGQUlMLlxuK3JlYWRfdHhfY291bnRlcnMoKVxuK3tcbitcdGxvY2FsIG5zPVwiJDFcIiBkZXY9XCIkMlwiXG4rXHRsb2NhbCBvdXQgY250XG4rXG4rXHRvdXQ9JChuc3ggXCIkbnNcIiBcImlwIC1zIGxpbmsgc2hvdyAkZGV2XCIgfCBcXFxuK1x0XHRhd2sgJy9eICtUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0nKVxuK1x0Y250PSQoZWNobyBcIiRvdXRcIiB8IGdyZXAgLWMgJ15bMC05XSogWzAtOV0qJCcpXG4rXHRpZiBbIFwiJGNudFwiIC1uZSAxIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGNhbm5vdCBwYXJzZSBUWCBjb3VudGVycyBvZiAkbnMvJGRldlwiIFxcXG4rXHRcdFx0XCIocmVjb3Jkcz0kY250KVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0ZWNobyBcIiRvdXRcIlxuK1x0cmV0dXJuIDBcbit9XG4rXG4rIyBQcmludCBcIlx1MDAzY2J5dGVzXHUwMDNlIFx1MDAzY3BhY2tldHNcdTAwM2VcIiBmb3IgZXhhY3RseSBvbmUgUlggcmVjb3JkIG9mIG5zL2RldjsgdGhlXG4rIyBzYW1lIHNpbmdsZS1yZWNvcmQgZGlzY2lwbGluZSBhcyByZWFkX3R4X2NvdW50ZXJzLlxuK3JlYWRfcnhfY291bnRlcnMoKVxuK3tcbitcdGxvY2FsIG5zPVwiJDFcIiBkZXY9XCIkMlwiXG4rXHRsb2NhbCBvdXQgY250XG4rXG4rXHRvdXQ9JChuc3ggXCIkbnNcIiBcImlwIC1zIGxpbmsgc2hvdyAkZGV2XCIgfCBcXFxuK1x0XHRhd2sgJy9eICtSWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0nKVxuK1x0Y250PSQoZWNobyBcIiRvdXRcIiB8IGdyZXAgLWMgJ15bMC05XSogWzAtOV0qJCcpXG4rXHRpZiBbIFwiJGNudFwiIC1uZSAxIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGNhbm5vdCBwYXJzZSBSWCBjb3VudGVycyBvZiAkbnMvJGRldlwiIFxcXG4rXHRcdFx0XCIocmVjb3Jkcz0kY250KVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0ZWNobyBcIiRvdXRcIlxuK1x0cmV0dXJuIDBcbit9XG4rXG4rZXZhbF9jb3VudGVyX2RlbHRhKClcbit7XG4rXHRsb2NhbCBuYW1lPVwiJDFcIiBiMD1cIiQyXCIgcDA9XCIkM1wiIGIxPVwiJDRcIiBwMT1cIiQ1XCIgb3A9XCIkNlwiIGxpbWl0PVwiJDdcIlxuK1x0bG9jYWwgYmQgcGRcbitcbitcdGlmICEgW1sgXCIkYjBcIiA9fiBeWzAtOV0rJCBcdTAwMjZcdTAwMjYgXCIkYjFcIiA9fiBeWzAtOV0rJCBcdTAwMjZcdTAwMjYgXFxcbitcdFx0XCIkcDBcIiA9fiBeWzAtOV0rJCBcdTAwMjZcdTAwMjYgXCIkcDFcIiA9fiBeWzAtOV0rJCBdXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWVcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdGJkPSQoKGIxIC0gYjApKVxuK1x0cGQ9JCgocDEgLSBwMCkpXG4rXHRpZiBbIFwiJGJkXCIgLWx0IDAgXSB8fCBbIFwiJHBkXCIgLWxlIDAgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogY291bnRlciBkZWx0YSBpbnZhbGlkIGZvciAkbmFtZVwiIFxcXG4rXHRcdFx0XCIoYnl0ZXM9JGJkIHBrdHM9JHBkKVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0aWYgWyBcIiRvcFwiID0gXCJndFwiIF07IHRoZW5cbitcdFx0aWYgWyBcIiRiZFwiIC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXHUwMDNjPSAkbGltaXRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRcdHJldD0xXG4rXHRcdFx0cmV0dXJuIDFcbitcdFx0ZmlcbitcdGVsc2VcbitcdFx0aWYgWyBcIiRiZFwiIC1ndCAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXHUwMDNlICRsaW1pdFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdFx0cmV0PTFcbitcdFx0XHRyZXR1cm4gMVxuK1x0XHRmaVxuK1x0ZmlcbitcdGVjaG8gXCJJTkZPOiAkbmFtZSBjb3VudGVyIGRlbHRhIGJ5dGVzPSRiZCBwYWNrZXRzPSRwZFwiIFxcXG4rXHRcdFwiKG9wICRvcCBsaW1pdCAkbGltaXQpIFsgT0sgXVwiXG4rXHRyZXR1cm4gMFxuK31cbitcbisjIExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbjogYSBwbGFpbiBTQU4gYWdncmVnYXRlIGVudGVyaW5nIGEgUFJQXG4rIyBMQU4gc2xhdmUgbXVzdCBiZSBzZWdtZW50ZWQgYXQgdGhlIGZvcndhcmQgZW50cnksIG5vdCBkcm9wcGVkLiBQUlBcbisjIGRyb3BzIHNsYXZlLXRvLXNsYXZlIGZvcndhcmRpbmcgYnkgZGVzaWduIChwcnBfZHJvcF9mcmFtZSksIHNvIHRoZVxuKyMgY29uc3VtZXIgb2YgTEFOLXNsYXZlIFNBTiB0cmFmZmljIGlzIGxvY2FsIGRlbGl2ZXJ5IHRvIHRoZSBtYXN0ZXIuXG4rIyBUd28gaW5kZXBlbmRlbnQgb3JhY2xlczogdGhlIFNBTi1zaWRlIHByb29mIHRoYXQgYWdncmVnYXRlcyByZWFsbHlcbisjIGFycml2ZWQgYXQgdGhlIERVVCwgYW5kIHRoZSB2b2x1bWUgKyBwZXItZnJhbWUgc2hhcGUgb2YgdGhlIGxvY2FsXG4rIyBkZWxpdmVyeS4gT24gdGhlIGJyb2tlbiBnYXRlIHRoZSBhZ2dyZWdhdGVzIGFyZSBkcm9wcGVkIGFuZCBUQ1BcbisjIGNyYXdscyBvbiByZXRyYW5zbWl0dGVkIHNpbmdsZSBzZWdtZW50cywgc2VwYXJhdGluZyB0aGUga2VybmVscyBieVxuKyMgYW4gb3JkZXIgb2YgbWFnbml0dWRlIGluIGRlbGl2ZXJlZCBieXRlcy5cbitkb19sYW5zYW5fZ3NvX3Rlc3QoKVxuK3tcbitcdGxvY2FsIHBycF9pcD1cIjEwLjk5LjEuMVwiIGxzX2lwPVwiMTAuOTkuMS4xMFwiXG4rXHRsb2NhbCBvdXQgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXG4rXHRsb2NhbCBhX2IwIGFfcDAgYV9iMSBhX3AxIHJfYjAgcl9wMCByX2IxIHJfcDFcbitcbitcdHNldHVwX25zIG5zX2xzIHx8IGV4aXQgJD9cbitcbitcdGlwIGxpbmsgYWRkIGRfcGEgbmV0bnMgXCIkbnNfZHV0XCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBsc19hIG5ldG5zIFwiJG5zX2xzXCJcbitcdGlwIGxpbmsgYWRkIGRfcGIgbmV0bnMgXCIkbnNfZHV0XCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBsc19wIG5ldG5zIFwiJG5zX2xzXCJcbitcbitcdG5zeCBcIiRuc19kdXRcIiBcImlwIGxpbmsgc2V0IGRfcGEgbXR1IDE2MDAgdXBcIlxuK1x0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBzZXQgZF9wYiBtdHUgMTYwMCB1cFwiXG4rXHRuc3ggXCIkbnNfbHNcIiBcImlwIGxpbmsgc2V0IGxzX2EgbXR1IDE2MDAgdXA7IFxcXG4rXHRcdGlwIGxpbmsgc2V0IGxzX3AgbXR1IDE2MDAgdXA7IGlwIGFkZHIgYWRkICRsc19pcC8yNCBkZXYgbHNfYVwiXG4rXG4rXHQjIFBSUCBEVVQgd2l0aCB0aGUgU0FOIG9uIGEgTEFOIHNsYXZlOiBwbGFpbiBTQU4gYWdncmVnYXRlcyBhcmVcbitcdCMgdmFsaWQgdHJhZmZpYyBvbiBhIFBSUCBMQU4gYW5kIG11c3Qgbm90IGJlIGRyb3BwZWQuXG4rXHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIGFkZCBwcnAwIHR5cGUgaHNyIFxcXG4rXHRcdHNsYXZlMSBkX3BhIHNsYXZlMiBkX3BiIHByb3RvIDE7IFxcXG4rXHRcdGlwIGxpbmsgc2V0IHBycDAgdXA7IGlwIGFkZHIgYWRkICRwcnBfaXAvMjQgZGV2IHBycDBcIlxuK1xuK1x0IyBMZXQgc3VwZXJ2aXNpb24gZnJhbWVzIGNvbnZlcmdlLlxuK1x0c2xlZXAgMlxuK1xuK1x0ZWNobyBcIklORk86IEVuYWJsaW5nIFRTTy9HU08gb24gdGhlIExBTi1zaWRlIFNBTiBpbnRlcmZhY2UuXCJcbitcdG5zeCBcIiRuc19sc1wiIFwiZXRodG9vbCAtSyBsc19hIHRzbyBvbiBnc28gb25cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19sc1wiIGxzX2EgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXG4rXHRzdG9wX2lmX2Vycm9yIFwiQ291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIExBTi1zaWRlIFNBTiBpbnRlcmZhY2UuXCJcbitcbitcdHN0YXJ0X2lwZXJmX3NlcnZlciBcIiRuc19kdXRcIiBcIiRwcnBfaXBcIiB8fCByZXR1cm5cbitcbitcdHJlYWQgLXIgcl9iMCByX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF9yeF9jb3VudGVycyBcIiRuc19kdXRcIiBwcnAwKVxuK0VPRlxuK1x0cmVhZCAtciBzYW5fYjAgc2FuX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19sc1wiIGxzX2EpXG4rRU9GXG4rXHRpZiAhIHZhbGlkX2RlY2ltYWxzIFwiJHJfYjBcIiBcIiRyX3AwXCIgXCIkc2FuX2IwXCIgXCIkc2FuX3AwXCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGJhc2VsaW5lIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1xuK1x0aWYgISBvdXQ9JChuc3ggXCIkbnNfbHNcIiBcInRpbWVvdXQgNjAgaXBlcmYzIC1jICRwcnBfaXAgLU0gMTQ0NiBcXFxuK1x0XHQtYiAyRyAtdCAxMFwiIDJcdTAwM2VcdTAwMjYxKTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogTEFOLXNsYXZlIEdTTyBsb2NhbC1kZWxpdmVyeSBzdHJlYW0gZmFpbGVkOlwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGVjaG8gXCIkb3V0XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1xuK1x0cmVhZCAtciByX2IxIHJfcDEgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3J4X2NvdW50ZXJzIFwiJG5zX2R1dFwiIHBycDApXG4rRU9GXG4rXHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX2xzXCIgbHNfYSlcbitFT0ZcbitcdGlmICEgdmFsaWRfZGVjaW1hbHMgXCIkcl9iMVwiIFwiJHJfcDFcIiBcIiRzYW5fYjFcIiBcIiRzYW5fcDFcIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogZmluYWwgY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXG4rXHQjIE9yYWNsZSAxIC0gYWdncmVnYXRlcyByZWFsbHkgYXJyaXZlZDogdGhlIFNBTiBlbWl0dGVkXG4rXHQjIHN1cGVyLXBhY2tldHMgdG93YXJkIHRoZSBEVVQuXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJTQU4gbHNfYSBUWFwiIFwiJHNhbl9iMFwiIFwiJHNhbl9wMFwiIFxcXG4rXHRcdFwiJHNhbl9iMVwiIFwiJHNhbl9wMVwiIGd0IFwiJFNBTl9BVkdfTUlOXCJcbitcdFsgXCIke3JldDotMH1cIiAtZXEgMCBdIHx8IHJldHVyblxuK1xuK1x0IyBPcmFjbGUgMiAtIGxvY2FsIGRlbGl2ZXJ5IG9mIHRob3NlIGFnZ3JlZ2F0ZXM6IHZvbHVtZSBhbmRcbitcdCMgcGVyLWZyYW1lIHNoYXBlIG9uIHRoZSBQUlAgbWFzdGVyLiBUaGUgdm9sdW1lIGdhdGUgc2VwYXJhdGVzXG4rXHQjIGZ1bGwgZGVsaXZlcnkgZnJvbSB0aGUgcmV0cmFuc21pdCBjcmF3bCB0aGUgYnJva2VuIGdhdGUgbGVhdmVzO1xuK1x0IyB0aGUgYXZlcmFnZSBnYXRlIHByb3ZlcyB0aGUgYnl0ZXMgYXJyaXZlZCBwZXItZnJhbWUuXG4rXHRpZiBbICQoKHJfYjEgLSByX2IwKSkgLWx0IDEwMDAwMDAwMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBMQU4tc2xhdmUgbG9jYWwgZGVsaXZlcnkgZGVncmFkZWRcIiBcXFxuK1x0XHRcdFwiKHBycDAgUlggZGVsdGEgJCgocl9iMSAtIHJfYjApKSBieXRlcyBcdTAwM2MgMTAwMDAwMDAwKVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdGlmIFsgJCgocl9iMSAtIHJfYjApKSAtZ3QgJCgoIChyX3AxIC0gcl9wMCkgKiBMQU5fQVZHX01BWCApKSBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBsb2NhbCBkZWxpdmVyeSBub3QgcGVyLWZyYW1lXCIgXFxcbitcdFx0XHRcIihhdmcgJCgoIChyX2IxIC0gcl9iMCkgLyAocl9wMSAtIHJfcDApICkpIFx1MDAzZSAkTEFOX0FWR19NQVgpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1x0ZWNobyBcIklORk86IExBTi1zbGF2ZSBsb2NhbCBkZWxpdmVyeSBwcnAwIFJYIGRlbHRhXCIgXFxcbitcdFx0XCIkKChyX2IxIC0gcl9iMCkpIGJ5dGVzIC8gJCgocl9wMSAtIHJfcDApKSBwa3RzIFsgT0sgXVwiXG4rXHRyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm5cbitcdGVjaG8gXCJJTkZPOiBMQU4tc2xhdmUgcGxhaW4tR1NPIHJlZ3Jlc3Npb24gWyBPSyBdXCJcbit9XG4rXG4rZG9fdHNvX3N0cmVhbV90ZXN0KClcbit7XG4rXHRsb2NhbCBvdXQgc2VuZGVyX3JldHJcbitcdGxvY2FsIHNhbl9iMCBzYW5fcDAgc2FuX2IxIHNhbl9wMVxuK1x0bG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSBiX2IwIGJfcDAgYl9iMSBiX3AxXG4rXG4rXHRlY2hvIFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cIlxuK1x0bnN4IFwiJG5zX3NhblwiIFwiZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfc2FuXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXG4rXHRzdG9wX2lmX2Vycm9yIFwiQ291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cIlxuK1x0c3RhcnRfaXBlcmZfc2VydmVyIFwiJG5zX3BlZXJcIiB8fCByZXR1cm5cbitcbitcdCMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZVxuK1x0IyBtdXN0IGV4Y2VlZCBTQU5fQVZHX01JTiAoYWdncmVnYXRlIHByb29mIHRoYXQgR1NPIHN1cGVyLXBhY2tldHNcbitcdCMgcmVhbGx5IGxlZnQgdGhlIFNBTik7IGVhY2ggRFVUIExBTiBsZWcgbXVzdCBzdGF5IHVuZGVyIExBTl9BVkdfTUFYXG4rXHQjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlXG4rXHQjIGFyZSBhZ2dyZWdhdGUgZGlzY3JpbWluYXRvcnMsIG5vdCBhIHBlci1mcmFtZSBtYXhpbXVtIHByb29mLlxuK1x0c2FuX2IwPTA7IHNhbl9wMD0wOyBhX2IwPTA7IGFfcDA9MDsgYl9iMD0wOyBiX3AwPTBcbitcdHJlYWQgLXIgc2FuX2IwIHNhbl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfc2FuXCIgczApXG4rRU9GXG4rXHRyZWFkIC1yIGFfYjAgYV9wMCBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfZHV0XCIgZF9hKVxuK0VPRlxuK1x0cmVhZCAtciBiX2IwIGJfcDAgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX2R1dFwiIGRfYilcbitFT0ZcbitcdGlmICEgdmFsaWRfZGVjaW1hbHMgXCIkc2FuX2IwXCIgXCIkc2FuX3AwXCIgXCIkYV9iMFwiIFwiJGFfcDBcIiBcXFxuK1x0XHRcIiRiX2IwXCIgXCIkYl9wMFwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBiYXNlbGluZSBUWCBjb3VudGVyIHNuYXBzaG90IGludmFsaWRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcbitcdCMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eVxuK1x0IyBhYm92ZSwgbm90IG1heCB0aHJvdWdocHV0OyByZXRyYW5zbWl0cyBhcmUgaW5mb3JtYXRpb25hbCBvbmx5LlxuK1x0IyBVbmNhcHBlZCBydW5zIGZsYXAgYXQgVk0vQ0kgZWRnZSByYXRlcyB3aXRob3V0IGluZGljYXRpbmcgYVxuK1x0IyBmdW5jdGlvbmFsIHByb2JsZW0uXG4rXHRpZiAhIG91dD0kKG5zeCBcIiRuc19zYW5cIiBcInRpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgXFxcbitcdFx0LWIgMkcgLXQgMTBcIiAyXHUwMDNlXHUwMDI2MSk7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBjbGllbnQgZmFpbGVkOlwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGVjaG8gXCIkb3V0XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1xuK1x0cmVhZCAtciBzYW5fYjEgc2FuX3AxIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19zYW5cIiBzMClcbitFT0ZcbitcdHJlYWQgLXIgYV9iMSBhX3AxIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2EpXG4rRU9GXG4rXHRyZWFkIC1yIGJfYjEgYl9wMSBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfZHV0XCIgZF9iKVxuK0VPRlxuK1x0aWYgISB2YWxpZF9kZWNpbWFscyBcIiRzYW5fYjFcIiBcIiRzYW5fcDFcIiBcIiRhX2IxXCIgXCIkYV9wMVwiIFxcXG4rXHRcdFwiJGJfYjFcIiBcIiRiX3AxXCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGZpbmFsIFRYIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1xuK1x0ZXZhbF9jb3VudGVyX2RlbHRhIFwiU0FOIHMwIFRYXCIgXCIkc2FuX2IwXCIgXCIkc2FuX3AwXCIgXCIkc2FuX2IxXCIgXCIkc2FuX3AxXCIgXFxcbitcdFx0Z3QgXCIkU0FOX0FWR19NSU5cIlxuK1x0ZXZhbF9jb3VudGVyX2RlbHRhIFwiRFVUIGRfYSBUWFwiIFwiJGFfYjBcIiBcIiRhX3AwXCIgXCIkYV9iMVwiIFwiJGFfcDFcIiBcXFxuK1x0XHRsZSBcIiRMQU5fQVZHX01BWFwiXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJEVVQgZF9iIFRYXCIgXCIkYl9iMFwiIFwiJGJfcDBcIiBcIiRiX2IxXCIgXCIkYl9wMVwiIFxcXG4rXHRcdGxlIFwiJExBTl9BVkdfTUFYXCJcbitcdFsgXCIke3JldDotMH1cIiAtZXEgMCBdIHx8IHJldHVyblxuK1xuK1x0IyBzdWNjZXNzIHBhdGg6IGJvdW5kZWQgcmVhcCB3aXRoIHRoZSBzZXJ2ZXIncyByZWFsIHN0YXR1c1xuK1x0cmVhcF9pcGVyZl9zZXJ2ZXIgfHwgcmV0dXJuXG4rXG4rXHQjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUXG4rXHQjIGFueSBwYXJzZSBhbm9tYWx5IGlzIGEgbG91ZCBGQUlMLCBidXQgdGhlIHZhbHVlIGl0c2VsZiBubyBsb25nZXJcbitcdCMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLlxuK1x0c2VuZGVyX3JldHI9JChlY2hvIFwiJG91dFwiIHwgYXdrICcvc2VjIC4qIHNlbmRlciQvIHtwcmludCAkKE5GLTEpfScpXG4rXHRpZiBbIFwiJChlY2hvIFwiJHNlbmRlcl9yZXRyXCIgfCBncmVwIC1FYyAnXlswLTldKyQnKVwiIC1uZSAxIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGNhbm5vdCBwYXJzZSBzZW5kZXIgcmV0cmFuc21pdHMgcmVsaWFibHlcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRlY2hvIFwiJG91dFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdGVjaG8gXCJJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7XCIgXFxcbitcdFx0XCJzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKVwiXG4rXHRlY2hvIFwiJG91dFwiIHwgZ3JlcCAtRSBcInNlbmRlcnxyZWNlaXZlclwiXG4rfVxuK1xuK2NoZWNrX3ByZXJlcXVpc2l0ZXNcbitjaGVja190b29sIGV0aHRvb2xcbitjaGVja190b29sIGlwZXJmM1xuK2NoZWNrX3Rvb2wgdGltZW91dFxuK1xuKyMgaXByb3V0ZTIgbXVzdCBrbm93IHRoZSBIU1IgaW50ZXJsaW5rIHN5bnRheC5cbitpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xaSBpbnRlcmxpbms7IHRoZW5cbitcdGVjaG8gXCJTS0lQOiBpcHJvdXRlMiBoYXMgbm8gSFNSIGludGVybGluayBzdXBwb3J0XCJcbitcdGV4aXQgJGtzZnRfc2tpcFxuK2ZpXG4rXG4rc2V0dXBfdG9wb1xuK1xuK2VjaG8gXCJJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC1cdTAwM2UgcGVlciB0aHJvdWdoIHRoZSBEVVQpLlwiXG4rZG9fcGluZyBcIiRuc19zYW5cIiBcIiRwZWVyX2lwXCJcbitzdG9wX2lmX2Vycm9yIFwiSW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC5cIlxuK1xuK2RvX2dyb19mZWF0dXJlX2NoZWNrc1xuK2RvX3Rzb19zdHJlYW1fdGVzdFxuK3N0b3BfaWZfZXJyb3IgXCJHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC5cIlxuK1xuK2RvX2xhbnNhbl9nc29fdGVzdFxuK3N0b3BfaWZfZXJyb3IgXCJMQU4tc2xhdmUgcGxhaW4tR1NPIHJlZ3Jlc3Npb24gZmFpbGVkLlwiXG4rXG4rZWNobyBcIklORk86IEFsbCBnb29kLlwiXG4rY2xlYW51cFxuK2V4aXQgJHJldFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDE6MDEuMDA2NTg1OTkxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMzE3MDI5NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IEdSTy9HU08gUGF0Y2ggZm9yIEhTUioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgbWVzc2luZyB3aXRoIEdSTyBhbmQgR1NPIHdpdGhpbiB0aGUgSFNSIGZyYW1ld29yay4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHJ1biBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBvbiB0aGlzIHRoaW5nLiBXZSdyZSBsb29raW5nIGF0IGNoYW5nZXMgdGhhdDpcblxuMS4gIERpc2FibGUgR1JPIG9uIGRldmljZXMgZW5zbGF2ZWQgdG8gYW4gSFNSIG1hc3Rlci4gYG5ldGlmX2Rpc2FibGVfZ3JvYCBhbmQgYGRldl9kaXNhYmxlX2dyb2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGFkZGVkIGhlcmUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cbjIuICBNb2RpZnkgaG93IEhTUiBoYW5kbGVzIEdTTyBzdXBlci1wYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSBiZWZvcmUgZm9yd2FyZGluZy4gVGhpcyBpcyB0aGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0LiBJdCdzIGRvbmUgdGhyb3VnaCB0aGUgbmV3IGBoc3JfZm9yd2FyZF9za2JgIGZ1bmN0aW9uIGFuZCB0aGUgdXNhZ2Ugb2YgYF9fc2tiX2dzb19zZWdtZW50YC4gVGhleSdyZSBhbHNvIGFkanVzdGluZyB0aGUgbG9ja2luZyBhcm91bmQgdGhlIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzIHdpdGhpbiB0aGUgSFNSIGNvZGUuXG5cbk5vdywgbGV0J3MgbG9vayBjbG9zZXIgYXQgdGhlIGNvZGUuIEkgc2VlIHRoZXkncmUgZG9pbmcgYHNrYl9oZWFkZXJfcG9pbnRlcmAgY2FsbHMsIGFuZCB0aGVyZSBhcmUgc29tZSBidWZmZXJzLCBsaWtlIGBlaGAgYW5kIGB2aGAgdG8gaG9sZCB0aGUgRXRoZXJuZXQgYW5kIFZMQU4gaGVhZGVycy4gTm8gYmlnIGRlYWwsIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZS4gVGhlIHBhdGNoIGNhbGxzIGBfX3NrYl9nc29fc2VnbWVudGAuXG5cblRoZSBvYnZpb3VzIHF1ZXN0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/XG5cblJpZ2h0IG9mZiB0aGUgYmF0LCBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IGltbWVkaWF0ZSBLTVNBTiBmbGFncy4gVGhlcmUgYXJlIGEgZmV3IGFyZWFzIHRoYXQgY29uY2VybiBtZSwgc28gSSB3YW50IHRvIGJlIHRob3JvdWdoLlxuXG4qICAgYHNrYl9oZWFkZXJfcG9pbnRlcmAgLSBJdCBzZWVtcyBzYWZlIGJlY2F1c2UgaXQgZWl0aGVyIHJldHVybnMgYSBwb2ludGVyIHRvIGluaXRpYWxpemVkIGRhdGEgd2l0aGluIHRoZSBgc2tiYCBvciBpdCBmaWxscyB0aGUgZ2l2ZW4gYnVmZmVyLlxuKiAgIGBfX3NrYl9nc29fc2VnbWVudGAgLSBJJ20gYSBsaXR0bGUgbW9yZSBjb25jZXJuZWQgaGVyZSBiZWNhdXNlIGl0IGNyZWF0ZXMgbmV3IHNrYnMuIEJ1dCBgX19za2JfZ3NvX3NlZ21lbnRgIGlzIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBzbyBJJ20gbm90IG92ZXJseSB3b3JyaWVkIGFib3V0IGl0LiBJdCdzIGEgd2VsbC10ZXN0ZWQgcGFydCBvZiB0aGUga2VybmVsLlxuXG5JIG5lZWQgdG8gYmUgY2VydGFpbi4gU28sIHRoZXJlIGlzIG5vIG5ldyBrZXJuZWwgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIE5vIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBXZSBhcmUgZGVhbGluZyB3aXRoIHN0YW5kYXJkIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIHRoZSBHUk8vR1NPIGZlYXR1cmVzLCBhbmQgc29tZSBsb2NraW5nLlxuXG5JIHRha2UgYSBsb29rIGF0IHRoZSBuZXdseSBhZGRlZCBmdW5jdGlvbiwgYGhzcl9nc29fZWZmZWN0aXZlX3Byb3RvYC4gSXQgcmVhZHMgaGVhZGVyIGRhdGEgdXNpbmcgYHNrYl9oZWFkZXJfcG9pbnRlcmAuIElmIHRoZSBoZWFkZXIgZGF0YSBpcyBpbiB0aGUgbGluZWFyIHBhcnQsIGl0IHJldHVybnMgYSBwb2ludGVyOyBvdGhlcndpc2UsIGl0IGNvcGllcyB0aGUgaGVhZGVyIGludG8gYSBsb2NhbCBidWZmZXIuIEkgc2VlIGEgZmFtaWxpYXIgcGF0dGVybiB1c2luZyBgc2tiX2hlYWRlcl9wb2ludGVyYDpcblxuYGBgY1xuXHRldGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCAwLCBzaXplb2YoZWgpLCBcdTAwMjZlaCk7XG5cdGlmICghZXRoKVxuXHRcdHJldHVybiAwO1xuXHRwcm90byA9IGV0aC1cdTAwM2VoX3Byb3RvO1xuYGBgXG5cblRoaXMgcGF0dGVybiBpcyB3ZWxsLXVuZGVyc3Rvb2QsIHN0YW5kYXJkLCBhbmQgc2FmZS4gU28sIEkgc2VlIG5vIHBvdGVudGlhbCBLTVNBTiBpc3N1ZXMgaGVyZS5cblxuRXNzZW50aWFsbHksIGFsbCB0aGUgbWVtb3J5IGFjY2VzcyBpcyBzYWZlLCBpbml0aWFsaXplZCBtZW1vcnksIHN0YW5kYXJkIG5ldHdvcmsgb3BlcmF0aW9ucy4gSSBoYXZlIHRvIHNheSwgYmFzZWQgb24gbXkgZXhwZXJ0IGFzc2Vzc21lbnQsIHRoZXJlJ3Mgbm8gc21va2luZyBndW4gaGVyZSB0aGF0IHdhcnJhbnRzIGEgS01TQU4gcnVuLiBBbnkgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbG9ja2luZyBwcm9ibGVtcywgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBLTVNBTiBpcyBvdmVya2lsbCBpbiB0aGlzIGNhc2UuXG5cbkZpbmFsIGFuc3dlcjogYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgc3RhbmRhcmQgdG9vbHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFRoZSBwYXRjaCBmaXhlcyBhIGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNTksIk91dHB1dFRva2VucyI6MjA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjQxOjIxLjMyMzYyMDc2N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSB0byBoYW5kbGUgR1NPIChHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkKSBzdXBlci1wYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSBiZWZvcmUgZm9yd2FyZGluZywgYW5kIGRpc2FibGVzIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIG9uIGVuc2xhdmVkIGRldmljZXMuIEl0IGFsc28gYWRqdXN0cyBsb2NraW5nIGFyb3VuZCBzZXF1ZW5jZSBudW1iZXIgaW5jcmVtZW50cy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYywgc2tiIHNlZ21lbnRhdGlvbiAoYF9fc2tiX2dzb19zZWdtZW50YCksIGFuZCByZWFkaW5nIHBhY2tldCBoZWFkZXJzIHVzaW5nIHRoZSBzdGFuZGFyZCBgc2tiX2hlYWRlcl9wb2ludGVyYCBmdW5jdGlvbi4gTm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSB0byBoYW5kbGUgR1NPIChHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkKSBzdXBlci1wYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSBiZWZvcmUgZm9yd2FyZGluZywgYW5kIGRpc2FibGVzIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIG9uIGVuc2xhdmVkIGRldmljZXMuIEl0IGFsc28gYWRqdXN0cyBsb2NraW5nIGFyb3VuZCBzZXF1ZW5jZSBudW1iZXIgaW5jcmVtZW50cy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYywgc2tiIHNlZ21lbnRhdGlvbiAoYF9fc2tiX2dzb19zZWdtZW50YCksIGFuZCByZWFkaW5nIHBhY2tldCBoZWFkZXJzIHVzaW5nIHRoZSBzdGFuZGFyZCBgc2tiX2hlYWRlcl9wb2ludGVyYCBmdW5jdGlvbi4gTm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowtxdfx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 16:57:39 +0000 UTC FinishedAt: 2026-08-07 17:41:22 +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": "fcaeecb8b0cd44f77d03b28de0671258d4db18f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "fcaeecb8b0cd44f77d03b28de0671258d4db18f8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hsr_forward_skb", "dev_disable_gro", "netif_disable_gro" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGhhbmRsZSBHU08gKEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQpIHN1cGVyLXBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtIGJlZm9yZSBmb3J3YXJkaW5nLCBhbmQgZGlzYWJsZXMgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgb24gZW5zbGF2ZWQgZGV2aWNlcy4gSXQgYWxzbyBhZGp1c3RzIGxvY2tpbmcgYXJvdW5kIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBza2Igc2VnbWVudGF0aW9uIChgX19za2JfZ3NvX3NlZ21lbnRgKSwgYW5kIHJlYWRpbmcgcGFja2V0IGhlYWRlcnMgdXNpbmcgdGhlIHN0YW5kYXJkIGBza2JfaGVhZGVyX3BvaW50ZXJgIGZ1bmN0aW9uLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgcHJvdG9jb2wgdG8gaGFuZGxlIEdTTyBzdXBlci1wYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBhZGRzIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIHRvIHRoZSBjb3JlIG5ldHdvcmsgZGV2aWNlIEFQSSB0byBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgZGV2aWNlLCBhbmQgdXNlcyB0aGlzIHRvIGRpc2FibGUgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNGRhMTdlOTY2MWQ5YjNkM2E1NDQ1OGI0MDVlN2ZkZjZhZDE2MmUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNzo0MDowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NC4uZWJhMmMyNmE0OWJhOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0zNDM0LDYgJiM0MzszNDM0LDggQEAgdm9pZCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBuZXRpZl9jbG9zZV9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGJvb2wgdW5saW5rKTtcbiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuJiM0Mzt2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuJiM0Mzt2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2xvb3BiYWNrX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpuZXdza2IpO1xuIHUxNiBkZXZfcGlja190eF96ZXJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2Rldik7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNTkzM2M1ZGFiMDllZS4uZjIwZDVhYjBjZjcyOSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTE4NDAsNiAmIzQzOzE4NDAsMjEgQEAgdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0fVxuIH1cbiBcbiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuJiM0MztcbiYjNDM7XHRkZXYtXHUwMDNld2FudGVkX2ZlYXR1cmVzIFx1MDAyNj0gfihORVRJRl9GX0dSTyB8IE5FVElGX0ZfR1JPX0hXKTtcbiYjNDM7XHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoZGV2LCBsb3dlcl9kZXYsIGl0ZXIpIHtcbiYjNDM7XHRcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xuJiM0MztcdFx0bmV0aWZfZGlzYWJsZV9ncm8obG93ZXJfZGV2KTtcbiYjNDM7XHRcdG5ldGRldl91bmxvY2tfb3BzKGxvd2VyX2Rldik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqXHRkZXZfZGlzYWJsZV9ncm9faHcgLSBkaXNhYmxlIEhXIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4gICpcdEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9hcGkuYyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuaW5kZXggNDM3OTQ3ZGQwOGVkNS4uM2NhMjUxNWFkMDQ4NiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldl9hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2X2FwaS5jXG5AQCAtMjY5LDYgJiM0MzsyNjksMjcgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZGV2X2Rpc2FibGVfZ3JvKCkgLSBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4mIzQzOyAqIEBkZXY6IGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBCZXN0LWVmZm9ydCBkaXNhYmxlIG9mIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0XG4mIzQzOyAqIGRldmljZS4gIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZFxuJiM0MzsgKiBwYWNrZXRzIG1heSBiZSBmb3J3YXJkZWQgdG8gYW5vdGhlciBpbnRlcmZhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBkaXNhYmxlIGlzIGJlc3QtZWZmb3J0OiBhIGRldmljZSB3aXRoIGEgZml4ZWQtb24gZmVhdHVyZSAoZm9yXG4mIzQzOyAqIGV4YW1wbGUgR1JPX0hXIG9uIGEgdmlydGlvLW5ldCBkZXZpY2UgbmVnb3RpYXRlZCB3aXRob3V0XG4mIzQzOyAqIFZJUlRJT19ORVRfRl9DVFJMX0dVRVNUX09GRkxPQURTKSBrZWVwcyBpdCBlbmFibGVkLiAgQ2FsbGVycyB0aGF0XG4mIzQzOyAqIG5lZWQgYSBoYXJkIGd1YXJhbnRlZSBtdXN0IGluc3BlY3QgdGhlIHJlc3VsdGluZyBmZWF0dXJlIHN0YXRlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuJiM0MztcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XG4mIzQzO1x0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2dybyk7XG4mIzQzO1xuIC8qKlxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxuICAqIEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjUuLjI0OGNiYjE0MmUyMWUgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbkBAIC0yMzIsOSAmIzQzOzIzMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0c2tiLVx1MDAzZWRldiA9IG1hc3Rlci1cdTAwM2VkZXY7XG4gXHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG5AQCAtMzM1LDYgJiM0MzszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRcdGhzcl9zdGFnLVx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVx1MDAzZXNlcXVlbmNlX25yKTtcbiBcdFx0aHNyLVx1MDAzZXNlcXVlbmNlX25yJiM0MzsmIzQzOztcbiBcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gdHlwZTtcbiBcdC8qIEhTUnYwIGhhcyA2IHVudXNlZCBieXRlcyBhZnRlciB0aGUgTUFDICovXG5AQCAtMzU2LDE0ICYjNDM7MzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCk7XG4gXHR9XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4mIzQzO1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0cmV0dXJuO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbkBAIC0zOTAsNiAmIzQzOzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVx1MDAzZXN1cF9zZXF1ZW5jZV9ucik7XG4gXHRoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yJiM0MzsmIzQzOztcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REO1xuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xuIFxuQEAgLTM5NywxMyAmIzQzOzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiBcdGhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIG1hc3Rlci1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFxuLVx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuJiM0MztcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIH1cbiBcbiAvKiBBbm5vdW5jZSAoc3VwZXJ2aXNpb24gZnJhbWUpIHRpbWVyIGZ1bmN0aW9uXG5AQCAtNjU5LDcgJiM0Mzs2NTIsNyBAQCB2b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4gXG4gXHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfSElHSERNQSB8XG4tXHRcdFx0ICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8XG4mIzQzO1x0XHRcdCAgIE5FVElGX0ZfSFdfQ1NVTSB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbmluZGV4IDA3NzQ5ODFhNjVjMTYuLmY0MjY5NGNmNDMwOTkgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9nc28uaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2hzcl9tYWluLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtoc3JfZnJhbWVyZWcuaFwmIzM0O1xuIFxuQEAgLTYyMSw5ICYjNDM7NjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxuIFx0ICAgIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4gXHRcdC8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovXG4tXHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdFx0ZnJhbWUtXHUwMDNlc2VxdWVuY2VfbnIgPSBoc3ItXHUwMDNlc2VxdWVuY2VfbnI7XG4gXHRcdGhzci1cdTAwM2VzZXF1ZW5jZV9uciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHR9XG4gfVxuIFxuQEAgLTczMSw3ICYjNDM7NzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbiB9XG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cbi12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4mIzQzO3N0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX3NrYl9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIHtcbiBcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyBmcmFtZTtcbiBcbkBAIC03NDYsOCAmIzQzOzc0OCw4IEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdCAqIFNvIGNoZWNrIGFuZCBpbmNyZW1lbnQgc3RhdHMgZm9yIG1hc3RlciBwb3J0IG9ubHkgaGVyZS5cbiBcdCAqL1xuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4tXHRcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X3BhY2tldHMmIzQzOyYjNDM7O1xuLVx0XHRwb3J0LVx1MDAzZWRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLVx1MDAzZWxlbjtcbiYjNDM7XHRcdERFVl9TVEFUU19JTkMocG9ydC1cdTAwM2VkZXYsIHR4X3BhY2tldHMpO1xuJiM0MztcdFx0REVWX1NUQVRTX0FERChwb3J0LVx1MDAzZWRldiwgdHhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuIFx0fVxuIFxuIFx0a2ZyZWVfc2tiKGZyYW1lLnNrYl9oc3IpO1xuQEAgLTc1Nyw2ICYjNDM7NzU5LDEwNSBAQCB2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4gXG4gb3V0X2Ryb3A6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdERFVl9TVEFUU19JTkMocG9ydC1cdTAwM2VkZXYsIHR4X2Ryb3BwZWQpO1xuJiM0MztcdGtmcmVlX3NrYihza2IpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xuJiM0MzsgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuXG4mIzQzOyAqL1xuJiM0MzsvKiBFZmZlY3RpdmUgZnJhbWUgcHJvdG9jb2wgb2YgYSAocG9zc2libHkgVkxBTi10YWdnZWQpIHNrYiwgb3IgMCB3aGVuXG4mIzQzOyAqIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIG9yIHRoZSB0YWdnaW5nIGV4Y2VlZHMgd2hhdCBIU1Igc3VwcG9ydHMuXG4mIzQzOyAqIEhTUiBzdXBwb3J0cyBvbmUgODAyLjFRIEMtdGFnIG9ubHksIG1hdGNoaW5nIGZpbGxfZnJhbWVfaW5mbygpOiBhblxuJiM0MzsgKiBhY2NlbGVyYXRlZCB0YWcgbXVzdCBiZSBhIEMtdGFnIHdpdGggYSBub24tVkxBTiBpbm5lciBwcm90b2NvbDsgYW5cbiYjNDM7ICogaW4tYmFuZCB0YWcgaXMgdW53cmFwcGVkIGV4YWN0bHkgb25jZSBhbmQgYSByZXNpZHVhbCBWTEFOIEV0aGVyVHlwZVxuJiM0MzsgKiBpcyByZWplY3RlZC4gUmVhZC1vbmx5OyBubyBzdGF0ZSBpcyBrZXB0IGJleW9uZCB0aGUgaW1tZWRpYXRlXG4mIzQzOyAqIHByb3RvY29sIHZhbHVlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIF9fYmUxNiBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGV0aGhkciBlaDtcbiYjNDM7XHRzdHJ1Y3Qgdmxhbl9oZHIgdmg7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGV0aGhkciAqZXRoO1xuJiM0MztcdGNvbnN0IHN0cnVjdCB2bGFuX2hkciAqdmhkcjtcbiYjNDM7XHRfX2JlMTYgcHJvdG87XG4mIzQzO1xuJiM0MztcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XG4mIzQzO1x0XHQvKiBIU1Igc3VwcG9ydHMgb25lIDgwMi4xUSBDLXRhZyBvbmx5LiAqL1xuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2V2bGFuX3Byb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBza2ItXHUwMDNlcHJvdG9jb2w7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRldGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCAwLCBzaXplb2YoZWgpLCBcdTAwMjZlaCk7XG4mIzQzO1x0aWYgKCFldGgpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cHJvdG8gPSBldGgtXHUwMDNlaF9wcm90bztcbiYjNDM7XHRpZiAoIWV0aF90eXBlX3ZsYW4ocHJvdG8pKVxuJiM0MztcdFx0cmV0dXJuIHByb3RvO1xuJiM0MztcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dmhkciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIEVUSF9ITEVOLCBzaXplb2YodmgpLCBcdTAwMjZ2aCk7XG4mIzQzO1x0aWYgKCF2aGRyKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHByb3RvID0gdmhkci1cdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvO1xuJiM0MztcdGlmIChldGhfdHlwZV92bGFuKHByb3RvKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJvdG87XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmICpzZWdzLCAqbmV4dDtcbiYjNDM7XHRfX2JlMTYgcHJvdG87XG4mIzQzO1xuJiM0MztcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcbiYjNDM7XHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENvbmZvcm1pbmcgcGxhaW4tcHJvdG9jb2wgR1NPIHN1cGVyLXBhY2tldHMgY2FycnkgdHJhaWxlci1mcmVlXG4mIzQzO1x0ICogc2VuZGVyIHBheWxvYWQgYW5kIGFyZSBzZWdtZW50ZWQgaGVyZTogZWFjaCBzZWdtZW50IGlzIGRlbGl2ZXJlZFxuJiM0MztcdCAqIG9yIGZvcndhcmRlZCBhcyBpdHMgb3duIHdpcmUgZnJhbWUsIG9uIGFueSBpbmdyZXNzIHJvbGUuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZ2F0ZSBpcyBjb250ZW50LWJhc2VkLCBub3QgcG9ydC1iYXNlZC4gQW4gYWdncmVnYXRlIHdob3NlXG4mIzQzO1x0ICogZWZmZWN0aXZlIHByb3RvY29sIGlzIEVUSF9QX0hTUiBvciBFVEhfUF9QUlAgY2Fubm90IGJlIHNhZmVseVxuJiM0MztcdCAqIHNlZ21lbnRlZCBhbmQgaXMgZHJvcHBlZCwgYXMgaXMgYW55IHNrYiB3aG9zZSBoZWFkZXIgY2Fubm90IGJlXG4mIzQzO1x0ICogcmVhZCBvciB3aG9zZSB0YWdnaW5nIGV4Y2VlZHMgdGhlIHNpbmdsZSA4MDIuMVEgQy10YWcgSFNSXG4mIzQzO1x0ICogc3VwcG9ydHMuIFdpdGggTkVUSUZfRl9IV19IU1JfVEFHX1JNIHRoZSBsb3dlciBoYXMgYWxyZWFkeVxuJiM0MztcdCAqIHN0cmlwcGVkIHRoZSB0YWcsIHNvIHN1Y2ggYWdncmVnYXRlcyBhcnJpdmUgcGxhaW4gYW5kIGFyZVxuJiM0MztcdCAqIHNlZ21lbnRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwcm90byA9IGhzcl9nc29fZWZmZWN0aXZlX3Byb3RvKHNrYik7XG4mIzQzO1x0aWYgKCFwcm90bylcbiYjNDM7XHRcdGdvdG8gZHJvcF9nc287IC8qIGNsYXNzaWZpY2F0aW9uIGZhaWx1cmUsIGZhaWwtc2FmZSAqL1xuJiM0MztcdGlmIChwcm90byA9PSBodG9ucyhFVEhfUF9IU1IpIHx8IHByb3RvID09IGh0b25zKEVUSF9QX1BSUCkpXG4mIzQzO1x0XHRnb3RvIGRyb3BfZ3NvO1xuJiM0MztcbiYjNDM7XHQvKiBmZWF0dXJlcyA9IDA6IHJlcXVlc3QgZnVsbCBzb2Z0d2FyZSBzZWdtZW50YXRpb24uIHR4X3BhdGggaXMgdHJ1ZVxuJiM0MztcdCAqIG9ubHkgZm9yIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYWZmaWMgb24gdGhlIG1hc3RlcjsgaW5ncmVzcyBmcm9tXG4mIzQzO1x0ICogdGhlIGludGVybGluayBmb2xsb3dzIFJYIGNoZWNrc3VtIHNlbWFudGljcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZWdzID0gX19za2JfZ3NvX3NlZ21lbnQoc2tiLCAwLCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUik7XG4mIzQzO1x0aWYgKElTX0VSUihzZWdzKSB8fCB1bmxpa2VseSghc2VncykpXG4mIzQzO1x0XHRnb3RvIGRyb3BfZ3NvO1xuJiM0MztcbiYjNDM7XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdHdoaWxlIChzZWdzKSB7XG4mIzQzO1x0XHRuZXh0ID0gc2Vncy1cdTAwM2VuZXh0O1xuJiM0MztcdFx0c2Vncy1cdTAwM2VuZXh0ID0gTlVMTDtcbiYjNDM7XHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7XG4mIzQzO1x0XHRzZWdzID0gbmV4dDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuO1xuJiM0MztcbiYjNDM7ZHJvcF9nc286XG4mIzQzO1x0REVWX1NUQVRTX0lOQyhwb3J0LVx1MDAzZWRldiwgdHhfZHJvcHBlZCk7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbmluZGV4IDAxYzczYjRiNTBkZGQuLmFhMjE1NGIxOWMwYjkgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5AQCAtNzMsMTYgJiM0Mzs3Myw3IEBAIHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0fVxuIFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbiBcbi1cdC8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhXG4tXHQgKiBzZXF1ZW5jZSBudW1iZXIgYW5kIHJlcXVpcmUgc3luY2hyb25pc2F0aW9uIHZzIG90aGVyIHNlbmRlci5cbi1cdCAqL1xuLVx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHR9IGVsc2Uge1xuLVx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdH1cbiYjNDM7XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbiBcbiBmaW5pc2hfY29uc3VtZTpcbiBcdHJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEO1xuQEAgLTE3MSw2ICYjNDM7MTYyLDExIEBAIHN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdGdvdG8gZmFpbF9yeF9oYW5kbGVyO1xuIFx0ZGV2X2Rpc2FibGVfbHJvKGRldik7XG4gXG4mIzQzO1x0LyogR1JPIGRpc2FibGluZyBpcyBiZXN0LWVmZm9ydDogZGV2aWNlcyB3aXRoIGZpeGVkLW9uXG4mIzQzO1x0ICogR1JPL0dST19IVyBjYW5ub3QgYmUgZm9yY2VkIG9mZi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkZXZfZGlzYWJsZV9ncm8oZGV2KTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiBcbiBmYWlsX3J4X2hhbmRsZXI6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbmluZGV4IDMxZmI5MzI2Y2Y1MzMuLjBkMTA1NDc2ZTdjNTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXG4gXG4gVEVTVF9QUk9HUyA6PSBcXFxuJiM0MztcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmViY2JkOWZjNDFlYzRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxuQEAgLTAsMCAmIzQzOzEsNjMxIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcbiYjNDM7I1xuJiM0MzsjICAxLiBFbnNsYXZpbmcgYSBkZXZpY2UgdG8gYW4gSFNSIG1hc3RlciBkaXNhYmxlcyBHUk8gb24gaXRcbiYjNDM7IyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cbiYjNDM7IyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXG4mIzQzOyMgIDMuIEEgVENQIHN0cmVhbSBmcm9tIGEgVFNPLWVuYWJsZWQgU0FOICh3aGljaCB0aGVyZWZvcmUgZW1pdHMgR1NPXG4mIzQzOyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6XG4mIzQzOyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xuJiM0MzsjICAgICB0aGUgU0FOIGFuZCBwZXItZnJhbWUtc2l6ZWQgdHJhZmZpYyBsZWF2aW5nIHRoZSBEVVQmIzM5O3MgTEFOIHBvcnRzLlxuJiM0MzsjXG4mIzQzOyMgVG9wb2xvZ3kgKDEwMC42NC4wLjAvMjQpOlxuJiM0MzsjXG4mIzQzOyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXG4mIzQzOyMgICYjNDM7LS0tLS0tLS0tLS0mIzQzOyAgaW50ZXJsaW5rICAmIzQzOy0tLS0tLS0tLS0tLS0tLSYjNDM7ICBMQU4gQS9CICAmIzQzOy0tLS0tLS0tLS0tJiM0MztcbiYjNDM7IyAgfCBzMCBbMC4xXSAgfC0tLS0tLS0tLS0tLS18IGRfaWwgICBoc3IwICAgfC0tLS0tLS0tLS0tfCBoc3IxIFswLjNdfFxuJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHxcbiYjNDM7IyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzQzOy0tLS0tLS0tLS0tLS0tLSYjNDM7ICAgICAgICAgICAmIzQzOy0tLS0tLS0tLS0tJiM0MztcbiYjNDM7I1xuJiM0MzsjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCYjMzk7cyBmb3J3YXJkIHBhdGhcbiYjNDM7IyAoaW50ZXJsaW5rIFJYIC1cdTAwM2UgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kXG4mIzQzOyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXG4mIzQzO1xuJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4mIzQzO1xuJiM0MztzYW5faXA9XCYjMzQ7MTAwLjY0LjAuMVwmIzM0O1xuJiM0MztwZWVyX2lwPVwmIzM0OzEwMC42NC4wLjNcJiMzNDtcbiYjNDM7XG4mIzQzOyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKTpcbiYjNDM7IyBTQU5fQVZHX01JTiBwcm92ZXMgR1NPIHN1cGVyLXBhY2tldHMgbGVmdCB0aGUgU0FOOyBMQU5fQVZHX01BWCBpcyBhXG4mIzQzOyMgZ3VhcmQgd2l0aCBtYXJnaW4sIG5vdCB0aGUgcHJvdG9jb2wgbWF4aW11bSAoc2VlIGRvX3Rzb19zdHJlYW1fdGVzdCkuXG4mIzQzO1NBTl9BVkdfTUlOPTIwNDhcbiYjNDM7TEFOX0FWR19NQVg9MTUxNFxuJiM0MztcbiYjNDM7aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztzZXJ2ZXJfd3JhcHBlcj1cJiMzNDtcJiMzNDtcbiYjNDM7YWN0aXZlX3Nydl9ucz1cJiMzNDtcJiMzNDtcbiYjNDM7d29ya2Rpcj1cJiMzNDtcJiMzNDtcbiYjNDM7cGlkZmlsZT1cJiMzNDtcJiMzNDtcbiYjNDM7bnNfZHV0PVwmIzM0O1wmIzM0O1xuJiM0Mztuc19zYW49XCYjMzQ7XCYjMzQ7XG4mIzQzO25zX3BlZXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO25zX2xzPVwmIzM0O1wmIzM0O1xuJiM0MztyY2ZpbGU9XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsjIERlbGV0ZSB0aGUgcGVyLXNlcnZlciBwcml2YXRlIHdvcmsgZGlyZWN0b3J5IGFuZCByZXNldCBpdHNcbiYjNDM7IyB2YXJpYWJsZXMuIENhbGxlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgcmVhcCBhbmQgZnJvbSB0aGUgRVhJVFxuJiM0MzsjIHRyYXAsIHdoaWNoIG93bnMgYWxsIGZhaWx1cmUgcGF0aHMuXG4mIzQzO2NsZWFudXBfd29ya2RpcigpXG4mIzQzO3tcbiYjNDM7XHQjIHJlbW92ZSBvbmx5IHRoZSBrbm93biBub24tZW1wdHkgcHJpdmF0ZSBkaXJlY3RvcnlcbiYjNDM7XHRpZiBbIC1uIFwmIzM0OyR7d29ya2Rpcn1cJiMzNDsgXSBcdTAwMjZcdTAwMjYgWyAtZCBcJiMzNDske3dvcmtkaXJ9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdHJtIC1yZiBcJiMzNDske3dvcmtkaXJ9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XHR3b3JrZGlyPVwmIzM0O1wmIzM0O1xuJiM0MztcdHBpZGZpbGU9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0cmNmaWxlPVwmIzM0O1wmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjbGVhbnVwKClcbiYjNDM7e1xuJiM0MztcdCMgU2VydmVyIGNsZWFudXAgdGFyZ2V0cyBvbmx5IHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGN1cnJlbnRseVxuJiM0MztcdCMgYWN0aXZlIHNlcnZlciAocmVjb3JkZWQgYnkgc3RhcnRfaXBlcmZfc2VydmVyKTsgYWZ0ZXIgYVxuJiM0MztcdCMgc3VjY2Vzc2Z1bCByZWFwIG5vdGhpbmcgaXMgYWN0aXZlLlxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHthY3RpdmVfc3J2X25zfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHQjIGV4YWN0LVBJRCBraWxsIG9ubHkgYWZ0ZXIgUkUtdmFsaWRhdGluZyBpZGVudGl0eSAoZ3VhcmRzXG4mIzQzO1x0XHQjIGFnYWluc3QgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApXG4mIzQzO1x0XHRpZiBbIC1uIFwmIzM0OyR7aXBlcmZfcGlkfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiB2YWxpZF9zZXJ2ZXJfcGlkIFwmIzM0OyR7YWN0aXZlX3Nydl9uc31cJiMzNDsgXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRcdGtpbGwgXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRcdGZpXG4mIzQzO1x0XHRpcGVyZl9waWQ9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0XHRpZiBbIC1uIFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1c1xuJiM0MztcdFx0XHQjIGJvdW5kIHNvIGEgbGl2ZS1idXQtdW5wdWJsaXNoZWQgc2VydmVyIGNhbiBuZXZlclxuJiM0MztcdFx0XHQjIGhhbmcgY2xlYW51cFxuJiM0MztcdFx0XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdFx0XHRraWxsIC0wIFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcbiYjNDM7XHRcdFx0XHRzbGVlcCAwLjFcbiYjNDM7XHRcdFx0ZG9uZVxuJiM0MztcdFx0XHRraWxsIFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRcdFx0d2FpdCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0XHRcdHNlcnZlcl93cmFwcGVyPVwmIzM0O1wmIzM0O1xuJiM0MztcdFx0ZmlcbiYjNDM7XHRcdCMgbGFzdCByZXNvcnQsIG5hbWVzcGFjZS1zY29wZWQgb25seTogVEVSTSB0aGUgaXBlcmYzXG4mIzQzO1x0XHQjIHByb2Nlc3NlcyB0aGF0IGFjdHVhbGx5IGxpdmUgaW4gdGhlIGFjdGl2ZSBzZXJ2ZXIgbmV0bnMsXG4mIzQzO1x0XHQjIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlbiBTSUdLSUxMIGFueSBzdXJ2aXZvciBiZWZvcmVcbiYjNDM7XHRcdCMgdG91Y2hpbmcgdGhlIG5hbWVzcGFjZSBuYW1lLiBBIGJsaW5kIHBraWxsIHdvdWxkIHNjYW5cbiYjNDM7XHRcdCMgdGhlIGhvc3QgUElEIHNwYWNlIGFuZCBoaXQgdW5yZWxhdGVkIHRlc3RzLlxuJiM0MztcdFx0bG9jYWwgX3AgX3N0aWxsXG4mIzQzO1x0XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwmIzM0OyR7YWN0aXZlX3Nydl9uc31cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCk7IGRvXG4mIzQzO1x0XHRcdGlmIGlzX2lwZXJmM19waWQgXCYjMzQ7JF9wXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRcdFx0a2lsbCBcJiMzNDskX3BcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFx0XHRmaVxuJiM0MztcdFx0ZG9uZVxuJiM0MztcdFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4mIzQzO1x0XHRcdF9zdGlsbD0wXG4mIzQzO1x0XHRcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCYjMzQ7JHthY3RpdmVfc3J2X25zfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbiYjNDM7XHRcdFx0XHRpZiBpc19pcGVyZjNfcGlkIFwmIzM0OyRfcFwmIzM0OzsgdGhlblxuJiM0MztcdFx0XHRcdFx0X3N0aWxsPTFcbiYjNDM7XHRcdFx0XHRcdGJyZWFrXG4mIzQzO1x0XHRcdFx0ZmlcbiYjNDM7XHRcdFx0ZG9uZVxuJiM0MztcdFx0XHRbIFwmIzM0OyRfc3RpbGxcJiMzNDsgLWVxIDAgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbiYjNDM7XHRcdFx0c2xlZXAgMC4xXG4mIzQzO1x0XHRkb25lXG4mIzQzO1x0XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwmIzM0OyR7YWN0aXZlX3Nydl9uc31cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCk7IGRvXG4mIzQzO1x0XHRcdGlmIGlzX2lwZXJmM19waWQgXCYjMzQ7JF9wXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRcdFx0a2lsbCAtOSBcJiMzNDskX3BcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFx0XHRmaVxuJiM0MztcdFx0ZG9uZVxuJiM0MztcdGZpXG4mIzQzO1x0YWN0aXZlX3Nydl9ucz1cJiMzNDtcJiMzNDtcbiYjNDM7XHRjbGVhbnVwX3dvcmtkaXJcbiYjNDM7XHRjbGVhbnVwX2FsbF9uc1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7Y2hlY2tfdG9vbCgpXG4mIzQzO3tcbiYjNDM7XHRpZiAhIGNvbW1hbmQgLXYgXCYjMzQ7JDFcJiMzNDsgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVwmIzM0O1xuJiM0MztcdFx0ZXhpdCAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7bnN4KClcbiYjNDM7e1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JDFcJiMzNDsgYmFzaCAtYyBcJiMzNDskMlwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztpc19pcGVyZjNfcGlkKClcbiYjNDM7e1xuJiM0MztcdFsgXCYjMzQ7JChjYXQgL3Byb2MvXCYjMzQ7JDFcJiMzNDsvY29tbSAyXHUwMDNlL2Rldi9udWxsKVwmIzM0OyA9IFwmIzM0O2lwZXJmM1wmIzM0OyBdXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgQm91bmRlZCByZWFwIG9mIHRoZSBvbmUtc2hvdCBzZXJ2ZXI6IHdhaXQgYXQgbW9zdCA1cyBmb3IgaXQgdG9cbiYjNDM7IyBleGl0LCB0aGVuIHJlYXAgdGhlIHdyYXBwZXIgYW5kIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIGl0cyByZWFsXG4mIzQzOyMgc3RhdHVzLiBBIHN0dWNrIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyB0aGUgc2NyaXB0LlxuJiM0MztyZWFwX2lwZXJmX3NlcnZlcigpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBzZXJ2ZXJfcmNcbiYjNDM7XG4mIzQzO1x0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4mIzQzO1x0XHRraWxsIC0wIFwmIzM0OyR7aXBlcmZfcGlkfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXG4mIzQzO1x0XHRzbGVlcCAwLjFcbiYjNDM7XHRkb25lXG4mIzQzO1x0aWYga2lsbCAtMCBcJiMzNDske2lwZXJmX3BpZH1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgZXhpdCB3aXRoaW4gNXNcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0d2FpdCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0O1xuJiM0MztcdHNlcnZlcl93cmFwcGVyPVwmIzM0O1wmIzM0O1xuJiM0MztcdGlmIFsgISAtcyBcJiMzNDske3JjZmlsZX1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIHN0YXR1cyBmaWxlIG1pc3NpbmcgKCR7cmNmaWxlfSlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0c2VydmVyX3JjPSQoY2F0IFwmIzM0OyR7cmNmaWxlfVwmIzM0OylcbiYjNDM7XHRpZiAhIFtbIFwmIzM0OyRzZXJ2ZXJfcmNcJiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IFsgXCYjMzQ7JHNlcnZlcl9yY1wmIzM0OyAtbmUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JiMzOTske3NlcnZlcl9yY30mIzM5O1wmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XHRpcGVyZl9waWQ9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0Y2xlYW51cF93b3JrZGlyXG4mIzQzO1x0YWN0aXZlX3Nydl9ucz1cJiMzNDtcJiMzNDtcbiYjNDM7XHRyZXR1cm4gMFxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIERlY2ltYWwtY291bnRlciB2YWxpZGF0aW9uIGZvciB0aGUgc25hcHNob3QgYmxvY2tzOiBldmVyeSB2YWx1ZSBtdXN0XG4mIzQzOyMgYmUgYSBwbGFpbiBkZWNpbWFsIG51bWJlci4gQSBwYXJzZSBmYWlsdXJlIGluIHJlYWRfdHhfY291bnRlcnMgeWllbGRzXG4mIzQzOyMgZW1wdHkvZ2FyYmxlZCBmaWVsZHMsIHdoaWNoIHRoaXMgY2hlY2sgdHVybnMgaW50byBhbiBpbW1lZGlhdGUgRkFJTC5cbiYjNDM7dmFsaWRfZGVjaW1hbHMoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgdlxuJiM0MztcbiYjNDM7XHRmb3IgdiBpbiBcJiMzNDskQFwmIzM0OzsgZG9cbiYjNDM7XHRcdFtbIFwmIzM0OyR2XCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCByZXR1cm4gMVxuJiM0MztcdGRvbmVcbiYjNDM7XHRyZXR1cm4gMFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzZXR1cF90b3BvKClcbiYjNDM7e1xuJiM0MztcdHNldHVwX25zIG5zX2R1dCBuc19zYW4gbnNfcGVlciB8fCBleGl0ICQ/XG4mIzQzO1xuJiM0MztcdGlwIGxpbmsgYWRkIGRfYSBuZXRucyBcJiMzNDskbnNfZHV0XCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zIFwmIzM0OyRuc19wZWVyXCYjMzQ7XG4mIzQzO1x0aXAgbGluayBhZGQgZF9iIG5ldG5zIFwmIzM0OyRuc19kdXRcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2IgbmV0bnMgXCYjMzQ7JG5zX3BlZXJcJiMzNDtcbiYjNDM7XHRpcCBsaW5rIGFkZCBkX2lsIG5ldG5zIFwmIzM0OyRuc19kdXRcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzMCBuZXRucyBcJiMzNDskbnNfc2FuXCYjMzQ7XG4mIzQzO1xuJiM0MztcdCMgSFNSIHRhZ3MgYWRkIDYgYnl0ZXMgcGVyIGZyYW1lOyBnaXZlIHRoZSBMQU4gbGVncyBoZWFkcm9vbS5cbiYjNDM7XHRmb3IgaWZhY2UgaW4gZF9hIGRfYjsgZG9cbiYjNDM7XHRcdG5zeCBcJiMzNDskbnNfZHV0XCYjMzQ7IFwmIzM0O2lwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgXFxcbiYjNDM7XHRcdFx0aXAgbGluayBzZXQgJGlmYWNlIHVwXCYjMzQ7XG4mIzQzO1x0ZG9uZVxuJiM0MztcdGZvciBpZmFjZSBpbiBwX2EgcF9iOyBkb1xuJiM0MztcdFx0bnN4IFwmIzM0OyRuc19wZWVyXCYjMzQ7IFwmIzM0O2lwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgXFxcbiYjNDM7XHRcdFx0aXAgbGluayBzZXQgJGlmYWNlIHVwXCYjMzQ7XG4mIzQzO1x0ZG9uZVxuJiM0MztcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX2R1dFwmIzM0OyBcJiMzNDtpcCBsaW5rIHNldCBkX2lsIHVwXCYjMzQ7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19zYW5cJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgczAgdXA7IGlwIGFkZHIgYWRkICRzYW5faXAvMjQgZGV2IHMwXCYjMzQ7XG4mIzQzO1xuJiM0MztcdG5zeCBcJiMzNDskbnNfZHV0XCYjMzQ7IFwmIzM0O2lwIGxpbmsgYWRkIGhzcjAgdHlwZSBoc3IgXFxcbiYjNDM7XHRcdHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcXFxuJiM0MztcdFx0aXAgbGluayBzZXQgaHNyMCB1cFwmIzM0O1xuJiM0MztcdG5zeCBcJiMzNDskbnNfcGVlclwmIzM0OyBcJiMzNDtpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFxcXG4mIzQzO1x0XHRzbGF2ZTEgcF9hIHNsYXZlMiBwX2IgcHJvdG8gMDsgXFxcbiYjNDM7XHRcdGlwIGxpbmsgc2V0IGhzcjEgdXA7IGlwIGFkZHIgYWRkICRwZWVyX2lwLzI0IGRldiBoc3IxXCYjMzQ7XG4mIzQzO1xuJiM0MztcdCMgTGV0IHRoZSBub2RlcyBzZWUgZWFjaCBvdGhlciYjMzk7cyBzdXBlcnZpc2lvbiBmcmFtZXMuXG4mIzQzO1x0c2xlZXAgMlxuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGVja19mZWF0dXJlKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPVwmIzM0OyQxXCYjMzQ7XG4mIzQzO1x0bG9jYWwgaWZhY2U9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBmZWF0dXJlPVwmIzM0OyQzXCYjMzQ7XG4mIzQzO1x0bG9jYWwgd2FudD1cJiMzNDskNFwmIzM0O1xuJiM0MztcbiYjNDM7XHRpZiBuc3ggXCYjMzQ7JG5zXCYjMzQ7IFwmIzM0O2V0aHRvb2wgLWsgJGlmYWNlXCYjMzQ7IHwgZ3JlcCAtcSBcJiMzNDteJGZlYXR1cmU6ICR3YW50XCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0lORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgJHdhbnQgWyBPSyBdXCYjMzQ7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG5vdCAkd2FudFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRmaVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIE9mZi1vci1hYnNlbnQgdmFyaWFudDogZmFpbHMgb25seSB3aGVuIHRoZSBmZWF0dXJlIGlzIHByZXNlbnQgQU5EIG9uLFxuJiM0MzsjIHNvIGRldmljZXMgdGhhdCBzaW1wbHkgZG8gbm90IGxpc3QgdGhlIGZlYXR1cmUgZG8gbm90IGZhaWwgaXQuXG4mIzQzO2NoZWNrX2ZlYXR1cmVfbm90X29uKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPVwmIzM0OyQxXCYjMzQ7XG4mIzQzO1x0bG9jYWwgaWZhY2U9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBmZWF0dXJlPVwmIzM0OyQzXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIG5zeCBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7ZXRodG9vbCAtayAkaWZhY2VcJiMzNDsgfCBncmVwIC1xIFwmIzM0O14kZmVhdHVyZTogb25cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBvblwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0lORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgbm90IG9uIFsgT0sgXVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO2RvX2dyb19mZWF0dXJlX2NoZWNrcygpXG4mIzQzO3tcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgR1JPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2EgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGRfYiBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9pbCBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbiYjNDM7XHRzdG9wX2lmX2Vycm9yIFwmIzM0O0dSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEhXLUdSTy5cJiMzNDtcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9hIHJ4LWdyby1odyBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iIHJ4LWdyby1odyBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9pbCByeC1ncm8taHcgb2ZmXG4mIzQzO1x0c3RvcF9pZl9lcnJvciBcJiMzNDtIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCB0aGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTy5cJiMzNDtcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgaHNyMCBnZW5lcmljLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBoc3IwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlX25vdF9vbiBcJiMzNDskbnNfZHV0XCYjMzQ7IGhzcjAgdHgtdWRwLXNlZ21lbnRhdGlvblxuJiM0MztcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwmIzM0OyRuc19kdXRcJiMzNDsgaHNyMCB0eC1nc28tbGlzdFxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7SFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy1mYW1pbHkgZmVhdHVyZXMuXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2FsbG9jX3dvcmtkaXIoKVxuJiM0Mzt7XG4mIzQzO1x0IyBBbGxvY2F0ZWQgb25seSBoZXJlLCBsb25nIGFmdGVyIHRoZSBpbml0aWFsIHRvcG9sb2d5IGNsZWFudXAsIHNvXG4mIzQzO1x0IyBjbGVhbnVwKCkgYXQgc2V0dXBfdG9wbygpIHRpbWUgY2FuIG5ldmVyIHJlbW92ZSBpdC4gbWt0ZW1wIGZhaWx1cmVcbiYjNDM7XHQjIGlzIGEgaGFyZCB0ZXN0IGZhaWx1cmUuXG4mIzQzO1x0d29ya2Rpcj0kKG1rdGVtcCAtZCAvdG1wL2hzcl9ncm9fdGVzdC5YWFhYWFgpIHx8IHtcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogbWt0ZW1wIC1kIGZhaWxlZFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZXhpdCAxXG4mIzQzO1x0fVxuJiM0MztcdGNobW9kIDcwMCBcJiMzNDske3dvcmtkaXJ9XCYjMzQ7XG4mIzQzO1x0cGlkZmlsZT1cJiMzNDske3dvcmtkaXJ9L2lwZXJmLnBpZFwmIzM0O1xuJiM0MztcdHJjZmlsZT1cJiMzNDske3dvcmtkaXJ9L2lwZXJmLnJjXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgTnVtZXJpYywgYWxpdmUsIGNvbW0gPT0gaXBlcmYzLCBhbmQgcmVhbGx5IG93bmVkIGJ5IHRoZSBnaXZlbiBuZXRucy5cbiYjNDM7dmFsaWRfc2VydmVyX3BpZCgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBwbnM9XCYjMzQ7JDFcJiMzNDsgcD1cJiMzNDskMlwmIzM0O1xuJiM0MztcbiYjNDM7XHRbWyBcJiMzNDskcFwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV0gfHwgcmV0dXJuIDFcbiYjNDM7XHRraWxsIC0wIFwmIzM0OyRwXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIDFcbiYjNDM7XHRbIFwmIzM0OyQoY2F0IC9wcm9jL1wmIzM0OyRwXCYjMzQ7L2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcJiMzNDsgPSBcJiMzNDtpcGVyZjNcJiMzNDsgXSB8fCByZXR1cm4gMVxuJiM0MztcdGlwIG5ldG5zIHBpZHMgXCYjMzQ7JHBuc1wmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHwgZ3JlcCAtcXggXCYjMzQ7JHBcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhcnRfaXBlcmZfc2VydmVyKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIHNydl9ucz1cJiMzNDskMVwmIzM0O1xuJiM0MztcdGxvY2FsIHNydl9pcD1cJiMzNDskezI6LX1cJiMzNDtcbiYjNDM7XHRsb2NhbCBjYW5kaWRhdGVfcGlkXG4mIzQzO1xuJiM0MztcdCMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHNcbiYjNDM7XHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxuJiM0MztcdGFsbG9jX3dvcmtkaXJcbiYjNDM7XHQjIHJlY29yZCB0aGUgc2VydmVyIG5hbWVzcGFjZSBmb3IgY2xlYW51cCgpIGJlZm9yZVxuJiM0MztcdCMgYW55dGhpbmcgY2FuIGZhaWwgd2l0aCB0aGUgc2VydmVyIHJ1bm5pbmdcbiYjNDM7XHRhY3RpdmVfc3J2X25zPVwmIzM0OyRzcnZfbnNcJiMzNDtcbiYjNDM7XHQoIG5zeCBcJiMzNDskc3J2X25zXCYjMzQ7IFwmIzM0O2lwZXJmMyAtcyAtMSAke3Nydl9pcDomIzQzOy1CICRzcnZfaXB9IFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2IFxcXG4mIzQzO1x0XHRlY2hvIFxcJCEgXHUwMDNlICR7cGlkZmlsZX07IFxcXG4mIzQzO1x0XHR3YWl0IFxcJCE7IFxcXG4mIzQzO1x0XHRlY2hvIFxcJD8gXHUwMDNlICR7cmNmaWxlfVwmIzM0OyApIFx1MDAyNlxuJiM0MztcdHNlcnZlcl93cmFwcGVyPSQhXG4mIzQzO1x0IyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvXG4mIzQzO1x0IyBhcHBlYXIgaW5zdGVhZCBvZiByYWNpbmcgdGhlIHJlYWRcbiYjNDM7XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbiYjNDM7XHRcdFsgLXMgXCYjMzQ7JHtwaWRmaWxlfVwmIzM0OyBdIFx1MDAyNlx1MDAyNiBicmVha1xuJiM0MztcdFx0c2xlZXAgMC4xXG4mIzQzO1x0ZG9uZVxuJiM0MztcdGlmIFsgISAtcyBcJiMzNDske3BpZGZpbGV9XCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWRcJiMzNDsgXFxcbiYjNDM7XHRcdFx0XCYjMzQ7KG5vIHBpZGZpbGUpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcdGNhbmRpZGF0ZV9waWQ9JChcdTAwM2NcJiMzNDske3BpZGZpbGV9XCYjMzQ7KVxuJiM0MztcdGlmICEgdmFsaWRfc2VydmVyX3BpZCBcJiMzNDskc3J2X25zXCYjMzQ7IFwmIzM0OyR7Y2FuZGlkYXRlX3BpZH1cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJiMzOTske2NhbmRpZGF0ZV9waWR9JiMzOTtcJiMzNDsgXFxcbiYjNDM7XHRcdFx0XCYjMzQ7ZmFpbGVkIHZhbGlkYXRpb25cJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0IyBwdWJsaXNoIG9ubHkgYWZ0ZXIgZnVsbCB2YWxpZGF0aW9uXG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0OyR7Y2FuZGlkYXRlX3BpZH1cJiMzNDtcbiYjNDM7XHRzbGVlcCAxXG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBQcmludCBcJiMzNDtcdTAwM2NieXRlc1x1MDAzZSBcdTAwM2NwYWNrZXRzXHUwMDNlXCYjMzQ7IGZvciBleGFjdGx5IG9uZSBUWCByZWNvcmQgb2YgbnMvZGV2OyBhbnl0aGluZ1xuJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC5cbiYjNDM7cmVhZF90eF9jb3VudGVycygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBucz1cJiMzNDskMVwmIzM0OyBkZXY9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBvdXQgY250XG4mIzQzO1xuJiM0MztcdG91dD0kKG5zeCBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7aXAgLXMgbGluayBzaG93ICRkZXZcJiMzNDsgfCBcXFxuJiM0MztcdFx0YXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OylcbiYjNDM7XHRjbnQ9JChlY2hvIFwmIzM0OyRvdXRcJiMzNDsgfCBncmVwIC1jICYjMzk7XlswLTldKiBbMC05XSokJiMzOTspXG4mIzQzO1x0aWYgWyBcJiMzNDskY250XCYjMzQ7IC1uZSAxIF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2XCYjMzQ7IFxcXG4mIzQzO1x0XHRcdFwmIzM0OyhyZWNvcmRzPSRjbnQpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7XG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBQcmludCBcJiMzNDtcdTAwM2NieXRlc1x1MDAzZSBcdTAwM2NwYWNrZXRzXHUwMDNlXCYjMzQ7IGZvciBleGFjdGx5IG9uZSBSWCByZWNvcmQgb2YgbnMvZGV2OyB0aGVcbiYjNDM7IyBzYW1lIHNpbmdsZS1yZWNvcmQgZGlzY2lwbGluZSBhcyByZWFkX3R4X2NvdW50ZXJzLlxuJiM0MztyZWFkX3J4X2NvdW50ZXJzKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPVwmIzM0OyQxXCYjMzQ7IGRldj1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIG91dCBjbnRcbiYjNDM7XG4mIzQzO1x0b3V0PSQobnN4IFwmIzM0OyRuc1wmIzM0OyBcJiMzNDtpcCAtcyBsaW5rIHNob3cgJGRldlwmIzM0OyB8IFxcXG4mIzQzO1x0XHRhd2sgJiMzOTsvXiAmIzQzO1JYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfSYjMzk7KVxuJiM0MztcdGNudD0kKGVjaG8gXCYjMzQ7JG91dFwmIzM0OyB8IGdyZXAgLWMgJiMzOTteWzAtOV0qIFswLTldKiQmIzM5OylcbiYjNDM7XHRpZiBbIFwmIzM0OyRjbnRcJiMzNDsgLW5lIDEgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBjYW5ub3QgcGFyc2UgUlggY291bnRlcnMgb2YgJG5zLyRkZXZcJiMzNDsgXFxcbiYjNDM7XHRcdFx0XCYjMzQ7KHJlY29yZHM9JGNudClcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XHRlY2hvIFwmIzM0OyRvdXRcJiMzNDtcbiYjNDM7XHRyZXR1cm4gMFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztldmFsX2NvdW50ZXJfZGVsdGEoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbmFtZT1cJiMzNDskMVwmIzM0OyBiMD1cJiMzNDskMlwmIzM0OyBwMD1cJiMzNDskM1wmIzM0OyBiMT1cJiMzNDskNFwmIzM0OyBwMT1cJiMzNDskNVwmIzM0OyBvcD1cJiMzNDskNlwmIzM0OyBsaW1pdD1cJiMzNDskN1wmIzM0O1xuJiM0MztcdGxvY2FsIGJkIHBkXG4mIzQzO1xuJiM0MztcdGlmICEgW1sgXCYjMzQ7JGIwXCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBcdTAwMjZcdTAwMjYgXCYjMzQ7JGIxXCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBcdTAwMjZcdTAwMjYgXFxcbiYjNDM7XHRcdFwmIzM0OyRwMFwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXHUwMDI2XHUwMDI2IFwmIzM0OyRwMVwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWVcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0YmQ9JCgoYjEgLSBiMCkpXG4mIzQzO1x0cGQ9JCgocDEgLSBwMCkpXG4mIzQzO1x0aWYgWyBcJiMzNDskYmRcJiMzNDsgLWx0IDAgXSB8fCBbIFwmIzM0OyRwZFwmIzM0OyAtbGUgMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGNvdW50ZXIgZGVsdGEgaW52YWxpZCBmb3IgJG5hbWVcJiMzNDsgXFxcbiYjNDM7XHRcdFx0XCYjMzQ7KGJ5dGVzPSRiZCBwa3RzPSRwZClcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0aWYgWyBcJiMzNDskb3BcJiMzNDsgPSBcJiMzNDtndFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRpZiBbIFwmIzM0OyRiZFwmIzM0OyAtbGUgJCgocGQgKiBsaW1pdCkpIF07IHRoZW5cbiYjNDM7XHRcdFx0ZWNobyBcJiMzNDtGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXHUwMDNjPSAkbGltaXRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdFx0cmV0PTFcbiYjNDM7XHRcdFx0cmV0dXJuIDFcbiYjNDM7XHRcdGZpXG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0aWYgWyBcJiMzNDskYmRcJiMzNDsgLWd0ICQoKHBkICogbGltaXQpKSBdOyB0aGVuXG4mIzQzO1x0XHRcdGVjaG8gXCYjMzQ7RkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkIFx1MDAzZSAkbGltaXRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdFx0cmV0PTFcbiYjNDM7XHRcdFx0cmV0dXJuIDFcbiYjNDM7XHRcdGZpXG4mIzQzO1x0ZmlcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDsob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdXCYjMzQ7XG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBMQU4tc2xhdmUgcGxhaW4tR1NPIHJlZ3Jlc3Npb246IGEgcGxhaW4gU0FOIGFnZ3JlZ2F0ZSBlbnRlcmluZyBhIFBSUFxuJiM0MzsjIExBTiBzbGF2ZSBtdXN0IGJlIHNlZ21lbnRlZCBhdCB0aGUgZm9yd2FyZCBlbnRyeSwgbm90IGRyb3BwZWQuIFBSUFxuJiM0MzsjIGRyb3BzIHNsYXZlLXRvLXNsYXZlIGZvcndhcmRpbmcgYnkgZGVzaWduIChwcnBfZHJvcF9mcmFtZSksIHNvIHRoZVxuJiM0MzsjIGNvbnN1bWVyIG9mIExBTi1zbGF2ZSBTQU4gdHJhZmZpYyBpcyBsb2NhbCBkZWxpdmVyeSB0byB0aGUgbWFzdGVyLlxuJiM0MzsjIFR3byBpbmRlcGVuZGVudCBvcmFjbGVzOiB0aGUgU0FOLXNpZGUgcHJvb2YgdGhhdCBhZ2dyZWdhdGVzIHJlYWxseVxuJiM0MzsjIGFycml2ZWQgYXQgdGhlIERVVCwgYW5kIHRoZSB2b2x1bWUgJiM0MzsgcGVyLWZyYW1lIHNoYXBlIG9mIHRoZSBsb2NhbFxuJiM0MzsjIGRlbGl2ZXJ5LiBPbiB0aGUgYnJva2VuIGdhdGUgdGhlIGFnZ3JlZ2F0ZXMgYXJlIGRyb3BwZWQgYW5kIFRDUFxuJiM0MzsjIGNyYXdscyBvbiByZXRyYW5zbWl0dGVkIHNpbmdsZSBzZWdtZW50cywgc2VwYXJhdGluZyB0aGUga2VybmVscyBieVxuJiM0MzsjIGFuIG9yZGVyIG9mIG1hZ25pdHVkZSBpbiBkZWxpdmVyZWQgYnl0ZXMuXG4mIzQzO2RvX2xhbnNhbl9nc29fdGVzdCgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBwcnBfaXA9XCYjMzQ7MTAuOTkuMS4xXCYjMzQ7IGxzX2lwPVwmIzM0OzEwLjk5LjEuMTBcJiMzNDtcbiYjNDM7XHRsb2NhbCBvdXQgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXG4mIzQzO1x0bG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSByX2IwIHJfcDAgcl9iMSByX3AxXG4mIzQzO1xuJiM0MztcdHNldHVwX25zIG5zX2xzIHx8IGV4aXQgJD9cbiYjNDM7XG4mIzQzO1x0aXAgbGluayBhZGQgZF9wYSBuZXRucyBcJiMzNDskbnNfZHV0XCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgbHNfYSBuZXRucyBcJiMzNDskbnNfbHNcJiMzNDtcbiYjNDM7XHRpcCBsaW5rIGFkZCBkX3BiIG5ldG5zIFwmIzM0OyRuc19kdXRcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBsc19wIG5ldG5zIFwmIzM0OyRuc19sc1wmIzM0O1xuJiM0MztcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX2R1dFwmIzM0OyBcJiMzNDtpcCBsaW5rIHNldCBkX3BhIG10dSAxNjAwIHVwXCYjMzQ7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19kdXRcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgZF9wYiBtdHUgMTYwMCB1cFwmIzM0O1xuJiM0MztcdG5zeCBcJiMzNDskbnNfbHNcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgbHNfYSBtdHUgMTYwMCB1cDsgXFxcbiYjNDM7XHRcdGlwIGxpbmsgc2V0IGxzX3AgbXR1IDE2MDAgdXA7IGlwIGFkZHIgYWRkICRsc19pcC8yNCBkZXYgbHNfYVwmIzM0O1xuJiM0MztcbiYjNDM7XHQjIFBSUCBEVVQgd2l0aCB0aGUgU0FOIG9uIGEgTEFOIHNsYXZlOiBwbGFpbiBTQU4gYWdncmVnYXRlcyBhcmVcbiYjNDM7XHQjIHZhbGlkIHRyYWZmaWMgb24gYSBQUlAgTEFOIGFuZCBtdXN0IG5vdCBiZSBkcm9wcGVkLlxuJiM0MztcdG5zeCBcJiMzNDskbnNfZHV0XCYjMzQ7IFwmIzM0O2lwIGxpbmsgYWRkIHBycDAgdHlwZSBoc3IgXFxcbiYjNDM7XHRcdHNsYXZlMSBkX3BhIHNsYXZlMiBkX3BiIHByb3RvIDE7IFxcXG4mIzQzO1x0XHRpcCBsaW5rIHNldCBwcnAwIHVwOyBpcCBhZGRyIGFkZCAkcHJwX2lwLzI0IGRldiBwcnAwXCYjMzQ7XG4mIzQzO1xuJiM0MztcdCMgTGV0IHN1cGVydmlzaW9uIGZyYW1lcyBjb252ZXJnZS5cbiYjNDM7XHRzbGVlcCAyXG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgTEFOLXNpZGUgU0FOIGludGVyZmFjZS5cJiMzNDtcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX2xzXCYjMzQ7IFwmIzM0O2V0aHRvb2wgLUsgbHNfYSB0c28gb24gZ3NvIG9uXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfbHNcJiMzNDsgbHNfYSB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb25cbiYjNDM7XHRzdG9wX2lmX2Vycm9yIFwmIzM0O0NvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBMQU4tc2lkZSBTQU4gaW50ZXJmYWNlLlwmIzM0O1xuJiM0MztcbiYjNDM7XHRzdGFydF9pcGVyZl9zZXJ2ZXIgXCYjMzQ7JG5zX2R1dFwmIzM0OyBcJiMzNDskcHJwX2lwXCYjMzQ7IHx8IHJldHVyblxuJiM0MztcbiYjNDM7XHRyZWFkIC1yIHJfYjAgcl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3J4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgcHJwMClcbiYjNDM7RU9GXG4mIzQzO1x0cmVhZCAtciBzYW5fYjAgc2FuX3AwIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfdHhfY291bnRlcnMgXCYjMzQ7JG5zX2xzXCYjMzQ7IGxzX2EpXG4mIzQzO0VPRlxuJiM0MztcdGlmICEgdmFsaWRfZGVjaW1hbHMgXCYjMzQ7JHJfYjBcJiMzNDsgXCYjMzQ7JHJfcDBcJiMzNDsgXCYjMzQ7JHNhbl9iMFwmIzM0OyBcJiMzNDskc2FuX3AwXCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGJhc2VsaW5lIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVybiAxXG4mIzQzO1x0ZmlcbiYjNDM7XG4mIzQzO1x0aWYgISBvdXQ9JChuc3ggXCYjMzQ7JG5zX2xzXCYjMzQ7IFwmIzM0O3RpbWVvdXQgNjAgaXBlcmYzIC1jICRwcnBfaXAgLU0gMTQ0NiBcXFxuJiM0MztcdFx0LWIgMkcgLXQgMTBcJiMzNDsgMlx1MDAzZVx1MDAyNjEpOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IExBTi1zbGF2ZSBHU08gbG9jYWwtZGVsaXZlcnkgc3RyZWFtIGZhaWxlZDpcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7JG91dFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdHJlYWQgLXIgcl9iMSByX3AxIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfcnhfY291bnRlcnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyBwcnAwKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQocmVhZF90eF9jb3VudGVycyBcJiMzNDskbnNfbHNcJiMzNDsgbHNfYSlcbiYjNDM7RU9GXG4mIzQzO1x0aWYgISB2YWxpZF9kZWNpbWFscyBcJiMzNDskcl9iMVwmIzM0OyBcJiMzNDskcl9wMVwmIzM0OyBcJiMzNDskc2FuX2IxXCYjMzQ7IFwmIzM0OyRzYW5fcDFcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogZmluYWwgY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHQjIE9yYWNsZSAxIC0gYWdncmVnYXRlcyByZWFsbHkgYXJyaXZlZDogdGhlIFNBTiBlbWl0dGVkXG4mIzQzO1x0IyBzdXBlci1wYWNrZXRzIHRvd2FyZCB0aGUgRFVULlxuJiM0MztcdGV2YWxfY291bnRlcl9kZWx0YSBcJiMzNDtTQU4gbHNfYSBUWFwmIzM0OyBcJiMzNDskc2FuX2IwXCYjMzQ7IFwmIzM0OyRzYW5fcDBcJiMzNDsgXFxcbiYjNDM7XHRcdFwmIzM0OyRzYW5fYjFcJiMzNDsgXCYjMzQ7JHNhbl9wMVwmIzM0OyBndCBcJiMzNDskU0FOX0FWR19NSU5cJiMzNDtcbiYjNDM7XHRbIFwmIzM0OyR7cmV0Oi0wfVwmIzM0OyAtZXEgMCBdIHx8IHJldHVyblxuJiM0MztcbiYjNDM7XHQjIE9yYWNsZSAyIC0gbG9jYWwgZGVsaXZlcnkgb2YgdGhvc2UgYWdncmVnYXRlczogdm9sdW1lIGFuZFxuJiM0MztcdCMgcGVyLWZyYW1lIHNoYXBlIG9uIHRoZSBQUlAgbWFzdGVyLiBUaGUgdm9sdW1lIGdhdGUgc2VwYXJhdGVzXG4mIzQzO1x0IyBmdWxsIGRlbGl2ZXJ5IGZyb20gdGhlIHJldHJhbnNtaXQgY3Jhd2wgdGhlIGJyb2tlbiBnYXRlIGxlYXZlcztcbiYjNDM7XHQjIHRoZSBhdmVyYWdlIGdhdGUgcHJvdmVzIHRoZSBieXRlcyBhcnJpdmVkIHBlci1mcmFtZS5cbiYjNDM7XHRpZiBbICQoKHJfYjEgLSByX2IwKSkgLWx0IDEwMDAwMDAwMCBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IExBTi1zbGF2ZSBsb2NhbCBkZWxpdmVyeSBkZWdyYWRlZFwmIzM0OyBcXFxuJiM0MztcdFx0XHRcJiMzNDsocHJwMCBSWCBkZWx0YSAkKChyX2IxIC0gcl9iMCkpIGJ5dGVzIFx1MDAzYyAxMDAwMDAwMDApXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XHRpZiBbICQoKHJfYjEgLSByX2IwKSkgLWd0ICQoKCAocl9wMSAtIHJfcDApICogTEFOX0FWR19NQVggKSkgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBsb2NhbCBkZWxpdmVyeSBub3QgcGVyLWZyYW1lXCYjMzQ7IFxcXG4mIzQzO1x0XHRcdFwmIzM0OyhhdmcgJCgoIChyX2IxIC0gcl9iMCkgLyAocl9wMSAtIHJfcDApICkpIFx1MDAzZSAkTEFOX0FWR19NQVgpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuXG4mIzQzO1x0ZmlcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IExBTi1zbGF2ZSBsb2NhbCBkZWxpdmVyeSBwcnAwIFJYIGRlbHRhXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDskKChyX2IxIC0gcl9iMCkpIGJ5dGVzIC8gJCgocl9wMSAtIHJfcDApKSBwa3RzIFsgT0sgXVwmIzM0O1xuJiM0MztcdHJlYXBfaXBlcmZfc2VydmVyIHx8IHJldHVyblxuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogTEFOLXNsYXZlIHBsYWluLUdTTyByZWdyZXNzaW9uIFsgT0sgXVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztkb190c29fc3RyZWFtX3Rlc3QoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgb3V0IHNlbmRlcl9yZXRyXG4mIzQzO1x0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXG4mIzQzO1x0bG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSBiX2IwIGJfcDAgYl9iMSBiX3AxXG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cJiMzNDtcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX3NhblwmIzM0OyBcJiMzNDtldGh0b29sIC1LIHMwIHRzbyBvbiBnc28gb25cJiMzNDtcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19zYW5cJiMzNDsgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXG4mIzQzO1x0c3RvcF9pZl9lcnJvciBcJiMzNDtDb3VsZCBub3QgZW5hYmxlIFRTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cJiMzNDtcbiYjNDM7XHRzdGFydF9pcGVyZl9zZXJ2ZXIgXCYjMzQ7JG5zX3BlZXJcJiMzNDsgfHwgcmV0dXJuXG4mIzQzO1xuJiM0MztcdCMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZVxuJiM0MztcdCMgbXVzdCBleGNlZWQgU0FOX0FWR19NSU4gKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IEdTTyBzdXBlci1wYWNrZXRzXG4mIzQzO1x0IyByZWFsbHkgbGVmdCB0aGUgU0FOKTsgZWFjaCBEVVQgTEFOIGxlZyBtdXN0IHN0YXkgdW5kZXIgTEFOX0FWR19NQVhcbiYjNDM7XHQjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlXG4mIzQzO1x0IyBhcmUgYWdncmVnYXRlIGRpc2NyaW1pbmF0b3JzLCBub3QgYSBwZXItZnJhbWUgbWF4aW11bSBwcm9vZi5cbiYjNDM7XHRzYW5fYjA9MDsgc2FuX3AwPTA7IGFfYjA9MDsgYV9wMD0wOyBiX2IwPTA7IGJfcDA9MFxuJiM0MztcdHJlYWQgLXIgc2FuX2IwIHNhbl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19zYW5cJiMzNDsgczApXG4mIzQzO0VPRlxuJiM0MztcdHJlYWQgLXIgYV9iMCBhX3AwIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfdHhfY291bnRlcnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2EpXG4mIzQzO0VPRlxuJiM0MztcdHJlYWQgLXIgYl9iMCBiX3AwIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfdHhfY291bnRlcnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2IpXG4mIzQzO0VPRlxuJiM0MztcdGlmICEgdmFsaWRfZGVjaW1hbHMgXCYjMzQ7JHNhbl9iMFwmIzM0OyBcJiMzNDskc2FuX3AwXCYjMzQ7IFwmIzM0OyRhX2IwXCYjMzQ7IFwmIzM0OyRhX3AwXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDskYl9iMFwmIzM0OyBcJiMzNDskYl9wMFwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBiYXNlbGluZSBUWCBjb3VudGVyIHNuYXBzaG90IGludmFsaWRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdCMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eVxuJiM0MztcdCMgYWJvdmUsIG5vdCBtYXggdGhyb3VnaHB1dDsgcmV0cmFuc21pdHMgYXJlIGluZm9ybWF0aW9uYWwgb25seS5cbiYjNDM7XHQjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhXG4mIzQzO1x0IyBmdW5jdGlvbmFsIHByb2JsZW0uXG4mIzQzO1x0aWYgISBvdXQ9JChuc3ggXCYjMzQ7JG5zX3NhblwmIzM0OyBcJiMzNDt0aW1lb3V0IDYwIGlwZXJmMyAtYyAkcGVlcl9pcCAtTSAxNDQ2IFxcXG4mIzQzO1x0XHQtYiAyRyAtdCAxMFwmIzM0OyAyXHUwMDNlXHUwMDI2MSk7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIGNsaWVudCBmYWlsZWQ6XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyRvdXRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm5cbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQocmVhZF90eF9jb3VudGVycyBcJiMzNDskbnNfc2FuXCYjMzQ7IHMwKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIGFfYjEgYV9wMSBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9hKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIGJfYjEgYl9wMSBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iKVxuJiM0MztFT0ZcbiYjNDM7XHRpZiAhIHZhbGlkX2RlY2ltYWxzIFwmIzM0OyRzYW5fYjFcJiMzNDsgXCYjMzQ7JHNhbl9wMVwmIzM0OyBcJiMzNDskYV9iMVwmIzM0OyBcJiMzNDskYV9wMVwmIzM0OyBcXFxuJiM0MztcdFx0XCYjMzQ7JGJfYjFcJiMzNDsgXCYjMzQ7JGJfcDFcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRldmFsX2NvdW50ZXJfZGVsdGEgXCYjMzQ7U0FOIHMwIFRYXCYjMzQ7IFwmIzM0OyRzYW5fYjBcJiMzNDsgXCYjMzQ7JHNhbl9wMFwmIzM0OyBcJiMzNDskc2FuX2IxXCYjMzQ7IFwmIzM0OyRzYW5fcDFcJiMzNDsgXFxcbiYjNDM7XHRcdGd0IFwmIzM0OyRTQU5fQVZHX01JTlwmIzM0O1xuJiM0MztcdGV2YWxfY291bnRlcl9kZWx0YSBcJiMzNDtEVVQgZF9hIFRYXCYjMzQ7IFwmIzM0OyRhX2IwXCYjMzQ7IFwmIzM0OyRhX3AwXCYjMzQ7IFwmIzM0OyRhX2IxXCYjMzQ7IFwmIzM0OyRhX3AxXCYjMzQ7IFxcXG4mIzQzO1x0XHRsZSBcJiMzNDskTEFOX0FWR19NQVhcJiMzNDtcbiYjNDM7XHRldmFsX2NvdW50ZXJfZGVsdGEgXCYjMzQ7RFVUIGRfYiBUWFwmIzM0OyBcJiMzNDskYl9iMFwmIzM0OyBcJiMzNDskYl9wMFwmIzM0OyBcJiMzNDskYl9iMVwmIzM0OyBcJiMzNDskYl9wMVwmIzM0OyBcXFxuJiM0MztcdFx0bGUgXCYjMzQ7JExBTl9BVkdfTUFYXCYjMzQ7XG4mIzQzO1x0WyBcJiMzNDske3JldDotMH1cJiMzNDsgLWVxIDAgXSB8fCByZXR1cm5cbiYjNDM7XG4mIzQzO1x0IyBzdWNjZXNzIHBhdGg6IGJvdW5kZWQgcmVhcCB3aXRoIHRoZSBzZXJ2ZXImIzM5O3MgcmVhbCBzdGF0dXNcbiYjNDM7XHRyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm5cbiYjNDM7XG4mIzQzO1x0IyBzZWNvbmRhcnkgaGVhbHRoIHNpZ25hbCBvbmx5OiBhbmNob3JlZCwgc2luZ2xlLW1hdGNoLCBudW1lcmljIOKAlFxuJiM0MztcdCMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlclxuJiM0MztcdCMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLlxuJiM0MztcdHNlbmRlcl9yZXRyPSQoZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgYXdrICYjMzk7L3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0mIzM5OylcbiYjNDM7XHRpZiBbIFwmIzM0OyQoZWNobyBcJiMzNDskc2VuZGVyX3JldHJcJiMzNDsgfCBncmVwIC1FYyAmIzM5O15bMC05XSYjNDM7JCYjMzk7KVwmIzM0OyAtbmUgMSBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGNhbm5vdCBwYXJzZSBzZW5kZXIgcmV0cmFuc21pdHMgcmVsaWFibHlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7JG91dFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7XCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDtzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKVwmIzM0O1xuJiM0MztcdGVjaG8gXCYjMzQ7JG91dFwmIzM0OyB8IGdyZXAgLUUgXCYjMzQ7c2VuZGVyfHJlY2VpdmVyXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoZWNrX3ByZXJlcXVpc2l0ZXNcbiYjNDM7Y2hlY2tfdG9vbCBldGh0b29sXG4mIzQzO2NoZWNrX3Rvb2wgaXBlcmYzXG4mIzQzO2NoZWNrX3Rvb2wgdGltZW91dFxuJiM0MztcbiYjNDM7IyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LlxuJiM0MztpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xaSBpbnRlcmxpbms7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IGlwcm91dGUyIGhhcyBubyBIU1IgaW50ZXJsaW5rIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3NldHVwX3RvcG9cbiYjNDM7XG4mIzQzO2VjaG8gXCYjMzQ7SU5GTzogSW5pdGlhbCB2YWxpZGF0aW9uIHBpbmcgKFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgRFVUKS5cJiMzNDtcbiYjNDM7ZG9fcGluZyBcJiMzNDskbnNfc2FuXCYjMzQ7IFwmIzM0OyRwZWVyX2lwXCYjMzQ7XG4mIzQzO3N0b3BfaWZfZXJyb3IgXCYjMzQ7SW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC5cJiMzNDtcbiYjNDM7XG4mIzQzO2RvX2dyb19mZWF0dXJlX2NoZWNrc1xuJiM0Mztkb190c29fc3RyZWFtX3Rlc3RcbiYjNDM7c3RvcF9pZl9lcnJvciBcJiMzNDtHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC5cJiMzNDtcbiYjNDM7XG4mIzQzO2RvX2xhbnNhbl9nc29fdGVzdFxuJiM0MztzdG9wX2lmX2Vycm9yIFwmIzM0O0xBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbiBmYWlsZWQuXCYjMzQ7XG4mIzQzO1xuJiM0MztlY2hvIFwmIzM0O0lORk86IEFsbCBnb29kLlwmIzM0O1xuJiM0MztjbGVhbnVwXG4mIzQzO2V4aXQgJHJldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIU1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OywKICAgICYjMzQ7ZGV2X2Rpc2FibGVfZ3JvJiMzNDssCiAgICAmIzM0O25ldGlmX2Rpc2FibGVfZ3JvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHByb3RvY29sIHRvIGhhbmRsZSBHU08gc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byB0aGUgY29yZSBuZXR3b3JrIGRldmljZSBBUEkgdG8gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIGRldmljZSwgYW5kIHVzZXMgdGhpcyB0byBkaXNhYmxlIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcGFja2V0IHByb2Nlc3NpbmcgYW5kIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzRkYTE3ZTk2NjFkOWIzZDNhNTQ0NThiNDA1ZTdmZGY2YWQxNjJlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTc6NDA6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA5OTgxZDYzN2Y4YjU0Li5lYmEyYzI2YTQ5YmE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTM0MzQsNiAmIzQzOzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgbmV0aWZfY2xvc2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHVubGluayk7CiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKJiM0Mzt2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7CiB1MTYgZGV2X3BpY2tfdHhfemVybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1OTMzYzVkYWIwOWVlLi5mMjBkNWFiMGNmNzI5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTg0MCw2ICYjNDM7MTg0MCwyMSBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJfQogfQogCiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKJiM0MzsKJiM0MzsJZGV2LSZndDt3YW50ZWRfZmVhdHVyZXMgJmFtcDs9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7CiYjNDM7CW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKJiM0MzsKJiM0MzsJbmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikgewomIzQzOwkJbmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7CiYjNDM7CQluZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpOwomIzQzOwkJbmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qKgogICoJZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZQogICoJQGRldjogZGV2aWNlCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmMKaW5kZXggNDM3OTQ3ZGQwOGVkNS4uM2NhMjUxNWFkMDQ4NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2X2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hcGkuYwpAQCAtMjY5LDYgJiM0MzsyNjksMjcgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTsKIAomIzQzOy8qKgomIzQzOyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZQomIzQzOyAqIEBkZXY6IGRldmljZQomIzQzOyAqCiYjNDM7ICogQmVzdC1lZmZvcnQgZGlzYWJsZSBvZiBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldAomIzQzOyAqIGRldmljZS4gIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZAomIzQzOyAqIHBhY2tldHMgbWF5IGJlIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS4KJiM0MzsgKgomIzQzOyAqIFRoZSBkaXNhYmxlIGlzIGJlc3QtZWZmb3J0OiBhIGRldmljZSB3aXRoIGEgZml4ZWQtb24gZmVhdHVyZSAoZm9yCiYjNDM7ICogZXhhbXBsZSBHUk9fSFcgb24gYSB2aXJ0aW8tbmV0IGRldmljZSBuZWdvdGlhdGVkIHdpdGhvdXQKJiM0MzsgKiBWSVJUSU9fTkVUX0ZfQ1RSTF9HVUVTVF9PRkZMT0FEUykga2VlcHMgaXQgZW5hYmxlZC4gIENhbGxlcnMgdGhhdAomIzQzOyAqIG5lZWQgYSBoYXJkIGd1YXJhbnRlZSBtdXN0IGluc3BlY3QgdGhlIHJlc3VsdGluZyBmZWF0dXJlIHN0YXRlLgomIzQzOyAqLwomIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsJbmV0aWZfZGlzYWJsZV9ncm8oZGV2KTsKJiM0MzsJbmV0ZGV2X3VubG9ja19vcHMoZGV2KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pOwomIzQzOwogLyoqCiAgKiBkZXZfc2V0X3Byb21pc2N1aXR5KCkgLSB1cGRhdGUgcHJvbWlzY3VpdHkgY291bnQgb24gYSBkZXZpY2UKICAqIEBkZXY6IGRldmljZQpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwppbmRleCA1NTU1YjcxYWIxOWI1Li4yNDhjYmIxNDJlMjFlIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwpAQCAtMjMyLDkgJiM0MzsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXNrYi0mZ3Q7ZGV2ID0gbWFzdGVyLSZndDtkZXY7CiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCXNrYl9yZXNldF9tYWNfbGVuKHNrYik7Ci0JCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJCWhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAl9IGVsc2UgewogCQlkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMzM1LDYgJiM0MzszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsCiAJCWhzcl9zdGFnLSZndDtzZXF1ZW5jZV9uciA9IGh0b25zKGhzci0mZ3Q7c2VxdWVuY2VfbnIpOwogCQloc3ItJmd0O3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKIAl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gdHlwZTsKIAkvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqLwpAQCAtMzU2LDE0ICYjNDM7MzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwKIAkJZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94KTsKIAl9CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCkBAIC0zOTAsNiAmIzQzOzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJaHNyX3N0YWctJmd0O3NlcXVlbmNlX25yID0gaHRvbnMoaHNyLSZndDtzdXBfc2VxdWVuY2VfbnIpOwogCWhzci0mZ3Q7c3VwX3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7CiAKQEAgLTM5NywxMyAmIzQzOzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlciwKIAloc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTsKIAlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIG1hc3Rlci0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTsKLQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiB9CiAKIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb24KQEAgLTY1OSw3ICYjNDM7NjUyLDcgQEAgdm9pZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiAKIAlkZXYtJmd0O2h3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfAotCQkJICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8CiYjNDM7CQkJICAgTkVUSUZfRl9IV19DU1VNIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjsKIApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCmluZGV4IDA3NzQ5ODFhNjVjMTYuLmY0MjY5NGNmNDMwOTkgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9nc28uaCZndDsKICNpbmNsdWRlICYjMzQ7aHNyX21haW4uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2hzcl9mcmFtZXJlZy5oJiMzNDsKIApAQCAtNjIxLDkgJiM0Mzs2MjIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChwb3J0LSZndDt0eXBlID09IEhTUl9QVF9NQVNURVIgfHwKIAkgICAgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7CiAJCS8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovCi0JCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAkJZnJhbWUtJmd0O3NlcXVlbmNlX25yID0gaHNyLSZndDtzZXF1ZW5jZV9ucjsKIAkJaHNyLSZndDtzZXF1ZW5jZV9uciYjNDM7JiM0Mzs7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJfQogfQogCkBAIC03MzEsNyAmIzQzOzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsCiB9CiAKIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovCi12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiYjNDM7c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lOwogCkBAIC03NDYsOCAmIzQzOzc0OCw4IEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKIAkgKiBTbyBjaGVjayBhbmQgaW5jcmVtZW50IHN0YXRzIGZvciBtYXN0ZXIgcG9ydCBvbmx5IGhlcmUuCiAJICovCiAJaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUiB8fCBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHsKLQkJcG9ydC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9wYWNrZXRzJiM0MzsmIzQzOzsKLQkJcG9ydC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLSZndDtsZW47CiYjNDM7CQlERVZfU1RBVFNfSU5DKHBvcnQtJmd0O2RldiwgdHhfcGFja2V0cyk7CiYjNDM7CQlERVZfU1RBVFNfQUREKHBvcnQtJmd0O2RldiwgdHhfYnl0ZXMsIHNrYi0mZ3Q7bGVuKTsKIAl9CiAKIAlrZnJlZV9za2IoZnJhbWUuc2tiX2hzcik7CkBAIC03NTcsNiAmIzQzOzc1OSwxMDUgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQogCiBvdXRfZHJvcDoKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlwb3J0LSZndDtkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwlERVZfU1RBVFNfSU5DKHBvcnQtJmd0O2RldiwgdHhfZHJvcHBlZCk7CiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzbwomIzQzOyAqIGVhY2ggd2lyZSBmcmFtZSBnZXRzIGl0cyBvd24gSFNSL1BSUCB0YWcgYW5kIHNlcXVlbmNlIG51bWJlci4KJiM0MzsgKi8KJiM0MzsvKiBFZmZlY3RpdmUgZnJhbWUgcHJvdG9jb2wgb2YgYSAocG9zc2libHkgVkxBTi10YWdnZWQpIHNrYiwgb3IgMCB3aGVuCiYjNDM7ICogaXQgY2Fubm90IGJlIGRldGVybWluZWQgb3IgdGhlIHRhZ2dpbmcgZXhjZWVkcyB3aGF0IEhTUiBzdXBwb3J0cy4KJiM0MzsgKiBIU1Igc3VwcG9ydHMgb25lIDgwMi4xUSBDLXRhZyBvbmx5LCBtYXRjaGluZyBmaWxsX2ZyYW1lX2luZm8oKTogYW4KJiM0MzsgKiBhY2NlbGVyYXRlZCB0YWcgbXVzdCBiZSBhIEMtdGFnIHdpdGggYSBub24tVkxBTiBpbm5lciBwcm90b2NvbDsgYW4KJiM0MzsgKiBpbi1iYW5kIHRhZyBpcyB1bndyYXBwZWQgZXhhY3RseSBvbmNlIGFuZCBhIHJlc2lkdWFsIFZMQU4gRXRoZXJUeXBlCiYjNDM7ICogaXMgcmVqZWN0ZWQuIFJlYWQtb25seTsgbm8gc3RhdGUgaXMga2VwdCBiZXlvbmQgdGhlIGltbWVkaWF0ZQomIzQzOyAqIHByb3RvY29sIHZhbHVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBfX2JlMTYgaHNyX2dzb19lZmZlY3RpdmVfcHJvdG8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGhoZHIgZWg7CiYjNDM7CXN0cnVjdCB2bGFuX2hkciB2aDsKJiM0MzsJY29uc3Qgc3RydWN0IGV0aGhkciAqZXRoOwomIzQzOwljb25zdCBzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHI7CiYjNDM7CV9fYmUxNiBwcm90bzsKJiM0MzsKJiM0MzsJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKJiM0MzsJCS8qIEhTUiBzdXBwb3J0cyBvbmUgODAyLjFRIEMtdGFnIG9ubHkuICovCiYjNDM7CQlpZiAoc2tiLSZndDt2bGFuX3Byb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChldGhfdHlwZV92bGFuKHNrYi0mZ3Q7cHJvdG9jb2wpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHNrYi0mZ3Q7cHJvdG9jb2w7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXRoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKGVoKSwgJmFtcDtlaCk7CiYjNDM7CWlmICghZXRoKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXByb3RvID0gZXRoLSZndDtoX3Byb3RvOwomIzQzOwlpZiAoIWV0aF90eXBlX3ZsYW4ocHJvdG8pKQomIzQzOwkJcmV0dXJuIHByb3RvOwomIzQzOwlpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXZoZHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBFVEhfSExFTiwgc2l6ZW9mKHZoKSwgJmFtcDt2aCk7CiYjNDM7CWlmICghdmhkcikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwcm90byA9IHZoZHItJmd0O2hfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CiYjNDM7CWlmIChldGhfdHlwZV92bGFuKHByb3RvKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gcHJvdG87CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpzZWdzLCAqbmV4dDsKJiM0MzsJX19iZTE2IHByb3RvOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7CiYjNDM7CQloc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ29uZm9ybWluZyBwbGFpbi1wcm90b2NvbCBHU08gc3VwZXItcGFja2V0cyBjYXJyeSB0cmFpbGVyLWZyZWUKJiM0MzsJICogc2VuZGVyIHBheWxvYWQgYW5kIGFyZSBzZWdtZW50ZWQgaGVyZTogZWFjaCBzZWdtZW50IGlzIGRlbGl2ZXJlZAomIzQzOwkgKiBvciBmb3J3YXJkZWQgYXMgaXRzIG93biB3aXJlIGZyYW1lLCBvbiBhbnkgaW5ncmVzcyByb2xlLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZ2F0ZSBpcyBjb250ZW50LWJhc2VkLCBub3QgcG9ydC1iYXNlZC4gQW4gYWdncmVnYXRlIHdob3NlCiYjNDM7CSAqIGVmZmVjdGl2ZSBwcm90b2NvbCBpcyBFVEhfUF9IU1Igb3IgRVRIX1BfUFJQIGNhbm5vdCBiZSBzYWZlbHkKJiM0MzsJICogc2VnbWVudGVkIGFuZCBpcyBkcm9wcGVkLCBhcyBpcyBhbnkgc2tiIHdob3NlIGhlYWRlciBjYW5ub3QgYmUKJiM0MzsJICogcmVhZCBvciB3aG9zZSB0YWdnaW5nIGV4Y2VlZHMgdGhlIHNpbmdsZSA4MDIuMVEgQy10YWcgSFNSCiYjNDM7CSAqIHN1cHBvcnRzLiBXaXRoIE5FVElGX0ZfSFdfSFNSX1RBR19STSB0aGUgbG93ZXIgaGFzIGFscmVhZHkKJiM0MzsJICogc3RyaXBwZWQgdGhlIHRhZywgc28gc3VjaCBhZ2dyZWdhdGVzIGFycml2ZSBwbGFpbiBhbmQgYXJlCiYjNDM7CSAqIHNlZ21lbnRlZC4KJiM0MzsJICovCiYjNDM7CXByb3RvID0gaHNyX2dzb19lZmZlY3RpdmVfcHJvdG8oc2tiKTsKJiM0MzsJaWYgKCFwcm90bykKJiM0MzsJCWdvdG8gZHJvcF9nc287IC8qIGNsYXNzaWZpY2F0aW9uIGZhaWx1cmUsIGZhaWwtc2FmZSAqLwomIzQzOwlpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSB8fCBwcm90byA9PSBodG9ucyhFVEhfUF9QUlApKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsKJiM0MzsJLyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWUKJiM0MzsJICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb20KJiM0MzsJICogdGhlIGludGVybGluayBmb2xsb3dzIFJYIGNoZWNrc3VtIHNlbWFudGljcy4KJiM0MzsJICovCiYjNDM7CXNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUik7CiYjNDM7CWlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsKJiM0MzsJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJd2hpbGUgKHNlZ3MpIHsKJiM0MzsJCW5leHQgPSBzZWdzLSZndDtuZXh0OwomIzQzOwkJc2Vncy0mZ3Q7bmV4dCA9IE5VTEw7CiYjNDM7CQloc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpOwomIzQzOwkJc2VncyA9IG5leHQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO2Ryb3BfZ3NvOgomIzQzOwlERVZfU1RBVFNfSU5DKHBvcnQtJmd0O2RldiwgdHhfZHJvcHBlZCk7CiAJa2ZyZWVfc2tiKHNrYik7CiB9CmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9zbGF2ZS5jIGIvbmV0L2hzci9oc3Jfc2xhdmUuYwppbmRleCAwMWM3M2I0YjUwZGRkLi5hYTIxNTRiMTljMGI5IDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX3NsYXZlLmMKQEAgLTczLDE2ICYjNDM7NzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYikKIAl9CiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAotCS8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhCi0JICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuCi0JICovCi0JaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykgewotCQlzcGluX2xvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCQloc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCX0gZWxzZSB7Ci0JCWhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpOwotCX0KJiM0MzsJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7CiAKIGZpbmlzaF9jb25zdW1lOgogCXJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEOwpAQCAtMTcxLDYgJiM0MzsxNjIsMTEgQEAgc3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJZ290byBmYWlsX3J4X2hhbmRsZXI7CiAJZGV2X2Rpc2FibGVfbHJvKGRldik7CiAKJiM0MzsJLyogR1JPIGRpc2FibGluZyBpcyBiZXN0LWVmZm9ydDogZGV2aWNlcyB3aXRoIGZpeGVkLW9uCiYjNDM7CSAqIEdSTy9HUk9fSFcgY2Fubm90IGJlIGZvcmNlZCBvZmYuCiYjNDM7CSAqLwomIzQzOwlkZXZfZGlzYWJsZV9ncm8oZGV2KTsKJiM0MzsKIAlyZXR1cm4gMDsKIAogZmFpbF9yeF9oYW5kbGVyOgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKaW5kZXggMzFmYjkzMjZjZjUzMy4uMGQxMDU0NzZlN2M1MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCkBAIC0zLDYgJiM0MzszLDcgQEAKIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLgogCiBURVNUX1BST0dTIDo9IFwKJiM0MzsJaHNyX2dyb19zdXBlcnBhY2tldC5zaCBcCiAJaHNyX3Bpbmcuc2ggXAogCWhzcl9yZWRib3guc2ggXAogCWxpbmtfZmF1bHRzLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi5lYmNiZDlmYzQxZWM0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoCkBAIC0wLDAgJiM0MzsxLDYzMSBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyMKJiM0MzsjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czoKJiM0MzsjCiYjNDM7IyAgMS4gRW5zbGF2aW5nIGEgZGV2aWNlIHRvIGFuIEhTUiBtYXN0ZXIgZGlzYWJsZXMgR1JPIG9uIGl0CiYjNDM7IyAgICAgKGRldl9kaXNhYmxlX2dybygpKS4KJiM0MzsjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy4KJiM0MzsjICAzLiBBIFRDUCBzdHJlYW0gZnJvbSBhIFRTTy1lbmFibGVkIFNBTiAod2hpY2ggdGhlcmVmb3JlIGVtaXRzIEdTTwomIzQzOyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6CiYjNDM7IyAgICAgaW50ZXJmYWNlLWNvdW50ZXIgZGVsdGFzIHNob3cgc3VwZXItcGFja2V0LXNpemVkIGZyYW1lcyBsZWF2aW5nCiYjNDM7IyAgICAgdGhlIFNBTiBhbmQgcGVyLWZyYW1lLXNpemVkIHRyYWZmaWMgbGVhdmluZyB0aGUgRFVUJiMzOTtzIExBTiBwb3J0cy4KJiM0MzsjCiYjNDM7IyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6CiYjNDM7IwomIzQzOyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyCiYjNDM7IyAgJiM0MzstLS0tLS0tLS0tLSYjNDM7ICBpbnRlcmxpbmsgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgIExBTiBBL0IgICYjNDM7LS0tLS0tLS0tLS0mIzQzOwomIzQzOyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXwKJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHwKJiM0MzsjICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0mIzQzOwomIzQzOyMKJiM0MzsjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCYjMzk7cyBmb3J3YXJkIHBhdGgKJiM0MzsjIChpbnRlcmxpbmsgUlggLSZndDsgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kCiYjNDM7IyBmb3J3YXJkZWQgYnkgdGhlIERVVC4KJiM0MzsKJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoCiYjNDM7CiYjNDM7c2FuX2lwPSYjMzQ7MTAwLjY0LjAuMSYjMzQ7CiYjNDM7cGVlcl9pcD0mIzM0OzEwMC42NC4wLjMmIzM0OwomIzQzOwomIzQzOyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKToKJiM0MzsjIFNBTl9BVkdfTUlOIHByb3ZlcyBHU08gc3VwZXItcGFja2V0cyBsZWZ0IHRoZSBTQU47IExBTl9BVkdfTUFYIGlzIGEKJiM0MzsjIGd1YXJkIHdpdGggbWFyZ2luLCBub3QgdGhlIHByb3RvY29sIG1heGltdW0gKHNlZSBkb190c29fc3RyZWFtX3Rlc3QpLgomIzQzO1NBTl9BVkdfTUlOPTIwNDgKJiM0MztMQU5fQVZHX01BWD0xNTE0CiYjNDM7CiYjNDM7aXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MztzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7YWN0aXZlX3Nydl9ucz0mIzM0OyYjMzQ7CiYjNDM7d29ya2Rpcj0mIzM0OyYjMzQ7CiYjNDM7cGlkZmlsZT0mIzM0OyYjMzQ7CiYjNDM7bnNfZHV0PSYjMzQ7JiMzNDsKJiM0Mztuc19zYW49JiMzNDsmIzM0OwomIzQzO25zX3BlZXI9JiMzNDsmIzM0OwomIzQzO25zX2xzPSYjMzQ7JiMzNDsKJiM0MztyY2ZpbGU9JiMzNDsmIzM0OwomIzQzOwomIzQzOyMgRGVsZXRlIHRoZSBwZXItc2VydmVyIHByaXZhdGUgd29yayBkaXJlY3RvcnkgYW5kIHJlc2V0IGl0cwomIzQzOyMgdmFyaWFibGVzLiBDYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlYXAgYW5kIGZyb20gdGhlIEVYSVQKJiM0MzsjIHRyYXAsIHdoaWNoIG93bnMgYWxsIGZhaWx1cmUgcGF0aHMuCiYjNDM7Y2xlYW51cF93b3JrZGlyKCkKJiM0Mzt7CiYjNDM7CSMgcmVtb3ZlIG9ubHkgdGhlIGtub3duIG5vbi1lbXB0eSBwcml2YXRlIGRpcmVjdG9yeQomIzQzOwlpZiBbIC1uICYjMzQ7JHt3b3JrZGlyfSYjMzQ7IF0gJmFtcDsmYW1wOyBbIC1kICYjMzQ7JHt3b3JrZGlyfSYjMzQ7IF07IHRoZW4KJiM0MzsJCXJtIC1yZiAmIzM0OyR7d29ya2Rpcn0mIzM0OwomIzQzOwlmaQomIzQzOwl3b3JrZGlyPSYjMzQ7JiMzNDsKJiM0MzsJcGlkZmlsZT0mIzM0OyYjMzQ7CiYjNDM7CXJjZmlsZT0mIzM0OyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJIyBTZXJ2ZXIgY2xlYW51cCB0YXJnZXRzIG9ubHkgdGhlIG5hbWVzcGFjZSBvZiB0aGUgY3VycmVudGx5CiYjNDM7CSMgYWN0aXZlIHNlcnZlciAocmVjb3JkZWQgYnkgc3RhcnRfaXBlcmZfc2VydmVyKTsgYWZ0ZXIgYQomIzQzOwkjIHN1Y2Nlc3NmdWwgcmVhcCBub3RoaW5nIGlzIGFjdGl2ZS4KJiM0MzsJaWYgWyAtbiAmIzM0OyR7YWN0aXZlX3Nydl9uc30mIzM0OyBdOyB0aGVuCiYjNDM7CQkjIGV4YWN0LVBJRCBraWxsIG9ubHkgYWZ0ZXIgUkUtdmFsaWRhdGluZyBpZGVudGl0eSAoZ3VhcmRzCiYjNDM7CQkjIGFnYWluc3QgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApCiYjNDM7CQlpZiBbIC1uICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgXSAmYW1wOyZhbXA7IHZhbGlkX3NlcnZlcl9waWQgJiMzNDske2FjdGl2ZV9zcnZfbnN9JiMzNDsgJiMzNDske2lwZXJmX3BpZH0mIzM0OzsgdGhlbgomIzQzOwkJCWtpbGwgJiMzNDske2lwZXJmX3BpZH0mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwkJZmkKJiM0MzsJCWlwZXJmX3BpZD0mIzM0OyYjMzQ7CiYjNDM7CQlpZiBbIC1uICYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn0mIzM0OyBdOyB0aGVuCiYjNDM7CQkJIyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cwomIzQzOwkJCSMgYm91bmQgc28gYSBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyCiYjNDM7CQkJIyBoYW5nIGNsZWFudXAKJiM0MzsJCQlmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG8KJiM0MzsJCQkJa2lsbCAtMCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwgfHwgYnJlYWsKJiM0MzsJCQkJc2xlZXAgMC4xCiYjNDM7CQkJZG9uZQomIzQzOwkJCWtpbGwgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQkJd2FpdCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCQlzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7CQlmaQomIzQzOwkJIyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjMKJiM0MzsJCSMgcHJvY2Vzc2VzIHRoYXQgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgYWN0aXZlIHNlcnZlciBuZXRucywKJiM0MzsJCSMgcG9sbCBmb3IgYm91bmRlZCBleGl0LCB0aGVuIFNJR0tJTEwgYW55IHN1cnZpdm9yIGJlZm9yZQomIzQzOwkJIyB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmQgcGtpbGwgd291bGQgc2NhbgomIzQzOwkJIyB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuCiYjNDM7CQlsb2NhbCBfcCBfc3RpbGwKJiM0MzsJCWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDske2FjdGl2ZV9zcnZfbnN9JiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJCWlmIGlzX2lwZXJmM19waWQgJiMzNDskX3AmIzM0OzsgdGhlbgomIzQzOwkJCQlraWxsICYjMzQ7JF9wJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCQlmaQomIzQzOwkJZG9uZQomIzQzOwkJZm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvCiYjNDM7CQkJX3N0aWxsPTAKJiM0MzsJCQlmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzICYjMzQ7JHthY3RpdmVfc3J2X25zfSYjMzQ7IDImZ3Q7L2Rldi9udWxsKTsgZG8KJiM0MzsJCQkJaWYgaXNfaXBlcmYzX3BpZCAmIzM0OyRfcCYjMzQ7OyB0aGVuCiYjNDM7CQkJCQlfc3RpbGw9MQomIzQzOwkJCQkJYnJlYWsKJiM0MzsJCQkJZmkKJiM0MzsJCQlkb25lCiYjNDM7CQkJWyAmIzM0OyRfc3RpbGwmIzM0OyAtZXEgMCBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCQlzbGVlcCAwLjEKJiM0MzsJCWRvbmUKJiM0MzsJCWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDske2FjdGl2ZV9zcnZfbnN9JiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJCWlmIGlzX2lwZXJmM19waWQgJiMzNDskX3AmIzM0OzsgdGhlbgomIzQzOwkJCQlraWxsIC05ICYjMzQ7JF9wJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCQlmaQomIzQzOwkJZG9uZQomIzQzOwlmaQomIzQzOwlhY3RpdmVfc3J2X25zPSYjMzQ7JiMzNDsKJiM0MzsJY2xlYW51cF93b3JrZGlyCiYjNDM7CWNsZWFudXBfYWxsX25zCiYjNDM7fQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7Y2hlY2tfdG9vbCgpCiYjNDM7ewomIzQzOwlpZiAhIGNvbW1hbmQgLXYgJiMzNDskMSYjMzQ7ICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7U0tJUDogQ291bGQgbm90IHJ1biB0ZXN0IHdpdGhvdXQgJDEmIzM0OwomIzQzOwkJZXhpdCAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO25zeCgpCiYjNDM7ewomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JDEmIzM0OyBiYXNoIC1jICYjMzQ7JDImIzM0OwomIzQzO30KJiM0MzsKJiM0Mztpc19pcGVyZjNfcGlkKCkKJiM0Mzt7CiYjNDM7CVsgJiMzNDskKGNhdCAvcHJvYy8mIzM0OyQxJiMzNDsvY29tbSAyJmd0Oy9kZXYvbnVsbCkmIzM0OyA9ICYjMzQ7aXBlcmYzJiMzNDsgXQomIzQzO30KJiM0MzsKJiM0MzsjIEJvdW5kZWQgcmVhcCBvZiB0aGUgb25lLXNob3Qgc2VydmVyOiB3YWl0IGF0IG1vc3QgNXMgZm9yIGl0IHRvCiYjNDM7IyBleGl0LCB0aGVuIHJlYXAgdGhlIHdyYXBwZXIgYW5kIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIGl0cyByZWFsCiYjNDM7IyBzdGF0dXMuIEEgc3R1Y2sgc2VydmVyIGNhbiBuZXZlciBoYW5nIHRoZSBzY3JpcHQuCiYjNDM7cmVhcF9pcGVyZl9zZXJ2ZXIoKQomIzQzO3sKJiM0MzsJbG9jYWwgc2VydmVyX3JjCiYjNDM7CiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJa2lsbCAtMCAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8IGJyZWFrCiYjNDM7CQlzbGVlcCAwLjEKJiM0MzsJZG9uZQomIzQzOwlpZiBraWxsIC0wICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgZXhpdCB3aXRoaW4gNXMmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CXdhaXQgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7CiYjNDM7CXNlcnZlcl93cmFwcGVyPSYjMzQ7JiMzNDsKJiM0MzsJaWYgWyAhIC1zICYjMzQ7JHtyY2ZpbGV9JiMzNDsgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgc3RhdHVzIGZpbGUgbWlzc2luZyAoJHtyY2ZpbGV9KSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJc2VydmVyX3JjPSQoY2F0ICYjMzQ7JHtyY2ZpbGV9JiMzNDspCiYjNDM7CWlmICEgW1sgJiMzNDskc2VydmVyX3JjJiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IFsgJiMzNDskc2VydmVyX3JjJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JiMzOTske3NlcnZlcl9yY30mIzM5OyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJaXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MzsJY2xlYW51cF93b3JrZGlyCiYjNDM7CWFjdGl2ZV9zcnZfbnM9JiMzNDsmIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIERlY2ltYWwtY291bnRlciB2YWxpZGF0aW9uIGZvciB0aGUgc25hcHNob3QgYmxvY2tzOiBldmVyeSB2YWx1ZSBtdXN0CiYjNDM7IyBiZSBhIHBsYWluIGRlY2ltYWwgbnVtYmVyLiBBIHBhcnNlIGZhaWx1cmUgaW4gcmVhZF90eF9jb3VudGVycyB5aWVsZHMKJiM0MzsjIGVtcHR5L2dhcmJsZWQgZmllbGRzLCB3aGljaCB0aGlzIGNoZWNrIHR1cm5zIGludG8gYW4gaW1tZWRpYXRlIEZBSUwuCiYjNDM7dmFsaWRfZGVjaW1hbHMoKQomIzQzO3sKJiM0MzsJbG9jYWwgdgomIzQzOwomIzQzOwlmb3IgdiBpbiAmIzM0OyRAJiMzNDs7IGRvCiYjNDM7CQlbWyAmIzM0OyR2JiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IHJldHVybiAxCiYjNDM7CWRvbmUKJiM0MzsJcmV0dXJuIDAKJiM0Mzt9CiYjNDM7CiYjNDM7c2V0dXBfdG9wbygpCiYjNDM7ewomIzQzOwlzZXR1cF9ucyBuc19kdXQgbnNfc2FuIG5zX3BlZXIgfHwgZXhpdCAkPwomIzQzOwomIzQzOwlpcCBsaW5rIGFkZCBkX2EgbmV0bnMgJiMzNDskbnNfZHV0JiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2EgbmV0bnMgJiMzNDskbnNfcGVlciYjMzQ7CiYjNDM7CWlwIGxpbmsgYWRkIGRfYiBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyAmIzM0OyRuc19wZWVyJiMzNDsKJiM0MzsJaXAgbGluayBhZGQgZF9pbCBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zICYjMzQ7JG5zX3NhbiYjMzQ7CiYjNDM7CiYjNDM7CSMgSFNSIHRhZ3MgYWRkIDYgYnl0ZXMgcGVyIGZyYW1lOyBnaXZlIHRoZSBMQU4gbGVncyBoZWFkcm9vbS4KJiM0MzsJZm9yIGlmYWNlIGluIGRfYSBkX2I7IGRvCiYjNDM7CQluc3ggJiMzNDskbnNfZHV0JiMzNDsgJiMzNDtpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFwKJiM0MzsJCQlpcCBsaW5rIHNldCAkaWZhY2UgdXAmIzM0OwomIzQzOwlkb25lCiYjNDM7CWZvciBpZmFjZSBpbiBwX2EgcF9iOyBkbwomIzQzOwkJbnN4ICYjMzQ7JG5zX3BlZXImIzM0OyAmIzM0O2lwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgXAomIzQzOwkJCWlwIGxpbmsgc2V0ICRpZmFjZSB1cCYjMzQ7CiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBzZXQgZF9pbCB1cCYjMzQ7CiYjNDM7CW5zeCAmIzM0OyRuc19zYW4mIzM0OyAmIzM0O2lwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMCYjMzQ7CiYjNDM7CiYjNDM7CW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgYWRkIGhzcjAgdHlwZSBoc3IgXAomIzQzOwkJc2xhdmUxIGRfYSBzbGF2ZTIgZF9iIGludGVybGluayBkX2lsIHByb3RvIDA7IFwKJiM0MzsJCWlwIGxpbmsgc2V0IGhzcjAgdXAmIzM0OwomIzQzOwluc3ggJiMzNDskbnNfcGVlciYjMzQ7ICYjMzQ7aXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcCiYjNDM7CQlzbGF2ZTEgcF9hIHNsYXZlMiBwX2IgcHJvdG8gMDsgXAomIzQzOwkJaXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjEmIzM0OwomIzQzOwomIzQzOwkjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXImIzM5O3Mgc3VwZXJ2aXNpb24gZnJhbWVzLgomIzQzOwlzbGVlcCAyCiYjNDM7fQomIzQzOwomIzQzO2NoZWNrX2ZlYXR1cmUoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGlmYWNlPSYjMzQ7JDImIzM0OwomIzQzOwlsb2NhbCBmZWF0dXJlPSYjMzQ7JDMmIzM0OwomIzQzOwlsb2NhbCB3YW50PSYjMzQ7JDQmIzM0OwomIzQzOwomIzQzOwlpZiBuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2V0aHRvb2wgLWsgJGlmYWNlJiMzNDsgfCBncmVwIC1xICYjMzQ7XiRmZWF0dXJlOiAkd2FudCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF0mIzM0OwomIzQzOwllbHNlCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7IyBPZmYtb3ItYWJzZW50IHZhcmlhbnQ6IGZhaWxzIG9ubHkgd2hlbiB0aGUgZmVhdHVyZSBpcyBwcmVzZW50IEFORCBvbiwKJiM0MzsjIHNvIGRldmljZXMgdGhhdCBzaW1wbHkgZG8gbm90IGxpc3QgdGhlIGZlYXR1cmUgZG8gbm90IGZhaWwgaXQuCiYjNDM7Y2hlY2tfZmVhdHVyZV9ub3Rfb24oKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGlmYWNlPSYjMzQ7JDImIzM0OwomIzQzOwlsb2NhbCBmZWF0dXJlPSYjMzQ7JDMmIzM0OwomIzQzOwomIzQzOwlpZiBuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2V0aHRvb2wgLWsgJGlmYWNlJiMzNDsgfCBncmVwIC1xICYjMzQ7XiRmZWF0dXJlOiBvbiYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBvbiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwllbHNlCiYjNDM7CQllY2hvICYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdJiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKCkKJiM0Mzt7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy4mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2IgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9pbCBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0dSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy4mIzM0OwomIzQzOwomIzQzOwllY2hvICYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBIVy1HUk8uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2EgcngtZ3JvLWh3IG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYiByeC1ncm8taHcgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9pbCByeC1ncm8taHcgb2ZmCiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuJiMzNDsKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmVfbm90X29uICYjMzQ7JG5zX2R1dCYjMzQ7IGhzcjAgdHgtdWRwLXNlZ21lbnRhdGlvbgomIzQzOwljaGVja19mZWF0dXJlX25vdF9vbiAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIHR4LWdzby1saXN0CiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPLWZhbWlseSBmZWF0dXJlcy4mIzM0OwomIzQzO30KJiM0MzsKJiM0MzthbGxvY193b3JrZGlyKCkKJiM0Mzt7CiYjNDM7CSMgQWxsb2NhdGVkIG9ubHkgaGVyZSwgbG9uZyBhZnRlciB0aGUgaW5pdGlhbCB0b3BvbG9neSBjbGVhbnVwLCBzbwomIzQzOwkjIGNsZWFudXAoKSBhdCBzZXR1cF90b3BvKCkgdGltZSBjYW4gbmV2ZXIgcmVtb3ZlIGl0LiBta3RlbXAgZmFpbHVyZQomIzQzOwkjIGlzIGEgaGFyZCB0ZXN0IGZhaWx1cmUuCiYjNDM7CXdvcmtkaXI9JChta3RlbXAgLWQgL3RtcC9oc3JfZ3JvX3Rlc3QuWFhYWFhYKSB8fCB7CiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbWt0ZW1wIC1kIGZhaWxlZCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0IDEKJiM0MzsJfQomIzQzOwljaG1vZCA3MDAgJiMzNDske3dvcmtkaXJ9JiMzNDsKJiM0MzsJcGlkZmlsZT0mIzM0OyR7d29ya2Rpcn0vaXBlcmYucGlkJiMzNDsKJiM0MzsJcmNmaWxlPSYjMzQ7JHt3b3JrZGlyfS9pcGVyZi5yYyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzOyMgTnVtZXJpYywgYWxpdmUsIGNvbW0gPT0gaXBlcmYzLCBhbmQgcmVhbGx5IG93bmVkIGJ5IHRoZSBnaXZlbiBuZXRucy4KJiM0Mzt2YWxpZF9zZXJ2ZXJfcGlkKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHBucz0mIzM0OyQxJiMzNDsgcD0mIzM0OyQyJiMzNDsKJiM0MzsKJiM0MzsJW1sgJiMzNDskcCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCByZXR1cm4gMQomIzQzOwlraWxsIC0wICYjMzQ7JHAmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCByZXR1cm4gMQomIzQzOwlbICYjMzQ7JChjYXQgL3Byb2MvJiMzNDskcCYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF0gfHwgcmV0dXJuIDEKJiM0MzsJaXAgbmV0bnMgcGlkcyAmIzM0OyRwbnMmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IGdyZXAgLXF4ICYjMzQ7JHAmIzM0OwomIzQzO30KJiM0MzsKJiM0MztzdGFydF9pcGVyZl9zZXJ2ZXIoKQomIzQzO3sKJiM0MzsJbG9jYWwgc3J2X25zPSYjMzQ7JDEmIzM0OwomIzQzOwlsb2NhbCBzcnZfaXA9JiMzNDskezI6LX0mIzM0OwomIzQzOwlsb2NhbCBjYW5kaWRhdGVfcGlkCiYjNDM7CiYjNDM7CSMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHMKJiM0MzsJIyByZWFsIGV4aXQgc3RhdHVzIChuZXRucyBzaGFyZXMgdGhlIFBJRCBuYW1lc3BhY2UgYW5kIHRoZSBob3N0IGZzKS4KJiM0MzsJYWxsb2Nfd29ya2RpcgomIzQzOwkjIHJlY29yZCB0aGUgc2VydmVyIG5hbWVzcGFjZSBmb3IgY2xlYW51cCgpIGJlZm9yZQomIzQzOwkjIGFueXRoaW5nIGNhbiBmYWlsIHdpdGggdGhlIHNlcnZlciBydW5uaW5nCiYjNDM7CWFjdGl2ZV9zcnZfbnM9JiMzNDskc3J2X25zJiMzNDsKJiM0MzsJKCBuc3ggJiMzNDskc3J2X25zJiMzNDsgJiMzNDtpcGVyZjMgLXMgLTEgJHtzcnZfaXA6JiM0MzstQiAkc3J2X2lwfSAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MSAmYW1wOyBcCiYjNDM7CQllY2hvIFwkISAmZ3Q7ICR7cGlkZmlsZX07IFwKJiM0MzsJCXdhaXQgXCQhOyBcCiYjNDM7CQllY2hvIFwkPyAmZ3Q7ICR7cmNmaWxlfSYjMzQ7ICkgJmFtcDsKJiM0MzsJc2VydmVyX3dyYXBwZXI9JCEKJiM0MzsJIyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvCiYjNDM7CSMgYXBwZWFyIGluc3RlYWQgb2YgcmFjaW5nIHRoZSByZWFkCiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJWyAtcyAmIzM0OyR7cGlkZmlsZX0mIzM0OyBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCXNsZWVwIDAuMQomIzQzOwlkb25lCiYjNDM7CWlmIFsgISAtcyAmIzM0OyR7cGlkZmlsZX0mIzM0OyBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQmIzM0OyBcCiYjNDM7CQkJJiMzNDsobm8gcGlkZmlsZSkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWNhbmRpZGF0ZV9waWQ9JCgmbHQ7JiMzNDske3BpZGZpbGV9JiMzNDspCiYjNDM7CWlmICEgdmFsaWRfc2VydmVyX3BpZCAmIzM0OyRzcnZfbnMmIzM0OyAmIzM0OyR7Y2FuZGlkYXRlX3BpZH0mIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgcGlkICYjMzk7JHtjYW5kaWRhdGVfcGlkfSYjMzk7JiMzNDsgXAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHZhbGlkYXRpb24mIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CSMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvbgomIzQzOwlpcGVyZl9waWQ9JiMzNDske2NhbmRpZGF0ZV9waWR9JiMzNDsKJiM0MzsJc2xlZXAgMQomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIFByaW50ICYjMzQ7Jmx0O2J5dGVzJmd0OyAmbHQ7cGFja2V0cyZndDsmIzM0OyBmb3IgZXhhY3RseSBvbmUgVFggcmVjb3JkIG9mIG5zL2RldjsgYW55dGhpbmcKJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC4KJiM0MztyZWFkX3R4X2NvdW50ZXJzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSYjMzQ7JDEmIzM0OyBkZXY9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIG91dCBjbnQKJiM0MzsKJiM0MzsJb3V0PSQobnN4ICYjMzQ7JG5zJiMzNDsgJiMzNDtpcCAtcyBsaW5rIHNob3cgJGRldiYjMzQ7IHwgXAomIzQzOwkJYXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OykKJiM0MzsJY250PSQoZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLWMgJiMzOTteWzAtOV0qIFswLTldKiQmIzM5OykKJiM0MzsJaWYgWyAmIzM0OyRjbnQmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2JiMzNDsgXAomIzQzOwkJCSYjMzQ7KHJlY29yZHM9JGNudCkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJZWNobyAmIzM0OyRvdXQmIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIFByaW50ICYjMzQ7Jmx0O2J5dGVzJmd0OyAmbHQ7cGFja2V0cyZndDsmIzM0OyBmb3IgZXhhY3RseSBvbmUgUlggcmVjb3JkIG9mIG5zL2RldjsgdGhlCiYjNDM7IyBzYW1lIHNpbmdsZS1yZWNvcmQgZGlzY2lwbGluZSBhcyByZWFkX3R4X2NvdW50ZXJzLgomIzQzO3JlYWRfcnhfY291bnRlcnMoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7IGRldj0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgb3V0IGNudAomIzQzOwomIzQzOwlvdXQ9JChuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2lwIC1zIGxpbmsgc2hvdyAkZGV2JiMzNDsgfCBcCiYjNDM7CQlhd2sgJiMzOTsvXiAmIzQzO1JYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfSYjMzk7KQomIzQzOwljbnQ9JChlY2hvICYjMzQ7JG91dCYjMzQ7IHwgZ3JlcCAtYyAmIzM5O15bMC05XSogWzAtOV0qJCYjMzk7KQomIzQzOwlpZiBbICYjMzQ7JGNudCYjMzQ7IC1uZSAxIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBjYW5ub3QgcGFyc2UgUlggY291bnRlcnMgb2YgJG5zLyRkZXYmIzM0OyBcCiYjNDM7CQkJJiMzNDsocmVjb3Jkcz0kY250KSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwllY2hvICYjMzQ7JG91dCYjMzQ7CiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwomIzQzO2V2YWxfY291bnRlcl9kZWx0YSgpCiYjNDM7ewomIzQzOwlsb2NhbCBuYW1lPSYjMzQ7JDEmIzM0OyBiMD0mIzM0OyQyJiMzNDsgcDA9JiMzNDskMyYjMzQ7IGIxPSYjMzQ7JDQmIzM0OyBwMT0mIzM0OyQ1JiMzNDsgb3A9JiMzNDskNiYjMzQ7IGxpbWl0PSYjMzQ7JDcmIzM0OwomIzQzOwlsb2NhbCBiZCBwZAomIzQzOwomIzQzOwlpZiAhIFtbICYjMzQ7JGIwJiMzNDsgPX4gXlswLTldJiM0MzskICZhbXA7JmFtcDsgJiMzNDskYjEmIzM0OyA9fiBeWzAtOV0mIzQzOyQgJmFtcDsmYW1wOyBcCiYjNDM7CQkmIzM0OyRwMCYjMzQ7ID1+IF5bMC05XSYjNDM7JCAmYW1wOyZhbXA7ICYjMzQ7JHAxJiMzNDsgPX4gXlswLTldJiM0MzskIF1dOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWUmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWJkPSQoKGIxIC0gYjApKQomIzQzOwlwZD0kKChwMSAtIHAwKSkKJiM0MzsJaWYgWyAmIzM0OyRiZCYjMzQ7IC1sdCAwIF0gfHwgWyAmIzM0OyRwZCYjMzQ7IC1sZSAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBjb3VudGVyIGRlbHRhIGludmFsaWQgZm9yICRuYW1lJiMzNDsgXAomIzQzOwkJCSYjMzQ7KGJ5dGVzPSRiZCBwa3RzPSRwZCkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWlmIFsgJiMzNDskb3AmIzM0OyA9ICYjMzQ7Z3QmIzM0OyBdOyB0aGVuCiYjNDM7CQlpZiBbICYjMzQ7JGJkJiMzNDsgLWxlICQoKHBkICogbGltaXQpKSBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0O0ZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCAmbHQ7PSAkbGltaXQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJCXJldD0xCiYjNDM7CQkJcmV0dXJuIDEKJiM0MzsJCWZpCiYjNDM7CWVsc2UKJiM0MzsJCWlmIFsgJiMzNDskYmQmIzM0OyAtZ3QgJCgocGQgKiBsaW1pdCkpIF07IHRoZW4KJiM0MzsJCQllY2hvICYjMzQ7RkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkICZndDsgJGxpbWl0JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCQlyZXQ9MQomIzQzOwkJCXJldHVybiAxCiYjNDM7CQlmaQomIzQzOwlmaQomIzQzOwllY2hvICYjMzQ7SU5GTzogJG5hbWUgY291bnRlciBkZWx0YSBieXRlcz0kYmQgcGFja2V0cz0kcGQmIzM0OyBcCiYjNDM7CQkmIzM0OyhvcCAkb3AgbGltaXQgJGxpbWl0KSBbIE9LIF0mIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbjogYSBwbGFpbiBTQU4gYWdncmVnYXRlIGVudGVyaW5nIGEgUFJQCiYjNDM7IyBMQU4gc2xhdmUgbXVzdCBiZSBzZWdtZW50ZWQgYXQgdGhlIGZvcndhcmQgZW50cnksIG5vdCBkcm9wcGVkLiBQUlAKJiM0MzsjIGRyb3BzIHNsYXZlLXRvLXNsYXZlIGZvcndhcmRpbmcgYnkgZGVzaWduIChwcnBfZHJvcF9mcmFtZSksIHNvIHRoZQomIzQzOyMgY29uc3VtZXIgb2YgTEFOLXNsYXZlIFNBTiB0cmFmZmljIGlzIGxvY2FsIGRlbGl2ZXJ5IHRvIHRoZSBtYXN0ZXIuCiYjNDM7IyBUd28gaW5kZXBlbmRlbnQgb3JhY2xlczogdGhlIFNBTi1zaWRlIHByb29mIHRoYXQgYWdncmVnYXRlcyByZWFsbHkKJiM0MzsjIGFycml2ZWQgYXQgdGhlIERVVCwgYW5kIHRoZSB2b2x1bWUgJiM0MzsgcGVyLWZyYW1lIHNoYXBlIG9mIHRoZSBsb2NhbAomIzQzOyMgZGVsaXZlcnkuIE9uIHRoZSBicm9rZW4gZ2F0ZSB0aGUgYWdncmVnYXRlcyBhcmUgZHJvcHBlZCBhbmQgVENQCiYjNDM7IyBjcmF3bHMgb24gcmV0cmFuc21pdHRlZCBzaW5nbGUgc2VnbWVudHMsIHNlcGFyYXRpbmcgdGhlIGtlcm5lbHMgYnkKJiM0MzsjIGFuIG9yZGVyIG9mIG1hZ25pdHVkZSBpbiBkZWxpdmVyZWQgYnl0ZXMuCiYjNDM7ZG9fbGFuc2FuX2dzb190ZXN0KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHBycF9pcD0mIzM0OzEwLjk5LjEuMSYjMzQ7IGxzX2lwPSYjMzQ7MTAuOTkuMS4xMCYjMzQ7CiYjNDM7CWxvY2FsIG91dCBzYW5fYjAgc2FuX3AwIHNhbl9iMSBzYW5fcDEKJiM0MzsJbG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSByX2IwIHJfcDAgcl9iMSByX3AxCiYjNDM7CiYjNDM7CXNldHVwX25zIG5zX2xzIHx8IGV4aXQgJD8KJiM0MzsKJiM0MzsJaXAgbGluayBhZGQgZF9wYSBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIGxzX2EgbmV0bnMgJiMzNDskbnNfbHMmIzM0OwomIzQzOwlpcCBsaW5rIGFkZCBkX3BiIG5ldG5zICYjMzQ7JG5zX2R1dCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgbHNfcCBuZXRucyAmIzM0OyRuc19scyYjMzQ7CiYjNDM7CiYjNDM7CW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgc2V0IGRfcGEgbXR1IDE2MDAgdXAmIzM0OwomIzQzOwluc3ggJiMzNDskbnNfZHV0JiMzNDsgJiMzNDtpcCBsaW5rIHNldCBkX3BiIG10dSAxNjAwIHVwJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX2xzJiMzNDsgJiMzNDtpcCBsaW5rIHNldCBsc19hIG10dSAxNjAwIHVwOyBcCiYjNDM7CQlpcCBsaW5rIHNldCBsc19wIG10dSAxNjAwIHVwOyBpcCBhZGRyIGFkZCAkbHNfaXAvMjQgZGV2IGxzX2EmIzM0OwomIzQzOwomIzQzOwkjIFBSUCBEVVQgd2l0aCB0aGUgU0FOIG9uIGEgTEFOIHNsYXZlOiBwbGFpbiBTQU4gYWdncmVnYXRlcyBhcmUKJiM0MzsJIyB2YWxpZCB0cmFmZmljIG9uIGEgUFJQIExBTiBhbmQgbXVzdCBub3QgYmUgZHJvcHBlZC4KJiM0MzsJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBhZGQgcHJwMCB0eXBlIGhzciBcCiYjNDM7CQlzbGF2ZTEgZF9wYSBzbGF2ZTIgZF9wYiBwcm90byAxOyBcCiYjNDM7CQlpcCBsaW5rIHNldCBwcnAwIHVwOyBpcCBhZGRyIGFkZCAkcHJwX2lwLzI0IGRldiBwcnAwJiMzNDsKJiM0MzsKJiM0MzsJIyBMZXQgc3VwZXJ2aXNpb24gZnJhbWVzIGNvbnZlcmdlLgomIzQzOwlzbGVlcCAyCiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBFbmFibGluZyBUU08vR1NPIG9uIHRoZSBMQU4tc2lkZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CW5zeCAmIzM0OyRuc19scyYjMzQ7ICYjMzQ7ZXRodG9vbCAtSyBsc19hIHRzbyBvbiBnc28gb24mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2xzJiMzNDsgbHNfYSB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb24KJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0NvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBMQU4tc2lkZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CiYjNDM7CXN0YXJ0X2lwZXJmX3NlcnZlciAmIzM0OyRuc19kdXQmIzM0OyAmIzM0OyRwcnBfaXAmIzM0OyB8fCByZXR1cm4KJiM0MzsKJiM0MzsJcmVhZCAtciByX2IwIHJfcDAgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfcnhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgcHJwMCkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBzYW5fYjAgc2FuX3AwICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX2xzJiMzNDsgbHNfYSkKJiM0MztFT0YKJiM0MzsJaWYgISB2YWxpZF9kZWNpbWFscyAmIzM0OyRyX2IwJiMzNDsgJiMzNDskcl9wMCYjMzQ7ICYjMzQ7JHNhbl9iMCYjMzQ7ICYjMzQ7JHNhbl9wMCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogYmFzZWxpbmUgY291bnRlciBzbmFwc2hvdCBpbnZhbGlkJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwomIzQzOwlpZiAhIG91dD0kKG5zeCAmIzM0OyRuc19scyYjMzQ7ICYjMzQ7dGltZW91dCA2MCBpcGVyZjMgLWMgJHBycF9pcCAtTSAxNDQ2IFwKJiM0MzsJCS1iIDJHIC10IDEwJiMzNDsgMiZndDsmYW1wOzEpOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogTEFOLXNsYXZlIEdTTyBsb2NhbC1kZWxpdmVyeSBzdHJlYW0gZmFpbGVkOiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CXJlYWQgLXIgcl9iMSByX3AxICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3J4X2NvdW50ZXJzICYjMzQ7JG5zX2R1dCYjMzQ7IHBycDApCiYjNDM7RU9GCiYjNDM7CXJlYWQgLXIgc2FuX2IxIHNhbl9wMSAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19scyYjMzQ7IGxzX2EpCiYjNDM7RU9GCiYjNDM7CWlmICEgdmFsaWRfZGVjaW1hbHMgJiMzNDskcl9iMSYjMzQ7ICYjMzQ7JHJfcDEmIzM0OyAmIzM0OyRzYW5fYjEmIzM0OyAmIzM0OyRzYW5fcDEmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGZpbmFsIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsKJiM0MzsJIyBPcmFjbGUgMSAtIGFnZ3JlZ2F0ZXMgcmVhbGx5IGFycml2ZWQ6IHRoZSBTQU4gZW1pdHRlZAomIzQzOwkjIHN1cGVyLXBhY2tldHMgdG93YXJkIHRoZSBEVVQuCiYjNDM7CWV2YWxfY291bnRlcl9kZWx0YSAmIzM0O1NBTiBsc19hIFRYJiMzNDsgJiMzNDskc2FuX2IwJiMzNDsgJiMzNDskc2FuX3AwJiMzNDsgXAomIzQzOwkJJiMzNDskc2FuX2IxJiMzNDsgJiMzNDskc2FuX3AxJiMzNDsgZ3QgJiMzNDskU0FOX0FWR19NSU4mIzM0OwomIzQzOwlbICYjMzQ7JHtyZXQ6LTB9JiMzNDsgLWVxIDAgXSB8fCByZXR1cm4KJiM0MzsKJiM0MzsJIyBPcmFjbGUgMiAtIGxvY2FsIGRlbGl2ZXJ5IG9mIHRob3NlIGFnZ3JlZ2F0ZXM6IHZvbHVtZSBhbmQKJiM0MzsJIyBwZXItZnJhbWUgc2hhcGUgb24gdGhlIFBSUCBtYXN0ZXIuIFRoZSB2b2x1bWUgZ2F0ZSBzZXBhcmF0ZXMKJiM0MzsJIyBmdWxsIGRlbGl2ZXJ5IGZyb20gdGhlIHJldHJhbnNtaXQgY3Jhd2wgdGhlIGJyb2tlbiBnYXRlIGxlYXZlczsKJiM0MzsJIyB0aGUgYXZlcmFnZSBnYXRlIHByb3ZlcyB0aGUgYnl0ZXMgYXJyaXZlZCBwZXItZnJhbWUuCiYjNDM7CWlmIFsgJCgocl9iMSAtIHJfYjApKSAtbHQgMTAwMDAwMDAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBMQU4tc2xhdmUgbG9jYWwgZGVsaXZlcnkgZGVncmFkZWQmIzM0OyBcCiYjNDM7CQkJJiMzNDsocHJwMCBSWCBkZWx0YSAkKChyX2IxIC0gcl9iMCkpIGJ5dGVzICZsdDsgMTAwMDAwMDAwKSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWlmIFsgJCgocl9iMSAtIHJfYjApKSAtZ3QgJCgoIChyX3AxIC0gcl9wMCkgKiBMQU5fQVZHX01BWCApKSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbG9jYWwgZGVsaXZlcnkgbm90IHBlci1mcmFtZSYjMzQ7IFwKJiM0MzsJCQkmIzM0OyhhdmcgJCgoIChyX2IxIC0gcl9iMCkgLyAocl9wMSAtIHJfcDApICkpICZndDsgJExBTl9BVkdfTUFYKSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBMQU4tc2xhdmUgbG9jYWwgZGVsaXZlcnkgcHJwMCBSWCBkZWx0YSYjMzQ7IFwKJiM0MzsJCSYjMzQ7JCgocl9iMSAtIHJfYjApKSBieXRlcyAvICQoKHJfcDEgLSByX3AwKSkgcGt0cyBbIE9LIF0mIzM0OwomIzQzOwlyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm4KJiM0MzsJZWNobyAmIzM0O0lORk86IExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbiBbIE9LIF0mIzM0OwomIzQzO30KJiM0MzsKJiM0Mztkb190c29fc3RyZWFtX3Rlc3QoKQomIzQzO3sKJiM0MzsJbG9jYWwgb3V0IHNlbmRlcl9yZXRyCiYjNDM7CWxvY2FsIHNhbl9iMCBzYW5fcDAgc2FuX2IxIHNhbl9wMQomIzQzOwlsb2NhbCBhX2IwIGFfcDAgYV9iMSBhX3AxIGJfYjAgYl9wMCBiX2IxIGJfcDEKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IEVuYWJsaW5nIFRTTy9HU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7ZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19zYW4mIzM0OyBzMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb24KJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0NvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtJmd0OyBwZWVyIHRocm91Z2ggdGhlIEhTUiBEVVQuJiMzNDsKJiM0MzsJc3RhcnRfaXBlcmZfc2VydmVyICYjMzQ7JG5zX3BlZXImIzM0OyB8fCByZXR1cm4KJiM0MzsKJiM0MzsJIyBDb3VudGVyIHNuYXBzaG90cyBhcm91bmQgdGhlIHN0cmVhbSB3aW5kb3cuIFRoZSBTQU4tc2lkZSBhdmVyYWdlCiYjNDM7CSMgbXVzdCBleGNlZWQgU0FOX0FWR19NSU4gKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IEdTTyBzdXBlci1wYWNrZXRzCiYjNDM7CSMgcmVhbGx5IGxlZnQgdGhlIFNBTik7IGVhY2ggRFVUIExBTiBsZWcgbXVzdCBzdGF5IHVuZGVyIExBTl9BVkdfTUFYCiYjNDM7CSMgKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IGJ1bGsgb3V0cHV0IHdhcyBzZWdtZW50ZWQgcGVyLWZyYW1lKS4gVGhlc2UKJiM0MzsJIyBhcmUgYWdncmVnYXRlIGRpc2NyaW1pbmF0b3JzLCBub3QgYSBwZXItZnJhbWUgbWF4aW11bSBwcm9vZi4KJiM0MzsJc2FuX2IwPTA7IHNhbl9wMD0wOyBhX2IwPTA7IGFfcDA9MDsgYl9iMD0wOyBiX3AwPTAKJiM0MzsJcmVhZCAtciBzYW5fYjAgc2FuX3AwICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX3NhbiYjMzQ7IHMwKQomIzQzO0VPRgomIzQzOwlyZWFkIC1yIGFfYjAgYV9wMCAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19kdXQmIzM0OyBkX2EpCiYjNDM7RU9GCiYjNDM7CXJlYWQgLXIgYl9iMCBiX3AwICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYikKJiM0MztFT0YKJiM0MzsJaWYgISB2YWxpZF9kZWNpbWFscyAmIzM0OyRzYW5fYjAmIzM0OyAmIzM0OyRzYW5fcDAmIzM0OyAmIzM0OyRhX2IwJiMzNDsgJiMzNDskYV9wMCYjMzQ7IFwKJiM0MzsJCSYjMzQ7JGJfYjAmIzM0OyAmIzM0OyRiX3AwJiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBiYXNlbGluZSBUWCBjb3VudGVyIHNuYXBzaG90IGludmFsaWQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CiYjNDM7CSMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eQomIzQzOwkjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuCiYjNDM7CSMgVW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJIGVkZ2UgcmF0ZXMgd2l0aG91dCBpbmRpY2F0aW5nIGEKJiM0MzsJIyBmdW5jdGlvbmFsIHByb2JsZW0uCiYjNDM7CWlmICEgb3V0PSQobnN4ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7dGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcCiYjNDM7CQktYiAyRyAtdCAxMCYjMzQ7IDImZ3Q7JmFtcDsxKTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBjbGllbnQgZmFpbGVkOiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CXJlYWQgLXIgc2FuX2IxIHNhbl9wMSAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19zYW4mIzM0OyBzMCkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBhX2IxIGFfcDEgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgZF9hKQomIzQzO0VPRgomIzQzOwlyZWFkIC1yIGJfYjEgYl9wMSAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19kdXQmIzM0OyBkX2IpCiYjNDM7RU9GCiYjNDM7CWlmICEgdmFsaWRfZGVjaW1hbHMgJiMzNDskc2FuX2IxJiMzNDsgJiMzNDskc2FuX3AxJiMzNDsgJiMzNDskYV9iMSYjMzQ7ICYjMzQ7JGFfcDEmIzM0OyBcCiYjNDM7CQkmIzM0OyRiX2IxJiMzNDsgJiMzNDskYl9wMSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtTQU4gczAgVFgmIzM0OyAmIzM0OyRzYW5fYjAmIzM0OyAmIzM0OyRzYW5fcDAmIzM0OyAmIzM0OyRzYW5fYjEmIzM0OyAmIzM0OyRzYW5fcDEmIzM0OyBcCiYjNDM7CQlndCAmIzM0OyRTQU5fQVZHX01JTiYjMzQ7CiYjNDM7CWV2YWxfY291bnRlcl9kZWx0YSAmIzM0O0RVVCBkX2EgVFgmIzM0OyAmIzM0OyRhX2IwJiMzNDsgJiMzNDskYV9wMCYjMzQ7ICYjMzQ7JGFfYjEmIzM0OyAmIzM0OyRhX3AxJiMzNDsgXAomIzQzOwkJbGUgJiMzNDskTEFOX0FWR19NQVgmIzM0OwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtEVVQgZF9iIFRYJiMzNDsgJiMzNDskYl9iMCYjMzQ7ICYjMzQ7JGJfcDAmIzM0OyAmIzM0OyRiX2IxJiMzNDsgJiMzNDskYl9wMSYjMzQ7IFwKJiM0MzsJCWxlICYjMzQ7JExBTl9BVkdfTUFYJiMzNDsKJiM0MzsJWyAmIzM0OyR7cmV0Oi0wfSYjMzQ7IC1lcSAwIF0gfHwgcmV0dXJuCiYjNDM7CiYjNDM7CSMgc3VjY2VzcyBwYXRoOiBib3VuZGVkIHJlYXAgd2l0aCB0aGUgc2VydmVyJiMzOTtzIHJlYWwgc3RhdHVzCiYjNDM7CXJlYXBfaXBlcmZfc2VydmVyIHx8IHJldHVybgomIzQzOwomIzQzOwkjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUCiYjNDM7CSMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlcgomIzQzOwkjIGdhdGVzICh0aGUgY291bnRlciBpbmVxdWFsaXRpZXMgYWJvdmUgYXJlIHRoZSBwcmltYXJ5IGV2aWRlbmNlKS4KJiM0MzsJc2VuZGVyX3JldHI9JChlY2hvICYjMzQ7JG91dCYjMzQ7IHwgYXdrICYjMzk7L3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0mIzM5OykKJiM0MzsJaWYgWyAmIzM0OyQoZWNobyAmIzM0OyRzZW5kZXJfcmV0ciYjMzQ7IHwgZ3JlcCAtRWMgJiMzOTteWzAtOV0mIzQzOyQmIzM5OykmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIHNlbmRlciByZXRyYW5zbWl0cyByZWxpYWJseSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7JiMzNDsgXAomIzQzOwkJJiMzNDtzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDskb3V0JiMzNDsgfCBncmVwIC1FICYjMzQ7c2VuZGVyfHJlY2VpdmVyJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hlY2tfcHJlcmVxdWlzaXRlcwomIzQzO2NoZWNrX3Rvb2wgZXRodG9vbAomIzQzO2NoZWNrX3Rvb2wgaXBlcmYzCiYjNDM7Y2hlY2tfdG9vbCB0aW1lb3V0CiYjNDM7CiYjNDM7IyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LgomIzQzO2lmICEgaXAgbGluayBoZWxwIGhzciAyJmd0OyZhbXA7MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydCYjMzQ7CiYjNDM7CWV4aXQgJGtzZnRfc2tpcAomIzQzO2ZpCiYjNDM7CiYjNDM7c2V0dXBfdG9wbwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC0mZ3Q7IHBlZXIgdGhyb3VnaCB0aGUgRFVUKS4mIzM0OwomIzQzO2RvX3BpbmcgJiMzNDskbnNfc2FuJiMzNDsgJiMzNDskcGVlcl9pcCYjMzQ7CiYjNDM7c3RvcF9pZl9lcnJvciAmIzM0O0luaXRpYWwgdmFsaWRhdGlvbiBmYWlsZWQuJiMzNDsKJiM0MzsKJiM0Mztkb19ncm9fZmVhdHVyZV9jaGVja3MKJiM0Mztkb190c29fc3RyZWFtX3Rlc3QKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7R1NPIHN1cGVyLXBhY2tldCBzdHJlYW0gdGVzdCBmYWlsZWQuJiMzNDsKJiM0MzsKJiM0Mztkb19sYW5zYW5fZ3NvX3Rlc3QKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7TEFOLXNsYXZlIHBsYWluLUdTTyByZWdyZXNzaW9uIGZhaWxlZC4mIzM0OwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBBbGwgZ29vZC4mIzM0OwomIzQzO2NsZWFudXAKJiM0MztleGl0ICRyZXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIU1IgR1NPIFN1cGVyLVBhY2tldCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYG5ldGlmX2Rpc2FibGVfZ3JvYCBhbmQgYGRldl9kaXNhYmxlX2dyb2AgaW50byB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBhZGRpdGlvbiB0byB0aGUgZGV2aWNlIEFQSSwgcmVhbGx5LiAgVGhlIG1haW4gdGhydXN0IHNlZW1zIHRvIGJlIGVuYWJsaW5nIEhTUiB0byBwcm9wZXJseSBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgSFNSIGZpbGVzOiBgaHNyX2RldmljZS5jYCwgYGhzcl9mb3J3YXJkLmNgLCBhbmQgYGhzcl9zbGF2ZS5jYC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGNoYW5nZXMgdG8gYGhzcl9mb3J3YXJkLmNgLiAgTGV0JiMzOTtzIHNlZS4uLgoKQWgsIHllcywgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQgR1NPIHNlZ21lbnRhdGlvbiB3aXRoaW4gYGhzcl9mb3J3YXJkX3NrYmAuICBJZiB0aGUgU0tCIGlzbiYjMzk7dCBhIEdTTyBwYWNrZXQsIGl0IGp1c3QgZm9yd2FyZHMgaXQgYXMtaXMuIE1ha2VzIHNlbnNlLiBCdXQgaWYgaXQgKmlzKiBhIEdTTyBwYWNrZXQsIGl0JiMzOTtzIHNlZ21lbnRlZCB1c2luZyBgX19za2JfZ3NvX3NlZ21lbnRgIGFuZCB0aGVuIGVhY2ggc2VnbWVudCBpcyBmb3J3YXJkZWQgaW5kaXZpZHVhbGx5LiBUaGF0JiMzOTtzIHRoZSBjb3JyZWN0IGFwcHJvYWNoLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgZGlzYWJsaW5nIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcyBpbiBgaHNyX3BvcnRkZXZfc2V0dXBgIHRvby4gIE1ha2VzIHNlbnNlLCB3ZSBjYW4mIzM5O3QgaGF2ZSBib3RoIEdSTyBhbmQgc2VnbWVudGF0aW9uLiAgVGhlIGNvbW1lbnQgbWVudGlvbnMgdGhhdCBkaXNhYmxpbmcgR1JPIGlzICYjMzQ7YmVzdC1lZmZvcnQsJiMzNDsgd2hpY2ggbWVhbnMgdGhlIGRyaXZlciBoYXMgdG8gcmVzcGVjdCBpdC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBhbmQgbWlnaHQgbmVlZCBtb3JlIGRpc2N1c3Npb24gcmVnYXJkaW5nIGhhcmR3YXJlIHN1cHBvcnQuCgpUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlLCBpbXBhY3RpbmcgYm90aCB0aGUgY29yZSBuZXR3b3JrIGRldmljZSBBUEkgKGBkZXZfZGlzYWJsZV9ncm9gKSBhbmQgaG93IEhTUiBvcGVyYXRlcyBpbnRlcm5hbGx5LgoKVGhlIGtleSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIGFib3V0IHRlc3RpbmcuIENhbiBIU1IgYmUgdGVzdGVkIGVmZmVjdGl2ZWx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIEdvb2QuIFRoZXkmIzM5O3ZlIGFkZGVkIGEgc2VsZnRlc3Qgc3BlY2lmaWNhbGx5IGZvciBgaHNyX2dyb19zdXBlcnBhY2tldC5zaGAuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24g4oCTIHRoYXQgbWVhbnMgaXQmIzM5O3MgZGVtb25zdHJhYmxlLiBJdCBzZWVtcyBsaWtlIHVzaW5nIHZldGggZGV2aWNlcyBzaG91bGQgd29yaywgc2luY2UgSFNSIGlzIGVzc2VudGlhbGx5IGEgc29mdHdhcmUtZGVmaW5lZCBwcm90b2NvbC4gIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxpY2F0ZSBpdCBsaWtlIGJvbmRpbmcgb3IgYnJpZGdpbmcuCgpOb3csIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IHRoZSBIU1IgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQgbWUgZ28gZmluZCBgbmV0L2hzci9LY29uZmlnYCB0byBjb25maXJtIGV2ZXJ5dGhpbmcgaXMgd2hlcmUgSSBleHBlY3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhTUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWctNS1cbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1Jcbm5ldC9oc3IvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNjYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgSFNSKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgSFNSIGltcGxlbWVudGF0aW9uLiBUaGUga2V5IGNvbmZpZyBvcHRpb24sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgYEhTUmAuIE5vdywgdG8gZmluZCB0aGUgbW9zdCBmcnVpdGZ1bCBhcmVhcyBmb3IgZnV6emluZywgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGZ1bmN0aW9ucy4KClJpZ2h0IG9mZiB0aGUgYmF0LCBgaHNyX2ZvcndhcmRfc2tiYCBzZWVtcyBsaWtlIGEgcHJpbWUgdGFyZ2V0LiBJdCYjMzk7cyBnb3QgdGhlIHJpbmcgb2YgYSBjb3JlIHByb2Nlc3NpbmcgZnVuY3Rpb24uIFRoZW4gdGhlcmUmIzM5O3MgYGhzcl9oYW5kbGVfZnJhbWVgLCB3aGljaCBpcyB0aGUgUlggaGFuZGxlciBmb3IgSFNSIHNsYXZlIGRldmljZXMgLSBhbHNvIGxpa2VseSB0byBiZSB2YWx1YWJsZS4gYGhzcl9kZXZfeG1pdGAgaXMgdGhlIFRYIGhhbmRsZXIgZm9yIHRoZSBIU1IgbWFzdGVyIGRldmljZSwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGluIHNjb3BlLiBJIHNlZSB0aGF0IGBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90b2AgaXMgc3RhdGljLCBtZWFuaW5nIEkgY2FuJiMzOTt0IGRpcmVjdGx5IHRhcmdldCBpdC4gSG93ZXZlciwgaXQgKmlzKiBjYWxsZWQgYnkgYGhzcl9mb3J3YXJkX3NrYmAsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBkdXJpbmcgYW5hbHlzaXMsIG9yIGJ5IGZ1enppbmcgYGhzcl9mb3J3YXJkX3NrYmAgSSB3aWxsIGltcGxpY2l0bHkgYmUgdGVzdGluZyBgaHNyX2dzb19lZmZlY3RpdmVfcHJvdG9gLiBgZGV2X2Rpc2FibGVfZ3JvYCBpcyBleHBvcnRlZCwgc28gaXQmIzM5O3MgY2FsbGJsZSBieSBvdGhlciBtb2R1bGVzLCBidXQgaXQgbG9va3MgbGlrZSBhIHNpbXBsZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgYW5kIGh1bnQgZm9yIGFueSBleHBvcnRlZCBvciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLCBhcyB0aGVzZSBhcmUgdGhlIG9uZXMgSSYjMzk7bGwgYmUgYWJsZSB0byBkaXJlY3RseSB0YXJnZXQgd2l0aCBteSBmdXp6aW5nIGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgaHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3JfZm9yd2FyZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2ZvcndhcmQuYz03Nzc9c3RhdGljIF9fYmUxNiBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MTQtXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6ODE1OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MTYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBIU1IgRnJhbWUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBIU1IgaW1wbGVtZW50YXRpb24gYW5kIEkmIzM5O3ZlIGdvdCBhIHNwZWNpZmljIHF1ZXN0aW9uIGJ1cm5pbmcgaW4gbXkgbWluZC4gYGhzcl9mb3J3YXJkX3NrYmAuLi4gSSBub3RpY2VkIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEJ1dCB3aGF0IGFib3V0IHRoZSBvdGhlciBtYWpvciBmdW5jdGlvbiBpbnZvbHZlZCBpbiBoYW5kbGluZyBIU1IgZnJhbWVzLCBgaHNyX2hhbmRsZV9mcmFtZWA/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSBzY29wZSBhbmQgdmlzaWJpbGl0eSBvZiB0aGF0IG9uZS4gSXMgaXQgYWxzbyBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSB0aGUgSFNSIG1vZHVsZSwgb3IgaXMgaXQgYXBwcm9wcmlhdGVseSBsaW1pdGVkIGluIGl0cyBzY29wZT8gVW5kZXJzdGFuZGluZyB0aGUgc3RhdGljL25vbi1zdGF0aWMgc3RhdHVzIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbW9kdWxlJiMzOTtzIHN0cnVjdHVyZSBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29yayBzdGFjay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGZ1bmN0aW9uJiMzOTtzIHZpc2liaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2hhbmRsZV9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX3NsYXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9oc3Jfc2xhdmUuYz0xOT1ib29sIGhzcl9pbnZhbGlkX2Rhbl9pbmdyZXNzX2ZyYW1lKF9fYmUxNiBwcm90b2NvbClcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTIzLVxubmV0L2hzci9oc3Jfc2xhdmUuYzoyNDpzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMjUte1xuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmM9ODU9Ym9vbCBoc3JfcG9ydF9leGlzdHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODYte1xubmV0L2hzci9oc3Jfc2xhdmUuYzo4NzpcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVx1MDAzZXJ4X2hhbmRsZXIpID09IGhzcl9oYW5kbGVfZnJhbWU7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg4LX1cbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTEzMj1zdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTU5LVxubmV0L2hzci9oc3Jfc2xhdmUuYzoxNjA6XHRyZXMgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcihkZXYsIGhzcl9oYW5kbGVfZnJhbWUsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy0xNjEtXHRpZiAocmVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjE4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmcsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqSW50ZXJuYWwgSFNSIEZyYW1lIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBjb2RlIGFuZCBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgZnJhbWVzIGFyZSBtYW5hZ2VkLiBUaGUga2V5IHRha2Vhd2F5IGhlcmUgaXMgdGhhdCBgaHNyX2hhbmRsZV9mcmFtZWAgaXMgZGVjbGFyZWQgYXMgKnN0YXRpYyouIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgYSBmaWxlLWxvY2FsIGZ1bmN0aW9uLiBJdCYjMzk7cyBub3QgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0IGl0JiMzOTtzIGRlZmluZWQgaW4uIFRoYXTigJlzIHByb2JhYmx5IGJlY2F1c2UgaXQmIzM5O3MgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCBub3QgcGFydCBvZiB0aGUgSFNSIEFQSSB0aGF0JiMzOTtzIGV4cG9zZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEl0JiMzOTtzIGRvaW5nIHNvbWV0aGluZyBzcGVjaWZpYyB3aXRoaW4gdGhlIEhTUiBkZXZpY2UgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBhbmQgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4KClRoZW4sIHRoZXJl4oCZcyBgaHNyX2Rldl94bWl0YCwgd2hpY2ggSSYjMzk7bSBzZWVpbmcgZGVmaW5lZCBpbiBgbmV0L2hzci9oc3JfZGV2aWNlLmNgLiBUaGF04oCZcyBteSBwcmltYXJ5IHBvaW50IG9mIGludGVyZXN0LiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gb2YgZnJhbWVzIGZyb20gdGhlIEhTUiBkZXZpY2UuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIEhTUiBkZXZpY2VzIHRvIHNlbmQgZnJhbWVzLiBJIHNob3VsZCBjaGVjayBpZiBpdCBoYW5kbGVzIGFueSBzcGVjaWFsIEhTUi1zcGVjaWZpYyBoZWFkZXIgZm9ybWF0dGluZyBvciBwYWNrZXQgZHVwbGljYXRpb24sIGFzIEhTUiBpcyBhYm91dCByZWR1bmRhbmN5LiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gaW1wbGVtZW50aW5nIHRoZSByZWR1bmRhbmN5IG1lY2hhbmlzbXMuIEkgYmV0IHRoaXMgaXMgd2hlcmUgdGhlIEhTUi1zcGVjaWZpYyBsb2dpYyByZXNpZGVzIGZvciBzZW5kaW5nIHBhY2tldHMuIEnigJlsbCBkaWcgaW50byB0aGlzIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2Ugc3RlcHMgaW52b2x2ZWQgaW4gdHJhbnNtaXR0aW5nIEhTUiBmcmFtZXMgZnJvbSBhIGRldmljZSBwZXJzcGVjdGl2ZSwgaW5jbHVkaW5nIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBkcml2ZXIgYW5kLCBwZXJoYXBzLCB0aGUgaW1wbGljYXRpb25zIG9uIHBlcmZvcm1hbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoc3JfZGV2X3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz0yMTY9c3RhdGljIG5ldGRldl9mZWF0dXJlc190IGhzcl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjMtXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzoyMjQ6c3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjI1LXtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz01OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoc3JfZGV2aWNlX29wcyA9IHtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MDEtXHQubmRvX3N0b3AgPSBoc3JfZGV2X2Nsb3NlLFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjAyOlx0Lm5kb19zdGFydF94bWl0ID0gaHNyX2Rldl94bWl0LFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjAzLVx0Lm5kb19jaGFuZ2VfcnhfZmxhZ3MgPSBoc3JfY2hhbmdlX3J4X2ZsYWdzLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTY2ND1ib29sIGlzX2hzcl9tYXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2NS17XG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NjY6XHRyZXR1cm4gKGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0ID09IGhzcl9kZXZfeG1pdCk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02NjctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQyMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqRm9jdXNpbmcgaW4gb24gSFNSIFBhY2tldCBUcmFuc21pc3Npb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBIU1IgcGFja2V0IHRyYW5zbWlzc2lvbiB3b3JrcywgYW5kIEkgc2VlIGBoc3JfZGV2X3htaXRgIGlzIGRlZmluZWQgYXMgc3RhdGljLiBUaGF0IGxpbWl0cyBteSBhYmlsaXR5IHRvIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUsIGFuZCBzdWdnZXN0cyBJIG5lZWQgdG8gZmluZCBhIGJldHRlciBlbnRyeSBwb2ludCwgYSBzeW1ib2wgdGhhdCYjMzk7cyBtb3JlIGFjY2Vzc2libGUgZm9yIGRlZXAgYW5hbHlzaXMuIFJpZ2h0LCB0aGF0IG1ha2VzIGBoc3JfZm9yd2FyZF9za2JgIGEgbXVjaCBiZXR0ZXIgZm9jYWwgcG9pbnQgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSBjb3JlIGZvcndhcmRpbmcgbG9naWMsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4uCgpOb3csIHdoaWxlIEkmIzM5O20gYXQgaXQsIEkgc2hvdWxkIGFsc28gbWFrZSBhIG5vdGUgb2YgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIFRoZXkmIzM5O3JlIHByb2JhYmx5IGluIGBuZXQvY29yZS9kZXYuY2AgYW5kIGBuZXQvY29yZS9kZXZfYXBpLmNgLiBUaGVzZSBhcmUgd29ydGggYSBsb29rIGJlY2F1c2UgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgY2FuIHNpZ25pZmljYW50bHkgaW1wYWN0IHBhY2tldCBwcm9jZXNzaW5nLCBzbyBhbnkgbG9naWMgdGhhdCBpbnRlcmFjdHMgd2l0aCBpdCBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgcGVyZm9ybWFuY2Ugb3IgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGUgSFNSIGNvbnRleHQsIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggSFNSJiMzOTtzIGR1cGxpY2F0ZSBwYWNrZXQgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIGRldl9kaXNhYmxlX2dybyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYXBpLmM9MjcwPUVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcbi0tXG5uZXQvY29yZS9kZXZfYXBpLmMtMjg0LSAqL1xubmV0L2NvcmUvZGV2X2FwaS5jOjI4NTp2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2NvcmUvZGV2X2FwaS5jLTI4Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODc2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyBgbmV0aWZfZGlzYWJsZV9ncm9gIGluIGBuZXQvY29yZS9kZXYuY2AqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG5ldGlmX2Rpc2FibGVfZ3JvYCB3aXRoaW4gYG5ldC9jb3JlL2Rldi5jYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gVGhpcyBmdW5jdGlvbiwgYnkgaXRzIHZlcnkgbmFtZSwgaXMgYWxsIGFib3V0IGRpc2FibGluZyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKS4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgaXNuJiMzOTt0IGl0PyBJdCBhbGxvd3MgdGhlIG5ldHdvcmsgc3RhY2sgdG8gY29hbGVzY2UgbXVsdGlwbGUgaW5jb21pbmcgcGFja2V0cyBpbnRvIGxhcmdlciBmcmFtZXMsIHJlZHVjaW5nIHByb2Nlc3Npbmcgb3ZlcmhlYWQsIGVzcGVjaWFsbHkgZm9yIGhpZ2gtYmFuZHdpZHRoIHNjZW5hcmlvcy4gU28sIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGlzIGRpc2FibGU/IFdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgbmVjZXNzaXRhdGUgc2FjcmlmaWNpbmcgR1JPJiMzOTtzIGVmZmljaWVuY3k/CgpNeSBtaW5kIGlzIGFscmVhZHkgcmFjaW5nIHdpdGggcXVlc3Rpb25zOiBJcyB0aGlzIGJlaW5nIGNhbGxlZCBkdWUgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBsaW1pdGF0aW9uPyBBIHNvZnR3YXJlLXJlbGF0ZWQgaW5jb21wYXRpYmlsaXR5IHdpdGggYSBwYXJ0aWN1bGFyIHByb3RvY29sIG9yIGRyaXZlcj8gQXJlIHRoZXJlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IGFyaXNlIGZyb20gdXNpbmcgR1JPIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRoZSBjYWxsaW5nIHNpdGVzLCB0aGUgYXJndW1lbnRzIHBhc3NlZC4uLiBldmVyeXRoaW5nLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCB0aGUgcmF0aW9uYWxlIGJlaGluZCBkaXNhYmxpbmcgdGhpcyBrZXkgb3B0aW1pemF0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRyYWRlb2ZmcyB0aGUgc3lzdGVtIGlzIG1ha2luZyBoZXJlLiBXaGF0JiMzOTtzIHRoZSBjb3N0IG9mIHRoaXMgZGlzYWJsZSBpbiB0ZXJtcyBvZiB0aHJvdWdocHV0LCBsYXRlbmN5LCBhbmQgQ1BVIGN5Y2xlcz8gSXMgaXQgYSBwZXJtYW5lbnQgZGlzYWJsZSBvciBhIGNvbmRpdGlvbmFsIG9uZT8gVWx0aW1hdGVseSwgSSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoaXMgaXMgdGhlICpyaWdodCogZGVjaXNpb24sIGEgd2VsbC1pbmZvcm1lZCB0cmFkZS1vZmYsIGFuZCBub3QgYSBxdWljayBmaXggdGhhdCBpbnRyb2R1Y2VzIGEgaGlkZGVuIHBlcmZvcm1hbmNlIGhpdCBsYXRlci4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHRoZSBuZXR3b3JrIGRldmljZSBzdGF0ZSBvciBwb3RlbnRpYWwgaXNzdWVzLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBwaWVjZSB0aGF0IGNvdWxkIHNoZWQgbGlnaHQgb24gc29tZSB1bmRlcmx5aW5nIGRldmljZSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgbmV0aWZfZGlzYWJsZV9ncm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xODI1PXZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xODQyLVxubmV0L2NvcmUvZGV2LmM6MTg0Mzp2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXYuYy0xODQ0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIEdSTyBEaXNhYmxlbWVudCBpbiBIU1IqKgoKTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyByZXZvbHZlcyBhcm91bmQgdGhlIHN5bWJvbHMgYGhzcl9mb3J3YXJkX3NrYmAsIGBkZXZfZGlzYWJsZV9ncm9gLCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYC4gVGhlc2UgYXJlIHRoZSBrZXkgcGllY2VzIG9mIGNvZGUgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaW4gdGhlIGNvbnRleHQgb2YgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgZGlzYWJsZW1lbnQsIHNwZWNpZmljYWxseSBhcyBpdCByZWxhdGVzIHRvIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkuIEkgbmVlZCB0byBkZXRlcm1pbmUgKndoeSogdGhlc2UgYXJlIHNpZ25pZmljYW50IGFuZCwgY3J1Y2lhbGx5LCBob3cgdGhleSBpbnRlcmFjdC4KCkJleW9uZCB0aGF0LCBJIG5lZWQgdG8gaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3Igc3ltYm9scyByZWxhdGVkIHRvIEdSTyBkaXNhYmxlbWVudCB3aXRoaW4gdGhlIEhTUiBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBIU1JgIGRpcmVjdGx5LiBJdCYjMzk7cyB0aGUgbW9zdCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LgoKRmluYWxseSwgYSBkZXBlbmRlbmN5IGFuYWx5c2lzLiBJcyB0aGVyZSBhbnl0aGluZyB0aGF0IGBIU1JgIHJlbGllcyBvbiwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoaXMgR1JPIGRpc2FibGVtZW50PyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGZhY3RvcnMgdG8gY29uc2lkZXI/IEtub3dpbmcgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgYW5kIHdoYXQgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBpcyBjcml0aWNhbCB0byBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaHNyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBJRUMgNjI0MzktMyBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5XG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBIU1JcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0hpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcdTAwMjYgUFJQKVwmIzM0O1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBUaGlzIGVuYWJsZXMgSUVDIDYyNDM5IGRlZmluZWQgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3NcbiAgMTA6XHRcdCAgUmVkdW5kYW5jeSAoSFNSKSBhbmQgUGFyYWxsZWwgUmVkdW5kYW5jeSBQcm90b2NvbCAoUFJQKS5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhXG4gIDEzOlx0XHQgIERBTkggKFwmIzM0O0RvdWJseSBhdHRhY2hlZCBub2RlIGltcGxlbWVudGluZyBIU1JcJiMzNDspIG9yIERBTlAgKFwmIzM0O0RvdWJseVxuICAxNDpcdFx0ICBhdHRhY2hlZCBub2RlIGltcGxlbWVudGluZyBQUlBcJiMzNDspLiBGb3IgdGhpcyB0byB3b3JrLCB5b3VyIExpbnV4IGJveFxuICAxNTpcdFx0ICBuZWVkcyAoYXQgbGVhc3QpIHR3byBwaHlzaWNhbCBFdGhlcm5ldCBpbnRlcmZhY2VzLlxuICAxNjpcdFxuICAxNzpcdFx0ICBGb3IgREFOSCwgaXQgbXVzdCBiZSBjb25uZWN0ZWQgYXMgYSBub2RlIGluIGEgcmluZyBuZXR3b3JrIHRvZ2V0aGVyXG4gIDE4Olx0XHQgIHdpdGggb3RoZXIgSFNSIGNhcGFibGUgbm9kZXMuIEFsbCBFdGhlcm5ldCBmcmFtZXMgc2VudCBvdmVyIHRoZSBIU1JcbiAgMTk6XHRcdCAgZGV2aWNlIHdpbGwgYmUgc2VudCBpbiBib3RoIGRpcmVjdGlvbnMgb24gdGhlIHJpbmcgKG92ZXIgYm90aCBzbGF2ZVxuICAyMDpcdFx0ICBwb3J0cyksIGdpdmluZyBhIHJlZHVuZGFudCwgaW5zdGFudCBmYWlsLW92ZXIgbmV0d29yay4gRWFjaCBIU1Igbm9kZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAyMwoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiAzMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSFNSIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBnb29kLCBubyBuZXcgZGVwZW5kZW5jaWVzIGZvciB0aGUgYEhTUmAgbW9kdWxlIGl0c2VsZiwgdGhhdCYjMzk7cyBhbHdheXMgYSBwbHVzLiBOb3csIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXPigKYgdGhpcyBwYXRjaCBpcyBhZGRpbmcgYG5ldGlmX2Rpc2FibGVfZ3JvYCBhbmQgYGRldl9kaXNhYmxlX2dyb2AuIFRoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGFzIGNvcmUgbmV0d29yayBkZXZpY2UgQVBJIG1vZGlmaWNhdGlvbnMsIHdoaWNoIGFyZSBhbHdheXMgaW50ZXJlc3RpbmcuIFNwZWNpZmljYWxseSwgdGhlIGludGVudCBpcyB0byBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0d29yayBkZXZpY2UsIGFuZCBoZXJlLCB0aGV5JiMzOTtyZSB1c2luZyBpdCB0byBzaHV0IGRvd24gR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBTbWFydC4gR1JPIGNhbiBzb21ldGltZXMgY2F1c2UgaXNzdWVzIHdpdGggY29tcGxleCBwcm90b2NvbHMsIHNvIGRpc2FibGluZyBpdCBpbiBzcGVjaWZpYyBjb250ZXh0cyBpcyBhIHJlYXNvbmFibGUgYXBwcm9hY2guCgpUaGUgY3J1Y2lhbCBiaXQsIHRob3VnaCwgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgaHNyX2ZvcndhcmRfc2tiYC4gVGhleSYjMzk7cmUgYWRhcHRpbmcgaXQgdG8gaGFuZGxlIEdTTyAoR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCkgcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0uIFRoaXMgc3VnZ2VzdHMgYSBmdW5kYW1lbnRhbCBzaGlmdCBpbiBob3cgSFNSIGlzIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBsYXJnZSBwYWNrZXRzLCBhbmQgZGlyZWN0bHkgaW1wYWN0cyB0aGUgY29yZSBwYWNrZXQgZm9yd2FyZGluZyBsb2dpYy4gVGhhdOKAmXMgYSBrZXkgY2hhbmdlIHRvIGludmVzdGlnYXRlLiBUaGVuIHdlIGhhdmUgY2hhbmdlcyBpbiBgaHNyX2Rldl94bWl0YCBhbmQgYHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lYCB0byBhZGp1c3QgbG9ja2luZywgd2hpY2ggaXMgYSBkZWZpbml0ZSBzaWduYWwgb2YgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nLiBMb2NraW5nIG1vZGlmaWNhdGlvbnMgYWx3YXlzIGRlc2VydmUgc2NydXRpbnkuCgpGdW5jdGlvbmFsbHksIHdlJiMzOTtyZSBsb29raW5nIGF0IGNoYW5nZXMgaW4gdGhlIEhTUiBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIG5ldHdvcmsgZGV2aWNlIEFQSS4gU2luY2UgSFNSIGlzIGNvbW1vbmx5IGRlcGxveWVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyDigJMgdGhpbmsgdmV0aCBkZXZpY2VzIOKAkyB0aGVzZSBjaGFuZ2VzIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgd2l0aCB2aXJ0dWFsIGludGVyZmFjZXMuIFRoYXQgbWFrZXMgdGhlbSBwZXJmZWN0IGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgdGVzdGluZyBhcmUgYGhzcl9mb3J3YXJkX3NrYmAsIGBkZXZfZGlzYWJsZV9ncm9gLCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYC4gV2l0aCB0aGUgYEhTUmAgY29uZmlnIGVuYWJsZWQsIG9mIGNvdXJzZS4KClRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoZSBpc3N1ZSBvZiBHU08gc3VwZXItcGFja2V0cyB3aXRoaW4gdGhlIEhTUiBwcm90b2NvbCBieSBzZWdtZW50aW5nIHRoZW0uIEFkZGl0aW9uYWxseSBpdCYjMzk7cyBlbnN1cmluZyB0aGF0IEdSTywgYSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBpc24mIzM5O3QgY2F1c2luZyBwcm9ibGVtcyBhbmQgaXMgZGlzYWJsZWQgb24gcmVsZXZhbnQgSFNSIGRldmljZXMsIHdoaWNoIGlzIGEgc291bmQgZGVzaWduIGNob2ljZS4gU2luY2UgdGhpcyBkZWFscyB3aXRoIHBhY2tldCBoYW5kbGluZywgaXQgd2lsbCBiZSBlc3NlbnRpYWwgdG8gdGVzdCBpdCB0byBlbnN1cmUgaXQgb3BlcmF0ZXMgY29ycmVjdGx5IGluIHZhcmlvdXMgc2NlbmFyaW9zIHRvIGVuc3VyZSBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkgYXJlIG1haW50YWluZWQuIFRoaXMgcGF0Y2ggbmVlZHMgYSBnb29kIGZ1enppbmcgc2Vzc2lvbiwgYW5kIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBjb25jdXJyZW5jeSBhc3BlY3RzIG9mIHRoZSBsb2NraW5nIGFkanVzdG1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgICAmIzM0O2Rldl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtuZXRpZl9kaXNhYmxlX2dybyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBwcm90b2NvbCB0byBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtIGluIGBoc3JfZm9yd2FyZF9za2JgLiBJdCBhbHNvIGFkZHMgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgdG8gdGhlIGNvcmUgbmV0d29yayBkZXZpY2UgQVBJIHRvIGRpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgb24gYSBkZXZpY2UsIGFuZCB1c2VzIHRoaXMgdG8gZGlzYWJsZSBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHBhY2tldCBwcm9jZXNzaW5nIGFuZCBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssCiAgICAmIzM0O2Rldl9kaXNhYmxlX2dybyYjMzQ7LAogICAgJiMzNDtuZXRpZl9kaXNhYmxlX2dybyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBwcm90b2NvbCB0byBoYW5kbGUgR1NPIHN1cGVyLXBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtIGluIGBoc3JfZm9yd2FyZF9za2JgLiBJdCBhbHNvIGFkZHMgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgdG8gdGhlIGNvcmUgbmV0d29yayBkZXZpY2UgQVBJIHRvIGRpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgb24gYSBkZXZpY2UsIGFuZCB1c2VzIHRoaXMgdG8gZGlzYWJsZSBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHBhY2tldCBwcm9jZXNzaW5nIGFuZCBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTc6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGhhbmRsZSBHU08gKEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQpIHN1cGVyLXBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtIGJlZm9yZSBmb3J3YXJkaW5nLCBhbmQgZGlzYWJsZXMgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgb24gZW5zbGF2ZWQgZGV2aWNlcy4gSXQgYWxzbyBhZGp1c3RzIGxvY2tpbmcgYXJvdW5kIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBza2Igc2VnbWVudGF0aW9uIChgX19za2JfZ3NvX3NlZ21lbnRgKSwgYW5kIHJlYWRpbmcgcGFja2V0IGhlYWRlcnMgdXNpbmcgdGhlIHN0YW5kYXJkIGBza2JfaGVhZGVyX3BvaW50ZXJgIGZ1bmN0aW9uLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzRkYTE3ZTk2NjFkOWIzZDNhNTQ0NThiNDA1ZTdmZGY2YWQxNjJlMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTc6NDA6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA5OTgxZDYzN2Y4YjU0Li5lYmEyYzI2YTQ5YmE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTM0MzQsNiAmIzQzOzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgbmV0aWZfY2xvc2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHVubGluayk7CiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKJiM0Mzt2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7CiB1MTYgZGV2X3BpY2tfdHhfemVybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1OTMzYzVkYWIwOWVlLi5mMjBkNWFiMGNmNzI5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTg0MCw2ICYjNDM7MTg0MCwyMSBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJfQogfQogCiYjNDM7dm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKJiM0MzsKJiM0MzsJZGV2LSZndDt3YW50ZWRfZmVhdHVyZXMgJmFtcDs9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7CiYjNDM7CW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKJiM0MzsKJiM0MzsJbmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX2RldihkZXYsIGxvd2VyX2RldiwgaXRlcikgewomIzQzOwkJbmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7CiYjNDM7CQluZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpOwomIzQzOwkJbmV0ZGV2X3VubG9ja19vcHMobG93ZXJfZGV2KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qKgogICoJZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZQogICoJQGRldjogZGV2aWNlCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmMKaW5kZXggNDM3OTQ3ZGQwOGVkNS4uM2NhMjUxNWFkMDQ4NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2X2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hcGkuYwpAQCAtMjY5LDYgJiM0MzsyNjksMjcgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTsKIAomIzQzOy8qKgomIzQzOyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZQomIzQzOyAqIEBkZXY6IGRldmljZQomIzQzOyAqCiYjNDM7ICogQmVzdC1lZmZvcnQgZGlzYWJsZSBvZiBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldAomIzQzOyAqIGRldmljZS4gIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZAomIzQzOyAqIHBhY2tldHMgbWF5IGJlIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS4KJiM0MzsgKgomIzQzOyAqIFRoZSBkaXNhYmxlIGlzIGJlc3QtZWZmb3J0OiBhIGRldmljZSB3aXRoIGEgZml4ZWQtb24gZmVhdHVyZSAoZm9yCiYjNDM7ICogZXhhbXBsZSBHUk9fSFcgb24gYSB2aXJ0aW8tbmV0IGRldmljZSBuZWdvdGlhdGVkIHdpdGhvdXQKJiM0MzsgKiBWSVJUSU9fTkVUX0ZfQ1RSTF9HVUVTVF9PRkZMT0FEUykga2VlcHMgaXQgZW5hYmxlZC4gIENhbGxlcnMgdGhhdAomIzQzOyAqIG5lZWQgYSBoYXJkIGd1YXJhbnRlZSBtdXN0IGluc3BlY3QgdGhlIHJlc3VsdGluZyBmZWF0dXJlIHN0YXRlLgomIzQzOyAqLwomIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsJbmV0aWZfZGlzYWJsZV9ncm8oZGV2KTsKJiM0MzsJbmV0ZGV2X3VubG9ja19vcHMoZGV2KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pOwomIzQzOwogLyoqCiAgKiBkZXZfc2V0X3Byb21pc2N1aXR5KCkgLSB1cGRhdGUgcHJvbWlzY3VpdHkgY291bnQgb24gYSBkZXZpY2UKICAqIEBkZXY6IGRldmljZQpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwppbmRleCA1NTU1YjcxYWIxOWI1Li4yNDhjYmIxNDJlMjFlIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwpAQCAtMjMyLDkgJiM0MzsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXNrYi0mZ3Q7ZGV2ID0gbWFzdGVyLSZndDtkZXY7CiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCXNrYl9yZXNldF9tYWNfbGVuKHNrYik7Ci0JCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJCWhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAl9IGVsc2UgewogCQlkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMzM1LDYgJiM0MzszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsCiAJCWhzcl9zdGFnLSZndDtzZXF1ZW5jZV9uciA9IGh0b25zKGhzci0mZ3Q7c2VxdWVuY2VfbnIpOwogCQloc3ItJmd0O3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKIAl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gdHlwZTsKIAkvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqLwpAQCAtMzU2LDE0ICYjNDM7MzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwKIAkJZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94KTsKIAl9CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCkBAIC0zOTAsNiAmIzQzOzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJaHNyX3N0YWctJmd0O3NlcXVlbmNlX25yID0gaHRvbnMoaHNyLSZndDtzdXBfc2VxdWVuY2VfbnIpOwogCWhzci0mZ3Q7c3VwX3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7CiAKQEAgLTM5NywxMyAmIzQzOzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlciwKIAloc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTsKIAlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIG1hc3Rlci0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTsKLQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiB9CiAKIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb24KQEAgLTY1OSw3ICYjNDM7NjUyLDcgQEAgdm9pZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiAKIAlkZXYtJmd0O2h3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfAotCQkJICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8CiYjNDM7CQkJICAgTkVUSUZfRl9IV19DU1VNIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjsKIApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCmluZGV4IDA3NzQ5ODFhNjVjMTYuLmY0MjY5NGNmNDMwOTkgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9nc28uaCZndDsKICNpbmNsdWRlICYjMzQ7aHNyX21haW4uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2hzcl9mcmFtZXJlZy5oJiMzNDsKIApAQCAtNjIxLDkgJiM0Mzs2MjIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChwb3J0LSZndDt0eXBlID09IEhTUl9QVF9NQVNURVIgfHwKIAkgICAgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7CiAJCS8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovCi0JCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAkJZnJhbWUtJmd0O3NlcXVlbmNlX25yID0gaHNyLSZndDtzZXF1ZW5jZV9ucjsKIAkJaHNyLSZndDtzZXF1ZW5jZV9uciYjNDM7JiM0Mzs7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJfQogfQogCkBAIC03MzEsNyAmIzQzOzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsCiB9CiAKIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovCi12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiYjNDM7c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lOwogCkBAIC03NDYsOCAmIzQzOzc0OCw4IEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKIAkgKiBTbyBjaGVjayBhbmQgaW5jcmVtZW50IHN0YXRzIGZvciBtYXN0ZXIgcG9ydCBvbmx5IGhlcmUuCiAJICovCiAJaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUiB8fCBwb3J0LSZndDt0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHsKLQkJcG9ydC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9wYWNrZXRzJiM0MzsmIzQzOzsKLQkJcG9ydC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9ieXRlcyAmIzQzOz0gc2tiLSZndDtsZW47CiYjNDM7CQlERVZfU1RBVFNfSU5DKHBvcnQtJmd0O2RldiwgdHhfcGFja2V0cyk7CiYjNDM7CQlERVZfU1RBVFNfQUREKHBvcnQtJmd0O2RldiwgdHhfYnl0ZXMsIHNrYi0mZ3Q7bGVuKTsKIAl9CiAKIAlrZnJlZV9za2IoZnJhbWUuc2tiX2hzcik7CkBAIC03NTcsNiAmIzQzOzc1OSwxMDUgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KQogCiBvdXRfZHJvcDoKIAlyY3VfcmVhZF91bmxvY2soKTsKLQlwb3J0LSZndDtkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwlERVZfU1RBVFNfSU5DKHBvcnQtJmd0O2RldiwgdHhfZHJvcHBlZCk7CiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzbwomIzQzOyAqIGVhY2ggd2lyZSBmcmFtZSBnZXRzIGl0cyBvd24gSFNSL1BSUCB0YWcgYW5kIHNlcXVlbmNlIG51bWJlci4KJiM0MzsgKi8KJiM0MzsvKiBFZmZlY3RpdmUgZnJhbWUgcHJvdG9jb2wgb2YgYSAocG9zc2libHkgVkxBTi10YWdnZWQpIHNrYiwgb3IgMCB3aGVuCiYjNDM7ICogaXQgY2Fubm90IGJlIGRldGVybWluZWQgb3IgdGhlIHRhZ2dpbmcgZXhjZWVkcyB3aGF0IEhTUiBzdXBwb3J0cy4KJiM0MzsgKiBIU1Igc3VwcG9ydHMgb25lIDgwMi4xUSBDLXRhZyBvbmx5LCBtYXRjaGluZyBmaWxsX2ZyYW1lX2luZm8oKTogYW4KJiM0MzsgKiBhY2NlbGVyYXRlZCB0YWcgbXVzdCBiZSBhIEMtdGFnIHdpdGggYSBub24tVkxBTiBpbm5lciBwcm90b2NvbDsgYW4KJiM0MzsgKiBpbi1iYW5kIHRhZyBpcyB1bndyYXBwZWQgZXhhY3RseSBvbmNlIGFuZCBhIHJlc2lkdWFsIFZMQU4gRXRoZXJUeXBlCiYjNDM7ICogaXMgcmVqZWN0ZWQuIFJlYWQtb25seTsgbm8gc3RhdGUgaXMga2VwdCBiZXlvbmQgdGhlIGltbWVkaWF0ZQomIzQzOyAqIHByb3RvY29sIHZhbHVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBfX2JlMTYgaHNyX2dzb19lZmZlY3RpdmVfcHJvdG8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBldGhoZHIgZWg7CiYjNDM7CXN0cnVjdCB2bGFuX2hkciB2aDsKJiM0MzsJY29uc3Qgc3RydWN0IGV0aGhkciAqZXRoOwomIzQzOwljb25zdCBzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHI7CiYjNDM7CV9fYmUxNiBwcm90bzsKJiM0MzsKJiM0MzsJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKJiM0MzsJCS8qIEhTUiBzdXBwb3J0cyBvbmUgODAyLjFRIEMtdGFnIG9ubHkuICovCiYjNDM7CQlpZiAoc2tiLSZndDt2bGFuX3Byb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChldGhfdHlwZV92bGFuKHNrYi0mZ3Q7cHJvdG9jb2wpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIHNrYi0mZ3Q7cHJvdG9jb2w7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXRoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKGVoKSwgJmFtcDtlaCk7CiYjNDM7CWlmICghZXRoKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXByb3RvID0gZXRoLSZndDtoX3Byb3RvOwomIzQzOwlpZiAoIWV0aF90eXBlX3ZsYW4ocHJvdG8pKQomIzQzOwkJcmV0dXJuIHByb3RvOwomIzQzOwlpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXZoZHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBFVEhfSExFTiwgc2l6ZW9mKHZoKSwgJmFtcDt2aCk7CiYjNDM7CWlmICghdmhkcikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwcm90byA9IHZoZHItJmd0O2hfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CiYjNDM7CWlmIChldGhfdHlwZV92bGFuKHByb3RvKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gcHJvdG87CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmICpzZWdzLCAqbmV4dDsKJiM0MzsJX19iZTE2IHByb3RvOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7CiYjNDM7CQloc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ29uZm9ybWluZyBwbGFpbi1wcm90b2NvbCBHU08gc3VwZXItcGFja2V0cyBjYXJyeSB0cmFpbGVyLWZyZWUKJiM0MzsJICogc2VuZGVyIHBheWxvYWQgYW5kIGFyZSBzZWdtZW50ZWQgaGVyZTogZWFjaCBzZWdtZW50IGlzIGRlbGl2ZXJlZAomIzQzOwkgKiBvciBmb3J3YXJkZWQgYXMgaXRzIG93biB3aXJlIGZyYW1lLCBvbiBhbnkgaW5ncmVzcyByb2xlLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZ2F0ZSBpcyBjb250ZW50LWJhc2VkLCBub3QgcG9ydC1iYXNlZC4gQW4gYWdncmVnYXRlIHdob3NlCiYjNDM7CSAqIGVmZmVjdGl2ZSBwcm90b2NvbCBpcyBFVEhfUF9IU1Igb3IgRVRIX1BfUFJQIGNhbm5vdCBiZSBzYWZlbHkKJiM0MzsJICogc2VnbWVudGVkIGFuZCBpcyBkcm9wcGVkLCBhcyBpcyBhbnkgc2tiIHdob3NlIGhlYWRlciBjYW5ub3QgYmUKJiM0MzsJICogcmVhZCBvciB3aG9zZSB0YWdnaW5nIGV4Y2VlZHMgdGhlIHNpbmdsZSA4MDIuMVEgQy10YWcgSFNSCiYjNDM7CSAqIHN1cHBvcnRzLiBXaXRoIE5FVElGX0ZfSFdfSFNSX1RBR19STSB0aGUgbG93ZXIgaGFzIGFscmVhZHkKJiM0MzsJICogc3RyaXBwZWQgdGhlIHRhZywgc28gc3VjaCBhZ2dyZWdhdGVzIGFycml2ZSBwbGFpbiBhbmQgYXJlCiYjNDM7CSAqIHNlZ21lbnRlZC4KJiM0MzsJICovCiYjNDM7CXByb3RvID0gaHNyX2dzb19lZmZlY3RpdmVfcHJvdG8oc2tiKTsKJiM0MzsJaWYgKCFwcm90bykKJiM0MzsJCWdvdG8gZHJvcF9nc287IC8qIGNsYXNzaWZpY2F0aW9uIGZhaWx1cmUsIGZhaWwtc2FmZSAqLwomIzQzOwlpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSB8fCBwcm90byA9PSBodG9ucyhFVEhfUF9QUlApKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsKJiM0MzsJLyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWUKJiM0MzsJICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb20KJiM0MzsJICogdGhlIGludGVybGluayBmb2xsb3dzIFJYIGNoZWNrc3VtIHNlbWFudGljcy4KJiM0MzsJICovCiYjNDM7CXNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUik7CiYjNDM7CWlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsKJiM0MzsJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJd2hpbGUgKHNlZ3MpIHsKJiM0MzsJCW5leHQgPSBzZWdzLSZndDtuZXh0OwomIzQzOwkJc2Vncy0mZ3Q7bmV4dCA9IE5VTEw7CiYjNDM7CQloc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpOwomIzQzOwkJc2VncyA9IG5leHQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO2Ryb3BfZ3NvOgomIzQzOwlERVZfU1RBVFNfSU5DKHBvcnQtJmd0O2RldiwgdHhfZHJvcHBlZCk7CiAJa2ZyZWVfc2tiKHNrYik7CiB9CmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9zbGF2ZS5jIGIvbmV0L2hzci9oc3Jfc2xhdmUuYwppbmRleCAwMWM3M2I0YjUwZGRkLi5hYTIxNTRiMTljMGI5IDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX3NsYXZlLmMKQEAgLTczLDE2ICYjNDM7NzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYikKIAl9CiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAotCS8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhCi0JICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuCi0JICovCi0JaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykgewotCQlzcGluX2xvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCQloc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCX0gZWxzZSB7Ci0JCWhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpOwotCX0KJiM0MzsJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7CiAKIGZpbmlzaF9jb25zdW1lOgogCXJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEOwpAQCAtMTcxLDYgJiM0MzsxNjIsMTEgQEAgc3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJZ290byBmYWlsX3J4X2hhbmRsZXI7CiAJZGV2X2Rpc2FibGVfbHJvKGRldik7CiAKJiM0MzsJLyogR1JPIGRpc2FibGluZyBpcyBiZXN0LWVmZm9ydDogZGV2aWNlcyB3aXRoIGZpeGVkLW9uCiYjNDM7CSAqIEdSTy9HUk9fSFcgY2Fubm90IGJlIGZvcmNlZCBvZmYuCiYjNDM7CSAqLwomIzQzOwlkZXZfZGlzYWJsZV9ncm8oZGV2KTsKJiM0MzsKIAlyZXR1cm4gMDsKIAogZmFpbF9yeF9oYW5kbGVyOgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKaW5kZXggMzFmYjkzMjZjZjUzMy4uMGQxMDU0NzZlN2M1MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCkBAIC0zLDYgJiM0MzszLDcgQEAKIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLgogCiBURVNUX1BST0dTIDo9IFwKJiM0MzsJaHNyX2dyb19zdXBlcnBhY2tldC5zaCBcCiAJaHNyX3Bpbmcuc2ggXAogCWhzcl9yZWRib3guc2ggXAogCWxpbmtfZmF1bHRzLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi5lYmNiZDlmYzQxZWM0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoCkBAIC0wLDAgJiM0MzsxLDYzMSBAQAomIzQzOyMhL2Jpbi9iYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyMKJiM0MzsjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czoKJiM0MzsjCiYjNDM7IyAgMS4gRW5zbGF2aW5nIGEgZGV2aWNlIHRvIGFuIEhTUiBtYXN0ZXIgZGlzYWJsZXMgR1JPIG9uIGl0CiYjNDM7IyAgICAgKGRldl9kaXNhYmxlX2dybygpKS4KJiM0MzsjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy4KJiM0MzsjICAzLiBBIFRDUCBzdHJlYW0gZnJvbSBhIFRTTy1lbmFibGVkIFNBTiAod2hpY2ggdGhlcmVmb3JlIGVtaXRzIEdTTwomIzQzOyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6CiYjNDM7IyAgICAgaW50ZXJmYWNlLWNvdW50ZXIgZGVsdGFzIHNob3cgc3VwZXItcGFja2V0LXNpemVkIGZyYW1lcyBsZWF2aW5nCiYjNDM7IyAgICAgdGhlIFNBTiBhbmQgcGVyLWZyYW1lLXNpemVkIHRyYWZmaWMgbGVhdmluZyB0aGUgRFVUJiMzOTtzIExBTiBwb3J0cy4KJiM0MzsjCiYjNDM7IyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6CiYjNDM7IwomIzQzOyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyCiYjNDM7IyAgJiM0MzstLS0tLS0tLS0tLSYjNDM7ICBpbnRlcmxpbmsgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgIExBTiBBL0IgICYjNDM7LS0tLS0tLS0tLS0mIzQzOwomIzQzOyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXwKJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHwKJiM0MzsjICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICYjNDM7LS0tLS0tLS0tLS0mIzQzOwomIzQzOyMKJiM0MzsjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCYjMzk7cyBmb3J3YXJkIHBhdGgKJiM0MzsjIChpbnRlcmxpbmsgUlggLSZndDsgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kCiYjNDM7IyBmb3J3YXJkZWQgYnkgdGhlIERVVC4KJiM0MzsKJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoCiYjNDM7CiYjNDM7c2FuX2lwPSYjMzQ7MTAwLjY0LjAuMSYjMzQ7CiYjNDM7cGVlcl9pcD0mIzM0OzEwMC42NC4wLjMmIzM0OwomIzQzOwomIzQzOyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKToKJiM0MzsjIFNBTl9BVkdfTUlOIHByb3ZlcyBHU08gc3VwZXItcGFja2V0cyBsZWZ0IHRoZSBTQU47IExBTl9BVkdfTUFYIGlzIGEKJiM0MzsjIGd1YXJkIHdpdGggbWFyZ2luLCBub3QgdGhlIHByb3RvY29sIG1heGltdW0gKHNlZSBkb190c29fc3RyZWFtX3Rlc3QpLgomIzQzO1NBTl9BVkdfTUlOPTIwNDgKJiM0MztMQU5fQVZHX01BWD0xNTE0CiYjNDM7CiYjNDM7aXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MztzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7YWN0aXZlX3Nydl9ucz0mIzM0OyYjMzQ7CiYjNDM7d29ya2Rpcj0mIzM0OyYjMzQ7CiYjNDM7cGlkZmlsZT0mIzM0OyYjMzQ7CiYjNDM7bnNfZHV0PSYjMzQ7JiMzNDsKJiM0Mztuc19zYW49JiMzNDsmIzM0OwomIzQzO25zX3BlZXI9JiMzNDsmIzM0OwomIzQzO25zX2xzPSYjMzQ7JiMzNDsKJiM0MztyY2ZpbGU9JiMzNDsmIzM0OwomIzQzOwomIzQzOyMgRGVsZXRlIHRoZSBwZXItc2VydmVyIHByaXZhdGUgd29yayBkaXJlY3RvcnkgYW5kIHJlc2V0IGl0cwomIzQzOyMgdmFyaWFibGVzLiBDYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlYXAgYW5kIGZyb20gdGhlIEVYSVQKJiM0MzsjIHRyYXAsIHdoaWNoIG93bnMgYWxsIGZhaWx1cmUgcGF0aHMuCiYjNDM7Y2xlYW51cF93b3JrZGlyKCkKJiM0Mzt7CiYjNDM7CSMgcmVtb3ZlIG9ubHkgdGhlIGtub3duIG5vbi1lbXB0eSBwcml2YXRlIGRpcmVjdG9yeQomIzQzOwlpZiBbIC1uICYjMzQ7JHt3b3JrZGlyfSYjMzQ7IF0gJmFtcDsmYW1wOyBbIC1kICYjMzQ7JHt3b3JrZGlyfSYjMzQ7IF07IHRoZW4KJiM0MzsJCXJtIC1yZiAmIzM0OyR7d29ya2Rpcn0mIzM0OwomIzQzOwlmaQomIzQzOwl3b3JrZGlyPSYjMzQ7JiMzNDsKJiM0MzsJcGlkZmlsZT0mIzM0OyYjMzQ7CiYjNDM7CXJjZmlsZT0mIzM0OyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJIyBTZXJ2ZXIgY2xlYW51cCB0YXJnZXRzIG9ubHkgdGhlIG5hbWVzcGFjZSBvZiB0aGUgY3VycmVudGx5CiYjNDM7CSMgYWN0aXZlIHNlcnZlciAocmVjb3JkZWQgYnkgc3RhcnRfaXBlcmZfc2VydmVyKTsgYWZ0ZXIgYQomIzQzOwkjIHN1Y2Nlc3NmdWwgcmVhcCBub3RoaW5nIGlzIGFjdGl2ZS4KJiM0MzsJaWYgWyAtbiAmIzM0OyR7YWN0aXZlX3Nydl9uc30mIzM0OyBdOyB0aGVuCiYjNDM7CQkjIGV4YWN0LVBJRCBraWxsIG9ubHkgYWZ0ZXIgUkUtdmFsaWRhdGluZyBpZGVudGl0eSAoZ3VhcmRzCiYjNDM7CQkjIGFnYWluc3QgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApCiYjNDM7CQlpZiBbIC1uICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgXSAmYW1wOyZhbXA7IHZhbGlkX3NlcnZlcl9waWQgJiMzNDske2FjdGl2ZV9zcnZfbnN9JiMzNDsgJiMzNDske2lwZXJmX3BpZH0mIzM0OzsgdGhlbgomIzQzOwkJCWtpbGwgJiMzNDske2lwZXJmX3BpZH0mIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwkJZmkKJiM0MzsJCWlwZXJmX3BpZD0mIzM0OyYjMzQ7CiYjNDM7CQlpZiBbIC1uICYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn0mIzM0OyBdOyB0aGVuCiYjNDM7CQkJIyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cwomIzQzOwkJCSMgYm91bmQgc28gYSBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyCiYjNDM7CQkJIyBoYW5nIGNsZWFudXAKJiM0MzsJCQlmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG8KJiM0MzsJCQkJa2lsbCAtMCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwgfHwgYnJlYWsKJiM0MzsJCQkJc2xlZXAgMC4xCiYjNDM7CQkJZG9uZQomIzQzOwkJCWtpbGwgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQkJd2FpdCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCQlzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7CQlmaQomIzQzOwkJIyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjMKJiM0MzsJCSMgcHJvY2Vzc2VzIHRoYXQgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgYWN0aXZlIHNlcnZlciBuZXRucywKJiM0MzsJCSMgcG9sbCBmb3IgYm91bmRlZCBleGl0LCB0aGVuIFNJR0tJTEwgYW55IHN1cnZpdm9yIGJlZm9yZQomIzQzOwkJIyB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmQgcGtpbGwgd291bGQgc2NhbgomIzQzOwkJIyB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuCiYjNDM7CQlsb2NhbCBfcCBfc3RpbGwKJiM0MzsJCWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDske2FjdGl2ZV9zcnZfbnN9JiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJCWlmIGlzX2lwZXJmM19waWQgJiMzNDskX3AmIzM0OzsgdGhlbgomIzQzOwkJCQlraWxsICYjMzQ7JF9wJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCQlmaQomIzQzOwkJZG9uZQomIzQzOwkJZm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvCiYjNDM7CQkJX3N0aWxsPTAKJiM0MzsJCQlmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzICYjMzQ7JHthY3RpdmVfc3J2X25zfSYjMzQ7IDImZ3Q7L2Rldi9udWxsKTsgZG8KJiM0MzsJCQkJaWYgaXNfaXBlcmYzX3BpZCAmIzM0OyRfcCYjMzQ7OyB0aGVuCiYjNDM7CQkJCQlfc3RpbGw9MQomIzQzOwkJCQkJYnJlYWsKJiM0MzsJCQkJZmkKJiM0MzsJCQlkb25lCiYjNDM7CQkJWyAmIzM0OyRfc3RpbGwmIzM0OyAtZXEgMCBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCQlzbGVlcCAwLjEKJiM0MzsJCWRvbmUKJiM0MzsJCWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDske2FjdGl2ZV9zcnZfbnN9JiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJCWlmIGlzX2lwZXJmM19waWQgJiMzNDskX3AmIzM0OzsgdGhlbgomIzQzOwkJCQlraWxsIC05ICYjMzQ7JF9wJiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCQlmaQomIzQzOwkJZG9uZQomIzQzOwlmaQomIzQzOwlhY3RpdmVfc3J2X25zPSYjMzQ7JiMzNDsKJiM0MzsJY2xlYW51cF93b3JrZGlyCiYjNDM7CWNsZWFudXBfYWxsX25zCiYjNDM7fQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7Y2hlY2tfdG9vbCgpCiYjNDM7ewomIzQzOwlpZiAhIGNvbW1hbmQgLXYgJiMzNDskMSYjMzQ7ICZndDsgL2Rldi9udWxsIDImZ3Q7JmFtcDsxOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7U0tJUDogQ291bGQgbm90IHJ1biB0ZXN0IHdpdGhvdXQgJDEmIzM0OwomIzQzOwkJZXhpdCAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO25zeCgpCiYjNDM7ewomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JDEmIzM0OyBiYXNoIC1jICYjMzQ7JDImIzM0OwomIzQzO30KJiM0MzsKJiM0Mztpc19pcGVyZjNfcGlkKCkKJiM0Mzt7CiYjNDM7CVsgJiMzNDskKGNhdCAvcHJvYy8mIzM0OyQxJiMzNDsvY29tbSAyJmd0Oy9kZXYvbnVsbCkmIzM0OyA9ICYjMzQ7aXBlcmYzJiMzNDsgXQomIzQzO30KJiM0MzsKJiM0MzsjIEJvdW5kZWQgcmVhcCBvZiB0aGUgb25lLXNob3Qgc2VydmVyOiB3YWl0IGF0IG1vc3QgNXMgZm9yIGl0IHRvCiYjNDM7IyBleGl0LCB0aGVuIHJlYXAgdGhlIHdyYXBwZXIgYW5kIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIGl0cyByZWFsCiYjNDM7IyBzdGF0dXMuIEEgc3R1Y2sgc2VydmVyIGNhbiBuZXZlciBoYW5nIHRoZSBzY3JpcHQuCiYjNDM7cmVhcF9pcGVyZl9zZXJ2ZXIoKQomIzQzO3sKJiM0MzsJbG9jYWwgc2VydmVyX3JjCiYjNDM7CiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJa2lsbCAtMCAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8IGJyZWFrCiYjNDM7CQlzbGVlcCAwLjEKJiM0MzsJZG9uZQomIzQzOwlpZiBraWxsIC0wICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgMiZndDsvZGV2L251bGw7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgZXhpdCB3aXRoaW4gNXMmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CXdhaXQgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7CiYjNDM7CXNlcnZlcl93cmFwcGVyPSYjMzQ7JiMzNDsKJiM0MzsJaWYgWyAhIC1zICYjMzQ7JHtyY2ZpbGV9JiMzNDsgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgc3RhdHVzIGZpbGUgbWlzc2luZyAoJHtyY2ZpbGV9KSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJc2VydmVyX3JjPSQoY2F0ICYjMzQ7JHtyY2ZpbGV9JiMzNDspCiYjNDM7CWlmICEgW1sgJiMzNDskc2VydmVyX3JjJiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IFsgJiMzNDskc2VydmVyX3JjJiMzNDsgLW5lIDAgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JiMzOTske3NlcnZlcl9yY30mIzM5OyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJaXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MzsJY2xlYW51cF93b3JrZGlyCiYjNDM7CWFjdGl2ZV9zcnZfbnM9JiMzNDsmIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIERlY2ltYWwtY291bnRlciB2YWxpZGF0aW9uIGZvciB0aGUgc25hcHNob3QgYmxvY2tzOiBldmVyeSB2YWx1ZSBtdXN0CiYjNDM7IyBiZSBhIHBsYWluIGRlY2ltYWwgbnVtYmVyLiBBIHBhcnNlIGZhaWx1cmUgaW4gcmVhZF90eF9jb3VudGVycyB5aWVsZHMKJiM0MzsjIGVtcHR5L2dhcmJsZWQgZmllbGRzLCB3aGljaCB0aGlzIGNoZWNrIHR1cm5zIGludG8gYW4gaW1tZWRpYXRlIEZBSUwuCiYjNDM7dmFsaWRfZGVjaW1hbHMoKQomIzQzO3sKJiM0MzsJbG9jYWwgdgomIzQzOwomIzQzOwlmb3IgdiBpbiAmIzM0OyRAJiMzNDs7IGRvCiYjNDM7CQlbWyAmIzM0OyR2JiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IHJldHVybiAxCiYjNDM7CWRvbmUKJiM0MzsJcmV0dXJuIDAKJiM0Mzt9CiYjNDM7CiYjNDM7c2V0dXBfdG9wbygpCiYjNDM7ewomIzQzOwlzZXR1cF9ucyBuc19kdXQgbnNfc2FuIG5zX3BlZXIgfHwgZXhpdCAkPwomIzQzOwomIzQzOwlpcCBsaW5rIGFkZCBkX2EgbmV0bnMgJiMzNDskbnNfZHV0JiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2EgbmV0bnMgJiMzNDskbnNfcGVlciYjMzQ7CiYjNDM7CWlwIGxpbmsgYWRkIGRfYiBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyAmIzM0OyRuc19wZWVyJiMzNDsKJiM0MzsJaXAgbGluayBhZGQgZF9pbCBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zICYjMzQ7JG5zX3NhbiYjMzQ7CiYjNDM7CiYjNDM7CSMgSFNSIHRhZ3MgYWRkIDYgYnl0ZXMgcGVyIGZyYW1lOyBnaXZlIHRoZSBMQU4gbGVncyBoZWFkcm9vbS4KJiM0MzsJZm9yIGlmYWNlIGluIGRfYSBkX2I7IGRvCiYjNDM7CQluc3ggJiMzNDskbnNfZHV0JiMzNDsgJiMzNDtpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFwKJiM0MzsJCQlpcCBsaW5rIHNldCAkaWZhY2UgdXAmIzM0OwomIzQzOwlkb25lCiYjNDM7CWZvciBpZmFjZSBpbiBwX2EgcF9iOyBkbwomIzQzOwkJbnN4ICYjMzQ7JG5zX3BlZXImIzM0OyAmIzM0O2lwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgXAomIzQzOwkJCWlwIGxpbmsgc2V0ICRpZmFjZSB1cCYjMzQ7CiYjNDM7CWRvbmUKJiM0MzsKJiM0MzsJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBzZXQgZF9pbCB1cCYjMzQ7CiYjNDM7CW5zeCAmIzM0OyRuc19zYW4mIzM0OyAmIzM0O2lwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMCYjMzQ7CiYjNDM7CiYjNDM7CW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgYWRkIGhzcjAgdHlwZSBoc3IgXAomIzQzOwkJc2xhdmUxIGRfYSBzbGF2ZTIgZF9iIGludGVybGluayBkX2lsIHByb3RvIDA7IFwKJiM0MzsJCWlwIGxpbmsgc2V0IGhzcjAgdXAmIzM0OwomIzQzOwluc3ggJiMzNDskbnNfcGVlciYjMzQ7ICYjMzQ7aXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcCiYjNDM7CQlzbGF2ZTEgcF9hIHNsYXZlMiBwX2IgcHJvdG8gMDsgXAomIzQzOwkJaXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjEmIzM0OwomIzQzOwomIzQzOwkjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXImIzM5O3Mgc3VwZXJ2aXNpb24gZnJhbWVzLgomIzQzOwlzbGVlcCAyCiYjNDM7fQomIzQzOwomIzQzO2NoZWNrX2ZlYXR1cmUoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGlmYWNlPSYjMzQ7JDImIzM0OwomIzQzOwlsb2NhbCBmZWF0dXJlPSYjMzQ7JDMmIzM0OwomIzQzOwlsb2NhbCB3YW50PSYjMzQ7JDQmIzM0OwomIzQzOwomIzQzOwlpZiBuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2V0aHRvb2wgLWsgJGlmYWNlJiMzNDsgfCBncmVwIC1xICYjMzQ7XiRmZWF0dXJlOiAkd2FudCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF0mIzM0OwomIzQzOwllbHNlCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7IyBPZmYtb3ItYWJzZW50IHZhcmlhbnQ6IGZhaWxzIG9ubHkgd2hlbiB0aGUgZmVhdHVyZSBpcyBwcmVzZW50IEFORCBvbiwKJiM0MzsjIHNvIGRldmljZXMgdGhhdCBzaW1wbHkgZG8gbm90IGxpc3QgdGhlIGZlYXR1cmUgZG8gbm90IGZhaWwgaXQuCiYjNDM7Y2hlY2tfZmVhdHVyZV9ub3Rfb24oKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7CiYjNDM7CWxvY2FsIGlmYWNlPSYjMzQ7JDImIzM0OwomIzQzOwlsb2NhbCBmZWF0dXJlPSYjMzQ7JDMmIzM0OwomIzQzOwomIzQzOwlpZiBuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2V0aHRvb2wgLWsgJGlmYWNlJiMzNDsgfCBncmVwIC1xICYjMzQ7XiRmZWF0dXJlOiBvbiYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBvbiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwllbHNlCiYjNDM7CQllY2hvICYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdJiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKCkKJiM0Mzt7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy4mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2IgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9pbCBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmYKJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0dSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy4mIzM0OwomIzQzOwomIzQzOwllY2hvICYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBIVy1HUk8uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2EgcngtZ3JvLWh3IG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYiByeC1ncm8taHcgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9pbCByeC1ncm8taHcgb2ZmCiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuJiMzNDsKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmVfbm90X29uICYjMzQ7JG5zX2R1dCYjMzQ7IGhzcjAgdHgtdWRwLXNlZ21lbnRhdGlvbgomIzQzOwljaGVja19mZWF0dXJlX25vdF9vbiAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIHR4LWdzby1saXN0CiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPLWZhbWlseSBmZWF0dXJlcy4mIzM0OwomIzQzO30KJiM0MzsKJiM0MzthbGxvY193b3JrZGlyKCkKJiM0Mzt7CiYjNDM7CSMgQWxsb2NhdGVkIG9ubHkgaGVyZSwgbG9uZyBhZnRlciB0aGUgaW5pdGlhbCB0b3BvbG9neSBjbGVhbnVwLCBzbwomIzQzOwkjIGNsZWFudXAoKSBhdCBzZXR1cF90b3BvKCkgdGltZSBjYW4gbmV2ZXIgcmVtb3ZlIGl0LiBta3RlbXAgZmFpbHVyZQomIzQzOwkjIGlzIGEgaGFyZCB0ZXN0IGZhaWx1cmUuCiYjNDM7CXdvcmtkaXI9JChta3RlbXAgLWQgL3RtcC9oc3JfZ3JvX3Rlc3QuWFhYWFhYKSB8fCB7CiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbWt0ZW1wIC1kIGZhaWxlZCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0IDEKJiM0MzsJfQomIzQzOwljaG1vZCA3MDAgJiMzNDske3dvcmtkaXJ9JiMzNDsKJiM0MzsJcGlkZmlsZT0mIzM0OyR7d29ya2Rpcn0vaXBlcmYucGlkJiMzNDsKJiM0MzsJcmNmaWxlPSYjMzQ7JHt3b3JrZGlyfS9pcGVyZi5yYyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzOyMgTnVtZXJpYywgYWxpdmUsIGNvbW0gPT0gaXBlcmYzLCBhbmQgcmVhbGx5IG93bmVkIGJ5IHRoZSBnaXZlbiBuZXRucy4KJiM0Mzt2YWxpZF9zZXJ2ZXJfcGlkKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHBucz0mIzM0OyQxJiMzNDsgcD0mIzM0OyQyJiMzNDsKJiM0MzsKJiM0MzsJW1sgJiMzNDskcCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCByZXR1cm4gMQomIzQzOwlraWxsIC0wICYjMzQ7JHAmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCByZXR1cm4gMQomIzQzOwlbICYjMzQ7JChjYXQgL3Byb2MvJiMzNDskcCYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF0gfHwgcmV0dXJuIDEKJiM0MzsJaXAgbmV0bnMgcGlkcyAmIzM0OyRwbnMmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IGdyZXAgLXF4ICYjMzQ7JHAmIzM0OwomIzQzO30KJiM0MzsKJiM0MztzdGFydF9pcGVyZl9zZXJ2ZXIoKQomIzQzO3sKJiM0MzsJbG9jYWwgc3J2X25zPSYjMzQ7JDEmIzM0OwomIzQzOwlsb2NhbCBzcnZfaXA9JiMzNDskezI6LX0mIzM0OwomIzQzOwlsb2NhbCBjYW5kaWRhdGVfcGlkCiYjNDM7CiYjNDM7CSMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHMKJiM0MzsJIyByZWFsIGV4aXQgc3RhdHVzIChuZXRucyBzaGFyZXMgdGhlIFBJRCBuYW1lc3BhY2UgYW5kIHRoZSBob3N0IGZzKS4KJiM0MzsJYWxsb2Nfd29ya2RpcgomIzQzOwkjIHJlY29yZCB0aGUgc2VydmVyIG5hbWVzcGFjZSBmb3IgY2xlYW51cCgpIGJlZm9yZQomIzQzOwkjIGFueXRoaW5nIGNhbiBmYWlsIHdpdGggdGhlIHNlcnZlciBydW5uaW5nCiYjNDM7CWFjdGl2ZV9zcnZfbnM9JiMzNDskc3J2X25zJiMzNDsKJiM0MzsJKCBuc3ggJiMzNDskc3J2X25zJiMzNDsgJiMzNDtpcGVyZjMgLXMgLTEgJHtzcnZfaXA6JiM0MzstQiAkc3J2X2lwfSAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MSAmYW1wOyBcCiYjNDM7CQllY2hvIFwkISAmZ3Q7ICR7cGlkZmlsZX07IFwKJiM0MzsJCXdhaXQgXCQhOyBcCiYjNDM7CQllY2hvIFwkPyAmZ3Q7ICR7cmNmaWxlfSYjMzQ7ICkgJmFtcDsKJiM0MzsJc2VydmVyX3dyYXBwZXI9JCEKJiM0MzsJIyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvCiYjNDM7CSMgYXBwZWFyIGluc3RlYWQgb2YgcmFjaW5nIHRoZSByZWFkCiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJWyAtcyAmIzM0OyR7cGlkZmlsZX0mIzM0OyBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCXNsZWVwIDAuMQomIzQzOwlkb25lCiYjNDM7CWlmIFsgISAtcyAmIzM0OyR7cGlkZmlsZX0mIzM0OyBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQmIzM0OyBcCiYjNDM7CQkJJiMzNDsobm8gcGlkZmlsZSkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWNhbmRpZGF0ZV9waWQ9JCgmbHQ7JiMzNDske3BpZGZpbGV9JiMzNDspCiYjNDM7CWlmICEgdmFsaWRfc2VydmVyX3BpZCAmIzM0OyRzcnZfbnMmIzM0OyAmIzM0OyR7Y2FuZGlkYXRlX3BpZH0mIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgcGlkICYjMzk7JHtjYW5kaWRhdGVfcGlkfSYjMzk7JiMzNDsgXAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHZhbGlkYXRpb24mIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CSMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvbgomIzQzOwlpcGVyZl9waWQ9JiMzNDske2NhbmRpZGF0ZV9waWR9JiMzNDsKJiM0MzsJc2xlZXAgMQomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIFByaW50ICYjMzQ7Jmx0O2J5dGVzJmd0OyAmbHQ7cGFja2V0cyZndDsmIzM0OyBmb3IgZXhhY3RseSBvbmUgVFggcmVjb3JkIG9mIG5zL2RldjsgYW55dGhpbmcKJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC4KJiM0MztyZWFkX3R4X2NvdW50ZXJzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSYjMzQ7JDEmIzM0OyBkZXY9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIG91dCBjbnQKJiM0MzsKJiM0MzsJb3V0PSQobnN4ICYjMzQ7JG5zJiMzNDsgJiMzNDtpcCAtcyBsaW5rIHNob3cgJGRldiYjMzQ7IHwgXAomIzQzOwkJYXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OykKJiM0MzsJY250PSQoZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLWMgJiMzOTteWzAtOV0qIFswLTldKiQmIzM5OykKJiM0MzsJaWYgWyAmIzM0OyRjbnQmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2JiMzNDsgXAomIzQzOwkJCSYjMzQ7KHJlY29yZHM9JGNudCkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJZWNobyAmIzM0OyRvdXQmIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIFByaW50ICYjMzQ7Jmx0O2J5dGVzJmd0OyAmbHQ7cGFja2V0cyZndDsmIzM0OyBmb3IgZXhhY3RseSBvbmUgUlggcmVjb3JkIG9mIG5zL2RldjsgdGhlCiYjNDM7IyBzYW1lIHNpbmdsZS1yZWNvcmQgZGlzY2lwbGluZSBhcyByZWFkX3R4X2NvdW50ZXJzLgomIzQzO3JlYWRfcnhfY291bnRlcnMoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JiMzNDskMSYjMzQ7IGRldj0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgb3V0IGNudAomIzQzOwomIzQzOwlvdXQ9JChuc3ggJiMzNDskbnMmIzM0OyAmIzM0O2lwIC1zIGxpbmsgc2hvdyAkZGV2JiMzNDsgfCBcCiYjNDM7CQlhd2sgJiMzOTsvXiAmIzQzO1JYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfSYjMzk7KQomIzQzOwljbnQ9JChlY2hvICYjMzQ7JG91dCYjMzQ7IHwgZ3JlcCAtYyAmIzM5O15bMC05XSogWzAtOV0qJCYjMzk7KQomIzQzOwlpZiBbICYjMzQ7JGNudCYjMzQ7IC1uZSAxIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBjYW5ub3QgcGFyc2UgUlggY291bnRlcnMgb2YgJG5zLyRkZXYmIzM0OyBcCiYjNDM7CQkJJiMzNDsocmVjb3Jkcz0kY250KSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwllY2hvICYjMzQ7JG91dCYjMzQ7CiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwomIzQzO2V2YWxfY291bnRlcl9kZWx0YSgpCiYjNDM7ewomIzQzOwlsb2NhbCBuYW1lPSYjMzQ7JDEmIzM0OyBiMD0mIzM0OyQyJiMzNDsgcDA9JiMzNDskMyYjMzQ7IGIxPSYjMzQ7JDQmIzM0OyBwMT0mIzM0OyQ1JiMzNDsgb3A9JiMzNDskNiYjMzQ7IGxpbWl0PSYjMzQ7JDcmIzM0OwomIzQzOwlsb2NhbCBiZCBwZAomIzQzOwomIzQzOwlpZiAhIFtbICYjMzQ7JGIwJiMzNDsgPX4gXlswLTldJiM0MzskICZhbXA7JmFtcDsgJiMzNDskYjEmIzM0OyA9fiBeWzAtOV0mIzQzOyQgJmFtcDsmYW1wOyBcCiYjNDM7CQkmIzM0OyRwMCYjMzQ7ID1+IF5bMC05XSYjNDM7JCAmYW1wOyZhbXA7ICYjMzQ7JHAxJiMzNDsgPX4gXlswLTldJiM0MzskIF1dOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWUmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWJkPSQoKGIxIC0gYjApKQomIzQzOwlwZD0kKChwMSAtIHAwKSkKJiM0MzsJaWYgWyAmIzM0OyRiZCYjMzQ7IC1sdCAwIF0gfHwgWyAmIzM0OyRwZCYjMzQ7IC1sZSAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBjb3VudGVyIGRlbHRhIGludmFsaWQgZm9yICRuYW1lJiMzNDsgXAomIzQzOwkJCSYjMzQ7KGJ5dGVzPSRiZCBwa3RzPSRwZCkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWlmIFsgJiMzNDskb3AmIzM0OyA9ICYjMzQ7Z3QmIzM0OyBdOyB0aGVuCiYjNDM7CQlpZiBbICYjMzQ7JGJkJiMzNDsgLWxlICQoKHBkICogbGltaXQpKSBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0O0ZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCAmbHQ7PSAkbGltaXQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJCXJldD0xCiYjNDM7CQkJcmV0dXJuIDEKJiM0MzsJCWZpCiYjNDM7CWVsc2UKJiM0MzsJCWlmIFsgJiMzNDskYmQmIzM0OyAtZ3QgJCgocGQgKiBsaW1pdCkpIF07IHRoZW4KJiM0MzsJCQllY2hvICYjMzQ7RkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkICZndDsgJGxpbWl0JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCQlyZXQ9MQomIzQzOwkJCXJldHVybiAxCiYjNDM7CQlmaQomIzQzOwlmaQomIzQzOwllY2hvICYjMzQ7SU5GTzogJG5hbWUgY291bnRlciBkZWx0YSBieXRlcz0kYmQgcGFja2V0cz0kcGQmIzM0OyBcCiYjNDM7CQkmIzM0OyhvcCAkb3AgbGltaXQgJGxpbWl0KSBbIE9LIF0mIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbjogYSBwbGFpbiBTQU4gYWdncmVnYXRlIGVudGVyaW5nIGEgUFJQCiYjNDM7IyBMQU4gc2xhdmUgbXVzdCBiZSBzZWdtZW50ZWQgYXQgdGhlIGZvcndhcmQgZW50cnksIG5vdCBkcm9wcGVkLiBQUlAKJiM0MzsjIGRyb3BzIHNsYXZlLXRvLXNsYXZlIGZvcndhcmRpbmcgYnkgZGVzaWduIChwcnBfZHJvcF9mcmFtZSksIHNvIHRoZQomIzQzOyMgY29uc3VtZXIgb2YgTEFOLXNsYXZlIFNBTiB0cmFmZmljIGlzIGxvY2FsIGRlbGl2ZXJ5IHRvIHRoZSBtYXN0ZXIuCiYjNDM7IyBUd28gaW5kZXBlbmRlbnQgb3JhY2xlczogdGhlIFNBTi1zaWRlIHByb29mIHRoYXQgYWdncmVnYXRlcyByZWFsbHkKJiM0MzsjIGFycml2ZWQgYXQgdGhlIERVVCwgYW5kIHRoZSB2b2x1bWUgJiM0MzsgcGVyLWZyYW1lIHNoYXBlIG9mIHRoZSBsb2NhbAomIzQzOyMgZGVsaXZlcnkuIE9uIHRoZSBicm9rZW4gZ2F0ZSB0aGUgYWdncmVnYXRlcyBhcmUgZHJvcHBlZCBhbmQgVENQCiYjNDM7IyBjcmF3bHMgb24gcmV0cmFuc21pdHRlZCBzaW5nbGUgc2VnbWVudHMsIHNlcGFyYXRpbmcgdGhlIGtlcm5lbHMgYnkKJiM0MzsjIGFuIG9yZGVyIG9mIG1hZ25pdHVkZSBpbiBkZWxpdmVyZWQgYnl0ZXMuCiYjNDM7ZG9fbGFuc2FuX2dzb190ZXN0KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHBycF9pcD0mIzM0OzEwLjk5LjEuMSYjMzQ7IGxzX2lwPSYjMzQ7MTAuOTkuMS4xMCYjMzQ7CiYjNDM7CWxvY2FsIG91dCBzYW5fYjAgc2FuX3AwIHNhbl9iMSBzYW5fcDEKJiM0MzsJbG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSByX2IwIHJfcDAgcl9iMSByX3AxCiYjNDM7CiYjNDM7CXNldHVwX25zIG5zX2xzIHx8IGV4aXQgJD8KJiM0MzsKJiM0MzsJaXAgbGluayBhZGQgZF9wYSBuZXRucyAmIzM0OyRuc19kdXQmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIGxzX2EgbmV0bnMgJiMzNDskbnNfbHMmIzM0OwomIzQzOwlpcCBsaW5rIGFkZCBkX3BiIG5ldG5zICYjMzQ7JG5zX2R1dCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgbHNfcCBuZXRucyAmIzM0OyRuc19scyYjMzQ7CiYjNDM7CiYjNDM7CW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgc2V0IGRfcGEgbXR1IDE2MDAgdXAmIzM0OwomIzQzOwluc3ggJiMzNDskbnNfZHV0JiMzNDsgJiMzNDtpcCBsaW5rIHNldCBkX3BiIG10dSAxNjAwIHVwJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX2xzJiMzNDsgJiMzNDtpcCBsaW5rIHNldCBsc19hIG10dSAxNjAwIHVwOyBcCiYjNDM7CQlpcCBsaW5rIHNldCBsc19wIG10dSAxNjAwIHVwOyBpcCBhZGRyIGFkZCAkbHNfaXAvMjQgZGV2IGxzX2EmIzM0OwomIzQzOwomIzQzOwkjIFBSUCBEVVQgd2l0aCB0aGUgU0FOIG9uIGEgTEFOIHNsYXZlOiBwbGFpbiBTQU4gYWdncmVnYXRlcyBhcmUKJiM0MzsJIyB2YWxpZCB0cmFmZmljIG9uIGEgUFJQIExBTiBhbmQgbXVzdCBub3QgYmUgZHJvcHBlZC4KJiM0MzsJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBhZGQgcHJwMCB0eXBlIGhzciBcCiYjNDM7CQlzbGF2ZTEgZF9wYSBzbGF2ZTIgZF9wYiBwcm90byAxOyBcCiYjNDM7CQlpcCBsaW5rIHNldCBwcnAwIHVwOyBpcCBhZGRyIGFkZCAkcHJwX2lwLzI0IGRldiBwcnAwJiMzNDsKJiM0MzsKJiM0MzsJIyBMZXQgc3VwZXJ2aXNpb24gZnJhbWVzIGNvbnZlcmdlLgomIzQzOwlzbGVlcCAyCiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBFbmFibGluZyBUU08vR1NPIG9uIHRoZSBMQU4tc2lkZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CW5zeCAmIzM0OyRuc19scyYjMzQ7ICYjMzQ7ZXRodG9vbCAtSyBsc19hIHRzbyBvbiBnc28gb24mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2xzJiMzNDsgbHNfYSB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb24KJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0NvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBMQU4tc2lkZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CiYjNDM7CXN0YXJ0X2lwZXJmX3NlcnZlciAmIzM0OyRuc19kdXQmIzM0OyAmIzM0OyRwcnBfaXAmIzM0OyB8fCByZXR1cm4KJiM0MzsKJiM0MzsJcmVhZCAtciByX2IwIHJfcDAgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfcnhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgcHJwMCkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBzYW5fYjAgc2FuX3AwICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX2xzJiMzNDsgbHNfYSkKJiM0MztFT0YKJiM0MzsJaWYgISB2YWxpZF9kZWNpbWFscyAmIzM0OyRyX2IwJiMzNDsgJiMzNDskcl9wMCYjMzQ7ICYjMzQ7JHNhbl9iMCYjMzQ7ICYjMzQ7JHNhbl9wMCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogYmFzZWxpbmUgY291bnRlciBzbmFwc2hvdCBpbnZhbGlkJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwomIzQzOwlpZiAhIG91dD0kKG5zeCAmIzM0OyRuc19scyYjMzQ7ICYjMzQ7dGltZW91dCA2MCBpcGVyZjMgLWMgJHBycF9pcCAtTSAxNDQ2IFwKJiM0MzsJCS1iIDJHIC10IDEwJiMzNDsgMiZndDsmYW1wOzEpOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogTEFOLXNsYXZlIEdTTyBsb2NhbC1kZWxpdmVyeSBzdHJlYW0gZmFpbGVkOiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CXJlYWQgLXIgcl9iMSByX3AxICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3J4X2NvdW50ZXJzICYjMzQ7JG5zX2R1dCYjMzQ7IHBycDApCiYjNDM7RU9GCiYjNDM7CXJlYWQgLXIgc2FuX2IxIHNhbl9wMSAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19scyYjMzQ7IGxzX2EpCiYjNDM7RU9GCiYjNDM7CWlmICEgdmFsaWRfZGVjaW1hbHMgJiMzNDskcl9iMSYjMzQ7ICYjMzQ7JHJfcDEmIzM0OyAmIzM0OyRzYW5fYjEmIzM0OyAmIzM0OyRzYW5fcDEmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGZpbmFsIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsKJiM0MzsJIyBPcmFjbGUgMSAtIGFnZ3JlZ2F0ZXMgcmVhbGx5IGFycml2ZWQ6IHRoZSBTQU4gZW1pdHRlZAomIzQzOwkjIHN1cGVyLXBhY2tldHMgdG93YXJkIHRoZSBEVVQuCiYjNDM7CWV2YWxfY291bnRlcl9kZWx0YSAmIzM0O1NBTiBsc19hIFRYJiMzNDsgJiMzNDskc2FuX2IwJiMzNDsgJiMzNDskc2FuX3AwJiMzNDsgXAomIzQzOwkJJiMzNDskc2FuX2IxJiMzNDsgJiMzNDskc2FuX3AxJiMzNDsgZ3QgJiMzNDskU0FOX0FWR19NSU4mIzM0OwomIzQzOwlbICYjMzQ7JHtyZXQ6LTB9JiMzNDsgLWVxIDAgXSB8fCByZXR1cm4KJiM0MzsKJiM0MzsJIyBPcmFjbGUgMiAtIGxvY2FsIGRlbGl2ZXJ5IG9mIHRob3NlIGFnZ3JlZ2F0ZXM6IHZvbHVtZSBhbmQKJiM0MzsJIyBwZXItZnJhbWUgc2hhcGUgb24gdGhlIFBSUCBtYXN0ZXIuIFRoZSB2b2x1bWUgZ2F0ZSBzZXBhcmF0ZXMKJiM0MzsJIyBmdWxsIGRlbGl2ZXJ5IGZyb20gdGhlIHJldHJhbnNtaXQgY3Jhd2wgdGhlIGJyb2tlbiBnYXRlIGxlYXZlczsKJiM0MzsJIyB0aGUgYXZlcmFnZSBnYXRlIHByb3ZlcyB0aGUgYnl0ZXMgYXJyaXZlZCBwZXItZnJhbWUuCiYjNDM7CWlmIFsgJCgocl9iMSAtIHJfYjApKSAtbHQgMTAwMDAwMDAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBMQU4tc2xhdmUgbG9jYWwgZGVsaXZlcnkgZGVncmFkZWQmIzM0OyBcCiYjNDM7CQkJJiMzNDsocHJwMCBSWCBkZWx0YSAkKChyX2IxIC0gcl9iMCkpIGJ5dGVzICZsdDsgMTAwMDAwMDAwKSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWlmIFsgJCgocl9iMSAtIHJfYjApKSAtZ3QgJCgoIChyX3AxIC0gcl9wMCkgKiBMQU5fQVZHX01BWCApKSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbG9jYWwgZGVsaXZlcnkgbm90IHBlci1mcmFtZSYjMzQ7IFwKJiM0MzsJCQkmIzM0OyhhdmcgJCgoIChyX2IxIC0gcl9iMCkgLyAocl9wMSAtIHJfcDApICkpICZndDsgJExBTl9BVkdfTUFYKSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBMQU4tc2xhdmUgbG9jYWwgZGVsaXZlcnkgcHJwMCBSWCBkZWx0YSYjMzQ7IFwKJiM0MzsJCSYjMzQ7JCgocl9iMSAtIHJfYjApKSBieXRlcyAvICQoKHJfcDEgLSByX3AwKSkgcGt0cyBbIE9LIF0mIzM0OwomIzQzOwlyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm4KJiM0MzsJZWNobyAmIzM0O0lORk86IExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbiBbIE9LIF0mIzM0OwomIzQzO30KJiM0MzsKJiM0Mztkb190c29fc3RyZWFtX3Rlc3QoKQomIzQzO3sKJiM0MzsJbG9jYWwgb3V0IHNlbmRlcl9yZXRyCiYjNDM7CWxvY2FsIHNhbl9iMCBzYW5fcDAgc2FuX2IxIHNhbl9wMQomIzQzOwlsb2NhbCBhX2IwIGFfcDAgYV9iMSBhX3AxIGJfYjAgYl9wMCBiX2IxIGJfcDEKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IEVuYWJsaW5nIFRTTy9HU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7ZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19zYW4mIzM0OyBzMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb24KJiM0MzsJc3RvcF9pZl9lcnJvciAmIzM0O0NvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLiYjMzQ7CiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtJmd0OyBwZWVyIHRocm91Z2ggdGhlIEhTUiBEVVQuJiMzNDsKJiM0MzsJc3RhcnRfaXBlcmZfc2VydmVyICYjMzQ7JG5zX3BlZXImIzM0OyB8fCByZXR1cm4KJiM0MzsKJiM0MzsJIyBDb3VudGVyIHNuYXBzaG90cyBhcm91bmQgdGhlIHN0cmVhbSB3aW5kb3cuIFRoZSBTQU4tc2lkZSBhdmVyYWdlCiYjNDM7CSMgbXVzdCBleGNlZWQgU0FOX0FWR19NSU4gKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IEdTTyBzdXBlci1wYWNrZXRzCiYjNDM7CSMgcmVhbGx5IGxlZnQgdGhlIFNBTik7IGVhY2ggRFVUIExBTiBsZWcgbXVzdCBzdGF5IHVuZGVyIExBTl9BVkdfTUFYCiYjNDM7CSMgKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IGJ1bGsgb3V0cHV0IHdhcyBzZWdtZW50ZWQgcGVyLWZyYW1lKS4gVGhlc2UKJiM0MzsJIyBhcmUgYWdncmVnYXRlIGRpc2NyaW1pbmF0b3JzLCBub3QgYSBwZXItZnJhbWUgbWF4aW11bSBwcm9vZi4KJiM0MzsJc2FuX2IwPTA7IHNhbl9wMD0wOyBhX2IwPTA7IGFfcDA9MDsgYl9iMD0wOyBiX3AwPTAKJiM0MzsJcmVhZCAtciBzYW5fYjAgc2FuX3AwICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX3NhbiYjMzQ7IHMwKQomIzQzO0VPRgomIzQzOwlyZWFkIC1yIGFfYjAgYV9wMCAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19kdXQmIzM0OyBkX2EpCiYjNDM7RU9GCiYjNDM7CXJlYWQgLXIgYl9iMCBiX3AwICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYikKJiM0MztFT0YKJiM0MzsJaWYgISB2YWxpZF9kZWNpbWFscyAmIzM0OyRzYW5fYjAmIzM0OyAmIzM0OyRzYW5fcDAmIzM0OyAmIzM0OyRhX2IwJiMzNDsgJiMzNDskYV9wMCYjMzQ7IFwKJiM0MzsJCSYjMzQ7JGJfYjAmIzM0OyAmIzM0OyRiX3AwJiMzNDs7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBiYXNlbGluZSBUWCBjb3VudGVyIHNuYXBzaG90IGludmFsaWQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CiYjNDM7CSMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eQomIzQzOwkjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuCiYjNDM7CSMgVW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJIGVkZ2UgcmF0ZXMgd2l0aG91dCBpbmRpY2F0aW5nIGEKJiM0MzsJIyBmdW5jdGlvbmFsIHByb2JsZW0uCiYjNDM7CWlmICEgb3V0PSQobnN4ICYjMzQ7JG5zX3NhbiYjMzQ7ICYjMzQ7dGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcCiYjNDM7CQktYiAyRyAtdCAxMCYjMzQ7IDImZ3Q7JmFtcDsxKTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBjbGllbnQgZmFpbGVkOiYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CiYjNDM7CXJlYWQgLXIgc2FuX2IxIHNhbl9wMSAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19zYW4mIzM0OyBzMCkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBhX2IxIGFfcDEgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgZF9hKQomIzQzO0VPRgomIzQzOwlyZWFkIC1yIGJfYjEgYl9wMSAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19kdXQmIzM0OyBkX2IpCiYjNDM7RU9GCiYjNDM7CWlmICEgdmFsaWRfZGVjaW1hbHMgJiMzNDskc2FuX2IxJiMzNDsgJiMzNDskc2FuX3AxJiMzNDsgJiMzNDskYV9iMSYjMzQ7ICYjMzQ7JGFfcDEmIzM0OyBcCiYjNDM7CQkmIzM0OyRiX2IxJiMzNDsgJiMzNDskYl9wMSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtTQU4gczAgVFgmIzM0OyAmIzM0OyRzYW5fYjAmIzM0OyAmIzM0OyRzYW5fcDAmIzM0OyAmIzM0OyRzYW5fYjEmIzM0OyAmIzM0OyRzYW5fcDEmIzM0OyBcCiYjNDM7CQlndCAmIzM0OyRTQU5fQVZHX01JTiYjMzQ7CiYjNDM7CWV2YWxfY291bnRlcl9kZWx0YSAmIzM0O0RVVCBkX2EgVFgmIzM0OyAmIzM0OyRhX2IwJiMzNDsgJiMzNDskYV9wMCYjMzQ7ICYjMzQ7JGFfYjEmIzM0OyAmIzM0OyRhX3AxJiMzNDsgXAomIzQzOwkJbGUgJiMzNDskTEFOX0FWR19NQVgmIzM0OwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtEVVQgZF9iIFRYJiMzNDsgJiMzNDskYl9iMCYjMzQ7ICYjMzQ7JGJfcDAmIzM0OyAmIzM0OyRiX2IxJiMzNDsgJiMzNDskYl9wMSYjMzQ7IFwKJiM0MzsJCWxlICYjMzQ7JExBTl9BVkdfTUFYJiMzNDsKJiM0MzsJWyAmIzM0OyR7cmV0Oi0wfSYjMzQ7IC1lcSAwIF0gfHwgcmV0dXJuCiYjNDM7CiYjNDM7CSMgc3VjY2VzcyBwYXRoOiBib3VuZGVkIHJlYXAgd2l0aCB0aGUgc2VydmVyJiMzOTtzIHJlYWwgc3RhdHVzCiYjNDM7CXJlYXBfaXBlcmZfc2VydmVyIHx8IHJldHVybgomIzQzOwomIzQzOwkjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUCiYjNDM7CSMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlcgomIzQzOwkjIGdhdGVzICh0aGUgY291bnRlciBpbmVxdWFsaXRpZXMgYWJvdmUgYXJlIHRoZSBwcmltYXJ5IGV2aWRlbmNlKS4KJiM0MzsJc2VuZGVyX3JldHI9JChlY2hvICYjMzQ7JG91dCYjMzQ7IHwgYXdrICYjMzk7L3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0mIzM5OykKJiM0MzsJaWYgWyAmIzM0OyQoZWNobyAmIzM0OyRzZW5kZXJfcmV0ciYjMzQ7IHwgZ3JlcCAtRWMgJiMzOTteWzAtOV0mIzQzOyQmIzM5OykmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIHNlbmRlciByZXRyYW5zbWl0cyByZWxpYWJseSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7JiMzNDsgXAomIzQzOwkJJiMzNDtzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDskb3V0JiMzNDsgfCBncmVwIC1FICYjMzQ7c2VuZGVyfHJlY2VpdmVyJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hlY2tfcHJlcmVxdWlzaXRlcwomIzQzO2NoZWNrX3Rvb2wgZXRodG9vbAomIzQzO2NoZWNrX3Rvb2wgaXBlcmYzCiYjNDM7Y2hlY2tfdG9vbCB0aW1lb3V0CiYjNDM7CiYjNDM7IyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LgomIzQzO2lmICEgaXAgbGluayBoZWxwIGhzciAyJmd0OyZhbXA7MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydCYjMzQ7CiYjNDM7CWV4aXQgJGtzZnRfc2tpcAomIzQzO2ZpCiYjNDM7CiYjNDM7c2V0dXBfdG9wbwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC0mZ3Q7IHBlZXIgdGhyb3VnaCB0aGUgRFVUKS4mIzM0OwomIzQzO2RvX3BpbmcgJiMzNDskbnNfc2FuJiMzNDsgJiMzNDskcGVlcl9pcCYjMzQ7CiYjNDM7c3RvcF9pZl9lcnJvciAmIzM0O0luaXRpYWwgdmFsaWRhdGlvbiBmYWlsZWQuJiMzNDsKJiM0MzsKJiM0Mztkb19ncm9fZmVhdHVyZV9jaGVja3MKJiM0Mztkb190c29fc3RyZWFtX3Rlc3QKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7R1NPIHN1cGVyLXBhY2tldCBzdHJlYW0gdGVzdCBmYWlsZWQuJiMzNDsKJiM0MzsKJiM0Mztkb19sYW5zYW5fZ3NvX3Rlc3QKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7TEFOLXNsYXZlIHBsYWluLUdTTyByZWdyZXNzaW9uIGZhaWxlZC4mIzM0OwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBBbGwgZ29vZC4mIzM0OwomIzQzO2NsZWFudXAKJiM0MztleGl0ICRyZXQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE3OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTU5CgkJCQkJCQlvdXRwdXQ6IDIwNQoJCQkJCQkJdGhvdWdodHM6IDE2MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbjogR1JPL0dTTyBQYXRjaCBmb3IgSFNSKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtZXNzaW5nIHdpdGggR1JPIGFuZCBHU08gd2l0aGluIHRoZSBIU1IgZnJhbWV3b3JrLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHJ1biBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBvbiB0aGlzIHRoaW5nLiBXZSYjMzk7cmUgbG9va2luZyBhdCBjaGFuZ2VzIHRoYXQ6CgoxLiAgRGlzYWJsZSBHUk8gb24gZGV2aWNlcyBlbnNsYXZlZCB0byBhbiBIU1IgbWFzdGVyLiBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgYWRkZWQgaGVyZS4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoyLiAgTW9kaWZ5IGhvdyBIU1IgaGFuZGxlcyBHU08gc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gYmVmb3JlIGZvcndhcmRpbmcuIFRoaXMgaXMgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydC4gSXQmIzM5O3MgZG9uZSB0aHJvdWdoIHRoZSBuZXcgYGhzcl9mb3J3YXJkX3NrYmAgZnVuY3Rpb24gYW5kIHRoZSB1c2FnZSBvZiBgX19za2JfZ3NvX3NlZ21lbnRgLiBUaGV5JiMzOTtyZSBhbHNvIGFkanVzdGluZyB0aGUgbG9ja2luZyBhcm91bmQgdGhlIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzIHdpdGhpbiB0aGUgSFNSIGNvZGUuCgpOb3csIGxldCYjMzk7cyBsb29rIGNsb3NlciBhdCB0aGUgY29kZS4gSSBzZWUgdGhleSYjMzk7cmUgZG9pbmcgYHNrYl9oZWFkZXJfcG9pbnRlcmAgY2FsbHMsIGFuZCB0aGVyZSBhcmUgc29tZSBidWZmZXJzLCBsaWtlIGBlaGAgYW5kIGB2aGAgdG8gaG9sZCB0aGUgRXRoZXJuZXQgYW5kIFZMQU4gaGVhZGVycy4gTm8gYmlnIGRlYWwsIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZS4gVGhlIHBhdGNoIGNhbGxzIGBfX3NrYl9nc29fc2VnbWVudGAuCgpUaGUgb2J2aW91cyBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPwoKUmlnaHQgb2ZmIHRoZSBiYXQsIEkgd2FudCB0byBydWxlIG91dCBhbnkgaW1tZWRpYXRlIEtNU0FOIGZsYWdzLiBUaGVyZSBhcmUgYSBmZXcgYXJlYXMgdGhhdCBjb25jZXJuIG1lLCBzbyBJIHdhbnQgdG8gYmUgdGhvcm91Z2guCgoqICAgYHNrYl9oZWFkZXJfcG9pbnRlcmAgLSBJdCBzZWVtcyBzYWZlIGJlY2F1c2UgaXQgZWl0aGVyIHJldHVybnMgYSBwb2ludGVyIHRvIGluaXRpYWxpemVkIGRhdGEgd2l0aGluIHRoZSBgc2tiYCBvciBpdCBmaWxscyB0aGUgZ2l2ZW4gYnVmZmVyLgoqICAgYF9fc2tiX2dzb19zZWdtZW50YCAtIEkmIzM5O20gYSBsaXR0bGUgbW9yZSBjb25jZXJuZWQgaGVyZSBiZWNhdXNlIGl0IGNyZWF0ZXMgbmV3IHNrYnMuIEJ1dCBgX19za2JfZ3NvX3NlZ21lbnRgIGlzIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBzbyBJJiMzOTttIG5vdCBvdmVybHkgd29ycmllZCBhYm91dCBpdC4gSXQmIzM5O3MgYSB3ZWxsLXRlc3RlZCBwYXJ0IG9mIHRoZSBrZXJuZWwuCgpJIG5lZWQgdG8gYmUgY2VydGFpbi4gU28sIHRoZXJlIGlzIG5vIG5ldyBrZXJuZWwgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIE5vIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBXZSBhcmUgZGVhbGluZyB3aXRoIHN0YW5kYXJkIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIHRoZSBHUk8vR1NPIGZlYXR1cmVzLCBhbmQgc29tZSBsb2NraW5nLgoKSSB0YWtlIGEgbG9vayBhdCB0aGUgbmV3bHkgYWRkZWQgZnVuY3Rpb24sIGBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90b2AuIEl0IHJlYWRzIGhlYWRlciBkYXRhIHVzaW5nIGBza2JfaGVhZGVyX3BvaW50ZXJgLiBJZiB0aGUgaGVhZGVyIGRhdGEgaXMgaW4gdGhlIGxpbmVhciBwYXJ0LCBpdCByZXR1cm5zIGEgcG9pbnRlcjsgb3RoZXJ3aXNlLCBpdCBjb3BpZXMgdGhlIGhlYWRlciBpbnRvIGEgbG9jYWwgYnVmZmVyLiBJIHNlZSBhIGZhbWlsaWFyIHBhdHRlcm4gdXNpbmcgYHNrYl9oZWFkZXJfcG9pbnRlcmA6CgpgYGBjCglldGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCAwLCBzaXplb2YoZWgpLCAmYW1wO2VoKTsKCWlmICghZXRoKQoJCXJldHVybiAwOwoJcHJvdG8gPSBldGgtJmd0O2hfcHJvdG87CmBgYAoKVGhpcyBwYXR0ZXJuIGlzIHdlbGwtdW5kZXJzdG9vZCwgc3RhbmRhcmQsIGFuZCBzYWZlLiBTbywgSSBzZWUgbm8gcG90ZW50aWFsIEtNU0FOIGlzc3VlcyBoZXJlLgoKRXNzZW50aWFsbHksIGFsbCB0aGUgbWVtb3J5IGFjY2VzcyBpcyBzYWZlLCBpbml0aWFsaXplZCBtZW1vcnksIHN0YW5kYXJkIG5ldHdvcmsgb3BlcmF0aW9ucy4gSSBoYXZlIHRvIHNheSwgYmFzZWQgb24gbXkgZXhwZXJ0IGFzc2Vzc21lbnQsIHRoZXJlJiMzOTtzIG5vIHNtb2tpbmcgZ3VuIGhlcmUgdGhhdCB3YXJyYW50cyBhIEtNU0FOIHJ1bi4gQW55IG1lbW9yeS1yZWxhdGVkIGlzc3VlcywgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIGxvY2tpbmcgcHJvYmxlbXMsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gS01TQU4gaXMgb3ZlcmtpbGwgaW4gdGhpcyBjYXNlLgoKRmluYWwgYW5zd2VyOiBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSBzdGFuZGFyZCB0b29scyBzaG91bGQgYmUgc3VmZmljaWVudC4gVGhlIHBhdGNoIGZpeGVzIGEgYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGhhbmRsZSBHU08gKEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQpIHN1cGVyLXBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtIGJlZm9yZSBmb3J3YXJkaW5nLCBhbmQgZGlzYWJsZXMgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgb24gZW5zbGF2ZWQgZGV2aWNlcy4gSXQgYWxzbyBhZGp1c3RzIGxvY2tpbmcgYXJvdW5kIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBza2Igc2VnbWVudGF0aW9uIChgX19za2JfZ3NvX3NlZ21lbnRgKSwgYW5kIHJlYWRpbmcgcGFja2V0IGhlYWRlcnMgdXNpbmcgdGhlIHN0YW5kYXJkIGBza2JfaGVhZGVyX3BvaW50ZXJgIGZ1bmN0aW9uLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgdG8gaGFuZGxlIEdTTyAoR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCkgc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gYmVmb3JlIGZvcndhcmRpbmcsIGFuZCBkaXNhYmxlcyBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBvbiBlbnNsYXZlZCBkZXZpY2VzLiBJdCBhbHNvIGFkanVzdHMgbG9ja2luZyBhcm91bmQgc2VxdWVuY2UgbnVtYmVyIGluY3JlbWVudHMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgbG9naWMsIHNrYiBzZWdtZW50YXRpb24gKGBfX3NrYl9nc29fc2VnbWVudGApLCBhbmQgcmVhZGluZyBwYWNrZXQgaGVhZGVycyB1c2luZyB0aGUgc3RhbmRhcmQgYHNrYl9oZWFkZXJfcG9pbnRlcmAgZnVuY3Rpb24uIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDowMy45NDMzOTEzOTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzM4MDI4MjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgICBcImRldl9kaXNhYmxlX2dyb1wiLFxuICAgIFwibmV0aWZfZGlzYWJsZV9ncm9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgdG8gaGFuZGxlIEdTTyAoR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCkgc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gYmVmb3JlIGZvcndhcmRpbmcsIGFuZCBkaXNhYmxlcyBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBvbiBlbnNsYXZlZCBkZXZpY2VzLiBJdCBhbHNvIGFkanVzdHMgbG9ja2luZyBhcm91bmQgc2VxdWVuY2UgbnVtYmVyIGluY3JlbWVudHMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcgbG9naWMsIHNrYiBzZWdtZW50YXRpb24gKGBfX3NrYl9nc29fc2VnbWVudGApLCBhbmQgcmVhZGluZyBwYWNrZXQgaGVhZGVycyB1c2luZyB0aGUgc3RhbmRhcmQgYHNrYl9oZWFkZXJfcG9pbnRlcmAgZnVuY3Rpb24uIE5vIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHByb3RvY29sIHRvIGhhbmRsZSBHU08gc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byB0aGUgY29yZSBuZXR3b3JrIGRldmljZSBBUEkgdG8gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIGRldmljZSwgYW5kIHVzZXMgdGhpcyB0byBkaXNhYmxlIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcGFja2V0IHByb2Nlc3NpbmcgYW5kIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDowMy45NDMzOTkxNzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjUwNjQ3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjNGRhMTdlOTY2MWQ5YjNkM2E1NDQ1OGI0MDVlN2ZkZjZhZDE2MmUyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTc6NDA6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCA5OTgxZDYzN2Y4YjU0Li5lYmEyYzI2YTQ5YmE4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuQEAgLTM0MzQsNiArMzQzNCw4IEBAIHZvaWQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xcbiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7XFxuIHUxNiBkZXZfcGlja190eF96ZXJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2Rldik7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCA1OTMzYzVkYWIwOWVlLi5mMjBkNWFiMGNmNzI5IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtMTg0MCw2ICsxODQwLDIxIEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0fVxcbiB9XFxuIFxcbit2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4rXFxuK1xcdGRldi1cXHUwMDNld2FudGVkX2ZlYXR1cmVzIFxcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XFxuK1xcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcXG4rXFxuK1xcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoZGV2LCBsb3dlcl9kZXYsIGl0ZXIpIHtcXG4rXFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XFxuK1xcdFxcdG5ldGlmX2Rpc2FibGVfZ3JvKGxvd2VyX2Rldik7XFxuK1xcdFxcdG5ldGRldl91bmxvY2tfb3BzKGxvd2VyX2Rldik7XFxuK1xcdH1cXG4rfVxcbitcXG4gLyoqXFxuICAqXFx0ZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxcbiAgKlxcdEBkZXY6IGRldmljZVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmNcXG5pbmRleCA0Mzc5NDdkZDA4ZWQ1Li4zY2EyNTE1YWQwNDg2IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldl9hcGkuY1xcbisrKyBiL25ldC9jb3JlL2Rldl9hcGkuY1xcbkBAIC0yNjksNiArMjY5LDI3IEBAIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xcbiBcXG4rLyoqXFxuKyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxcbisgKiBAZGV2OiBkZXZpY2VcXG4rICpcXG4rICogQmVzdC1lZmZvcnQgZGlzYWJsZSBvZiBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldFxcbisgKiBkZXZpY2UuICBNdXN0IGJlIGNhbGxlZCB1bmRlciBSVE5MLiAgVGhpcyBpcyBuZWVkZWQgaWYgcmVjZWl2ZWRcXG4rICogcGFja2V0cyBtYXkgYmUgZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLlxcbisgKlxcbisgKiBUaGUgZGlzYWJsZSBpcyBiZXN0LWVmZm9ydDogYSBkZXZpY2Ugd2l0aCBhIGZpeGVkLW9uIGZlYXR1cmUgKGZvclxcbisgKiBleGFtcGxlIEdST19IVyBvbiBhIHZpcnRpby1uZXQgZGV2aWNlIG5lZ290aWF0ZWQgd2l0aG91dFxcbisgKiBWSVJUSU9fTkVUX0ZfQ1RSTF9HVUVTVF9PRkZMT0FEUykga2VlcHMgaXQgZW5hYmxlZC4gIENhbGxlcnMgdGhhdFxcbisgKiBuZWVkIGEgaGFyZCBndWFyYW50ZWUgbXVzdCBpbnNwZWN0IHRoZSByZXN1bHRpbmcgZmVhdHVyZSBzdGF0ZS5cXG4rICovXFxuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuK1xcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XFxuK1xcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pO1xcbitcXG4gLyoqXFxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxcbiAgKiBAZGV2OiBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbmluZGV4IDU1NTViNzFhYjE5YjUuLjI0OGNiYjE0MmUyMWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3JfZGV2aWNlLmNcXG4rKysgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbkBAIC0yMzIsOSArMjMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRza2ItXFx1MDAzZWRldiA9IG1hc3Rlci1cXHUwMDNlZGV2O1xcbiBcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xcbiBcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbkBAIC0zMzUsNiArMzMzLDcgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxcbiBcXHRcXHRoc3Jfc3RhZy1cXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXFx1MDAzZXNlcXVlbmNlX25yKTtcXG4gXFx0XFx0aHNyLVxcdTAwM2VzZXF1ZW5jZV9ucisrO1xcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xcbiBcXHQvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqL1xcbkBAIC0zNTYsMTQgKzM1NSwxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuIFxcdFxcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXFx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVxcdTAwM2VtYWNhZGRyZXNzX3JlZGJveCk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbitcXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuIFxcbiBcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLVxcdHJldHVybjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXFxuQEAgLTM5MCw2ICszODUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHRoc3Jfc3RhZy1cXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXFx1MDAzZXN1cF9zZXF1ZW5jZV9ucik7XFxuIFxcdGhzci1cXHUwMDNlc3VwX3NlcXVlbmNlX25yKys7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHRoc3Jfc3RhZy1cXHUwMDNldGx2LkhTUl9UTFZfdHlwZSA9IFBSUF9UTFZfTElGRV9DSEVDS19ERDtcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTtcXG4gXFxuQEAgLTM5NywxMyArMzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbiBcXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbiBcXG4tXFx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuK1xcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4gXFxuIFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XFxuLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiB9XFxuIFxcbiAvKiBBbm5vdW5jZSAoc3VwZXJ2aXNpb24gZnJhbWUpIHRpbWVyIGZ1bmN0aW9uXFxuQEAgLTY1OSw3ICs2NTIsNyBAQCB2b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuIFxcbiBcXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfFxcbi1cXHRcXHRcXHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcXG4rXFx0XFx0XFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcXG4gXFx0XFx0XFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxcbiBcXHRcXHRcXHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG5pbmRleCAwNzc0OTgxYTY1YzE2Li5mNDI2OTRjZjQzMDk5IDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZ3NvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJoc3JfbWFpbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaHNyX2ZyYW1lcmVnLmhcXFwiXFxuIFxcbkBAIC02MjEsOSArNjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxcbiBcXHQgICAgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XFxuIFxcdFxcdC8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovXFxuLVxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0XFx0ZnJhbWUtXFx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVxcdTAwM2VzZXF1ZW5jZV9ucjtcXG4gXFx0XFx0aHNyLVxcdTAwM2VzZXF1ZW5jZV9ucisrO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC03MzEsNyArNzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4gfVxcbiBcXG4gLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbitzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4ge1xcbiBcXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7XFxuIFxcbkBAIC03NDYsOCArNzQ4LDggQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbiBcXHQgKiBTbyBjaGVjayBhbmQgaW5jcmVtZW50IHN0YXRzIGZvciBtYXN0ZXIgcG9ydCBvbmx5IGhlcmUuXFxuIFxcdCAqL1xcbiBcXHRpZiAocG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8IHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xcbi1cXHRcXHRwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZXN0YXRzLnR4X3BhY2tldHMrKztcXG4tXFx0XFx0cG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VzdGF0cy50eF9ieXRlcyArPSBza2ItXFx1MDAzZWxlbjtcXG4rXFx0XFx0REVWX1NUQVRTX0lOQyhwb3J0LVxcdTAwM2VkZXYsIHR4X3BhY2tldHMpO1xcbitcXHRcXHRERVZfU1RBVFNfQUREKHBvcnQtXFx1MDAzZWRldiwgdHhfYnl0ZXMsIHNrYi1cXHUwMDNlbGVuKTtcXG4gXFx0fVxcbiBcXG4gXFx0a2ZyZWVfc2tiKGZyYW1lLnNrYl9oc3IpO1xcbkBAIC03NTcsNiArNzU5LDEwNSBAQCB2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuIFxcbiBvdXRfZHJvcDpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdHBvcnQtXFx1MDAzZWRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRERVZfU1RBVFNfSU5DKHBvcnQtXFx1MDAzZWRldiwgdHhfZHJvcHBlZCk7XFxuK1xcdGtmcmVlX3NrYihza2IpO1xcbit9XFxuK1xcbisvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xcbisgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuXFxuKyAqL1xcbisvKiBFZmZlY3RpdmUgZnJhbWUgcHJvdG9jb2wgb2YgYSAocG9zc2libHkgVkxBTi10YWdnZWQpIHNrYiwgb3IgMCB3aGVuXFxuKyAqIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIG9yIHRoZSB0YWdnaW5nIGV4Y2VlZHMgd2hhdCBIU1Igc3VwcG9ydHMuXFxuKyAqIEhTUiBzdXBwb3J0cyBvbmUgODAyLjFRIEMtdGFnIG9ubHksIG1hdGNoaW5nIGZpbGxfZnJhbWVfaW5mbygpOiBhblxcbisgKiBhY2NlbGVyYXRlZCB0YWcgbXVzdCBiZSBhIEMtdGFnIHdpdGggYSBub24tVkxBTiBpbm5lciBwcm90b2NvbDsgYW5cXG4rICogaW4tYmFuZCB0YWcgaXMgdW53cmFwcGVkIGV4YWN0bHkgb25jZSBhbmQgYSByZXNpZHVhbCBWTEFOIEV0aGVyVHlwZVxcbisgKiBpcyByZWplY3RlZC4gUmVhZC1vbmx5OyBubyBzdGF0ZSBpcyBrZXB0IGJleW9uZCB0aGUgaW1tZWRpYXRlXFxuKyAqIHByb3RvY29sIHZhbHVlLlxcbisgKi9cXG4rc3RhdGljIF9fYmUxNiBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBldGhoZHIgZWg7XFxuK1xcdHN0cnVjdCB2bGFuX2hkciB2aDtcXG4rXFx0Y29uc3Qgc3RydWN0IGV0aGhkciAqZXRoO1xcbitcXHRjb25zdCBzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHI7XFxuK1xcdF9fYmUxNiBwcm90bztcXG4rXFxuK1xcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7XFxuK1xcdFxcdC8qIEhTUiBzdXBwb3J0cyBvbmUgODAyLjFRIEMtdGFnIG9ubHkuICovXFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZXZsYW5fcHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0aWYgKGV0aF90eXBlX3ZsYW4oc2tiLVxcdTAwM2Vwcm90b2NvbCkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2Vwcm90b2NvbDtcXG4rXFx0fVxcbitcXG4rXFx0ZXRoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKGVoKSwgXFx1MDAyNmVoKTtcXG4rXFx0aWYgKCFldGgpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cHJvdG8gPSBldGgtXFx1MDAzZWhfcHJvdG87XFxuK1xcdGlmICghZXRoX3R5cGVfdmxhbihwcm90bykpXFxuK1xcdFxcdHJldHVybiBwcm90bztcXG4rXFx0aWYgKHByb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR2aGRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgRVRIX0hMRU4sIHNpemVvZih2aCksIFxcdTAwMjZ2aCk7XFxuK1xcdGlmICghdmhkcilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwcm90byA9IHZoZHItXFx1MDAzZWhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87XFxuK1xcdGlmIChldGhfdHlwZV92bGFuKHByb3RvKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gcHJvdG87XFxuK31cXG4rXFxuK3ZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4re1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKm5leHQ7XFxuK1xcdF9fYmUxNiBwcm90bztcXG4rXFxuK1xcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcXG4rXFx0XFx0aHNyX2ZvcndhcmRfc2tiX29uZShza2IsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIENvbmZvcm1pbmcgcGxhaW4tcHJvdG9jb2wgR1NPIHN1cGVyLXBhY2tldHMgY2FycnkgdHJhaWxlci1mcmVlXFxuK1xcdCAqIHNlbmRlciBwYXlsb2FkIGFuZCBhcmUgc2VnbWVudGVkIGhlcmU6IGVhY2ggc2VnbWVudCBpcyBkZWxpdmVyZWRcXG4rXFx0ICogb3IgZm9yd2FyZGVkIGFzIGl0cyBvd24gd2lyZSBmcmFtZSwgb24gYW55IGluZ3Jlc3Mgcm9sZS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGdhdGUgaXMgY29udGVudC1iYXNlZCwgbm90IHBvcnQtYmFzZWQuIEFuIGFnZ3JlZ2F0ZSB3aG9zZVxcbitcXHQgKiBlZmZlY3RpdmUgcHJvdG9jb2wgaXMgRVRIX1BfSFNSIG9yIEVUSF9QX1BSUCBjYW5ub3QgYmUgc2FmZWx5XFxuK1xcdCAqIHNlZ21lbnRlZCBhbmQgaXMgZHJvcHBlZCwgYXMgaXMgYW55IHNrYiB3aG9zZSBoZWFkZXIgY2Fubm90IGJlXFxuK1xcdCAqIHJlYWQgb3Igd2hvc2UgdGFnZ2luZyBleGNlZWRzIHRoZSBzaW5nbGUgODAyLjFRIEMtdGFnIEhTUlxcbitcXHQgKiBzdXBwb3J0cy4gV2l0aCBORVRJRl9GX0hXX0hTUl9UQUdfUk0gdGhlIGxvd2VyIGhhcyBhbHJlYWR5XFxuK1xcdCAqIHN0cmlwcGVkIHRoZSB0YWcsIHNvIHN1Y2ggYWdncmVnYXRlcyBhcnJpdmUgcGxhaW4gYW5kIGFyZVxcbitcXHQgKiBzZWdtZW50ZWQuXFxuK1xcdCAqL1xcbitcXHRwcm90byA9IGhzcl9nc29fZWZmZWN0aXZlX3Byb3RvKHNrYik7XFxuK1xcdGlmICghcHJvdG8pXFxuK1xcdFxcdGdvdG8gZHJvcF9nc287IC8qIGNsYXNzaWZpY2F0aW9uIGZhaWx1cmUsIGZhaWwtc2FmZSAqL1xcbitcXHRpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSB8fCBwcm90byA9PSBodG9ucyhFVEhfUF9QUlApKVxcbitcXHRcXHRnb3RvIGRyb3BfZ3NvO1xcbitcXG4rXFx0LyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWVcXG4rXFx0ICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb21cXG4rXFx0ICogdGhlIGludGVybGluayBmb2xsb3dzIFJYIGNoZWNrc3VtIHNlbWFudGljcy5cXG4rXFx0ICovXFxuK1xcdHNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUik7XFxuK1xcdGlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKVxcbitcXHRcXHRnb3RvIGRyb3BfZ3NvO1xcbitcXG4rXFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0d2hpbGUgKHNlZ3MpIHtcXG4rXFx0XFx0bmV4dCA9IHNlZ3MtXFx1MDAzZW5leHQ7XFxuK1xcdFxcdHNlZ3MtXFx1MDAzZW5leHQgPSBOVUxMO1xcbitcXHRcXHRoc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpO1xcbitcXHRcXHRzZWdzID0gbmV4dDtcXG4rXFx0fVxcbitcXHRyZXR1cm47XFxuK1xcbitkcm9wX2dzbzpcXG4rXFx0REVWX1NUQVRTX0lOQyhwb3J0LVxcdTAwM2VkZXYsIHR4X2Ryb3BwZWQpO1xcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9zbGF2ZS5jIGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbmluZGV4IDAxYzczYjRiNTBkZGQuLmFhMjE1NGIxOWMwYjkgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbisrKyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcXG5AQCAtNzMsMTYgKzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdH1cXG4gXFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcXG4gXFxuLVxcdC8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhXFxuLVxcdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xcbi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLVxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuLVxcdH1cXG4rXFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuIFxcbiBmaW5pc2hfY29uc3VtZTpcXG4gXFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XFxuQEAgLTE3MSw2ICsxNjIsMTEgQEAgc3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0Z290byBmYWlsX3J4X2hhbmRsZXI7XFxuIFxcdGRldl9kaXNhYmxlX2xybyhkZXYpO1xcbiBcXG4rXFx0LyogR1JPIGRpc2FibGluZyBpcyBiZXN0LWVmZm9ydDogZGV2aWNlcyB3aXRoIGZpeGVkLW9uXFxuK1xcdCAqIEdSTy9HUk9fSFcgY2Fubm90IGJlIGZvcmNlZCBvZmYuXFxuK1xcdCAqL1xcbitcXHRkZXZfZGlzYWJsZV9ncm8oZGV2KTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZmFpbF9yeF9oYW5kbGVyOlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbmluZGV4IDMxZmI5MzI2Y2Y1MzMuLjBkMTA1NDc2ZTdjNTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG5AQCAtMyw2ICszLDcgQEBcXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXFxuIFxcbiBURVNUX1BST0dTIDo9IFxcXFxcXG4rXFx0aHNyX2dyb19zdXBlcnBhY2tldC5zaCBcXFxcXFxuIFxcdGhzcl9waW5nLnNoIFxcXFxcXG4gXFx0aHNyX3JlZGJveC5zaCBcXFxcXFxuIFxcdGxpbmtfZmF1bHRzLnNoIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lYmNiZDlmYzQxZWM0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxcbkBAIC0wLDAgKzEsNjMxIEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcXG4rI1xcbisjICAxLiBFbnNsYXZpbmcgYSBkZXZpY2UgdG8gYW4gSFNSIG1hc3RlciBkaXNhYmxlcyBHUk8gb24gaXRcXG4rIyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cXG4rIyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXFxuKyMgIDMuIEEgVENQIHN0cmVhbSBmcm9tIGEgVFNPLWVuYWJsZWQgU0FOICh3aGljaCB0aGVyZWZvcmUgZW1pdHMgR1NPXFxuKyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6XFxuKyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xcbisjICAgICB0aGUgU0FOIGFuZCBwZXItZnJhbWUtc2l6ZWQgdHJhZmZpYyBsZWF2aW5nIHRoZSBEVVQncyBMQU4gcG9ydHMuXFxuKyNcXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XFxuKyNcXG4rIyAgIG5zX3NhbiAgICAgICAgICAgICAgICAgICAgbnNfZHV0ICAgICAgICAgICAgICAgICAgICAgIG5zX3BlZXJcXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xcbisjICB8IHMwIFswLjFdICB8LS0tLS0tLS0tLS0tLXwgZF9pbCAgIGhzcjAgICB8LS0tLS0tLS0tLS18IGhzcjEgWzAuM118XFxuKyMgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHxcXG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xcbisjXFxuKyMgU0FOIHRyYWZmaWMgcmVhY2hlcyBuc19wZWVyIG9ubHkgdGhyb3VnaCBoc3IwJ3MgZm9yd2FyZCBwYXRoXFxuKyMgKGludGVybGluayBSWCAtXFx1MDAzZSBMQU4gQS9CIFRYKSwgc28gZXZlcnkgU0FOIGZyYW1lIGlzIHRhZ2dlZCBhbmRcXG4rIyBmb3J3YXJkZWQgYnkgdGhlIERVVC5cXG4rXFxuK3NvdXJjZSAuL2hzcl9jb21tb24uc2hcXG4rXFxuK3Nhbl9pcD1cXFwiMTAwLjY0LjAuMVxcXCJcXG4rcGVlcl9pcD1cXFwiMTAwLjY0LjAuM1xcXCJcXG4rXFxuKyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKTpcXG4rIyBTQU5fQVZHX01JTiBwcm92ZXMgR1NPIHN1cGVyLXBhY2tldHMgbGVmdCB0aGUgU0FOOyBMQU5fQVZHX01BWCBpcyBhXFxuKyMgZ3VhcmQgd2l0aCBtYXJnaW4sIG5vdCB0aGUgcHJvdG9jb2wgbWF4aW11bSAoc2VlIGRvX3Rzb19zdHJlYW1fdGVzdCkuXFxuK1NBTl9BVkdfTUlOPTIwNDhcXG4rTEFOX0FWR19NQVg9MTUxNFxcbitcXG4raXBlcmZfcGlkPVxcXCJcXFwiXFxuK3NlcnZlcl93cmFwcGVyPVxcXCJcXFwiXFxuK2FjdGl2ZV9zcnZfbnM9XFxcIlxcXCJcXG4rd29ya2Rpcj1cXFwiXFxcIlxcbitwaWRmaWxlPVxcXCJcXFwiXFxuK25zX2R1dD1cXFwiXFxcIlxcbituc19zYW49XFxcIlxcXCJcXG4rbnNfcGVlcj1cXFwiXFxcIlxcbituc19scz1cXFwiXFxcIlxcbityY2ZpbGU9XFxcIlxcXCJcXG4rXFxuKyMgRGVsZXRlIHRoZSBwZXItc2VydmVyIHByaXZhdGUgd29yayBkaXJlY3RvcnkgYW5kIHJlc2V0IGl0c1xcbisjIHZhcmlhYmxlcy4gQ2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCByZWFwIGFuZCBmcm9tIHRoZSBFWElUXFxuKyMgdHJhcCwgd2hpY2ggb3ducyBhbGwgZmFpbHVyZSBwYXRocy5cXG4rY2xlYW51cF93b3JrZGlyKClcXG4re1xcbitcXHQjIHJlbW92ZSBvbmx5IHRoZSBrbm93biBub24tZW1wdHkgcHJpdmF0ZSBkaXJlY3RvcnlcXG4rXFx0aWYgWyAtbiBcXFwiJHt3b3JrZGlyfVxcXCIgXSBcXHUwMDI2XFx1MDAyNiBbIC1kIFxcXCIke3dvcmtkaXJ9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdHJtIC1yZiBcXFwiJHt3b3JrZGlyfVxcXCJcXG4rXFx0ZmlcXG4rXFx0d29ya2Rpcj1cXFwiXFxcIlxcbitcXHRwaWRmaWxlPVxcXCJcXFwiXFxuK1xcdHJjZmlsZT1cXFwiXFxcIlxcbit9XFxuK1xcbitjbGVhbnVwKClcXG4re1xcbitcXHQjIFNlcnZlciBjbGVhbnVwIHRhcmdldHMgb25seSB0aGUgbmFtZXNwYWNlIG9mIHRoZSBjdXJyZW50bHlcXG4rXFx0IyBhY3RpdmUgc2VydmVyIChyZWNvcmRlZCBieSBzdGFydF9pcGVyZl9zZXJ2ZXIpOyBhZnRlciBhXFxuK1xcdCMgc3VjY2Vzc2Z1bCByZWFwIG5vdGhpbmcgaXMgYWN0aXZlLlxcbitcXHRpZiBbIC1uIFxcXCIke2FjdGl2ZV9zcnZfbnN9XFxcIiBdOyB0aGVuXFxuK1xcdFxcdCMgZXhhY3QtUElEIGtpbGwgb25seSBhZnRlciBSRS12YWxpZGF0aW5nIGlkZW50aXR5IChndWFyZHNcXG4rXFx0XFx0IyBhZ2FpbnN0IFBJRCByZXVzZSBiZXR3ZWVuIHB1YmxpY2F0aW9uIGFuZCBjbGVhbnVwKVxcbitcXHRcXHRpZiBbIC1uIFxcXCIke2lwZXJmX3BpZH1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgdmFsaWRfc2VydmVyX3BpZCBcXFwiJHthY3RpdmVfc3J2X25zfVxcXCIgXFxcIiR7aXBlcmZfcGlkfVxcXCI7IHRoZW5cXG4rXFx0XFx0XFx0a2lsbCBcXFwiJHtpcGVyZl9waWR9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRcXHRmaVxcbitcXHRcXHRpcGVyZl9waWQ9XFxcIlxcXCJcXG4rXFx0XFx0aWYgWyAtbiBcXFwiJHtzZXJ2ZXJfd3JhcHBlcn1cXFwiIF07IHRoZW5cXG4rXFx0XFx0XFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1c1xcbitcXHRcXHRcXHQjIGJvdW5kIHNvIGEgbGl2ZS1idXQtdW5wdWJsaXNoZWQgc2VydmVyIGNhbiBuZXZlclxcbitcXHRcXHRcXHQjIGhhbmcgY2xlYW51cFxcbitcXHRcXHRcXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cXG4rXFx0XFx0XFx0XFx0a2lsbCAtMCBcXFwiJHtzZXJ2ZXJfd3JhcHBlcn1cXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXFxuK1xcdFxcdFxcdFxcdHNsZWVwIDAuMVxcbitcXHRcXHRcXHRkb25lXFxuK1xcdFxcdFxcdGtpbGwgXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRcXHRcXHR3YWl0IFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0XFx0c2VydmVyX3dyYXBwZXI9XFxcIlxcXCJcXG4rXFx0XFx0ZmlcXG4rXFx0XFx0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjNcXG4rXFx0XFx0IyBwcm9jZXNzZXMgdGhhdCBhY3R1YWxseSBsaXZlIGluIHRoZSBhY3RpdmUgc2VydmVyIG5ldG5zLFxcbitcXHRcXHQjIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlbiBTSUdLSUxMIGFueSBzdXJ2aXZvciBiZWZvcmVcXG4rXFx0XFx0IyB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmQgcGtpbGwgd291bGQgc2NhblxcbitcXHRcXHQjIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy5cXG4rXFx0XFx0bG9jYWwgX3AgX3N0aWxsXFxuK1xcdFxcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXFxcIiR7YWN0aXZlX3Nydl9uc31cXFwiIDJcXHUwMDNlL2Rldi9udWxsKTsgZG9cXG4rXFx0XFx0XFx0aWYgaXNfaXBlcmYzX3BpZCBcXFwiJF9wXFxcIjsgdGhlblxcbitcXHRcXHRcXHRcXHRraWxsIFxcXCIkX3BcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdFxcdFxcdGZpXFxuK1xcdFxcdGRvbmVcXG4rXFx0XFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXFxuK1xcdFxcdFxcdF9zdGlsbD0wXFxuK1xcdFxcdFxcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXFxcIiR7YWN0aXZlX3Nydl9uc31cXFwiIDJcXHUwMDNlL2Rldi9udWxsKTsgZG9cXG4rXFx0XFx0XFx0XFx0aWYgaXNfaXBlcmYzX3BpZCBcXFwiJF9wXFxcIjsgdGhlblxcbitcXHRcXHRcXHRcXHRcXHRfc3RpbGw9MVxcbitcXHRcXHRcXHRcXHRcXHRicmVha1xcbitcXHRcXHRcXHRcXHRmaVxcbitcXHRcXHRcXHRkb25lXFxuK1xcdFxcdFxcdFsgXFxcIiRfc3RpbGxcXFwiIC1lcSAwIF0gXFx1MDAyNlxcdTAwMjYgYnJlYWtcXG4rXFx0XFx0XFx0c2xlZXAgMC4xXFxuK1xcdFxcdGRvbmVcXG4rXFx0XFx0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcXFwiJHthY3RpdmVfc3J2X25zfVxcXCIgMlxcdTAwM2UvZGV2L251bGwpOyBkb1xcbitcXHRcXHRcXHRpZiBpc19pcGVyZjNfcGlkIFxcXCIkX3BcXFwiOyB0aGVuXFxuK1xcdFxcdFxcdFxcdGtpbGwgLTkgXFxcIiRfcFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0XFx0ZmlcXG4rXFx0XFx0ZG9uZVxcbitcXHRmaVxcbitcXHRhY3RpdmVfc3J2X25zPVxcXCJcXFwiXFxuK1xcdGNsZWFudXBfd29ya2RpclxcbitcXHRjbGVhbnVwX2FsbF9uc1xcbit9XFxuK1xcbit0cmFwIGNsZWFudXAgRVhJVFxcbitcXG4rY2hlY2tfdG9vbCgpXFxuK3tcXG4rXFx0aWYgISBjb21tYW5kIC12IFxcXCIkMVxcXCIgXFx1MDAzZSAvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVxcXCJcXG4rXFx0XFx0ZXhpdCAka3NmdF9za2lwXFxuK1xcdGZpXFxuK31cXG4rXFxuK25zeCgpXFxuK3tcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJDFcXFwiIGJhc2ggLWMgXFxcIiQyXFxcIlxcbit9XFxuK1xcbitpc19pcGVyZjNfcGlkKClcXG4re1xcbitcXHRbIFxcXCIkKGNhdCAvcHJvYy9cXFwiJDFcXFwiL2NvbW0gMlxcdTAwM2UvZGV2L251bGwpXFxcIiA9IFxcXCJpcGVyZjNcXFwiIF1cXG4rfVxcbitcXG4rIyBCb3VuZGVkIHJlYXAgb2YgdGhlIG9uZS1zaG90IHNlcnZlcjogd2FpdCBhdCBtb3N0IDVzIGZvciBpdCB0b1xcbisjIGV4aXQsIHRoZW4gcmVhcCB0aGUgd3JhcHBlciBhbmQgUkVRVUlSRSB0aGUgcmNmaWxlIHdpdGggaXRzIHJlYWxcXG4rIyBzdGF0dXMuIEEgc3R1Y2sgc2VydmVyIGNhbiBuZXZlciBoYW5nIHRoZSBzY3JpcHQuXFxuK3JlYXBfaXBlcmZfc2VydmVyKClcXG4re1xcbitcXHRsb2NhbCBzZXJ2ZXJfcmNcXG4rXFxuK1xcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xcbitcXHRcXHRraWxsIC0wIFxcXCIke2lwZXJmX3BpZH1cXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXFxuK1xcdFxcdHNsZWVwIDAuMVxcbitcXHRkb25lXFxuK1xcdGlmIGtpbGwgLTAgXFxcIiR7aXBlcmZfcGlkfVxcXCIgMlxcdTAwM2UvZGV2L251bGw7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IGV4aXQgd2l0aGluIDVzXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK1xcdHdhaXQgXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIlxcbitcXHRzZXJ2ZXJfd3JhcHBlcj1cXFwiXFxcIlxcbitcXHRpZiBbICEgLXMgXFxcIiR7cmNmaWxlfVxcXCIgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgc2VydmVyIHN0YXR1cyBmaWxlIG1pc3NpbmcgKCR7cmNmaWxlfSlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0c2VydmVyX3JjPSQoY2F0IFxcXCIke3JjZmlsZX1cXFwiKVxcbitcXHRpZiAhIFtbIFxcXCIkc2VydmVyX3JjXFxcIiA9fiBeWzAtOV0rJCBdXSB8fCBbIFxcXCIkc2VydmVyX3JjXFxcIiAtbmUgMCBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JyR7c2VydmVyX3JjfSdcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0aXBlcmZfcGlkPVxcXCJcXFwiXFxuK1xcdGNsZWFudXBfd29ya2RpclxcbitcXHRhY3RpdmVfc3J2X25zPVxcXCJcXFwiXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuKyMgRGVjaW1hbC1jb3VudGVyIHZhbGlkYXRpb24gZm9yIHRoZSBzbmFwc2hvdCBibG9ja3M6IGV2ZXJ5IHZhbHVlIG11c3RcXG4rIyBiZSBhIHBsYWluIGRlY2ltYWwgbnVtYmVyLiBBIHBhcnNlIGZhaWx1cmUgaW4gcmVhZF90eF9jb3VudGVycyB5aWVsZHNcXG4rIyBlbXB0eS9nYXJibGVkIGZpZWxkcywgd2hpY2ggdGhpcyBjaGVjayB0dXJucyBpbnRvIGFuIGltbWVkaWF0ZSBGQUlMLlxcbit2YWxpZF9kZWNpbWFscygpXFxuK3tcXG4rXFx0bG9jYWwgdlxcbitcXG4rXFx0Zm9yIHYgaW4gXFxcIiRAXFxcIjsgZG9cXG4rXFx0XFx0W1sgXFxcIiR2XFxcIiA9fiBeWzAtOV0rJCBdXSB8fCByZXR1cm4gMVxcbitcXHRkb25lXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuK3NldHVwX3RvcG8oKVxcbit7XFxuK1xcdHNldHVwX25zIG5zX2R1dCBuc19zYW4gbnNfcGVlciB8fCBleGl0ICQ/XFxuK1xcbitcXHRpcCBsaW5rIGFkZCBkX2EgbmV0bnMgXFxcIiRuc19kdXRcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zIFxcXCIkbnNfcGVlclxcXCJcXG4rXFx0aXAgbGluayBhZGQgZF9iIG5ldG5zIFxcXCIkbnNfZHV0XFxcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyBcXFwiJG5zX3BlZXJcXFwiXFxuK1xcdGlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgXFxcIiRuc19kdXRcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgczAgbmV0bnMgXFxcIiRuc19zYW5cXFwiXFxuK1xcbitcXHQjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uXFxuK1xcdGZvciBpZmFjZSBpbiBkX2EgZF9iOyBkb1xcbitcXHRcXHRuc3ggXFxcIiRuc19kdXRcXFwiIFxcXCJpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFxcXFxcXG4rXFx0XFx0XFx0aXAgbGluayBzZXQgJGlmYWNlIHVwXFxcIlxcbitcXHRkb25lXFxuK1xcdGZvciBpZmFjZSBpbiBwX2EgcF9iOyBkb1xcbitcXHRcXHRuc3ggXFxcIiRuc19wZWVyXFxcIiBcXFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcXFxcXFxuK1xcdFxcdFxcdGlwIGxpbmsgc2V0ICRpZmFjZSB1cFxcXCJcXG4rXFx0ZG9uZVxcbitcXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBzZXQgZF9pbCB1cFxcXCJcXG4rXFx0bnN4IFxcXCIkbnNfc2FuXFxcIiBcXFwiaXAgbGluayBzZXQgczAgdXA7IGlwIGFkZHIgYWRkICRzYW5faXAvMjQgZGV2IHMwXFxcIlxcbitcXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxcXFxuK1xcdFxcdHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcXFxcXFxuK1xcdFxcdGlwIGxpbmsgc2V0IGhzcjAgdXBcXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3BlZXJcXFwiIFxcXCJpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFxcXFxcXG4rXFx0XFx0c2xhdmUxIHBfYSBzbGF2ZTIgcF9iIHByb3RvIDA7IFxcXFxcXG4rXFx0XFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcXFwiXFxuK1xcbitcXHQjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXIncyBzdXBlcnZpc2lvbiBmcmFtZXMuXFxuK1xcdHNsZWVwIDJcXG4rfVxcbitcXG4rY2hlY2tfZmVhdHVyZSgpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBpZmFjZT1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIGZlYXR1cmU9XFxcIiQzXFxcIlxcbitcXHRsb2NhbCB3YW50PVxcXCIkNFxcXCJcXG4rXFxuK1xcdGlmIG5zeCBcXFwiJG5zXFxcIiBcXFwiZXRodG9vbCAtayAkaWZhY2VcXFwiIHwgZ3JlcCAtcSBcXFwiXiRmZWF0dXJlOiAkd2FudFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF1cXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0ZmlcXG4rfVxcbitcXG4rIyBPZmYtb3ItYWJzZW50IHZhcmlhbnQ6IGZhaWxzIG9ubHkgd2hlbiB0aGUgZmVhdHVyZSBpcyBwcmVzZW50IEFORCBvbixcXG4rIyBzbyBkZXZpY2VzIHRoYXQgc2ltcGx5IGRvIG5vdCBsaXN0IHRoZSBmZWF0dXJlIGRvIG5vdCBmYWlsIGl0LlxcbitjaGVja19mZWF0dXJlX25vdF9vbigpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBpZmFjZT1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIGZlYXR1cmU9XFxcIiQzXFxcIlxcbitcXG4rXFx0aWYgbnN4IFxcXCIkbnNcXFwiIFxcXCJldGh0b29sIC1rICRpZmFjZVxcXCIgfCBncmVwIC1xIFxcXCJeJGZlYXR1cmU6IG9uXFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG9uXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdGVsc2VcXG4rXFx0XFx0ZWNobyBcXFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdXFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbitkb19ncm9fZmVhdHVyZV9jaGVja3MoKVxcbit7XFxuK1xcdGVjaG8gXFxcIklORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgR1JPLlxcXCJcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX2R1dFxcXCIgZF9hIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2IgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfaWwgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cXFwiXFxuK1xcbitcXHRlY2hvIFxcXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEhXLUdSTy5cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfYSByeC1ncm8taHcgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfYiByeC1ncm8taHcgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfaWwgcngtZ3JvLWh3IG9mZlxcbitcXHRzdG9wX2lmX2Vycm9yIFxcXCJIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXFxcIlxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogQ2hlY2tpbmcgdGhhdCB0aGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTy5cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGhzcjAgZ2VuZXJpYy1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX2R1dFxcXCIgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFxcXCIkbnNfZHV0XFxcIiBoc3IwIHR4LXVkcC1zZWdtZW50YXRpb25cXG4rXFx0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXFxcIiRuc19kdXRcXFwiIGhzcjAgdHgtZ3NvLWxpc3RcXG4rXFx0c3RvcF9pZl9lcnJvciBcXFwiSFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy1mYW1pbHkgZmVhdHVyZXMuXFxcIlxcbit9XFxuK1xcbithbGxvY193b3JrZGlyKClcXG4re1xcbitcXHQjIEFsbG9jYXRlZCBvbmx5IGhlcmUsIGxvbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdG9wb2xvZ3kgY2xlYW51cCwgc29cXG4rXFx0IyBjbGVhbnVwKCkgYXQgc2V0dXBfdG9wbygpIHRpbWUgY2FuIG5ldmVyIHJlbW92ZSBpdC4gbWt0ZW1wIGZhaWx1cmVcXG4rXFx0IyBpcyBhIGhhcmQgdGVzdCBmYWlsdXJlLlxcbitcXHR3b3JrZGlyPSQobWt0ZW1wIC1kIC90bXAvaHNyX2dyb190ZXN0LlhYWFhYWCkgfHwge1xcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBta3RlbXAgLWQgZmFpbGVkXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGV4aXQgMVxcbitcXHR9XFxuK1xcdGNobW9kIDcwMCBcXFwiJHt3b3JrZGlyfVxcXCJcXG4rXFx0cGlkZmlsZT1cXFwiJHt3b3JrZGlyfS9pcGVyZi5waWRcXFwiXFxuK1xcdHJjZmlsZT1cXFwiJHt3b3JrZGlyfS9pcGVyZi5yY1xcXCJcXG4rfVxcbitcXG4rIyBOdW1lcmljLCBhbGl2ZSwgY29tbSA9PSBpcGVyZjMsIGFuZCByZWFsbHkgb3duZWQgYnkgdGhlIGdpdmVuIG5ldG5zLlxcbit2YWxpZF9zZXJ2ZXJfcGlkKClcXG4re1xcbitcXHRsb2NhbCBwbnM9XFxcIiQxXFxcIiBwPVxcXCIkMlxcXCJcXG4rXFxuK1xcdFtbIFxcXCIkcFxcXCIgPX4gXlswLTldKyQgXV0gfHwgcmV0dXJuIDFcXG4rXFx0a2lsbCAtMCBcXFwiJHBcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiAxXFxuK1xcdFsgXFxcIiQoY2F0IC9wcm9jL1xcXCIkcFxcXCIvY29tbSAyXFx1MDAzZS9kZXYvbnVsbClcXFwiID0gXFxcImlwZXJmM1xcXCIgXSB8fCByZXR1cm4gMVxcbitcXHRpcCBuZXRucyBwaWRzIFxcXCIkcG5zXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXF4IFxcXCIkcFxcXCJcXG4rfVxcbitcXG4rc3RhcnRfaXBlcmZfc2VydmVyKClcXG4re1xcbitcXHRsb2NhbCBzcnZfbnM9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBzcnZfaXA9XFxcIiR7MjotfVxcXCJcXG4rXFx0bG9jYWwgY2FuZGlkYXRlX3BpZFxcbitcXG4rXFx0IyBPbmUtc2hvdCBzZXJ2ZXIsIG5vIC1EOiB0aGUgd3JhcHBlciByZWNvcmRzIGl0cyBleGFjdCBQSUQgYW5kIGl0c1xcbitcXHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxcbitcXHRhbGxvY193b3JrZGlyXFxuK1xcdCMgcmVjb3JkIHRoZSBzZXJ2ZXIgbmFtZXNwYWNlIGZvciBjbGVhbnVwKCkgYmVmb3JlXFxuK1xcdCMgYW55dGhpbmcgY2FuIGZhaWwgd2l0aCB0aGUgc2VydmVyIHJ1bm5pbmdcXG4rXFx0YWN0aXZlX3Nydl9ucz1cXFwiJHNydl9uc1xcXCJcXG4rXFx0KCBuc3ggXFxcIiRzcnZfbnNcXFwiIFxcXCJpcGVyZjMgLXMgLTEgJHtzcnZfaXA6Ky1CICRzcnZfaXB9IFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNiBcXFxcXFxuK1xcdFxcdGVjaG8gXFxcXCQhIFxcdTAwM2UgJHtwaWRmaWxlfTsgXFxcXFxcbitcXHRcXHR3YWl0IFxcXFwkITsgXFxcXFxcbitcXHRcXHRlY2hvIFxcXFwkPyBcXHUwMDNlICR7cmNmaWxlfVxcXCIgKSBcXHUwMDI2XFxuK1xcdHNlcnZlcl93cmFwcGVyPSQhXFxuK1xcdCMgdGhlIHdyYXBwZXIgd3JpdGVzIHRoZSBwaWRmaWxlIGFzeW5jaHJvbm91c2x5OyB3YWl0IGZvciBpdCB0b1xcbitcXHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxcbitcXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cXG4rXFx0XFx0WyAtcyBcXFwiJHtwaWRmaWxlfVxcXCIgXSBcXHUwMDI2XFx1MDAyNiBicmVha1xcbitcXHRcXHRzbGVlcCAwLjFcXG4rXFx0ZG9uZVxcbitcXHRpZiBbICEgLXMgXFxcIiR7cGlkZmlsZX1cXFwiIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWRcXFwiIFxcXFxcXG4rXFx0XFx0XFx0XFxcIihubyBwaWRmaWxlKVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXHRjYW5kaWRhdGVfcGlkPSQoXFx1MDAzY1xcXCIke3BpZGZpbGV9XFxcIilcXG4rXFx0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFxcXCIkc3J2X25zXFxcIiBcXFwiJHtjYW5kaWRhdGVfcGlkfVxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJyR7Y2FuZGlkYXRlX3BpZH0nXFxcIiBcXFxcXFxuK1xcdFxcdFxcdFxcXCJmYWlsZWQgdmFsaWRhdGlvblxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXHQjIHB1Ymxpc2ggb25seSBhZnRlciBmdWxsIHZhbGlkYXRpb25cXG4rXFx0aXBlcmZfcGlkPVxcXCIke2NhbmRpZGF0ZV9waWR9XFxcIlxcbitcXHRzbGVlcCAxXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuKyMgUHJpbnQgXFxcIlxcdTAwM2NieXRlc1xcdTAwM2UgXFx1MDAzY3BhY2tldHNcXHUwMDNlXFxcIiBmb3IgZXhhY3RseSBvbmUgVFggcmVjb3JkIG9mIG5zL2RldjsgYW55dGhpbmdcXG4rIyBlbHNlIChtaXNzaW5nLCBkdXBsaWNhdGVkLCBub24tbnVtZXJpYykgaXMgYSBoYXJkIEZBSUwuXFxuK3JlYWRfdHhfY291bnRlcnMoKVxcbit7XFxuK1xcdGxvY2FsIG5zPVxcXCIkMVxcXCIgZGV2PVxcXCIkMlxcXCJcXG4rXFx0bG9jYWwgb3V0IGNudFxcbitcXG4rXFx0b3V0PSQobnN4IFxcXCIkbnNcXFwiIFxcXCJpcCAtcyBsaW5rIHNob3cgJGRldlxcXCIgfCBcXFxcXFxuK1xcdFxcdGF3ayAnL14gK1RYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfScpXFxuK1xcdGNudD0kKGVjaG8gXFxcIiRvdXRcXFwiIHwgZ3JlcCAtYyAnXlswLTldKiBbMC05XSokJylcXG4rXFx0aWYgWyBcXFwiJGNudFxcXCIgLW5lIDEgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBjYW5ub3QgcGFyc2UgVFggY291bnRlcnMgb2YgJG5zLyRkZXZcXFwiIFxcXFxcXG4rXFx0XFx0XFx0XFxcIihyZWNvcmRzPSRjbnQpXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK1xcdGVjaG8gXFxcIiRvdXRcXFwiXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuKyMgUHJpbnQgXFxcIlxcdTAwM2NieXRlc1xcdTAwM2UgXFx1MDAzY3BhY2tldHNcXHUwMDNlXFxcIiBmb3IgZXhhY3RseSBvbmUgUlggcmVjb3JkIG9mIG5zL2RldjsgdGhlXFxuKyMgc2FtZSBzaW5nbGUtcmVjb3JkIGRpc2NpcGxpbmUgYXMgcmVhZF90eF9jb3VudGVycy5cXG4rcmVhZF9yeF9jb3VudGVycygpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIiBkZXY9XFxcIiQyXFxcIlxcbitcXHRsb2NhbCBvdXQgY250XFxuK1xcbitcXHRvdXQ9JChuc3ggXFxcIiRuc1xcXCIgXFxcImlwIC1zIGxpbmsgc2hvdyAkZGV2XFxcIiB8IFxcXFxcXG4rXFx0XFx0YXdrICcvXiArUlg6L3tnZXRsaW5lOyBwcmludCAkMSwgJDJ9JylcXG4rXFx0Y250PSQoZWNobyBcXFwiJG91dFxcXCIgfCBncmVwIC1jICdeWzAtOV0qIFswLTldKiQnKVxcbitcXHRpZiBbIFxcXCIkY250XFxcIiAtbmUgMSBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGNhbm5vdCBwYXJzZSBSWCBjb3VudGVycyBvZiAkbnMvJGRldlxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiKHJlY29yZHM9JGNudClcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0ZWNobyBcXFwiJG91dFxcXCJcXG4rXFx0cmV0dXJuIDBcXG4rfVxcbitcXG4rZXZhbF9jb3VudGVyX2RlbHRhKClcXG4re1xcbitcXHRsb2NhbCBuYW1lPVxcXCIkMVxcXCIgYjA9XFxcIiQyXFxcIiBwMD1cXFwiJDNcXFwiIGIxPVxcXCIkNFxcXCIgcDE9XFxcIiQ1XFxcIiBvcD1cXFwiJDZcXFwiIGxpbWl0PVxcXCIkN1xcXCJcXG4rXFx0bG9jYWwgYmQgcGRcXG4rXFxuK1xcdGlmICEgW1sgXFxcIiRiMFxcXCIgPX4gXlswLTldKyQgXFx1MDAyNlxcdTAwMjYgXFxcIiRiMVxcXCIgPX4gXlswLTldKyQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbitcXHRcXHRcXFwiJHAwXFxcIiA9fiBeWzAtOV0rJCBcXHUwMDI2XFx1MDAyNiBcXFwiJHAxXFxcIiA9fiBeWzAtOV0rJCBdXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBub24tbnVtZXJpYyBjb3VudGVyIGlucHV0IGZvciAkbmFtZVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXHRiZD0kKChiMSAtIGIwKSlcXG4rXFx0cGQ9JCgocDEgLSBwMCkpXFxuK1xcdGlmIFsgXFxcIiRiZFxcXCIgLWx0IDAgXSB8fCBbIFxcXCIkcGRcXFwiIC1sZSAwIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogY291bnRlciBkZWx0YSBpbnZhbGlkIGZvciAkbmFtZVxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiKGJ5dGVzPSRiZCBwa3RzPSRwZClcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0aWYgWyBcXFwiJG9wXFxcIiA9IFxcXCJndFxcXCIgXTsgdGhlblxcbitcXHRcXHRpZiBbIFxcXCIkYmRcXFwiIC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxcbitcXHRcXHRcXHRlY2hvIFxcXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXFx1MDAzYz0gJGxpbWl0XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdHJldHVybiAxXFxuK1xcdFxcdGZpXFxuK1xcdGVsc2VcXG4rXFx0XFx0aWYgWyBcXFwiJGJkXFxcIiAtZ3QgJCgocGQgKiBsaW1pdCkpIF07IHRoZW5cXG4rXFx0XFx0XFx0ZWNobyBcXFwiRkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkIFxcdTAwM2UgJGxpbWl0XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdHJldHVybiAxXFxuK1xcdFxcdGZpXFxuK1xcdGZpXFxuK1xcdGVjaG8gXFxcIklORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCIob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdXFxcIlxcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbisjIExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbjogYSBwbGFpbiBTQU4gYWdncmVnYXRlIGVudGVyaW5nIGEgUFJQXFxuKyMgTEFOIHNsYXZlIG11c3QgYmUgc2VnbWVudGVkIGF0IHRoZSBmb3J3YXJkIGVudHJ5LCBub3QgZHJvcHBlZC4gUFJQXFxuKyMgZHJvcHMgc2xhdmUtdG8tc2xhdmUgZm9yd2FyZGluZyBieSBkZXNpZ24gKHBycF9kcm9wX2ZyYW1lKSwgc28gdGhlXFxuKyMgY29uc3VtZXIgb2YgTEFOLXNsYXZlIFNBTiB0cmFmZmljIGlzIGxvY2FsIGRlbGl2ZXJ5IHRvIHRoZSBtYXN0ZXIuXFxuKyMgVHdvIGluZGVwZW5kZW50IG9yYWNsZXM6IHRoZSBTQU4tc2lkZSBwcm9vZiB0aGF0IGFnZ3JlZ2F0ZXMgcmVhbGx5XFxuKyMgYXJyaXZlZCBhdCB0aGUgRFVULCBhbmQgdGhlIHZvbHVtZSArIHBlci1mcmFtZSBzaGFwZSBvZiB0aGUgbG9jYWxcXG4rIyBkZWxpdmVyeS4gT24gdGhlIGJyb2tlbiBnYXRlIHRoZSBhZ2dyZWdhdGVzIGFyZSBkcm9wcGVkIGFuZCBUQ1BcXG4rIyBjcmF3bHMgb24gcmV0cmFuc21pdHRlZCBzaW5nbGUgc2VnbWVudHMsIHNlcGFyYXRpbmcgdGhlIGtlcm5lbHMgYnlcXG4rIyBhbiBvcmRlciBvZiBtYWduaXR1ZGUgaW4gZGVsaXZlcmVkIGJ5dGVzLlxcbitkb19sYW5zYW5fZ3NvX3Rlc3QoKVxcbit7XFxuK1xcdGxvY2FsIHBycF9pcD1cXFwiMTAuOTkuMS4xXFxcIiBsc19pcD1cXFwiMTAuOTkuMS4xMFxcXCJcXG4rXFx0bG9jYWwgb3V0IHNhbl9iMCBzYW5fcDAgc2FuX2IxIHNhbl9wMVxcbitcXHRsb2NhbCBhX2IwIGFfcDAgYV9iMSBhX3AxIHJfYjAgcl9wMCByX2IxIHJfcDFcXG4rXFxuK1xcdHNldHVwX25zIG5zX2xzIHx8IGV4aXQgJD9cXG4rXFxuK1xcdGlwIGxpbmsgYWRkIGRfcGEgbmV0bnMgXFxcIiRuc19kdXRcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgbHNfYSBuZXRucyBcXFwiJG5zX2xzXFxcIlxcbitcXHRpcCBsaW5rIGFkZCBkX3BiIG5ldG5zIFxcXCIkbnNfZHV0XFxcIiB0eXBlIHZldGggcGVlciBuYW1lIGxzX3AgbmV0bnMgXFxcIiRuc19sc1xcXCJcXG4rXFxuK1xcdG5zeCBcXFwiJG5zX2R1dFxcXCIgXFxcImlwIGxpbmsgc2V0IGRfcGEgbXR1IDE2MDAgdXBcXFwiXFxuK1xcdG5zeCBcXFwiJG5zX2R1dFxcXCIgXFxcImlwIGxpbmsgc2V0IGRfcGIgbXR1IDE2MDAgdXBcXFwiXFxuK1xcdG5zeCBcXFwiJG5zX2xzXFxcIiBcXFwiaXAgbGluayBzZXQgbHNfYSBtdHUgMTYwMCB1cDsgXFxcXFxcbitcXHRcXHRpcCBsaW5rIHNldCBsc19wIG10dSAxNjAwIHVwOyBpcCBhZGRyIGFkZCAkbHNfaXAvMjQgZGV2IGxzX2FcXFwiXFxuK1xcbitcXHQjIFBSUCBEVVQgd2l0aCB0aGUgU0FOIG9uIGEgTEFOIHNsYXZlOiBwbGFpbiBTQU4gYWdncmVnYXRlcyBhcmVcXG4rXFx0IyB2YWxpZCB0cmFmZmljIG9uIGEgUFJQIExBTiBhbmQgbXVzdCBub3QgYmUgZHJvcHBlZC5cXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBhZGQgcHJwMCB0eXBlIGhzciBcXFxcXFxuK1xcdFxcdHNsYXZlMSBkX3BhIHNsYXZlMiBkX3BiIHByb3RvIDE7IFxcXFxcXG4rXFx0XFx0aXAgbGluayBzZXQgcHJwMCB1cDsgaXAgYWRkciBhZGQgJHBycF9pcC8yNCBkZXYgcHJwMFxcXCJcXG4rXFxuK1xcdCMgTGV0IHN1cGVydmlzaW9uIGZyYW1lcyBjb252ZXJnZS5cXG4rXFx0c2xlZXAgMlxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgTEFOLXNpZGUgU0FOIGludGVyZmFjZS5cXFwiXFxuK1xcdG5zeCBcXFwiJG5zX2xzXFxcIiBcXFwiZXRodG9vbCAtSyBsc19hIHRzbyBvbiBnc28gb25cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19sc1xcXCIgbHNfYSB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb25cXG4rXFx0c3RvcF9pZl9lcnJvciBcXFwiQ291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIExBTi1zaWRlIFNBTiBpbnRlcmZhY2UuXFxcIlxcbitcXG4rXFx0c3RhcnRfaXBlcmZfc2VydmVyIFxcXCIkbnNfZHV0XFxcIiBcXFwiJHBycF9pcFxcXCIgfHwgcmV0dXJuXFxuK1xcbitcXHRyZWFkIC1yIHJfYjAgcl9wMCBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfcnhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIHBycDApXFxuK0VPRlxcbitcXHRyZWFkIC1yIHNhbl9iMCBzYW5fcDAgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfbHNcXFwiIGxzX2EpXFxuK0VPRlxcbitcXHRpZiAhIHZhbGlkX2RlY2ltYWxzIFxcXCIkcl9iMFxcXCIgXFxcIiRyX3AwXFxcIiBcXFwiJHNhbl9iMFxcXCIgXFxcIiRzYW5fcDBcXFwiOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGJhc2VsaW5lIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXG4rXFx0aWYgISBvdXQ9JChuc3ggXFxcIiRuc19sc1xcXCIgXFxcInRpbWVvdXQgNjAgaXBlcmYzIC1jICRwcnBfaXAgLU0gMTQ0NiBcXFxcXFxuK1xcdFxcdC1iIDJHIC10IDEwXFxcIiAyXFx1MDAzZVxcdTAwMjYxKTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBMQU4tc2xhdmUgR1NPIGxvY2FsLWRlbGl2ZXJ5IHN0cmVhbSBmYWlsZWQ6XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGVjaG8gXFxcIiRvdXRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcbitcXHRyZWFkIC1yIHJfYjEgcl9wMSBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfcnhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIHBycDApXFxuK0VPRlxcbitcXHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfbHNcXFwiIGxzX2EpXFxuK0VPRlxcbitcXHRpZiAhIHZhbGlkX2RlY2ltYWxzIFxcXCIkcl9iMVxcXCIgXFxcIiRyX3AxXFxcIiBcXFwiJHNhbl9iMVxcXCIgXFxcIiRzYW5fcDFcXFwiOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGZpbmFsIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXG4rXFx0IyBPcmFjbGUgMSAtIGFnZ3JlZ2F0ZXMgcmVhbGx5IGFycml2ZWQ6IHRoZSBTQU4gZW1pdHRlZFxcbitcXHQjIHN1cGVyLXBhY2tldHMgdG93YXJkIHRoZSBEVVQuXFxuK1xcdGV2YWxfY291bnRlcl9kZWx0YSBcXFwiU0FOIGxzX2EgVFhcXFwiIFxcXCIkc2FuX2IwXFxcIiBcXFwiJHNhbl9wMFxcXCIgXFxcXFxcbitcXHRcXHRcXFwiJHNhbl9iMVxcXCIgXFxcIiRzYW5fcDFcXFwiIGd0IFxcXCIkU0FOX0FWR19NSU5cXFwiXFxuK1xcdFsgXFxcIiR7cmV0Oi0wfVxcXCIgLWVxIDAgXSB8fCByZXR1cm5cXG4rXFxuK1xcdCMgT3JhY2xlIDIgLSBsb2NhbCBkZWxpdmVyeSBvZiB0aG9zZSBhZ2dyZWdhdGVzOiB2b2x1bWUgYW5kXFxuK1xcdCMgcGVyLWZyYW1lIHNoYXBlIG9uIHRoZSBQUlAgbWFzdGVyLiBUaGUgdm9sdW1lIGdhdGUgc2VwYXJhdGVzXFxuK1xcdCMgZnVsbCBkZWxpdmVyeSBmcm9tIHRoZSByZXRyYW5zbWl0IGNyYXdsIHRoZSBicm9rZW4gZ2F0ZSBsZWF2ZXM7XFxuK1xcdCMgdGhlIGF2ZXJhZ2UgZ2F0ZSBwcm92ZXMgdGhlIGJ5dGVzIGFycml2ZWQgcGVyLWZyYW1lLlxcbitcXHRpZiBbICQoKHJfYjEgLSByX2IwKSkgLWx0IDEwMDAwMDAwMCBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IExBTi1zbGF2ZSBsb2NhbCBkZWxpdmVyeSBkZWdyYWRlZFxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiKHBycDAgUlggZGVsdGEgJCgocl9iMSAtIHJfYjApKSBieXRlcyBcXHUwMDNjIDEwMDAwMDAwMClcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcdGlmIFsgJCgocl9iMSAtIHJfYjApKSAtZ3QgJCgoIChyX3AxIC0gcl9wMCkgKiBMQU5fQVZHX01BWCApKSBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGxvY2FsIGRlbGl2ZXJ5IG5vdCBwZXItZnJhbWVcXFwiIFxcXFxcXG4rXFx0XFx0XFx0XFxcIihhdmcgJCgoIChyX2IxIC0gcl9iMCkgLyAocl9wMSAtIHJfcDApICkpIFxcdTAwM2UgJExBTl9BVkdfTUFYKVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFx0ZWNobyBcXFwiSU5GTzogTEFOLXNsYXZlIGxvY2FsIGRlbGl2ZXJ5IHBycDAgUlggZGVsdGFcXFwiIFxcXFxcXG4rXFx0XFx0XFxcIiQoKHJfYjEgLSByX2IwKSkgYnl0ZXMgLyAkKChyX3AxIC0gcl9wMCkpIHBrdHMgWyBPSyBdXFxcIlxcbitcXHRyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm5cXG4rXFx0ZWNobyBcXFwiSU5GTzogTEFOLXNsYXZlIHBsYWluLUdTTyByZWdyZXNzaW9uIFsgT0sgXVxcXCJcXG4rfVxcbitcXG4rZG9fdHNvX3N0cmVhbV90ZXN0KClcXG4re1xcbitcXHRsb2NhbCBvdXQgc2VuZGVyX3JldHJcXG4rXFx0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXFxuK1xcdGxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgYl9iMCBiX3AwIGJfYjEgYl9wMVxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcImV0aHRvb2wgLUsgczAgdHNvIG9uIGdzbyBvblxcXCJcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX3NhblxcXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkNvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLlxcXCJcXG4rXFxuK1xcdGVjaG8gXFxcIklORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC1cXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cXFwiXFxuK1xcdHN0YXJ0X2lwZXJmX3NlcnZlciBcXFwiJG5zX3BlZXJcXFwiIHx8IHJldHVyblxcbitcXG4rXFx0IyBDb3VudGVyIHNuYXBzaG90cyBhcm91bmQgdGhlIHN0cmVhbSB3aW5kb3cuIFRoZSBTQU4tc2lkZSBhdmVyYWdlXFxuK1xcdCMgbXVzdCBleGNlZWQgU0FOX0FWR19NSU4gKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IEdTTyBzdXBlci1wYWNrZXRzXFxuK1xcdCMgcmVhbGx5IGxlZnQgdGhlIFNBTik7IGVhY2ggRFVUIExBTiBsZWcgbXVzdCBzdGF5IHVuZGVyIExBTl9BVkdfTUFYXFxuK1xcdCMgKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IGJ1bGsgb3V0cHV0IHdhcyBzZWdtZW50ZWQgcGVyLWZyYW1lKS4gVGhlc2VcXG4rXFx0IyBhcmUgYWdncmVnYXRlIGRpc2NyaW1pbmF0b3JzLCBub3QgYSBwZXItZnJhbWUgbWF4aW11bSBwcm9vZi5cXG4rXFx0c2FuX2IwPTA7IHNhbl9wMD0wOyBhX2IwPTA7IGFfcDA9MDsgYl9iMD0wOyBiX3AwPTBcXG4rXFx0cmVhZCAtciBzYW5fYjAgc2FuX3AwIFxcdTAwM2NcXHUwMDNjRU9GXFxuKyQocmVhZF90eF9jb3VudGVycyBcXFwiJG5zX3NhblxcXCIgczApXFxuK0VPRlxcbitcXHRyZWFkIC1yIGFfYjAgYV9wMCBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIGRfYSlcXG4rRU9GXFxuK1xcdHJlYWQgLXIgYl9iMCBiX3AwIFxcdTAwM2NcXHUwMDNjRU9GXFxuKyQocmVhZF90eF9jb3VudGVycyBcXFwiJG5zX2R1dFxcXCIgZF9iKVxcbitFT0ZcXG4rXFx0aWYgISB2YWxpZF9kZWNpbWFscyBcXFwiJHNhbl9iMFxcXCIgXFxcIiRzYW5fcDBcXFwiIFxcXCIkYV9iMFxcXCIgXFxcIiRhX3AwXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCIkYl9iMFxcXCIgXFxcIiRiX3AwXFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBiYXNlbGluZSBUWCBjb3VudGVyIHNuYXBzaG90IGludmFsaWRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFxuK1xcdCMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eVxcbitcXHQjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuXFxuK1xcdCMgVW5jYXBwZWQgcnVucyBmbGFwIGF0IFZNL0NJIGVkZ2UgcmF0ZXMgd2l0aG91dCBpbmRpY2F0aW5nIGFcXG4rXFx0IyBmdW5jdGlvbmFsIHByb2JsZW0uXFxuK1xcdGlmICEgb3V0PSQobnN4IFxcXCIkbnNfc2FuXFxcIiBcXFwidGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcXFxcXFxuK1xcdFxcdC1iIDJHIC10IDEwXFxcIiAyXFx1MDAzZVxcdTAwMjYxKTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgY2xpZW50IGZhaWxlZDpcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZWNobyBcXFwiJG91dFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFxuK1xcdHJlYWQgLXIgc2FuX2IxIHNhbl9wMSBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19zYW5cXFwiIHMwKVxcbitFT0ZcXG4rXFx0cmVhZCAtciBhX2IxIGFfcDEgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfZHV0XFxcIiBkX2EpXFxuK0VPRlxcbitcXHRyZWFkIC1yIGJfYjEgYl9wMSBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIGRfYilcXG4rRU9GXFxuK1xcdGlmICEgdmFsaWRfZGVjaW1hbHMgXFxcIiRzYW5fYjFcXFwiIFxcXCIkc2FuX3AxXFxcIiBcXFwiJGFfYjFcXFwiIFxcXCIkYV9wMVxcXCIgXFxcXFxcbitcXHRcXHRcXFwiJGJfYjFcXFwiIFxcXCIkYl9wMVxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK1xcbitcXHRldmFsX2NvdW50ZXJfZGVsdGEgXFxcIlNBTiBzMCBUWFxcXCIgXFxcIiRzYW5fYjBcXFwiIFxcXCIkc2FuX3AwXFxcIiBcXFwiJHNhbl9iMVxcXCIgXFxcIiRzYW5fcDFcXFwiIFxcXFxcXG4rXFx0XFx0Z3QgXFxcIiRTQU5fQVZHX01JTlxcXCJcXG4rXFx0ZXZhbF9jb3VudGVyX2RlbHRhIFxcXCJEVVQgZF9hIFRYXFxcIiBcXFwiJGFfYjBcXFwiIFxcXCIkYV9wMFxcXCIgXFxcIiRhX2IxXFxcIiBcXFwiJGFfcDFcXFwiIFxcXFxcXG4rXFx0XFx0bGUgXFxcIiRMQU5fQVZHX01BWFxcXCJcXG4rXFx0ZXZhbF9jb3VudGVyX2RlbHRhIFxcXCJEVVQgZF9iIFRYXFxcIiBcXFwiJGJfYjBcXFwiIFxcXCIkYl9wMFxcXCIgXFxcIiRiX2IxXFxcIiBcXFwiJGJfcDFcXFwiIFxcXFxcXG4rXFx0XFx0bGUgXFxcIiRMQU5fQVZHX01BWFxcXCJcXG4rXFx0WyBcXFwiJHtyZXQ6LTB9XFxcIiAtZXEgMCBdIHx8IHJldHVyblxcbitcXG4rXFx0IyBzdWNjZXNzIHBhdGg6IGJvdW5kZWQgcmVhcCB3aXRoIHRoZSBzZXJ2ZXIncyByZWFsIHN0YXR1c1xcbitcXHRyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm5cXG4rXFxuK1xcdCMgc2Vjb25kYXJ5IGhlYWx0aCBzaWduYWwgb25seTogYW5jaG9yZWQsIHNpbmdsZS1tYXRjaCwgbnVtZXJpYyDigJRcXG4rXFx0IyBhbnkgcGFyc2UgYW5vbWFseSBpcyBhIGxvdWQgRkFJTCwgYnV0IHRoZSB2YWx1ZSBpdHNlbGYgbm8gbG9uZ2VyXFxuK1xcdCMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLlxcbitcXHRzZW5kZXJfcmV0cj0kKGVjaG8gXFxcIiRvdXRcXFwiIHwgYXdrICcvc2VjIC4qIHNlbmRlciQvIHtwcmludCAkKE5GLTEpfScpXFxuK1xcdGlmIFsgXFxcIiQoZWNobyBcXFwiJHNlbmRlcl9yZXRyXFxcIiB8IGdyZXAgLUVjICdeWzAtOV0rJCcpXFxcIiAtbmUgMSBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGNhbm5vdCBwYXJzZSBzZW5kZXIgcmV0cmFuc21pdHMgcmVsaWFibHlcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0ZWNobyBcXFwiJG91dFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFx0ZWNobyBcXFwiSU5GTzogVENQIHN0cmVhbSBkb25lO1xcXCIgXFxcXFxcbitcXHRcXHRcXFwic2VuZGVyIHJldHJhbnNtaXRzPSRzZW5kZXJfcmV0ciAoc2Vjb25kYXJ5IHNpZ25hbClcXFwiXFxuK1xcdGVjaG8gXFxcIiRvdXRcXFwiIHwgZ3JlcCAtRSBcXFwic2VuZGVyfHJlY2VpdmVyXFxcIlxcbit9XFxuK1xcbitjaGVja19wcmVyZXF1aXNpdGVzXFxuK2NoZWNrX3Rvb2wgZXRodG9vbFxcbitjaGVja190b29sIGlwZXJmM1xcbitjaGVja190b29sIHRpbWVvdXRcXG4rXFxuKyMgaXByb3V0ZTIgbXVzdCBrbm93IHRoZSBIU1IgaW50ZXJsaW5rIHN5bnRheC5cXG4raWYgISBpcCBsaW5rIGhlbHAgaHNyIDJcXHUwMDNlXFx1MDAyNjEgfCBncmVwIC1xaSBpbnRlcmxpbms7IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydFxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK2ZpXFxuK1xcbitzZXR1cF90b3BvXFxuK1xcbitlY2hvIFxcXCJJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC1cXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgRFVUKS5cXFwiXFxuK2RvX3BpbmcgXFxcIiRuc19zYW5cXFwiIFxcXCIkcGVlcl9pcFxcXCJcXG4rc3RvcF9pZl9lcnJvciBcXFwiSW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC5cXFwiXFxuK1xcbitkb19ncm9fZmVhdHVyZV9jaGVja3NcXG4rZG9fdHNvX3N0cmVhbV90ZXN0XFxuK3N0b3BfaWZfZXJyb3IgXFxcIkdTTyBzdXBlci1wYWNrZXQgc3RyZWFtIHRlc3QgZmFpbGVkLlxcXCJcXG4rXFxuK2RvX2xhbnNhbl9nc29fdGVzdFxcbitzdG9wX2lmX2Vycm9yIFxcXCJMQU4tc2xhdmUgcGxhaW4tR1NPIHJlZ3Jlc3Npb24gZmFpbGVkLlxcXCJcXG4rXFxuK2VjaG8gXFxcIklORk86IEFsbCBnb29kLlxcXCJcXG4rY2xlYW51cFxcbitleGl0ICRyZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6MDUuMjA5MjUxNDM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTU3OTY3NTE0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gICAgXCJkZXZfZGlzYWJsZV9ncm9cIixcbiAgICBcIm5ldGlmX2Rpc2FibGVfZ3JvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgcHJvdG9jb2wgdG8gaGFuZGxlIEdTTyBzdXBlci1wYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBhZGRzIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIHRvIHRoZSBjb3JlIG5ldHdvcmsgZGV2aWNlIEFQSSB0byBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgZGV2aWNlLCBhbmQgdXNlcyB0aGlzIHRvIGRpc2FibGUgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM0ZGExN2U5NjYxZDliM2QzYTU0NDU4YjQwNWU3ZmRmNmFkMTYyZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE3OjQwOjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDk5ODFkNjM3ZjhiNTQuLmViYTJjMjZhNDliYTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMzQzNCw2ICszNDM0LDggQEAgdm9pZCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBuZXRpZl9jbG9zZV9tYW55KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGJvb2wgdW5saW5rKTtcbiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuK3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gaW50IGRldl9sb29wYmFja194bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2tiKTtcbiB1MTYgZGV2X3BpY2tfdHhfemVybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpzYl9kZXYpO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDU5MzNjNWRhYjA5ZWUuLmYyMGQ1YWIwY2Y3MjkgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xODQwLDYgKzE4NDAsMjEgQEAgdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0fVxuIH1cbiBcbit2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjtcbitcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4rXG4rXHRkZXYtXHUwMDNld2FudGVkX2ZlYXR1cmVzIFx1MDAyNj0gfihORVRJRl9GX0dSTyB8IE5FVElGX0ZfR1JPX0hXKTtcbitcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcbitcbitcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoZGV2LCBsb3dlcl9kZXYsIGl0ZXIpIHtcbitcdFx0bmV0ZGV2X2xvY2tfb3BzKGxvd2VyX2Rldik7XG4rXHRcdG5ldGlmX2Rpc2FibGVfZ3JvKGxvd2VyX2Rldik7XG4rXHRcdG5ldGRldl91bmxvY2tfb3BzKGxvd2VyX2Rldik7XG4rXHR9XG4rfVxuK1xuIC8qKlxuICAqXHRkZXZfZGlzYWJsZV9ncm9faHcgLSBkaXNhYmxlIEhXIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4gICpcdEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9hcGkuYyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuaW5kZXggNDM3OTQ3ZGQwOGVkNS4uM2NhMjUxNWFkMDQ4NiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldl9hcGkuY1xuKysrIGIvbmV0L2NvcmUvZGV2X2FwaS5jXG5AQCAtMjY5LDYgKzI2OSwyNyBAQCB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2xybyk7XG4gXG4rLyoqXG4rICogZGV2X2Rpc2FibGVfZ3JvKCkgLSBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4rICogQGRldjogZGV2aWNlXG4rICpcbisgKiBCZXN0LWVmZm9ydCBkaXNhYmxlIG9mIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0XG4rICogZGV2aWNlLiAgTXVzdCBiZSBjYWxsZWQgdW5kZXIgUlROTC4gIFRoaXMgaXMgbmVlZGVkIGlmIHJlY2VpdmVkXG4rICogcGFja2V0cyBtYXkgYmUgZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLlxuKyAqXG4rICogVGhlIGRpc2FibGUgaXMgYmVzdC1lZmZvcnQ6IGEgZGV2aWNlIHdpdGggYSBmaXhlZC1vbiBmZWF0dXJlIChmb3JcbisgKiBleGFtcGxlIEdST19IVyBvbiBhIHZpcnRpby1uZXQgZGV2aWNlIG5lZ290aWF0ZWQgd2l0aG91dFxuKyAqIFZJUlRJT19ORVRfRl9DVFJMX0dVRVNUX09GRkxPQURTKSBrZWVwcyBpdCBlbmFibGVkLiAgQ2FsbGVycyB0aGF0XG4rICogbmVlZCBhIGhhcmQgZ3VhcmFudGVlIG11c3QgaW5zcGVjdCB0aGUgcmVzdWx0aW5nIGZlYXR1cmUgc3RhdGUuXG4rICovXG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbitcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XG4rXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuK31cbitFWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2dybyk7XG4rXG4gLyoqXG4gICogZGV2X3NldF9wcm9taXNjdWl0eSgpIC0gdXBkYXRlIHByb21pc2N1aXR5IGNvdW50IG9uIGEgZGV2aWNlXG4gICogQGRldjogZGV2aWNlXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuaW5kZXggNTU1NWI3MWFiMTliNS4uMjQ4Y2JiMTQyZTIxZSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4rKysgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTIzMiw5ICsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdHNrYi1cdTAwM2VkZXYgPSBtYXN0ZXItXHUwMDNlZGV2O1xuIFx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFx0XHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuIFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuQEAgLTMzNSw2ICszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRcdGhzcl9zdGFnLVx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVx1MDAzZXNlcXVlbmNlX25yKTtcbiBcdFx0aHNyLVx1MDAzZXNlcXVlbmNlX25yKys7XG4gXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gdHlwZTtcbiBcdC8qIEhTUnYwIGhhcyA2IHVudXNlZCBieXRlcyBhZnRlciB0aGUgTUFDICovXG5AQCAtMzU2LDE0ICszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcbiBcdH1cbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbitcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdHJldHVybjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG5AQCAtMzkwLDYgKzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXNlcXVlbmNlX25yID0gaHRvbnMoaHNyLVx1MDAzZXN1cF9zZXF1ZW5jZV9ucik7XG4gXHRoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKys7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REO1xuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpO1xuIFxuQEAgLTM5NywxMyArMzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XG4gXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgbWFzdGVyLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4rXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiB9XG4gXG4gLyogQW5ub3VuY2UgKHN1cGVydmlzaW9uIGZyYW1lKSB0aW1lciBmdW5jdGlvblxuQEAgLTY1OSw3ICs2NTIsNyBAQCB2b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldi1cdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XG4gXG4gXHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfSElHSERNQSB8XG4tXHRcdFx0ICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8XG4rXHRcdFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNi4uZjQyNjk0Y2Y0MzA5OSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuKysrIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5AQCAtMTIsNiArMTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9nc28uaFx1MDAzZVxuICNpbmNsdWRlIFwiaHNyX21haW4uaFwiXG4gI2luY2x1ZGUgXCJoc3JfZnJhbWVyZWcuaFwiXG4gXG5AQCAtNjIxLDkgKzYyMiwxMCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3RkX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcbiBcdCAgICBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xuIFx0XHQvKiBTZXF1ZW5jZSBuciBmb3IgdGhlIG1hc3Rlci9pbnRlcmxpbmsgbm9kZSAqL1xuLVx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdFx0ZnJhbWUtXHUwMDNlc2VxdWVuY2VfbnIgPSBoc3ItXHUwMDNlc2VxdWVuY2VfbnI7XG4gXHRcdGhzci1cdTAwM2VzZXF1ZW5jZV9ucisrO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHR9XG4gfVxuIFxuQEAgLTczMSw3ICs3MzMsNyBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIH1cbiBcbiAvKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHJjdSByZWFkIGxvY2sgKGJlY2F1c2Ugb2YgdGhlIHBvcnQgcGFyYW1ldGVyKSAqL1xuLXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbitzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiB7XG4gXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7XG4gXG5AQCAtNzQ2LDggKzc0OCw4IEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdCAqIFNvIGNoZWNrIGFuZCBpbmNyZW1lbnQgc3RhdHMgZm9yIG1hc3RlciBwb3J0IG9ubHkgaGVyZS5cbiBcdCAqL1xuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8IHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4tXHRcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X3BhY2tldHMrKztcbi1cdFx0cG9ydC1cdTAwM2VkZXYtXHUwMDNlc3RhdHMudHhfYnl0ZXMgKz0gc2tiLVx1MDAzZWxlbjtcbitcdFx0REVWX1NUQVRTX0lOQyhwb3J0LVx1MDAzZWRldiwgdHhfcGFja2V0cyk7XG4rXHRcdERFVl9TVEFUU19BREQocG9ydC1cdTAwM2VkZXYsIHR4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiBcdH1cbiBcbiBcdGtmcmVlX3NrYihmcmFtZS5za2JfaHNyKTtcbkBAIC03NTcsNiArNzU5LDEwNSBAQCB2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4gXG4gb3V0X2Ryb3A6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbitcdERFVl9TVEFUU19JTkMocG9ydC1cdTAwM2VkZXYsIHR4X2Ryb3BwZWQpO1xuK1x0a2ZyZWVfc2tiKHNrYik7XG4rfVxuK1xuKy8qIEdTTyBmYW4tb3V0IGZ1bm5lbDogdW5mb2xkIHN1cGVyLXBhY2tldHMgYmVmb3JlIHBlci1mcmFtZSBwcm9jZXNzaW5nIHNvXG4rICogZWFjaCB3aXJlIGZyYW1lIGdldHMgaXRzIG93biBIU1IvUFJQIHRhZyBhbmQgc2VxdWVuY2UgbnVtYmVyLlxuKyAqL1xuKy8qIEVmZmVjdGl2ZSBmcmFtZSBwcm90b2NvbCBvZiBhIChwb3NzaWJseSBWTEFOLXRhZ2dlZCkgc2tiLCBvciAwIHdoZW5cbisgKiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBvciB0aGUgdGFnZ2luZyBleGNlZWRzIHdoYXQgSFNSIHN1cHBvcnRzLlxuKyAqIEhTUiBzdXBwb3J0cyBvbmUgODAyLjFRIEMtdGFnIG9ubHksIG1hdGNoaW5nIGZpbGxfZnJhbWVfaW5mbygpOiBhblxuKyAqIGFjY2VsZXJhdGVkIHRhZyBtdXN0IGJlIGEgQy10YWcgd2l0aCBhIG5vbi1WTEFOIGlubmVyIHByb3RvY29sOyBhblxuKyAqIGluLWJhbmQgdGFnIGlzIHVud3JhcHBlZCBleGFjdGx5IG9uY2UgYW5kIGEgcmVzaWR1YWwgVkxBTiBFdGhlclR5cGVcbisgKiBpcyByZWplY3RlZC4gUmVhZC1vbmx5OyBubyBzdGF0ZSBpcyBrZXB0IGJleW9uZCB0aGUgaW1tZWRpYXRlXG4rICogcHJvdG9jb2wgdmFsdWUuXG4rICovXG4rc3RhdGljIF9fYmUxNiBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBldGhoZHIgZWg7XG4rXHRzdHJ1Y3Qgdmxhbl9oZHIgdmg7XG4rXHRjb25zdCBzdHJ1Y3QgZXRoaGRyICpldGg7XG4rXHRjb25zdCBzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHI7XG4rXHRfX2JlMTYgcHJvdG87XG4rXG4rXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkge1xuK1x0XHQvKiBIU1Igc3VwcG9ydHMgb25lIDgwMi4xUSBDLXRhZyBvbmx5LiAqL1xuK1x0XHRpZiAoc2tiLVx1MDAzZXZsYW5fcHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRpZiAoZXRoX3R5cGVfdmxhbihza2ItXHUwMDNlcHJvdG9jb2wpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gc2tiLVx1MDAzZXByb3RvY29sO1xuK1x0fVxuK1xuK1x0ZXRoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKGVoKSwgXHUwMDI2ZWgpO1xuK1x0aWYgKCFldGgpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cHJvdG8gPSBldGgtXHUwMDNlaF9wcm90bztcbitcdGlmICghZXRoX3R5cGVfdmxhbihwcm90bykpXG4rXHRcdHJldHVybiBwcm90bztcbitcdGlmIChwcm90byAhPSBodG9ucyhFVEhfUF84MDIxUSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dmhkciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIEVUSF9ITEVOLCBzaXplb2YodmgpLCBcdTAwMjZ2aCk7XG4rXHRpZiAoIXZoZHIpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cHJvdG8gPSB2aGRyLVx1MDAzZWhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87XG4rXHRpZiAoZXRoX3R5cGVfdmxhbihwcm90bykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHByb3RvO1xuK31cbitcbit2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0O1xuK1x0X19iZTE2IHByb3RvO1xuK1xuK1x0aWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkge1xuK1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIENvbmZvcm1pbmcgcGxhaW4tcHJvdG9jb2wgR1NPIHN1cGVyLXBhY2tldHMgY2FycnkgdHJhaWxlci1mcmVlXG4rXHQgKiBzZW5kZXIgcGF5bG9hZCBhbmQgYXJlIHNlZ21lbnRlZCBoZXJlOiBlYWNoIHNlZ21lbnQgaXMgZGVsaXZlcmVkXG4rXHQgKiBvciBmb3J3YXJkZWQgYXMgaXRzIG93biB3aXJlIGZyYW1lLCBvbiBhbnkgaW5ncmVzcyByb2xlLlxuK1x0ICpcbitcdCAqIFRoZSBnYXRlIGlzIGNvbnRlbnQtYmFzZWQsIG5vdCBwb3J0LWJhc2VkLiBBbiBhZ2dyZWdhdGUgd2hvc2VcbitcdCAqIGVmZmVjdGl2ZSBwcm90b2NvbCBpcyBFVEhfUF9IU1Igb3IgRVRIX1BfUFJQIGNhbm5vdCBiZSBzYWZlbHlcbitcdCAqIHNlZ21lbnRlZCBhbmQgaXMgZHJvcHBlZCwgYXMgaXMgYW55IHNrYiB3aG9zZSBoZWFkZXIgY2Fubm90IGJlXG4rXHQgKiByZWFkIG9yIHdob3NlIHRhZ2dpbmcgZXhjZWVkcyB0aGUgc2luZ2xlIDgwMi4xUSBDLXRhZyBIU1JcbitcdCAqIHN1cHBvcnRzLiBXaXRoIE5FVElGX0ZfSFdfSFNSX1RBR19STSB0aGUgbG93ZXIgaGFzIGFscmVhZHlcbitcdCAqIHN0cmlwcGVkIHRoZSB0YWcsIHNvIHN1Y2ggYWdncmVnYXRlcyBhcnJpdmUgcGxhaW4gYW5kIGFyZVxuK1x0ICogc2VnbWVudGVkLlxuK1x0ICovXG4rXHRwcm90byA9IGhzcl9nc29fZWZmZWN0aXZlX3Byb3RvKHNrYik7XG4rXHRpZiAoIXByb3RvKVxuK1x0XHRnb3RvIGRyb3BfZ3NvOyAvKiBjbGFzc2lmaWNhdGlvbiBmYWlsdXJlLCBmYWlsLXNhZmUgKi9cbitcdGlmIChwcm90byA9PSBodG9ucyhFVEhfUF9IU1IpIHx8IHByb3RvID09IGh0b25zKEVUSF9QX1BSUCkpXG4rXHRcdGdvdG8gZHJvcF9nc287XG4rXG4rXHQvKiBmZWF0dXJlcyA9IDA6IHJlcXVlc3QgZnVsbCBzb2Z0d2FyZSBzZWdtZW50YXRpb24uIHR4X3BhdGggaXMgdHJ1ZVxuK1x0ICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb21cbitcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXG4rXHQgKi9cbitcdHNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKTtcbitcdGlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKVxuK1x0XHRnb3RvIGRyb3BfZ3NvO1xuK1xuK1x0Y29uc3VtZV9za2Ioc2tiKTtcbitcdHdoaWxlIChzZWdzKSB7XG4rXHRcdG5leHQgPSBzZWdzLVx1MDAzZW5leHQ7XG4rXHRcdHNlZ3MtXHUwMDNlbmV4dCA9IE5VTEw7XG4rXHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7XG4rXHRcdHNlZ3MgPSBuZXh0O1xuK1x0fVxuK1x0cmV0dXJuO1xuK1xuK2Ryb3BfZ3NvOlxuK1x0REVWX1NUQVRTX0lOQyhwb3J0LVx1MDAzZWRldiwgdHhfZHJvcHBlZCk7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3Jfc2xhdmUuYyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcbmluZGV4IDAxYzczYjRiNTBkZGQuLmFhMjE1NGIxOWMwYjkgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jXG4rKysgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5AQCAtNzMsMTYgKzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHR9XG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFxuLVx0LyogT25seSB0aGUgZnJhbWVzIHJlY2VpdmVkIG92ZXIgdGhlIGludGVybGluayBwb3J0IHdpbGwgYXNzaWduIGFcbi1cdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxuLVx0ICovXG4tXHRpZiAocG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0fVxuK1x0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4gXG4gZmluaXNoX2NvbnN1bWU6XG4gXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbkBAIC0xNzEsNiArMTYyLDExIEBAIHN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdGdvdG8gZmFpbF9yeF9oYW5kbGVyO1xuIFx0ZGV2X2Rpc2FibGVfbHJvKGRldik7XG4gXG4rXHQvKiBHUk8gZGlzYWJsaW5nIGlzIGJlc3QtZWZmb3J0OiBkZXZpY2VzIHdpdGggZml4ZWQtb25cbitcdCAqIEdSTy9HUk9fSFcgY2Fubm90IGJlIGZvcmNlZCBvZmYuXG4rXHQgKi9cbitcdGRldl9kaXNhYmxlX2dybyhkZXYpO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gZmFpbF9yeF9oYW5kbGVyOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzLi4wZDEwNTQ3NmU3YzUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuQEAgLTMsNiArMyw3IEBAXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXG4gXG4gVEVTVF9QUk9HUyA6PSBcXFxuK1x0aHNyX2dyb19zdXBlcnBhY2tldC5zaCBcXFxuIFx0aHNyX3Bpbmcuc2ggXFxcbiBcdGhzcl9yZWRib3guc2ggXFxcbiBcdGxpbmtfZmF1bHRzLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWJjYmQ5ZmM0MWVjNFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXG5AQCAtMCwwICsxLDYzMSBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcbisjXG4rIyAgMS4gRW5zbGF2aW5nIGEgZGV2aWNlIHRvIGFuIEhTUiBtYXN0ZXIgZGlzYWJsZXMgR1JPIG9uIGl0XG4rIyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cbisjICAyLiBUaGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTyBmZWF0dXJlcy5cbisjICAzLiBBIFRDUCBzdHJlYW0gZnJvbSBhIFRTTy1lbmFibGVkIFNBTiAod2hpY2ggdGhlcmVmb3JlIGVtaXRzIEdTT1xuKyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6XG4rIyAgICAgaW50ZXJmYWNlLWNvdW50ZXIgZGVsdGFzIHNob3cgc3VwZXItcGFja2V0LXNpemVkIGZyYW1lcyBsZWF2aW5nXG4rIyAgICAgdGhlIFNBTiBhbmQgcGVyLWZyYW1lLXNpemVkIHRyYWZmaWMgbGVhdmluZyB0aGUgRFVUJ3MgTEFOIHBvcnRzLlxuKyNcbisjIFRvcG9sb2d5ICgxMDAuNjQuMC4wLzI0KTpcbisjXG4rIyAgIG5zX3NhbiAgICAgICAgICAgICAgICAgICAgbnNfZHV0ICAgICAgICAgICAgICAgICAgICAgIG5zX3BlZXJcbisjICArLS0tLS0tLS0tLS0rICBpbnRlcmxpbmsgICstLS0tLS0tLS0tLS0tLS0rICBMQU4gQS9CICArLS0tLS0tLS0tLS0rXG4rIyAgfCBzMCBbMC4xXSAgfC0tLS0tLS0tLS0tLS18IGRfaWwgICBoc3IwICAgfC0tLS0tLS0tLS0tfCBoc3IxIFswLjNdfFxuKyMgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHxcbisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4rI1xuKyMgU0FOIHRyYWZmaWMgcmVhY2hlcyBuc19wZWVyIG9ubHkgdGhyb3VnaCBoc3IwJ3MgZm9yd2FyZCBwYXRoXG4rIyAoaW50ZXJsaW5rIFJYIC1cdTAwM2UgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kXG4rIyBmb3J3YXJkZWQgYnkgdGhlIERVVC5cbitcbitzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4rXG4rc2FuX2lwPVwiMTAwLjY0LjAuMVwiXG4rcGVlcl9pcD1cIjEwMC42NC4wLjNcIlxuK1xuKyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKTpcbisjIFNBTl9BVkdfTUlOIHByb3ZlcyBHU08gc3VwZXItcGFja2V0cyBsZWZ0IHRoZSBTQU47IExBTl9BVkdfTUFYIGlzIGFcbisjIGd1YXJkIHdpdGggbWFyZ2luLCBub3QgdGhlIHByb3RvY29sIG1heGltdW0gKHNlZSBkb190c29fc3RyZWFtX3Rlc3QpLlxuK1NBTl9BVkdfTUlOPTIwNDhcbitMQU5fQVZHX01BWD0xNTE0XG4rXG4raXBlcmZfcGlkPVwiXCJcbitzZXJ2ZXJfd3JhcHBlcj1cIlwiXG4rYWN0aXZlX3Nydl9ucz1cIlwiXG4rd29ya2Rpcj1cIlwiXG4rcGlkZmlsZT1cIlwiXG4rbnNfZHV0PVwiXCJcbituc19zYW49XCJcIlxuK25zX3BlZXI9XCJcIlxuK25zX2xzPVwiXCJcbityY2ZpbGU9XCJcIlxuK1xuKyMgRGVsZXRlIHRoZSBwZXItc2VydmVyIHByaXZhdGUgd29yayBkaXJlY3RvcnkgYW5kIHJlc2V0IGl0c1xuKyMgdmFyaWFibGVzLiBDYWxsZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIHJlYXAgYW5kIGZyb20gdGhlIEVYSVRcbisjIHRyYXAsIHdoaWNoIG93bnMgYWxsIGZhaWx1cmUgcGF0aHMuXG4rY2xlYW51cF93b3JrZGlyKClcbit7XG4rXHQjIHJlbW92ZSBvbmx5IHRoZSBrbm93biBub24tZW1wdHkgcHJpdmF0ZSBkaXJlY3RvcnlcbitcdGlmIFsgLW4gXCIke3dvcmtkaXJ9XCIgXSBcdTAwMjZcdTAwMjYgWyAtZCBcIiR7d29ya2Rpcn1cIiBdOyB0aGVuXG4rXHRcdHJtIC1yZiBcIiR7d29ya2Rpcn1cIlxuK1x0ZmlcbitcdHdvcmtkaXI9XCJcIlxuK1x0cGlkZmlsZT1cIlwiXG4rXHRyY2ZpbGU9XCJcIlxuK31cbitcbitjbGVhbnVwKClcbit7XG4rXHQjIFNlcnZlciBjbGVhbnVwIHRhcmdldHMgb25seSB0aGUgbmFtZXNwYWNlIG9mIHRoZSBjdXJyZW50bHlcbitcdCMgYWN0aXZlIHNlcnZlciAocmVjb3JkZWQgYnkgc3RhcnRfaXBlcmZfc2VydmVyKTsgYWZ0ZXIgYVxuK1x0IyBzdWNjZXNzZnVsIHJlYXAgbm90aGluZyBpcyBhY3RpdmUuXG4rXHRpZiBbIC1uIFwiJHthY3RpdmVfc3J2X25zfVwiIF07IHRoZW5cbitcdFx0IyBleGFjdC1QSUQga2lsbCBvbmx5IGFmdGVyIFJFLXZhbGlkYXRpbmcgaWRlbnRpdHkgKGd1YXJkc1xuK1x0XHQjIGFnYWluc3QgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApXG4rXHRcdGlmIFsgLW4gXCIke2lwZXJmX3BpZH1cIiBdIFx1MDAyNlx1MDAyNiB2YWxpZF9zZXJ2ZXJfcGlkIFwiJHthY3RpdmVfc3J2X25zfVwiIFwiJHtpcGVyZl9waWR9XCI7IHRoZW5cbitcdFx0XHRraWxsIFwiJHtpcGVyZl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRmaVxuK1x0XHRpcGVyZl9waWQ9XCJcIlxuK1x0XHRpZiBbIC1uIFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIiBdOyB0aGVuXG4rXHRcdFx0IyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1c1xuK1x0XHRcdCMgYm91bmQgc28gYSBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyXG4rXHRcdFx0IyBoYW5nIGNsZWFudXBcbitcdFx0XHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbitcdFx0XHRcdGtpbGwgLTAgXCIke3NlcnZlcl93cmFwcGVyfVwiIDJcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcbitcdFx0XHRcdHNsZWVwIDAuMVxuK1x0XHRcdGRvbmVcbitcdFx0XHRraWxsIFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRcdFx0d2FpdCBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRcdHNlcnZlcl93cmFwcGVyPVwiXCJcbitcdFx0ZmlcbitcdFx0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjNcbitcdFx0IyBwcm9jZXNzZXMgdGhhdCBhY3R1YWxseSBsaXZlIGluIHRoZSBhY3RpdmUgc2VydmVyIG5ldG5zLFxuK1x0XHQjIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlbiBTSUdLSUxMIGFueSBzdXJ2aXZvciBiZWZvcmVcbitcdFx0IyB0b3VjaGluZyB0aGUgbmFtZXNwYWNlIG5hbWUuIEEgYmxpbmQgcGtpbGwgd291bGQgc2NhblxuK1x0XHQjIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy5cbitcdFx0bG9jYWwgX3AgX3N0aWxsXG4rXHRcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCIke2FjdGl2ZV9zcnZfbnN9XCIgMlx1MDAzZS9kZXYvbnVsbCk7IGRvXG4rXHRcdFx0aWYgaXNfaXBlcmYzX3BpZCBcIiRfcFwiOyB0aGVuXG4rXHRcdFx0XHRraWxsIFwiJF9wXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRcdGZpXG4rXHRcdGRvbmVcbitcdFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFx0X3N0aWxsPTBcbitcdFx0XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwiJHthY3RpdmVfc3J2X25zfVwiIDJcdTAwM2UvZGV2L251bGwpOyBkb1xuK1x0XHRcdFx0aWYgaXNfaXBlcmYzX3BpZCBcIiRfcFwiOyB0aGVuXG4rXHRcdFx0XHRcdF9zdGlsbD0xXG4rXHRcdFx0XHRcdGJyZWFrXG4rXHRcdFx0XHRmaVxuK1x0XHRcdGRvbmVcbitcdFx0XHRbIFwiJF9zdGlsbFwiIC1lcSAwIF0gXHUwMDI2XHUwMDI2IGJyZWFrXG4rXHRcdFx0c2xlZXAgMC4xXG4rXHRcdGRvbmVcbitcdFx0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcIiR7YWN0aXZlX3Nydl9uc31cIiAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbitcdFx0XHRpZiBpc19pcGVyZjNfcGlkIFwiJF9wXCI7IHRoZW5cbitcdFx0XHRcdGtpbGwgLTkgXCIkX3BcIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRcdFx0ZmlcbitcdFx0ZG9uZVxuK1x0ZmlcbitcdGFjdGl2ZV9zcnZfbnM9XCJcIlxuK1x0Y2xlYW51cF93b3JrZGlyXG4rXHRjbGVhbnVwX2FsbF9uc1xuK31cbitcbit0cmFwIGNsZWFudXAgRVhJVFxuK1xuK2NoZWNrX3Rvb2woKVxuK3tcbitcdGlmICEgY29tbWFuZCAtdiBcIiQxXCIgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuK1x0XHRlY2hvIFwiU0tJUDogQ291bGQgbm90IHJ1biB0ZXN0IHdpdGhvdXQgJDFcIlxuK1x0XHRleGl0ICRrc2Z0X3NraXBcbitcdGZpXG4rfVxuK1xuK25zeCgpXG4re1xuK1x0aXAgbmV0bnMgZXhlYyBcIiQxXCIgYmFzaCAtYyBcIiQyXCJcbit9XG4rXG4raXNfaXBlcmYzX3BpZCgpXG4re1xuK1x0WyBcIiQoY2F0IC9wcm9jL1wiJDFcIi9jb21tIDJcdTAwM2UvZGV2L251bGwpXCIgPSBcImlwZXJmM1wiIF1cbit9XG4rXG4rIyBCb3VuZGVkIHJlYXAgb2YgdGhlIG9uZS1zaG90IHNlcnZlcjogd2FpdCBhdCBtb3N0IDVzIGZvciBpdCB0b1xuKyMgZXhpdCwgdGhlbiByZWFwIHRoZSB3cmFwcGVyIGFuZCBSRVFVSVJFIHRoZSByY2ZpbGUgd2l0aCBpdHMgcmVhbFxuKyMgc3RhdHVzLiBBIHN0dWNrIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyB0aGUgc2NyaXB0LlxuK3JlYXBfaXBlcmZfc2VydmVyKClcbit7XG4rXHRsb2NhbCBzZXJ2ZXJfcmNcbitcbitcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRraWxsIC0wIFwiJHtpcGVyZl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbCB8fCBicmVha1xuK1x0XHRzbGVlcCAwLjFcbitcdGRvbmVcbitcdGlmIGtpbGwgLTAgXCIke2lwZXJmX3BpZH1cIiAyXHUwMDNlL2Rldi9udWxsOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgZXhpdCB3aXRoaW4gNXNcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdHdhaXQgXCIke3NlcnZlcl93cmFwcGVyfVwiXG4rXHRzZXJ2ZXJfd3JhcHBlcj1cIlwiXG4rXHRpZiBbICEgLXMgXCIke3JjZmlsZX1cIiBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBpcGVyZjMgc2VydmVyIHN0YXR1cyBmaWxlIG1pc3NpbmcgKCR7cmNmaWxlfSlcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdHNlcnZlcl9yYz0kKGNhdCBcIiR7cmNmaWxlfVwiKVxuK1x0aWYgISBbWyBcIiRzZXJ2ZXJfcmNcIiA9fiBeWzAtOV0rJCBdXSB8fCBbIFwiJHNlcnZlcl9yY1wiIC1uZSAwIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZXhpdGVkIHdpdGggcmM9JyR7c2VydmVyX3JjfSdcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdGlwZXJmX3BpZD1cIlwiXG4rXHRjbGVhbnVwX3dvcmtkaXJcbitcdGFjdGl2ZV9zcnZfbnM9XCJcIlxuK1x0cmV0dXJuIDBcbit9XG4rXG4rIyBEZWNpbWFsLWNvdW50ZXIgdmFsaWRhdGlvbiBmb3IgdGhlIHNuYXBzaG90IGJsb2NrczogZXZlcnkgdmFsdWUgbXVzdFxuKyMgYmUgYSBwbGFpbiBkZWNpbWFsIG51bWJlci4gQSBwYXJzZSBmYWlsdXJlIGluIHJlYWRfdHhfY291bnRlcnMgeWllbGRzXG4rIyBlbXB0eS9nYXJibGVkIGZpZWxkcywgd2hpY2ggdGhpcyBjaGVjayB0dXJucyBpbnRvIGFuIGltbWVkaWF0ZSBGQUlMLlxuK3ZhbGlkX2RlY2ltYWxzKClcbit7XG4rXHRsb2NhbCB2XG4rXG4rXHRmb3IgdiBpbiBcIiRAXCI7IGRvXG4rXHRcdFtbIFwiJHZcIiA9fiBeWzAtOV0rJCBdXSB8fCByZXR1cm4gMVxuK1x0ZG9uZVxuK1x0cmV0dXJuIDBcbit9XG4rXG4rc2V0dXBfdG9wbygpXG4re1xuK1x0c2V0dXBfbnMgbnNfZHV0IG5zX3NhbiBuc19wZWVyIHx8IGV4aXQgJD9cbitcbitcdGlwIGxpbmsgYWRkIGRfYSBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYSBuZXRucyBcIiRuc19wZWVyXCJcbitcdGlwIGxpbmsgYWRkIGRfYiBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyBcIiRuc19wZWVyXCJcbitcdGlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgXCIkbnNfZHV0XCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzMCBuZXRucyBcIiRuc19zYW5cIlxuK1xuK1x0IyBIU1IgdGFncyBhZGQgNiBieXRlcyBwZXIgZnJhbWU7IGdpdmUgdGhlIExBTiBsZWdzIGhlYWRyb29tLlxuK1x0Zm9yIGlmYWNlIGluIGRfYSBkX2I7IGRvXG4rXHRcdG5zeCBcIiRuc19kdXRcIiBcImlwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgXFxcbitcdFx0XHRpcCBsaW5rIHNldCAkaWZhY2UgdXBcIlxuK1x0ZG9uZVxuK1x0Zm9yIGlmYWNlIGluIHBfYSBwX2I7IGRvXG4rXHRcdG5zeCBcIiRuc19wZWVyXCIgXCJpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFxcXG4rXHRcdFx0aXAgbGluayBzZXQgJGlmYWNlIHVwXCJcbitcdGRvbmVcbitcbitcdG5zeCBcIiRuc19kdXRcIiBcImlwIGxpbmsgc2V0IGRfaWwgdXBcIlxuK1x0bnN4IFwiJG5zX3NhblwiIFwiaXAgbGluayBzZXQgczAgdXA7IGlwIGFkZHIgYWRkICRzYW5faXAvMjQgZGV2IHMwXCJcbitcbitcdG5zeCBcIiRuc19kdXRcIiBcImlwIGxpbmsgYWRkIGhzcjAgdHlwZSBoc3IgXFxcbitcdFx0c2xhdmUxIGRfYSBzbGF2ZTIgZF9iIGludGVybGluayBkX2lsIHByb3RvIDA7IFxcXG4rXHRcdGlwIGxpbmsgc2V0IGhzcjAgdXBcIlxuK1x0bnN4IFwiJG5zX3BlZXJcIiBcImlwIGxpbmsgYWRkIGhzcjEgdHlwZSBoc3IgXFxcbitcdFx0c2xhdmUxIHBfYSBzbGF2ZTIgcF9iIHByb3RvIDA7IFxcXG4rXHRcdGlwIGxpbmsgc2V0IGhzcjEgdXA7IGlwIGFkZHIgYWRkICRwZWVyX2lwLzI0IGRldiBoc3IxXCJcbitcbitcdCMgTGV0IHRoZSBub2RlcyBzZWUgZWFjaCBvdGhlcidzIHN1cGVydmlzaW9uIGZyYW1lcy5cbitcdHNsZWVwIDJcbit9XG4rXG4rY2hlY2tfZmVhdHVyZSgpXG4re1xuK1x0bG9jYWwgbnM9XCIkMVwiXG4rXHRsb2NhbCBpZmFjZT1cIiQyXCJcbitcdGxvY2FsIGZlYXR1cmU9XCIkM1wiXG4rXHRsb2NhbCB3YW50PVwiJDRcIlxuK1xuK1x0aWYgbnN4IFwiJG5zXCIgXCJldGh0b29sIC1rICRpZmFjZVwiIHwgZ3JlcCAtcSBcIl4kZmVhdHVyZTogJHdhbnRcIjsgdGhlblxuK1x0XHRlY2hvIFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF1cIlxuK1x0ZWxzZVxuK1x0XHRlY2hvIFwiRkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0Zmlcbit9XG4rXG4rIyBPZmYtb3ItYWJzZW50IHZhcmlhbnQ6IGZhaWxzIG9ubHkgd2hlbiB0aGUgZmVhdHVyZSBpcyBwcmVzZW50IEFORCBvbixcbisjIHNvIGRldmljZXMgdGhhdCBzaW1wbHkgZG8gbm90IGxpc3QgdGhlIGZlYXR1cmUgZG8gbm90IGZhaWwgaXQuXG4rY2hlY2tfZmVhdHVyZV9ub3Rfb24oKVxuK3tcbitcdGxvY2FsIG5zPVwiJDFcIlxuK1x0bG9jYWwgaWZhY2U9XCIkMlwiXG4rXHRsb2NhbCBmZWF0dXJlPVwiJDNcIlxuK1xuK1x0aWYgbnN4IFwiJG5zXCIgXCJldGh0b29sIC1rICRpZmFjZVwiIHwgZ3JlcCAtcSBcIl4kZmVhdHVyZTogb25cIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBvblwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRlbHNlXG4rXHRcdGVjaG8gXCJJTkZPOiAkbnMvJGlmYWNlICRmZWF0dXJlIG5vdCBvbiBbIE9LIF1cIlxuK1x0Zmlcbit9XG4rXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKClcbit7XG4rXHRlY2hvIFwiSU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBHUk8uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9hIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2IgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfaWwgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXG4rXHRzdG9wX2lmX2Vycm9yIFwiR1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlwiXG4rXG4rXHRlY2hvIFwiSU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBIVy1HUk8uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9hIHJ4LWdyby1odyBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9iIHJ4LWdyby1odyBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9pbCByeC1ncm8taHcgb2ZmXG4rXHRzdG9wX2lmX2Vycm9yIFwiSFctR1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlwiXG4rXG4rXHRlY2hvIFwiSU5GTzogQ2hlY2tpbmcgdGhhdCB0aGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTy5cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuK1x0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXCIkbnNfZHV0XCIgaHNyMCB0eC11ZHAtc2VnbWVudGF0aW9uXG4rXHRjaGVja19mZWF0dXJlX25vdF9vbiBcIiRuc19kdXRcIiBoc3IwIHR4LWdzby1saXN0XG4rXHRzdG9wX2lmX2Vycm9yIFwiSFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy1mYW1pbHkgZmVhdHVyZXMuXCJcbit9XG4rXG4rYWxsb2Nfd29ya2RpcigpXG4re1xuK1x0IyBBbGxvY2F0ZWQgb25seSBoZXJlLCBsb25nIGFmdGVyIHRoZSBpbml0aWFsIHRvcG9sb2d5IGNsZWFudXAsIHNvXG4rXHQjIGNsZWFudXAoKSBhdCBzZXR1cF90b3BvKCkgdGltZSBjYW4gbmV2ZXIgcmVtb3ZlIGl0LiBta3RlbXAgZmFpbHVyZVxuK1x0IyBpcyBhIGhhcmQgdGVzdCBmYWlsdXJlLlxuK1x0d29ya2Rpcj0kKG1rdGVtcCAtZCAvdG1wL2hzcl9ncm9fdGVzdC5YWFhYWFgpIHx8IHtcbitcdFx0ZWNobyBcIkZBSUw6IG1rdGVtcCAtZCBmYWlsZWRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRleGl0IDFcbitcdH1cbitcdGNobW9kIDcwMCBcIiR7d29ya2Rpcn1cIlxuK1x0cGlkZmlsZT1cIiR7d29ya2Rpcn0vaXBlcmYucGlkXCJcbitcdHJjZmlsZT1cIiR7d29ya2Rpcn0vaXBlcmYucmNcIlxuK31cbitcbisjIE51bWVyaWMsIGFsaXZlLCBjb21tID09IGlwZXJmMywgYW5kIHJlYWxseSBvd25lZCBieSB0aGUgZ2l2ZW4gbmV0bnMuXG4rdmFsaWRfc2VydmVyX3BpZCgpXG4re1xuK1x0bG9jYWwgcG5zPVwiJDFcIiBwPVwiJDJcIlxuK1xuK1x0W1sgXCIkcFwiID1+IF5bMC05XSskIF1dIHx8IHJldHVybiAxXG4rXHRraWxsIC0wIFwiJHBcIiAyXHUwMDNlL2Rldi9udWxsIHx8IHJldHVybiAxXG4rXHRbIFwiJChjYXQgL3Byb2MvXCIkcFwiL2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcIiA9IFwiaXBlcmYzXCIgXSB8fCByZXR1cm4gMVxuK1x0aXAgbmV0bnMgcGlkcyBcIiRwbnNcIiAyXHUwMDNlL2Rldi9udWxsIHwgZ3JlcCAtcXggXCIkcFwiXG4rfVxuK1xuK3N0YXJ0X2lwZXJmX3NlcnZlcigpXG4re1xuK1x0bG9jYWwgc3J2X25zPVwiJDFcIlxuK1x0bG9jYWwgc3J2X2lwPVwiJHsyOi19XCJcbitcdGxvY2FsIGNhbmRpZGF0ZV9waWRcbitcbitcdCMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHNcbitcdCMgcmVhbCBleGl0IHN0YXR1cyAobmV0bnMgc2hhcmVzIHRoZSBQSUQgbmFtZXNwYWNlIGFuZCB0aGUgaG9zdCBmcykuXG4rXHRhbGxvY193b3JrZGlyXG4rXHQjIHJlY29yZCB0aGUgc2VydmVyIG5hbWVzcGFjZSBmb3IgY2xlYW51cCgpIGJlZm9yZVxuK1x0IyBhbnl0aGluZyBjYW4gZmFpbCB3aXRoIHRoZSBzZXJ2ZXIgcnVubmluZ1xuK1x0YWN0aXZlX3Nydl9ucz1cIiRzcnZfbnNcIlxuK1x0KCBuc3ggXCIkc3J2X25zXCIgXCJpcGVyZjMgLXMgLTEgJHtzcnZfaXA6Ky1CICRzcnZfaXB9IFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjEgXHUwMDI2IFxcXG4rXHRcdGVjaG8gXFwkISBcdTAwM2UgJHtwaWRmaWxlfTsgXFxcbitcdFx0d2FpdCBcXCQhOyBcXFxuK1x0XHRlY2hvIFxcJD8gXHUwMDNlICR7cmNmaWxlfVwiICkgXHUwMDI2XG4rXHRzZXJ2ZXJfd3JhcHBlcj0kIVxuK1x0IyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvXG4rXHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxuK1x0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFsgLXMgXCIke3BpZGZpbGV9XCIgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbitcdFx0c2xlZXAgMC4xXG4rXHRkb25lXG4rXHRpZiBbICEgLXMgXCIke3BpZGZpbGV9XCIgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWRcIiBcXFxuK1x0XHRcdFwiKG5vIHBpZGZpbGUpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRjYW5kaWRhdGVfcGlkPSQoXHUwMDNjXCIke3BpZGZpbGV9XCIpXG4rXHRpZiAhIHZhbGlkX3NlcnZlcl9waWQgXCIkc3J2X25zXCIgXCIke2NhbmRpZGF0ZV9waWR9XCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgcGlkICcke2NhbmRpZGF0ZV9waWR9J1wiIFxcXG4rXHRcdFx0XCJmYWlsZWQgdmFsaWRhdGlvblwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0IyBwdWJsaXNoIG9ubHkgYWZ0ZXIgZnVsbCB2YWxpZGF0aW9uXG4rXHRpcGVyZl9waWQ9XCIke2NhbmRpZGF0ZV9waWR9XCJcbitcdHNsZWVwIDFcbitcdHJldHVybiAwXG4rfVxuK1xuKyMgUHJpbnQgXCJcdTAwM2NieXRlc1x1MDAzZSBcdTAwM2NwYWNrZXRzXHUwMDNlXCIgZm9yIGV4YWN0bHkgb25lIFRYIHJlY29yZCBvZiBucy9kZXY7IGFueXRoaW5nXG4rIyBlbHNlIChtaXNzaW5nLCBkdXBsaWNhdGVkLCBub24tbnVtZXJpYykgaXMgYSBoYXJkIEZBSUwuXG4rcmVhZF90eF9jb3VudGVycygpXG4re1xuK1x0bG9jYWwgbnM9XCIkMVwiIGRldj1cIiQyXCJcbitcdGxvY2FsIG91dCBjbnRcbitcbitcdG91dD0kKG5zeCBcIiRuc1wiIFwiaXAgLXMgbGluayBzaG93ICRkZXZcIiB8IFxcXG4rXHRcdGF3ayAnL14gK1RYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfScpXG4rXHRjbnQ9JChlY2hvIFwiJG91dFwiIHwgZ3JlcCAtYyAnXlswLTldKiBbMC05XSokJylcbitcdGlmIFsgXCIkY250XCIgLW5lIDEgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2XCIgXFxcbitcdFx0XHRcIihyZWNvcmRzPSRjbnQpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRlY2hvIFwiJG91dFwiXG4rXHRyZXR1cm4gMFxuK31cbitcbisjIFByaW50IFwiXHUwMDNjYnl0ZXNcdTAwM2UgXHUwMDNjcGFja2V0c1x1MDAzZVwiIGZvciBleGFjdGx5IG9uZSBSWCByZWNvcmQgb2YgbnMvZGV2OyB0aGVcbisjIHNhbWUgc2luZ2xlLXJlY29yZCBkaXNjaXBsaW5lIGFzIHJlYWRfdHhfY291bnRlcnMuXG4rcmVhZF9yeF9jb3VudGVycygpXG4re1xuK1x0bG9jYWwgbnM9XCIkMVwiIGRldj1cIiQyXCJcbitcdGxvY2FsIG91dCBjbnRcbitcbitcdG91dD0kKG5zeCBcIiRuc1wiIFwiaXAgLXMgbGluayBzaG93ICRkZXZcIiB8IFxcXG4rXHRcdGF3ayAnL14gK1JYOi97Z2V0bGluZTsgcHJpbnQgJDEsICQyfScpXG4rXHRjbnQ9JChlY2hvIFwiJG91dFwiIHwgZ3JlcCAtYyAnXlswLTldKiBbMC05XSokJylcbitcdGlmIFsgXCIkY250XCIgLW5lIDEgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogY2Fubm90IHBhcnNlIFJYIGNvdW50ZXJzIG9mICRucy8kZGV2XCIgXFxcbitcdFx0XHRcIihyZWNvcmRzPSRjbnQpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRlY2hvIFwiJG91dFwiXG4rXHRyZXR1cm4gMFxuK31cbitcbitldmFsX2NvdW50ZXJfZGVsdGEoKVxuK3tcbitcdGxvY2FsIG5hbWU9XCIkMVwiIGIwPVwiJDJcIiBwMD1cIiQzXCIgYjE9XCIkNFwiIHAxPVwiJDVcIiBvcD1cIiQ2XCIgbGltaXQ9XCIkN1wiXG4rXHRsb2NhbCBiZCBwZFxuK1xuK1x0aWYgISBbWyBcIiRiMFwiID1+IF5bMC05XSskIFx1MDAyNlx1MDAyNiBcIiRiMVwiID1+IF5bMC05XSskIFx1MDAyNlx1MDAyNiBcXFxuK1x0XHRcIiRwMFwiID1+IF5bMC05XSskIFx1MDAyNlx1MDAyNiBcIiRwMVwiID1+IF5bMC05XSskIF1dOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBub24tbnVtZXJpYyBjb3VudGVyIGlucHV0IGZvciAkbmFtZVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0YmQ9JCgoYjEgLSBiMCkpXG4rXHRwZD0kKChwMSAtIHAwKSlcbitcdGlmIFsgXCIkYmRcIiAtbHQgMCBdIHx8IFsgXCIkcGRcIiAtbGUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBjb3VudGVyIGRlbHRhIGludmFsaWQgZm9yICRuYW1lXCIgXFxcbitcdFx0XHRcIihieXRlcz0kYmQgcGt0cz0kcGQpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRpZiBbIFwiJG9wXCIgPSBcImd0XCIgXTsgdGhlblxuK1x0XHRpZiBbIFwiJGJkXCIgLWxlICQoKHBkICogbGltaXQpKSBdOyB0aGVuXG4rXHRcdFx0ZWNobyBcIkZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCBcdTAwM2M9ICRsaW1pdFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdFx0cmV0PTFcbitcdFx0XHRyZXR1cm4gMVxuK1x0XHRmaVxuK1x0ZWxzZVxuK1x0XHRpZiBbIFwiJGJkXCIgLWd0ICQoKHBkICogbGltaXQpKSBdOyB0aGVuXG4rXHRcdFx0ZWNobyBcIkZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCBcdTAwM2UgJGxpbWl0XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0XHRyZXQ9MVxuK1x0XHRcdHJldHVybiAxXG4rXHRcdGZpXG4rXHRmaVxuK1x0ZWNobyBcIklORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkXCIgXFxcbitcdFx0XCIob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdXCJcbitcdHJldHVybiAwXG4rfVxuK1xuKyMgTEFOLXNsYXZlIHBsYWluLUdTTyByZWdyZXNzaW9uOiBhIHBsYWluIFNBTiBhZ2dyZWdhdGUgZW50ZXJpbmcgYSBQUlBcbisjIExBTiBzbGF2ZSBtdXN0IGJlIHNlZ21lbnRlZCBhdCB0aGUgZm9yd2FyZCBlbnRyeSwgbm90IGRyb3BwZWQuIFBSUFxuKyMgZHJvcHMgc2xhdmUtdG8tc2xhdmUgZm9yd2FyZGluZyBieSBkZXNpZ24gKHBycF9kcm9wX2ZyYW1lKSwgc28gdGhlXG4rIyBjb25zdW1lciBvZiBMQU4tc2xhdmUgU0FOIHRyYWZmaWMgaXMgbG9jYWwgZGVsaXZlcnkgdG8gdGhlIG1hc3Rlci5cbisjIFR3byBpbmRlcGVuZGVudCBvcmFjbGVzOiB0aGUgU0FOLXNpZGUgcHJvb2YgdGhhdCBhZ2dyZWdhdGVzIHJlYWxseVxuKyMgYXJyaXZlZCBhdCB0aGUgRFVULCBhbmQgdGhlIHZvbHVtZSArIHBlci1mcmFtZSBzaGFwZSBvZiB0aGUgbG9jYWxcbisjIGRlbGl2ZXJ5LiBPbiB0aGUgYnJva2VuIGdhdGUgdGhlIGFnZ3JlZ2F0ZXMgYXJlIGRyb3BwZWQgYW5kIFRDUFxuKyMgY3Jhd2xzIG9uIHJldHJhbnNtaXR0ZWQgc2luZ2xlIHNlZ21lbnRzLCBzZXBhcmF0aW5nIHRoZSBrZXJuZWxzIGJ5XG4rIyBhbiBvcmRlciBvZiBtYWduaXR1ZGUgaW4gZGVsaXZlcmVkIGJ5dGVzLlxuK2RvX2xhbnNhbl9nc29fdGVzdCgpXG4re1xuK1x0bG9jYWwgcHJwX2lwPVwiMTAuOTkuMS4xXCIgbHNfaXA9XCIxMC45OS4xLjEwXCJcbitcdGxvY2FsIG91dCBzYW5fYjAgc2FuX3AwIHNhbl9iMSBzYW5fcDFcbitcdGxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgcl9iMCByX3AwIHJfYjEgcl9wMVxuK1xuK1x0c2V0dXBfbnMgbnNfbHMgfHwgZXhpdCAkP1xuK1xuK1x0aXAgbGluayBhZGQgZF9wYSBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIGxzX2EgbmV0bnMgXCIkbnNfbHNcIlxuK1x0aXAgbGluayBhZGQgZF9wYiBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIGxzX3AgbmV0bnMgXCIkbnNfbHNcIlxuK1xuK1x0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBzZXQgZF9wYSBtdHUgMTYwMCB1cFwiXG4rXHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIHNldCBkX3BiIG10dSAxNjAwIHVwXCJcbitcdG5zeCBcIiRuc19sc1wiIFwiaXAgbGluayBzZXQgbHNfYSBtdHUgMTYwMCB1cDsgXFxcbitcdFx0aXAgbGluayBzZXQgbHNfcCBtdHUgMTYwMCB1cDsgaXAgYWRkciBhZGQgJGxzX2lwLzI0IGRldiBsc19hXCJcbitcbitcdCMgUFJQIERVVCB3aXRoIHRoZSBTQU4gb24gYSBMQU4gc2xhdmU6IHBsYWluIFNBTiBhZ2dyZWdhdGVzIGFyZVxuK1x0IyB2YWxpZCB0cmFmZmljIG9uIGEgUFJQIExBTiBhbmQgbXVzdCBub3QgYmUgZHJvcHBlZC5cbitcdG5zeCBcIiRuc19kdXRcIiBcImlwIGxpbmsgYWRkIHBycDAgdHlwZSBoc3IgXFxcbitcdFx0c2xhdmUxIGRfcGEgc2xhdmUyIGRfcGIgcHJvdG8gMTsgXFxcbitcdFx0aXAgbGluayBzZXQgcHJwMCB1cDsgaXAgYWRkciBhZGQgJHBycF9pcC8yNCBkZXYgcHJwMFwiXG4rXG4rXHQjIExldCBzdXBlcnZpc2lvbiBmcmFtZXMgY29udmVyZ2UuXG4rXHRzbGVlcCAyXG4rXG4rXHRlY2hvIFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgTEFOLXNpZGUgU0FOIGludGVyZmFjZS5cIlxuK1x0bnN4IFwiJG5zX2xzXCIgXCJldGh0b29sIC1LIGxzX2EgdHNvIG9uIGdzbyBvblwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2xzXCIgbHNfYSB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb25cbitcdHN0b3BfaWZfZXJyb3IgXCJDb3VsZCBub3QgZW5hYmxlIFRTTyBvbiB0aGUgTEFOLXNpZGUgU0FOIGludGVyZmFjZS5cIlxuK1xuK1x0c3RhcnRfaXBlcmZfc2VydmVyIFwiJG5zX2R1dFwiIFwiJHBycF9pcFwiIHx8IHJldHVyblxuK1xuK1x0cmVhZCAtciByX2IwIHJfcDAgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3J4X2NvdW50ZXJzIFwiJG5zX2R1dFwiIHBycDApXG4rRU9GXG4rXHRyZWFkIC1yIHNhbl9iMCBzYW5fcDAgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX2xzXCIgbHNfYSlcbitFT0ZcbitcdGlmICEgdmFsaWRfZGVjaW1hbHMgXCIkcl9iMFwiIFwiJHJfcDBcIiBcIiRzYW5fYjBcIiBcIiRzYW5fcDBcIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogYmFzZWxpbmUgY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXG4rXHRpZiAhIG91dD0kKG5zeCBcIiRuc19sc1wiIFwidGltZW91dCA2MCBpcGVyZjMgLWMgJHBycF9pcCAtTSAxNDQ2IFxcXG4rXHRcdC1iIDJHIC10IDEwXCIgMlx1MDAzZVx1MDAyNjEpOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBMQU4tc2xhdmUgR1NPIGxvY2FsLWRlbGl2ZXJ5IHN0cmVhbSBmYWlsZWQ6XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0ZWNobyBcIiRvdXRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXG4rXHRyZWFkIC1yIHJfYjEgcl9wMSBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfcnhfY291bnRlcnMgXCIkbnNfZHV0XCIgcHJwMClcbitFT0ZcbitcdHJlYWQgLXIgc2FuX2IxIHNhbl9wMSBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfbHNcIiBsc19hKVxuK0VPRlxuK1x0aWYgISB2YWxpZF9kZWNpbWFscyBcIiRyX2IxXCIgXCIkcl9wMVwiIFwiJHNhbl9iMVwiIFwiJHNhbl9wMVwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBmaW5hbCBjb3VudGVyIHNuYXBzaG90IGludmFsaWRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcbitcdCMgT3JhY2xlIDEgLSBhZ2dyZWdhdGVzIHJlYWxseSBhcnJpdmVkOiB0aGUgU0FOIGVtaXR0ZWRcbitcdCMgc3VwZXItcGFja2V0cyB0b3dhcmQgdGhlIERVVC5cbitcdGV2YWxfY291bnRlcl9kZWx0YSBcIlNBTiBsc19hIFRYXCIgXCIkc2FuX2IwXCIgXCIkc2FuX3AwXCIgXFxcbitcdFx0XCIkc2FuX2IxXCIgXCIkc2FuX3AxXCIgZ3QgXCIkU0FOX0FWR19NSU5cIlxuK1x0WyBcIiR7cmV0Oi0wfVwiIC1lcSAwIF0gfHwgcmV0dXJuXG4rXG4rXHQjIE9yYWNsZSAyIC0gbG9jYWwgZGVsaXZlcnkgb2YgdGhvc2UgYWdncmVnYXRlczogdm9sdW1lIGFuZFxuK1x0IyBwZXItZnJhbWUgc2hhcGUgb24gdGhlIFBSUCBtYXN0ZXIuIFRoZSB2b2x1bWUgZ2F0ZSBzZXBhcmF0ZXNcbitcdCMgZnVsbCBkZWxpdmVyeSBmcm9tIHRoZSByZXRyYW5zbWl0IGNyYXdsIHRoZSBicm9rZW4gZ2F0ZSBsZWF2ZXM7XG4rXHQjIHRoZSBhdmVyYWdlIGdhdGUgcHJvdmVzIHRoZSBieXRlcyBhcnJpdmVkIHBlci1mcmFtZS5cbitcdGlmIFsgJCgocl9iMSAtIHJfYjApKSAtbHQgMTAwMDAwMDAwIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IExBTi1zbGF2ZSBsb2NhbCBkZWxpdmVyeSBkZWdyYWRlZFwiIFxcXG4rXHRcdFx0XCIocHJwMCBSWCBkZWx0YSAkKChyX2IxIC0gcl9iMCkpIGJ5dGVzIFx1MDAzYyAxMDAwMDAwMDApXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1x0aWYgWyAkKChyX2IxIC0gcl9iMCkpIC1ndCAkKCggKHJfcDEgLSByX3AwKSAqIExBTl9BVkdfTUFYICkpIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGxvY2FsIGRlbGl2ZXJ5IG5vdCBwZXItZnJhbWVcIiBcXFxuK1x0XHRcdFwiKGF2ZyAkKCggKHJfYjEgLSByX2IwKSAvIChyX3AxIC0gcl9wMCkgKSkgXHUwMDNlICRMQU5fQVZHX01BWClcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXHRlY2hvIFwiSU5GTzogTEFOLXNsYXZlIGxvY2FsIGRlbGl2ZXJ5IHBycDAgUlggZGVsdGFcIiBcXFxuK1x0XHRcIiQoKHJfYjEgLSByX2IwKSkgYnl0ZXMgLyAkKChyX3AxIC0gcl9wMCkpIHBrdHMgWyBPSyBdXCJcbitcdHJlYXBfaXBlcmZfc2VydmVyIHx8IHJldHVyblxuK1x0ZWNobyBcIklORk86IExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbiBbIE9LIF1cIlxuK31cbitcbitkb190c29fc3RyZWFtX3Rlc3QoKVxuK3tcbitcdGxvY2FsIG91dCBzZW5kZXJfcmV0clxuK1x0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXG4rXHRsb2NhbCBhX2IwIGFfcDAgYV9iMSBhX3AxIGJfYjAgYl9wMCBiX2IxIGJfcDFcbitcbitcdGVjaG8gXCJJTkZPOiBFbmFibGluZyBUU08vR1NPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLlwiXG4rXHRuc3ggXCIkbnNfc2FuXCIgXCJldGh0b29sIC1LIHMwIHRzbyBvbiBnc28gb25cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19zYW5cIiBzMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb25cbitcdHN0b3BfaWZfZXJyb3IgXCJDb3VsZCBub3QgZW5hYmxlIFRTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cIlxuK1xuK1x0ZWNobyBcIklORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC1cdTAwM2UgcGVlciB0aHJvdWdoIHRoZSBIU1IgRFVULlwiXG4rXHRzdGFydF9pcGVyZl9zZXJ2ZXIgXCIkbnNfcGVlclwiIHx8IHJldHVyblxuK1xuK1x0IyBDb3VudGVyIHNuYXBzaG90cyBhcm91bmQgdGhlIHN0cmVhbSB3aW5kb3cuIFRoZSBTQU4tc2lkZSBhdmVyYWdlXG4rXHQjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0c1xuK1x0IyByZWFsbHkgbGVmdCB0aGUgU0FOKTsgZWFjaCBEVVQgTEFOIGxlZyBtdXN0IHN0YXkgdW5kZXIgTEFOX0FWR19NQVhcbitcdCMgKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IGJ1bGsgb3V0cHV0IHdhcyBzZWdtZW50ZWQgcGVyLWZyYW1lKS4gVGhlc2VcbitcdCMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuXG4rXHRzYW5fYjA9MDsgc2FuX3AwPTA7IGFfYjA9MDsgYV9wMD0wOyBiX2IwPTA7IGJfcDA9MFxuK1x0cmVhZCAtciBzYW5fYjAgc2FuX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19zYW5cIiBzMClcbitFT0ZcbitcdHJlYWQgLXIgYV9iMCBhX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2EpXG4rRU9GXG4rXHRyZWFkIC1yIGJfYjAgYl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfZHV0XCIgZF9iKVxuK0VPRlxuK1x0aWYgISB2YWxpZF9kZWNpbWFscyBcIiRzYW5fYjBcIiBcIiRzYW5fcDBcIiBcIiRhX2IwXCIgXCIkYV9wMFwiIFxcXG4rXHRcdFwiJGJfYjBcIiBcIiRiX3AwXCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGJhc2VsaW5lIFRYIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1xuK1x0IyByYXRlLWNhcHBlZDogdGhlIFBSSU1BUlkgZGlzY3JpbWluYXRvciBpcyB0aGUgY291bnRlciBpbmVxdWFsaXR5XG4rXHQjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuXG4rXHQjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhXG4rXHQjIGZ1bmN0aW9uYWwgcHJvYmxlbS5cbitcdGlmICEgb3V0PSQobnN4IFwiJG5zX3NhblwiIFwidGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcXFxuK1x0XHQtYiAyRyAtdCAxMFwiIDJcdTAwM2VcdTAwMjYxKTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIGNsaWVudCBmYWlsZWQ6XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0ZWNobyBcIiRvdXRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXG4rXHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX3NhblwiIHMwKVxuK0VPRlxuK1x0cmVhZCAtciBhX2IxIGFfcDEgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX2R1dFwiIGRfYSlcbitFT0ZcbitcdHJlYWQgLXIgYl9iMSBiX3AxIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2IpXG4rRU9GXG4rXHRpZiAhIHZhbGlkX2RlY2ltYWxzIFwiJHNhbl9iMVwiIFwiJHNhbl9wMVwiIFwiJGFfYjFcIiBcIiRhX3AxXCIgXFxcbitcdFx0XCIkYl9iMVwiIFwiJGJfcDFcIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJTQU4gczAgVFhcIiBcIiRzYW5fYjBcIiBcIiRzYW5fcDBcIiBcIiRzYW5fYjFcIiBcIiRzYW5fcDFcIiBcXFxuK1x0XHRndCBcIiRTQU5fQVZHX01JTlwiXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJEVVQgZF9hIFRYXCIgXCIkYV9iMFwiIFwiJGFfcDBcIiBcIiRhX2IxXCIgXCIkYV9wMVwiIFxcXG4rXHRcdGxlIFwiJExBTl9BVkdfTUFYXCJcbitcdGV2YWxfY291bnRlcl9kZWx0YSBcIkRVVCBkX2IgVFhcIiBcIiRiX2IwXCIgXCIkYl9wMFwiIFwiJGJfYjFcIiBcIiRiX3AxXCIgXFxcbitcdFx0bGUgXCIkTEFOX0FWR19NQVhcIlxuK1x0WyBcIiR7cmV0Oi0wfVwiIC1lcSAwIF0gfHwgcmV0dXJuXG4rXG4rXHQjIHN1Y2Nlc3MgcGF0aDogYm91bmRlZCByZWFwIHdpdGggdGhlIHNlcnZlcidzIHJlYWwgc3RhdHVzXG4rXHRyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm5cbitcbitcdCMgc2Vjb25kYXJ5IGhlYWx0aCBzaWduYWwgb25seTogYW5jaG9yZWQsIHNpbmdsZS1tYXRjaCwgbnVtZXJpYyDigJRcbitcdCMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlclxuK1x0IyBnYXRlcyAodGhlIGNvdW50ZXIgaW5lcXVhbGl0aWVzIGFib3ZlIGFyZSB0aGUgcHJpbWFyeSBldmlkZW5jZSkuXG4rXHRzZW5kZXJfcmV0cj0kKGVjaG8gXCIkb3V0XCIgfCBhd2sgJy9zZWMgLiogc2VuZGVyJC8ge3ByaW50ICQoTkYtMSl9JylcbitcdGlmIFsgXCIkKGVjaG8gXCIkc2VuZGVyX3JldHJcIiB8IGdyZXAgLUVjICdeWzAtOV0rJCcpXCIgLW5lIDEgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogY2Fubm90IHBhcnNlIHNlbmRlciByZXRyYW5zbWl0cyByZWxpYWJseVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGVjaG8gXCIkb3V0XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1x0ZWNobyBcIklORk86IFRDUCBzdHJlYW0gZG9uZTtcIiBcXFxuK1x0XHRcInNlbmRlciByZXRyYW5zbWl0cz0kc2VuZGVyX3JldHIgKHNlY29uZGFyeSBzaWduYWwpXCJcbitcdGVjaG8gXCIkb3V0XCIgfCBncmVwIC1FIFwic2VuZGVyfHJlY2VpdmVyXCJcbit9XG4rXG4rY2hlY2tfcHJlcmVxdWlzaXRlc1xuK2NoZWNrX3Rvb2wgZXRodG9vbFxuK2NoZWNrX3Rvb2wgaXBlcmYzXG4rY2hlY2tfdG9vbCB0aW1lb3V0XG4rXG4rIyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LlxuK2lmICEgaXAgbGluayBoZWxwIGhzciAyXHUwMDNlXHUwMDI2MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IGlwcm91dGUyIGhhcyBubyBIU1IgaW50ZXJsaW5rIHN1cHBvcnRcIlxuK1x0ZXhpdCAka3NmdF9za2lwXG4rZmlcbitcbitzZXR1cF90b3BvXG4rXG4rZWNobyBcIklORk86IEluaXRpYWwgdmFsaWRhdGlvbiBwaW5nIChTQU4gLVx1MDAzZSBwZWVyIHRocm91Z2ggdGhlIERVVCkuXCJcbitkb19waW5nIFwiJG5zX3NhblwiIFwiJHBlZXJfaXBcIlxuK3N0b3BfaWZfZXJyb3IgXCJJbml0aWFsIHZhbGlkYXRpb24gZmFpbGVkLlwiXG4rXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzXG4rZG9fdHNvX3N0cmVhbV90ZXN0XG4rc3RvcF9pZl9lcnJvciBcIkdTTyBzdXBlci1wYWNrZXQgc3RyZWFtIHRlc3QgZmFpbGVkLlwiXG4rXG4rZG9fbGFuc2FuX2dzb190ZXN0XG4rc3RvcF9pZl9lcnJvciBcIkxBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbiBmYWlsZWQuXCJcbitcbitlY2hvIFwiSU5GTzogQWxsIGdvb2QuXCJcbitjbGVhbnVwXG4rZXhpdCAkcmV0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDowNS4yMDkyNTI3NDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjQ2MTM3NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSFNSIEdTTyBTdXBlci1QYWNrZXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBpbnRvIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGFkZGl0aW9uIHRvIHRoZSBkZXZpY2UgQVBJLCByZWFsbHkuICBUaGUgbWFpbiB0aHJ1c3Qgc2VlbXMgdG8gYmUgZW5hYmxpbmcgSFNSIHRvIHByb3Blcmx5IGhhbmRsZSBHU08gc3VwZXItcGFja2V0cy4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBIU1IgZmlsZXM6IGBoc3JfZGV2aWNlLmNgLCBgaHNyX2ZvcndhcmQuY2AsIGFuZCBgaHNyX3NsYXZlLmNgLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBjaGFuZ2VzIHRvIGBoc3JfZm9yd2FyZC5jYC4gIExldCdzIHNlZS4uLlxuXG5BaCwgeWVzLCB0aGV5J3ZlIGltcGxlbWVudGVkIEdTTyBzZWdtZW50YXRpb24gd2l0aGluIGBoc3JfZm9yd2FyZF9za2JgLiAgSWYgdGhlIFNLQiBpc24ndCBhIEdTTyBwYWNrZXQsIGl0IGp1c3QgZm9yd2FyZHMgaXQgYXMtaXMuIE1ha2VzIHNlbnNlLiBCdXQgaWYgaXQgKmlzKiBhIEdTTyBwYWNrZXQsIGl0J3Mgc2VnbWVudGVkIHVzaW5nIGBfX3NrYl9nc29fc2VnbWVudGAgYW5kIHRoZW4gZWFjaCBzZWdtZW50IGlzIGZvcndhcmRlZCBpbmRpdmlkdWFsbHkuIFRoYXQncyB0aGUgY29ycmVjdCBhcHByb2FjaC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGV4cGxpY2l0bHkgZGlzYWJsaW5nIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcyBpbiBgaHNyX3BvcnRkZXZfc2V0dXBgIHRvby4gIE1ha2VzIHNlbnNlLCB3ZSBjYW4ndCBoYXZlIGJvdGggR1JPIGFuZCBzZWdtZW50YXRpb24uICBUaGUgY29tbWVudCBtZW50aW9ucyB0aGF0IGRpc2FibGluZyBHUk8gaXMgXCJiZXN0LWVmZm9ydCxcIiB3aGljaCBtZWFucyB0aGUgZHJpdmVyIGhhcyB0byByZXNwZWN0IGl0LiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGFuZCBtaWdodCBuZWVkIG1vcmUgZGlzY3Vzc2lvbiByZWdhcmRpbmcgaGFyZHdhcmUgc3VwcG9ydC5cblxuVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGNoYW5nZSwgaW1wYWN0aW5nIGJvdGggdGhlIGNvcmUgbmV0d29yayBkZXZpY2UgQVBJIChgZGV2X2Rpc2FibGVfZ3JvYCkgYW5kIGhvdyBIU1Igb3BlcmF0ZXMgaW50ZXJuYWxseS5cblxuVGhlIGtleSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIGFib3V0IHRlc3RpbmcuIENhbiBIU1IgYmUgdGVzdGVkIGVmZmVjdGl2ZWx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cz8gIEdvb2QuIFRoZXkndmUgYWRkZWQgYSBzZWxmdGVzdCBzcGVjaWZpY2FsbHkgZm9yIGBoc3JfZ3JvX3N1cGVycGFja2V0LnNoYC4gVGhhdCdzIGEgZ29vZCBzaWduIOKAkyB0aGF0IG1lYW5zIGl0J3MgZGVtb25zdHJhYmxlLiBJdCBzZWVtcyBsaWtlIHVzaW5nIHZldGggZGV2aWNlcyBzaG91bGQgd29yaywgc2luY2UgSFNSIGlzIGVzc2VudGlhbGx5IGEgc29mdHdhcmUtZGVmaW5lZCBwcm90b2NvbC4gIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxpY2F0ZSBpdCBsaWtlIGJvbmRpbmcgb3IgYnJpZGdpbmcuXG5cbk5vdywgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgdGhlIEhTUiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCBtZSBnbyBmaW5kIGBuZXQvaHNyL0tjb25maWdgIHRvIGNvbmZpcm0gZXZlcnl0aGluZyBpcyB3aGVyZSBJIGV4cGVjdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDoxNC44NTUzOTI3MjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxOTIwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhTUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9LY29uZmlnLTUtXFxubmV0L2hzci9LY29uZmlnOjY6Y29uZmlnIEhTUlxcbm5ldC9oc3IvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXFx1MDAyNiBQUlApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDoxNC44OTc1OTE3NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjg3Mjk2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgSFNSKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIEhTUiBpbXBsZW1lbnRhdGlvbi4gVGhlIGtleSBjb25maWcgb3B0aW9uLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGBIU1JgLiBOb3csIHRvIGZpbmQgdGhlIG1vc3QgZnJ1aXRmdWwgYXJlYXMgZm9yIGZ1enppbmcsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMuXG5cblJpZ2h0IG9mZiB0aGUgYmF0LCBgaHNyX2ZvcndhcmRfc2tiYCBzZWVtcyBsaWtlIGEgcHJpbWUgdGFyZ2V0LiBJdCdzIGdvdCB0aGUgcmluZyBvZiBhIGNvcmUgcHJvY2Vzc2luZyBmdW5jdGlvbi4gVGhlbiB0aGVyZSdzIGBoc3JfaGFuZGxlX2ZyYW1lYCwgd2hpY2ggaXMgdGhlIFJYIGhhbmRsZXIgZm9yIEhTUiBzbGF2ZSBkZXZpY2VzIC0gYWxzbyBsaWtlbHkgdG8gYmUgdmFsdWFibGUuIGBoc3JfZGV2X3htaXRgIGlzIHRoZSBUWCBoYW5kbGVyIGZvciB0aGUgSFNSIG1hc3RlciBkZXZpY2UsIHNvIHRoYXQncyBkZWZpbml0ZWx5IGluIHNjb3BlLiBJIHNlZSB0aGF0IGBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90b2AgaXMgc3RhdGljLCBtZWFuaW5nIEkgY2FuJ3QgZGlyZWN0bHkgdGFyZ2V0IGl0LiBIb3dldmVyLCBpdCAqaXMqIGNhbGxlZCBieSBgaHNyX2ZvcndhcmRfc2tiYCwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGR1cmluZyBhbmFseXNpcywgb3IgYnkgZnV6emluZyBgaHNyX2ZvcndhcmRfc2tiYCBJIHdpbGwgaW1wbGljaXRseSBiZSB0ZXN0aW5nIGBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90b2AuIGBkZXZfZGlzYWJsZV9ncm9gIGlzIGV4cG9ydGVkLCBzbyBpdCdzIGNhbGxibGUgYnkgb3RoZXIgbW9kdWxlcywgYnV0IGl0IGxvb2tzIGxpa2UgYSBzaW1wbGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgYW5kIGh1bnQgZm9yIGFueSBleHBvcnRlZCBvciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLCBhcyB0aGVzZSBhcmUgdGhlIG9uZXMgSSdsbCBiZSBhYmxlIHRvIGRpcmVjdGx5IHRhcmdldCB3aXRoIG15IGZ1enppbmcgZWZmb3J0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNjYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6MjEuMjY2MzIzODA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTA2MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGhzcl9mb3J3YXJkX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZm9yd2FyZC5jPTc3Nz1zdGF0aWMgX19iZTE2IGhzcl9nc29fZWZmZWN0aXZlX3Byb3RvKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODE0LVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo4MTU6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDoyMS4zMTIyNDA1MjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzcyOTAyNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEhTUiBGcmFtZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBIU1IgaW1wbGVtZW50YXRpb24gYW5kIEkndmUgZ290IGEgc3BlY2lmaWMgcXVlc3Rpb24gYnVybmluZyBpbiBteSBtaW5kLiBgaHNyX2ZvcndhcmRfc2tiYC4uLiBJIG5vdGljZWQgaXQncyBub3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBCdXQgd2hhdCBhYm91dCB0aGUgb3RoZXIgbWFqb3IgZnVuY3Rpb24gaW52b2x2ZWQgaW4gaGFuZGxpbmcgSFNSIGZyYW1lcywgYGhzcl9oYW5kbGVfZnJhbWVgPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgc2NvcGUgYW5kIHZpc2liaWxpdHkgb2YgdGhhdCBvbmUuIElzIGl0IGFsc28gYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgdGhlIEhTUiBtb2R1bGUsIG9yIGlzIGl0IGFwcHJvcHJpYXRlbHkgbGltaXRlZCBpbiBpdHMgc2NvcGU/IFVuZGVyc3RhbmRpbmcgdGhlIHN0YXRpYy9ub24tc3RhdGljIHN0YXR1cyBvZiB0aGVzZSBmdW5jdGlvbnMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG1vZHVsZSdzIHN0cnVjdHVyZSBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29yayBzdGFjay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIGZ1bmN0aW9uJ3MgdmlzaWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDoyNC42ODUxNDU5NTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNjIzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2hhbmRsZV9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL2hzcl9zbGF2ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX3NsYXZlLmM9MTk9Ym9vbCBoc3JfaW52YWxpZF9kYW5faW5ncmVzc19mcmFtZShfX2JlMTYgcHJvdG9jb2wpXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTIzLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM6MjQ6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxubmV0L2hzci9oc3Jfc2xhdmUuYy0yNS17XFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTg1PWJvb2wgaHNyX3BvcnRfZXhpc3RzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2hzci9oc3Jfc2xhdmUuYy04Ni17XFxubmV0L2hzci9oc3Jfc2xhdmUuYzo4NzpcXHRyZXR1cm4gcmN1X2FjY2Vzc19wb2ludGVyKGRldi1cXHUwMDNlcnhfaGFuZGxlcikgPT0gaHNyX2hhbmRsZV9mcmFtZTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg4LX1cXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM9MTMyPXN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTE1OS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjE2MDpcXHRyZXMgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcihkZXYsIGhzcl9oYW5kbGVfZnJhbWUsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTYxLVxcdGlmIChyZXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjQwOjI0LjczMTMxMjk3MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMzE5NDI5NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdW5kZXJzdGFuZGluZywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludGVybmFsIEhTUiBGcmFtZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIGNvZGUgYW5kIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBmcmFtZXMgYXJlIG1hbmFnZWQuIFRoZSBrZXkgdGFrZWF3YXkgaGVyZSBpcyB0aGF0IGBoc3JfaGFuZGxlX2ZyYW1lYCBpcyBkZWNsYXJlZCBhcyAqc3RhdGljKi4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGEgZmlsZS1sb2NhbCBmdW5jdGlvbi4gSXQncyBub3QgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBjb21waWxhdGlvbiB1bml0IGl0J3MgZGVmaW5lZCBpbi4gVGhhdOKAmXMgcHJvYmFibHkgYmVjYXVzZSBpdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgbm90IHBhcnQgb2YgdGhlIEhTUiBBUEkgdGhhdCdzIGV4cG9zZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEl0J3MgZG9pbmcgc29tZXRoaW5nIHNwZWNpZmljIHdpdGhpbiB0aGUgSFNSIGRldmljZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB3aGVyZSBpdCdzIGNhbGxlZCBhbmQgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZS5cblxuVGhlbiwgdGhlcmXigJlzIGBoc3JfZGV2X3htaXRgLCB3aGljaCBJJ20gc2VlaW5nIGRlZmluZWQgaW4gYG5ldC9oc3IvaHNyX2RldmljZS5jYC4gVGhhdOKAmXMgbXkgcHJpbWFyeSBwb2ludCBvZiBpbnRlcmVzdC4gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBhY3R1YWwgdHJhbnNtaXNzaW9uIG9mIGZyYW1lcyBmcm9tIHRoZSBIU1IgZGV2aWNlLiBHaXZlbiB0aGUgbmFtZSwgSSdkIGV4cGVjdCBpdCB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIEhTUiBkZXZpY2VzIHRvIHNlbmQgZnJhbWVzLiBJIHNob3VsZCBjaGVjayBpZiBpdCBoYW5kbGVzIGFueSBzcGVjaWFsIEhTUi1zcGVjaWZpYyBoZWFkZXIgZm9ybWF0dGluZyBvciBwYWNrZXQgZHVwbGljYXRpb24sIGFzIEhTUiBpcyBhYm91dCByZWR1bmRhbmN5LiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiBpbXBsZW1lbnRpbmcgdGhlIHJlZHVuZGFuY3kgbWVjaGFuaXNtcy4gSSBiZXQgdGhpcyBpcyB3aGVyZSB0aGUgSFNSLXNwZWNpZmljIGxvZ2ljIHJlc2lkZXMgZm9yIHNlbmRpbmcgcGFja2V0cy4gSeKAmWxsIGRpZyBpbnRvIHRoaXMgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBzdGVwcyBpbnZvbHZlZCBpbiB0cmFuc21pdHRpbmcgSFNSIGZyYW1lcyBmcm9tIGEgZGV2aWNlIHBlcnNwZWN0aXZlLCBpbmNsdWRpbmcgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRyaXZlciBhbmQsIHBlcmhhcHMsIHRoZSBpbXBsaWNhdGlvbnMgb24gcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjE4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6MzAuNzYzMjU4NjMyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTYyMDg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZGV2X3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjE2PXN0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCBoc3JfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjMtXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6MjI0OnN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjUte1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9NTk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaHNyX2RldmljZV9vcHMgPSB7XFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MDEtXFx0Lm5kb19zdG9wID0gaHNyX2Rldl9jbG9zZSxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2MDI6XFx0Lm5kb19zdGFydF94bWl0ID0gaHNyX2Rldl94bWl0LFxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYwMy1cXHQubmRvX2NoYW5nZV9yeF9mbGFncyA9IGhzcl9jaGFuZ2VfcnhfZmxhZ3MsXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz02NjQ9Ym9vbCBpc19oc3JfbWFzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjY1LXtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NjY6XFx0cmV0dXJuIChkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdGFydF94bWl0ID09IGhzcl9kZXZfeG1pdCk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjY3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6MzAuODEyODg3NTI4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzODczNjQ4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipGb2N1c2luZyBpbiBvbiBIU1IgUGFja2V0IFRyYW5zbWlzc2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBIU1IgcGFja2V0IHRyYW5zbWlzc2lvbiB3b3JrcywgYW5kIEkgc2VlIGBoc3JfZGV2X3htaXRgIGlzIGRlZmluZWQgYXMgc3RhdGljLiBUaGF0IGxpbWl0cyBteSBhYmlsaXR5IHRvIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUsIGFuZCBzdWdnZXN0cyBJIG5lZWQgdG8gZmluZCBhIGJldHRlciBlbnRyeSBwb2ludCwgYSBzeW1ib2wgdGhhdCdzIG1vcmUgYWNjZXNzaWJsZSBmb3IgZGVlcCBhbmFseXNpcy4gUmlnaHQsIHRoYXQgbWFrZXMgYGhzcl9mb3J3YXJkX3NrYmAgYSBtdWNoIGJldHRlciBmb2NhbCBwb2ludCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgY29yZSBmb3J3YXJkaW5nIGxvZ2ljLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdtIGludGVyZXN0ZWQgaW4uXG5cbk5vdywgd2hpbGUgSSdtIGF0IGl0LCBJIHNob3VsZCBhbHNvIG1ha2UgYSBub3RlIG9mIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gLiBUaGV5J3JlIHByb2JhYmx5IGluIGBuZXQvY29yZS9kZXYuY2AgYW5kIGBuZXQvY29yZS9kZXZfYXBpLmNgLiBUaGVzZSBhcmUgd29ydGggYSBsb29rIGJlY2F1c2UgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgY2FuIHNpZ25pZmljYW50bHkgaW1wYWN0IHBhY2tldCBwcm9jZXNzaW5nLCBzbyBhbnkgbG9naWMgdGhhdCBpbnRlcmFjdHMgd2l0aCBpdCBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgcGVyZm9ybWFuY2Ugb3IgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGUgSFNSIGNvbnRleHQsIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggSFNSJ3MgZHVwbGljYXRlIHBhY2tldCBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDo0MC4yMDAyNTUzMTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjQ1MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGRldl9kaXNhYmxlX2dyb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9kZXZfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2X2FwaS5jPTI3MD1FWFBPUlRfU1lNQk9MKGRldl9kaXNhYmxlX2xybyk7XFxuLS1cXG5uZXQvY29yZS9kZXZfYXBpLmMtMjg0LSAqL1xcbm5ldC9jb3JlL2Rldl9hcGkuYzoyODU6dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXZfYXBpLmMtMjg2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6NDAuMjUwNTEwMDQ3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MDkyMTA3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgYG5ldGlmX2Rpc2FibGVfZ3JvYCBpbiBgbmV0L2NvcmUvZGV2LmNgKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBgbmV0aWZfZGlzYWJsZV9ncm9gIHdpdGhpbiBgbmV0L2NvcmUvZGV2LmNgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFRoaXMgZnVuY3Rpb24sIGJ5IGl0cyB2ZXJ5IG5hbWUsIGlzIGFsbCBhYm91dCBkaXNhYmxpbmcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykuIFRoYXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgaXNuJ3QgaXQ/IEl0IGFsbG93cyB0aGUgbmV0d29yayBzdGFjayB0byBjb2FsZXNjZSBtdWx0aXBsZSBpbmNvbWluZyBwYWNrZXRzIGludG8gbGFyZ2VyIGZyYW1lcywgcmVkdWNpbmcgcHJvY2Vzc2luZyBvdmVyaGVhZCwgZXNwZWNpYWxseSBmb3IgaGlnaC1iYW5kd2lkdGggc2NlbmFyaW9zLiBTbywgd2hhdCdzIHRyaWdnZXJpbmcgdGhpcyBkaXNhYmxlPyBXaGF0IGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IG5lY2Vzc2l0YXRlIHNhY3JpZmljaW5nIEdSTydzIGVmZmljaWVuY3k/XG5cbk15IG1pbmQgaXMgYWxyZWFkeSByYWNpbmcgd2l0aCBxdWVzdGlvbnM6IElzIHRoaXMgYmVpbmcgY2FsbGVkIGR1ZSB0byBhIHNwZWNpZmljIGhhcmR3YXJlIGxpbWl0YXRpb24/IEEgc29mdHdhcmUtcmVsYXRlZCBpbmNvbXBhdGliaWxpdHkgd2l0aCBhIHBhcnRpY3VsYXIgcHJvdG9jb2wgb3IgZHJpdmVyPyBBcmUgdGhlcmUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgYXJpc2UgZnJvbSB1c2luZyBHUk8gaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdGhlIGNhbGxpbmcgc2l0ZXMsIHRoZSBhcmd1bWVudHMgcGFzc2VkLi4uIGV2ZXJ5dGhpbmcuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIGRpc2FibGluZyB0aGlzIGtleSBvcHRpbWl6YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJhZGVvZmZzIHRoZSBzeXN0ZW0gaXMgbWFraW5nIGhlcmUuIFdoYXQncyB0aGUgY29zdCBvZiB0aGlzIGRpc2FibGUgaW4gdGVybXMgb2YgdGhyb3VnaHB1dCwgbGF0ZW5jeSwgYW5kIENQVSBjeWNsZXM/IElzIGl0IGEgcGVybWFuZW50IGRpc2FibGUgb3IgYSBjb25kaXRpb25hbCBvbmU/IFVsdGltYXRlbHksIEkgd2FudCB0byBlbnN1cmUgdGhhdCB0aGlzIGlzIHRoZSAqcmlnaHQqIGRlY2lzaW9uLCBhIHdlbGwtaW5mb3JtZWQgdHJhZGUtb2ZmLCBhbmQgbm90IGEgcXVpY2sgZml4IHRoYXQgaW50cm9kdWNlcyBhIGhpZGRlbiBwZXJmb3JtYW5jZSBoaXQgbGF0ZXIuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHRoZSBuZXR3b3JrIGRldmljZSBzdGF0ZSBvciBwb3RlbnRpYWwgaXNzdWVzLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBwaWVjZSB0aGF0IGNvdWxkIHNoZWQgbGlnaHQgb24gc29tZSB1bmRlcmx5aW5nIGRldmljZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MDo0Ny44NTk3MjM3ODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTk1Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIG5ldGlmX2Rpc2FibGVfZ3JvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTE4MjU9dm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTg0Mi1cXG5uZXQvY29yZS9kZXYuYzoxODQzOnZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9kZXYuYy0xODQ0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6NDcuOTE0MzI4MTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDMzNDA2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgR1JPIERpc2FibGVtZW50IGluIEhTUioqXG5cbk15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgcmV2b2x2ZXMgYXJvdW5kIHRoZSBzeW1ib2xzIGBoc3JfZm9yd2FyZF9za2JgLCBgZGV2X2Rpc2FibGVfZ3JvYCwgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIFRoZXNlIGFyZSB0aGUga2V5IHBpZWNlcyBvZiBjb2RlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGluIHRoZSBjb250ZXh0IG9mIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGRpc2FibGVtZW50LCBzcGVjaWZpY2FsbHkgYXMgaXQgcmVsYXRlcyB0byBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpLiBJIG5lZWQgdG8gZGV0ZXJtaW5lICp3aHkqIHRoZXNlIGFyZSBzaWduaWZpY2FudCBhbmQsIGNydWNpYWxseSwgaG93IHRoZXkgaW50ZXJhY3QuXG5cbkJleW9uZCB0aGF0LCBJIG5lZWQgdG8gaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3Igc3ltYm9scyByZWxhdGVkIHRvIEdSTyBkaXNhYmxlbWVudCB3aXRoaW4gdGhlIEhTUiBjb250ZXh0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBIU1JgIGRpcmVjdGx5LiBJdCdzIHRoZSBtb3N0IG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuXG5cbkZpbmFsbHksIGEgZGVwZW5kZW5jeSBhbmFseXNpcy4gSXMgdGhlcmUgYW55dGhpbmcgdGhhdCBgSFNSYCByZWxpZXMgb24sIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byB0aGlzIEdSTyBkaXNhYmxlbWVudD8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBmYWN0b3JzIHRvIGNvbnNpZGVyPyBLbm93aW5nIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIGFuZCB3aGF0IHRob3NlIGRlcGVuZGVuY2llcyBhcmUgaXMgY3JpdGljYWwgdG8gYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzY5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDA6NTIuMTE3NjcxMjkzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9oc3IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJRUMgNjI0MzktMyBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5XFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBIU1JcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXFx1MDAyNiBQUlApXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgSUVDIDYyNDM5IGRlZmluZWQgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3NcXG4gIDEwOlxcdFxcdCAgUmVkdW5kYW5jeSAoSFNSKSBhbmQgUGFyYWxsZWwgUmVkdW5kYW5jeSBQcm90b2NvbCAoUFJQKS5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFcXG4gIDEzOlxcdFxcdCAgREFOSCAoXFxcIkRvdWJseSBhdHRhY2hlZCBub2RlIGltcGxlbWVudGluZyBIU1JcXFwiKSBvciBEQU5QIChcXFwiRG91Ymx5XFxuICAxNDpcXHRcXHQgIGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIFBSUFxcXCIpLiBGb3IgdGhpcyB0byB3b3JrLCB5b3VyIExpbnV4IGJveFxcbiAgMTU6XFx0XFx0ICBuZWVkcyAoYXQgbGVhc3QpIHR3byBwaHlzaWNhbCBFdGhlcm5ldCBpbnRlcmZhY2VzLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIEZvciBEQU5ILCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgaW4gYSByaW5nIG5ldHdvcmsgdG9nZXRoZXJcXG4gIDE4OlxcdFxcdCAgd2l0aCBvdGhlciBIU1IgY2FwYWJsZSBub2Rlcy4gQWxsIEV0aGVybmV0IGZyYW1lcyBzZW50IG92ZXIgdGhlIEhTUlxcbiAgMTk6XFx0XFx0ICBkZXZpY2Ugd2lsbCBiZSBzZW50IGluIGJvdGggZGlyZWN0aW9ucyBvbiB0aGUgcmluZyAob3ZlciBib3RoIHNsYXZlXFxuICAyMDpcXHRcXHQgIHBvcnRzKSwgZ2l2aW5nIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBFYWNoIEhTUiBub2RlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjQwOjUyLjExNzczNDcyM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODA4MDU4Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhTUiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGdvb2QsIG5vIG5ldyBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgSFNSYCBtb2R1bGUgaXRzZWxmLCB0aGF0J3MgYWx3YXlzIGEgcGx1cy4gTm93LCBsb29raW5nIGF0IHRoZSBjaGFuZ2Vz4oCmIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGBuZXRpZl9kaXNhYmxlX2dyb2AgYW5kIGBkZXZfZGlzYWJsZV9ncm9gLiBUaGF0IGltbWVkaWF0ZWx5IGp1bXBzIG91dCBhcyBjb3JlIG5ldHdvcmsgZGV2aWNlIEFQSSBtb2RpZmljYXRpb25zLCB3aGljaCBhcmUgYWx3YXlzIGludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIHRoZSBpbnRlbnQgaXMgdG8gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldHdvcmsgZGV2aWNlLCBhbmQgaGVyZSwgdGhleSdyZSB1c2luZyBpdCB0byBzaHV0IGRvd24gR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBTbWFydC4gR1JPIGNhbiBzb21ldGltZXMgY2F1c2UgaXNzdWVzIHdpdGggY29tcGxleCBwcm90b2NvbHMsIHNvIGRpc2FibGluZyBpdCBpbiBzcGVjaWZpYyBjb250ZXh0cyBpcyBhIHJlYXNvbmFibGUgYXBwcm9hY2guXG5cblRoZSBjcnVjaWFsIGJpdCwgdGhvdWdoLCBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBoc3JfZm9yd2FyZF9za2JgLiBUaGV5J3JlIGFkYXB0aW5nIGl0IHRvIGhhbmRsZSBHU08gKEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQpIHBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtLiBUaGlzIHN1Z2dlc3RzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IEhTUiBpcyBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgbGFyZ2UgcGFja2V0cywgYW5kIGRpcmVjdGx5IGltcGFjdHMgdGhlIGNvcmUgcGFja2V0IGZvcndhcmRpbmcgbG9naWMuIFRoYXTigJlzIGEga2V5IGNoYW5nZSB0byBpbnZlc3RpZ2F0ZS4gVGhlbiB3ZSBoYXZlIGNoYW5nZXMgaW4gYGhzcl9kZXZfeG1pdGAgYW5kIGBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZWAgdG8gYWRqdXN0IGxvY2tpbmcsIHdoaWNoIGlzIGEgZGVmaW5pdGUgc2lnbmFsIG9mIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgdGhleSdyZSBhZGRyZXNzaW5nLiBMb2NraW5nIG1vZGlmaWNhdGlvbnMgYWx3YXlzIGRlc2VydmUgc2NydXRpbnkuXG5cbkZ1bmN0aW9uYWxseSwgd2UncmUgbG9va2luZyBhdCBjaGFuZ2VzIGluIHRoZSBIU1IgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBuZXR3b3JrIGRldmljZSBBUEkuIFNpbmNlIEhTUiBpcyBjb21tb25seSBkZXBsb3llZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHRoaW5rIHZldGggZGV2aWNlcyDigJMgdGhlc2UgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIHdpdGggdmlydHVhbCBpbnRlcmZhY2VzLiBUaGF0IG1ha2VzIHRoZW0gcGVyZmVjdCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gZHVyaW5nIHRlc3RpbmcgYXJlIGBoc3JfZm9yd2FyZF9za2JgLCBgZGV2X2Rpc2FibGVfZ3JvYCwgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIFdpdGggdGhlIGBIU1JgIGNvbmZpZyBlbmFibGVkLCBvZiBjb3Vyc2UuXG5cblRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIHRoZSBpc3N1ZSBvZiBHU08gc3VwZXItcGFja2V0cyB3aXRoaW4gdGhlIEhTUiBwcm90b2NvbCBieSBzZWdtZW50aW5nIHRoZW0uIEFkZGl0aW9uYWxseSBpdCdzIGVuc3VyaW5nIHRoYXQgR1JPLCBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGlzbid0IGNhdXNpbmcgcHJvYmxlbXMgYW5kIGlzIGRpc2FibGVkIG9uIHJlbGV2YW50IEhTUiBkZXZpY2VzLCB3aGljaCBpcyBhIHNvdW5kIGRlc2lnbiBjaG9pY2UuIFNpbmNlIHRoaXMgZGVhbHMgd2l0aCBwYWNrZXQgaGFuZGxpbmcsIGl0IHdpbGwgYmUgZXNzZW50aWFsIHRvIHRlc3QgaXQgdG8gZW5zdXJlIGl0IG9wZXJhdGVzIGNvcnJlY3RseSBpbiB2YXJpb3VzIHNjZW5hcmlvcyB0byBlbnN1cmUgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGFyZSBtYWludGFpbmVkLiBUaGlzIHBhdGNoIG5lZWRzIGEgZ29vZCBmdXp6aW5nIHNlc3Npb24sIGFuZCBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgY29uY3VycmVuY3kgYXNwZWN0cyBvZiB0aGUgbG9ja2luZyBhZGp1c3RtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwMjMsIk91dHB1dFRva2VucyI6MTc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDE6MDAuOTI1Nzk1NDQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyMDI5MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHByb3RvY29sIHRvIGhhbmRsZSBHU08gc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byB0aGUgY29yZSBuZXR3b3JrIGRldmljZSBBUEkgdG8gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIGRldmljZSwgYW5kIHVzZXMgdGhpcyB0byBkaXNhYmxlIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcGFja2V0IHByb2Nlc3NpbmcgYW5kIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHByb3RvY29sIHRvIGhhbmRsZSBHU08gc3VwZXItcGFja2V0cyBieSBzZWdtZW50aW5nIHRoZW0gaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byB0aGUgY29yZSBuZXR3b3JrIGRldmljZSBBUEkgdG8gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIGRldmljZSwgYW5kIHVzZXMgdGhpcyB0byBkaXNhYmxlIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcGFja2V0IHByb2Nlc3NpbmcgYW5kIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNzo0MTowMS4wMDYwMDg0NDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzE3NjQ2Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDE6MDEuMDA2NTg0OTcxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwMzE3MDYzODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIHRvIGhhbmRsZSBHU08gKEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQpIHN1cGVyLXBhY2tldHMgYnkgc2VnbWVudGluZyB0aGVtIGJlZm9yZSBmb3J3YXJkaW5nLCBhbmQgZGlzYWJsZXMgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgb24gZW5zbGF2ZWQgZGV2aWNlcy4gSXQgYWxzbyBhZGp1c3RzIGxvY2tpbmcgYXJvdW5kIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBuZXR3b3JrIHBhY2tldCBwcm9jZXNzaW5nIGxvZ2ljLCBza2Igc2VnbWVudGF0aW9uIChgX19za2JfZ3NvX3NlZ21lbnRgKSwgYW5kIHJlYWRpbmcgcGFja2V0IGhlYWRlcnMgdXNpbmcgdGhlIHN0YW5kYXJkIGBza2JfaGVhZGVyX3BvaW50ZXJgIGZ1bmN0aW9uLiBObyBuZXcga2VybmVsIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNGRhMTdlOTY2MWQ5YjNkM2E1NDQ1OGI0MDVlN2ZkZjZhZDE2MmUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNzo0MDowMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA5OTgxZDYzN2Y4YjU0Li5lYmEyYzI2YTQ5YmE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTM0MzQsNiArMzQzNCw4IEBAIHZvaWQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIHZvaWQgbmV0aWZfY2xvc2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHVubGluayk7XG4gdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbit2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7XG4gdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA1OTMzYzVkYWIwOWVlLi5mMjBkNWFiMGNmNzI5IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTg0MCw2ICsxODQwLDIxIEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdH1cbiB9XG4gXG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcl9kZXY7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuK1xuK1x0ZGV2LVx1MDAzZXdhbnRlZF9mZWF0dXJlcyBcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XG4rXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XG4rXG4rXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XG4rXHRcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xuK1x0XHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xuK1x0XHRuZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpO1xuK1x0fVxuK31cbitcbiAvKipcbiAgKlx0ZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuICAqXHRAZGV2OiBkZXZpY2VcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmNcbmluZGV4IDQzNzk0N2RkMDhlZDUuLjNjYTI1MTVhZDA0ODYgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXZfYXBpLmNcbisrKyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuQEAgLTI2OSw2ICsyNjksMjcgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xuIFxuKy8qKlxuKyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuKyAqIEBkZXY6IGRldmljZVxuKyAqXG4rICogQmVzdC1lZmZvcnQgZGlzYWJsZSBvZiBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldFxuKyAqIGRldmljZS4gIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZFxuKyAqIHBhY2tldHMgbWF5IGJlIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS5cbisgKlxuKyAqIFRoZSBkaXNhYmxlIGlzIGJlc3QtZWZmb3J0OiBhIGRldmljZSB3aXRoIGEgZml4ZWQtb24gZmVhdHVyZSAoZm9yXG4rICogZXhhbXBsZSBHUk9fSFcgb24gYSB2aXJ0aW8tbmV0IGRldmljZSBuZWdvdGlhdGVkIHdpdGhvdXRcbisgKiBWSVJUSU9fTkVUX0ZfQ1RSTF9HVUVTVF9PRkZMT0FEUykga2VlcHMgaXQgZW5hYmxlZC4gIENhbGxlcnMgdGhhdFxuKyAqIG5lZWQgYSBoYXJkIGd1YXJhbnRlZSBtdXN0IGluc3BlY3QgdGhlIHJlc3VsdGluZyBmZWF0dXJlIHN0YXRlLlxuKyAqL1xuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4rXHRuZXRpZl9kaXNhYmxlX2dybyhkZXYpO1xuK1x0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbit9XG4rRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pO1xuK1xuIC8qKlxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxuICAqIEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2RldmljZS5jIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbmluZGV4IDU1NTViNzFhYjE5YjUuLjI0OGNiYjE0MmUyMWUgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuKysrIGIvbmV0L2hzci9oc3JfZGV2aWNlLmNcbkBAIC0yMzIsOSArMjMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2ItXHUwMDNlZGV2ID0gbWFzdGVyLVx1MDAzZWRldjtcbiBcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbkBAIC0zMzUsNiArMzMzLDcgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHRoc3Jfc3RhZy1cdTAwM2VzZXF1ZW5jZV9uciA9IGh0b25zKGhzci1cdTAwM2VzZXF1ZW5jZV9ucik7XG4gXHRcdGhzci1cdTAwM2VzZXF1ZW5jZV9ucisrO1xuIFx0fVxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFxuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfdHlwZSA9IHR5cGU7XG4gXHQvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqL1xuQEAgLTM1NiwxNCArMzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIGhzci1cdTAwM2VtYWNhZGRyZXNzX3JlZGJveCk7XG4gXHR9XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4rXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRyZXR1cm47XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuQEAgLTM5MCw2ICszODUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRoc3Jfc3RhZy1cdTAwM2VzZXF1ZW5jZV9uciA9IGh0b25zKGhzci1cdTAwM2VzdXBfc2VxdWVuY2VfbnIpO1xuIFx0aHNyLVx1MDAzZXN1cF9zZXF1ZW5jZV9ucisrO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0aHNyX3N0YWctXHUwMDNldGx2LkhTUl9UTFZfdHlwZSA9IFBSUF9UTFZfTElGRV9DSEVDS19ERDtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTtcbiBcbkBAIC0zOTcsMTMgKzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbiBcdGhzcl9zcCA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCkpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cdTAwM2VtYWNhZGRyZXNzX0EsIG1hc3Rlci1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFxuLVx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuK1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gfVxuIFxuIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb25cbkBAIC02NTksNyArNjUyLDcgQEAgdm9pZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRkZXYtXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xuIFxuIFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfFxuLVx0XHRcdCAgIE5FVElGX0ZfR1NPX01BU0sgfCBORVRJRl9GX0hXX0NTVU0gfFxuK1x0XHRcdCAgIE5FVElGX0ZfSFdfQ1NVTSB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbmluZGV4IDA3NzQ5ODFhNjVjMTYuLmY0MjY5NGNmNDMwOTkgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2VcbiAjaW5jbHVkZSBcImhzcl9tYWluLmhcIlxuICNpbmNsdWRlIFwiaHNyX2ZyYW1lcmVnLmhcIlxuIFxuQEAgLTYyMSw5ICs2MjIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8XG4gXHQgICAgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbiBcdFx0LyogU2VxdWVuY2UgbnIgZm9yIHRoZSBtYXN0ZXIvaW50ZXJsaW5rIG5vZGUgKi9cbi1cdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGZyYW1lLVx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVx1MDAzZXNlcXVlbmNlX25yO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnIrKztcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fVxuIH1cbiBcbkBAIC03MzEsNyArNzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbiB9XG4gXG4gLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cbi12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4rc3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4ge1xuIFx0c3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lO1xuIFxuQEAgLTc0Niw4ICs3NDgsOCBAQCB2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4gXHQgKiBTbyBjaGVjayBhbmQgaW5jcmVtZW50IHN0YXRzIGZvciBtYXN0ZXIgcG9ydCBvbmx5IGhlcmUuXG4gXHQgKi9cbiBcdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xuLVx0XHRwb3J0LVx1MDAzZWRldi1cdTAwM2VzdGF0cy50eF9wYWNrZXRzKys7XG4tXHRcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2J5dGVzICs9IHNrYi1cdTAwM2VsZW47XG4rXHRcdERFVl9TVEFUU19JTkMocG9ydC1cdTAwM2VkZXYsIHR4X3BhY2tldHMpO1xuK1x0XHRERVZfU1RBVFNfQUREKHBvcnQtXHUwMDNlZGV2LCB0eF9ieXRlcywgc2tiLVx1MDAzZWxlbik7XG4gXHR9XG4gXG4gXHRrZnJlZV9za2IoZnJhbWUuc2tiX2hzcik7XG5AQCAtNzU3LDYgKzc1OSwxMDUgQEAgdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIFxuIG91dF9kcm9wOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRwb3J0LVx1MDAzZWRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRERVZfU1RBVFNfSU5DKHBvcnQtXHUwMDNlZGV2LCB0eF9kcm9wcGVkKTtcbitcdGtmcmVlX3NrYihza2IpO1xuK31cbitcbisvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xuKyAqIGVhY2ggd2lyZSBmcmFtZSBnZXRzIGl0cyBvd24gSFNSL1BSUCB0YWcgYW5kIHNlcXVlbmNlIG51bWJlci5cbisgKi9cbisvKiBFZmZlY3RpdmUgZnJhbWUgcHJvdG9jb2wgb2YgYSAocG9zc2libHkgVkxBTi10YWdnZWQpIHNrYiwgb3IgMCB3aGVuXG4rICogaXQgY2Fubm90IGJlIGRldGVybWluZWQgb3IgdGhlIHRhZ2dpbmcgZXhjZWVkcyB3aGF0IEhTUiBzdXBwb3J0cy5cbisgKiBIU1Igc3VwcG9ydHMgb25lIDgwMi4xUSBDLXRhZyBvbmx5LCBtYXRjaGluZyBmaWxsX2ZyYW1lX2luZm8oKTogYW5cbisgKiBhY2NlbGVyYXRlZCB0YWcgbXVzdCBiZSBhIEMtdGFnIHdpdGggYSBub24tVkxBTiBpbm5lciBwcm90b2NvbDsgYW5cbisgKiBpbi1iYW5kIHRhZyBpcyB1bndyYXBwZWQgZXhhY3RseSBvbmNlIGFuZCBhIHJlc2lkdWFsIFZMQU4gRXRoZXJUeXBlXG4rICogaXMgcmVqZWN0ZWQuIFJlYWQtb25seTsgbm8gc3RhdGUgaXMga2VwdCBiZXlvbmQgdGhlIGltbWVkaWF0ZVxuKyAqIHByb3RvY29sIHZhbHVlLlxuKyAqL1xuK3N0YXRpYyBfX2JlMTYgaHNyX2dzb19lZmZlY3RpdmVfcHJvdG8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3QgZXRoaGRyIGVoO1xuK1x0c3RydWN0IHZsYW5faGRyIHZoO1xuK1x0Y29uc3Qgc3RydWN0IGV0aGhkciAqZXRoO1xuK1x0Y29uc3Qgc3RydWN0IHZsYW5faGRyICp2aGRyO1xuK1x0X19iZTE2IHByb3RvO1xuK1xuK1x0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHtcbitcdFx0LyogSFNSIHN1cHBvcnRzIG9uZSA4MDIuMVEgQy10YWcgb25seS4gKi9cbitcdFx0aWYgKHNrYi1cdTAwM2V2bGFuX3Byb3RvICE9IGh0b25zKEVUSF9QXzgwMjFRKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0aWYgKGV0aF90eXBlX3ZsYW4oc2tiLVx1MDAzZXByb3RvY29sKSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIHNrYi1cdTAwM2Vwcm90b2NvbDtcbitcdH1cbitcbitcdGV0aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIDAsIHNpemVvZihlaCksIFx1MDAyNmVoKTtcbitcdGlmICghZXRoKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHByb3RvID0gZXRoLVx1MDAzZWhfcHJvdG87XG4rXHRpZiAoIWV0aF90eXBlX3ZsYW4ocHJvdG8pKVxuK1x0XHRyZXR1cm4gcHJvdG87XG4rXHRpZiAocHJvdG8gIT0gaHRvbnMoRVRIX1BfODAyMVEpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHZoZHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBFVEhfSExFTiwgc2l6ZW9mKHZoKSwgXHUwMDI2dmgpO1xuK1x0aWYgKCF2aGRyKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHByb3RvID0gdmhkci1cdTAwM2VoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvO1xuK1x0aWYgKGV0aF90eXBlX3ZsYW4ocHJvdG8pKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBwcm90bztcbit9XG4rXG4rdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuK3tcbitcdHN0cnVjdCBza19idWZmICpzZWdzLCAqbmV4dDtcbitcdF9fYmUxNiBwcm90bztcbitcbitcdGlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHtcbitcdFx0aHNyX2ZvcndhcmRfc2tiX29uZShza2IsIHBvcnQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKiBDb25mb3JtaW5nIHBsYWluLXByb3RvY29sIEdTTyBzdXBlci1wYWNrZXRzIGNhcnJ5IHRyYWlsZXItZnJlZVxuK1x0ICogc2VuZGVyIHBheWxvYWQgYW5kIGFyZSBzZWdtZW50ZWQgaGVyZTogZWFjaCBzZWdtZW50IGlzIGRlbGl2ZXJlZFxuK1x0ICogb3IgZm9yd2FyZGVkIGFzIGl0cyBvd24gd2lyZSBmcmFtZSwgb24gYW55IGluZ3Jlc3Mgcm9sZS5cbitcdCAqXG4rXHQgKiBUaGUgZ2F0ZSBpcyBjb250ZW50LWJhc2VkLCBub3QgcG9ydC1iYXNlZC4gQW4gYWdncmVnYXRlIHdob3NlXG4rXHQgKiBlZmZlY3RpdmUgcHJvdG9jb2wgaXMgRVRIX1BfSFNSIG9yIEVUSF9QX1BSUCBjYW5ub3QgYmUgc2FmZWx5XG4rXHQgKiBzZWdtZW50ZWQgYW5kIGlzIGRyb3BwZWQsIGFzIGlzIGFueSBza2Igd2hvc2UgaGVhZGVyIGNhbm5vdCBiZVxuK1x0ICogcmVhZCBvciB3aG9zZSB0YWdnaW5nIGV4Y2VlZHMgdGhlIHNpbmdsZSA4MDIuMVEgQy10YWcgSFNSXG4rXHQgKiBzdXBwb3J0cy4gV2l0aCBORVRJRl9GX0hXX0hTUl9UQUdfUk0gdGhlIGxvd2VyIGhhcyBhbHJlYWR5XG4rXHQgKiBzdHJpcHBlZCB0aGUgdGFnLCBzbyBzdWNoIGFnZ3JlZ2F0ZXMgYXJyaXZlIHBsYWluIGFuZCBhcmVcbitcdCAqIHNlZ21lbnRlZC5cbitcdCAqL1xuK1x0cHJvdG8gPSBoc3JfZ3NvX2VmZmVjdGl2ZV9wcm90byhza2IpO1xuK1x0aWYgKCFwcm90bylcbitcdFx0Z290byBkcm9wX2dzbzsgLyogY2xhc3NpZmljYXRpb24gZmFpbHVyZSwgZmFpbC1zYWZlICovXG4rXHRpZiAocHJvdG8gPT0gaHRvbnMoRVRIX1BfSFNSKSB8fCBwcm90byA9PSBodG9ucyhFVEhfUF9QUlApKVxuK1x0XHRnb3RvIGRyb3BfZ3NvO1xuK1xuK1x0LyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWVcbitcdCAqIG9ubHkgZm9yIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYWZmaWMgb24gdGhlIG1hc3RlcjsgaW5ncmVzcyBmcm9tXG4rXHQgKiB0aGUgaW50ZXJsaW5rIGZvbGxvd3MgUlggY2hlY2tzdW0gc2VtYW50aWNzLlxuK1x0ICovXG4rXHRzZWdzID0gX19za2JfZ3NvX3NlZ21lbnQoc2tiLCAwLCBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUik7XG4rXHRpZiAoSVNfRVJSKHNlZ3MpIHx8IHVubGlrZWx5KCFzZWdzKSlcbitcdFx0Z290byBkcm9wX2dzbztcbitcbitcdGNvbnN1bWVfc2tiKHNrYik7XG4rXHR3aGlsZSAoc2Vncykge1xuK1x0XHRuZXh0ID0gc2Vncy1cdTAwM2VuZXh0O1xuK1x0XHRzZWdzLVx1MDAzZW5leHQgPSBOVUxMO1xuK1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpO1xuK1x0XHRzZWdzID0gbmV4dDtcbitcdH1cbitcdHJldHVybjtcbitcbitkcm9wX2dzbzpcbitcdERFVl9TVEFUU19JTkMocG9ydC1cdTAwM2VkZXYsIHR4X2Ryb3BwZWQpO1xuIFx0a2ZyZWVfc2tiKHNrYik7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX3NsYXZlLmMgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5pbmRleCAwMWM3M2I0YjUwZGRkLi5hYTIxNTRiMTljMGI5IDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuY1xuKysrIGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xuQEAgLTczLDE2ICs3Myw3IEBAIHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0fVxuIFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbiBcbi1cdC8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhXG4tXHQgKiBzZXF1ZW5jZSBudW1iZXIgYW5kIHJlcXVpcmUgc3luY2hyb25pc2F0aW9uIHZzIG90aGVyIHNlbmRlci5cbi1cdCAqL1xuLVx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHR9IGVsc2Uge1xuLVx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdH1cbitcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuIFxuIGZpbmlzaF9jb25zdW1lOlxuIFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG5AQCAtMTcxLDYgKzE2MiwxMSBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRnb3RvIGZhaWxfcnhfaGFuZGxlcjtcbiBcdGRldl9kaXNhYmxlX2xybyhkZXYpO1xuIFxuK1x0LyogR1JPIGRpc2FibGluZyBpcyBiZXN0LWVmZm9ydDogZGV2aWNlcyB3aXRoIGZpeGVkLW9uXG4rXHQgKiBHUk8vR1JPX0hXIGNhbm5vdCBiZSBmb3JjZWQgb2ZmLlxuK1x0ICovXG4rXHRkZXZfZGlzYWJsZV9ncm8oZGV2KTtcbitcbiBcdHJldHVybiAwO1xuIFxuIGZhaWxfcnhfaGFuZGxlcjpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuaW5kZXggMzFmYjkzMjZjZjUzMy4uMGQxMDU0NzZlN2M1MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbkBAIC0zLDYgKzMsNyBAQFxuIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFxuIFRFU1RfUFJPR1MgOj0gXFxcbitcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmViY2JkOWZjNDFlYzRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxuQEAgLTAsMCArMSw2MzEgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBUZXN0IEhTUiBoYW5kbGluZyBvZiBHUk8vR1NPIHN1cGVyLXBhY2tldHM6XG4rI1xuKyMgIDEuIEVuc2xhdmluZyBhIGRldmljZSB0byBhbiBIU1IgbWFzdGVyIGRpc2FibGVzIEdSTyBvbiBpdFxuKyMgICAgIChkZXZfZGlzYWJsZV9ncm8oKSkuXG4rIyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXG4rIyAgMy4gQSBUQ1Agc3RyZWFtIGZyb20gYSBUU08tZW5hYmxlZCBTQU4gKHdoaWNoIHRoZXJlZm9yZSBlbWl0cyBHU09cbisjICAgICBzdXBlci1wYWNrZXRzKSBpcyB1bmZvbGRlZCBhdCB0aGUgSFNSIGZvcndhcmQgZW50cnkuIEV2aWRlbmNlOlxuKyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xuKyMgICAgIHRoZSBTQU4gYW5kIHBlci1mcmFtZS1zaXplZCB0cmFmZmljIGxlYXZpbmcgdGhlIERVVCdzIExBTiBwb3J0cy5cbisjXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XG4rI1xuKyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xuKyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXxcbisjICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8XG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuKyNcbisjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCdzIGZvcndhcmQgcGF0aFxuKyMgKGludGVybGluayBSWCAtXHUwMDNlIExBTiBBL0IgVFgpLCBzbyBldmVyeSBTQU4gZnJhbWUgaXMgdGFnZ2VkIGFuZFxuKyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXG4rXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxuK1xuK3Nhbl9pcD1cIjEwMC42NC4wLjFcIlxuK3BlZXJfaXA9XCIxMDAuNjQuMC4zXCJcbitcbisjIEFnZ3JlZ2F0ZSBjb3VudGVyIHRocmVzaG9sZHMgZm9yIHRoZSBzdHJlYW0gdGVzdCAoYnl0ZXMvcGFja2V0cyk6XG4rIyBTQU5fQVZHX01JTiBwcm92ZXMgR1NPIHN1cGVyLXBhY2tldHMgbGVmdCB0aGUgU0FOOyBMQU5fQVZHX01BWCBpcyBhXG4rIyBndWFyZCB3aXRoIG1hcmdpbiwgbm90IHRoZSBwcm90b2NvbCBtYXhpbXVtIChzZWUgZG9fdHNvX3N0cmVhbV90ZXN0KS5cbitTQU5fQVZHX01JTj0yMDQ4XG4rTEFOX0FWR19NQVg9MTUxNFxuK1xuK2lwZXJmX3BpZD1cIlwiXG4rc2VydmVyX3dyYXBwZXI9XCJcIlxuK2FjdGl2ZV9zcnZfbnM9XCJcIlxuK3dvcmtkaXI9XCJcIlxuK3BpZGZpbGU9XCJcIlxuK25zX2R1dD1cIlwiXG4rbnNfc2FuPVwiXCJcbituc19wZWVyPVwiXCJcbituc19scz1cIlwiXG4rcmNmaWxlPVwiXCJcbitcbisjIERlbGV0ZSB0aGUgcGVyLXNlcnZlciBwcml2YXRlIHdvcmsgZGlyZWN0b3J5IGFuZCByZXNldCBpdHNcbisjIHZhcmlhYmxlcy4gQ2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCByZWFwIGFuZCBmcm9tIHRoZSBFWElUXG4rIyB0cmFwLCB3aGljaCBvd25zIGFsbCBmYWlsdXJlIHBhdGhzLlxuK2NsZWFudXBfd29ya2RpcigpXG4re1xuK1x0IyByZW1vdmUgb25seSB0aGUga25vd24gbm9uLWVtcHR5IHByaXZhdGUgZGlyZWN0b3J5XG4rXHRpZiBbIC1uIFwiJHt3b3JrZGlyfVwiIF0gXHUwMDI2XHUwMDI2IFsgLWQgXCIke3dvcmtkaXJ9XCIgXTsgdGhlblxuK1x0XHRybSAtcmYgXCIke3dvcmtkaXJ9XCJcbitcdGZpXG4rXHR3b3JrZGlyPVwiXCJcbitcdHBpZGZpbGU9XCJcIlxuK1x0cmNmaWxlPVwiXCJcbit9XG4rXG4rY2xlYW51cCgpXG4re1xuK1x0IyBTZXJ2ZXIgY2xlYW51cCB0YXJnZXRzIG9ubHkgdGhlIG5hbWVzcGFjZSBvZiB0aGUgY3VycmVudGx5XG4rXHQjIGFjdGl2ZSBzZXJ2ZXIgKHJlY29yZGVkIGJ5IHN0YXJ0X2lwZXJmX3NlcnZlcik7IGFmdGVyIGFcbitcdCMgc3VjY2Vzc2Z1bCByZWFwIG5vdGhpbmcgaXMgYWN0aXZlLlxuK1x0aWYgWyAtbiBcIiR7YWN0aXZlX3Nydl9uc31cIiBdOyB0aGVuXG4rXHRcdCMgZXhhY3QtUElEIGtpbGwgb25seSBhZnRlciBSRS12YWxpZGF0aW5nIGlkZW50aXR5IChndWFyZHNcbitcdFx0IyBhZ2FpbnN0IFBJRCByZXVzZSBiZXR3ZWVuIHB1YmxpY2F0aW9uIGFuZCBjbGVhbnVwKVxuK1x0XHRpZiBbIC1uIFwiJHtpcGVyZl9waWR9XCIgXSBcdTAwMjZcdTAwMjYgdmFsaWRfc2VydmVyX3BpZCBcIiR7YWN0aXZlX3Nydl9uc31cIiBcIiR7aXBlcmZfcGlkfVwiOyB0aGVuXG4rXHRcdFx0a2lsbCBcIiR7aXBlcmZfcGlkfVwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0ZmlcbitcdFx0aXBlcmZfcGlkPVwiXCJcbitcdFx0aWYgWyAtbiBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgXTsgdGhlblxuK1x0XHRcdCMgdGhlIHdyYXBwZXIgd2FpdHMgb24gdGhlIHNlcnZlcjsgcmVhcCBpdCB3aXRoIGEgNXNcbitcdFx0XHQjIGJvdW5kIHNvIGEgbGl2ZS1idXQtdW5wdWJsaXNoZWQgc2VydmVyIGNhbiBuZXZlclxuK1x0XHRcdCMgaGFuZyBjbGVhbnVwXG4rXHRcdFx0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4rXHRcdFx0XHRraWxsIC0wIFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIiAyXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXG4rXHRcdFx0XHRzbGVlcCAwLjFcbitcdFx0XHRkb25lXG4rXHRcdFx0a2lsbCBcIiR7c2VydmVyX3dyYXBwZXJ9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRcdHdhaXQgXCIke3NlcnZlcl93cmFwcGVyfVwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0XHRzZXJ2ZXJfd3JhcHBlcj1cIlwiXG4rXHRcdGZpXG4rXHRcdCMgbGFzdCByZXNvcnQsIG5hbWVzcGFjZS1zY29wZWQgb25seTogVEVSTSB0aGUgaXBlcmYzXG4rXHRcdCMgcHJvY2Vzc2VzIHRoYXQgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgYWN0aXZlIHNlcnZlciBuZXRucyxcbitcdFx0IyBwb2xsIGZvciBib3VuZGVkIGV4aXQsIHRoZW4gU0lHS0lMTCBhbnkgc3Vydml2b3IgYmVmb3JlXG4rXHRcdCMgdG91Y2hpbmcgdGhlIG5hbWVzcGFjZSBuYW1lLiBBIGJsaW5kIHBraWxsIHdvdWxkIHNjYW5cbitcdFx0IyB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuXG4rXHRcdGxvY2FsIF9wIF9zdGlsbFxuK1x0XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwiJHthY3RpdmVfc3J2X25zfVwiIDJcdTAwM2UvZGV2L251bGwpOyBkb1xuK1x0XHRcdGlmIGlzX2lwZXJmM19waWQgXCIkX3BcIjsgdGhlblxuK1x0XHRcdFx0a2lsbCBcIiRfcFwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0XHRmaVxuK1x0XHRkb25lXG4rXHRcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRcdF9zdGlsbD0wXG4rXHRcdFx0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcIiR7YWN0aXZlX3Nydl9uc31cIiAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbitcdFx0XHRcdGlmIGlzX2lwZXJmM19waWQgXCIkX3BcIjsgdGhlblxuK1x0XHRcdFx0XHRfc3RpbGw9MVxuK1x0XHRcdFx0XHRicmVha1xuK1x0XHRcdFx0ZmlcbitcdFx0XHRkb25lXG4rXHRcdFx0WyBcIiRfc3RpbGxcIiAtZXEgMCBdIFx1MDAyNlx1MDAyNiBicmVha1xuK1x0XHRcdHNsZWVwIDAuMVxuK1x0XHRkb25lXG4rXHRcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCIke2FjdGl2ZV9zcnZfbnN9XCIgMlx1MDAzZS9kZXYvbnVsbCk7IGRvXG4rXHRcdFx0aWYgaXNfaXBlcmYzX3BpZCBcIiRfcFwiOyB0aGVuXG4rXHRcdFx0XHRraWxsIC05IFwiJF9wXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRcdGZpXG4rXHRcdGRvbmVcbitcdGZpXG4rXHRhY3RpdmVfc3J2X25zPVwiXCJcbitcdGNsZWFudXBfd29ya2RpclxuK1x0Y2xlYW51cF9hbGxfbnNcbit9XG4rXG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbitjaGVja190b29sKClcbit7XG4rXHRpZiAhIGNvbW1hbmQgLXYgXCIkMVwiIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjE7IHRoZW5cbitcdFx0ZWNobyBcIlNLSVA6IENvdWxkIG5vdCBydW4gdGVzdCB3aXRob3V0ICQxXCJcbitcdFx0ZXhpdCAka3NmdF9za2lwXG4rXHRmaVxuK31cbitcbituc3goKVxuK3tcbitcdGlwIG5ldG5zIGV4ZWMgXCIkMVwiIGJhc2ggLWMgXCIkMlwiXG4rfVxuK1xuK2lzX2lwZXJmM19waWQoKVxuK3tcbitcdFsgXCIkKGNhdCAvcHJvYy9cIiQxXCIvY29tbSAyXHUwMDNlL2Rldi9udWxsKVwiID0gXCJpcGVyZjNcIiBdXG4rfVxuK1xuKyMgQm91bmRlZCByZWFwIG9mIHRoZSBvbmUtc2hvdCBzZXJ2ZXI6IHdhaXQgYXQgbW9zdCA1cyBmb3IgaXQgdG9cbisjIGV4aXQsIHRoZW4gcmVhcCB0aGUgd3JhcHBlciBhbmQgUkVRVUlSRSB0aGUgcmNmaWxlIHdpdGggaXRzIHJlYWxcbisjIHN0YXR1cy4gQSBzdHVjayBzZXJ2ZXIgY2FuIG5ldmVyIGhhbmcgdGhlIHNjcmlwdC5cbityZWFwX2lwZXJmX3NlcnZlcigpXG4re1xuK1x0bG9jYWwgc2VydmVyX3JjXG4rXG4rXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cbitcdFx0a2lsbCAtMCBcIiR7aXBlcmZfcGlkfVwiIDJcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcbitcdFx0c2xlZXAgMC4xXG4rXHRkb25lXG4rXHRpZiBraWxsIC0wIFwiJHtpcGVyZl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IGV4aXQgd2l0aGluIDVzXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHR3YWl0IFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIlxuK1x0c2VydmVyX3dyYXBwZXI9XCJcIlxuK1x0aWYgWyAhIC1zIFwiJHtyY2ZpbGV9XCIgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBzdGF0dXMgZmlsZSBtaXNzaW5nICgke3JjZmlsZX0pXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRzZXJ2ZXJfcmM9JChjYXQgXCIke3JjZmlsZX1cIilcbitcdGlmICEgW1sgXCIkc2VydmVyX3JjXCIgPX4gXlswLTldKyQgXV0gfHwgWyBcIiRzZXJ2ZXJfcmNcIiAtbmUgMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBpcGVyZjMgc2VydmVyIGV4aXRlZCB3aXRoIHJjPScke3NlcnZlcl9yY30nXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXHRpcGVyZl9waWQ9XCJcIlxuK1x0Y2xlYW51cF93b3JrZGlyXG4rXHRhY3RpdmVfc3J2X25zPVwiXCJcbitcdHJldHVybiAwXG4rfVxuK1xuKyMgRGVjaW1hbC1jb3VudGVyIHZhbGlkYXRpb24gZm9yIHRoZSBzbmFwc2hvdCBibG9ja3M6IGV2ZXJ5IHZhbHVlIG11c3RcbisjIGJlIGEgcGxhaW4gZGVjaW1hbCBudW1iZXIuIEEgcGFyc2UgZmFpbHVyZSBpbiByZWFkX3R4X2NvdW50ZXJzIHlpZWxkc1xuKyMgZW1wdHkvZ2FyYmxlZCBmaWVsZHMsIHdoaWNoIHRoaXMgY2hlY2sgdHVybnMgaW50byBhbiBpbW1lZGlhdGUgRkFJTC5cbit2YWxpZF9kZWNpbWFscygpXG4re1xuK1x0bG9jYWwgdlxuK1xuK1x0Zm9yIHYgaW4gXCIkQFwiOyBkb1xuK1x0XHRbWyBcIiR2XCIgPX4gXlswLTldKyQgXV0gfHwgcmV0dXJuIDFcbitcdGRvbmVcbitcdHJldHVybiAwXG4rfVxuK1xuK3NldHVwX3RvcG8oKVxuK3tcbitcdHNldHVwX25zIG5zX2R1dCBuc19zYW4gbnNfcGVlciB8fCBleGl0ICQ/XG4rXG4rXHRpcCBsaW5rIGFkZCBkX2EgbmV0bnMgXCIkbnNfZHV0XCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2EgbmV0bnMgXCIkbnNfcGVlclwiXG4rXHRpcCBsaW5rIGFkZCBkX2IgbmV0bnMgXCIkbnNfZHV0XCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2IgbmV0bnMgXCIkbnNfcGVlclwiXG4rXHRpcCBsaW5rIGFkZCBkX2lsIG5ldG5zIFwiJG5zX2R1dFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgczAgbmV0bnMgXCIkbnNfc2FuXCJcbitcbitcdCMgSFNSIHRhZ3MgYWRkIDYgYnl0ZXMgcGVyIGZyYW1lOyBnaXZlIHRoZSBMQU4gbGVncyBoZWFkcm9vbS5cbitcdGZvciBpZmFjZSBpbiBkX2EgZF9iOyBkb1xuK1x0XHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFxcXG4rXHRcdFx0aXAgbGluayBzZXQgJGlmYWNlIHVwXCJcbitcdGRvbmVcbitcdGZvciBpZmFjZSBpbiBwX2EgcF9iOyBkb1xuK1x0XHRuc3ggXCIkbnNfcGVlclwiIFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcXFxuK1x0XHRcdGlwIGxpbmsgc2V0ICRpZmFjZSB1cFwiXG4rXHRkb25lXG4rXG4rXHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIHNldCBkX2lsIHVwXCJcbitcdG5zeCBcIiRuc19zYW5cIiBcImlwIGxpbmsgc2V0IHMwIHVwOyBpcCBhZGRyIGFkZCAkc2FuX2lwLzI0IGRldiBzMFwiXG4rXG4rXHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIGFkZCBoc3IwIHR5cGUgaHNyIFxcXG4rXHRcdHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcXFxuK1x0XHRpcCBsaW5rIHNldCBoc3IwIHVwXCJcbitcdG5zeCBcIiRuc19wZWVyXCIgXCJpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFxcXG4rXHRcdHNsYXZlMSBwX2Egc2xhdmUyIHBfYiBwcm90byAwOyBcXFxuK1x0XHRpcCBsaW5rIHNldCBoc3IxIHVwOyBpcCBhZGRyIGFkZCAkcGVlcl9pcC8yNCBkZXYgaHNyMVwiXG4rXG4rXHQjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXIncyBzdXBlcnZpc2lvbiBmcmFtZXMuXG4rXHRzbGVlcCAyXG4rfVxuK1xuK2NoZWNrX2ZlYXR1cmUoKVxuK3tcbitcdGxvY2FsIG5zPVwiJDFcIlxuK1x0bG9jYWwgaWZhY2U9XCIkMlwiXG4rXHRsb2NhbCBmZWF0dXJlPVwiJDNcIlxuK1x0bG9jYWwgd2FudD1cIiQ0XCJcbitcbitcdGlmIG5zeCBcIiRuc1wiIFwiZXRodG9vbCAtayAkaWZhY2VcIiB8IGdyZXAgLXEgXCJeJGZlYXR1cmU6ICR3YW50XCI7IHRoZW5cbitcdFx0ZWNobyBcIklORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgJHdhbnQgWyBPSyBdXCJcbitcdGVsc2VcbitcdFx0ZWNobyBcIkZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgbm90ICR3YW50XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdGZpXG4rfVxuK1xuKyMgT2ZmLW9yLWFic2VudCB2YXJpYW50OiBmYWlscyBvbmx5IHdoZW4gdGhlIGZlYXR1cmUgaXMgcHJlc2VudCBBTkQgb24sXG4rIyBzbyBkZXZpY2VzIHRoYXQgc2ltcGx5IGRvIG5vdCBsaXN0IHRoZSBmZWF0dXJlIGRvIG5vdCBmYWlsIGl0LlxuK2NoZWNrX2ZlYXR1cmVfbm90X29uKClcbit7XG4rXHRsb2NhbCBucz1cIiQxXCJcbitcdGxvY2FsIGlmYWNlPVwiJDJcIlxuK1x0bG9jYWwgZmVhdHVyZT1cIiQzXCJcbitcbitcdGlmIG5zeCBcIiRuc1wiIFwiZXRodG9vbCAtayAkaWZhY2VcIiB8IGdyZXAgLXEgXCJeJGZlYXR1cmU6IG9uXCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgb25cIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0ZWxzZVxuK1x0XHRlY2hvIFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdXCJcbitcdGZpXG4rfVxuK1xuK2RvX2dyb19mZWF0dXJlX2NoZWNrcygpXG4re1xuK1x0ZWNobyBcIklORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgR1JPLlwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuK1x0c3RvcF9pZl9lcnJvciBcIkdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cIlxuK1xuK1x0ZWNobyBcIklORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgSFctR1JPLlwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYSByeC1ncm8taHcgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYiByeC1ncm8taHcgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfaWwgcngtZ3JvLWh3IG9mZlxuK1x0c3RvcF9pZl9lcnJvciBcIkhXLUdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cIlxuK1xuK1x0ZWNobyBcIklORk86IENoZWNraW5nIHRoYXQgdGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgaHNyMCBnZW5lcmljLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBoc3IwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwiJG5zX2R1dFwiIGhzcjAgdHgtdWRwLXNlZ21lbnRhdGlvblxuK1x0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXCIkbnNfZHV0XCIgaHNyMCB0eC1nc28tbGlzdFxuK1x0c3RvcF9pZl9lcnJvciBcIkhTUiBtYXN0ZXIgc3RpbGwgYWR2ZXJ0aXNlcyBHU08tZmFtaWx5IGZlYXR1cmVzLlwiXG4rfVxuK1xuK2FsbG9jX3dvcmtkaXIoKVxuK3tcbitcdCMgQWxsb2NhdGVkIG9ubHkgaGVyZSwgbG9uZyBhZnRlciB0aGUgaW5pdGlhbCB0b3BvbG9neSBjbGVhbnVwLCBzb1xuK1x0IyBjbGVhbnVwKCkgYXQgc2V0dXBfdG9wbygpIHRpbWUgY2FuIG5ldmVyIHJlbW92ZSBpdC4gbWt0ZW1wIGZhaWx1cmVcbitcdCMgaXMgYSBoYXJkIHRlc3QgZmFpbHVyZS5cbitcdHdvcmtkaXI9JChta3RlbXAgLWQgL3RtcC9oc3JfZ3JvX3Rlc3QuWFhYWFhYKSB8fCB7XG4rXHRcdGVjaG8gXCJGQUlMOiBta3RlbXAgLWQgZmFpbGVkXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0ZXhpdCAxXG4rXHR9XG4rXHRjaG1vZCA3MDAgXCIke3dvcmtkaXJ9XCJcbitcdHBpZGZpbGU9XCIke3dvcmtkaXJ9L2lwZXJmLnBpZFwiXG4rXHRyY2ZpbGU9XCIke3dvcmtkaXJ9L2lwZXJmLnJjXCJcbit9XG4rXG4rIyBOdW1lcmljLCBhbGl2ZSwgY29tbSA9PSBpcGVyZjMsIGFuZCByZWFsbHkgb3duZWQgYnkgdGhlIGdpdmVuIG5ldG5zLlxuK3ZhbGlkX3NlcnZlcl9waWQoKVxuK3tcbitcdGxvY2FsIHBucz1cIiQxXCIgcD1cIiQyXCJcbitcbitcdFtbIFwiJHBcIiA9fiBeWzAtOV0rJCBdXSB8fCByZXR1cm4gMVxuK1x0a2lsbCAtMCBcIiRwXCIgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gMVxuK1x0WyBcIiQoY2F0IC9wcm9jL1wiJHBcIi9jb21tIDJcdTAwM2UvZGV2L251bGwpXCIgPSBcImlwZXJmM1wiIF0gfHwgcmV0dXJuIDFcbitcdGlwIG5ldG5zIHBpZHMgXCIkcG5zXCIgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXF4IFwiJHBcIlxuK31cbitcbitzdGFydF9pcGVyZl9zZXJ2ZXIoKVxuK3tcbitcdGxvY2FsIHNydl9ucz1cIiQxXCJcbitcdGxvY2FsIHNydl9pcD1cIiR7MjotfVwiXG4rXHRsb2NhbCBjYW5kaWRhdGVfcGlkXG4rXG4rXHQjIE9uZS1zaG90IHNlcnZlciwgbm8gLUQ6IHRoZSB3cmFwcGVyIHJlY29yZHMgaXRzIGV4YWN0IFBJRCBhbmQgaXRzXG4rXHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxuK1x0YWxsb2Nfd29ya2RpclxuK1x0IyByZWNvcmQgdGhlIHNlcnZlciBuYW1lc3BhY2UgZm9yIGNsZWFudXAoKSBiZWZvcmVcbitcdCMgYW55dGhpbmcgY2FuIGZhaWwgd2l0aCB0aGUgc2VydmVyIHJ1bm5pbmdcbitcdGFjdGl2ZV9zcnZfbnM9XCIkc3J2X25zXCJcbitcdCggbnN4IFwiJHNydl9uc1wiIFwiaXBlcmYzIC1zIC0xICR7c3J2X2lwOistQiAkc3J2X2lwfSBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNiBcXFxuK1x0XHRlY2hvIFxcJCEgXHUwMDNlICR7cGlkZmlsZX07IFxcXG4rXHRcdHdhaXQgXFwkITsgXFxcbitcdFx0ZWNobyBcXCQ/IFx1MDAzZSAke3JjZmlsZX1cIiApIFx1MDAyNlxuK1x0c2VydmVyX3dyYXBwZXI9JCFcbitcdCMgdGhlIHdyYXBwZXIgd3JpdGVzIHRoZSBwaWRmaWxlIGFzeW5jaHJvbm91c2x5OyB3YWl0IGZvciBpdCB0b1xuK1x0IyBhcHBlYXIgaW5zdGVhZCBvZiByYWNpbmcgdGhlIHJlYWRcbitcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRbIC1zIFwiJHtwaWRmaWxlfVwiIF0gXHUwMDI2XHUwMDI2IGJyZWFrXG4rXHRcdHNsZWVwIDAuMVxuK1x0ZG9uZVxuK1x0aWYgWyAhIC1zIFwiJHtwaWRmaWxlfVwiIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZGlkIG5vdCBwdWJsaXNoIGEgcGlkXCIgXFxcbitcdFx0XHRcIihubyBwaWRmaWxlKVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0Y2FuZGlkYXRlX3BpZD0kKFx1MDAzY1wiJHtwaWRmaWxlfVwiKVxuK1x0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFwiJHNydl9uc1wiIFwiJHtjYW5kaWRhdGVfcGlkfVwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBpcGVyZjMgc2VydmVyIHBpZCAnJHtjYW5kaWRhdGVfcGlkfSdcIiBcXFxuK1x0XHRcdFwiZmFpbGVkIHZhbGlkYXRpb25cIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdCMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvblxuK1x0aXBlcmZfcGlkPVwiJHtjYW5kaWRhdGVfcGlkfVwiXG4rXHRzbGVlcCAxXG4rXHRyZXR1cm4gMFxuK31cbitcbisjIFByaW50IFwiXHUwMDNjYnl0ZXNcdTAwM2UgXHUwMDNjcGFja2V0c1x1MDAzZVwiIGZvciBleGFjdGx5IG9uZSBUWCByZWNvcmQgb2YgbnMvZGV2OyBhbnl0aGluZ1xuKyMgZWxzZSAobWlzc2luZywgZHVwbGljYXRlZCwgbm9uLW51bWVyaWMpIGlzIGEgaGFyZCBGQUlMLlxuK3JlYWRfdHhfY291bnRlcnMoKVxuK3tcbitcdGxvY2FsIG5zPVwiJDFcIiBkZXY9XCIkMlwiXG4rXHRsb2NhbCBvdXQgY250XG4rXG4rXHRvdXQ9JChuc3ggXCIkbnNcIiBcImlwIC1zIGxpbmsgc2hvdyAkZGV2XCIgfCBcXFxuK1x0XHRhd2sgJy9eICtUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0nKVxuK1x0Y250PSQoZWNobyBcIiRvdXRcIiB8IGdyZXAgLWMgJ15bMC05XSogWzAtOV0qJCcpXG4rXHRpZiBbIFwiJGNudFwiIC1uZSAxIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGNhbm5vdCBwYXJzZSBUWCBjb3VudGVycyBvZiAkbnMvJGRldlwiIFxcXG4rXHRcdFx0XCIocmVjb3Jkcz0kY250KVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0ZWNobyBcIiRvdXRcIlxuK1x0cmV0dXJuIDBcbit9XG4rXG4rIyBQcmludCBcIlx1MDAzY2J5dGVzXHUwMDNlIFx1MDAzY3BhY2tldHNcdTAwM2VcIiBmb3IgZXhhY3RseSBvbmUgUlggcmVjb3JkIG9mIG5zL2RldjsgdGhlXG4rIyBzYW1lIHNpbmdsZS1yZWNvcmQgZGlzY2lwbGluZSBhcyByZWFkX3R4X2NvdW50ZXJzLlxuK3JlYWRfcnhfY291bnRlcnMoKVxuK3tcbitcdGxvY2FsIG5zPVwiJDFcIiBkZXY9XCIkMlwiXG4rXHRsb2NhbCBvdXQgY250XG4rXG4rXHRvdXQ9JChuc3ggXCIkbnNcIiBcImlwIC1zIGxpbmsgc2hvdyAkZGV2XCIgfCBcXFxuK1x0XHRhd2sgJy9eICtSWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0nKVxuK1x0Y250PSQoZWNobyBcIiRvdXRcIiB8IGdyZXAgLWMgJ15bMC05XSogWzAtOV0qJCcpXG4rXHRpZiBbIFwiJGNudFwiIC1uZSAxIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGNhbm5vdCBwYXJzZSBSWCBjb3VudGVycyBvZiAkbnMvJGRldlwiIFxcXG4rXHRcdFx0XCIocmVjb3Jkcz0kY250KVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0ZWNobyBcIiRvdXRcIlxuK1x0cmV0dXJuIDBcbit9XG4rXG4rZXZhbF9jb3VudGVyX2RlbHRhKClcbit7XG4rXHRsb2NhbCBuYW1lPVwiJDFcIiBiMD1cIiQyXCIgcDA9XCIkM1wiIGIxPVwiJDRcIiBwMT1cIiQ1XCIgb3A9XCIkNlwiIGxpbWl0PVwiJDdcIlxuK1x0bG9jYWwgYmQgcGRcbitcbitcdGlmICEgW1sgXCIkYjBcIiA9fiBeWzAtOV0rJCBcdTAwMjZcdTAwMjYgXCIkYjFcIiA9fiBeWzAtOV0rJCBcdTAwMjZcdTAwMjYgXFxcbitcdFx0XCIkcDBcIiA9fiBeWzAtOV0rJCBcdTAwMjZcdTAwMjYgXCIkcDFcIiA9fiBeWzAtOV0rJCBdXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWVcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdGJkPSQoKGIxIC0gYjApKVxuK1x0cGQ9JCgocDEgLSBwMCkpXG4rXHRpZiBbIFwiJGJkXCIgLWx0IDAgXSB8fCBbIFwiJHBkXCIgLWxlIDAgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogY291bnRlciBkZWx0YSBpbnZhbGlkIGZvciAkbmFtZVwiIFxcXG4rXHRcdFx0XCIoYnl0ZXM9JGJkIHBrdHM9JHBkKVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0aWYgWyBcIiRvcFwiID0gXCJndFwiIF07IHRoZW5cbitcdFx0aWYgWyBcIiRiZFwiIC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXHUwMDNjPSAkbGltaXRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRcdHJldD0xXG4rXHRcdFx0cmV0dXJuIDFcbitcdFx0ZmlcbitcdGVsc2VcbitcdFx0aWYgWyBcIiRiZFwiIC1ndCAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXHUwMDNlICRsaW1pdFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdFx0cmV0PTFcbitcdFx0XHRyZXR1cm4gMVxuK1x0XHRmaVxuK1x0ZmlcbitcdGVjaG8gXCJJTkZPOiAkbmFtZSBjb3VudGVyIGRlbHRhIGJ5dGVzPSRiZCBwYWNrZXRzPSRwZFwiIFxcXG4rXHRcdFwiKG9wICRvcCBsaW1pdCAkbGltaXQpIFsgT0sgXVwiXG4rXHRyZXR1cm4gMFxuK31cbitcbisjIExBTi1zbGF2ZSBwbGFpbi1HU08gcmVncmVzc2lvbjogYSBwbGFpbiBTQU4gYWdncmVnYXRlIGVudGVyaW5nIGEgUFJQXG4rIyBMQU4gc2xhdmUgbXVzdCBiZSBzZWdtZW50ZWQgYXQgdGhlIGZvcndhcmQgZW50cnksIG5vdCBkcm9wcGVkLiBQUlBcbisjIGRyb3BzIHNsYXZlLXRvLXNsYXZlIGZvcndhcmRpbmcgYnkgZGVzaWduIChwcnBfZHJvcF9mcmFtZSksIHNvIHRoZVxuKyMgY29uc3VtZXIgb2YgTEFOLXNsYXZlIFNBTiB0cmFmZmljIGlzIGxvY2FsIGRlbGl2ZXJ5IHRvIHRoZSBtYXN0ZXIuXG4rIyBUd28gaW5kZXBlbmRlbnQgb3JhY2xlczogdGhlIFNBTi1zaWRlIHByb29mIHRoYXQgYWdncmVnYXRlcyByZWFsbHlcbisjIGFycml2ZWQgYXQgdGhlIERVVCwgYW5kIHRoZSB2b2x1bWUgKyBwZXItZnJhbWUgc2hhcGUgb2YgdGhlIGxvY2FsXG4rIyBkZWxpdmVyeS4gT24gdGhlIGJyb2tlbiBnYXRlIHRoZSBhZ2dyZWdhdGVzIGFyZSBkcm9wcGVkIGFuZCBUQ1BcbisjIGNyYXdscyBvbiByZXRyYW5zbWl0dGVkIHNpbmdsZSBzZWdtZW50cywgc2VwYXJhdGluZyB0aGUga2VybmVscyBieVxuKyMgYW4gb3JkZXIgb2YgbWFnbml0dWRlIGluIGRlbGl2ZXJlZCBieXRlcy5cbitkb19sYW5zYW5fZ3NvX3Rlc3QoKVxuK3tcbitcdGxvY2FsIHBycF9pcD1cIjEwLjk5LjEuMVwiIGxzX2lwPVwiMTAuOTkuMS4xMFwiXG4rXHRsb2NhbCBvdXQgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXG4rXHRsb2NhbCBhX2IwIGFfcDAgYV9iMSBhX3AxIHJfYjAgcl9wMCByX2IxIHJfcDFcbitcbitcdHNldHVwX25zIG5zX2xzIHx8IGV4aXQgJD9cbitcbitcdGlwIGxpbmsgYWRkIGRfcGEgbmV0bnMgXCIkbnNfZHV0XCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBsc19hIG5ldG5zIFwiJG5zX2xzXCJcbitcdGlwIGxpbmsgYWRkIGRfcGIgbmV0bnMgXCIkbnNfZHV0XCIgdHlwZSB2ZXRoIHBlZXIgbmFtZSBsc19wIG5ldG5zIFwiJG5zX2xzXCJcbitcbitcdG5zeCBcIiRuc19kdXRcIiBcImlwIGxpbmsgc2V0IGRfcGEgbXR1IDE2MDAgdXBcIlxuK1x0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBzZXQgZF9wYiBtdHUgMTYwMCB1cFwiXG4rXHRuc3ggXCIkbnNfbHNcIiBcImlwIGxpbmsgc2V0IGxzX2EgbXR1IDE2MDAgdXA7IFxcXG4rXHRcdGlwIGxpbmsgc2V0IGxzX3AgbXR1IDE2MDAgdXA7IGlwIGFkZHIgYWRkICRsc19pcC8yNCBkZXYgbHNfYVwiXG4rXG4rXHQjIFBSUCBEVVQgd2l0aCB0aGUgU0FOIG9uIGEgTEFOIHNsYXZlOiBwbGFpbiBTQU4gYWdncmVnYXRlcyBhcmVcbitcdCMgdmFsaWQgdHJhZmZpYyBvbiBhIFBSUCBMQU4gYW5kIG11c3Qgbm90IGJlIGRyb3BwZWQuXG4rXHRuc3ggXCIkbnNfZHV0XCIgXCJpcCBsaW5rIGFkZCBwcnAwIHR5cGUgaHNyIFxcXG4rXHRcdHNsYXZlMSBkX3BhIHNsYXZlMiBkX3BiIHByb3RvIDE7IFxcXG4rXHRcdGlwIGxpbmsgc2V0IHBycDAgdXA7IGlwIGFkZHIgYWRkICRwcnBfaXAvMjQgZGV2IHBycDBcIlxuK1xuK1x0IyBMZXQgc3VwZXJ2aXNpb24gZnJhbWVzIGNvbnZlcmdlLlxuK1x0c2xlZXAgMlxuK1xuK1x0ZWNobyBcIklORk86IEVuYWJsaW5nIFRTTy9HU08gb24gdGhlIExBTi1zaWRlIFNBTiBpbnRlcmZhY2UuXCJcbitcdG5zeCBcIiRuc19sc1wiIFwiZXRodG9vbCAtSyBsc19hIHRzbyBvbiBnc28gb25cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19sc1wiIGxzX2EgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXG4rXHRzdG9wX2lmX2Vycm9yIFwiQ291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIExBTi1zaWRlIFNBTiBpbnRlcmZhY2UuXCJcbitcbitcdHN0YXJ0X2lwZXJmX3NlcnZlciBcIiRuc19kdXRcIiBcIiRwcnBfaXBcIiB8fCByZXR1cm5cbitcbitcdHJlYWQgLXIgcl9iMCByX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF9yeF9jb3VudGVycyBcIiRuc19kdXRcIiBwcnAwKVxuK0VPRlxuK1x0cmVhZCAtciBzYW5fYjAgc2FuX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19sc1wiIGxzX2EpXG4rRU9GXG4rXHRpZiAhIHZhbGlkX2RlY2ltYWxzIFwiJHJfYjBcIiBcIiRyX3AwXCIgXCIkc2FuX2IwXCIgXCIkc2FuX3AwXCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGJhc2VsaW5lIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1xuK1x0aWYgISBvdXQ9JChuc3ggXCIkbnNfbHNcIiBcInRpbWVvdXQgNjAgaXBlcmYzIC1jICRwcnBfaXAgLU0gMTQ0NiBcXFxuK1x0XHQtYiAyRyAtdCAxMFwiIDJcdTAwM2VcdTAwMjYxKTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogTEFOLXNsYXZlIEdTTyBsb2NhbC1kZWxpdmVyeSBzdHJlYW0gZmFpbGVkOlwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGVjaG8gXCIkb3V0XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1xuK1x0cmVhZCAtciByX2IxIHJfcDEgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3J4X2NvdW50ZXJzIFwiJG5zX2R1dFwiIHBycDApXG4rRU9GXG4rXHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX2xzXCIgbHNfYSlcbitFT0ZcbitcdGlmICEgdmFsaWRfZGVjaW1hbHMgXCIkcl9iMVwiIFwiJHJfcDFcIiBcIiRzYW5fYjFcIiBcIiRzYW5fcDFcIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogZmluYWwgY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXG4rXHQjIE9yYWNsZSAxIC0gYWdncmVnYXRlcyByZWFsbHkgYXJyaXZlZDogdGhlIFNBTiBlbWl0dGVkXG4rXHQjIHN1cGVyLXBhY2tldHMgdG93YXJkIHRoZSBEVVQuXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJTQU4gbHNfYSBUWFwiIFwiJHNhbl9iMFwiIFwiJHNhbl9wMFwiIFxcXG4rXHRcdFwiJHNhbl9iMVwiIFwiJHNhbl9wMVwiIGd0IFwiJFNBTl9BVkdfTUlOXCJcbitcdFsgXCIke3JldDotMH1cIiAtZXEgMCBdIHx8IHJldHVyblxuK1xuK1x0IyBPcmFjbGUgMiAtIGxvY2FsIGRlbGl2ZXJ5IG9mIHRob3NlIGFnZ3JlZ2F0ZXM6IHZvbHVtZSBhbmRcbitcdCMgcGVyLWZyYW1lIHNoYXBlIG9uIHRoZSBQUlAgbWFzdGVyLiBUaGUgdm9sdW1lIGdhdGUgc2VwYXJhdGVzXG4rXHQjIGZ1bGwgZGVsaXZlcnkgZnJvbSB0aGUgcmV0cmFuc21pdCBjcmF3bCB0aGUgYnJva2VuIGdhdGUgbGVhdmVzO1xuK1x0IyB0aGUgYXZlcmFnZSBnYXRlIHByb3ZlcyB0aGUgYnl0ZXMgYXJyaXZlZCBwZXItZnJhbWUuXG4rXHRpZiBbICQoKHJfYjEgLSByX2IwKSkgLWx0IDEwMDAwMDAwMCBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBMQU4tc2xhdmUgbG9jYWwgZGVsaXZlcnkgZGVncmFkZWRcIiBcXFxuK1x0XHRcdFwiKHBycDAgUlggZGVsdGEgJCgocl9iMSAtIHJfYjApKSBieXRlcyBcdTAwM2MgMTAwMDAwMDAwKVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdGlmIFsgJCgocl9iMSAtIHJfYjApKSAtZ3QgJCgoIChyX3AxIC0gcl9wMCkgKiBMQU5fQVZHX01BWCApKSBdOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBsb2NhbCBkZWxpdmVyeSBub3QgcGVyLWZyYW1lXCIgXFxcbitcdFx0XHRcIihhdmcgJCgoIChyX2IxIC0gcl9iMCkgLyAocl9wMSAtIHJfcDApICkpIFx1MDAzZSAkTEFOX0FWR19NQVgpXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1x0ZWNobyBcIklORk86IExBTi1zbGF2ZSBsb2NhbCBkZWxpdmVyeSBwcnAwIFJYIGRlbHRhXCIgXFxcbitcdFx0XCIkKChyX2IxIC0gcl9iMCkpIGJ5dGVzIC8gJCgocl9wMSAtIHJfcDApKSBwa3RzIFsgT0sgXVwiXG4rXHRyZWFwX2lwZXJmX3NlcnZlciB8fCByZXR1cm5cbitcdGVjaG8gXCJJTkZPOiBMQU4tc2xhdmUgcGxhaW4tR1NPIHJlZ3Jlc3Npb24gWyBPSyBdXCJcbit9XG4rXG4rZG9fdHNvX3N0cmVhbV90ZXN0KClcbit7XG4rXHRsb2NhbCBvdXQgc2VuZGVyX3JldHJcbitcdGxvY2FsIHNhbl9iMCBzYW5fcDAgc2FuX2IxIHNhbl9wMVxuK1x0bG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSBiX2IwIGJfcDAgYl9iMSBiX3AxXG4rXG4rXHRlY2hvIFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cIlxuK1x0bnN4IFwiJG5zX3NhblwiIFwiZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfc2FuXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXG4rXHRzdG9wX2lmX2Vycm9yIFwiQ291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cIlxuK1x0c3RhcnRfaXBlcmZfc2VydmVyIFwiJG5zX3BlZXJcIiB8fCByZXR1cm5cbitcbitcdCMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZVxuK1x0IyBtdXN0IGV4Y2VlZCBTQU5fQVZHX01JTiAoYWdncmVnYXRlIHByb29mIHRoYXQgR1NPIHN1cGVyLXBhY2tldHNcbitcdCMgcmVhbGx5IGxlZnQgdGhlIFNBTik7IGVhY2ggRFVUIExBTiBsZWcgbXVzdCBzdGF5IHVuZGVyIExBTl9BVkdfTUFYXG4rXHQjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlXG4rXHQjIGFyZSBhZ2dyZWdhdGUgZGlzY3JpbWluYXRvcnMsIG5vdCBhIHBlci1mcmFtZSBtYXhpbXVtIHByb29mLlxuK1x0c2FuX2IwPTA7IHNhbl9wMD0wOyBhX2IwPTA7IGFfcDA9MDsgYl9iMD0wOyBiX3AwPTBcbitcdHJlYWQgLXIgc2FuX2IwIHNhbl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfc2FuXCIgczApXG4rRU9GXG4rXHRyZWFkIC1yIGFfYjAgYV9wMCBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfZHV0XCIgZF9hKVxuK0VPRlxuK1x0cmVhZCAtciBiX2IwIGJfcDAgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX2R1dFwiIGRfYilcbitFT0ZcbitcdGlmICEgdmFsaWRfZGVjaW1hbHMgXCIkc2FuX2IwXCIgXCIkc2FuX3AwXCIgXCIkYV9iMFwiIFwiJGFfcDBcIiBcXFxuK1x0XHRcIiRiX2IwXCIgXCIkYl9wMFwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBiYXNlbGluZSBUWCBjb3VudGVyIHNuYXBzaG90IGludmFsaWRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcbitcdCMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eVxuK1x0IyBhYm92ZSwgbm90IG1heCB0aHJvdWdocHV0OyByZXRyYW5zbWl0cyBhcmUgaW5mb3JtYXRpb25hbCBvbmx5LlxuK1x0IyBVbmNhcHBlZCBydW5zIGZsYXAgYXQgVk0vQ0kgZWRnZSByYXRlcyB3aXRob3V0IGluZGljYXRpbmcgYVxuK1x0IyBmdW5jdGlvbmFsIHByb2JsZW0uXG4rXHRpZiAhIG91dD0kKG5zeCBcIiRuc19zYW5cIiBcInRpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgXFxcbitcdFx0LWIgMkcgLXQgMTBcIiAyXHUwMDNlXHUwMDI2MSk7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBjbGllbnQgZmFpbGVkOlwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGVjaG8gXCIkb3V0XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1xuK1x0cmVhZCAtciBzYW5fYjEgc2FuX3AxIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19zYW5cIiBzMClcbitFT0ZcbitcdHJlYWQgLXIgYV9iMSBhX3AxIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2EpXG4rRU9GXG4rXHRyZWFkIC1yIGJfYjEgYl9wMSBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfZHV0XCIgZF9iKVxuK0VPRlxuK1x0aWYgISB2YWxpZF9kZWNpbWFscyBcIiRzYW5fYjFcIiBcIiRzYW5fcDFcIiBcIiRhX2IxXCIgXCIkYV9wMVwiIFxcXG4rXHRcdFwiJGJfYjFcIiBcIiRiX3AxXCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGZpbmFsIFRYIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1xuK1x0ZXZhbF9jb3VudGVyX2RlbHRhIFwiU0FOIHMwIFRYXCIgXCIkc2FuX2IwXCIgXCIkc2FuX3AwXCIgXCIkc2FuX2IxXCIgXCIkc2FuX3AxXCIgXFxcbitcdFx0Z3QgXCIkU0FOX0FWR19NSU5cIlxuK1x0ZXZhbF9jb3VudGVyX2RlbHRhIFwiRFVUIGRfYSBUWFwiIFwiJGFfYjBcIiBcIiRhX3AwXCIgXCIkYV9iMVwiIFwiJGFfcDFcIiBcXFxuK1x0XHRsZSBcIiRMQU5fQVZHX01BWFwiXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJEVVQgZF9iIFRYXCIgXCIkYl9iMFwiIFwiJGJfcDBcIiBcIiRiX2IxXCIgXCIkYl9wMVwiIFxcXG4rXHRcdGxlIFwiJExBTl9BVkdfTUFYXCJcbitcdFsgXCIke3JldDotMH1cIiAtZXEgMCBdIHx8IHJldHVyblxuK1xuK1x0IyBzdWNjZXNzIHBhdGg6IGJvdW5kZWQgcmVhcCB3aXRoIHRoZSBzZXJ2ZXIncyByZWFsIHN0YXR1c1xuK1x0cmVhcF9pcGVyZl9zZXJ2ZXIgfHwgcmV0dXJuXG4rXG4rXHQjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUXG4rXHQjIGFueSBwYXJzZSBhbm9tYWx5IGlzIGEgbG91ZCBGQUlMLCBidXQgdGhlIHZhbHVlIGl0c2VsZiBubyBsb25nZXJcbitcdCMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLlxuK1x0c2VuZGVyX3JldHI9JChlY2hvIFwiJG91dFwiIHwgYXdrICcvc2VjIC4qIHNlbmRlciQvIHtwcmludCAkKE5GLTEpfScpXG4rXHRpZiBbIFwiJChlY2hvIFwiJHNlbmRlcl9yZXRyXCIgfCBncmVwIC1FYyAnXlswLTldKyQnKVwiIC1uZSAxIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGNhbm5vdCBwYXJzZSBzZW5kZXIgcmV0cmFuc21pdHMgcmVsaWFibHlcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRlY2hvIFwiJG91dFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdGVjaG8gXCJJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7XCIgXFxcbitcdFx0XCJzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKVwiXG4rXHRlY2hvIFwiJG91dFwiIHwgZ3JlcCAtRSBcInNlbmRlcnxyZWNlaXZlclwiXG4rfVxuK1xuK2NoZWNrX3ByZXJlcXVpc2l0ZXNcbitjaGVja190b29sIGV0aHRvb2xcbitjaGVja190b29sIGlwZXJmM1xuK2NoZWNrX3Rvb2wgdGltZW91dFxuK1xuKyMgaXByb3V0ZTIgbXVzdCBrbm93IHRoZSBIU1IgaW50ZXJsaW5rIHN5bnRheC5cbitpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xaSBpbnRlcmxpbms7IHRoZW5cbitcdGVjaG8gXCJTS0lQOiBpcHJvdXRlMiBoYXMgbm8gSFNSIGludGVybGluayBzdXBwb3J0XCJcbitcdGV4aXQgJGtzZnRfc2tpcFxuK2ZpXG4rXG4rc2V0dXBfdG9wb1xuK1xuK2VjaG8gXCJJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC1cdTAwM2UgcGVlciB0aHJvdWdoIHRoZSBEVVQpLlwiXG4rZG9fcGluZyBcIiRuc19zYW5cIiBcIiRwZWVyX2lwXCJcbitzdG9wX2lmX2Vycm9yIFwiSW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC5cIlxuK1xuK2RvX2dyb19mZWF0dXJlX2NoZWNrc1xuK2RvX3Rzb19zdHJlYW1fdGVzdFxuK3N0b3BfaWZfZXJyb3IgXCJHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC5cIlxuK1xuK2RvX2xhbnNhbl9nc29fdGVzdFxuK3N0b3BfaWZfZXJyb3IgXCJMQU4tc2xhdmUgcGxhaW4tR1NPIHJlZ3Jlc3Npb24gZmFpbGVkLlwiXG4rXG4rZWNobyBcIklORk86IEFsbCBnb29kLlwiXG4rY2xlYW51cFxuK2V4aXQgJHJldFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTc6NDE6MDEuMDA2NTg1OTkxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMzE3MDI5NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb246IEdSTy9HU08gUGF0Y2ggZm9yIEhTUioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgbWVzc2luZyB3aXRoIEdSTyBhbmQgR1NPIHdpdGhpbiB0aGUgSFNSIGZyYW1ld29yay4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB3ZSBuZWVkIHRvIHJ1biBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBvbiB0aGlzIHRoaW5nLiBXZSdyZSBsb29raW5nIGF0IGNoYW5nZXMgdGhhdDpcblxuMS4gIERpc2FibGUgR1JPIG9uIGRldmljZXMgZW5zbGF2ZWQgdG8gYW4gSFNSIG1hc3Rlci4gYG5ldGlmX2Rpc2FibGVfZ3JvYCBhbmQgYGRldl9kaXNhYmxlX2dyb2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGFkZGVkIGhlcmUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cbjIuICBNb2RpZnkgaG93IEhTUiBoYW5kbGVzIEdTTyBzdXBlci1wYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSBiZWZvcmUgZm9yd2FyZGluZy4gVGhpcyBpcyB0aGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0LiBJdCdzIGRvbmUgdGhyb3VnaCB0aGUgbmV3IGBoc3JfZm9yd2FyZF9za2JgIGZ1bmN0aW9uIGFuZCB0aGUgdXNhZ2Ugb2YgYF9fc2tiX2dzb19zZWdtZW50YC4gVGhleSdyZSBhbHNvIGFkanVzdGluZyB0aGUgbG9ja2luZyBhcm91bmQgdGhlIHNlcXVlbmNlIG51bWJlciBpbmNyZW1lbnRzIHdpdGhpbiB0aGUgSFNSIGNvZGUuXG5cbk5vdywgbGV0J3MgbG9vayBjbG9zZXIgYXQgdGhlIGNvZGUuIEkgc2VlIHRoZXkncmUgZG9pbmcgYHNrYl9oZWFkZXJfcG9pbnRlcmAgY2FsbHMsIGFuZCB0aGVyZSBhcmUgc29tZSBidWZmZXJzLCBsaWtlIGBlaGAgYW5kIGB2aGAgdG8gaG9sZCB0aGUgRXRoZXJuZXQgYW5kIFZMQU4gaGVhZGVycy4gTm8gYmlnIGRlYWwsIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZS4gVGhlIHBhdGNoIGNhbGxzIGBfX3NrYl9nc29fc2VnbWVudGAuXG5cblRoZSBvYnZpb3VzIHF1ZXN0aW9uOiBEb2VzIHRoaXMgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/XG5cblJpZ2h0IG9mZiB0aGUgYmF0LCBJIHdhbnQgdG8gcnVsZSBvdXQgYW55IGltbWVkaWF0ZSBLTVNBTiBmbGFncy4gVGhlcmUgYXJlIGEgZmV3IGFyZWFzIHRoYXQgY29uY2VybiBtZSwgc28gSSB3YW50IHRvIGJlIHRob3JvdWdoLlxuXG4qICAgYHNrYl9oZWFkZXJfcG9pbnRlcmAgLSBJdCBzZWVtcyBzYWZlIGJlY2F1c2UgaXQgZWl0aGVyIHJldHVybnMgYSBwb2ludGVyIHRvIGluaXRpYWxpemVkIGRhdGEgd2l0aGluIHRoZSBgc2tiYCBvciBpdCBmaWxscyB0aGUgZ2l2ZW4gYnVmZmVyLlxuKiAgIGBfX3NrYl9nc29fc2VnbWVudGAgLSBJJ20gYSBsaXR0bGUgbW9yZSBjb25jZXJuZWQgaGVyZSBiZWNhdXNlIGl0IGNyZWF0ZXMgbmV3IHNrYnMuIEJ1dCBgX19za2JfZ3NvX3NlZ21lbnRgIGlzIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBzbyBJJ20gbm90IG92ZXJseSB3b3JyaWVkIGFib3V0IGl0LiBJdCdzIGEgd2VsbC10ZXN0ZWQgcGFydCBvZiB0aGUga2VybmVsLlxuXG5JIG5lZWQgdG8gYmUgY2VydGFpbi4gU28sIHRoZXJlIGlzIG5vIG5ldyBrZXJuZWwgZGF0YSBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIE5vIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBXZSBhcmUgZGVhbGluZyB3aXRoIHN0YW5kYXJkIG5ldHdvcmsgcGFja2V0IHByb2Nlc3NpbmcsIHRoZSBHUk8vR1NPIGZlYXR1cmVzLCBhbmQgc29tZSBsb2NraW5nLlxuXG5JIHRha2UgYSBsb29rIGF0IHRoZSBuZXdseSBhZGRlZCBmdW5jdGlvbiwgYGhzcl9nc29fZWZmZWN0aXZlX3Byb3RvYC4gSXQgcmVhZHMgaGVhZGVyIGRhdGEgdXNpbmcgYHNrYl9oZWFkZXJfcG9pbnRlcmAuIElmIHRoZSBoZWFkZXIgZGF0YSBpcyBpbiB0aGUgbGluZWFyIHBhcnQsIGl0IHJldHVybnMgYSBwb2ludGVyOyBvdGhlcndpc2UsIGl0IGNvcGllcyB0aGUgaGVhZGVyIGludG8gYSBsb2NhbCBidWZmZXIuIEkgc2VlIGEgZmFtaWxpYXIgcGF0dGVybiB1c2luZyBgc2tiX2hlYWRlcl9wb2ludGVyYDpcblxuYGBgY1xuXHRldGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCAwLCBzaXplb2YoZWgpLCBcdTAwMjZlaCk7XG5cdGlmICghZXRoKVxuXHRcdHJldHVybiAwO1xuXHRwcm90byA9IGV0aC1cdTAwM2VoX3Byb3RvO1xuYGBgXG5cblRoaXMgcGF0dGVybiBpcyB3ZWxsLXVuZGVyc3Rvb2QsIHN0YW5kYXJkLCBhbmQgc2FmZS4gU28sIEkgc2VlIG5vIHBvdGVudGlhbCBLTVNBTiBpc3N1ZXMgaGVyZS5cblxuRXNzZW50aWFsbHksIGFsbCB0aGUgbWVtb3J5IGFjY2VzcyBpcyBzYWZlLCBpbml0aWFsaXplZCBtZW1vcnksIHN0YW5kYXJkIG5ldHdvcmsgb3BlcmF0aW9ucy4gSSBoYXZlIHRvIHNheSwgYmFzZWQgb24gbXkgZXhwZXJ0IGFzc2Vzc21lbnQsIHRoZXJlJ3Mgbm8gc21va2luZyBndW4gaGVyZSB0aGF0IHdhcnJhbnRzIGEgS01TQU4gcnVuLiBBbnkgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgbG9ja2luZyBwcm9ibGVtcywgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBLTVNBTiBpcyBvdmVya2lsbCBpbiB0aGlzIGNhc2UuXG5cbkZpbmFsIGFuc3dlcjogYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgc3RhbmRhcmQgdG9vbHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFRoZSBwYXRjaCBmaXhlcyBhIGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNTksIk91dHB1dFRva2VucyI6MjA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE3OjQxOjIxLjMyMzYyMDc2N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSB0byBoYW5kbGUgR1NPIChHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkKSBzdXBlci1wYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSBiZWZvcmUgZm9yd2FyZGluZywgYW5kIGRpc2FibGVzIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIG9uIGVuc2xhdmVkIGRldmljZXMuIEl0IGFsc28gYWRqdXN0cyBsb2NraW5nIGFyb3VuZCBzZXF1ZW5jZSBudW1iZXIgaW5jcmVtZW50cy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYywgc2tiIHNlZ21lbnRhdGlvbiAoYF9fc2tiX2dzb19zZWdtZW50YCksIGFuZCByZWFkaW5nIHBhY2tldCBoZWFkZXJzIHVzaW5nIHRoZSBzdGFuZGFyZCBgc2tiX2hlYWRlcl9wb2ludGVyYCBmdW5jdGlvbi4gTm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSB0byBoYW5kbGUgR1NPIChHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkKSBzdXBlci1wYWNrZXRzIGJ5IHNlZ21lbnRpbmcgdGhlbSBiZWZvcmUgZm9yd2FyZGluZywgYW5kIGRpc2FibGVzIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIG9uIGVuc2xhdmVkIGRldmljZXMuIEl0IGFsc28gYWRqdXN0cyBsb2NraW5nIGFyb3VuZCBzZXF1ZW5jZSBudW1iZXIgaW5jcmVtZW50cy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgbmV0d29yayBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYywgc2tiIHNlZ21lbnRhdGlvbiAoYF9fc2tiX2dzb19zZWdtZW50YCksIGFuZCByZWFkaW5nIHBhY2tldCBoZWFkZXJzIHVzaW5nIHRoZSBzdGFuZGFyZCBgc2tiX2hlYWRlcl9wb2ludGVyYCBmdW5jdGlvbi4gTm8gbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowtxdfx[1] Phase: Succeeded StartedAt: 2026-08-07 17:41:32 +0000 UTC FinishedAt: 2026-08-07 17:41:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 17:41:32 +0000 UTC FinishedAt: 2026-08-07 17:41:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2] Phase: Succeeded StartedAt: 2026-08-07 17:41:32 +0000 UTC FinishedAt: 2026-08-07 21:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 17:41:32 +0000 UTC FinishedAt: 2026-08-07 21:20:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 17:41:32 +0000 UTC FinishedAt: 2026-08-07 17:41:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 17:41:32 +0000 UTC FinishedAt: 2026-08-07 17:41:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"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-workflowtxdfx/series-workflowtxdfx-convert-artifact-791193142/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 17:41:42 +0000 UTC FinishedAt: 2026-08-07 17:57:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 17:41:42 +0000 UTC FinishedAt: 2026-08-07 17:57:56 +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:*0d04a3d9-00a4-455d-8a47-ecbef7c90ee5,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-workflowtxdfx/series-workflowtxdfx-convert-artifact-791193142/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": "6c7e6612-3459-488c-a9a5-040713f2f355", "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-workflowtxdfx/series-workflowtxdfx-build-action-712625484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 17:41:42 +0000 UTC FinishedAt: 2026-08-07 17:57:46 +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:*0d04a3d9-00a4-455d-8a47-ecbef7c90ee5,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-workflowtxdfx/series-workflowtxdfx-convert-artifact-791193142/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": "6c7e6612-3459-488c-a9a5-040713f2f355", "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-workflowtxdfx/series-workflowtxdfx-build-action-712625484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 17:57:56 +0000 UTC FinishedAt: 2026-08-07 17:57:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 17:57:56 +0000 UTC FinishedAt: 2026-08-07 17:57:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 17:57:56 +0000 UTC FinishedAt: 2026-08-07 17:58:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 17:57:56 +0000 UTC FinishedAt: 2026-08-07 17:58:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-workflowtxdfx/series-workflowtxdfx-convert-artifact-1514063049/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 17:58:06 +0000 UTC FinishedAt: 2026-08-07 18:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 17:58:06 +0000 UTC FinishedAt: 2026-08-07 17:59:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6c7e6612-3459-488c-a9a5-040713f2f355,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-workflowtxdfx/series-workflowtxdfx-build-action-712625484/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-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:00:06 +0000 UTC FinishedAt: 2026-08-07 18:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:00:06 +0000 UTC FinishedAt: 2026-08-07 18:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:00:06 +0000 UTC FinishedAt: 2026-08-07 18:16:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:00:06 +0000 UTC FinishedAt: 2026-08-07 18:16:44 +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:*0d04a3d9-00a4-455d-8a47-ecbef7c90ee5,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-workflowtxdfx/series-workflowtxdfx-convert-artifact-1514063049/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": "6f9f1f49-66d0-4d57-8093-fabf83fd3793", "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-workflowtxdfx/series-workflowtxdfx-build-action-3427029925/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:00:06 +0000 UTC FinishedAt: 2026-08-07 18:16:34 +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:*0d04a3d9-00a4-455d-8a47-ecbef7c90ee5,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-workflowtxdfx/series-workflowtxdfx-convert-artifact-1514063049/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": "6f9f1f49-66d0-4d57-8093-fabf83fd3793", "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-workflowtxdfx/series-workflowtxdfx-build-action-3427029925/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:16:44 +0000 UTC FinishedAt: 2026-08-07 18:16:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:16:44 +0000 UTC FinishedAt: 2026-08-07 18:16:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:16:44 +0000 UTC FinishedAt: 2026-08-07 18:18:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:16:44 +0000 UTC FinishedAt: 2026-08-07 18:18:35 +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:*6f9f1f49-66d0-4d57-8093-fabf83fd3793,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-workflowtxdfx/series-workflowtxdfx-build-action-3427029925/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-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:18:45 +0000 UTC FinishedAt: 2026-08-07 21:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:18:45 +0000 UTC FinishedAt: 2026-08-07 21:20:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"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:*6c7e6612-3459-488c-a9a5-040713f2f355,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6f9f1f49-66d0-4d57-8093-fabf83fd3793,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-workflowtxdfx/series-workflowtxdfx-build-action-712625484/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-workflowtxdfx/series-workflowtxdfx-build-action-3427029925/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:18:45 +0000 UTC FinishedAt: 2026-08-07 18:18:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:18:45 +0000 UTC FinishedAt: 2026-08-07 18:18:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"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-workflowtxdfx/series-workflowtxdfx-convert-artifact-428670238/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:18:45 +0000 UTC FinishedAt: 2026-08-07 18:18:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:18:45 +0000 UTC FinishedAt: 2026-08-07 18:18:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:18:46 +0000 UTC FinishedAt: 2026-08-07 18:18:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:18:56 +0000 UTC FinishedAt: 2026-08-07 21:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxdfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fcaeecb8b0cd44f77d03b28de0671258d4db18f8","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"ad1dfcf7-eda7-42c2-9b1c-1cc75b46e9ce","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-08-07 18:18:56 +0000 UTC FinishedAt: 2026-08-07 21:20:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6c7e6612-3459-488c-a9a5-040713f2f355,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6f9f1f49-66d0-4d57-8093-fabf83fd3793,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-workflowtxdfx/series-workflowtxdfx-build-action-712625484/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-workflowtxdfx/series-workflowtxdfx-build-action-3427029925/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-workflowtxdfx/series-workflowtxdfx-convert-artifact-428670238/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,}