Name: series-workflowcbtpb Phase: Succeeded StartedAt: 2026-08-01 15:45:12 +0000 UTC FinishedAt: 2026-08-01 19:42:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[0] Phase: Succeeded StartedAt: 2026-08-01 15:45:12 +0000 UTC FinishedAt: 2026-08-01 15:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 15:45:12 +0000 UTC FinishedAt: 2026-08-01 15:47:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "51b093a7ba27476e1f639455f005e8d2e75390e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "51b093a7ba27476e1f639455f005e8d2e75390e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "7eb36e87-98e3-49c0-a95f-adb6c425577e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hsr_forward_skb", "dev_disable_gro", "netif_disable_gro", "hsr_dev_xmit", "hsr_handle_frame" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7aHNyX2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byBkaXNhYmxlIEdSTyBvbiBuZXQgZGV2aWNlcywgYW5kIG1vZGlmaWVzIHRoZSBIU1IgZHJpdmVyIHRvIHVuZm9sZCBHU08gc3VwZXItcGFja2V0cyBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgSFNSIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGJ5IHNlbmRpbmcgdHJhZmZpYyB0aHJvdWdoIGFuIEhTUiBpbnRlcmZhY2UsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhjZjc1NWE5ZDkyYjM5MDgxNzk2MGU3M2ZlODI3MzZkMGY0MGFkNzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDE1OjQ2OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA5OTgxZDYzN2Y4YjU0Li5lYmEyYzI2YTQ5YmE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTM0MzQsNiAmIzQzOzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xuIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7XG4gdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA1OTMzYzVkYWIwOWVlLi5hNmNmMmFkYzg2MjU2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTg0MCw2ICYjNDM7MTg0MCwyNCBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHR9XG4gfVxuIFxuJiM0Mzt2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJfZGV2O1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4mIzQzO1xuJiM0MztcdGRldi1cdTAwM2V3YW50ZWRfZmVhdHVyZXMgXHUwMDI2PSB+KE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpO1xuJiM0MztcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgKE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpKSlcbiYjNDM7XHRcdG5ldGRldl9XQVJOKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgR1JPIVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoZGV2LCBsb3dlcl9kZXYsIGl0ZXIpIHtcbiYjNDM7XHRcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xuJiM0MztcdFx0bmV0aWZfZGlzYWJsZV9ncm8obG93ZXJfZGV2KTtcbiYjNDM7XHRcdG5ldGRldl91bmxvY2tfb3BzKGxvd2VyX2Rldik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqXHRkZXZfZGlzYWJsZV9ncm9faHcgLSBkaXNhYmxlIEhXIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4gICpcdEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9hcGkuYyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuaW5kZXggNDM3OTQ3ZGQwOGVkNS4uMDJmYjIxNjI5NTEyOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldl9hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2X2FwaS5jXG5AQCAtMjY5LDYgJiM0MzsyNjksMjIgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZGV2X2Rpc2FibGVfZ3JvKCkgLSBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4mIzQzOyAqIEBkZXY6IGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBEaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0IGRldmljZS4gIE11c3QgYmVcbiYjNDM7ICogY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZCBwYWNrZXRzIG1heSBiZVxuJiM0MzsgKiBmb3J3YXJkZWQgdG8gYW5vdGhlciBpbnRlcmZhY2UuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4mIzQzO1x0bmV0aWZfZGlzYWJsZV9ncm8oZGV2KTtcbiYjNDM7XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfZ3JvKTtcbiYjNDM7XG4gLyoqXG4gICogZGV2X3NldF9wcm9taXNjdWl0eSgpIC0gdXBkYXRlIHByb21pc2N1aXR5IGNvdW50IG9uIGEgZGV2aWNlXG4gICogQGRldjogZGV2aWNlXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuaW5kZXggNTU1NWI3MWFiMTliNS4uMjQ4Y2JiMTQyZTIxZSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTIzMiw5ICYjNDM7MjMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2ItXHUwMDNlZGV2ID0gbWFzdGVyLVx1MDAzZWRldjtcbiBcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbkBAIC0zMzUsNiAmIzQzOzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc2VxdWVuY2VfbnIpO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuIFx0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xuIFx0LyogSFNSdjAgaGFzIDYgdW51c2VkIGJ5dGVzIGFmdGVyIHRoZSBNQUMgKi9cbkBAIC0zNTYsMTQgJiM0MzszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcbiBcdH1cbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiYjNDM7XHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRyZXR1cm47XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuQEAgLTM5MCw2ICYjNDM7Mzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKTtcbiBcdGhzci1cdTAwM2VzdXBfc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG5AQCAtMzk3LDEzICYjNDM7MzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XG4gXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgbWFzdGVyLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4mIzQzO1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gfVxuIFxuIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb25cbkBAIC02NTksNyAmIzQzOzY1Miw3IEBAIHZvaWQgaHNyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiBcbiBcdGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHxcbi1cdFx0XHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcbiYjNDM7XHRcdFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNi4uM2ZjZGJhYzQ5YzU5ZCAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2dzby5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aHNyX21haW4uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2hzcl9mcmFtZXJlZy5oXCYjMzQ7XG4gXG5AQCAtNjIxLDkgJiM0Mzs2MjIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8XG4gXHQgICAgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbiBcdFx0LyogU2VxdWVuY2UgbnIgZm9yIHRoZSBtYXN0ZXIvaW50ZXJsaW5rIG5vZGUgKi9cbi1cdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4mIzQzO1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0XHRmcmFtZS1cdTAwM2VzZXF1ZW5jZV9uciA9IGhzci1cdTAwM2VzZXF1ZW5jZV9ucjtcbiBcdFx0aHNyLVx1MDAzZXNlcXVlbmNlX25yJiM0MzsmIzQzOztcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtNzMxLDcgJiM0Mzs3MzMsNyBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIH1cbiBcbiAvKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHJjdSByZWFkIGxvY2sgKGJlY2F1c2Ugb2YgdGhlIHBvcnQgcGFyYW1ldGVyKSAqL1xuLXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiYjNDM7c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4ge1xuIFx0c3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lO1xuIFxuQEAgLTc2MCwzICYjNDM7NzYyLDUwIEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuIFx0a2ZyZWVfc2tiKHNrYik7XG4gfVxuJiM0MztcbiYjNDM7LyogR1NPIGZhbi1vdXQgZnVubmVsOiB1bmZvbGQgc3VwZXItcGFja2V0cyBiZWZvcmUgcGVyLWZyYW1lIHByb2Nlc3Npbmcgc29cbiYjNDM7ICogZWFjaCB3aXJlIGZyYW1lIGdldHMgaXRzIG93biBIU1IvUFJQIHRhZyBhbmQgc2VxdWVuY2UgbnVtYmVyLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0O1xuJiM0MztcbiYjNDM7XHRpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7XG4mIzQzO1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBVbmZvbGQgb25seSBwbGFpbi1FdGhlcm5ldCBHU08gc3VwZXItcGFja2V0czogbG9jYWxseSBnZW5lcmF0ZWRcbiYjNDM7XHQgKiBvbiB0aGUgbWFzdGVyLCBvciBhcnJpdmluZyB1bnRhZ2dlZCBmcm9tIHRoZSBTQU4gc2lkZSBvbiB0aGVcbiYjNDM7XHQgKiBpbnRlcmxpbmsuIEEgc3VwZXItcGFja2V0IGZyb20gYSBMQU4gc2xhdmUgbWF5IGNhcnJ5IHBlci1mcmFtZVxuJiM0MztcdCAqIEhTUiB0YWdzIC8gUFJQIFJDVCB0cmFpbGVycyB0aGF0IHNvZnR3YXJlIHNlZ21lbnRhdGlvbiBjYW5ub3RcbiYjNDM7XHQgKiByZWNvdmVyOyBhbiBhbHJlYWR5LXRhZ2dlZCBIU1IvUFJQIHN1cGVyLXBhY2tldCB2aW9sYXRlc1xuJiM0MztcdCAqIHBlci1mcmFtZSB3aXJlIHNlbWFudGljcy4gRHJvcCBib3RoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZXR5cGUgIT0gSFNSX1BUX01BU1RFUiBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlICE9IEhTUl9QVF9JTlRFUkxJTkspXG4mIzQzO1x0XHRnb3RvIGRyb3BfZ3NvO1xuJiM0MztcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSFNSKSB8fFxuJiM0MztcdCAgICBza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUFJQKSlcbiYjNDM7XHRcdGdvdG8gZHJvcF9nc287XG4mIzQzO1xuJiM0MztcdC8qIGZlYXR1cmVzID0gMDogcmVxdWVzdCBmdWxsIHNvZnR3YXJlIHNlZ21lbnRhdGlvbi4gdHhfcGF0aCBpcyB0cnVlXG4mIzQzO1x0ICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb21cbiYjNDM7XHQgKiB0aGUgaW50ZXJsaW5rIGZvbGxvd3MgUlggY2hlY2tzdW0gc2VtYW50aWNzLlxuJiM0MztcdCAqL1xuJiM0MztcdHNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHNlZ3MpIHx8IHVubGlrZWx5KCFzZWdzKSlcbiYjNDM7XHRcdGdvdG8gZHJvcF9nc287XG4mIzQzO1xuJiM0MztcdGNvbnN1bWVfc2tiKHNrYik7XG4mIzQzO1x0d2hpbGUgKHNlZ3MpIHtcbiYjNDM7XHRcdG5leHQgPSBzZWdzLVx1MDAzZW5leHQ7XG4mIzQzO1x0XHRzZWdzLVx1MDAzZW5leHQgPSBOVUxMO1xuJiM0MztcdFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcbiYjNDM7XHRcdHNlZ3MgPSBuZXh0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm47XG4mIzQzO1xuJiM0Mztkcm9wX2dzbzpcbiYjNDM7XHRwb3J0LVx1MDAzZWRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOztcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX3NsYXZlLmMgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5pbmRleCAwMWM3M2I0YjUwZGRkLi4wY2E1NWQ5MzIzYzU3IDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xuQEAgLTczLDE2ICYjNDM7NzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdH1cbiBcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4gXG4tXHQvKiBPbmx5IHRoZSBmcmFtZXMgcmVjZWl2ZWQgb3ZlciB0aGUgaW50ZXJsaW5rIHBvcnQgd2lsbCBhc3NpZ24gYVxuLVx0ICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuXG4tXHQgKi9cbi1cdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0fSBlbHNlIHtcbi1cdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHR9XG4mIzQzO1x0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4gXG4gZmluaXNoX2NvbnN1bWU6XG4gXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbkBAIC0xNzAsNiAmIzQzOzE2MSw3IEBAIHN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAocmVzKVxuIFx0XHRnb3RvIGZhaWxfcnhfaGFuZGxlcjtcbiBcdGRldl9kaXNhYmxlX2xybyhkZXYpO1xuJiM0MztcdGRldl9kaXNhYmxlX2dybyhkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbmluZGV4IDMxZmI5MzI2Y2Y1MzMuLjBkMTA1NDc2ZTdjNTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXG4gXG4gVEVTVF9QUk9HUyA6PSBcXFxuJiM0MztcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI4OGRlM2E2MGI4OTlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxuQEAgLTAsMCAmIzQzOzEsNDYyIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcbiYjNDM7I1xuJiM0MzsjICAxLiBFbnNsYXZpbmcgYSBkZXZpY2UgdG8gYW4gSFNSIG1hc3RlciBkaXNhYmxlcyBHUk8gb24gaXRcbiYjNDM7IyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cbiYjNDM7IyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXG4mIzQzOyMgIDMuIEEgVENQIHN0cmVhbSBmcm9tIGEgVFNPLWVuYWJsZWQgU0FOICh3aGljaCB0aGVyZWZvcmUgZW1pdHMgR1NPXG4mIzQzOyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6XG4mIzQzOyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xuJiM0MzsjICAgICB0aGUgU0FOIGFuZCBwZXItZnJhbWUtc2l6ZWQgdHJhZmZpYyBsZWF2aW5nIHRoZSBEVVQmIzM5O3MgTEFOIHBvcnRzLlxuJiM0MzsjXG4mIzQzOyMgVG9wb2xvZ3kgKDEwMC42NC4wLjAvMjQpOlxuJiM0MzsjXG4mIzQzOyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXG4mIzQzOyMgICYjNDM7LS0tLS0tLS0tLS0mIzQzOyAgaW50ZXJsaW5rICAmIzQzOy0tLS0tLS0tLS0tLS0tLSYjNDM7ICBMQU4gQS9CICAmIzQzOy0tLS0tLS0tLS0tJiM0MztcbiYjNDM7IyAgfCBzMCBbMC4xXSAgfC0tLS0tLS0tLS0tLS18IGRfaWwgICBoc3IwICAgfC0tLS0tLS0tLS0tfCBoc3IxIFswLjNdfFxuJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHxcbiYjNDM7IyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzQzOy0tLS0tLS0tLS0tLS0tLSYjNDM7ICAgICAgICAgICAmIzQzOy0tLS0tLS0tLS0tJiM0MztcbiYjNDM7I1xuJiM0MzsjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCYjMzk7cyBmb3J3YXJkIHBhdGhcbiYjNDM7IyAoaW50ZXJsaW5rIFJYIC1cdTAwM2UgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kXG4mIzQzOyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXG4mIzQzO1xuJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4mIzQzO1xuJiM0MztzYW5faXA9XCYjMzQ7MTAwLjY0LjAuMVwmIzM0O1xuJiM0MztwZWVyX2lwPVwmIzM0OzEwMC42NC4wLjNcJiMzNDtcbiYjNDM7XG4mIzQzOyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKTpcbiYjNDM7IyBTQU5fQVZHX01JTiBwcm92ZXMgR1NPIHN1cGVyLXBhY2tldHMgbGVmdCB0aGUgU0FOOyBMQU5fQVZHX01BWCBpcyBhXG4mIzQzOyMgZ3VhcmQgd2l0aCBtYXJnaW4sIG5vdCB0aGUgcHJvdG9jb2wgbWF4aW11bSAoc2VlIGRvX3Rzb19zdHJlYW1fdGVzdCkuXG4mIzQzO1NBTl9BVkdfTUlOPTIwNDhcbiYjNDM7TEFOX0FWR19NQVg9MTUxNFxuJiM0MztcbiYjNDM7aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztzZXJ2ZXJfd3JhcHBlcj1cJiMzNDtcJiMzNDtcbiYjNDM7d29ya2Rpcj1cJiMzNDtcJiMzNDtcbiYjNDM7cGlkZmlsZT1cJiMzNDtcJiMzNDtcbiYjNDM7cmNmaWxlPVwmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7Y2xlYW51cCgpXG4mIzQzO3tcbiYjNDM7XHQjIGV4YWN0LVBJRCBraWxsIG9ubHkgYWZ0ZXIgUkUtdmFsaWRhdGluZyBpZGVudGl0eSAoZ3VhcmRzIGFnYWluc3RcbiYjNDM7XHQjIFBJRCByZXVzZSBiZXR3ZWVuIHB1YmxpY2F0aW9uIGFuZCBjbGVhbnVwKVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IHZhbGlkX3NlcnZlcl9waWQgXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRraWxsIFwmIzM0OyR7aXBlcmZfcGlkfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZmlcbiYjNDM7XHRpcGVyZl9waWQ9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0aWYgWyAtbiBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHQjIHRoZSB3cmFwcGVyIHdhaXRzIG9uIHRoZSBzZXJ2ZXI7IHJlYXAgaXQgd2l0aCBhIDVzIGJvdW5kIHNvIGFcbiYjNDM7XHRcdCMgbGl2ZS1idXQtdW5wdWJsaXNoZWQgc2VydmVyIGNhbiBuZXZlciBoYW5nIGNsZWFudXBcbiYjNDM7XHRcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuJiM0MztcdFx0XHRraWxsIC0wIFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcbiYjNDM7XHRcdFx0c2xlZXAgMC4xXG4mIzQzO1x0XHRkb25lXG4mIzQzO1x0XHRraWxsIFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRcdHdhaXQgXCYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFx0c2VydmVyX3dyYXBwZXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XHQjIGxhc3QgcmVzb3J0LCBuYW1lc3BhY2Utc2NvcGVkIG9ubHk6IFRFUk0gdGhlIGlwZXJmMyBwcm9jZXNzZXMgdGhhdFxuJiM0MztcdCMgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgcGVlciBuZXRucywgcG9sbCBmb3IgYm91bmRlZCBleGl0LCB0aGVuXG4mIzQzO1x0IyBTSUdLSUxMIGFueSBzdXJ2aXZvciBiZWZvcmUgdG91Y2hpbmcgdGhlIG5hbWVzcGFjZSBuYW1lLiBBIGJsaW5kXG4mIzQzO1x0IyBwa2lsbCB3b3VsZCBzY2FuIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy5cbiYjNDM7XHRsb2NhbCBfcCBfc3RpbGxcbiYjNDM7XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwmIzM0OyRuc19wZWVyXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwpOyBkb1xuJiM0MztcdFx0aWYgaXNfaXBlcmYzX3BpZCBcJiMzNDskX3BcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdFx0a2lsbCBcJiMzNDskX3BcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFx0ZmlcbiYjNDM7XHRkb25lXG4mIzQzO1x0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4mIzQzO1x0XHRfc3RpbGw9MFxuJiM0MztcdFx0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcJiMzNDskbnNfcGVlclwmIzM0OyAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbiYjNDM7XHRcdFx0aWYgaXNfaXBlcmYzX3BpZCBcJiMzNDskX3BcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdFx0XHRfc3RpbGw9MVxuJiM0MztcdFx0XHRcdGJyZWFrXG4mIzQzO1x0XHRcdGZpXG4mIzQzO1x0XHRkb25lXG4mIzQzO1x0XHRbIFwmIzM0OyRfc3RpbGxcJiMzNDsgLWVxIDAgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbiYjNDM7XHRcdHNsZWVwIDAuMVxuJiM0MztcdGRvbmVcbiYjNDM7XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwmIzM0OyRuc19wZWVyXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwpOyBkb1xuJiM0MztcdFx0aWYgaXNfaXBlcmYzX3BpZCBcJiMzNDskX3BcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdFx0a2lsbCAtOSBcJiMzNDskX3BcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFx0ZmlcbiYjNDM7XHRkb25lXG4mIzQzO1x0IyByZW1vdmUgb25seSB0aGUga25vd24gbm9uLWVtcHR5IHByaXZhdGUgZGlyZWN0b3J5XG4mIzQzO1x0aWYgWyAtbiBcJiMzNDske3dvcmtkaXJ9XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFsgLWQgXCYjMzQ7JHt3b3JrZGlyfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRybSAtcmYgXCYjMzQ7JHt3b3JrZGlyfVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0d29ya2Rpcj1cJiMzNDtcJiMzNDtcbiYjNDM7XHRwaWRmaWxlPVwmIzM0O1wmIzM0O1xuJiM0MztcdHJjZmlsZT1cJiMzNDtcJiMzNDtcbiYjNDM7XHRjbGVhbnVwX2FsbF9uc1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7Y2hlY2tfdG9vbCgpXG4mIzQzO3tcbiYjNDM7XHRpZiAhIGNvbW1hbmQgLXYgXCYjMzQ7JDFcJiMzNDsgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVwmIzM0O1xuJiM0MztcdFx0ZXhpdCAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7bnN4KClcbiYjNDM7e1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JDFcJiMzNDsgYmFzaCAtYyBcJiMzNDskMlwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztpc19pcGVyZjNfcGlkKClcbiYjNDM7e1xuJiM0MztcdFsgXCYjMzQ7JChjYXQgL3Byb2MvXCYjMzQ7JDFcJiMzNDsvY29tbSAyXHUwMDNlL2Rldi9udWxsKVwmIzM0OyA9IFwmIzM0O2lwZXJmM1wmIzM0OyBdXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgRGVjaW1hbC1jb3VudGVyIHZhbGlkYXRpb24gZm9yIHRoZSBzbmFwc2hvdCBibG9ja3M6IGV2ZXJ5IHZhbHVlIG11c3RcbiYjNDM7IyBiZSBhIHBsYWluIGRlY2ltYWwgbnVtYmVyLiBBIHBhcnNlIGZhaWx1cmUgaW4gcmVhZF90eF9jb3VudGVycyB5aWVsZHNcbiYjNDM7IyBlbXB0eS9nYXJibGVkIGZpZWxkcywgd2hpY2ggdGhpcyBjaGVjayB0dXJucyBpbnRvIGFuIGltbWVkaWF0ZSBGQUlMLlxuJiM0Mzt2YWxpZF9kZWNpbWFscygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCB2XG4mIzQzO1xuJiM0MztcdGZvciB2IGluIFwmIzM0OyRAXCYjMzQ7OyBkb1xuJiM0MztcdFx0W1sgXCYjMzQ7JHZcJiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IHJldHVybiAxXG4mIzQzO1x0ZG9uZVxuJiM0MztcdHJldHVybiAwXG4mIzQzO31cbiYjNDM7XG4mIzQzO3NldHVwX3RvcG8oKVxuJiM0Mzt7XG4mIzQzO1x0c2V0dXBfbnMgbnNfZHV0IG5zX3NhbiBuc19wZWVyIHx8IGV4aXQgJD9cbiYjNDM7XG4mIzQzO1x0aXAgbGluayBhZGQgZF9hIG5ldG5zIFwmIzM0OyRuc19kdXRcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2EgbmV0bnMgXCYjMzQ7JG5zX3BlZXJcJiMzNDtcbiYjNDM7XHRpcCBsaW5rIGFkZCBkX2IgbmV0bnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyBcJiMzNDskbnNfcGVlclwmIzM0O1xuJiM0MztcdGlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zIFwmIzM0OyRuc19zYW5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBIU1IgdGFncyBhZGQgNiBieXRlcyBwZXIgZnJhbWU7IGdpdmUgdGhlIExBTiBsZWdzIGhlYWRyb29tLlxuJiM0MztcdGZvciBpZmFjZSBpbiBkX2EgZF9iOyBkb1xuJiM0MztcdFx0bnN4IFwmIzM0OyRuc19kdXRcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcXFxuJiM0MztcdFx0XHRpcCBsaW5rIHNldCAkaWZhY2UgdXBcJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO1x0Zm9yIGlmYWNlIGluIHBfYSBwX2I7IGRvXG4mIzQzO1x0XHRuc3ggXCYjMzQ7JG5zX3BlZXJcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcXFxuJiM0MztcdFx0XHRpcCBsaW5rIHNldCAkaWZhY2UgdXBcJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO1xuJiM0MztcdG5zeCBcJiMzNDskbnNfZHV0XCYjMzQ7IFwmIzM0O2lwIGxpbmsgc2V0IGRfaWwgdXBcJiMzNDtcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX3NhblwmIzM0OyBcJiMzNDtpcCBsaW5rIHNldCBzMCB1cDsgaXAgYWRkciBhZGQgJHNhbl9pcC8yNCBkZXYgczBcJiMzNDtcbiYjNDM7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19kdXRcJiMzNDsgXCYjMzQ7aXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxuJiM0MztcdFx0c2xhdmUxIGRfYSBzbGF2ZTIgZF9iIGludGVybGluayBkX2lsIHByb3RvIDA7IFxcXG4mIzQzO1x0XHRpcCBsaW5rIHNldCBoc3IwIHVwXCYjMzQ7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19wZWVyXCYjMzQ7IFwmIzM0O2lwIGxpbmsgYWRkIGhzcjEgdHlwZSBoc3IgXFxcbiYjNDM7XHRcdHNsYXZlMSBwX2Egc2xhdmUyIHBfYiBwcm90byAwOyBcXFxuJiM0MztcdFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBMZXQgdGhlIG5vZGVzIHNlZSBlYWNoIG90aGVyJiMzOTtzIHN1cGVydmlzaW9uIGZyYW1lcy5cbiYjNDM7XHRzbGVlcCAyXG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoZWNrX2ZlYXR1cmUoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBpZmFjZT1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIGZlYXR1cmU9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XHRsb2NhbCB3YW50PVwmIzM0OyQ0XCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIG5zeCBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7ZXRodG9vbCAtayAkaWZhY2VcJiMzNDsgfCBncmVwIC1xIFwmIzM0O14kZmVhdHVyZTogJHdhbnRcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF1cJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgbm90ICR3YW50XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgT2ZmLW9yLWFic2VudCB2YXJpYW50OiBmYWlscyBvbmx5IHdoZW4gdGhlIGZlYXR1cmUgaXMgcHJlc2VudCBBTkQgb24sXG4mIzQzOyMgc28gZGV2aWNlcyB0aGF0IHNpbXBseSBkbyBub3QgbGlzdCB0aGUgZmVhdHVyZSBkbyBub3QgZmFpbCBpdC5cbiYjNDM7Y2hlY2tfZmVhdHVyZV9ub3Rfb24oKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBpZmFjZT1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIGZlYXR1cmU9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aWYgbnN4IFwmIzM0OyRuc1wmIzM0OyBcJiMzNDtldGh0b29sIC1rICRpZmFjZVwmIzM0OyB8IGdyZXAgLXEgXCYjMzQ7XiRmZWF0dXJlOiBvblwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG9uXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKClcbiYjNDM7e1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBHUk8uXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7R1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlwmIzM0O1xuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgSFctR1JPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2EgcngtZ3JvLWh3IG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2IgcngtZ3JvLWh3IG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2lsIHJ4LWdyby1odyBvZmZcbiYjNDM7XHRzdG9wX2lmX2Vycm9yIFwmIzM0O0hXLUdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IHRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwmIzM0OyRuc19kdXRcJiMzNDsgaHNyMCB0eC10Y3A2LXNlZ21lbnRhdGlvblxuJiM0MztcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwmIzM0OyRuc19kdXRcJiMzNDsgaHNyMCB0eC11ZHAtc2VnbWVudGF0aW9uXG4mIzQzO1x0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXCYjMzQ7JG5zX2R1dFwmIzM0OyBoc3IwIHR4LWdzby1saXN0XG4mIzQzO1x0c3RvcF9pZl9lcnJvciBcJiMzNDtIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPLWZhbWlseSBmZWF0dXJlcy5cJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7YWxsb2Nfd29ya2RpcigpXG4mIzQzO3tcbiYjNDM7XHQjIEFsbG9jYXRlZCBvbmx5IGhlcmUsIGxvbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdG9wb2xvZ3kgY2xlYW51cCwgc29cbiYjNDM7XHQjIGNsZWFudXAoKSBhdCBzZXR1cF90b3BvKCkgdGltZSBjYW4gbmV2ZXIgcmVtb3ZlIGl0LiBta3RlbXAgZmFpbHVyZVxuJiM0MztcdCMgaXMgYSBoYXJkIHRlc3QgZmFpbHVyZS5cbiYjNDM7XHR3b3JrZGlyPSQobWt0ZW1wIC1kIC90bXAvaHNyX2dyb190ZXN0LlhYWFhYWCkgfHwge1xuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBta3RlbXAgLWQgZmFpbGVkXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRleGl0IDFcbiYjNDM7XHR9XG4mIzQzO1x0Y2htb2QgNzAwIFwmIzM0OyR7d29ya2Rpcn1cJiMzNDtcbiYjNDM7XHRwaWRmaWxlPVwmIzM0OyR7d29ya2Rpcn0vaXBlcmYucGlkXCYjMzQ7XG4mIzQzO1x0cmNmaWxlPVwmIzM0OyR7d29ya2Rpcn0vaXBlcmYucmNcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBOdW1lcmljLCBhbGl2ZSwgY29tbSA9PSBpcGVyZjMsIGFuZCByZWFsbHkgb3duZWQgYnkgdGhlIHBlZXIgbmV0bnMuXG4mIzQzO3ZhbGlkX3NlcnZlcl9waWQoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgcD1cJiMzNDskMVwmIzM0O1xuJiM0MztcbiYjNDM7XHRbWyBcJiMzNDskcFwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV0gfHwgcmV0dXJuIDFcbiYjNDM7XHRraWxsIC0wIFwmIzM0OyRwXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIDFcbiYjNDM7XHRbIFwmIzM0OyQoY2F0IC9wcm9jL1wmIzM0OyRwXCYjMzQ7L2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcJiMzNDsgPSBcJiMzNDtpcGVyZjNcJiMzNDsgXSB8fCByZXR1cm4gMVxuJiM0MztcdGlwIG5ldG5zIHBpZHMgXCYjMzQ7JG5zX3BlZXJcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXF4IFwmIzM0OyRwXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXJ0X2lwZXJmX3NlcnZlcigpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBjYW5kaWRhdGVfcGlkXG4mIzQzO1xuJiM0MztcdCMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHNcbiYjNDM7XHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxuJiM0MztcdGFsbG9jX3dvcmtkaXJcbiYjNDM7XHQoIG5zeCBcJiMzNDskbnNfcGVlclwmIzM0OyBcJiMzNDtpcGVyZjMgLXMgLTEgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcdTAwMjYgXFxcbiYjNDM7XHRcdGVjaG8gXFwkISBcdTAwM2UgJHtwaWRmaWxlfTsgXFxcbiYjNDM7XHRcdHdhaXQgXFwkITsgXFxcbiYjNDM7XHRcdGVjaG8gXFwkPyBcdTAwM2UgJHtyY2ZpbGV9XCYjMzQ7ICkgXHUwMDI2XG4mIzQzO1x0c2VydmVyX3dyYXBwZXI9JCFcbiYjNDM7XHQjIHRoZSB3cmFwcGVyIHdyaXRlcyB0aGUgcGlkZmlsZSBhc3luY2hyb25vdXNseTsgd2FpdCBmb3IgaXQgdG9cbiYjNDM7XHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxuJiM0MztcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuJiM0MztcdFx0WyAtcyBcJiMzNDske3BpZGZpbGV9XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IGJyZWFrXG4mIzQzO1x0XHRzbGVlcCAwLjFcbiYjNDM7XHRkb25lXG4mIzQzO1x0aWYgWyAhIC1zIFwmIzM0OyR7cGlkZmlsZX1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgcHVibGlzaCBhIHBpZFwmIzM0OyBcXFxuJiM0MztcdFx0XHRcJiMzNDsobm8gcGlkZmlsZSlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0Y2FuZGlkYXRlX3BpZD0kKFx1MDAzY1wmIzM0OyR7cGlkZmlsZX1cJiMzNDspXG4mIzQzO1x0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFwmIzM0OyR7Y2FuZGlkYXRlX3BpZH1cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJiMzOTske2NhbmRpZGF0ZV9waWR9JiMzOTtcJiMzNDsgXFxcbiYjNDM7XHRcdFx0XCYjMzQ7ZmFpbGVkIHZhbGlkYXRpb25cJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0IyBwdWJsaXNoIG9ubHkgYWZ0ZXIgZnVsbCB2YWxpZGF0aW9uXG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0OyR7Y2FuZGlkYXRlX3BpZH1cJiMzNDtcbiYjNDM7XHRzbGVlcCAxXG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBQcmludCBcJiMzNDtcdTAwM2NieXRlc1x1MDAzZSBcdTAwM2NwYWNrZXRzXHUwMDNlXCYjMzQ7IGZvciBleGFjdGx5IG9uZSBUWCByZWNvcmQgb2YgbnMvZGV2OyBhbnl0aGluZ1xuJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC5cbiYjNDM7cmVhZF90eF9jb3VudGVycygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBucz1cJiMzNDskMVwmIzM0OyBkZXY9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBvdXQgY250XG4mIzQzO1xuJiM0MztcdG91dD0kKG5zeCBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7aXAgLXMgbGluayBzaG93ICRkZXZcJiMzNDsgfCBcXFxuJiM0MztcdFx0YXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OylcbiYjNDM7XHRjbnQ9JChlY2hvIFwmIzM0OyRvdXRcJiMzNDsgfCBncmVwIC1jICYjMzk7XlswLTldKiBbMC05XSokJiMzOTspXG4mIzQzO1x0aWYgWyBcJiMzNDskY250XCYjMzQ7IC1uZSAxIF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2XCYjMzQ7IFxcXG4mIzQzO1x0XHRcdFwmIzM0OyhyZWNvcmRzPSRjbnQpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7XG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZXZhbF9jb3VudGVyX2RlbHRhKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5hbWU9XCYjMzQ7JDFcJiMzNDsgYjA9XCYjMzQ7JDJcJiMzNDsgcDA9XCYjMzQ7JDNcJiMzNDsgYjE9XCYjMzQ7JDRcJiMzNDsgcDE9XCYjMzQ7JDVcJiMzNDsgb3A9XCYjMzQ7JDZcJiMzNDsgbGltaXQ9XCYjMzQ7JDdcJiMzNDtcbiYjNDM7XHRsb2NhbCBiZCBwZFxuJiM0MztcbiYjNDM7XHRpZiAhIFtbIFwmIzM0OyRiMFwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXHUwMDI2XHUwMDI2IFwmIzM0OyRiMVwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXHUwMDI2XHUwMDI2IFxcXG4mIzQzO1x0XHRcJiMzNDskcDBcJiMzNDsgPX4gXlswLTldJiM0MzskIFx1MDAyNlx1MDAyNiBcJiMzNDskcDFcJiMzNDsgPX4gXlswLTldJiM0MzskIF1dOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IG5vbi1udW1lcmljIGNvdW50ZXIgaW5wdXQgZm9yICRuYW1lXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcdGJkPSQoKGIxIC0gYjApKVxuJiM0MztcdHBkPSQoKHAxIC0gcDApKVxuJiM0MztcdGlmIFsgXCYjMzQ7JGJkXCYjMzQ7IC1sdCAwIF0gfHwgWyBcJiMzNDskcGRcJiMzNDsgLWxlIDAgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBjb3VudGVyIGRlbHRhIGludmFsaWQgZm9yICRuYW1lXCYjMzQ7IFxcXG4mIzQzO1x0XHRcdFwmIzM0OyhieXRlcz0kYmQgcGt0cz0kcGQpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcdGlmIFsgXCYjMzQ7JG9wXCYjMzQ7ID0gXCYjMzQ7Z3RcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0aWYgWyBcJiMzNDskYmRcJiMzNDsgLWxlICQoKHBkICogbGltaXQpKSBdOyB0aGVuXG4mIzQzO1x0XHRcdGVjaG8gXCYjMzQ7RkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkIFx1MDAzYz0gJGxpbWl0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRcdHJldD0xXG4mIzQzO1x0XHRcdHJldHVybiAxXG4mIzQzO1x0XHRmaVxuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlmIFsgXCYjMzQ7JGJkXCYjMzQ7IC1ndCAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxuJiM0MztcdFx0XHRlY2hvIFwmIzM0O0ZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCBcdTAwM2UgJGxpbWl0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRcdHJldD0xXG4mIzQzO1x0XHRcdHJldHVybiAxXG4mIzQzO1x0XHRmaVxuJiM0MztcdGZpXG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiAkbmFtZSBjb3VudGVyIGRlbHRhIGJ5dGVzPSRiZCBwYWNrZXRzPSRwZFwmIzM0OyBcXFxuJiM0MztcdFx0XCYjMzQ7KG9wICRvcCBsaW1pdCAkbGltaXQpIFsgT0sgXVwmIzM0O1xuJiM0MztcdHJldHVybiAwXG4mIzQzO31cbiYjNDM7XG4mIzQzO2RvX3Rzb19zdHJlYW1fdGVzdCgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBvdXQgc2VuZGVyX3JldHIgc2VydmVyX3JjXG4mIzQzO1x0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXG4mIzQzO1x0bG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSBiX2IwIGJfcDAgYl9iMSBiX3AxXG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cJiMzNDtcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX3NhblwmIzM0OyBcJiMzNDtldGh0b29sIC1LIHMwIHRzbyBvbiBnc28gb25cJiMzNDtcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19zYW5cJiMzNDsgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXG4mIzQzO1x0c3RvcF9pZl9lcnJvciBcJiMzNDtDb3VsZCBub3QgZW5hYmxlIFRTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cJiMzNDtcbiYjNDM7XHRzdGFydF9pcGVyZl9zZXJ2ZXIgfHwgcmV0dXJuXG4mIzQzO1xuJiM0MztcdCMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZVxuJiM0MztcdCMgbXVzdCBleGNlZWQgU0FOX0FWR19NSU4gKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IEdTTyBzdXBlci1wYWNrZXRzXG4mIzQzO1x0IyByZWFsbHkgbGVmdCB0aGUgU0FOKTsgZWFjaCBEVVQgTEFOIGxlZyBtdXN0IHN0YXkgdW5kZXIgTEFOX0FWR19NQVhcbiYjNDM7XHQjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlXG4mIzQzO1x0IyBhcmUgYWdncmVnYXRlIGRpc2NyaW1pbmF0b3JzLCBub3QgYSBwZXItZnJhbWUgbWF4aW11bSBwcm9vZi5cbiYjNDM7XHRzYW5fYjA9MDsgc2FuX3AwPTA7IGFfYjA9MDsgYV9wMD0wOyBiX2IwPTA7IGJfcDA9MFxuJiM0MztcdHJlYWQgLXIgc2FuX2IwIHNhbl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19zYW5cJiMzNDsgczApXG4mIzQzO0VPRlxuJiM0MztcdHJlYWQgLXIgYV9iMCBhX3AwIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfdHhfY291bnRlcnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2EpXG4mIzQzO0VPRlxuJiM0MztcdHJlYWQgLXIgYl9iMCBiX3AwIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfdHhfY291bnRlcnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2IpXG4mIzQzO0VPRlxuJiM0MztcdGlmICEgdmFsaWRfZGVjaW1hbHMgXCYjMzQ7JHNhbl9iMFwmIzM0OyBcJiMzNDskc2FuX3AwXCYjMzQ7IFwmIzM0OyRhX2IwXCYjMzQ7IFwmIzM0OyRhX3AwXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDskYl9iMFwmIzM0OyBcJiMzNDskYl9wMFwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBiYXNlbGluZSBUWCBjb3VudGVyIHNuYXBzaG90IGludmFsaWRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdCMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eVxuJiM0MztcdCMgYWJvdmUsIG5vdCBtYXggdGhyb3VnaHB1dDsgcmV0cmFuc21pdHMgYXJlIGluZm9ybWF0aW9uYWwgb25seS5cbiYjNDM7XHQjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhXG4mIzQzO1x0IyBmdW5jdGlvbmFsIHByb2JsZW0uXG4mIzQzO1x0aWYgISBvdXQ9JChuc3ggXCYjMzQ7JG5zX3NhblwmIzM0OyBcJiMzNDt0aW1lb3V0IDYwIGlwZXJmMyAtYyAkcGVlcl9pcCAtTSAxNDQ2IFxcXG4mIzQzO1x0XHQtYiAyRyAtdCAxMFwmIzM0OyAyXHUwMDNlXHUwMDI2MSk7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIGNsaWVudCBmYWlsZWQ6XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyRvdXRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm5cbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQocmVhZF90eF9jb3VudGVycyBcJiMzNDskbnNfc2FuXCYjMzQ7IHMwKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIGFfYjEgYV9wMSBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9hKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIGJfYjEgYl9wMSBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iKVxuJiM0MztFT0ZcbiYjNDM7XHRpZiAhIHZhbGlkX2RlY2ltYWxzIFwmIzM0OyRzYW5fYjFcJiMzNDsgXCYjMzQ7JHNhbl9wMVwmIzM0OyBcJiMzNDskYV9iMVwmIzM0OyBcJiMzNDskYV9wMVwmIzM0OyBcXFxuJiM0MztcdFx0XCYjMzQ7JGJfYjFcJiMzNDsgXCYjMzQ7JGJfcDFcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRldmFsX2NvdW50ZXJfZGVsdGEgXCYjMzQ7U0FOIHMwIFRYXCYjMzQ7IFwmIzM0OyRzYW5fYjBcJiMzNDsgXCYjMzQ7JHNhbl9wMFwmIzM0OyBcJiMzNDskc2FuX2IxXCYjMzQ7IFwmIzM0OyRzYW5fcDFcJiMzNDsgXFxcbiYjNDM7XHRcdGd0IFwmIzM0OyRTQU5fQVZHX01JTlwmIzM0O1xuJiM0MztcdGV2YWxfY291bnRlcl9kZWx0YSBcJiMzNDtEVVQgZF9hIFRYXCYjMzQ7IFwmIzM0OyRhX2IwXCYjMzQ7IFwmIzM0OyRhX3AwXCYjMzQ7IFwmIzM0OyRhX2IxXCYjMzQ7IFwmIzM0OyRhX3AxXCYjMzQ7IFxcXG4mIzQzO1x0XHRsZSBcJiMzNDskTEFOX0FWR19NQVhcJiMzNDtcbiYjNDM7XHRldmFsX2NvdW50ZXJfZGVsdGEgXCYjMzQ7RFVUIGRfYiBUWFwmIzM0OyBcJiMzNDskYl9iMFwmIzM0OyBcJiMzNDskYl9wMFwmIzM0OyBcJiMzNDskYl9iMVwmIzM0OyBcJiMzNDskYl9wMVwmIzM0OyBcXFxuJiM0MztcdFx0bGUgXCYjMzQ7JExBTl9BVkdfTUFYXCYjMzQ7XG4mIzQzO1x0WyBcJiMzNDske3JldDotMH1cJiMzNDsgLWVxIDAgXSB8fCByZXR1cm5cbiYjNDM7XG4mIzQzO1x0IyBzdWNjZXNzIHBhdGg6IHRoZSBvbmUtc2hvdCBzZXJ2ZXIgZXhpdHMgYnkgaXRzZWxmOyByZWFwIHRoZVxuJiM0MztcdCMgd3JhcHBlciwgdGhlbiBSRVFVSVJFIHRoZSByY2ZpbGUgd2l0aCB0aGUgc2VydmVyJiMzOTtzIHJlYWwgc3RhdHVzXG4mIzQzO1x0d2FpdCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0O1xuJiM0MztcdHNlcnZlcl93cmFwcGVyPVwmIzM0O1wmIzM0O1xuJiM0MztcdGlmIFsgISAtcyBcJiMzNDske3JjZmlsZX1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIHN0YXR1cyBmaWxlIG1pc3NpbmcgKCR7cmNmaWxlfSlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm5cbiYjNDM7XHRmaVxuJiM0MztcdHNlcnZlcl9yYz0kKGNhdCBcJiMzNDske3JjZmlsZX1cJiMzNDspXG4mIzQzO1x0aWYgISBbWyBcJiMzNDskc2VydmVyX3JjXCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCBbIFwmIzM0OyRzZXJ2ZXJfcmNcJiMzNDsgLW5lIDAgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGV4aXRlZCB3aXRoIHJjPSYjMzk7JHtzZXJ2ZXJfcmN9JiMzOTtcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm5cbiYjNDM7XHRmaVxuJiM0MztcdGlwZXJmX3BpZD1cJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBzZWNvbmRhcnkgaGVhbHRoIHNpZ25hbCBvbmx5OiBhbmNob3JlZCwgc2luZ2xlLW1hdGNoLCBudW1lcmljIOKAlFxuJiM0MztcdCMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlclxuJiM0MztcdCMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLlxuJiM0MztcdHNlbmRlcl9yZXRyPSQoZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgYXdrICYjMzk7L3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0mIzM5OylcbiYjNDM7XHRpZiBbIFwmIzM0OyQoZWNobyBcJiMzNDskc2VuZGVyX3JldHJcJiMzNDsgfCBncmVwIC1FYyAmIzM5O15bMC05XSYjNDM7JCYjMzk7KVwmIzM0OyAtbmUgMSBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGNhbm5vdCBwYXJzZSBzZW5kZXIgcmV0cmFuc21pdHMgcmVsaWFibHlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7JG91dFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7XCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDtzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKVwmIzM0O1xuJiM0MztcdGVjaG8gXCYjMzQ7JG91dFwmIzM0OyB8IGdyZXAgLUUgXCYjMzQ7c2VuZGVyfHJlY2VpdmVyXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoZWNrX3ByZXJlcXVpc2l0ZXNcbiYjNDM7Y2hlY2tfdG9vbCBldGh0b29sXG4mIzQzO2NoZWNrX3Rvb2wgaXBlcmYzXG4mIzQzO2NoZWNrX3Rvb2wgdGltZW91dFxuJiM0MztcbiYjNDM7IyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LlxuJiM0MztpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xaSBpbnRlcmxpbms7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IGlwcm91dGUyIGhhcyBubyBIU1IgaW50ZXJsaW5rIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3NldHVwX3RvcG9cbiYjNDM7XG4mIzQzO2VjaG8gXCYjMzQ7SU5GTzogSW5pdGlhbCB2YWxpZGF0aW9uIHBpbmcgKFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgRFVUKS5cJiMzNDtcbiYjNDM7ZG9fcGluZyBcJiMzNDskbnNfc2FuXCYjMzQ7IFwmIzM0OyRwZWVyX2lwXCYjMzQ7XG4mIzQzO3N0b3BfaWZfZXJyb3IgXCYjMzQ7SW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC5cJiMzNDtcbiYjNDM7XG4mIzQzO2RvX2dyb19mZWF0dXJlX2NoZWNrc1xuJiM0Mztkb190c29fc3RyZWFtX3Rlc3RcbiYjNDM7c3RvcF9pZl9lcnJvciBcJiMzNDtHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC5cJiMzNDtcbiYjNDM7XG4mIzQzO2VjaG8gXCYjMzQ7SU5GTzogQWxsIGdvb2QuXCYjMzQ7XG4mIzQzO2NsZWFudXBcbiYjNDM7ZXhpdCAkcmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7aHNyX2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byBkaXNhYmxlIEdSTyBvbiBuZXQgZGV2aWNlcywgYW5kIG1vZGlmaWVzIHRoZSBIU1IgZHJpdmVyIHRvIHVuZm9sZCBHU08gc3VwZXItcGFja2V0cyBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgSFNSIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGJ5IHNlbmRpbmcgdHJhZmZpYyB0aHJvdWdoIGFuIEhTUiBpbnRlcmZhY2UsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhjZjc1NWE5ZDkyYjM5MDgxNzk2MGU3M2ZlODI3MzZkMGY0MGFkNzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDE1OjQ2OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggOTk4MWQ2MzdmOGI1NC4uZWJhMmMyNmE0OWJhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0zNDM0LDYgJiM0MzszNDM0LDggQEAgdm9pZCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspOwogdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZGV2X2xvb3BiYWNrX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpuZXdza2IpOwogdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggNTkzM2M1ZGFiMDllZS4uYTZjZjJhZGM4NjI1NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTE4NDAsNiAmIzQzOzE4NDAsMjQgQEAgdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCX0KIH0KIAomIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcl9kZXY7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CiYjNDM7CiYjNDM7CWRldi0mZ3Q7d2FudGVkX2ZlYXR1cmVzICZhbXA7PSB+KE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpOwomIzQzOwluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IChORVRJRl9GX0dSTyB8IE5FVElGX0ZfR1JPX0hXKSkpCiYjNDM7CQluZXRkZXZfV0FSTihkZXYsICYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgR1JPIVxuJiMzNDspOwomIzQzOwomIzQzOwluZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7CiYjNDM7CQluZXRkZXZfbG9ja19vcHMobG93ZXJfZGV2KTsKJiM0MzsJCW5ldGlmX2Rpc2FibGVfZ3JvKGxvd2VyX2Rldik7CiYjNDM7CQluZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoqCiAgKglkZXZfZGlzYWJsZV9ncm9faHcgLSBkaXNhYmxlIEhXIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlCiAgKglAZGV2OiBkZXZpY2UKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9hcGkuYyBiL25ldC9jb3JlL2Rldl9hcGkuYwppbmRleCA0Mzc5NDdkZDA4ZWQ1Li4wMmZiMjE2Mjk1MTI4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2X2FwaS5jCkBAIC0yNjksNiAmIzQzOzI2OSwyMiBAQCB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pOwogCiYjNDM7LyoqCiYjNDM7ICogZGV2X2Rpc2FibGVfZ3JvKCkgLSBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlCiYjNDM7ICogQGRldjogZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBEaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0IGRldmljZS4gIE11c3QgYmUKJiM0MzsgKiBjYWxsZWQgdW5kZXIgUlROTC4gIFRoaXMgaXMgbmVlZGVkIGlmIHJlY2VpdmVkIHBhY2tldHMgbWF5IGJlCiYjNDM7ICogZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLgomIzQzOyAqLwomIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsJbmV0aWZfZGlzYWJsZV9ncm8oZGV2KTsKJiM0MzsJbmV0ZGV2X3VubG9ja19vcHMoZGV2KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pOwomIzQzOwogLyoqCiAgKiBkZXZfc2V0X3Byb21pc2N1aXR5KCkgLSB1cGRhdGUgcHJvbWlzY3VpdHkgY291bnQgb24gYSBkZXZpY2UKICAqIEBkZXY6IGRldmljZQpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwppbmRleCA1NTU1YjcxYWIxOWI1Li4yNDhjYmIxNDJlMjFlIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwpAQCAtMjMyLDkgJiM0MzsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXNrYi0mZ3Q7ZGV2ID0gbWFzdGVyLSZndDtkZXY7CiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCXNrYl9yZXNldF9tYWNfbGVuKHNrYik7Ci0JCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJCWhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAl9IGVsc2UgewogCQlkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMzM1LDYgJiM0MzszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsCiAJCWhzcl9zdGFnLSZndDtzZXF1ZW5jZV9uciA9IGh0b25zKGhzci0mZ3Q7c2VxdWVuY2VfbnIpOwogCQloc3ItJmd0O3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKIAl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gdHlwZTsKIAkvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqLwpAQCAtMzU2LDE0ICYjNDM7MzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwKIAkJZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94KTsKIAl9CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCkBAIC0zOTAsNiAmIzQzOzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJaHNyX3N0YWctJmd0O3NlcXVlbmNlX25yID0gaHRvbnMoaHNyLSZndDtzdXBfc2VxdWVuY2VfbnIpOwogCWhzci0mZ3Q7c3VwX3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7CiAKQEAgLTM5NywxMyAmIzQzOzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlciwKIAloc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTsKIAlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIG1hc3Rlci0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTsKLQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiB9CiAKIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb24KQEAgLTY1OSw3ICYjNDM7NjUyLDcgQEAgdm9pZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiAKIAlkZXYtJmd0O2h3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfAotCQkJICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8CiYjNDM7CQkJICAgTkVUSUZfRl9IV19DU1VNIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjsKIApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCmluZGV4IDA3NzQ5ODFhNjVjMTYuLjNmY2RiYWM0OWM1OWQgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9nc28uaCZndDsKICNpbmNsdWRlICYjMzQ7aHNyX21haW4uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2hzcl9mcmFtZXJlZy5oJiMzNDsKIApAQCAtNjIxLDkgJiM0Mzs2MjIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChwb3J0LSZndDt0eXBlID09IEhTUl9QVF9NQVNURVIgfHwKIAkgICAgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7CiAJCS8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovCi0JCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAkJZnJhbWUtJmd0O3NlcXVlbmNlX25yID0gaHNyLSZndDtzZXF1ZW5jZV9ucjsKIAkJaHNyLSZndDtzZXF1ZW5jZV9uciYjNDM7JiM0Mzs7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJfQogfQogCkBAIC03MzEsNyAmIzQzOzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsCiB9CiAKIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovCi12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiYjNDM7c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lOwogCkBAIC03NjAsMyAmIzQzOzc2Miw1MCBAQCB2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiAJcG9ydC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKIAlrZnJlZV9za2Ioc2tiKTsKIH0KJiM0MzsKJiM0MzsvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzbwomIzQzOyAqIGVhY2ggd2lyZSBmcmFtZSBnZXRzIGl0cyBvd24gSFNSL1BSUCB0YWcgYW5kIHNlcXVlbmNlIG51bWJlci4KJiM0MzsgKi8KJiM0Mzt2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKm5leHQ7CiYjNDM7CiYjNDM7CWlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHsKJiM0MzsJCWhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBVbmZvbGQgb25seSBwbGFpbi1FdGhlcm5ldCBHU08gc3VwZXItcGFja2V0czogbG9jYWxseSBnZW5lcmF0ZWQKJiM0MzsJICogb24gdGhlIG1hc3Rlciwgb3IgYXJyaXZpbmcgdW50YWdnZWQgZnJvbSB0aGUgU0FOIHNpZGUgb24gdGhlCiYjNDM7CSAqIGludGVybGluay4gQSBzdXBlci1wYWNrZXQgZnJvbSBhIExBTiBzbGF2ZSBtYXkgY2FycnkgcGVyLWZyYW1lCiYjNDM7CSAqIEhTUiB0YWdzIC8gUFJQIFJDVCB0cmFpbGVycyB0aGF0IHNvZnR3YXJlIHNlZ21lbnRhdGlvbiBjYW5ub3QKJiM0MzsJICogcmVjb3ZlcjsgYW4gYWxyZWFkeS10YWdnZWQgSFNSL1BSUCBzdXBlci1wYWNrZXQgdmlvbGF0ZXMKJiM0MzsJICogcGVyLWZyYW1lIHdpcmUgc2VtYW50aWNzLiBEcm9wIGJvdGguCiYjNDM7CSAqLwomIzQzOwlpZiAocG9ydC0mZ3Q7dHlwZSAhPSBIU1JfUFRfTUFTVEVSICZhbXA7JmFtcDsgcG9ydC0mZ3Q7dHlwZSAhPSBIU1JfUFRfSU5URVJMSU5LKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSFNSKSB8fAomIzQzOwkgICAgc2tiLSZndDtwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9QUlApKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsKJiM0MzsJLyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWUKJiM0MzsJICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb20KJiM0MzsJICogdGhlIGludGVybGluayBmb2xsb3dzIFJYIGNoZWNrc3VtIHNlbWFudGljcy4KJiM0MzsJICovCiYjNDM7CXNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUik7CiYjNDM7CWlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsKJiM0MzsJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJd2hpbGUgKHNlZ3MpIHsKJiM0MzsJCW5leHQgPSBzZWdzLSZndDtuZXh0OwomIzQzOwkJc2Vncy0mZ3Q7bmV4dCA9IE5VTEw7CiYjNDM7CQloc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpOwomIzQzOwkJc2VncyA9IG5leHQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO2Ryb3BfZ3NvOgomIzQzOwlwb3J0LSZndDtkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwlrZnJlZV9za2Ioc2tiKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9zbGF2ZS5jIGIvbmV0L2hzci9oc3Jfc2xhdmUuYwppbmRleCAwMWM3M2I0YjUwZGRkLi4wY2E1NWQ5MzIzYzU3IDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX3NsYXZlLmMKQEAgLTczLDE2ICYjNDM7NzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYikKIAl9CiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAotCS8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhCi0JICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuCi0JICovCi0JaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykgewotCQlzcGluX2xvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCQloc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCX0gZWxzZSB7Ci0JCWhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpOwotCX0KJiM0MzsJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7CiAKIGZpbmlzaF9jb25zdW1lOgogCXJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEOwpAQCAtMTcwLDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChyZXMpCiAJCWdvdG8gZmFpbF9yeF9oYW5kbGVyOwogCWRldl9kaXNhYmxlX2xybyhkZXYpOwomIzQzOwlkZXZfZGlzYWJsZV9ncm8oZGV2KTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQppbmRleCAzMWZiOTMyNmNmNTMzLi4wZDEwNTQ3NmU3YzUwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKQEAgLTMsNiAmIzQzOzMsNyBAQAogdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uCiAKIFRFU1RfUFJPR1MgOj0gXAomIzQzOwloc3JfZ3JvX3N1cGVycGFja2V0LnNoIFwKIAloc3JfcGluZy5zaCBcCiAJaHNyX3JlZGJveC5zaCBcCiAJbGlua19mYXVsdHMuc2ggXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI4OGRlM2E2MGI4OTkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2gKQEAgLTAsMCAmIzQzOzEsNDYyIEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7IwomIzQzOyMgVGVzdCBIU1IgaGFuZGxpbmcgb2YgR1JPL0dTTyBzdXBlci1wYWNrZXRzOgomIzQzOyMKJiM0MzsjICAxLiBFbnNsYXZpbmcgYSBkZXZpY2UgdG8gYW4gSFNSIG1hc3RlciBkaXNhYmxlcyBHUk8gb24gaXQKJiM0MzsjICAgICAoZGV2X2Rpc2FibGVfZ3JvKCkpLgomIzQzOyMgIDIuIFRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPIGZlYXR1cmVzLgomIzQzOyMgIDMuIEEgVENQIHN0cmVhbSBmcm9tIGEgVFNPLWVuYWJsZWQgU0FOICh3aGljaCB0aGVyZWZvcmUgZW1pdHMgR1NPCiYjNDM7IyAgICAgc3VwZXItcGFja2V0cykgaXMgdW5mb2xkZWQgYXQgdGhlIEhTUiBmb3J3YXJkIGVudHJ5LiBFdmlkZW5jZToKJiM0MzsjICAgICBpbnRlcmZhY2UtY291bnRlciBkZWx0YXMgc2hvdyBzdXBlci1wYWNrZXQtc2l6ZWQgZnJhbWVzIGxlYXZpbmcKJiM0MzsjICAgICB0aGUgU0FOIGFuZCBwZXItZnJhbWUtc2l6ZWQgdHJhZmZpYyBsZWF2aW5nIHRoZSBEVVQmIzM5O3MgTEFOIHBvcnRzLgomIzQzOyMKJiM0MzsjIFRvcG9sb2d5ICgxMDAuNjQuMC4wLzI0KToKJiM0MzsjCiYjNDM7IyAgIG5zX3NhbiAgICAgICAgICAgICAgICAgICAgbnNfZHV0ICAgICAgICAgICAgICAgICAgICAgIG5zX3BlZXIKJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgIGludGVybGluayAgJiM0MzstLS0tLS0tLS0tLS0tLS0mIzQzOyAgTEFOIEEvQiAgJiM0MzstLS0tLS0tLS0tLSYjNDM7CiYjNDM7IyAgfCBzMCBbMC4xXSAgfC0tLS0tLS0tLS0tLS18IGRfaWwgICBoc3IwICAgfC0tLS0tLS0tLS0tfCBoc3IxIFswLjNdfAomIzQzOyMgICYjNDM7LS0tLS0tLS0tLS0mIzQzOyAgICAgICAgICAgICB8IGRfYSAvIGRfYiAgICAgfCAgICAgICAgICAgfCBwX2EgLyBwX2IgfAomIzQzOyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiM0MzstLS0tLS0tLS0tLS0tLS0mIzQzOyAgICAgICAgICAgJiM0MzstLS0tLS0tLS0tLSYjNDM7CiYjNDM7IwomIzQzOyMgU0FOIHRyYWZmaWMgcmVhY2hlcyBuc19wZWVyIG9ubHkgdGhyb3VnaCBoc3IwJiMzOTtzIGZvcndhcmQgcGF0aAomIzQzOyMgKGludGVybGluayBSWCAtJmd0OyBMQU4gQS9CIFRYKSwgc28gZXZlcnkgU0FOIGZyYW1lIGlzIHRhZ2dlZCBhbmQKJiM0MzsjIGZvcndhcmRlZCBieSB0aGUgRFVULgomIzQzOwomIzQzO3NvdXJjZSAuL2hzcl9jb21tb24uc2gKJiM0MzsKJiM0MztzYW5faXA9JiMzNDsxMDAuNjQuMC4xJiMzNDsKJiM0MztwZWVyX2lwPSYjMzQ7MTAwLjY0LjAuMyYjMzQ7CiYjNDM7CiYjNDM7IyBBZ2dyZWdhdGUgY291bnRlciB0aHJlc2hvbGRzIGZvciB0aGUgc3RyZWFtIHRlc3QgKGJ5dGVzL3BhY2tldHMpOgomIzQzOyMgU0FOX0FWR19NSU4gcHJvdmVzIEdTTyBzdXBlci1wYWNrZXRzIGxlZnQgdGhlIFNBTjsgTEFOX0FWR19NQVggaXMgYQomIzQzOyMgZ3VhcmQgd2l0aCBtYXJnaW4sIG5vdCB0aGUgcHJvdG9jb2wgbWF4aW11bSAoc2VlIGRvX3Rzb19zdHJlYW1fdGVzdCkuCiYjNDM7U0FOX0FWR19NSU49MjA0OAomIzQzO0xBTl9BVkdfTUFYPTE1MTQKJiM0MzsKJiM0MztpcGVyZl9waWQ9JiMzNDsmIzM0OwomIzQzO3NlcnZlcl93cmFwcGVyPSYjMzQ7JiMzNDsKJiM0Mzt3b3JrZGlyPSYjMzQ7JiMzNDsKJiM0MztwaWRmaWxlPSYjMzQ7JiMzNDsKJiM0MztyY2ZpbGU9JiMzNDsmIzM0OwomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJIyBleGFjdC1QSUQga2lsbCBvbmx5IGFmdGVyIFJFLXZhbGlkYXRpbmcgaWRlbnRpdHkgKGd1YXJkcyBhZ2FpbnN0CiYjNDM7CSMgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApCiYjNDM7CWlmIFsgLW4gJiMzNDske2lwZXJmX3BpZH0mIzM0OyBdICZhbXA7JmFtcDsgdmFsaWRfc2VydmVyX3BpZCAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7OyB0aGVuCiYjNDM7CQlraWxsICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZmkKJiM0MzsJaXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MzsJaWYgWyAtbiAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgXTsgdGhlbgomIzQzOwkJIyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cyBib3VuZCBzbyBhCiYjNDM7CQkjIGxpdmUtYnV0LXVucHVibGlzaGVkIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyBjbGVhbnVwCiYjNDM7CQlmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG8KJiM0MzsJCQlraWxsIC0wICYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn0mIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCBicmVhawomIzQzOwkJCXNsZWVwIDAuMQomIzQzOwkJZG9uZQomIzQzOwkJa2lsbCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCXdhaXQgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQlzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7CWZpCiYjNDM7CSMgbGFzdCByZXNvcnQsIG5hbWVzcGFjZS1zY29wZWQgb25seTogVEVSTSB0aGUgaXBlcmYzIHByb2Nlc3NlcyB0aGF0CiYjNDM7CSMgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgcGVlciBuZXRucywgcG9sbCBmb3IgYm91bmRlZCBleGl0LCB0aGVuCiYjNDM7CSMgU0lHS0lMTCBhbnkgc3Vydml2b3IgYmVmb3JlIHRvdWNoaW5nIHRoZSBuYW1lc3BhY2UgbmFtZS4gQSBibGluZAomIzQzOwkjIHBraWxsIHdvdWxkIHNjYW4gdGhlIGhvc3QgUElEIHNwYWNlIGFuZCBoaXQgdW5yZWxhdGVkIHRlc3RzLgomIzQzOwlsb2NhbCBfcCBfc3RpbGwKJiM0MzsJZm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyAmIzM0OyRuc19wZWVyJiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJaWYgaXNfaXBlcmYzX3BpZCAmIzM0OyRfcCYjMzQ7OyB0aGVuCiYjNDM7CQkJa2lsbCAmIzM0OyRfcCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQlmaQomIzQzOwlkb25lCiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJX3N0aWxsPTAKJiM0MzsJCWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDskbnNfcGVlciYjMzQ7IDImZ3Q7L2Rldi9udWxsKTsgZG8KJiM0MzsJCQlpZiBpc19pcGVyZjNfcGlkICYjMzQ7JF9wJiMzNDs7IHRoZW4KJiM0MzsJCQkJX3N0aWxsPTEKJiM0MzsJCQkJYnJlYWsKJiM0MzsJCQlmaQomIzQzOwkJZG9uZQomIzQzOwkJWyAmIzM0OyRfc3RpbGwmIzM0OyAtZXEgMCBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCXNsZWVwIDAuMQomIzQzOwlkb25lCiYjNDM7CWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDskbnNfcGVlciYjMzQ7IDImZ3Q7L2Rldi9udWxsKTsgZG8KJiM0MzsJCWlmIGlzX2lwZXJmM19waWQgJiMzNDskX3AmIzM0OzsgdGhlbgomIzQzOwkJCWtpbGwgLTkgJiMzNDskX3AmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwkJZmkKJiM0MzsJZG9uZQomIzQzOwkjIHJlbW92ZSBvbmx5IHRoZSBrbm93biBub24tZW1wdHkgcHJpdmF0ZSBkaXJlY3RvcnkKJiM0MzsJaWYgWyAtbiAmIzM0OyR7d29ya2Rpcn0mIzM0OyBdICZhbXA7JmFtcDsgWyAtZCAmIzM0OyR7d29ya2Rpcn0mIzM0OyBdOyB0aGVuCiYjNDM7CQlybSAtcmYgJiMzNDske3dvcmtkaXJ9JiMzNDsKJiM0MzsJZmkKJiM0MzsJd29ya2Rpcj0mIzM0OyYjMzQ7CiYjNDM7CXBpZGZpbGU9JiMzNDsmIzM0OwomIzQzOwlyY2ZpbGU9JiMzNDsmIzM0OwomIzQzOwljbGVhbnVwX2FsbF9ucwomIzQzO30KJiM0MzsKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOwomIzQzO2NoZWNrX3Rvb2woKQomIzQzO3sKJiM0MzsJaWYgISBjb21tYW5kIC12ICYjMzQ7JDEmIzM0OyAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O1NLSVA6IENvdWxkIG5vdCBydW4gdGVzdCB3aXRob3V0ICQxJiMzNDsKJiM0MzsJCWV4aXQgJGtzZnRfc2tpcAomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0Mztuc3goKQomIzQzO3sKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyQxJiMzNDsgYmFzaCAtYyAmIzM0OyQyJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7aXNfaXBlcmYzX3BpZCgpCiYjNDM7ewomIzQzOwlbICYjMzQ7JChjYXQgL3Byb2MvJiMzNDskMSYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF0KJiM0Mzt9CiYjNDM7CiYjNDM7IyBEZWNpbWFsLWNvdW50ZXIgdmFsaWRhdGlvbiBmb3IgdGhlIHNuYXBzaG90IGJsb2NrczogZXZlcnkgdmFsdWUgbXVzdAomIzQzOyMgYmUgYSBwbGFpbiBkZWNpbWFsIG51bWJlci4gQSBwYXJzZSBmYWlsdXJlIGluIHJlYWRfdHhfY291bnRlcnMgeWllbGRzCiYjNDM7IyBlbXB0eS9nYXJibGVkIGZpZWxkcywgd2hpY2ggdGhpcyBjaGVjayB0dXJucyBpbnRvIGFuIGltbWVkaWF0ZSBGQUlMLgomIzQzO3ZhbGlkX2RlY2ltYWxzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHYKJiM0MzsKJiM0MzsJZm9yIHYgaW4gJiMzNDskQCYjMzQ7OyBkbwomIzQzOwkJW1sgJiMzNDskdiYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCByZXR1cm4gMQomIzQzOwlkb25lCiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwomIzQzO3NldHVwX3RvcG8oKQomIzQzO3sKJiM0MzsJc2V0dXBfbnMgbnNfZHV0IG5zX3NhbiBuc19wZWVyIHx8IGV4aXQgJD8KJiM0MzsKJiM0MzsJaXAgbGluayBhZGQgZF9hIG5ldG5zICYjMzQ7JG5zX2R1dCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zICYjMzQ7JG5zX3BlZXImIzM0OwomIzQzOwlpcCBsaW5rIGFkZCBkX2IgbmV0bnMgJiMzNDskbnNfZHV0JiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2IgbmV0bnMgJiMzNDskbnNfcGVlciYjMzQ7CiYjNDM7CWlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgJiMzNDskbnNfZHV0JiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzMCBuZXRucyAmIzM0OyRuc19zYW4mIzM0OwomIzQzOwomIzQzOwkjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uCiYjNDM7CWZvciBpZmFjZSBpbiBkX2EgZF9iOyBkbwomIzQzOwkJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcCiYjNDM7CQkJaXAgbGluayBzZXQgJGlmYWNlIHVwJiMzNDsKJiM0MzsJZG9uZQomIzQzOwlmb3IgaWZhY2UgaW4gcF9hIHBfYjsgZG8KJiM0MzsJCW5zeCAmIzM0OyRuc19wZWVyJiMzNDsgJiMzNDtpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFwKJiM0MzsJCQlpcCBsaW5rIHNldCAkaWZhY2UgdXAmIzM0OwomIzQzOwlkb25lCiYjNDM7CiYjNDM7CW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgc2V0IGRfaWwgdXAmIzM0OwomIzQzOwluc3ggJiMzNDskbnNfc2FuJiMzNDsgJiMzNDtpcCBsaW5rIHNldCBzMCB1cDsgaXAgYWRkciBhZGQgJHNhbl9pcC8yNCBkZXYgczAmIzM0OwomIzQzOwomIzQzOwluc3ggJiMzNDskbnNfZHV0JiMzNDsgJiMzNDtpcCBsaW5rIGFkZCBoc3IwIHR5cGUgaHNyIFwKJiM0MzsJCXNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcCiYjNDM7CQlpcCBsaW5rIHNldCBoc3IwIHVwJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX3BlZXImIzM0OyAmIzM0O2lwIGxpbmsgYWRkIGhzcjEgdHlwZSBoc3IgXAomIzQzOwkJc2xhdmUxIHBfYSBzbGF2ZTIgcF9iIHByb3RvIDA7IFwKJiM0MzsJCWlwIGxpbmsgc2V0IGhzcjEgdXA7IGlwIGFkZHIgYWRkICRwZWVyX2lwLzI0IGRldiBoc3IxJiMzNDsKJiM0MzsKJiM0MzsJIyBMZXQgdGhlIG5vZGVzIHNlZSBlYWNoIG90aGVyJiMzOTtzIHN1cGVydmlzaW9uIGZyYW1lcy4KJiM0MzsJc2xlZXAgMgomIzQzO30KJiM0MzsKJiM0MztjaGVja19mZWF0dXJlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSYjMzQ7JDEmIzM0OwomIzQzOwlsb2NhbCBpZmFjZT0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgZmVhdHVyZT0mIzM0OyQzJiMzNDsKJiM0MzsJbG9jYWwgd2FudD0mIzM0OyQ0JiMzNDsKJiM0MzsKJiM0MzsJaWYgbnN4ICYjMzQ7JG5zJiMzNDsgJiMzNDtldGh0b29sIC1rICRpZmFjZSYjMzQ7IHwgZ3JlcCAtcSAmIzM0O14kZmVhdHVyZTogJHdhbnQmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0lORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgJHdhbnQgWyBPSyBdJiMzNDsKJiM0MzsJZWxzZQomIzQzOwkJZWNobyAmIzM0O0ZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgbm90ICR3YW50JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzOyMgT2ZmLW9yLWFic2VudCB2YXJpYW50OiBmYWlscyBvbmx5IHdoZW4gdGhlIGZlYXR1cmUgaXMgcHJlc2VudCBBTkQgb24sCiYjNDM7IyBzbyBkZXZpY2VzIHRoYXQgc2ltcGx5IGRvIG5vdCBsaXN0IHRoZSBmZWF0dXJlIGRvIG5vdCBmYWlsIGl0LgomIzQzO2NoZWNrX2ZlYXR1cmVfbm90X29uKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSYjMzQ7JDEmIzM0OwomIzQzOwlsb2NhbCBpZmFjZT0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgZmVhdHVyZT0mIzM0OyQzJiMzNDsKJiM0MzsKJiM0MzsJaWYgbnN4ICYjMzQ7JG5zJiMzNDsgJiMzNDtldGh0b29sIC1rICRpZmFjZSYjMzQ7IHwgZ3JlcCAtcSAmIzM0O14kZmVhdHVyZTogb24mIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgb24mIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJZWxzZQomIzQzOwkJZWNobyAmIzM0O0lORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgbm90IG9uIFsgT0sgXSYjMzQ7CiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO2RvX2dyb19mZWF0dXJlX2NoZWNrcygpCiYjNDM7ewomIzQzOwllY2hvICYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBHUk8uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2EgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfaWwgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmCiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtHUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuJiMzNDsKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgSFctR1JPLiYjMzQ7CiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9hIHJ4LWdyby1odyBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2IgcngtZ3JvLWh3IG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfaWwgcngtZ3JvLWh3IG9mZgomIzQzOwlzdG9wX2lmX2Vycm9yICYjMzQ7SFctR1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLiYjMzQ7CiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IHRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPLiYjMzQ7CiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgaHNyMCBnZW5lcmljLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZgomIzQzOwljaGVja19mZWF0dXJlX25vdF9vbiAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIHR4LXRjcDYtc2VnbWVudGF0aW9uCiYjNDM7CWNoZWNrX2ZlYXR1cmVfbm90X29uICYjMzQ7JG5zX2R1dCYjMzQ7IGhzcjAgdHgtdWRwLXNlZ21lbnRhdGlvbgomIzQzOwljaGVja19mZWF0dXJlX25vdF9vbiAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIHR4LWdzby1saXN0CiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPLWZhbWlseSBmZWF0dXJlcy4mIzM0OwomIzQzO30KJiM0MzsKJiM0MzthbGxvY193b3JrZGlyKCkKJiM0Mzt7CiYjNDM7CSMgQWxsb2NhdGVkIG9ubHkgaGVyZSwgbG9uZyBhZnRlciB0aGUgaW5pdGlhbCB0b3BvbG9neSBjbGVhbnVwLCBzbwomIzQzOwkjIGNsZWFudXAoKSBhdCBzZXR1cF90b3BvKCkgdGltZSBjYW4gbmV2ZXIgcmVtb3ZlIGl0LiBta3RlbXAgZmFpbHVyZQomIzQzOwkjIGlzIGEgaGFyZCB0ZXN0IGZhaWx1cmUuCiYjNDM7CXdvcmtkaXI9JChta3RlbXAgLWQgL3RtcC9oc3JfZ3JvX3Rlc3QuWFhYWFhYKSB8fCB7CiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbWt0ZW1wIC1kIGZhaWxlZCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0IDEKJiM0MzsJfQomIzQzOwljaG1vZCA3MDAgJiMzNDske3dvcmtkaXJ9JiMzNDsKJiM0MzsJcGlkZmlsZT0mIzM0OyR7d29ya2Rpcn0vaXBlcmYucGlkJiMzNDsKJiM0MzsJcmNmaWxlPSYjMzQ7JHt3b3JrZGlyfS9pcGVyZi5yYyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzOyMgTnVtZXJpYywgYWxpdmUsIGNvbW0gPT0gaXBlcmYzLCBhbmQgcmVhbGx5IG93bmVkIGJ5IHRoZSBwZWVyIG5ldG5zLgomIzQzO3ZhbGlkX3NlcnZlcl9waWQoKQomIzQzO3sKJiM0MzsJbG9jYWwgcD0mIzM0OyQxJiMzNDsKJiM0MzsKJiM0MzsJW1sgJiMzNDskcCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCByZXR1cm4gMQomIzQzOwlraWxsIC0wICYjMzQ7JHAmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCByZXR1cm4gMQomIzQzOwlbICYjMzQ7JChjYXQgL3Byb2MvJiMzNDskcCYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF0gfHwgcmV0dXJuIDEKJiM0MzsJaXAgbmV0bnMgcGlkcyAmIzM0OyRuc19wZWVyJiMzNDsgMiZndDsvZGV2L251bGwgfCBncmVwIC1xeCAmIzM0OyRwJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhcnRfaXBlcmZfc2VydmVyKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIGNhbmRpZGF0ZV9waWQKJiM0MzsKJiM0MzsJIyBPbmUtc2hvdCBzZXJ2ZXIsIG5vIC1EOiB0aGUgd3JhcHBlciByZWNvcmRzIGl0cyBleGFjdCBQSUQgYW5kIGl0cwomIzQzOwkjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLgomIzQzOwlhbGxvY193b3JrZGlyCiYjNDM7CSggbnN4ICYjMzQ7JG5zX3BlZXImIzM0OyAmIzM0O2lwZXJmMyAtcyAtMSAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MSAmYW1wOyBcCiYjNDM7CQllY2hvIFwkISAmZ3Q7ICR7cGlkZmlsZX07IFwKJiM0MzsJCXdhaXQgXCQhOyBcCiYjNDM7CQllY2hvIFwkPyAmZ3Q7ICR7cmNmaWxlfSYjMzQ7ICkgJmFtcDsKJiM0MzsJc2VydmVyX3dyYXBwZXI9JCEKJiM0MzsJIyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvCiYjNDM7CSMgYXBwZWFyIGluc3RlYWQgb2YgcmFjaW5nIHRoZSByZWFkCiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJWyAtcyAmIzM0OyR7cGlkZmlsZX0mIzM0OyBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCXNsZWVwIDAuMQomIzQzOwlkb25lCiYjNDM7CWlmIFsgISAtcyAmIzM0OyR7cGlkZmlsZX0mIzM0OyBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQmIzM0OyBcCiYjNDM7CQkJJiMzNDsobm8gcGlkZmlsZSkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWNhbmRpZGF0ZV9waWQ9JCgmbHQ7JiMzNDske3BpZGZpbGV9JiMzNDspCiYjNDM7CWlmICEgdmFsaWRfc2VydmVyX3BpZCAmIzM0OyR7Y2FuZGlkYXRlX3BpZH0mIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgcGlkICYjMzk7JHtjYW5kaWRhdGVfcGlkfSYjMzk7JiMzNDsgXAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHZhbGlkYXRpb24mIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CSMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvbgomIzQzOwlpcGVyZl9waWQ9JiMzNDske2NhbmRpZGF0ZV9waWR9JiMzNDsKJiM0MzsJc2xlZXAgMQomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIFByaW50ICYjMzQ7Jmx0O2J5dGVzJmd0OyAmbHQ7cGFja2V0cyZndDsmIzM0OyBmb3IgZXhhY3RseSBvbmUgVFggcmVjb3JkIG9mIG5zL2RldjsgYW55dGhpbmcKJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC4KJiM0MztyZWFkX3R4X2NvdW50ZXJzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSYjMzQ7JDEmIzM0OyBkZXY9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIG91dCBjbnQKJiM0MzsKJiM0MzsJb3V0PSQobnN4ICYjMzQ7JG5zJiMzNDsgJiMzNDtpcCAtcyBsaW5rIHNob3cgJGRldiYjMzQ7IHwgXAomIzQzOwkJYXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OykKJiM0MzsJY250PSQoZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLWMgJiMzOTteWzAtOV0qIFswLTldKiQmIzM5OykKJiM0MzsJaWYgWyAmIzM0OyRjbnQmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2JiMzNDsgXAomIzQzOwkJCSYjMzQ7KHJlY29yZHM9JGNudCkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJZWNobyAmIzM0OyRvdXQmIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MztldmFsX2NvdW50ZXJfZGVsdGEoKQomIzQzO3sKJiM0MzsJbG9jYWwgbmFtZT0mIzM0OyQxJiMzNDsgYjA9JiMzNDskMiYjMzQ7IHAwPSYjMzQ7JDMmIzM0OyBiMT0mIzM0OyQ0JiMzNDsgcDE9JiMzNDskNSYjMzQ7IG9wPSYjMzQ7JDYmIzM0OyBsaW1pdD0mIzM0OyQ3JiMzNDsKJiM0MzsJbG9jYWwgYmQgcGQKJiM0MzsKJiM0MzsJaWYgISBbWyAmIzM0OyRiMCYjMzQ7ID1+IF5bMC05XSYjNDM7JCAmYW1wOyZhbXA7ICYjMzQ7JGIxJiMzNDsgPX4gXlswLTldJiM0MzskICZhbXA7JmFtcDsgXAomIzQzOwkJJiMzNDskcDAmIzM0OyA9fiBeWzAtOV0mIzQzOyQgJmFtcDsmYW1wOyAmIzM0OyRwMSYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IG5vbi1udW1lcmljIGNvdW50ZXIgaW5wdXQgZm9yICRuYW1lJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwliZD0kKChiMSAtIGIwKSkKJiM0MzsJcGQ9JCgocDEgLSBwMCkpCiYjNDM7CWlmIFsgJiMzNDskYmQmIzM0OyAtbHQgMCBdIHx8IFsgJiMzNDskcGQmIzM0OyAtbGUgMCBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY291bnRlciBkZWx0YSBpbnZhbGlkIGZvciAkbmFtZSYjMzQ7IFwKJiM0MzsJCQkmIzM0OyhieXRlcz0kYmQgcGt0cz0kcGQpJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwlpZiBbICYjMzQ7JG9wJiMzNDsgPSAmIzM0O2d0JiMzNDsgXTsgdGhlbgomIzQzOwkJaWYgWyAmIzM0OyRiZCYjMzQ7IC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlbgomIzQzOwkJCWVjaG8gJiMzNDtGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgJmx0Oz0gJGxpbWl0JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCQlyZXQ9MQomIzQzOwkJCXJldHVybiAxCiYjNDM7CQlmaQomIzQzOwllbHNlCiYjNDM7CQlpZiBbICYjMzQ7JGJkJiMzNDsgLWd0ICQoKHBkICogbGltaXQpKSBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0O0ZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCAmZ3Q7ICRsaW1pdCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQkJcmV0PTEKJiM0MzsJCQlyZXR1cm4gMQomIzQzOwkJZmkKJiM0MzsJZmkKJiM0MzsJZWNobyAmIzM0O0lORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkJiMzNDsgXAomIzQzOwkJJiMzNDsob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdJiMzNDsKJiM0MzsJcmV0dXJuIDAKJiM0Mzt9CiYjNDM7CiYjNDM7ZG9fdHNvX3N0cmVhbV90ZXN0KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG91dCBzZW5kZXJfcmV0ciBzZXJ2ZXJfcmMKJiM0MzsJbG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxCiYjNDM7CWxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgYl9iMCBiX3AwIGJfYjEgYl9wMQomIzQzOwomIzQzOwllY2hvICYjMzQ7SU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS4mIzM0OwomIzQzOwluc3ggJiMzNDskbnNfc2FuJiMzNDsgJiMzNDtldGh0b29sIC1LIHMwIHRzbyBvbiBnc28gb24mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX3NhbiYjMzQ7IHMwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvbgomIzQzOwlzdG9wX2lmX2Vycm9yICYjMzQ7Q291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuJiMzNDsKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC0mZ3Q7IHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC4mIzM0OwomIzQzOwlzdGFydF9pcGVyZl9zZXJ2ZXIgfHwgcmV0dXJuCiYjNDM7CiYjNDM7CSMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZQomIzQzOwkjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0cwomIzQzOwkjIHJlYWxseSBsZWZ0IHRoZSBTQU4pOyBlYWNoIERVVCBMQU4gbGVnIG11c3Qgc3RheSB1bmRlciBMQU5fQVZHX01BWAomIzQzOwkjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlCiYjNDM7CSMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuCiYjNDM7CXNhbl9iMD0wOyBzYW5fcDA9MDsgYV9iMD0wOyBhX3AwPTA7IGJfYjA9MDsgYl9wMD0wCiYjNDM7CXJlYWQgLXIgc2FuX2IwIHNhbl9wMCAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19zYW4mIzM0OyBzMCkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBhX2IwIGFfcDAgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgZF9hKQomIzQzO0VPRgomIzQzOwlyZWFkIC1yIGJfYjAgYl9wMCAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19kdXQmIzM0OyBkX2IpCiYjNDM7RU9GCiYjNDM7CWlmICEgdmFsaWRfZGVjaW1hbHMgJiMzNDskc2FuX2IwJiMzNDsgJiMzNDskc2FuX3AwJiMzNDsgJiMzNDskYV9iMCYjMzQ7ICYjMzQ7JGFfcDAmIzM0OyBcCiYjNDM7CQkmIzM0OyRiX2IwJiMzNDsgJiMzNDskYl9wMCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogYmFzZWxpbmUgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwomIzQzOwkjIHJhdGUtY2FwcGVkOiB0aGUgUFJJTUFSWSBkaXNjcmltaW5hdG9yIGlzIHRoZSBjb3VudGVyIGluZXF1YWxpdHkKJiM0MzsJIyBhYm92ZSwgbm90IG1heCB0aHJvdWdocHV0OyByZXRyYW5zbWl0cyBhcmUgaW5mb3JtYXRpb25hbCBvbmx5LgomIzQzOwkjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhCiYjNDM7CSMgZnVuY3Rpb25hbCBwcm9ibGVtLgomIzQzOwlpZiAhIG91dD0kKG5zeCAmIzM0OyRuc19zYW4mIzM0OyAmIzM0O3RpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgXAomIzQzOwkJLWIgMkcgLXQgMTAmIzM0OyAyJmd0OyZhbXA7MSk7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBpcGVyZjMgY2xpZW50IGZhaWxlZDomIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJZWNobyAmIzM0OyRvdXQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwomIzQzOwlyZWFkIC1yIHNhbl9iMSBzYW5fcDEgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfc2FuJiMzNDsgczApCiYjNDM7RU9GCiYjNDM7CXJlYWQgLXIgYV9iMSBhX3AxICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYSkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBiX2IxIGJfcDEgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgZF9iKQomIzQzO0VPRgomIzQzOwlpZiAhIHZhbGlkX2RlY2ltYWxzICYjMzQ7JHNhbl9iMSYjMzQ7ICYjMzQ7JHNhbl9wMSYjMzQ7ICYjMzQ7JGFfYjEmIzM0OyAmIzM0OyRhX3AxJiMzNDsgXAomIzQzOwkJJiMzNDskYl9iMSYjMzQ7ICYjMzQ7JGJfcDEmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGZpbmFsIFRYIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsKJiM0MzsJZXZhbF9jb3VudGVyX2RlbHRhICYjMzQ7U0FOIHMwIFRYJiMzNDsgJiMzNDskc2FuX2IwJiMzNDsgJiMzNDskc2FuX3AwJiMzNDsgJiMzNDskc2FuX2IxJiMzNDsgJiMzNDskc2FuX3AxJiMzNDsgXAomIzQzOwkJZ3QgJiMzNDskU0FOX0FWR19NSU4mIzM0OwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtEVVQgZF9hIFRYJiMzNDsgJiMzNDskYV9iMCYjMzQ7ICYjMzQ7JGFfcDAmIzM0OyAmIzM0OyRhX2IxJiMzNDsgJiMzNDskYV9wMSYjMzQ7IFwKJiM0MzsJCWxlICYjMzQ7JExBTl9BVkdfTUFYJiMzNDsKJiM0MzsJZXZhbF9jb3VudGVyX2RlbHRhICYjMzQ7RFVUIGRfYiBUWCYjMzQ7ICYjMzQ7JGJfYjAmIzM0OyAmIzM0OyRiX3AwJiMzNDsgJiMzNDskYl9iMSYjMzQ7ICYjMzQ7JGJfcDEmIzM0OyBcCiYjNDM7CQlsZSAmIzM0OyRMQU5fQVZHX01BWCYjMzQ7CiYjNDM7CVsgJiMzNDske3JldDotMH0mIzM0OyAtZXEgMCBdIHx8IHJldHVybgomIzQzOwomIzQzOwkjIHN1Y2Nlc3MgcGF0aDogdGhlIG9uZS1zaG90IHNlcnZlciBleGl0cyBieSBpdHNlbGY7IHJlYXAgdGhlCiYjNDM7CSMgd3JhcHBlciwgdGhlbiBSRVFVSVJFIHRoZSByY2ZpbGUgd2l0aCB0aGUgc2VydmVyJiMzOTtzIHJlYWwgc3RhdHVzCiYjNDM7CXdhaXQgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7CiYjNDM7CXNlcnZlcl93cmFwcGVyPSYjMzQ7JiMzNDsKJiM0MzsJaWYgWyAhIC1zICYjMzQ7JHtyY2ZpbGV9JiMzNDsgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgc3RhdHVzIGZpbGUgbWlzc2luZyAoJHtyY2ZpbGV9KSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CXNlcnZlcl9yYz0kKGNhdCAmIzM0OyR7cmNmaWxlfSYjMzQ7KQomIzQzOwlpZiAhIFtbICYjMzQ7JHNlcnZlcl9yYyYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCBbICYjMzQ7JHNlcnZlcl9yYyYjMzQ7IC1uZSAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGV4aXRlZCB3aXRoIHJjPSYjMzk7JHtzZXJ2ZXJfcmN9JiMzOTsmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwlpcGVyZl9waWQ9JiMzNDsmIzM0OwomIzQzOwomIzQzOwkjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUCiYjNDM7CSMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlcgomIzQzOwkjIGdhdGVzICh0aGUgY291bnRlciBpbmVxdWFsaXRpZXMgYWJvdmUgYXJlIHRoZSBwcmltYXJ5IGV2aWRlbmNlKS4KJiM0MzsJc2VuZGVyX3JldHI9JChlY2hvICYjMzQ7JG91dCYjMzQ7IHwgYXdrICYjMzk7L3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0mIzM5OykKJiM0MzsJaWYgWyAmIzM0OyQoZWNobyAmIzM0OyRzZW5kZXJfcmV0ciYjMzQ7IHwgZ3JlcCAtRWMgJiMzOTteWzAtOV0mIzQzOyQmIzM5OykmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIHNlbmRlciByZXRyYW5zbWl0cyByZWxpYWJseSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7JiMzNDsgXAomIzQzOwkJJiMzNDtzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDskb3V0JiMzNDsgfCBncmVwIC1FICYjMzQ7c2VuZGVyfHJlY2VpdmVyJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hlY2tfcHJlcmVxdWlzaXRlcwomIzQzO2NoZWNrX3Rvb2wgZXRodG9vbAomIzQzO2NoZWNrX3Rvb2wgaXBlcmYzCiYjNDM7Y2hlY2tfdG9vbCB0aW1lb3V0CiYjNDM7CiYjNDM7IyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LgomIzQzO2lmICEgaXAgbGluayBoZWxwIGhzciAyJmd0OyZhbXA7MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydCYjMzQ7CiYjNDM7CWV4aXQgJGtzZnRfc2tpcAomIzQzO2ZpCiYjNDM7CiYjNDM7c2V0dXBfdG9wbwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC0mZ3Q7IHBlZXIgdGhyb3VnaCB0aGUgRFVUKS4mIzM0OwomIzQzO2RvX3BpbmcgJiMzNDskbnNfc2FuJiMzNDsgJiMzNDskcGVlcl9pcCYjMzQ7CiYjNDM7c3RvcF9pZl9lcnJvciAmIzM0O0luaXRpYWwgdmFsaWRhdGlvbiBmYWlsZWQuJiMzNDsKJiM0MzsKJiM0Mztkb19ncm9fZmVhdHVyZV9jaGVja3MKJiM0Mztkb190c29fc3RyZWFtX3Rlc3QKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7R1NPIHN1cGVyLXBhY2tldCBzdHJlYW0gdGVzdCBmYWlsZWQuJiMzNDsKJiM0MzsKJiM0MztlY2hvICYjMzQ7SU5GTzogQWxsIGdvb2QuJiMzNDsKJiM0MztjbGVhbnVwCiYjNDM7ZXhpdCAkcmV0CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTYwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR1JPIERpc2FibGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgaW50cm9kdWNlcyBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGZpbGVzLCBzcGVjaWZpY2FsbHkgYG5ldC9jb3JlL2Rldi5jYCBhbmQgYG5ldC9jb3JlL2Rldl9hcGkuY2AuIFRoYXQmIzM5O3MgYSBwcmV0dHkgbG93LWxldmVsIGNoYW5nZSwgaW1wYWN0aW5nIGZ1bmRhbWVudGFsIG5ldHdvcmsgZGV2aWNlIGJlaGF2aW9yLiBUaGVuLCBpdCB0b3VjaGVzIEhTUiAtIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgLSBjb2RlOiBgbmV0L2hzci9oc3JfZGV2aWNlLmNgLCBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCwgYW5kIGBuZXQvaHNyL2hzcl9zbGF2ZS5jYC4gTG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc3VwcG9ydCBmb3IgR1NPIHN1cGVyLXBhY2tldHMgaW4gdGhlIEhTUiBjb250ZXh0LiBBbmQgdGhlcmUmIzM5O3MgYSBzZWxmdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoYCwgd2hpY2ggaXMgZ29vZCB0byBzZWU7IGEgdGVzdCBzdWl0ZSBpcyBjcnVjaWFsIGhlcmUuCgpGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGlzIGEgcHJldHR5IGludGVyZXN0aW5nIGZ1bmN0aW9uYWwgcGF0Y2guIE1vZGlmeWluZyBib3RoIGNvcmUgbmV0d29ya2luZyBhbmQgc3BlY2lmaWMgZHJpdmVyIGNvZGUsIHBhcnRpY3VsYXJseSBvbmUgZGVhbGluZyB3aXRoIHJlZHVuZGFuY3kgYW5kIHBvdGVudGlhbGx5IGNvbXBsZXggZm9yd2FyZGluZyBsb2dpYyBtYWtlcyBtZSB0aGluayB0aGlzIHNob3VsZCBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gVGhlIGNoYW5nZXMgdG8gYGRldl9kaXNhYmxlX2dyb2AgaW4gY29yZSBhbmQgYG5ldC9oc3IvKmAgaW5kaWNhdGUgaXQgbWF5IGludGVyYWN0IHdpdGggb3RoZXIgbmV0d29ya2luZyBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgQ09ORklHIG9wdGlvbnMgYXJlIGludm9sdmVkLiBTaW5jZSB0aGUgSFNSIGNvZGUgaXMgaW4gYG5ldC9oc3IvYCwgSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9oc3IvS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgbmV0L0tjb25maWdgIHRvIHNlZSB3aGF0IGFjdHVhbGx5IGVuYWJsZXMgdGhlIEhTUiBmdW5jdGlvbmFsaXR5LiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIHVzIHRhcmdldCBvdXIgZnV6emluZyBhbmQgdGVzdGluZyBlZmZvcnRzIG1vcmUgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhTUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnLTUtXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXG5uZXQvaHNyL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0hpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcdTAwMjYgUFJQKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODMzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIENPTkZJR19IU1IgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGBDT05GSUdfSFNSYCBpcyB0aGUgYmlnIG9uZS4gVGhhdCYjMzk7cyB3aGVyZSB3ZSBzdGFydCwgb2YgY291cnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBCZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCwgb3IgdHdlYWtpbmcgcmVsYXRlZCBzZXR0aW5ncywgSSYjMzk7dmUgZ290IHRvIGVuc3VyZSBJIGhhdmUgYSBzb2xpZCBncmFzcCBvbiB3aGF0IG90aGVyIGNvbXBvbmVudHMsIGZlYXR1cmVzLCBvciBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGl0IG1pZ2h0IGhpbmdlIHVwb24uIEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcz8gRG9lcyBpdCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsIGtlcm5lbCBtb2R1bGVzLCBvciBvdGhlciBjb25maWcgb3B0aW9ucyB0byBiZSBhY3RpdmU/IE9yIHBvdGVudGlhbGx5IGNvbmZsaWN0cz8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcywgYm90aCBleHBsaWNpdCBhbmQgaW1wbGljaXQsIHRvIGZvcm0gdGhlIGJlc3QgYW5kIGNvbXBsZXRlIG1lbnRhbCBtb2RlbC4gR290dGEgbWFrZSBzdXJlIGl0IHdpbGwgbm90IGludHJvZHVjZSBjb25mbGljdHMsIGJlZm9yZSBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9oc3IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElFQyA2MjQzOS0zIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3lcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEhTUlxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgZW5hYmxlcyBJRUMgNjI0MzkgZGVmaW5lZCBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzc1xuICAxMDpcdFx0ICBSZWR1bmRhbmN5IChIU1IpIGFuZCBQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sIChQUlApLlxuICAxMTpcdFxuICAxMjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFcbiAgMTM6XHRcdCAgREFOSCAoXCYjMzQ7RG91Ymx5IGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIEhTUlwmIzM0Oykgb3IgREFOUCAoXCYjMzQ7RG91Ymx5XG4gIDE0Olx0XHQgIGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIFBSUFwmIzM0OykuIEZvciB0aGlzIHRvIHdvcmssIHlvdXIgTGludXggYm94XG4gIDE1Olx0XHQgIG5lZWRzIChhdCBsZWFzdCkgdHdvIHBoeXNpY2FsIEV0aGVybmV0IGludGVyZmFjZXMuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIEZvciBEQU5ILCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgaW4gYSByaW5nIG5ldHdvcmsgdG9nZXRoZXJcbiAgMTg6XHRcdCAgd2l0aCBvdGhlciBIU1IgY2FwYWJsZSBub2Rlcy4gQWxsIEV0aGVybmV0IGZyYW1lcyBzZW50IG92ZXIgdGhlIEhTUlxuICAxOTpcdFx0ICBkZXZpY2Ugd2lsbCBiZSBzZW50IGluIGJvdGggZGlyZWN0aW9ucyBvbiB0aGUgcmluZyAob3ZlciBib3RoIHNsYXZlXG4gIDIwOlx0XHQgIHBvcnRzKSwgZ2l2aW5nIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBFYWNoIEhTUiBub2RlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHUk8gRGlzYWJsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGludHJvZHVjaW5nIGFueXRoaW5nIHBhcnRpY3VsYXJseSBleG90aWMgaW4gdGVybXMgb2YgZGVwZW5kZW5jaWVzIOKAkyBqdXN0IHN0YW5kYXJkIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGltcGFjdGVkLiBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgYG5ldC9jb3JlL2Rldi5jYCBhbmQgYG5ldC9jb3JlL2Rldl9hcGkuY2AuIE15IGFpbSBpcyB0byBsb2NhdGUgYGRldl9kaXNhYmxlX2dyb2AgYW5kIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIGludGVncmF0ZWQuCgpBaCwgeWVzLCBpdCBsb29rcyBsaWtlIGBkZXZfZGlzYWJsZV9ncm9gIGlzIGluZGVlZCBhZGRlZCBhbmQgZXhwb3NlZC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGV4aXN0aW5nIGxvZ2ljLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBoc3JfZm9yd2FyZF9za2JgIGZ1bmN0aW9uLiBUaGlzIGlzIHNpZ25pZmljYW50LiBJJiMzOTtsbCBoYXZlIHRvIGRlbHZlIGludG8gdGhhdCBmdW5jdGlvbiB0byBzZWUgcHJlY2lzZWx5IGhvdyBHUk8gZGlzYWJsZW1lbnQgaXMgYmVpbmcgaW52b2tlZCBhbmQgd2h5LCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBmb3J3YXJkaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGZvciBkaXNhYmxpbmcgR1JPIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFdoYXQgaW1wYWN0IGRvZXMgdGhhdCBoYXZlIG9uIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eT8gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgaHNyX2ZvcndhcmRfc2tiYCB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2RldmljZS5jPTIyND1zdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjM0LVx0XHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xubmV0L2hzci9oc3JfZGV2aWNlLmM6MjM1Olx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtMjM2LVx0fSBlbHNlIHtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz0yOTE9c3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2MC1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjM2MTpcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtMzYyLX1cbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz0zNjQ9c3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzk4LVxubmV0L2hzci9oc3JfZGV2aWNlLmM6Mzk5Olx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbm5ldC9oc3IvaHNyX2RldmljZS5jLTQwMC19XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTY3OD1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03MzUtLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3MzY6c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzM3LXtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzY4LSAqL1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc2OTp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzcwLXtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzczLVx0aWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkge1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc3NDpcdFx0aHNyX2ZvcndhcmRfc2tiX29uZShza2IsIHBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3NS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MDItXHRcdHNlZ3MtXHUwMDNlbmV4dCA9IE5VTEw7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6ODAzOlx0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTgwNC1cdFx0c2VncyA9IG5leHQ7XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE1LVxubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE2OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTctc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYz0yND1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTc1LVxubmV0L2hzci9oc3Jfc2xhdmUuYzo3NjpcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy03Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgVHJhZmZpYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjb3VwbGUgb2Yga2V5IGZ1bmN0aW9uYWxpdGllcy4gRmlyc3QsIGl0JiMzOTtzIGFkZGluZyBgaHNyX2ZvcndhcmRfc2tiYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgcmVsYXRlZCB0byBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgcHJvY2VzcyBvZiBoYW5kbGluZyB0aG9zZSBsYXJnZSAmIzM0O3N1cGVyLXBhY2tldHMuJiMzNDsgSXQgc291bmRzIGxpa2Ugd2UmIzM5O3JlIHVuZm9sZGluZyB0aGVzZSwgbGlrZWx5IHRvIGRlYWwgd2l0aCB0aGVtIGFwcHJvcHJpYXRlbHkgd2l0aGluIHRoZSBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IpIGNvbnRleHQuCgpUaGVuIHdlJiMzOTt2ZSBnb3QgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIFRoZXNlIGFyZSBjbGVhcmx5IGFib3V0IGRpc2FibGluZyBHUk8gYXQgZGlmZmVyZW50IGxldmVscyDigJMgZGV2aWNlIGFuZCBuZXR3b3JrIGludGVyZmFjZSwgcmVzcGVjdGl2ZWx5LiBUaGlzIHRyaWdnZXJzIGEgcXVlc3Rpb247IHdoeSBhcmUgd2UgZGlzYWJsaW5nIEdSTz8gSXMgaXQgZHVlIHRvIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgb3IgY29uZmxpY3RzIHdpdGhpbiB0aGUgSFNSIGltcGxlbWVudGF0aW9uLCBvciBwZXJoYXBzIHRvIGVuc3VyZSBzcGVjaWZpYyBwYWNrZXQgaGFuZGxpbmcgYmVoYXZpb3VyPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdGhlcmUuCgpUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgZmxvdywgbGV0IG1lIHF1aWNrbHkgcmVmb2N1cyBvbiB0aGUgcHJvdmlkZWQga2V5IHN5bWJvbHM6IGBoc3JfZm9yd2FyZF9za2JgLCBhcyBtZW50aW9uZWQuIEFuZCB0aGVuLCBpdCBtZW50aW9ucyB0aGUgZGlzYWJsaW5nIGZ1bmN0aW9ucywgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIEdpdmVuIHRoZSBjb250ZXh0LCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYGhzcl9kZXZfeG1pdGAgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCBwb2ludHMuIFRoZXkmIzM5O3JlIGxpa2VseSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgSFNSLXNwZWNpZmljIHBhY2tldCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbiwgc28gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBhcmUgdGhlIGNvcnJlY3QgYW5kIGV4cGVjdGVkIHBsYWNlcyB3aGVyZSB0aGlzIGxvZ2ljIGludGVncmF0ZXMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBlYWNoIG9mIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoc3JfZGV2X3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz0yMTY9c3RhdGljIG5ldGRldl9mZWF0dXJlc190IGhzcl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjMtXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzoyMjQ6c3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjI1LXtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz01OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoc3JfZGV2aWNlX29wcyA9IHtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MDEtXHQubmRvX3N0b3AgPSBoc3JfZGV2X2Nsb3NlLFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjAyOlx0Lm5kb19zdGFydF94bWl0ID0gaHNyX2Rldl94bWl0LFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjAzLVx0Lm5kb19jaGFuZ2VfcnhfZmxhZ3MgPSBoc3JfY2hhbmdlX3J4X2ZsYWdzLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTY2ND1ib29sIGlzX2hzcl9tYXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2NS17XG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NjY6XHRyZXR1cm4gKGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0ID09IGhzcl9kZXZfeG1pdCk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02NjctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU5OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSFNSIERldmljZSBUcmFuc21pc3Npb24gYW5kIFJlY2VwdGlvbioqCgpBbHJpZ2h0LCBzbyBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBoc3JfZGV2X3htaXRgIGlzIGVzc2VudGlhbGx5IHRoZSBIU1Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYG5kb19zdGFydF94bWl0YC4gSW4gb3RoZXIgd29yZHMsIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgYWN0dWFsIHRyYW5zbWlzc2lvbiBvZiBmcmFtZXMgZm9yIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgZGV2aWNlcy4gU28sIHdoZW4gYSBmcmFtZSBuZWVkcyB0byBnbyBvdXQgb250byB0aGUgSFNSIG5ldHdvcmssIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgZ2V0dGluZyBjYWxsZWQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFuc21pc3Npb24gZm9yIEhTUiBkZXZpY2VzLiBPbiB0aGUgb3RoZXIgc2lkZSwgZm9yIHJlY2VpdmluZywgYGhzcl9oYW5kbGVfZnJhbWVgIGlzIHRoZSByZWdpc3RlcmVkIGhhbmRsZXIgZm9yIHRoZSBSWCBwcm9jZXNzLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBwcm9jZXNzaW5nIGluY29taW5nIEhTUiBmcmFtZXMuIEdvdCBpdC4gTm93LCB0aGUga2V5IGlzIGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlciB0byBhY2hpZXZlIHRoZSBzZWFtbGVzcyByZWR1bmRhbmN5IHRoYXQgSFNSIGlzIGtub3duIGZvciwgYW5kIHRoZSBkZXRhaWxzIG9mIHRoYXQgYXJlIGNyaXRpY2FsIHRvIGFuYWx5emUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz03MTM9aW50IGhzcl9kZXZfZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZVsyXSxcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy03MzktXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo3NDA6XHQvKiBNYWtlIHN1cmUgd2UgcmVjb2duaXplIGZyYW1lcyBmcm9tIG91cnNlbHZlcyBpbiBoc3JfaGFuZGxlX2ZyYW1lKCkgKi9cbm5ldC9oc3IvaHNyX2RldmljZS5jLTc0MS1cdHJlcyA9IGhzcl9jcmVhdGVfc2VsZl9ub2RlKGhzciwgaHNyX2Rldi1cdTAwM2VkZXZfYWRkcixcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jPTY2PWJvb2wgaHNyX2lzX25vZGVfaW5fZGIoc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYixcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTcxLVxubmV0L2hzci9oc3JfZnJhbWVyZWcuYzo3MjovKiBIZWxwZXIgZm9yIGRldmljZSBpbml0OyB0aGUgc2VsZl9ub2RlIGlzIHVzZWQgaW4gaHNyX2hhbmRsZV9mcmFtZSgpIHRvXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTczLSAqIHJlY29nbml6ZSBmcmFtZXMgZnJvbSBzZWxmIHRoYXQmIzM5O3MgYmVlbiBsb29wZWQgb3ZlciB0aGUgSFNSIHJpbmcuXG4tLVxubmV0L2hzci9oc3JfbWFpbi5jPTMxPXN0YXRpYyBpbnQgaHNyX25ldGRldl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5uZXQvaHNyL2hzcl9tYWluLmMtOTEtXG5uZXQvaHNyL2hzcl9tYWluLmM6OTI6XHRcdC8qIE1ha2Ugc3VyZSB3ZSByZWNvZ25pemUgZnJhbWVzIGZyb20gb3Vyc2VsdmVzIGluIGhzcl9oYW5kbGVfZnJhbWUoKSAqL1xubmV0L2hzci9oc3JfbWFpbi5jLTkzLVx0XHRwb3J0ID0gaHNyX3BvcnRfZ2V0X2hzcihoc3IsIEhTUl9QVF9TTEFWRV9CKTtcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTE5PWJvb2wgaHNyX2ludmFsaWRfZGFuX2luZ3Jlc3NfZnJhbWUoX19iZTE2IHByb3RvY29sKVxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmMtMjMtXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjI0OnN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxubmV0L2hzci9oc3Jfc2xhdmUuYy0yNS17XG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYz04NT1ib29sIGhzcl9wb3J0X2V4aXN0cyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2hzci9oc3Jfc2xhdmUuYy04Ni17XG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjg3Olx0cmV0dXJuIHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXHUwMDNlcnhfaGFuZGxlcikgPT0gaHNyX2hhbmRsZV9mcmFtZTtcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODgtfVxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmM9MTMyPXN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYy0xNTktXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjE2MDpcdHJlcyA9IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyKGRldiwgaHNyX2hhbmRsZV9mcmFtZSwgcG9ydCk7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTE2MS1cdGlmIChyZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjI2CgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDMzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSFNSIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBpcyBgaHNyX2ZvcndhcmRfc2tiYCBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQuIEFsc28sIHRoZSBSeCBoYW5kbGVyLCBgaHNyX2hhbmRsZV9mcmFtZWAsIGlzIHZpdGFsIHRvIHRoZSBIU1IgcHJvY2Vzc2luZyBmbG93LiAgVGhleSYjMzk7dmUgYWxzbyBpbnRyb2R1Y2VkIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIHdoaWNoIGFyZSBpbnRlcmVzdGluZyBhZGRpdGlvbnMuCgpUaGUgYEhTUmAgY29uZmlnIGlzIHRoZSBrZXkgdG8gZW5hYmxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LCB3aGljaCBtYWtlcyBjb21wbGV0ZSBzZW5zZS4gV2UgaGF2ZSB0byBkb3VibGUgY2hlY2sgaWYgYW55IG90aGVyIGNvbmZpZ3MgYXJlIG5lZWRlZCwgYnV0IHNpbmNlIGBuZXQvY29yZS9kZXYuY2AgaXMgYWx3YXlzIGNvbXBpbGVkIGFuZCBgbmV0L2hzci9gIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19IU1JgIGlzIGVuYWJsZWQsIHRoZW4gd2UgY2FuIGNvbmZpZGVudGx5IHN0YXRlIHRoYXQgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYFsmIzM0O0hTUiYjMzQ7XWAuCgpBcyBmb3Igd2hpY2ggZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nPyBXZWxsLCBiZXNpZGVzIGBoc3JfZm9yd2FyZF9za2JgLCB3ZSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIGFzIHRoZXNlIGFyZSBpbnRlZ3JhbCB0byB0aGUgR1JPIGRpc2FibGluZyBhc3BlY3Qgb2YgdGhlIGNoYW5nZXMgYW5kIHdvdWxkIGJlIGltcG9ydGFudCBmdXp6aW5nIHRhcmdldHMuICBCYXNlZCBvbiBteSBrbm93bGVkZ2UsIGBoc3JfZGV2X3htaXRgIHNob3VsZCBiZSBpbmNsdWRlZCBzaW5jZSBpdCBoYW5kbGVzIHRyYW5zbWlzc2lvbiwgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCBzaG91bGQgYWxzbyBiZSBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgcnggaGFuZGxlci4gVGh1cywgYEZvY3VzU3ltYm9sc2AgaXMgZGVmaW5lZCBhcyBgWyYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssICYjMzQ7ZGV2X2Rpc2FibGVfZ3JvJiMzNDssICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OywgJiMzNDtoc3JfZGV2X3htaXQmIzM0OywgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDtdYC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgYXJlIGV4cG9ydGVkPyBZZXMsIGFmdGVyIGEgcXVpY2sgY2hlY2sgdGhleSYjMzk7cmUgZXhwb3J0ZWQgaW4gYG5ldC9jb3JlL2Rldl9hcGkuY2AgYW5kIGBuZXQvY29yZS9kZXYuY2AsIHJlc3BlY3RpdmVseSwgc28gdGhleSBhcmUgYWNjZXNzaWJsZS4KClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25zIHRvIGRpc2FibGUgR1JPIGFuZCBtb2RpZmllcyB0aGUgSFNSIGRyaXZlciB0byB1bmZvbGQgR1NPIHN1cGVyLXBhY2tldHMgaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gZGlzYWJsZXMgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBuZXR3b3JraW5nIGNvcmUgYW5kIHRoZSBIU1IgZHJpdmVyLCBhbmQgYW55IHRyYWZmaWMgdGhyb3VnaCBhbiBIU1IgaW50ZXJmYWNlIGlzIGdvaW5nIHRvIHRvdWNoIHRoZXNlIG1vZGlmaWNhdGlvbnMuIFRoYXQgbWFrZXMgdGhlbSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGluZyB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIGlzIGEgcHJldHR5IG9idmlvdXMgY29uY2x1c2lvbi4KClJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIU1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OywKICAgICYjMzQ7ZGV2X2Rpc2FibGVfZ3JvJiMzNDssCiAgICAmIzM0O25ldGlmX2Rpc2FibGVfZ3JvJiMzNDssCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgdG8gZGlzYWJsZSBHUk8gb24gbmV0IGRldmljZXMsIGFuZCBtb2RpZmllcyB0aGUgSFNSIGRyaXZlciB0byB1bmZvbGQgR1NPIHN1cGVyLXBhY2tldHMgaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gZGlzYWJsZXMgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIEhTUiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBzZW5kaW5nIHRyYWZmaWMgdGhyb3VnaCBhbiBIU1IgaW50ZXJmYWNlLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7aHNyX2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byBkaXNhYmxlIEdSTyBvbiBuZXQgZGV2aWNlcywgYW5kIG1vZGlmaWVzIHRoZSBIU1IgZHJpdmVyIHRvIHVuZm9sZCBHU08gc3VwZXItcGFja2V0cyBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgSFNSIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGJ5IHNlbmRpbmcgdHJhZmZpYyB0aHJvdWdoIGFuIEhTUiBpbnRlcmZhY2UsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjI5LjYwOTE1Njg4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NzMyNjcwODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiLFxuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byBkaXNhYmxlIEdSTyBvbiBuZXQgZGV2aWNlcywgYW5kIG1vZGlmaWVzIHRoZSBIU1IgZHJpdmVyIHRvIHVuZm9sZCBHU08gc3VwZXItcGFja2V0cyBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgSFNSIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGJ5IHNlbmRpbmcgdHJhZmZpYyB0aHJvdWdoIGFuIEhTUiBpbnRlcmZhY2UsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDY6MjkuNjA5MTYyOTI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM1ODAyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4Y2Y3NTVhOWQ5MmIzOTA4MTc5NjBlNzNmZTgyNzM2ZDBmNDBhZDc5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTU6NDY6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCA5OTgxZDYzN2Y4YjU0Li5lYmEyYzI2YTQ5YmE4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuQEAgLTM0MzQsNiArMzQzNCw4IEBAIHZvaWQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xcbiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7XFxuIHUxNiBkZXZfcGlja190eF96ZXJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2Rldik7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCA1OTMzYzVkYWIwOWVlLi5hNmNmMmFkYzg2MjU2IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtMTg0MCw2ICsxODQwLDI0IEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0fVxcbiB9XFxuIFxcbit2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4rXFxuK1xcdGRldi1cXHUwMDNld2FudGVkX2ZlYXR1cmVzIFxcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XFxuK1xcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgKE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpKSlcXG4rXFx0XFx0bmV0ZGV2X1dBUk4oZGV2LCBcXFwiZmFpbGVkIHRvIGRpc2FibGUgR1JPIVxcXFxuXFxcIik7XFxuK1xcbitcXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XFxuK1xcdFxcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xcbitcXHRcXHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xcbitcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qKlxcbiAgKlxcdGRldl9kaXNhYmxlX2dyb19odyAtIGRpc2FibGUgSFcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcXG4gICpcXHRAZGV2OiBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FwaS5jIGIvbmV0L2NvcmUvZGV2X2FwaS5jXFxuaW5kZXggNDM3OTQ3ZGQwOGVkNS4uMDJmYjIxNjI5NTEyOCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXZfYXBpLmNcXG4rKysgYi9uZXQvY29yZS9kZXZfYXBpLmNcXG5AQCAtMjY5LDYgKzI2OSwyMiBAQCB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcXG4gXFxuKy8qKlxcbisgKiBkZXZfZGlzYWJsZV9ncm8oKSAtIGRpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcXG4rICogQGRldjogZGV2aWNlXFxuKyAqXFxuKyAqIERpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgb24gYSBuZXQgZGV2aWNlLiAgTXVzdCBiZVxcbisgKiBjYWxsZWQgdW5kZXIgUlROTC4gIFRoaXMgaXMgbmVlZGVkIGlmIHJlY2VpdmVkIHBhY2tldHMgbWF5IGJlXFxuKyAqIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS5cXG4rICovXFxuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuK1xcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XFxuK1xcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pO1xcbitcXG4gLyoqXFxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxcbiAgKiBAZGV2OiBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbmluZGV4IDU1NTViNzFhYjE5YjUuLjI0OGNiYjE0MmUyMWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3JfZGV2aWNlLmNcXG4rKysgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbkBAIC0yMzIsOSArMjMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRza2ItXFx1MDAzZWRldiA9IG1hc3Rlci1cXHUwMDNlZGV2O1xcbiBcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xcbiBcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbkBAIC0zMzUsNiArMzMzLDcgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxcbiBcXHRcXHRoc3Jfc3RhZy1cXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXFx1MDAzZXNlcXVlbmNlX25yKTtcXG4gXFx0XFx0aHNyLVxcdTAwM2VzZXF1ZW5jZV9ucisrO1xcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xcbiBcXHQvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqL1xcbkBAIC0zNTYsMTQgKzM1NSwxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuIFxcdFxcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXFx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVxcdTAwM2VtYWNhZGRyZXNzX3JlZGJveCk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbitcXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuIFxcbiBcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLVxcdHJldHVybjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXFxuQEAgLTM5MCw2ICszODUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHRoc3Jfc3RhZy1cXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXFx1MDAzZXN1cF9zZXF1ZW5jZV9ucik7XFxuIFxcdGhzci1cXHUwMDNlc3VwX3NlcXVlbmNlX25yKys7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHRoc3Jfc3RhZy1cXHUwMDNldGx2LkhTUl9UTFZfdHlwZSA9IFBSUF9UTFZfTElGRV9DSEVDS19ERDtcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTtcXG4gXFxuQEAgLTM5NywxMyArMzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbiBcXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbiBcXG4tXFx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuK1xcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4gXFxuIFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XFxuLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiB9XFxuIFxcbiAvKiBBbm5vdW5jZSAoc3VwZXJ2aXNpb24gZnJhbWUpIHRpbWVyIGZ1bmN0aW9uXFxuQEAgLTY1OSw3ICs2NTIsNyBAQCB2b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuIFxcbiBcXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfFxcbi1cXHRcXHRcXHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcXG4rXFx0XFx0XFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcXG4gXFx0XFx0XFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxcbiBcXHRcXHRcXHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG5pbmRleCAwNzc0OTgxYTY1YzE2Li4zZmNkYmFjNDljNTlkIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZ3NvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJoc3JfbWFpbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaHNyX2ZyYW1lcmVnLmhcXFwiXFxuIFxcbkBAIC02MjEsOSArNjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxcbiBcXHQgICAgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XFxuIFxcdFxcdC8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovXFxuLVxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0XFx0ZnJhbWUtXFx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVxcdTAwM2VzZXF1ZW5jZV9ucjtcXG4gXFx0XFx0aHNyLVxcdTAwM2VzZXF1ZW5jZV9ucisrO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC03MzEsNyArNzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4gfVxcbiBcXG4gLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbitzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4ge1xcbiBcXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7XFxuIFxcbkBAIC03NjAsMyArNzYyLDUwIEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4gXFx0cG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbiB9XFxuK1xcbisvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xcbisgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuXFxuKyAqL1xcbit2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0O1xcbitcXG4rXFx0aWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkge1xcbitcXHRcXHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogVW5mb2xkIG9ubHkgcGxhaW4tRXRoZXJuZXQgR1NPIHN1cGVyLXBhY2tldHM6IGxvY2FsbHkgZ2VuZXJhdGVkXFxuK1xcdCAqIG9uIHRoZSBtYXN0ZXIsIG9yIGFycml2aW5nIHVudGFnZ2VkIGZyb20gdGhlIFNBTiBzaWRlIG9uIHRoZVxcbitcXHQgKiBpbnRlcmxpbmsuIEEgc3VwZXItcGFja2V0IGZyb20gYSBMQU4gc2xhdmUgbWF5IGNhcnJ5IHBlci1mcmFtZVxcbitcXHQgKiBIU1IgdGFncyAvIFBSUCBSQ1QgdHJhaWxlcnMgdGhhdCBzb2Z0d2FyZSBzZWdtZW50YXRpb24gY2Fubm90XFxuK1xcdCAqIHJlY292ZXI7IGFuIGFscmVhZHktdGFnZ2VkIEhTUi9QUlAgc3VwZXItcGFja2V0IHZpb2xhdGVzXFxuK1xcdCAqIHBlci1mcmFtZSB3aXJlIHNlbWFudGljcy4gRHJvcCBib3RoLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgIT0gSFNSX1BUX01BU1RFUiBcXHUwMDI2XFx1MDAyNiBwb3J0LVxcdTAwM2V0eXBlICE9IEhTUl9QVF9JTlRFUkxJTkspXFxuK1xcdFxcdGdvdG8gZHJvcF9nc287XFxuK1xcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0hTUikgfHxcXG4rXFx0ICAgIHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUFJQKSlcXG4rXFx0XFx0Z290byBkcm9wX2dzbztcXG4rXFxuK1xcdC8qIGZlYXR1cmVzID0gMDogcmVxdWVzdCBmdWxsIHNvZnR3YXJlIHNlZ21lbnRhdGlvbi4gdHhfcGF0aCBpcyB0cnVlXFxuK1xcdCAqIG9ubHkgZm9yIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYWZmaWMgb24gdGhlIG1hc3RlcjsgaW5ncmVzcyBmcm9tXFxuK1xcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXFxuK1xcdCAqL1xcbitcXHRzZWdzID0gX19za2JfZ3NvX3NlZ21lbnQoc2tiLCAwLCBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpO1xcbitcXHRpZiAoSVNfRVJSKHNlZ3MpIHx8IHVubGlrZWx5KCFzZWdzKSlcXG4rXFx0XFx0Z290byBkcm9wX2dzbztcXG4rXFxuK1xcdGNvbnN1bWVfc2tiKHNrYik7XFxuK1xcdHdoaWxlIChzZWdzKSB7XFxuK1xcdFxcdG5leHQgPSBzZWdzLVxcdTAwM2VuZXh0O1xcbitcXHRcXHRzZWdzLVxcdTAwM2VuZXh0ID0gTlVMTDtcXG4rXFx0XFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcXG4rXFx0XFx0c2VncyA9IG5leHQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuO1xcbitcXG4rZHJvcF9nc286XFxuK1xcdHBvcnQtXFx1MDAzZWRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRrZnJlZV9za2Ioc2tiKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9zbGF2ZS5jIGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbmluZGV4IDAxYzczYjRiNTBkZGQuLjBjYTU1ZDkzMjNjNTcgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbisrKyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcXG5AQCAtNzMsMTYgKzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdH1cXG4gXFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcXG4gXFxuLVxcdC8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhXFxuLVxcdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xcbi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLVxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuLVxcdH1cXG4rXFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuIFxcbiBmaW5pc2hfY29uc3VtZTpcXG4gXFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XFxuQEAgLTE3MCw2ICsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRnb3RvIGZhaWxfcnhfaGFuZGxlcjtcXG4gXFx0ZGV2X2Rpc2FibGVfbHJvKGRldik7XFxuK1xcdGRldl9kaXNhYmxlX2dybyhkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbmluZGV4IDMxZmI5MzI2Y2Y1MzMuLjBkMTA1NDc2ZTdjNTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG5AQCAtMyw2ICszLDcgQEBcXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXFxuIFxcbiBURVNUX1BST0dTIDo9IFxcXFxcXG4rXFx0aHNyX2dyb19zdXBlcnBhY2tldC5zaCBcXFxcXFxuIFxcdGhzcl9waW5nLnNoIFxcXFxcXG4gXFx0aHNyX3JlZGJveC5zaCBcXFxcXFxuIFxcdGxpbmtfZmF1bHRzLnNoIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yODhkZTNhNjBiODk5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxcbkBAIC0wLDAgKzEsNDYyIEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcXG4rI1xcbisjICAxLiBFbnNsYXZpbmcgYSBkZXZpY2UgdG8gYW4gSFNSIG1hc3RlciBkaXNhYmxlcyBHUk8gb24gaXRcXG4rIyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cXG4rIyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXFxuKyMgIDMuIEEgVENQIHN0cmVhbSBmcm9tIGEgVFNPLWVuYWJsZWQgU0FOICh3aGljaCB0aGVyZWZvcmUgZW1pdHMgR1NPXFxuKyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6XFxuKyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xcbisjICAgICB0aGUgU0FOIGFuZCBwZXItZnJhbWUtc2l6ZWQgdHJhZmZpYyBsZWF2aW5nIHRoZSBEVVQncyBMQU4gcG9ydHMuXFxuKyNcXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XFxuKyNcXG4rIyAgIG5zX3NhbiAgICAgICAgICAgICAgICAgICAgbnNfZHV0ICAgICAgICAgICAgICAgICAgICAgIG5zX3BlZXJcXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xcbisjICB8IHMwIFswLjFdICB8LS0tLS0tLS0tLS0tLXwgZF9pbCAgIGhzcjAgICB8LS0tLS0tLS0tLS18IGhzcjEgWzAuM118XFxuKyMgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHxcXG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xcbisjXFxuKyMgU0FOIHRyYWZmaWMgcmVhY2hlcyBuc19wZWVyIG9ubHkgdGhyb3VnaCBoc3IwJ3MgZm9yd2FyZCBwYXRoXFxuKyMgKGludGVybGluayBSWCAtXFx1MDAzZSBMQU4gQS9CIFRYKSwgc28gZXZlcnkgU0FOIGZyYW1lIGlzIHRhZ2dlZCBhbmRcXG4rIyBmb3J3YXJkZWQgYnkgdGhlIERVVC5cXG4rXFxuK3NvdXJjZSAuL2hzcl9jb21tb24uc2hcXG4rXFxuK3Nhbl9pcD1cXFwiMTAwLjY0LjAuMVxcXCJcXG4rcGVlcl9pcD1cXFwiMTAwLjY0LjAuM1xcXCJcXG4rXFxuKyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKTpcXG4rIyBTQU5fQVZHX01JTiBwcm92ZXMgR1NPIHN1cGVyLXBhY2tldHMgbGVmdCB0aGUgU0FOOyBMQU5fQVZHX01BWCBpcyBhXFxuKyMgZ3VhcmQgd2l0aCBtYXJnaW4sIG5vdCB0aGUgcHJvdG9jb2wgbWF4aW11bSAoc2VlIGRvX3Rzb19zdHJlYW1fdGVzdCkuXFxuK1NBTl9BVkdfTUlOPTIwNDhcXG4rTEFOX0FWR19NQVg9MTUxNFxcbitcXG4raXBlcmZfcGlkPVxcXCJcXFwiXFxuK3NlcnZlcl93cmFwcGVyPVxcXCJcXFwiXFxuK3dvcmtkaXI9XFxcIlxcXCJcXG4rcGlkZmlsZT1cXFwiXFxcIlxcbityY2ZpbGU9XFxcIlxcXCJcXG4rXFxuK2NsZWFudXAoKVxcbit7XFxuK1xcdCMgZXhhY3QtUElEIGtpbGwgb25seSBhZnRlciBSRS12YWxpZGF0aW5nIGlkZW50aXR5IChndWFyZHMgYWdhaW5zdFxcbitcXHQjIFBJRCByZXVzZSBiZXR3ZWVuIHB1YmxpY2F0aW9uIGFuZCBjbGVhbnVwKVxcbitcXHRpZiBbIC1uIFxcXCIke2lwZXJmX3BpZH1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgdmFsaWRfc2VydmVyX3BpZCBcXFwiJHtpcGVyZl9waWR9XFxcIjsgdGhlblxcbitcXHRcXHRraWxsIFxcXCIke2lwZXJmX3BpZH1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGZpXFxuK1xcdGlwZXJmX3BpZD1cXFwiXFxcIlxcbitcXHRpZiBbIC1uIFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCIgXTsgdGhlblxcbitcXHRcXHQjIHRoZSB3cmFwcGVyIHdhaXRzIG9uIHRoZSBzZXJ2ZXI7IHJlYXAgaXQgd2l0aCBhIDVzIGJvdW5kIHNvIGFcXG4rXFx0XFx0IyBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyIGhhbmcgY2xlYW51cFxcbitcXHRcXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cXG4rXFx0XFx0XFx0a2lsbCAtMCBcXFwiJHtzZXJ2ZXJfd3JhcHBlcn1cXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXFxuK1xcdFxcdFxcdHNsZWVwIDAuMVxcbitcXHRcXHRkb25lXFxuK1xcdFxcdGtpbGwgXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRcXHR3YWl0IFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0c2VydmVyX3dyYXBwZXI9XFxcIlxcXCJcXG4rXFx0ZmlcXG4rXFx0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjMgcHJvY2Vzc2VzIHRoYXRcXG4rXFx0IyBhY3R1YWxseSBsaXZlIGluIHRoZSBwZWVyIG5ldG5zLCBwb2xsIGZvciBib3VuZGVkIGV4aXQsIHRoZW5cXG4rXFx0IyBTSUdLSUxMIGFueSBzdXJ2aXZvciBiZWZvcmUgdG91Y2hpbmcgdGhlIG5hbWVzcGFjZSBuYW1lLiBBIGJsaW5kXFxuK1xcdCMgcGtpbGwgd291bGQgc2NhbiB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuXFxuK1xcdGxvY2FsIF9wIF9zdGlsbFxcbitcXHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFxcXCIkbnNfcGVlclxcXCIgMlxcdTAwM2UvZGV2L251bGwpOyBkb1xcbitcXHRcXHRpZiBpc19pcGVyZjNfcGlkIFxcXCIkX3BcXFwiOyB0aGVuXFxuK1xcdFxcdFxcdGtpbGwgXFxcIiRfcFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0ZmlcXG4rXFx0ZG9uZVxcbitcXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cXG4rXFx0XFx0X3N0aWxsPTBcXG4rXFx0XFx0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcXFwiJG5zX3BlZXJcXFwiIDJcXHUwMDNlL2Rldi9udWxsKTsgZG9cXG4rXFx0XFx0XFx0aWYgaXNfaXBlcmYzX3BpZCBcXFwiJF9wXFxcIjsgdGhlblxcbitcXHRcXHRcXHRcXHRfc3RpbGw9MVxcbitcXHRcXHRcXHRcXHRicmVha1xcbitcXHRcXHRcXHRmaVxcbitcXHRcXHRkb25lXFxuK1xcdFxcdFsgXFxcIiRfc3RpbGxcXFwiIC1lcSAwIF0gXFx1MDAyNlxcdTAwMjYgYnJlYWtcXG4rXFx0XFx0c2xlZXAgMC4xXFxuK1xcdGRvbmVcXG4rXFx0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcXFwiJG5zX3BlZXJcXFwiIDJcXHUwMDNlL2Rldi9udWxsKTsgZG9cXG4rXFx0XFx0aWYgaXNfaXBlcmYzX3BpZCBcXFwiJF9wXFxcIjsgdGhlblxcbitcXHRcXHRcXHRraWxsIC05IFxcXCIkX3BcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdFxcdGZpXFxuK1xcdGRvbmVcXG4rXFx0IyByZW1vdmUgb25seSB0aGUga25vd24gbm9uLWVtcHR5IHByaXZhdGUgZGlyZWN0b3J5XFxuK1xcdGlmIFsgLW4gXFxcIiR7d29ya2Rpcn1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyAtZCBcXFwiJHt3b3JrZGlyfVxcXCIgXTsgdGhlblxcbitcXHRcXHRybSAtcmYgXFxcIiR7d29ya2Rpcn1cXFwiXFxuK1xcdGZpXFxuK1xcdHdvcmtkaXI9XFxcIlxcXCJcXG4rXFx0cGlkZmlsZT1cXFwiXFxcIlxcbitcXHRyY2ZpbGU9XFxcIlxcXCJcXG4rXFx0Y2xlYW51cF9hbGxfbnNcXG4rfVxcbitcXG4rdHJhcCBjbGVhbnVwIEVYSVRcXG4rXFxuK2NoZWNrX3Rvb2woKVxcbit7XFxuK1xcdGlmICEgY29tbWFuZCAtdiBcXFwiJDFcXFwiIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjE7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiU0tJUDogQ291bGQgbm90IHJ1biB0ZXN0IHdpdGhvdXQgJDFcXFwiXFxuK1xcdFxcdGV4aXQgJGtzZnRfc2tpcFxcbitcXHRmaVxcbit9XFxuK1xcbituc3goKVxcbit7XFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiQxXFxcIiBiYXNoIC1jIFxcXCIkMlxcXCJcXG4rfVxcbitcXG4raXNfaXBlcmYzX3BpZCgpXFxuK3tcXG4rXFx0WyBcXFwiJChjYXQgL3Byb2MvXFxcIiQxXFxcIi9jb21tIDJcXHUwMDNlL2Rldi9udWxsKVxcXCIgPSBcXFwiaXBlcmYzXFxcIiBdXFxuK31cXG4rXFxuKyMgRGVjaW1hbC1jb3VudGVyIHZhbGlkYXRpb24gZm9yIHRoZSBzbmFwc2hvdCBibG9ja3M6IGV2ZXJ5IHZhbHVlIG11c3RcXG4rIyBiZSBhIHBsYWluIGRlY2ltYWwgbnVtYmVyLiBBIHBhcnNlIGZhaWx1cmUgaW4gcmVhZF90eF9jb3VudGVycyB5aWVsZHNcXG4rIyBlbXB0eS9nYXJibGVkIGZpZWxkcywgd2hpY2ggdGhpcyBjaGVjayB0dXJucyBpbnRvIGFuIGltbWVkaWF0ZSBGQUlMLlxcbit2YWxpZF9kZWNpbWFscygpXFxuK3tcXG4rXFx0bG9jYWwgdlxcbitcXG4rXFx0Zm9yIHYgaW4gXFxcIiRAXFxcIjsgZG9cXG4rXFx0XFx0W1sgXFxcIiR2XFxcIiA9fiBeWzAtOV0rJCBdXSB8fCByZXR1cm4gMVxcbitcXHRkb25lXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuK3NldHVwX3RvcG8oKVxcbit7XFxuK1xcdHNldHVwX25zIG5zX2R1dCBuc19zYW4gbnNfcGVlciB8fCBleGl0ICQ/XFxuK1xcbitcXHRpcCBsaW5rIGFkZCBkX2EgbmV0bnMgXFxcIiRuc19kdXRcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zIFxcXCIkbnNfcGVlclxcXCJcXG4rXFx0aXAgbGluayBhZGQgZF9iIG5ldG5zIFxcXCIkbnNfZHV0XFxcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyBcXFwiJG5zX3BlZXJcXFwiXFxuK1xcdGlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgXFxcIiRuc19kdXRcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgczAgbmV0bnMgXFxcIiRuc19zYW5cXFwiXFxuK1xcbitcXHQjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uXFxuK1xcdGZvciBpZmFjZSBpbiBkX2EgZF9iOyBkb1xcbitcXHRcXHRuc3ggXFxcIiRuc19kdXRcXFwiIFxcXCJpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFxcXFxcXG4rXFx0XFx0XFx0aXAgbGluayBzZXQgJGlmYWNlIHVwXFxcIlxcbitcXHRkb25lXFxuK1xcdGZvciBpZmFjZSBpbiBwX2EgcF9iOyBkb1xcbitcXHRcXHRuc3ggXFxcIiRuc19wZWVyXFxcIiBcXFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcXFxcXFxuK1xcdFxcdFxcdGlwIGxpbmsgc2V0ICRpZmFjZSB1cFxcXCJcXG4rXFx0ZG9uZVxcbitcXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBzZXQgZF9pbCB1cFxcXCJcXG4rXFx0bnN4IFxcXCIkbnNfc2FuXFxcIiBcXFwiaXAgbGluayBzZXQgczAgdXA7IGlwIGFkZHIgYWRkICRzYW5faXAvMjQgZGV2IHMwXFxcIlxcbitcXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxcXFxuK1xcdFxcdHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcXFxcXFxuK1xcdFxcdGlwIGxpbmsgc2V0IGhzcjAgdXBcXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3BlZXJcXFwiIFxcXCJpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFxcXFxcXG4rXFx0XFx0c2xhdmUxIHBfYSBzbGF2ZTIgcF9iIHByb3RvIDA7IFxcXFxcXG4rXFx0XFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcXFwiXFxuK1xcbitcXHQjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXIncyBzdXBlcnZpc2lvbiBmcmFtZXMuXFxuK1xcdHNsZWVwIDJcXG4rfVxcbitcXG4rY2hlY2tfZmVhdHVyZSgpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBpZmFjZT1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIGZlYXR1cmU9XFxcIiQzXFxcIlxcbitcXHRsb2NhbCB3YW50PVxcXCIkNFxcXCJcXG4rXFxuK1xcdGlmIG5zeCBcXFwiJG5zXFxcIiBcXFwiZXRodG9vbCAtayAkaWZhY2VcXFwiIHwgZ3JlcCAtcSBcXFwiXiRmZWF0dXJlOiAkd2FudFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF1cXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0ZmlcXG4rfVxcbitcXG4rIyBPZmYtb3ItYWJzZW50IHZhcmlhbnQ6IGZhaWxzIG9ubHkgd2hlbiB0aGUgZmVhdHVyZSBpcyBwcmVzZW50IEFORCBvbixcXG4rIyBzbyBkZXZpY2VzIHRoYXQgc2ltcGx5IGRvIG5vdCBsaXN0IHRoZSBmZWF0dXJlIGRvIG5vdCBmYWlsIGl0LlxcbitjaGVja19mZWF0dXJlX25vdF9vbigpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBpZmFjZT1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIGZlYXR1cmU9XFxcIiQzXFxcIlxcbitcXG4rXFx0aWYgbnN4IFxcXCIkbnNcXFwiIFxcXCJldGh0b29sIC1rICRpZmFjZVxcXCIgfCBncmVwIC1xIFxcXCJeJGZlYXR1cmU6IG9uXFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG9uXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdGVsc2VcXG4rXFx0XFx0ZWNobyBcXFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdXFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbitkb19ncm9fZmVhdHVyZV9jaGVja3MoKVxcbit7XFxuK1xcdGVjaG8gXFxcIklORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgR1JPLlxcXCJcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX2R1dFxcXCIgZF9hIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2IgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfaWwgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cXFwiXFxuK1xcbitcXHRlY2hvIFxcXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEhXLUdSTy5cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfYSByeC1ncm8taHcgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfYiByeC1ncm8taHcgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfaWwgcngtZ3JvLWh3IG9mZlxcbitcXHRzdG9wX2lmX2Vycm9yIFxcXCJIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXFxcIlxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogQ2hlY2tpbmcgdGhhdCB0aGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTy5cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGhzcjAgZ2VuZXJpYy1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX2R1dFxcXCIgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFxcXCIkbnNfZHV0XFxcIiBoc3IwIHR4LXRjcDYtc2VnbWVudGF0aW9uXFxuK1xcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFxcXCIkbnNfZHV0XFxcIiBoc3IwIHR4LXVkcC1zZWdtZW50YXRpb25cXG4rXFx0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXFxcIiRuc19kdXRcXFwiIGhzcjAgdHgtZ3NvLWxpc3RcXG4rXFx0c3RvcF9pZl9lcnJvciBcXFwiSFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy1mYW1pbHkgZmVhdHVyZXMuXFxcIlxcbit9XFxuK1xcbithbGxvY193b3JrZGlyKClcXG4re1xcbitcXHQjIEFsbG9jYXRlZCBvbmx5IGhlcmUsIGxvbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdG9wb2xvZ3kgY2xlYW51cCwgc29cXG4rXFx0IyBjbGVhbnVwKCkgYXQgc2V0dXBfdG9wbygpIHRpbWUgY2FuIG5ldmVyIHJlbW92ZSBpdC4gbWt0ZW1wIGZhaWx1cmVcXG4rXFx0IyBpcyBhIGhhcmQgdGVzdCBmYWlsdXJlLlxcbitcXHR3b3JrZGlyPSQobWt0ZW1wIC1kIC90bXAvaHNyX2dyb190ZXN0LlhYWFhYWCkgfHwge1xcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBta3RlbXAgLWQgZmFpbGVkXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGV4aXQgMVxcbitcXHR9XFxuK1xcdGNobW9kIDcwMCBcXFwiJHt3b3JrZGlyfVxcXCJcXG4rXFx0cGlkZmlsZT1cXFwiJHt3b3JrZGlyfS9pcGVyZi5waWRcXFwiXFxuK1xcdHJjZmlsZT1cXFwiJHt3b3JrZGlyfS9pcGVyZi5yY1xcXCJcXG4rfVxcbitcXG4rIyBOdW1lcmljLCBhbGl2ZSwgY29tbSA9PSBpcGVyZjMsIGFuZCByZWFsbHkgb3duZWQgYnkgdGhlIHBlZXIgbmV0bnMuXFxuK3ZhbGlkX3NlcnZlcl9waWQoKVxcbit7XFxuK1xcdGxvY2FsIHA9XFxcIiQxXFxcIlxcbitcXG4rXFx0W1sgXFxcIiRwXFxcIiA9fiBeWzAtOV0rJCBdXSB8fCByZXR1cm4gMVxcbitcXHRraWxsIC0wIFxcXCIkcFxcXCIgMlxcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIDFcXG4rXFx0WyBcXFwiJChjYXQgL3Byb2MvXFxcIiRwXFxcIi9jb21tIDJcXHUwMDNlL2Rldi9udWxsKVxcXCIgPSBcXFwiaXBlcmYzXFxcIiBdIHx8IHJldHVybiAxXFxuK1xcdGlwIG5ldG5zIHBpZHMgXFxcIiRuc19wZWVyXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXF4IFxcXCIkcFxcXCJcXG4rfVxcbitcXG4rc3RhcnRfaXBlcmZfc2VydmVyKClcXG4re1xcbitcXHRsb2NhbCBjYW5kaWRhdGVfcGlkXFxuK1xcbitcXHQjIE9uZS1zaG90IHNlcnZlciwgbm8gLUQ6IHRoZSB3cmFwcGVyIHJlY29yZHMgaXRzIGV4YWN0IFBJRCBhbmQgaXRzXFxuK1xcdCMgcmVhbCBleGl0IHN0YXR1cyAobmV0bnMgc2hhcmVzIHRoZSBQSUQgbmFtZXNwYWNlIGFuZCB0aGUgaG9zdCBmcykuXFxuK1xcdGFsbG9jX3dvcmtkaXJcXG4rXFx0KCBuc3ggXFxcIiRuc19wZWVyXFxcIiBcXFwiaXBlcmYzIC1zIC0xIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNiBcXFxcXFxuK1xcdFxcdGVjaG8gXFxcXCQhIFxcdTAwM2UgJHtwaWRmaWxlfTsgXFxcXFxcbitcXHRcXHR3YWl0IFxcXFwkITsgXFxcXFxcbitcXHRcXHRlY2hvIFxcXFwkPyBcXHUwMDNlICR7cmNmaWxlfVxcXCIgKSBcXHUwMDI2XFxuK1xcdHNlcnZlcl93cmFwcGVyPSQhXFxuK1xcdCMgdGhlIHdyYXBwZXIgd3JpdGVzIHRoZSBwaWRmaWxlIGFzeW5jaHJvbm91c2x5OyB3YWl0IGZvciBpdCB0b1xcbitcXHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxcbitcXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cXG4rXFx0XFx0WyAtcyBcXFwiJHtwaWRmaWxlfVxcXCIgXSBcXHUwMDI2XFx1MDAyNiBicmVha1xcbitcXHRcXHRzbGVlcCAwLjFcXG4rXFx0ZG9uZVxcbitcXHRpZiBbICEgLXMgXFxcIiR7cGlkZmlsZX1cXFwiIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWRcXFwiIFxcXFxcXG4rXFx0XFx0XFx0XFxcIihubyBwaWRmaWxlKVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXHRjYW5kaWRhdGVfcGlkPSQoXFx1MDAzY1xcXCIke3BpZGZpbGV9XFxcIilcXG4rXFx0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFxcXCIke2NhbmRpZGF0ZV9waWR9XFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgc2VydmVyIHBpZCAnJHtjYW5kaWRhdGVfcGlkfSdcXFwiIFxcXFxcXG4rXFx0XFx0XFx0XFxcImZhaWxlZCB2YWxpZGF0aW9uXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK1xcdCMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvblxcbitcXHRpcGVyZl9waWQ9XFxcIiR7Y2FuZGlkYXRlX3BpZH1cXFwiXFxuK1xcdHNsZWVwIDFcXG4rXFx0cmV0dXJuIDBcXG4rfVxcbitcXG4rIyBQcmludCBcXFwiXFx1MDAzY2J5dGVzXFx1MDAzZSBcXHUwMDNjcGFja2V0c1xcdTAwM2VcXFwiIGZvciBleGFjdGx5IG9uZSBUWCByZWNvcmQgb2YgbnMvZGV2OyBhbnl0aGluZ1xcbisjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC5cXG4rcmVhZF90eF9jb3VudGVycygpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIiBkZXY9XFxcIiQyXFxcIlxcbitcXHRsb2NhbCBvdXQgY250XFxuK1xcbitcXHRvdXQ9JChuc3ggXFxcIiRuc1xcXCIgXFxcImlwIC1zIGxpbmsgc2hvdyAkZGV2XFxcIiB8IFxcXFxcXG4rXFx0XFx0YXdrICcvXiArVFg6L3tnZXRsaW5lOyBwcmludCAkMSwgJDJ9JylcXG4rXFx0Y250PSQoZWNobyBcXFwiJG91dFxcXCIgfCBncmVwIC1jICdeWzAtOV0qIFswLTldKiQnKVxcbitcXHRpZiBbIFxcXCIkY250XFxcIiAtbmUgMSBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGNhbm5vdCBwYXJzZSBUWCBjb3VudGVycyBvZiAkbnMvJGRldlxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiKHJlY29yZHM9JGNudClcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0ZWNobyBcXFwiJG91dFxcXCJcXG4rXFx0cmV0dXJuIDBcXG4rfVxcbitcXG4rZXZhbF9jb3VudGVyX2RlbHRhKClcXG4re1xcbitcXHRsb2NhbCBuYW1lPVxcXCIkMVxcXCIgYjA9XFxcIiQyXFxcIiBwMD1cXFwiJDNcXFwiIGIxPVxcXCIkNFxcXCIgcDE9XFxcIiQ1XFxcIiBvcD1cXFwiJDZcXFwiIGxpbWl0PVxcXCIkN1xcXCJcXG4rXFx0bG9jYWwgYmQgcGRcXG4rXFxuK1xcdGlmICEgW1sgXFxcIiRiMFxcXCIgPX4gXlswLTldKyQgXFx1MDAyNlxcdTAwMjYgXFxcIiRiMVxcXCIgPX4gXlswLTldKyQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbitcXHRcXHRcXFwiJHAwXFxcIiA9fiBeWzAtOV0rJCBcXHUwMDI2XFx1MDAyNiBcXFwiJHAxXFxcIiA9fiBeWzAtOV0rJCBdXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBub24tbnVtZXJpYyBjb3VudGVyIGlucHV0IGZvciAkbmFtZVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXHRiZD0kKChiMSAtIGIwKSlcXG4rXFx0cGQ9JCgocDEgLSBwMCkpXFxuK1xcdGlmIFsgXFxcIiRiZFxcXCIgLWx0IDAgXSB8fCBbIFxcXCIkcGRcXFwiIC1sZSAwIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogY291bnRlciBkZWx0YSBpbnZhbGlkIGZvciAkbmFtZVxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiKGJ5dGVzPSRiZCBwa3RzPSRwZClcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0aWYgWyBcXFwiJG9wXFxcIiA9IFxcXCJndFxcXCIgXTsgdGhlblxcbitcXHRcXHRpZiBbIFxcXCIkYmRcXFwiIC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxcbitcXHRcXHRcXHRlY2hvIFxcXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXFx1MDAzYz0gJGxpbWl0XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdHJldHVybiAxXFxuK1xcdFxcdGZpXFxuK1xcdGVsc2VcXG4rXFx0XFx0aWYgWyBcXFwiJGJkXFxcIiAtZ3QgJCgocGQgKiBsaW1pdCkpIF07IHRoZW5cXG4rXFx0XFx0XFx0ZWNobyBcXFwiRkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkIFxcdTAwM2UgJGxpbWl0XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdHJldHVybiAxXFxuK1xcdFxcdGZpXFxuK1xcdGZpXFxuK1xcdGVjaG8gXFxcIklORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCIob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdXFxcIlxcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbitkb190c29fc3RyZWFtX3Rlc3QoKVxcbit7XFxuK1xcdGxvY2FsIG91dCBzZW5kZXJfcmV0ciBzZXJ2ZXJfcmNcXG4rXFx0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXFxuK1xcdGxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgYl9iMCBiX3AwIGJfYjEgYl9wMVxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcImV0aHRvb2wgLUsgczAgdHNvIG9uIGdzbyBvblxcXCJcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX3NhblxcXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkNvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLlxcXCJcXG4rXFxuK1xcdGVjaG8gXFxcIklORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC1cXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cXFwiXFxuK1xcdHN0YXJ0X2lwZXJmX3NlcnZlciB8fCByZXR1cm5cXG4rXFxuK1xcdCMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZVxcbitcXHQjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0c1xcbitcXHQjIHJlYWxseSBsZWZ0IHRoZSBTQU4pOyBlYWNoIERVVCBMQU4gbGVnIG11c3Qgc3RheSB1bmRlciBMQU5fQVZHX01BWFxcbitcXHQjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlXFxuK1xcdCMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuXFxuK1xcdHNhbl9iMD0wOyBzYW5fcDA9MDsgYV9iMD0wOyBhX3AwPTA7IGJfYjA9MDsgYl9wMD0wXFxuK1xcdHJlYWQgLXIgc2FuX2IwIHNhbl9wMCBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19zYW5cXFwiIHMwKVxcbitFT0ZcXG4rXFx0cmVhZCAtciBhX2IwIGFfcDAgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfZHV0XFxcIiBkX2EpXFxuK0VPRlxcbitcXHRyZWFkIC1yIGJfYjAgYl9wMCBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIGRfYilcXG4rRU9GXFxuK1xcdGlmICEgdmFsaWRfZGVjaW1hbHMgXFxcIiRzYW5fYjBcXFwiIFxcXCIkc2FuX3AwXFxcIiBcXFwiJGFfYjBcXFwiIFxcXCIkYV9wMFxcXCIgXFxcXFxcbitcXHRcXHRcXFwiJGJfYjBcXFwiIFxcXCIkYl9wMFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogYmFzZWxpbmUgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK1xcbitcXHQjIHJhdGUtY2FwcGVkOiB0aGUgUFJJTUFSWSBkaXNjcmltaW5hdG9yIGlzIHRoZSBjb3VudGVyIGluZXF1YWxpdHlcXG4rXFx0IyBhYm92ZSwgbm90IG1heCB0aHJvdWdocHV0OyByZXRyYW5zbWl0cyBhcmUgaW5mb3JtYXRpb25hbCBvbmx5LlxcbitcXHQjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhXFxuK1xcdCMgZnVuY3Rpb25hbCBwcm9ibGVtLlxcbitcXHRpZiAhIG91dD0kKG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcInRpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgXFxcXFxcbitcXHRcXHQtYiAyRyAtdCAxMFxcXCIgMlxcdTAwM2VcXHUwMDI2MSk7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIGNsaWVudCBmYWlsZWQ6XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGVjaG8gXFxcIiRvdXRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcbitcXHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfc2FuXFxcIiBzMClcXG4rRU9GXFxuK1xcdHJlYWQgLXIgYV9iMSBhX3AxIFxcdTAwM2NcXHUwMDNjRU9GXFxuKyQocmVhZF90eF9jb3VudGVycyBcXFwiJG5zX2R1dFxcXCIgZF9hKVxcbitFT0ZcXG4rXFx0cmVhZCAtciBiX2IxIGJfcDEgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfZHV0XFxcIiBkX2IpXFxuK0VPRlxcbitcXHRpZiAhIHZhbGlkX2RlY2ltYWxzIFxcXCIkc2FuX2IxXFxcIiBcXFwiJHNhbl9wMVxcXCIgXFxcIiRhX2IxXFxcIiBcXFwiJGFfcDFcXFwiIFxcXFxcXG4rXFx0XFx0XFxcIiRiX2IxXFxcIiBcXFwiJGJfcDFcXFwiOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGZpbmFsIFRYIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXG4rXFx0ZXZhbF9jb3VudGVyX2RlbHRhIFxcXCJTQU4gczAgVFhcXFwiIFxcXCIkc2FuX2IwXFxcIiBcXFwiJHNhbl9wMFxcXCIgXFxcIiRzYW5fYjFcXFwiIFxcXCIkc2FuX3AxXFxcIiBcXFxcXFxuK1xcdFxcdGd0IFxcXCIkU0FOX0FWR19NSU5cXFwiXFxuK1xcdGV2YWxfY291bnRlcl9kZWx0YSBcXFwiRFVUIGRfYSBUWFxcXCIgXFxcIiRhX2IwXFxcIiBcXFwiJGFfcDBcXFwiIFxcXCIkYV9iMVxcXCIgXFxcIiRhX3AxXFxcIiBcXFxcXFxuK1xcdFxcdGxlIFxcXCIkTEFOX0FWR19NQVhcXFwiXFxuK1xcdGV2YWxfY291bnRlcl9kZWx0YSBcXFwiRFVUIGRfYiBUWFxcXCIgXFxcIiRiX2IwXFxcIiBcXFwiJGJfcDBcXFwiIFxcXCIkYl9iMVxcXCIgXFxcIiRiX3AxXFxcIiBcXFxcXFxuK1xcdFxcdGxlIFxcXCIkTEFOX0FWR19NQVhcXFwiXFxuK1xcdFsgXFxcIiR7cmV0Oi0wfVxcXCIgLWVxIDAgXSB8fCByZXR1cm5cXG4rXFxuK1xcdCMgc3VjY2VzcyBwYXRoOiB0aGUgb25lLXNob3Qgc2VydmVyIGV4aXRzIGJ5IGl0c2VsZjsgcmVhcCB0aGVcXG4rXFx0IyB3cmFwcGVyLCB0aGVuIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIHRoZSBzZXJ2ZXIncyByZWFsIHN0YXR1c1xcbitcXHR3YWl0IFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCJcXG4rXFx0c2VydmVyX3dyYXBwZXI9XFxcIlxcXCJcXG4rXFx0aWYgWyAhIC1zIFxcXCIke3JjZmlsZX1cXFwiIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBzdGF0dXMgZmlsZSBtaXNzaW5nICgke3JjZmlsZX0pXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVyblxcbitcXHRmaVxcbitcXHRzZXJ2ZXJfcmM9JChjYXQgXFxcIiR7cmNmaWxlfVxcXCIpXFxuK1xcdGlmICEgW1sgXFxcIiRzZXJ2ZXJfcmNcXFwiID1+IF5bMC05XSskIF1dIHx8IFsgXFxcIiRzZXJ2ZXJfcmNcXFwiIC1uZSAwIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBleGl0ZWQgd2l0aCByYz0nJHtzZXJ2ZXJfcmN9J1xcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFx0aXBlcmZfcGlkPVxcXCJcXFwiXFxuK1xcbitcXHQjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUXFxuK1xcdCMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlclxcbitcXHQjIGdhdGVzICh0aGUgY291bnRlciBpbmVxdWFsaXRpZXMgYWJvdmUgYXJlIHRoZSBwcmltYXJ5IGV2aWRlbmNlKS5cXG4rXFx0c2VuZGVyX3JldHI9JChlY2hvIFxcXCIkb3V0XFxcIiB8IGF3ayAnL3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0nKVxcbitcXHRpZiBbIFxcXCIkKGVjaG8gXFxcIiRzZW5kZXJfcmV0clxcXCIgfCBncmVwIC1FYyAnXlswLTldKyQnKVxcXCIgLW5lIDEgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBjYW5ub3QgcGFyc2Ugc2VuZGVyIHJldHJhbnNtaXRzIHJlbGlhYmx5XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGVjaG8gXFxcIiRvdXRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcdGVjaG8gXFxcIklORk86IFRDUCBzdHJlYW0gZG9uZTtcXFwiIFxcXFxcXG4rXFx0XFx0XFxcInNlbmRlciByZXRyYW5zbWl0cz0kc2VuZGVyX3JldHIgKHNlY29uZGFyeSBzaWduYWwpXFxcIlxcbitcXHRlY2hvIFxcXCIkb3V0XFxcIiB8IGdyZXAgLUUgXFxcInNlbmRlcnxyZWNlaXZlclxcXCJcXG4rfVxcbitcXG4rY2hlY2tfcHJlcmVxdWlzaXRlc1xcbitjaGVja190b29sIGV0aHRvb2xcXG4rY2hlY2tfdG9vbCBpcGVyZjNcXG4rY2hlY2tfdG9vbCB0aW1lb3V0XFxuK1xcbisjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguXFxuK2lmICEgaXAgbGluayBoZWxwIGhzciAyXFx1MDAzZVxcdTAwMjYxIHwgZ3JlcCAtcWkgaW50ZXJsaW5rOyB0aGVuXFxuK1xcdGVjaG8gXFxcIlNLSVA6IGlwcm91dGUyIGhhcyBubyBIU1IgaW50ZXJsaW5rIHN1cHBvcnRcXFwiXFxuK1xcdGV4aXQgJGtzZnRfc2tpcFxcbitmaVxcbitcXG4rc2V0dXBfdG9wb1xcbitcXG4rZWNobyBcXFwiSU5GTzogSW5pdGlhbCB2YWxpZGF0aW9uIHBpbmcgKFNBTiAtXFx1MDAzZSBwZWVyIHRocm91Z2ggdGhlIERVVCkuXFxcIlxcbitkb19waW5nIFxcXCIkbnNfc2FuXFxcIiBcXFwiJHBlZXJfaXBcXFwiXFxuK3N0b3BfaWZfZXJyb3IgXFxcIkluaXRpYWwgdmFsaWRhdGlvbiBmYWlsZWQuXFxcIlxcbitcXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzXFxuK2RvX3Rzb19zdHJlYW1fdGVzdFxcbitzdG9wX2lmX2Vycm9yIFxcXCJHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC5cXFwiXFxuK1xcbitlY2hvIFxcXCJJTkZPOiBBbGwgZ29vZC5cXFwiXFxuK2NsZWFudXBcXG4rZXhpdCAkcmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjMwLjA1MzU1NDUzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI5Mjg4MjU5MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiLFxuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byBkaXNhYmxlIEdSTyBvbiBuZXQgZGV2aWNlcywgYW5kIG1vZGlmaWVzIHRoZSBIU1IgZHJpdmVyIHRvIHVuZm9sZCBHU08gc3VwZXItcGFja2V0cyBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgSFNSIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGJ5IHNlbmRpbmcgdHJhZmZpYyB0aHJvdWdoIGFuIEhTUiBpbnRlcmZhY2UsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGNmNzU1YTlkOTJiMzkwODE3OTYwZTczZmU4MjczNmQwZjQwYWQ3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTU6NDY6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NC4uZWJhMmMyNmE0OWJhOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0zNDM0LDYgKzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xuIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbit2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2xvb3BiYWNrX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpuZXdza2IpO1xuIHUxNiBkZXZfcGlja190eF96ZXJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2Rldik7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNTkzM2M1ZGFiMDllZS4uYTZjZjJhZGM4NjI1NiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTE4NDAsNiArMTg0MCwyNCBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHR9XG4gfVxuIFxuK3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJfZGV2O1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbitcbitcdGRldi1cdTAwM2V3YW50ZWRfZmVhdHVyZXMgXHUwMDI2PSB+KE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpO1xuK1x0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuK1xuK1x0aWYgKHVubGlrZWx5KGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgKE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpKSlcbitcdFx0bmV0ZGV2X1dBUk4oZGV2LCBcImZhaWxlZCB0byBkaXNhYmxlIEdSTyFcXG5cIik7XG4rXG4rXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XG4rXHRcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xuK1x0XHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xuK1x0XHRuZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpO1xuK1x0fVxuK31cbitcbiAvKipcbiAgKlx0ZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuICAqXHRAZGV2OiBkZXZpY2VcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmNcbmluZGV4IDQzNzk0N2RkMDhlZDUuLjAyZmIyMTYyOTUxMjggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXZfYXBpLmNcbisrKyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuQEAgLTI2OSw2ICsyNjksMjIgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xuIFxuKy8qKlxuKyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuKyAqIEBkZXY6IGRldmljZVxuKyAqXG4rICogRGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldCBkZXZpY2UuICBNdXN0IGJlXG4rICogY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZCBwYWNrZXRzIG1heSBiZVxuKyAqIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS5cbisgKi9cbit2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuK1x0bmV0aWZfZGlzYWJsZV9ncm8oZGV2KTtcbitcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4rfVxuK0VYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfZ3JvKTtcbitcbiAvKipcbiAgKiBkZXZfc2V0X3Byb21pc2N1aXR5KCkgLSB1cGRhdGUgcHJvbWlzY3VpdHkgY291bnQgb24gYSBkZXZpY2VcbiAgKiBAZGV2OiBkZXZpY2VcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9kZXZpY2UuYyBiL25ldC9oc3IvaHNyX2RldmljZS5jXG5pbmRleCA1NTU1YjcxYWIxOWI1Li4yNDhjYmIxNDJlMjFlIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZGV2aWNlLmNcbisrKyBiL25ldC9oc3IvaHNyX2RldmljZS5jXG5AQCAtMjMyLDkgKzIzMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0c2tiLVx1MDAzZWRldiA9IG1hc3Rlci1cdTAwM2VkZXY7XG4gXHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG5AQCAtMzM1LDYgKzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc2VxdWVuY2VfbnIpO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnIrKztcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xuIFx0LyogSFNSdjAgaGFzIDYgdW51c2VkIGJ5dGVzIGFmdGVyIHRoZSBNQUMgKi9cbkBAIC0zNTYsMTQgKzM1NSwxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXHUwMDNlbWFjYWRkcmVzc19yZWRib3gpO1xuIFx0fVxuIFxuLVx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuK1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0cmV0dXJuO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbkBAIC0zOTAsNiArMzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKTtcbiBcdGhzci1cdTAwM2VzdXBfc2VxdWVuY2VfbnIrKztcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG5AQCAtMzk3LDEzICszOTMsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcbiBcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbitcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIH1cbiBcbiAvKiBBbm5vdW5jZSAoc3VwZXJ2aXNpb24gZnJhbWUpIHRpbWVyIGZ1bmN0aW9uXG5AQCAtNjU5LDcgKzY1Miw3IEBAIHZvaWQgaHNyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiBcbiBcdGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHxcbi1cdFx0XHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcbitcdFx0XHQgICBORVRJRl9GX0hXX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5pbmRleCAwNzc0OTgxYTY1YzE2Li4zZmNkYmFjNDljNTlkIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG4rKysgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbkBAIC0xMiw2ICsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2dzby5oXHUwMDNlXG4gI2luY2x1ZGUgXCJoc3JfbWFpbi5oXCJcbiAjaW5jbHVkZSBcImhzcl9mcmFtZXJlZy5oXCJcbiBcbkBAIC02MjEsOSArNjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxuIFx0ICAgIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4gXHRcdC8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovXG4tXHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0XHRmcmFtZS1cdTAwM2VzZXF1ZW5jZV9uciA9IGhzci1cdTAwM2VzZXF1ZW5jZV9ucjtcbiBcdFx0aHNyLVx1MDAzZXNlcXVlbmNlX25yKys7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtNzMxLDcgKzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4gfVxuIFxuIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuK3N0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX3NrYl9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIHtcbiBcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyBmcmFtZTtcbiBcbkBAIC03NjAsMyArNzYyLDUwIEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbiBcdGtmcmVlX3NrYihza2IpO1xuIH1cbitcbisvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xuKyAqIGVhY2ggd2lyZSBmcmFtZSBnZXRzIGl0cyBvd24gSFNSL1BSUCB0YWcgYW5kIHNlcXVlbmNlIG51bWJlci5cbisgKi9cbit2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0O1xuK1xuK1x0aWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkge1xuK1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIFVuZm9sZCBvbmx5IHBsYWluLUV0aGVybmV0IEdTTyBzdXBlci1wYWNrZXRzOiBsb2NhbGx5IGdlbmVyYXRlZFxuK1x0ICogb24gdGhlIG1hc3Rlciwgb3IgYXJyaXZpbmcgdW50YWdnZWQgZnJvbSB0aGUgU0FOIHNpZGUgb24gdGhlXG4rXHQgKiBpbnRlcmxpbmsuIEEgc3VwZXItcGFja2V0IGZyb20gYSBMQU4gc2xhdmUgbWF5IGNhcnJ5IHBlci1mcmFtZVxuK1x0ICogSFNSIHRhZ3MgLyBQUlAgUkNUIHRyYWlsZXJzIHRoYXQgc29mdHdhcmUgc2VnbWVudGF0aW9uIGNhbm5vdFxuK1x0ICogcmVjb3ZlcjsgYW4gYWxyZWFkeS10YWdnZWQgSFNSL1BSUCBzdXBlci1wYWNrZXQgdmlvbGF0ZXNcbitcdCAqIHBlci1mcmFtZSB3aXJlIHNlbWFudGljcy4gRHJvcCBib3RoLlxuK1x0ICovXG4rXHRpZiAocG9ydC1cdTAwM2V0eXBlICE9IEhTUl9QVF9NQVNURVIgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSAhPSBIU1JfUFRfSU5URVJMSU5LKVxuK1x0XHRnb3RvIGRyb3BfZ3NvO1xuK1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9IU1IpIHx8XG4rXHQgICAgc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX1BSUCkpXG4rXHRcdGdvdG8gZHJvcF9nc287XG4rXG4rXHQvKiBmZWF0dXJlcyA9IDA6IHJlcXVlc3QgZnVsbCBzb2Z0d2FyZSBzZWdtZW50YXRpb24uIHR4X3BhdGggaXMgdHJ1ZVxuK1x0ICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb21cbitcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXG4rXHQgKi9cbitcdHNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKTtcbitcdGlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKVxuK1x0XHRnb3RvIGRyb3BfZ3NvO1xuK1xuK1x0Y29uc3VtZV9za2Ioc2tiKTtcbitcdHdoaWxlIChzZWdzKSB7XG4rXHRcdG5leHQgPSBzZWdzLVx1MDAzZW5leHQ7XG4rXHRcdHNlZ3MtXHUwMDNlbmV4dCA9IE5VTEw7XG4rXHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7XG4rXHRcdHNlZ3MgPSBuZXh0O1xuK1x0fVxuK1x0cmV0dXJuO1xuK1xuK2Ryb3BfZ3NvOlxuK1x0cG9ydC1cdTAwM2VkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xuK1x0a2ZyZWVfc2tiKHNrYik7XG4rfVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX3NsYXZlLmMgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5pbmRleCAwMWM3M2I0YjUwZGRkLi4wY2E1NWQ5MzIzYzU3IDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuY1xuKysrIGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xuQEAgLTczLDE2ICs3Myw3IEBAIHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0fVxuIFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbiBcbi1cdC8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhXG4tXHQgKiBzZXF1ZW5jZSBudW1iZXIgYW5kIHJlcXVpcmUgc3luY2hyb25pc2F0aW9uIHZzIG90aGVyIHNlbmRlci5cbi1cdCAqL1xuLVx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHR9IGVsc2Uge1xuLVx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdH1cbitcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuIFxuIGZpbmlzaF9jb25zdW1lOlxuIFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG5AQCAtMTcwLDYgKzE2MSw3IEBAIHN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAocmVzKVxuIFx0XHRnb3RvIGZhaWxfcnhfaGFuZGxlcjtcbiBcdGRldl9kaXNhYmxlX2xybyhkZXYpO1xuK1x0ZGV2X2Rpc2FibGVfZ3JvKGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuaW5kZXggMzFmYjkzMjZjZjUzMy4uMGQxMDU0NzZlN2M1MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbkBAIC0zLDYgKzMsNyBAQFxuIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFxuIFRFU1RfUFJPR1MgOj0gXFxcbitcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI4OGRlM2E2MGI4OTlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxuQEAgLTAsMCArMSw0NjIgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBUZXN0IEhTUiBoYW5kbGluZyBvZiBHUk8vR1NPIHN1cGVyLXBhY2tldHM6XG4rI1xuKyMgIDEuIEVuc2xhdmluZyBhIGRldmljZSB0byBhbiBIU1IgbWFzdGVyIGRpc2FibGVzIEdSTyBvbiBpdFxuKyMgICAgIChkZXZfZGlzYWJsZV9ncm8oKSkuXG4rIyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXG4rIyAgMy4gQSBUQ1Agc3RyZWFtIGZyb20gYSBUU08tZW5hYmxlZCBTQU4gKHdoaWNoIHRoZXJlZm9yZSBlbWl0cyBHU09cbisjICAgICBzdXBlci1wYWNrZXRzKSBpcyB1bmZvbGRlZCBhdCB0aGUgSFNSIGZvcndhcmQgZW50cnkuIEV2aWRlbmNlOlxuKyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xuKyMgICAgIHRoZSBTQU4gYW5kIHBlci1mcmFtZS1zaXplZCB0cmFmZmljIGxlYXZpbmcgdGhlIERVVCdzIExBTiBwb3J0cy5cbisjXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XG4rI1xuKyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xuKyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXxcbisjICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8XG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuKyNcbisjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCdzIGZvcndhcmQgcGF0aFxuKyMgKGludGVybGluayBSWCAtXHUwMDNlIExBTiBBL0IgVFgpLCBzbyBldmVyeSBTQU4gZnJhbWUgaXMgdGFnZ2VkIGFuZFxuKyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXG4rXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxuK1xuK3Nhbl9pcD1cIjEwMC42NC4wLjFcIlxuK3BlZXJfaXA9XCIxMDAuNjQuMC4zXCJcbitcbisjIEFnZ3JlZ2F0ZSBjb3VudGVyIHRocmVzaG9sZHMgZm9yIHRoZSBzdHJlYW0gdGVzdCAoYnl0ZXMvcGFja2V0cyk6XG4rIyBTQU5fQVZHX01JTiBwcm92ZXMgR1NPIHN1cGVyLXBhY2tldHMgbGVmdCB0aGUgU0FOOyBMQU5fQVZHX01BWCBpcyBhXG4rIyBndWFyZCB3aXRoIG1hcmdpbiwgbm90IHRoZSBwcm90b2NvbCBtYXhpbXVtIChzZWUgZG9fdHNvX3N0cmVhbV90ZXN0KS5cbitTQU5fQVZHX01JTj0yMDQ4XG4rTEFOX0FWR19NQVg9MTUxNFxuK1xuK2lwZXJmX3BpZD1cIlwiXG4rc2VydmVyX3dyYXBwZXI9XCJcIlxuK3dvcmtkaXI9XCJcIlxuK3BpZGZpbGU9XCJcIlxuK3JjZmlsZT1cIlwiXG4rXG4rY2xlYW51cCgpXG4re1xuK1x0IyBleGFjdC1QSUQga2lsbCBvbmx5IGFmdGVyIFJFLXZhbGlkYXRpbmcgaWRlbnRpdHkgKGd1YXJkcyBhZ2FpbnN0XG4rXHQjIFBJRCByZXVzZSBiZXR3ZWVuIHB1YmxpY2F0aW9uIGFuZCBjbGVhbnVwKVxuK1x0aWYgWyAtbiBcIiR7aXBlcmZfcGlkfVwiIF0gXHUwMDI2XHUwMDI2IHZhbGlkX3NlcnZlcl9waWQgXCIke2lwZXJmX3BpZH1cIjsgdGhlblxuK1x0XHRraWxsIFwiJHtpcGVyZl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZmlcbitcdGlwZXJmX3BpZD1cIlwiXG4rXHRpZiBbIC1uIFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIiBdOyB0aGVuXG4rXHRcdCMgdGhlIHdyYXBwZXIgd2FpdHMgb24gdGhlIHNlcnZlcjsgcmVhcCBpdCB3aXRoIGEgNXMgYm91bmQgc28gYVxuK1x0XHQjIGxpdmUtYnV0LXVucHVibGlzaGVkIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyBjbGVhbnVwXG4rXHRcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRcdGtpbGwgLTAgXCIke3NlcnZlcl93cmFwcGVyfVwiIDJcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcbitcdFx0XHRzbGVlcCAwLjFcbitcdFx0ZG9uZVxuK1x0XHRraWxsIFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRcdHdhaXQgXCIke3NlcnZlcl93cmFwcGVyfVwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0c2VydmVyX3dyYXBwZXI9XCJcIlxuK1x0ZmlcbitcdCMgbGFzdCByZXNvcnQsIG5hbWVzcGFjZS1zY29wZWQgb25seTogVEVSTSB0aGUgaXBlcmYzIHByb2Nlc3NlcyB0aGF0XG4rXHQjIGFjdHVhbGx5IGxpdmUgaW4gdGhlIHBlZXIgbmV0bnMsIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlblxuK1x0IyBTSUdLSUxMIGFueSBzdXJ2aXZvciBiZWZvcmUgdG91Y2hpbmcgdGhlIG5hbWVzcGFjZSBuYW1lLiBBIGJsaW5kXG4rXHQjIHBraWxsIHdvdWxkIHNjYW4gdGhlIGhvc3QgUElEIHNwYWNlIGFuZCBoaXQgdW5yZWxhdGVkIHRlc3RzLlxuK1x0bG9jYWwgX3AgX3N0aWxsXG4rXHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwiJG5zX3BlZXJcIiAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbitcdFx0aWYgaXNfaXBlcmYzX3BpZCBcIiRfcFwiOyB0aGVuXG4rXHRcdFx0a2lsbCBcIiRfcFwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0ZmlcbitcdGRvbmVcbitcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRfc3RpbGw9MFxuK1x0XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwiJG5zX3BlZXJcIiAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbitcdFx0XHRpZiBpc19pcGVyZjNfcGlkIFwiJF9wXCI7IHRoZW5cbitcdFx0XHRcdF9zdGlsbD0xXG4rXHRcdFx0XHRicmVha1xuK1x0XHRcdGZpXG4rXHRcdGRvbmVcbitcdFx0WyBcIiRfc3RpbGxcIiAtZXEgMCBdIFx1MDAyNlx1MDAyNiBicmVha1xuK1x0XHRzbGVlcCAwLjFcbitcdGRvbmVcbitcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCIkbnNfcGVlclwiIDJcdTAwM2UvZGV2L251bGwpOyBkb1xuK1x0XHRpZiBpc19pcGVyZjNfcGlkIFwiJF9wXCI7IHRoZW5cbitcdFx0XHRraWxsIC05IFwiJF9wXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRmaVxuK1x0ZG9uZVxuK1x0IyByZW1vdmUgb25seSB0aGUga25vd24gbm9uLWVtcHR5IHByaXZhdGUgZGlyZWN0b3J5XG4rXHRpZiBbIC1uIFwiJHt3b3JrZGlyfVwiIF0gXHUwMDI2XHUwMDI2IFsgLWQgXCIke3dvcmtkaXJ9XCIgXTsgdGhlblxuK1x0XHRybSAtcmYgXCIke3dvcmtkaXJ9XCJcbitcdGZpXG4rXHR3b3JrZGlyPVwiXCJcbitcdHBpZGZpbGU9XCJcIlxuK1x0cmNmaWxlPVwiXCJcbitcdGNsZWFudXBfYWxsX25zXG4rfVxuK1xuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rY2hlY2tfdG9vbCgpXG4re1xuK1x0aWYgISBjb21tYW5kIC12IFwiJDFcIiBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4rXHRcdGVjaG8gXCJTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVwiXG4rXHRcdGV4aXQgJGtzZnRfc2tpcFxuK1x0Zmlcbit9XG4rXG4rbnN4KClcbit7XG4rXHRpcCBuZXRucyBleGVjIFwiJDFcIiBiYXNoIC1jIFwiJDJcIlxuK31cbitcbitpc19pcGVyZjNfcGlkKClcbit7XG4rXHRbIFwiJChjYXQgL3Byb2MvXCIkMVwiL2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcIiA9IFwiaXBlcmYzXCIgXVxuK31cbitcbisjIERlY2ltYWwtY291bnRlciB2YWxpZGF0aW9uIGZvciB0aGUgc25hcHNob3QgYmxvY2tzOiBldmVyeSB2YWx1ZSBtdXN0XG4rIyBiZSBhIHBsYWluIGRlY2ltYWwgbnVtYmVyLiBBIHBhcnNlIGZhaWx1cmUgaW4gcmVhZF90eF9jb3VudGVycyB5aWVsZHNcbisjIGVtcHR5L2dhcmJsZWQgZmllbGRzLCB3aGljaCB0aGlzIGNoZWNrIHR1cm5zIGludG8gYW4gaW1tZWRpYXRlIEZBSUwuXG4rdmFsaWRfZGVjaW1hbHMoKVxuK3tcbitcdGxvY2FsIHZcbitcbitcdGZvciB2IGluIFwiJEBcIjsgZG9cbitcdFx0W1sgXCIkdlwiID1+IF5bMC05XSskIF1dIHx8IHJldHVybiAxXG4rXHRkb25lXG4rXHRyZXR1cm4gMFxuK31cbitcbitzZXR1cF90b3BvKClcbit7XG4rXHRzZXR1cF9ucyBuc19kdXQgbnNfc2FuIG5zX3BlZXIgfHwgZXhpdCAkP1xuK1xuK1x0aXAgbGluayBhZGQgZF9hIG5ldG5zIFwiJG5zX2R1dFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zIFwiJG5zX3BlZXJcIlxuK1x0aXAgbGluayBhZGQgZF9iIG5ldG5zIFwiJG5zX2R1dFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9iIG5ldG5zIFwiJG5zX3BlZXJcIlxuK1x0aXAgbGluayBhZGQgZF9pbCBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zIFwiJG5zX3NhblwiXG4rXG4rXHQjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uXG4rXHRmb3IgaWZhY2UgaW4gZF9hIGRfYjsgZG9cbitcdFx0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcXFxuK1x0XHRcdGlwIGxpbmsgc2V0ICRpZmFjZSB1cFwiXG4rXHRkb25lXG4rXHRmb3IgaWZhY2UgaW4gcF9hIHBfYjsgZG9cbitcdFx0bnN4IFwiJG5zX3BlZXJcIiBcImlwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgXFxcbitcdFx0XHRpcCBsaW5rIHNldCAkaWZhY2UgdXBcIlxuK1x0ZG9uZVxuK1xuK1x0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBzZXQgZF9pbCB1cFwiXG4rXHRuc3ggXCIkbnNfc2FuXCIgXCJpcCBsaW5rIHNldCBzMCB1cDsgaXAgYWRkciBhZGQgJHNhbl9pcC8yNCBkZXYgczBcIlxuK1xuK1x0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxuK1x0XHRzbGF2ZTEgZF9hIHNsYXZlMiBkX2IgaW50ZXJsaW5rIGRfaWwgcHJvdG8gMDsgXFxcbitcdFx0aXAgbGluayBzZXQgaHNyMCB1cFwiXG4rXHRuc3ggXCIkbnNfcGVlclwiIFwiaXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcXFxuK1x0XHRzbGF2ZTEgcF9hIHNsYXZlMiBwX2IgcHJvdG8gMDsgXFxcbitcdFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcIlxuK1xuK1x0IyBMZXQgdGhlIG5vZGVzIHNlZSBlYWNoIG90aGVyJ3Mgc3VwZXJ2aXNpb24gZnJhbWVzLlxuK1x0c2xlZXAgMlxuK31cbitcbitjaGVja19mZWF0dXJlKClcbit7XG4rXHRsb2NhbCBucz1cIiQxXCJcbitcdGxvY2FsIGlmYWNlPVwiJDJcIlxuK1x0bG9jYWwgZmVhdHVyZT1cIiQzXCJcbitcdGxvY2FsIHdhbnQ9XCIkNFwiXG4rXG4rXHRpZiBuc3ggXCIkbnNcIiBcImV0aHRvb2wgLWsgJGlmYWNlXCIgfCBncmVwIC1xIFwiXiRmZWF0dXJlOiAkd2FudFwiOyB0aGVuXG4rXHRcdGVjaG8gXCJJTkZPOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzICR3YW50IFsgT0sgXVwiXG4rXHRlbHNlXG4rXHRcdGVjaG8gXCJGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG5vdCAkd2FudFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRmaVxuK31cbitcbisjIE9mZi1vci1hYnNlbnQgdmFyaWFudDogZmFpbHMgb25seSB3aGVuIHRoZSBmZWF0dXJlIGlzIHByZXNlbnQgQU5EIG9uLFxuKyMgc28gZGV2aWNlcyB0aGF0IHNpbXBseSBkbyBub3QgbGlzdCB0aGUgZmVhdHVyZSBkbyBub3QgZmFpbCBpdC5cbitjaGVja19mZWF0dXJlX25vdF9vbigpXG4re1xuK1x0bG9jYWwgbnM9XCIkMVwiXG4rXHRsb2NhbCBpZmFjZT1cIiQyXCJcbitcdGxvY2FsIGZlYXR1cmU9XCIkM1wiXG4rXG4rXHRpZiBuc3ggXCIkbnNcIiBcImV0aHRvb2wgLWsgJGlmYWNlXCIgfCBncmVwIC1xIFwiXiRmZWF0dXJlOiBvblwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG9uXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdGVsc2VcbitcdFx0ZWNobyBcIklORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgbm90IG9uIFsgT0sgXVwiXG4rXHRmaVxuK31cbitcbitkb19ncm9fZmVhdHVyZV9jaGVja3MoKVxuK3tcbitcdGVjaG8gXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy5cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2EgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYiBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9pbCBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbitcdHN0b3BfaWZfZXJyb3IgXCJHUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEhXLUdSTy5cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2EgcngtZ3JvLWh3IG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2IgcngtZ3JvLWh3IG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2lsIHJ4LWdyby1odyBvZmZcbitcdHN0b3BfaWZfZXJyb3IgXCJIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBDaGVja2luZyB0aGF0IHRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPLlwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGhzcjAgZ2VuZXJpYy1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXG4rXHRjaGVja19mZWF0dXJlX25vdF9vbiBcIiRuc19kdXRcIiBoc3IwIHR4LXRjcDYtc2VnbWVudGF0aW9uXG4rXHRjaGVja19mZWF0dXJlX25vdF9vbiBcIiRuc19kdXRcIiBoc3IwIHR4LXVkcC1zZWdtZW50YXRpb25cbitcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwiJG5zX2R1dFwiIGhzcjAgdHgtZ3NvLWxpc3RcbitcdHN0b3BfaWZfZXJyb3IgXCJIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPLWZhbWlseSBmZWF0dXJlcy5cIlxuK31cbitcbithbGxvY193b3JrZGlyKClcbit7XG4rXHQjIEFsbG9jYXRlZCBvbmx5IGhlcmUsIGxvbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdG9wb2xvZ3kgY2xlYW51cCwgc29cbitcdCMgY2xlYW51cCgpIGF0IHNldHVwX3RvcG8oKSB0aW1lIGNhbiBuZXZlciByZW1vdmUgaXQuIG1rdGVtcCBmYWlsdXJlXG4rXHQjIGlzIGEgaGFyZCB0ZXN0IGZhaWx1cmUuXG4rXHR3b3JrZGlyPSQobWt0ZW1wIC1kIC90bXAvaHNyX2dyb190ZXN0LlhYWFhYWCkgfHwge1xuK1x0XHRlY2hvIFwiRkFJTDogbWt0ZW1wIC1kIGZhaWxlZFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgMVxuK1x0fVxuK1x0Y2htb2QgNzAwIFwiJHt3b3JrZGlyfVwiXG4rXHRwaWRmaWxlPVwiJHt3b3JrZGlyfS9pcGVyZi5waWRcIlxuK1x0cmNmaWxlPVwiJHt3b3JrZGlyfS9pcGVyZi5yY1wiXG4rfVxuK1xuKyMgTnVtZXJpYywgYWxpdmUsIGNvbW0gPT0gaXBlcmYzLCBhbmQgcmVhbGx5IG93bmVkIGJ5IHRoZSBwZWVyIG5ldG5zLlxuK3ZhbGlkX3NlcnZlcl9waWQoKVxuK3tcbitcdGxvY2FsIHA9XCIkMVwiXG4rXG4rXHRbWyBcIiRwXCIgPX4gXlswLTldKyQgXV0gfHwgcmV0dXJuIDFcbitcdGtpbGwgLTAgXCIkcFwiIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIDFcbitcdFsgXCIkKGNhdCAvcHJvYy9cIiRwXCIvY29tbSAyXHUwMDNlL2Rldi9udWxsKVwiID0gXCJpcGVyZjNcIiBdIHx8IHJldHVybiAxXG4rXHRpcCBuZXRucyBwaWRzIFwiJG5zX3BlZXJcIiAyXHUwMDNlL2Rldi9udWxsIHwgZ3JlcCAtcXggXCIkcFwiXG4rfVxuK1xuK3N0YXJ0X2lwZXJmX3NlcnZlcigpXG4re1xuK1x0bG9jYWwgY2FuZGlkYXRlX3BpZFxuK1xuK1x0IyBPbmUtc2hvdCBzZXJ2ZXIsIG5vIC1EOiB0aGUgd3JhcHBlciByZWNvcmRzIGl0cyBleGFjdCBQSUQgYW5kIGl0c1xuK1x0IyByZWFsIGV4aXQgc3RhdHVzIChuZXRucyBzaGFyZXMgdGhlIFBJRCBuYW1lc3BhY2UgYW5kIHRoZSBob3N0IGZzKS5cbitcdGFsbG9jX3dvcmtkaXJcbitcdCggbnN4IFwiJG5zX3BlZXJcIiBcImlwZXJmMyAtcyAtMSBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNiBcXFxuK1x0XHRlY2hvIFxcJCEgXHUwMDNlICR7cGlkZmlsZX07IFxcXG4rXHRcdHdhaXQgXFwkITsgXFxcbitcdFx0ZWNobyBcXCQ/IFx1MDAzZSAke3JjZmlsZX1cIiApIFx1MDAyNlxuK1x0c2VydmVyX3dyYXBwZXI9JCFcbitcdCMgdGhlIHdyYXBwZXIgd3JpdGVzIHRoZSBwaWRmaWxlIGFzeW5jaHJvbm91c2x5OyB3YWl0IGZvciBpdCB0b1xuK1x0IyBhcHBlYXIgaW5zdGVhZCBvZiByYWNpbmcgdGhlIHJlYWRcbitcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRbIC1zIFwiJHtwaWRmaWxlfVwiIF0gXHUwMDI2XHUwMDI2IGJyZWFrXG4rXHRcdHNsZWVwIDAuMVxuK1x0ZG9uZVxuK1x0aWYgWyAhIC1zIFwiJHtwaWRmaWxlfVwiIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZGlkIG5vdCBwdWJsaXNoIGEgcGlkXCIgXFxcbitcdFx0XHRcIihubyBwaWRmaWxlKVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0Y2FuZGlkYXRlX3BpZD0kKFx1MDAzY1wiJHtwaWRmaWxlfVwiKVxuK1x0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFwiJHtjYW5kaWRhdGVfcGlkfVwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBpcGVyZjMgc2VydmVyIHBpZCAnJHtjYW5kaWRhdGVfcGlkfSdcIiBcXFxuK1x0XHRcdFwiZmFpbGVkIHZhbGlkYXRpb25cIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdCMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvblxuK1x0aXBlcmZfcGlkPVwiJHtjYW5kaWRhdGVfcGlkfVwiXG4rXHRzbGVlcCAxXG4rXHRyZXR1cm4gMFxuK31cbitcbisjIFByaW50IFwiXHUwMDNjYnl0ZXNcdTAwM2UgXHUwMDNjcGFja2V0c1x1MDAzZVwiIGZvciBleGFjdGx5IG9uZSBUWCByZWNvcmQgb2YgbnMvZGV2OyBhbnl0aGluZ1xuKyMgZWxzZSAobWlzc2luZywgZHVwbGljYXRlZCwgbm9uLW51bWVyaWMpIGlzIGEgaGFyZCBGQUlMLlxuK3JlYWRfdHhfY291bnRlcnMoKVxuK3tcbitcdGxvY2FsIG5zPVwiJDFcIiBkZXY9XCIkMlwiXG4rXHRsb2NhbCBvdXQgY250XG4rXG4rXHRvdXQ9JChuc3ggXCIkbnNcIiBcImlwIC1zIGxpbmsgc2hvdyAkZGV2XCIgfCBcXFxuK1x0XHRhd2sgJy9eICtUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0nKVxuK1x0Y250PSQoZWNobyBcIiRvdXRcIiB8IGdyZXAgLWMgJ15bMC05XSogWzAtOV0qJCcpXG4rXHRpZiBbIFwiJGNudFwiIC1uZSAxIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGNhbm5vdCBwYXJzZSBUWCBjb3VudGVycyBvZiAkbnMvJGRldlwiIFxcXG4rXHRcdFx0XCIocmVjb3Jkcz0kY250KVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0ZWNobyBcIiRvdXRcIlxuK1x0cmV0dXJuIDBcbit9XG4rXG4rZXZhbF9jb3VudGVyX2RlbHRhKClcbit7XG4rXHRsb2NhbCBuYW1lPVwiJDFcIiBiMD1cIiQyXCIgcDA9XCIkM1wiIGIxPVwiJDRcIiBwMT1cIiQ1XCIgb3A9XCIkNlwiIGxpbWl0PVwiJDdcIlxuK1x0bG9jYWwgYmQgcGRcbitcbitcdGlmICEgW1sgXCIkYjBcIiA9fiBeWzAtOV0rJCBcdTAwMjZcdTAwMjYgXCIkYjFcIiA9fiBeWzAtOV0rJCBcdTAwMjZcdTAwMjYgXFxcbitcdFx0XCIkcDBcIiA9fiBeWzAtOV0rJCBcdTAwMjZcdTAwMjYgXCIkcDFcIiA9fiBeWzAtOV0rJCBdXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWVcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdGJkPSQoKGIxIC0gYjApKVxuK1x0cGQ9JCgocDEgLSBwMCkpXG4rXHRpZiBbIFwiJGJkXCIgLWx0IDAgXSB8fCBbIFwiJHBkXCIgLWxlIDAgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogY291bnRlciBkZWx0YSBpbnZhbGlkIGZvciAkbmFtZVwiIFxcXG4rXHRcdFx0XCIoYnl0ZXM9JGJkIHBrdHM9JHBkKVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0aWYgWyBcIiRvcFwiID0gXCJndFwiIF07IHRoZW5cbitcdFx0aWYgWyBcIiRiZFwiIC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXHUwMDNjPSAkbGltaXRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRcdHJldD0xXG4rXHRcdFx0cmV0dXJuIDFcbitcdFx0ZmlcbitcdGVsc2VcbitcdFx0aWYgWyBcIiRiZFwiIC1ndCAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXHUwMDNlICRsaW1pdFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdFx0cmV0PTFcbitcdFx0XHRyZXR1cm4gMVxuK1x0XHRmaVxuK1x0ZmlcbitcdGVjaG8gXCJJTkZPOiAkbmFtZSBjb3VudGVyIGRlbHRhIGJ5dGVzPSRiZCBwYWNrZXRzPSRwZFwiIFxcXG4rXHRcdFwiKG9wICRvcCBsaW1pdCAkbGltaXQpIFsgT0sgXVwiXG4rXHRyZXR1cm4gMFxuK31cbitcbitkb190c29fc3RyZWFtX3Rlc3QoKVxuK3tcbitcdGxvY2FsIG91dCBzZW5kZXJfcmV0ciBzZXJ2ZXJfcmNcbitcdGxvY2FsIHNhbl9iMCBzYW5fcDAgc2FuX2IxIHNhbl9wMVxuK1x0bG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSBiX2IwIGJfcDAgYl9iMSBiX3AxXG4rXG4rXHRlY2hvIFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cIlxuK1x0bnN4IFwiJG5zX3NhblwiIFwiZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfc2FuXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXG4rXHRzdG9wX2lmX2Vycm9yIFwiQ291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cIlxuK1x0c3RhcnRfaXBlcmZfc2VydmVyIHx8IHJldHVyblxuK1xuK1x0IyBDb3VudGVyIHNuYXBzaG90cyBhcm91bmQgdGhlIHN0cmVhbSB3aW5kb3cuIFRoZSBTQU4tc2lkZSBhdmVyYWdlXG4rXHQjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0c1xuK1x0IyByZWFsbHkgbGVmdCB0aGUgU0FOKTsgZWFjaCBEVVQgTEFOIGxlZyBtdXN0IHN0YXkgdW5kZXIgTEFOX0FWR19NQVhcbitcdCMgKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IGJ1bGsgb3V0cHV0IHdhcyBzZWdtZW50ZWQgcGVyLWZyYW1lKS4gVGhlc2VcbitcdCMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuXG4rXHRzYW5fYjA9MDsgc2FuX3AwPTA7IGFfYjA9MDsgYV9wMD0wOyBiX2IwPTA7IGJfcDA9MFxuK1x0cmVhZCAtciBzYW5fYjAgc2FuX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19zYW5cIiBzMClcbitFT0ZcbitcdHJlYWQgLXIgYV9iMCBhX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2EpXG4rRU9GXG4rXHRyZWFkIC1yIGJfYjAgYl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfZHV0XCIgZF9iKVxuK0VPRlxuK1x0aWYgISB2YWxpZF9kZWNpbWFscyBcIiRzYW5fYjBcIiBcIiRzYW5fcDBcIiBcIiRhX2IwXCIgXCIkYV9wMFwiIFxcXG4rXHRcdFwiJGJfYjBcIiBcIiRiX3AwXCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGJhc2VsaW5lIFRYIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1xuK1x0IyByYXRlLWNhcHBlZDogdGhlIFBSSU1BUlkgZGlzY3JpbWluYXRvciBpcyB0aGUgY291bnRlciBpbmVxdWFsaXR5XG4rXHQjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuXG4rXHQjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhXG4rXHQjIGZ1bmN0aW9uYWwgcHJvYmxlbS5cbitcdGlmICEgb3V0PSQobnN4IFwiJG5zX3NhblwiIFwidGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcXFxuK1x0XHQtYiAyRyAtdCAxMFwiIDJcdTAwM2VcdTAwMjYxKTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIGNsaWVudCBmYWlsZWQ6XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0ZWNobyBcIiRvdXRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXG4rXHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX3NhblwiIHMwKVxuK0VPRlxuK1x0cmVhZCAtciBhX2IxIGFfcDEgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX2R1dFwiIGRfYSlcbitFT0ZcbitcdHJlYWQgLXIgYl9iMSBiX3AxIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2IpXG4rRU9GXG4rXHRpZiAhIHZhbGlkX2RlY2ltYWxzIFwiJHNhbl9iMVwiIFwiJHNhbl9wMVwiIFwiJGFfYjFcIiBcIiRhX3AxXCIgXFxcbitcdFx0XCIkYl9iMVwiIFwiJGJfcDFcIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJTQU4gczAgVFhcIiBcIiRzYW5fYjBcIiBcIiRzYW5fcDBcIiBcIiRzYW5fYjFcIiBcIiRzYW5fcDFcIiBcXFxuK1x0XHRndCBcIiRTQU5fQVZHX01JTlwiXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJEVVQgZF9hIFRYXCIgXCIkYV9iMFwiIFwiJGFfcDBcIiBcIiRhX2IxXCIgXCIkYV9wMVwiIFxcXG4rXHRcdGxlIFwiJExBTl9BVkdfTUFYXCJcbitcdGV2YWxfY291bnRlcl9kZWx0YSBcIkRVVCBkX2IgVFhcIiBcIiRiX2IwXCIgXCIkYl9wMFwiIFwiJGJfYjFcIiBcIiRiX3AxXCIgXFxcbitcdFx0bGUgXCIkTEFOX0FWR19NQVhcIlxuK1x0WyBcIiR7cmV0Oi0wfVwiIC1lcSAwIF0gfHwgcmV0dXJuXG4rXG4rXHQjIHN1Y2Nlc3MgcGF0aDogdGhlIG9uZS1zaG90IHNlcnZlciBleGl0cyBieSBpdHNlbGY7IHJlYXAgdGhlXG4rXHQjIHdyYXBwZXIsIHRoZW4gUkVRVUlSRSB0aGUgcmNmaWxlIHdpdGggdGhlIHNlcnZlcidzIHJlYWwgc3RhdHVzXG4rXHR3YWl0IFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIlxuK1x0c2VydmVyX3dyYXBwZXI9XCJcIlxuK1x0aWYgWyAhIC1zIFwiJHtyY2ZpbGV9XCIgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBzdGF0dXMgZmlsZSBtaXNzaW5nICgke3JjZmlsZX0pXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1x0c2VydmVyX3JjPSQoY2F0IFwiJHtyY2ZpbGV9XCIpXG4rXHRpZiAhIFtbIFwiJHNlcnZlcl9yY1wiID1+IF5bMC05XSskIF1dIHx8IFsgXCIkc2VydmVyX3JjXCIgLW5lIDAgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBleGl0ZWQgd2l0aCByYz0nJHtzZXJ2ZXJfcmN9J1wiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdGlwZXJmX3BpZD1cIlwiXG4rXG4rXHQjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUXG4rXHQjIGFueSBwYXJzZSBhbm9tYWx5IGlzIGEgbG91ZCBGQUlMLCBidXQgdGhlIHZhbHVlIGl0c2VsZiBubyBsb25nZXJcbitcdCMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLlxuK1x0c2VuZGVyX3JldHI9JChlY2hvIFwiJG91dFwiIHwgYXdrICcvc2VjIC4qIHNlbmRlciQvIHtwcmludCAkKE5GLTEpfScpXG4rXHRpZiBbIFwiJChlY2hvIFwiJHNlbmRlcl9yZXRyXCIgfCBncmVwIC1FYyAnXlswLTldKyQnKVwiIC1uZSAxIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGNhbm5vdCBwYXJzZSBzZW5kZXIgcmV0cmFuc21pdHMgcmVsaWFibHlcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRlY2hvIFwiJG91dFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdGVjaG8gXCJJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7XCIgXFxcbitcdFx0XCJzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKVwiXG4rXHRlY2hvIFwiJG91dFwiIHwgZ3JlcCAtRSBcInNlbmRlcnxyZWNlaXZlclwiXG4rfVxuK1xuK2NoZWNrX3ByZXJlcXVpc2l0ZXNcbitjaGVja190b29sIGV0aHRvb2xcbitjaGVja190b29sIGlwZXJmM1xuK2NoZWNrX3Rvb2wgdGltZW91dFxuK1xuKyMgaXByb3V0ZTIgbXVzdCBrbm93IHRoZSBIU1IgaW50ZXJsaW5rIHN5bnRheC5cbitpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xaSBpbnRlcmxpbms7IHRoZW5cbitcdGVjaG8gXCJTS0lQOiBpcHJvdXRlMiBoYXMgbm8gSFNSIGludGVybGluayBzdXBwb3J0XCJcbitcdGV4aXQgJGtzZnRfc2tpcFxuK2ZpXG4rXG4rc2V0dXBfdG9wb1xuK1xuK2VjaG8gXCJJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC1cdTAwM2UgcGVlciB0aHJvdWdoIHRoZSBEVVQpLlwiXG4rZG9fcGluZyBcIiRuc19zYW5cIiBcIiRwZWVyX2lwXCJcbitzdG9wX2lmX2Vycm9yIFwiSW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC5cIlxuK1xuK2RvX2dyb19mZWF0dXJlX2NoZWNrc1xuK2RvX3Rzb19zdHJlYW1fdGVzdFxuK3N0b3BfaWZfZXJyb3IgXCJHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC5cIlxuK1xuK2VjaG8gXCJJTkZPOiBBbGwgZ29vZC5cIlxuK2NsZWFudXBcbitleGl0ICRyZXRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjMwLjA1MzU1NjM3MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Njk2OTkzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHUk8gRGlzYWJsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgaW50cm9kdWNlcyBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGZpbGVzLCBzcGVjaWZpY2FsbHkgYG5ldC9jb3JlL2Rldi5jYCBhbmQgYG5ldC9jb3JlL2Rldl9hcGkuY2AuIFRoYXQncyBhIHByZXR0eSBsb3ctbGV2ZWwgY2hhbmdlLCBpbXBhY3RpbmcgZnVuZGFtZW50YWwgbmV0d29yayBkZXZpY2UgYmVoYXZpb3IuIFRoZW4sIGl0IHRvdWNoZXMgSFNSIC0gSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAtIGNvZGU6IGBuZXQvaHNyL2hzcl9kZXZpY2UuY2AsIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLCBhbmQgYG5ldC9oc3IvaHNyX3NsYXZlLmNgLiBMb29rcyBsaWtlIGl0J3MgYWRkaW5nIHN1cHBvcnQgZm9yIEdTTyBzdXBlci1wYWNrZXRzIGluIHRoZSBIU1IgY29udGV4dC4gQW5kIHRoZXJlJ3MgYSBzZWxmdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoYCwgd2hpY2ggaXMgZ29vZCB0byBzZWU7IGEgdGVzdCBzdWl0ZSBpcyBjcnVjaWFsIGhlcmUuXG5cbkZyb20gYSBxdWljayBnbGFuY2UsIHRoaXMgaXMgYSBwcmV0dHkgaW50ZXJlc3RpbmcgZnVuY3Rpb25hbCBwYXRjaC4gTW9kaWZ5aW5nIGJvdGggY29yZSBuZXR3b3JraW5nIGFuZCBzcGVjaWZpYyBkcml2ZXIgY29kZSwgcGFydGljdWxhcmx5IG9uZSBkZWFsaW5nIHdpdGggcmVkdW5kYW5jeSBhbmQgcG90ZW50aWFsbHkgY29tcGxleCBmb3J3YXJkaW5nIGxvZ2ljIG1ha2VzIG1lIHRoaW5rIHRoaXMgc2hvdWxkIGJlIGZ1enplZCB0aG9yb3VnaGx5LiBUaGUgY2hhbmdlcyB0byBgZGV2X2Rpc2FibGVfZ3JvYCBpbiBjb3JlIGFuZCBgbmV0L2hzci8qYCBpbmRpY2F0ZSBpdCBtYXkgaW50ZXJhY3Qgd2l0aCBvdGhlciBuZXR3b3JraW5nIGZ1bmN0aW9ucy5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgQ09ORklHIG9wdGlvbnMgYXJlIGludm9sdmVkLiBTaW5jZSB0aGUgSFNSIGNvZGUgaXMgaW4gYG5ldC9oc3IvYCwgSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9oc3IvS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgbmV0L0tjb25maWdgIHRvIHNlZSB3aGF0IGFjdHVhbGx5IGVuYWJsZXMgdGhlIEhTUiBmdW5jdGlvbmFsaXR5LiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIHVzIHRhcmdldCBvdXIgZnV6emluZyBhbmQgdGVzdGluZyBlZmZvcnRzIG1vcmUgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTYwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDY6MzUuNzIzMjU5NDY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTYxNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIU1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL0tjb25maWctNS1cXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXFxubmV0L2hzci9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcXHUwMDI2IFBSUClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjM1Ljc4OTQyNjc1MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTAxMDE3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDT05GSUdfSFNSIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGBDT05GSUdfSFNSYCBpcyB0aGUgYmlnIG9uZS4gVGhhdCdzIHdoZXJlIHdlIHN0YXJ0LCBvZiBjb3Vyc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LCBvciB0d2Vha2luZyByZWxhdGVkIHNldHRpbmdzLCBJJ3ZlIGdvdCB0byBlbnN1cmUgSSBoYXZlIGEgc29saWQgZ3Jhc3Agb24gd2hhdCBvdGhlciBjb21wb25lbnRzLCBmZWF0dXJlcywgb3IgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucyBpdCBtaWdodCBoaW5nZSB1cG9uLiBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXM/IERvZXMgaXQgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCBrZXJuZWwgbW9kdWxlcywgb3Igb3RoZXIgY29uZmlnIG9wdGlvbnMgdG8gYmUgYWN0aXZlPyBPciBwb3RlbnRpYWxseSBjb25mbGljdHM/IEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcywgYm90aCBleHBsaWNpdCBhbmQgaW1wbGljaXQsIHRvIGZvcm0gdGhlIGJlc3QgYW5kIGNvbXBsZXRlIG1lbnRhbCBtb2RlbC4gR290dGEgbWFrZSBzdXJlIGl0IHdpbGwgbm90IGludHJvZHVjZSBjb25mbGljdHMsIGJlZm9yZSBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NjozOC45OTk1MzI0MDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaHNyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgSUVDIDYyNDM5LTMgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeVxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgSFNSXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVGhpcyBlbmFibGVzIElFQyA2MjQzOSBkZWZpbmVkIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzXFxuICAxMDpcXHRcXHQgIFJlZHVuZGFuY3kgKEhTUikgYW5kIFBhcmFsbGVsIFJlZHVuZGFuY3kgUHJvdG9jb2wgKFBSUCkuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhXFxuICAxMzpcXHRcXHQgIERBTkggKFxcXCJEb3VibHkgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgSFNSXFxcIikgb3IgREFOUCAoXFxcIkRvdWJseVxcbiAgMTQ6XFx0XFx0ICBhdHRhY2hlZCBub2RlIGltcGxlbWVudGluZyBQUlBcXFwiKS4gRm9yIHRoaXMgdG8gd29yaywgeW91ciBMaW51eCBib3hcXG4gIDE1OlxcdFxcdCAgbmVlZHMgKGF0IGxlYXN0KSB0d28gcGh5c2ljYWwgRXRoZXJuZXQgaW50ZXJmYWNlcy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBGb3IgREFOSCwgaXQgbXVzdCBiZSBjb25uZWN0ZWQgYXMgYSBub2RlIGluIGEgcmluZyBuZXR3b3JrIHRvZ2V0aGVyXFxuICAxODpcXHRcXHQgIHdpdGggb3RoZXIgSFNSIGNhcGFibGUgbm9kZXMuIEFsbCBFdGhlcm5ldCBmcmFtZXMgc2VudCBvdmVyIHRoZSBIU1JcXG4gIDE5OlxcdFxcdCAgZGV2aWNlIHdpbGwgYmUgc2VudCBpbiBib3RoIGRpcmVjdGlvbnMgb24gdGhlIHJpbmcgKG92ZXIgYm90aCBzbGF2ZVxcbiAgMjA6XFx0XFx0ICBwb3J0cyksIGdpdmluZyBhIHJlZHVuZGFudCwgaW5zdGFudCBmYWlsLW92ZXIgbmV0d29yay4gRWFjaCBIU1Igbm9kZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NjozOC45OTk2MDY1MzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMxNzI2ODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1JPIERpc2FibGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggZG9lc24ndCBhcHBlYXIgdG8gYmUgaW50cm9kdWNpbmcgYW55dGhpbmcgcGFydGljdWxhcmx5IGV4b3RpYyBpbiB0ZXJtcyBvZiBkZXBlbmRlbmNpZXMg4oCTIGp1c3Qgc3RhbmRhcmQgbmV0d29ya2luZyBjb21wb25lbnRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpbXBhY3RlZC4gSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIGBuZXQvY29yZS9kZXYuY2AgYW5kIGBuZXQvY29yZS9kZXZfYXBpLmNgLiBNeSBhaW0gaXMgdG8gbG9jYXRlIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIGludGVncmF0ZWQuXG5cbkFoLCB5ZXMsIGl0IGxvb2tzIGxpa2UgYGRldl9kaXNhYmxlX2dyb2AgaXMgaW5kZWVkIGFkZGVkIGFuZCBleHBvc2VkLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBiZWluZyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggZXhpc3RpbmcgbG9naWMuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AsIHNwZWNpZmljYWxseSB0aGUgYGhzcl9mb3J3YXJkX3NrYmAgZnVuY3Rpb24uIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEknbGwgaGF2ZSB0byBkZWx2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gc2VlIHByZWNpc2VseSBob3cgR1JPIGRpc2FibGVtZW50IGlzIGJlaW5nIGludm9rZWQgYW5kIHdoeSwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgZm9yd2FyZGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBmb3IgZGlzYWJsaW5nIEdSTyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBXaGF0IGltcGFjdCBkb2VzIHRoYXQgaGF2ZSBvbiBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHk/IEknbGwgbmVlZCB0byBkaWcgaW50byBgaHNyX2ZvcndhcmRfc2tiYCB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjQzLjIzMTMzNTY5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk2MTQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNC1cXHRcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIzNTpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNi1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9MjkxPXN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2MC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozNjE6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzYyLX1cXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2ND1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM5OC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozOTk6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDAtfVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTY3OD1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNS0vKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHJjdSByZWFkIGxvY2sgKGJlY2F1c2Ugb2YgdGhlIHBvcnQgcGFyYW1ldGVyKSAqL1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3MzY6c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNy17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzY4LSAqL1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3Njk6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzAte1xcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3My1cXHRpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc3NDpcXHRcXHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODAyLVxcdFxcdHNlZ3MtXFx1MDAzZW5leHQgPSBOVUxMO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo4MDM6XFx0XFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODA0LVxcdFxcdHNlZ3MgPSBuZXh0O1xcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE1LVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaDoxNjp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNy1zdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM9MjQ9c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTc1LVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM6NzY6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYy03Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDY6NDMuMjc3MzAyMzI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1NzcxNjc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgVHJhZmZpYyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNvdXBsZSBvZiBrZXkgZnVuY3Rpb25hbGl0aWVzLiBGaXJzdCwgaXQncyBhZGRpbmcgYGhzcl9mb3J3YXJkX3NrYmAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGFzIHJlbGF0ZWQgdG8gR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSBhbmQsIHNwZWNpZmljYWxseSwgdGhlIHByb2Nlc3Mgb2YgaGFuZGxpbmcgdGhvc2UgbGFyZ2UgXCJzdXBlci1wYWNrZXRzLlwiIEl0IHNvdW5kcyBsaWtlIHdlJ3JlIHVuZm9sZGluZyB0aGVzZSwgbGlrZWx5IHRvIGRlYWwgd2l0aCB0aGVtIGFwcHJvcHJpYXRlbHkgd2l0aGluIHRoZSBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IpIGNvbnRleHQuXG5cblRoZW4gd2UndmUgZ290IGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gLiBUaGVzZSBhcmUgY2xlYXJseSBhYm91dCBkaXNhYmxpbmcgR1JPIGF0IGRpZmZlcmVudCBsZXZlbHMg4oCTIGRldmljZSBhbmQgbmV0d29yayBpbnRlcmZhY2UsIHJlc3BlY3RpdmVseS4gVGhpcyB0cmlnZ2VycyBhIHF1ZXN0aW9uOyB3aHkgYXJlIHdlIGRpc2FibGluZyBHUk8/IElzIGl0IGR1ZSB0byBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGNvbmZsaWN0cyB3aXRoaW4gdGhlIEhTUiBpbXBsZW1lbnRhdGlvbiwgb3IgcGVyaGFwcyB0byBlbnN1cmUgc3BlY2lmaWMgcGFja2V0IGhhbmRsaW5nIGJlaGF2aW91cj8gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdGhlcmUuXG5cblRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgb3ZlcmFsbCBmbG93LCBsZXQgbWUgcXVpY2tseSByZWZvY3VzIG9uIHRoZSBwcm92aWRlZCBrZXkgc3ltYm9sczogYGhzcl9mb3J3YXJkX3NrYmAsIGFzIG1lbnRpb25lZC4gQW5kIHRoZW4sIGl0IG1lbnRpb25zIHRoZSBkaXNhYmxpbmcgZnVuY3Rpb25zLCBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYC4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBgaHNyX2Rldl94bWl0YCBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIHBvaW50cy4gVGhleSdyZSBsaWtlbHkgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIEhTUi1zcGVjaWZpYyBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24sIHNvIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBhcmUgdGhlIGNvcnJlY3QgYW5kIGV4cGVjdGVkIHBsYWNlcyB3aGVyZSB0aGlzIGxvZ2ljIGludGVncmF0ZXMuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2ggb2YgdGhvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjQ3LjkzNTAyMTY2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NjEwOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2Rldl94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2RldmljZS5jPTIxNj1zdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgaHNyX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjIzLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIyNDpzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjI1LXtcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTU5OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhzcl9kZXZpY2Vfb3BzID0ge1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjAxLVxcdC5uZG9fc3RvcCA9IGhzcl9kZXZfY2xvc2UsXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjAyOlxcdC5uZG9fc3RhcnRfeG1pdCA9IGhzcl9kZXZfeG1pdCxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MDMtXFx0Lm5kb19jaGFuZ2VfcnhfZmxhZ3MgPSBoc3JfY2hhbmdlX3J4X2ZsYWdzLFxcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9NjY0PWJvb2wgaXNfaHNyX21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2NS17XFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjY2OlxcdHJldHVybiAoZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RhcnRfeG1pdCA9PSBoc3JfZGV2X3htaXQpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjQ3Ljk4MDY5MDk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTIzMDg4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSFNSIERldmljZSBUcmFuc21pc3Npb24gYW5kIFJlY2VwdGlvbioqXG5cbkFscmlnaHQsIHNvIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBoc3JfZGV2X3htaXRgIGlzIGVzc2VudGlhbGx5IHRoZSBIU1Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYG5kb19zdGFydF94bWl0YC4gSW4gb3RoZXIgd29yZHMsIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgYWN0dWFsIHRyYW5zbWlzc2lvbiBvZiBmcmFtZXMgZm9yIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgZGV2aWNlcy4gU28sIHdoZW4gYSBmcmFtZSBuZWVkcyB0byBnbyBvdXQgb250byB0aGUgSFNSIG5ldHdvcmssIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBnZXR0aW5nIGNhbGxlZC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYW5zbWlzc2lvbiBmb3IgSFNSIGRldmljZXMuIE9uIHRoZSBvdGhlciBzaWRlLCBmb3IgcmVjZWl2aW5nLCBgaHNyX2hhbmRsZV9mcmFtZWAgaXMgdGhlIHJlZ2lzdGVyZWQgaGFuZGxlciBmb3IgdGhlIFJYIHByb2Nlc3MuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHByb2Nlc3NpbmcgaW5jb21pbmcgSFNSIGZyYW1lcy4gR290IGl0LiBOb3csIHRoZSBrZXkgaXMgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyIHRvIGFjaGlldmUgdGhlIHNlYW1sZXNzIHJlZHVuZGFuY3kgdGhhdCBIU1IgaXMga25vd24gZm9yLCBhbmQgdGhlIGRldGFpbHMgb2YgdGhhdCBhcmUgY3JpdGljYWwgdG8gYW5hbHl6ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1OTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0Njo1MS40NzMwMDM3MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODU1MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzcl9oYW5kbGVfZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9NzEzPWludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy03MzktXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NzQwOlxcdC8qIE1ha2Ugc3VyZSB3ZSByZWNvZ25pemUgZnJhbWVzIGZyb20gb3Vyc2VsdmVzIGluIGhzcl9oYW5kbGVfZnJhbWUoKSAqL1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTc0MS1cXHRyZXMgPSBoc3JfY3JlYXRlX3NlbGZfbm9kZShoc3IsIGhzcl9kZXYtXFx1MDAzZWRldl9hZGRyLFxcbi0tXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYz02Nj1ib29sIGhzcl9pc19ub2RlX2luX2RiKHN0cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIsXFxuLS1cXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTcxLVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM6NzI6LyogSGVscGVyIGZvciBkZXZpY2UgaW5pdDsgdGhlIHNlbGZfbm9kZSBpcyB1c2VkIGluIGhzcl9oYW5kbGVfZnJhbWUoKSB0b1xcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtNzMtICogcmVjb2duaXplIGZyYW1lcyBmcm9tIHNlbGYgdGhhdCdzIGJlZW4gbG9vcGVkIG92ZXIgdGhlIEhTUiByaW5nLlxcbi0tXFxubmV0L2hzci9oc3JfbWFpbi5jPTMxPXN0YXRpYyBpbnQgaHNyX25ldGRldl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcXG4tLVxcbm5ldC9oc3IvaHNyX21haW4uYy05MS1cXG5uZXQvaHNyL2hzcl9tYWluLmM6OTI6XFx0XFx0LyogTWFrZSBzdXJlIHdlIHJlY29nbml6ZSBmcmFtZXMgZnJvbSBvdXJzZWx2ZXMgaW4gaHNyX2hhbmRsZV9mcmFtZSgpICovXFxubmV0L2hzci9oc3JfbWFpbi5jLTkzLVxcdFxcdHBvcnQgPSBoc3JfcG9ydF9nZXRfaHNyKGhzciwgSFNSX1BUX1NMQVZFX0IpO1xcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYz0xOT1ib29sIGhzcl9pbnZhbGlkX2Rhbl9pbmdyZXNzX2ZyYW1lKF9fYmUxNiBwcm90b2NvbClcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMjMtXFxubmV0L2hzci9oc3Jfc2xhdmUuYzoyNDpzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTI1LXtcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM9ODU9Ym9vbCBoc3JfcG9ydF9leGlzdHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg2LXtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjg3OlxcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VyeF9oYW5kbGVyKSA9PSBoc3JfaGFuZGxlX2ZyYW1lO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODgtfVxcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYz0xMzI9c3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTU5LVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM6MTYwOlxcdHJlcyA9IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyKGRldiwgaHNyX2hhbmRsZV9mcmFtZSwgcG9ydCk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYy0xNjEtXFx0aWYgKHJlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDY6NTEuNTE4ODY1Nzg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MDQ0Mzc5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEhTUiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlIGlzIGBoc3JfZm9yd2FyZF9za2JgIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmUgdGhhdCdzIGJlZW4gbW9kaWZpZWQuIEFsc28sIHRoZSBSeCBoYW5kbGVyLCBgaHNyX2hhbmRsZV9mcmFtZWAsIGlzIHZpdGFsIHRvIHRoZSBIU1IgcHJvY2Vzc2luZyBmbG93LiAgVGhleSd2ZSBhbHNvIGludHJvZHVjZWQgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2Agd2hpY2ggYXJlIGludGVyZXN0aW5nIGFkZGl0aW9ucy5cblxuVGhlIGBIU1JgIGNvbmZpZyBpcyB0aGUga2V5IHRvIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgd2hpY2ggbWFrZXMgY29tcGxldGUgc2Vuc2UuIFdlIGhhdmUgdG8gZG91YmxlIGNoZWNrIGlmIGFueSBvdGhlciBjb25maWdzIGFyZSBuZWVkZWQsIGJ1dCBzaW5jZSBgbmV0L2NvcmUvZGV2LmNgIGlzIGFsd2F5cyBjb21waWxlZCBhbmQgYG5ldC9oc3IvYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfSFNSYCBpcyBlbmFibGVkLCB0aGVuIHdlIGNhbiBjb25maWRlbnRseSBzdGF0ZSB0aGF0IGBFbmFibGVDb25maWdzYCBpcyBqdXN0IGBbXCJIU1JcIl1gLlxuXG5BcyBmb3Igd2hpY2ggZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nPyBXZWxsLCBiZXNpZGVzIGBoc3JfZm9yd2FyZF9za2JgLCB3ZSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIGFzIHRoZXNlIGFyZSBpbnRlZ3JhbCB0byB0aGUgR1JPIGRpc2FibGluZyBhc3BlY3Qgb2YgdGhlIGNoYW5nZXMgYW5kIHdvdWxkIGJlIGltcG9ydGFudCBmdXp6aW5nIHRhcmdldHMuICBCYXNlZCBvbiBteSBrbm93bGVkZ2UsIGBoc3JfZGV2X3htaXRgIHNob3VsZCBiZSBpbmNsdWRlZCBzaW5jZSBpdCBoYW5kbGVzIHRyYW5zbWlzc2lvbiwgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCBzaG91bGQgYWxzbyBiZSBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgcnggaGFuZGxlci4gVGh1cywgYEZvY3VzU3ltYm9sc2AgaXMgZGVmaW5lZCBhcyBgW1wiaHNyX2ZvcndhcmRfc2tiXCIsIFwiZGV2X2Rpc2FibGVfZ3JvXCIsIFwibmV0aWZfZGlzYWJsZV9ncm9cIiwgXCJoc3JfZGV2X3htaXRcIiwgXCJoc3JfaGFuZGxlX2ZyYW1lXCJdYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCBhcmUgZXhwb3J0ZWQ/IFllcywgYWZ0ZXIgYSBxdWljayBjaGVjayB0aGV5J3JlIGV4cG9ydGVkIGluIGBuZXQvY29yZS9kZXZfYXBpLmNgIGFuZCBgbmV0L2NvcmUvZGV2LmNgLCByZXNwZWN0aXZlbHksIHNvIHRoZXkgYXJlIGFjY2Vzc2libGUuXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25zIHRvIGRpc2FibGUgR1JPIGFuZCBtb2RpZmllcyB0aGUgSFNSIGRyaXZlciB0byB1bmZvbGQgR1NPIHN1cGVyLXBhY2tldHMgaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gZGlzYWJsZXMgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBuZXR3b3JraW5nIGNvcmUgYW5kIHRoZSBIU1IgZHJpdmVyLCBhbmQgYW55IHRyYWZmaWMgdGhyb3VnaCBhbiBIU1IgaW50ZXJmYWNlIGlzIGdvaW5nIHRvIHRvdWNoIHRoZXNlIG1vZGlmaWNhdGlvbnMuIFRoYXQgbWFrZXMgdGhlbSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGluZyB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIGlzIGEgcHJldHR5IG9idmlvdXMgY29uY2x1c2lvbi5cblxuUmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTYyNiwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDY6NTkuMjIzMzA2NTM2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NTAxOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgICBcImRldl9kaXNhYmxlX2dyb1wiLFxuICAgIFwibmV0aWZfZGlzYWJsZV9ncm9cIixcbiAgICBcImhzcl9kZXZfeG1pdFwiLFxuICAgIFwiaHNyX2hhbmRsZV9mcmFtZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgdG8gZGlzYWJsZSBHUk8gb24gbmV0IGRldmljZXMsIGFuZCBtb2RpZmllcyB0aGUgSFNSIGRyaXZlciB0byB1bmZvbGQgR1NPIHN1cGVyLXBhY2tldHMgaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gZGlzYWJsZXMgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIEhTUiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBzZW5kaW5nIHRyYWZmaWMgdGhyb3VnaCBhbiBIU1IgaW50ZXJmYWNlLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gICAgXCJkZXZfZGlzYWJsZV9ncm9cIixcbiAgICBcIm5ldGlmX2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJoc3JfZGV2X3htaXRcIixcbiAgICBcImhzcl9oYW5kbGVfZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIHRvIGRpc2FibGUgR1JPIG9uIG5ldCBkZXZpY2VzLCBhbmQgbW9kaWZpZXMgdGhlIEhTUiBkcml2ZXIgdG8gdW5mb2xkIEdTTyBzdXBlci1wYWNrZXRzIGluIGBoc3JfZm9yd2FyZF9za2JgLiBJdCBhbHNvIGRpc2FibGVzIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG5ldHdvcmtpbmcgYW5kIHRoZSBIU1IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgYnkgc2VuZGluZyB0cmFmZmljIHRocm91Z2ggYW4gSFNSIGludGVyZmFjZSwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcbtpb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 15:45:12 +0000 UTC FinishedAt: 2026-08-01 15:47:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "51b093a7ba27476e1f639455f005e8d2e75390e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "51b093a7ba27476e1f639455f005e8d2e75390e4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "7eb36e87-98e3-49c0-a95f-adb6c425577e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hsr_forward_skb", "dev_disable_gro", "netif_disable_gro", "hsr_dev_xmit", "hsr_handle_frame" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7aHNyX2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byBkaXNhYmxlIEdSTyBvbiBuZXQgZGV2aWNlcywgYW5kIG1vZGlmaWVzIHRoZSBIU1IgZHJpdmVyIHRvIHVuZm9sZCBHU08gc3VwZXItcGFja2V0cyBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgSFNSIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGJ5IHNlbmRpbmcgdHJhZmZpYyB0aHJvdWdoIGFuIEhTUiBpbnRlcmZhY2UsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhjZjc1NWE5ZDkyYjM5MDgxNzk2MGU3M2ZlODI3MzZkMGY0MGFkNzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDE1OjQ2OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA5OTgxZDYzN2Y4YjU0Li5lYmEyYzI2YTQ5YmE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTM0MzQsNiAmIzQzOzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xuIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7XG4gdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA1OTMzYzVkYWIwOWVlLi5hNmNmMmFkYzg2MjU2IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTg0MCw2ICYjNDM7MTg0MCwyNCBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHR9XG4gfVxuIFxuJiM0Mzt2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJfZGV2O1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4mIzQzO1xuJiM0MztcdGRldi1cdTAwM2V3YW50ZWRfZmVhdHVyZXMgXHUwMDI2PSB+KE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpO1xuJiM0MztcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgKE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpKSlcbiYjNDM7XHRcdG5ldGRldl9XQVJOKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgR1JPIVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoZGV2LCBsb3dlcl9kZXYsIGl0ZXIpIHtcbiYjNDM7XHRcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xuJiM0MztcdFx0bmV0aWZfZGlzYWJsZV9ncm8obG93ZXJfZGV2KTtcbiYjNDM7XHRcdG5ldGRldl91bmxvY2tfb3BzKGxvd2VyX2Rldik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqXHRkZXZfZGlzYWJsZV9ncm9faHcgLSBkaXNhYmxlIEhXIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4gICpcdEBkZXY6IGRldmljZVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9hcGkuYyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuaW5kZXggNDM3OTQ3ZGQwOGVkNS4uMDJmYjIxNjI5NTEyOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldl9hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2X2FwaS5jXG5AQCAtMjY5LDYgJiM0MzsyNjksMjIgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZGV2X2Rpc2FibGVfZ3JvKCkgLSBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlXG4mIzQzOyAqIEBkZXY6IGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBEaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0IGRldmljZS4gIE11c3QgYmVcbiYjNDM7ICogY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZCBwYWNrZXRzIG1heSBiZVxuJiM0MzsgKiBmb3J3YXJkZWQgdG8gYW5vdGhlciBpbnRlcmZhY2UuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4mIzQzO1x0bmV0aWZfZGlzYWJsZV9ncm8oZGV2KTtcbiYjNDM7XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfZ3JvKTtcbiYjNDM7XG4gLyoqXG4gICogZGV2X3NldF9wcm9taXNjdWl0eSgpIC0gdXBkYXRlIHByb21pc2N1aXR5IGNvdW50IG9uIGEgZGV2aWNlXG4gICogQGRldjogZGV2aWNlXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuaW5kZXggNTU1NWI3MWFiMTliNS4uMjQ4Y2JiMTQyZTIxZSAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xuQEAgLTIzMiw5ICYjNDM7MjMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRza2ItXHUwMDNlZGV2ID0gbWFzdGVyLVx1MDAzZWRldjtcbiBcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbkBAIC0zMzUsNiAmIzQzOzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc2VxdWVuY2VfbnIpO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuIFx0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xuIFx0LyogSFNSdjAgaGFzIDYgdW51c2VkIGJ5dGVzIGFmdGVyIHRoZSBNQUMgKi9cbkBAIC0zNTYsMTQgJiM0MzszNTUsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVx1MDAzZW1hY2FkZHJlc3NfcmVkYm94KTtcbiBcdH1cbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiYjNDM7XHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcbiBcdFx0cmV0dXJuO1xuLVx0fVxuIFxuIFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRyZXR1cm47XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuQEAgLTM5MCw2ICYjNDM7Mzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKTtcbiBcdGhzci1cdTAwM2VzdXBfc2VxdWVuY2VfbnImIzQzOyYjNDM7O1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG5AQCAtMzk3LDEzICYjNDM7MzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuIFx0aHNyX3NwID0gc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKSk7XG4gXHRldGhlcl9hZGRyX2NvcHkoaHNyX3NwLVx1MDAzZW1hY2FkZHJlc3NfQSwgbWFzdGVyLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXG4tXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkge1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4mIzQzO1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gfVxuIFxuIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb25cbkBAIC02NTksNyAmIzQzOzY1Miw3IEBAIHZvaWQgaHNyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiBcbiBcdGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHxcbi1cdFx0XHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcbiYjNDM7XHRcdFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuaW5kZXggMDc3NDk4MWE2NWMxNi4uM2ZjZGJhYzQ5YzU5ZCAxMDA2NDRcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2dzby5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aHNyX21haW4uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2hzcl9mcmFtZXJlZy5oXCYjMzQ7XG4gXG5AQCAtNjIxLDkgJiM0Mzs2MjIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSIHx8XG4gXHQgICAgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9JTlRFUkxJTkspIHtcbiBcdFx0LyogU2VxdWVuY2UgbnIgZm9yIHRoZSBtYXN0ZXIvaW50ZXJsaW5rIG5vZGUgKi9cbi1cdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4mIzQzO1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0XHRmcmFtZS1cdTAwM2VzZXF1ZW5jZV9uciA9IGhzci1cdTAwM2VzZXF1ZW5jZV9ucjtcbiBcdFx0aHNyLVx1MDAzZXNlcXVlbmNlX25yJiM0MzsmIzQzOztcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtNzMxLDcgJiM0Mzs3MzMsNyBAQCBzdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIH1cbiBcbiAvKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHJjdSByZWFkIGxvY2sgKGJlY2F1c2Ugb2YgdGhlIHBvcnQgcGFyYW1ldGVyKSAqL1xuLXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiYjNDM7c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4ge1xuIFx0c3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lO1xuIFxuQEAgLTc2MCwzICYjNDM7NzYyLDUwIEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuIFx0a2ZyZWVfc2tiKHNrYik7XG4gfVxuJiM0MztcbiYjNDM7LyogR1NPIGZhbi1vdXQgZnVubmVsOiB1bmZvbGQgc3VwZXItcGFja2V0cyBiZWZvcmUgcGVyLWZyYW1lIHByb2Nlc3Npbmcgc29cbiYjNDM7ICogZWFjaCB3aXJlIGZyYW1lIGdldHMgaXRzIG93biBIU1IvUFJQIHRhZyBhbmQgc2VxdWVuY2UgbnVtYmVyLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0O1xuJiM0MztcbiYjNDM7XHRpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7XG4mIzQzO1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBVbmZvbGQgb25seSBwbGFpbi1FdGhlcm5ldCBHU08gc3VwZXItcGFja2V0czogbG9jYWxseSBnZW5lcmF0ZWRcbiYjNDM7XHQgKiBvbiB0aGUgbWFzdGVyLCBvciBhcnJpdmluZyB1bnRhZ2dlZCBmcm9tIHRoZSBTQU4gc2lkZSBvbiB0aGVcbiYjNDM7XHQgKiBpbnRlcmxpbmsuIEEgc3VwZXItcGFja2V0IGZyb20gYSBMQU4gc2xhdmUgbWF5IGNhcnJ5IHBlci1mcmFtZVxuJiM0MztcdCAqIEhTUiB0YWdzIC8gUFJQIFJDVCB0cmFpbGVycyB0aGF0IHNvZnR3YXJlIHNlZ21lbnRhdGlvbiBjYW5ub3RcbiYjNDM7XHQgKiByZWNvdmVyOyBhbiBhbHJlYWR5LXRhZ2dlZCBIU1IvUFJQIHN1cGVyLXBhY2tldCB2aW9sYXRlc1xuJiM0MztcdCAqIHBlci1mcmFtZSB3aXJlIHNlbWFudGljcy4gRHJvcCBib3RoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZXR5cGUgIT0gSFNSX1BUX01BU1RFUiBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0eXBlICE9IEhTUl9QVF9JTlRFUkxJTkspXG4mIzQzO1x0XHRnb3RvIGRyb3BfZ3NvO1xuJiM0MztcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSFNSKSB8fFxuJiM0MztcdCAgICBza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUFJQKSlcbiYjNDM7XHRcdGdvdG8gZHJvcF9nc287XG4mIzQzO1xuJiM0MztcdC8qIGZlYXR1cmVzID0gMDogcmVxdWVzdCBmdWxsIHNvZnR3YXJlIHNlZ21lbnRhdGlvbi4gdHhfcGF0aCBpcyB0cnVlXG4mIzQzO1x0ICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb21cbiYjNDM7XHQgKiB0aGUgaW50ZXJsaW5rIGZvbGxvd3MgUlggY2hlY2tzdW0gc2VtYW50aWNzLlxuJiM0MztcdCAqL1xuJiM0MztcdHNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHNlZ3MpIHx8IHVubGlrZWx5KCFzZWdzKSlcbiYjNDM7XHRcdGdvdG8gZHJvcF9nc287XG4mIzQzO1xuJiM0MztcdGNvbnN1bWVfc2tiKHNrYik7XG4mIzQzO1x0d2hpbGUgKHNlZ3MpIHtcbiYjNDM7XHRcdG5leHQgPSBzZWdzLVx1MDAzZW5leHQ7XG4mIzQzO1x0XHRzZWdzLVx1MDAzZW5leHQgPSBOVUxMO1xuJiM0MztcdFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcbiYjNDM7XHRcdHNlZ3MgPSBuZXh0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm47XG4mIzQzO1xuJiM0Mztkcm9wX2dzbzpcbiYjNDM7XHRwb3J0LVx1MDAzZWRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOztcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX3NsYXZlLmMgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5pbmRleCAwMWM3M2I0YjUwZGRkLi4wY2E1NWQ5MzIzYzU3IDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xuQEAgLTczLDE2ICYjNDM7NzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdH1cbiBcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4gXG4tXHQvKiBPbmx5IHRoZSBmcmFtZXMgcmVjZWl2ZWQgb3ZlciB0aGUgaW50ZXJsaW5rIHBvcnQgd2lsbCBhc3NpZ24gYVxuLVx0ICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuXG4tXHQgKi9cbi1cdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0fSBlbHNlIHtcbi1cdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4tXHR9XG4mIzQzO1x0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG4gXG4gZmluaXNoX2NvbnN1bWU6XG4gXHRyZXR1cm4gUlhfSEFORExFUl9DT05TVU1FRDtcbkBAIC0xNzAsNiAmIzQzOzE2MSw3IEBAIHN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAocmVzKVxuIFx0XHRnb3RvIGZhaWxfcnhfaGFuZGxlcjtcbiBcdGRldl9kaXNhYmxlX2xybyhkZXYpO1xuJiM0MztcdGRldl9kaXNhYmxlX2dybyhkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbmluZGV4IDMxZmI5MzI2Y2Y1MzMuLjBkMTA1NDc2ZTdjNTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXG4gXG4gVEVTVF9QUk9HUyA6PSBcXFxuJiM0MztcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI4OGRlM2E2MGI4OTlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxuQEAgLTAsMCAmIzQzOzEsNDYyIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcbiYjNDM7I1xuJiM0MzsjICAxLiBFbnNsYXZpbmcgYSBkZXZpY2UgdG8gYW4gSFNSIG1hc3RlciBkaXNhYmxlcyBHUk8gb24gaXRcbiYjNDM7IyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cbiYjNDM7IyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXG4mIzQzOyMgIDMuIEEgVENQIHN0cmVhbSBmcm9tIGEgVFNPLWVuYWJsZWQgU0FOICh3aGljaCB0aGVyZWZvcmUgZW1pdHMgR1NPXG4mIzQzOyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6XG4mIzQzOyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xuJiM0MzsjICAgICB0aGUgU0FOIGFuZCBwZXItZnJhbWUtc2l6ZWQgdHJhZmZpYyBsZWF2aW5nIHRoZSBEVVQmIzM5O3MgTEFOIHBvcnRzLlxuJiM0MzsjXG4mIzQzOyMgVG9wb2xvZ3kgKDEwMC42NC4wLjAvMjQpOlxuJiM0MzsjXG4mIzQzOyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXG4mIzQzOyMgICYjNDM7LS0tLS0tLS0tLS0mIzQzOyAgaW50ZXJsaW5rICAmIzQzOy0tLS0tLS0tLS0tLS0tLSYjNDM7ICBMQU4gQS9CICAmIzQzOy0tLS0tLS0tLS0tJiM0MztcbiYjNDM7IyAgfCBzMCBbMC4xXSAgfC0tLS0tLS0tLS0tLS18IGRfaWwgICBoc3IwICAgfC0tLS0tLS0tLS0tfCBoc3IxIFswLjNdfFxuJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHxcbiYjNDM7IyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzQzOy0tLS0tLS0tLS0tLS0tLSYjNDM7ICAgICAgICAgICAmIzQzOy0tLS0tLS0tLS0tJiM0MztcbiYjNDM7I1xuJiM0MzsjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCYjMzk7cyBmb3J3YXJkIHBhdGhcbiYjNDM7IyAoaW50ZXJsaW5rIFJYIC1cdTAwM2UgTEFOIEEvQiBUWCksIHNvIGV2ZXJ5IFNBTiBmcmFtZSBpcyB0YWdnZWQgYW5kXG4mIzQzOyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXG4mIzQzO1xuJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4mIzQzO1xuJiM0MztzYW5faXA9XCYjMzQ7MTAwLjY0LjAuMVwmIzM0O1xuJiM0MztwZWVyX2lwPVwmIzM0OzEwMC42NC4wLjNcJiMzNDtcbiYjNDM7XG4mIzQzOyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKTpcbiYjNDM7IyBTQU5fQVZHX01JTiBwcm92ZXMgR1NPIHN1cGVyLXBhY2tldHMgbGVmdCB0aGUgU0FOOyBMQU5fQVZHX01BWCBpcyBhXG4mIzQzOyMgZ3VhcmQgd2l0aCBtYXJnaW4sIG5vdCB0aGUgcHJvdG9jb2wgbWF4aW11bSAoc2VlIGRvX3Rzb19zdHJlYW1fdGVzdCkuXG4mIzQzO1NBTl9BVkdfTUlOPTIwNDhcbiYjNDM7TEFOX0FWR19NQVg9MTUxNFxuJiM0MztcbiYjNDM7aXBlcmZfcGlkPVwmIzM0O1wmIzM0O1xuJiM0MztzZXJ2ZXJfd3JhcHBlcj1cJiMzNDtcJiMzNDtcbiYjNDM7d29ya2Rpcj1cJiMzNDtcJiMzNDtcbiYjNDM7cGlkZmlsZT1cJiMzNDtcJiMzNDtcbiYjNDM7cmNmaWxlPVwmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7Y2xlYW51cCgpXG4mIzQzO3tcbiYjNDM7XHQjIGV4YWN0LVBJRCBraWxsIG9ubHkgYWZ0ZXIgUkUtdmFsaWRhdGluZyBpZGVudGl0eSAoZ3VhcmRzIGFnYWluc3RcbiYjNDM7XHQjIFBJRCByZXVzZSBiZXR3ZWVuIHB1YmxpY2F0aW9uIGFuZCBjbGVhbnVwKVxuJiM0MztcdGlmIFsgLW4gXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IHZhbGlkX3NlcnZlcl9waWQgXCYjMzQ7JHtpcGVyZl9waWR9XCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRraWxsIFwmIzM0OyR7aXBlcmZfcGlkfVwmIzM0OyAyXHUwMDNlL2Rldi9udWxsXG4mIzQzO1x0ZmlcbiYjNDM7XHRpcGVyZl9waWQ9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0aWYgWyAtbiBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHQjIHRoZSB3cmFwcGVyIHdhaXRzIG9uIHRoZSBzZXJ2ZXI7IHJlYXAgaXQgd2l0aCBhIDVzIGJvdW5kIHNvIGFcbiYjNDM7XHRcdCMgbGl2ZS1idXQtdW5wdWJsaXNoZWQgc2VydmVyIGNhbiBuZXZlciBoYW5nIGNsZWFudXBcbiYjNDM7XHRcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuJiM0MztcdFx0XHRraWxsIC0wIFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcbiYjNDM7XHRcdFx0c2xlZXAgMC4xXG4mIzQzO1x0XHRkb25lXG4mIzQzO1x0XHRraWxsIFwmIzM0OyR7c2VydmVyX3dyYXBwZXJ9XCYjMzQ7IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XHRcdHdhaXQgXCYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn1cJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFx0c2VydmVyX3dyYXBwZXI9XCYjMzQ7XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7XHQjIGxhc3QgcmVzb3J0LCBuYW1lc3BhY2Utc2NvcGVkIG9ubHk6IFRFUk0gdGhlIGlwZXJmMyBwcm9jZXNzZXMgdGhhdFxuJiM0MztcdCMgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgcGVlciBuZXRucywgcG9sbCBmb3IgYm91bmRlZCBleGl0LCB0aGVuXG4mIzQzO1x0IyBTSUdLSUxMIGFueSBzdXJ2aXZvciBiZWZvcmUgdG91Y2hpbmcgdGhlIG5hbWVzcGFjZSBuYW1lLiBBIGJsaW5kXG4mIzQzO1x0IyBwa2lsbCB3b3VsZCBzY2FuIHRoZSBob3N0IFBJRCBzcGFjZSBhbmQgaGl0IHVucmVsYXRlZCB0ZXN0cy5cbiYjNDM7XHRsb2NhbCBfcCBfc3RpbGxcbiYjNDM7XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwmIzM0OyRuc19wZWVyXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwpOyBkb1xuJiM0MztcdFx0aWYgaXNfaXBlcmYzX3BpZCBcJiMzNDskX3BcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdFx0a2lsbCBcJiMzNDskX3BcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFx0ZmlcbiYjNDM7XHRkb25lXG4mIzQzO1x0Zm9yIF8gaW4gJChzZXEgMSA1MCk7IGRvXG4mIzQzO1x0XHRfc3RpbGw9MFxuJiM0MztcdFx0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcJiMzNDskbnNfcGVlclwmIzM0OyAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbiYjNDM7XHRcdFx0aWYgaXNfaXBlcmYzX3BpZCBcJiMzNDskX3BcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdFx0XHRfc3RpbGw9MVxuJiM0MztcdFx0XHRcdGJyZWFrXG4mIzQzO1x0XHRcdGZpXG4mIzQzO1x0XHRkb25lXG4mIzQzO1x0XHRbIFwmIzM0OyRfc3RpbGxcJiMzNDsgLWVxIDAgXSBcdTAwMjZcdTAwMjYgYnJlYWtcbiYjNDM7XHRcdHNsZWVwIDAuMVxuJiM0MztcdGRvbmVcbiYjNDM7XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwmIzM0OyRuc19wZWVyXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwpOyBkb1xuJiM0MztcdFx0aWYgaXNfaXBlcmYzX3BpZCBcJiMzNDskX3BcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdFx0a2lsbCAtOSBcJiMzNDskX3BcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbFxuJiM0MztcdFx0ZmlcbiYjNDM7XHRkb25lXG4mIzQzO1x0IyByZW1vdmUgb25seSB0aGUga25vd24gbm9uLWVtcHR5IHByaXZhdGUgZGlyZWN0b3J5XG4mIzQzO1x0aWYgWyAtbiBcJiMzNDske3dvcmtkaXJ9XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IFsgLWQgXCYjMzQ7JHt3b3JrZGlyfVwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0XHRybSAtcmYgXCYjMzQ7JHt3b3JrZGlyfVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO1x0d29ya2Rpcj1cJiMzNDtcJiMzNDtcbiYjNDM7XHRwaWRmaWxlPVwmIzM0O1wmIzM0O1xuJiM0MztcdHJjZmlsZT1cJiMzNDtcJiMzNDtcbiYjNDM7XHRjbGVhbnVwX2FsbF9uc1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MztcbiYjNDM7Y2hlY2tfdG9vbCgpXG4mIzQzO3tcbiYjNDM7XHRpZiAhIGNvbW1hbmQgLXYgXCYjMzQ7JDFcJiMzNDsgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVwmIzM0O1xuJiM0MztcdFx0ZXhpdCAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7bnN4KClcbiYjNDM7e1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JDFcJiMzNDsgYmFzaCAtYyBcJiMzNDskMlwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztpc19pcGVyZjNfcGlkKClcbiYjNDM7e1xuJiM0MztcdFsgXCYjMzQ7JChjYXQgL3Byb2MvXCYjMzQ7JDFcJiMzNDsvY29tbSAyXHUwMDNlL2Rldi9udWxsKVwmIzM0OyA9IFwmIzM0O2lwZXJmM1wmIzM0OyBdXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgRGVjaW1hbC1jb3VudGVyIHZhbGlkYXRpb24gZm9yIHRoZSBzbmFwc2hvdCBibG9ja3M6IGV2ZXJ5IHZhbHVlIG11c3RcbiYjNDM7IyBiZSBhIHBsYWluIGRlY2ltYWwgbnVtYmVyLiBBIHBhcnNlIGZhaWx1cmUgaW4gcmVhZF90eF9jb3VudGVycyB5aWVsZHNcbiYjNDM7IyBlbXB0eS9nYXJibGVkIGZpZWxkcywgd2hpY2ggdGhpcyBjaGVjayB0dXJucyBpbnRvIGFuIGltbWVkaWF0ZSBGQUlMLlxuJiM0Mzt2YWxpZF9kZWNpbWFscygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCB2XG4mIzQzO1xuJiM0MztcdGZvciB2IGluIFwmIzM0OyRAXCYjMzQ7OyBkb1xuJiM0MztcdFx0W1sgXCYjMzQ7JHZcJiMzNDsgPX4gXlswLTldJiM0MzskIF1dIHx8IHJldHVybiAxXG4mIzQzO1x0ZG9uZVxuJiM0MztcdHJldHVybiAwXG4mIzQzO31cbiYjNDM7XG4mIzQzO3NldHVwX3RvcG8oKVxuJiM0Mzt7XG4mIzQzO1x0c2V0dXBfbnMgbnNfZHV0IG5zX3NhbiBuc19wZWVyIHx8IGV4aXQgJD9cbiYjNDM7XG4mIzQzO1x0aXAgbGluayBhZGQgZF9hIG5ldG5zIFwmIzM0OyRuc19kdXRcJiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2EgbmV0bnMgXCYjMzQ7JG5zX3BlZXJcJiMzNDtcbiYjNDM7XHRpcCBsaW5rIGFkZCBkX2IgbmV0bnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyBcJiMzNDskbnNfcGVlclwmIzM0O1xuJiM0MztcdGlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zIFwmIzM0OyRuc19zYW5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBIU1IgdGFncyBhZGQgNiBieXRlcyBwZXIgZnJhbWU7IGdpdmUgdGhlIExBTiBsZWdzIGhlYWRyb29tLlxuJiM0MztcdGZvciBpZmFjZSBpbiBkX2EgZF9iOyBkb1xuJiM0MztcdFx0bnN4IFwmIzM0OyRuc19kdXRcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcXFxuJiM0MztcdFx0XHRpcCBsaW5rIHNldCAkaWZhY2UgdXBcJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO1x0Zm9yIGlmYWNlIGluIHBfYSBwX2I7IGRvXG4mIzQzO1x0XHRuc3ggXCYjMzQ7JG5zX3BlZXJcJiMzNDsgXCYjMzQ7aXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcXFxuJiM0MztcdFx0XHRpcCBsaW5rIHNldCAkaWZhY2UgdXBcJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO1xuJiM0MztcdG5zeCBcJiMzNDskbnNfZHV0XCYjMzQ7IFwmIzM0O2lwIGxpbmsgc2V0IGRfaWwgdXBcJiMzNDtcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX3NhblwmIzM0OyBcJiMzNDtpcCBsaW5rIHNldCBzMCB1cDsgaXAgYWRkciBhZGQgJHNhbl9pcC8yNCBkZXYgczBcJiMzNDtcbiYjNDM7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19kdXRcJiMzNDsgXCYjMzQ7aXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxuJiM0MztcdFx0c2xhdmUxIGRfYSBzbGF2ZTIgZF9iIGludGVybGluayBkX2lsIHByb3RvIDA7IFxcXG4mIzQzO1x0XHRpcCBsaW5rIHNldCBoc3IwIHVwXCYjMzQ7XG4mIzQzO1x0bnN4IFwmIzM0OyRuc19wZWVyXCYjMzQ7IFwmIzM0O2lwIGxpbmsgYWRkIGhzcjEgdHlwZSBoc3IgXFxcbiYjNDM7XHRcdHNsYXZlMSBwX2Egc2xhdmUyIHBfYiBwcm90byAwOyBcXFxuJiM0MztcdFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBMZXQgdGhlIG5vZGVzIHNlZSBlYWNoIG90aGVyJiMzOTtzIHN1cGVydmlzaW9uIGZyYW1lcy5cbiYjNDM7XHRzbGVlcCAyXG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoZWNrX2ZlYXR1cmUoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBpZmFjZT1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIGZlYXR1cmU9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XHRsb2NhbCB3YW50PVwmIzM0OyQ0XCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmIG5zeCBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7ZXRodG9vbCAtayAkaWZhY2VcJiMzNDsgfCBncmVwIC1xIFwmIzM0O14kZmVhdHVyZTogJHdhbnRcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF1cJiMzNDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgbm90ICR3YW50XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgT2ZmLW9yLWFic2VudCB2YXJpYW50OiBmYWlscyBvbmx5IHdoZW4gdGhlIGZlYXR1cmUgaXMgcHJlc2VudCBBTkQgb24sXG4mIzQzOyMgc28gZGV2aWNlcyB0aGF0IHNpbXBseSBkbyBub3QgbGlzdCB0aGUgZmVhdHVyZSBkbyBub3QgZmFpbCBpdC5cbiYjNDM7Y2hlY2tfZmVhdHVyZV9ub3Rfb24oKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9XCYjMzQ7JDFcJiMzNDtcbiYjNDM7XHRsb2NhbCBpZmFjZT1cJiMzNDskMlwmIzM0O1xuJiM0MztcdGxvY2FsIGZlYXR1cmU9XCYjMzQ7JDNcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aWYgbnN4IFwmIzM0OyRuc1wmIzM0OyBcJiMzNDtldGh0b29sIC1rICRpZmFjZVwmIzM0OyB8IGdyZXAgLXEgXCYjMzQ7XiRmZWF0dXJlOiBvblwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG9uXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7SU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdXCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzKClcbiYjNDM7e1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBHUk8uXCYjMzQ7XG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGRfYSBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2lsIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxuJiM0MztcdHN0b3BfaWZfZXJyb3IgXCYjMzQ7R1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLlwmIzM0O1xuJiM0MztcbiYjNDM7XHRlY2hvIFwmIzM0O0lORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgSFctR1JPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2EgcngtZ3JvLWh3IG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2IgcngtZ3JvLWh3IG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2lsIHJ4LWdyby1odyBvZmZcbiYjNDM7XHRzdG9wX2lmX2Vycm9yIFwmIzM0O0hXLUdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IHRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPLlwmIzM0O1xuJiM0MztcdGNoZWNrX2ZlYXR1cmUgXCYjMzQ7JG5zX2R1dFwmIzM0OyBoc3IwIGdlbmVyaWMtc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXG4mIzQzO1x0Y2hlY2tfZmVhdHVyZSBcJiMzNDskbnNfZHV0XCYjMzQ7IGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZlxuJiM0MztcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwmIzM0OyRuc19kdXRcJiMzNDsgaHNyMCB0eC10Y3A2LXNlZ21lbnRhdGlvblxuJiM0MztcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwmIzM0OyRuc19kdXRcJiMzNDsgaHNyMCB0eC11ZHAtc2VnbWVudGF0aW9uXG4mIzQzO1x0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXCYjMzQ7JG5zX2R1dFwmIzM0OyBoc3IwIHR4LWdzby1saXN0XG4mIzQzO1x0c3RvcF9pZl9lcnJvciBcJiMzNDtIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPLWZhbWlseSBmZWF0dXJlcy5cJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7YWxsb2Nfd29ya2RpcigpXG4mIzQzO3tcbiYjNDM7XHQjIEFsbG9jYXRlZCBvbmx5IGhlcmUsIGxvbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdG9wb2xvZ3kgY2xlYW51cCwgc29cbiYjNDM7XHQjIGNsZWFudXAoKSBhdCBzZXR1cF90b3BvKCkgdGltZSBjYW4gbmV2ZXIgcmVtb3ZlIGl0LiBta3RlbXAgZmFpbHVyZVxuJiM0MztcdCMgaXMgYSBoYXJkIHRlc3QgZmFpbHVyZS5cbiYjNDM7XHR3b3JrZGlyPSQobWt0ZW1wIC1kIC90bXAvaHNyX2dyb190ZXN0LlhYWFhYWCkgfHwge1xuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBta3RlbXAgLWQgZmFpbGVkXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRleGl0IDFcbiYjNDM7XHR9XG4mIzQzO1x0Y2htb2QgNzAwIFwmIzM0OyR7d29ya2Rpcn1cJiMzNDtcbiYjNDM7XHRwaWRmaWxlPVwmIzM0OyR7d29ya2Rpcn0vaXBlcmYucGlkXCYjMzQ7XG4mIzQzO1x0cmNmaWxlPVwmIzM0OyR7d29ya2Rpcn0vaXBlcmYucmNcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBOdW1lcmljLCBhbGl2ZSwgY29tbSA9PSBpcGVyZjMsIGFuZCByZWFsbHkgb3duZWQgYnkgdGhlIHBlZXIgbmV0bnMuXG4mIzQzO3ZhbGlkX3NlcnZlcl9waWQoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgcD1cJiMzNDskMVwmIzM0O1xuJiM0MztcbiYjNDM7XHRbWyBcJiMzNDskcFwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXV0gfHwgcmV0dXJuIDFcbiYjNDM7XHRraWxsIC0wIFwmIzM0OyRwXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIDFcbiYjNDM7XHRbIFwmIzM0OyQoY2F0IC9wcm9jL1wmIzM0OyRwXCYjMzQ7L2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcJiMzNDsgPSBcJiMzNDtpcGVyZjNcJiMzNDsgXSB8fCByZXR1cm4gMVxuJiM0MztcdGlwIG5ldG5zIHBpZHMgXCYjMzQ7JG5zX3BlZXJcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXF4IFwmIzM0OyRwXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXJ0X2lwZXJmX3NlcnZlcigpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBjYW5kaWRhdGVfcGlkXG4mIzQzO1xuJiM0MztcdCMgT25lLXNob3Qgc2VydmVyLCBubyAtRDogdGhlIHdyYXBwZXIgcmVjb3JkcyBpdHMgZXhhY3QgUElEIGFuZCBpdHNcbiYjNDM7XHQjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLlxuJiM0MztcdGFsbG9jX3dvcmtkaXJcbiYjNDM7XHQoIG5zeCBcJiMzNDskbnNfcGVlclwmIzM0OyBcJiMzNDtpcGVyZjMgLXMgLTEgXHUwMDNlIC9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcdTAwMjYgXFxcbiYjNDM7XHRcdGVjaG8gXFwkISBcdTAwM2UgJHtwaWRmaWxlfTsgXFxcbiYjNDM7XHRcdHdhaXQgXFwkITsgXFxcbiYjNDM7XHRcdGVjaG8gXFwkPyBcdTAwM2UgJHtyY2ZpbGV9XCYjMzQ7ICkgXHUwMDI2XG4mIzQzO1x0c2VydmVyX3dyYXBwZXI9JCFcbiYjNDM7XHQjIHRoZSB3cmFwcGVyIHdyaXRlcyB0aGUgcGlkZmlsZSBhc3luY2hyb25vdXNseTsgd2FpdCBmb3IgaXQgdG9cbiYjNDM7XHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxuJiM0MztcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuJiM0MztcdFx0WyAtcyBcJiMzNDske3BpZGZpbGV9XCYjMzQ7IF0gXHUwMDI2XHUwMDI2IGJyZWFrXG4mIzQzO1x0XHRzbGVlcCAwLjFcbiYjNDM7XHRkb25lXG4mIzQzO1x0aWYgWyAhIC1zIFwmIzM0OyR7cGlkZmlsZX1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGRpZCBub3QgcHVibGlzaCBhIHBpZFwmIzM0OyBcXFxuJiM0MztcdFx0XHRcJiMzNDsobm8gcGlkZmlsZSlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0Y2FuZGlkYXRlX3BpZD0kKFx1MDAzY1wmIzM0OyR7cGlkZmlsZX1cJiMzNDspXG4mIzQzO1x0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFwmIzM0OyR7Y2FuZGlkYXRlX3BpZH1cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBwaWQgJiMzOTske2NhbmRpZGF0ZV9waWR9JiMzOTtcJiMzNDsgXFxcbiYjNDM7XHRcdFx0XCYjMzQ7ZmFpbGVkIHZhbGlkYXRpb25cJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0IyBwdWJsaXNoIG9ubHkgYWZ0ZXIgZnVsbCB2YWxpZGF0aW9uXG4mIzQzO1x0aXBlcmZfcGlkPVwmIzM0OyR7Y2FuZGlkYXRlX3BpZH1cJiMzNDtcbiYjNDM7XHRzbGVlcCAxXG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBQcmludCBcJiMzNDtcdTAwM2NieXRlc1x1MDAzZSBcdTAwM2NwYWNrZXRzXHUwMDNlXCYjMzQ7IGZvciBleGFjdGx5IG9uZSBUWCByZWNvcmQgb2YgbnMvZGV2OyBhbnl0aGluZ1xuJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC5cbiYjNDM7cmVhZF90eF9jb3VudGVycygpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBucz1cJiMzNDskMVwmIzM0OyBkZXY9XCYjMzQ7JDJcJiMzNDtcbiYjNDM7XHRsb2NhbCBvdXQgY250XG4mIzQzO1xuJiM0MztcdG91dD0kKG5zeCBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7aXAgLXMgbGluayBzaG93ICRkZXZcJiMzNDsgfCBcXFxuJiM0MztcdFx0YXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OylcbiYjNDM7XHRjbnQ9JChlY2hvIFwmIzM0OyRvdXRcJiMzNDsgfCBncmVwIC1jICYjMzk7XlswLTldKiBbMC05XSokJiMzOTspXG4mIzQzO1x0aWYgWyBcJiMzNDskY250XCYjMzQ7IC1uZSAxIF07IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2XCYjMzQ7IFxcXG4mIzQzO1x0XHRcdFwmIzM0OyhyZWNvcmRzPSRjbnQpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1x0ZWNobyBcJiMzNDskb3V0XCYjMzQ7XG4mIzQzO1x0cmV0dXJuIDBcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZXZhbF9jb3VudGVyX2RlbHRhKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5hbWU9XCYjMzQ7JDFcJiMzNDsgYjA9XCYjMzQ7JDJcJiMzNDsgcDA9XCYjMzQ7JDNcJiMzNDsgYjE9XCYjMzQ7JDRcJiMzNDsgcDE9XCYjMzQ7JDVcJiMzNDsgb3A9XCYjMzQ7JDZcJiMzNDsgbGltaXQ9XCYjMzQ7JDdcJiMzNDtcbiYjNDM7XHRsb2NhbCBiZCBwZFxuJiM0MztcbiYjNDM7XHRpZiAhIFtbIFwmIzM0OyRiMFwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXHUwMDI2XHUwMDI2IFwmIzM0OyRiMVwmIzM0OyA9fiBeWzAtOV0mIzQzOyQgXHUwMDI2XHUwMDI2IFxcXG4mIzQzO1x0XHRcJiMzNDskcDBcJiMzNDsgPX4gXlswLTldJiM0MzskIFx1MDAyNlx1MDAyNiBcJiMzNDskcDFcJiMzNDsgPX4gXlswLTldJiM0MzskIF1dOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IG5vbi1udW1lcmljIGNvdW50ZXIgaW5wdXQgZm9yICRuYW1lXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcdGJkPSQoKGIxIC0gYjApKVxuJiM0MztcdHBkPSQoKHAxIC0gcDApKVxuJiM0MztcdGlmIFsgXCYjMzQ7JGJkXCYjMzQ7IC1sdCAwIF0gfHwgWyBcJiMzNDskcGRcJiMzNDsgLWxlIDAgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBjb3VudGVyIGRlbHRhIGludmFsaWQgZm9yICRuYW1lXCYjMzQ7IFxcXG4mIzQzO1x0XHRcdFwmIzM0OyhieXRlcz0kYmQgcGt0cz0kcGQpXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcdGlmIFsgXCYjMzQ7JG9wXCYjMzQ7ID0gXCYjMzQ7Z3RcJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0aWYgWyBcJiMzNDskYmRcJiMzNDsgLWxlICQoKHBkICogbGltaXQpKSBdOyB0aGVuXG4mIzQzO1x0XHRcdGVjaG8gXCYjMzQ7RkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkIFx1MDAzYz0gJGxpbWl0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRcdHJldD0xXG4mIzQzO1x0XHRcdHJldHVybiAxXG4mIzQzO1x0XHRmaVxuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlmIFsgXCYjMzQ7JGJkXCYjMzQ7IC1ndCAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxuJiM0MztcdFx0XHRlY2hvIFwmIzM0O0ZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCBcdTAwM2UgJGxpbWl0XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRcdHJldD0xXG4mIzQzO1x0XHRcdHJldHVybiAxXG4mIzQzO1x0XHRmaVxuJiM0MztcdGZpXG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiAkbmFtZSBjb3VudGVyIGRlbHRhIGJ5dGVzPSRiZCBwYWNrZXRzPSRwZFwmIzM0OyBcXFxuJiM0MztcdFx0XCYjMzQ7KG9wICRvcCBsaW1pdCAkbGltaXQpIFsgT0sgXVwmIzM0O1xuJiM0MztcdHJldHVybiAwXG4mIzQzO31cbiYjNDM7XG4mIzQzO2RvX3Rzb19zdHJlYW1fdGVzdCgpXG4mIzQzO3tcbiYjNDM7XHRsb2NhbCBvdXQgc2VuZGVyX3JldHIgc2VydmVyX3JjXG4mIzQzO1x0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXG4mIzQzO1x0bG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSBiX2IwIGJfcDAgYl9iMSBiX3AxXG4mIzQzO1xuJiM0MztcdGVjaG8gXCYjMzQ7SU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cJiMzNDtcbiYjNDM7XHRuc3ggXCYjMzQ7JG5zX3NhblwmIzM0OyBcJiMzNDtldGh0b29sIC1LIHMwIHRzbyBvbiBnc28gb25cJiMzNDtcbiYjNDM7XHRjaGVja19mZWF0dXJlIFwmIzM0OyRuc19zYW5cJiMzNDsgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXG4mIzQzO1x0c3RvcF9pZl9lcnJvciBcJiMzNDtDb3VsZCBub3QgZW5hYmxlIFRTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cJiMzNDtcbiYjNDM7XG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cJiMzNDtcbiYjNDM7XHRzdGFydF9pcGVyZl9zZXJ2ZXIgfHwgcmV0dXJuXG4mIzQzO1xuJiM0MztcdCMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZVxuJiM0MztcdCMgbXVzdCBleGNlZWQgU0FOX0FWR19NSU4gKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IEdTTyBzdXBlci1wYWNrZXRzXG4mIzQzO1x0IyByZWFsbHkgbGVmdCB0aGUgU0FOKTsgZWFjaCBEVVQgTEFOIGxlZyBtdXN0IHN0YXkgdW5kZXIgTEFOX0FWR19NQVhcbiYjNDM7XHQjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlXG4mIzQzO1x0IyBhcmUgYWdncmVnYXRlIGRpc2NyaW1pbmF0b3JzLCBub3QgYSBwZXItZnJhbWUgbWF4aW11bSBwcm9vZi5cbiYjNDM7XHRzYW5fYjA9MDsgc2FuX3AwPTA7IGFfYjA9MDsgYV9wMD0wOyBiX2IwPTA7IGJfcDA9MFxuJiM0MztcdHJlYWQgLXIgc2FuX2IwIHNhbl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19zYW5cJiMzNDsgczApXG4mIzQzO0VPRlxuJiM0MztcdHJlYWQgLXIgYV9iMCBhX3AwIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfdHhfY291bnRlcnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2EpXG4mIzQzO0VPRlxuJiM0MztcdHJlYWQgLXIgYl9iMCBiX3AwIFx1MDAzY1x1MDAzY0VPRlxuJiM0MzskKHJlYWRfdHhfY291bnRlcnMgXCYjMzQ7JG5zX2R1dFwmIzM0OyBkX2IpXG4mIzQzO0VPRlxuJiM0MztcdGlmICEgdmFsaWRfZGVjaW1hbHMgXCYjMzQ7JHNhbl9iMFwmIzM0OyBcJiMzNDskc2FuX3AwXCYjMzQ7IFwmIzM0OyRhX2IwXCYjMzQ7IFwmIzM0OyRhX3AwXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDskYl9iMFwmIzM0OyBcJiMzNDskYl9wMFwmIzM0OzsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBiYXNlbGluZSBUWCBjb3VudGVyIHNuYXBzaG90IGludmFsaWRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm4gMVxuJiM0MztcdGZpXG4mIzQzO1xuJiM0MztcdCMgcmF0ZS1jYXBwZWQ6IHRoZSBQUklNQVJZIGRpc2NyaW1pbmF0b3IgaXMgdGhlIGNvdW50ZXIgaW5lcXVhbGl0eVxuJiM0MztcdCMgYWJvdmUsIG5vdCBtYXggdGhyb3VnaHB1dDsgcmV0cmFuc21pdHMgYXJlIGluZm9ybWF0aW9uYWwgb25seS5cbiYjNDM7XHQjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhXG4mIzQzO1x0IyBmdW5jdGlvbmFsIHByb2JsZW0uXG4mIzQzO1x0aWYgISBvdXQ9JChuc3ggXCYjMzQ7JG5zX3NhblwmIzM0OyBcJiMzNDt0aW1lb3V0IDYwIGlwZXJmMyAtYyAkcGVlcl9pcCAtTSAxNDQ2IFxcXG4mIzQzO1x0XHQtYiAyRyAtdCAxMFwmIzM0OyAyXHUwMDNlXHUwMDI2MSk7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogaXBlcmYzIGNsaWVudCBmYWlsZWQ6XCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyRvdXRcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm5cbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXHUwMDNjXHUwMDNjRU9GXG4mIzQzOyQocmVhZF90eF9jb3VudGVycyBcJiMzNDskbnNfc2FuXCYjMzQ7IHMwKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIGFfYjEgYV9wMSBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9hKVxuJiM0MztFT0ZcbiYjNDM7XHRyZWFkIC1yIGJfYjEgYl9wMSBcdTAwM2NcdTAwM2NFT0ZcbiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzIFwmIzM0OyRuc19kdXRcJiMzNDsgZF9iKVxuJiM0MztFT0ZcbiYjNDM7XHRpZiAhIHZhbGlkX2RlY2ltYWxzIFwmIzM0OyRzYW5fYjFcJiMzNDsgXCYjMzQ7JHNhbl9wMVwmIzM0OyBcJiMzNDskYV9iMVwmIzM0OyBcJiMzNDskYV9wMVwmIzM0OyBcXFxuJiM0MztcdFx0XCYjMzQ7JGJfYjFcJiMzNDsgXCYjMzQ7JGJfcDFcJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCYjMzQ7IDFcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRyZXQ9MVxuJiM0MztcdFx0cmV0dXJuIDFcbiYjNDM7XHRmaVxuJiM0MztcbiYjNDM7XHRldmFsX2NvdW50ZXJfZGVsdGEgXCYjMzQ7U0FOIHMwIFRYXCYjMzQ7IFwmIzM0OyRzYW5fYjBcJiMzNDsgXCYjMzQ7JHNhbl9wMFwmIzM0OyBcJiMzNDskc2FuX2IxXCYjMzQ7IFwmIzM0OyRzYW5fcDFcJiMzNDsgXFxcbiYjNDM7XHRcdGd0IFwmIzM0OyRTQU5fQVZHX01JTlwmIzM0O1xuJiM0MztcdGV2YWxfY291bnRlcl9kZWx0YSBcJiMzNDtEVVQgZF9hIFRYXCYjMzQ7IFwmIzM0OyRhX2IwXCYjMzQ7IFwmIzM0OyRhX3AwXCYjMzQ7IFwmIzM0OyRhX2IxXCYjMzQ7IFwmIzM0OyRhX3AxXCYjMzQ7IFxcXG4mIzQzO1x0XHRsZSBcJiMzNDskTEFOX0FWR19NQVhcJiMzNDtcbiYjNDM7XHRldmFsX2NvdW50ZXJfZGVsdGEgXCYjMzQ7RFVUIGRfYiBUWFwmIzM0OyBcJiMzNDskYl9iMFwmIzM0OyBcJiMzNDskYl9wMFwmIzM0OyBcJiMzNDskYl9iMVwmIzM0OyBcJiMzNDskYl9wMVwmIzM0OyBcXFxuJiM0MztcdFx0bGUgXCYjMzQ7JExBTl9BVkdfTUFYXCYjMzQ7XG4mIzQzO1x0WyBcJiMzNDske3JldDotMH1cJiMzNDsgLWVxIDAgXSB8fCByZXR1cm5cbiYjNDM7XG4mIzQzO1x0IyBzdWNjZXNzIHBhdGg6IHRoZSBvbmUtc2hvdCBzZXJ2ZXIgZXhpdHMgYnkgaXRzZWxmOyByZWFwIHRoZVxuJiM0MztcdCMgd3JhcHBlciwgdGhlbiBSRVFVSVJFIHRoZSByY2ZpbGUgd2l0aCB0aGUgc2VydmVyJiMzOTtzIHJlYWwgc3RhdHVzXG4mIzQzO1x0d2FpdCBcJiMzNDske3NlcnZlcl93cmFwcGVyfVwmIzM0O1xuJiM0MztcdHNlcnZlcl93cmFwcGVyPVwmIzM0O1wmIzM0O1xuJiM0MztcdGlmIFsgISAtcyBcJiMzNDske3JjZmlsZX1cJiMzNDsgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIHN0YXR1cyBmaWxlIG1pc3NpbmcgKCR7cmNmaWxlfSlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm5cbiYjNDM7XHRmaVxuJiM0MztcdHNlcnZlcl9yYz0kKGNhdCBcJiMzNDske3JjZmlsZX1cJiMzNDspXG4mIzQzO1x0aWYgISBbWyBcJiMzNDskc2VydmVyX3JjXCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCBbIFwmIzM0OyRzZXJ2ZXJfcmNcJiMzNDsgLW5lIDAgXTsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGV4aXRlZCB3aXRoIHJjPSYjMzk7JHtzZXJ2ZXJfcmN9JiMzOTtcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdHJldD0xXG4mIzQzO1x0XHRyZXR1cm5cbiYjNDM7XHRmaVxuJiM0MztcdGlwZXJmX3BpZD1cJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBzZWNvbmRhcnkgaGVhbHRoIHNpZ25hbCBvbmx5OiBhbmNob3JlZCwgc2luZ2xlLW1hdGNoLCBudW1lcmljIOKAlFxuJiM0MztcdCMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlclxuJiM0MztcdCMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLlxuJiM0MztcdHNlbmRlcl9yZXRyPSQoZWNobyBcJiMzNDskb3V0XCYjMzQ7IHwgYXdrICYjMzk7L3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0mIzM5OylcbiYjNDM7XHRpZiBbIFwmIzM0OyQoZWNobyBcJiMzNDskc2VuZGVyX3JldHJcJiMzNDsgfCBncmVwIC1FYyAmIzM5O15bMC05XSYjNDM7JCYjMzk7KVwmIzM0OyAtbmUgMSBdOyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IGNhbm5vdCBwYXJzZSBzZW5kZXIgcmV0cmFuc21pdHMgcmVsaWFibHlcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGVjaG8gXCYjMzQ7JG91dFwmIzM0OyAxXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0cmV0PTFcbiYjNDM7XHRcdHJldHVyblxuJiM0MztcdGZpXG4mIzQzO1x0ZWNobyBcJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7XCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDtzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKVwmIzM0O1xuJiM0MztcdGVjaG8gXCYjMzQ7JG91dFwmIzM0OyB8IGdyZXAgLUUgXCYjMzQ7c2VuZGVyfHJlY2VpdmVyXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoZWNrX3ByZXJlcXVpc2l0ZXNcbiYjNDM7Y2hlY2tfdG9vbCBldGh0b29sXG4mIzQzO2NoZWNrX3Rvb2wgaXBlcmYzXG4mIzQzO2NoZWNrX3Rvb2wgdGltZW91dFxuJiM0MztcbiYjNDM7IyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LlxuJiM0MztpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xaSBpbnRlcmxpbms7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IGlwcm91dGUyIGhhcyBubyBIU1IgaW50ZXJsaW5rIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO3NldHVwX3RvcG9cbiYjNDM7XG4mIzQzO2VjaG8gXCYjMzQ7SU5GTzogSW5pdGlhbCB2YWxpZGF0aW9uIHBpbmcgKFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgRFVUKS5cJiMzNDtcbiYjNDM7ZG9fcGluZyBcJiMzNDskbnNfc2FuXCYjMzQ7IFwmIzM0OyRwZWVyX2lwXCYjMzQ7XG4mIzQzO3N0b3BfaWZfZXJyb3IgXCYjMzQ7SW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC5cJiMzNDtcbiYjNDM7XG4mIzQzO2RvX2dyb19mZWF0dXJlX2NoZWNrc1xuJiM0Mztkb190c29fc3RyZWFtX3Rlc3RcbiYjNDM7c3RvcF9pZl9lcnJvciBcJiMzNDtHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC5cJiMzNDtcbiYjNDM7XG4mIzQzO2VjaG8gXCYjMzQ7SU5GTzogQWxsIGdvb2QuXCYjMzQ7XG4mIzQzO2NsZWFudXBcbiYjNDM7ZXhpdCAkcmV0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7aHNyX2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byBkaXNhYmxlIEdSTyBvbiBuZXQgZGV2aWNlcywgYW5kIG1vZGlmaWVzIHRoZSBIU1IgZHJpdmVyIHRvIHVuZm9sZCBHU08gc3VwZXItcGFja2V0cyBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgSFNSIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGJ5IHNlbmRpbmcgdHJhZmZpYyB0aHJvdWdoIGFuIEhTUiBpbnRlcmZhY2UsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhjZjc1NWE5ZDkyYjM5MDgxNzk2MGU3M2ZlODI3MzZkMGY0MGFkNzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDE1OjQ2OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggOTk4MWQ2MzdmOGI1NC4uZWJhMmMyNmE0OWJhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0zNDM0LDYgJiM0MzszNDM0LDggQEAgdm9pZCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspOwogdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgZGV2X2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7dm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZGV2X2xvb3BiYWNrX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpuZXdza2IpOwogdTE2IGRldl9waWNrX3R4X3plcm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2JfZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggNTkzM2M1ZGFiMDllZS4uYTZjZjJhZGM4NjI1NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTE4NDAsNiAmIzQzOzE4NDAsMjQgQEAgdm9pZCBuZXRpZl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCX0KIH0KIAomIzQzO3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcl9kZXY7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CiYjNDM7CiYjNDM7CWRldi0mZ3Q7d2FudGVkX2ZlYXR1cmVzICZhbXA7PSB+KE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpOwomIzQzOwluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IChORVRJRl9GX0dSTyB8IE5FVElGX0ZfR1JPX0hXKSkpCiYjNDM7CQluZXRkZXZfV0FSTihkZXYsICYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgR1JPIVxuJiMzNDspOwomIzQzOwomIzQzOwluZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7CiYjNDM7CQluZXRkZXZfbG9ja19vcHMobG93ZXJfZGV2KTsKJiM0MzsJCW5ldGlmX2Rpc2FibGVfZ3JvKGxvd2VyX2Rldik7CiYjNDM7CQluZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoqCiAgKglkZXZfZGlzYWJsZV9ncm9faHcgLSBkaXNhYmxlIEhXIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlCiAgKglAZGV2OiBkZXZpY2UKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9hcGkuYyBiL25ldC9jb3JlL2Rldl9hcGkuYwppbmRleCA0Mzc5NDdkZDA4ZWQ1Li4wMmZiMjE2Mjk1MTI4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2X2FwaS5jCkBAIC0yNjksNiAmIzQzOzI2OSwyMiBAQCB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pOwogCiYjNDM7LyoqCiYjNDM7ICogZGV2X2Rpc2FibGVfZ3JvKCkgLSBkaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIG9uIGEgZGV2aWNlCiYjNDM7ICogQGRldjogZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBEaXNhYmxlIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIGEgbmV0IGRldmljZS4gIE11c3QgYmUKJiM0MzsgKiBjYWxsZWQgdW5kZXIgUlROTC4gIFRoaXMgaXMgbmVlZGVkIGlmIHJlY2VpdmVkIHBhY2tldHMgbWF5IGJlCiYjNDM7ICogZm9yd2FyZGVkIHRvIGFub3RoZXIgaW50ZXJmYWNlLgomIzQzOyAqLwomIzQzO3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwluZXRkZXZfbG9ja19vcHMoZGV2KTsKJiM0MzsJbmV0aWZfZGlzYWJsZV9ncm8oZGV2KTsKJiM0MzsJbmV0ZGV2X3VubG9ja19vcHMoZGV2KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pOwomIzQzOwogLyoqCiAgKiBkZXZfc2V0X3Byb21pc2N1aXR5KCkgLSB1cGRhdGUgcHJvbWlzY3VpdHkgY291bnQgb24gYSBkZXZpY2UKICAqIEBkZXY6IGRldmljZQpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwppbmRleCA1NTU1YjcxYWIxOWI1Li4yNDhjYmIxNDJlMjFlIDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9kZXZpY2UuYwpAQCAtMjMyLDkgJiM0MzsyMzIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCXNrYi0mZ3Q7ZGV2ID0gbWFzdGVyLSZndDtkZXY7CiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCXNrYl9yZXNldF9tYWNfbGVuKHNrYik7Ci0JCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJCWhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAl9IGVsc2UgewogCQlkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMzM1LDYgJiM0MzszMzMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsCiAJCWhzcl9zdGFnLSZndDtzZXF1ZW5jZV9uciA9IGh0b25zKGhzci0mZ3Q7c2VxdWVuY2VfbnIpOwogCQloc3ItJmd0O3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKIAl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gdHlwZTsKIAkvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqLwpAQCAtMzU2LDE0ICYjNDM7MzU1LDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwKIAkJZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC0mZ3Q7bWFjYWRkcmVzc19BLCBoc3ItJmd0O21hY2FkZHJlc3NfcmVkYm94KTsKIAl9CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsCkBAIC0zOTAsNiAmIzQzOzM4NSw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLAogCXNwaW5fbG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJaHNyX3N0YWctJmd0O3NlcXVlbmNlX25yID0gaHRvbnMoaHNyLSZndDtzdXBfc2VxdWVuY2VfbnIpOwogCWhzci0mZ3Q7c3VwX3NlcXVlbmNlX25yJiM0MzsmIzQzOzsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl90eXBlID0gUFJQX1RMVl9MSUZFX0NIRUNLX0REOwogCWhzcl9zdGFnLSZndDt0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7CiAKQEAgLTM5NywxMyAmIzQzOzM5MywxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlciwKIAloc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTsKIAlldGhlcl9hZGRyX2NvcHkoaHNyX3NwLSZndDttYWNhZGRyZXNzX0EsIG1hc3Rlci0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAKLQlpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSkgewotCQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiYjNDM7CWlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm47Ci0JfQogCiAJaHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTsKLQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiB9CiAKIC8qIEFubm91bmNlIChzdXBlcnZpc2lvbiBmcmFtZSkgdGltZXIgZnVuY3Rpb24KQEAgLTY1OSw3ICYjNDM7NjUyLDcgQEAgdm9pZCBoc3JfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJZGV2LSZndDtuZWVkc19mcmVlX25ldGRldiA9IHRydWU7CiAKIAlkZXYtJmd0O2h3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfAotCQkJICAgTkVUSUZfRl9HU09fTUFTSyB8IE5FVElGX0ZfSFdfQ1NVTSB8CiYjNDM7CQkJICAgTkVUSUZfRl9IV19DU1VNIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjsKIApkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCmluZGV4IDA3NzQ5ODFhNjVjMTYuLjNmY2RiYWM0OWM1OWQgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9nc28uaCZndDsKICNpbmNsdWRlICYjMzQ7aHNyX21haW4uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2hzcl9mcmFtZXJlZy5oJiMzNDsKIApAQCAtNjIxLDkgJiM0Mzs2MjIsMTAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0ZF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChwb3J0LSZndDt0eXBlID09IEhTUl9QVF9NQVNURVIgfHwKIAkgICAgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7CiAJCS8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovCi0JCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7aHNyLSZndDtzZXFucl9sb2NrKTsKIAkJZnJhbWUtJmd0O3NlcXVlbmNlX25yID0gaHNyLSZndDtzZXF1ZW5jZV9ucjsKIAkJaHNyLSZndDtzZXF1ZW5jZV9uciYjNDM7JiM0Mzs7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO2hzci0mZ3Q7c2VxbnJfbG9jayk7CiAJfQogfQogCkBAIC03MzEsNyAmIzQzOzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsCiB9CiAKIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovCi12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiYjNDM7c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGhzcl9mcmFtZV9pbmZvIGZyYW1lOwogCkBAIC03NjAsMyAmIzQzOzc2Miw1MCBAQCB2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiAJcG9ydC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKIAlrZnJlZV9za2Ioc2tiKTsKIH0KJiM0MzsKJiM0MzsvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzbwomIzQzOyAqIGVhY2ggd2lyZSBmcmFtZSBnZXRzIGl0cyBvd24gSFNSL1BSUCB0YWcgYW5kIHNlcXVlbmNlIG51bWJlci4KJiM0MzsgKi8KJiM0Mzt2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKm5leHQ7CiYjNDM7CiYjNDM7CWlmIChsaWtlbHkoIXNrYl9pc19nc28oc2tiKSkpIHsKJiM0MzsJCWhzcl9mb3J3YXJkX3NrYl9vbmUoc2tiLCBwb3J0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBVbmZvbGQgb25seSBwbGFpbi1FdGhlcm5ldCBHU08gc3VwZXItcGFja2V0czogbG9jYWxseSBnZW5lcmF0ZWQKJiM0MzsJICogb24gdGhlIG1hc3Rlciwgb3IgYXJyaXZpbmcgdW50YWdnZWQgZnJvbSB0aGUgU0FOIHNpZGUgb24gdGhlCiYjNDM7CSAqIGludGVybGluay4gQSBzdXBlci1wYWNrZXQgZnJvbSBhIExBTiBzbGF2ZSBtYXkgY2FycnkgcGVyLWZyYW1lCiYjNDM7CSAqIEhTUiB0YWdzIC8gUFJQIFJDVCB0cmFpbGVycyB0aGF0IHNvZnR3YXJlIHNlZ21lbnRhdGlvbiBjYW5ub3QKJiM0MzsJICogcmVjb3ZlcjsgYW4gYWxyZWFkeS10YWdnZWQgSFNSL1BSUCBzdXBlci1wYWNrZXQgdmlvbGF0ZXMKJiM0MzsJICogcGVyLWZyYW1lIHdpcmUgc2VtYW50aWNzLiBEcm9wIGJvdGguCiYjNDM7CSAqLwomIzQzOwlpZiAocG9ydC0mZ3Q7dHlwZSAhPSBIU1JfUFRfTUFTVEVSICZhbXA7JmFtcDsgcG9ydC0mZ3Q7dHlwZSAhPSBIU1JfUFRfSU5URVJMSU5LKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSFNSKSB8fAomIzQzOwkgICAgc2tiLSZndDtwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9QUlApKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsKJiM0MzsJLyogZmVhdHVyZXMgPSAwOiByZXF1ZXN0IGZ1bGwgc29mdHdhcmUgc2VnbWVudGF0aW9uLiB0eF9wYXRoIGlzIHRydWUKJiM0MzsJICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb20KJiM0MzsJICogdGhlIGludGVybGluayBmb2xsb3dzIFJYIGNoZWNrc3VtIHNlbWFudGljcy4KJiM0MzsJICovCiYjNDM7CXNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUik7CiYjNDM7CWlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKQomIzQzOwkJZ290byBkcm9wX2dzbzsKJiM0MzsKJiM0MzsJY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJd2hpbGUgKHNlZ3MpIHsKJiM0MzsJCW5leHQgPSBzZWdzLSZndDtuZXh0OwomIzQzOwkJc2Vncy0mZ3Q7bmV4dCA9IE5VTEw7CiYjNDM7CQloc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpOwomIzQzOwkJc2VncyA9IG5leHQ7CiYjNDM7CX0KJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO2Ryb3BfZ3NvOgomIzQzOwlwb3J0LSZndDtkZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwlrZnJlZV9za2Ioc2tiKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9zbGF2ZS5jIGIvbmV0L2hzci9oc3Jfc2xhdmUuYwppbmRleCAwMWM3M2I0YjUwZGRkLi4wY2E1NWQ5MzIzYzU3IDEwMDY0NAotLS0gYS9uZXQvaHNyL2hzcl9zbGF2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX3NsYXZlLmMKQEAgLTczLDE2ICYjNDM7NzMsNyBAQCBzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYikKIAl9CiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAotCS8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhCi0JICogc2VxdWVuY2UgbnVtYmVyIGFuZCByZXF1aXJlIHN5bmNocm9uaXNhdGlvbiB2cyBvdGhlciBzZW5kZXIuCi0JICovCi0JaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykgewotCQlzcGluX2xvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCQloc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTsKLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtoc3ItJmd0O3NlcW5yX2xvY2spOwotCX0gZWxzZSB7Ci0JCWhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpOwotCX0KJiM0MzsJaHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7CiAKIGZpbmlzaF9jb25zdW1lOgogCXJldHVybiBSWF9IQU5ETEVSX0NPTlNVTUVEOwpAQCAtMTcwLDYgJiM0MzsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChyZXMpCiAJCWdvdG8gZmFpbF9yeF9oYW5kbGVyOwogCWRldl9kaXNhYmxlX2xybyhkZXYpOwomIzQzOwlkZXZfZGlzYWJsZV9ncm8oZGV2KTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQppbmRleCAzMWZiOTMyNmNmNTMzLi4wZDEwNTQ3NmU3YzUwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKQEAgLTMsNiAmIzQzOzMsNyBAQAogdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uCiAKIFRFU1RfUFJPR1MgOj0gXAomIzQzOwloc3JfZ3JvX3N1cGVycGFja2V0LnNoIFwKIAloc3JfcGluZy5zaCBcCiAJaHNyX3JlZGJveC5zaCBcCiAJbGlua19mYXVsdHMuc2ggXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI4OGRlM2E2MGI4OTkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9ncm9fc3VwZXJwYWNrZXQuc2gKQEAgLTAsMCAmIzQzOzEsNDYyIEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7IwomIzQzOyMgVGVzdCBIU1IgaGFuZGxpbmcgb2YgR1JPL0dTTyBzdXBlci1wYWNrZXRzOgomIzQzOyMKJiM0MzsjICAxLiBFbnNsYXZpbmcgYSBkZXZpY2UgdG8gYW4gSFNSIG1hc3RlciBkaXNhYmxlcyBHUk8gb24gaXQKJiM0MzsjICAgICAoZGV2X2Rpc2FibGVfZ3JvKCkpLgomIzQzOyMgIDIuIFRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPIGZlYXR1cmVzLgomIzQzOyMgIDMuIEEgVENQIHN0cmVhbSBmcm9tIGEgVFNPLWVuYWJsZWQgU0FOICh3aGljaCB0aGVyZWZvcmUgZW1pdHMgR1NPCiYjNDM7IyAgICAgc3VwZXItcGFja2V0cykgaXMgdW5mb2xkZWQgYXQgdGhlIEhTUiBmb3J3YXJkIGVudHJ5LiBFdmlkZW5jZToKJiM0MzsjICAgICBpbnRlcmZhY2UtY291bnRlciBkZWx0YXMgc2hvdyBzdXBlci1wYWNrZXQtc2l6ZWQgZnJhbWVzIGxlYXZpbmcKJiM0MzsjICAgICB0aGUgU0FOIGFuZCBwZXItZnJhbWUtc2l6ZWQgdHJhZmZpYyBsZWF2aW5nIHRoZSBEVVQmIzM5O3MgTEFOIHBvcnRzLgomIzQzOyMKJiM0MzsjIFRvcG9sb2d5ICgxMDAuNjQuMC4wLzI0KToKJiM0MzsjCiYjNDM7IyAgIG5zX3NhbiAgICAgICAgICAgICAgICAgICAgbnNfZHV0ICAgICAgICAgICAgICAgICAgICAgIG5zX3BlZXIKJiM0MzsjICAmIzQzOy0tLS0tLS0tLS0tJiM0MzsgIGludGVybGluayAgJiM0MzstLS0tLS0tLS0tLS0tLS0mIzQzOyAgTEFOIEEvQiAgJiM0MzstLS0tLS0tLS0tLSYjNDM7CiYjNDM7IyAgfCBzMCBbMC4xXSAgfC0tLS0tLS0tLS0tLS18IGRfaWwgICBoc3IwICAgfC0tLS0tLS0tLS0tfCBoc3IxIFswLjNdfAomIzQzOyMgICYjNDM7LS0tLS0tLS0tLS0mIzQzOyAgICAgICAgICAgICB8IGRfYSAvIGRfYiAgICAgfCAgICAgICAgICAgfCBwX2EgLyBwX2IgfAomIzQzOyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiM0MzstLS0tLS0tLS0tLS0tLS0mIzQzOyAgICAgICAgICAgJiM0MzstLS0tLS0tLS0tLSYjNDM7CiYjNDM7IwomIzQzOyMgU0FOIHRyYWZmaWMgcmVhY2hlcyBuc19wZWVyIG9ubHkgdGhyb3VnaCBoc3IwJiMzOTtzIGZvcndhcmQgcGF0aAomIzQzOyMgKGludGVybGluayBSWCAtJmd0OyBMQU4gQS9CIFRYKSwgc28gZXZlcnkgU0FOIGZyYW1lIGlzIHRhZ2dlZCBhbmQKJiM0MzsjIGZvcndhcmRlZCBieSB0aGUgRFVULgomIzQzOwomIzQzO3NvdXJjZSAuL2hzcl9jb21tb24uc2gKJiM0MzsKJiM0MztzYW5faXA9JiMzNDsxMDAuNjQuMC4xJiMzNDsKJiM0MztwZWVyX2lwPSYjMzQ7MTAwLjY0LjAuMyYjMzQ7CiYjNDM7CiYjNDM7IyBBZ2dyZWdhdGUgY291bnRlciB0aHJlc2hvbGRzIGZvciB0aGUgc3RyZWFtIHRlc3QgKGJ5dGVzL3BhY2tldHMpOgomIzQzOyMgU0FOX0FWR19NSU4gcHJvdmVzIEdTTyBzdXBlci1wYWNrZXRzIGxlZnQgdGhlIFNBTjsgTEFOX0FWR19NQVggaXMgYQomIzQzOyMgZ3VhcmQgd2l0aCBtYXJnaW4sIG5vdCB0aGUgcHJvdG9jb2wgbWF4aW11bSAoc2VlIGRvX3Rzb19zdHJlYW1fdGVzdCkuCiYjNDM7U0FOX0FWR19NSU49MjA0OAomIzQzO0xBTl9BVkdfTUFYPTE1MTQKJiM0MzsKJiM0MztpcGVyZl9waWQ9JiMzNDsmIzM0OwomIzQzO3NlcnZlcl93cmFwcGVyPSYjMzQ7JiMzNDsKJiM0Mzt3b3JrZGlyPSYjMzQ7JiMzNDsKJiM0MztwaWRmaWxlPSYjMzQ7JiMzNDsKJiM0MztyY2ZpbGU9JiMzNDsmIzM0OwomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJIyBleGFjdC1QSUQga2lsbCBvbmx5IGFmdGVyIFJFLXZhbGlkYXRpbmcgaWRlbnRpdHkgKGd1YXJkcyBhZ2FpbnN0CiYjNDM7CSMgUElEIHJldXNlIGJldHdlZW4gcHVibGljYXRpb24gYW5kIGNsZWFudXApCiYjNDM7CWlmIFsgLW4gJiMzNDske2lwZXJmX3BpZH0mIzM0OyBdICZhbXA7JmFtcDsgdmFsaWRfc2VydmVyX3BpZCAmIzM0OyR7aXBlcmZfcGlkfSYjMzQ7OyB0aGVuCiYjNDM7CQlraWxsICYjMzQ7JHtpcGVyZl9waWR9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJZmkKJiM0MzsJaXBlcmZfcGlkPSYjMzQ7JiMzNDsKJiM0MzsJaWYgWyAtbiAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgXTsgdGhlbgomIzQzOwkJIyB0aGUgd3JhcHBlciB3YWl0cyBvbiB0aGUgc2VydmVyOyByZWFwIGl0IHdpdGggYSA1cyBib3VuZCBzbyBhCiYjNDM7CQkjIGxpdmUtYnV0LXVucHVibGlzaGVkIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyBjbGVhbnVwCiYjNDM7CQlmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG8KJiM0MzsJCQlraWxsIC0wICYjMzQ7JHtzZXJ2ZXJfd3JhcHBlcn0mIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCBicmVhawomIzQzOwkJCXNsZWVwIDAuMQomIzQzOwkJZG9uZQomIzQzOwkJa2lsbCAmIzM0OyR7c2VydmVyX3dyYXBwZXJ9JiMzNDsgMiZndDsvZGV2L251bGwKJiM0MzsJCXdhaXQgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQlzZXJ2ZXJfd3JhcHBlcj0mIzM0OyYjMzQ7CiYjNDM7CWZpCiYjNDM7CSMgbGFzdCByZXNvcnQsIG5hbWVzcGFjZS1zY29wZWQgb25seTogVEVSTSB0aGUgaXBlcmYzIHByb2Nlc3NlcyB0aGF0CiYjNDM7CSMgYWN0dWFsbHkgbGl2ZSBpbiB0aGUgcGVlciBuZXRucywgcG9sbCBmb3IgYm91bmRlZCBleGl0LCB0aGVuCiYjNDM7CSMgU0lHS0lMTCBhbnkgc3Vydml2b3IgYmVmb3JlIHRvdWNoaW5nIHRoZSBuYW1lc3BhY2UgbmFtZS4gQSBibGluZAomIzQzOwkjIHBraWxsIHdvdWxkIHNjYW4gdGhlIGhvc3QgUElEIHNwYWNlIGFuZCBoaXQgdW5yZWxhdGVkIHRlc3RzLgomIzQzOwlsb2NhbCBfcCBfc3RpbGwKJiM0MzsJZm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyAmIzM0OyRuc19wZWVyJiMzNDsgMiZndDsvZGV2L251bGwpOyBkbwomIzQzOwkJaWYgaXNfaXBlcmYzX3BpZCAmIzM0OyRfcCYjMzQ7OyB0aGVuCiYjNDM7CQkJa2lsbCAmIzM0OyRfcCYjMzQ7IDImZ3Q7L2Rldi9udWxsCiYjNDM7CQlmaQomIzQzOwlkb25lCiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJX3N0aWxsPTAKJiM0MzsJCWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDskbnNfcGVlciYjMzQ7IDImZ3Q7L2Rldi9udWxsKTsgZG8KJiM0MzsJCQlpZiBpc19pcGVyZjNfcGlkICYjMzQ7JF9wJiMzNDs7IHRoZW4KJiM0MzsJCQkJX3N0aWxsPTEKJiM0MzsJCQkJYnJlYWsKJiM0MzsJCQlmaQomIzQzOwkJZG9uZQomIzQzOwkJWyAmIzM0OyRfc3RpbGwmIzM0OyAtZXEgMCBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCXNsZWVwIDAuMQomIzQzOwlkb25lCiYjNDM7CWZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgJiMzNDskbnNfcGVlciYjMzQ7IDImZ3Q7L2Rldi9udWxsKTsgZG8KJiM0MzsJCWlmIGlzX2lwZXJmM19waWQgJiMzNDskX3AmIzM0OzsgdGhlbgomIzQzOwkJCWtpbGwgLTkgJiMzNDskX3AmIzM0OyAyJmd0Oy9kZXYvbnVsbAomIzQzOwkJZmkKJiM0MzsJZG9uZQomIzQzOwkjIHJlbW92ZSBvbmx5IHRoZSBrbm93biBub24tZW1wdHkgcHJpdmF0ZSBkaXJlY3RvcnkKJiM0MzsJaWYgWyAtbiAmIzM0OyR7d29ya2Rpcn0mIzM0OyBdICZhbXA7JmFtcDsgWyAtZCAmIzM0OyR7d29ya2Rpcn0mIzM0OyBdOyB0aGVuCiYjNDM7CQlybSAtcmYgJiMzNDske3dvcmtkaXJ9JiMzNDsKJiM0MzsJZmkKJiM0MzsJd29ya2Rpcj0mIzM0OyYjMzQ7CiYjNDM7CXBpZGZpbGU9JiMzNDsmIzM0OwomIzQzOwlyY2ZpbGU9JiMzNDsmIzM0OwomIzQzOwljbGVhbnVwX2FsbF9ucwomIzQzO30KJiM0MzsKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOwomIzQzO2NoZWNrX3Rvb2woKQomIzQzO3sKJiM0MzsJaWYgISBjb21tYW5kIC12ICYjMzQ7JDEmIzM0OyAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O1NLSVA6IENvdWxkIG5vdCBydW4gdGVzdCB3aXRob3V0ICQxJiMzNDsKJiM0MzsJCWV4aXQgJGtzZnRfc2tpcAomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0Mztuc3goKQomIzQzO3sKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyQxJiMzNDsgYmFzaCAtYyAmIzM0OyQyJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7aXNfaXBlcmYzX3BpZCgpCiYjNDM7ewomIzQzOwlbICYjMzQ7JChjYXQgL3Byb2MvJiMzNDskMSYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF0KJiM0Mzt9CiYjNDM7CiYjNDM7IyBEZWNpbWFsLWNvdW50ZXIgdmFsaWRhdGlvbiBmb3IgdGhlIHNuYXBzaG90IGJsb2NrczogZXZlcnkgdmFsdWUgbXVzdAomIzQzOyMgYmUgYSBwbGFpbiBkZWNpbWFsIG51bWJlci4gQSBwYXJzZSBmYWlsdXJlIGluIHJlYWRfdHhfY291bnRlcnMgeWllbGRzCiYjNDM7IyBlbXB0eS9nYXJibGVkIGZpZWxkcywgd2hpY2ggdGhpcyBjaGVjayB0dXJucyBpbnRvIGFuIGltbWVkaWF0ZSBGQUlMLgomIzQzO3ZhbGlkX2RlY2ltYWxzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIHYKJiM0MzsKJiM0MzsJZm9yIHYgaW4gJiMzNDskQCYjMzQ7OyBkbwomIzQzOwkJW1sgJiMzNDskdiYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCByZXR1cm4gMQomIzQzOwlkb25lCiYjNDM7CXJldHVybiAwCiYjNDM7fQomIzQzOwomIzQzO3NldHVwX3RvcG8oKQomIzQzO3sKJiM0MzsJc2V0dXBfbnMgbnNfZHV0IG5zX3NhbiBuc19wZWVyIHx8IGV4aXQgJD8KJiM0MzsKJiM0MzsJaXAgbGluayBhZGQgZF9hIG5ldG5zICYjMzQ7JG5zX2R1dCYjMzQ7IHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zICYjMzQ7JG5zX3BlZXImIzM0OwomIzQzOwlpcCBsaW5rIGFkZCBkX2IgbmV0bnMgJiMzNDskbnNfZHV0JiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBwX2IgbmV0bnMgJiMzNDskbnNfcGVlciYjMzQ7CiYjNDM7CWlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgJiMzNDskbnNfZHV0JiMzNDsgdHlwZSB2ZXRoIHBlZXIgbmFtZSBzMCBuZXRucyAmIzM0OyRuc19zYW4mIzM0OwomIzQzOwomIzQzOwkjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uCiYjNDM7CWZvciBpZmFjZSBpbiBkX2EgZF9iOyBkbwomIzQzOwkJbnN4ICYjMzQ7JG5zX2R1dCYjMzQ7ICYjMzQ7aXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcCiYjNDM7CQkJaXAgbGluayBzZXQgJGlmYWNlIHVwJiMzNDsKJiM0MzsJZG9uZQomIzQzOwlmb3IgaWZhY2UgaW4gcF9hIHBfYjsgZG8KJiM0MzsJCW5zeCAmIzM0OyRuc19wZWVyJiMzNDsgJiMzNDtpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFwKJiM0MzsJCQlpcCBsaW5rIHNldCAkaWZhY2UgdXAmIzM0OwomIzQzOwlkb25lCiYjNDM7CiYjNDM7CW5zeCAmIzM0OyRuc19kdXQmIzM0OyAmIzM0O2lwIGxpbmsgc2V0IGRfaWwgdXAmIzM0OwomIzQzOwluc3ggJiMzNDskbnNfc2FuJiMzNDsgJiMzNDtpcCBsaW5rIHNldCBzMCB1cDsgaXAgYWRkciBhZGQgJHNhbl9pcC8yNCBkZXYgczAmIzM0OwomIzQzOwomIzQzOwluc3ggJiMzNDskbnNfZHV0JiMzNDsgJiMzNDtpcCBsaW5rIGFkZCBoc3IwIHR5cGUgaHNyIFwKJiM0MzsJCXNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcCiYjNDM7CQlpcCBsaW5rIHNldCBoc3IwIHVwJiMzNDsKJiM0MzsJbnN4ICYjMzQ7JG5zX3BlZXImIzM0OyAmIzM0O2lwIGxpbmsgYWRkIGhzcjEgdHlwZSBoc3IgXAomIzQzOwkJc2xhdmUxIHBfYSBzbGF2ZTIgcF9iIHByb3RvIDA7IFwKJiM0MzsJCWlwIGxpbmsgc2V0IGhzcjEgdXA7IGlwIGFkZHIgYWRkICRwZWVyX2lwLzI0IGRldiBoc3IxJiMzNDsKJiM0MzsKJiM0MzsJIyBMZXQgdGhlIG5vZGVzIHNlZSBlYWNoIG90aGVyJiMzOTtzIHN1cGVydmlzaW9uIGZyYW1lcy4KJiM0MzsJc2xlZXAgMgomIzQzO30KJiM0MzsKJiM0MztjaGVja19mZWF0dXJlKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSYjMzQ7JDEmIzM0OwomIzQzOwlsb2NhbCBpZmFjZT0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgZmVhdHVyZT0mIzM0OyQzJiMzNDsKJiM0MzsJbG9jYWwgd2FudD0mIzM0OyQ0JiMzNDsKJiM0MzsKJiM0MzsJaWYgbnN4ICYjMzQ7JG5zJiMzNDsgJiMzNDtldGh0b29sIC1rICRpZmFjZSYjMzQ7IHwgZ3JlcCAtcSAmIzM0O14kZmVhdHVyZTogJHdhbnQmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0lORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgJHdhbnQgWyBPSyBdJiMzNDsKJiM0MzsJZWxzZQomIzQzOwkJZWNobyAmIzM0O0ZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgbm90ICR3YW50JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzOyMgT2ZmLW9yLWFic2VudCB2YXJpYW50OiBmYWlscyBvbmx5IHdoZW4gdGhlIGZlYXR1cmUgaXMgcHJlc2VudCBBTkQgb24sCiYjNDM7IyBzbyBkZXZpY2VzIHRoYXQgc2ltcGx5IGRvIG5vdCBsaXN0IHRoZSBmZWF0dXJlIGRvIG5vdCBmYWlsIGl0LgomIzQzO2NoZWNrX2ZlYXR1cmVfbm90X29uKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSYjMzQ7JDEmIzM0OwomIzQzOwlsb2NhbCBpZmFjZT0mIzM0OyQyJiMzNDsKJiM0MzsJbG9jYWwgZmVhdHVyZT0mIzM0OyQzJiMzNDsKJiM0MzsKJiM0MzsJaWYgbnN4ICYjMzQ7JG5zJiMzNDsgJiMzNDtldGh0b29sIC1rICRpZmFjZSYjMzQ7IHwgZ3JlcCAtcSAmIzM0O14kZmVhdHVyZTogb24mIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6ICRucy8kaWZhY2UgJGZlYXR1cmUgaXMgb24mIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJZWxzZQomIzQzOwkJZWNobyAmIzM0O0lORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgbm90IG9uIFsgT0sgXSYjMzQ7CiYjNDM7CWZpCiYjNDM7fQomIzQzOwomIzQzO2RvX2dyb19mZWF0dXJlX2NoZWNrcygpCiYjNDM7ewomIzQzOwllY2hvICYjMzQ7SU5GTzogQ2hlY2tpbmcgdGhhdCBlbnNsYXZlbWVudCBkaXNhYmxlZCBHUk8uJiMzNDsKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2EgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmCiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9iIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfaWwgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmCiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtHUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuJiMzNDsKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgSFctR1JPLiYjMzQ7CiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgZF9hIHJ4LWdyby1odyBvZmYKJiM0MzsJY2hlY2tfZmVhdHVyZSAmIzM0OyRuc19kdXQmIzM0OyBkX2IgcngtZ3JvLWh3IG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGRfaWwgcngtZ3JvLWh3IG9mZgomIzQzOwlzdG9wX2lmX2Vycm9yICYjMzQ7SFctR1JPIG5vdCBkaXNhYmxlZCBvbiBlbnNsYXZlZCBkZXZpY2VzLiYjMzQ7CiYjNDM7CiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBDaGVja2luZyB0aGF0IHRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPLiYjMzQ7CiYjNDM7CWNoZWNrX2ZlYXR1cmUgJiMzNDskbnNfZHV0JiMzNDsgaHNyMCBnZW5lcmljLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZgomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX2R1dCYjMzQ7IGhzcjAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9mZgomIzQzOwljaGVja19mZWF0dXJlX25vdF9vbiAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIHR4LXRjcDYtc2VnbWVudGF0aW9uCiYjNDM7CWNoZWNrX2ZlYXR1cmVfbm90X29uICYjMzQ7JG5zX2R1dCYjMzQ7IGhzcjAgdHgtdWRwLXNlZ21lbnRhdGlvbgomIzQzOwljaGVja19mZWF0dXJlX25vdF9vbiAmIzM0OyRuc19kdXQmIzM0OyBoc3IwIHR4LWdzby1saXN0CiYjNDM7CXN0b3BfaWZfZXJyb3IgJiMzNDtIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPLWZhbWlseSBmZWF0dXJlcy4mIzM0OwomIzQzO30KJiM0MzsKJiM0MzthbGxvY193b3JrZGlyKCkKJiM0Mzt7CiYjNDM7CSMgQWxsb2NhdGVkIG9ubHkgaGVyZSwgbG9uZyBhZnRlciB0aGUgaW5pdGlhbCB0b3BvbG9neSBjbGVhbnVwLCBzbwomIzQzOwkjIGNsZWFudXAoKSBhdCBzZXR1cF90b3BvKCkgdGltZSBjYW4gbmV2ZXIgcmVtb3ZlIGl0LiBta3RlbXAgZmFpbHVyZQomIzQzOwkjIGlzIGEgaGFyZCB0ZXN0IGZhaWx1cmUuCiYjNDM7CXdvcmtkaXI9JChta3RlbXAgLWQgL3RtcC9oc3JfZ3JvX3Rlc3QuWFhYWFhYKSB8fCB7CiYjNDM7CQllY2hvICYjMzQ7RkFJTDogbWt0ZW1wIC1kIGZhaWxlZCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0IDEKJiM0MzsJfQomIzQzOwljaG1vZCA3MDAgJiMzNDske3dvcmtkaXJ9JiMzNDsKJiM0MzsJcGlkZmlsZT0mIzM0OyR7d29ya2Rpcn0vaXBlcmYucGlkJiMzNDsKJiM0MzsJcmNmaWxlPSYjMzQ7JHt3b3JrZGlyfS9pcGVyZi5yYyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzOyMgTnVtZXJpYywgYWxpdmUsIGNvbW0gPT0gaXBlcmYzLCBhbmQgcmVhbGx5IG93bmVkIGJ5IHRoZSBwZWVyIG5ldG5zLgomIzQzO3ZhbGlkX3NlcnZlcl9waWQoKQomIzQzO3sKJiM0MzsJbG9jYWwgcD0mIzM0OyQxJiMzNDsKJiM0MzsKJiM0MzsJW1sgJiMzNDskcCYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCByZXR1cm4gMQomIzQzOwlraWxsIC0wICYjMzQ7JHAmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCByZXR1cm4gMQomIzQzOwlbICYjMzQ7JChjYXQgL3Byb2MvJiMzNDskcCYjMzQ7L2NvbW0gMiZndDsvZGV2L251bGwpJiMzNDsgPSAmIzM0O2lwZXJmMyYjMzQ7IF0gfHwgcmV0dXJuIDEKJiM0MzsJaXAgbmV0bnMgcGlkcyAmIzM0OyRuc19wZWVyJiMzNDsgMiZndDsvZGV2L251bGwgfCBncmVwIC1xeCAmIzM0OyRwJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhcnRfaXBlcmZfc2VydmVyKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIGNhbmRpZGF0ZV9waWQKJiM0MzsKJiM0MzsJIyBPbmUtc2hvdCBzZXJ2ZXIsIG5vIC1EOiB0aGUgd3JhcHBlciByZWNvcmRzIGl0cyBleGFjdCBQSUQgYW5kIGl0cwomIzQzOwkjIHJlYWwgZXhpdCBzdGF0dXMgKG5ldG5zIHNoYXJlcyB0aGUgUElEIG5hbWVzcGFjZSBhbmQgdGhlIGhvc3QgZnMpLgomIzQzOwlhbGxvY193b3JrZGlyCiYjNDM7CSggbnN4ICYjMzQ7JG5zX3BlZXImIzM0OyAmIzM0O2lwZXJmMyAtcyAtMSAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MSAmYW1wOyBcCiYjNDM7CQllY2hvIFwkISAmZ3Q7ICR7cGlkZmlsZX07IFwKJiM0MzsJCXdhaXQgXCQhOyBcCiYjNDM7CQllY2hvIFwkPyAmZ3Q7ICR7cmNmaWxlfSYjMzQ7ICkgJmFtcDsKJiM0MzsJc2VydmVyX3dyYXBwZXI9JCEKJiM0MzsJIyB0aGUgd3JhcHBlciB3cml0ZXMgdGhlIHBpZGZpbGUgYXN5bmNocm9ub3VzbHk7IHdhaXQgZm9yIGl0IHRvCiYjNDM7CSMgYXBwZWFyIGluc3RlYWQgb2YgcmFjaW5nIHRoZSByZWFkCiYjNDM7CWZvciBfIGluICQoc2VxIDEgNTApOyBkbwomIzQzOwkJWyAtcyAmIzM0OyR7cGlkZmlsZX0mIzM0OyBdICZhbXA7JmFtcDsgYnJlYWsKJiM0MzsJCXNsZWVwIDAuMQomIzQzOwlkb25lCiYjNDM7CWlmIFsgISAtcyAmIzM0OyR7cGlkZmlsZX0mIzM0OyBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWQmIzM0OyBcCiYjNDM7CQkJJiMzNDsobm8gcGlkZmlsZSkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CWNhbmRpZGF0ZV9waWQ9JCgmbHQ7JiMzNDske3BpZGZpbGV9JiMzNDspCiYjNDM7CWlmICEgdmFsaWRfc2VydmVyX3BpZCAmIzM0OyR7Y2FuZGlkYXRlX3BpZH0mIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgcGlkICYjMzk7JHtjYW5kaWRhdGVfcGlkfSYjMzk7JiMzNDsgXAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHZhbGlkYXRpb24mIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybiAxCiYjNDM7CWZpCiYjNDM7CSMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvbgomIzQzOwlpcGVyZl9waWQ9JiMzNDske2NhbmRpZGF0ZV9waWR9JiMzNDsKJiM0MzsJc2xlZXAgMQomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MzsjIFByaW50ICYjMzQ7Jmx0O2J5dGVzJmd0OyAmbHQ7cGFja2V0cyZndDsmIzM0OyBmb3IgZXhhY3RseSBvbmUgVFggcmVjb3JkIG9mIG5zL2RldjsgYW55dGhpbmcKJiM0MzsjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC4KJiM0MztyZWFkX3R4X2NvdW50ZXJzKCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG5zPSYjMzQ7JDEmIzM0OyBkZXY9JiMzNDskMiYjMzQ7CiYjNDM7CWxvY2FsIG91dCBjbnQKJiM0MzsKJiM0MzsJb3V0PSQobnN4ICYjMzQ7JG5zJiMzNDsgJiMzNDtpcCAtcyBsaW5rIHNob3cgJGRldiYjMzQ7IHwgXAomIzQzOwkJYXdrICYjMzk7L14gJiM0MztUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0mIzM5OykKJiM0MzsJY250PSQoZWNobyAmIzM0OyRvdXQmIzM0OyB8IGdyZXAgLWMgJiMzOTteWzAtOV0qIFswLTldKiQmIzM5OykKJiM0MzsJaWYgWyAmIzM0OyRjbnQmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIFRYIGNvdW50ZXJzIG9mICRucy8kZGV2JiMzNDsgXAomIzQzOwkJCSYjMzQ7KHJlY29yZHM9JGNudCkmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsJZWNobyAmIzM0OyRvdXQmIzM0OwomIzQzOwlyZXR1cm4gMAomIzQzO30KJiM0MzsKJiM0MztldmFsX2NvdW50ZXJfZGVsdGEoKQomIzQzO3sKJiM0MzsJbG9jYWwgbmFtZT0mIzM0OyQxJiMzNDsgYjA9JiMzNDskMiYjMzQ7IHAwPSYjMzQ7JDMmIzM0OyBiMT0mIzM0OyQ0JiMzNDsgcDE9JiMzNDskNSYjMzQ7IG9wPSYjMzQ7JDYmIzM0OyBsaW1pdD0mIzM0OyQ3JiMzNDsKJiM0MzsJbG9jYWwgYmQgcGQKJiM0MzsKJiM0MzsJaWYgISBbWyAmIzM0OyRiMCYjMzQ7ID1+IF5bMC05XSYjNDM7JCAmYW1wOyZhbXA7ICYjMzQ7JGIxJiMzNDsgPX4gXlswLTldJiM0MzskICZhbXA7JmFtcDsgXAomIzQzOwkJJiMzNDskcDAmIzM0OyA9fiBeWzAtOV0mIzQzOyQgJmFtcDsmYW1wOyAmIzM0OyRwMSYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IG5vbi1udW1lcmljIGNvdW50ZXIgaW5wdXQgZm9yICRuYW1lJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwliZD0kKChiMSAtIGIwKSkKJiM0MzsJcGQ9JCgocDEgLSBwMCkpCiYjNDM7CWlmIFsgJiMzNDskYmQmIzM0OyAtbHQgMCBdIHx8IFsgJiMzNDskcGQmIzM0OyAtbGUgMCBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY291bnRlciBkZWx0YSBpbnZhbGlkIGZvciAkbmFtZSYjMzQ7IFwKJiM0MzsJCQkmIzM0OyhieXRlcz0kYmQgcGt0cz0kcGQpJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwlpZiBbICYjMzQ7JG9wJiMzNDsgPSAmIzM0O2d0JiMzNDsgXTsgdGhlbgomIzQzOwkJaWYgWyAmIzM0OyRiZCYjMzQ7IC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlbgomIzQzOwkJCWVjaG8gJiMzNDtGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgJmx0Oz0gJGxpbWl0JiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCQlyZXQ9MQomIzQzOwkJCXJldHVybiAxCiYjNDM7CQlmaQomIzQzOwllbHNlCiYjNDM7CQlpZiBbICYjMzQ7JGJkJiMzNDsgLWd0ICQoKHBkICogbGltaXQpKSBdOyB0aGVuCiYjNDM7CQkJZWNobyAmIzM0O0ZBSUw6ICRuYW1lIGJ5dGVzL3BhY2tldHMgJGJkLyRwZCAmZ3Q7ICRsaW1pdCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQkJcmV0PTEKJiM0MzsJCQlyZXR1cm4gMQomIzQzOwkJZmkKJiM0MzsJZmkKJiM0MzsJZWNobyAmIzM0O0lORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkJiMzNDsgXAomIzQzOwkJJiMzNDsob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdJiMzNDsKJiM0MzsJcmV0dXJuIDAKJiM0Mzt9CiYjNDM7CiYjNDM7ZG9fdHNvX3N0cmVhbV90ZXN0KCkKJiM0Mzt7CiYjNDM7CWxvY2FsIG91dCBzZW5kZXJfcmV0ciBzZXJ2ZXJfcmMKJiM0MzsJbG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxCiYjNDM7CWxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgYl9iMCBiX3AwIGJfYjEgYl9wMQomIzQzOwomIzQzOwllY2hvICYjMzQ7SU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS4mIzM0OwomIzQzOwluc3ggJiMzNDskbnNfc2FuJiMzNDsgJiMzNDtldGh0b29sIC1LIHMwIHRzbyBvbiBnc28gb24mIzM0OwomIzQzOwljaGVja19mZWF0dXJlICYjMzQ7JG5zX3NhbiYjMzQ7IHMwIHRjcC1zZWdtZW50YXRpb24tb2ZmbG9hZCBvbgomIzQzOwlzdG9wX2lmX2Vycm9yICYjMzQ7Q291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuJiMzNDsKJiM0MzsKJiM0MzsJZWNobyAmIzM0O0lORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC0mZ3Q7IHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC4mIzM0OwomIzQzOwlzdGFydF9pcGVyZl9zZXJ2ZXIgfHwgcmV0dXJuCiYjNDM7CiYjNDM7CSMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZQomIzQzOwkjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0cwomIzQzOwkjIHJlYWxseSBsZWZ0IHRoZSBTQU4pOyBlYWNoIERVVCBMQU4gbGVnIG11c3Qgc3RheSB1bmRlciBMQU5fQVZHX01BWAomIzQzOwkjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlCiYjNDM7CSMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuCiYjNDM7CXNhbl9iMD0wOyBzYW5fcDA9MDsgYV9iMD0wOyBhX3AwPTA7IGJfYjA9MDsgYl9wMD0wCiYjNDM7CXJlYWQgLXIgc2FuX2IwIHNhbl9wMCAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19zYW4mIzM0OyBzMCkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBhX2IwIGFfcDAgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgZF9hKQomIzQzO0VPRgomIzQzOwlyZWFkIC1yIGJfYjAgYl9wMCAmbHQ7Jmx0O0VPRgomIzQzOyQocmVhZF90eF9jb3VudGVycyAmIzM0OyRuc19kdXQmIzM0OyBkX2IpCiYjNDM7RU9GCiYjNDM7CWlmICEgdmFsaWRfZGVjaW1hbHMgJiMzNDskc2FuX2IwJiMzNDsgJiMzNDskc2FuX3AwJiMzNDsgJiMzNDskYV9iMCYjMzQ7ICYjMzQ7JGFfcDAmIzM0OyBcCiYjNDM7CQkmIzM0OyRiX2IwJiMzNDsgJiMzNDskYl9wMCYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogYmFzZWxpbmUgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkJiMzNDsgMSZndDsmYW1wOzIKJiM0MzsJCXJldD0xCiYjNDM7CQlyZXR1cm4gMQomIzQzOwlmaQomIzQzOwomIzQzOwkjIHJhdGUtY2FwcGVkOiB0aGUgUFJJTUFSWSBkaXNjcmltaW5hdG9yIGlzIHRoZSBjb3VudGVyIGluZXF1YWxpdHkKJiM0MzsJIyBhYm92ZSwgbm90IG1heCB0aHJvdWdocHV0OyByZXRyYW5zbWl0cyBhcmUgaW5mb3JtYXRpb25hbCBvbmx5LgomIzQzOwkjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhCiYjNDM7CSMgZnVuY3Rpb25hbCBwcm9ibGVtLgomIzQzOwlpZiAhIG91dD0kKG5zeCAmIzM0OyRuc19zYW4mIzM0OyAmIzM0O3RpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgXAomIzQzOwkJLWIgMkcgLXQgMTAmIzM0OyAyJmd0OyZhbXA7MSk7IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBpcGVyZjMgY2xpZW50IGZhaWxlZDomIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJZWNobyAmIzM0OyRvdXQmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwomIzQzOwlyZWFkIC1yIHNhbl9iMSBzYW5fcDEgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfc2FuJiMzNDsgczApCiYjNDM7RU9GCiYjNDM7CXJlYWQgLXIgYV9iMSBhX3AxICZsdDsmbHQ7RU9GCiYjNDM7JChyZWFkX3R4X2NvdW50ZXJzICYjMzQ7JG5zX2R1dCYjMzQ7IGRfYSkKJiM0MztFT0YKJiM0MzsJcmVhZCAtciBiX2IxIGJfcDEgJmx0OyZsdDtFT0YKJiM0MzskKHJlYWRfdHhfY291bnRlcnMgJiMzNDskbnNfZHV0JiMzNDsgZF9iKQomIzQzO0VPRgomIzQzOwlpZiAhIHZhbGlkX2RlY2ltYWxzICYjMzQ7JHNhbl9iMSYjMzQ7ICYjMzQ7JHNhbl9wMSYjMzQ7ICYjMzQ7JGFfYjEmIzM0OyAmIzM0OyRhX3AxJiMzNDsgXAomIzQzOwkJJiMzNDskYl9iMSYjMzQ7ICYjMzQ7JGJfcDEmIzM0OzsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGZpbmFsIFRYIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuIDEKJiM0MzsJZmkKJiM0MzsKJiM0MzsJZXZhbF9jb3VudGVyX2RlbHRhICYjMzQ7U0FOIHMwIFRYJiMzNDsgJiMzNDskc2FuX2IwJiMzNDsgJiMzNDskc2FuX3AwJiMzNDsgJiMzNDskc2FuX2IxJiMzNDsgJiMzNDskc2FuX3AxJiMzNDsgXAomIzQzOwkJZ3QgJiMzNDskU0FOX0FWR19NSU4mIzM0OwomIzQzOwlldmFsX2NvdW50ZXJfZGVsdGEgJiMzNDtEVVQgZF9hIFRYJiMzNDsgJiMzNDskYV9iMCYjMzQ7ICYjMzQ7JGFfcDAmIzM0OyAmIzM0OyRhX2IxJiMzNDsgJiMzNDskYV9wMSYjMzQ7IFwKJiM0MzsJCWxlICYjMzQ7JExBTl9BVkdfTUFYJiMzNDsKJiM0MzsJZXZhbF9jb3VudGVyX2RlbHRhICYjMzQ7RFVUIGRfYiBUWCYjMzQ7ICYjMzQ7JGJfYjAmIzM0OyAmIzM0OyRiX3AwJiMzNDsgJiMzNDskYl9iMSYjMzQ7ICYjMzQ7JGJfcDEmIzM0OyBcCiYjNDM7CQlsZSAmIzM0OyRMQU5fQVZHX01BWCYjMzQ7CiYjNDM7CVsgJiMzNDske3JldDotMH0mIzM0OyAtZXEgMCBdIHx8IHJldHVybgomIzQzOwomIzQzOwkjIHN1Y2Nlc3MgcGF0aDogdGhlIG9uZS1zaG90IHNlcnZlciBleGl0cyBieSBpdHNlbGY7IHJlYXAgdGhlCiYjNDM7CSMgd3JhcHBlciwgdGhlbiBSRVFVSVJFIHRoZSByY2ZpbGUgd2l0aCB0aGUgc2VydmVyJiMzOTtzIHJlYWwgc3RhdHVzCiYjNDM7CXdhaXQgJiMzNDske3NlcnZlcl93cmFwcGVyfSYjMzQ7CiYjNDM7CXNlcnZlcl93cmFwcGVyPSYjMzQ7JiMzNDsKJiM0MzsJaWYgWyAhIC1zICYjMzQ7JHtyY2ZpbGV9JiMzNDsgXTsgdGhlbgomIzQzOwkJZWNobyAmIzM0O0ZBSUw6IGlwZXJmMyBzZXJ2ZXIgc3RhdHVzIGZpbGUgbWlzc2luZyAoJHtyY2ZpbGV9KSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CXNlcnZlcl9yYz0kKGNhdCAmIzM0OyR7cmNmaWxlfSYjMzQ7KQomIzQzOwlpZiAhIFtbICYjMzQ7JHNlcnZlcl9yYyYjMzQ7ID1+IF5bMC05XSYjNDM7JCBdXSB8fCBbICYjMzQ7JHNlcnZlcl9yYyYjMzQ7IC1uZSAwIF07IHRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiBpcGVyZjMgc2VydmVyIGV4aXRlZCB3aXRoIHJjPSYjMzk7JHtzZXJ2ZXJfcmN9JiMzOTsmIzM0OyAxJmd0OyZhbXA7MgomIzQzOwkJcmV0PTEKJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwlpcGVyZl9waWQ9JiMzNDsmIzM0OwomIzQzOwomIzQzOwkjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUCiYjNDM7CSMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlcgomIzQzOwkjIGdhdGVzICh0aGUgY291bnRlciBpbmVxdWFsaXRpZXMgYWJvdmUgYXJlIHRoZSBwcmltYXJ5IGV2aWRlbmNlKS4KJiM0MzsJc2VuZGVyX3JldHI9JChlY2hvICYjMzQ7JG91dCYjMzQ7IHwgYXdrICYjMzk7L3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0mIzM5OykKJiM0MzsJaWYgWyAmIzM0OyQoZWNobyAmIzM0OyRzZW5kZXJfcmV0ciYjMzQ7IHwgZ3JlcCAtRWMgJiMzOTteWzAtOV0mIzQzOyQmIzM5OykmIzM0OyAtbmUgMSBdOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogY2Fubm90IHBhcnNlIHNlbmRlciByZXRyYW5zbWl0cyByZWxpYWJseSYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQllY2hvICYjMzQ7JG91dCYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7CQlyZXQ9MQomIzQzOwkJcmV0dXJuCiYjNDM7CWZpCiYjNDM7CWVjaG8gJiMzNDtJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7JiMzNDsgXAomIzQzOwkJJiMzNDtzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDskb3V0JiMzNDsgfCBncmVwIC1FICYjMzQ7c2VuZGVyfHJlY2VpdmVyJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hlY2tfcHJlcmVxdWlzaXRlcwomIzQzO2NoZWNrX3Rvb2wgZXRodG9vbAomIzQzO2NoZWNrX3Rvb2wgaXBlcmYzCiYjNDM7Y2hlY2tfdG9vbCB0aW1lb3V0CiYjNDM7CiYjNDM7IyBpcHJvdXRlMiBtdXN0IGtub3cgdGhlIEhTUiBpbnRlcmxpbmsgc3ludGF4LgomIzQzO2lmICEgaXAgbGluayBoZWxwIGhzciAyJmd0OyZhbXA7MSB8IGdyZXAgLXFpIGludGVybGluazsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDogaXByb3V0ZTIgaGFzIG5vIEhTUiBpbnRlcmxpbmsgc3VwcG9ydCYjMzQ7CiYjNDM7CWV4aXQgJGtzZnRfc2tpcAomIzQzO2ZpCiYjNDM7CiYjNDM7c2V0dXBfdG9wbwomIzQzOwomIzQzO2VjaG8gJiMzNDtJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC0mZ3Q7IHBlZXIgdGhyb3VnaCB0aGUgRFVUKS4mIzM0OwomIzQzO2RvX3BpbmcgJiMzNDskbnNfc2FuJiMzNDsgJiMzNDskcGVlcl9pcCYjMzQ7CiYjNDM7c3RvcF9pZl9lcnJvciAmIzM0O0luaXRpYWwgdmFsaWRhdGlvbiBmYWlsZWQuJiMzNDsKJiM0MzsKJiM0Mztkb19ncm9fZmVhdHVyZV9jaGVja3MKJiM0Mztkb190c29fc3RyZWFtX3Rlc3QKJiM0MztzdG9wX2lmX2Vycm9yICYjMzQ7R1NPIHN1cGVyLXBhY2tldCBzdHJlYW0gdGVzdCBmYWlsZWQuJiMzNDsKJiM0MzsKJiM0MztlY2hvICYjMzQ7SU5GTzogQWxsIGdvb2QuJiMzNDsKJiM0MztjbGVhbnVwCiYjNDM7ZXhpdCAkcmV0CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTYwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR1JPIERpc2FibGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgaW50cm9kdWNlcyBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGZpbGVzLCBzcGVjaWZpY2FsbHkgYG5ldC9jb3JlL2Rldi5jYCBhbmQgYG5ldC9jb3JlL2Rldl9hcGkuY2AuIFRoYXQmIzM5O3MgYSBwcmV0dHkgbG93LWxldmVsIGNoYW5nZSwgaW1wYWN0aW5nIGZ1bmRhbWVudGFsIG5ldHdvcmsgZGV2aWNlIGJlaGF2aW9yLiBUaGVuLCBpdCB0b3VjaGVzIEhTUiAtIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgLSBjb2RlOiBgbmV0L2hzci9oc3JfZGV2aWNlLmNgLCBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCwgYW5kIGBuZXQvaHNyL2hzcl9zbGF2ZS5jYC4gTG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc3VwcG9ydCBmb3IgR1NPIHN1cGVyLXBhY2tldHMgaW4gdGhlIEhTUiBjb250ZXh0LiBBbmQgdGhlcmUmIzM5O3MgYSBzZWxmdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoYCwgd2hpY2ggaXMgZ29vZCB0byBzZWU7IGEgdGVzdCBzdWl0ZSBpcyBjcnVjaWFsIGhlcmUuCgpGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGlzIGEgcHJldHR5IGludGVyZXN0aW5nIGZ1bmN0aW9uYWwgcGF0Y2guIE1vZGlmeWluZyBib3RoIGNvcmUgbmV0d29ya2luZyBhbmQgc3BlY2lmaWMgZHJpdmVyIGNvZGUsIHBhcnRpY3VsYXJseSBvbmUgZGVhbGluZyB3aXRoIHJlZHVuZGFuY3kgYW5kIHBvdGVudGlhbGx5IGNvbXBsZXggZm9yd2FyZGluZyBsb2dpYyBtYWtlcyBtZSB0aGluayB0aGlzIHNob3VsZCBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gVGhlIGNoYW5nZXMgdG8gYGRldl9kaXNhYmxlX2dyb2AgaW4gY29yZSBhbmQgYG5ldC9oc3IvKmAgaW5kaWNhdGUgaXQgbWF5IGludGVyYWN0IHdpdGggb3RoZXIgbmV0d29ya2luZyBmdW5jdGlvbnMuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgQ09ORklHIG9wdGlvbnMgYXJlIGludm9sdmVkLiBTaW5jZSB0aGUgSFNSIGNvZGUgaXMgaW4gYG5ldC9oc3IvYCwgSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9oc3IvS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgbmV0L0tjb25maWdgIHRvIHNlZSB3aGF0IGFjdHVhbGx5IGVuYWJsZXMgdGhlIEhTUiBmdW5jdGlvbmFsaXR5LiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIHVzIHRhcmdldCBvdXIgZnV6emluZyBhbmQgdGVzdGluZyBlZmZvcnRzIG1vcmUgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhTUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnLTUtXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXG5uZXQvaHNyL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0hpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcdTAwMjYgUFJQKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODMzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIENPTkZJR19IU1IgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGBDT05GSUdfSFNSYCBpcyB0aGUgYmlnIG9uZS4gVGhhdCYjMzk7cyB3aGVyZSB3ZSBzdGFydCwgb2YgY291cnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcGxhY2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBCZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCwgb3IgdHdlYWtpbmcgcmVsYXRlZCBzZXR0aW5ncywgSSYjMzk7dmUgZ290IHRvIGVuc3VyZSBJIGhhdmUgYSBzb2xpZCBncmFzcCBvbiB3aGF0IG90aGVyIGNvbXBvbmVudHMsIGZlYXR1cmVzLCBvciBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zIGl0IG1pZ2h0IGhpbmdlIHVwb24uIEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcz8gRG9lcyBpdCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsIGtlcm5lbCBtb2R1bGVzLCBvciBvdGhlciBjb25maWcgb3B0aW9ucyB0byBiZSBhY3RpdmU/IE9yIHBvdGVudGlhbGx5IGNvbmZsaWN0cz8gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcywgYm90aCBleHBsaWNpdCBhbmQgaW1wbGljaXQsIHRvIGZvcm0gdGhlIGJlc3QgYW5kIGNvbXBsZXRlIG1lbnRhbCBtb2RlbC4gR290dGEgbWFrZSBzdXJlIGl0IHdpbGwgbm90IGludHJvZHVjZSBjb25mbGljdHMsIGJlZm9yZSBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9oc3IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElFQyA2MjQzOS0zIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3lcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEhTUlxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7SGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFx1MDAyNiBQUlApXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFRoaXMgZW5hYmxlcyBJRUMgNjI0MzkgZGVmaW5lZCBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzc1xuICAxMDpcdFx0ICBSZWR1bmRhbmN5IChIU1IpIGFuZCBQYXJhbGxlbCBSZWR1bmRhbmN5IFByb3RvY29sIChQUlApLlxuICAxMTpcdFxuICAxMjpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFcbiAgMTM6XHRcdCAgREFOSCAoXCYjMzQ7RG91Ymx5IGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIEhTUlwmIzM0Oykgb3IgREFOUCAoXCYjMzQ7RG91Ymx5XG4gIDE0Olx0XHQgIGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIFBSUFwmIzM0OykuIEZvciB0aGlzIHRvIHdvcmssIHlvdXIgTGludXggYm94XG4gIDE1Olx0XHQgIG5lZWRzIChhdCBsZWFzdCkgdHdvIHBoeXNpY2FsIEV0aGVybmV0IGludGVyZmFjZXMuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIEZvciBEQU5ILCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgaW4gYSByaW5nIG5ldHdvcmsgdG9nZXRoZXJcbiAgMTg6XHRcdCAgd2l0aCBvdGhlciBIU1IgY2FwYWJsZSBub2Rlcy4gQWxsIEV0aGVybmV0IGZyYW1lcyBzZW50IG92ZXIgdGhlIEhTUlxuICAxOTpcdFx0ICBkZXZpY2Ugd2lsbCBiZSBzZW50IGluIGJvdGggZGlyZWN0aW9ucyBvbiB0aGUgcmluZyAob3ZlciBib3RoIHNsYXZlXG4gIDIwOlx0XHQgIHBvcnRzKSwgZ2l2aW5nIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBFYWNoIEhTUiBub2RlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHUk8gRGlzYWJsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGludHJvZHVjaW5nIGFueXRoaW5nIHBhcnRpY3VsYXJseSBleG90aWMgaW4gdGVybXMgb2YgZGVwZW5kZW5jaWVzIOKAkyBqdXN0IHN0YW5kYXJkIG5ldHdvcmtpbmcgY29tcG9uZW50cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGltcGFjdGVkLiBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgYG5ldC9jb3JlL2Rldi5jYCBhbmQgYG5ldC9jb3JlL2Rldl9hcGkuY2AuIE15IGFpbSBpcyB0byBsb2NhdGUgYGRldl9kaXNhYmxlX2dyb2AgYW5kIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIGludGVncmF0ZWQuCgpBaCwgeWVzLCBpdCBsb29rcyBsaWtlIGBkZXZfZGlzYWJsZV9ncm9gIGlzIGluZGVlZCBhZGRlZCBhbmQgZXhwb3NlZC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGV4aXN0aW5nIGxvZ2ljLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBoc3JfZm9yd2FyZF9za2JgIGZ1bmN0aW9uLiBUaGlzIGlzIHNpZ25pZmljYW50LiBJJiMzOTtsbCBoYXZlIHRvIGRlbHZlIGludG8gdGhhdCBmdW5jdGlvbiB0byBzZWUgcHJlY2lzZWx5IGhvdyBHUk8gZGlzYWJsZW1lbnQgaXMgYmVpbmcgaW52b2tlZCBhbmQgd2h5LCBwYXJ0aWN1bGFybHkgaW4gcmVsYXRpb24gdG8gSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBmb3J3YXJkaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGZvciBkaXNhYmxpbmcgR1JPIHdpdGhpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFdoYXQgaW1wYWN0IGRvZXMgdGhhdCBoYXZlIG9uIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eT8gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgaHNyX2ZvcndhcmRfc2tiYCB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2RldmljZS5jPTIyND1zdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjM0LVx0XHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xubmV0L2hzci9oc3JfZGV2aWNlLmM6MjM1Olx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtMjM2LVx0fSBlbHNlIHtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz0yOTE9c3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2MC1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjM2MTpcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3JfZGV2aWNlLmMtMzYyLX1cbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz0zNjQ9c3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzk4LVxubmV0L2hzci9oc3JfZGV2aWNlLmM6Mzk5Olx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbm5ldC9oc3IvaHNyX2RldmljZS5jLTQwMC19XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTY3OD1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03MzUtLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3MzY6c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzM3LXtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzY4LSAqL1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc2OTp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzcwLXtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzczLVx0aWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkge1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc3NDpcdFx0aHNyX2ZvcndhcmRfc2tiX29uZShza2IsIHBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3NS1cdFx0cmV0dXJuO1xuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy04MDItXHRcdHNlZ3MtXHUwMDNlbmV4dCA9IE5VTEw7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6ODAzOlx0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNlZ3MsIHBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTgwNC1cdFx0c2VncyA9IG5leHQ7XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE1LVxubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE2OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTctc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYz0yND1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTc1LVxubmV0L2hzci9oc3Jfc2xhdmUuYzo3NjpcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy03Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldHdvcmsgVHJhZmZpYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBjb3VwbGUgb2Yga2V5IGZ1bmN0aW9uYWxpdGllcy4gRmlyc3QsIGl0JiMzOTtzIGFkZGluZyBgaHNyX2ZvcndhcmRfc2tiYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgcmVsYXRlZCB0byBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgcHJvY2VzcyBvZiBoYW5kbGluZyB0aG9zZSBsYXJnZSAmIzM0O3N1cGVyLXBhY2tldHMuJiMzNDsgSXQgc291bmRzIGxpa2Ugd2UmIzM5O3JlIHVuZm9sZGluZyB0aGVzZSwgbGlrZWx5IHRvIGRlYWwgd2l0aCB0aGVtIGFwcHJvcHJpYXRlbHkgd2l0aGluIHRoZSBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IpIGNvbnRleHQuCgpUaGVuIHdlJiMzOTt2ZSBnb3QgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIFRoZXNlIGFyZSBjbGVhcmx5IGFib3V0IGRpc2FibGluZyBHUk8gYXQgZGlmZmVyZW50IGxldmVscyDigJMgZGV2aWNlIGFuZCBuZXR3b3JrIGludGVyZmFjZSwgcmVzcGVjdGl2ZWx5LiBUaGlzIHRyaWdnZXJzIGEgcXVlc3Rpb247IHdoeSBhcmUgd2UgZGlzYWJsaW5nIEdSTz8gSXMgaXQgZHVlIHRvIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgb3IgY29uZmxpY3RzIHdpdGhpbiB0aGUgSFNSIGltcGxlbWVudGF0aW9uLCBvciBwZXJoYXBzIHRvIGVuc3VyZSBzcGVjaWZpYyBwYWNrZXQgaGFuZGxpbmcgYmVoYXZpb3VyPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdGhlcmUuCgpUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgZmxvdywgbGV0IG1lIHF1aWNrbHkgcmVmb2N1cyBvbiB0aGUgcHJvdmlkZWQga2V5IHN5bWJvbHM6IGBoc3JfZm9yd2FyZF9za2JgLCBhcyBtZW50aW9uZWQuIEFuZCB0aGVuLCBpdCBtZW50aW9ucyB0aGUgZGlzYWJsaW5nIGZ1bmN0aW9ucywgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AuIEdpdmVuIHRoZSBjb250ZXh0LCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYGhzcl9kZXZfeG1pdGAgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCBwb2ludHMuIFRoZXkmIzM5O3JlIGxpa2VseSB0aGUgZW50cnkgcG9pbnRzIGZvciB0aGUgSFNSLXNwZWNpZmljIHBhY2tldCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbiwgc28gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBhcmUgdGhlIGNvcnJlY3QgYW5kIGV4cGVjdGVkIHBsYWNlcyB3aGVyZSB0aGlzIGxvZ2ljIGludGVncmF0ZXMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBlYWNoIG9mIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoc3JfZGV2X3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz0yMTY9c3RhdGljIG5ldGRldl9mZWF0dXJlc190IGhzcl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjMtXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzoyMjQ6c3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjI1LXtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz01OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoc3JfZGV2aWNlX29wcyA9IHtcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MDEtXHQubmRvX3N0b3AgPSBoc3JfZGV2X2Nsb3NlLFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjAyOlx0Lm5kb19zdGFydF94bWl0ID0gaHNyX2Rldl94bWl0LFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjAzLVx0Lm5kb19jaGFuZ2VfcnhfZmxhZ3MgPSBoc3JfY2hhbmdlX3J4X2ZsYWdzLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTY2ND1ib29sIGlzX2hzcl9tYXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2NS17XG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NjY6XHRyZXR1cm4gKGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0ID09IGhzcl9kZXZfeG1pdCk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02NjctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU5OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSFNSIERldmljZSBUcmFuc21pc3Npb24gYW5kIFJlY2VwdGlvbioqCgpBbHJpZ2h0LCBzbyBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBoc3JfZGV2X3htaXRgIGlzIGVzc2VudGlhbGx5IHRoZSBIU1Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYG5kb19zdGFydF94bWl0YC4gSW4gb3RoZXIgd29yZHMsIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgYWN0dWFsIHRyYW5zbWlzc2lvbiBvZiBmcmFtZXMgZm9yIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgZGV2aWNlcy4gU28sIHdoZW4gYSBmcmFtZSBuZWVkcyB0byBnbyBvdXQgb250byB0aGUgSFNSIG5ldHdvcmssIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgZ2V0dGluZyBjYWxsZWQuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0cmFuc21pc3Npb24gZm9yIEhTUiBkZXZpY2VzLiBPbiB0aGUgb3RoZXIgc2lkZSwgZm9yIHJlY2VpdmluZywgYGhzcl9oYW5kbGVfZnJhbWVgIGlzIHRoZSByZWdpc3RlcmVkIGhhbmRsZXIgZm9yIHRoZSBSWCBwcm9jZXNzLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBwcm9jZXNzaW5nIGluY29taW5nIEhTUiBmcmFtZXMuIEdvdCBpdC4gTm93LCB0aGUga2V5IGlzIGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlciB0byBhY2hpZXZlIHRoZSBzZWFtbGVzcyByZWR1bmRhbmN5IHRoYXQgSFNSIGlzIGtub3duIGZvciwgYW5kIHRoZSBkZXRhaWxzIG9mIHRoYXQgYXJlIGNyaXRpY2FsIHRvIGFuYWx5emUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz03MTM9aW50IGhzcl9kZXZfZmluYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmhzcl9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZVsyXSxcbi0tXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy03MzktXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo3NDA6XHQvKiBNYWtlIHN1cmUgd2UgcmVjb2duaXplIGZyYW1lcyBmcm9tIG91cnNlbHZlcyBpbiBoc3JfaGFuZGxlX2ZyYW1lKCkgKi9cbm5ldC9oc3IvaHNyX2RldmljZS5jLTc0MS1cdHJlcyA9IGhzcl9jcmVhdGVfc2VsZl9ub2RlKGhzciwgaHNyX2Rldi1cdTAwM2VkZXZfYWRkcixcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jPTY2PWJvb2wgaHNyX2lzX25vZGVfaW5fZGIoc3RydWN0IGxpc3RfaGVhZCAqbm9kZV9kYixcbi0tXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTcxLVxubmV0L2hzci9oc3JfZnJhbWVyZWcuYzo3MjovKiBIZWxwZXIgZm9yIGRldmljZSBpbml0OyB0aGUgc2VsZl9ub2RlIGlzIHVzZWQgaW4gaHNyX2hhbmRsZV9mcmFtZSgpIHRvXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTczLSAqIHJlY29nbml6ZSBmcmFtZXMgZnJvbSBzZWxmIHRoYXQmIzM5O3MgYmVlbiBsb29wZWQgb3ZlciB0aGUgSFNSIHJpbmcuXG4tLVxubmV0L2hzci9oc3JfbWFpbi5jPTMxPXN0YXRpYyBpbnQgaHNyX25ldGRldl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5uZXQvaHNyL2hzcl9tYWluLmMtOTEtXG5uZXQvaHNyL2hzcl9tYWluLmM6OTI6XHRcdC8qIE1ha2Ugc3VyZSB3ZSByZWNvZ25pemUgZnJhbWVzIGZyb20gb3Vyc2VsdmVzIGluIGhzcl9oYW5kbGVfZnJhbWUoKSAqL1xubmV0L2hzci9oc3JfbWFpbi5jLTkzLVx0XHRwb3J0ID0gaHNyX3BvcnRfZ2V0X2hzcihoc3IsIEhTUl9QVF9TTEFWRV9CKTtcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTE5PWJvb2wgaHNyX2ludmFsaWRfZGFuX2luZ3Jlc3NfZnJhbWUoX19iZTE2IHByb3RvY29sKVxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmMtMjMtXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjI0OnN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxubmV0L2hzci9oc3Jfc2xhdmUuYy0yNS17XG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYz04NT1ib29sIGhzcl9wb3J0X2V4aXN0cyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2hzci9oc3Jfc2xhdmUuYy04Ni17XG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjg3Olx0cmV0dXJuIHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXHUwMDNlcnhfaGFuZGxlcikgPT0gaHNyX2hhbmRsZV9mcmFtZTtcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODgtfVxuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmM9MTMyPXN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYy0xNTktXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjE2MDpcdHJlcyA9IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyKGRldiwgaHNyX2hhbmRsZV9mcmFtZSwgcG9ydCk7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTE2MS1cdGlmIChyZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjI2CgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDMzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSFNSIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZSBpcyBgaHNyX2ZvcndhcmRfc2tiYCBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQuIEFsc28sIHRoZSBSeCBoYW5kbGVyLCBgaHNyX2hhbmRsZV9mcmFtZWAsIGlzIHZpdGFsIHRvIHRoZSBIU1IgcHJvY2Vzc2luZyBmbG93LiAgVGhleSYjMzk7dmUgYWxzbyBpbnRyb2R1Y2VkIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIHdoaWNoIGFyZSBpbnRlcmVzdGluZyBhZGRpdGlvbnMuCgpUaGUgYEhTUmAgY29uZmlnIGlzIHRoZSBrZXkgdG8gZW5hYmxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LCB3aGljaCBtYWtlcyBjb21wbGV0ZSBzZW5zZS4gV2UgaGF2ZSB0byBkb3VibGUgY2hlY2sgaWYgYW55IG90aGVyIGNvbmZpZ3MgYXJlIG5lZWRlZCwgYnV0IHNpbmNlIGBuZXQvY29yZS9kZXYuY2AgaXMgYWx3YXlzIGNvbXBpbGVkIGFuZCBgbmV0L2hzci9gIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19IU1JgIGlzIGVuYWJsZWQsIHRoZW4gd2UgY2FuIGNvbmZpZGVudGx5IHN0YXRlIHRoYXQgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYFsmIzM0O0hTUiYjMzQ7XWAuCgpBcyBmb3Igd2hpY2ggZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nPyBXZWxsLCBiZXNpZGVzIGBoc3JfZm9yd2FyZF9za2JgLCB3ZSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIGFzIHRoZXNlIGFyZSBpbnRlZ3JhbCB0byB0aGUgR1JPIGRpc2FibGluZyBhc3BlY3Qgb2YgdGhlIGNoYW5nZXMgYW5kIHdvdWxkIGJlIGltcG9ydGFudCBmdXp6aW5nIHRhcmdldHMuICBCYXNlZCBvbiBteSBrbm93bGVkZ2UsIGBoc3JfZGV2X3htaXRgIHNob3VsZCBiZSBpbmNsdWRlZCBzaW5jZSBpdCBoYW5kbGVzIHRyYW5zbWlzc2lvbiwgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCBzaG91bGQgYWxzbyBiZSBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgcnggaGFuZGxlci4gVGh1cywgYEZvY3VzU3ltYm9sc2AgaXMgZGVmaW5lZCBhcyBgWyYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDssICYjMzQ7ZGV2X2Rpc2FibGVfZ3JvJiMzNDssICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OywgJiMzNDtoc3JfZGV2X3htaXQmIzM0OywgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDtdYC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgYXJlIGV4cG9ydGVkPyBZZXMsIGFmdGVyIGEgcXVpY2sgY2hlY2sgdGhleSYjMzk7cmUgZXhwb3J0ZWQgaW4gYG5ldC9jb3JlL2Rldl9hcGkuY2AgYW5kIGBuZXQvY29yZS9kZXYuY2AsIHJlc3BlY3RpdmVseSwgc28gdGhleSBhcmUgYWNjZXNzaWJsZS4KClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25zIHRvIGRpc2FibGUgR1JPIGFuZCBtb2RpZmllcyB0aGUgSFNSIGRyaXZlciB0byB1bmZvbGQgR1NPIHN1cGVyLXBhY2tldHMgaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gZGlzYWJsZXMgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBuZXR3b3JraW5nIGNvcmUgYW5kIHRoZSBIU1IgZHJpdmVyLCBhbmQgYW55IHRyYWZmaWMgdGhyb3VnaCBhbiBIU1IgaW50ZXJmYWNlIGlzIGdvaW5nIHRvIHRvdWNoIHRoZXNlIG1vZGlmaWNhdGlvbnMuIFRoYXQgbWFrZXMgdGhlbSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGluZyB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIGlzIGEgcHJldHR5IG9idmlvdXMgY29uY2x1c2lvbi4KClJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIU1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OywKICAgICYjMzQ7ZGV2X2Rpc2FibGVfZ3JvJiMzNDssCiAgICAmIzM0O25ldGlmX2Rpc2FibGVfZ3JvJiMzNDssCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgdG8gZGlzYWJsZSBHUk8gb24gbmV0IGRldmljZXMsIGFuZCBtb2RpZmllcyB0aGUgSFNSIGRyaXZlciB0byB1bmZvbGQgR1NPIHN1cGVyLXBhY2tldHMgaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gZGlzYWJsZXMgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIEhTUiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBzZW5kaW5nIHRyYWZmaWMgdGhyb3VnaCBhbiBIU1IgaW50ZXJmYWNlLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICAgJiMzNDtkZXZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7bmV0aWZfZGlzYWJsZV9ncm8mIzM0OywKICAgICYjMzQ7aHNyX2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byBkaXNhYmxlIEdSTyBvbiBuZXQgZGV2aWNlcywgYW5kIG1vZGlmaWVzIHRoZSBIU1IgZHJpdmVyIHRvIHVuZm9sZCBHU08gc3VwZXItcGFja2V0cyBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgSFNSIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGJ5IHNlbmRpbmcgdHJhZmZpYyB0aHJvdWdoIGFuIEhTUiBpbnRlcmZhY2UsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjI5LjYwOTE1Njg4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NzMyNjcwODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiLFxuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byBkaXNhYmxlIEdSTyBvbiBuZXQgZGV2aWNlcywgYW5kIG1vZGlmaWVzIHRoZSBIU1IgZHJpdmVyIHRvIHVuZm9sZCBHU08gc3VwZXItcGFja2V0cyBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgSFNSIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGJ5IHNlbmRpbmcgdHJhZmZpYyB0aHJvdWdoIGFuIEhTUiBpbnRlcmZhY2UsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDY6MjkuNjA5MTYyOTI4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM1ODAyMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4Y2Y3NTVhOWQ5MmIzOTA4MTc5NjBlNzNmZTgyNzM2ZDBmNDBhZDc5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTU6NDY6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCA5OTgxZDYzN2Y4YjU0Li5lYmEyYzI2YTQ5YmE4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuQEAgLTM0MzQsNiArMzQzNCw4IEBAIHZvaWQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xcbiB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4rdm9pZCBkZXZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGludCBkZXZfbG9vcGJhY2tfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5ld3NrYik7XFxuIHUxNiBkZXZfcGlja190eF96ZXJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2Rldik7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCA1OTMzYzVkYWIwOWVlLi5hNmNmMmFkYzg2MjU2IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtMTg0MCw2ICsxODQwLDI0IEBAIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0fVxcbiB9XFxuIFxcbit2b2lkIG5ldGlmX2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyX2RldjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4rXFxuK1xcdGRldi1cXHUwMDNld2FudGVkX2ZlYXR1cmVzIFxcdTAwMjY9IH4oTkVUSUZfRl9HUk8gfCBORVRJRl9GX0dST19IVyk7XFxuK1xcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgKE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpKSlcXG4rXFx0XFx0bmV0ZGV2X1dBUk4oZGV2LCBcXFwiZmFpbGVkIHRvIGRpc2FibGUgR1JPIVxcXFxuXFxcIik7XFxuK1xcbitcXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XFxuK1xcdFxcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xcbitcXHRcXHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xcbitcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qKlxcbiAgKlxcdGRldl9kaXNhYmxlX2dyb19odyAtIGRpc2FibGUgSFcgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcXG4gICpcXHRAZGV2OiBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FwaS5jIGIvbmV0L2NvcmUvZGV2X2FwaS5jXFxuaW5kZXggNDM3OTQ3ZGQwOGVkNS4uMDJmYjIxNjI5NTEyOCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXZfYXBpLmNcXG4rKysgYi9uZXQvY29yZS9kZXZfYXBpLmNcXG5AQCAtMjY5LDYgKzI2OSwyMiBAQCB2b2lkIGRldl9kaXNhYmxlX2xybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfbHJvKTtcXG4gXFxuKy8qKlxcbisgKiBkZXZfZGlzYWJsZV9ncm8oKSAtIGRpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgb24gYSBkZXZpY2VcXG4rICogQGRldjogZGV2aWNlXFxuKyAqXFxuKyAqIERpc2FibGUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgb24gYSBuZXQgZGV2aWNlLiAgTXVzdCBiZVxcbisgKiBjYWxsZWQgdW5kZXIgUlROTC4gIFRoaXMgaXMgbmVlZGVkIGlmIHJlY2VpdmVkIHBhY2tldHMgbWF5IGJlXFxuKyAqIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS5cXG4rICovXFxuK3ZvaWQgZGV2X2Rpc2FibGVfZ3JvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuK1xcdG5ldGlmX2Rpc2FibGVfZ3JvKGRldik7XFxuK1xcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9ncm8pO1xcbitcXG4gLyoqXFxuICAqIGRldl9zZXRfcHJvbWlzY3VpdHkoKSAtIHVwZGF0ZSBwcm9taXNjdWl0eSBjb3VudCBvbiBhIGRldmljZVxcbiAgKiBAZGV2OiBkZXZpY2VcXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZGV2aWNlLmMgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbmluZGV4IDU1NTViNzFhYjE5YjUuLjI0OGNiYjE0MmUyMWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3JfZGV2aWNlLmNcXG4rKysgYi9uZXQvaHNyL2hzcl9kZXZpY2UuY1xcbkBAIC0yMzIsOSArMjMyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRza2ItXFx1MDAzZWRldiA9IG1hc3Rlci1cXHUwMDNlZGV2O1xcbiBcXHRcXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xcbiBcXHRcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuIFxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xcbiBcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbkBAIC0zMzUsNiArMzMzLDcgQEAgc3RhdGljIHZvaWQgc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxcbiBcXHRcXHRoc3Jfc3RhZy1cXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXFx1MDAzZXNlcXVlbmNlX25yKTtcXG4gXFx0XFx0aHNyLVxcdTAwM2VzZXF1ZW5jZV9ucisrO1xcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xcbiBcXHQvKiBIU1J2MCBoYXMgNiB1bnVzZWQgYnl0ZXMgYWZ0ZXIgdGhlIE1BQyAqL1xcbkBAIC0zNTYsMTQgKzM1NSwxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuIFxcdFxcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXFx1MDAzZW1hY2FkZHJlc3NfQSwgaHNyLVxcdTAwM2VtYWNhZGRyZXNzX3JlZGJveCk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XFxuLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbitcXHRpZiAoc2tiX3B1dF9wYWR0byhza2IsIEVUSF9aTEVOKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHR9XFxuIFxcbiBcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLVxcdHJldHVybjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXFxuQEAgLTM5MCw2ICszODUsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHRoc3Jfc3RhZy1cXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXFx1MDAzZXN1cF9zZXF1ZW5jZV9ucik7XFxuIFxcdGhzci1cXHUwMDNlc3VwX3NlcXVlbmNlX25yKys7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiBcXHRoc3Jfc3RhZy1cXHUwMDNldGx2LkhTUl9UTFZfdHlwZSA9IFBSUF9UTFZfTElGRV9DSEVDS19ERDtcXG4gXFx0aHNyX3N0YWctXFx1MDAzZXRsdi5IU1JfVExWX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaHNyX3N1cF9wYXlsb2FkKTtcXG4gXFxuQEAgLTM5NywxMyArMzkzLDEwIEBAIHN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxcbiBcXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGhzcl9zcC1cXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbiBcXG4tXFx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuK1xcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxcbiBcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4gXFxuIFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XFxuLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbiB9XFxuIFxcbiAvKiBBbm5vdW5jZSAoc3VwZXJ2aXNpb24gZnJhbWUpIHRpbWVyIGZ1bmN0aW9uXFxuQEAgLTY1OSw3ICs2NTIsNyBAQCB2b2lkIGhzcl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuIFxcbiBcXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0hJR0hETUEgfFxcbi1cXHRcXHRcXHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcXG4rXFx0XFx0XFx0ICAgTkVUSUZfRl9IV19DU1VNIHxcXG4gXFx0XFx0XFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfFxcbiBcXHRcXHRcXHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG5pbmRleCAwNzc0OTgxYTY1YzE2Li4zZmNkYmFjNDljNTlkIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZ3NvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJoc3JfbWFpbi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaHNyX2ZyYW1lcmVnLmhcXFwiXFxuIFxcbkBAIC02MjEsOSArNjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxcbiBcXHQgICAgcG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XFxuIFxcdFxcdC8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovXFxuLVxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0XFx0ZnJhbWUtXFx1MDAzZXNlcXVlbmNlX25yID0gaHNyLVxcdTAwM2VzZXF1ZW5jZV9ucjtcXG4gXFx0XFx0aHNyLVxcdTAwM2VzZXF1ZW5jZV9ucisrO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC03MzEsNyArNzMzLDcgQEAgc3RhdGljIGludCBmaWxsX2ZyYW1lX2luZm8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4gfVxcbiBcXG4gLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbitzdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9za2Jfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4ge1xcbiBcXHRzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gZnJhbWU7XFxuIFxcbkBAIC03NjAsMyArNzYyLDUwIEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4gXFx0cG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbiB9XFxuK1xcbisvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xcbisgKiBlYWNoIHdpcmUgZnJhbWUgZ2V0cyBpdHMgb3duIEhTUi9QUlAgdGFnIGFuZCBzZXF1ZW5jZSBudW1iZXIuXFxuKyAqL1xcbit2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0O1xcbitcXG4rXFx0aWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkge1xcbitcXHRcXHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogVW5mb2xkIG9ubHkgcGxhaW4tRXRoZXJuZXQgR1NPIHN1cGVyLXBhY2tldHM6IGxvY2FsbHkgZ2VuZXJhdGVkXFxuK1xcdCAqIG9uIHRoZSBtYXN0ZXIsIG9yIGFycml2aW5nIHVudGFnZ2VkIGZyb20gdGhlIFNBTiBzaWRlIG9uIHRoZVxcbitcXHQgKiBpbnRlcmxpbmsuIEEgc3VwZXItcGFja2V0IGZyb20gYSBMQU4gc2xhdmUgbWF5IGNhcnJ5IHBlci1mcmFtZVxcbitcXHQgKiBIU1IgdGFncyAvIFBSUCBSQ1QgdHJhaWxlcnMgdGhhdCBzb2Z0d2FyZSBzZWdtZW50YXRpb24gY2Fubm90XFxuK1xcdCAqIHJlY292ZXI7IGFuIGFscmVhZHktdGFnZ2VkIEhTUi9QUlAgc3VwZXItcGFja2V0IHZpb2xhdGVzXFxuK1xcdCAqIHBlci1mcmFtZSB3aXJlIHNlbWFudGljcy4gRHJvcCBib3RoLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgIT0gSFNSX1BUX01BU1RFUiBcXHUwMDI2XFx1MDAyNiBwb3J0LVxcdTAwM2V0eXBlICE9IEhTUl9QVF9JTlRFUkxJTkspXFxuK1xcdFxcdGdvdG8gZHJvcF9nc287XFxuK1xcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0hTUikgfHxcXG4rXFx0ICAgIHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUFJQKSlcXG4rXFx0XFx0Z290byBkcm9wX2dzbztcXG4rXFxuK1xcdC8qIGZlYXR1cmVzID0gMDogcmVxdWVzdCBmdWxsIHNvZnR3YXJlIHNlZ21lbnRhdGlvbi4gdHhfcGF0aCBpcyB0cnVlXFxuK1xcdCAqIG9ubHkgZm9yIGxvY2FsbHkgZ2VuZXJhdGVkIHRyYWZmaWMgb24gdGhlIG1hc3RlcjsgaW5ncmVzcyBmcm9tXFxuK1xcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXFxuK1xcdCAqL1xcbitcXHRzZWdzID0gX19za2JfZ3NvX3NlZ21lbnQoc2tiLCAwLCBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIpO1xcbitcXHRpZiAoSVNfRVJSKHNlZ3MpIHx8IHVubGlrZWx5KCFzZWdzKSlcXG4rXFx0XFx0Z290byBkcm9wX2dzbztcXG4rXFxuK1xcdGNvbnN1bWVfc2tiKHNrYik7XFxuK1xcdHdoaWxlIChzZWdzKSB7XFxuK1xcdFxcdG5leHQgPSBzZWdzLVxcdTAwM2VuZXh0O1xcbitcXHRcXHRzZWdzLVxcdTAwM2VuZXh0ID0gTlVMTDtcXG4rXFx0XFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcXG4rXFx0XFx0c2VncyA9IG5leHQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuO1xcbitcXG4rZHJvcF9nc286XFxuK1xcdHBvcnQtXFx1MDAzZWRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRrZnJlZV9za2Ioc2tiKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9zbGF2ZS5jIGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbmluZGV4IDAxYzczYjRiNTBkZGQuLjBjYTU1ZDkzMjNjNTcgMTAwNjQ0XFxuLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuY1xcbisrKyBiL25ldC9oc3IvaHNyX3NsYXZlLmNcXG5AQCAtNzMsMTYgKzczLDcgQEAgc3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdH1cXG4gXFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcXG4gXFxuLVxcdC8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhXFxuLVxcdCAqIHNlcXVlbmNlIG51bWJlciBhbmQgcmVxdWlyZSBzeW5jaHJvbmlzYXRpb24gdnMgb3RoZXIgc2VuZGVyLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSykge1xcbi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLVxcdFxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuLVxcdH1cXG4rXFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxuIFxcbiBmaW5pc2hfY29uc3VtZTpcXG4gXFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XFxuQEAgLTE3MCw2ICsxNjEsNyBAQCBzdGF0aWMgaW50IGhzcl9wb3J0ZGV2X3NldHVwKHN0cnVjdCBoc3JfcHJpdiAqaHNyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRnb3RvIGZhaWxfcnhfaGFuZGxlcjtcXG4gXFx0ZGV2X2Rpc2FibGVfbHJvKGRldik7XFxuK1xcdGRldl9kaXNhYmxlX2dybyhkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbmluZGV4IDMxZmI5MzI2Y2Y1MzMuLjBkMTA1NDc2ZTdjNTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG5AQCAtMyw2ICszLDcgQEBcXG4gdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uXFxuIFxcbiBURVNUX1BST0dTIDo9IFxcXFxcXG4rXFx0aHNyX2dyb19zdXBlcnBhY2tldC5zaCBcXFxcXFxuIFxcdGhzcl9waW5nLnNoIFxcXFxcXG4gXFx0aHNyX3JlZGJveC5zaCBcXFxcXFxuIFxcdGxpbmtfZmF1bHRzLnNoIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yODhkZTNhNjBiODk5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxcbkBAIC0wLDAgKzEsNDYyIEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFRlc3QgSFNSIGhhbmRsaW5nIG9mIEdSTy9HU08gc3VwZXItcGFja2V0czpcXG4rI1xcbisjICAxLiBFbnNsYXZpbmcgYSBkZXZpY2UgdG8gYW4gSFNSIG1hc3RlciBkaXNhYmxlcyBHUk8gb24gaXRcXG4rIyAgICAgKGRldl9kaXNhYmxlX2dybygpKS5cXG4rIyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXFxuKyMgIDMuIEEgVENQIHN0cmVhbSBmcm9tIGEgVFNPLWVuYWJsZWQgU0FOICh3aGljaCB0aGVyZWZvcmUgZW1pdHMgR1NPXFxuKyMgICAgIHN1cGVyLXBhY2tldHMpIGlzIHVuZm9sZGVkIGF0IHRoZSBIU1IgZm9yd2FyZCBlbnRyeS4gRXZpZGVuY2U6XFxuKyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xcbisjICAgICB0aGUgU0FOIGFuZCBwZXItZnJhbWUtc2l6ZWQgdHJhZmZpYyBsZWF2aW5nIHRoZSBEVVQncyBMQU4gcG9ydHMuXFxuKyNcXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XFxuKyNcXG4rIyAgIG5zX3NhbiAgICAgICAgICAgICAgICAgICAgbnNfZHV0ICAgICAgICAgICAgICAgICAgICAgIG5zX3BlZXJcXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xcbisjICB8IHMwIFswLjFdICB8LS0tLS0tLS0tLS0tLXwgZF9pbCAgIGhzcjAgICB8LS0tLS0tLS0tLS18IGhzcjEgWzAuM118XFxuKyMgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgfCBkX2EgLyBkX2IgICAgIHwgICAgICAgICAgIHwgcF9hIC8gcF9iIHxcXG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xcbisjXFxuKyMgU0FOIHRyYWZmaWMgcmVhY2hlcyBuc19wZWVyIG9ubHkgdGhyb3VnaCBoc3IwJ3MgZm9yd2FyZCBwYXRoXFxuKyMgKGludGVybGluayBSWCAtXFx1MDAzZSBMQU4gQS9CIFRYKSwgc28gZXZlcnkgU0FOIGZyYW1lIGlzIHRhZ2dlZCBhbmRcXG4rIyBmb3J3YXJkZWQgYnkgdGhlIERVVC5cXG4rXFxuK3NvdXJjZSAuL2hzcl9jb21tb24uc2hcXG4rXFxuK3Nhbl9pcD1cXFwiMTAwLjY0LjAuMVxcXCJcXG4rcGVlcl9pcD1cXFwiMTAwLjY0LjAuM1xcXCJcXG4rXFxuKyMgQWdncmVnYXRlIGNvdW50ZXIgdGhyZXNob2xkcyBmb3IgdGhlIHN0cmVhbSB0ZXN0IChieXRlcy9wYWNrZXRzKTpcXG4rIyBTQU5fQVZHX01JTiBwcm92ZXMgR1NPIHN1cGVyLXBhY2tldHMgbGVmdCB0aGUgU0FOOyBMQU5fQVZHX01BWCBpcyBhXFxuKyMgZ3VhcmQgd2l0aCBtYXJnaW4sIG5vdCB0aGUgcHJvdG9jb2wgbWF4aW11bSAoc2VlIGRvX3Rzb19zdHJlYW1fdGVzdCkuXFxuK1NBTl9BVkdfTUlOPTIwNDhcXG4rTEFOX0FWR19NQVg9MTUxNFxcbitcXG4raXBlcmZfcGlkPVxcXCJcXFwiXFxuK3NlcnZlcl93cmFwcGVyPVxcXCJcXFwiXFxuK3dvcmtkaXI9XFxcIlxcXCJcXG4rcGlkZmlsZT1cXFwiXFxcIlxcbityY2ZpbGU9XFxcIlxcXCJcXG4rXFxuK2NsZWFudXAoKVxcbit7XFxuK1xcdCMgZXhhY3QtUElEIGtpbGwgb25seSBhZnRlciBSRS12YWxpZGF0aW5nIGlkZW50aXR5IChndWFyZHMgYWdhaW5zdFxcbitcXHQjIFBJRCByZXVzZSBiZXR3ZWVuIHB1YmxpY2F0aW9uIGFuZCBjbGVhbnVwKVxcbitcXHRpZiBbIC1uIFxcXCIke2lwZXJmX3BpZH1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgdmFsaWRfc2VydmVyX3BpZCBcXFwiJHtpcGVyZl9waWR9XFxcIjsgdGhlblxcbitcXHRcXHRraWxsIFxcXCIke2lwZXJmX3BpZH1cXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdGZpXFxuK1xcdGlwZXJmX3BpZD1cXFwiXFxcIlxcbitcXHRpZiBbIC1uIFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCIgXTsgdGhlblxcbitcXHRcXHQjIHRoZSB3cmFwcGVyIHdhaXRzIG9uIHRoZSBzZXJ2ZXI7IHJlYXAgaXQgd2l0aCBhIDVzIGJvdW5kIHNvIGFcXG4rXFx0XFx0IyBsaXZlLWJ1dC11bnB1Ymxpc2hlZCBzZXJ2ZXIgY2FuIG5ldmVyIGhhbmcgY2xlYW51cFxcbitcXHRcXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cXG4rXFx0XFx0XFx0a2lsbCAtMCBcXFwiJHtzZXJ2ZXJfd3JhcHBlcn1cXFwiIDJcXHUwMDNlL2Rldi9udWxsIHx8IGJyZWFrXFxuK1xcdFxcdFxcdHNsZWVwIDAuMVxcbitcXHRcXHRkb25lXFxuK1xcdFxcdGtpbGwgXFxcIiR7c2VydmVyX3dyYXBwZXJ9XFxcIiAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXHRcXHR3YWl0IFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0c2VydmVyX3dyYXBwZXI9XFxcIlxcXCJcXG4rXFx0ZmlcXG4rXFx0IyBsYXN0IHJlc29ydCwgbmFtZXNwYWNlLXNjb3BlZCBvbmx5OiBURVJNIHRoZSBpcGVyZjMgcHJvY2Vzc2VzIHRoYXRcXG4rXFx0IyBhY3R1YWxseSBsaXZlIGluIHRoZSBwZWVyIG5ldG5zLCBwb2xsIGZvciBib3VuZGVkIGV4aXQsIHRoZW5cXG4rXFx0IyBTSUdLSUxMIGFueSBzdXJ2aXZvciBiZWZvcmUgdG91Y2hpbmcgdGhlIG5hbWVzcGFjZSBuYW1lLiBBIGJsaW5kXFxuK1xcdCMgcGtpbGwgd291bGQgc2NhbiB0aGUgaG9zdCBQSUQgc3BhY2UgYW5kIGhpdCB1bnJlbGF0ZWQgdGVzdHMuXFxuK1xcdGxvY2FsIF9wIF9zdGlsbFxcbitcXHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFxcXCIkbnNfcGVlclxcXCIgMlxcdTAwM2UvZGV2L251bGwpOyBkb1xcbitcXHRcXHRpZiBpc19pcGVyZjNfcGlkIFxcXCIkX3BcXFwiOyB0aGVuXFxuK1xcdFxcdFxcdGtpbGwgXFxcIiRfcFxcXCIgMlxcdTAwM2UvZGV2L251bGxcXG4rXFx0XFx0ZmlcXG4rXFx0ZG9uZVxcbitcXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cXG4rXFx0XFx0X3N0aWxsPTBcXG4rXFx0XFx0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcXFwiJG5zX3BlZXJcXFwiIDJcXHUwMDNlL2Rldi9udWxsKTsgZG9cXG4rXFx0XFx0XFx0aWYgaXNfaXBlcmYzX3BpZCBcXFwiJF9wXFxcIjsgdGhlblxcbitcXHRcXHRcXHRcXHRfc3RpbGw9MVxcbitcXHRcXHRcXHRcXHRicmVha1xcbitcXHRcXHRcXHRmaVxcbitcXHRcXHRkb25lXFxuK1xcdFxcdFsgXFxcIiRfc3RpbGxcXFwiIC1lcSAwIF0gXFx1MDAyNlxcdTAwMjYgYnJlYWtcXG4rXFx0XFx0c2xlZXAgMC4xXFxuK1xcdGRvbmVcXG4rXFx0Zm9yIF9wIGluICQoaXAgbmV0bnMgcGlkcyBcXFwiJG5zX3BlZXJcXFwiIDJcXHUwMDNlL2Rldi9udWxsKTsgZG9cXG4rXFx0XFx0aWYgaXNfaXBlcmYzX3BpZCBcXFwiJF9wXFxcIjsgdGhlblxcbitcXHRcXHRcXHRraWxsIC05IFxcXCIkX3BcXFwiIDJcXHUwMDNlL2Rldi9udWxsXFxuK1xcdFxcdGZpXFxuK1xcdGRvbmVcXG4rXFx0IyByZW1vdmUgb25seSB0aGUga25vd24gbm9uLWVtcHR5IHByaXZhdGUgZGlyZWN0b3J5XFxuK1xcdGlmIFsgLW4gXFxcIiR7d29ya2Rpcn1cXFwiIF0gXFx1MDAyNlxcdTAwMjYgWyAtZCBcXFwiJHt3b3JrZGlyfVxcXCIgXTsgdGhlblxcbitcXHRcXHRybSAtcmYgXFxcIiR7d29ya2Rpcn1cXFwiXFxuK1xcdGZpXFxuK1xcdHdvcmtkaXI9XFxcIlxcXCJcXG4rXFx0cGlkZmlsZT1cXFwiXFxcIlxcbitcXHRyY2ZpbGU9XFxcIlxcXCJcXG4rXFx0Y2xlYW51cF9hbGxfbnNcXG4rfVxcbitcXG4rdHJhcCBjbGVhbnVwIEVYSVRcXG4rXFxuK2NoZWNrX3Rvb2woKVxcbit7XFxuK1xcdGlmICEgY29tbWFuZCAtdiBcXFwiJDFcXFwiIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjE7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiU0tJUDogQ291bGQgbm90IHJ1biB0ZXN0IHdpdGhvdXQgJDFcXFwiXFxuK1xcdFxcdGV4aXQgJGtzZnRfc2tpcFxcbitcXHRmaVxcbit9XFxuK1xcbituc3goKVxcbit7XFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiQxXFxcIiBiYXNoIC1jIFxcXCIkMlxcXCJcXG4rfVxcbitcXG4raXNfaXBlcmYzX3BpZCgpXFxuK3tcXG4rXFx0WyBcXFwiJChjYXQgL3Byb2MvXFxcIiQxXFxcIi9jb21tIDJcXHUwMDNlL2Rldi9udWxsKVxcXCIgPSBcXFwiaXBlcmYzXFxcIiBdXFxuK31cXG4rXFxuKyMgRGVjaW1hbC1jb3VudGVyIHZhbGlkYXRpb24gZm9yIHRoZSBzbmFwc2hvdCBibG9ja3M6IGV2ZXJ5IHZhbHVlIG11c3RcXG4rIyBiZSBhIHBsYWluIGRlY2ltYWwgbnVtYmVyLiBBIHBhcnNlIGZhaWx1cmUgaW4gcmVhZF90eF9jb3VudGVycyB5aWVsZHNcXG4rIyBlbXB0eS9nYXJibGVkIGZpZWxkcywgd2hpY2ggdGhpcyBjaGVjayB0dXJucyBpbnRvIGFuIGltbWVkaWF0ZSBGQUlMLlxcbit2YWxpZF9kZWNpbWFscygpXFxuK3tcXG4rXFx0bG9jYWwgdlxcbitcXG4rXFx0Zm9yIHYgaW4gXFxcIiRAXFxcIjsgZG9cXG4rXFx0XFx0W1sgXFxcIiR2XFxcIiA9fiBeWzAtOV0rJCBdXSB8fCByZXR1cm4gMVxcbitcXHRkb25lXFxuK1xcdHJldHVybiAwXFxuK31cXG4rXFxuK3NldHVwX3RvcG8oKVxcbit7XFxuK1xcdHNldHVwX25zIG5zX2R1dCBuc19zYW4gbnNfcGVlciB8fCBleGl0ICQ/XFxuK1xcbitcXHRpcCBsaW5rIGFkZCBkX2EgbmV0bnMgXFxcIiRuc19kdXRcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zIFxcXCIkbnNfcGVlclxcXCJcXG4rXFx0aXAgbGluayBhZGQgZF9iIG5ldG5zIFxcXCIkbnNfZHV0XFxcIiB0eXBlIHZldGggcGVlciBuYW1lIHBfYiBuZXRucyBcXFwiJG5zX3BlZXJcXFwiXFxuK1xcdGlwIGxpbmsgYWRkIGRfaWwgbmV0bnMgXFxcIiRuc19kdXRcXFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgczAgbmV0bnMgXFxcIiRuc19zYW5cXFwiXFxuK1xcbitcXHQjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uXFxuK1xcdGZvciBpZmFjZSBpbiBkX2EgZF9iOyBkb1xcbitcXHRcXHRuc3ggXFxcIiRuc19kdXRcXFwiIFxcXCJpcCBsaW5rIHNldCAkaWZhY2UgbXR1IDE2MDA7IFxcXFxcXG4rXFx0XFx0XFx0aXAgbGluayBzZXQgJGlmYWNlIHVwXFxcIlxcbitcXHRkb25lXFxuK1xcdGZvciBpZmFjZSBpbiBwX2EgcF9iOyBkb1xcbitcXHRcXHRuc3ggXFxcIiRuc19wZWVyXFxcIiBcXFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcXFxcXFxuK1xcdFxcdFxcdGlwIGxpbmsgc2V0ICRpZmFjZSB1cFxcXCJcXG4rXFx0ZG9uZVxcbitcXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBzZXQgZF9pbCB1cFxcXCJcXG4rXFx0bnN4IFxcXCIkbnNfc2FuXFxcIiBcXFwiaXAgbGluayBzZXQgczAgdXA7IGlwIGFkZHIgYWRkICRzYW5faXAvMjQgZGV2IHMwXFxcIlxcbitcXG4rXFx0bnN4IFxcXCIkbnNfZHV0XFxcIiBcXFwiaXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxcXFxuK1xcdFxcdHNsYXZlMSBkX2Egc2xhdmUyIGRfYiBpbnRlcmxpbmsgZF9pbCBwcm90byAwOyBcXFxcXFxuK1xcdFxcdGlwIGxpbmsgc2V0IGhzcjAgdXBcXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3BlZXJcXFwiIFxcXCJpcCBsaW5rIGFkZCBoc3IxIHR5cGUgaHNyIFxcXFxcXG4rXFx0XFx0c2xhdmUxIHBfYSBzbGF2ZTIgcF9iIHByb3RvIDA7IFxcXFxcXG4rXFx0XFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcXFwiXFxuK1xcbitcXHQjIExldCB0aGUgbm9kZXMgc2VlIGVhY2ggb3RoZXIncyBzdXBlcnZpc2lvbiBmcmFtZXMuXFxuK1xcdHNsZWVwIDJcXG4rfVxcbitcXG4rY2hlY2tfZmVhdHVyZSgpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBpZmFjZT1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIGZlYXR1cmU9XFxcIiQzXFxcIlxcbitcXHRsb2NhbCB3YW50PVxcXCIkNFxcXCJcXG4rXFxuK1xcdGlmIG5zeCBcXFwiJG5zXFxcIiBcXFwiZXRodG9vbCAtayAkaWZhY2VcXFwiIHwgZ3JlcCAtcSBcXFwiXiRmZWF0dXJlOiAkd2FudFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyAkd2FudCBbIE9LIF1cXFwiXFxuK1xcdGVsc2VcXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogJG5zLyRpZmFjZSAkZmVhdHVyZSBpcyBub3QgJHdhbnRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0ZmlcXG4rfVxcbitcXG4rIyBPZmYtb3ItYWJzZW50IHZhcmlhbnQ6IGZhaWxzIG9ubHkgd2hlbiB0aGUgZmVhdHVyZSBpcyBwcmVzZW50IEFORCBvbixcXG4rIyBzbyBkZXZpY2VzIHRoYXQgc2ltcGx5IGRvIG5vdCBsaXN0IHRoZSBmZWF0dXJlIGRvIG5vdCBmYWlsIGl0LlxcbitjaGVja19mZWF0dXJlX25vdF9vbigpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIlxcbitcXHRsb2NhbCBpZmFjZT1cXFwiJDJcXFwiXFxuK1xcdGxvY2FsIGZlYXR1cmU9XFxcIiQzXFxcIlxcbitcXG4rXFx0aWYgbnN4IFxcXCIkbnNcXFwiIFxcXCJldGh0b29sIC1rICRpZmFjZVxcXCIgfCBncmVwIC1xIFxcXCJeJGZlYXR1cmU6IG9uXFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG9uXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdGVsc2VcXG4rXFx0XFx0ZWNobyBcXFwiSU5GTzogJG5zLyRpZmFjZSAkZmVhdHVyZSBub3Qgb24gWyBPSyBdXFxcIlxcbitcXHRmaVxcbit9XFxuK1xcbitkb19ncm9fZmVhdHVyZV9jaGVja3MoKVxcbit7XFxuK1xcdGVjaG8gXFxcIklORk86IENoZWNraW5nIHRoYXQgZW5zbGF2ZW1lbnQgZGlzYWJsZWQgR1JPLlxcXCJcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX2R1dFxcXCIgZF9hIGdlbmVyaWMtcmVjZWl2ZS1vZmZsb2FkIG9mZlxcbitcXHRjaGVja19mZWF0dXJlIFxcXCIkbnNfZHV0XFxcIiBkX2IgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfaWwgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkdSTyBub3QgZGlzYWJsZWQgb24gZW5zbGF2ZWQgZGV2aWNlcy5cXFwiXFxuK1xcbitcXHRlY2hvIFxcXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEhXLUdSTy5cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfYSByeC1ncm8taHcgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfYiByeC1ncm8taHcgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGRfaWwgcngtZ3JvLWh3IG9mZlxcbitcXHRzdG9wX2lmX2Vycm9yIFxcXCJIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXFxcIlxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogQ2hlY2tpbmcgdGhhdCB0aGUgSFNSIG1hc3RlciBkb2VzIG5vdCBhZHZlcnRpc2UgR1NPL1RTTy5cXFwiXFxuK1xcdGNoZWNrX2ZlYXR1cmUgXFxcIiRuc19kdXRcXFwiIGhzcjAgZ2VuZXJpYy1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX2R1dFxcXCIgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXFxuK1xcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFxcXCIkbnNfZHV0XFxcIiBoc3IwIHR4LXRjcDYtc2VnbWVudGF0aW9uXFxuK1xcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFxcXCIkbnNfZHV0XFxcIiBoc3IwIHR4LXVkcC1zZWdtZW50YXRpb25cXG4rXFx0Y2hlY2tfZmVhdHVyZV9ub3Rfb24gXFxcIiRuc19kdXRcXFwiIGhzcjAgdHgtZ3NvLWxpc3RcXG4rXFx0c3RvcF9pZl9lcnJvciBcXFwiSFNSIG1hc3RlciBzdGlsbCBhZHZlcnRpc2VzIEdTTy1mYW1pbHkgZmVhdHVyZXMuXFxcIlxcbit9XFxuK1xcbithbGxvY193b3JrZGlyKClcXG4re1xcbitcXHQjIEFsbG9jYXRlZCBvbmx5IGhlcmUsIGxvbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdG9wb2xvZ3kgY2xlYW51cCwgc29cXG4rXFx0IyBjbGVhbnVwKCkgYXQgc2V0dXBfdG9wbygpIHRpbWUgY2FuIG5ldmVyIHJlbW92ZSBpdC4gbWt0ZW1wIGZhaWx1cmVcXG4rXFx0IyBpcyBhIGhhcmQgdGVzdCBmYWlsdXJlLlxcbitcXHR3b3JrZGlyPSQobWt0ZW1wIC1kIC90bXAvaHNyX2dyb190ZXN0LlhYWFhYWCkgfHwge1xcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBta3RlbXAgLWQgZmFpbGVkXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGV4aXQgMVxcbitcXHR9XFxuK1xcdGNobW9kIDcwMCBcXFwiJHt3b3JrZGlyfVxcXCJcXG4rXFx0cGlkZmlsZT1cXFwiJHt3b3JrZGlyfS9pcGVyZi5waWRcXFwiXFxuK1xcdHJjZmlsZT1cXFwiJHt3b3JrZGlyfS9pcGVyZi5yY1xcXCJcXG4rfVxcbitcXG4rIyBOdW1lcmljLCBhbGl2ZSwgY29tbSA9PSBpcGVyZjMsIGFuZCByZWFsbHkgb3duZWQgYnkgdGhlIHBlZXIgbmV0bnMuXFxuK3ZhbGlkX3NlcnZlcl9waWQoKVxcbit7XFxuK1xcdGxvY2FsIHA9XFxcIiQxXFxcIlxcbitcXG4rXFx0W1sgXFxcIiRwXFxcIiA9fiBeWzAtOV0rJCBdXSB8fCByZXR1cm4gMVxcbitcXHRraWxsIC0wIFxcXCIkcFxcXCIgMlxcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIDFcXG4rXFx0WyBcXFwiJChjYXQgL3Byb2MvXFxcIiRwXFxcIi9jb21tIDJcXHUwMDNlL2Rldi9udWxsKVxcXCIgPSBcXFwiaXBlcmYzXFxcIiBdIHx8IHJldHVybiAxXFxuK1xcdGlwIG5ldG5zIHBpZHMgXFxcIiRuc19wZWVyXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXF4IFxcXCIkcFxcXCJcXG4rfVxcbitcXG4rc3RhcnRfaXBlcmZfc2VydmVyKClcXG4re1xcbitcXHRsb2NhbCBjYW5kaWRhdGVfcGlkXFxuK1xcbitcXHQjIE9uZS1zaG90IHNlcnZlciwgbm8gLUQ6IHRoZSB3cmFwcGVyIHJlY29yZHMgaXRzIGV4YWN0IFBJRCBhbmQgaXRzXFxuK1xcdCMgcmVhbCBleGl0IHN0YXR1cyAobmV0bnMgc2hhcmVzIHRoZSBQSUQgbmFtZXNwYWNlIGFuZCB0aGUgaG9zdCBmcykuXFxuK1xcdGFsbG9jX3dvcmtkaXJcXG4rXFx0KCBuc3ggXFxcIiRuc19wZWVyXFxcIiBcXFwiaXBlcmYzIC1zIC0xIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNiBcXFxcXFxuK1xcdFxcdGVjaG8gXFxcXCQhIFxcdTAwM2UgJHtwaWRmaWxlfTsgXFxcXFxcbitcXHRcXHR3YWl0IFxcXFwkITsgXFxcXFxcbitcXHRcXHRlY2hvIFxcXFwkPyBcXHUwMDNlICR7cmNmaWxlfVxcXCIgKSBcXHUwMDI2XFxuK1xcdHNlcnZlcl93cmFwcGVyPSQhXFxuK1xcdCMgdGhlIHdyYXBwZXIgd3JpdGVzIHRoZSBwaWRmaWxlIGFzeW5jaHJvbm91c2x5OyB3YWl0IGZvciBpdCB0b1xcbitcXHQjIGFwcGVhciBpbnN0ZWFkIG9mIHJhY2luZyB0aGUgcmVhZFxcbitcXHRmb3IgXyBpbiAkKHNlcSAxIDUwKTsgZG9cXG4rXFx0XFx0WyAtcyBcXFwiJHtwaWRmaWxlfVxcXCIgXSBcXHUwMDI2XFx1MDAyNiBicmVha1xcbitcXHRcXHRzbGVlcCAwLjFcXG4rXFx0ZG9uZVxcbitcXHRpZiBbICEgLXMgXFxcIiR7cGlkZmlsZX1cXFwiIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBkaWQgbm90IHB1Ymxpc2ggYSBwaWRcXFwiIFxcXFxcXG4rXFx0XFx0XFx0XFxcIihubyBwaWRmaWxlKVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXHRjYW5kaWRhdGVfcGlkPSQoXFx1MDAzY1xcXCIke3BpZGZpbGV9XFxcIilcXG4rXFx0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFxcXCIke2NhbmRpZGF0ZV9waWR9XFxcIjsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBpcGVyZjMgc2VydmVyIHBpZCAnJHtjYW5kaWRhdGVfcGlkfSdcXFwiIFxcXFxcXG4rXFx0XFx0XFx0XFxcImZhaWxlZCB2YWxpZGF0aW9uXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK1xcdCMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvblxcbitcXHRpcGVyZl9waWQ9XFxcIiR7Y2FuZGlkYXRlX3BpZH1cXFwiXFxuK1xcdHNsZWVwIDFcXG4rXFx0cmV0dXJuIDBcXG4rfVxcbitcXG4rIyBQcmludCBcXFwiXFx1MDAzY2J5dGVzXFx1MDAzZSBcXHUwMDNjcGFja2V0c1xcdTAwM2VcXFwiIGZvciBleGFjdGx5IG9uZSBUWCByZWNvcmQgb2YgbnMvZGV2OyBhbnl0aGluZ1xcbisjIGVsc2UgKG1pc3NpbmcsIGR1cGxpY2F0ZWQsIG5vbi1udW1lcmljKSBpcyBhIGhhcmQgRkFJTC5cXG4rcmVhZF90eF9jb3VudGVycygpXFxuK3tcXG4rXFx0bG9jYWwgbnM9XFxcIiQxXFxcIiBkZXY9XFxcIiQyXFxcIlxcbitcXHRsb2NhbCBvdXQgY250XFxuK1xcbitcXHRvdXQ9JChuc3ggXFxcIiRuc1xcXCIgXFxcImlwIC1zIGxpbmsgc2hvdyAkZGV2XFxcIiB8IFxcXFxcXG4rXFx0XFx0YXdrICcvXiArVFg6L3tnZXRsaW5lOyBwcmludCAkMSwgJDJ9JylcXG4rXFx0Y250PSQoZWNobyBcXFwiJG91dFxcXCIgfCBncmVwIC1jICdeWzAtOV0qIFswLTldKiQnKVxcbitcXHRpZiBbIFxcXCIkY250XFxcIiAtbmUgMSBdOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGNhbm5vdCBwYXJzZSBUWCBjb3VudGVycyBvZiAkbnMvJGRldlxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiKHJlY29yZHM9JGNudClcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0ZWNobyBcXFwiJG91dFxcXCJcXG4rXFx0cmV0dXJuIDBcXG4rfVxcbitcXG4rZXZhbF9jb3VudGVyX2RlbHRhKClcXG4re1xcbitcXHRsb2NhbCBuYW1lPVxcXCIkMVxcXCIgYjA9XFxcIiQyXFxcIiBwMD1cXFwiJDNcXFwiIGIxPVxcXCIkNFxcXCIgcDE9XFxcIiQ1XFxcIiBvcD1cXFwiJDZcXFwiIGxpbWl0PVxcXCIkN1xcXCJcXG4rXFx0bG9jYWwgYmQgcGRcXG4rXFxuK1xcdGlmICEgW1sgXFxcIiRiMFxcXCIgPX4gXlswLTldKyQgXFx1MDAyNlxcdTAwMjYgXFxcIiRiMVxcXCIgPX4gXlswLTldKyQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbitcXHRcXHRcXFwiJHAwXFxcIiA9fiBeWzAtOV0rJCBcXHUwMDI2XFx1MDAyNiBcXFwiJHAxXFxcIiA9fiBeWzAtOV0rJCBdXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBub24tbnVtZXJpYyBjb3VudGVyIGlucHV0IGZvciAkbmFtZVxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXHRiZD0kKChiMSAtIGIwKSlcXG4rXFx0cGQ9JCgocDEgLSBwMCkpXFxuK1xcdGlmIFsgXFxcIiRiZFxcXCIgLWx0IDAgXSB8fCBbIFxcXCIkcGRcXFwiIC1sZSAwIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogY291bnRlciBkZWx0YSBpbnZhbGlkIGZvciAkbmFtZVxcXCIgXFxcXFxcbitcXHRcXHRcXHRcXFwiKGJ5dGVzPSRiZCBwa3RzPSRwZClcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuIDFcXG4rXFx0ZmlcXG4rXFx0aWYgWyBcXFwiJG9wXFxcIiA9IFxcXCJndFxcXCIgXTsgdGhlblxcbitcXHRcXHRpZiBbIFxcXCIkYmRcXFwiIC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxcbitcXHRcXHRcXHRlY2hvIFxcXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXFx1MDAzYz0gJGxpbWl0XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdHJldHVybiAxXFxuK1xcdFxcdGZpXFxuK1xcdGVsc2VcXG4rXFx0XFx0aWYgWyBcXFwiJGJkXFxcIiAtZ3QgJCgocGQgKiBsaW1pdCkpIF07IHRoZW5cXG4rXFx0XFx0XFx0ZWNobyBcXFwiRkFJTDogJG5hbWUgYnl0ZXMvcGFja2V0cyAkYmQvJHBkIFxcdTAwM2UgJGxpbWl0XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdFxcdHJldD0xXFxuK1xcdFxcdFxcdHJldHVybiAxXFxuK1xcdFxcdGZpXFxuK1xcdGZpXFxuK1xcdGVjaG8gXFxcIklORk86ICRuYW1lIGNvdW50ZXIgZGVsdGEgYnl0ZXM9JGJkIHBhY2tldHM9JHBkXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCIob3AgJG9wIGxpbWl0ICRsaW1pdCkgWyBPSyBdXFxcIlxcbitcXHRyZXR1cm4gMFxcbit9XFxuK1xcbitkb190c29fc3RyZWFtX3Rlc3QoKVxcbit7XFxuK1xcdGxvY2FsIG91dCBzZW5kZXJfcmV0ciBzZXJ2ZXJfcmNcXG4rXFx0bG9jYWwgc2FuX2IwIHNhbl9wMCBzYW5fYjEgc2FuX3AxXFxuK1xcdGxvY2FsIGFfYjAgYV9wMCBhX2IxIGFfcDEgYl9iMCBiX3AwIGJfYjEgYl9wMVxcbitcXG4rXFx0ZWNobyBcXFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cXFwiXFxuK1xcdG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcImV0aHRvb2wgLUsgczAgdHNvIG9uIGdzbyBvblxcXCJcXG4rXFx0Y2hlY2tfZmVhdHVyZSBcXFwiJG5zX3NhblxcXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXFxuK1xcdHN0b3BfaWZfZXJyb3IgXFxcIkNvdWxkIG5vdCBlbmFibGUgVFNPIG9uIHRoZSBTQU4gaW50ZXJmYWNlLlxcXCJcXG4rXFxuK1xcdGVjaG8gXFxcIklORk86IFJ1bm5pbmcgMTBzIFRDUCBzdHJlYW0gU0FOIC1cXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cXFwiXFxuK1xcdHN0YXJ0X2lwZXJmX3NlcnZlciB8fCByZXR1cm5cXG4rXFxuK1xcdCMgQ291bnRlciBzbmFwc2hvdHMgYXJvdW5kIHRoZSBzdHJlYW0gd2luZG93LiBUaGUgU0FOLXNpZGUgYXZlcmFnZVxcbitcXHQjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0c1xcbitcXHQjIHJlYWxseSBsZWZ0IHRoZSBTQU4pOyBlYWNoIERVVCBMQU4gbGVnIG11c3Qgc3RheSB1bmRlciBMQU5fQVZHX01BWFxcbitcXHQjIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBidWxrIG91dHB1dCB3YXMgc2VnbWVudGVkIHBlci1mcmFtZSkuIFRoZXNlXFxuK1xcdCMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuXFxuK1xcdHNhbl9iMD0wOyBzYW5fcDA9MDsgYV9iMD0wOyBhX3AwPTA7IGJfYjA9MDsgYl9wMD0wXFxuK1xcdHJlYWQgLXIgc2FuX2IwIHNhbl9wMCBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19zYW5cXFwiIHMwKVxcbitFT0ZcXG4rXFx0cmVhZCAtciBhX2IwIGFfcDAgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfZHV0XFxcIiBkX2EpXFxuK0VPRlxcbitcXHRyZWFkIC1yIGJfYjAgYl9wMCBcXHUwMDNjXFx1MDAzY0VPRlxcbiskKHJlYWRfdHhfY291bnRlcnMgXFxcIiRuc19kdXRcXFwiIGRfYilcXG4rRU9GXFxuK1xcdGlmICEgdmFsaWRfZGVjaW1hbHMgXFxcIiRzYW5fYjBcXFwiIFxcXCIkc2FuX3AwXFxcIiBcXFwiJGFfYjBcXFwiIFxcXCIkYV9wMFxcXCIgXFxcXFxcbitcXHRcXHRcXFwiJGJfYjBcXFwiIFxcXCIkYl9wMFxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogYmFzZWxpbmUgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVybiAxXFxuK1xcdGZpXFxuK1xcbitcXHQjIHJhdGUtY2FwcGVkOiB0aGUgUFJJTUFSWSBkaXNjcmltaW5hdG9yIGlzIHRoZSBjb3VudGVyIGluZXF1YWxpdHlcXG4rXFx0IyBhYm92ZSwgbm90IG1heCB0aHJvdWdocHV0OyByZXRyYW5zbWl0cyBhcmUgaW5mb3JtYXRpb25hbCBvbmx5LlxcbitcXHQjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhXFxuK1xcdCMgZnVuY3Rpb25hbCBwcm9ibGVtLlxcbitcXHRpZiAhIG91dD0kKG5zeCBcXFwiJG5zX3NhblxcXCIgXFxcInRpbWVvdXQgNjAgaXBlcmYzIC1jICRwZWVyX2lwIC1NIDE0NDYgXFxcXFxcbitcXHRcXHQtYiAyRyAtdCAxMFxcXCIgMlxcdTAwM2VcXHUwMDI2MSk7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIGNsaWVudCBmYWlsZWQ6XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGVjaG8gXFxcIiRvdXRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcbitcXHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfc2FuXFxcIiBzMClcXG4rRU9GXFxuK1xcdHJlYWQgLXIgYV9iMSBhX3AxIFxcdTAwM2NcXHUwMDNjRU9GXFxuKyQocmVhZF90eF9jb3VudGVycyBcXFwiJG5zX2R1dFxcXCIgZF9hKVxcbitFT0ZcXG4rXFx0cmVhZCAtciBiX2IxIGJfcDEgXFx1MDAzY1xcdTAwM2NFT0ZcXG4rJChyZWFkX3R4X2NvdW50ZXJzIFxcXCIkbnNfZHV0XFxcIiBkX2IpXFxuK0VPRlxcbitcXHRpZiAhIHZhbGlkX2RlY2ltYWxzIFxcXCIkc2FuX2IxXFxcIiBcXFwiJHNhbl9wMVxcXCIgXFxcIiRhX2IxXFxcIiBcXFwiJGFfcDFcXFwiIFxcXFxcXG4rXFx0XFx0XFxcIiRiX2IxXFxcIiBcXFwiJGJfcDFcXFwiOyB0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IGZpbmFsIFRYIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFxcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm4gMVxcbitcXHRmaVxcbitcXG4rXFx0ZXZhbF9jb3VudGVyX2RlbHRhIFxcXCJTQU4gczAgVFhcXFwiIFxcXCIkc2FuX2IwXFxcIiBcXFwiJHNhbl9wMFxcXCIgXFxcIiRzYW5fYjFcXFwiIFxcXCIkc2FuX3AxXFxcIiBcXFxcXFxuK1xcdFxcdGd0IFxcXCIkU0FOX0FWR19NSU5cXFwiXFxuK1xcdGV2YWxfY291bnRlcl9kZWx0YSBcXFwiRFVUIGRfYSBUWFxcXCIgXFxcIiRhX2IwXFxcIiBcXFwiJGFfcDBcXFwiIFxcXCIkYV9iMVxcXCIgXFxcIiRhX3AxXFxcIiBcXFxcXFxuK1xcdFxcdGxlIFxcXCIkTEFOX0FWR19NQVhcXFwiXFxuK1xcdGV2YWxfY291bnRlcl9kZWx0YSBcXFwiRFVUIGRfYiBUWFxcXCIgXFxcIiRiX2IwXFxcIiBcXFwiJGJfcDBcXFwiIFxcXCIkYl9iMVxcXCIgXFxcIiRiX3AxXFxcIiBcXFxcXFxuK1xcdFxcdGxlIFxcXCIkTEFOX0FWR19NQVhcXFwiXFxuK1xcdFsgXFxcIiR7cmV0Oi0wfVxcXCIgLWVxIDAgXSB8fCByZXR1cm5cXG4rXFxuK1xcdCMgc3VjY2VzcyBwYXRoOiB0aGUgb25lLXNob3Qgc2VydmVyIGV4aXRzIGJ5IGl0c2VsZjsgcmVhcCB0aGVcXG4rXFx0IyB3cmFwcGVyLCB0aGVuIFJFUVVJUkUgdGhlIHJjZmlsZSB3aXRoIHRoZSBzZXJ2ZXIncyByZWFsIHN0YXR1c1xcbitcXHR3YWl0IFxcXCIke3NlcnZlcl93cmFwcGVyfVxcXCJcXG4rXFx0c2VydmVyX3dyYXBwZXI9XFxcIlxcXCJcXG4rXFx0aWYgWyAhIC1zIFxcXCIke3JjZmlsZX1cXFwiIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBzdGF0dXMgZmlsZSBtaXNzaW5nICgke3JjZmlsZX0pXFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdHJldD0xXFxuK1xcdFxcdHJldHVyblxcbitcXHRmaVxcbitcXHRzZXJ2ZXJfcmM9JChjYXQgXFxcIiR7cmNmaWxlfVxcXCIpXFxuK1xcdGlmICEgW1sgXFxcIiRzZXJ2ZXJfcmNcXFwiID1+IF5bMC05XSskIF1dIHx8IFsgXFxcIiRzZXJ2ZXJfcmNcXFwiIC1uZSAwIF07IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogaXBlcmYzIHNlcnZlciBleGl0ZWQgd2l0aCByYz0nJHtzZXJ2ZXJfcmN9J1xcXCIgMVxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRyZXQ9MVxcbitcXHRcXHRyZXR1cm5cXG4rXFx0ZmlcXG4rXFx0aXBlcmZfcGlkPVxcXCJcXFwiXFxuK1xcbitcXHQjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUXFxuK1xcdCMgYW55IHBhcnNlIGFub21hbHkgaXMgYSBsb3VkIEZBSUwsIGJ1dCB0aGUgdmFsdWUgaXRzZWxmIG5vIGxvbmdlclxcbitcXHQjIGdhdGVzICh0aGUgY291bnRlciBpbmVxdWFsaXRpZXMgYWJvdmUgYXJlIHRoZSBwcmltYXJ5IGV2aWRlbmNlKS5cXG4rXFx0c2VuZGVyX3JldHI9JChlY2hvIFxcXCIkb3V0XFxcIiB8IGF3ayAnL3NlYyAuKiBzZW5kZXIkLyB7cHJpbnQgJChORi0xKX0nKVxcbitcXHRpZiBbIFxcXCIkKGVjaG8gXFxcIiRzZW5kZXJfcmV0clxcXCIgfCBncmVwIC1FYyAnXlswLTldKyQnKVxcXCIgLW5lIDEgXTsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJGQUlMOiBjYW5ub3QgcGFyc2Ugc2VuZGVyIHJldHJhbnNtaXRzIHJlbGlhYmx5XFxcIiAxXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGVjaG8gXFxcIiRvdXRcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0cmV0PTFcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcdGVjaG8gXFxcIklORk86IFRDUCBzdHJlYW0gZG9uZTtcXFwiIFxcXFxcXG4rXFx0XFx0XFxcInNlbmRlciByZXRyYW5zbWl0cz0kc2VuZGVyX3JldHIgKHNlY29uZGFyeSBzaWduYWwpXFxcIlxcbitcXHRlY2hvIFxcXCIkb3V0XFxcIiB8IGdyZXAgLUUgXFxcInNlbmRlcnxyZWNlaXZlclxcXCJcXG4rfVxcbitcXG4rY2hlY2tfcHJlcmVxdWlzaXRlc1xcbitjaGVja190b29sIGV0aHRvb2xcXG4rY2hlY2tfdG9vbCBpcGVyZjNcXG4rY2hlY2tfdG9vbCB0aW1lb3V0XFxuK1xcbisjIGlwcm91dGUyIG11c3Qga25vdyB0aGUgSFNSIGludGVybGluayBzeW50YXguXFxuK2lmICEgaXAgbGluayBoZWxwIGhzciAyXFx1MDAzZVxcdTAwMjYxIHwgZ3JlcCAtcWkgaW50ZXJsaW5rOyB0aGVuXFxuK1xcdGVjaG8gXFxcIlNLSVA6IGlwcm91dGUyIGhhcyBubyBIU1IgaW50ZXJsaW5rIHN1cHBvcnRcXFwiXFxuK1xcdGV4aXQgJGtzZnRfc2tpcFxcbitmaVxcbitcXG4rc2V0dXBfdG9wb1xcbitcXG4rZWNobyBcXFwiSU5GTzogSW5pdGlhbCB2YWxpZGF0aW9uIHBpbmcgKFNBTiAtXFx1MDAzZSBwZWVyIHRocm91Z2ggdGhlIERVVCkuXFxcIlxcbitkb19waW5nIFxcXCIkbnNfc2FuXFxcIiBcXFwiJHBlZXJfaXBcXFwiXFxuK3N0b3BfaWZfZXJyb3IgXFxcIkluaXRpYWwgdmFsaWRhdGlvbiBmYWlsZWQuXFxcIlxcbitcXG4rZG9fZ3JvX2ZlYXR1cmVfY2hlY2tzXFxuK2RvX3Rzb19zdHJlYW1fdGVzdFxcbitzdG9wX2lmX2Vycm9yIFxcXCJHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC5cXFwiXFxuK1xcbitlY2hvIFxcXCJJTkZPOiBBbGwgZ29vZC5cXFwiXFxuK2NsZWFudXBcXG4rZXhpdCAkcmV0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjMwLjA1MzU1NDUzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI5Mjg4MjU5MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhTUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiLFxuICAgIFwiZGV2X2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJuZXRpZl9kaXNhYmxlX2dyb1wiLFxuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCB0byBkaXNhYmxlIEdSTyBvbiBuZXQgZGV2aWNlcywgYW5kIG1vZGlmaWVzIHRoZSBIU1IgZHJpdmVyIHRvIHVuZm9sZCBHU08gc3VwZXItcGFja2V0cyBpbiBgaHNyX2ZvcndhcmRfc2tiYC4gSXQgYWxzbyBkaXNhYmxlcyBHUk8gb24gSFNSIHNsYXZlIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBuZXR3b3JraW5nIGFuZCB0aGUgSFNSIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGJ5IHNlbmRpbmcgdHJhZmZpYyB0aHJvdWdoIGFuIEhTUiBpbnRlcmZhY2UsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGNmNzU1YTlkOTJiMzkwODE3OTYwZTczZmU4MjczNmQwZjQwYWQ3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTU6NDY6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NC4uZWJhMmMyNmE0OWJhOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0zNDM0LDYgKzM0MzQsOCBAQCB2b2lkIGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX2Nsb3NlX21hbnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgYm9vbCB1bmxpbmspO1xuIHZvaWQgbmV0aWZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rdm9pZCBuZXRpZl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbit2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2xvb3BiYWNrX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpuZXdza2IpO1xuIHUxNiBkZXZfcGlja190eF96ZXJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKnNiX2Rldik7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNTkzM2M1ZGFiMDllZS4uYTZjZjJhZGM4NjI1NiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTE4NDAsNiArMTg0MCwyNCBAQCB2b2lkIG5ldGlmX2Rpc2FibGVfbHJvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHR9XG4gfVxuIFxuK3ZvaWQgbmV0aWZfZGlzYWJsZV9ncm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJfZGV2O1xuK1x0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbitcbitcdGRldi1cdTAwM2V3YW50ZWRfZmVhdHVyZXMgXHUwMDI2PSB+KE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpO1xuK1x0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuK1xuK1x0aWYgKHVubGlrZWx5KGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgKE5FVElGX0ZfR1JPIHwgTkVUSUZfRl9HUk9fSFcpKSlcbitcdFx0bmV0ZGV2X1dBUk4oZGV2LCBcImZhaWxlZCB0byBkaXNhYmxlIEdSTyFcXG5cIik7XG4rXG4rXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7XG4rXHRcdG5ldGRldl9sb2NrX29wcyhsb3dlcl9kZXYpO1xuK1x0XHRuZXRpZl9kaXNhYmxlX2dybyhsb3dlcl9kZXYpO1xuK1x0XHRuZXRkZXZfdW5sb2NrX29wcyhsb3dlcl9kZXYpO1xuK1x0fVxuK31cbitcbiAvKipcbiAgKlx0ZGV2X2Rpc2FibGVfZ3JvX2h3IC0gZGlzYWJsZSBIVyBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuICAqXHRAZGV2OiBkZXZpY2VcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYXBpLmMgYi9uZXQvY29yZS9kZXZfYXBpLmNcbmluZGV4IDQzNzk0N2RkMDhlZDUuLjAyZmIyMTYyOTUxMjggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXZfYXBpLmNcbisrKyBiL25ldC9jb3JlL2Rldl9hcGkuY1xuQEAgLTI2OSw2ICsyNjksMjIgQEAgdm9pZCBkZXZfZGlzYWJsZV9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pO1xuIFxuKy8qKlxuKyAqIGRldl9kaXNhYmxlX2dybygpIC0gZGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCBvbiBhIGRldmljZVxuKyAqIEBkZXY6IGRldmljZVxuKyAqXG4rICogRGlzYWJsZSBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCAoR1JPKSBvbiBhIG5ldCBkZXZpY2UuICBNdXN0IGJlXG4rICogY2FsbGVkIHVuZGVyIFJUTkwuICBUaGlzIGlzIG5lZWRlZCBpZiByZWNlaXZlZCBwYWNrZXRzIG1heSBiZVxuKyAqIGZvcndhcmRlZCB0byBhbm90aGVyIGludGVyZmFjZS5cbisgKi9cbit2b2lkIGRldl9kaXNhYmxlX2dybyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuK1x0bmV0aWZfZGlzYWJsZV9ncm8oZGV2KTtcbitcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4rfVxuK0VYUE9SVF9TWU1CT0woZGV2X2Rpc2FibGVfZ3JvKTtcbitcbiAvKipcbiAgKiBkZXZfc2V0X3Byb21pc2N1aXR5KCkgLSB1cGRhdGUgcHJvbWlzY3VpdHkgY291bnQgb24gYSBkZXZpY2VcbiAgKiBAZGV2OiBkZXZpY2VcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9kZXZpY2UuYyBiL25ldC9oc3IvaHNyX2RldmljZS5jXG5pbmRleCA1NTU1YjcxYWIxOWI1Li4yNDhjYmIxNDJlMjFlIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZGV2aWNlLmNcbisrKyBiL25ldC9oc3IvaHNyX2RldmljZS5jXG5AQCAtMjMyLDkgKzIzMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdFx0c2tiLVx1MDAzZWRldiA9IG1hc3Rlci1cdTAwM2VkZXY7XG4gXHRcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4gXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG5AQCAtMzM1LDYgKzMzMyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc2VxdWVuY2VfbnIpO1xuIFx0XHRoc3ItXHUwMDNlc2VxdWVuY2VfbnIrKztcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSB0eXBlO1xuIFx0LyogSFNSdjAgaGFzIDYgdW51c2VkIGJ5dGVzIGFmdGVyIHRoZSBNQUMgKi9cbkBAIC0zNTYsMTQgKzM1NSwxMCBAQCBzdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4gXHRcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBoc3ItXHUwMDNlbWFjYWRkcmVzc19yZWRib3gpO1xuIFx0fVxuIFxuLVx0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuK1x0aWYgKHNrYl9wdXRfcGFkdG8oc2tiLCBFVEhfWkxFTikpXG4gXHRcdHJldHVybjtcbi1cdH1cbiBcbiBcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLVx0cmV0dXJuO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcbkBAIC0zOTAsNiArMzg1LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0aHNyX3N0YWctXHUwMDNlc2VxdWVuY2VfbnIgPSBodG9ucyhoc3ItXHUwMDNlc3VwX3NlcXVlbmNlX25yKTtcbiBcdGhzci1cdTAwM2VzdXBfc2VxdWVuY2VfbnIrKztcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdGhzcl9zdGFnLVx1MDAzZXRsdi5IU1JfVExWX3R5cGUgPSBQUlBfVExWX0xJRkVfQ0hFQ0tfREQ7XG4gXHRoc3Jfc3RhZy1cdTAwM2V0bHYuSFNSX1RMVl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhzcl9zdXBfcGF5bG9hZCk7XG4gXG5AQCAtMzk3LDEzICszOTMsMTAgQEAgc3RhdGljIHZvaWQgc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUoc3RydWN0IGhzcl9wb3J0ICptYXN0ZXIsXG4gXHRoc3Jfc3AgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBoc3Jfc3VwX3BheWxvYWQpKTtcbiBcdGV0aGVyX2FkZHJfY29weShoc3Jfc3AtXHUwMDNlbWFjYWRkcmVzc19BLCBtYXN0ZXItXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiBcbi1cdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKSB7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbitcdGlmIChza2JfcHV0X3BhZHRvKHNrYiwgRVRIX1pMRU4pKVxuIFx0XHRyZXR1cm47XG4tXHR9XG4gXG4gXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIH1cbiBcbiAvKiBBbm5vdW5jZSAoc3VwZXJ2aXNpb24gZnJhbWUpIHRpbWVyIGZ1bmN0aW9uXG5AQCAtNjU5LDcgKzY1Miw3IEBAIHZvaWQgaHNyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbiBcbiBcdGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHxcbi1cdFx0XHQgICBORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9IV19DU1VNIHxcbitcdFx0XHQgICBORVRJRl9GX0hXX0NTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHxcbiBcdFx0XHQgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG5pbmRleCAwNzc0OTgxYTY1YzE2Li4zZmNkYmFjNDljNTlkIDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jXG4rKysgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbkBAIC0xMiw2ICsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2dzby5oXHUwMDNlXG4gI2luY2x1ZGUgXCJoc3JfbWFpbi5oXCJcbiAjaW5jbHVkZSBcImhzcl9mcmFtZXJlZy5oXCJcbiBcbkBAIC02MjEsOSArNjIyLDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdGRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxuIFx0ICAgIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4gXHRcdC8qIFNlcXVlbmNlIG5yIGZvciB0aGUgbWFzdGVyL2ludGVybGluayBub2RlICovXG4tXHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuIFx0XHRmcmFtZS1cdTAwM2VzZXF1ZW5jZV9uciA9IGhzci1cdTAwM2VzZXF1ZW5jZV9ucjtcbiBcdFx0aHNyLVx1MDAzZXNlcXVlbmNlX25yKys7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtNzMxLDcgKzczMyw3IEBAIHN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4gfVxuIFxuIC8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXG4tdm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuK3N0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX3NrYl9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuIHtcbiBcdHN0cnVjdCBoc3JfZnJhbWVfaW5mbyBmcmFtZTtcbiBcbkBAIC03NjAsMyArNzYyLDUwIEBAIHZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbiBcdHBvcnQtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbiBcdGtmcmVlX3NrYihza2IpO1xuIH1cbitcbisvKiBHU08gZmFuLW91dCBmdW5uZWw6IHVuZm9sZCBzdXBlci1wYWNrZXRzIGJlZm9yZSBwZXItZnJhbWUgcHJvY2Vzc2luZyBzb1xuKyAqIGVhY2ggd2lyZSBmcmFtZSBnZXRzIGl0cyBvd24gSFNSL1BSUCB0YWcgYW5kIHNlcXVlbmNlIG51bWJlci5cbisgKi9cbit2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXG4re1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuZXh0O1xuK1xuK1x0aWYgKGxpa2VseSghc2tiX2lzX2dzbyhza2IpKSkge1xuK1x0XHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIFVuZm9sZCBvbmx5IHBsYWluLUV0aGVybmV0IEdTTyBzdXBlci1wYWNrZXRzOiBsb2NhbGx5IGdlbmVyYXRlZFxuK1x0ICogb24gdGhlIG1hc3Rlciwgb3IgYXJyaXZpbmcgdW50YWdnZWQgZnJvbSB0aGUgU0FOIHNpZGUgb24gdGhlXG4rXHQgKiBpbnRlcmxpbmsuIEEgc3VwZXItcGFja2V0IGZyb20gYSBMQU4gc2xhdmUgbWF5IGNhcnJ5IHBlci1mcmFtZVxuK1x0ICogSFNSIHRhZ3MgLyBQUlAgUkNUIHRyYWlsZXJzIHRoYXQgc29mdHdhcmUgc2VnbWVudGF0aW9uIGNhbm5vdFxuK1x0ICogcmVjb3ZlcjsgYW4gYWxyZWFkeS10YWdnZWQgSFNSL1BSUCBzdXBlci1wYWNrZXQgdmlvbGF0ZXNcbitcdCAqIHBlci1mcmFtZSB3aXJlIHNlbWFudGljcy4gRHJvcCBib3RoLlxuK1x0ICovXG4rXHRpZiAocG9ydC1cdTAwM2V0eXBlICE9IEhTUl9QVF9NQVNURVIgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHlwZSAhPSBIU1JfUFRfSU5URVJMSU5LKVxuK1x0XHRnb3RvIGRyb3BfZ3NvO1xuK1x0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9IU1IpIHx8XG4rXHQgICAgc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX1BSUCkpXG4rXHRcdGdvdG8gZHJvcF9nc287XG4rXG4rXHQvKiBmZWF0dXJlcyA9IDA6IHJlcXVlc3QgZnVsbCBzb2Z0d2FyZSBzZWdtZW50YXRpb24uIHR4X3BhdGggaXMgdHJ1ZVxuK1x0ICogb25seSBmb3IgbG9jYWxseSBnZW5lcmF0ZWQgdHJhZmZpYyBvbiB0aGUgbWFzdGVyOyBpbmdyZXNzIGZyb21cbitcdCAqIHRoZSBpbnRlcmxpbmsgZm9sbG93cyBSWCBjaGVja3N1bSBzZW1hbnRpY3MuXG4rXHQgKi9cbitcdHNlZ3MgPSBfX3NrYl9nc29fc2VnbWVudChza2IsIDAsIHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKTtcbitcdGlmIChJU19FUlIoc2VncykgfHwgdW5saWtlbHkoIXNlZ3MpKVxuK1x0XHRnb3RvIGRyb3BfZ3NvO1xuK1xuK1x0Y29uc3VtZV9za2Ioc2tiKTtcbitcdHdoaWxlIChzZWdzKSB7XG4rXHRcdG5leHQgPSBzZWdzLVx1MDAzZW5leHQ7XG4rXHRcdHNlZ3MtXHUwMDNlbmV4dCA9IE5VTEw7XG4rXHRcdGhzcl9mb3J3YXJkX3NrYl9vbmUoc2VncywgcG9ydCk7XG4rXHRcdHNlZ3MgPSBuZXh0O1xuK1x0fVxuK1x0cmV0dXJuO1xuK1xuK2Ryb3BfZ3NvOlxuK1x0cG9ydC1cdTAwM2VkZXYtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xuK1x0a2ZyZWVfc2tiKHNrYik7XG4rfVxuZGlmZiAtLWdpdCBhL25ldC9oc3IvaHNyX3NsYXZlLmMgYi9uZXQvaHNyL2hzcl9zbGF2ZS5jXG5pbmRleCAwMWM3M2I0YjUwZGRkLi4wY2E1NWQ5MzIzYzU3IDEwMDY0NFxuLS0tIGEvbmV0L2hzci9oc3Jfc2xhdmUuY1xuKysrIGIvbmV0L2hzci9oc3Jfc2xhdmUuY1xuQEAgLTczLDE2ICs3Myw3IEBAIHN0YXRpYyByeF9oYW5kbGVyX3Jlc3VsdF90IGhzcl9oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0fVxuIFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbiBcbi1cdC8qIE9ubHkgdGhlIGZyYW1lcyByZWNlaXZlZCBvdmVyIHRoZSBpbnRlcmxpbmsgcG9ydCB3aWxsIGFzc2lnbiBhXG4tXHQgKiBzZXF1ZW5jZSBudW1iZXIgYW5kIHJlcXVpcmUgc3luY2hyb25pc2F0aW9uIHZzIG90aGVyIHNlbmRlci5cbi1cdCAqL1xuLVx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LKSB7XG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tXHR9IGVsc2Uge1xuLVx0XHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcbi1cdH1cbitcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xuIFxuIGZpbmlzaF9jb25zdW1lOlxuIFx0cmV0dXJuIFJYX0hBTkRMRVJfQ09OU1VNRUQ7XG5AQCAtMTcwLDYgKzE2MSw3IEBAIHN0YXRpYyBpbnQgaHNyX3BvcnRkZXZfc2V0dXAoc3RydWN0IGhzcl9wcml2ICpoc3IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAocmVzKVxuIFx0XHRnb3RvIGZhaWxfcnhfaGFuZGxlcjtcbiBcdGRldl9kaXNhYmxlX2xybyhkZXYpO1xuK1x0ZGV2X2Rpc2FibGVfZ3JvKGRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuaW5kZXggMzFmYjkzMjZjZjUzMy4uMGQxMDU0NzZlN2M1MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbkBAIC0zLDYgKzMsNyBAQFxuIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFxuIFRFU1RfUFJPR1MgOj0gXFxcbitcdGhzcl9ncm9fc3VwZXJwYWNrZXQuc2ggXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI4OGRlM2E2MGI4OTlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX2dyb19zdXBlcnBhY2tldC5zaFxuQEAgLTAsMCArMSw0NjIgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBUZXN0IEhTUiBoYW5kbGluZyBvZiBHUk8vR1NPIHN1cGVyLXBhY2tldHM6XG4rI1xuKyMgIDEuIEVuc2xhdmluZyBhIGRldmljZSB0byBhbiBIU1IgbWFzdGVyIGRpc2FibGVzIEdSTyBvbiBpdFxuKyMgICAgIChkZXZfZGlzYWJsZV9ncm8oKSkuXG4rIyAgMi4gVGhlIEhTUiBtYXN0ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIEdTTy9UU08gZmVhdHVyZXMuXG4rIyAgMy4gQSBUQ1Agc3RyZWFtIGZyb20gYSBUU08tZW5hYmxlZCBTQU4gKHdoaWNoIHRoZXJlZm9yZSBlbWl0cyBHU09cbisjICAgICBzdXBlci1wYWNrZXRzKSBpcyB1bmZvbGRlZCBhdCB0aGUgSFNSIGZvcndhcmQgZW50cnkuIEV2aWRlbmNlOlxuKyMgICAgIGludGVyZmFjZS1jb3VudGVyIGRlbHRhcyBzaG93IHN1cGVyLXBhY2tldC1zaXplZCBmcmFtZXMgbGVhdmluZ1xuKyMgICAgIHRoZSBTQU4gYW5kIHBlci1mcmFtZS1zaXplZCB0cmFmZmljIGxlYXZpbmcgdGhlIERVVCdzIExBTiBwb3J0cy5cbisjXG4rIyBUb3BvbG9neSAoMTAwLjY0LjAuMC8yNCk6XG4rI1xuKyMgICBuc19zYW4gICAgICAgICAgICAgICAgICAgIG5zX2R1dCAgICAgICAgICAgICAgICAgICAgICBuc19wZWVyXG4rIyAgKy0tLS0tLS0tLS0tKyAgaW50ZXJsaW5rICArLS0tLS0tLS0tLS0tLS0tKyAgTEFOIEEvQiAgKy0tLS0tLS0tLS0tK1xuKyMgIHwgczAgWzAuMV0gIHwtLS0tLS0tLS0tLS0tfCBkX2lsICAgaHNyMCAgIHwtLS0tLS0tLS0tLXwgaHNyMSBbMC4zXXxcbisjICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgIHwgZF9hIC8gZF9iICAgICB8ICAgICAgICAgICB8IHBfYSAvIHBfYiB8XG4rIyAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuKyNcbisjIFNBTiB0cmFmZmljIHJlYWNoZXMgbnNfcGVlciBvbmx5IHRocm91Z2ggaHNyMCdzIGZvcndhcmQgcGF0aFxuKyMgKGludGVybGluayBSWCAtXHUwMDNlIExBTiBBL0IgVFgpLCBzbyBldmVyeSBTQU4gZnJhbWUgaXMgdGFnZ2VkIGFuZFxuKyMgZm9yd2FyZGVkIGJ5IHRoZSBEVVQuXG4rXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxuK1xuK3Nhbl9pcD1cIjEwMC42NC4wLjFcIlxuK3BlZXJfaXA9XCIxMDAuNjQuMC4zXCJcbitcbisjIEFnZ3JlZ2F0ZSBjb3VudGVyIHRocmVzaG9sZHMgZm9yIHRoZSBzdHJlYW0gdGVzdCAoYnl0ZXMvcGFja2V0cyk6XG4rIyBTQU5fQVZHX01JTiBwcm92ZXMgR1NPIHN1cGVyLXBhY2tldHMgbGVmdCB0aGUgU0FOOyBMQU5fQVZHX01BWCBpcyBhXG4rIyBndWFyZCB3aXRoIG1hcmdpbiwgbm90IHRoZSBwcm90b2NvbCBtYXhpbXVtIChzZWUgZG9fdHNvX3N0cmVhbV90ZXN0KS5cbitTQU5fQVZHX01JTj0yMDQ4XG4rTEFOX0FWR19NQVg9MTUxNFxuK1xuK2lwZXJmX3BpZD1cIlwiXG4rc2VydmVyX3dyYXBwZXI9XCJcIlxuK3dvcmtkaXI9XCJcIlxuK3BpZGZpbGU9XCJcIlxuK3JjZmlsZT1cIlwiXG4rXG4rY2xlYW51cCgpXG4re1xuK1x0IyBleGFjdC1QSUQga2lsbCBvbmx5IGFmdGVyIFJFLXZhbGlkYXRpbmcgaWRlbnRpdHkgKGd1YXJkcyBhZ2FpbnN0XG4rXHQjIFBJRCByZXVzZSBiZXR3ZWVuIHB1YmxpY2F0aW9uIGFuZCBjbGVhbnVwKVxuK1x0aWYgWyAtbiBcIiR7aXBlcmZfcGlkfVwiIF0gXHUwMDI2XHUwMDI2IHZhbGlkX3NlcnZlcl9waWQgXCIke2lwZXJmX3BpZH1cIjsgdGhlblxuK1x0XHRraWxsIFwiJHtpcGVyZl9waWR9XCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0ZmlcbitcdGlwZXJmX3BpZD1cIlwiXG4rXHRpZiBbIC1uIFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIiBdOyB0aGVuXG4rXHRcdCMgdGhlIHdyYXBwZXIgd2FpdHMgb24gdGhlIHNlcnZlcjsgcmVhcCBpdCB3aXRoIGEgNXMgYm91bmQgc28gYVxuK1x0XHQjIGxpdmUtYnV0LXVucHVibGlzaGVkIHNlcnZlciBjYW4gbmV2ZXIgaGFuZyBjbGVhbnVwXG4rXHRcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRcdGtpbGwgLTAgXCIke3NlcnZlcl93cmFwcGVyfVwiIDJcdTAwM2UvZGV2L251bGwgfHwgYnJlYWtcbitcdFx0XHRzbGVlcCAwLjFcbitcdFx0ZG9uZVxuK1x0XHRraWxsIFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIiAyXHUwMDNlL2Rldi9udWxsXG4rXHRcdHdhaXQgXCIke3NlcnZlcl93cmFwcGVyfVwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0c2VydmVyX3dyYXBwZXI9XCJcIlxuK1x0ZmlcbitcdCMgbGFzdCByZXNvcnQsIG5hbWVzcGFjZS1zY29wZWQgb25seTogVEVSTSB0aGUgaXBlcmYzIHByb2Nlc3NlcyB0aGF0XG4rXHQjIGFjdHVhbGx5IGxpdmUgaW4gdGhlIHBlZXIgbmV0bnMsIHBvbGwgZm9yIGJvdW5kZWQgZXhpdCwgdGhlblxuK1x0IyBTSUdLSUxMIGFueSBzdXJ2aXZvciBiZWZvcmUgdG91Y2hpbmcgdGhlIG5hbWVzcGFjZSBuYW1lLiBBIGJsaW5kXG4rXHQjIHBraWxsIHdvdWxkIHNjYW4gdGhlIGhvc3QgUElEIHNwYWNlIGFuZCBoaXQgdW5yZWxhdGVkIHRlc3RzLlxuK1x0bG9jYWwgX3AgX3N0aWxsXG4rXHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwiJG5zX3BlZXJcIiAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbitcdFx0aWYgaXNfaXBlcmYzX3BpZCBcIiRfcFwiOyB0aGVuXG4rXHRcdFx0a2lsbCBcIiRfcFwiIDJcdTAwM2UvZGV2L251bGxcbitcdFx0ZmlcbitcdGRvbmVcbitcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRfc3RpbGw9MFxuK1x0XHRmb3IgX3AgaW4gJChpcCBuZXRucyBwaWRzIFwiJG5zX3BlZXJcIiAyXHUwMDNlL2Rldi9udWxsKTsgZG9cbitcdFx0XHRpZiBpc19pcGVyZjNfcGlkIFwiJF9wXCI7IHRoZW5cbitcdFx0XHRcdF9zdGlsbD0xXG4rXHRcdFx0XHRicmVha1xuK1x0XHRcdGZpXG4rXHRcdGRvbmVcbitcdFx0WyBcIiRfc3RpbGxcIiAtZXEgMCBdIFx1MDAyNlx1MDAyNiBicmVha1xuK1x0XHRzbGVlcCAwLjFcbitcdGRvbmVcbitcdGZvciBfcCBpbiAkKGlwIG5ldG5zIHBpZHMgXCIkbnNfcGVlclwiIDJcdTAwM2UvZGV2L251bGwpOyBkb1xuK1x0XHRpZiBpc19pcGVyZjNfcGlkIFwiJF9wXCI7IHRoZW5cbitcdFx0XHRraWxsIC05IFwiJF9wXCIgMlx1MDAzZS9kZXYvbnVsbFxuK1x0XHRmaVxuK1x0ZG9uZVxuK1x0IyByZW1vdmUgb25seSB0aGUga25vd24gbm9uLWVtcHR5IHByaXZhdGUgZGlyZWN0b3J5XG4rXHRpZiBbIC1uIFwiJHt3b3JrZGlyfVwiIF0gXHUwMDI2XHUwMDI2IFsgLWQgXCIke3dvcmtkaXJ9XCIgXTsgdGhlblxuK1x0XHRybSAtcmYgXCIke3dvcmtkaXJ9XCJcbitcdGZpXG4rXHR3b3JrZGlyPVwiXCJcbitcdHBpZGZpbGU9XCJcIlxuK1x0cmNmaWxlPVwiXCJcbitcdGNsZWFudXBfYWxsX25zXG4rfVxuK1xuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rY2hlY2tfdG9vbCgpXG4re1xuK1x0aWYgISBjb21tYW5kIC12IFwiJDFcIiBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxOyB0aGVuXG4rXHRcdGVjaG8gXCJTS0lQOiBDb3VsZCBub3QgcnVuIHRlc3Qgd2l0aG91dCAkMVwiXG4rXHRcdGV4aXQgJGtzZnRfc2tpcFxuK1x0Zmlcbit9XG4rXG4rbnN4KClcbit7XG4rXHRpcCBuZXRucyBleGVjIFwiJDFcIiBiYXNoIC1jIFwiJDJcIlxuK31cbitcbitpc19pcGVyZjNfcGlkKClcbit7XG4rXHRbIFwiJChjYXQgL3Byb2MvXCIkMVwiL2NvbW0gMlx1MDAzZS9kZXYvbnVsbClcIiA9IFwiaXBlcmYzXCIgXVxuK31cbitcbisjIERlY2ltYWwtY291bnRlciB2YWxpZGF0aW9uIGZvciB0aGUgc25hcHNob3QgYmxvY2tzOiBldmVyeSB2YWx1ZSBtdXN0XG4rIyBiZSBhIHBsYWluIGRlY2ltYWwgbnVtYmVyLiBBIHBhcnNlIGZhaWx1cmUgaW4gcmVhZF90eF9jb3VudGVycyB5aWVsZHNcbisjIGVtcHR5L2dhcmJsZWQgZmllbGRzLCB3aGljaCB0aGlzIGNoZWNrIHR1cm5zIGludG8gYW4gaW1tZWRpYXRlIEZBSUwuXG4rdmFsaWRfZGVjaW1hbHMoKVxuK3tcbitcdGxvY2FsIHZcbitcbitcdGZvciB2IGluIFwiJEBcIjsgZG9cbitcdFx0W1sgXCIkdlwiID1+IF5bMC05XSskIF1dIHx8IHJldHVybiAxXG4rXHRkb25lXG4rXHRyZXR1cm4gMFxuK31cbitcbitzZXR1cF90b3BvKClcbit7XG4rXHRzZXR1cF9ucyBuc19kdXQgbnNfc2FuIG5zX3BlZXIgfHwgZXhpdCAkP1xuK1xuK1x0aXAgbGluayBhZGQgZF9hIG5ldG5zIFwiJG5zX2R1dFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9hIG5ldG5zIFwiJG5zX3BlZXJcIlxuK1x0aXAgbGluayBhZGQgZF9iIG5ldG5zIFwiJG5zX2R1dFwiIHR5cGUgdmV0aCBwZWVyIG5hbWUgcF9iIG5ldG5zIFwiJG5zX3BlZXJcIlxuK1x0aXAgbGluayBhZGQgZF9pbCBuZXRucyBcIiRuc19kdXRcIiB0eXBlIHZldGggcGVlciBuYW1lIHMwIG5ldG5zIFwiJG5zX3NhblwiXG4rXG4rXHQjIEhTUiB0YWdzIGFkZCA2IGJ5dGVzIHBlciBmcmFtZTsgZ2l2ZSB0aGUgTEFOIGxlZ3MgaGVhZHJvb20uXG4rXHRmb3IgaWZhY2UgaW4gZF9hIGRfYjsgZG9cbitcdFx0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBzZXQgJGlmYWNlIG10dSAxNjAwOyBcXFxuK1x0XHRcdGlwIGxpbmsgc2V0ICRpZmFjZSB1cFwiXG4rXHRkb25lXG4rXHRmb3IgaWZhY2UgaW4gcF9hIHBfYjsgZG9cbitcdFx0bnN4IFwiJG5zX3BlZXJcIiBcImlwIGxpbmsgc2V0ICRpZmFjZSBtdHUgMTYwMDsgXFxcbitcdFx0XHRpcCBsaW5rIHNldCAkaWZhY2UgdXBcIlxuK1x0ZG9uZVxuK1xuK1x0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBzZXQgZF9pbCB1cFwiXG4rXHRuc3ggXCIkbnNfc2FuXCIgXCJpcCBsaW5rIHNldCBzMCB1cDsgaXAgYWRkciBhZGQgJHNhbl9pcC8yNCBkZXYgczBcIlxuK1xuK1x0bnN4IFwiJG5zX2R1dFwiIFwiaXAgbGluayBhZGQgaHNyMCB0eXBlIGhzciBcXFxuK1x0XHRzbGF2ZTEgZF9hIHNsYXZlMiBkX2IgaW50ZXJsaW5rIGRfaWwgcHJvdG8gMDsgXFxcbitcdFx0aXAgbGluayBzZXQgaHNyMCB1cFwiXG4rXHRuc3ggXCIkbnNfcGVlclwiIFwiaXAgbGluayBhZGQgaHNyMSB0eXBlIGhzciBcXFxuK1x0XHRzbGF2ZTEgcF9hIHNsYXZlMiBwX2IgcHJvdG8gMDsgXFxcbitcdFx0aXAgbGluayBzZXQgaHNyMSB1cDsgaXAgYWRkciBhZGQgJHBlZXJfaXAvMjQgZGV2IGhzcjFcIlxuK1xuK1x0IyBMZXQgdGhlIG5vZGVzIHNlZSBlYWNoIG90aGVyJ3Mgc3VwZXJ2aXNpb24gZnJhbWVzLlxuK1x0c2xlZXAgMlxuK31cbitcbitjaGVja19mZWF0dXJlKClcbit7XG4rXHRsb2NhbCBucz1cIiQxXCJcbitcdGxvY2FsIGlmYWNlPVwiJDJcIlxuK1x0bG9jYWwgZmVhdHVyZT1cIiQzXCJcbitcdGxvY2FsIHdhbnQ9XCIkNFwiXG4rXG4rXHRpZiBuc3ggXCIkbnNcIiBcImV0aHRvb2wgLWsgJGlmYWNlXCIgfCBncmVwIC1xIFwiXiRmZWF0dXJlOiAkd2FudFwiOyB0aGVuXG4rXHRcdGVjaG8gXCJJTkZPOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzICR3YW50IFsgT0sgXVwiXG4rXHRlbHNlXG4rXHRcdGVjaG8gXCJGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG5vdCAkd2FudFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRmaVxuK31cbitcbisjIE9mZi1vci1hYnNlbnQgdmFyaWFudDogZmFpbHMgb25seSB3aGVuIHRoZSBmZWF0dXJlIGlzIHByZXNlbnQgQU5EIG9uLFxuKyMgc28gZGV2aWNlcyB0aGF0IHNpbXBseSBkbyBub3QgbGlzdCB0aGUgZmVhdHVyZSBkbyBub3QgZmFpbCBpdC5cbitjaGVja19mZWF0dXJlX25vdF9vbigpXG4re1xuK1x0bG9jYWwgbnM9XCIkMVwiXG4rXHRsb2NhbCBpZmFjZT1cIiQyXCJcbitcdGxvY2FsIGZlYXR1cmU9XCIkM1wiXG4rXG4rXHRpZiBuc3ggXCIkbnNcIiBcImV0aHRvb2wgLWsgJGlmYWNlXCIgfCBncmVwIC1xIFwiXiRmZWF0dXJlOiBvblwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiAkbnMvJGlmYWNlICRmZWF0dXJlIGlzIG9uXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdGVsc2VcbitcdFx0ZWNobyBcIklORk86ICRucy8kaWZhY2UgJGZlYXR1cmUgbm90IG9uIFsgT0sgXVwiXG4rXHRmaVxuK31cbitcbitkb19ncm9fZmVhdHVyZV9jaGVja3MoKVxuK3tcbitcdGVjaG8gXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEdSTy5cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2EgZ2VuZXJpYy1yZWNlaXZlLW9mZmxvYWQgb2ZmXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGRfYiBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgZF9pbCBnZW5lcmljLXJlY2VpdmUtb2ZmbG9hZCBvZmZcbitcdHN0b3BfaWZfZXJyb3IgXCJHUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBDaGVja2luZyB0aGF0IGVuc2xhdmVtZW50IGRpc2FibGVkIEhXLUdSTy5cIlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2EgcngtZ3JvLWh3IG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2IgcngtZ3JvLWh3IG9mZlxuK1x0Y2hlY2tfZmVhdHVyZSBcIiRuc19kdXRcIiBkX2lsIHJ4LWdyby1odyBvZmZcbitcdHN0b3BfaWZfZXJyb3IgXCJIVy1HUk8gbm90IGRpc2FibGVkIG9uIGVuc2xhdmVkIGRldmljZXMuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBDaGVja2luZyB0aGF0IHRoZSBIU1IgbWFzdGVyIGRvZXMgbm90IGFkdmVydGlzZSBHU08vVFNPLlwiXG4rXHRjaGVja19mZWF0dXJlIFwiJG5zX2R1dFwiIGhzcjAgZ2VuZXJpYy1zZWdtZW50YXRpb24tb2ZmbG9hZCBvZmZcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfZHV0XCIgaHNyMCB0Y3Atc2VnbWVudGF0aW9uLW9mZmxvYWQgb2ZmXG4rXHRjaGVja19mZWF0dXJlX25vdF9vbiBcIiRuc19kdXRcIiBoc3IwIHR4LXRjcDYtc2VnbWVudGF0aW9uXG4rXHRjaGVja19mZWF0dXJlX25vdF9vbiBcIiRuc19kdXRcIiBoc3IwIHR4LXVkcC1zZWdtZW50YXRpb25cbitcdGNoZWNrX2ZlYXR1cmVfbm90X29uIFwiJG5zX2R1dFwiIGhzcjAgdHgtZ3NvLWxpc3RcbitcdHN0b3BfaWZfZXJyb3IgXCJIU1IgbWFzdGVyIHN0aWxsIGFkdmVydGlzZXMgR1NPLWZhbWlseSBmZWF0dXJlcy5cIlxuK31cbitcbithbGxvY193b3JrZGlyKClcbit7XG4rXHQjIEFsbG9jYXRlZCBvbmx5IGhlcmUsIGxvbmcgYWZ0ZXIgdGhlIGluaXRpYWwgdG9wb2xvZ3kgY2xlYW51cCwgc29cbitcdCMgY2xlYW51cCgpIGF0IHNldHVwX3RvcG8oKSB0aW1lIGNhbiBuZXZlciByZW1vdmUgaXQuIG1rdGVtcCBmYWlsdXJlXG4rXHQjIGlzIGEgaGFyZCB0ZXN0IGZhaWx1cmUuXG4rXHR3b3JrZGlyPSQobWt0ZW1wIC1kIC90bXAvaHNyX2dyb190ZXN0LlhYWFhYWCkgfHwge1xuK1x0XHRlY2hvIFwiRkFJTDogbWt0ZW1wIC1kIGZhaWxlZFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgMVxuK1x0fVxuK1x0Y2htb2QgNzAwIFwiJHt3b3JrZGlyfVwiXG4rXHRwaWRmaWxlPVwiJHt3b3JrZGlyfS9pcGVyZi5waWRcIlxuK1x0cmNmaWxlPVwiJHt3b3JrZGlyfS9pcGVyZi5yY1wiXG4rfVxuK1xuKyMgTnVtZXJpYywgYWxpdmUsIGNvbW0gPT0gaXBlcmYzLCBhbmQgcmVhbGx5IG93bmVkIGJ5IHRoZSBwZWVyIG5ldG5zLlxuK3ZhbGlkX3NlcnZlcl9waWQoKVxuK3tcbitcdGxvY2FsIHA9XCIkMVwiXG4rXG4rXHRbWyBcIiRwXCIgPX4gXlswLTldKyQgXV0gfHwgcmV0dXJuIDFcbitcdGtpbGwgLTAgXCIkcFwiIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuIDFcbitcdFsgXCIkKGNhdCAvcHJvYy9cIiRwXCIvY29tbSAyXHUwMDNlL2Rldi9udWxsKVwiID0gXCJpcGVyZjNcIiBdIHx8IHJldHVybiAxXG4rXHRpcCBuZXRucyBwaWRzIFwiJG5zX3BlZXJcIiAyXHUwMDNlL2Rldi9udWxsIHwgZ3JlcCAtcXggXCIkcFwiXG4rfVxuK1xuK3N0YXJ0X2lwZXJmX3NlcnZlcigpXG4re1xuK1x0bG9jYWwgY2FuZGlkYXRlX3BpZFxuK1xuK1x0IyBPbmUtc2hvdCBzZXJ2ZXIsIG5vIC1EOiB0aGUgd3JhcHBlciByZWNvcmRzIGl0cyBleGFjdCBQSUQgYW5kIGl0c1xuK1x0IyByZWFsIGV4aXQgc3RhdHVzIChuZXRucyBzaGFyZXMgdGhlIFBJRCBuYW1lc3BhY2UgYW5kIHRoZSBob3N0IGZzKS5cbitcdGFsbG9jX3dvcmtkaXJcbitcdCggbnN4IFwiJG5zX3BlZXJcIiBcImlwZXJmMyAtcyAtMSBcdTAwM2UgL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNiBcXFxuK1x0XHRlY2hvIFxcJCEgXHUwMDNlICR7cGlkZmlsZX07IFxcXG4rXHRcdHdhaXQgXFwkITsgXFxcbitcdFx0ZWNobyBcXCQ/IFx1MDAzZSAke3JjZmlsZX1cIiApIFx1MDAyNlxuK1x0c2VydmVyX3dyYXBwZXI9JCFcbitcdCMgdGhlIHdyYXBwZXIgd3JpdGVzIHRoZSBwaWRmaWxlIGFzeW5jaHJvbm91c2x5OyB3YWl0IGZvciBpdCB0b1xuK1x0IyBhcHBlYXIgaW5zdGVhZCBvZiByYWNpbmcgdGhlIHJlYWRcbitcdGZvciBfIGluICQoc2VxIDEgNTApOyBkb1xuK1x0XHRbIC1zIFwiJHtwaWRmaWxlfVwiIF0gXHUwMDI2XHUwMDI2IGJyZWFrXG4rXHRcdHNsZWVwIDAuMVxuK1x0ZG9uZVxuK1x0aWYgWyAhIC1zIFwiJHtwaWRmaWxlfVwiIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGlwZXJmMyBzZXJ2ZXIgZGlkIG5vdCBwdWJsaXNoIGEgcGlkXCIgXFxcbitcdFx0XHRcIihubyBwaWRmaWxlKVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0Y2FuZGlkYXRlX3BpZD0kKFx1MDAzY1wiJHtwaWRmaWxlfVwiKVxuK1x0aWYgISB2YWxpZF9zZXJ2ZXJfcGlkIFwiJHtjYW5kaWRhdGVfcGlkfVwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiBpcGVyZjMgc2VydmVyIHBpZCAnJHtjYW5kaWRhdGVfcGlkfSdcIiBcXFxuK1x0XHRcdFwiZmFpbGVkIHZhbGlkYXRpb25cIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdCMgcHVibGlzaCBvbmx5IGFmdGVyIGZ1bGwgdmFsaWRhdGlvblxuK1x0aXBlcmZfcGlkPVwiJHtjYW5kaWRhdGVfcGlkfVwiXG4rXHRzbGVlcCAxXG4rXHRyZXR1cm4gMFxuK31cbitcbisjIFByaW50IFwiXHUwMDNjYnl0ZXNcdTAwM2UgXHUwMDNjcGFja2V0c1x1MDAzZVwiIGZvciBleGFjdGx5IG9uZSBUWCByZWNvcmQgb2YgbnMvZGV2OyBhbnl0aGluZ1xuKyMgZWxzZSAobWlzc2luZywgZHVwbGljYXRlZCwgbm9uLW51bWVyaWMpIGlzIGEgaGFyZCBGQUlMLlxuK3JlYWRfdHhfY291bnRlcnMoKVxuK3tcbitcdGxvY2FsIG5zPVwiJDFcIiBkZXY9XCIkMlwiXG4rXHRsb2NhbCBvdXQgY250XG4rXG4rXHRvdXQ9JChuc3ggXCIkbnNcIiBcImlwIC1zIGxpbmsgc2hvdyAkZGV2XCIgfCBcXFxuK1x0XHRhd2sgJy9eICtUWDove2dldGxpbmU7IHByaW50ICQxLCAkMn0nKVxuK1x0Y250PSQoZWNobyBcIiRvdXRcIiB8IGdyZXAgLWMgJ15bMC05XSogWzAtOV0qJCcpXG4rXHRpZiBbIFwiJGNudFwiIC1uZSAxIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGNhbm5vdCBwYXJzZSBUWCBjb3VudGVycyBvZiAkbnMvJGRldlwiIFxcXG4rXHRcdFx0XCIocmVjb3Jkcz0kY250KVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0ZWNobyBcIiRvdXRcIlxuK1x0cmV0dXJuIDBcbit9XG4rXG4rZXZhbF9jb3VudGVyX2RlbHRhKClcbit7XG4rXHRsb2NhbCBuYW1lPVwiJDFcIiBiMD1cIiQyXCIgcDA9XCIkM1wiIGIxPVwiJDRcIiBwMT1cIiQ1XCIgb3A9XCIkNlwiIGxpbWl0PVwiJDdcIlxuK1x0bG9jYWwgYmQgcGRcbitcbitcdGlmICEgW1sgXCIkYjBcIiA9fiBeWzAtOV0rJCBcdTAwMjZcdTAwMjYgXCIkYjFcIiA9fiBeWzAtOV0rJCBcdTAwMjZcdTAwMjYgXFxcbitcdFx0XCIkcDBcIiA9fiBeWzAtOV0rJCBcdTAwMjZcdTAwMjYgXCIkcDFcIiA9fiBeWzAtOV0rJCBdXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogbm9uLW51bWVyaWMgY291bnRlciBpbnB1dCBmb3IgJG5hbWVcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm4gMVxuK1x0ZmlcbitcdGJkPSQoKGIxIC0gYjApKVxuK1x0cGQ9JCgocDEgLSBwMCkpXG4rXHRpZiBbIFwiJGJkXCIgLWx0IDAgXSB8fCBbIFwiJHBkXCIgLWxlIDAgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogY291bnRlciBkZWx0YSBpbnZhbGlkIGZvciAkbmFtZVwiIFxcXG4rXHRcdFx0XCIoYnl0ZXM9JGJkIHBrdHM9JHBkKVwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1x0aWYgWyBcIiRvcFwiID0gXCJndFwiIF07IHRoZW5cbitcdFx0aWYgWyBcIiRiZFwiIC1sZSAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXHUwMDNjPSAkbGltaXRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRcdHJldD0xXG4rXHRcdFx0cmV0dXJuIDFcbitcdFx0ZmlcbitcdGVsc2VcbitcdFx0aWYgWyBcIiRiZFwiIC1ndCAkKChwZCAqIGxpbWl0KSkgXTsgdGhlblxuK1x0XHRcdGVjaG8gXCJGQUlMOiAkbmFtZSBieXRlcy9wYWNrZXRzICRiZC8kcGQgXHUwMDNlICRsaW1pdFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdFx0cmV0PTFcbitcdFx0XHRyZXR1cm4gMVxuK1x0XHRmaVxuK1x0ZmlcbitcdGVjaG8gXCJJTkZPOiAkbmFtZSBjb3VudGVyIGRlbHRhIGJ5dGVzPSRiZCBwYWNrZXRzPSRwZFwiIFxcXG4rXHRcdFwiKG9wICRvcCBsaW1pdCAkbGltaXQpIFsgT0sgXVwiXG4rXHRyZXR1cm4gMFxuK31cbitcbitkb190c29fc3RyZWFtX3Rlc3QoKVxuK3tcbitcdGxvY2FsIG91dCBzZW5kZXJfcmV0ciBzZXJ2ZXJfcmNcbitcdGxvY2FsIHNhbl9iMCBzYW5fcDAgc2FuX2IxIHNhbl9wMVxuK1x0bG9jYWwgYV9iMCBhX3AwIGFfYjEgYV9wMSBiX2IwIGJfcDAgYl9iMSBiX3AxXG4rXG4rXHRlY2hvIFwiSU5GTzogRW5hYmxpbmcgVFNPL0dTTyBvbiB0aGUgU0FOIGludGVyZmFjZS5cIlxuK1x0bnN4IFwiJG5zX3NhblwiIFwiZXRodG9vbCAtSyBzMCB0c28gb24gZ3NvIG9uXCJcbitcdGNoZWNrX2ZlYXR1cmUgXCIkbnNfc2FuXCIgczAgdGNwLXNlZ21lbnRhdGlvbi1vZmZsb2FkIG9uXG4rXHRzdG9wX2lmX2Vycm9yIFwiQ291bGQgbm90IGVuYWJsZSBUU08gb24gdGhlIFNBTiBpbnRlcmZhY2UuXCJcbitcbitcdGVjaG8gXCJJTkZPOiBSdW5uaW5nIDEwcyBUQ1Agc3RyZWFtIFNBTiAtXHUwMDNlIHBlZXIgdGhyb3VnaCB0aGUgSFNSIERVVC5cIlxuK1x0c3RhcnRfaXBlcmZfc2VydmVyIHx8IHJldHVyblxuK1xuK1x0IyBDb3VudGVyIHNuYXBzaG90cyBhcm91bmQgdGhlIHN0cmVhbSB3aW5kb3cuIFRoZSBTQU4tc2lkZSBhdmVyYWdlXG4rXHQjIG11c3QgZXhjZWVkIFNBTl9BVkdfTUlOIChhZ2dyZWdhdGUgcHJvb2YgdGhhdCBHU08gc3VwZXItcGFja2V0c1xuK1x0IyByZWFsbHkgbGVmdCB0aGUgU0FOKTsgZWFjaCBEVVQgTEFOIGxlZyBtdXN0IHN0YXkgdW5kZXIgTEFOX0FWR19NQVhcbitcdCMgKGFnZ3JlZ2F0ZSBwcm9vZiB0aGF0IGJ1bGsgb3V0cHV0IHdhcyBzZWdtZW50ZWQgcGVyLWZyYW1lKS4gVGhlc2VcbitcdCMgYXJlIGFnZ3JlZ2F0ZSBkaXNjcmltaW5hdG9ycywgbm90IGEgcGVyLWZyYW1lIG1heGltdW0gcHJvb2YuXG4rXHRzYW5fYjA9MDsgc2FuX3AwPTA7IGFfYjA9MDsgYV9wMD0wOyBiX2IwPTA7IGJfcDA9MFxuK1x0cmVhZCAtciBzYW5fYjAgc2FuX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19zYW5cIiBzMClcbitFT0ZcbitcdHJlYWQgLXIgYV9iMCBhX3AwIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2EpXG4rRU9GXG4rXHRyZWFkIC1yIGJfYjAgYl9wMCBcdTAwM2NcdTAwM2NFT0ZcbiskKHJlYWRfdHhfY291bnRlcnMgXCIkbnNfZHV0XCIgZF9iKVxuK0VPRlxuK1x0aWYgISB2YWxpZF9kZWNpbWFscyBcIiRzYW5fYjBcIiBcIiRzYW5fcDBcIiBcIiRhX2IwXCIgXCIkYV9wMFwiIFxcXG4rXHRcdFwiJGJfYjBcIiBcIiRiX3AwXCI7IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGJhc2VsaW5lIFRYIGNvdW50ZXIgc25hcHNob3QgaW52YWxpZFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVybiAxXG4rXHRmaVxuK1xuK1x0IyByYXRlLWNhcHBlZDogdGhlIFBSSU1BUlkgZGlzY3JpbWluYXRvciBpcyB0aGUgY291bnRlciBpbmVxdWFsaXR5XG4rXHQjIGFib3ZlLCBub3QgbWF4IHRocm91Z2hwdXQ7IHJldHJhbnNtaXRzIGFyZSBpbmZvcm1hdGlvbmFsIG9ubHkuXG4rXHQjIFVuY2FwcGVkIHJ1bnMgZmxhcCBhdCBWTS9DSSBlZGdlIHJhdGVzIHdpdGhvdXQgaW5kaWNhdGluZyBhXG4rXHQjIGZ1bmN0aW9uYWwgcHJvYmxlbS5cbitcdGlmICEgb3V0PSQobnN4IFwiJG5zX3NhblwiIFwidGltZW91dCA2MCBpcGVyZjMgLWMgJHBlZXJfaXAgLU0gMTQ0NiBcXFxuK1x0XHQtYiAyRyAtdCAxMFwiIDJcdTAwM2VcdTAwMjYxKTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIGNsaWVudCBmYWlsZWQ6XCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0ZWNobyBcIiRvdXRcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRyZXQ9MVxuK1x0XHRyZXR1cm5cbitcdGZpXG4rXG4rXHRyZWFkIC1yIHNhbl9iMSBzYW5fcDEgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX3NhblwiIHMwKVxuK0VPRlxuK1x0cmVhZCAtciBhX2IxIGFfcDEgXHUwMDNjXHUwMDNjRU9GXG4rJChyZWFkX3R4X2NvdW50ZXJzIFwiJG5zX2R1dFwiIGRfYSlcbitFT0ZcbitcdHJlYWQgLXIgYl9iMSBiX3AxIFx1MDAzY1x1MDAzY0VPRlxuKyQocmVhZF90eF9jb3VudGVycyBcIiRuc19kdXRcIiBkX2IpXG4rRU9GXG4rXHRpZiAhIHZhbGlkX2RlY2ltYWxzIFwiJHNhbl9iMVwiIFwiJHNhbl9wMVwiIFwiJGFfYjFcIiBcIiRhX3AxXCIgXFxcbitcdFx0XCIkYl9iMVwiIFwiJGJfcDFcIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogZmluYWwgVFggY291bnRlciBzbmFwc2hvdCBpbnZhbGlkXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuIDFcbitcdGZpXG4rXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJTQU4gczAgVFhcIiBcIiRzYW5fYjBcIiBcIiRzYW5fcDBcIiBcIiRzYW5fYjFcIiBcIiRzYW5fcDFcIiBcXFxuK1x0XHRndCBcIiRTQU5fQVZHX01JTlwiXG4rXHRldmFsX2NvdW50ZXJfZGVsdGEgXCJEVVQgZF9hIFRYXCIgXCIkYV9iMFwiIFwiJGFfcDBcIiBcIiRhX2IxXCIgXCIkYV9wMVwiIFxcXG4rXHRcdGxlIFwiJExBTl9BVkdfTUFYXCJcbitcdGV2YWxfY291bnRlcl9kZWx0YSBcIkRVVCBkX2IgVFhcIiBcIiRiX2IwXCIgXCIkYl9wMFwiIFwiJGJfYjFcIiBcIiRiX3AxXCIgXFxcbitcdFx0bGUgXCIkTEFOX0FWR19NQVhcIlxuK1x0WyBcIiR7cmV0Oi0wfVwiIC1lcSAwIF0gfHwgcmV0dXJuXG4rXG4rXHQjIHN1Y2Nlc3MgcGF0aDogdGhlIG9uZS1zaG90IHNlcnZlciBleGl0cyBieSBpdHNlbGY7IHJlYXAgdGhlXG4rXHQjIHdyYXBwZXIsIHRoZW4gUkVRVUlSRSB0aGUgcmNmaWxlIHdpdGggdGhlIHNlcnZlcidzIHJlYWwgc3RhdHVzXG4rXHR3YWl0IFwiJHtzZXJ2ZXJfd3JhcHBlcn1cIlxuK1x0c2VydmVyX3dyYXBwZXI9XCJcIlxuK1x0aWYgWyAhIC1zIFwiJHtyY2ZpbGV9XCIgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBzdGF0dXMgZmlsZSBtaXNzaW5nICgke3JjZmlsZX0pXCIgMVx1MDAzZVx1MDAyNjJcbitcdFx0cmV0PTFcbitcdFx0cmV0dXJuXG4rXHRmaVxuK1x0c2VydmVyX3JjPSQoY2F0IFwiJHtyY2ZpbGV9XCIpXG4rXHRpZiAhIFtbIFwiJHNlcnZlcl9yY1wiID1+IF5bMC05XSskIF1dIHx8IFsgXCIkc2VydmVyX3JjXCIgLW5lIDAgXTsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogaXBlcmYzIHNlcnZlciBleGl0ZWQgd2l0aCByYz0nJHtzZXJ2ZXJfcmN9J1wiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdGlwZXJmX3BpZD1cIlwiXG4rXG4rXHQjIHNlY29uZGFyeSBoZWFsdGggc2lnbmFsIG9ubHk6IGFuY2hvcmVkLCBzaW5nbGUtbWF0Y2gsIG51bWVyaWMg4oCUXG4rXHQjIGFueSBwYXJzZSBhbm9tYWx5IGlzIGEgbG91ZCBGQUlMLCBidXQgdGhlIHZhbHVlIGl0c2VsZiBubyBsb25nZXJcbitcdCMgZ2F0ZXMgKHRoZSBjb3VudGVyIGluZXF1YWxpdGllcyBhYm92ZSBhcmUgdGhlIHByaW1hcnkgZXZpZGVuY2UpLlxuK1x0c2VuZGVyX3JldHI9JChlY2hvIFwiJG91dFwiIHwgYXdrICcvc2VjIC4qIHNlbmRlciQvIHtwcmludCAkKE5GLTEpfScpXG4rXHRpZiBbIFwiJChlY2hvIFwiJHNlbmRlcl9yZXRyXCIgfCBncmVwIC1FYyAnXlswLTldKyQnKVwiIC1uZSAxIF07IHRoZW5cbitcdFx0ZWNobyBcIkZBSUw6IGNhbm5vdCBwYXJzZSBzZW5kZXIgcmV0cmFuc21pdHMgcmVsaWFibHlcIiAxXHUwMDNlXHUwMDI2MlxuK1x0XHRlY2hvIFwiJG91dFwiIDFcdTAwM2VcdTAwMjYyXG4rXHRcdHJldD0xXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdGVjaG8gXCJJTkZPOiBUQ1Agc3RyZWFtIGRvbmU7XCIgXFxcbitcdFx0XCJzZW5kZXIgcmV0cmFuc21pdHM9JHNlbmRlcl9yZXRyIChzZWNvbmRhcnkgc2lnbmFsKVwiXG4rXHRlY2hvIFwiJG91dFwiIHwgZ3JlcCAtRSBcInNlbmRlcnxyZWNlaXZlclwiXG4rfVxuK1xuK2NoZWNrX3ByZXJlcXVpc2l0ZXNcbitjaGVja190b29sIGV0aHRvb2xcbitjaGVja190b29sIGlwZXJmM1xuK2NoZWNrX3Rvb2wgdGltZW91dFxuK1xuKyMgaXByb3V0ZTIgbXVzdCBrbm93IHRoZSBIU1IgaW50ZXJsaW5rIHN5bnRheC5cbitpZiAhIGlwIGxpbmsgaGVscCBoc3IgMlx1MDAzZVx1MDAyNjEgfCBncmVwIC1xaSBpbnRlcmxpbms7IHRoZW5cbitcdGVjaG8gXCJTS0lQOiBpcHJvdXRlMiBoYXMgbm8gSFNSIGludGVybGluayBzdXBwb3J0XCJcbitcdGV4aXQgJGtzZnRfc2tpcFxuK2ZpXG4rXG4rc2V0dXBfdG9wb1xuK1xuK2VjaG8gXCJJTkZPOiBJbml0aWFsIHZhbGlkYXRpb24gcGluZyAoU0FOIC1cdTAwM2UgcGVlciB0aHJvdWdoIHRoZSBEVVQpLlwiXG4rZG9fcGluZyBcIiRuc19zYW5cIiBcIiRwZWVyX2lwXCJcbitzdG9wX2lmX2Vycm9yIFwiSW5pdGlhbCB2YWxpZGF0aW9uIGZhaWxlZC5cIlxuK1xuK2RvX2dyb19mZWF0dXJlX2NoZWNrc1xuK2RvX3Rzb19zdHJlYW1fdGVzdFxuK3N0b3BfaWZfZXJyb3IgXCJHU08gc3VwZXItcGFja2V0IHN0cmVhbSB0ZXN0IGZhaWxlZC5cIlxuK1xuK2VjaG8gXCJJTkZPOiBBbGwgZ29vZC5cIlxuK2NsZWFudXBcbitleGl0ICRyZXRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjMwLjA1MzU1NjM3MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Njk2OTkzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHUk8gRGlzYWJsaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgaW50cm9kdWNlcyBgbmV0aWZfZGlzYWJsZV9ncm9gIGFuZCBgZGV2X2Rpc2FibGVfZ3JvYCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGZpbGVzLCBzcGVjaWZpY2FsbHkgYG5ldC9jb3JlL2Rldi5jYCBhbmQgYG5ldC9jb3JlL2Rldl9hcGkuY2AuIFRoYXQncyBhIHByZXR0eSBsb3ctbGV2ZWwgY2hhbmdlLCBpbXBhY3RpbmcgZnVuZGFtZW50YWwgbmV0d29yayBkZXZpY2UgYmVoYXZpb3IuIFRoZW4sIGl0IHRvdWNoZXMgSFNSIC0gSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAtIGNvZGU6IGBuZXQvaHNyL2hzcl9kZXZpY2UuY2AsIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgLCBhbmQgYG5ldC9oc3IvaHNyX3NsYXZlLmNgLiBMb29rcyBsaWtlIGl0J3MgYWRkaW5nIHN1cHBvcnQgZm9yIEdTTyBzdXBlci1wYWNrZXRzIGluIHRoZSBIU1IgY29udGV4dC4gQW5kIHRoZXJlJ3MgYSBzZWxmdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3JfZ3JvX3N1cGVycGFja2V0LnNoYCwgd2hpY2ggaXMgZ29vZCB0byBzZWU7IGEgdGVzdCBzdWl0ZSBpcyBjcnVjaWFsIGhlcmUuXG5cbkZyb20gYSBxdWljayBnbGFuY2UsIHRoaXMgaXMgYSBwcmV0dHkgaW50ZXJlc3RpbmcgZnVuY3Rpb25hbCBwYXRjaC4gTW9kaWZ5aW5nIGJvdGggY29yZSBuZXR3b3JraW5nIGFuZCBzcGVjaWZpYyBkcml2ZXIgY29kZSwgcGFydGljdWxhcmx5IG9uZSBkZWFsaW5nIHdpdGggcmVkdW5kYW5jeSBhbmQgcG90ZW50aWFsbHkgY29tcGxleCBmb3J3YXJkaW5nIGxvZ2ljIG1ha2VzIG1lIHRoaW5rIHRoaXMgc2hvdWxkIGJlIGZ1enplZCB0aG9yb3VnaGx5LiBUaGUgY2hhbmdlcyB0byBgZGV2X2Rpc2FibGVfZ3JvYCBpbiBjb3JlIGFuZCBgbmV0L2hzci8qYCBpbmRpY2F0ZSBpdCBtYXkgaW50ZXJhY3Qgd2l0aCBvdGhlciBuZXR3b3JraW5nIGZ1bmN0aW9ucy5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgQ09ORklHIG9wdGlvbnMgYXJlIGludm9sdmVkLiBTaW5jZSB0aGUgSFNSIGNvZGUgaXMgaW4gYG5ldC9oc3IvYCwgSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9oc3IvS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgbmV0L0tjb25maWdgIHRvIHNlZSB3aGF0IGFjdHVhbGx5IGVuYWJsZXMgdGhlIEhTUiBmdW5jdGlvbmFsaXR5LiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIHVzIHRhcmdldCBvdXIgZnV6emluZyBhbmQgdGVzdGluZyBlZmZvcnRzIG1vcmUgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTYwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDY6MzUuNzIzMjU5NDY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2MTYxNDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIU1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL0tjb25maWctNS1cXG5uZXQvaHNyL0tjb25maWc6Njpjb25maWcgSFNSXFxubmV0L2hzci9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kgKEhTUiBcXHUwMDI2IFBSUClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjM1Ljc4OTQyNjc1MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTAxMDE3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDT05GSUdfSFNSIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGBDT05GSUdfSFNSYCBpcyB0aGUgYmlnIG9uZS4gVGhhdCdzIHdoZXJlIHdlIHN0YXJ0LCBvZiBjb3Vyc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LCBvciB0d2Vha2luZyByZWxhdGVkIHNldHRpbmdzLCBJJ3ZlIGdvdCB0byBlbnN1cmUgSSBoYXZlIGEgc29saWQgZ3Jhc3Agb24gd2hhdCBvdGhlciBjb21wb25lbnRzLCBmZWF0dXJlcywgb3IgYXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9ucyBpdCBtaWdodCBoaW5nZSB1cG9uLiBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXM/IERvZXMgaXQgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0LCBrZXJuZWwgbW9kdWxlcywgb3Igb3RoZXIgY29uZmlnIG9wdGlvbnMgdG8gYmUgYWN0aXZlPyBPciBwb3RlbnRpYWxseSBjb25mbGljdHM/IEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcywgYm90aCBleHBsaWNpdCBhbmQgaW1wbGljaXQsIHRvIGZvcm0gdGhlIGJlc3QgYW5kIGNvbXBsZXRlIG1lbnRhbCBtb2RlbC4gR290dGEgbWFrZSBzdXJlIGl0IHdpbGwgbm90IGludHJvZHVjZSBjb25mbGljdHMsIGJlZm9yZSBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NjozOC45OTk1MzI0MDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaHNyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgSUVDIDYyNDM5LTMgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeVxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgSFNSXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgVGhpcyBlbmFibGVzIElFQyA2MjQzOSBkZWZpbmVkIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzXFxuICAxMDpcXHRcXHQgIFJlZHVuZGFuY3kgKEhTUikgYW5kIFBhcmFsbGVsIFJlZHVuZGFuY3kgUHJvdG9jb2wgKFBSUCkuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhXFxuICAxMzpcXHRcXHQgIERBTkggKFxcXCJEb3VibHkgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgSFNSXFxcIikgb3IgREFOUCAoXFxcIkRvdWJseVxcbiAgMTQ6XFx0XFx0ICBhdHRhY2hlZCBub2RlIGltcGxlbWVudGluZyBQUlBcXFwiKS4gRm9yIHRoaXMgdG8gd29yaywgeW91ciBMaW51eCBib3hcXG4gIDE1OlxcdFxcdCAgbmVlZHMgKGF0IGxlYXN0KSB0d28gcGh5c2ljYWwgRXRoZXJuZXQgaW50ZXJmYWNlcy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBGb3IgREFOSCwgaXQgbXVzdCBiZSBjb25uZWN0ZWQgYXMgYSBub2RlIGluIGEgcmluZyBuZXR3b3JrIHRvZ2V0aGVyXFxuICAxODpcXHRcXHQgIHdpdGggb3RoZXIgSFNSIGNhcGFibGUgbm9kZXMuIEFsbCBFdGhlcm5ldCBmcmFtZXMgc2VudCBvdmVyIHRoZSBIU1JcXG4gIDE5OlxcdFxcdCAgZGV2aWNlIHdpbGwgYmUgc2VudCBpbiBib3RoIGRpcmVjdGlvbnMgb24gdGhlIHJpbmcgKG92ZXIgYm90aCBzbGF2ZVxcbiAgMjA6XFx0XFx0ICBwb3J0cyksIGdpdmluZyBhIHJlZHVuZGFudCwgaW5zdGFudCBmYWlsLW92ZXIgbmV0d29yay4gRWFjaCBIU1Igbm9kZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NjozOC45OTk2MDY1MzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMxNzI2ODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1JPIERpc2FibGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggZG9lc24ndCBhcHBlYXIgdG8gYmUgaW50cm9kdWNpbmcgYW55dGhpbmcgcGFydGljdWxhcmx5IGV4b3RpYyBpbiB0ZXJtcyBvZiBkZXBlbmRlbmNpZXMg4oCTIGp1c3Qgc3RhbmRhcmQgbmV0d29ya2luZyBjb21wb25lbnRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpbXBhY3RlZC4gSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIGBuZXQvY29yZS9kZXYuY2AgYW5kIGBuZXQvY29yZS9kZXZfYXBpLmNgLiBNeSBhaW0gaXMgdG8gbG9jYXRlIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIGludGVncmF0ZWQuXG5cbkFoLCB5ZXMsIGl0IGxvb2tzIGxpa2UgYGRldl9kaXNhYmxlX2dyb2AgaXMgaW5kZWVkIGFkZGVkIGFuZCBleHBvc2VkLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBpdCBiZWluZyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggZXhpc3RpbmcgbG9naWMuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AsIHNwZWNpZmljYWxseSB0aGUgYGhzcl9mb3J3YXJkX3NrYmAgZnVuY3Rpb24uIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEknbGwgaGF2ZSB0byBkZWx2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gc2VlIHByZWNpc2VseSBob3cgR1JPIGRpc2FibGVtZW50IGlzIGJlaW5nIGludm9rZWQgYW5kIHdoeSwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgZm9yd2FyZGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBmb3IgZGlzYWJsaW5nIEdSTyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBXaGF0IGltcGFjdCBkb2VzIHRoYXQgaGF2ZSBvbiBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHk/IEknbGwgbmVlZCB0byBkaWcgaW50byBgaHNyX2ZvcndhcmRfc2tiYCB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjQzLjIzMTMzNTY5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk2MTQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjI0PXN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNC1cXHRcXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIzNTpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNi1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9MjkxPXN0YXRpYyB2b2lkIHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2MC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozNjE6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzYyLX1cXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2ND1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM5OC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzozOTk6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDAtfVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTY3OD1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNS0vKiBNdXN0IGJlIGNhbGxlZCBob2xkaW5nIHJjdSByZWFkIGxvY2sgKGJlY2F1c2Ugb2YgdGhlIHBvcnQgcGFyYW1ldGVyKSAqL1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3MzY6c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfc2tiX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTczNy17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzY4LSAqL1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3Njk6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzAte1xcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3My1cXHRpZiAobGlrZWx5KCFza2JfaXNfZ3NvKHNrYikpKSB7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc3NDpcXHRcXHRoc3JfZm9yd2FyZF9za2Jfb25lKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODAyLVxcdFxcdHNlZ3MtXFx1MDAzZW5leHQgPSBOVUxMO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo4MDM6XFx0XFx0aHNyX2ZvcndhcmRfc2tiX29uZShzZWdzLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtODA0LVxcdFxcdHNlZ3MgPSBuZXh0O1xcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE1LVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaDoxNjp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xNy1zdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM9MjQ9c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuLS1cXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTc1LVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM6NzY6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYy03Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDY6NDMuMjc3MzAyMzI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1NzcxNjc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgVHJhZmZpYyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNvdXBsZSBvZiBrZXkgZnVuY3Rpb25hbGl0aWVzLiBGaXJzdCwgaXQncyBhZGRpbmcgYGhzcl9mb3J3YXJkX3NrYmAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGFzIHJlbGF0ZWQgdG8gR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSBhbmQsIHNwZWNpZmljYWxseSwgdGhlIHByb2Nlc3Mgb2YgaGFuZGxpbmcgdGhvc2UgbGFyZ2UgXCJzdXBlci1wYWNrZXRzLlwiIEl0IHNvdW5kcyBsaWtlIHdlJ3JlIHVuZm9sZGluZyB0aGVzZSwgbGlrZWx5IHRvIGRlYWwgd2l0aCB0aGVtIGFwcHJvcHJpYXRlbHkgd2l0aGluIHRoZSBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IpIGNvbnRleHQuXG5cblRoZW4gd2UndmUgZ290IGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gLiBUaGVzZSBhcmUgY2xlYXJseSBhYm91dCBkaXNhYmxpbmcgR1JPIGF0IGRpZmZlcmVudCBsZXZlbHMg4oCTIGRldmljZSBhbmQgbmV0d29yayBpbnRlcmZhY2UsIHJlc3BlY3RpdmVseS4gVGhpcyB0cmlnZ2VycyBhIHF1ZXN0aW9uOyB3aHkgYXJlIHdlIGRpc2FibGluZyBHUk8/IElzIGl0IGR1ZSB0byBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9yIGNvbmZsaWN0cyB3aXRoaW4gdGhlIEhTUiBpbXBsZW1lbnRhdGlvbiwgb3IgcGVyaGFwcyB0byBlbnN1cmUgc3BlY2lmaWMgcGFja2V0IGhhbmRsaW5nIGJlaGF2aW91cj8gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdGhlcmUuXG5cblRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgb3ZlcmFsbCBmbG93LCBsZXQgbWUgcXVpY2tseSByZWZvY3VzIG9uIHRoZSBwcm92aWRlZCBrZXkgc3ltYm9sczogYGhzcl9mb3J3YXJkX3NrYmAsIGFzIG1lbnRpb25lZC4gQW5kIHRoZW4sIGl0IG1lbnRpb25zIHRoZSBkaXNhYmxpbmcgZnVuY3Rpb25zLCBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYC4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBgaHNyX2Rldl94bWl0YCBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIHBvaW50cy4gVGhleSdyZSBsaWtlbHkgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIEhTUi1zcGVjaWZpYyBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24sIHNvIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBhcmUgdGhlIGNvcnJlY3QgYW5kIGV4cGVjdGVkIHBsYWNlcyB3aGVyZSB0aGlzIGxvZ2ljIGludGVncmF0ZXMuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2ggb2YgdGhvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjQ3LjkzNTAyMTY2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NjEwOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2Rldl94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2RldmljZS5jPTIxNj1zdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgaHNyX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjIzLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIyNDpzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtMjI1LXtcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTU5OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhzcl9kZXZpY2Vfb3BzID0ge1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjAxLVxcdC5uZG9fc3RvcCA9IGhzcl9kZXZfY2xvc2UsXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjAyOlxcdC5uZG9fc3RhcnRfeG1pdCA9IGhzcl9kZXZfeG1pdCxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MDMtXFx0Lm5kb19jaGFuZ2VfcnhfZmxhZ3MgPSBoc3JfY2hhbmdlX3J4X2ZsYWdzLFxcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9NjY0PWJvb2wgaXNfaHNyX21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2NS17XFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjY2OlxcdHJldHVybiAoZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RhcnRfeG1pdCA9PSBoc3JfZGV2X3htaXQpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY2Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ2OjQ3Ljk4MDY5MDk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTIzMDg4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSFNSIERldmljZSBUcmFuc21pc3Npb24gYW5kIFJlY2VwdGlvbioqXG5cbkFscmlnaHQsIHNvIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBoc3JfZGV2X3htaXRgIGlzIGVzc2VudGlhbGx5IHRoZSBIU1Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYG5kb19zdGFydF94bWl0YC4gSW4gb3RoZXIgd29yZHMsIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgYWN0dWFsIHRyYW5zbWlzc2lvbiBvZiBmcmFtZXMgZm9yIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgZGV2aWNlcy4gU28sIHdoZW4gYSBmcmFtZSBuZWVkcyB0byBnbyBvdXQgb250byB0aGUgSFNSIG5ldHdvcmssIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBnZXR0aW5nIGNhbGxlZC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYW5zbWlzc2lvbiBmb3IgSFNSIGRldmljZXMuIE9uIHRoZSBvdGhlciBzaWRlLCBmb3IgcmVjZWl2aW5nLCBgaHNyX2hhbmRsZV9mcmFtZWAgaXMgdGhlIHJlZ2lzdGVyZWQgaGFuZGxlciBmb3IgdGhlIFJYIHByb2Nlc3MuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHByb2Nlc3NpbmcgaW5jb21pbmcgSFNSIGZyYW1lcy4gR290IGl0LiBOb3csIHRoZSBrZXkgaXMgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyIHRvIGFjaGlldmUgdGhlIHNlYW1sZXNzIHJlZHVuZGFuY3kgdGhhdCBIU1IgaXMga25vd24gZm9yLCBhbmQgdGhlIGRldGFpbHMgb2YgdGhhdCBhcmUgY3JpdGljYWwgdG8gYW5hbHl6ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1OTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0Njo1MS40NzMwMDM3MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODU1MzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzcl9oYW5kbGVfZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9NzEzPWludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy03MzktXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NzQwOlxcdC8qIE1ha2Ugc3VyZSB3ZSByZWNvZ25pemUgZnJhbWVzIGZyb20gb3Vyc2VsdmVzIGluIGhzcl9oYW5kbGVfZnJhbWUoKSAqL1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTc0MS1cXHRyZXMgPSBoc3JfY3JlYXRlX3NlbGZfbm9kZShoc3IsIGhzcl9kZXYtXFx1MDAzZWRldl9hZGRyLFxcbi0tXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYz02Nj1ib29sIGhzcl9pc19ub2RlX2luX2RiKHN0cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIsXFxuLS1cXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTcxLVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM6NzI6LyogSGVscGVyIGZvciBkZXZpY2UgaW5pdDsgdGhlIHNlbGZfbm9kZSBpcyB1c2VkIGluIGhzcl9oYW5kbGVfZnJhbWUoKSB0b1xcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtNzMtICogcmVjb2duaXplIGZyYW1lcyBmcm9tIHNlbGYgdGhhdCdzIGJlZW4gbG9vcGVkIG92ZXIgdGhlIEhTUiByaW5nLlxcbi0tXFxubmV0L2hzci9oc3JfbWFpbi5jPTMxPXN0YXRpYyBpbnQgaHNyX25ldGRldl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcXG4tLVxcbm5ldC9oc3IvaHNyX21haW4uYy05MS1cXG5uZXQvaHNyL2hzcl9tYWluLmM6OTI6XFx0XFx0LyogTWFrZSBzdXJlIHdlIHJlY29nbml6ZSBmcmFtZXMgZnJvbSBvdXJzZWx2ZXMgaW4gaHNyX2hhbmRsZV9mcmFtZSgpICovXFxubmV0L2hzci9oc3JfbWFpbi5jLTkzLVxcdFxcdHBvcnQgPSBoc3JfcG9ydF9nZXRfaHNyKGhzciwgSFNSX1BUX1NMQVZFX0IpO1xcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYz0xOT1ib29sIGhzcl9pbnZhbGlkX2Rhbl9pbmdyZXNzX2ZyYW1lKF9fYmUxNiBwcm90b2NvbClcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMjMtXFxubmV0L2hzci9oc3Jfc2xhdmUuYzoyNDpzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTI1LXtcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM9ODU9Ym9vbCBoc3JfcG9ydF9leGlzdHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg2LXtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjg3OlxcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VyeF9oYW5kbGVyKSA9PSBoc3JfaGFuZGxlX2ZyYW1lO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODgtfVxcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYz0xMzI9c3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTU5LVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM6MTYwOlxcdHJlcyA9IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyKGRldiwgaHNyX2hhbmRsZV9mcmFtZSwgcG9ydCk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYy0xNjEtXFx0aWYgKHJlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDY6NTEuNTE4ODY1Nzg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MDQ0Mzc5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEhTUiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlIGlzIGBoc3JfZm9yd2FyZF9za2JgIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmUgdGhhdCdzIGJlZW4gbW9kaWZpZWQuIEFsc28sIHRoZSBSeCBoYW5kbGVyLCBgaHNyX2hhbmRsZV9mcmFtZWAsIGlzIHZpdGFsIHRvIHRoZSBIU1IgcHJvY2Vzc2luZyBmbG93LiAgVGhleSd2ZSBhbHNvIGludHJvZHVjZWQgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2Agd2hpY2ggYXJlIGludGVyZXN0aW5nIGFkZGl0aW9ucy5cblxuVGhlIGBIU1JgIGNvbmZpZyBpcyB0aGUga2V5IHRvIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgd2hpY2ggbWFrZXMgY29tcGxldGUgc2Vuc2UuIFdlIGhhdmUgdG8gZG91YmxlIGNoZWNrIGlmIGFueSBvdGhlciBjb25maWdzIGFyZSBuZWVkZWQsIGJ1dCBzaW5jZSBgbmV0L2NvcmUvZGV2LmNgIGlzIGFsd2F5cyBjb21waWxlZCBhbmQgYG5ldC9oc3IvYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfSFNSYCBpcyBlbmFibGVkLCB0aGVuIHdlIGNhbiBjb25maWRlbnRseSBzdGF0ZSB0aGF0IGBFbmFibGVDb25maWdzYCBpcyBqdXN0IGBbXCJIU1JcIl1gLlxuXG5BcyBmb3Igd2hpY2ggZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nPyBXZWxsLCBiZXNpZGVzIGBoc3JfZm9yd2FyZF9za2JgLCB3ZSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIGFzIHRoZXNlIGFyZSBpbnRlZ3JhbCB0byB0aGUgR1JPIGRpc2FibGluZyBhc3BlY3Qgb2YgdGhlIGNoYW5nZXMgYW5kIHdvdWxkIGJlIGltcG9ydGFudCBmdXp6aW5nIHRhcmdldHMuICBCYXNlZCBvbiBteSBrbm93bGVkZ2UsIGBoc3JfZGV2X3htaXRgIHNob3VsZCBiZSBpbmNsdWRlZCBzaW5jZSBpdCBoYW5kbGVzIHRyYW5zbWlzc2lvbiwgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCBzaG91bGQgYWxzbyBiZSBpbmNsdWRlZCBhcyBpdCBpcyB0aGUgcnggaGFuZGxlci4gVGh1cywgYEZvY3VzU3ltYm9sc2AgaXMgZGVmaW5lZCBhcyBgW1wiaHNyX2ZvcndhcmRfc2tiXCIsIFwiZGV2X2Rpc2FibGVfZ3JvXCIsIFwibmV0aWZfZGlzYWJsZV9ncm9cIiwgXCJoc3JfZGV2X3htaXRcIiwgXCJoc3JfaGFuZGxlX2ZyYW1lXCJdYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBgZGV2X2Rpc2FibGVfZ3JvYCBhbmQgYG5ldGlmX2Rpc2FibGVfZ3JvYCBhcmUgZXhwb3J0ZWQ/IFllcywgYWZ0ZXIgYSBxdWljayBjaGVjayB0aGV5J3JlIGV4cG9ydGVkIGluIGBuZXQvY29yZS9kZXZfYXBpLmNgIGFuZCBgbmV0L2NvcmUvZGV2LmNgLCByZXNwZWN0aXZlbHksIHNvIHRoZXkgYXJlIGFjY2Vzc2libGUuXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIGFkZHMgZnVuY3Rpb25zIHRvIGRpc2FibGUgR1JPIGFuZCBtb2RpZmllcyB0aGUgSFNSIGRyaXZlciB0byB1bmZvbGQgR1NPIHN1cGVyLXBhY2tldHMgaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gZGlzYWJsZXMgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBuZXR3b3JraW5nIGNvcmUgYW5kIHRoZSBIU1IgZHJpdmVyLCBhbmQgYW55IHRyYWZmaWMgdGhyb3VnaCBhbiBIU1IgaW50ZXJmYWNlIGlzIGdvaW5nIHRvIHRvdWNoIHRoZXNlIG1vZGlmaWNhdGlvbnMuIFRoYXQgbWFrZXMgdGhlbSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGluZyB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgYW5kIGlzIGEgcHJldHR5IG9idmlvdXMgY29uY2x1c2lvbi5cblxuUmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTYyNiwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDY6NTkuMjIzMzA2NTM2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NTAxOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZm9yd2FyZF9za2JcIixcbiAgICBcImRldl9kaXNhYmxlX2dyb1wiLFxuICAgIFwibmV0aWZfZGlzYWJsZV9ncm9cIixcbiAgICBcImhzcl9kZXZfeG1pdFwiLFxuICAgIFwiaHNyX2hhbmRsZV9mcmFtZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYGRldl9kaXNhYmxlX2dyb2AgYW5kIGBuZXRpZl9kaXNhYmxlX2dyb2AgdG8gZGlzYWJsZSBHUk8gb24gbmV0IGRldmljZXMsIGFuZCBtb2RpZmllcyB0aGUgSFNSIGRyaXZlciB0byB1bmZvbGQgR1NPIHN1cGVyLXBhY2tldHMgaW4gYGhzcl9mb3J3YXJkX3NrYmAuIEl0IGFsc28gZGlzYWJsZXMgR1JPIG9uIEhTUiBzbGF2ZSBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbmV0d29ya2luZyBhbmQgdGhlIEhTUiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCBieSBzZW5kaW5nIHRyYWZmaWMgdGhyb3VnaCBhbiBIU1IgaW50ZXJmYWNlLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gICAgXCJkZXZfZGlzYWJsZV9ncm9cIixcbiAgICBcIm5ldGlmX2Rpc2FibGVfZ3JvXCIsXG4gICAgXCJoc3JfZGV2X3htaXRcIixcbiAgICBcImhzcl9oYW5kbGVfZnJhbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGBkZXZfZGlzYWJsZV9ncm9gIGFuZCBgbmV0aWZfZGlzYWJsZV9ncm9gIHRvIGRpc2FibGUgR1JPIG9uIG5ldCBkZXZpY2VzLCBhbmQgbW9kaWZpZXMgdGhlIEhTUiBkcml2ZXIgdG8gdW5mb2xkIEdTTyBzdXBlci1wYWNrZXRzIGluIGBoc3JfZm9yd2FyZF9za2JgLiBJdCBhbHNvIGRpc2FibGVzIEdSTyBvbiBIU1Igc2xhdmUgZGV2aWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG5ldHdvcmtpbmcgYW5kIHRoZSBIU1IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgYnkgc2VuZGluZyB0cmFmZmljIHRocm91Z2ggYW4gSFNSIGludGVyZmFjZSwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcbtpb[1] Phase: Succeeded StartedAt: 2026-08-01 15:47:11 +0000 UTC FinishedAt: 2026-08-01 15:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 15:47:11 +0000 UTC FinishedAt: 2026-08-01 15:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2] Phase: Succeeded StartedAt: 2026-08-01 15:47:11 +0000 UTC FinishedAt: 2026-08-01 19:42:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 15:47:11 +0000 UTC FinishedAt: 2026-08-01 19:42:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 15:47:11 +0000 UTC FinishedAt: 2026-08-01 15:47:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 15:47:11 +0000 UTC FinishedAt: 2026-08-01 15:47:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowcbtpb/series-workflowcbtpb-convert-artifact-679287249/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 15:47:21 +0000 UTC FinishedAt: 2026-08-01 16:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 15:47:21 +0000 UTC FinishedAt: 2026-08-01 16:09:20 +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:*8a10787b-ae06-41e6-a40d-3a4941c124f0,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-workflowcbtpb/series-workflowcbtpb-convert-artifact-679287249/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": "b6f52213-ef69-4740-8a4d-878b8fb7d96d", "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-workflowcbtpb/series-workflowcbtpb-build-action-3548230527/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 15:47:21 +0000 UTC FinishedAt: 2026-08-01 16:09:10 +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:*8a10787b-ae06-41e6-a40d-3a4941c124f0,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-workflowcbtpb/series-workflowcbtpb-convert-artifact-679287249/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": "b6f52213-ef69-4740-8a4d-878b8fb7d96d", "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-workflowcbtpb/series-workflowcbtpb-build-action-3548230527/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 16:09:20 +0000 UTC FinishedAt: 2026-08-01 16:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 16:09:20 +0000 UTC FinishedAt: 2026-08-01 16:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 16:09:20 +0000 UTC FinishedAt: 2026-08-01 16:09:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 16:09:20 +0000 UTC FinishedAt: 2026-08-01 16:09:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowcbtpb/series-workflowcbtpb-convert-artifact-4053062820/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 16:09:30 +0000 UTC FinishedAt: 2026-08-01 16:11:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 16:09:30 +0000 UTC FinishedAt: 2026-08-01 16:11:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b6f52213-ef69-4740-8a4d-878b8fb7d96d,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-workflowcbtpb/series-workflowcbtpb-build-action-3548230527/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-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 16:11:27 +0000 UTC FinishedAt: 2026-08-01 16:11:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 16:11:27 +0000 UTC FinishedAt: 2026-08-01 16:11:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 16:11:27 +0000 UTC FinishedAt: 2026-08-01 16:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 16:11:27 +0000 UTC FinishedAt: 2026-08-01 16:38:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*8a10787b-ae06-41e6-a40d-3a4941c124f0,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-workflowcbtpb/series-workflowcbtpb-convert-artifact-4053062820/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": "5a2149e9-e641-4f2d-8605-e391b1c48d4b", "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-workflowcbtpb/series-workflowcbtpb-build-action-1205029680/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 16:11:27 +0000 UTC FinishedAt: 2026-08-01 16:38:46 +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:*8a10787b-ae06-41e6-a40d-3a4941c124f0,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-workflowcbtpb/series-workflowcbtpb-convert-artifact-4053062820/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": "5a2149e9-e641-4f2d-8605-e391b1c48d4b", "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-workflowcbtpb/series-workflowcbtpb-build-action-1205029680/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 16:38:56 +0000 UTC FinishedAt: 2026-08-01 16:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 16:38:56 +0000 UTC FinishedAt: 2026-08-01 16:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 16:38:56 +0000 UTC FinishedAt: 2026-08-01 16:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 16:38:56 +0000 UTC FinishedAt: 2026-08-01 16:40:25 +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:*5a2149e9-e641-4f2d-8605-e391b1c48d4b,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-workflowcbtpb/series-workflowcbtpb-build-action-1205029680/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-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 16:40:38 +0000 UTC FinishedAt: 2026-08-01 19:42:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 16:40:38 +0000 UTC FinishedAt: 2026-08-01 19:42:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_forward_skb","dev_disable_gro","netif_disable_gro","hsr_dev_xmit","hsr_handle_frame"],"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:*b6f52213-ef69-4740-8a4d-878b8fb7d96d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a2149e9-e641-4f2d-8605-e391b1c48d4b,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-workflowcbtpb/series-workflowcbtpb-build-action-3548230527/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-workflowcbtpb/series-workflowcbtpb-build-action-1205029680/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 16:40:38 +0000 UTC FinishedAt: 2026-08-01 16:41:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 16:40:38 +0000 UTC FinishedAt: 2026-08-01 16:40:55 +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","hsr_dev_xmit","hsr_handle_frame"],"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-workflowcbtpb/series-workflowcbtpb-convert-artifact-1929119021/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 16:40:38 +0000 UTC FinishedAt: 2026-08-01 16:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 16:40:38 +0000 UTC FinishedAt: 2026-08-01 16:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 16:40:38 +0000 UTC FinishedAt: 2026-08-01 16:40:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 16:41:00 +0000 UTC FinishedAt: 2026-08-01 19:42:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcbtpb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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","hsr_dev_xmit","hsr_handle_frame"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"51b093a7ba27476e1f639455f005e8d2e75390e4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"7eb36e87-98e3-49c0-a95f-adb6c425577e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 16:41:01 +0000 UTC FinishedAt: 2026-08-01 19:41:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b6f52213-ef69-4740-8a4d-878b8fb7d96d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a2149e9-e641-4f2d-8605-e391b1c48d4b,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-workflowcbtpb/series-workflowcbtpb-build-action-3548230527/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-workflowcbtpb/series-workflowcbtpb-build-action-1205029680/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-workflowcbtpb/series-workflowcbtpb-convert-artifact-1929119021/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,}